Generated by Cython 3.0.11

Yellow lines hint at Python interaction.
Click on a line that starts with a "+" to see the C code that Cython generated for it.

Raw output: converters.c

+0001: # cython: language_level=3, embedsignature=True, initializedcheck=False
  __pyx_t_2 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_test, __pyx_t_2) < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 0002: # Copyright (C) 2018-present Jesus Lara
 0003: #
+0004: import re
  __pyx_t_2 = __Pyx_ImportDottedModule(__pyx_n_s_re, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_re, __pyx_t_2) < 0) __PYX_ERR(0, 4, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+0005: from typing import get_args, get_origin, Union, Optional, List, NewType, Literal
  __pyx_t_2 = PyList_New(7); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_INCREF(__pyx_n_s_get_args);
  __Pyx_GIVEREF(__pyx_n_s_get_args);
  if (__Pyx_PyList_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_get_args)) __PYX_ERR(0, 5, __pyx_L1_error);
  __Pyx_INCREF(__pyx_n_s_get_origin);
  __Pyx_GIVEREF(__pyx_n_s_get_origin);
  if (__Pyx_PyList_SET_ITEM(__pyx_t_2, 1, __pyx_n_s_get_origin)) __PYX_ERR(0, 5, __pyx_L1_error);
  __Pyx_INCREF(__pyx_n_s_Union);
  __Pyx_GIVEREF(__pyx_n_s_Union);
  if (__Pyx_PyList_SET_ITEM(__pyx_t_2, 2, __pyx_n_s_Union)) __PYX_ERR(0, 5, __pyx_L1_error);
  __Pyx_INCREF(__pyx_n_s_Optional);
  __Pyx_GIVEREF(__pyx_n_s_Optional);
  if (__Pyx_PyList_SET_ITEM(__pyx_t_2, 3, __pyx_n_s_Optional)) __PYX_ERR(0, 5, __pyx_L1_error);
  __Pyx_INCREF(__pyx_n_s_List);
  __Pyx_GIVEREF(__pyx_n_s_List);
  if (__Pyx_PyList_SET_ITEM(__pyx_t_2, 4, __pyx_n_s_List)) __PYX_ERR(0, 5, __pyx_L1_error);
  __Pyx_INCREF(__pyx_n_s_NewType);
  __Pyx_GIVEREF(__pyx_n_s_NewType);
  if (__Pyx_PyList_SET_ITEM(__pyx_t_2, 5, __pyx_n_s_NewType)) __PYX_ERR(0, 5, __pyx_L1_error);
  __Pyx_INCREF(__pyx_n_s_Literal);
  __Pyx_GIVEREF(__pyx_n_s_Literal);
  if (__Pyx_PyList_SET_ITEM(__pyx_t_2, 6, __pyx_n_s_Literal)) __PYX_ERR(0, 5, __pyx_L1_error);
  __pyx_t_3 = __Pyx_Import(__pyx_n_s_typing, __pyx_t_2, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_3, __pyx_n_s_get_args); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_get_args, __pyx_t_2) < 0) __PYX_ERR(0, 5, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_3, __pyx_n_s_get_origin); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_get_origin, __pyx_t_2) < 0) __PYX_ERR(0, 5, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_3, __pyx_n_s_Union); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_Union, __pyx_t_2) < 0) __PYX_ERR(0, 5, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_3, __pyx_n_s_Optional); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_Optional, __pyx_t_2) < 0) __PYX_ERR(0, 5, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_3, __pyx_n_s_List); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_List, __pyx_t_2) < 0) __PYX_ERR(0, 5, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_3, __pyx_n_s_NewType); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_NewType, __pyx_t_2) < 0) __PYX_ERR(0, 5, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_3, __pyx_n_s_Literal); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_Literal, __pyx_t_2) < 0) __PYX_ERR(0, 5, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+0006: from collections.abc import Sequence, Mapping, Callable, Awaitable
  __pyx_t_3 = PyList_New(4); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_INCREF(__pyx_n_s_Sequence);
  __Pyx_GIVEREF(__pyx_n_s_Sequence);
  if (__Pyx_PyList_SET_ITEM(__pyx_t_3, 0, __pyx_n_s_Sequence)) __PYX_ERR(0, 6, __pyx_L1_error);
  __Pyx_INCREF(__pyx_n_s_Mapping);
  __Pyx_GIVEREF(__pyx_n_s_Mapping);
  if (__Pyx_PyList_SET_ITEM(__pyx_t_3, 1, __pyx_n_s_Mapping)) __PYX_ERR(0, 6, __pyx_L1_error);
  __Pyx_INCREF(__pyx_n_s_Callable);
  __Pyx_GIVEREF(__pyx_n_s_Callable);
  if (__Pyx_PyList_SET_ITEM(__pyx_t_3, 2, __pyx_n_s_Callable)) __PYX_ERR(0, 6, __pyx_L1_error);
  __Pyx_INCREF(__pyx_n_s_Awaitable);
  __Pyx_GIVEREF(__pyx_n_s_Awaitable);
  if (__Pyx_PyList_SET_ITEM(__pyx_t_3, 3, __pyx_n_s_Awaitable)) __PYX_ERR(0, 6, __pyx_L1_error);
  __pyx_t_2 = __Pyx_Import(__pyx_n_s_collections_abc, __pyx_t_3, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_Sequence); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_Sequence, __pyx_t_3) < 0) __PYX_ERR(0, 6, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_Mapping); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_Mapping, __pyx_t_3) < 0) __PYX_ERR(0, 6, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_Callable); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_Callable, __pyx_t_3) < 0) __PYX_ERR(0, 6, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_Awaitable); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_Awaitable, __pyx_t_3) < 0) __PYX_ERR(0, 6, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+0007: import types
  __pyx_t_2 = __Pyx_ImportDottedModule(__pyx_n_s_types, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_types, __pyx_t_2) < 0) __PYX_ERR(0, 7, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+0008: from dataclasses import _MISSING_TYPE, _FIELDS, fields
  __pyx_t_2 = PyList_New(3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 8, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_INCREF(__pyx_n_s_MISSING_TYPE);
  __Pyx_GIVEREF(__pyx_n_s_MISSING_TYPE);
  if (__Pyx_PyList_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_MISSING_TYPE)) __PYX_ERR(0, 8, __pyx_L1_error);
  __Pyx_INCREF(__pyx_n_s_FIELDS);
  __Pyx_GIVEREF(__pyx_n_s_FIELDS);
  if (__Pyx_PyList_SET_ITEM(__pyx_t_2, 1, __pyx_n_s_FIELDS)) __PYX_ERR(0, 8, __pyx_L1_error);
  __Pyx_INCREF(__pyx_n_s_fields);
  __Pyx_GIVEREF(__pyx_n_s_fields);
  if (__Pyx_PyList_SET_ITEM(__pyx_t_2, 2, __pyx_n_s_fields)) __PYX_ERR(0, 8, __pyx_L1_error);
  __pyx_t_3 = __Pyx_Import(__pyx_n_s_dataclasses, __pyx_t_2, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 8, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_3, __pyx_n_s_MISSING_TYPE); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 8, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_MISSING_TYPE, __pyx_t_2) < 0) __PYX_ERR(0, 8, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_3, __pyx_n_s_FIELDS); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 8, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_FIELDS, __pyx_t_2) < 0) __PYX_ERR(0, 8, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_3, __pyx_n_s_fields); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 8, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_fields, __pyx_t_2) < 0) __PYX_ERR(0, 8, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+0009: import ciso8601
  __pyx_t_3 = __Pyx_ImportDottedModule(__pyx_n_s_ciso8601, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 9, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_ciso8601, __pyx_t_3) < 0) __PYX_ERR(0, 9, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+0010: import orjson
  __pyx_t_3 = __Pyx_ImportDottedModule(__pyx_n_s_orjson, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 10, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_orjson, __pyx_t_3) < 0) __PYX_ERR(0, 10, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+0011: from decimal import Decimal, InvalidOperation
  __pyx_t_3 = PyList_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 11, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_INCREF(__pyx_n_s_Decimal);
  __Pyx_GIVEREF(__pyx_n_s_Decimal);
  if (__Pyx_PyList_SET_ITEM(__pyx_t_3, 0, __pyx_n_s_Decimal)) __PYX_ERR(0, 11, __pyx_L1_error);
  __Pyx_INCREF(__pyx_n_s_InvalidOperation);
  __Pyx_GIVEREF(__pyx_n_s_InvalidOperation);
  if (__Pyx_PyList_SET_ITEM(__pyx_t_3, 1, __pyx_n_s_InvalidOperation)) __PYX_ERR(0, 11, __pyx_L1_error);
  __pyx_t_2 = __Pyx_Import(__pyx_n_s_decimal, __pyx_t_3, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 11, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_Decimal); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 11, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_Decimal, __pyx_t_3) < 0) __PYX_ERR(0, 11, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_InvalidOperation); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 11, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_InvalidOperation, __pyx_t_3) < 0) __PYX_ERR(0, 11, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 0012: from libc.stdio cimport sprintf, snprintf
 0013: from libc.stdlib cimport malloc, free
 0014: from cpython.mem cimport PyMem_Malloc, PyMem_Free
 0015: cimport cython
 0016: from cpython cimport datetime
 0017: from cpython.object cimport (
 0018:     PyObject_IsInstance,
 0019:     PyObject_IsSubclass,
 0020:     PyObject_HasAttr,
 0021:     PyObject_GetAttr,
 0022:     PyObject_SetAttr,
 0023:     PyObject_Call,
 0024:     PyObject_TypeCheck,
 0025:     PyCallable_Check
 0026: )
 0027: from cpython.ref cimport PyObject
+0028: from uuid import UUID
  __pyx_t_2 = PyList_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 28, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_INCREF(__pyx_n_s_UUID);
  __Pyx_GIVEREF(__pyx_n_s_UUID);
  if (__Pyx_PyList_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_UUID)) __PYX_ERR(0, 28, __pyx_L1_error);
  __pyx_t_3 = __Pyx_Import(__pyx_n_s_uuid, __pyx_t_2, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 28, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_3, __pyx_n_s_UUID); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 28, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_UUID, __pyx_t_2) < 0) __PYX_ERR(0, 28, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+0029: import asyncpg.pgproto.pgproto as pgproto
  __pyx_t_3 = __Pyx_ImportDottedModule(__pyx_n_s_asyncpg_pgproto_pgproto, __pyx_tuple__19); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 29, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_pgproto, __pyx_t_3) < 0) __PYX_ERR(0, 29, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
/* … */
  __pyx_tuple__19 = PyTuple_Pack(3, __pyx_n_s_asyncpg, __pyx_n_s_pgproto, __pyx_n_s_pgproto); if (unlikely(!__pyx_tuple__19)) __PYX_ERR(0, 29, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__19);
  __Pyx_GIVEREF(__pyx_tuple__19);
+0030: from .functions import is_iterable, is_primitive
  __pyx_t_3 = PyList_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 30, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_INCREF(__pyx_n_s_is_iterable);
  __Pyx_GIVEREF(__pyx_n_s_is_iterable);
  if (__Pyx_PyList_SET_ITEM(__pyx_t_3, 0, __pyx_n_s_is_iterable)) __PYX_ERR(0, 30, __pyx_L1_error);
  __Pyx_INCREF(__pyx_n_s_is_primitive);
  __Pyx_GIVEREF(__pyx_n_s_is_primitive);
  if (__Pyx_PyList_SET_ITEM(__pyx_t_3, 1, __pyx_n_s_is_primitive)) __PYX_ERR(0, 30, __pyx_L1_error);
  __pyx_t_2 = __Pyx_Import(__pyx_n_s_functions, __pyx_t_3, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 30, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_is_iterable); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 30, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_is_iterable, __pyx_t_3) < 0) __PYX_ERR(0, 30, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_is_primitive); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 30, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_is_primitive, __pyx_t_3) < 0) __PYX_ERR(0, 30, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+0031: from .validation import _validation
  __pyx_t_2 = PyList_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 31, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_INCREF(__pyx_n_s_validation);
  __Pyx_GIVEREF(__pyx_n_s_validation);
  if (__Pyx_PyList_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_validation)) __PYX_ERR(0, 31, __pyx_L1_error);
  __pyx_t_3 = __Pyx_Import(__pyx_n_s_validation_2, __pyx_t_2, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 31, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_3, __pyx_n_s_validation); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 31, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_validation, __pyx_t_2) < 0) __PYX_ERR(0, 31, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+0032: from .fields import Field
  __pyx_t_3 = PyList_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 32, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_INCREF(__pyx_n_s_Field);
  __Pyx_GIVEREF(__pyx_n_s_Field);
  if (__Pyx_PyList_SET_ITEM(__pyx_t_3, 0, __pyx_n_s_Field)) __PYX_ERR(0, 32, __pyx_L1_error);
  __pyx_t_2 = __Pyx_Import(__pyx_n_s_fields, __pyx_t_3, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 32, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_Field); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 32, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_Field, __pyx_t_3) < 0) __PYX_ERR(0, 32, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 0033: # New converter:
+0034: import datamodel.rs_parsers as rc
  __pyx_t_2 = __Pyx_ImportDottedModule(__pyx_n_s_datamodel_rs_parsers, __pyx_tuple__20); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 34, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_rc, __pyx_t_2) < 0) __PYX_ERR(0, 34, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
/* … */
  __pyx_tuple__20 = PyTuple_Pack(2, __pyx_n_s_datamodel, __pyx_n_s_rs_parsers); if (unlikely(!__pyx_tuple__20)) __PYX_ERR(0, 34, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__20);
  __Pyx_GIVEREF(__pyx_tuple__20);
 0035: 
+0036: cdef struct ColumnDef:
struct __pyx_t_9datamodel_10converters_ColumnDef {
  char const *name;
  PyObject *field;
};
 0037:     const char* name
 0038:     PyObject* field
 0039: 
+0040: cdef bint is_dc(object obj):
static int __pyx_f_9datamodel_10converters_is_dc(PyObject *__pyx_v_obj) {
  PyObject *__pyx_v_cls = NULL;
  int __pyx_r;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_AddTraceback("datamodel.converters.is_dc", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_cls);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 0041:     """Returns True if obj is a dataclass or an instance of a
 0042:     dataclass."""
+0043:     cls = obj if isinstance(obj, type) and not isinstance(obj, types.GenericAlias) else type(obj)
  __pyx_t_3 = PyType_Check(__pyx_v_obj); 
  if (__pyx_t_3) {
  } else {
    __pyx_t_2 = __pyx_t_3;
    goto __pyx_L3_bool_binop_done;
  }
  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_types); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 43, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_GenericAlias); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 43, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_3 = PyObject_IsInstance(__pyx_v_obj, __pyx_t_5); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(0, 43, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_6 = (!__pyx_t_3);
  __pyx_t_2 = __pyx_t_6;
  __pyx_L3_bool_binop_done:;
  if (__pyx_t_2) {
    __Pyx_INCREF(__pyx_v_obj);
    __pyx_t_1 = __pyx_v_obj;
  } else {
    __Pyx_INCREF(((PyObject *)Py_TYPE(__pyx_v_obj)));
    __pyx_t_1 = ((PyObject *)Py_TYPE(__pyx_v_obj));
  }
  __pyx_v_cls = __pyx_t_1;
  __pyx_t_1 = 0;
+0044:     return PyObject_HasAttr(cls, '__dataclass_fields__')
  __pyx_r = PyObject_HasAttr(__pyx_v_cls, __pyx_n_u_dataclass_fields);
  goto __pyx_L0;
 0045: 
+0046: cdef bint is_empty(object value):
static int __pyx_f_9datamodel_10converters_is_empty(PyObject *__pyx_v_value) {
  int __pyx_v_result;
  int __pyx_r;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("datamodel.converters.is_empty", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+0047:     cdef bint result = False
  __pyx_v_result = 0;
+0048:     if value is None:
  __pyx_t_1 = (__pyx_v_value == Py_None);
  if (__pyx_t_1) {
/* … */
  }
+0049:         return True
    __pyx_r = 1;
    goto __pyx_L0;
+0050:     if PyObject_IsInstance(value, _MISSING_TYPE) or value == _MISSING_TYPE:
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_MISSING_TYPE); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 50, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = PyObject_IsInstance(__pyx_v_value, __pyx_t_2); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(0, 50, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (!__pyx_t_3) {
  } else {
    __pyx_t_1 = __pyx_t_3;
    goto __pyx_L5_bool_binop_done;
  }
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_MISSING_TYPE); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 50, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_4 = PyObject_RichCompare(__pyx_v_value, __pyx_t_2, Py_EQ); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 50, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely((__pyx_t_3 < 0))) __PYX_ERR(0, 50, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_1 = __pyx_t_3;
  __pyx_L5_bool_binop_done:;
  if (__pyx_t_1) {
/* … */
    goto __pyx_L4;
  }
+0051:         result = True
    __pyx_v_result = 1;
+0052:     elif PyObject_IsInstance(value, str) and value == '':
  __pyx_t_3 = PyObject_IsInstance(__pyx_v_value, ((PyObject *)(&PyUnicode_Type))); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(0, 52, __pyx_L1_error)
  if (__pyx_t_3) {
  } else {
    __pyx_t_1 = __pyx_t_3;
    goto __pyx_L7_bool_binop_done;
  }
  __pyx_t_3 = (__Pyx_PyUnicode_Equals(__pyx_v_value, __pyx_kp_u__2, Py_EQ)); if (unlikely((__pyx_t_3 < 0))) __PYX_ERR(0, 52, __pyx_L1_error)
  __pyx_t_1 = __pyx_t_3;
  __pyx_L7_bool_binop_done:;
  if (__pyx_t_1) {
/* … */
    goto __pyx_L4;
  }
+0053:         result = True
    __pyx_v_result = 1;
+0054:     elif PyObject_IsInstance(value, (int, float)) and value == 0:
  __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 54, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_INCREF((PyObject *)(&PyInt_Type));
  __Pyx_GIVEREF((PyObject *)(&PyInt_Type));
  if (__Pyx_PyTuple_SET_ITEM(__pyx_t_4, 0, ((PyObject *)(&PyInt_Type)))) __PYX_ERR(0, 54, __pyx_L1_error);
  __Pyx_INCREF((PyObject *)(&PyFloat_Type));
  __Pyx_GIVEREF((PyObject *)(&PyFloat_Type));
  if (__Pyx_PyTuple_SET_ITEM(__pyx_t_4, 1, ((PyObject *)(&PyFloat_Type)))) __PYX_ERR(0, 54, __pyx_L1_error);
  __pyx_t_3 = PyObject_IsInstance(__pyx_v_value, __pyx_t_4); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(0, 54, __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_L9_bool_binop_done;
  }
  __pyx_t_3 = (__Pyx_PyInt_BoolEqObjC(__pyx_v_value, __pyx_int_0, 0, 0)); if (unlikely((__pyx_t_3 < 0))) __PYX_ERR(0, 54, __pyx_L1_error)
  __pyx_t_1 = __pyx_t_3;
  __pyx_L9_bool_binop_done:;
  if (__pyx_t_1) {
/* … */
    goto __pyx_L4;
  }
+0055:         result = False
    __pyx_v_result = 0;
+0056:     elif PyObject_IsInstance(value, dict) and value == {}:
  __pyx_t_3 = PyObject_IsInstance(__pyx_v_value, ((PyObject *)(&PyDict_Type))); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(0, 56, __pyx_L1_error)
  if (__pyx_t_3) {
  } else {
    __pyx_t_1 = __pyx_t_3;
    goto __pyx_L11_bool_binop_done;
  }
  __pyx_t_4 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 56, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_2 = PyObject_RichCompare(__pyx_v_value, __pyx_t_4, Py_EQ); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 56, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely((__pyx_t_3 < 0))) __PYX_ERR(0, 56, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_1 = __pyx_t_3;
  __pyx_L11_bool_binop_done:;
  if (__pyx_t_1) {
/* … */
    goto __pyx_L4;
  }
+0057:         result = False
    __pyx_v_result = 0;
+0058:     elif PyObject_IsInstance(value, (list, tuple, set)) and value == []:
  __pyx_t_2 = PyTuple_New(3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 58, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_INCREF((PyObject *)(&PyList_Type));
  __Pyx_GIVEREF((PyObject *)(&PyList_Type));
  if (__Pyx_PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)(&PyList_Type)))) __PYX_ERR(0, 58, __pyx_L1_error);
  __Pyx_INCREF((PyObject *)(&PyTuple_Type));
  __Pyx_GIVEREF((PyObject *)(&PyTuple_Type));
  if (__Pyx_PyTuple_SET_ITEM(__pyx_t_2, 1, ((PyObject *)(&PyTuple_Type)))) __PYX_ERR(0, 58, __pyx_L1_error);
  __Pyx_INCREF((PyObject *)(&PySet_Type));
  __Pyx_GIVEREF((PyObject *)(&PySet_Type));
  if (__Pyx_PyTuple_SET_ITEM(__pyx_t_2, 2, ((PyObject *)(&PySet_Type)))) __PYX_ERR(0, 58, __pyx_L1_error);
  __pyx_t_3 = PyObject_IsInstance(__pyx_v_value, __pyx_t_2); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(0, 58, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (__pyx_t_3) {
  } else {
    __pyx_t_1 = __pyx_t_3;
    goto __pyx_L13_bool_binop_done;
  }
  __pyx_t_2 = PyList_New(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 58, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_4 = PyObject_RichCompare(__pyx_v_value, __pyx_t_2, Py_EQ); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 58, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely((__pyx_t_3 < 0))) __PYX_ERR(0, 58, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_1 = __pyx_t_3;
  __pyx_L13_bool_binop_done:;
  if (__pyx_t_1) {
/* … */
    goto __pyx_L4;
  }
+0059:         result = False
    __pyx_v_result = 0;
+0060:     elif PyObject_HasAttr(value, 'empty') and PyObject_GetAttr(value, 'empty') == False:
  __pyx_t_3 = PyObject_HasAttr(__pyx_v_value, __pyx_n_u_empty);
  if (__pyx_t_3) {
  } else {
    __pyx_t_1 = __pyx_t_3;
    goto __pyx_L15_bool_binop_done;
  }
  __pyx_t_4 = PyObject_GetAttr(__pyx_v_value, __pyx_n_u_empty); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 60, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_2 = PyObject_RichCompare(__pyx_t_4, Py_False, Py_EQ); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 60, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely((__pyx_t_3 < 0))) __PYX_ERR(0, 60, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_1 = __pyx_t_3;
  __pyx_L15_bool_binop_done:;
  if (__pyx_t_1) {
/* … */
    goto __pyx_L4;
  }
+0061:         result = False
    __pyx_v_result = 0;
+0062:     elif not value:
  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_value); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 62, __pyx_L1_error)
  __pyx_t_3 = (!__pyx_t_1);
  if (__pyx_t_3) {
/* … */
  }
  __pyx_L4:;
+0063:         result = True
    __pyx_v_result = 1;
+0064:     return result
  __pyx_r = __pyx_v_result;
  goto __pyx_L0;
 0065: 
+0066: cpdef bint has_attribute(object obj, object attr):
static PyObject *__pyx_pw_9datamodel_10converters_1has_attribute(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_9datamodel_10converters_has_attribute(PyObject *__pyx_v_obj, PyObject *__pyx_v_attr, CYTHON_UNUSED int __pyx_skip_dispatch) {
  int __pyx_r;
/* … */
  /* function exit code */
  __pyx_L0:;
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_9datamodel_10converters_1has_attribute(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_9datamodel_10converters_has_attribute, "has_attribute(obj, attr) -> bool\nReturns True if obj has the attribute attr.");
static PyMethodDef __pyx_mdef_9datamodel_10converters_1has_attribute = {"has_attribute", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9datamodel_10converters_1has_attribute, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_9datamodel_10converters_has_attribute};
static PyObject *__pyx_pw_9datamodel_10converters_1has_attribute(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_obj = 0;
  PyObject *__pyx_v_attr = 0;
  #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("has_attribute (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_MACROS
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __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 **__pyx_pyargnames[] = {&__pyx_n_s_obj,&__pyx_n_s_attr,0};
  PyObject* values[2] = {0,0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_obj)) != 0)) {
          (void)__Pyx_Arg_NewRef_FASTCALL(values[0]);
          kw_args--;
        }
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 66, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_attr)) != 0)) {
          (void)__Pyx_Arg_NewRef_FASTCALL(values[1]);
          kw_args--;
        }
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 66, __pyx_L3_error)
        else {
          __Pyx_RaiseArgtupleInvalid("has_attribute", 1, 2, 2, 1); __PYX_ERR(0, 66, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "has_attribute") < 0)) __PYX_ERR(0, 66, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 2)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
      values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
    }
    __pyx_v_obj = values[0];
    __pyx_v_attr = values[1];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("has_attribute", 1, 2, 2, __pyx_nargs); __PYX_ERR(0, 66, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  {
    Py_ssize_t __pyx_temp;
    for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
      __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]);
    }
  }
  __Pyx_AddTraceback("datamodel.converters.has_attribute", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_9datamodel_10converters_has_attribute(__pyx_self, __pyx_v_obj, __pyx_v_attr);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

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

static PyObject *__pyx_pf_9datamodel_10converters_has_attribute(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_obj, PyObject *__pyx_v_attr) {
  PyObject *__pyx_r = NULL;
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_9datamodel_10converters_has_attribute(__pyx_v_obj, __pyx_v_attr, 0); if (unlikely(__pyx_t_1 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 66, __pyx_L1_error)
  __pyx_t_2 = __Pyx_PyBool_FromLong(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 66, __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("datamodel.converters.has_attribute", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__21 = PyTuple_Pack(2, __pyx_n_s_obj, __pyx_n_s_attr); if (unlikely(!__pyx_tuple__21)) __PYX_ERR(0, 66, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__21);
  __Pyx_GIVEREF(__pyx_tuple__21);
/* … */
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_9datamodel_10converters_1has_attribute, 0, __pyx_n_s_has_attribute, NULL, __pyx_n_s_datamodel_converters, __pyx_d, ((PyObject *)__pyx_codeobj__22)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 66, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_has_attribute, __pyx_t_2) < 0) __PYX_ERR(0, 66, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_codeobj__22 = (PyObject*)__Pyx_PyCode_New(2, 0, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__21, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_datamodel_converters_pyx, __pyx_n_s_has_attribute, 66, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__22)) __PYX_ERR(0, 66, __pyx_L1_error)
 0067:     """Returns True if obj has the attribute attr."""
+0068:     return PyObject_HasAttr(obj, attr)
  __pyx_r = PyObject_HasAttr(__pyx_v_obj, __pyx_v_attr);
  goto __pyx_L0;
 0069: 
+0070: cpdef str to_string(object obj):
static PyObject *__pyx_pw_9datamodel_10converters_3to_string(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_9datamodel_10converters_to_string(PyObject *__pyx_v_obj, CYTHON_UNUSED int __pyx_skip_dispatch) {
  PyObject *__pyx_v_e = NULL;
  PyObject *__pyx_v_val = NULL;
  PyObject *__pyx_r = NULL;
/* … */
  /* 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_10);
  __Pyx_XDECREF(__pyx_t_11);
  __Pyx_AddTraceback("datamodel.converters.to_string", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_e);
  __Pyx_XDECREF(__pyx_v_val);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_9datamodel_10converters_3to_string(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_9datamodel_10converters_2to_string, "to_string(obj) -> unicode\n\n    Returns a string version of an object.\n    ");
static PyMethodDef __pyx_mdef_9datamodel_10converters_3to_string = {"to_string", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9datamodel_10converters_3to_string, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_9datamodel_10converters_2to_string};
static PyObject *__pyx_pw_9datamodel_10converters_3to_string(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_obj = 0;
  #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("to_string (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_MACROS
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __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 **__pyx_pyargnames[] = {&__pyx_n_s_obj,0};
  PyObject* values[1] = {0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_obj)) != 0)) {
          (void)__Pyx_Arg_NewRef_FASTCALL(values[0]);
          kw_args--;
        }
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 70, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "to_string") < 0)) __PYX_ERR(0, 70, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
    }
    __pyx_v_obj = values[0];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("to_string", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 70, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  {
    Py_ssize_t __pyx_temp;
    for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
      __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]);
    }
  }
  __Pyx_AddTraceback("datamodel.converters.to_string", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_9datamodel_10converters_2to_string(__pyx_self, __pyx_v_obj);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

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

static PyObject *__pyx_pf_9datamodel_10converters_2to_string(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_obj) {
  PyObject *__pyx_r = NULL;
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_9datamodel_10converters_to_string(__pyx_v_obj, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 70, __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("datamodel.converters.to_string", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__23 = PyTuple_Pack(1, __pyx_n_s_obj); if (unlikely(!__pyx_tuple__23)) __PYX_ERR(0, 70, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__23);
  __Pyx_GIVEREF(__pyx_tuple__23);
/* … */
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_9datamodel_10converters_3to_string, 0, __pyx_n_s_to_string_2, NULL, __pyx_n_s_datamodel_converters, __pyx_d, ((PyObject *)__pyx_codeobj__24)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 70, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_to_string_2, __pyx_t_2) < 0) __PYX_ERR(0, 70, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_codeobj__24 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__23, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_datamodel_converters_pyx, __pyx_n_s_to_string_2, 70, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__24)) __PYX_ERR(0, 70, __pyx_L1_error)
 0071:     """
 0072:     Returns a string version of an object.
 0073:     """
+0074:     if obj is None:
  __pyx_t_1 = (__pyx_v_obj == Py_None);
  if (__pyx_t_1) {
/* … */
  }
+0075:         return None
    __Pyx_XDECREF(__pyx_r);
    __pyx_r = ((PyObject*)Py_None); __Pyx_INCREF(Py_None);
    goto __pyx_L0;
+0076:     if isinstance(obj, str):
  __pyx_t_1 = PyUnicode_Check(__pyx_v_obj); 
  if (__pyx_t_1) {
/* … */
  }
+0077:         return obj
    __Pyx_XDECREF(__pyx_r);
    if (!(likely(PyUnicode_CheckExact(__pyx_v_obj))||((__pyx_v_obj) == Py_None) || __Pyx_RaiseUnexpectedTypeError("unicode", __pyx_v_obj))) __PYX_ERR(0, 77, __pyx_L1_error)
    __Pyx_INCREF(__pyx_v_obj);
    __pyx_r = ((PyObject*)__pyx_v_obj);
    goto __pyx_L0;
+0078:     if isinstance(obj, bytes):
  __pyx_t_1 = PyBytes_Check(__pyx_v_obj); 
  if (__pyx_t_1) {
/* … */
  }
+0079:         try:
    {
      /*try:*/ {
/* … */
      }
      __pyx_L6_error:;
      __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
/* … */
      __pyx_L8_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_L10_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;
    }
+0080:             return obj.decode()
        __Pyx_XDECREF(__pyx_r);
        __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_obj, __pyx_n_s_decode); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 80, __pyx_L6_error)
        __Pyx_GOTREF(__pyx_t_6);
        __pyx_t_7 = NULL;
        __pyx_t_8 = 0;
        #if CYTHON_UNPACK_METHODS
        if (likely(PyMethod_Check(__pyx_t_6))) {
          __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_6);
          if (likely(__pyx_t_7)) {
            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6);
            __Pyx_INCREF(__pyx_t_7);
            __Pyx_INCREF(function);
            __Pyx_DECREF_SET(__pyx_t_6, function);
            __pyx_t_8 = 1;
          }
        }
        #endif
        {
          PyObject *__pyx_callargs[2] = {__pyx_t_7, NULL};
          __pyx_t_5 = __Pyx_PyObject_FastCall(__pyx_t_6, __pyx_callargs+1-__pyx_t_8, 0+__pyx_t_8);
          __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
          if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 80, __pyx_L6_error)
          __Pyx_GOTREF(__pyx_t_5);
          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
        }
        if (!(likely(PyUnicode_CheckExact(__pyx_t_5))||((__pyx_t_5) == Py_None) || __Pyx_RaiseUnexpectedTypeError("unicode", __pyx_t_5))) __PYX_ERR(0, 80, __pyx_L6_error)
        __pyx_r = ((PyObject*)__pyx_t_5);
        __pyx_t_5 = 0;
        goto __pyx_L10_try_return;
+0081:         except UnicodeDecodeError as e:
      __pyx_t_9 = __Pyx_PyErr_ExceptionMatches(__pyx_builtin_UnicodeDecodeError);
      if (__pyx_t_9) {
        __Pyx_AddTraceback("datamodel.converters.to_string", __pyx_clineno, __pyx_lineno, __pyx_filename);
        if (__Pyx_GetException(&__pyx_t_5, &__pyx_t_6, &__pyx_t_7) < 0) __PYX_ERR(0, 81, __pyx_L8_except_error)
        __Pyx_XGOTREF(__pyx_t_5);
        __Pyx_XGOTREF(__pyx_t_6);
        __Pyx_XGOTREF(__pyx_t_7);
        __Pyx_INCREF(__pyx_t_6);
        __pyx_v_e = __pyx_t_6;
        /*try:*/ {
/* … */
        /*finally:*/ {
          __pyx_L17_error:;
          /*exception exit:*/{
            __Pyx_PyThreadState_declare
            __Pyx_PyThreadState_assign
            __pyx_t_14 = 0; __pyx_t_15 = 0; __pyx_t_16 = 0; __pyx_t_17 = 0; __pyx_t_18 = 0; __pyx_t_19 = 0;
            __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
            __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
            if (PY_MAJOR_VERSION >= 3) __Pyx_ExceptionSwap(&__pyx_t_17, &__pyx_t_18, &__pyx_t_19);
            if ((PY_MAJOR_VERSION < 3) || unlikely(__Pyx_GetException(&__pyx_t_14, &__pyx_t_15, &__pyx_t_16) < 0)) __Pyx_ErrFetch(&__pyx_t_14, &__pyx_t_15, &__pyx_t_16);
            __Pyx_XGOTREF(__pyx_t_14);
            __Pyx_XGOTREF(__pyx_t_15);
            __Pyx_XGOTREF(__pyx_t_16);
            __Pyx_XGOTREF(__pyx_t_17);
            __Pyx_XGOTREF(__pyx_t_18);
            __Pyx_XGOTREF(__pyx_t_19);
            __pyx_t_9 = __pyx_lineno; __pyx_t_12 = __pyx_clineno; __pyx_t_13 = __pyx_filename;
            {
              __Pyx_DECREF(__pyx_v_e); __pyx_v_e = 0;
            }
            if (PY_MAJOR_VERSION >= 3) {
              __Pyx_XGIVEREF(__pyx_t_17);
              __Pyx_XGIVEREF(__pyx_t_18);
              __Pyx_XGIVEREF(__pyx_t_19);
              __Pyx_ExceptionReset(__pyx_t_17, __pyx_t_18, __pyx_t_19);
            }
            __Pyx_XGIVEREF(__pyx_t_14);
            __Pyx_XGIVEREF(__pyx_t_15);
            __Pyx_XGIVEREF(__pyx_t_16);
            __Pyx_ErrRestore(__pyx_t_14, __pyx_t_15, __pyx_t_16);
            __pyx_t_14 = 0; __pyx_t_15 = 0; __pyx_t_16 = 0; __pyx_t_17 = 0; __pyx_t_18 = 0; __pyx_t_19 = 0;
            __pyx_lineno = __pyx_t_9; __pyx_clineno = __pyx_t_12; __pyx_filename = __pyx_t_13;
            goto __pyx_L8_except_error;
          }
        }
      }
      goto __pyx_L8_except_error;
+0082:             raise ValueError(f"Cannot decode bytes: {e}") from e
          __pyx_t_10 = __Pyx_PyObject_FormatSimple(__pyx_v_e, __pyx_empty_unicode); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 82, __pyx_L17_error)
          __Pyx_GOTREF(__pyx_t_10);
          __pyx_t_11 = __Pyx_PyUnicode_Concat(__pyx_kp_u_Cannot_decode_bytes, __pyx_t_10); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 82, __pyx_L17_error)
          __Pyx_GOTREF(__pyx_t_11);
          __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
          __pyx_t_10 = __Pyx_PyObject_CallOneArg(__pyx_builtin_ValueError, __pyx_t_11); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 82, __pyx_L17_error)
          __Pyx_GOTREF(__pyx_t_10);
          __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
          __Pyx_Raise(__pyx_t_10, 0, 0, __pyx_v_e);
          __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
          __PYX_ERR(0, 82, __pyx_L17_error)
        }
+0083:     if isinstance(obj, (int, float, Decimal)):
  __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_Decimal); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 83, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __pyx_t_20 = PyInt_Check(__pyx_v_obj); 
  if (!__pyx_t_20) {
  } else {
    __pyx_t_1 = __pyx_t_20;
    goto __pyx_L24_bool_binop_done;
  }
  __pyx_t_20 = PyFloat_Check(__pyx_v_obj); 
  if (!__pyx_t_20) {
  } else {
    __pyx_t_1 = __pyx_t_20;
    goto __pyx_L24_bool_binop_done;
  }
  __pyx_t_20 = PyObject_IsInstance(__pyx_v_obj, __pyx_t_7); 
  __pyx_t_1 = __pyx_t_20;
  __pyx_L24_bool_binop_done:;
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  if (__pyx_t_1) {
/* … */
  }
 0084:         # its a number
+0085:         return str(obj)
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_7 = __Pyx_PyObject_Unicode(__pyx_v_obj); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 85, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __pyx_r = ((PyObject*)__pyx_t_7);
    __pyx_t_7 = 0;
    goto __pyx_L0;
+0086:     if callable(obj):
  __pyx_t_1 = __Pyx_PyCallable_Check(__pyx_v_obj); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 86, __pyx_L1_error)
  if (__pyx_t_1) {
/* … */
  }
 0087:         # its a function callable returning a value
+0088:         try:
    {
      /*try:*/ {
/* … */
      }
      __pyx_L28_error:;
      __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
      __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
      __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
/* … */
      __pyx_L30_except_error:;
      __Pyx_XGIVEREF(__pyx_t_4);
      __Pyx_XGIVEREF(__pyx_t_3);
      __Pyx_XGIVEREF(__pyx_t_2);
      __Pyx_ExceptionReset(__pyx_t_4, __pyx_t_3, __pyx_t_2);
      goto __pyx_L1_error;
      __pyx_L32_try_return:;
      __Pyx_XGIVEREF(__pyx_t_4);
      __Pyx_XGIVEREF(__pyx_t_3);
      __Pyx_XGIVEREF(__pyx_t_2);
      __Pyx_ExceptionReset(__pyx_t_4, __pyx_t_3, __pyx_t_2);
      goto __pyx_L0;
      __pyx_L29_exception_handled:;
      __Pyx_XGIVEREF(__pyx_t_4);
      __Pyx_XGIVEREF(__pyx_t_3);
      __Pyx_XGIVEREF(__pyx_t_2);
      __Pyx_ExceptionReset(__pyx_t_4, __pyx_t_3, __pyx_t_2);
    }
+0089:             val = obj()
        __Pyx_INCREF(__pyx_v_obj);
        __pyx_t_6 = __pyx_v_obj; __pyx_t_5 = NULL;
        __pyx_t_8 = 0;
        #if CYTHON_UNPACK_METHODS
        if (unlikely(PyMethod_Check(__pyx_t_6))) {
          __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_6);
          if (likely(__pyx_t_5)) {
            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6);
            __Pyx_INCREF(__pyx_t_5);
            __Pyx_INCREF(function);
            __Pyx_DECREF_SET(__pyx_t_6, function);
            __pyx_t_8 = 1;
          }
        }
        #endif
        {
          PyObject *__pyx_callargs[2] = {__pyx_t_5, NULL};
          __pyx_t_7 = __Pyx_PyObject_FastCall(__pyx_t_6, __pyx_callargs+1-__pyx_t_8, 0+__pyx_t_8);
          __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
          if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 89, __pyx_L28_error)
          __Pyx_GOTREF(__pyx_t_7);
          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
        }
        __pyx_v_val = __pyx_t_7;
        __pyx_t_7 = 0;
 0090:             # Recursively call to_string on that result:
+0091:             return to_string(val)
        __Pyx_XDECREF(__pyx_r);
        __pyx_t_7 = __pyx_f_9datamodel_10converters_to_string(__pyx_v_val, 0); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 91, __pyx_L28_error)
        __Pyx_GOTREF(__pyx_t_7);
        __pyx_r = ((PyObject*)__pyx_t_7);
        __pyx_t_7 = 0;
        goto __pyx_L32_try_return;
+0092:         except Exception:
      __pyx_t_12 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(&((PyTypeObject*)PyExc_Exception)[0])));
      if (__pyx_t_12) {
        __Pyx_ErrRestore(0,0,0);
        goto __pyx_L29_exception_handled;
      }
      goto __pyx_L30_except_error;
 0093:             pass
 0094:     # For any other arbitrary type, explicitly fail:
+0095:     raise ValueError(
  __pyx_t_7 = __Pyx_PyObject_CallOneArg(__pyx_builtin_ValueError, __pyx_t_5); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 95, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_Raise(__pyx_t_7, 0, 0, 0);
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  __PYX_ERR(0, 95, __pyx_L1_error)
+0096:         f"Cannot convert object of type {type(obj).__name__} to string."
  __pyx_t_7 = PyTuple_New(3); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 96, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __pyx_t_21 = 0;
  __pyx_t_22 = 127;
  __Pyx_INCREF(__pyx_kp_u_Cannot_convert_object_of_type);
  __pyx_t_21 += 30;
  __Pyx_GIVEREF(__pyx_kp_u_Cannot_convert_object_of_type);
  PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_kp_u_Cannot_convert_object_of_type);
  __pyx_t_6 = __Pyx_PyObject_GetAttrStr(((PyObject *)Py_TYPE(__pyx_v_obj)), __pyx_n_s_name); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 96, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_t_5 = __Pyx_PyObject_FormatSimple(__pyx_t_6, __pyx_empty_unicode); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 96, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __pyx_t_22 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_5) > __pyx_t_22) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_5) : __pyx_t_22;
  __pyx_t_21 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_5);
  __Pyx_GIVEREF(__pyx_t_5);
  PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_t_5);
  __pyx_t_5 = 0;
  __Pyx_INCREF(__pyx_kp_u_to_string);
  __pyx_t_21 += 11;
  __Pyx_GIVEREF(__pyx_kp_u_to_string);
  PyTuple_SET_ITEM(__pyx_t_7, 2, __pyx_kp_u_to_string);
  __pyx_t_5 = __Pyx_PyUnicode_Join(__pyx_t_7, 3, __pyx_t_21, __pyx_t_22); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 96, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 0097:     )
 0098: 
+0099: cpdef object to_uuid(object obj):
static PyObject *__pyx_pw_9datamodel_10converters_5to_uuid(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_9datamodel_10converters_to_uuid(PyObject *__pyx_v_obj, CYTHON_UNUSED int __pyx_skip_dispatch) {
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_10);
  __Pyx_AddTraceback("datamodel.converters.to_uuid", __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_9datamodel_10converters_5to_uuid(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_9datamodel_10converters_4to_uuid, "to_uuid(obj)\nReturns a UUID version of a str column.\n    ");
static PyMethodDef __pyx_mdef_9datamodel_10converters_5to_uuid = {"to_uuid", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9datamodel_10converters_5to_uuid, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_9datamodel_10converters_4to_uuid};
static PyObject *__pyx_pw_9datamodel_10converters_5to_uuid(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_obj = 0;
  #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("to_uuid (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_MACROS
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __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 **__pyx_pyargnames[] = {&__pyx_n_s_obj,0};
  PyObject* values[1] = {0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_obj)) != 0)) {
          (void)__Pyx_Arg_NewRef_FASTCALL(values[0]);
          kw_args--;
        }
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 99, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "to_uuid") < 0)) __PYX_ERR(0, 99, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
    }
    __pyx_v_obj = values[0];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("to_uuid", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 99, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  {
    Py_ssize_t __pyx_temp;
    for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
      __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]);
    }
  }
  __Pyx_AddTraceback("datamodel.converters.to_uuid", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_9datamodel_10converters_4to_uuid(__pyx_self, __pyx_v_obj);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

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

static PyObject *__pyx_pf_9datamodel_10converters_4to_uuid(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_obj) {
  PyObject *__pyx_r = NULL;
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_9datamodel_10converters_to_uuid(__pyx_v_obj, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 99, __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("datamodel.converters.to_uuid", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_9datamodel_10converters_5to_uuid, 0, __pyx_n_s_to_uuid, NULL, __pyx_n_s_datamodel_converters, __pyx_d, ((PyObject *)__pyx_codeobj__25)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 99, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_to_uuid, __pyx_t_2) < 0) __PYX_ERR(0, 99, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
/* … */
  __pyx_codeobj__25 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__23, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_datamodel_converters_pyx, __pyx_n_s_to_uuid, 99, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__25)) __PYX_ERR(0, 99, __pyx_L1_error)
 0100:     """Returns a UUID version of a str column.
 0101:     """
+0102:     if isinstance(obj, pgproto.UUID):
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_pgproto); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 102, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_UUID); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 102, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_3 = PyObject_IsInstance(__pyx_v_obj, __pyx_t_2); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(0, 102, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (__pyx_t_3) {
/* … */
  }
 0103:         # If it's asyncpg's UUID, convert by casting to string first
+0104:         return UUID(str(obj))
    __Pyx_XDECREF(__pyx_r);
    __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_UUID); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 104, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_4 = __Pyx_PyObject_Unicode(__pyx_v_obj); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 104, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_5 = NULL;
    __pyx_t_6 = 0;
    #if CYTHON_UNPACK_METHODS
    if (unlikely(PyMethod_Check(__pyx_t_1))) {
      __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_1);
      if (likely(__pyx_t_5)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
        __Pyx_INCREF(__pyx_t_5);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_1, function);
        __pyx_t_6 = 1;
      }
    }
    #endif
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_t_4};
      __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_1, __pyx_callargs+1-__pyx_t_6, 1+__pyx_t_6);
      __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 104, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    }
    __pyx_r = __pyx_t_2;
    __pyx_t_2 = 0;
    goto __pyx_L0;
+0105:     if isinstance(obj, UUID):
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_UUID); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 105, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = PyObject_IsInstance(__pyx_v_obj, __pyx_t_2); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(0, 105, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (__pyx_t_3) {
/* … */
  }
 0106:         # already an uuid
+0107:         return obj
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(__pyx_v_obj);
    __pyx_r = __pyx_v_obj;
    goto __pyx_L0;
+0108:     elif callable(obj):
  __pyx_t_3 = __Pyx_PyCallable_Check(__pyx_v_obj); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(0, 108, __pyx_L1_error)
  if (__pyx_t_3) {
/* … */
  }
 0109:         # its a function callable returning a value
+0110:         try:
    {
      /*try:*/ {
/* … */
      }
      __pyx_L5_error:;
      __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
      __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
      __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
/* … */
      __pyx_L9_try_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_L6_exception_handled:;
      __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);
    }
+0111:             return UUID(obj())
        __Pyx_XDECREF(__pyx_r);
        __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_UUID); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 111, __pyx_L5_error)
        __Pyx_GOTREF(__pyx_t_1);
        __Pyx_INCREF(__pyx_v_obj);
        __pyx_t_5 = __pyx_v_obj; __pyx_t_10 = NULL;
        __pyx_t_6 = 0;
        #if CYTHON_UNPACK_METHODS
        if (unlikely(PyMethod_Check(__pyx_t_5))) {
          __pyx_t_10 = PyMethod_GET_SELF(__pyx_t_5);
          if (likely(__pyx_t_10)) {
            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
            __Pyx_INCREF(__pyx_t_10);
            __Pyx_INCREF(function);
            __Pyx_DECREF_SET(__pyx_t_5, function);
            __pyx_t_6 = 1;
          }
        }
        #endif
        {
          PyObject *__pyx_callargs[2] = {__pyx_t_10, NULL};
          __pyx_t_4 = __Pyx_PyObject_FastCall(__pyx_t_5, __pyx_callargs+1-__pyx_t_6, 0+__pyx_t_6);
          __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
          if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 111, __pyx_L5_error)
          __Pyx_GOTREF(__pyx_t_4);
          __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
        }
        __pyx_t_5 = NULL;
        __pyx_t_6 = 0;
        #if CYTHON_UNPACK_METHODS
        if (unlikely(PyMethod_Check(__pyx_t_1))) {
          __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_1);
          if (likely(__pyx_t_5)) {
            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
            __Pyx_INCREF(__pyx_t_5);
            __Pyx_INCREF(function);
            __Pyx_DECREF_SET(__pyx_t_1, function);
            __pyx_t_6 = 1;
          }
        }
        #endif
        {
          PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_t_4};
          __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_1, __pyx_callargs+1-__pyx_t_6, 1+__pyx_t_6);
          __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 111, __pyx_L5_error)
          __Pyx_GOTREF(__pyx_t_2);
          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        }
        __pyx_r = __pyx_t_2;
        __pyx_t_2 = 0;
        goto __pyx_L9_try_return;
+0112:         except:
      /*except:*/ {
        __Pyx_ErrRestore(0,0,0);
        goto __pyx_L6_exception_handled;
      }
 0113:             pass
+0114:     try:
  {
    /*try:*/ {
/* … */
    }
    __pyx_L11_error:;
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
/* … */
    __pyx_L13_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_L15_try_return:;
    __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_L0;
    __pyx_L14_except_return:;
    __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_L0;
  }
+0115:         return UUID(str(obj))
      __Pyx_XDECREF(__pyx_r);
      __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_UUID); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 115, __pyx_L11_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_4 = __Pyx_PyObject_Unicode(__pyx_v_obj); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 115, __pyx_L11_error)
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_t_5 = NULL;
      __pyx_t_6 = 0;
      #if CYTHON_UNPACK_METHODS
      if (unlikely(PyMethod_Check(__pyx_t_1))) {
        __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_1);
        if (likely(__pyx_t_5)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
          __Pyx_INCREF(__pyx_t_5);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_1, function);
          __pyx_t_6 = 1;
        }
      }
      #endif
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_t_4};
        __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_1, __pyx_callargs+1-__pyx_t_6, 1+__pyx_t_6);
        __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
        if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 115, __pyx_L11_error)
        __Pyx_GOTREF(__pyx_t_2);
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      }
      __pyx_r = __pyx_t_2;
      __pyx_t_2 = 0;
      goto __pyx_L15_try_return;
+0116:     except ValueError:
    __pyx_t_11 = __Pyx_PyErr_ExceptionMatches(__pyx_builtin_ValueError);
    if (__pyx_t_11) {
      __Pyx_AddTraceback("datamodel.converters.to_uuid", __pyx_clineno, __pyx_lineno, __pyx_filename);
      if (__Pyx_GetException(&__pyx_t_2, &__pyx_t_1, &__pyx_t_4) < 0) __PYX_ERR(0, 116, __pyx_L13_except_error)
      __Pyx_XGOTREF(__pyx_t_2);
      __Pyx_XGOTREF(__pyx_t_1);
      __Pyx_XGOTREF(__pyx_t_4);
+0117:         return None
      __Pyx_XDECREF(__pyx_r);
      __pyx_r = Py_None; __Pyx_INCREF(Py_None);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      goto __pyx_L14_except_return;
    }
    goto __pyx_L13_except_error;
 0118: 
 0119: 
+0120: cpdef str slugify_camelcase(str obj):
static PyObject *__pyx_pw_9datamodel_10converters_7slugify_camelcase(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_9datamodel_10converters_slugify_camelcase(PyObject *__pyx_v_obj, CYTHON_UNUSED int __pyx_skip_dispatch) {
  PyObject *__pyx_v_slugified = NULL;
  Py_ssize_t __pyx_v_i;
  Py_UCS4 __pyx_v_c;
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_AddTraceback("datamodel.converters.slugify_camelcase", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_slugified);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_9datamodel_10converters_7slugify_camelcase(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_9datamodel_10converters_6slugify_camelcase, "slugify_camelcase(unicode obj) -> unicode\nslugify_camelcase.\n\n    Converting CamelCase into a spaced version, but don\342\200\231t double-space\n    if the string already contains spaces or uppercase letters follow\n    existing spaces.\n    ");
static PyMethodDef __pyx_mdef_9datamodel_10converters_7slugify_camelcase = {"slugify_camelcase", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9datamodel_10converters_7slugify_camelcase, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_9datamodel_10converters_6slugify_camelcase};
static PyObject *__pyx_pw_9datamodel_10converters_7slugify_camelcase(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_obj = 0;
  #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("slugify_camelcase (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_MACROS
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __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 **__pyx_pyargnames[] = {&__pyx_n_s_obj,0};
  PyObject* values[1] = {0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_obj)) != 0)) {
          (void)__Pyx_Arg_NewRef_FASTCALL(values[0]);
          kw_args--;
        }
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 120, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "slugify_camelcase") < 0)) __PYX_ERR(0, 120, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
    }
    __pyx_v_obj = ((PyObject*)values[0]);
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("slugify_camelcase", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 120, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  {
    Py_ssize_t __pyx_temp;
    for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
      __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]);
    }
  }
  __Pyx_AddTraceback("datamodel.converters.slugify_camelcase", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_obj), (&PyUnicode_Type), 1, "obj", 1))) __PYX_ERR(0, 120, __pyx_L1_error)
  __pyx_r = __pyx_pf_9datamodel_10converters_6slugify_camelcase(__pyx_self, __pyx_v_obj);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

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

static PyObject *__pyx_pf_9datamodel_10converters_6slugify_camelcase(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_obj) {
  PyObject *__pyx_r = NULL;
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_9datamodel_10converters_slugify_camelcase(__pyx_v_obj, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 120, __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("datamodel.converters.slugify_camelcase", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_9datamodel_10converters_7slugify_camelcase, 0, __pyx_n_s_slugify_camelcase, NULL, __pyx_n_s_datamodel_converters, __pyx_d, ((PyObject *)__pyx_codeobj__26)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 120, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_slugify_camelcase, __pyx_t_2) < 0) __PYX_ERR(0, 120, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
/* … */
  __pyx_codeobj__26 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__23, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_datamodel_converters_pyx, __pyx_n_s_slugify_camelcase, 120, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__26)) __PYX_ERR(0, 120, __pyx_L1_error)
 0121:     """slugify_camelcase.
 0122: 
 0123:     Converting CamelCase into a spaced version, but don’t double-space
 0124:     if the string already contains spaces or uppercase letters follow
 0125:     existing spaces.
 0126:     """
+0127:     if not obj:
  __pyx_t_1 = (__pyx_v_obj != Py_None)&&(__Pyx_PyUnicode_IS_TRUE(__pyx_v_obj) != 0);
  __pyx_t_2 = (!__pyx_t_1);
  if (__pyx_t_2) {
/* … */
  }
+0128:         return obj
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(__pyx_v_obj);
    __pyx_r = __pyx_v_obj;
    goto __pyx_L0;
 0129: 
+0130:     slugified = [obj[0]]
  __pyx_t_3 = __Pyx_GetItemInt_Unicode(__pyx_v_obj, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(__pyx_t_3 == (Py_UCS4)-1)) __PYX_ERR(0, 130, __pyx_L1_error)
  __pyx_t_4 = __Pyx_PyUnicode_FromOrdinal(__pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 130, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5 = PyList_New(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 130, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_GIVEREF(__pyx_t_4);
  if (__Pyx_PyList_SET_ITEM(__pyx_t_5, 0, __pyx_t_4)) __PYX_ERR(0, 130, __pyx_L1_error);
  __pyx_t_4 = 0;
  __pyx_v_slugified = ((PyObject*)__pyx_t_5);
  __pyx_t_5 = 0;
+0131:     for i in range(1, len(obj)):
  if (unlikely(__pyx_v_obj == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()");
    __PYX_ERR(0, 131, __pyx_L1_error)
  }
  __pyx_t_6 = __Pyx_PyUnicode_GET_LENGTH(__pyx_v_obj); if (unlikely(__pyx_t_6 == ((Py_ssize_t)-1))) __PYX_ERR(0, 131, __pyx_L1_error)
  __pyx_t_7 = __pyx_t_6;
  for (__pyx_t_8 = 1; __pyx_t_8 < __pyx_t_7; __pyx_t_8+=1) {
    __pyx_v_i = __pyx_t_8;
+0132:         c = obj[i]
    __pyx_t_3 = __Pyx_GetItemInt_Unicode(__pyx_v_obj, __pyx_v_i, Py_ssize_t, 1, PyInt_FromSsize_t, 0, 1, 1); if (unlikely(__pyx_t_3 == (Py_UCS4)-1)) __PYX_ERR(0, 132, __pyx_L1_error)
    __pyx_v_c = __pyx_t_3;
 0133:         # Condition: if c is uppercase AND the previous character isn't a space,
 0134:         # insert a space before it.
+0135:         if c.isupper() and not slugified[-1].isspace():
    __pyx_t_1 = Py_UNICODE_ISUPPER(__pyx_v_c); 
    if (__pyx_t_1) {
    } else {
      __pyx_t_2 = __pyx_t_1;
      goto __pyx_L7_bool_binop_done;
    }
    __pyx_t_4 = __Pyx_GetItemInt_List(__pyx_v_slugified, -1L, long, 1, __Pyx_PyInt_From_long, 1, 1, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 135, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_isspace); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 135, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_t_4 = NULL;
    __pyx_t_10 = 0;
    #if CYTHON_UNPACK_METHODS
    if (likely(PyMethod_Check(__pyx_t_9))) {
      __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_9);
      if (likely(__pyx_t_4)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_9);
        __Pyx_INCREF(__pyx_t_4);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_9, function);
        __pyx_t_10 = 1;
      }
    }
    #endif
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_4, NULL};
      __pyx_t_5 = __Pyx_PyObject_FastCall(__pyx_t_9, __pyx_callargs+1-__pyx_t_10, 0+__pyx_t_10);
      __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
      if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 135, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    }
    __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 135, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_t_11 = (!__pyx_t_1);
    __pyx_t_2 = __pyx_t_11;
    __pyx_L7_bool_binop_done:;
    if (__pyx_t_2) {
/* … */
    }
+0136:             slugified.append(' ')
      __pyx_t_12 = __Pyx_PyList_Append(__pyx_v_slugified, __pyx_kp_u__3); if (unlikely(__pyx_t_12 == ((int)-1))) __PYX_ERR(0, 136, __pyx_L1_error)
+0137:         slugified.append(c)
    __pyx_t_5 = __Pyx_PyUnicode_FromOrdinal(__pyx_v_c); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 137, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_12 = __Pyx_PyList_Append(__pyx_v_slugified, __pyx_t_5); if (unlikely(__pyx_t_12 == ((int)-1))) __PYX_ERR(0, 137, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  }
+0138:     return ''.join(slugified)
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_5 = PyUnicode_Join(__pyx_kp_u__2, __pyx_v_slugified); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 138, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_r = ((PyObject*)__pyx_t_5);
  __pyx_t_5 = 0;
  goto __pyx_L0;
 0139: 
 0140: 
+0141: cpdef datetime.date to_date(object obj):
static PyObject *__pyx_pw_9datamodel_10converters_9to_date(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_Date *__pyx_f_9datamodel_10converters_to_date(PyObject *__pyx_v_obj, CYTHON_UNUSED int __pyx_skip_dispatch) {
  PyDateTime_Date *__pyx_r = NULL;
  __Pyx_INCREF(__pyx_v_obj);
/* … */
  /* 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_10);
  __Pyx_XDECREF(__pyx_t_14);
  __Pyx_AddTraceback("datamodel.converters.to_date", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_obj);
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_9datamodel_10converters_9to_date(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_9datamodel_10converters_8to_date, "to_date(obj) -> date\nto_date.\n\n    Returns obj converted to date.\n    ");
static PyMethodDef __pyx_mdef_9datamodel_10converters_9to_date = {"to_date", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9datamodel_10converters_9to_date, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_9datamodel_10converters_8to_date};
static PyObject *__pyx_pw_9datamodel_10converters_9to_date(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_obj = 0;
  #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("to_date (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_MACROS
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __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 **__pyx_pyargnames[] = {&__pyx_n_s_obj,0};
  PyObject* values[1] = {0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_obj)) != 0)) {
          (void)__Pyx_Arg_NewRef_FASTCALL(values[0]);
          kw_args--;
        }
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 141, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "to_date") < 0)) __PYX_ERR(0, 141, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
    }
    __pyx_v_obj = values[0];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("to_date", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 141, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  {
    Py_ssize_t __pyx_temp;
    for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
      __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]);
    }
  }
  __Pyx_AddTraceback("datamodel.converters.to_date", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_9datamodel_10converters_8to_date(__pyx_self, __pyx_v_obj);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

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

static PyObject *__pyx_pf_9datamodel_10converters_8to_date(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_obj) {
  PyObject *__pyx_r = NULL;
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = ((PyObject *)__pyx_f_9datamodel_10converters_to_date(__pyx_v_obj, 0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 141, __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("datamodel.converters.to_date", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_9datamodel_10converters_9to_date, 0, __pyx_n_s_to_date, NULL, __pyx_n_s_datamodel_converters, __pyx_d, ((PyObject *)__pyx_codeobj__27)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 141, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_to_date, __pyx_t_2) < 0) __PYX_ERR(0, 141, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
/* … */
  __pyx_codeobj__27 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__23, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_datamodel_converters_pyx, __pyx_n_s_to_date, 141, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__27)) __PYX_ERR(0, 141, __pyx_L1_error)
 0142:     """to_date.
 0143: 
 0144:     Returns obj converted to date.
 0145:     """
+0146:     if obj is None:
  __pyx_t_1 = (__pyx_v_obj == Py_None);
  if (__pyx_t_1) {
/* … */
  }
+0147:         return None
    __Pyx_XDECREF((PyObject *)__pyx_r);
    __pyx_r = ((PyDateTime_Date *)Py_None); __Pyx_INCREF(Py_None);
    goto __pyx_L0;
+0148:     elif obj == _MISSING_TYPE:
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_MISSING_TYPE); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 148, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = PyObject_RichCompare(__pyx_v_obj, __pyx_t_2, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 148, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 148, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (__pyx_t_1) {
/* … */
  }
+0149:         return None
    __Pyx_XDECREF((PyObject *)__pyx_r);
    __pyx_r = ((PyDateTime_Date *)Py_None); __Pyx_INCREF(Py_None);
    goto __pyx_L0;
+0150:     if isinstance(obj, datetime.date):
  __pyx_t_1 = __Pyx_TypeCheck(__pyx_v_obj, __pyx_ptype_7cpython_8datetime_date); 
  if (__pyx_t_1) {
/* … */
  }
+0151:         return obj
    __Pyx_XDECREF((PyObject *)__pyx_r);
    if (!(likely(((__pyx_v_obj) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_obj, __pyx_ptype_7cpython_8datetime_date))))) __PYX_ERR(0, 151, __pyx_L1_error)
    __Pyx_INCREF(__pyx_v_obj);
    __pyx_r = ((PyDateTime_Date *)__pyx_v_obj);
    goto __pyx_L0;
+0152:     elif isinstance(obj, (datetime.datetime, datetime.timedelta)):
  __pyx_t_4 = __Pyx_TypeCheck(__pyx_v_obj, __pyx_ptype_7cpython_8datetime_datetime); 
  if (!__pyx_t_4) {
  } else {
    __pyx_t_1 = __pyx_t_4;
    goto __pyx_L5_bool_binop_done;
  }
  __pyx_t_4 = __Pyx_TypeCheck(__pyx_v_obj, __pyx_ptype_7cpython_8datetime_timedelta); 
  __pyx_t_1 = __pyx_t_4;
  __pyx_L5_bool_binop_done:;
  if (__pyx_t_1) {
/* … */
  }
+0153:         return obj.date()
    __Pyx_XDECREF((PyObject *)__pyx_r);
    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_obj, __pyx_n_s_date); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 153, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_5 = NULL;
    __pyx_t_6 = 0;
    #if CYTHON_UNPACK_METHODS
    if (likely(PyMethod_Check(__pyx_t_2))) {
      __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_2);
      if (likely(__pyx_t_5)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
        __Pyx_INCREF(__pyx_t_5);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_2, function);
        __pyx_t_6 = 1;
      }
    }
    #endif
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_5, NULL};
      __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_6, 0+__pyx_t_6);
      __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
      if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 153, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    }
    if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_7cpython_8datetime_date))))) __PYX_ERR(0, 153, __pyx_L1_error)
    __pyx_r = ((PyDateTime_Date *)__pyx_t_3);
    __pyx_t_3 = 0;
    goto __pyx_L0;
+0154:     if isinstance(obj, (bytes, bytearray)):
  __pyx_t_4 = PyBytes_Check(__pyx_v_obj); 
  if (!__pyx_t_4) {
  } else {
    __pyx_t_1 = __pyx_t_4;
    goto __pyx_L8_bool_binop_done;
  }
  __pyx_t_4 = PyByteArray_Check(__pyx_v_obj); 
  __pyx_t_1 = __pyx_t_4;
  __pyx_L8_bool_binop_done:;
  if (__pyx_t_1) {
/* … */
  }
+0155:         obj = obj.decode("ascii")
    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_obj, __pyx_n_s_decode); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 155, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_5 = NULL;
    __pyx_t_6 = 0;
    #if CYTHON_UNPACK_METHODS
    if (likely(PyMethod_Check(__pyx_t_2))) {
      __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_2);
      if (likely(__pyx_t_5)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
        __Pyx_INCREF(__pyx_t_5);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_2, function);
        __pyx_t_6 = 1;
      }
    }
    #endif
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_n_u_ascii};
      __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_6, 1+__pyx_t_6);
      __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
      if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 155, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    }
    __Pyx_DECREF_SET(__pyx_v_obj, __pyx_t_3);
    __pyx_t_3 = 0;
 0156:     # Handle Unix epoch via Rust's `to_timestamp`
+0157:     if isinstance(obj, (int, float)):
  __pyx_t_4 = PyInt_Check(__pyx_v_obj); 
  if (!__pyx_t_4) {
  } else {
    __pyx_t_1 = __pyx_t_4;
    goto __pyx_L11_bool_binop_done;
  }
  __pyx_t_4 = PyFloat_Check(__pyx_v_obj); 
  __pyx_t_1 = __pyx_t_4;
  __pyx_L11_bool_binop_done:;
  if (__pyx_t_1) {
/* … */
  }
+0158:         try:
    {
      /*try:*/ {
/* … */
      }
      __pyx_L13_error:;
      __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
      __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
/* … */
      __pyx_L15_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_L17_try_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_L14_exception_handled:;
      __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);
    }
+0159:             return rc.to_timestamp(obj).date()
        __Pyx_XDECREF((PyObject *)__pyx_r);
        __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_rc); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 159, __pyx_L13_error)
        __Pyx_GOTREF(__pyx_t_5);
        __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_to_timestamp); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 159, __pyx_L13_error)
        __Pyx_GOTREF(__pyx_t_10);
        __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
        __pyx_t_5 = NULL;
        __pyx_t_6 = 0;
        #if CYTHON_UNPACK_METHODS
        if (unlikely(PyMethod_Check(__pyx_t_10))) {
          __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_10);
          if (likely(__pyx_t_5)) {
            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_10);
            __Pyx_INCREF(__pyx_t_5);
            __Pyx_INCREF(function);
            __Pyx_DECREF_SET(__pyx_t_10, function);
            __pyx_t_6 = 1;
          }
        }
        #endif
        {
          PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_v_obj};
          __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_10, __pyx_callargs+1-__pyx_t_6, 1+__pyx_t_6);
          __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
          if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 159, __pyx_L13_error)
          __Pyx_GOTREF(__pyx_t_2);
          __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
        }
        __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_date); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 159, __pyx_L13_error)
        __Pyx_GOTREF(__pyx_t_10);
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
        __pyx_t_2 = NULL;
        __pyx_t_6 = 0;
        #if CYTHON_UNPACK_METHODS
        if (likely(PyMethod_Check(__pyx_t_10))) {
          __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_10);
          if (likely(__pyx_t_2)) {
            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_10);
            __Pyx_INCREF(__pyx_t_2);
            __Pyx_INCREF(function);
            __Pyx_DECREF_SET(__pyx_t_10, function);
            __pyx_t_6 = 1;
          }
        }
        #endif
        {
          PyObject *__pyx_callargs[2] = {__pyx_t_2, NULL};
          __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_10, __pyx_callargs+1-__pyx_t_6, 0+__pyx_t_6);
          __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
          if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 159, __pyx_L13_error)
          __Pyx_GOTREF(__pyx_t_3);
          __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
        }
        if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_7cpython_8datetime_date))))) __PYX_ERR(0, 159, __pyx_L13_error)
        __pyx_r = ((PyDateTime_Date *)__pyx_t_3);
        __pyx_t_3 = 0;
        goto __pyx_L17_try_return;
+0160:         except ValueError:
      __pyx_t_11 = __Pyx_PyErr_ExceptionMatches(__pyx_builtin_ValueError);
      if (__pyx_t_11) {
        __Pyx_ErrRestore(0,0,0);
        goto __pyx_L14_exception_handled;
      }
      goto __pyx_L15_except_error;
 0161:             pass
 0162:     # using rust todate function
+0163:     try:
  {
    /*try:*/ {
/* … */
    }
    __pyx_L19_error:;
    __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
/* … */
    __pyx_L21_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_L23_try_return:;
    __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_L0;
    __pyx_L20_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);
  }
+0164:         return rc.to_date(obj)
      __Pyx_XDECREF((PyObject *)__pyx_r);
      __Pyx_GetModuleGlobalName(__pyx_t_10, __pyx_n_s_rc); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 164, __pyx_L19_error)
      __Pyx_GOTREF(__pyx_t_10);
      __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_10, __pyx_n_s_to_date); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 164, __pyx_L19_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
      __pyx_t_10 = NULL;
      __pyx_t_6 = 0;
      #if CYTHON_UNPACK_METHODS
      if (unlikely(PyMethod_Check(__pyx_t_2))) {
        __pyx_t_10 = PyMethod_GET_SELF(__pyx_t_2);
        if (likely(__pyx_t_10)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
          __Pyx_INCREF(__pyx_t_10);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_2, function);
          __pyx_t_6 = 1;
        }
      }
      #endif
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_10, __pyx_v_obj};
        __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_6, 1+__pyx_t_6);
        __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
        if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 164, __pyx_L19_error)
        __Pyx_GOTREF(__pyx_t_3);
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      }
      if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_7cpython_8datetime_date))))) __PYX_ERR(0, 164, __pyx_L19_error)
      __pyx_r = ((PyDateTime_Date *)__pyx_t_3);
      __pyx_t_3 = 0;
      goto __pyx_L23_try_return;
+0165:     except ValueError:
    __pyx_t_11 = __Pyx_PyErr_ExceptionMatches(__pyx_builtin_ValueError);
    if (__pyx_t_11) {
      __Pyx_ErrRestore(0,0,0);
      goto __pyx_L20_exception_handled;
    }
    goto __pyx_L21_except_error;
 0166:         pass
 0167:     # Fallback to Cython-native ciso8601 parsing
+0168:     try:
  {
    /*try:*/ {
/* … */
    }
    __pyx_L25_error:;
    __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
/* … */
    __pyx_L27_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_L29_try_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;
  }
+0169:         return ciso8601.parse_datetime(obj).date()
      __Pyx_XDECREF((PyObject *)__pyx_r);
      __Pyx_GetModuleGlobalName(__pyx_t_10, __pyx_n_s_ciso8601); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 169, __pyx_L25_error)
      __Pyx_GOTREF(__pyx_t_10);
      __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_10, __pyx_n_s_parse_datetime); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 169, __pyx_L25_error)
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
      __pyx_t_10 = NULL;
      __pyx_t_6 = 0;
      #if CYTHON_UNPACK_METHODS
      if (unlikely(PyMethod_Check(__pyx_t_5))) {
        __pyx_t_10 = PyMethod_GET_SELF(__pyx_t_5);
        if (likely(__pyx_t_10)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
          __Pyx_INCREF(__pyx_t_10);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_5, function);
          __pyx_t_6 = 1;
        }
      }
      #endif
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_10, __pyx_v_obj};
        __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_5, __pyx_callargs+1-__pyx_t_6, 1+__pyx_t_6);
        __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
        if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 169, __pyx_L25_error)
        __Pyx_GOTREF(__pyx_t_2);
        __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      }
      __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_date); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 169, __pyx_L25_error)
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __pyx_t_2 = NULL;
      __pyx_t_6 = 0;
      #if CYTHON_UNPACK_METHODS
      if (likely(PyMethod_Check(__pyx_t_5))) {
        __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_5);
        if (likely(__pyx_t_2)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
          __Pyx_INCREF(__pyx_t_2);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_5, function);
          __pyx_t_6 = 1;
        }
      }
      #endif
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_2, NULL};
        __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_5, __pyx_callargs+1-__pyx_t_6, 0+__pyx_t_6);
        __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
        if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 169, __pyx_L25_error)
        __Pyx_GOTREF(__pyx_t_3);
        __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      }
      if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_7cpython_8datetime_date))))) __PYX_ERR(0, 169, __pyx_L25_error)
      __pyx_r = ((PyDateTime_Date *)__pyx_t_3);
      __pyx_t_3 = 0;
      goto __pyx_L29_try_return;
+0170:     except ValueError:
    __pyx_t_11 = __Pyx_PyErr_ExceptionMatches(__pyx_builtin_ValueError);
    if (__pyx_t_11) {
      __Pyx_AddTraceback("datamodel.converters.to_date", __pyx_clineno, __pyx_lineno, __pyx_filename);
      if (__Pyx_GetException(&__pyx_t_3, &__pyx_t_5, &__pyx_t_2) < 0) __PYX_ERR(0, 170, __pyx_L27_except_error)
      __Pyx_XGOTREF(__pyx_t_3);
      __Pyx_XGOTREF(__pyx_t_5);
      __Pyx_XGOTREF(__pyx_t_2);
 0171:         pass
+0172:         raise ValueError(
      __pyx_t_10 = __Pyx_PyObject_CallOneArg(__pyx_builtin_ValueError, __pyx_t_14); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 172, __pyx_L27_except_error)
      __Pyx_GOTREF(__pyx_t_10);
      __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
      __Pyx_Raise(__pyx_t_10, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
      __PYX_ERR(0, 172, __pyx_L27_except_error)
    }
    goto __pyx_L27_except_error;
+0173:             f"Can't convert invalid data *{obj}* to date"
      __pyx_t_10 = PyTuple_New(3); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 173, __pyx_L27_except_error)
      __Pyx_GOTREF(__pyx_t_10);
      __pyx_t_12 = 0;
      __pyx_t_13 = 127;
      __Pyx_INCREF(__pyx_kp_u_Can_t_convert_invalid_data);
      __pyx_t_12 += 28;
      __Pyx_GIVEREF(__pyx_kp_u_Can_t_convert_invalid_data);
      PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_kp_u_Can_t_convert_invalid_data);
      __pyx_t_14 = __Pyx_PyObject_FormatSimple(__pyx_v_obj, __pyx_empty_unicode); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 173, __pyx_L27_except_error)
      __Pyx_GOTREF(__pyx_t_14);
      __pyx_t_13 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_14) > __pyx_t_13) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_14) : __pyx_t_13;
      __pyx_t_12 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_14);
      __Pyx_GIVEREF(__pyx_t_14);
      PyTuple_SET_ITEM(__pyx_t_10, 1, __pyx_t_14);
      __pyx_t_14 = 0;
      __Pyx_INCREF(__pyx_kp_u_to_date_2);
      __pyx_t_12 += 9;
      __Pyx_GIVEREF(__pyx_kp_u_to_date_2);
      PyTuple_SET_ITEM(__pyx_t_10, 2, __pyx_kp_u_to_date_2);
      __pyx_t_14 = __Pyx_PyUnicode_Join(__pyx_t_10, 3, __pyx_t_12, __pyx_t_13); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 173, __pyx_L27_except_error)
      __Pyx_GOTREF(__pyx_t_14);
      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
 0174:         )
 0175: 
 0176: 
+0177: cpdef datetime.datetime to_datetime(object obj):
static PyObject *__pyx_pw_9datamodel_10converters_11to_datetime(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_9datamodel_10converters_to_datetime(PyObject *__pyx_v_obj, CYTHON_UNUSED int __pyx_skip_dispatch) {
  PyDateTime_DateTime *__pyx_r = NULL;
  __Pyx_INCREF(__pyx_v_obj);
/* … */
  /* 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_11);
  __Pyx_XDECREF(__pyx_t_14);
  __Pyx_AddTraceback("datamodel.converters.to_datetime", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_obj);
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_9datamodel_10converters_11to_datetime(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_9datamodel_10converters_10to_datetime, "to_datetime(obj) -> datetime\nto_datetime.\n\n    Returns obj converted to datetime.\n    ");
static PyMethodDef __pyx_mdef_9datamodel_10converters_11to_datetime = {"to_datetime", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9datamodel_10converters_11to_datetime, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_9datamodel_10converters_10to_datetime};
static PyObject *__pyx_pw_9datamodel_10converters_11to_datetime(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_obj = 0;
  #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("to_datetime (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_MACROS
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __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 **__pyx_pyargnames[] = {&__pyx_n_s_obj,0};
  PyObject* values[1] = {0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_obj)) != 0)) {
          (void)__Pyx_Arg_NewRef_FASTCALL(values[0]);
          kw_args--;
        }
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 177, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "to_datetime") < 0)) __PYX_ERR(0, 177, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
    }
    __pyx_v_obj = values[0];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("to_datetime", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 177, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  {
    Py_ssize_t __pyx_temp;
    for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
      __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]);
    }
  }
  __Pyx_AddTraceback("datamodel.converters.to_datetime", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_9datamodel_10converters_10to_datetime(__pyx_self, __pyx_v_obj);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

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

static PyObject *__pyx_pf_9datamodel_10converters_10to_datetime(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_obj) {
  PyObject *__pyx_r = NULL;
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = ((PyObject *)__pyx_f_9datamodel_10converters_to_datetime(__pyx_v_obj, 0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 177, __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("datamodel.converters.to_datetime", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_9datamodel_10converters_11to_datetime, 0, __pyx_n_s_to_datetime, NULL, __pyx_n_s_datamodel_converters, __pyx_d, ((PyObject *)__pyx_codeobj__28)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 177, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_to_datetime, __pyx_t_2) < 0) __PYX_ERR(0, 177, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
/* … */
  __pyx_codeobj__28 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__23, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_datamodel_converters_pyx, __pyx_n_s_to_datetime, 177, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__28)) __PYX_ERR(0, 177, __pyx_L1_error)
 0178:     """to_datetime.
 0179: 
 0180:     Returns obj converted to datetime.
 0181:     """
+0182:     if obj is None:
  __pyx_t_1 = (__pyx_v_obj == Py_None);
  if (__pyx_t_1) {
/* … */
  }
+0183:         return None
    __Pyx_XDECREF((PyObject *)__pyx_r);
    __pyx_r = ((PyDateTime_DateTime *)Py_None); __Pyx_INCREF(Py_None);
    goto __pyx_L0;
+0184:     elif obj == _MISSING_TYPE:
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_MISSING_TYPE); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 184, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = PyObject_RichCompare(__pyx_v_obj, __pyx_t_2, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 184, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 184, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (__pyx_t_1) {
/* … */
  }
+0185:         return None
    __Pyx_XDECREF((PyObject *)__pyx_r);
    __pyx_r = ((PyDateTime_DateTime *)Py_None); __Pyx_INCREF(Py_None);
    goto __pyx_L0;
+0186:     if isinstance(obj, datetime.datetime):
  __pyx_t_1 = __Pyx_TypeCheck(__pyx_v_obj, __pyx_ptype_7cpython_8datetime_datetime); 
  if (__pyx_t_1) {
/* … */
  }
+0187:         return obj
    __Pyx_XDECREF((PyObject *)__pyx_r);
    if (!(likely(((__pyx_v_obj) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_obj, __pyx_ptype_7cpython_8datetime_datetime))))) __PYX_ERR(0, 187, __pyx_L1_error)
    __Pyx_INCREF(__pyx_v_obj);
    __pyx_r = ((PyDateTime_DateTime *)__pyx_v_obj);
    goto __pyx_L0;
+0188:     if isinstance(obj, (bytes, bytearray)):
  __pyx_t_4 = PyBytes_Check(__pyx_v_obj); 
  if (!__pyx_t_4) {
  } else {
    __pyx_t_1 = __pyx_t_4;
    goto __pyx_L6_bool_binop_done;
  }
  __pyx_t_4 = PyByteArray_Check(__pyx_v_obj); 
  __pyx_t_1 = __pyx_t_4;
  __pyx_L6_bool_binop_done:;
  if (__pyx_t_1) {
/* … */
  }
+0189:         obj = obj.decode("ascii")
    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_obj, __pyx_n_s_decode); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 189, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_5 = NULL;
    __pyx_t_6 = 0;
    #if CYTHON_UNPACK_METHODS
    if (likely(PyMethod_Check(__pyx_t_2))) {
      __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_2);
      if (likely(__pyx_t_5)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
        __Pyx_INCREF(__pyx_t_5);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_2, function);
        __pyx_t_6 = 1;
      }
    }
    #endif
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_n_u_ascii};
      __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_6, 1+__pyx_t_6);
      __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
      if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 189, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    }
    __Pyx_DECREF_SET(__pyx_v_obj, __pyx_t_3);
    __pyx_t_3 = 0;
 0190:     # Handle Unix epoch via Rust's `to_timestamp`
+0191:     if isinstance(obj, (int, float)):
  __pyx_t_4 = PyInt_Check(__pyx_v_obj); 
  if (!__pyx_t_4) {
  } else {
    __pyx_t_1 = __pyx_t_4;
    goto __pyx_L9_bool_binop_done;
  }
  __pyx_t_4 = PyFloat_Check(__pyx_v_obj); 
  __pyx_t_1 = __pyx_t_4;
  __pyx_L9_bool_binop_done:;
  if (__pyx_t_1) {
/* … */
  }
+0192:         try:
    {
      /*try:*/ {
/* … */
      }
      __pyx_L11_error:;
      __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
/* … */
      __pyx_L13_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_L15_try_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_L12_exception_handled:;
      __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);
    }
+0193:             return rc.to_timestamp(obj)
        __Pyx_XDECREF((PyObject *)__pyx_r);
        __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_rc); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 193, __pyx_L11_error)
        __Pyx_GOTREF(__pyx_t_2);
        __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_to_timestamp); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 193, __pyx_L11_error)
        __Pyx_GOTREF(__pyx_t_5);
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
        __pyx_t_2 = NULL;
        __pyx_t_6 = 0;
        #if CYTHON_UNPACK_METHODS
        if (unlikely(PyMethod_Check(__pyx_t_5))) {
          __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_5);
          if (likely(__pyx_t_2)) {
            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
            __Pyx_INCREF(__pyx_t_2);
            __Pyx_INCREF(function);
            __Pyx_DECREF_SET(__pyx_t_5, function);
            __pyx_t_6 = 1;
          }
        }
        #endif
        {
          PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_v_obj};
          __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_5, __pyx_callargs+1-__pyx_t_6, 1+__pyx_t_6);
          __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
          if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 193, __pyx_L11_error)
          __Pyx_GOTREF(__pyx_t_3);
          __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
        }
        if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_7cpython_8datetime_datetime))))) __PYX_ERR(0, 193, __pyx_L11_error)
        __pyx_r = ((PyDateTime_DateTime *)__pyx_t_3);
        __pyx_t_3 = 0;
        goto __pyx_L15_try_return;
+0194:         except ValueError:
      __pyx_t_10 = __Pyx_PyErr_ExceptionMatches(__pyx_builtin_ValueError);
      if (__pyx_t_10) {
        __Pyx_ErrRestore(0,0,0);
        goto __pyx_L12_exception_handled;
      }
      goto __pyx_L13_except_error;
 0195:             pass
+0196:     try:
  {
    /*try:*/ {
/* … */
    }
    __pyx_L17_error:;
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
/* … */
    __pyx_L19_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_L21_try_return:;
    __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_L0;
    __pyx_L18_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);
  }
+0197:         return ciso8601.parse_datetime(obj)
      __Pyx_XDECREF((PyObject *)__pyx_r);
      __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_ciso8601); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 197, __pyx_L17_error)
      __Pyx_GOTREF(__pyx_t_5);
      __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_parse_datetime); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 197, __pyx_L17_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __pyx_t_5 = NULL;
      __pyx_t_6 = 0;
      #if CYTHON_UNPACK_METHODS
      if (unlikely(PyMethod_Check(__pyx_t_2))) {
        __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_2);
        if (likely(__pyx_t_5)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
          __Pyx_INCREF(__pyx_t_5);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_2, function);
          __pyx_t_6 = 1;
        }
      }
      #endif
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_v_obj};
        __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_6, 1+__pyx_t_6);
        __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
        if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 197, __pyx_L17_error)
        __Pyx_GOTREF(__pyx_t_3);
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      }
      if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_7cpython_8datetime_datetime))))) __PYX_ERR(0, 197, __pyx_L17_error)
      __pyx_r = ((PyDateTime_DateTime *)__pyx_t_3);
      __pyx_t_3 = 0;
      goto __pyx_L21_try_return;
+0198:     except ValueError:
    __pyx_t_10 = __Pyx_PyErr_ExceptionMatches(__pyx_builtin_ValueError);
    if (__pyx_t_10) {
      __Pyx_ErrRestore(0,0,0);
      goto __pyx_L18_exception_handled;
    }
    goto __pyx_L19_except_error;
 0199:         pass
+0200:     try:
  {
    /*try:*/ {
/* … */
    }
    __pyx_L23_error:;
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
/* … */
    __pyx_L25_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_L27_try_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;
  }
+0201:         return rc.to_datetime(obj)
      __Pyx_XDECREF((PyObject *)__pyx_r);
      __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_rc); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 201, __pyx_L23_error)
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_to_datetime); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 201, __pyx_L23_error)
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __pyx_t_2 = NULL;
      __pyx_t_6 = 0;
      #if CYTHON_UNPACK_METHODS
      if (unlikely(PyMethod_Check(__pyx_t_5))) {
        __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_5);
        if (likely(__pyx_t_2)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
          __Pyx_INCREF(__pyx_t_2);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_5, function);
          __pyx_t_6 = 1;
        }
      }
      #endif
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_v_obj};
        __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_5, __pyx_callargs+1-__pyx_t_6, 1+__pyx_t_6);
        __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
        if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 201, __pyx_L23_error)
        __Pyx_GOTREF(__pyx_t_3);
        __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      }
      if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_7cpython_8datetime_datetime))))) __PYX_ERR(0, 201, __pyx_L23_error)
      __pyx_r = ((PyDateTime_DateTime *)__pyx_t_3);
      __pyx_t_3 = 0;
      goto __pyx_L27_try_return;
+0202:     except ValueError:
    __pyx_t_10 = __Pyx_PyErr_ExceptionMatches(__pyx_builtin_ValueError);
    if (__pyx_t_10) {
      __Pyx_AddTraceback("datamodel.converters.to_datetime", __pyx_clineno, __pyx_lineno, __pyx_filename);
      if (__Pyx_GetException(&__pyx_t_3, &__pyx_t_5, &__pyx_t_2) < 0) __PYX_ERR(0, 202, __pyx_L25_except_error)
      __Pyx_XGOTREF(__pyx_t_3);
      __Pyx_XGOTREF(__pyx_t_5);
      __Pyx_XGOTREF(__pyx_t_2);
+0203:         raise ValueError(
      __pyx_t_11 = __Pyx_PyObject_CallOneArg(__pyx_builtin_ValueError, __pyx_t_14); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 203, __pyx_L25_except_error)
      __Pyx_GOTREF(__pyx_t_11);
      __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
      __Pyx_Raise(__pyx_t_11, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
      __PYX_ERR(0, 203, __pyx_L25_except_error)
    }
    goto __pyx_L25_except_error;
+0204:             f"Can't convert invalid data *{obj}* to datetime"
      __pyx_t_11 = PyTuple_New(3); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 204, __pyx_L25_except_error)
      __Pyx_GOTREF(__pyx_t_11);
      __pyx_t_12 = 0;
      __pyx_t_13 = 127;
      __Pyx_INCREF(__pyx_kp_u_Can_t_convert_invalid_data);
      __pyx_t_12 += 28;
      __Pyx_GIVEREF(__pyx_kp_u_Can_t_convert_invalid_data);
      PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_kp_u_Can_t_convert_invalid_data);
      __pyx_t_14 = __Pyx_PyObject_FormatSimple(__pyx_v_obj, __pyx_empty_unicode); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 204, __pyx_L25_except_error)
      __Pyx_GOTREF(__pyx_t_14);
      __pyx_t_13 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_14) > __pyx_t_13) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_14) : __pyx_t_13;
      __pyx_t_12 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_14);
      __Pyx_GIVEREF(__pyx_t_14);
      PyTuple_SET_ITEM(__pyx_t_11, 1, __pyx_t_14);
      __pyx_t_14 = 0;
      __Pyx_INCREF(__pyx_kp_u_to_datetime_2);
      __pyx_t_12 += 13;
      __Pyx_GIVEREF(__pyx_kp_u_to_datetime_2);
      PyTuple_SET_ITEM(__pyx_t_11, 2, __pyx_kp_u_to_datetime_2);
      __pyx_t_14 = __Pyx_PyUnicode_Join(__pyx_t_11, 3, __pyx_t_12, __pyx_t_13); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 204, __pyx_L25_except_error)
      __Pyx_GOTREF(__pyx_t_14);
      __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
 0205:         )
 0206: 
 0207: 
+0208: cpdef object to_integer(object obj):
static PyObject *__pyx_pw_9datamodel_10converters_13to_integer(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_9datamodel_10converters_to_integer(PyObject *__pyx_v_obj, CYTHON_UNUSED int __pyx_skip_dispatch) {
  PyObject *__pyx_v_e = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_INCREF(__pyx_v_obj);
/* … */
  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_10);
  __Pyx_XDECREF(__pyx_t_11);
  __Pyx_AddTraceback("datamodel.converters.to_integer", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_e);
  __Pyx_XDECREF(__pyx_v_obj);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_9datamodel_10converters_13to_integer(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_9datamodel_10converters_12to_integer, "to_integer(obj)\nto_integer.\n\n    Returns object converted to integer.\n    ");
static PyMethodDef __pyx_mdef_9datamodel_10converters_13to_integer = {"to_integer", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9datamodel_10converters_13to_integer, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_9datamodel_10converters_12to_integer};
static PyObject *__pyx_pw_9datamodel_10converters_13to_integer(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_obj = 0;
  #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("to_integer (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_MACROS
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __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 **__pyx_pyargnames[] = {&__pyx_n_s_obj,0};
  PyObject* values[1] = {0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_obj)) != 0)) {
          (void)__Pyx_Arg_NewRef_FASTCALL(values[0]);
          kw_args--;
        }
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 208, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "to_integer") < 0)) __PYX_ERR(0, 208, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
    }
    __pyx_v_obj = values[0];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("to_integer", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 208, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  {
    Py_ssize_t __pyx_temp;
    for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
      __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]);
    }
  }
  __Pyx_AddTraceback("datamodel.converters.to_integer", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_9datamodel_10converters_12to_integer(__pyx_self, __pyx_v_obj);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

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

static PyObject *__pyx_pf_9datamodel_10converters_12to_integer(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_obj) {
  PyObject *__pyx_r = NULL;
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_9datamodel_10converters_to_integer(__pyx_v_obj, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 208, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("datamodel.converters.to_integer", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_9datamodel_10converters_13to_integer, 0, __pyx_n_s_to_integer, NULL, __pyx_n_s_datamodel_converters, __pyx_d, ((PyObject *)__pyx_codeobj__29)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 208, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_to_integer, __pyx_t_2) < 0) __PYX_ERR(0, 208, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
/* … */
  __pyx_codeobj__29 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__23, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_datamodel_converters_pyx, __pyx_n_s_to_integer, 208, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__29)) __PYX_ERR(0, 208, __pyx_L1_error)
 0209:     """to_integer.
 0210: 
 0211:     Returns object converted to integer.
 0212:     """
+0213:     if obj is None:
  __pyx_t_1 = (__pyx_v_obj == Py_None);
  if (__pyx_t_1) {
/* … */
  }
+0214:         return None
    __Pyx_XDECREF(__pyx_r);
    __pyx_r = Py_None; __Pyx_INCREF(Py_None);
    goto __pyx_L0;
+0215:     if isinstance(obj, int):
  __pyx_t_1 = PyInt_Check(__pyx_v_obj); 
  if (__pyx_t_1) {
/* … */
  }
+0216:         return obj
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(__pyx_v_obj);
    __pyx_r = __pyx_v_obj;
    goto __pyx_L0;
+0217:     if isinstance(obj, unicode):
  __pyx_t_1 = PyUnicode_Check(__pyx_v_obj); 
  if (__pyx_t_1) {
/* … */
  }
+0218:         obj = obj.encode("ascii")
    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_obj, __pyx_n_s_encode); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 218, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_4 = NULL;
    __pyx_t_5 = 0;
    #if CYTHON_UNPACK_METHODS
    if (likely(PyMethod_Check(__pyx_t_3))) {
      __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3);
      if (likely(__pyx_t_4)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
        __Pyx_INCREF(__pyx_t_4);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_3, function);
        __pyx_t_5 = 1;
      }
    }
    #endif
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_n_u_ascii};
      __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_5, 1+__pyx_t_5);
      __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
      if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 218, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    }
    __Pyx_DECREF_SET(__pyx_v_obj, __pyx_t_2);
    __pyx_t_2 = 0;
+0219:     if isinstance(obj, bytes):
  __pyx_t_1 = PyBytes_Check(__pyx_v_obj); 
  if (__pyx_t_1) {
/* … */
  }
+0220:         try:
    {
      /*try:*/ {
/* … */
      }
      __pyx_L7_error:;
      __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
/* … */
      __pyx_L9_except_error:;
      __Pyx_XGIVEREF(__pyx_t_6);
      __Pyx_XGIVEREF(__pyx_t_7);
      __Pyx_XGIVEREF(__pyx_t_8);
      __Pyx_ExceptionReset(__pyx_t_6, __pyx_t_7, __pyx_t_8);
      goto __pyx_L1_error;
      __pyx_L11_try_return:;
      __Pyx_XGIVEREF(__pyx_t_6);
      __Pyx_XGIVEREF(__pyx_t_7);
      __Pyx_XGIVEREF(__pyx_t_8);
      __Pyx_ExceptionReset(__pyx_t_6, __pyx_t_7, __pyx_t_8);
      goto __pyx_L0;
    }
+0221:             return int(obj)
        __Pyx_XDECREF(__pyx_r);
        __pyx_t_2 = __Pyx_PyNumber_Int(__pyx_v_obj); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 221, __pyx_L7_error)
        __Pyx_GOTREF(__pyx_t_2);
        __pyx_r = __pyx_t_2;
        __pyx_t_2 = 0;
        goto __pyx_L11_try_return;
+0222:         except (TypeError, ValueError) as e:
      __pyx_t_9 = __Pyx_PyErr_ExceptionMatches2(__pyx_builtin_TypeError, __pyx_builtin_ValueError);
      if (__pyx_t_9) {
        __Pyx_AddTraceback("datamodel.converters.to_integer", __pyx_clineno, __pyx_lineno, __pyx_filename);
        if (__Pyx_GetException(&__pyx_t_2, &__pyx_t_3, &__pyx_t_4) < 0) __PYX_ERR(0, 222, __pyx_L9_except_error)
        __Pyx_XGOTREF(__pyx_t_2);
        __Pyx_XGOTREF(__pyx_t_3);
        __Pyx_XGOTREF(__pyx_t_4);
        __Pyx_INCREF(__pyx_t_3);
        __pyx_v_e = __pyx_t_3;
        /*try:*/ {
/* … */
        /*finally:*/ {
          __pyx_L18_error:;
          /*exception exit:*/{
            __Pyx_PyThreadState_declare
            __Pyx_PyThreadState_assign
            __pyx_t_14 = 0; __pyx_t_15 = 0; __pyx_t_16 = 0; __pyx_t_17 = 0; __pyx_t_18 = 0; __pyx_t_19 = 0;
            __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
            __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
            if (PY_MAJOR_VERSION >= 3) __Pyx_ExceptionSwap(&__pyx_t_17, &__pyx_t_18, &__pyx_t_19);
            if ((PY_MAJOR_VERSION < 3) || unlikely(__Pyx_GetException(&__pyx_t_14, &__pyx_t_15, &__pyx_t_16) < 0)) __Pyx_ErrFetch(&__pyx_t_14, &__pyx_t_15, &__pyx_t_16);
            __Pyx_XGOTREF(__pyx_t_14);
            __Pyx_XGOTREF(__pyx_t_15);
            __Pyx_XGOTREF(__pyx_t_16);
            __Pyx_XGOTREF(__pyx_t_17);
            __Pyx_XGOTREF(__pyx_t_18);
            __Pyx_XGOTREF(__pyx_t_19);
            __pyx_t_9 = __pyx_lineno; __pyx_t_12 = __pyx_clineno; __pyx_t_13 = __pyx_filename;
            {
              __Pyx_DECREF(__pyx_v_e); __pyx_v_e = 0;
            }
            if (PY_MAJOR_VERSION >= 3) {
              __Pyx_XGIVEREF(__pyx_t_17);
              __Pyx_XGIVEREF(__pyx_t_18);
              __Pyx_XGIVEREF(__pyx_t_19);
              __Pyx_ExceptionReset(__pyx_t_17, __pyx_t_18, __pyx_t_19);
            }
            __Pyx_XGIVEREF(__pyx_t_14);
            __Pyx_XGIVEREF(__pyx_t_15);
            __Pyx_XGIVEREF(__pyx_t_16);
            __Pyx_ErrRestore(__pyx_t_14, __pyx_t_15, __pyx_t_16);
            __pyx_t_14 = 0; __pyx_t_15 = 0; __pyx_t_16 = 0; __pyx_t_17 = 0; __pyx_t_18 = 0; __pyx_t_19 = 0;
            __pyx_lineno = __pyx_t_9; __pyx_clineno = __pyx_t_12; __pyx_filename = __pyx_t_13;
            goto __pyx_L9_except_error;
          }
        }
      }
      goto __pyx_L9_except_error;
+0223:             raise ValueError(
          __pyx_t_10 = __Pyx_PyObject_CallOneArg(__pyx_builtin_ValueError, __pyx_t_11); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 223, __pyx_L18_error)
          __Pyx_GOTREF(__pyx_t_10);
          __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
+0224:                 f"Invalid conversion to Integer of {obj}"
          __pyx_t_10 = __Pyx_PyObject_FormatSimple(__pyx_v_obj, __pyx_empty_unicode); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 224, __pyx_L18_error)
          __Pyx_GOTREF(__pyx_t_10);
          __pyx_t_11 = __Pyx_PyUnicode_Concat(__pyx_kp_u_Invalid_conversion_to_Integer_of, __pyx_t_10); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 224, __pyx_L18_error)
          __Pyx_GOTREF(__pyx_t_11);
          __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
+0225:             ) from e
          __Pyx_Raise(__pyx_t_10, 0, 0, __pyx_v_e);
          __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
          __PYX_ERR(0, 223, __pyx_L18_error)
        }
+0226:     elif callable(obj):
  __pyx_t_1 = __Pyx_PyCallable_Check(__pyx_v_obj); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 226, __pyx_L1_error)
  if (__pyx_t_1) {
/* … */
    goto __pyx_L6;
  }
 0227:         # its a function callable returning a value
+0228:         try:
    {
      /*try:*/ {
/* … */
      }
      __pyx_L24_error:;
      __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
      __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
      __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
/* … */
      __pyx_L28_try_return:;
      __Pyx_XGIVEREF(__pyx_t_8);
      __Pyx_XGIVEREF(__pyx_t_7);
      __Pyx_XGIVEREF(__pyx_t_6);
      __Pyx_ExceptionReset(__pyx_t_8, __pyx_t_7, __pyx_t_6);
      goto __pyx_L0;
      __pyx_L25_exception_handled:;
      __Pyx_XGIVEREF(__pyx_t_8);
      __Pyx_XGIVEREF(__pyx_t_7);
      __Pyx_XGIVEREF(__pyx_t_6);
      __Pyx_ExceptionReset(__pyx_t_8, __pyx_t_7, __pyx_t_6);
    }
+0229:             return obj()
        __Pyx_XDECREF(__pyx_r);
        __Pyx_INCREF(__pyx_v_obj);
        __pyx_t_3 = __pyx_v_obj; __pyx_t_2 = NULL;
        __pyx_t_5 = 0;
        #if CYTHON_UNPACK_METHODS
        if (unlikely(PyMethod_Check(__pyx_t_3))) {
          __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3);
          if (likely(__pyx_t_2)) {
            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
            __Pyx_INCREF(__pyx_t_2);
            __Pyx_INCREF(function);
            __Pyx_DECREF_SET(__pyx_t_3, function);
            __pyx_t_5 = 1;
          }
        }
        #endif
        {
          PyObject *__pyx_callargs[2] = {__pyx_t_2, NULL};
          __pyx_t_4 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_5, 0+__pyx_t_5);
          __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
          if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 229, __pyx_L24_error)
          __Pyx_GOTREF(__pyx_t_4);
          __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
        }
        __pyx_r = __pyx_t_4;
        __pyx_t_4 = 0;
        goto __pyx_L28_try_return;
+0230:         except:
      /*except:*/ {
        __Pyx_ErrRestore(0,0,0);
        goto __pyx_L25_exception_handled;
      }
 0231:             pass
 0232:     else:
+0233:         try:
  /*else*/ {
    {
      /*try:*/ {
/* … */
      }
      __pyx_L30_error:;
      __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
      __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
      __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
/* … */
      __pyx_L32_except_error:;
      __Pyx_XGIVEREF(__pyx_t_6);
      __Pyx_XGIVEREF(__pyx_t_7);
      __Pyx_XGIVEREF(__pyx_t_8);
      __Pyx_ExceptionReset(__pyx_t_6, __pyx_t_7, __pyx_t_8);
      goto __pyx_L1_error;
      __pyx_L34_try_return:;
      __Pyx_XGIVEREF(__pyx_t_6);
      __Pyx_XGIVEREF(__pyx_t_7);
      __Pyx_XGIVEREF(__pyx_t_8);
      __Pyx_ExceptionReset(__pyx_t_6, __pyx_t_7, __pyx_t_8);
      goto __pyx_L0;
    }
  }
  __pyx_L6:;
+0234:             return int(obj)
        __Pyx_XDECREF(__pyx_r);
        __pyx_t_4 = __Pyx_PyNumber_Int(__pyx_v_obj); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 234, __pyx_L30_error)
        __Pyx_GOTREF(__pyx_t_4);
        __pyx_r = __pyx_t_4;
        __pyx_t_4 = 0;
        goto __pyx_L34_try_return;
+0235:         except (TypeError, ValueError) as e:
      __pyx_t_12 = __Pyx_PyErr_ExceptionMatches2(__pyx_builtin_TypeError, __pyx_builtin_ValueError);
      if (__pyx_t_12) {
        __Pyx_AddTraceback("datamodel.converters.to_integer", __pyx_clineno, __pyx_lineno, __pyx_filename);
        if (__Pyx_GetException(&__pyx_t_4, &__pyx_t_3, &__pyx_t_2) < 0) __PYX_ERR(0, 235, __pyx_L32_except_error)
        __Pyx_XGOTREF(__pyx_t_4);
        __Pyx_XGOTREF(__pyx_t_3);
        __Pyx_XGOTREF(__pyx_t_2);
        __Pyx_INCREF(__pyx_t_3);
        __pyx_v_e = __pyx_t_3;
        /*try:*/ {
/* … */
        /*finally:*/ {
          __pyx_L41_error:;
          /*exception exit:*/{
            __Pyx_PyThreadState_declare
            __Pyx_PyThreadState_assign
            __pyx_t_19 = 0; __pyx_t_18 = 0; __pyx_t_17 = 0; __pyx_t_16 = 0; __pyx_t_15 = 0; __pyx_t_14 = 0;
            __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
            __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
            if (PY_MAJOR_VERSION >= 3) __Pyx_ExceptionSwap(&__pyx_t_16, &__pyx_t_15, &__pyx_t_14);
            if ((PY_MAJOR_VERSION < 3) || unlikely(__Pyx_GetException(&__pyx_t_19, &__pyx_t_18, &__pyx_t_17) < 0)) __Pyx_ErrFetch(&__pyx_t_19, &__pyx_t_18, &__pyx_t_17);
            __Pyx_XGOTREF(__pyx_t_19);
            __Pyx_XGOTREF(__pyx_t_18);
            __Pyx_XGOTREF(__pyx_t_17);
            __Pyx_XGOTREF(__pyx_t_16);
            __Pyx_XGOTREF(__pyx_t_15);
            __Pyx_XGOTREF(__pyx_t_14);
            __pyx_t_12 = __pyx_lineno; __pyx_t_9 = __pyx_clineno; __pyx_t_20 = __pyx_filename;
            {
              __Pyx_DECREF(__pyx_v_e); __pyx_v_e = 0;
            }
            if (PY_MAJOR_VERSION >= 3) {
              __Pyx_XGIVEREF(__pyx_t_16);
              __Pyx_XGIVEREF(__pyx_t_15);
              __Pyx_XGIVEREF(__pyx_t_14);
              __Pyx_ExceptionReset(__pyx_t_16, __pyx_t_15, __pyx_t_14);
            }
            __Pyx_XGIVEREF(__pyx_t_19);
            __Pyx_XGIVEREF(__pyx_t_18);
            __Pyx_XGIVEREF(__pyx_t_17);
            __Pyx_ErrRestore(__pyx_t_19, __pyx_t_18, __pyx_t_17);
            __pyx_t_19 = 0; __pyx_t_18 = 0; __pyx_t_17 = 0; __pyx_t_16 = 0; __pyx_t_15 = 0; __pyx_t_14 = 0;
            __pyx_lineno = __pyx_t_12; __pyx_clineno = __pyx_t_9; __pyx_filename = __pyx_t_20;
            goto __pyx_L32_except_error;
          }
        }
      }
      goto __pyx_L32_except_error;
+0236:             raise ValueError(
          __pyx_t_10 = __Pyx_PyObject_CallOneArg(__pyx_builtin_ValueError, __pyx_t_11); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 236, __pyx_L41_error)
          __Pyx_GOTREF(__pyx_t_10);
          __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
+0237:                 f"Invalid conversion to Integer of {obj}"
          __pyx_t_10 = __Pyx_PyObject_FormatSimple(__pyx_v_obj, __pyx_empty_unicode); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 237, __pyx_L41_error)
          __Pyx_GOTREF(__pyx_t_10);
          __pyx_t_11 = __Pyx_PyUnicode_Concat(__pyx_kp_u_Invalid_conversion_to_Integer_of, __pyx_t_10); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 237, __pyx_L41_error)
          __Pyx_GOTREF(__pyx_t_11);
          __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
+0238:             ) from e
          __Pyx_Raise(__pyx_t_10, 0, 0, __pyx_v_e);
          __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
          __PYX_ERR(0, 236, __pyx_L41_error)
        }
 0239: 
+0240: cpdef object to_float(object obj):
static PyObject *__pyx_pw_9datamodel_10converters_15to_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 PyObject *__pyx_f_9datamodel_10converters_to_float(PyObject *__pyx_v_obj, CYTHON_UNUSED int __pyx_skip_dispatch) {
  PyObject *__pyx_r = NULL;
/* … */
  /* 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_7);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_AddTraceback("datamodel.converters.to_float", __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_9datamodel_10converters_15to_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_9datamodel_10converters_14to_float, "to_float(obj)\nto_float.\n\n    Returns object converted to float.\n    ");
static PyMethodDef __pyx_mdef_9datamodel_10converters_15to_float = {"to_float", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9datamodel_10converters_15to_float, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_9datamodel_10converters_14to_float};
static PyObject *__pyx_pw_9datamodel_10converters_15to_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_obj = 0;
  #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("to_float (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_MACROS
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __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 **__pyx_pyargnames[] = {&__pyx_n_s_obj,0};
  PyObject* values[1] = {0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_obj)) != 0)) {
          (void)__Pyx_Arg_NewRef_FASTCALL(values[0]);
          kw_args--;
        }
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 240, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "to_float") < 0)) __PYX_ERR(0, 240, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
    }
    __pyx_v_obj = values[0];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("to_float", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 240, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  {
    Py_ssize_t __pyx_temp;
    for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
      __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]);
    }
  }
  __Pyx_AddTraceback("datamodel.converters.to_float", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_9datamodel_10converters_14to_float(__pyx_self, __pyx_v_obj);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

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

static PyObject *__pyx_pf_9datamodel_10converters_14to_float(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_obj) {
  PyObject *__pyx_r = NULL;
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_9datamodel_10converters_to_float(__pyx_v_obj, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 240, __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("datamodel.converters.to_float", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_9datamodel_10converters_15to_float, 0, __pyx_n_s_to_float, NULL, __pyx_n_s_datamodel_converters, __pyx_d, ((PyObject *)__pyx_codeobj__30)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 240, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_to_float, __pyx_t_2) < 0) __PYX_ERR(0, 240, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
/* … */
  __pyx_codeobj__30 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__23, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_datamodel_converters_pyx, __pyx_n_s_to_float, 240, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__30)) __PYX_ERR(0, 240, __pyx_L1_error)
 0241:     """to_float.
 0242: 
 0243:     Returns object converted to float.
 0244:     """
+0245:     if isinstance(obj, (float, Decimal)):
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_Decimal); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 245, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_3 = PyFloat_Check(__pyx_v_obj); 
  if (!__pyx_t_3) {
  } else {
    __pyx_t_2 = __pyx_t_3;
    goto __pyx_L4_bool_binop_done;
  }
  __pyx_t_3 = PyObject_IsInstance(__pyx_v_obj, __pyx_t_1); 
  __pyx_t_2 = __pyx_t_3;
  __pyx_L4_bool_binop_done:;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (__pyx_t_2) {
/* … */
  }
+0246:         return obj
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(__pyx_v_obj);
    __pyx_r = __pyx_v_obj;
    goto __pyx_L0;
+0247:     elif isinstance(obj, _MISSING_TYPE):
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_MISSING_TYPE); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 247, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = PyObject_IsInstance(__pyx_v_obj, __pyx_t_1); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 247, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (__pyx_t_2) {
/* … */
  }
+0248:         return None
    __Pyx_XDECREF(__pyx_r);
    __pyx_r = Py_None; __Pyx_INCREF(Py_None);
    goto __pyx_L0;
+0249:     elif callable(obj):
  __pyx_t_2 = __Pyx_PyCallable_Check(__pyx_v_obj); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 249, __pyx_L1_error)
  if (__pyx_t_2) {
/* … */
    goto __pyx_L3;
  }
 0250:         # its a function callable returning a value
+0251:         try:
    {
      /*try:*/ {
/* … */
      }
      __pyx_L6_error:;
      __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
      __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
/* … */
      __pyx_L10_try_return:;
      __Pyx_XGIVEREF(__pyx_t_4);
      __Pyx_XGIVEREF(__pyx_t_5);
      __Pyx_XGIVEREF(__pyx_t_6);
      __Pyx_ExceptionReset(__pyx_t_4, __pyx_t_5, __pyx_t_6);
      goto __pyx_L0;
      __pyx_L7_exception_handled:;
      __Pyx_XGIVEREF(__pyx_t_4);
      __Pyx_XGIVEREF(__pyx_t_5);
      __Pyx_XGIVEREF(__pyx_t_6);
      __Pyx_ExceptionReset(__pyx_t_4, __pyx_t_5, __pyx_t_6);
    }
+0252:             return obj()
        __Pyx_XDECREF(__pyx_r);
        __Pyx_INCREF(__pyx_v_obj);
        __pyx_t_7 = __pyx_v_obj; __pyx_t_8 = NULL;
        __pyx_t_9 = 0;
        #if CYTHON_UNPACK_METHODS
        if (unlikely(PyMethod_Check(__pyx_t_7))) {
          __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_7);
          if (likely(__pyx_t_8)) {
            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7);
            __Pyx_INCREF(__pyx_t_8);
            __Pyx_INCREF(function);
            __Pyx_DECREF_SET(__pyx_t_7, function);
            __pyx_t_9 = 1;
          }
        }
        #endif
        {
          PyObject *__pyx_callargs[2] = {__pyx_t_8, NULL};
          __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_7, __pyx_callargs+1-__pyx_t_9, 0+__pyx_t_9);
          __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
          if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 252, __pyx_L6_error)
          __Pyx_GOTREF(__pyx_t_1);
          __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
        }
        __pyx_r = __pyx_t_1;
        __pyx_t_1 = 0;
        goto __pyx_L10_try_return;
+0253:         except:
      /*except:*/ {
        __Pyx_ErrRestore(0,0,0);
        goto __pyx_L7_exception_handled;
      }
 0254:             pass
 0255:     else:
+0256:         try:
  /*else*/ {
    {
      /*try:*/ {
/* … */
      }
      __pyx_L12_error:;
      __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
      __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
/* … */
      __pyx_L14_except_error:;
      __Pyx_XGIVEREF(__pyx_t_6);
      __Pyx_XGIVEREF(__pyx_t_5);
      __Pyx_XGIVEREF(__pyx_t_4);
      __Pyx_ExceptionReset(__pyx_t_6, __pyx_t_5, __pyx_t_4);
      goto __pyx_L1_error;
      __pyx_L16_try_return:;
      __Pyx_XGIVEREF(__pyx_t_6);
      __Pyx_XGIVEREF(__pyx_t_5);
      __Pyx_XGIVEREF(__pyx_t_4);
      __Pyx_ExceptionReset(__pyx_t_6, __pyx_t_5, __pyx_t_4);
      goto __pyx_L0;
      __pyx_L15_except_return:;
      __Pyx_XGIVEREF(__pyx_t_6);
      __Pyx_XGIVEREF(__pyx_t_5);
      __Pyx_XGIVEREF(__pyx_t_4);
      __Pyx_ExceptionReset(__pyx_t_6, __pyx_t_5, __pyx_t_4);
      goto __pyx_L0;
    }
  }
  __pyx_L3:;
+0257:             return float(obj)
        __Pyx_XDECREF(__pyx_r);
        __pyx_t_1 = __Pyx_PyNumber_Float(__pyx_v_obj); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 257, __pyx_L12_error)
        __Pyx_GOTREF(__pyx_t_1);
        __pyx_r = __pyx_t_1;
        __pyx_t_1 = 0;
        goto __pyx_L16_try_return;
+0258:         except (TypeError, ValueError):
      __pyx_t_10 = __Pyx_PyErr_ExceptionMatches2(__pyx_builtin_TypeError, __pyx_builtin_ValueError);
      if (__pyx_t_10) {
        __Pyx_AddTraceback("datamodel.converters.to_float", __pyx_clineno, __pyx_lineno, __pyx_filename);
        if (__Pyx_GetException(&__pyx_t_1, &__pyx_t_7, &__pyx_t_8) < 0) __PYX_ERR(0, 258, __pyx_L14_except_error)
        __Pyx_XGOTREF(__pyx_t_1);
        __Pyx_XGOTREF(__pyx_t_7);
        __Pyx_XGOTREF(__pyx_t_8);
+0259:             return None
        __Pyx_XDECREF(__pyx_r);
        __pyx_r = Py_None; __Pyx_INCREF(Py_None);
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
        goto __pyx_L15_except_return;
      }
      goto __pyx_L14_except_error;
 0260: 
+0261: cpdef object to_decimal(object obj):
static PyObject *__pyx_pw_9datamodel_10converters_17to_decimal(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_9datamodel_10converters_to_decimal(PyObject *__pyx_v_obj, CYTHON_UNUSED int __pyx_skip_dispatch) {
  PyObject *__pyx_v_ex = NULL;
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_XDECREF(__pyx_t_11);
  __Pyx_AddTraceback("datamodel.converters.to_decimal", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_ex);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_9datamodel_10converters_17to_decimal(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_9datamodel_10converters_16to_decimal, "to_decimal(obj)\nto_decimal.\n\n    Returns a Decimal version of object.\n    ");
static PyMethodDef __pyx_mdef_9datamodel_10converters_17to_decimal = {"to_decimal", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9datamodel_10converters_17to_decimal, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_9datamodel_10converters_16to_decimal};
static PyObject *__pyx_pw_9datamodel_10converters_17to_decimal(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_obj = 0;
  #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("to_decimal (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_MACROS
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __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 **__pyx_pyargnames[] = {&__pyx_n_s_obj,0};
  PyObject* values[1] = {0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_obj)) != 0)) {
          (void)__Pyx_Arg_NewRef_FASTCALL(values[0]);
          kw_args--;
        }
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 261, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "to_decimal") < 0)) __PYX_ERR(0, 261, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
    }
    __pyx_v_obj = values[0];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("to_decimal", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 261, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  {
    Py_ssize_t __pyx_temp;
    for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
      __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]);
    }
  }
  __Pyx_AddTraceback("datamodel.converters.to_decimal", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_9datamodel_10converters_16to_decimal(__pyx_self, __pyx_v_obj);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

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

static PyObject *__pyx_pf_9datamodel_10converters_16to_decimal(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_obj) {
  PyObject *__pyx_r = NULL;
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_9datamodel_10converters_to_decimal(__pyx_v_obj, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 261, __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("datamodel.converters.to_decimal", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_9datamodel_10converters_17to_decimal, 0, __pyx_n_s_to_decimal, NULL, __pyx_n_s_datamodel_converters, __pyx_d, ((PyObject *)__pyx_codeobj__31)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 261, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_to_decimal, __pyx_t_2) < 0) __PYX_ERR(0, 261, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
/* … */
  __pyx_codeobj__31 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__23, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_datamodel_converters_pyx, __pyx_n_s_to_decimal, 261, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__31)) __PYX_ERR(0, 261, __pyx_L1_error)
 0262:     """to_decimal.
 0263: 
 0264:     Returns a Decimal version of object.
 0265:     """
+0266:     if obj is None:
  __pyx_t_1 = (__pyx_v_obj == Py_None);
  if (__pyx_t_1) {
/* … */
  }
+0267:         return None
    __Pyx_XDECREF(__pyx_r);
    __pyx_r = Py_None; __Pyx_INCREF(Py_None);
    goto __pyx_L0;
+0268:     if isinstance(obj, Decimal):
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_Decimal); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 268, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_1 = PyObject_IsInstance(__pyx_v_obj, __pyx_t_2); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 268, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (__pyx_t_1) {
/* … */
  }
+0269:         return obj
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(__pyx_v_obj);
    __pyx_r = __pyx_v_obj;
    goto __pyx_L0;
+0270:     elif callable(obj):
  __pyx_t_1 = __Pyx_PyCallable_Check(__pyx_v_obj); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 270, __pyx_L1_error)
  if (__pyx_t_1) {
/* … */
    goto __pyx_L4;
  }
 0271:         # its a function callable returning a value
+0272:         try:
    {
      /*try:*/ {
/* … */
      }
      __pyx_L5_error:;
      __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
      __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
/* … */
      __pyx_L9_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;
      __pyx_L6_exception_handled:;
      __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);
    }
+0273:             return obj()
        __Pyx_XDECREF(__pyx_r);
        __Pyx_INCREF(__pyx_v_obj);
        __pyx_t_6 = __pyx_v_obj; __pyx_t_7 = NULL;
        __pyx_t_8 = 0;
        #if CYTHON_UNPACK_METHODS
        if (unlikely(PyMethod_Check(__pyx_t_6))) {
          __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_6);
          if (likely(__pyx_t_7)) {
            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6);
            __Pyx_INCREF(__pyx_t_7);
            __Pyx_INCREF(function);
            __Pyx_DECREF_SET(__pyx_t_6, function);
            __pyx_t_8 = 1;
          }
        }
        #endif
        {
          PyObject *__pyx_callargs[2] = {__pyx_t_7, NULL};
          __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_6, __pyx_callargs+1-__pyx_t_8, 0+__pyx_t_8);
          __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
          if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 273, __pyx_L5_error)
          __Pyx_GOTREF(__pyx_t_2);
          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
        }
        __pyx_r = __pyx_t_2;
        __pyx_t_2 = 0;
        goto __pyx_L9_try_return;
+0274:         except:
      /*except:*/ {
        __Pyx_ErrRestore(0,0,0);
        goto __pyx_L6_exception_handled;
      }
 0275:             pass
 0276:     else:
+0277:         try:
  /*else*/ {
    {
      /*try:*/ {
/* … */
      }
      __pyx_L11_error:;
      __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
      __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
/* … */
      __pyx_L13_except_error:;
      __Pyx_XGIVEREF(__pyx_t_5);
      __Pyx_XGIVEREF(__pyx_t_4);
      __Pyx_XGIVEREF(__pyx_t_3);
      __Pyx_ExceptionReset(__pyx_t_5, __pyx_t_4, __pyx_t_3);
      goto __pyx_L1_error;
      __pyx_L15_try_return:;
      __Pyx_XGIVEREF(__pyx_t_5);
      __Pyx_XGIVEREF(__pyx_t_4);
      __Pyx_XGIVEREF(__pyx_t_3);
      __Pyx_ExceptionReset(__pyx_t_5, __pyx_t_4, __pyx_t_3);
      goto __pyx_L0;
      __pyx_L14_except_return:;
      __Pyx_XGIVEREF(__pyx_t_5);
      __Pyx_XGIVEREF(__pyx_t_4);
      __Pyx_XGIVEREF(__pyx_t_3);
      __Pyx_ExceptionReset(__pyx_t_5, __pyx_t_4, __pyx_t_3);
      goto __pyx_L0;
    }
  }
  __pyx_L4:;
+0278:             return Decimal(obj)
        __Pyx_XDECREF(__pyx_r);
        __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_Decimal); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 278, __pyx_L11_error)
        __Pyx_GOTREF(__pyx_t_6);
        __pyx_t_7 = NULL;
        __pyx_t_8 = 0;
        #if CYTHON_UNPACK_METHODS
        if (unlikely(PyMethod_Check(__pyx_t_6))) {
          __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_6);
          if (likely(__pyx_t_7)) {
            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6);
            __Pyx_INCREF(__pyx_t_7);
            __Pyx_INCREF(function);
            __Pyx_DECREF_SET(__pyx_t_6, function);
            __pyx_t_8 = 1;
          }
        }
        #endif
        {
          PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_v_obj};
          __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_6, __pyx_callargs+1-__pyx_t_8, 1+__pyx_t_8);
          __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
          if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 278, __pyx_L11_error)
          __Pyx_GOTREF(__pyx_t_2);
          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
        }
        __pyx_r = __pyx_t_2;
        __pyx_t_2 = 0;
        goto __pyx_L15_try_return;
+0279:         except InvalidOperation as ex:
      __Pyx_ErrFetch(&__pyx_t_2, &__pyx_t_6, &__pyx_t_7);
      __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_n_s_InvalidOperation); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 279, __pyx_L13_except_error)
      __Pyx_GOTREF(__pyx_t_9);
      __pyx_t_10 = __Pyx_PyErr_GivenExceptionMatches(__pyx_t_2, __pyx_t_9);
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      __Pyx_ErrRestore(__pyx_t_2, __pyx_t_6, __pyx_t_7);
      __pyx_t_2 = 0; __pyx_t_6 = 0; __pyx_t_7 = 0;
      if (__pyx_t_10) {
        __Pyx_AddTraceback("datamodel.converters.to_decimal", __pyx_clineno, __pyx_lineno, __pyx_filename);
        if (__Pyx_GetException(&__pyx_t_7, &__pyx_t_6, &__pyx_t_2) < 0) __PYX_ERR(0, 279, __pyx_L13_except_error)
        __Pyx_XGOTREF(__pyx_t_7);
        __Pyx_XGOTREF(__pyx_t_6);
        __Pyx_XGOTREF(__pyx_t_2);
        __Pyx_INCREF(__pyx_t_6);
        __pyx_v_ex = __pyx_t_6;
        /*try:*/ {
/* … */
        /*finally:*/ {
          __pyx_L22_error:;
          /*exception exit:*/{
            __Pyx_PyThreadState_declare
            __Pyx_PyThreadState_assign
            __pyx_t_14 = 0; __pyx_t_15 = 0; __pyx_t_16 = 0; __pyx_t_17 = 0; __pyx_t_18 = 0; __pyx_t_19 = 0;
            __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
            __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
            if (PY_MAJOR_VERSION >= 3) __Pyx_ExceptionSwap(&__pyx_t_17, &__pyx_t_18, &__pyx_t_19);
            if ((PY_MAJOR_VERSION < 3) || unlikely(__Pyx_GetException(&__pyx_t_14, &__pyx_t_15, &__pyx_t_16) < 0)) __Pyx_ErrFetch(&__pyx_t_14, &__pyx_t_15, &__pyx_t_16);
            __Pyx_XGOTREF(__pyx_t_14);
            __Pyx_XGOTREF(__pyx_t_15);
            __Pyx_XGOTREF(__pyx_t_16);
            __Pyx_XGOTREF(__pyx_t_17);
            __Pyx_XGOTREF(__pyx_t_18);
            __Pyx_XGOTREF(__pyx_t_19);
            __pyx_t_10 = __pyx_lineno; __pyx_t_12 = __pyx_clineno; __pyx_t_13 = __pyx_filename;
            {
              __Pyx_DECREF(__pyx_v_ex); __pyx_v_ex = 0;
            }
            if (PY_MAJOR_VERSION >= 3) {
              __Pyx_XGIVEREF(__pyx_t_17);
              __Pyx_XGIVEREF(__pyx_t_18);
              __Pyx_XGIVEREF(__pyx_t_19);
              __Pyx_ExceptionReset(__pyx_t_17, __pyx_t_18, __pyx_t_19);
            }
            __Pyx_XGIVEREF(__pyx_t_14);
            __Pyx_XGIVEREF(__pyx_t_15);
            __Pyx_XGIVEREF(__pyx_t_16);
            __Pyx_ErrRestore(__pyx_t_14, __pyx_t_15, __pyx_t_16);
            __pyx_t_14 = 0; __pyx_t_15 = 0; __pyx_t_16 = 0; __pyx_t_17 = 0; __pyx_t_18 = 0; __pyx_t_19 = 0;
            __pyx_lineno = __pyx_t_10; __pyx_clineno = __pyx_t_12; __pyx_filename = __pyx_t_13;
            goto __pyx_L13_except_error;
          }
        }
      }
+0280:             raise ValueError(
          __pyx_t_9 = __Pyx_PyObject_CallOneArg(__pyx_builtin_ValueError, __pyx_t_11); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 280, __pyx_L22_error)
          __Pyx_GOTREF(__pyx_t_9);
          __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
+0281:                 f"Invalid Decimal conversion of {obj}"
          __pyx_t_9 = __Pyx_PyObject_FormatSimple(__pyx_v_obj, __pyx_empty_unicode); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 281, __pyx_L22_error)
          __Pyx_GOTREF(__pyx_t_9);
          __pyx_t_11 = __Pyx_PyUnicode_Concat(__pyx_kp_u_Invalid_Decimal_conversion_of, __pyx_t_9); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 281, __pyx_L22_error)
          __Pyx_GOTREF(__pyx_t_11);
          __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
+0282:             ) from ex
          __Pyx_Raise(__pyx_t_9, 0, 0, __pyx_v_ex);
          __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
          __PYX_ERR(0, 280, __pyx_L22_error)
        }
+0283:         except (TypeError, ValueError):
      __pyx_t_12 = __Pyx_PyErr_ExceptionMatches2(__pyx_builtin_TypeError, __pyx_builtin_ValueError);
      if (__pyx_t_12) {
        __Pyx_AddTraceback("datamodel.converters.to_decimal", __pyx_clineno, __pyx_lineno, __pyx_filename);
        if (__Pyx_GetException(&__pyx_t_2, &__pyx_t_6, &__pyx_t_7) < 0) __PYX_ERR(0, 283, __pyx_L13_except_error)
        __Pyx_XGOTREF(__pyx_t_2);
        __Pyx_XGOTREF(__pyx_t_6);
        __Pyx_XGOTREF(__pyx_t_7);
+0284:             return None
        __Pyx_XDECREF(__pyx_r);
        __pyx_r = Py_None; __Pyx_INCREF(Py_None);
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
        __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
        goto __pyx_L14_except_return;
      }
      goto __pyx_L13_except_error;
 0285: 
+0286: TIMEDELTA_RE = re.compile(r"(-)?(\d{1,3}):(\d{1,2}):(\d{1,2})(?:.(\d{1,6}))?")
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_re); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 286, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_compile); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 286, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_tuple__32, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 286, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_TIMEDELTA_RE, __pyx_t_2) < 0) __PYX_ERR(0, 286, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
/* … */
  __pyx_tuple__32 = PyTuple_Pack(1, __pyx_kp_u_d_1_3_d_1_2_d_1_2_d_1_6); if (unlikely(!__pyx_tuple__32)) __PYX_ERR(0, 286, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__32);
  __Pyx_GIVEREF(__pyx_tuple__32);
 0287: 
+0288: cdef int _convert_second_fraction(s):
static int __pyx_f_9datamodel_10converters__convert_second_fraction(PyObject *__pyx_v_s) {
  int __pyx_r;
  __Pyx_INCREF(__pyx_v_s);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("datamodel.converters._convert_second_fraction", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_s);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+0289:     if not s:
  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_s); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 289, __pyx_L1_error)
  __pyx_t_2 = (!__pyx_t_1);
  if (__pyx_t_2) {
/* … */
  }
+0290:         return 0
    __pyx_r = 0;
    goto __pyx_L0;
 0291:     # Pad zeros to ensure the fraction length in microseconds
+0292:     s = s.ljust(6, "0")
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_s, __pyx_n_s_ljust); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 292, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_tuple__4, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 292, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF_SET(__pyx_v_s, __pyx_t_4);
  __pyx_t_4 = 0;
/* … */
  __pyx_tuple__4 = PyTuple_Pack(2, __pyx_int_6, __pyx_kp_u_0); if (unlikely(!__pyx_tuple__4)) __PYX_ERR(0, 292, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__4);
  __Pyx_GIVEREF(__pyx_tuple__4);
+0293:     return int(s[:6])
  __pyx_t_4 = __Pyx_PyObject_GetSlice(__pyx_v_s, 0, 6, NULL, NULL, &__pyx_slice__5, 0, 1, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 293, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_3 = __Pyx_PyNumber_Int(__pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 293, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_5 = __Pyx_PyInt_As_int(__pyx_t_3); if (unlikely((__pyx_t_5 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 293, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_r = __pyx_t_5;
  goto __pyx_L0;
/* … */
  __pyx_slice__5 = PySlice_New(Py_None, __pyx_int_6, Py_None); if (unlikely(!__pyx_slice__5)) __PYX_ERR(0, 293, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_slice__5);
  __Pyx_GIVEREF(__pyx_slice__5);
 0294: 
+0295: cpdef object to_timedelta(object obj):
static PyObject *__pyx_pw_9datamodel_10converters_19to_timedelta(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_9datamodel_10converters_to_timedelta(PyObject *__pyx_v_obj, CYTHON_UNUSED int __pyx_skip_dispatch) {
  PyObject *__pyx_v_m = NULL;
  PyObject *__pyx_v_groups = NULL;
  PyObject *__pyx_v_negate = NULL;
  PyObject *__pyx_v_hours = NULL;
  PyObject *__pyx_v_minutes = NULL;
  PyObject *__pyx_v_seconds = NULL;
  PyObject *__pyx_v_microseconds = NULL;
  PyObject *__pyx_v_tdelta = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_INCREF(__pyx_v_obj);
/* … */
  /* 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_11);
  __Pyx_XDECREF(__pyx_t_12);
  __Pyx_AddTraceback("datamodel.converters.to_timedelta", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_m);
  __Pyx_XDECREF(__pyx_v_groups);
  __Pyx_XDECREF(__pyx_v_negate);
  __Pyx_XDECREF(__pyx_v_hours);
  __Pyx_XDECREF(__pyx_v_minutes);
  __Pyx_XDECREF(__pyx_v_seconds);
  __Pyx_XDECREF(__pyx_v_microseconds);
  __Pyx_XDECREF(__pyx_v_tdelta);
  __Pyx_XDECREF(__pyx_v_obj);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_9datamodel_10converters_19to_timedelta(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_9datamodel_10converters_18to_timedelta, "to_timedelta(obj)");
static PyMethodDef __pyx_mdef_9datamodel_10converters_19to_timedelta = {"to_timedelta", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9datamodel_10converters_19to_timedelta, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_9datamodel_10converters_18to_timedelta};
static PyObject *__pyx_pw_9datamodel_10converters_19to_timedelta(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_obj = 0;
  #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("to_timedelta (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_MACROS
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __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 **__pyx_pyargnames[] = {&__pyx_n_s_obj,0};
  PyObject* values[1] = {0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_obj)) != 0)) {
          (void)__Pyx_Arg_NewRef_FASTCALL(values[0]);
          kw_args--;
        }
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 295, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "to_timedelta") < 0)) __PYX_ERR(0, 295, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
    }
    __pyx_v_obj = values[0];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("to_timedelta", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 295, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  {
    Py_ssize_t __pyx_temp;
    for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
      __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]);
    }
  }
  __Pyx_AddTraceback("datamodel.converters.to_timedelta", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_9datamodel_10converters_18to_timedelta(__pyx_self, __pyx_v_obj);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

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

static PyObject *__pyx_pf_9datamodel_10converters_18to_timedelta(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_obj) {
  PyObject *__pyx_r = NULL;
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_9datamodel_10converters_to_timedelta(__pyx_v_obj, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 295, __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("datamodel.converters.to_timedelta", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_9datamodel_10converters_19to_timedelta, 0, __pyx_n_s_to_timedelta, NULL, __pyx_n_s_datamodel_converters, __pyx_d, ((PyObject *)__pyx_codeobj__33)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 295, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_to_timedelta, __pyx_t_2) < 0) __PYX_ERR(0, 295, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
/* … */
  __pyx_codeobj__33 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__23, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_datamodel_converters_pyx, __pyx_n_s_to_timedelta, 295, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__33)) __PYX_ERR(0, 295, __pyx_L1_error)
 0296: 
+0297:     if obj is None:
  __pyx_t_1 = (__pyx_v_obj == Py_None);
  if (__pyx_t_1) {
/* … */
  }
+0298:         return None
    __Pyx_XDECREF(__pyx_r);
    __pyx_r = Py_None; __Pyx_INCREF(Py_None);
    goto __pyx_L0;
+0299:     if isinstance(obj, datetime.timedelta):
  __pyx_t_1 = __Pyx_TypeCheck(__pyx_v_obj, __pyx_ptype_7cpython_8datetime_timedelta); 
  if (__pyx_t_1) {
/* … */
  }
+0300:         return obj
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(__pyx_v_obj);
    __pyx_r = __pyx_v_obj;
    goto __pyx_L0;
 0301: 
+0302:     if isinstance(obj, (bytes, bytearray)):
  __pyx_t_2 = PyBytes_Check(__pyx_v_obj); 
  if (!__pyx_t_2) {
  } else {
    __pyx_t_1 = __pyx_t_2;
    goto __pyx_L6_bool_binop_done;
  }
  __pyx_t_2 = PyByteArray_Check(__pyx_v_obj); 
  __pyx_t_1 = __pyx_t_2;
  __pyx_L6_bool_binop_done:;
  if (__pyx_t_1) {
/* … */
  }
+0303:         obj = obj.decode("ascii")
    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_obj, __pyx_n_s_decode); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 303, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_5 = NULL;
    __pyx_t_6 = 0;
    #if CYTHON_UNPACK_METHODS
    if (likely(PyMethod_Check(__pyx_t_4))) {
      __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_4);
      if (likely(__pyx_t_5)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
        __Pyx_INCREF(__pyx_t_5);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_4, function);
        __pyx_t_6 = 1;
      }
    }
    #endif
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_n_u_ascii};
      __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_4, __pyx_callargs+1-__pyx_t_6, 1+__pyx_t_6);
      __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
      if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 303, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    }
    __Pyx_DECREF_SET(__pyx_v_obj, __pyx_t_3);
    __pyx_t_3 = 0;
 0304: 
+0305:     m = TIMEDELTA_RE.match(obj)
  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_TIMEDELTA_RE); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 305, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_match); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 305, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_4 = NULL;
  __pyx_t_6 = 0;
  #if CYTHON_UNPACK_METHODS
  if (unlikely(PyMethod_Check(__pyx_t_5))) {
    __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_5);
    if (likely(__pyx_t_4)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
      __Pyx_INCREF(__pyx_t_4);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_5, function);
      __pyx_t_6 = 1;
    }
  }
  #endif
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_v_obj};
    __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_5, __pyx_callargs+1-__pyx_t_6, 1+__pyx_t_6);
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 305, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  }
  __pyx_v_m = __pyx_t_3;
  __pyx_t_3 = 0;
+0306:     if not m:
  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_m); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 306, __pyx_L1_error)
  __pyx_t_2 = (!__pyx_t_1);
  if (__pyx_t_2) {
/* … */
  }
+0307:         return obj
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(__pyx_v_obj);
    __pyx_r = __pyx_v_obj;
    goto __pyx_L0;
 0308: 
+0309:     try:
  {
    /*try:*/ {
/* … */
    }
    __pyx_L9_error:;
    __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
    __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
/* … */
    __pyx_L11_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_L13_try_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;
  }
+0310:         groups = list(m.groups())
      __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_m, __pyx_n_s_groups); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 310, __pyx_L9_error)
      __Pyx_GOTREF(__pyx_t_5);
      __pyx_t_4 = NULL;
      __pyx_t_6 = 0;
      #if CYTHON_UNPACK_METHODS
      if (likely(PyMethod_Check(__pyx_t_5))) {
        __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_5);
        if (likely(__pyx_t_4)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
          __Pyx_INCREF(__pyx_t_4);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_5, function);
          __pyx_t_6 = 1;
        }
      }
      #endif
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_4, NULL};
        __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_5, __pyx_callargs+1-__pyx_t_6, 0+__pyx_t_6);
        __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
        if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 310, __pyx_L9_error)
        __Pyx_GOTREF(__pyx_t_3);
        __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      }
      __pyx_t_5 = __Pyx_PySequence_ListKeepNew(__pyx_t_3); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 310, __pyx_L9_error)
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __pyx_v_groups = ((PyObject*)__pyx_t_5);
      __pyx_t_5 = 0;
+0311:         groups[-1] = _convert_second_fraction(groups[-1])
      __pyx_t_5 = __Pyx_GetItemInt_List(__pyx_v_groups, -1L, long, 1, __Pyx_PyInt_From_long, 1, 1, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 311, __pyx_L9_error)
      __Pyx_GOTREF(__pyx_t_5);
      __pyx_t_10 = __pyx_f_9datamodel_10converters__convert_second_fraction(__pyx_t_5); if (unlikely(__pyx_t_10 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 311, __pyx_L9_error)
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __pyx_t_5 = __Pyx_PyInt_From_int(__pyx_t_10); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 311, __pyx_L9_error)
      __Pyx_GOTREF(__pyx_t_5);
      if (unlikely((__Pyx_SetItemInt(__pyx_v_groups, -1L, __pyx_t_5, long, 1, __Pyx_PyInt_From_long, 1, 1, 1) < 0))) __PYX_ERR(0, 311, __pyx_L9_error)
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+0312:         negate = -1 if groups[0] else 1
      __pyx_t_3 = __Pyx_GetItemInt_List(__pyx_v_groups, 0, long, 1, __Pyx_PyInt_From_long, 1, 0, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 312, __pyx_L9_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 312, __pyx_L9_error)
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      if (__pyx_t_2) {
        __Pyx_INCREF(__pyx_int_neg_1);
        __pyx_t_5 = __pyx_int_neg_1;
      } else {
        __Pyx_INCREF(__pyx_int_1);
        __pyx_t_5 = __pyx_int_1;
      }
      __pyx_v_negate = __pyx_t_5;
      __pyx_t_5 = 0;
+0313:         hours, minutes, seconds, microseconds = groups[1:]
      __pyx_t_5 = __Pyx_PyList_GetSlice(__pyx_v_groups, 1, PY_SSIZE_T_MAX); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 313, __pyx_L9_error)
      __Pyx_GOTREF(__pyx_t_5);
      if (1) {
        PyObject* sequence = __pyx_t_5;
        Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
        if (unlikely(size != 4)) {
          if (size > 4) __Pyx_RaiseTooManyValuesError(4);
          else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
          __PYX_ERR(0, 313, __pyx_L9_error)
        }
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_3 = PyList_GET_ITEM(sequence, 0); 
        __pyx_t_4 = PyList_GET_ITEM(sequence, 1); 
        __pyx_t_11 = PyList_GET_ITEM(sequence, 2); 
        __pyx_t_12 = PyList_GET_ITEM(sequence, 3); 
        __Pyx_INCREF(__pyx_t_3);
        __Pyx_INCREF(__pyx_t_4);
        __Pyx_INCREF(__pyx_t_11);
        __Pyx_INCREF(__pyx_t_12);
        #else
        {
          Py_ssize_t i;
          PyObject** temps[4] = {&__pyx_t_3,&__pyx_t_4,&__pyx_t_11,&__pyx_t_12};
          for (i=0; i < 4; i++) {
            PyObject* item = PySequence_ITEM(sequence, i); if (unlikely(!item)) __PYX_ERR(0, 313, __pyx_L9_error)
            __Pyx_GOTREF(item);
            *(temps[i]) = item;
          }
        }
        #endif
        __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      }
      __pyx_v_hours = __pyx_t_3;
      __pyx_t_3 = 0;
      __pyx_v_minutes = __pyx_t_4;
      __pyx_t_4 = 0;
      __pyx_v_seconds = __pyx_t_11;
      __pyx_t_11 = 0;
      __pyx_v_microseconds = __pyx_t_12;
      __pyx_t_12 = 0;
 0314:         tdelta = (
+0315:                 datetime.timedelta(
      __pyx_t_12 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_7cpython_8datetime_timedelta), __pyx_empty_tuple, __pyx_t_5); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 315, __pyx_L9_error)
      __Pyx_GOTREF(__pyx_t_12);
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+0316:                     hours=int(hours),
      __pyx_t_5 = __Pyx_PyDict_NewPresized(4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 316, __pyx_L9_error)
      __Pyx_GOTREF(__pyx_t_5);
      __pyx_t_12 = __Pyx_PyNumber_Int(__pyx_v_hours); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 316, __pyx_L9_error)
      __Pyx_GOTREF(__pyx_t_12);
      if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_hours, __pyx_t_12) < 0) __PYX_ERR(0, 316, __pyx_L9_error)
      __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
+0317:                     minutes=int(minutes),
      __pyx_t_12 = __Pyx_PyNumber_Int(__pyx_v_minutes); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 317, __pyx_L9_error)
      __Pyx_GOTREF(__pyx_t_12);
      if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_minutes, __pyx_t_12) < 0) __PYX_ERR(0, 316, __pyx_L9_error)
      __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
+0318:                     seconds=int(seconds),
      __pyx_t_12 = __Pyx_PyNumber_Int(__pyx_v_seconds); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 318, __pyx_L9_error)
      __Pyx_GOTREF(__pyx_t_12);
      if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_seconds, __pyx_t_12) < 0) __PYX_ERR(0, 316, __pyx_L9_error)
      __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
+0319:                     microseconds=int(microseconds),
      __pyx_t_12 = __Pyx_PyNumber_Int(__pyx_v_microseconds); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 319, __pyx_L9_error)
      __Pyx_GOTREF(__pyx_t_12);
      if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_microseconds, __pyx_t_12) < 0) __PYX_ERR(0, 316, __pyx_L9_error)
      __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
 0320:                 )
+0321:                 * negate
      __pyx_t_5 = PyNumber_Multiply(__pyx_t_12, __pyx_v_negate); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 321, __pyx_L9_error)
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
      __pyx_v_tdelta = __pyx_t_5;
      __pyx_t_5 = 0;
 0322:         )
+0323:         return tdelta
      __Pyx_XDECREF(__pyx_r);
      __Pyx_INCREF(__pyx_v_tdelta);
      __pyx_r = __pyx_v_tdelta;
      goto __pyx_L13_try_return;
+0324:     except ValueError:
    __pyx_t_10 = __Pyx_PyErr_ExceptionMatches(__pyx_builtin_ValueError);
    if (__pyx_t_10) {
      __Pyx_AddTraceback("datamodel.converters.to_timedelta", __pyx_clineno, __pyx_lineno, __pyx_filename);
      if (__Pyx_GetException(&__pyx_t_5, &__pyx_t_12, &__pyx_t_11) < 0) __PYX_ERR(0, 324, __pyx_L11_except_error)
      __Pyx_XGOTREF(__pyx_t_5);
      __Pyx_XGOTREF(__pyx_t_12);
      __Pyx_XGOTREF(__pyx_t_11);
+0325:         raise ValueError(
      __pyx_t_4 = __Pyx_PyObject_CallOneArg(__pyx_builtin_ValueError, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 325, __pyx_L11_except_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_Raise(__pyx_t_4, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __PYX_ERR(0, 325, __pyx_L11_except_error)
    }
    goto __pyx_L11_except_error;
+0326:             f"Invalid timedelta Object: {obj}"
      __pyx_t_4 = __Pyx_PyObject_FormatSimple(__pyx_v_obj, __pyx_empty_unicode); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 326, __pyx_L11_except_error)
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_t_3 = __Pyx_PyUnicode_Concat(__pyx_kp_u_Invalid_timedelta_Object, __pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 326, __pyx_L11_except_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 0327:         )
 0328: 
+0329: TIME_RE = re.compile(r"(\d{1,2}):(\d{1,2}):(\d{1,2})(?:.(\d{1,6}))?")
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_re); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 329, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_compile); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 329, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_tuple__34, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 329, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_TIME_RE, __pyx_t_2) < 0) __PYX_ERR(0, 329, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
/* … */
  __pyx_tuple__34 = PyTuple_Pack(1, __pyx_kp_u_d_1_2_d_1_2_d_1_2_d_1_6); if (unlikely(!__pyx_tuple__34)) __PYX_ERR(0, 329, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__34);
  __Pyx_GIVEREF(__pyx_tuple__34);
 0330: 
+0331: cpdef object to_time(object obj):
static PyObject *__pyx_pw_9datamodel_10converters_21to_time(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_9datamodel_10converters_to_time(PyObject *__pyx_v_obj, CYTHON_UNUSED int __pyx_skip_dispatch) {
  PyObject *__pyx_v_m = NULL;
  PyObject *__pyx_v_groups = NULL;
  PyObject *__pyx_v_hours = NULL;
  PyObject *__pyx_v_minutes = NULL;
  PyObject *__pyx_v_seconds = NULL;
  PyObject *__pyx_v_microseconds = NULL;
  PyObject *__pyx_v_e = NULL;
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  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_11);
  __Pyx_XDECREF(__pyx_t_14);
  __Pyx_AddTraceback("datamodel.converters.to_time", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_m);
  __Pyx_XDECREF(__pyx_v_groups);
  __Pyx_XDECREF(__pyx_v_hours);
  __Pyx_XDECREF(__pyx_v_minutes);
  __Pyx_XDECREF(__pyx_v_seconds);
  __Pyx_XDECREF(__pyx_v_microseconds);
  __Pyx_XDECREF(__pyx_v_e);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_9datamodel_10converters_21to_time(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_9datamodel_10converters_20to_time, "to_time(obj)\nto_time.\n\n    Returns obj converted to datetime.time.\n    ");
static PyMethodDef __pyx_mdef_9datamodel_10converters_21to_time = {"to_time", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9datamodel_10converters_21to_time, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_9datamodel_10converters_20to_time};
static PyObject *__pyx_pw_9datamodel_10converters_21to_time(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_obj = 0;
  #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("to_time (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_MACROS
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __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 **__pyx_pyargnames[] = {&__pyx_n_s_obj,0};
  PyObject* values[1] = {0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_obj)) != 0)) {
          (void)__Pyx_Arg_NewRef_FASTCALL(values[0]);
          kw_args--;
        }
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 331, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "to_time") < 0)) __PYX_ERR(0, 331, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
    }
    __pyx_v_obj = values[0];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("to_time", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 331, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  {
    Py_ssize_t __pyx_temp;
    for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
      __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]);
    }
  }
  __Pyx_AddTraceback("datamodel.converters.to_time", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_9datamodel_10converters_20to_time(__pyx_self, __pyx_v_obj);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

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

static PyObject *__pyx_pf_9datamodel_10converters_20to_time(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_obj) {
  PyObject *__pyx_r = NULL;
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_9datamodel_10converters_to_time(__pyx_v_obj, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 331, __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("datamodel.converters.to_time", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_9datamodel_10converters_21to_time, 0, __pyx_n_s_to_time, NULL, __pyx_n_s_datamodel_converters, __pyx_d, ((PyObject *)__pyx_codeobj__35)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 331, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_to_time, __pyx_t_2) < 0) __PYX_ERR(0, 331, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
/* … */
  __pyx_codeobj__35 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__23, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_datamodel_converters_pyx, __pyx_n_s_to_time, 331, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__35)) __PYX_ERR(0, 331, __pyx_L1_error)
 0332:     """to_time.
 0333: 
 0334:     Returns obj converted to datetime.time.
 0335:     """
+0336:     if obj is None:
  __pyx_t_1 = (__pyx_v_obj == Py_None);
  if (__pyx_t_1) {
/* … */
  }
+0337:         return None
    __Pyx_XDECREF(__pyx_r);
    __pyx_r = Py_None; __Pyx_INCREF(Py_None);
    goto __pyx_L0;
+0338:     if isinstance(obj, datetime.time):
  __pyx_t_1 = __Pyx_TypeCheck(__pyx_v_obj, __pyx_ptype_7cpython_8datetime_time); 
  if (__pyx_t_1) {
/* … */
  }
+0339:         return obj
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(__pyx_v_obj);
    __pyx_r = __pyx_v_obj;
    goto __pyx_L0;
+0340:     elif callable(obj):
  __pyx_t_1 = __Pyx_PyCallable_Check(__pyx_v_obj); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 340, __pyx_L1_error)
  if (__pyx_t_1) {
/* … */
    goto __pyx_L4;
  }
 0341:         # its a function callable returning a value
+0342:         try:
    {
      /*try:*/ {
/* … */
      }
      __pyx_L5_error:;
      __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
/* … */
      __pyx_L9_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;
      __pyx_L6_exception_handled:;
      __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);
    }
+0343:             return obj()
        __Pyx_XDECREF(__pyx_r);
        __Pyx_INCREF(__pyx_v_obj);
        __pyx_t_6 = __pyx_v_obj; __pyx_t_7 = NULL;
        __pyx_t_8 = 0;
        #if CYTHON_UNPACK_METHODS
        if (unlikely(PyMethod_Check(__pyx_t_6))) {
          __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_6);
          if (likely(__pyx_t_7)) {
            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6);
            __Pyx_INCREF(__pyx_t_7);
            __Pyx_INCREF(function);
            __Pyx_DECREF_SET(__pyx_t_6, function);
            __pyx_t_8 = 1;
          }
        }
        #endif
        {
          PyObject *__pyx_callargs[2] = {__pyx_t_7, NULL};
          __pyx_t_5 = __Pyx_PyObject_FastCall(__pyx_t_6, __pyx_callargs+1-__pyx_t_8, 0+__pyx_t_8);
          __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
          if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 343, __pyx_L5_error)
          __Pyx_GOTREF(__pyx_t_5);
          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
        }
        __pyx_r = __pyx_t_5;
        __pyx_t_5 = 0;
        goto __pyx_L9_try_return;
+0344:         except:
      /*except:*/ {
        __Pyx_ErrRestore(0,0,0);
        goto __pyx_L6_exception_handled;
      }
 0345:             pass
 0346:     else:
+0347:         try:
  /*else*/ {
    {
      /*try:*/ {
/* … */
      }
      __pyx_L11_error:;
      __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
/* … */
      __pyx_L13_except_error:;
      __Pyx_XGIVEREF(__pyx_t_4);
      __Pyx_XGIVEREF(__pyx_t_3);
      __Pyx_XGIVEREF(__pyx_t_2);
      __Pyx_ExceptionReset(__pyx_t_4, __pyx_t_3, __pyx_t_2);
      goto __pyx_L1_error;
      __pyx_L15_try_return:;
      __Pyx_XGIVEREF(__pyx_t_4);
      __Pyx_XGIVEREF(__pyx_t_3);
      __Pyx_XGIVEREF(__pyx_t_2);
      __Pyx_ExceptionReset(__pyx_t_4, __pyx_t_3, __pyx_t_2);
      goto __pyx_L0;
      __pyx_L12_exception_handled:;
      __Pyx_XGIVEREF(__pyx_t_4);
      __Pyx_XGIVEREF(__pyx_t_3);
      __Pyx_XGIVEREF(__pyx_t_2);
      __Pyx_ExceptionReset(__pyx_t_4, __pyx_t_3, __pyx_t_2);
    }
+0348:             return datetime.time(*map(int, obj.split(':')))
        __Pyx_XDECREF(__pyx_r);
        __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_obj, __pyx_n_s_split); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 348, __pyx_L11_error)
        __Pyx_GOTREF(__pyx_t_6);
        __pyx_t_7 = NULL;
        __pyx_t_8 = 0;
        #if CYTHON_UNPACK_METHODS
        if (likely(PyMethod_Check(__pyx_t_6))) {
          __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_6);
          if (likely(__pyx_t_7)) {
            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6);
            __Pyx_INCREF(__pyx_t_7);
            __Pyx_INCREF(function);
            __Pyx_DECREF_SET(__pyx_t_6, function);
            __pyx_t_8 = 1;
          }
        }
        #endif
        {
          PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_kp_u__6};
          __pyx_t_5 = __Pyx_PyObject_FastCall(__pyx_t_6, __pyx_callargs+1-__pyx_t_8, 1+__pyx_t_8);
          __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
          if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 348, __pyx_L11_error)
          __Pyx_GOTREF(__pyx_t_5);
          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
        }
        __pyx_t_6 = PyTuple_New(2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 348, __pyx_L11_error)
        __Pyx_GOTREF(__pyx_t_6);
        __Pyx_INCREF((PyObject *)(&PyInt_Type));
        __Pyx_GIVEREF((PyObject *)(&PyInt_Type));
        if (__Pyx_PyTuple_SET_ITEM(__pyx_t_6, 0, ((PyObject *)(&PyInt_Type)))) __PYX_ERR(0, 348, __pyx_L11_error);
        __Pyx_GIVEREF(__pyx_t_5);
        if (__Pyx_PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_t_5)) __PYX_ERR(0, 348, __pyx_L11_error);
        __pyx_t_5 = 0;
        __pyx_t_5 = __Pyx_PyObject_Call(__pyx_builtin_map, __pyx_t_6, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 348, __pyx_L11_error)
        __Pyx_GOTREF(__pyx_t_5);
        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
        __pyx_t_6 = __Pyx_PySequence_Tuple(__pyx_t_5); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 348, __pyx_L11_error)
        __Pyx_GOTREF(__pyx_t_6);
        __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
        __pyx_t_5 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_7cpython_8datetime_time), __pyx_t_6, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 348, __pyx_L11_error)
        __Pyx_GOTREF(__pyx_t_5);
        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
        __pyx_r = __pyx_t_5;
        __pyx_t_5 = 0;
        goto __pyx_L15_try_return;
+0349:         except (ValueError, TypeError):
      __pyx_t_9 = __Pyx_PyErr_ExceptionMatches2(__pyx_builtin_ValueError, __pyx_builtin_TypeError);
      if (__pyx_t_9) {
        __Pyx_ErrRestore(0,0,0);
        goto __pyx_L12_exception_handled;
      }
      goto __pyx_L13_except_error;
 0350:             pass
+0351:         m = TIME_RE.match(obj)
    __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_TIME_RE); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 351, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_match); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 351, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __pyx_t_6 = NULL;
    __pyx_t_8 = 0;
    #if CYTHON_UNPACK_METHODS
    if (unlikely(PyMethod_Check(__pyx_t_7))) {
      __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_7);
      if (likely(__pyx_t_6)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7);
        __Pyx_INCREF(__pyx_t_6);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_7, function);
        __pyx_t_8 = 1;
      }
    }
    #endif
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_v_obj};
      __pyx_t_5 = __Pyx_PyObject_FastCall(__pyx_t_7, __pyx_callargs+1-__pyx_t_8, 1+__pyx_t_8);
      __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
      if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 351, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    }
    __pyx_v_m = __pyx_t_5;
    __pyx_t_5 = 0;
+0352:         if not m:
    __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_m); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 352, __pyx_L1_error)
    __pyx_t_10 = (!__pyx_t_1);
    if (__pyx_t_10) {
/* … */
    }
+0353:             return obj
      __Pyx_XDECREF(__pyx_r);
      __Pyx_INCREF(__pyx_v_obj);
      __pyx_r = __pyx_v_obj;
      goto __pyx_L0;
+0354:         try:
    {
      /*try:*/ {
/* … */
      }
      __pyx_L18_error:;
      __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
      __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
/* … */
      __pyx_L20_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_L22_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;
    }
  }
  __pyx_L4:;
+0355:             groups = list(m.groups())
        __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_m, __pyx_n_s_groups); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 355, __pyx_L18_error)
        __Pyx_GOTREF(__pyx_t_7);
        __pyx_t_6 = NULL;
        __pyx_t_8 = 0;
        #if CYTHON_UNPACK_METHODS
        if (likely(PyMethod_Check(__pyx_t_7))) {
          __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_7);
          if (likely(__pyx_t_6)) {
            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7);
            __Pyx_INCREF(__pyx_t_6);
            __Pyx_INCREF(function);
            __Pyx_DECREF_SET(__pyx_t_7, function);
            __pyx_t_8 = 1;
          }
        }
        #endif
        {
          PyObject *__pyx_callargs[2] = {__pyx_t_6, NULL};
          __pyx_t_5 = __Pyx_PyObject_FastCall(__pyx_t_7, __pyx_callargs+1-__pyx_t_8, 0+__pyx_t_8);
          __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
          if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 355, __pyx_L18_error)
          __Pyx_GOTREF(__pyx_t_5);
          __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
        }
        __pyx_t_7 = __Pyx_PySequence_ListKeepNew(__pyx_t_5); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 355, __pyx_L18_error)
        __Pyx_GOTREF(__pyx_t_7);
        __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
        __pyx_v_groups = ((PyObject*)__pyx_t_7);
        __pyx_t_7 = 0;
+0356:             groups[-1] = _convert_second_fraction(groups[-1])
        __pyx_t_7 = __Pyx_GetItemInt_List(__pyx_v_groups, -1L, long, 1, __Pyx_PyInt_From_long, 1, 1, 1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 356, __pyx_L18_error)
        __Pyx_GOTREF(__pyx_t_7);
        __pyx_t_9 = __pyx_f_9datamodel_10converters__convert_second_fraction(__pyx_t_7); if (unlikely(__pyx_t_9 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 356, __pyx_L18_error)
        __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
        __pyx_t_7 = __Pyx_PyInt_From_int(__pyx_t_9); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 356, __pyx_L18_error)
        __Pyx_GOTREF(__pyx_t_7);
        if (unlikely((__Pyx_SetItemInt(__pyx_v_groups, -1L, __pyx_t_7, long, 1, __Pyx_PyInt_From_long, 1, 1, 1) < 0))) __PYX_ERR(0, 356, __pyx_L18_error)
        __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+0357:             hours, minutes, seconds, microseconds = groups
        if (1) {
          PyObject* sequence = __pyx_v_groups;
          Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
          if (unlikely(size != 4)) {
            if (size > 4) __Pyx_RaiseTooManyValuesError(4);
            else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
            __PYX_ERR(0, 357, __pyx_L18_error)
          }
          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
          __pyx_t_7 = PyList_GET_ITEM(sequence, 0); 
          __pyx_t_5 = PyList_GET_ITEM(sequence, 1); 
          __pyx_t_6 = PyList_GET_ITEM(sequence, 2); 
          __pyx_t_11 = PyList_GET_ITEM(sequence, 3); 
          __Pyx_INCREF(__pyx_t_7);
          __Pyx_INCREF(__pyx_t_5);
          __Pyx_INCREF(__pyx_t_6);
          __Pyx_INCREF(__pyx_t_11);
          #else
          {
            Py_ssize_t i;
            PyObject** temps[4] = {&__pyx_t_7,&__pyx_t_5,&__pyx_t_6,&__pyx_t_11};
            for (i=0; i < 4; i++) {
              PyObject* item = PySequence_ITEM(sequence, i); if (unlikely(!item)) __PYX_ERR(0, 357, __pyx_L18_error)
              __Pyx_GOTREF(item);
              *(temps[i]) = item;
            }
          }
          #endif
        }
        __pyx_v_hours = __pyx_t_7;
        __pyx_t_7 = 0;
        __pyx_v_minutes = __pyx_t_5;
        __pyx_t_5 = 0;
        __pyx_v_seconds = __pyx_t_6;
        __pyx_t_6 = 0;
        __pyx_v_microseconds = __pyx_t_11;
        __pyx_t_11 = 0;
+0358:             return datetime.time(
        __Pyx_XDECREF(__pyx_r);
/* … */
        __pyx_t_6 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_7cpython_8datetime_time), __pyx_empty_tuple, __pyx_t_11); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 358, __pyx_L18_error)
        __Pyx_GOTREF(__pyx_t_6);
        __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
        __pyx_r = __pyx_t_6;
        __pyx_t_6 = 0;
        goto __pyx_L22_try_return;
+0359:                 hour=int(hours),
        __pyx_t_11 = __Pyx_PyDict_NewPresized(4); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 359, __pyx_L18_error)
        __Pyx_GOTREF(__pyx_t_11);
        __pyx_t_6 = __Pyx_PyNumber_Int(__pyx_v_hours); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 359, __pyx_L18_error)
        __Pyx_GOTREF(__pyx_t_6);
        if (PyDict_SetItem(__pyx_t_11, __pyx_n_s_hour, __pyx_t_6) < 0) __PYX_ERR(0, 359, __pyx_L18_error)
        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+0360:                 minute=int(minutes),
        __pyx_t_6 = __Pyx_PyNumber_Int(__pyx_v_minutes); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 360, __pyx_L18_error)
        __Pyx_GOTREF(__pyx_t_6);
        if (PyDict_SetItem(__pyx_t_11, __pyx_n_s_minute, __pyx_t_6) < 0) __PYX_ERR(0, 359, __pyx_L18_error)
        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+0361:                 second=int(seconds),
        __pyx_t_6 = __Pyx_PyNumber_Int(__pyx_v_seconds); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 361, __pyx_L18_error)
        __Pyx_GOTREF(__pyx_t_6);
        if (PyDict_SetItem(__pyx_t_11, __pyx_n_s_second, __pyx_t_6) < 0) __PYX_ERR(0, 359, __pyx_L18_error)
        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+0362:                 microsecond=int(microseconds),
        __pyx_t_6 = __Pyx_PyNumber_Int(__pyx_v_microseconds); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 362, __pyx_L18_error)
        __Pyx_GOTREF(__pyx_t_6);
        if (PyDict_SetItem(__pyx_t_11, __pyx_n_s_microsecond, __pyx_t_6) < 0) __PYX_ERR(0, 359, __pyx_L18_error)
        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
 0363:             )
+0364:         except (TypeError, ValueError) as e:
      __pyx_t_9 = __Pyx_PyErr_ExceptionMatches2(__pyx_builtin_TypeError, __pyx_builtin_ValueError);
      if (__pyx_t_9) {
        __Pyx_AddTraceback("datamodel.converters.to_time", __pyx_clineno, __pyx_lineno, __pyx_filename);
        if (__Pyx_GetException(&__pyx_t_6, &__pyx_t_11, &__pyx_t_5) < 0) __PYX_ERR(0, 364, __pyx_L20_except_error)
        __Pyx_XGOTREF(__pyx_t_6);
        __Pyx_XGOTREF(__pyx_t_11);
        __Pyx_XGOTREF(__pyx_t_5);
        __Pyx_INCREF(__pyx_t_11);
        __pyx_v_e = __pyx_t_11;
        /*try:*/ {
/* … */
        /*finally:*/ {
          __pyx_L29_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_14); __pyx_t_14 = 0;
            __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
            if (PY_MAJOR_VERSION >= 3) __Pyx_ExceptionSwap(&__pyx_t_20, &__pyx_t_21, &__pyx_t_22);
            if ((PY_MAJOR_VERSION < 3) || 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_9 = __pyx_lineno; __pyx_t_15 = __pyx_clineno; __pyx_t_16 = __pyx_filename;
            {
              __Pyx_DECREF(__pyx_v_e); __pyx_v_e = 0;
            }
            if (PY_MAJOR_VERSION >= 3) {
              __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_9; __pyx_clineno = __pyx_t_15; __pyx_filename = __pyx_t_16;
            goto __pyx_L20_except_error;
          }
        }
      }
      goto __pyx_L20_except_error;
+0365:             raise ValueError(
          __pyx_t_7 = __Pyx_PyObject_CallOneArg(__pyx_builtin_ValueError, __pyx_t_14); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 365, __pyx_L29_error)
          __Pyx_GOTREF(__pyx_t_7);
          __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
          __Pyx_Raise(__pyx_t_7, 0, 0, 0);
          __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
          __PYX_ERR(0, 365, __pyx_L29_error)
        }
+0366:                 f"Invalid Time/Timestamp Object {obj}: {e}"
          __pyx_t_7 = PyTuple_New(4); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 366, __pyx_L29_error)
          __Pyx_GOTREF(__pyx_t_7);
          __pyx_t_12 = 0;
          __pyx_t_13 = 127;
          __Pyx_INCREF(__pyx_kp_u_Invalid_Time_Timestamp_Object);
          __pyx_t_12 += 30;
          __Pyx_GIVEREF(__pyx_kp_u_Invalid_Time_Timestamp_Object);
          PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_kp_u_Invalid_Time_Timestamp_Object);
          __pyx_t_14 = __Pyx_PyObject_FormatSimple(__pyx_v_obj, __pyx_empty_unicode); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 366, __pyx_L29_error)
          __Pyx_GOTREF(__pyx_t_14);
          __pyx_t_13 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_14) > __pyx_t_13) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_14) : __pyx_t_13;
          __pyx_t_12 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_14);
          __Pyx_GIVEREF(__pyx_t_14);
          PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_t_14);
          __pyx_t_14 = 0;
          __Pyx_INCREF(__pyx_kp_u__7);
          __pyx_t_12 += 2;
          __Pyx_GIVEREF(__pyx_kp_u__7);
          PyTuple_SET_ITEM(__pyx_t_7, 2, __pyx_kp_u__7);
          __pyx_t_14 = __Pyx_PyObject_FormatSimple(__pyx_v_e, __pyx_empty_unicode); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 366, __pyx_L29_error)
          __Pyx_GOTREF(__pyx_t_14);
          __pyx_t_13 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_14) > __pyx_t_13) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_14) : __pyx_t_13;
          __pyx_t_12 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_14);
          __Pyx_GIVEREF(__pyx_t_14);
          PyTuple_SET_ITEM(__pyx_t_7, 3, __pyx_t_14);
          __pyx_t_14 = 0;
          __pyx_t_14 = __Pyx_PyUnicode_Join(__pyx_t_7, 4, __pyx_t_12, __pyx_t_13); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 366, __pyx_L29_error)
          __Pyx_GOTREF(__pyx_t_14);
          __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 0367:             )
 0368: 
 0369: 
+0370: cpdef object strtobool(str val):
static PyObject *__pyx_pw_9datamodel_10converters_23strtobool(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_9datamodel_10converters_strtobool(PyObject *__pyx_v_val, CYTHON_UNUSED int __pyx_skip_dispatch) {
  PyObject *__pyx_r = NULL;
  __Pyx_INCREF(__pyx_v_val);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_AddTraceback("datamodel.converters.strtobool", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_val);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_9datamodel_10converters_23strtobool(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_9datamodel_10converters_22strtobool, "strtobool(unicode val)\nConvert a string representation of truth to true (1) or false (0).\n\n    True values are 'y', 'yes', 't', 'true', 'on', and '1'; false values\n    are 'n', 'no', 'f', 'false', 'off', and '0'.  Raises ValueError if\n    'val' is anything else.\n    ");
static PyMethodDef __pyx_mdef_9datamodel_10converters_23strtobool = {"strtobool", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9datamodel_10converters_23strtobool, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_9datamodel_10converters_22strtobool};
static PyObject *__pyx_pw_9datamodel_10converters_23strtobool(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_val = 0;
  #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("strtobool (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_MACROS
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __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 **__pyx_pyargnames[] = {&__pyx_n_s_val,0};
  PyObject* values[1] = {0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_val)) != 0)) {
          (void)__Pyx_Arg_NewRef_FASTCALL(values[0]);
          kw_args--;
        }
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 370, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "strtobool") < 0)) __PYX_ERR(0, 370, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
    }
    __pyx_v_val = ((PyObject*)values[0]);
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("strtobool", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 370, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  {
    Py_ssize_t __pyx_temp;
    for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
      __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]);
    }
  }
  __Pyx_AddTraceback("datamodel.converters.strtobool", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_val), (&PyUnicode_Type), 1, "val", 1))) __PYX_ERR(0, 370, __pyx_L1_error)
  __pyx_r = __pyx_pf_9datamodel_10converters_22strtobool(__pyx_self, __pyx_v_val);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

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

static PyObject *__pyx_pf_9datamodel_10converters_22strtobool(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_val) {
  PyObject *__pyx_r = NULL;
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_9datamodel_10converters_strtobool(__pyx_v_val, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 370, __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("datamodel.converters.strtobool", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__36 = PyTuple_Pack(1, __pyx_n_s_val); if (unlikely(!__pyx_tuple__36)) __PYX_ERR(0, 370, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__36);
  __Pyx_GIVEREF(__pyx_tuple__36);
/* … */
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_9datamodel_10converters_23strtobool, 0, __pyx_n_s_strtobool, NULL, __pyx_n_s_datamodel_converters, __pyx_d, ((PyObject *)__pyx_codeobj__37)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 370, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_strtobool, __pyx_t_2) < 0) __PYX_ERR(0, 370, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_codeobj__37 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__36, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_datamodel_converters_pyx, __pyx_n_s_strtobool, 370, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__37)) __PYX_ERR(0, 370, __pyx_L1_error)
 0371:     """Convert a string representation of truth to true (1) or false (0).
 0372: 
 0373:     True values are 'y', 'yes', 't', 'true', 'on', and '1'; false values
 0374:     are 'n', 'no', 'f', 'false', 'off', and '0'.  Raises ValueError if
 0375:     'val' is anything else.
 0376:     """
+0377:     val = val.lower()
  __pyx_t_1 = __Pyx_CallUnboundCMethod0(&__pyx_umethod_PyUnicode_Type_lower, __pyx_v_val); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 377, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (!(likely(PyUnicode_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None) || __Pyx_RaiseUnexpectedTypeError("unicode", __pyx_t_1))) __PYX_ERR(0, 377, __pyx_L1_error)
  __Pyx_DECREF_SET(__pyx_v_val, ((PyObject*)__pyx_t_1));
  __pyx_t_1 = 0;
+0378:     if val in ('y', 'yes', 't', 'true', 'on', '1', 'T'):
  __Pyx_INCREF(__pyx_v_val);
  __pyx_t_2 = __pyx_v_val;
  __pyx_t_4 = (__Pyx_PyUnicode_Equals(__pyx_t_2, __pyx_n_u_y, Py_EQ)); if (unlikely((__pyx_t_4 < 0))) __PYX_ERR(0, 378, __pyx_L1_error)
  if (!__pyx_t_4) {
  } else {
    __pyx_t_3 = __pyx_t_4;
    goto __pyx_L4_bool_binop_done;
  }
  __pyx_t_4 = (__Pyx_PyUnicode_Equals(__pyx_t_2, __pyx_n_u_yes, Py_EQ)); if (unlikely((__pyx_t_4 < 0))) __PYX_ERR(0, 378, __pyx_L1_error)
  if (!__pyx_t_4) {
  } else {
    __pyx_t_3 = __pyx_t_4;
    goto __pyx_L4_bool_binop_done;
  }
  __pyx_t_4 = (__Pyx_PyUnicode_Equals(__pyx_t_2, __pyx_n_u_t, Py_EQ)); if (unlikely((__pyx_t_4 < 0))) __PYX_ERR(0, 378, __pyx_L1_error)
  if (!__pyx_t_4) {
  } else {
    __pyx_t_3 = __pyx_t_4;
    goto __pyx_L4_bool_binop_done;
  }
  __pyx_t_4 = (__Pyx_PyUnicode_Equals(__pyx_t_2, __pyx_n_u_true, Py_EQ)); if (unlikely((__pyx_t_4 < 0))) __PYX_ERR(0, 378, __pyx_L1_error)
  if (!__pyx_t_4) {
  } else {
    __pyx_t_3 = __pyx_t_4;
    goto __pyx_L4_bool_binop_done;
  }
  __pyx_t_4 = (__Pyx_PyUnicode_Equals(__pyx_t_2, __pyx_n_u_on, Py_EQ)); if (unlikely((__pyx_t_4 < 0))) __PYX_ERR(0, 378, __pyx_L1_error)
  if (!__pyx_t_4) {
  } else {
    __pyx_t_3 = __pyx_t_4;
    goto __pyx_L4_bool_binop_done;
  }
  __pyx_t_4 = (__Pyx_PyUnicode_Equals(__pyx_t_2, __pyx_kp_u_1, Py_EQ)); if (unlikely((__pyx_t_4 < 0))) __PYX_ERR(0, 378, __pyx_L1_error)
  if (!__pyx_t_4) {
  } else {
    __pyx_t_3 = __pyx_t_4;
    goto __pyx_L4_bool_binop_done;
  }
  __pyx_t_4 = (__Pyx_PyUnicode_Equals(__pyx_t_2, __pyx_n_u_T, Py_EQ)); if (unlikely((__pyx_t_4 < 0))) __PYX_ERR(0, 378, __pyx_L1_error)
  __pyx_t_3 = __pyx_t_4;
  __pyx_L4_bool_binop_done:;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_4 = __pyx_t_3;
  if (__pyx_t_4) {
/* … */
  }
+0379:         return True
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(Py_True);
    __pyx_r = Py_True;
    goto __pyx_L0;
+0380:     elif val in ('n', 'no', 'f', 'false', 'off', '0', 'none', 'null'):
  __Pyx_INCREF(__pyx_v_val);
  __pyx_t_2 = __pyx_v_val;
  __pyx_t_3 = (__Pyx_PyUnicode_Equals(__pyx_t_2, __pyx_n_u_n, Py_EQ)); if (unlikely((__pyx_t_3 < 0))) __PYX_ERR(0, 380, __pyx_L1_error)
  if (!__pyx_t_3) {
  } else {
    __pyx_t_4 = __pyx_t_3;
    goto __pyx_L11_bool_binop_done;
  }
  __pyx_t_3 = (__Pyx_PyUnicode_Equals(__pyx_t_2, __pyx_n_u_no, Py_EQ)); if (unlikely((__pyx_t_3 < 0))) __PYX_ERR(0, 380, __pyx_L1_error)
  if (!__pyx_t_3) {
  } else {
    __pyx_t_4 = __pyx_t_3;
    goto __pyx_L11_bool_binop_done;
  }
  __pyx_t_3 = (__Pyx_PyUnicode_Equals(__pyx_t_2, __pyx_n_u_f, Py_EQ)); if (unlikely((__pyx_t_3 < 0))) __PYX_ERR(0, 380, __pyx_L1_error)
  if (!__pyx_t_3) {
  } else {
    __pyx_t_4 = __pyx_t_3;
    goto __pyx_L11_bool_binop_done;
  }
  __pyx_t_3 = (__Pyx_PyUnicode_Equals(__pyx_t_2, __pyx_n_u_false, Py_EQ)); if (unlikely((__pyx_t_3 < 0))) __PYX_ERR(0, 380, __pyx_L1_error)
  if (!__pyx_t_3) {
  } else {
    __pyx_t_4 = __pyx_t_3;
    goto __pyx_L11_bool_binop_done;
  }
  __pyx_t_3 = (__Pyx_PyUnicode_Equals(__pyx_t_2, __pyx_n_u_off, Py_EQ)); if (unlikely((__pyx_t_3 < 0))) __PYX_ERR(0, 380, __pyx_L1_error)
  if (!__pyx_t_3) {
  } else {
    __pyx_t_4 = __pyx_t_3;
    goto __pyx_L11_bool_binop_done;
  }
  __pyx_t_3 = (__Pyx_PyUnicode_Equals(__pyx_t_2, __pyx_kp_u_0, Py_EQ)); if (unlikely((__pyx_t_3 < 0))) __PYX_ERR(0, 380, __pyx_L1_error)
  if (!__pyx_t_3) {
  } else {
    __pyx_t_4 = __pyx_t_3;
    goto __pyx_L11_bool_binop_done;
  }
  __pyx_t_3 = (__Pyx_PyUnicode_Equals(__pyx_t_2, __pyx_n_u_none, Py_EQ)); if (unlikely((__pyx_t_3 < 0))) __PYX_ERR(0, 380, __pyx_L1_error)
  if (!__pyx_t_3) {
  } else {
    __pyx_t_4 = __pyx_t_3;
    goto __pyx_L11_bool_binop_done;
  }
  __pyx_t_3 = (__Pyx_PyUnicode_Equals(__pyx_t_2, __pyx_n_u_null, Py_EQ)); if (unlikely((__pyx_t_3 < 0))) __PYX_ERR(0, 380, __pyx_L1_error)
  __pyx_t_4 = __pyx_t_3;
  __pyx_L11_bool_binop_done:;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_3 = __pyx_t_4;
  if (likely(__pyx_t_3)) {
/* … */
  }
+0381:         return False
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(Py_False);
    __pyx_r = Py_False;
    goto __pyx_L0;
 0382:     else:
+0383:         raise ValueError(
  /*else*/ {
/* … */
    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_builtin_ValueError, __pyx_t_7); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 383, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __Pyx_Raise(__pyx_t_1, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __PYX_ERR(0, 383, __pyx_L1_error)
  }
+0384:             f"Invalid truth value for **'{val}'**"
    __pyx_t_1 = PyTuple_New(3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 384, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_5 = 0;
    __pyx_t_6 = 127;
    __Pyx_INCREF(__pyx_kp_u_Invalid_truth_value_for);
    __pyx_t_5 += 27;
    __Pyx_GIVEREF(__pyx_kp_u_Invalid_truth_value_for);
    PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_kp_u_Invalid_truth_value_for);
    __pyx_t_7 = __Pyx_PyUnicode_Unicode(__pyx_v_val); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 384, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __pyx_t_6 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_7) > __pyx_t_6) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_7) : __pyx_t_6;
    __pyx_t_5 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_7);
    __Pyx_GIVEREF(__pyx_t_7);
    PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_t_7);
    __pyx_t_7 = 0;
    __Pyx_INCREF(__pyx_kp_u__8);
    __pyx_t_5 += 3;
    __Pyx_GIVEREF(__pyx_kp_u__8);
    PyTuple_SET_ITEM(__pyx_t_1, 2, __pyx_kp_u__8);
    __pyx_t_7 = __Pyx_PyUnicode_Join(__pyx_t_1, 3, __pyx_t_5, __pyx_t_6); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 384, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 0385:         )
 0386: 
+0387: cpdef object to_boolean(object obj):
static PyObject *__pyx_pw_9datamodel_10converters_25to_boolean(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_9datamodel_10converters_to_boolean(PyObject *__pyx_v_obj, CYTHON_UNUSED int __pyx_skip_dispatch) {
  PyObject *__pyx_r = NULL;
  __Pyx_INCREF(__pyx_v_obj);
/* … */
  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_AddTraceback("datamodel.converters.to_boolean", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_obj);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_9datamodel_10converters_25to_boolean(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_9datamodel_10converters_24to_boolean, "to_boolean(obj)\nto_boolean.\n\n    Convert and returns any object value to boolean version.\n    ");
static PyMethodDef __pyx_mdef_9datamodel_10converters_25to_boolean = {"to_boolean", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9datamodel_10converters_25to_boolean, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_9datamodel_10converters_24to_boolean};
static PyObject *__pyx_pw_9datamodel_10converters_25to_boolean(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_obj = 0;
  #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("to_boolean (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_MACROS
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __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 **__pyx_pyargnames[] = {&__pyx_n_s_obj,0};
  PyObject* values[1] = {0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_obj)) != 0)) {
          (void)__Pyx_Arg_NewRef_FASTCALL(values[0]);
          kw_args--;
        }
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 387, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "to_boolean") < 0)) __PYX_ERR(0, 387, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
    }
    __pyx_v_obj = values[0];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("to_boolean", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 387, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  {
    Py_ssize_t __pyx_temp;
    for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
      __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]);
    }
  }
  __Pyx_AddTraceback("datamodel.converters.to_boolean", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_9datamodel_10converters_24to_boolean(__pyx_self, __pyx_v_obj);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

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

static PyObject *__pyx_pf_9datamodel_10converters_24to_boolean(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_obj) {
  PyObject *__pyx_r = NULL;
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_9datamodel_10converters_to_boolean(__pyx_v_obj, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 387, __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("datamodel.converters.to_boolean", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_9datamodel_10converters_25to_boolean, 0, __pyx_n_s_to_boolean, NULL, __pyx_n_s_datamodel_converters, __pyx_d, ((PyObject *)__pyx_codeobj__38)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 387, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_to_boolean, __pyx_t_2) < 0) __PYX_ERR(0, 387, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
/* … */
  __pyx_codeobj__38 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__23, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_datamodel_converters_pyx, __pyx_n_s_to_boolean, 387, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__38)) __PYX_ERR(0, 387, __pyx_L1_error)
 0388:     """to_boolean.
 0389: 
 0390:     Convert and returns any object value to boolean version.
 0391:     """
+0392:     if obj is None:
  __pyx_t_1 = (__pyx_v_obj == Py_None);
  if (__pyx_t_1) {
/* … */
  }
+0393:         return None
    __Pyx_XDECREF(__pyx_r);
    __pyx_r = Py_None; __Pyx_INCREF(Py_None);
    goto __pyx_L0;
+0394:     if isinstance(obj, bool):
  __pyx_t_2 = ((PyObject*)&PyBool_Type);
  __Pyx_INCREF(__pyx_t_2);
  __pyx_t_1 = PyObject_IsInstance(__pyx_v_obj, __pyx_t_2); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 394, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (__pyx_t_1) {
/* … */
  }
+0395:         return obj
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(__pyx_v_obj);
    __pyx_r = __pyx_v_obj;
    goto __pyx_L0;
+0396:     if isinstance(obj, (bytes, bytearray)):
  __pyx_t_3 = PyBytes_Check(__pyx_v_obj); 
  if (!__pyx_t_3) {
  } else {
    __pyx_t_1 = __pyx_t_3;
    goto __pyx_L6_bool_binop_done;
  }
  __pyx_t_3 = PyByteArray_Check(__pyx_v_obj); 
  __pyx_t_1 = __pyx_t_3;
  __pyx_L6_bool_binop_done:;
  if (__pyx_t_1) {
/* … */
  }
+0397:         obj = obj.decode("ascii")
    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_obj, __pyx_n_s_decode); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 397, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_5 = NULL;
    __pyx_t_6 = 0;
    #if CYTHON_UNPACK_METHODS
    if (likely(PyMethod_Check(__pyx_t_4))) {
      __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_4);
      if (likely(__pyx_t_5)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
        __Pyx_INCREF(__pyx_t_5);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_4, function);
        __pyx_t_6 = 1;
      }
    }
    #endif
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_n_u_ascii};
      __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_4, __pyx_callargs+1-__pyx_t_6, 1+__pyx_t_6);
      __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
      if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 397, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    }
    __Pyx_DECREF_SET(__pyx_v_obj, __pyx_t_2);
    __pyx_t_2 = 0;
+0398:     if isinstance(obj, str):
  __pyx_t_1 = PyUnicode_Check(__pyx_v_obj); 
  if (__pyx_t_1) {
/* … */
  }
+0399:         return strtobool(obj)
    __Pyx_XDECREF(__pyx_r);
    if (!(likely(PyUnicode_CheckExact(__pyx_v_obj))||((__pyx_v_obj) == Py_None) || __Pyx_RaiseUnexpectedTypeError("unicode", __pyx_v_obj))) __PYX_ERR(0, 399, __pyx_L1_error)
    __pyx_t_2 = __pyx_f_9datamodel_10converters_strtobool(((PyObject*)__pyx_v_obj), 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 399, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_r = __pyx_t_2;
    __pyx_t_2 = 0;
    goto __pyx_L0;
+0400:     elif callable(obj):
  __pyx_t_1 = __Pyx_PyCallable_Check(__pyx_v_obj); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 400, __pyx_L1_error)
  if (__pyx_t_1) {
/* … */
    goto __pyx_L8;
  }
 0401:         # its a function callable returning a value
+0402:         try:
    {
      /*try:*/ {
/* … */
      }
      __pyx_L9_error:;
      __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
      __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
/* … */
      __pyx_L13_try_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_L10_exception_handled:;
      __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);
    }
+0403:             return obj()
        __Pyx_XDECREF(__pyx_r);
        __Pyx_INCREF(__pyx_v_obj);
        __pyx_t_4 = __pyx_v_obj; __pyx_t_5 = NULL;
        __pyx_t_6 = 0;
        #if CYTHON_UNPACK_METHODS
        if (unlikely(PyMethod_Check(__pyx_t_4))) {
          __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_4);
          if (likely(__pyx_t_5)) {
            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
            __Pyx_INCREF(__pyx_t_5);
            __Pyx_INCREF(function);
            __Pyx_DECREF_SET(__pyx_t_4, function);
            __pyx_t_6 = 1;
          }
        }
        #endif
        {
          PyObject *__pyx_callargs[2] = {__pyx_t_5, NULL};
          __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_4, __pyx_callargs+1-__pyx_t_6, 0+__pyx_t_6);
          __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
          if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 403, __pyx_L9_error)
          __Pyx_GOTREF(__pyx_t_2);
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
        }
        __pyx_r = __pyx_t_2;
        __pyx_t_2 = 0;
        goto __pyx_L13_try_return;
+0404:         except:
      /*except:*/ {
        __Pyx_ErrRestore(0,0,0);
        goto __pyx_L10_exception_handled;
      }
 0405:             pass
 0406:     else:
+0407:         return bool(obj)
  /*else*/ {
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_obj); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 407, __pyx_L1_error)
    __pyx_t_2 = __Pyx_PyBool_FromLong((!(!__pyx_t_1))); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 407, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_r = __pyx_t_2;
    __pyx_t_2 = 0;
    goto __pyx_L0;
  }
  __pyx_L8:;
 0408: 
+0409: cpdef object to_object(object obj):
static PyObject *__pyx_pw_9datamodel_10converters_27to_object(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_9datamodel_10converters_to_object(PyObject *__pyx_v_obj, CYTHON_UNUSED int __pyx_skip_dispatch) {
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_AddTraceback("datamodel.converters.to_object", __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_9datamodel_10converters_27to_object(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_9datamodel_10converters_26to_object, "to_object(obj)");
static PyMethodDef __pyx_mdef_9datamodel_10converters_27to_object = {"to_object", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9datamodel_10converters_27to_object, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_9datamodel_10converters_26to_object};
static PyObject *__pyx_pw_9datamodel_10converters_27to_object(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_obj = 0;
  #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("to_object (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_MACROS
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __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 **__pyx_pyargnames[] = {&__pyx_n_s_obj,0};
  PyObject* values[1] = {0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_obj)) != 0)) {
          (void)__Pyx_Arg_NewRef_FASTCALL(values[0]);
          kw_args--;
        }
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 409, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "to_object") < 0)) __PYX_ERR(0, 409, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
    }
    __pyx_v_obj = values[0];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("to_object", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 409, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  {
    Py_ssize_t __pyx_temp;
    for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
      __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]);
    }
  }
  __Pyx_AddTraceback("datamodel.converters.to_object", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_9datamodel_10converters_26to_object(__pyx_self, __pyx_v_obj);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

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

static PyObject *__pyx_pf_9datamodel_10converters_26to_object(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_obj) {
  PyObject *__pyx_r = NULL;
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_9datamodel_10converters_to_object(__pyx_v_obj, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 409, __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("datamodel.converters.to_object", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_9datamodel_10converters_27to_object, 0, __pyx_n_s_to_object, NULL, __pyx_n_s_datamodel_converters, __pyx_d, ((PyObject *)__pyx_codeobj__39)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 409, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_to_object, __pyx_t_2) < 0) __PYX_ERR(0, 409, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
/* … */
  __pyx_codeobj__39 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__23, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_datamodel_converters_pyx, __pyx_n_s_to_object, 409, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__39)) __PYX_ERR(0, 409, __pyx_L1_error)
+0410:     if obj is None:
  __pyx_t_1 = (__pyx_v_obj == Py_None);
  if (__pyx_t_1) {
/* … */
  }
+0411:         return None
    __Pyx_XDECREF(__pyx_r);
    __pyx_r = Py_None; __Pyx_INCREF(Py_None);
    goto __pyx_L0;
+0412:     if isinstance(obj, (list, dict,tuple)):
  __pyx_t_2 = PyList_Check(__pyx_v_obj); 
  if (!__pyx_t_2) {
  } else {
    __pyx_t_1 = __pyx_t_2;
    goto __pyx_L5_bool_binop_done;
  }
  __pyx_t_2 = PyDict_Check(__pyx_v_obj); 
  if (!__pyx_t_2) {
  } else {
    __pyx_t_1 = __pyx_t_2;
    goto __pyx_L5_bool_binop_done;
  }
  __pyx_t_2 = PyTuple_Check(__pyx_v_obj); 
  __pyx_t_1 = __pyx_t_2;
  __pyx_L5_bool_binop_done:;
  if (__pyx_t_1) {
/* … */
  }
+0413:         return obj
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(__pyx_v_obj);
    __pyx_r = __pyx_v_obj;
    goto __pyx_L0;
+0414:     elif callable(obj):
  __pyx_t_1 = __Pyx_PyCallable_Check(__pyx_v_obj); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 414, __pyx_L1_error)
  if (__pyx_t_1) {
/* … */
    goto __pyx_L4;
  }
 0415:         # its a function callable returning a value
+0416:         try:
    {
      /*try:*/ {
/* … */
      }
      __pyx_L8_error:;
      __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_L12_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;
      __pyx_L9_exception_handled:;
      __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);
    }
+0417:             return obj()
        __Pyx_XDECREF(__pyx_r);
        __Pyx_INCREF(__pyx_v_obj);
        __pyx_t_7 = __pyx_v_obj; __pyx_t_8 = NULL;
        __pyx_t_9 = 0;
        #if CYTHON_UNPACK_METHODS
        if (unlikely(PyMethod_Check(__pyx_t_7))) {
          __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_7);
          if (likely(__pyx_t_8)) {
            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7);
            __Pyx_INCREF(__pyx_t_8);
            __Pyx_INCREF(function);
            __Pyx_DECREF_SET(__pyx_t_7, function);
            __pyx_t_9 = 1;
          }
        }
        #endif
        {
          PyObject *__pyx_callargs[2] = {__pyx_t_8, NULL};
          __pyx_t_6 = __Pyx_PyObject_FastCall(__pyx_t_7, __pyx_callargs+1-__pyx_t_9, 0+__pyx_t_9);
          __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
          if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 417, __pyx_L8_error)
          __Pyx_GOTREF(__pyx_t_6);
          __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
        }
        __pyx_r = __pyx_t_6;
        __pyx_t_6 = 0;
        goto __pyx_L12_try_return;
+0418:         except:
      /*except:*/ {
        __Pyx_ErrRestore(0,0,0);
        goto __pyx_L9_exception_handled;
      }
 0419:             pass
+0420:     elif isinstance(obj, str):
  __pyx_t_1 = PyUnicode_Check(__pyx_v_obj); 
  if (likely(__pyx_t_1)) {
/* … */
  }
+0421:         try:
    {
      /*try:*/ {
/* … */
      }
      __pyx_L14_error:;
      __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_L16_except_error:;
      __Pyx_XGIVEREF(__pyx_t_5);
      __Pyx_XGIVEREF(__pyx_t_4);
      __Pyx_XGIVEREF(__pyx_t_3);
      __Pyx_ExceptionReset(__pyx_t_5, __pyx_t_4, __pyx_t_3);
      goto __pyx_L1_error;
      __pyx_L18_try_return:;
      __Pyx_XGIVEREF(__pyx_t_5);
      __Pyx_XGIVEREF(__pyx_t_4);
      __Pyx_XGIVEREF(__pyx_t_3);
      __Pyx_ExceptionReset(__pyx_t_5, __pyx_t_4, __pyx_t_3);
      goto __pyx_L0;
      __pyx_L17_except_return:;
      __Pyx_XGIVEREF(__pyx_t_5);
      __Pyx_XGIVEREF(__pyx_t_4);
      __Pyx_XGIVEREF(__pyx_t_3);
      __Pyx_ExceptionReset(__pyx_t_5, __pyx_t_4, __pyx_t_3);
      goto __pyx_L0;
    }
+0422:             return orjson.loads(obj)
        __Pyx_XDECREF(__pyx_r);
        __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_orjson); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 422, __pyx_L14_error)
        __Pyx_GOTREF(__pyx_t_7);
        __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_loads); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 422, __pyx_L14_error)
        __Pyx_GOTREF(__pyx_t_8);
        __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
        __pyx_t_7 = NULL;
        __pyx_t_9 = 0;
        #if CYTHON_UNPACK_METHODS
        if (unlikely(PyMethod_Check(__pyx_t_8))) {
          __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_8);
          if (likely(__pyx_t_7)) {
            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_8);
            __Pyx_INCREF(__pyx_t_7);
            __Pyx_INCREF(function);
            __Pyx_DECREF_SET(__pyx_t_8, function);
            __pyx_t_9 = 1;
          }
        }
        #endif
        {
          PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_v_obj};
          __pyx_t_6 = __Pyx_PyObject_FastCall(__pyx_t_8, __pyx_callargs+1-__pyx_t_9, 1+__pyx_t_9);
          __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
          if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 422, __pyx_L14_error)
          __Pyx_GOTREF(__pyx_t_6);
          __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
        }
        __pyx_r = __pyx_t_6;
        __pyx_t_6 = 0;
        goto __pyx_L18_try_return;
+0423:         except (TypeError, ValueError):
      __pyx_t_10 = __Pyx_PyErr_ExceptionMatches2(__pyx_builtin_TypeError, __pyx_builtin_ValueError);
      if (__pyx_t_10) {
        __Pyx_AddTraceback("datamodel.converters.to_object", __pyx_clineno, __pyx_lineno, __pyx_filename);
        if (__Pyx_GetException(&__pyx_t_6, &__pyx_t_8, &__pyx_t_7) < 0) __PYX_ERR(0, 423, __pyx_L16_except_error)
        __Pyx_XGOTREF(__pyx_t_6);
        __Pyx_XGOTREF(__pyx_t_8);
        __Pyx_XGOTREF(__pyx_t_7);
+0424:             return None
        __Pyx_XDECREF(__pyx_r);
        __pyx_r = Py_None; __Pyx_INCREF(Py_None);
        __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;
        goto __pyx_L17_except_return;
      }
      goto __pyx_L16_except_error;
 0425:     else:
+0426:         raise ValueError(
  /*else*/ {
/* … */
    __pyx_t_7 = __Pyx_PyObject_CallOneArg(__pyx_builtin_ValueError, __pyx_t_8); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 426, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    __Pyx_Raise(__pyx_t_7, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __PYX_ERR(0, 426, __pyx_L1_error)
  }
  __pyx_L4:;
+0427:             f"Can't convert invalid data {obj} to Object"
    __pyx_t_7 = PyTuple_New(3); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 427, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __pyx_t_11 = 0;
    __pyx_t_12 = 127;
    __Pyx_INCREF(__pyx_kp_u_Can_t_convert_invalid_data_2);
    __pyx_t_11 += 27;
    __Pyx_GIVEREF(__pyx_kp_u_Can_t_convert_invalid_data_2);
    PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_kp_u_Can_t_convert_invalid_data_2);
    __pyx_t_8 = __Pyx_PyObject_FormatSimple(__pyx_v_obj, __pyx_empty_unicode); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 427, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __pyx_t_12 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_8) > __pyx_t_12) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_8) : __pyx_t_12;
    __pyx_t_11 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_8);
    __Pyx_GIVEREF(__pyx_t_8);
    PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_t_8);
    __pyx_t_8 = 0;
    __Pyx_INCREF(__pyx_kp_u_to_Object);
    __pyx_t_11 += 10;
    __Pyx_GIVEREF(__pyx_kp_u_to_Object);
    PyTuple_SET_ITEM(__pyx_t_7, 2, __pyx_kp_u_to_Object);
    __pyx_t_8 = __Pyx_PyUnicode_Join(__pyx_t_7, 3, __pyx_t_11, __pyx_t_12); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 427, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 0428:         )
 0429: 
+0430: cpdef bytes to_bytes(object obj):
static PyObject *__pyx_pw_9datamodel_10converters_29to_bytes(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_9datamodel_10converters_to_bytes(PyObject *__pyx_v_obj, CYTHON_UNUSED int __pyx_skip_dispatch) {
  PyObject *__pyx_v_result = NULL;
  PyObject *__pyx_v_e = NULL;
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_10);
  __Pyx_XDECREF(__pyx_t_11);
  __Pyx_AddTraceback("datamodel.converters.to_bytes", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_result);
  __Pyx_XDECREF(__pyx_v_e);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_9datamodel_10converters_29to_bytes(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_9datamodel_10converters_28to_bytes, "to_bytes(obj) -> bytes\n\n    Convert the given object to bytes.\n\n    - If the object is already bytes, return it directly.\n    - If the object is a string, encode it (using UTF-8).\n    - If the object is callable, call it and convert its result.\n    - Otherwise, attempt to convert the object to bytes.\n    If conversion fails, raise a ValueError.\n    ");
static PyMethodDef __pyx_mdef_9datamodel_10converters_29to_bytes = {"to_bytes", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9datamodel_10converters_29to_bytes, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_9datamodel_10converters_28to_bytes};
static PyObject *__pyx_pw_9datamodel_10converters_29to_bytes(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_obj = 0;
  #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("to_bytes (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_MACROS
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __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 **__pyx_pyargnames[] = {&__pyx_n_s_obj,0};
  PyObject* values[1] = {0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_obj)) != 0)) {
          (void)__Pyx_Arg_NewRef_FASTCALL(values[0]);
          kw_args--;
        }
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 430, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "to_bytes") < 0)) __PYX_ERR(0, 430, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
    }
    __pyx_v_obj = values[0];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("to_bytes", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 430, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  {
    Py_ssize_t __pyx_temp;
    for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
      __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]);
    }
  }
  __Pyx_AddTraceback("datamodel.converters.to_bytes", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_9datamodel_10converters_28to_bytes(__pyx_self, __pyx_v_obj);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

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

static PyObject *__pyx_pf_9datamodel_10converters_28to_bytes(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_obj) {
  PyObject *__pyx_r = NULL;
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_9datamodel_10converters_to_bytes(__pyx_v_obj, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 430, __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("datamodel.converters.to_bytes", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_9datamodel_10converters_29to_bytes, 0, __pyx_n_s_to_bytes, NULL, __pyx_n_s_datamodel_converters, __pyx_d, ((PyObject *)__pyx_codeobj__40)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 430, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_to_bytes, __pyx_t_2) < 0) __PYX_ERR(0, 430, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
/* … */
  __pyx_codeobj__40 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__23, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_datamodel_converters_pyx, __pyx_n_s_to_bytes, 430, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__40)) __PYX_ERR(0, 430, __pyx_L1_error)
 0431:     """
 0432:     Convert the given object to bytes.
 0433: 
 0434:     - If the object is already bytes, return it directly.
 0435:     - If the object is a string, encode it (using UTF-8).
 0436:     - If the object is callable, call it and convert its result.
 0437:     - Otherwise, attempt to convert the object to bytes.
 0438:     If conversion fails, raise a ValueError.
 0439:     """
+0440:     if obj is None:
  __pyx_t_1 = (__pyx_v_obj == Py_None);
  if (unlikely(__pyx_t_1)) {
/* … */
  }
+0441:         raise ValueError("Cannot convert None to bytes")
    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__9, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 441, __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, 441, __pyx_L1_error)
/* … */
  __pyx_tuple__9 = PyTuple_Pack(1, __pyx_kp_u_Cannot_convert_None_to_bytes); if (unlikely(!__pyx_tuple__9)) __PYX_ERR(0, 441, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__9);
  __Pyx_GIVEREF(__pyx_tuple__9);
 0442: 
 0443:     # 1. If already bytes, return as is.
+0444:     if isinstance(obj, bytes):
  __pyx_t_1 = PyBytes_Check(__pyx_v_obj); 
  if (__pyx_t_1) {
/* … */
  }
+0445:         return obj
    __Pyx_XDECREF(__pyx_r);
    if (!(likely(PyBytes_CheckExact(__pyx_v_obj))||((__pyx_v_obj) == Py_None) || __Pyx_RaiseUnexpectedTypeError("bytes", __pyx_v_obj))) __PYX_ERR(0, 445, __pyx_L1_error)
    __Pyx_INCREF(__pyx_v_obj);
    __pyx_r = ((PyObject*)__pyx_v_obj);
    goto __pyx_L0;
 0446: 
 0447:     # 2. If it's a string, encode it to bytes.
+0448:     elif isinstance(obj, str):
  __pyx_t_1 = PyUnicode_Check(__pyx_v_obj); 
  if (__pyx_t_1) {
/* … */
  }
+0449:         return obj.encode("utf-8")
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_obj, __pyx_n_s_encode); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 449, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_4 = NULL;
    __pyx_t_5 = 0;
    #if CYTHON_UNPACK_METHODS
    if (likely(PyMethod_Check(__pyx_t_3))) {
      __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3);
      if (likely(__pyx_t_4)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
        __Pyx_INCREF(__pyx_t_4);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_3, function);
        __pyx_t_5 = 1;
      }
    }
    #endif
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_kp_u_utf_8};
      __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_5, 1+__pyx_t_5);
      __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
      if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 449, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    }
    if (!(likely(PyBytes_CheckExact(__pyx_t_2))||((__pyx_t_2) == Py_None) || __Pyx_RaiseUnexpectedTypeError("bytes", __pyx_t_2))) __PYX_ERR(0, 449, __pyx_L1_error)
    __pyx_r = ((PyObject*)__pyx_t_2);
    __pyx_t_2 = 0;
    goto __pyx_L0;
 0450: 
 0451:     # 3. If it's callable, attempt to call it and convert its result.
+0452:     elif callable(obj):
  __pyx_t_1 = __Pyx_PyCallable_Check(__pyx_v_obj); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 452, __pyx_L1_error)
  if (__pyx_t_1) {
/* … */
  }
+0453:         try:
    {
      /*try:*/ {
/* … */
      }
      __pyx_L5_error:;
      __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
/* … */
      __pyx_L7_except_error:;
      __Pyx_XGIVEREF(__pyx_t_6);
      __Pyx_XGIVEREF(__pyx_t_7);
      __Pyx_XGIVEREF(__pyx_t_8);
      __Pyx_ExceptionReset(__pyx_t_6, __pyx_t_7, __pyx_t_8);
      goto __pyx_L1_error;
      __pyx_L9_try_return:;
      __Pyx_XGIVEREF(__pyx_t_6);
      __Pyx_XGIVEREF(__pyx_t_7);
      __Pyx_XGIVEREF(__pyx_t_8);
      __Pyx_ExceptionReset(__pyx_t_6, __pyx_t_7, __pyx_t_8);
      goto __pyx_L0;
    }
+0454:             result = obj()
        __Pyx_INCREF(__pyx_v_obj);
        __pyx_t_3 = __pyx_v_obj; __pyx_t_4 = NULL;
        __pyx_t_5 = 0;
        #if CYTHON_UNPACK_METHODS
        if (unlikely(PyMethod_Check(__pyx_t_3))) {
          __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3);
          if (likely(__pyx_t_4)) {
            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
            __Pyx_INCREF(__pyx_t_4);
            __Pyx_INCREF(function);
            __Pyx_DECREF_SET(__pyx_t_3, function);
            __pyx_t_5 = 1;
          }
        }
        #endif
        {
          PyObject *__pyx_callargs[2] = {__pyx_t_4, NULL};
          __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_5, 0+__pyx_t_5);
          __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
          if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 454, __pyx_L5_error)
          __Pyx_GOTREF(__pyx_t_2);
          __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
        }
        __pyx_v_result = __pyx_t_2;
        __pyx_t_2 = 0;
 0455:             # Recursively convert the result.
+0456:             return to_bytes(result)
        __Pyx_XDECREF(__pyx_r);
        __pyx_t_2 = __pyx_f_9datamodel_10converters_to_bytes(__pyx_v_result, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 456, __pyx_L5_error)
        __Pyx_GOTREF(__pyx_t_2);
        __pyx_r = ((PyObject*)__pyx_t_2);
        __pyx_t_2 = 0;
        goto __pyx_L9_try_return;
+0457:         except Exception as e:
      __pyx_t_9 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(&((PyTypeObject*)PyExc_Exception)[0])));
      if (__pyx_t_9) {
        __Pyx_AddTraceback("datamodel.converters.to_bytes", __pyx_clineno, __pyx_lineno, __pyx_filename);
        if (__Pyx_GetException(&__pyx_t_2, &__pyx_t_3, &__pyx_t_4) < 0) __PYX_ERR(0, 457, __pyx_L7_except_error)
        __Pyx_XGOTREF(__pyx_t_2);
        __Pyx_XGOTREF(__pyx_t_3);
        __Pyx_XGOTREF(__pyx_t_4);
        __Pyx_INCREF(__pyx_t_3);
        __pyx_v_e = __pyx_t_3;
        /*try:*/ {
/* … */
        /*finally:*/ {
          __pyx_L16_error:;
          /*exception exit:*/{
            __Pyx_PyThreadState_declare
            __Pyx_PyThreadState_assign
            __pyx_t_14 = 0; __pyx_t_15 = 0; __pyx_t_16 = 0; __pyx_t_17 = 0; __pyx_t_18 = 0; __pyx_t_19 = 0;
            __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
            __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
            if (PY_MAJOR_VERSION >= 3) __Pyx_ExceptionSwap(&__pyx_t_17, &__pyx_t_18, &__pyx_t_19);
            if ((PY_MAJOR_VERSION < 3) || unlikely(__Pyx_GetException(&__pyx_t_14, &__pyx_t_15, &__pyx_t_16) < 0)) __Pyx_ErrFetch(&__pyx_t_14, &__pyx_t_15, &__pyx_t_16);
            __Pyx_XGOTREF(__pyx_t_14);
            __Pyx_XGOTREF(__pyx_t_15);
            __Pyx_XGOTREF(__pyx_t_16);
            __Pyx_XGOTREF(__pyx_t_17);
            __Pyx_XGOTREF(__pyx_t_18);
            __Pyx_XGOTREF(__pyx_t_19);
            __pyx_t_9 = __pyx_lineno; __pyx_t_12 = __pyx_clineno; __pyx_t_13 = __pyx_filename;
            {
              __Pyx_DECREF(__pyx_v_e); __pyx_v_e = 0;
            }
            if (PY_MAJOR_VERSION >= 3) {
              __Pyx_XGIVEREF(__pyx_t_17);
              __Pyx_XGIVEREF(__pyx_t_18);
              __Pyx_XGIVEREF(__pyx_t_19);
              __Pyx_ExceptionReset(__pyx_t_17, __pyx_t_18, __pyx_t_19);
            }
            __Pyx_XGIVEREF(__pyx_t_14);
            __Pyx_XGIVEREF(__pyx_t_15);
            __Pyx_XGIVEREF(__pyx_t_16);
            __Pyx_ErrRestore(__pyx_t_14, __pyx_t_15, __pyx_t_16);
            __pyx_t_14 = 0; __pyx_t_15 = 0; __pyx_t_16 = 0; __pyx_t_17 = 0; __pyx_t_18 = 0; __pyx_t_19 = 0;
            __pyx_lineno = __pyx_t_9; __pyx_clineno = __pyx_t_12; __pyx_filename = __pyx_t_13;
            goto __pyx_L7_except_error;
          }
        }
      }
      goto __pyx_L7_except_error;
+0458:             raise ValueError("Failed to convert callable to bytes: %s" % e)
          __pyx_t_10 = __Pyx_PyUnicode_FormatSafe(__pyx_kp_u_Failed_to_convert_callable_to_by, __pyx_v_e); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 458, __pyx_L16_error)
          __Pyx_GOTREF(__pyx_t_10);
          __pyx_t_11 = __Pyx_PyObject_CallOneArg(__pyx_builtin_ValueError, __pyx_t_10); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 458, __pyx_L16_error)
          __Pyx_GOTREF(__pyx_t_11);
          __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
          __Pyx_Raise(__pyx_t_11, 0, 0, 0);
          __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
          __PYX_ERR(0, 458, __pyx_L16_error)
        }
 0459: 
 0460:     # 4. Try converting the object into bytes using Python's built-in conversion.
+0461:     try:
  {
    /*try:*/ {
/* … */
    }
    __pyx_L22_error:;
    __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
    __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
/* … */
    __pyx_L24_except_error:;
    __Pyx_XGIVEREF(__pyx_t_8);
    __Pyx_XGIVEREF(__pyx_t_7);
    __Pyx_XGIVEREF(__pyx_t_6);
    __Pyx_ExceptionReset(__pyx_t_8, __pyx_t_7, __pyx_t_6);
    goto __pyx_L1_error;
    __pyx_L26_try_return:;
    __Pyx_XGIVEREF(__pyx_t_8);
    __Pyx_XGIVEREF(__pyx_t_7);
    __Pyx_XGIVEREF(__pyx_t_6);
    __Pyx_ExceptionReset(__pyx_t_8, __pyx_t_7, __pyx_t_6);
    goto __pyx_L0;
  }
+0462:         return bytes(obj)
      __Pyx_XDECREF(__pyx_r);
      __pyx_t_4 = __Pyx_PyObject_CallOneArg(((PyObject *)(&PyBytes_Type)), __pyx_v_obj); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 462, __pyx_L22_error)
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_r = ((PyObject*)__pyx_t_4);
      __pyx_t_4 = 0;
      goto __pyx_L26_try_return;
+0463:     except Exception as e:
    __pyx_t_12 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(&((PyTypeObject*)PyExc_Exception)[0])));
    if (__pyx_t_12) {
      __Pyx_AddTraceback("datamodel.converters.to_bytes", __pyx_clineno, __pyx_lineno, __pyx_filename);
      if (__Pyx_GetException(&__pyx_t_4, &__pyx_t_3, &__pyx_t_2) < 0) __PYX_ERR(0, 463, __pyx_L24_except_error)
      __Pyx_XGOTREF(__pyx_t_4);
      __Pyx_XGOTREF(__pyx_t_3);
      __Pyx_XGOTREF(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_3);
      __pyx_v_e = __pyx_t_3;
      /*try:*/ {
/* … */
      /*finally:*/ {
        __pyx_L33_error:;
        /*exception exit:*/{
          __Pyx_PyThreadState_declare
          __Pyx_PyThreadState_assign
          __pyx_t_19 = 0; __pyx_t_18 = 0; __pyx_t_17 = 0; __pyx_t_16 = 0; __pyx_t_15 = 0; __pyx_t_14 = 0;
          __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
          __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
          if (PY_MAJOR_VERSION >= 3) __Pyx_ExceptionSwap(&__pyx_t_16, &__pyx_t_15, &__pyx_t_14);
          if ((PY_MAJOR_VERSION < 3) || unlikely(__Pyx_GetException(&__pyx_t_19, &__pyx_t_18, &__pyx_t_17) < 0)) __Pyx_ErrFetch(&__pyx_t_19, &__pyx_t_18, &__pyx_t_17);
          __Pyx_XGOTREF(__pyx_t_19);
          __Pyx_XGOTREF(__pyx_t_18);
          __Pyx_XGOTREF(__pyx_t_17);
          __Pyx_XGOTREF(__pyx_t_16);
          __Pyx_XGOTREF(__pyx_t_15);
          __Pyx_XGOTREF(__pyx_t_14);
          __pyx_t_12 = __pyx_lineno; __pyx_t_9 = __pyx_clineno; __pyx_t_20 = __pyx_filename;
          {
            __Pyx_DECREF(__pyx_v_e); __pyx_v_e = 0;
          }
          if (PY_MAJOR_VERSION >= 3) {
            __Pyx_XGIVEREF(__pyx_t_16);
            __Pyx_XGIVEREF(__pyx_t_15);
            __Pyx_XGIVEREF(__pyx_t_14);
            __Pyx_ExceptionReset(__pyx_t_16, __pyx_t_15, __pyx_t_14);
          }
          __Pyx_XGIVEREF(__pyx_t_19);
          __Pyx_XGIVEREF(__pyx_t_18);
          __Pyx_XGIVEREF(__pyx_t_17);
          __Pyx_ErrRestore(__pyx_t_19, __pyx_t_18, __pyx_t_17);
          __pyx_t_19 = 0; __pyx_t_18 = 0; __pyx_t_17 = 0; __pyx_t_16 = 0; __pyx_t_15 = 0; __pyx_t_14 = 0;
          __pyx_lineno = __pyx_t_12; __pyx_clineno = __pyx_t_9; __pyx_filename = __pyx_t_20;
          goto __pyx_L24_except_error;
        }
      }
    }
    goto __pyx_L24_except_error;
+0464:         raise ValueError("Invalid conversion to bytes: %s" % e)
        __pyx_t_11 = __Pyx_PyUnicode_FormatSafe(__pyx_kp_u_Invalid_conversion_to_bytes_s, __pyx_v_e); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 464, __pyx_L33_error)
        __Pyx_GOTREF(__pyx_t_11);
        __pyx_t_10 = __Pyx_PyObject_CallOneArg(__pyx_builtin_ValueError, __pyx_t_11); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 464, __pyx_L33_error)
        __Pyx_GOTREF(__pyx_t_10);
        __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
        __Pyx_Raise(__pyx_t_10, 0, 0, 0);
        __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
        __PYX_ERR(0, 464, __pyx_L33_error)
      }
 0465: 
+0466: cdef bint is_callable(object value) nogil:
static int __pyx_f_9datamodel_10converters_is_callable(PyObject *__pyx_v_value) {
  int __pyx_r;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  #ifdef WITH_THREAD
  __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
  #endif
  __Pyx_AddTraceback("datamodel.converters.is_callable", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  #ifdef WITH_THREAD
  __Pyx_PyGILState_Release(__pyx_gilstate_save);
  #endif
  __pyx_L0:;
  return __pyx_r;
}
 0467:     """
 0468:     Check if `value` is callable by calling Python's callable(...)
 0469:     but reacquire the GIL inside.
 0470:     """
+0471:     with gil:
  {
      #ifdef WITH_THREAD
      PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
      #endif
      /*try:*/ {
/* … */
      /*finally:*/ {
        __pyx_L3_return: {
          #ifdef WITH_THREAD
          __Pyx_PyGILState_Release(__pyx_gilstate_save);
          #endif
          goto __pyx_L0;
        }
        __pyx_L4_error: {
          #ifdef WITH_THREAD
          __Pyx_PyGILState_Release(__pyx_gilstate_save);
          #endif
          goto __pyx_L1_error;
        }
      }
  }
+0472:         return callable(value)
        __pyx_t_1 = __Pyx_PyCallable_Check(__pyx_v_value); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 472, __pyx_L4_error)
        __pyx_r = __pyx_t_1;
        goto __pyx_L3_return;
      }
 0473: 
 0474: 
 0475: # Encoder List:
 0476: encoders = {
+0477:     str: to_string,
  __pyx_t_2 = __Pyx_PyDict_NewPresized(12); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 477, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_to_string_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 477, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (PyDict_SetItem(__pyx_t_2, ((PyObject *)(&PyUnicode_Type)), __pyx_t_3) < 0) __PYX_ERR(0, 477, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+0478:     UUID: to_uuid,
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_UUID); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 478, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_to_uuid); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 478, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  if (PyDict_SetItem(__pyx_t_2, __pyx_t_3, __pyx_t_4) < 0) __PYX_ERR(0, 477, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+0479:     pgproto.UUID: to_uuid,
  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_pgproto); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 479, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_UUID); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 479, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_to_uuid); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 479, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  if (PyDict_SetItem(__pyx_t_2, __pyx_t_3, __pyx_t_4) < 0) __PYX_ERR(0, 477, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+0480:     bool: to_boolean,
  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_to_boolean); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 480, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  if (PyDict_SetItem(__pyx_t_2, ((PyObject*)&PyBool_Type), __pyx_t_4) < 0) __PYX_ERR(0, 477, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+0481:     int: to_integer,
  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_to_integer); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 481, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  if (PyDict_SetItem(__pyx_t_2, ((PyObject *)(&PyInt_Type)), __pyx_t_4) < 0) __PYX_ERR(0, 477, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+0482:     float: to_float,
  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_to_float); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 482, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  if (PyDict_SetItem(__pyx_t_2, ((PyObject *)(&PyFloat_Type)), __pyx_t_4) < 0) __PYX_ERR(0, 477, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+0483:     datetime.date: to_date,
  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_to_date); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 483, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_ptype_7cpython_8datetime_date), __pyx_t_4) < 0) __PYX_ERR(0, 477, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+0484:     datetime.datetime: to_datetime,
  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_to_datetime); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 484, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_ptype_7cpython_8datetime_datetime), __pyx_t_4) < 0) __PYX_ERR(0, 477, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+0485:     datetime.timedelta: to_timedelta,
  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_to_timedelta); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 485, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_ptype_7cpython_8datetime_timedelta), __pyx_t_4) < 0) __PYX_ERR(0, 477, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+0486:     datetime.time: to_time,
  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_to_time); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 486, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_ptype_7cpython_8datetime_time), __pyx_t_4) < 0) __PYX_ERR(0, 477, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+0487:     Decimal: to_decimal,
  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_Decimal); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 487, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_to_decimal); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 487, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (PyDict_SetItem(__pyx_t_2, __pyx_t_4, __pyx_t_3) < 0) __PYX_ERR(0, 477, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+0488:     bytes: to_bytes,
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_to_bytes); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 488, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (PyDict_SetItem(__pyx_t_2, ((PyObject *)(&PyBytes_Type)), __pyx_t_3) < 0) __PYX_ERR(0, 477, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_encoders, __pyx_t_2) < 0) __PYX_ERR(0, 476, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 0489:     # dict: to_object,
 0490:     # list: to_object,
 0491:     # tuple: to_object,
 0492: }
 0493: 
 0494: 
 0495: # Maps a type to a conversion callable
+0496: cdef dict TYPE_PARSERS = {}
  __pyx_t_2 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 496, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_XGOTREF(__pyx_v_9datamodel_10converters_TYPE_PARSERS);
  __Pyx_DECREF_SET(__pyx_v_9datamodel_10converters_TYPE_PARSERS, ((PyObject*)__pyx_t_2));
  __Pyx_GIVEREF(__pyx_t_2);
  __pyx_t_2 = 0;
 0497: 
 0498: 
+0499: cpdef object register_parser(object _type, object parser_func):
static PyObject *__pyx_pw_9datamodel_10converters_31register_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 PyObject *__pyx_f_9datamodel_10converters_register_parser(PyObject *__pyx_v__type, PyObject *__pyx_v_parser_func, CYTHON_UNUSED int __pyx_skip_dispatch) {
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("datamodel.converters.register_parser", __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_9datamodel_10converters_31register_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*/
PyDoc_STRVAR(__pyx_doc_9datamodel_10converters_30register_parser, "register_parser(_type, parser_func)\nregister_parser.\n\n    Register a new Parser function for a given type.\n\n    Parameters:\n    _type (type): The type for which the parser function is registered.\n    parser_func (function): The parser function to convert the given type.\n    ");
static PyMethodDef __pyx_mdef_9datamodel_10converters_31register_parser = {"register_parser", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9datamodel_10converters_31register_parser, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_9datamodel_10converters_30register_parser};
static PyObject *__pyx_pw_9datamodel_10converters_31register_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__type = 0;
  PyObject *__pyx_v_parser_func = 0;
  #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("register_parser (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_MACROS
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __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 **__pyx_pyargnames[] = {&__pyx_n_s_type,&__pyx_n_s_parser_func,0};
  PyObject* values[2] = {0,0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_type)) != 0)) {
          (void)__Pyx_Arg_NewRef_FASTCALL(values[0]);
          kw_args--;
        }
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 499, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_parser_func)) != 0)) {
          (void)__Pyx_Arg_NewRef_FASTCALL(values[1]);
          kw_args--;
        }
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 499, __pyx_L3_error)
        else {
          __Pyx_RaiseArgtupleInvalid("register_parser", 1, 2, 2, 1); __PYX_ERR(0, 499, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "register_parser") < 0)) __PYX_ERR(0, 499, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 2)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
      values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
    }
    __pyx_v__type = values[0];
    __pyx_v_parser_func = values[1];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("register_parser", 1, 2, 2, __pyx_nargs); __PYX_ERR(0, 499, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  {
    Py_ssize_t __pyx_temp;
    for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
      __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]);
    }
  }
  __Pyx_AddTraceback("datamodel.converters.register_parser", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_9datamodel_10converters_30register_parser(__pyx_self, __pyx_v__type, __pyx_v_parser_func);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

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

static PyObject *__pyx_pf_9datamodel_10converters_30register_parser(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v__type, PyObject *__pyx_v_parser_func) {
  PyObject *__pyx_r = NULL;
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_9datamodel_10converters_register_parser(__pyx_v__type, __pyx_v_parser_func, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 499, __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("datamodel.converters.register_parser", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__41 = PyTuple_Pack(2, __pyx_n_s_type, __pyx_n_s_parser_func); if (unlikely(!__pyx_tuple__41)) __PYX_ERR(0, 499, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__41);
  __Pyx_GIVEREF(__pyx_tuple__41);
/* … */
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_9datamodel_10converters_31register_parser, 0, __pyx_n_s_register_parser, NULL, __pyx_n_s_datamodel_converters, __pyx_d, ((PyObject *)__pyx_codeobj__42)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 499, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_register_parser, __pyx_t_2) < 0) __PYX_ERR(0, 499, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_codeobj__42 = (PyObject*)__Pyx_PyCode_New(2, 0, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__41, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_datamodel_converters_pyx, __pyx_n_s_register_parser, 499, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__42)) __PYX_ERR(0, 499, __pyx_L1_error)
 0500:     """register_parser.
 0501: 
 0502:     Register a new Parser function for a given type.
 0503: 
 0504:     Parameters:
 0505:     _type (type): The type for which the parser function is registered.
 0506:     parser_func (function): The parser function to convert the given type.
 0507:     """
+0508:     TYPE_PARSERS[_type] = parser_func
  if (unlikely(__pyx_v_9datamodel_10converters_TYPE_PARSERS == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
    __PYX_ERR(0, 508, __pyx_L1_error)
  }
  if (unlikely((PyDict_SetItem(__pyx_v_9datamodel_10converters_TYPE_PARSERS, __pyx_v__type, __pyx_v_parser_func) < 0))) __PYX_ERR(0, 508, __pyx_L1_error)
 0509: 
 0510: 
 0511: ## Parsing Functions
 0512: 
+0513: cdef object _parse_dict_type(
static PyObject *__pyx_f_9datamodel_10converters__parse_dict_type(PyObject *__pyx_v_field, CYTHON_UNUSED PyObject *__pyx_v_T, PyObject *__pyx_v_data, PyObject *__pyx_v_encoder, PyObject *__pyx_v_args) {
  PyObject *__pyx_v_val_type = 0;
  PyObject *__pyx_v_new_dict = 0;
  PyObject *__pyx_v_k = NULL;
  PyObject *__pyx_v_v = NULL;
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_AddTraceback("datamodel.converters._parse_dict_type", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_val_type);
  __Pyx_XDECREF(__pyx_v_new_dict);
  __Pyx_XDECREF(__pyx_v_k);
  __Pyx_XDECREF(__pyx_v_v);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 0514:     object field,
 0515:     object T,
 0516:     object data,
 0517:     object encoder,
 0518:     object args
 0519: ):
+0520:     cdef object val_type = args[1]
  __pyx_t_1 = __Pyx_GetItemInt(__pyx_v_args, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 520, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_val_type = __pyx_t_1;
  __pyx_t_1 = 0;
+0521:     cdef dict new_dict = {}
  __pyx_t_1 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 521, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_new_dict = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
+0522:     for k, v in data.items():
  __pyx_t_2 = 0;
  if (unlikely(__pyx_v_data == Py_None)) {
    PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "items");
    __PYX_ERR(0, 522, __pyx_L1_error)
  }
  __pyx_t_5 = __Pyx_dict_iterator(__pyx_v_data, 0, __pyx_n_s_items, (&__pyx_t_3), (&__pyx_t_4)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 522, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_1);
  __pyx_t_1 = __pyx_t_5;
  __pyx_t_5 = 0;
  while (1) {
    __pyx_t_7 = __Pyx_dict_iter_next(__pyx_t_1, __pyx_t_3, &__pyx_t_2, &__pyx_t_5, &__pyx_t_6, NULL, __pyx_t_4);
    if (unlikely(__pyx_t_7 == 0)) break;
    if (unlikely(__pyx_t_7 == -1)) __PYX_ERR(0, 522, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_XDECREF_SET(__pyx_v_k, __pyx_t_5);
    __pyx_t_5 = 0;
    __Pyx_XDECREF_SET(__pyx_v_v, __pyx_t_6);
    __pyx_t_6 = 0;
+0523:         new_dict[k] = _parse_typing(field, val_type, v, encoder, False)
    __pyx_t_8.__pyx_n = 2;
    __pyx_t_8.encoder = __pyx_v_encoder;
    __pyx_t_8.as_objects = Py_False;
    __pyx_t_6 = __pyx_f_9datamodel_10converters__parse_typing(__pyx_v_field, __pyx_v_val_type, __pyx_v_v, &__pyx_t_8); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 523, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    if (unlikely((PyDict_SetItem(__pyx_v_new_dict, __pyx_v_k, __pyx_t_6) < 0))) __PYX_ERR(0, 523, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+0524:     return new_dict
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_new_dict);
  __pyx_r = __pyx_v_new_dict;
  goto __pyx_L0;
 0525: 
+0526: cdef object _parse_list_type(
static PyObject *__pyx_f_9datamodel_10converters__parse_list_type(PyObject *__pyx_v_field, CYTHON_UNUSED PyObject *__pyx_v_T, PyObject *__pyx_v_data, PyObject *__pyx_v_encoder, PyObject *__pyx_v_args, struct __pyx_opt_args_9datamodel_10converters__parse_list_type *__pyx_optional_args) {
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_XDECREF(__pyx_t_10);
  __Pyx_AddTraceback("datamodel.converters._parse_list_type", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_arg_type);
  __Pyx_XDECREF(__pyx_v_result);
  __Pyx_XDECREF(__pyx_v_key);
  __Pyx_XDECREF(__pyx_v_converter);
  __Pyx_XDECREF(__pyx_v_inner_type);
  __Pyx_XDECREF(__pyx_v_d);
  __Pyx_XDECREF(__pyx_v_item);
  __Pyx_XDECREF(__pyx_v_e);
  __Pyx_XDECREF(__pyx_v_data);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
struct __pyx_opt_args_9datamodel_10converters__parse_list_type {
  int __pyx_n;
  PyObject *_parent;
};
 0527:     object field,
 0528:     object T,
 0529:     object data,
 0530:     object encoder,
 0531:     object args,
+0532:     object _parent = None
  PyObject *__pyx_v__parent = ((PyObject *)Py_None);
  PyObject *__pyx_v_arg_type = 0;
  PyObject *__pyx_v_result = 0;
  PyObject *__pyx_v_key = 0;
  PyObject *__pyx_v_converter = 0;
  PyObject *__pyx_v_inner_type = 0;
  PyObject *__pyx_v_d = NULL;
  PyObject *__pyx_v_item = NULL;
  PyObject *__pyx_v_e = NULL;
  PyObject *__pyx_r = NULL;
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v__parent = __pyx_optional_args->_parent;
    }
  }
  __Pyx_INCREF(__pyx_v_data);
 0533: ):
 0534:     """
 0535:     Parse a list of items to a typing type.
 0536:     """
+0537:     cdef object arg_type = args[0]
  __pyx_t_1 = __Pyx_GetItemInt(__pyx_v_args, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 537, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_arg_type = __pyx_t_1;
  __pyx_t_1 = 0;
+0538:     cdef list result = []
  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 538, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_result = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
+0539:     cdef tuple key = (arg_type, field.name)
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_field, __pyx_n_s_name_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 539, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 539, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_INCREF(__pyx_v_arg_type);
  __Pyx_GIVEREF(__pyx_v_arg_type);
  if (__Pyx_PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_arg_type)) __PYX_ERR(0, 539, __pyx_L1_error);
  __Pyx_GIVEREF(__pyx_t_1);
  if (__Pyx_PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_1)) __PYX_ERR(0, 539, __pyx_L1_error);
  __pyx_t_1 = 0;
  __pyx_v_key = ((PyObject*)__pyx_t_2);
  __pyx_t_2 = 0;
+0540:     cdef object converter = TYPE_PARSERS.get(key) or TYPE_PARSERS.get(arg_type)
  if (unlikely(__pyx_v_9datamodel_10converters_TYPE_PARSERS == Py_None)) {
    PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "get");
    __PYX_ERR(0, 540, __pyx_L1_error)
  }
  __pyx_t_1 = __Pyx_PyDict_GetItemDefault(__pyx_v_9datamodel_10converters_TYPE_PARSERS, __pyx_v_key, Py_None); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 540, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_3 < 0))) __PYX_ERR(0, 540, __pyx_L1_error)
  if (!__pyx_t_3) {
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  } else {
    __Pyx_INCREF(__pyx_t_1);
    __pyx_t_2 = __pyx_t_1;
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    goto __pyx_L3_bool_binop_done;
  }
  if (unlikely(__pyx_v_9datamodel_10converters_TYPE_PARSERS == Py_None)) {
    PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "get");
    __PYX_ERR(0, 540, __pyx_L1_error)
  }
  __pyx_t_1 = __Pyx_PyDict_GetItemDefault(__pyx_v_9datamodel_10converters_TYPE_PARSERS, __pyx_v_arg_type, Py_None); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 540, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_INCREF(__pyx_t_1);
  __pyx_t_2 = __pyx_t_1;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_L3_bool_binop_done:;
  __pyx_v_converter = __pyx_t_2;
  __pyx_t_2 = 0;
+0541:     cdef object inner_type = field._inner_type or arg_type
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_field, __pyx_n_s_inner_type); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 541, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_3 < 0))) __PYX_ERR(0, 541, __pyx_L1_error)
  if (!__pyx_t_3) {
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  } else {
    __Pyx_INCREF(__pyx_t_1);
    __pyx_t_2 = __pyx_t_1;
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    goto __pyx_L5_bool_binop_done;
  }
  __Pyx_INCREF(__pyx_v_arg_type);
  __pyx_t_2 = __pyx_v_arg_type;
  __pyx_L5_bool_binop_done:;
  __pyx_v_inner_type = __pyx_t_2;
  __pyx_t_2 = 0;
 0542: 
+0543:     if data is None:
  __pyx_t_3 = (__pyx_v_data == Py_None);
  if (__pyx_t_3) {
/* … */
  }
+0544:         return []   # short-circuit
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_2 = PyList_New(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 544, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_r = __pyx_t_2;
    __pyx_t_2 = 0;
    goto __pyx_L0;
 0545: 
+0546:     if not isinstance(data, (list, tuple)):
  __pyx_t_4 = PyList_Check(__pyx_v_data); 
  if (!__pyx_t_4) {
  } else {
    __pyx_t_3 = __pyx_t_4;
    goto __pyx_L9_bool_binop_done;
  }
  __pyx_t_4 = PyTuple_Check(__pyx_v_data); 
  __pyx_t_3 = __pyx_t_4;
  __pyx_L9_bool_binop_done:;
  __pyx_t_4 = (!__pyx_t_3);
  if (__pyx_t_4) {
/* … */
  }
+0547:         data = [data]
    __pyx_t_2 = PyList_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 547, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_INCREF(__pyx_v_data);
    __Pyx_GIVEREF(__pyx_v_data);
    if (__Pyx_PyList_SET_ITEM(__pyx_t_2, 0, __pyx_v_data)) __PYX_ERR(0, 547, __pyx_L1_error);
    __Pyx_DECREF_SET(__pyx_v_data, __pyx_t_2);
    __pyx_t_2 = 0;
 0548: 
 0549:     # If it's a dataclass
+0550:     if is_dc(inner_type):
  __pyx_t_4 = __pyx_f_9datamodel_10converters_is_dc(__pyx_v_inner_type); if (unlikely(__pyx_t_4 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 550, __pyx_L1_error)
  if (__pyx_t_4) {
/* … */
  }
+0551:         for d in data:
    if (likely(PyList_CheckExact(__pyx_v_data)) || PyTuple_CheckExact(__pyx_v_data)) {
      __pyx_t_2 = __pyx_v_data; __Pyx_INCREF(__pyx_t_2);
      __pyx_t_5 = 0;
      __pyx_t_6 = NULL;
    } else {
      __pyx_t_5 = -1; __pyx_t_2 = PyObject_GetIter(__pyx_v_data); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 551, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_t_6 = __Pyx_PyObject_GetIterNextFunc(__pyx_t_2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 551, __pyx_L1_error)
    }
    for (;;) {
      if (likely(!__pyx_t_6)) {
        if (likely(PyList_CheckExact(__pyx_t_2))) {
          {
            Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_t_2);
            #if !CYTHON_ASSUME_SAFE_MACROS
            if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 551, __pyx_L1_error)
            #endif
            if (__pyx_t_5 >= __pyx_temp) break;
          }
          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
          __pyx_t_1 = PyList_GET_ITEM(__pyx_t_2, __pyx_t_5); __Pyx_INCREF(__pyx_t_1); __pyx_t_5++; if (unlikely((0 < 0))) __PYX_ERR(0, 551, __pyx_L1_error)
          #else
          __pyx_t_1 = __Pyx_PySequence_ITEM(__pyx_t_2, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 551, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_1);
          #endif
        } else {
          {
            Py_ssize_t __pyx_temp = __Pyx_PyTuple_GET_SIZE(__pyx_t_2);
            #if !CYTHON_ASSUME_SAFE_MACROS
            if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 551, __pyx_L1_error)
            #endif
            if (__pyx_t_5 >= __pyx_temp) break;
          }
          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
          __pyx_t_1 = PyTuple_GET_ITEM(__pyx_t_2, __pyx_t_5); __Pyx_INCREF(__pyx_t_1); __pyx_t_5++; if (unlikely((0 < 0))) __PYX_ERR(0, 551, __pyx_L1_error)
          #else
          __pyx_t_1 = __Pyx_PySequence_ITEM(__pyx_t_2, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 551, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_1);
          #endif
        }
      } else {
        __pyx_t_1 = __pyx_t_6(__pyx_t_2);
        if (unlikely(!__pyx_t_1)) {
          PyObject* exc_type = PyErr_Occurred();
          if (exc_type) {
            if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
            else __PYX_ERR(0, 551, __pyx_L1_error)
          }
          break;
        }
        __Pyx_GOTREF(__pyx_t_1);
      }
      __Pyx_XDECREF_SET(__pyx_v_d, __pyx_t_1);
      __pyx_t_1 = 0;
/* … */
    }
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+0552:             if is_dc(d):
      __pyx_t_4 = __pyx_f_9datamodel_10converters_is_dc(__pyx_v_d); if (unlikely(__pyx_t_4 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 552, __pyx_L1_error)
      if (__pyx_t_4) {
/* … */
      }
+0553:                 result.append(d)
        __pyx_t_7 = __Pyx_PyList_Append(__pyx_v_result, __pyx_v_d); if (unlikely(__pyx_t_7 == ((int)-1))) __PYX_ERR(0, 553, __pyx_L1_error)
+0554:             if converter:
      __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_v_converter); if (unlikely((__pyx_t_4 < 0))) __PYX_ERR(0, 554, __pyx_L1_error)
      if (__pyx_t_4) {
/* … */
        goto __pyx_L15;
      }
+0555:                 result.append(
        __pyx_t_7 = __Pyx_PyList_Append(__pyx_v_result, __pyx_t_1); if (unlikely(__pyx_t_7 == ((int)-1))) __PYX_ERR(0, 555, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+0556:                     converter(field.name, d, inner_type, _parent)
        __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_field, __pyx_n_s_name_2); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 556, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_8);
        __Pyx_INCREF(__pyx_v_converter);
        __pyx_t_9 = __pyx_v_converter; __pyx_t_10 = NULL;
        __pyx_t_11 = 0;
        #if CYTHON_UNPACK_METHODS
        if (unlikely(PyMethod_Check(__pyx_t_9))) {
          __pyx_t_10 = PyMethod_GET_SELF(__pyx_t_9);
          if (likely(__pyx_t_10)) {
            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_9);
            __Pyx_INCREF(__pyx_t_10);
            __Pyx_INCREF(function);
            __Pyx_DECREF_SET(__pyx_t_9, function);
            __pyx_t_11 = 1;
          }
        }
        #endif
        {
          PyObject *__pyx_callargs[5] = {__pyx_t_10, __pyx_t_8, __pyx_v_d, __pyx_v_inner_type, __pyx_v__parent};
          __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_9, __pyx_callargs+1-__pyx_t_11, 4+__pyx_t_11);
          __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
          __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
          if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 556, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_1);
          __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
        }
 0557:                 )
 0558:             else:
+0559:                 if isinstance(d, dict):
      /*else*/ {
        __pyx_t_4 = PyDict_Check(__pyx_v_d); 
        if (__pyx_t_4) {
/* … */
          goto __pyx_L16;
        }
+0560:                     result.append(inner_type(**d))
          if (unlikely(__pyx_v_d == Py_None)) {
            PyErr_SetString(PyExc_TypeError, "argument after ** must be a mapping, not NoneType");
            __PYX_ERR(0, 560, __pyx_L1_error)
          }
          if (likely(PyDict_CheckExact(__pyx_v_d))) {
            __pyx_t_1 = PyDict_Copy(__pyx_v_d); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 560, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_1);
          } else {
            __pyx_t_1 = __Pyx_PyObject_CallOneArg((PyObject*)&PyDict_Type, __pyx_v_d); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 560, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_1);
          }
          __pyx_t_9 = __Pyx_PyObject_Call(__pyx_v_inner_type, __pyx_empty_tuple, __pyx_t_1); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 560, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_9);
          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
          __pyx_t_7 = __Pyx_PyList_Append(__pyx_v_result, __pyx_t_9); if (unlikely(__pyx_t_7 == ((int)-1))) __PYX_ERR(0, 560, __pyx_L1_error)
          __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
+0561:                 elif isinstance(d, (list, tuple)):
        __pyx_t_3 = PyList_Check(__pyx_v_d); 
        if (!__pyx_t_3) {
        } else {
          __pyx_t_4 = __pyx_t_3;
          goto __pyx_L17_bool_binop_done;
        }
        __pyx_t_3 = PyTuple_Check(__pyx_v_d); 
        __pyx_t_4 = __pyx_t_3;
        __pyx_L17_bool_binop_done:;
        if (__pyx_t_4) {
/* … */
          goto __pyx_L16;
        }
+0562:                     result.append(inner_type(*d))
          __pyx_t_9 = __Pyx_PySequence_Tuple(__pyx_v_d); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 562, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_9);
          __pyx_t_1 = __Pyx_PyObject_Call(__pyx_v_inner_type, __pyx_t_9, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 562, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_1);
          __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
          __pyx_t_7 = __Pyx_PyList_Append(__pyx_v_result, __pyx_t_1); if (unlikely(__pyx_t_7 == ((int)-1))) __PYX_ERR(0, 562, __pyx_L1_error)
          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 0563:                 else:
+0564:                     result.append(inner_type(d))
        /*else*/ {
          __Pyx_INCREF(__pyx_v_inner_type);
          __pyx_t_9 = __pyx_v_inner_type; __pyx_t_8 = NULL;
          __pyx_t_11 = 0;
          #if CYTHON_UNPACK_METHODS
          if (unlikely(PyMethod_Check(__pyx_t_9))) {
            __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_9);
            if (likely(__pyx_t_8)) {
              PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_9);
              __Pyx_INCREF(__pyx_t_8);
              __Pyx_INCREF(function);
              __Pyx_DECREF_SET(__pyx_t_9, function);
              __pyx_t_11 = 1;
            }
          }
          #endif
          {
            PyObject *__pyx_callargs[2] = {__pyx_t_8, __pyx_v_d};
            __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_9, __pyx_callargs+1-__pyx_t_11, 1+__pyx_t_11);
            __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
            if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 564, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_1);
            __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
          }
          __pyx_t_7 = __Pyx_PyList_Append(__pyx_v_result, __pyx_t_1); if (unlikely(__pyx_t_7 == ((int)-1))) __PYX_ERR(0, 564, __pyx_L1_error)
          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        }
        __pyx_L16:;
      }
      __pyx_L15:;
+0565:         return result
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(__pyx_v_result);
    __pyx_r = __pyx_v_result;
    goto __pyx_L0;
+0566:     elif converter:
  __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_v_converter); if (unlikely((__pyx_t_4 < 0))) __PYX_ERR(0, 566, __pyx_L1_error)
  if (__pyx_t_4) {
/* … */
    goto __pyx_L11;
  }
+0567:         for item in data:
    if (likely(PyList_CheckExact(__pyx_v_data)) || PyTuple_CheckExact(__pyx_v_data)) {
      __pyx_t_2 = __pyx_v_data; __Pyx_INCREF(__pyx_t_2);
      __pyx_t_5 = 0;
      __pyx_t_6 = NULL;
    } else {
      __pyx_t_5 = -1; __pyx_t_2 = PyObject_GetIter(__pyx_v_data); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 567, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_t_6 = __Pyx_PyObject_GetIterNextFunc(__pyx_t_2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 567, __pyx_L1_error)
    }
    for (;;) {
      if (likely(!__pyx_t_6)) {
        if (likely(PyList_CheckExact(__pyx_t_2))) {
          {
            Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_t_2);
            #if !CYTHON_ASSUME_SAFE_MACROS
            if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 567, __pyx_L1_error)
            #endif
            if (__pyx_t_5 >= __pyx_temp) break;
          }
          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
          __pyx_t_1 = PyList_GET_ITEM(__pyx_t_2, __pyx_t_5); __Pyx_INCREF(__pyx_t_1); __pyx_t_5++; if (unlikely((0 < 0))) __PYX_ERR(0, 567, __pyx_L1_error)
          #else
          __pyx_t_1 = __Pyx_PySequence_ITEM(__pyx_t_2, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 567, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_1);
          #endif
        } else {
          {
            Py_ssize_t __pyx_temp = __Pyx_PyTuple_GET_SIZE(__pyx_t_2);
            #if !CYTHON_ASSUME_SAFE_MACROS
            if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 567, __pyx_L1_error)
            #endif
            if (__pyx_t_5 >= __pyx_temp) break;
          }
          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
          __pyx_t_1 = PyTuple_GET_ITEM(__pyx_t_2, __pyx_t_5); __Pyx_INCREF(__pyx_t_1); __pyx_t_5++; if (unlikely((0 < 0))) __PYX_ERR(0, 567, __pyx_L1_error)
          #else
          __pyx_t_1 = __Pyx_PySequence_ITEM(__pyx_t_2, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 567, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_1);
          #endif
        }
      } else {
        __pyx_t_1 = __pyx_t_6(__pyx_t_2);
        if (unlikely(!__pyx_t_1)) {
          PyObject* exc_type = PyErr_Occurred();
          if (exc_type) {
            if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
            else __PYX_ERR(0, 567, __pyx_L1_error)
          }
          break;
        }
        __Pyx_GOTREF(__pyx_t_1);
      }
      __Pyx_XDECREF_SET(__pyx_v_item, __pyx_t_1);
      __pyx_t_1 = 0;
/* … */
    }
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+0568:             result.append(
      __pyx_t_7 = __Pyx_PyList_Append(__pyx_v_result, __pyx_t_1); if (unlikely(__pyx_t_7 == ((int)-1))) __PYX_ERR(0, 568, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+0569:                 converter(field.name, item, inner_type, _parent)
      __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_field, __pyx_n_s_name_2); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 569, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      __Pyx_INCREF(__pyx_v_converter);
      __pyx_t_8 = __pyx_v_converter; __pyx_t_10 = NULL;
      __pyx_t_11 = 0;
      #if CYTHON_UNPACK_METHODS
      if (unlikely(PyMethod_Check(__pyx_t_8))) {
        __pyx_t_10 = PyMethod_GET_SELF(__pyx_t_8);
        if (likely(__pyx_t_10)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_8);
          __Pyx_INCREF(__pyx_t_10);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_8, function);
          __pyx_t_11 = 1;
        }
      }
      #endif
      {
        PyObject *__pyx_callargs[5] = {__pyx_t_10, __pyx_t_9, __pyx_v_item, __pyx_v_inner_type, __pyx_v__parent};
        __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_8, __pyx_callargs+1-__pyx_t_11, 4+__pyx_t_11);
        __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
        __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
        if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 569, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      }
 0570:             )
+0571:     elif is_primitive(inner_type):
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_is_primitive); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 571, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_8 = NULL;
  __pyx_t_11 = 0;
  #if CYTHON_UNPACK_METHODS
  if (unlikely(PyMethod_Check(__pyx_t_1))) {
    __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_1);
    if (likely(__pyx_t_8)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
      __Pyx_INCREF(__pyx_t_8);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_1, function);
      __pyx_t_11 = 1;
    }
  }
  #endif
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_8, __pyx_v_inner_type};
    __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_1, __pyx_callargs+1-__pyx_t_11, 1+__pyx_t_11);
    __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
    if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 571, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  }
  __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely((__pyx_t_4 < 0))) __PYX_ERR(0, 571, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (__pyx_t_4) {
/* … */
    goto __pyx_L11;
  }
+0572:         try:
    {
      /*try:*/ {
/* … */
      }
      __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;
      goto __pyx_L28_try_end;
      __pyx_L23_error:;
      __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
      __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
      __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
      __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
/* … */
      __pyx_L25_except_error:;
      __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);
      goto __pyx_L1_error;
      __pyx_L28_try_end:;
    }
+0573:             result = rc.to_list(inner_type, data)
        __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_rc); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 573, __pyx_L23_error)
        __Pyx_GOTREF(__pyx_t_1);
        __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_to_list); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 573, __pyx_L23_error)
        __Pyx_GOTREF(__pyx_t_8);
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        __pyx_t_1 = NULL;
        __pyx_t_11 = 0;
        #if CYTHON_UNPACK_METHODS
        if (unlikely(PyMethod_Check(__pyx_t_8))) {
          __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_8);
          if (likely(__pyx_t_1)) {
            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_8);
            __Pyx_INCREF(__pyx_t_1);
            __Pyx_INCREF(function);
            __Pyx_DECREF_SET(__pyx_t_8, function);
            __pyx_t_11 = 1;
          }
        }
        #endif
        {
          PyObject *__pyx_callargs[3] = {__pyx_t_1, __pyx_v_inner_type, __pyx_v_data};
          __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_8, __pyx_callargs+1-__pyx_t_11, 2+__pyx_t_11);
          __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
          if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 573, __pyx_L23_error)
          __Pyx_GOTREF(__pyx_t_2);
          __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
        }
        if (!(likely(PyList_CheckExact(__pyx_t_2))||((__pyx_t_2) == Py_None) || __Pyx_RaiseUnexpectedTypeError("list", __pyx_t_2))) __PYX_ERR(0, 573, __pyx_L23_error)
        __Pyx_DECREF_SET(__pyx_v_result, ((PyObject*)__pyx_t_2));
        __pyx_t_2 = 0;
 0574:             # return data
+0575:         except Exception as e:
      __pyx_t_15 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(&((PyTypeObject*)PyExc_Exception)[0])));
      if (__pyx_t_15) {
        __Pyx_AddTraceback("datamodel.converters._parse_list_type", __pyx_clineno, __pyx_lineno, __pyx_filename);
        if (__Pyx_GetException(&__pyx_t_2, &__pyx_t_8, &__pyx_t_1) < 0) __PYX_ERR(0, 575, __pyx_L25_except_error)
        __Pyx_XGOTREF(__pyx_t_2);
        __Pyx_XGOTREF(__pyx_t_8);
        __Pyx_XGOTREF(__pyx_t_1);
        __Pyx_INCREF(__pyx_t_8);
        __pyx_v_e = __pyx_t_8;
        /*try:*/ {
/* … */
        /*finally:*/ {
          __pyx_L34_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_9); __pyx_t_9 = 0;
            if (PY_MAJOR_VERSION >= 3) __Pyx_ExceptionSwap(&__pyx_t_22, &__pyx_t_23, &__pyx_t_24);
            if ((PY_MAJOR_VERSION < 3) || 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_15 = __pyx_lineno; __pyx_t_17 = __pyx_clineno; __pyx_t_18 = __pyx_filename;
            {
              __Pyx_DECREF(__pyx_v_e); __pyx_v_e = 0;
            }
            if (PY_MAJOR_VERSION >= 3) {
              __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_15; __pyx_clineno = __pyx_t_17; __pyx_filename = __pyx_t_18;
            goto __pyx_L25_except_error;
          }
        }
      }
      goto __pyx_L25_except_error;
+0576:             raise ValueError(
          __pyx_t_9 = __Pyx_PyObject_CallOneArg(__pyx_builtin_ValueError, __pyx_t_10); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 576, __pyx_L34_error)
          __Pyx_GOTREF(__pyx_t_9);
          __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
+0577:                 f"Error parsing list of {inner_type}: {e}"
          __pyx_t_9 = PyTuple_New(4); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 577, __pyx_L34_error)
          __Pyx_GOTREF(__pyx_t_9);
          __pyx_t_5 = 0;
          __pyx_t_16 = 127;
          __Pyx_INCREF(__pyx_kp_u_Error_parsing_list_of);
          __pyx_t_5 += 22;
          __Pyx_GIVEREF(__pyx_kp_u_Error_parsing_list_of);
          PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_kp_u_Error_parsing_list_of);
          __pyx_t_10 = __Pyx_PyObject_FormatSimple(__pyx_v_inner_type, __pyx_empty_unicode); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 577, __pyx_L34_error)
          __Pyx_GOTREF(__pyx_t_10);
          __pyx_t_16 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_10) > __pyx_t_16) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_10) : __pyx_t_16;
          __pyx_t_5 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_10);
          __Pyx_GIVEREF(__pyx_t_10);
          PyTuple_SET_ITEM(__pyx_t_9, 1, __pyx_t_10);
          __pyx_t_10 = 0;
          __Pyx_INCREF(__pyx_kp_u__7);
          __pyx_t_5 += 2;
          __Pyx_GIVEREF(__pyx_kp_u__7);
          PyTuple_SET_ITEM(__pyx_t_9, 2, __pyx_kp_u__7);
          __pyx_t_10 = __Pyx_PyObject_FormatSimple(__pyx_v_e, __pyx_empty_unicode); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 577, __pyx_L34_error)
          __Pyx_GOTREF(__pyx_t_10);
          __pyx_t_16 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_10) > __pyx_t_16) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_10) : __pyx_t_16;
          __pyx_t_5 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_10);
          __Pyx_GIVEREF(__pyx_t_10);
          PyTuple_SET_ITEM(__pyx_t_9, 3, __pyx_t_10);
          __pyx_t_10 = 0;
          __pyx_t_10 = __Pyx_PyUnicode_Join(__pyx_t_9, 4, __pyx_t_5, __pyx_t_16); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 577, __pyx_L34_error)
          __Pyx_GOTREF(__pyx_t_10);
          __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
+0578:             ) from e
          __Pyx_Raise(__pyx_t_9, 0, 0, __pyx_v_e);
          __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
          __PYX_ERR(0, 576, __pyx_L34_error)
        }
 0579:     else:
+0580:         for item in data:
  /*else*/ {
    if (likely(PyList_CheckExact(__pyx_v_data)) || PyTuple_CheckExact(__pyx_v_data)) {
      __pyx_t_1 = __pyx_v_data; __Pyx_INCREF(__pyx_t_1);
      __pyx_t_5 = 0;
      __pyx_t_6 = NULL;
    } else {
      __pyx_t_5 = -1; __pyx_t_1 = PyObject_GetIter(__pyx_v_data); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 580, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_6 = __Pyx_PyObject_GetIterNextFunc(__pyx_t_1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 580, __pyx_L1_error)
    }
    for (;;) {
      if (likely(!__pyx_t_6)) {
        if (likely(PyList_CheckExact(__pyx_t_1))) {
          {
            Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_t_1);
            #if !CYTHON_ASSUME_SAFE_MACROS
            if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 580, __pyx_L1_error)
            #endif
            if (__pyx_t_5 >= __pyx_temp) break;
          }
          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
          __pyx_t_8 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_5); __Pyx_INCREF(__pyx_t_8); __pyx_t_5++; if (unlikely((0 < 0))) __PYX_ERR(0, 580, __pyx_L1_error)
          #else
          __pyx_t_8 = __Pyx_PySequence_ITEM(__pyx_t_1, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 580, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_8);
          #endif
        } else {
          {
            Py_ssize_t __pyx_temp = __Pyx_PyTuple_GET_SIZE(__pyx_t_1);
            #if !CYTHON_ASSUME_SAFE_MACROS
            if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 580, __pyx_L1_error)
            #endif
            if (__pyx_t_5 >= __pyx_temp) break;
          }
          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
          __pyx_t_8 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_5); __Pyx_INCREF(__pyx_t_8); __pyx_t_5++; if (unlikely((0 < 0))) __PYX_ERR(0, 580, __pyx_L1_error)
          #else
          __pyx_t_8 = __Pyx_PySequence_ITEM(__pyx_t_1, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 580, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_8);
          #endif
        }
      } else {
        __pyx_t_8 = __pyx_t_6(__pyx_t_1);
        if (unlikely(!__pyx_t_8)) {
          PyObject* exc_type = PyErr_Occurred();
          if (exc_type) {
            if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
            else __PYX_ERR(0, 580, __pyx_L1_error)
          }
          break;
        }
        __Pyx_GOTREF(__pyx_t_8);
      }
      __Pyx_XDECREF_SET(__pyx_v_item, __pyx_t_8);
      __pyx_t_8 = 0;
/* … */
    }
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  }
  __pyx_L11:;
+0581:             result.append(
      __pyx_t_7 = __Pyx_PyList_Append(__pyx_v_result, __pyx_t_8); if (unlikely(__pyx_t_7 == ((int)-1))) __PYX_ERR(0, 581, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+0582:                 _parse_typing(field, T=inner_type, data=item, encoder=encoder, as_objects=False)
      __pyx_t_25.__pyx_n = 2;
      __pyx_t_25.encoder = __pyx_v_encoder;
      __pyx_t_25.as_objects = Py_False;
      __pyx_t_8 = __pyx_f_9datamodel_10converters__parse_typing(__pyx_v_field, __pyx_v_inner_type, __pyx_v_item, &__pyx_t_25); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 582, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
 0583:             )
+0584:     return result
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_result);
  __pyx_r = __pyx_v_result;
  goto __pyx_L0;
 0585: 
+0586: cdef object _parse_dataclass_type(object T, object data):
static PyObject *__pyx_f_9datamodel_10converters__parse_dataclass_type(PyObject *__pyx_v_T, PyObject *__pyx_v_data) {
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_AddTraceback("datamodel.converters._parse_dataclass_type", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+0587:     if isinstance(data, dict):
  __pyx_t_1 = PyDict_Check(__pyx_v_data); 
  if (__pyx_t_1) {
/* … */
  }
+0588:         return T(**data)
    __Pyx_XDECREF(__pyx_r);
    if (unlikely(__pyx_v_data == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "argument after ** must be a mapping, not NoneType");
      __PYX_ERR(0, 588, __pyx_L1_error)
    }
    if (likely(PyDict_CheckExact(__pyx_v_data))) {
      __pyx_t_2 = PyDict_Copy(__pyx_v_data); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 588, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
    } else {
      __pyx_t_2 = __Pyx_PyObject_CallOneArg((PyObject*)&PyDict_Type, __pyx_v_data); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 588, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
    }
    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_v_T, __pyx_empty_tuple, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 588, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_r = __pyx_t_3;
    __pyx_t_3 = 0;
    goto __pyx_L0;
+0589:     elif isinstance(data, (list, tuple)):
  __pyx_t_4 = PyList_Check(__pyx_v_data); 
  if (!__pyx_t_4) {
  } else {
    __pyx_t_1 = __pyx_t_4;
    goto __pyx_L4_bool_binop_done;
  }
  __pyx_t_4 = PyTuple_Check(__pyx_v_data); 
  __pyx_t_1 = __pyx_t_4;
  __pyx_L4_bool_binop_done:;
  if (__pyx_t_1) {
/* … */
  }
+0590:         return T(*data)
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_3 = __Pyx_PySequence_Tuple(__pyx_v_data); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 590, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_v_T, __pyx_t_3, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 590, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_r = __pyx_t_2;
    __pyx_t_2 = 0;
    goto __pyx_L0;
 0591:     else:
+0592:         return T(data)
  /*else*/ {
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(__pyx_v_T);
    __pyx_t_3 = __pyx_v_T; __pyx_t_5 = NULL;
    __pyx_t_6 = 0;
    #if CYTHON_UNPACK_METHODS
    if (unlikely(PyMethod_Check(__pyx_t_3))) {
      __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_3);
      if (likely(__pyx_t_5)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
        __Pyx_INCREF(__pyx_t_5);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_3, function);
        __pyx_t_6 = 1;
      }
    }
    #endif
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_v_data};
      __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_6, 1+__pyx_t_6);
      __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
      if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 592, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    }
    __pyx_r = __pyx_t_2;
    __pyx_t_2 = 0;
    goto __pyx_L0;
  }
 0593: 
+0594: cdef object _parse_builtin_type(object field, object T, object data, object encoder):
static PyObject *__pyx_f_9datamodel_10converters__parse_builtin_type(PyObject *__pyx_v_field, PyObject *__pyx_v_T, PyObject *__pyx_v_data, PyObject *__pyx_v_encoder) {
  PyObject *__pyx_v_e = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_INCREF(__pyx_v_data);
/* … */
  /* 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_10);
  __Pyx_XDECREF(__pyx_t_13);
  __Pyx_XDECREF(__pyx_t_23);
  __Pyx_AddTraceback("datamodel.converters._parse_builtin_type", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_e);
  __Pyx_XDECREF(__pyx_v_data);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+0595:     if encoder is not None:
  __pyx_t_1 = (__pyx_v_encoder != Py_None);
  if (__pyx_t_1) {
/* … */
  }
+0596:         try:
    {
      /*try:*/ {
/* … */
      }
      __pyx_L4_error:;
      __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
/* … */
      __pyx_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;
    }
+0597:             return encoder(data)
        __Pyx_XDECREF(__pyx_r);
        __Pyx_INCREF(__pyx_v_encoder);
        __pyx_t_6 = __pyx_v_encoder; __pyx_t_7 = NULL;
        __pyx_t_8 = 0;
        #if CYTHON_UNPACK_METHODS
        if (unlikely(PyMethod_Check(__pyx_t_6))) {
          __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_6);
          if (likely(__pyx_t_7)) {
            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6);
            __Pyx_INCREF(__pyx_t_7);
            __Pyx_INCREF(function);
            __Pyx_DECREF_SET(__pyx_t_6, function);
            __pyx_t_8 = 1;
          }
        }
        #endif
        {
          PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_v_data};
          __pyx_t_5 = __Pyx_PyObject_FastCall(__pyx_t_6, __pyx_callargs+1-__pyx_t_8, 1+__pyx_t_8);
          __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
          if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 597, __pyx_L4_error)
          __Pyx_GOTREF(__pyx_t_5);
          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
        }
        __pyx_r = __pyx_t_5;
        __pyx_t_5 = 0;
        goto __pyx_L8_try_return;
+0598:         except ValueError as e:
      __pyx_t_9 = __Pyx_PyErr_ExceptionMatches(__pyx_builtin_ValueError);
      if (__pyx_t_9) {
        __Pyx_AddTraceback("datamodel.converters._parse_builtin_type", __pyx_clineno, __pyx_lineno, __pyx_filename);
        if (__Pyx_GetException(&__pyx_t_5, &__pyx_t_6, &__pyx_t_7) < 0) __PYX_ERR(0, 598, __pyx_L6_except_error)
        __Pyx_XGOTREF(__pyx_t_5);
        __Pyx_XGOTREF(__pyx_t_6);
        __Pyx_XGOTREF(__pyx_t_7);
        __Pyx_INCREF(__pyx_t_6);
        __pyx_v_e = __pyx_t_6;
        /*try:*/ {
/* … */
        /*finally:*/ {
          __pyx_L15_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_13); __pyx_t_13 = 0;
            if (PY_MAJOR_VERSION >= 3) __Pyx_ExceptionSwap(&__pyx_t_19, &__pyx_t_20, &__pyx_t_21);
            if ((PY_MAJOR_VERSION < 3) || 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_9 = __pyx_lineno; __pyx_t_14 = __pyx_clineno; __pyx_t_15 = __pyx_filename;
            {
              __Pyx_DECREF(__pyx_v_e); __pyx_v_e = 0;
            }
            if (PY_MAJOR_VERSION >= 3) {
              __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_9; __pyx_clineno = __pyx_t_14; __pyx_filename = __pyx_t_15;
            goto __pyx_L6_except_error;
          }
        }
      }
      goto __pyx_L6_except_error;
+0599:             raise ValueError(f"Error parsing type {T}, {e}")
          __pyx_t_10 = PyTuple_New(4); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 599, __pyx_L15_error)
          __Pyx_GOTREF(__pyx_t_10);
          __pyx_t_11 = 0;
          __pyx_t_12 = 127;
          __Pyx_INCREF(__pyx_kp_u_Error_parsing_type);
          __pyx_t_11 += 19;
          __Pyx_GIVEREF(__pyx_kp_u_Error_parsing_type);
          PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_kp_u_Error_parsing_type);
          __pyx_t_13 = __Pyx_PyObject_FormatSimple(__pyx_v_T, __pyx_empty_unicode); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 599, __pyx_L15_error)
          __Pyx_GOTREF(__pyx_t_13);
          __pyx_t_12 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_13) > __pyx_t_12) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_13) : __pyx_t_12;
          __pyx_t_11 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_13);
          __Pyx_GIVEREF(__pyx_t_13);
          PyTuple_SET_ITEM(__pyx_t_10, 1, __pyx_t_13);
          __pyx_t_13 = 0;
          __Pyx_INCREF(__pyx_kp_u__10);
          __pyx_t_11 += 2;
          __Pyx_GIVEREF(__pyx_kp_u__10);
          PyTuple_SET_ITEM(__pyx_t_10, 2, __pyx_kp_u__10);
          __pyx_t_13 = __Pyx_PyObject_FormatSimple(__pyx_v_e, __pyx_empty_unicode); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 599, __pyx_L15_error)
          __Pyx_GOTREF(__pyx_t_13);
          __pyx_t_12 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_13) > __pyx_t_12) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_13) : __pyx_t_12;
          __pyx_t_11 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_13);
          __Pyx_GIVEREF(__pyx_t_13);
          PyTuple_SET_ITEM(__pyx_t_10, 3, __pyx_t_13);
          __pyx_t_13 = 0;
          __pyx_t_13 = __Pyx_PyUnicode_Join(__pyx_t_10, 4, __pyx_t_11, __pyx_t_12); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 599, __pyx_L15_error)
          __Pyx_GOTREF(__pyx_t_13);
          __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
          __pyx_t_10 = __Pyx_PyObject_CallOneArg(__pyx_builtin_ValueError, __pyx_t_13); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 599, __pyx_L15_error)
          __Pyx_GOTREF(__pyx_t_10);
          __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
          __Pyx_Raise(__pyx_t_10, 0, 0, 0);
          __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
          __PYX_ERR(0, 599, __pyx_L15_error)
        }
+0600:     if T == str:
  __pyx_t_7 = PyObject_RichCompare(__pyx_v_T, ((PyObject *)(&PyUnicode_Type)), Py_EQ); __Pyx_XGOTREF(__pyx_t_7); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 600, __pyx_L1_error)
  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_7); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 600, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  if (__pyx_t_1) {
/* … */
  }
+0601:         return to_string(data)
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_7 = __pyx_f_9datamodel_10converters_to_string(__pyx_v_data, 0); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 601, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __pyx_r = __pyx_t_7;
    __pyx_t_7 = 0;
    goto __pyx_L0;
+0602:     if T == datetime.date:
  __pyx_t_7 = PyObject_RichCompare(__pyx_v_T, ((PyObject *)__pyx_ptype_7cpython_8datetime_date), Py_EQ); __Pyx_XGOTREF(__pyx_t_7); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 602, __pyx_L1_error)
  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_7); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 602, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  if (__pyx_t_1) {
/* … */
  }
+0603:         return to_date(data)
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_7 = ((PyObject *)__pyx_f_9datamodel_10converters_to_date(__pyx_v_data, 0)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 603, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __pyx_r = __pyx_t_7;
    __pyx_t_7 = 0;
    goto __pyx_L0;
+0604:     if T == datetime.datetime:
  __pyx_t_7 = PyObject_RichCompare(__pyx_v_T, ((PyObject *)__pyx_ptype_7cpython_8datetime_datetime), Py_EQ); __Pyx_XGOTREF(__pyx_t_7); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 604, __pyx_L1_error)
  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_7); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 604, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  if (__pyx_t_1) {
/* … */
  }
+0605:         return to_datetime(data)
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_7 = ((PyObject *)__pyx_f_9datamodel_10converters_to_datetime(__pyx_v_data, 0)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 605, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __pyx_r = __pyx_t_7;
    __pyx_t_7 = 0;
    goto __pyx_L0;
+0606:     if T == UUID:
  __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_UUID); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 606, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __pyx_t_6 = PyObject_RichCompare(__pyx_v_T, __pyx_t_7, Py_EQ); __Pyx_XGOTREF(__pyx_t_6); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 606, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_6); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 606, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  if (__pyx_t_1) {
/* … */
  }
+0607:         return to_uuid(data)
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_6 = __pyx_f_9datamodel_10converters_to_uuid(__pyx_v_data, 0); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 607, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_r = __pyx_t_6;
    __pyx_t_6 = 0;
    goto __pyx_L0;
+0608:     elif is_dc(T):
  __pyx_t_1 = __pyx_f_9datamodel_10converters_is_dc(__pyx_v_T); if (unlikely(__pyx_t_1 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 608, __pyx_L1_error)
  if (__pyx_t_1) {
/* … */
  }
+0609:         return _parse_dataclass_type(T, data)
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_6 = __pyx_f_9datamodel_10converters__parse_dataclass_type(__pyx_v_T, __pyx_v_data); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 609, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_r = __pyx_t_6;
    __pyx_t_6 = 0;
    goto __pyx_L0;
+0610:     elif T == dict:
  __pyx_t_6 = PyObject_RichCompare(__pyx_v_T, ((PyObject *)(&PyDict_Type)), Py_EQ); __Pyx_XGOTREF(__pyx_t_6); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 610, __pyx_L1_error)
  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_6); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 610, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  if (__pyx_t_1) {
/* … */
  }
+0611:         if not isinstance(data, dict):
    __pyx_t_1 = PyDict_Check(__pyx_v_data); 
    __pyx_t_22 = (!__pyx_t_1);
    if (unlikely(__pyx_t_22)) {
/* … */
    }
+0612:             raise ValueError(
      __pyx_t_7 = __Pyx_PyObject_CallOneArg(__pyx_builtin_ValueError, __pyx_t_6); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 612, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_Raise(__pyx_t_7, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      __PYX_ERR(0, 612, __pyx_L1_error)
+0613:                 f"Expected dict, got {type(data).__name__}"
      __pyx_t_6 = __Pyx_PyObject_GetAttrStr(((PyObject *)Py_TYPE(__pyx_v_data)), __pyx_n_s_name); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 613, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __pyx_t_7 = __Pyx_PyObject_FormatSimple(__pyx_t_6, __pyx_empty_unicode); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 613, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      __pyx_t_6 = __Pyx_PyUnicode_Concat(__pyx_kp_u_Expected_dict_got, __pyx_t_7); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 613, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 0614:             )
+0615:         return data
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(__pyx_v_data);
    __pyx_r = __pyx_v_data;
    goto __pyx_L0;
+0616:     elif T == list:
  __pyx_t_7 = PyObject_RichCompare(__pyx_v_T, ((PyObject *)(&PyList_Type)), Py_EQ); __Pyx_XGOTREF(__pyx_t_7); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 616, __pyx_L1_error)
  __pyx_t_22 = __Pyx_PyObject_IsTrue(__pyx_t_7); if (unlikely((__pyx_t_22 < 0))) __PYX_ERR(0, 616, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  if (__pyx_t_22) {
/* … */
  }
+0617:         if not isinstance(data, (list, tuple)):
    __pyx_t_1 = PyList_Check(__pyx_v_data); 
    if (!__pyx_t_1) {
    } else {
      __pyx_t_22 = __pyx_t_1;
      goto __pyx_L27_bool_binop_done;
    }
    __pyx_t_1 = PyTuple_Check(__pyx_v_data); 
    __pyx_t_22 = __pyx_t_1;
    __pyx_L27_bool_binop_done:;
    __pyx_t_1 = (!__pyx_t_22);
    if (__pyx_t_1) {
/* … */
    }
+0618:             data = [data]
      __pyx_t_7 = PyList_New(1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 618, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      __Pyx_INCREF(__pyx_v_data);
      __Pyx_GIVEREF(__pyx_v_data);
      if (__Pyx_PyList_SET_ITEM(__pyx_t_7, 0, __pyx_v_data)) __PYX_ERR(0, 618, __pyx_L1_error);
      __Pyx_DECREF_SET(__pyx_v_data, __pyx_t_7);
      __pyx_t_7 = 0;
+0619:         return data
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(__pyx_v_data);
    __pyx_r = __pyx_v_data;
    goto __pyx_L0;
 0620:     else:
 0621:         # Try encoders dict:
+0622:         try:
  /*else*/ {
    {
      /*try:*/ {
/* … */
      }
      __pyx_L29_error:;
      __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
      __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
      __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
/* … */
      __pyx_L31_except_error:;
      __Pyx_XGIVEREF(__pyx_t_4);
      __Pyx_XGIVEREF(__pyx_t_3);
      __Pyx_XGIVEREF(__pyx_t_2);
      __Pyx_ExceptionReset(__pyx_t_4, __pyx_t_3, __pyx_t_2);
      goto __pyx_L1_error;
      __pyx_L33_try_return:;
      __Pyx_XGIVEREF(__pyx_t_4);
      __Pyx_XGIVEREF(__pyx_t_3);
      __Pyx_XGIVEREF(__pyx_t_2);
      __Pyx_ExceptionReset(__pyx_t_4, __pyx_t_3, __pyx_t_2);
      goto __pyx_L0;
      __pyx_L32_except_return:;
      __Pyx_XGIVEREF(__pyx_t_4);
      __Pyx_XGIVEREF(__pyx_t_3);
      __Pyx_XGIVEREF(__pyx_t_2);
      __Pyx_ExceptionReset(__pyx_t_4, __pyx_t_3, __pyx_t_2);
      goto __pyx_L0;
    }
  }
+0623:             if field._encoder_fn is None:
        __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_field, __pyx_n_s_encoder_fn); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 623, __pyx_L29_error)
        __Pyx_GOTREF(__pyx_t_7);
        __pyx_t_1 = (__pyx_t_7 == Py_None);
        __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
        if (__pyx_t_1) {
/* … */
        }
+0624:                 field._encoder_fn = encoders[T]
          __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_encoders); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 624, __pyx_L29_error)
          __Pyx_GOTREF(__pyx_t_7);
          __pyx_t_6 = __Pyx_PyObject_GetItem(__pyx_t_7, __pyx_v_T); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 624, __pyx_L29_error)
          __Pyx_GOTREF(__pyx_t_6);
          __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
          if (__Pyx_PyObject_SetAttrStr(__pyx_v_field, __pyx_n_s_encoder_fn, __pyx_t_6) < 0) __PYX_ERR(0, 624, __pyx_L29_error)
          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+0625:             return field._encoder_fn(data)
        __Pyx_XDECREF(__pyx_r);
        __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_field, __pyx_n_s_encoder_fn); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 625, __pyx_L29_error)
        __Pyx_GOTREF(__pyx_t_7);
        __pyx_t_5 = NULL;
        __pyx_t_8 = 0;
        #if CYTHON_UNPACK_METHODS
        if (likely(PyMethod_Check(__pyx_t_7))) {
          __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_7);
          if (likely(__pyx_t_5)) {
            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7);
            __Pyx_INCREF(__pyx_t_5);
            __Pyx_INCREF(function);
            __Pyx_DECREF_SET(__pyx_t_7, function);
            __pyx_t_8 = 1;
          }
        }
        #endif
        {
          PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_v_data};
          __pyx_t_6 = __Pyx_PyObject_FastCall(__pyx_t_7, __pyx_callargs+1-__pyx_t_8, 1+__pyx_t_8);
          __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
          if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 625, __pyx_L29_error)
          __Pyx_GOTREF(__pyx_t_6);
          __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
        }
        __pyx_r = __pyx_t_6;
        __pyx_t_6 = 0;
        goto __pyx_L33_try_return;
+0626:         except KeyError:
      __pyx_t_14 = __Pyx_PyErr_ExceptionMatches(__pyx_builtin_KeyError);
      if (__pyx_t_14) {
        __Pyx_AddTraceback("datamodel.converters._parse_builtin_type", __pyx_clineno, __pyx_lineno, __pyx_filename);
        if (__Pyx_GetException(&__pyx_t_6, &__pyx_t_7, &__pyx_t_5) < 0) __PYX_ERR(0, 626, __pyx_L31_except_error)
        __Pyx_XGOTREF(__pyx_t_6);
        __Pyx_XGOTREF(__pyx_t_7);
        __Pyx_XGOTREF(__pyx_t_5);
 0627:             # attempt direct construction:
+0628:             if isinstance(T, type):
        __pyx_t_1 = PyType_Check(__pyx_v_T); 
        if (__pyx_t_1) {
/* … */
        }
+0629:                 try:
          {
            /*try:*/ {
/* … */
            }
            __Pyx_XDECREF(__pyx_t_21); __pyx_t_21 = 0;
            __Pyx_XDECREF(__pyx_t_20); __pyx_t_20 = 0;
            __Pyx_XDECREF(__pyx_t_19); __pyx_t_19 = 0;
            goto __pyx_L46_try_end;
            __pyx_L39_error:;
            __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
            __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
            __Pyx_XDECREF(__pyx_t_23); __pyx_t_23 = 0;
/* … */
            __pyx_L41_except_error:;
            __Pyx_XGIVEREF(__pyx_t_21);
            __Pyx_XGIVEREF(__pyx_t_20);
            __Pyx_XGIVEREF(__pyx_t_19);
            __Pyx_ExceptionReset(__pyx_t_21, __pyx_t_20, __pyx_t_19);
            goto __pyx_L31_except_error;
            __pyx_L43_try_return:;
            __Pyx_XGIVEREF(__pyx_t_21);
            __Pyx_XGIVEREF(__pyx_t_20);
            __Pyx_XGIVEREF(__pyx_t_19);
            __Pyx_ExceptionReset(__pyx_t_21, __pyx_t_20, __pyx_t_19);
            goto __pyx_L32_except_return;
            __pyx_L40_exception_handled:;
            __Pyx_XGIVEREF(__pyx_t_21);
            __Pyx_XGIVEREF(__pyx_t_20);
            __Pyx_XGIVEREF(__pyx_t_19);
            __Pyx_ExceptionReset(__pyx_t_21, __pyx_t_20, __pyx_t_19);
            __pyx_L46_try_end:;
          }
+0630:                     if isinstance(data, dict):
              __pyx_t_1 = PyDict_Check(__pyx_v_data); 
              if (__pyx_t_1) {
/* … */
              }
+0631:                         return T(**data)
                __Pyx_XDECREF(__pyx_r);
                if (unlikely(__pyx_v_data == Py_None)) {
                  PyErr_SetString(PyExc_TypeError, "argument after ** must be a mapping, not NoneType");
                  __PYX_ERR(0, 631, __pyx_L39_error)
                }
                if (likely(PyDict_CheckExact(__pyx_v_data))) {
                  __pyx_t_10 = PyDict_Copy(__pyx_v_data); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 631, __pyx_L39_error)
                  __Pyx_GOTREF(__pyx_t_10);
                } else {
                  __pyx_t_10 = __Pyx_PyObject_CallOneArg((PyObject*)&PyDict_Type, __pyx_v_data); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 631, __pyx_L39_error)
                  __Pyx_GOTREF(__pyx_t_10);
                }
                __pyx_t_13 = __Pyx_PyObject_Call(__pyx_v_T, __pyx_empty_tuple, __pyx_t_10); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 631, __pyx_L39_error)
                __Pyx_GOTREF(__pyx_t_13);
                __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
                __pyx_r = __pyx_t_13;
                __pyx_t_13 = 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;
                goto __pyx_L43_try_return;
+0632:                     elif isinstance(data, (list, tuple)):
              __pyx_t_22 = PyList_Check(__pyx_v_data); 
              if (!__pyx_t_22) {
              } else {
                __pyx_t_1 = __pyx_t_22;
                goto __pyx_L48_bool_binop_done;
              }
              __pyx_t_22 = PyTuple_Check(__pyx_v_data); 
              __pyx_t_1 = __pyx_t_22;
              __pyx_L48_bool_binop_done:;
              if (__pyx_t_1) {
/* … */
              }
+0633:                         return T(*data)
                __Pyx_XDECREF(__pyx_r);
                __pyx_t_13 = __Pyx_PySequence_Tuple(__pyx_v_data); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 633, __pyx_L39_error)
                __Pyx_GOTREF(__pyx_t_13);
                __pyx_t_10 = __Pyx_PyObject_Call(__pyx_v_T, __pyx_t_13, NULL); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 633, __pyx_L39_error)
                __Pyx_GOTREF(__pyx_t_10);
                __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
                __pyx_r = __pyx_t_10;
                __pyx_t_10 = 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;
                goto __pyx_L43_try_return;
+0634:                     elif isinstance(data, str):
              __pyx_t_1 = PyUnicode_Check(__pyx_v_data); 
              if (__pyx_t_1) {
/* … */
              }
+0635:                         return T(data)
                __Pyx_XDECREF(__pyx_r);
                __Pyx_INCREF(__pyx_v_T);
                __pyx_t_13 = __pyx_v_T; __pyx_t_23 = NULL;
                __pyx_t_8 = 0;
                #if CYTHON_UNPACK_METHODS
                if (unlikely(PyMethod_Check(__pyx_t_13))) {
                  __pyx_t_23 = PyMethod_GET_SELF(__pyx_t_13);
                  if (likely(__pyx_t_23)) {
                    PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_13);
                    __Pyx_INCREF(__pyx_t_23);
                    __Pyx_INCREF(function);
                    __Pyx_DECREF_SET(__pyx_t_13, function);
                    __pyx_t_8 = 1;
                  }
                }
                #endif
                {
                  PyObject *__pyx_callargs[2] = {__pyx_t_23, __pyx_v_data};
                  __pyx_t_10 = __Pyx_PyObject_FastCall(__pyx_t_13, __pyx_callargs+1-__pyx_t_8, 1+__pyx_t_8);
                  __Pyx_XDECREF(__pyx_t_23); __pyx_t_23 = 0;
                  if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 635, __pyx_L39_error)
                  __Pyx_GOTREF(__pyx_t_10);
                  __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
                }
                __pyx_r = __pyx_t_10;
                __pyx_t_10 = 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;
                goto __pyx_L43_try_return;
+0636:                 except (TypeError, ValueError):
            __pyx_t_14 = __Pyx_PyErr_ExceptionMatches2(__pyx_builtin_TypeError, __pyx_builtin_ValueError);
            if (__pyx_t_14) {
              __Pyx_ErrRestore(0,0,0);
              goto __pyx_L40_exception_handled;
            }
            goto __pyx_L41_except_error;
 0637:                     pass
+0638:             return data
        __Pyx_XDECREF(__pyx_r);
        __Pyx_INCREF(__pyx_v_data);
        __pyx_r = __pyx_v_data;
        __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;
        goto __pyx_L32_except_return;
      }
+0639:         except (TypeError) as e:
      __pyx_t_14 = __Pyx_PyErr_ExceptionMatches(__pyx_builtin_TypeError);
      if (__pyx_t_14) {
        __Pyx_AddTraceback("datamodel.converters._parse_builtin_type", __pyx_clineno, __pyx_lineno, __pyx_filename);
        if (__Pyx_GetException(&__pyx_t_5, &__pyx_t_7, &__pyx_t_6) < 0) __PYX_ERR(0, 639, __pyx_L31_except_error)
        __Pyx_XGOTREF(__pyx_t_5);
        __Pyx_XGOTREF(__pyx_t_7);
        __Pyx_XGOTREF(__pyx_t_6);
        __Pyx_INCREF(__pyx_t_7);
        __pyx_v_e = __pyx_t_7;
        /*try:*/ {
/* … */
        /*finally:*/ {
          __pyx_L55_error:;
          /*exception exit:*/{
            __Pyx_PyThreadState_declare
            __Pyx_PyThreadState_assign
            __pyx_t_19 = 0; __pyx_t_20 = 0; __pyx_t_21 = 0; __pyx_t_18 = 0; __pyx_t_17 = 0; __pyx_t_16 = 0;
            __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
            __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
            __Pyx_XDECREF(__pyx_t_23); __pyx_t_23 = 0;
            if (PY_MAJOR_VERSION >= 3) __Pyx_ExceptionSwap(&__pyx_t_18, &__pyx_t_17, &__pyx_t_16);
            if ((PY_MAJOR_VERSION < 3) || 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_18);
            __Pyx_XGOTREF(__pyx_t_17);
            __Pyx_XGOTREF(__pyx_t_16);
            __pyx_t_14 = __pyx_lineno; __pyx_t_9 = __pyx_clineno; __pyx_t_24 = __pyx_filename;
            {
              __Pyx_DECREF(__pyx_v_e); __pyx_v_e = 0;
            }
            if (PY_MAJOR_VERSION >= 3) {
              __Pyx_XGIVEREF(__pyx_t_18);
              __Pyx_XGIVEREF(__pyx_t_17);
              __Pyx_XGIVEREF(__pyx_t_16);
              __Pyx_ExceptionReset(__pyx_t_18, __pyx_t_17, __pyx_t_16);
            }
            __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_18 = 0; __pyx_t_17 = 0; __pyx_t_16 = 0;
            __pyx_lineno = __pyx_t_14; __pyx_clineno = __pyx_t_9; __pyx_filename = __pyx_t_24;
            goto __pyx_L31_except_error;
          }
        }
      }
+0640:             raise TypeError(f"Error type {T}: {e}") from e
          __pyx_t_10 = PyTuple_New(4); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 640, __pyx_L55_error)
          __Pyx_GOTREF(__pyx_t_10);
          __pyx_t_11 = 0;
          __pyx_t_12 = 127;
          __Pyx_INCREF(__pyx_kp_u_Error_type);
          __pyx_t_11 += 11;
          __Pyx_GIVEREF(__pyx_kp_u_Error_type);
          PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_kp_u_Error_type);
          __pyx_t_13 = __Pyx_PyObject_FormatSimple(__pyx_v_T, __pyx_empty_unicode); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 640, __pyx_L55_error)
          __Pyx_GOTREF(__pyx_t_13);
          __pyx_t_12 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_13) > __pyx_t_12) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_13) : __pyx_t_12;
          __pyx_t_11 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_13);
          __Pyx_GIVEREF(__pyx_t_13);
          PyTuple_SET_ITEM(__pyx_t_10, 1, __pyx_t_13);
          __pyx_t_13 = 0;
          __Pyx_INCREF(__pyx_kp_u__7);
          __pyx_t_11 += 2;
          __Pyx_GIVEREF(__pyx_kp_u__7);
          PyTuple_SET_ITEM(__pyx_t_10, 2, __pyx_kp_u__7);
          __pyx_t_13 = __Pyx_PyObject_FormatSimple(__pyx_v_e, __pyx_empty_unicode); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 640, __pyx_L55_error)
          __Pyx_GOTREF(__pyx_t_13);
          __pyx_t_12 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_13) > __pyx_t_12) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_13) : __pyx_t_12;
          __pyx_t_11 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_13);
          __Pyx_GIVEREF(__pyx_t_13);
          PyTuple_SET_ITEM(__pyx_t_10, 3, __pyx_t_13);
          __pyx_t_13 = 0;
          __pyx_t_13 = __Pyx_PyUnicode_Join(__pyx_t_10, 4, __pyx_t_11, __pyx_t_12); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 640, __pyx_L55_error)
          __Pyx_GOTREF(__pyx_t_13);
          __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
          __pyx_t_10 = __Pyx_PyObject_CallOneArg(__pyx_builtin_TypeError, __pyx_t_13); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 640, __pyx_L55_error)
          __Pyx_GOTREF(__pyx_t_10);
          __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
          __Pyx_Raise(__pyx_t_10, 0, 0, __pyx_v_e);
          __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
          __PYX_ERR(0, 640, __pyx_L55_error)
        }
+0641:         except (ValueError) as e:
      __pyx_t_9 = __Pyx_PyErr_ExceptionMatches(__pyx_builtin_ValueError);
      if (__pyx_t_9) {
        __Pyx_AddTraceback("datamodel.converters._parse_builtin_type", __pyx_clineno, __pyx_lineno, __pyx_filename);
        if (__Pyx_GetException(&__pyx_t_6, &__pyx_t_7, &__pyx_t_5) < 0) __PYX_ERR(0, 641, __pyx_L31_except_error)
        __Pyx_XGOTREF(__pyx_t_6);
        __Pyx_XGOTREF(__pyx_t_7);
        __Pyx_XGOTREF(__pyx_t_5);
        __Pyx_INCREF(__pyx_t_7);
        __pyx_v_e = __pyx_t_7;
        /*try:*/ {
/* … */
        /*finally:*/ {
          __pyx_L66_error:;
          /*exception exit:*/{
            __Pyx_PyThreadState_declare
            __Pyx_PyThreadState_assign
            __pyx_t_16 = 0; __pyx_t_17 = 0; __pyx_t_18 = 0; __pyx_t_21 = 0; __pyx_t_20 = 0; __pyx_t_19 = 0;
            __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
            __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
            __Pyx_XDECREF(__pyx_t_23); __pyx_t_23 = 0;
            if (PY_MAJOR_VERSION >= 3) __Pyx_ExceptionSwap(&__pyx_t_21, &__pyx_t_20, &__pyx_t_19);
            if ((PY_MAJOR_VERSION < 3) || 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_21);
            __Pyx_XGOTREF(__pyx_t_20);
            __Pyx_XGOTREF(__pyx_t_19);
            __pyx_t_9 = __pyx_lineno; __pyx_t_14 = __pyx_clineno; __pyx_t_25 = __pyx_filename;
            {
              __Pyx_DECREF(__pyx_v_e); __pyx_v_e = 0;
            }
            if (PY_MAJOR_VERSION >= 3) {
              __Pyx_XGIVEREF(__pyx_t_21);
              __Pyx_XGIVEREF(__pyx_t_20);
              __Pyx_XGIVEREF(__pyx_t_19);
              __Pyx_ExceptionReset(__pyx_t_21, __pyx_t_20, __pyx_t_19);
            }
            __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_21 = 0; __pyx_t_20 = 0; __pyx_t_19 = 0;
            __pyx_lineno = __pyx_t_9; __pyx_clineno = __pyx_t_14; __pyx_filename = __pyx_t_25;
            goto __pyx_L31_except_error;
          }
        }
      }
      goto __pyx_L31_except_error;
+0642:             raise ValueError(
          __pyx_t_10 = __Pyx_PyObject_CallOneArg(__pyx_builtin_ValueError, __pyx_t_13); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 642, __pyx_L66_error)
          __Pyx_GOTREF(__pyx_t_10);
          __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
+0643:                 f"Error parsing type {T}: {e}"
          __pyx_t_10 = PyTuple_New(4); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 643, __pyx_L66_error)
          __Pyx_GOTREF(__pyx_t_10);
          __pyx_t_11 = 0;
          __pyx_t_12 = 127;
          __Pyx_INCREF(__pyx_kp_u_Error_parsing_type);
          __pyx_t_11 += 19;
          __Pyx_GIVEREF(__pyx_kp_u_Error_parsing_type);
          PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_kp_u_Error_parsing_type);
          __pyx_t_13 = __Pyx_PyObject_FormatSimple(__pyx_v_T, __pyx_empty_unicode); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 643, __pyx_L66_error)
          __Pyx_GOTREF(__pyx_t_13);
          __pyx_t_12 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_13) > __pyx_t_12) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_13) : __pyx_t_12;
          __pyx_t_11 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_13);
          __Pyx_GIVEREF(__pyx_t_13);
          PyTuple_SET_ITEM(__pyx_t_10, 1, __pyx_t_13);
          __pyx_t_13 = 0;
          __Pyx_INCREF(__pyx_kp_u__7);
          __pyx_t_11 += 2;
          __Pyx_GIVEREF(__pyx_kp_u__7);
          PyTuple_SET_ITEM(__pyx_t_10, 2, __pyx_kp_u__7);
          __pyx_t_13 = __Pyx_PyObject_FormatSimple(__pyx_v_e, __pyx_empty_unicode); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 643, __pyx_L66_error)
          __Pyx_GOTREF(__pyx_t_13);
          __pyx_t_12 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_13) > __pyx_t_12) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_13) : __pyx_t_12;
          __pyx_t_11 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_13);
          __Pyx_GIVEREF(__pyx_t_13);
          PyTuple_SET_ITEM(__pyx_t_10, 3, __pyx_t_13);
          __pyx_t_13 = 0;
          __pyx_t_13 = __Pyx_PyUnicode_Join(__pyx_t_10, 4, __pyx_t_11, __pyx_t_12); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 643, __pyx_L66_error)
          __Pyx_GOTREF(__pyx_t_13);
          __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
+0644:             ) from e
          __Pyx_Raise(__pyx_t_10, 0, 0, __pyx_v_e);
          __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
          __PYX_ERR(0, 642, __pyx_L66_error)
        }
 0645: 
+0646: cpdef object parse_basic(object T, object data, object encoder = None):
static PyObject *__pyx_pw_9datamodel_10converters_33parse_basic(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_9datamodel_10converters_parse_basic(PyObject *__pyx_v_T, PyObject *__pyx_v_data, CYTHON_UNUSED int __pyx_skip_dispatch, struct __pyx_opt_args_9datamodel_10converters_parse_basic *__pyx_optional_args) {
  PyObject *__pyx_v_encoder = ((PyObject *)Py_None);
  PyObject *__pyx_v_e = NULL;
  PyObject *__pyx_r = NULL;
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_encoder = __pyx_optional_args->encoder;
    }
  }
/* … */
  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_XDECREF(__pyx_t_11);
  __Pyx_XDECREF(__pyx_t_14);
  __Pyx_AddTraceback("datamodel.converters.parse_basic", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_e);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_9datamodel_10converters_33parse_basic(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_9datamodel_10converters_32parse_basic, "parse_basic(T, data, encoder=None)\nparse_basic.\n\n    Parse a value to primitive types as str or int.\n    --- (int, float, str, bool, bytes)\n    ");
static PyMethodDef __pyx_mdef_9datamodel_10converters_33parse_basic = {"parse_basic", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9datamodel_10converters_33parse_basic, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_9datamodel_10converters_32parse_basic};
static PyObject *__pyx_pw_9datamodel_10converters_33parse_basic(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_T = 0;
  PyObject *__pyx_v_data = 0;
  PyObject *__pyx_v_encoder = 0;
  #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("parse_basic (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_MACROS
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __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 **__pyx_pyargnames[] = {&__pyx_n_s_T,&__pyx_n_s_data,&__pyx_n_s_encoder,0};
  PyObject* values[3] = {0,0,0};
    values[2] = __Pyx_Arg_NewRef_FASTCALL(((PyObject *)Py_None));
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_T)) != 0)) {
          (void)__Pyx_Arg_NewRef_FASTCALL(values[0]);
          kw_args--;
        }
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 646, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_data)) != 0)) {
          (void)__Pyx_Arg_NewRef_FASTCALL(values[1]);
          kw_args--;
        }
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 646, __pyx_L3_error)
        else {
          __Pyx_RaiseArgtupleInvalid("parse_basic", 0, 2, 3, 1); __PYX_ERR(0, 646, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_encoder);
          if (value) { values[2] = __Pyx_Arg_NewRef_FASTCALL(value); kw_args--; }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 646, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "parse_basic") < 0)) __PYX_ERR(0, 646, __pyx_L3_error)
      }
    } else {
      switch (__pyx_nargs) {
        case  3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_T = values[0];
    __pyx_v_data = values[1];
    __pyx_v_encoder = values[2];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("parse_basic", 0, 2, 3, __pyx_nargs); __PYX_ERR(0, 646, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  {
    Py_ssize_t __pyx_temp;
    for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
      __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]);
    }
  }
  __Pyx_AddTraceback("datamodel.converters.parse_basic", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_9datamodel_10converters_32parse_basic(__pyx_self, __pyx_v_T, __pyx_v_data, __pyx_v_encoder);

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

static PyObject *__pyx_pf_9datamodel_10converters_32parse_basic(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_T, PyObject *__pyx_v_data, PyObject *__pyx_v_encoder) {
  PyObject *__pyx_r = NULL;
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2.__pyx_n = 1;
  __pyx_t_2.encoder = __pyx_v_encoder;
  __pyx_t_1 = __pyx_f_9datamodel_10converters_parse_basic(__pyx_v_T, __pyx_v_data, 0, &__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 646, __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("datamodel.converters.parse_basic", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
static PyObject *__pyx_gb_9datamodel_10converters_18_parse_typing_type_2generator(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value); /* proto */
/* … */
  __pyx_tuple__43 = PyTuple_Pack(3, __pyx_n_s_T, __pyx_n_s_data, __pyx_n_s_encoder); if (unlikely(!__pyx_tuple__43)) __PYX_ERR(0, 646, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__43);
  __Pyx_GIVEREF(__pyx_tuple__43);
  __pyx_codeobj__44 = (PyObject*)__Pyx_PyCode_New(3, 0, 0, 3, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__43, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_datamodel_converters_pyx, __pyx_n_s_parse_basic, 646, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__44)) __PYX_ERR(0, 646, __pyx_L1_error)
/* … */
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_9datamodel_10converters_33parse_basic, 0, __pyx_n_s_parse_basic, NULL, __pyx_n_s_datamodel_converters, __pyx_d, ((PyObject *)__pyx_codeobj__44)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 646, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_2, __pyx_tuple__45);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_parse_basic, __pyx_t_2) < 0) __PYX_ERR(0, 646, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_tuple__45 = PyTuple_Pack(1, Py_None); if (unlikely(!__pyx_tuple__45)) __PYX_ERR(0, 646, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__45);
  __Pyx_GIVEREF(__pyx_tuple__45);
/* … */
struct __pyx_opt_args_9datamodel_10converters_parse_basic {
  int __pyx_n;
  PyObject *encoder;
};
 0647:     """parse_basic.
 0648: 
 0649:     Parse a value to primitive types as str or int.
 0650:     --- (int, float, str, bool, bytes)
 0651:     """
+0652:     if T == str:
  __pyx_t_1 = PyObject_RichCompare(__pyx_v_T, ((PyObject *)(&PyUnicode_Type)), Py_EQ); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 652, __pyx_L1_error)
  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 652, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (__pyx_t_2) {
/* … */
  }
+0653:         if isinstance(data, str):
    __pyx_t_2 = PyUnicode_Check(__pyx_v_data); 
    if (__pyx_t_2) {
/* … */
    }
+0654:             return data
      __Pyx_XDECREF(__pyx_r);
      __Pyx_INCREF(__pyx_v_data);
      __pyx_r = __pyx_v_data;
      goto __pyx_L0;
+0655:         elif data is not None:
    __pyx_t_2 = (__pyx_v_data != Py_None);
    if (__pyx_t_2) {
/* … */
    }
+0656:             return str(data)
      __Pyx_XDECREF(__pyx_r);
      __pyx_t_1 = __Pyx_PyObject_Unicode(__pyx_v_data); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 656, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_r = __pyx_t_1;
      __pyx_t_1 = 0;
      goto __pyx_L0;
+0657:     if T == int:
  __pyx_t_1 = PyObject_RichCompare(__pyx_v_T, ((PyObject *)(&PyInt_Type)), Py_EQ); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 657, __pyx_L1_error)
  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 657, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (__pyx_t_2) {
/* … */
  }
+0658:         if isinstance(data, int):
    __pyx_t_2 = PyInt_Check(__pyx_v_data); 
    if (__pyx_t_2) {
/* … */
    }
+0659:             return data
      __Pyx_XDECREF(__pyx_r);
      __Pyx_INCREF(__pyx_v_data);
      __pyx_r = __pyx_v_data;
      goto __pyx_L0;
+0660:         elif data is not None:
    __pyx_t_2 = (__pyx_v_data != Py_None);
    if (__pyx_t_2) {
/* … */
    }
+0661:             return int(data)
      __Pyx_XDECREF(__pyx_r);
      __pyx_t_1 = __Pyx_PyNumber_Int(__pyx_v_data); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 661, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_r = __pyx_t_1;
      __pyx_t_1 = 0;
      goto __pyx_L0;
+0662:     if T == bytes:
  __pyx_t_1 = PyObject_RichCompare(__pyx_v_T, ((PyObject *)(&PyBytes_Type)), Py_EQ); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 662, __pyx_L1_error)
  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 662, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (__pyx_t_2) {
/* … */
  }
+0663:         if data is not None:
    __pyx_t_2 = (__pyx_v_data != Py_None);
    if (__pyx_t_2) {
/* … */
    }
+0664:             return bytes(data)
      __Pyx_XDECREF(__pyx_r);
      __pyx_t_1 = __Pyx_PyObject_CallOneArg(((PyObject *)(&PyBytes_Type)), __pyx_v_data); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 664, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_r = __pyx_t_1;
      __pyx_t_1 = 0;
      goto __pyx_L0;
+0665:     if T == UUID or T == pgproto.UUID:
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_UUID); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 665, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_3 = PyObject_RichCompare(__pyx_v_T, __pyx_t_1, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 665, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely((__pyx_t_4 < 0))) __PYX_ERR(0, 665, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (!__pyx_t_4) {
  } else {
    __pyx_t_2 = __pyx_t_4;
    goto __pyx_L10_bool_binop_done;
  }
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_pgproto); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 665, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_UUID); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 665, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = PyObject_RichCompare(__pyx_v_T, __pyx_t_1, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 665, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely((__pyx_t_4 < 0))) __PYX_ERR(0, 665, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_2 = __pyx_t_4;
  __pyx_L10_bool_binop_done:;
  if (__pyx_t_2) {
/* … */
  }
+0666:         return to_uuid(data)
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_3 = __pyx_f_9datamodel_10converters_to_uuid(__pyx_v_data, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 666, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_r = __pyx_t_3;
    __pyx_t_3 = 0;
    goto __pyx_L0;
+0667:     if T == bool:
  __pyx_t_3 = PyObject_RichCompare(__pyx_v_T, ((PyObject*)&PyBool_Type), Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 667, __pyx_L1_error)
  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 667, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (__pyx_t_2) {
/* … */
  }
+0668:         if isinstance(data, bool):
    __pyx_t_3 = ((PyObject*)&PyBool_Type);
    __Pyx_INCREF(__pyx_t_3);
    __pyx_t_2 = PyObject_IsInstance(__pyx_v_data, __pyx_t_3); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 668, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (__pyx_t_2) {
/* … */
    }
+0669:             return data
      __Pyx_XDECREF(__pyx_r);
      __Pyx_INCREF(__pyx_v_data);
      __pyx_r = __pyx_v_data;
      goto __pyx_L0;
 0670:     # function encoder:
+0671:     if encoder:
  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_encoder); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 671, __pyx_L1_error)
  if (__pyx_t_2) {
/* … */
  }
+0672:         if is_callable(encoder):
    __pyx_t_2 = __pyx_f_9datamodel_10converters_is_callable(__pyx_v_encoder); if (unlikely(__pyx_t_2 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 672, __pyx_L1_error)
    if (__pyx_t_2) {
/* … */
    }
 0673:             # using a function encoder:
+0674:             try:
      {
        /*try:*/ {
/* … */
        }
        __pyx_L16_error:;
        __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
        __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
        __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
/* … */
        __pyx_L18_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_L20_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_L19_except_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;
      }
+0675:                 return encoder(data)
          __Pyx_XDECREF(__pyx_r);
          __Pyx_INCREF(__pyx_v_encoder);
          __pyx_t_1 = __pyx_v_encoder; __pyx_t_8 = NULL;
          __pyx_t_9 = 0;
          #if CYTHON_UNPACK_METHODS
          if (unlikely(PyMethod_Check(__pyx_t_1))) {
            __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_1);
            if (likely(__pyx_t_8)) {
              PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
              __Pyx_INCREF(__pyx_t_8);
              __Pyx_INCREF(function);
              __Pyx_DECREF_SET(__pyx_t_1, function);
              __pyx_t_9 = 1;
            }
          }
          #endif
          {
            PyObject *__pyx_callargs[2] = {__pyx_t_8, __pyx_v_data};
            __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_1, __pyx_callargs+1-__pyx_t_9, 1+__pyx_t_9);
            __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
            if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 675, __pyx_L16_error)
            __Pyx_GOTREF(__pyx_t_3);
            __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
          }
          __pyx_r = __pyx_t_3;
          __pyx_t_3 = 0;
          goto __pyx_L20_try_return;
+0676:             except TypeError as e:
        __pyx_t_10 = __Pyx_PyErr_ExceptionMatches(__pyx_builtin_TypeError);
        if (__pyx_t_10) {
          __Pyx_AddTraceback("datamodel.converters.parse_basic", __pyx_clineno, __pyx_lineno, __pyx_filename);
          if (__Pyx_GetException(&__pyx_t_3, &__pyx_t_1, &__pyx_t_8) < 0) __PYX_ERR(0, 676, __pyx_L18_except_error)
          __Pyx_XGOTREF(__pyx_t_3);
          __Pyx_XGOTREF(__pyx_t_1);
          __Pyx_XGOTREF(__pyx_t_8);
          __Pyx_INCREF(__pyx_t_1);
          __pyx_v_e = __pyx_t_1;
          /*try:*/ {
/* … */
          /*finally:*/ {
            __pyx_L27_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_11); __pyx_t_11 = 0;
              __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
              if (PY_MAJOR_VERSION >= 3) __Pyx_ExceptionSwap(&__pyx_t_20, &__pyx_t_21, &__pyx_t_22);
              if ((PY_MAJOR_VERSION < 3) || 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_10 = __pyx_lineno; __pyx_t_15 = __pyx_clineno; __pyx_t_16 = __pyx_filename;
              {
                __Pyx_DECREF(__pyx_v_e); __pyx_v_e = 0;
              }
              if (PY_MAJOR_VERSION >= 3) {
                __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_10; __pyx_clineno = __pyx_t_15; __pyx_filename = __pyx_t_16;
              goto __pyx_L18_except_error;
            }
          }
        }
+0677:                 raise TypeError(
            __pyx_t_11 = __Pyx_PyObject_CallOneArg(__pyx_builtin_TypeError, __pyx_t_14); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 677, __pyx_L27_error)
            __Pyx_GOTREF(__pyx_t_11);
            __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
+0678:                     f"Type Error for Encoder {encoder!s} for type {T}: {e}"
            __pyx_t_11 = PyTuple_New(6); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 678, __pyx_L27_error)
            __Pyx_GOTREF(__pyx_t_11);
            __pyx_t_12 = 0;
            __pyx_t_13 = 127;
            __Pyx_INCREF(__pyx_kp_u_Type_Error_for_Encoder);
            __pyx_t_12 += 23;
            __Pyx_GIVEREF(__pyx_kp_u_Type_Error_for_Encoder);
            PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_kp_u_Type_Error_for_Encoder);
            __pyx_t_14 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Unicode(__pyx_v_encoder), __pyx_empty_unicode); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 678, __pyx_L27_error)
            __Pyx_GOTREF(__pyx_t_14);
            __pyx_t_13 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_14) > __pyx_t_13) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_14) : __pyx_t_13;
            __pyx_t_12 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_14);
            __Pyx_GIVEREF(__pyx_t_14);
            PyTuple_SET_ITEM(__pyx_t_11, 1, __pyx_t_14);
            __pyx_t_14 = 0;
            __Pyx_INCREF(__pyx_kp_u_for_type);
            __pyx_t_12 += 10;
            __Pyx_GIVEREF(__pyx_kp_u_for_type);
            PyTuple_SET_ITEM(__pyx_t_11, 2, __pyx_kp_u_for_type);
            __pyx_t_14 = __Pyx_PyObject_FormatSimple(__pyx_v_T, __pyx_empty_unicode); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 678, __pyx_L27_error)
            __Pyx_GOTREF(__pyx_t_14);
            __pyx_t_13 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_14) > __pyx_t_13) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_14) : __pyx_t_13;
            __pyx_t_12 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_14);
            __Pyx_GIVEREF(__pyx_t_14);
            PyTuple_SET_ITEM(__pyx_t_11, 3, __pyx_t_14);
            __pyx_t_14 = 0;
            __Pyx_INCREF(__pyx_kp_u__7);
            __pyx_t_12 += 2;
            __Pyx_GIVEREF(__pyx_kp_u__7);
            PyTuple_SET_ITEM(__pyx_t_11, 4, __pyx_kp_u__7);
            __pyx_t_14 = __Pyx_PyObject_FormatSimple(__pyx_v_e, __pyx_empty_unicode); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 678, __pyx_L27_error)
            __Pyx_GOTREF(__pyx_t_14);
            __pyx_t_13 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_14) > __pyx_t_13) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_14) : __pyx_t_13;
            __pyx_t_12 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_14);
            __Pyx_GIVEREF(__pyx_t_14);
            PyTuple_SET_ITEM(__pyx_t_11, 5, __pyx_t_14);
            __pyx_t_14 = 0;
            __pyx_t_14 = __Pyx_PyUnicode_Join(__pyx_t_11, 6, __pyx_t_12, __pyx_t_13); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 678, __pyx_L27_error)
            __Pyx_GOTREF(__pyx_t_14);
            __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
+0679:                 ) from e
            __Pyx_Raise(__pyx_t_11, 0, 0, __pyx_v_e);
            __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
            __PYX_ERR(0, 677, __pyx_L27_error)
          }
+0680:             except ValueError as e:
        __pyx_t_15 = __Pyx_PyErr_ExceptionMatches(__pyx_builtin_ValueError);
        if (__pyx_t_15) {
          __Pyx_AddTraceback("datamodel.converters.parse_basic", __pyx_clineno, __pyx_lineno, __pyx_filename);
          if (__Pyx_GetException(&__pyx_t_8, &__pyx_t_1, &__pyx_t_3) < 0) __PYX_ERR(0, 680, __pyx_L18_except_error)
          __Pyx_XGOTREF(__pyx_t_8);
          __Pyx_XGOTREF(__pyx_t_1);
          __Pyx_XGOTREF(__pyx_t_3);
          __Pyx_INCREF(__pyx_t_1);
          __pyx_v_e = __pyx_t_1;
          /*try:*/ {
/* … */
          /*finally:*/ {
            __pyx_L38_error:;
            /*exception exit:*/{
              __Pyx_PyThreadState_declare
              __Pyx_PyThreadState_assign
              __pyx_t_22 = 0; __pyx_t_21 = 0; __pyx_t_20 = 0; __pyx_t_19 = 0; __pyx_t_18 = 0; __pyx_t_17 = 0;
              __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
              __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
              if (PY_MAJOR_VERSION >= 3) __Pyx_ExceptionSwap(&__pyx_t_19, &__pyx_t_18, &__pyx_t_17);
              if ((PY_MAJOR_VERSION < 3) || unlikely(__Pyx_GetException(&__pyx_t_22, &__pyx_t_21, &__pyx_t_20) < 0)) __Pyx_ErrFetch(&__pyx_t_22, &__pyx_t_21, &__pyx_t_20);
              __Pyx_XGOTREF(__pyx_t_22);
              __Pyx_XGOTREF(__pyx_t_21);
              __Pyx_XGOTREF(__pyx_t_20);
              __Pyx_XGOTREF(__pyx_t_19);
              __Pyx_XGOTREF(__pyx_t_18);
              __Pyx_XGOTREF(__pyx_t_17);
              __pyx_t_15 = __pyx_lineno; __pyx_t_10 = __pyx_clineno; __pyx_t_23 = __pyx_filename;
              {
                __Pyx_DECREF(__pyx_v_e); __pyx_v_e = 0;
              }
              if (PY_MAJOR_VERSION >= 3) {
                __Pyx_XGIVEREF(__pyx_t_19);
                __Pyx_XGIVEREF(__pyx_t_18);
                __Pyx_XGIVEREF(__pyx_t_17);
                __Pyx_ExceptionReset(__pyx_t_19, __pyx_t_18, __pyx_t_17);
              }
              __Pyx_XGIVEREF(__pyx_t_22);
              __Pyx_XGIVEREF(__pyx_t_21);
              __Pyx_XGIVEREF(__pyx_t_20);
              __Pyx_ErrRestore(__pyx_t_22, __pyx_t_21, __pyx_t_20);
              __pyx_t_22 = 0; __pyx_t_21 = 0; __pyx_t_20 = 0; __pyx_t_19 = 0; __pyx_t_18 = 0; __pyx_t_17 = 0;
              __pyx_lineno = __pyx_t_15; __pyx_clineno = __pyx_t_10; __pyx_filename = __pyx_t_23;
              goto __pyx_L18_except_error;
            }
          }
        }
+0681:                 raise ValueError(
            __pyx_t_11 = __Pyx_PyObject_CallOneArg(__pyx_builtin_ValueError, __pyx_t_14); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 681, __pyx_L38_error)
            __Pyx_GOTREF(__pyx_t_11);
            __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
            __Pyx_Raise(__pyx_t_11, 0, 0, 0);
            __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
            __PYX_ERR(0, 681, __pyx_L38_error)
          }
+0682:                     f"Error parsing type {T}, {e}"
            __pyx_t_11 = PyTuple_New(4); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 682, __pyx_L38_error)
            __Pyx_GOTREF(__pyx_t_11);
            __pyx_t_12 = 0;
            __pyx_t_13 = 127;
            __Pyx_INCREF(__pyx_kp_u_Error_parsing_type);
            __pyx_t_12 += 19;
            __Pyx_GIVEREF(__pyx_kp_u_Error_parsing_type);
            PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_kp_u_Error_parsing_type);
            __pyx_t_14 = __Pyx_PyObject_FormatSimple(__pyx_v_T, __pyx_empty_unicode); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 682, __pyx_L38_error)
            __Pyx_GOTREF(__pyx_t_14);
            __pyx_t_13 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_14) > __pyx_t_13) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_14) : __pyx_t_13;
            __pyx_t_12 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_14);
            __Pyx_GIVEREF(__pyx_t_14);
            PyTuple_SET_ITEM(__pyx_t_11, 1, __pyx_t_14);
            __pyx_t_14 = 0;
            __Pyx_INCREF(__pyx_kp_u__10);
            __pyx_t_12 += 2;
            __Pyx_GIVEREF(__pyx_kp_u__10);
            PyTuple_SET_ITEM(__pyx_t_11, 2, __pyx_kp_u__10);
            __pyx_t_14 = __Pyx_PyObject_FormatSimple(__pyx_v_e, __pyx_empty_unicode); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 682, __pyx_L38_error)
            __Pyx_GOTREF(__pyx_t_14);
            __pyx_t_13 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_14) > __pyx_t_13) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_14) : __pyx_t_13;
            __pyx_t_12 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_14);
            __Pyx_GIVEREF(__pyx_t_14);
            PyTuple_SET_ITEM(__pyx_t_11, 3, __pyx_t_14);
            __pyx_t_14 = 0;
            __pyx_t_14 = __Pyx_PyUnicode_Join(__pyx_t_11, 4, __pyx_t_12, __pyx_t_13); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 682, __pyx_L38_error)
            __Pyx_GOTREF(__pyx_t_14);
            __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
 0683:                 )
+0684:             except AttributeError as e:
        __pyx_t_10 = __Pyx_PyErr_ExceptionMatches(__pyx_builtin_AttributeError);
        if (__pyx_t_10) {
          __Pyx_AddTraceback("datamodel.converters.parse_basic", __pyx_clineno, __pyx_lineno, __pyx_filename);
          if (__Pyx_GetException(&__pyx_t_3, &__pyx_t_1, &__pyx_t_8) < 0) __PYX_ERR(0, 684, __pyx_L18_except_error)
          __Pyx_XGOTREF(__pyx_t_3);
          __Pyx_XGOTREF(__pyx_t_1);
          __Pyx_XGOTREF(__pyx_t_8);
          __Pyx_INCREF(__pyx_t_1);
          __pyx_v_e = __pyx_t_1;
          /*try:*/ {
/* … */
          /*finally:*/ {
            __pyx_L49_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_11); __pyx_t_11 = 0;
              __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
              if (PY_MAJOR_VERSION >= 3) __Pyx_ExceptionSwap(&__pyx_t_20, &__pyx_t_21, &__pyx_t_22);
              if ((PY_MAJOR_VERSION < 3) || 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_10 = __pyx_lineno; __pyx_t_15 = __pyx_clineno; __pyx_t_24 = __pyx_filename;
              {
                __Pyx_DECREF(__pyx_v_e); __pyx_v_e = 0;
              }
              if (PY_MAJOR_VERSION >= 3) {
                __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_10; __pyx_clineno = __pyx_t_15; __pyx_filename = __pyx_t_24;
              goto __pyx_L18_except_error;
            }
            __pyx_L48_return: {
              __pyx_t_22 = __pyx_r;
              __pyx_r = 0;
              __Pyx_DECREF(__pyx_v_e); __pyx_v_e = 0;
              __pyx_r = __pyx_t_22;
              __pyx_t_22 = 0;
              goto __pyx_L19_except_return;
            }
          }
        }
        goto __pyx_L18_except_error;
+0685:                 if data is None:
            __pyx_t_2 = (__pyx_v_data == Py_None);
            if (__pyx_t_2) {
/* … */
            }
+0686:                     return None
              __Pyx_XDECREF(__pyx_r);
              __pyx_r = Py_None; __Pyx_INCREF(Py_None);
              __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
              __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
              __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
              goto __pyx_L48_return;
+0687:                 raise AttributeError(
            __pyx_t_11 = __Pyx_PyObject_CallOneArg(__pyx_builtin_AttributeError, __pyx_t_14); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 687, __pyx_L49_error)
            __Pyx_GOTREF(__pyx_t_11);
            __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
+0688:                     f"Attribute Error for Encoder {encoder!s} for type {T}: {e}"
            __pyx_t_11 = PyTuple_New(6); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 688, __pyx_L49_error)
            __Pyx_GOTREF(__pyx_t_11);
            __pyx_t_12 = 0;
            __pyx_t_13 = 127;
            __Pyx_INCREF(__pyx_kp_u_Attribute_Error_for_Encoder);
            __pyx_t_12 += 28;
            __Pyx_GIVEREF(__pyx_kp_u_Attribute_Error_for_Encoder);
            PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_kp_u_Attribute_Error_for_Encoder);
            __pyx_t_14 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Unicode(__pyx_v_encoder), __pyx_empty_unicode); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 688, __pyx_L49_error)
            __Pyx_GOTREF(__pyx_t_14);
            __pyx_t_13 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_14) > __pyx_t_13) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_14) : __pyx_t_13;
            __pyx_t_12 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_14);
            __Pyx_GIVEREF(__pyx_t_14);
            PyTuple_SET_ITEM(__pyx_t_11, 1, __pyx_t_14);
            __pyx_t_14 = 0;
            __Pyx_INCREF(__pyx_kp_u_for_type);
            __pyx_t_12 += 10;
            __Pyx_GIVEREF(__pyx_kp_u_for_type);
            PyTuple_SET_ITEM(__pyx_t_11, 2, __pyx_kp_u_for_type);
            __pyx_t_14 = __Pyx_PyObject_FormatSimple(__pyx_v_T, __pyx_empty_unicode); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 688, __pyx_L49_error)
            __Pyx_GOTREF(__pyx_t_14);
            __pyx_t_13 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_14) > __pyx_t_13) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_14) : __pyx_t_13;
            __pyx_t_12 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_14);
            __Pyx_GIVEREF(__pyx_t_14);
            PyTuple_SET_ITEM(__pyx_t_11, 3, __pyx_t_14);
            __pyx_t_14 = 0;
            __Pyx_INCREF(__pyx_kp_u__7);
            __pyx_t_12 += 2;
            __Pyx_GIVEREF(__pyx_kp_u__7);
            PyTuple_SET_ITEM(__pyx_t_11, 4, __pyx_kp_u__7);
            __pyx_t_14 = __Pyx_PyObject_FormatSimple(__pyx_v_e, __pyx_empty_unicode); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 688, __pyx_L49_error)
            __Pyx_GOTREF(__pyx_t_14);
            __pyx_t_13 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_14) > __pyx_t_13) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_14) : __pyx_t_13;
            __pyx_t_12 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_14);
            __Pyx_GIVEREF(__pyx_t_14);
            PyTuple_SET_ITEM(__pyx_t_11, 5, __pyx_t_14);
            __pyx_t_14 = 0;
            __pyx_t_14 = __Pyx_PyUnicode_Join(__pyx_t_11, 6, __pyx_t_12, __pyx_t_13); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 688, __pyx_L49_error)
            __Pyx_GOTREF(__pyx_t_14);
            __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
+0689:                 ) from e
            __Pyx_Raise(__pyx_t_11, 0, 0, __pyx_v_e);
            __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
            __PYX_ERR(0, 687, __pyx_L49_error)
          }
 0690:     # Using the encoders for basic types:
+0691:     try:
  {
    /*try:*/ {
/* … */
    }
    __pyx_L56_error:;
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
    __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
/* … */
    __pyx_L58_except_error:;
    __Pyx_XGIVEREF(__pyx_t_7);
    __Pyx_XGIVEREF(__pyx_t_6);
    __Pyx_XGIVEREF(__pyx_t_5);
    __Pyx_ExceptionReset(__pyx_t_7, __pyx_t_6, __pyx_t_5);
    goto __pyx_L1_error;
    __pyx_L60_try_return:;
    __Pyx_XGIVEREF(__pyx_t_7);
    __Pyx_XGIVEREF(__pyx_t_6);
    __Pyx_XGIVEREF(__pyx_t_5);
    __Pyx_ExceptionReset(__pyx_t_7, __pyx_t_6, __pyx_t_5);
    goto __pyx_L0;
    __pyx_L57_exception_handled:;
    __Pyx_XGIVEREF(__pyx_t_7);
    __Pyx_XGIVEREF(__pyx_t_6);
    __Pyx_XGIVEREF(__pyx_t_5);
    __Pyx_ExceptionReset(__pyx_t_7, __pyx_t_6, __pyx_t_5);
  }
+0692:         return encoders[T](data)
      __Pyx_XDECREF(__pyx_r);
      __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_encoders); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 692, __pyx_L56_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_3 = __Pyx_PyObject_GetItem(__pyx_t_1, __pyx_v_T); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 692, __pyx_L56_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_t_1 = NULL;
      __pyx_t_9 = 0;
      #if CYTHON_UNPACK_METHODS
      if (unlikely(PyMethod_Check(__pyx_t_3))) {
        __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_3);
        if (likely(__pyx_t_1)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
          __Pyx_INCREF(__pyx_t_1);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_3, function);
          __pyx_t_9 = 1;
        }
      }
      #endif
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_1, __pyx_v_data};
        __pyx_t_8 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_9, 1+__pyx_t_9);
        __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
        if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 692, __pyx_L56_error)
        __Pyx_GOTREF(__pyx_t_8);
        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      }
      __pyx_r = __pyx_t_8;
      __pyx_t_8 = 0;
      goto __pyx_L60_try_return;
+0693:     except KeyError:
    __pyx_t_15 = __Pyx_PyErr_ExceptionMatches(__pyx_builtin_KeyError);
    if (__pyx_t_15) {
      __Pyx_ErrRestore(0,0,0);
      goto __pyx_L57_exception_handled;
    }
 0694:         pass
+0695:     except TypeError as e:
    __pyx_t_15 = __Pyx_PyErr_ExceptionMatches(__pyx_builtin_TypeError);
    if (__pyx_t_15) {
      __Pyx_AddTraceback("datamodel.converters.parse_basic", __pyx_clineno, __pyx_lineno, __pyx_filename);
      if (__Pyx_GetException(&__pyx_t_8, &__pyx_t_3, &__pyx_t_1) < 0) __PYX_ERR(0, 695, __pyx_L58_except_error)
      __Pyx_XGOTREF(__pyx_t_8);
      __Pyx_XGOTREF(__pyx_t_3);
      __Pyx_XGOTREF(__pyx_t_1);
      __Pyx_INCREF(__pyx_t_3);
      __pyx_v_e = __pyx_t_3;
      /*try:*/ {
/* … */
      /*finally:*/ {
        __pyx_L67_error:;
        /*exception exit:*/{
          __Pyx_PyThreadState_declare
          __Pyx_PyThreadState_assign
          __pyx_t_22 = 0; __pyx_t_21 = 0; __pyx_t_20 = 0; __pyx_t_19 = 0; __pyx_t_18 = 0; __pyx_t_17 = 0;
          __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
          __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
          if (PY_MAJOR_VERSION >= 3) __Pyx_ExceptionSwap(&__pyx_t_19, &__pyx_t_18, &__pyx_t_17);
          if ((PY_MAJOR_VERSION < 3) || unlikely(__Pyx_GetException(&__pyx_t_22, &__pyx_t_21, &__pyx_t_20) < 0)) __Pyx_ErrFetch(&__pyx_t_22, &__pyx_t_21, &__pyx_t_20);
          __Pyx_XGOTREF(__pyx_t_22);
          __Pyx_XGOTREF(__pyx_t_21);
          __Pyx_XGOTREF(__pyx_t_20);
          __Pyx_XGOTREF(__pyx_t_19);
          __Pyx_XGOTREF(__pyx_t_18);
          __Pyx_XGOTREF(__pyx_t_17);
          __pyx_t_15 = __pyx_lineno; __pyx_t_10 = __pyx_clineno; __pyx_t_25 = __pyx_filename;
          {
            __Pyx_DECREF(__pyx_v_e); __pyx_v_e = 0;
          }
          if (PY_MAJOR_VERSION >= 3) {
            __Pyx_XGIVEREF(__pyx_t_19);
            __Pyx_XGIVEREF(__pyx_t_18);
            __Pyx_XGIVEREF(__pyx_t_17);
            __Pyx_ExceptionReset(__pyx_t_19, __pyx_t_18, __pyx_t_17);
          }
          __Pyx_XGIVEREF(__pyx_t_22);
          __Pyx_XGIVEREF(__pyx_t_21);
          __Pyx_XGIVEREF(__pyx_t_20);
          __Pyx_ErrRestore(__pyx_t_22, __pyx_t_21, __pyx_t_20);
          __pyx_t_22 = 0; __pyx_t_21 = 0; __pyx_t_20 = 0; __pyx_t_19 = 0; __pyx_t_18 = 0; __pyx_t_17 = 0;
          __pyx_lineno = __pyx_t_15; __pyx_clineno = __pyx_t_10; __pyx_filename = __pyx_t_25;
          goto __pyx_L58_except_error;
        }
      }
    }
+0696:         raise TypeError(f"Error type {T}: {e}") from e
        __pyx_t_11 = PyTuple_New(4); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 696, __pyx_L67_error)
        __Pyx_GOTREF(__pyx_t_11);
        __pyx_t_12 = 0;
        __pyx_t_13 = 127;
        __Pyx_INCREF(__pyx_kp_u_Error_type);
        __pyx_t_12 += 11;
        __Pyx_GIVEREF(__pyx_kp_u_Error_type);
        PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_kp_u_Error_type);
        __pyx_t_14 = __Pyx_PyObject_FormatSimple(__pyx_v_T, __pyx_empty_unicode); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 696, __pyx_L67_error)
        __Pyx_GOTREF(__pyx_t_14);
        __pyx_t_13 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_14) > __pyx_t_13) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_14) : __pyx_t_13;
        __pyx_t_12 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_14);
        __Pyx_GIVEREF(__pyx_t_14);
        PyTuple_SET_ITEM(__pyx_t_11, 1, __pyx_t_14);
        __pyx_t_14 = 0;
        __Pyx_INCREF(__pyx_kp_u__7);
        __pyx_t_12 += 2;
        __Pyx_GIVEREF(__pyx_kp_u__7);
        PyTuple_SET_ITEM(__pyx_t_11, 2, __pyx_kp_u__7);
        __pyx_t_14 = __Pyx_PyObject_FormatSimple(__pyx_v_e, __pyx_empty_unicode); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 696, __pyx_L67_error)
        __Pyx_GOTREF(__pyx_t_14);
        __pyx_t_13 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_14) > __pyx_t_13) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_14) : __pyx_t_13;
        __pyx_t_12 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_14);
        __Pyx_GIVEREF(__pyx_t_14);
        PyTuple_SET_ITEM(__pyx_t_11, 3, __pyx_t_14);
        __pyx_t_14 = 0;
        __pyx_t_14 = __Pyx_PyUnicode_Join(__pyx_t_11, 4, __pyx_t_12, __pyx_t_13); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 696, __pyx_L67_error)
        __Pyx_GOTREF(__pyx_t_14);
        __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
        __pyx_t_11 = __Pyx_PyObject_CallOneArg(__pyx_builtin_TypeError, __pyx_t_14); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 696, __pyx_L67_error)
        __Pyx_GOTREF(__pyx_t_11);
        __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
        __Pyx_Raise(__pyx_t_11, 0, 0, __pyx_v_e);
        __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
        __PYX_ERR(0, 696, __pyx_L67_error)
      }
+0697:     except ValueError as e:
    __pyx_t_10 = __Pyx_PyErr_ExceptionMatches(__pyx_builtin_ValueError);
    if (__pyx_t_10) {
      __Pyx_AddTraceback("datamodel.converters.parse_basic", __pyx_clineno, __pyx_lineno, __pyx_filename);
      if (__Pyx_GetException(&__pyx_t_1, &__pyx_t_3, &__pyx_t_8) < 0) __PYX_ERR(0, 697, __pyx_L58_except_error)
      __Pyx_XGOTREF(__pyx_t_1);
      __Pyx_XGOTREF(__pyx_t_3);
      __Pyx_XGOTREF(__pyx_t_8);
      __Pyx_INCREF(__pyx_t_3);
      __pyx_v_e = __pyx_t_3;
      /*try:*/ {
/* … */
      /*finally:*/ {
        __pyx_L78_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_11); __pyx_t_11 = 0;
          __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
          if (PY_MAJOR_VERSION >= 3) __Pyx_ExceptionSwap(&__pyx_t_20, &__pyx_t_21, &__pyx_t_22);
          if ((PY_MAJOR_VERSION < 3) || 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_10 = __pyx_lineno; __pyx_t_15 = __pyx_clineno; __pyx_t_26 = __pyx_filename;
          {
            __Pyx_DECREF(__pyx_v_e); __pyx_v_e = 0;
          }
          if (PY_MAJOR_VERSION >= 3) {
            __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_10; __pyx_clineno = __pyx_t_15; __pyx_filename = __pyx_t_26;
          goto __pyx_L58_except_error;
        }
      }
    }
    goto __pyx_L58_except_error;
+0698:         raise ValueError(
        __pyx_t_11 = __Pyx_PyObject_CallOneArg(__pyx_builtin_ValueError, __pyx_t_14); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 698, __pyx_L78_error)
        __Pyx_GOTREF(__pyx_t_11);
        __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
+0699:             f"Error parsing type {T}: {e}"
        __pyx_t_11 = PyTuple_New(4); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 699, __pyx_L78_error)
        __Pyx_GOTREF(__pyx_t_11);
        __pyx_t_12 = 0;
        __pyx_t_13 = 127;
        __Pyx_INCREF(__pyx_kp_u_Error_parsing_type);
        __pyx_t_12 += 19;
        __Pyx_GIVEREF(__pyx_kp_u_Error_parsing_type);
        PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_kp_u_Error_parsing_type);
        __pyx_t_14 = __Pyx_PyObject_FormatSimple(__pyx_v_T, __pyx_empty_unicode); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 699, __pyx_L78_error)
        __Pyx_GOTREF(__pyx_t_14);
        __pyx_t_13 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_14) > __pyx_t_13) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_14) : __pyx_t_13;
        __pyx_t_12 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_14);
        __Pyx_GIVEREF(__pyx_t_14);
        PyTuple_SET_ITEM(__pyx_t_11, 1, __pyx_t_14);
        __pyx_t_14 = 0;
        __Pyx_INCREF(__pyx_kp_u__7);
        __pyx_t_12 += 2;
        __Pyx_GIVEREF(__pyx_kp_u__7);
        PyTuple_SET_ITEM(__pyx_t_11, 2, __pyx_kp_u__7);
        __pyx_t_14 = __Pyx_PyObject_FormatSimple(__pyx_v_e, __pyx_empty_unicode); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 699, __pyx_L78_error)
        __Pyx_GOTREF(__pyx_t_14);
        __pyx_t_13 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_14) > __pyx_t_13) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_14) : __pyx_t_13;
        __pyx_t_12 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_14);
        __Pyx_GIVEREF(__pyx_t_14);
        PyTuple_SET_ITEM(__pyx_t_11, 3, __pyx_t_14);
        __pyx_t_14 = 0;
        __pyx_t_14 = __Pyx_PyUnicode_Join(__pyx_t_11, 4, __pyx_t_12, __pyx_t_13); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 699, __pyx_L78_error)
        __Pyx_GOTREF(__pyx_t_14);
        __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
+0700:         ) from e
        __Pyx_Raise(__pyx_t_11, 0, 0, __pyx_v_e);
        __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
        __PYX_ERR(0, 698, __pyx_L78_error)
      }
 0701: 
 0702: 
+0703: cdef object _parse_typing_type(
static PyObject *__pyx_f_9datamodel_10converters__parse_typing_type(PyObject *__pyx_v_field, PyObject *__pyx_v_T, PyObject *__pyx_v_name, PyObject *__pyx_v_data, PyObject *__pyx_v_encoder, PyObject *__pyx_v_origin, PyObject *__pyx_v_args, struct __pyx_opt_args_9datamodel_10converters__parse_typing_type *__pyx_optional_args) {
  struct __pyx_obj_9datamodel_10converters___pyx_scope_struct____pyx_f_9datamodel_10converters__parse_typing_type *__pyx_cur_scope;
/* … */
  /* 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_10);
  __Pyx_XDECREF(__pyx_t_12);
  __Pyx_AddTraceback("datamodel.converters._parse_typing_type", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_7genexpr__pyx_v_k);
  __Pyx_XDECREF(__pyx_7genexpr__pyx_v_v);
  __Pyx_XDECREF(__pyx_gb_9datamodel_10converters_18_parse_typing_type_2generator);
  __Pyx_XDECREF(__pyx_gb_9datamodel_10converters_18_parse_typing_type_5generator1);
  __Pyx_XDECREF(__pyx_v_data);
  __Pyx_DECREF((PyObject *)__pyx_cur_scope);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
struct __pyx_opt_args_9datamodel_10converters__parse_typing_type {
  int __pyx_n;
  PyObject *as_objects;
};
/* … */
struct __pyx_obj_9datamodel_10converters___pyx_scope_struct____pyx_f_9datamodel_10converters__parse_typing_type {
  PyObject_HEAD
  PyObject *__pyx_v_encoder;
  PyObject *__pyx_v_field;
  PyObject *__pyx_v_type_args;
};

 0704:     object field,
 0705:     object T,
 0706:     object name,
 0707:     object data,
 0708:     object encoder,
 0709:     object origin,
 0710:     object args,
+0711:     object as_objects=False
  PyObject *__pyx_v_as_objects = ((PyObject *)Py_False);
  PyObject *__pyx_7genexpr__pyx_v_k = NULL;
  PyObject *__pyx_7genexpr__pyx_v_v = NULL;
  PyObject *__pyx_gb_9datamodel_10converters_18_parse_typing_type_2generator = 0;
  PyObject *__pyx_gb_9datamodel_10converters_18_parse_typing_type_5generator1 = 0;
  PyObject *__pyx_r = NULL;
  __pyx_cur_scope = (struct __pyx_obj_9datamodel_10converters___pyx_scope_struct____pyx_f_9datamodel_10converters__parse_typing_type *)__pyx_tp_new_9datamodel_10converters___pyx_scope_struct____pyx_f_9datamodel_10converters__parse_typing_type(__pyx_ptype_9datamodel_10converters___pyx_scope_struct____pyx_f_9datamodel_10converters__parse_typing_type, __pyx_empty_tuple, NULL);
  if (unlikely(!__pyx_cur_scope)) {
    __pyx_cur_scope = ((struct __pyx_obj_9datamodel_10converters___pyx_scope_struct____pyx_f_9datamodel_10converters__parse_typing_type *)Py_None);
    __Pyx_INCREF(Py_None);
    __PYX_ERR(0, 703, __pyx_L1_error)
  } else {
    __Pyx_GOTREF((PyObject *)__pyx_cur_scope);
  }
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_as_objects = __pyx_optional_args->as_objects;
    }
  }
  __pyx_cur_scope->__pyx_v_field = __pyx_v_field;
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_field);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_field);
  __pyx_cur_scope->__pyx_v_encoder = __pyx_v_encoder;
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_encoder);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_encoder);
  __Pyx_INCREF(__pyx_v_data);
 0712: ):
 0713:     """
 0714:     Handle field_type='typing' scenario.
 0715:     """
+0716:     cdef tuple type_args = getattr(T, '__args__', ())
  __pyx_t_1 = __Pyx_GetAttr3(__pyx_v_T, __pyx_n_u_args, __pyx_empty_tuple); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 716, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (!(likely(PyTuple_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None) || __Pyx_RaiseUnexpectedTypeError("tuple", __pyx_t_1))) __PYX_ERR(0, 716, __pyx_L1_error)
  __Pyx_GIVEREF(__pyx_t_1);
  __pyx_cur_scope->__pyx_v_type_args = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
 0717: 
+0718:     if field.origin in {dict, Mapping} or name in {'Dict', 'Mapping'}:
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_field, __pyx_n_s_origin); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 718, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_4 = PyObject_RichCompare(__pyx_t_1, ((PyObject *)(&PyDict_Type)), Py_EQ); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 718, __pyx_L1_error)
  __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 718, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  if (!__pyx_t_5) {
  } else {
    __pyx_t_3 = __pyx_t_5;
    goto __pyx_L6_bool_binop_done;
  }
  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_Mapping); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 718, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_6 = PyObject_RichCompare(__pyx_t_1, __pyx_t_4, Py_EQ); __Pyx_XGOTREF(__pyx_t_6); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 718, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_6); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 718, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __pyx_t_3 = __pyx_t_5;
  __pyx_L6_bool_binop_done:;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_5 = __pyx_t_3;
  if (!__pyx_t_5) {
  } else {
    __pyx_t_2 = __pyx_t_5;
    goto __pyx_L4_bool_binop_done;
  }
  __Pyx_INCREF(__pyx_v_name);
  __pyx_t_1 = __pyx_v_name;
  __pyx_t_3 = (__Pyx_PyUnicode_Equals(__pyx_t_1, __pyx_n_u_Dict, Py_EQ)); if (unlikely((__pyx_t_3 < 0))) __PYX_ERR(0, 718, __pyx_L1_error)
  if (!__pyx_t_3) {
  } else {
    __pyx_t_5 = __pyx_t_3;
    goto __pyx_L8_bool_binop_done;
  }
  __pyx_t_3 = (__Pyx_PyUnicode_Equals(__pyx_t_1, __pyx_n_u_Mapping, Py_EQ)); if (unlikely((__pyx_t_3 < 0))) __PYX_ERR(0, 718, __pyx_L1_error)
  __pyx_t_5 = __pyx_t_3;
  __pyx_L8_bool_binop_done:;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_3 = __pyx_t_5;
  __pyx_t_2 = __pyx_t_3;
  __pyx_L4_bool_binop_done:;
  if (__pyx_t_2) {
/* … */
  }
+0719:         if isinstance(data, dict):
    __pyx_t_2 = PyDict_Check(__pyx_v_data); 
    if (likely(__pyx_t_2)) {
/* … */
    }
+0720:             if type_args:
      __pyx_t_2 = (__pyx_cur_scope->__pyx_v_type_args != Py_None)&&(PyTuple_GET_SIZE(__pyx_cur_scope->__pyx_v_type_args) != 0);
      if (__pyx_t_2) {
/* … */
      }
 0721:                 # e.g. Dict[K, V]
+0722:                 return {k: _parse_type(field, type_args[1], v, None, False) for k, v in data.items()}
        __Pyx_XDECREF(__pyx_r);
        { /* enter inner scope */
          __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 722, __pyx_L14_error)
          __Pyx_GOTREF(__pyx_t_1);
          __pyx_t_7 = 0;
          if (unlikely(__pyx_v_data == Py_None)) {
            PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "items");
            __PYX_ERR(0, 722, __pyx_L14_error)
          }
          __pyx_t_4 = __Pyx_dict_iterator(__pyx_v_data, 0, __pyx_n_s_items, (&__pyx_t_8), (&__pyx_t_9)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 722, __pyx_L14_error)
          __Pyx_GOTREF(__pyx_t_4);
          __Pyx_XDECREF(__pyx_t_6);
          __pyx_t_6 = __pyx_t_4;
          __pyx_t_4 = 0;
          while (1) {
            __pyx_t_11 = __Pyx_dict_iter_next(__pyx_t_6, __pyx_t_8, &__pyx_t_7, &__pyx_t_4, &__pyx_t_10, NULL, __pyx_t_9);
            if (unlikely(__pyx_t_11 == 0)) break;
            if (unlikely(__pyx_t_11 == -1)) __PYX_ERR(0, 722, __pyx_L14_error)
            __Pyx_GOTREF(__pyx_t_4);
            __Pyx_GOTREF(__pyx_t_10);
            __Pyx_XDECREF_SET(__pyx_7genexpr__pyx_v_k, __pyx_t_4);
            __pyx_t_4 = 0;
            __Pyx_XDECREF_SET(__pyx_7genexpr__pyx_v_v, __pyx_t_10);
            __pyx_t_10 = 0;
            __pyx_t_10 = __pyx_cur_scope->__pyx_v_field;
            __Pyx_INCREF(__pyx_t_10);
            if (unlikely(__pyx_cur_scope->__pyx_v_type_args == Py_None)) {
              PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
              __PYX_ERR(0, 722, __pyx_L14_error)
            }
            __pyx_t_4 = __Pyx_GetItemInt_Tuple(__pyx_cur_scope->__pyx_v_type_args, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 722, __pyx_L14_error)
            __Pyx_GOTREF(__pyx_t_4);
            __pyx_t_13.__pyx_n = 2;
            __pyx_t_13.encoder = Py_None;
            __pyx_t_13.as_objects = Py_False;
            __pyx_t_12 = __pyx_f_9datamodel_10converters__parse_type(__pyx_t_10, __pyx_t_4, __pyx_7genexpr__pyx_v_v, &__pyx_t_13); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 722, __pyx_L14_error)
            __Pyx_GOTREF(__pyx_t_12);
            __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
            __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
            if (unlikely(PyDict_SetItem(__pyx_t_1, (PyObject*)__pyx_7genexpr__pyx_v_k, (PyObject*)__pyx_t_12))) __PYX_ERR(0, 722, __pyx_L14_error)
            __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
          }
          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
          __Pyx_XDECREF(__pyx_7genexpr__pyx_v_k); __pyx_7genexpr__pyx_v_k = 0;
          __Pyx_XDECREF(__pyx_7genexpr__pyx_v_v); __pyx_7genexpr__pyx_v_v = 0;
          goto __pyx_L17_exit_scope;
          __pyx_L14_error:;
          __Pyx_XDECREF(__pyx_7genexpr__pyx_v_k); __pyx_7genexpr__pyx_v_k = 0;
          __Pyx_XDECREF(__pyx_7genexpr__pyx_v_v); __pyx_7genexpr__pyx_v_v = 0;
          goto __pyx_L1_error;
          __pyx_L17_exit_scope:;
        } /* exit inner scope */
        __pyx_r = __pyx_t_1;
        __pyx_t_1 = 0;
        goto __pyx_L0;
+0723:             return data
      __Pyx_XDECREF(__pyx_r);
      __Pyx_INCREF(__pyx_v_data);
      __pyx_r = __pyx_v_data;
      goto __pyx_L0;
 0724:         else:
+0725:             raise TypeError(f"Expected dict, got {type(data).__name__}")
    /*else*/ {
      __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)Py_TYPE(__pyx_v_data)), __pyx_n_s_name); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 725, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_6 = __Pyx_PyObject_FormatSimple(__pyx_t_1, __pyx_empty_unicode); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 725, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_t_1 = __Pyx_PyUnicode_Concat(__pyx_kp_u_Expected_dict_got, __pyx_t_6); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 725, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      __pyx_t_6 = __Pyx_PyObject_CallOneArg(__pyx_builtin_TypeError, __pyx_t_1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 725, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_Raise(__pyx_t_6, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      __PYX_ERR(0, 725, __pyx_L1_error)
    }
 0726: 
+0727:     if name == 'Tuple' or field.origin == tuple:
  __pyx_t_3 = (__Pyx_PyUnicode_Equals(__pyx_v_name, __pyx_n_u_Tuple, Py_EQ)); if (unlikely((__pyx_t_3 < 0))) __PYX_ERR(0, 727, __pyx_L1_error)
  if (!__pyx_t_3) {
  } else {
    __pyx_t_2 = __pyx_t_3;
    goto __pyx_L19_bool_binop_done;
  }
  __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_field, __pyx_n_s_origin); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 727, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_t_1 = PyObject_RichCompare(__pyx_t_6, ((PyObject *)(&PyTuple_Type)), Py_EQ); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 727, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_3 < 0))) __PYX_ERR(0, 727, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_2 = __pyx_t_3;
  __pyx_L19_bool_binop_done:;
  if (__pyx_t_2) {
/* … */
  }
+0728:         if isinstance(data, (list, tuple)):
    __pyx_t_3 = PyList_Check(__pyx_v_data); 
    if (!__pyx_t_3) {
    } else {
      __pyx_t_2 = __pyx_t_3;
      goto __pyx_L22_bool_binop_done;
    }
    __pyx_t_3 = PyTuple_Check(__pyx_v_data); 
    __pyx_t_2 = __pyx_t_3;
    __pyx_L22_bool_binop_done:;
    if (__pyx_t_2) {
/* … */
    }
+0729:             if len(data) == len(type_args):
      __pyx_t_8 = PyObject_Length(__pyx_v_data); if (unlikely(__pyx_t_8 == ((Py_ssize_t)-1))) __PYX_ERR(0, 729, __pyx_L1_error)
      __pyx_t_1 = __pyx_cur_scope->__pyx_v_type_args;
      __Pyx_INCREF(__pyx_t_1);
      if (unlikely(__pyx_t_1 == Py_None)) {
        PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()");
        __PYX_ERR(0, 729, __pyx_L1_error)
      }
      __pyx_t_7 = __Pyx_PyTuple_GET_SIZE(__pyx_t_1); if (unlikely(__pyx_t_7 == ((Py_ssize_t)-1))) __PYX_ERR(0, 729, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_t_2 = (__pyx_t_8 == __pyx_t_7);
      if (__pyx_t_2) {
/* … */
      }
+0730:                 return tuple(
        __Pyx_XDECREF(__pyx_r);
/* … */
        __pyx_t_6 = __Pyx_PySequence_Tuple(__pyx_t_1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 730, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_6);
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        __pyx_r = __pyx_t_6;
        __pyx_t_6 = 0;
        goto __pyx_L0;
+0731:                     _parse_type(field, typ, datum, encoder, False)
static PyObject *__pyx_pf_9datamodel_10converters_18_parse_typing_type_genexpr(PyObject *__pyx_self, PyObject *__pyx_genexpr_arg_0) {
  struct __pyx_obj_9datamodel_10converters___pyx_scope_struct_1_genexpr *__pyx_cur_scope;
  PyObject *__pyx_r = NULL;
  __pyx_cur_scope = (struct __pyx_obj_9datamodel_10converters___pyx_scope_struct_1_genexpr *)__pyx_tp_new_9datamodel_10converters___pyx_scope_struct_1_genexpr(__pyx_ptype_9datamodel_10converters___pyx_scope_struct_1_genexpr, __pyx_empty_tuple, NULL);
  if (unlikely(!__pyx_cur_scope)) {
    __pyx_cur_scope = ((struct __pyx_obj_9datamodel_10converters___pyx_scope_struct_1_genexpr *)Py_None);
    __Pyx_INCREF(Py_None);
    __PYX_ERR(0, 731, __pyx_L1_error)
  } else {
    __Pyx_GOTREF((PyObject *)__pyx_cur_scope);
  }
  __pyx_cur_scope->__pyx_outer_scope = (struct __pyx_obj_9datamodel_10converters___pyx_scope_struct____pyx_f_9datamodel_10converters__parse_typing_type *) __pyx_self;
  __Pyx_INCREF((PyObject *)__pyx_cur_scope->__pyx_outer_scope);
  __Pyx_GIVEREF((PyObject *)__pyx_cur_scope->__pyx_outer_scope);
  __pyx_cur_scope->__pyx_genexpr_arg_0 = __pyx_genexpr_arg_0;
  __Pyx_INCREF(__pyx_cur_scope->__pyx_genexpr_arg_0);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_genexpr_arg_0);
  {
    __pyx_CoroutineObject *gen = __Pyx_Generator_New((__pyx_coroutine_body_t) __pyx_gb_9datamodel_10converters_18_parse_typing_type_2generator, NULL, (PyObject *) __pyx_cur_scope, __pyx_n_s_genexpr, __pyx_n_s_parse_typing_type_locals_genexp, __pyx_n_s_datamodel_converters); if (unlikely(!gen)) __PYX_ERR(0, 731, __pyx_L1_error)
    __Pyx_DECREF(__pyx_cur_scope);
    __Pyx_RefNannyFinishContext();
    return (PyObject *) gen;
  }

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

static PyObject *__pyx_gb_9datamodel_10converters_18_parse_typing_type_2generator(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value) /* generator body */
{
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("genexpr", 0);
  __pyx_L3_first_run:;
  if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 731, __pyx_L1_error)
/* … */
    if (unlikely(!__pyx_cur_scope->__pyx_outer_scope->__pyx_v_field)) { __Pyx_RaiseClosureNameError("field"); __PYX_ERR(0, 731, __pyx_L1_error) }
    __pyx_t_4 = __pyx_cur_scope->__pyx_outer_scope->__pyx_v_field;
    __Pyx_INCREF(__pyx_t_4);
    if (unlikely(!__pyx_cur_scope->__pyx_outer_scope->__pyx_v_encoder)) { __Pyx_RaiseClosureNameError("encoder"); __PYX_ERR(0, 731, __pyx_L1_error) }
    __pyx_t_6 = __pyx_cur_scope->__pyx_outer_scope->__pyx_v_encoder;
    __Pyx_INCREF(__pyx_t_6);
    __pyx_t_9.__pyx_n = 2;
    __pyx_t_9.encoder = __pyx_t_6;
    __pyx_t_9.as_objects = Py_False;
    __pyx_t_5 = __pyx_f_9datamodel_10converters__parse_type(__pyx_t_4, __pyx_cur_scope->__pyx_v_typ, __pyx_cur_scope->__pyx_v_datum, &__pyx_t_9); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 731, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __pyx_r = __pyx_t_5;
    __pyx_t_5 = 0;
    __Pyx_XGIVEREF(__pyx_t_1);
    __pyx_cur_scope->__pyx_t_0 = __pyx_t_1;
    __pyx_cur_scope->__pyx_t_1 = __pyx_t_2;
    __pyx_cur_scope->__pyx_t_2 = __pyx_t_3;
    __Pyx_XGIVEREF(__pyx_r);
    __Pyx_RefNannyFinishContext();
    __Pyx_Coroutine_ResetAndClearException(__pyx_generator);
    /* return from generator, yielding value */
    __pyx_generator->resume_label = 1;
    return __pyx_r;
    __pyx_L8_resume_from_yield:;
    __pyx_t_1 = __pyx_cur_scope->__pyx_t_0;
    __pyx_cur_scope->__pyx_t_0 = 0;
    __Pyx_XGOTREF(__pyx_t_1);
    __pyx_t_2 = __pyx_cur_scope->__pyx_t_1;
    __pyx_t_3 = __pyx_cur_scope->__pyx_t_2;
    if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 731, __pyx_L1_error)
/* … */
  /* function exit code */
  PyErr_SetNone(PyExc_StopIteration);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_Generator_Replace_StopIteration(0);
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_AddTraceback("genexpr", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_r); __pyx_r = 0;
  #if !CYTHON_USE_EXC_INFO_STACK
  __Pyx_Coroutine_ResetAndClearException(__pyx_generator);
  #endif
  __pyx_generator->resume_label = -1;
  __Pyx_Coroutine_clear((PyObject*)__pyx_generator);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
static PyObject *__pyx_gb_9datamodel_10converters_18_parse_typing_type_5generator1(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value); /* proto */
/* … */
        __pyx_t_1 = __pyx_pf_9datamodel_10converters_18_parse_typing_type_genexpr(((PyObject*)__pyx_cur_scope), __pyx_t_6); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 731, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
/* … */
struct __pyx_obj_9datamodel_10converters___pyx_scope_struct_1_genexpr {
  PyObject_HEAD
  struct __pyx_obj_9datamodel_10converters___pyx_scope_struct____pyx_f_9datamodel_10converters__parse_typing_type *__pyx_outer_scope;
  PyObject *__pyx_genexpr_arg_0;
  PyObject *__pyx_v_datum;
  PyObject *__pyx_v_typ;
  PyObject *__pyx_t_0;
  Py_ssize_t __pyx_t_1;
  PyObject *(*__pyx_t_2)(PyObject *);
};

+0732:                     for typ, datum in zip(type_args, data)
  if (unlikely(!__pyx_cur_scope->__pyx_genexpr_arg_0)) { __Pyx_RaiseUnboundLocalError(".0"); __PYX_ERR(0, 732, __pyx_L1_error) }
  if (likely(PyList_CheckExact(__pyx_cur_scope->__pyx_genexpr_arg_0)) || PyTuple_CheckExact(__pyx_cur_scope->__pyx_genexpr_arg_0)) {
    __pyx_t_1 = __pyx_cur_scope->__pyx_genexpr_arg_0; __Pyx_INCREF(__pyx_t_1);
    __pyx_t_2 = 0;
    __pyx_t_3 = NULL;
  } else {
    __pyx_t_2 = -1; __pyx_t_1 = PyObject_GetIter(__pyx_cur_scope->__pyx_genexpr_arg_0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 732, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_3 = __Pyx_PyObject_GetIterNextFunc(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 732, __pyx_L1_error)
  }
  for (;;) {
    if (likely(!__pyx_t_3)) {
      if (likely(PyList_CheckExact(__pyx_t_1))) {
        {
          Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_t_1);
          #if !CYTHON_ASSUME_SAFE_MACROS
          if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 732, __pyx_L1_error)
          #endif
          if (__pyx_t_2 >= __pyx_temp) break;
        }
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_4 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_2); __Pyx_INCREF(__pyx_t_4); __pyx_t_2++; if (unlikely((0 < 0))) __PYX_ERR(0, 732, __pyx_L1_error)
        #else
        __pyx_t_4 = __Pyx_PySequence_ITEM(__pyx_t_1, __pyx_t_2); __pyx_t_2++; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 732, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_4);
        #endif
      } else {
        {
          Py_ssize_t __pyx_temp = __Pyx_PyTuple_GET_SIZE(__pyx_t_1);
          #if !CYTHON_ASSUME_SAFE_MACROS
          if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 732, __pyx_L1_error)
          #endif
          if (__pyx_t_2 >= __pyx_temp) break;
        }
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_4 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_2); __Pyx_INCREF(__pyx_t_4); __pyx_t_2++; if (unlikely((0 < 0))) __PYX_ERR(0, 732, __pyx_L1_error)
        #else
        __pyx_t_4 = __Pyx_PySequence_ITEM(__pyx_t_1, __pyx_t_2); __pyx_t_2++; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 732, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_4);
        #endif
      }
    } else {
      __pyx_t_4 = __pyx_t_3(__pyx_t_1);
      if (unlikely(!__pyx_t_4)) {
        PyObject* exc_type = PyErr_Occurred();
        if (exc_type) {
          if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
          else __PYX_ERR(0, 732, __pyx_L1_error)
        }
        break;
      }
      __Pyx_GOTREF(__pyx_t_4);
    }
    if ((likely(PyTuple_CheckExact(__pyx_t_4))) || (PyList_CheckExact(__pyx_t_4))) {
      PyObject* sequence = __pyx_t_4;
      Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
      if (unlikely(size != 2)) {
        if (size > 2) __Pyx_RaiseTooManyValuesError(2);
        else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
        __PYX_ERR(0, 732, __pyx_L1_error)
      }
      #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
      if (likely(PyTuple_CheckExact(sequence))) {
        __pyx_t_5 = PyTuple_GET_ITEM(sequence, 0); 
        __pyx_t_6 = PyTuple_GET_ITEM(sequence, 1); 
      } else {
        __pyx_t_5 = PyList_GET_ITEM(sequence, 0); 
        __pyx_t_6 = PyList_GET_ITEM(sequence, 1); 
      }
      __Pyx_INCREF(__pyx_t_5);
      __Pyx_INCREF(__pyx_t_6);
      #else
      __pyx_t_5 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 732, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __pyx_t_6 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 732, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      #endif
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    } else {
      Py_ssize_t index = -1;
      __pyx_t_7 = PyObject_GetIter(__pyx_t_4); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 732, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __pyx_t_8 = __Pyx_PyObject_GetIterNextFunc(__pyx_t_7);
      index = 0; __pyx_t_5 = __pyx_t_8(__pyx_t_7); if (unlikely(!__pyx_t_5)) goto __pyx_L6_unpacking_failed;
      __Pyx_GOTREF(__pyx_t_5);
      index = 1; __pyx_t_6 = __pyx_t_8(__pyx_t_7); if (unlikely(!__pyx_t_6)) goto __pyx_L6_unpacking_failed;
      __Pyx_GOTREF(__pyx_t_6);
      if (__Pyx_IternextUnpackEndCheck(__pyx_t_8(__pyx_t_7), 2) < 0) __PYX_ERR(0, 732, __pyx_L1_error)
      __pyx_t_8 = NULL;
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      goto __pyx_L7_unpacking_done;
      __pyx_L6_unpacking_failed:;
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      __pyx_t_8 = NULL;
      if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
      __PYX_ERR(0, 732, __pyx_L1_error)
      __pyx_L7_unpacking_done:;
    }
    __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_typ);
    __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_typ, __pyx_t_5);
    __Pyx_GIVEREF(__pyx_t_5);
    __pyx_t_5 = 0;
    __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_datum);
    __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_datum, __pyx_t_6);
    __Pyx_GIVEREF(__pyx_t_6);
    __pyx_t_6 = 0;
/* … */
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  CYTHON_MAYBE_UNUSED_VAR(__pyx_cur_scope);
/* … */
        __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 732, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        __Pyx_INCREF(__pyx_cur_scope->__pyx_v_type_args);
        __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_type_args);
        if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_cur_scope->__pyx_v_type_args)) __PYX_ERR(0, 732, __pyx_L1_error);
        __Pyx_INCREF(__pyx_v_data);
        __Pyx_GIVEREF(__pyx_v_data);
        if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_v_data)) __PYX_ERR(0, 732, __pyx_L1_error);
        __pyx_t_6 = __Pyx_PyObject_Call(__pyx_builtin_zip, __pyx_t_1, NULL); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 732, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_6);
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 0733:                 )
 0734:             else:
+0735:                 if len(type_args) == 2 and type_args[1] is Ellipsis:
      /*else*/ {
        __pyx_t_6 = __pyx_cur_scope->__pyx_v_type_args;
        __Pyx_INCREF(__pyx_t_6);
        if (unlikely(__pyx_t_6 == Py_None)) {
          PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()");
          __PYX_ERR(0, 735, __pyx_L1_error)
        }
        __pyx_t_7 = __Pyx_PyTuple_GET_SIZE(__pyx_t_6); if (unlikely(__pyx_t_7 == ((Py_ssize_t)-1))) __PYX_ERR(0, 735, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
        __pyx_t_3 = (__pyx_t_7 == 2);
        if (__pyx_t_3) {
        } else {
          __pyx_t_2 = __pyx_t_3;
          goto __pyx_L26_bool_binop_done;
        }
        if (unlikely(__pyx_cur_scope->__pyx_v_type_args == Py_None)) {
          PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
          __PYX_ERR(0, 735, __pyx_L1_error)
        }
        __pyx_t_6 = __Pyx_GetItemInt_Tuple(__pyx_cur_scope->__pyx_v_type_args, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 735, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_6);
        __pyx_t_3 = (__pyx_t_6 == __pyx_builtin_Ellipsis);
        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
        __pyx_t_2 = __pyx_t_3;
        __pyx_L26_bool_binop_done:;
        if (__pyx_t_2) {
/* … */
        }
      }
 0736:                     # e.g. Tuple[str, ...]
+0737:                     return tuple(
          __Pyx_XDECREF(__pyx_r);
/* … */
          __pyx_t_1 = __Pyx_PySequence_Tuple(__pyx_t_6); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 737, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_1);
          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
          __pyx_r = __pyx_t_1;
          __pyx_t_1 = 0;
          goto __pyx_L0;
+0738:                         _parse_type(field, type_args[0], datum, None, False)
static PyObject *__pyx_pf_9datamodel_10converters_18_parse_typing_type_3genexpr(PyObject *__pyx_self, PyObject *__pyx_genexpr_arg_0) {
  struct __pyx_obj_9datamodel_10converters___pyx_scope_struct_2_genexpr *__pyx_cur_scope;
  PyObject *__pyx_r = NULL;
  __pyx_cur_scope = (struct __pyx_obj_9datamodel_10converters___pyx_scope_struct_2_genexpr *)__pyx_tp_new_9datamodel_10converters___pyx_scope_struct_2_genexpr(__pyx_ptype_9datamodel_10converters___pyx_scope_struct_2_genexpr, __pyx_empty_tuple, NULL);
  if (unlikely(!__pyx_cur_scope)) {
    __pyx_cur_scope = ((struct __pyx_obj_9datamodel_10converters___pyx_scope_struct_2_genexpr *)Py_None);
    __Pyx_INCREF(Py_None);
    __PYX_ERR(0, 738, __pyx_L1_error)
  } else {
    __Pyx_GOTREF((PyObject *)__pyx_cur_scope);
  }
  __pyx_cur_scope->__pyx_outer_scope = (struct __pyx_obj_9datamodel_10converters___pyx_scope_struct____pyx_f_9datamodel_10converters__parse_typing_type *) __pyx_self;
  __Pyx_INCREF((PyObject *)__pyx_cur_scope->__pyx_outer_scope);
  __Pyx_GIVEREF((PyObject *)__pyx_cur_scope->__pyx_outer_scope);
  __pyx_cur_scope->__pyx_genexpr_arg_0 = __pyx_genexpr_arg_0;
  __Pyx_INCREF(__pyx_cur_scope->__pyx_genexpr_arg_0);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_genexpr_arg_0);
  {
    __pyx_CoroutineObject *gen = __Pyx_Generator_New((__pyx_coroutine_body_t) __pyx_gb_9datamodel_10converters_18_parse_typing_type_5generator1, NULL, (PyObject *) __pyx_cur_scope, __pyx_n_s_genexpr, __pyx_n_s_parse_typing_type_locals_genexp, __pyx_n_s_datamodel_converters); if (unlikely(!gen)) __PYX_ERR(0, 738, __pyx_L1_error)
    __Pyx_DECREF(__pyx_cur_scope);
    __Pyx_RefNannyFinishContext();
    return (PyObject *) gen;
  }

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

static PyObject *__pyx_gb_9datamodel_10converters_18_parse_typing_type_5generator1(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value) /* generator body */
{
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("genexpr", 0);
  __pyx_L3_first_run:;
  if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 738, __pyx_L1_error)
/* … */
    if (unlikely(!__pyx_cur_scope->__pyx_outer_scope->__pyx_v_field)) { __Pyx_RaiseClosureNameError("field"); __PYX_ERR(0, 738, __pyx_L1_error) }
    __pyx_t_4 = __pyx_cur_scope->__pyx_outer_scope->__pyx_v_field;
    __Pyx_INCREF(__pyx_t_4);
    if (unlikely(!__pyx_cur_scope->__pyx_outer_scope->__pyx_v_type_args)) { __Pyx_RaiseClosureNameError("type_args"); __PYX_ERR(0, 738, __pyx_L1_error) }
    if (unlikely(__pyx_cur_scope->__pyx_outer_scope->__pyx_v_type_args == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
      __PYX_ERR(0, 738, __pyx_L1_error)
    }
    __pyx_t_5 = __Pyx_GetItemInt_Tuple(__pyx_cur_scope->__pyx_outer_scope->__pyx_v_type_args, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 738, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_7.__pyx_n = 2;
    __pyx_t_7.encoder = Py_None;
    __pyx_t_7.as_objects = Py_False;
    __pyx_t_6 = __pyx_f_9datamodel_10converters__parse_type(__pyx_t_4, __pyx_t_5, __pyx_cur_scope->__pyx_v_datum, &__pyx_t_7); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 738, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_r = __pyx_t_6;
    __pyx_t_6 = 0;
    __Pyx_XGIVEREF(__pyx_t_1);
    __pyx_cur_scope->__pyx_t_0 = __pyx_t_1;
    __pyx_cur_scope->__pyx_t_1 = __pyx_t_2;
    __pyx_cur_scope->__pyx_t_2 = __pyx_t_3;
    __Pyx_XGIVEREF(__pyx_r);
    __Pyx_RefNannyFinishContext();
    __Pyx_Coroutine_ResetAndClearException(__pyx_generator);
    /* return from generator, yielding value */
    __pyx_generator->resume_label = 1;
    return __pyx_r;
    __pyx_L6_resume_from_yield:;
    __pyx_t_1 = __pyx_cur_scope->__pyx_t_0;
    __pyx_cur_scope->__pyx_t_0 = 0;
    __Pyx_XGOTREF(__pyx_t_1);
    __pyx_t_2 = __pyx_cur_scope->__pyx_t_1;
    __pyx_t_3 = __pyx_cur_scope->__pyx_t_2;
    if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 738, __pyx_L1_error)
/* … */
  /* function exit code */
  PyErr_SetNone(PyExc_StopIteration);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_Generator_Replace_StopIteration(0);
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_AddTraceback("genexpr", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_r); __pyx_r = 0;
  #if !CYTHON_USE_EXC_INFO_STACK
  __Pyx_Coroutine_ResetAndClearException(__pyx_generator);
  #endif
  __pyx_generator->resume_label = -1;
  __Pyx_Coroutine_clear((PyObject*)__pyx_generator);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
          __pyx_t_6 = __pyx_pf_9datamodel_10converters_18_parse_typing_type_3genexpr(((PyObject*)__pyx_cur_scope), __pyx_v_data); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 738, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_6);
/* … */
struct __pyx_obj_9datamodel_10converters___pyx_scope_struct_2_genexpr {
  PyObject_HEAD
  struct __pyx_obj_9datamodel_10converters___pyx_scope_struct____pyx_f_9datamodel_10converters__parse_typing_type *__pyx_outer_scope;
  PyObject *__pyx_genexpr_arg_0;
  PyObject *__pyx_v_datum;
  PyObject *__pyx_t_0;
  Py_ssize_t __pyx_t_1;
  PyObject *(*__pyx_t_2)(PyObject *);
};

+0739:                         for datum in data
  if (unlikely(!__pyx_cur_scope->__pyx_genexpr_arg_0)) { __Pyx_RaiseUnboundLocalError(".0"); __PYX_ERR(0, 739, __pyx_L1_error) }
  if (likely(PyList_CheckExact(__pyx_cur_scope->__pyx_genexpr_arg_0)) || PyTuple_CheckExact(__pyx_cur_scope->__pyx_genexpr_arg_0)) {
    __pyx_t_1 = __pyx_cur_scope->__pyx_genexpr_arg_0; __Pyx_INCREF(__pyx_t_1);
    __pyx_t_2 = 0;
    __pyx_t_3 = NULL;
  } else {
    __pyx_t_2 = -1; __pyx_t_1 = PyObject_GetIter(__pyx_cur_scope->__pyx_genexpr_arg_0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 739, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_3 = __Pyx_PyObject_GetIterNextFunc(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 739, __pyx_L1_error)
  }
  for (;;) {
    if (likely(!__pyx_t_3)) {
      if (likely(PyList_CheckExact(__pyx_t_1))) {
        {
          Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_t_1);
          #if !CYTHON_ASSUME_SAFE_MACROS
          if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 739, __pyx_L1_error)
          #endif
          if (__pyx_t_2 >= __pyx_temp) break;
        }
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_4 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_2); __Pyx_INCREF(__pyx_t_4); __pyx_t_2++; if (unlikely((0 < 0))) __PYX_ERR(0, 739, __pyx_L1_error)
        #else
        __pyx_t_4 = __Pyx_PySequence_ITEM(__pyx_t_1, __pyx_t_2); __pyx_t_2++; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 739, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_4);
        #endif
      } else {
        {
          Py_ssize_t __pyx_temp = __Pyx_PyTuple_GET_SIZE(__pyx_t_1);
          #if !CYTHON_ASSUME_SAFE_MACROS
          if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 739, __pyx_L1_error)
          #endif
          if (__pyx_t_2 >= __pyx_temp) break;
        }
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_4 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_2); __Pyx_INCREF(__pyx_t_4); __pyx_t_2++; if (unlikely((0 < 0))) __PYX_ERR(0, 739, __pyx_L1_error)
        #else
        __pyx_t_4 = __Pyx_PySequence_ITEM(__pyx_t_1, __pyx_t_2); __pyx_t_2++; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 739, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_4);
        #endif
      }
    } else {
      __pyx_t_4 = __pyx_t_3(__pyx_t_1);
      if (unlikely(!__pyx_t_4)) {
        PyObject* exc_type = PyErr_Occurred();
        if (exc_type) {
          if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
          else __PYX_ERR(0, 739, __pyx_L1_error)
        }
        break;
      }
      __Pyx_GOTREF(__pyx_t_4);
    }
    __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_datum);
    __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_datum, __pyx_t_4);
    __Pyx_GIVEREF(__pyx_t_4);
    __pyx_t_4 = 0;
/* … */
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  CYTHON_MAYBE_UNUSED_VAR(__pyx_cur_scope);
 0740:                     )
+0741:         return tuple(data)
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_1 = __Pyx_PySequence_Tuple(__pyx_v_data); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 741, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_r = __pyx_t_1;
    __pyx_t_1 = 0;
    goto __pyx_L0;
 0742: 
+0743:     if name in {'List', 'Sequence'} or field.origin in {list, Sequence}:
  __Pyx_INCREF(__pyx_v_name);
  __pyx_t_1 = __pyx_v_name;
  __pyx_t_5 = (__Pyx_PyUnicode_Equals(__pyx_t_1, __pyx_n_u_List, Py_EQ)); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 743, __pyx_L1_error)
  if (!__pyx_t_5) {
  } else {
    __pyx_t_3 = __pyx_t_5;
    goto __pyx_L31_bool_binop_done;
  }
  __pyx_t_5 = (__Pyx_PyUnicode_Equals(__pyx_t_1, __pyx_n_u_Sequence, Py_EQ)); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 743, __pyx_L1_error)
  __pyx_t_3 = __pyx_t_5;
  __pyx_L31_bool_binop_done:;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_5 = __pyx_t_3;
  if (!__pyx_t_5) {
  } else {
    __pyx_t_2 = __pyx_t_5;
    goto __pyx_L29_bool_binop_done;
  }
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_field, __pyx_n_s_origin); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 743, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_6 = PyObject_RichCompare(__pyx_t_1, ((PyObject *)(&PyList_Type)), Py_EQ); __Pyx_XGOTREF(__pyx_t_6); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 743, __pyx_L1_error)
  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_6); if (unlikely((__pyx_t_3 < 0))) __PYX_ERR(0, 743, __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_L33_bool_binop_done;
  }
  __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_Sequence); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 743, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_t_12 = PyObject_RichCompare(__pyx_t_1, __pyx_t_6, Py_EQ); __Pyx_XGOTREF(__pyx_t_12); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 743, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_12); if (unlikely((__pyx_t_3 < 0))) __PYX_ERR(0, 743, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
  __pyx_t_5 = __pyx_t_3;
  __pyx_L33_bool_binop_done:;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_3 = __pyx_t_5;
  __pyx_t_2 = __pyx_t_3;
  __pyx_L29_bool_binop_done:;
  if (__pyx_t_2) {
/* … */
  }
+0744:         if not isinstance(data, (list, tuple)):
    __pyx_t_3 = PyList_Check(__pyx_v_data); 
    if (!__pyx_t_3) {
    } else {
      __pyx_t_2 = __pyx_t_3;
      goto __pyx_L36_bool_binop_done;
    }
    __pyx_t_3 = PyTuple_Check(__pyx_v_data); 
    __pyx_t_2 = __pyx_t_3;
    __pyx_L36_bool_binop_done:;
    __pyx_t_3 = (!__pyx_t_2);
    if (__pyx_t_3) {
/* … */
    }
+0745:             data = [data]
      __pyx_t_1 = PyList_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 745, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_INCREF(__pyx_v_data);
      __Pyx_GIVEREF(__pyx_v_data);
      if (__Pyx_PyList_SET_ITEM(__pyx_t_1, 0, __pyx_v_data)) __PYX_ERR(0, 745, __pyx_L1_error);
      __Pyx_DECREF_SET(__pyx_v_data, __pyx_t_1);
      __pyx_t_1 = 0;
+0746:         return _parse_list_typing(
    __Pyx_XDECREF(__pyx_r);
/* … */
    __pyx_t_14.__pyx_n = 1;
    __pyx_t_14.as_objects = __pyx_v_as_objects;
    __pyx_t_4 = __pyx_f_9datamodel_10converters__parse_list_typing(__pyx_t_1, ((PyObject*)__pyx_t_12), __pyx_v_data, __pyx_t_6, __pyx_v_origin, __pyx_v_args, &__pyx_t_14); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 746, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __pyx_r = __pyx_t_4;
    __pyx_t_4 = 0;
    goto __pyx_L0;
+0747:             field,
    __pyx_t_1 = __pyx_cur_scope->__pyx_v_field;
    __Pyx_INCREF(__pyx_t_1);
+0748:             type_args,
    __pyx_t_12 = __pyx_cur_scope->__pyx_v_type_args;
    __Pyx_INCREF(__pyx_t_12);
 0749:             data,
+0750:             encoder,
    __pyx_t_6 = __pyx_cur_scope->__pyx_v_encoder;
    __Pyx_INCREF(__pyx_t_6);
 0751:             origin,
 0752:             args,
 0753:             as_objects=as_objects
 0754:         )
 0755: 
 0756:     # handle None, Optional, Union:
+0757:     if name is None or name in ('Optional', 'Union'):
  __pyx_t_2 = (__pyx_v_name == Py_None);
  if (!__pyx_t_2) {
  } else {
    __pyx_t_3 = __pyx_t_2;
    goto __pyx_L39_bool_binop_done;
  }
  __Pyx_INCREF(__pyx_v_name);
  __pyx_t_4 = __pyx_v_name;
  __pyx_t_5 = (__Pyx_PyUnicode_Equals(__pyx_t_4, __pyx_n_u_Optional, Py_EQ)); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 757, __pyx_L1_error)
  if (!__pyx_t_5) {
  } else {
    __pyx_t_2 = __pyx_t_5;
    goto __pyx_L41_bool_binop_done;
  }
  __pyx_t_5 = (__Pyx_PyUnicode_Equals(__pyx_t_4, __pyx_n_u_Union, Py_EQ)); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 757, __pyx_L1_error)
  __pyx_t_2 = __pyx_t_5;
  __pyx_L41_bool_binop_done:;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_5 = __pyx_t_2;
  __pyx_t_3 = __pyx_t_5;
  __pyx_L39_bool_binop_done:;
  if (__pyx_t_3) {
/* … */
  }
+0758:         return _parse_optional_union(field, T, data, encoder, origin, args)
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_4 = __pyx_cur_scope->__pyx_v_field;
    __Pyx_INCREF(__pyx_t_4);
    __pyx_t_6 = __pyx_cur_scope->__pyx_v_encoder;
    __Pyx_INCREF(__pyx_t_6);
    __pyx_t_12 = __pyx_f_9datamodel_10converters__parse_optional_union(__pyx_t_4, __pyx_v_T, __pyx_v_data, __pyx_t_6, __pyx_v_origin, __pyx_v_args); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 758, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_12);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __pyx_r = __pyx_t_12;
    __pyx_t_12 = 0;
    goto __pyx_L0;
 0759: 
+0760:     return data
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_data);
  __pyx_r = __pyx_v_data;
  goto __pyx_L0;
 0761: 
+0762: cdef object _parse_list_typing(
static PyObject *__pyx_f_9datamodel_10converters__parse_list_typing(PyObject *__pyx_v_field, PyObject *__pyx_v_type_args, PyObject *__pyx_v_data, PyObject *__pyx_v_encoder, CYTHON_UNUSED PyObject *__pyx_v_origin, CYTHON_UNUSED PyObject *__pyx_v_args, struct __pyx_opt_args_9datamodel_10converters__parse_list_typing *__pyx_optional_args) {
  PyObject *__pyx_v_result = 0;
  CYTHON_UNUSED PyObject *__pyx_v_out = 0;
  PyObject *__pyx_v_arg_type = 0;
  PyObject *__pyx_v_arg_module = 0;
  int __pyx_v_is_nested_typing;
  PyObject *__pyx_v_subT = NULL;
  PyObject *__pyx_v_x = NULL;
  PyObject *__pyx_v_d = NULL;
  PyObject *__pyx_v_item = NULL;
  PyObject *__pyx_r = NULL;
  if (__pyx_optional_args) {
  }
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_12);
  __Pyx_AddTraceback("datamodel.converters._parse_list_typing", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_result);
  __Pyx_XDECREF(__pyx_v_out);
  __Pyx_XDECREF(__pyx_v_arg_type);
  __Pyx_XDECREF(__pyx_v_arg_module);
  __Pyx_XDECREF(__pyx_v_subT);
  __Pyx_XDECREF(__pyx_v_x);
  __Pyx_XDECREF(__pyx_v_d);
  __Pyx_XDECREF(__pyx_v_item);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
struct __pyx_opt_args_9datamodel_10converters__parse_list_typing {
  int __pyx_n;
  PyObject *as_objects;
  PyObject *typeinfo;
};
 0763:     object field,
 0764:     tuple type_args,
 0765:     object data,
 0766:     object encoder,
 0767:     object origin,
 0768:     object args,
 0769:     object as_objects=False,
 0770:     dict typeinfo=None
 0771: ):
 0772:     """
 0773:     Handle List[T] logic, trying to reduce overhead from repeated lookups.
 0774:     """
+0775:     cdef list result = []
  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 775, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_result = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
+0776:     cdef list out = []
  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 776, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_out = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
+0777:     cdef object arg_type = type_args[0] if type_args else None
  __pyx_t_2 = (__pyx_v_type_args != Py_None)&&(PyTuple_GET_SIZE(__pyx_v_type_args) != 0);
  if (__pyx_t_2) {
    if (unlikely(__pyx_v_type_args == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
      __PYX_ERR(0, 777, __pyx_L1_error)
    }
    __pyx_t_3 = __Pyx_GetItemInt_Tuple(__pyx_v_type_args, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 777, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_1 = __pyx_t_3;
    __pyx_t_3 = 0;
  } else {
    __Pyx_INCREF(Py_None);
    __pyx_t_1 = Py_None;
  }
  __pyx_v_arg_type = __pyx_t_1;
  __pyx_t_1 = 0;
+0778:     cdef object arg_module = getattr(arg_type, '__module__', None)
  __pyx_t_1 = __Pyx_GetAttr3(__pyx_v_arg_type, __pyx_n_u_module, Py_None); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 778, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_arg_module = __pyx_t_1;
  __pyx_t_1 = 0;
+0779:     cdef bint is_nested_typing = (arg_module == 'typing')
  __pyx_t_1 = PyObject_RichCompare(__pyx_v_arg_module, __pyx_n_u_typing, Py_EQ); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 779, __pyx_L1_error)
  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_2 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 779, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_is_nested_typing = __pyx_t_2;
 0780: 
 0781:     # If no type args, we can't proceed with further logic
+0782:     if not type_args:
  __pyx_t_2 = (__pyx_v_type_args != Py_None)&&(PyTuple_GET_SIZE(__pyx_v_type_args) != 0);
  __pyx_t_4 = (!__pyx_t_2);
  if (__pyx_t_4) {
/* … */
  }
+0783:         return data
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(__pyx_v_data);
    __pyx_r = __pyx_v_data;
    goto __pyx_L0;
 0784: 
+0785:     if is_nested_typing:
  if (__pyx_v_is_nested_typing) {
/* … */
  }
 0786:         # nested typing: e.g. List[List[Foo]] or List[Optional[Foo]] etc.
+0787:         try:
    {
      /*try:*/ {
/* … */
      }
      __pyx_L5_error:;
      __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
/* … */
      __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_L8_except_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;
    }
+0788:             subT = arg_type.__args__[0]
        __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_arg_type, __pyx_n_s_args); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 788, __pyx_L5_error)
        __Pyx_GOTREF(__pyx_t_1);
        __pyx_t_3 = __Pyx_GetItemInt(__pyx_t_1, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 788, __pyx_L5_error)
        __Pyx_GOTREF(__pyx_t_3);
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        __pyx_v_subT = __pyx_t_3;
        __pyx_t_3 = 0;
+0789:             if is_dc(subT):
        __pyx_t_4 = __pyx_f_9datamodel_10converters_is_dc(__pyx_v_subT); if (unlikely(__pyx_t_4 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 789, __pyx_L5_error)
        if (__pyx_t_4) {
/* … */
        }
+0790:                 for x in data:
          if (likely(PyList_CheckExact(__pyx_v_data)) || PyTuple_CheckExact(__pyx_v_data)) {
            __pyx_t_3 = __pyx_v_data; __Pyx_INCREF(__pyx_t_3);
            __pyx_t_8 = 0;
            __pyx_t_9 = NULL;
          } else {
            __pyx_t_8 = -1; __pyx_t_3 = PyObject_GetIter(__pyx_v_data); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 790, __pyx_L5_error)
            __Pyx_GOTREF(__pyx_t_3);
            __pyx_t_9 = __Pyx_PyObject_GetIterNextFunc(__pyx_t_3); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 790, __pyx_L5_error)
          }
          for (;;) {
            if (likely(!__pyx_t_9)) {
              if (likely(PyList_CheckExact(__pyx_t_3))) {
                {
                  Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_t_3);
                  #if !CYTHON_ASSUME_SAFE_MACROS
                  if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 790, __pyx_L5_error)
                  #endif
                  if (__pyx_t_8 >= __pyx_temp) break;
                }
                #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
                __pyx_t_1 = PyList_GET_ITEM(__pyx_t_3, __pyx_t_8); __Pyx_INCREF(__pyx_t_1); __pyx_t_8++; if (unlikely((0 < 0))) __PYX_ERR(0, 790, __pyx_L5_error)
                #else
                __pyx_t_1 = __Pyx_PySequence_ITEM(__pyx_t_3, __pyx_t_8); __pyx_t_8++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 790, __pyx_L5_error)
                __Pyx_GOTREF(__pyx_t_1);
                #endif
              } else {
                {
                  Py_ssize_t __pyx_temp = __Pyx_PyTuple_GET_SIZE(__pyx_t_3);
                  #if !CYTHON_ASSUME_SAFE_MACROS
                  if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 790, __pyx_L5_error)
                  #endif
                  if (__pyx_t_8 >= __pyx_temp) break;
                }
                #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
                __pyx_t_1 = PyTuple_GET_ITEM(__pyx_t_3, __pyx_t_8); __Pyx_INCREF(__pyx_t_1); __pyx_t_8++; if (unlikely((0 < 0))) __PYX_ERR(0, 790, __pyx_L5_error)
                #else
                __pyx_t_1 = __Pyx_PySequence_ITEM(__pyx_t_3, __pyx_t_8); __pyx_t_8++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 790, __pyx_L5_error)
                __Pyx_GOTREF(__pyx_t_1);
                #endif
              }
            } else {
              __pyx_t_1 = __pyx_t_9(__pyx_t_3);
              if (unlikely(!__pyx_t_1)) {
                PyObject* exc_type = PyErr_Occurred();
                if (exc_type) {
                  if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
                  else __PYX_ERR(0, 790, __pyx_L5_error)
                }
                break;
              }
              __Pyx_GOTREF(__pyx_t_1);
            }
            __Pyx_XDECREF_SET(__pyx_v_x, __pyx_t_1);
            __pyx_t_1 = 0;
/* … */
          }
          __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+0791:                     result.append(_instantiate_dataclass(subT, x))
            __pyx_t_1 = __pyx_f_9datamodel_10converters__instantiate_dataclass(__pyx_v_subT, __pyx_v_x); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 791, __pyx_L5_error)
            __Pyx_GOTREF(__pyx_t_1);
            __pyx_t_10 = __Pyx_PyList_Append(__pyx_v_result, __pyx_t_1); if (unlikely(__pyx_t_10 == ((int)-1))) __PYX_ERR(0, 791, __pyx_L5_error)
            __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+0792:                 return result
          __Pyx_XDECREF(__pyx_r);
          __Pyx_INCREF(__pyx_v_result);
          __pyx_r = __pyx_v_result;
          goto __pyx_L9_try_return;
 0793:             else:
 0794:                 # fallback
+0795:                 return data
        /*else*/ {
          __Pyx_XDECREF(__pyx_r);
          __Pyx_INCREF(__pyx_v_data);
          __pyx_r = __pyx_v_data;
          goto __pyx_L9_try_return;
        }
+0796:         except AttributeError:
      __pyx_t_11 = __Pyx_PyErr_ExceptionMatches(__pyx_builtin_AttributeError);
      if (__pyx_t_11) {
        __Pyx_AddTraceback("datamodel.converters._parse_list_typing", __pyx_clineno, __pyx_lineno, __pyx_filename);
        if (__Pyx_GetException(&__pyx_t_3, &__pyx_t_1, &__pyx_t_12) < 0) __PYX_ERR(0, 796, __pyx_L7_except_error)
        __Pyx_XGOTREF(__pyx_t_3);
        __Pyx_XGOTREF(__pyx_t_1);
        __Pyx_XGOTREF(__pyx_t_12);
+0797:             return data
        __Pyx_XDECREF(__pyx_r);
        __Pyx_INCREF(__pyx_v_data);
        __pyx_r = __pyx_v_data;
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
        __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
        goto __pyx_L8_except_return;
      }
      goto __pyx_L7_except_error;
+0798:     elif arg_type is not None and is_dc(arg_type):
  __pyx_t_2 = (__pyx_v_arg_type != Py_None);
  if (__pyx_t_2) {
  } else {
    __pyx_t_4 = __pyx_t_2;
    goto __pyx_L17_bool_binop_done;
  }
  __pyx_t_2 = __pyx_f_9datamodel_10converters_is_dc(__pyx_v_arg_type); if (unlikely(__pyx_t_2 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 798, __pyx_L1_error)
  __pyx_t_4 = __pyx_t_2;
  __pyx_L17_bool_binop_done:;
  if (__pyx_t_4) {
/* … */
  }
 0799:         # build list of dataclasses
+0800:         for d in data:
    if (likely(PyList_CheckExact(__pyx_v_data)) || PyTuple_CheckExact(__pyx_v_data)) {
      __pyx_t_12 = __pyx_v_data; __Pyx_INCREF(__pyx_t_12);
      __pyx_t_8 = 0;
      __pyx_t_9 = NULL;
    } else {
      __pyx_t_8 = -1; __pyx_t_12 = PyObject_GetIter(__pyx_v_data); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 800, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_12);
      __pyx_t_9 = __Pyx_PyObject_GetIterNextFunc(__pyx_t_12); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 800, __pyx_L1_error)
    }
    for (;;) {
      if (likely(!__pyx_t_9)) {
        if (likely(PyList_CheckExact(__pyx_t_12))) {
          {
            Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_t_12);
            #if !CYTHON_ASSUME_SAFE_MACROS
            if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 800, __pyx_L1_error)
            #endif
            if (__pyx_t_8 >= __pyx_temp) break;
          }
          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
          __pyx_t_1 = PyList_GET_ITEM(__pyx_t_12, __pyx_t_8); __Pyx_INCREF(__pyx_t_1); __pyx_t_8++; if (unlikely((0 < 0))) __PYX_ERR(0, 800, __pyx_L1_error)
          #else
          __pyx_t_1 = __Pyx_PySequence_ITEM(__pyx_t_12, __pyx_t_8); __pyx_t_8++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 800, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_1);
          #endif
        } else {
          {
            Py_ssize_t __pyx_temp = __Pyx_PyTuple_GET_SIZE(__pyx_t_12);
            #if !CYTHON_ASSUME_SAFE_MACROS
            if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 800, __pyx_L1_error)
            #endif
            if (__pyx_t_8 >= __pyx_temp) break;
          }
          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
          __pyx_t_1 = PyTuple_GET_ITEM(__pyx_t_12, __pyx_t_8); __Pyx_INCREF(__pyx_t_1); __pyx_t_8++; if (unlikely((0 < 0))) __PYX_ERR(0, 800, __pyx_L1_error)
          #else
          __pyx_t_1 = __Pyx_PySequence_ITEM(__pyx_t_12, __pyx_t_8); __pyx_t_8++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 800, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_1);
          #endif
        }
      } else {
        __pyx_t_1 = __pyx_t_9(__pyx_t_12);
        if (unlikely(!__pyx_t_1)) {
          PyObject* exc_type = PyErr_Occurred();
          if (exc_type) {
            if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
            else __PYX_ERR(0, 800, __pyx_L1_error)
          }
          break;
        }
        __Pyx_GOTREF(__pyx_t_1);
      }
      __Pyx_XDECREF_SET(__pyx_v_d, __pyx_t_1);
      __pyx_t_1 = 0;
/* … */
    }
    __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
+0801:             result.append(_instantiate_dataclass(arg_type, d))
      __pyx_t_1 = __pyx_f_9datamodel_10converters__instantiate_dataclass(__pyx_v_arg_type, __pyx_v_d); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 801, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_10 = __Pyx_PyList_Append(__pyx_v_result, __pyx_t_1); if (unlikely(__pyx_t_10 == ((int)-1))) __PYX_ERR(0, 801, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+0802:         return result
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(__pyx_v_result);
    __pyx_r = __pyx_v_result;
    goto __pyx_L0;
 0803:     else:
 0804:         # parse each item
+0805:         for item in data:
  /*else*/ {
    if (likely(PyList_CheckExact(__pyx_v_data)) || PyTuple_CheckExact(__pyx_v_data)) {
      __pyx_t_12 = __pyx_v_data; __Pyx_INCREF(__pyx_t_12);
      __pyx_t_8 = 0;
      __pyx_t_9 = NULL;
    } else {
      __pyx_t_8 = -1; __pyx_t_12 = PyObject_GetIter(__pyx_v_data); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 805, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_12);
      __pyx_t_9 = __Pyx_PyObject_GetIterNextFunc(__pyx_t_12); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 805, __pyx_L1_error)
    }
    for (;;) {
      if (likely(!__pyx_t_9)) {
        if (likely(PyList_CheckExact(__pyx_t_12))) {
          {
            Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_t_12);
            #if !CYTHON_ASSUME_SAFE_MACROS
            if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 805, __pyx_L1_error)
            #endif
            if (__pyx_t_8 >= __pyx_temp) break;
          }
          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
          __pyx_t_1 = PyList_GET_ITEM(__pyx_t_12, __pyx_t_8); __Pyx_INCREF(__pyx_t_1); __pyx_t_8++; if (unlikely((0 < 0))) __PYX_ERR(0, 805, __pyx_L1_error)
          #else
          __pyx_t_1 = __Pyx_PySequence_ITEM(__pyx_t_12, __pyx_t_8); __pyx_t_8++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 805, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_1);
          #endif
        } else {
          {
            Py_ssize_t __pyx_temp = __Pyx_PyTuple_GET_SIZE(__pyx_t_12);
            #if !CYTHON_ASSUME_SAFE_MACROS
            if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 805, __pyx_L1_error)
            #endif
            if (__pyx_t_8 >= __pyx_temp) break;
          }
          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
          __pyx_t_1 = PyTuple_GET_ITEM(__pyx_t_12, __pyx_t_8); __Pyx_INCREF(__pyx_t_1); __pyx_t_8++; if (unlikely((0 < 0))) __PYX_ERR(0, 805, __pyx_L1_error)
          #else
          __pyx_t_1 = __Pyx_PySequence_ITEM(__pyx_t_12, __pyx_t_8); __pyx_t_8++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 805, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_1);
          #endif
        }
      } else {
        __pyx_t_1 = __pyx_t_9(__pyx_t_12);
        if (unlikely(!__pyx_t_1)) {
          PyObject* exc_type = PyErr_Occurred();
          if (exc_type) {
            if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
            else __PYX_ERR(0, 805, __pyx_L1_error)
          }
          break;
        }
        __Pyx_GOTREF(__pyx_t_1);
      }
      __Pyx_XDECREF_SET(__pyx_v_item, __pyx_t_1);
      __pyx_t_1 = 0;
/* … */
    }
    __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
+0806:             result.append(
      __pyx_t_10 = __Pyx_PyList_Append(__pyx_v_result, __pyx_t_1); if (unlikely(__pyx_t_10 == ((int)-1))) __PYX_ERR(0, 806, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+0807:                 _parse_type(field, arg_type, item, encoder, False)
      __pyx_t_13.__pyx_n = 2;
      __pyx_t_13.encoder = __pyx_v_encoder;
      __pyx_t_13.as_objects = Py_False;
      __pyx_t_1 = __pyx_f_9datamodel_10converters__parse_type(__pyx_v_field, __pyx_v_arg_type, __pyx_v_item, &__pyx_t_13); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 807, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
 0808:             )
+0809:         return result
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(__pyx_v_result);
    __pyx_r = __pyx_v_result;
    goto __pyx_L0;
  }
 0810: 
+0811: cdef object _instantiate_dataclass(object cls, object val):
static PyObject *__pyx_f_9datamodel_10converters__instantiate_dataclass(PyObject *__pyx_v_cls, PyObject *__pyx_v_val) {
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_AddTraceback("datamodel.converters._instantiate_dataclass", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
static PyObject *__pyx_gb_9datamodel_10converters_21_parse_optional_union_2generator2(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value); /* proto */
 0812:     """
 0813:     Helper for instantiating a dataclass.
 0814:     """
+0815:     if is_dc(val):
  __pyx_t_1 = __pyx_f_9datamodel_10converters_is_dc(__pyx_v_val); if (unlikely(__pyx_t_1 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 815, __pyx_L1_error)
  if (__pyx_t_1) {
/* … */
  }
+0816:         return val
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(__pyx_v_val);
    __pyx_r = __pyx_v_val;
    goto __pyx_L0;
+0817:     if isinstance(val, dict):
  __pyx_t_1 = PyDict_Check(__pyx_v_val); 
  if (__pyx_t_1) {
/* … */
  }
+0818:         return cls(**val)
    __Pyx_XDECREF(__pyx_r);
    if (unlikely(__pyx_v_val == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "argument after ** must be a mapping, not NoneType");
      __PYX_ERR(0, 818, __pyx_L1_error)
    }
    if (likely(PyDict_CheckExact(__pyx_v_val))) {
      __pyx_t_2 = PyDict_Copy(__pyx_v_val); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 818, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
    } else {
      __pyx_t_2 = __Pyx_PyObject_CallOneArg((PyObject*)&PyDict_Type, __pyx_v_val); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 818, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
    }
    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_v_cls, __pyx_empty_tuple, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 818, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_r = __pyx_t_3;
    __pyx_t_3 = 0;
    goto __pyx_L0;
+0819:     elif isinstance(val, (list, tuple)):
  __pyx_t_4 = PyList_Check(__pyx_v_val); 
  if (!__pyx_t_4) {
  } else {
    __pyx_t_1 = __pyx_t_4;
    goto __pyx_L5_bool_binop_done;
  }
  __pyx_t_4 = PyTuple_Check(__pyx_v_val); 
  __pyx_t_1 = __pyx_t_4;
  __pyx_L5_bool_binop_done:;
  if (__pyx_t_1) {
/* … */
  }
+0820:         return cls(*val)
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_3 = __Pyx_PySequence_Tuple(__pyx_v_val); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 820, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_v_cls, __pyx_t_3, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 820, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_r = __pyx_t_2;
    __pyx_t_2 = 0;
    goto __pyx_L0;
 0821:     else:
+0822:         return cls(val)
  /*else*/ {
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(__pyx_v_cls);
    __pyx_t_3 = __pyx_v_cls; __pyx_t_5 = NULL;
    __pyx_t_6 = 0;
    #if CYTHON_UNPACK_METHODS
    if (unlikely(PyMethod_Check(__pyx_t_3))) {
      __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_3);
      if (likely(__pyx_t_5)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
        __Pyx_INCREF(__pyx_t_5);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_3, function);
        __pyx_t_6 = 1;
      }
    }
    #endif
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_v_val};
      __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_6, 1+__pyx_t_6);
      __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
      if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 822, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    }
    __pyx_r = __pyx_t_2;
    __pyx_t_2 = 0;
    goto __pyx_L0;
  }
 0823: 
+0824: cdef object _parse_optional_union(
static PyObject *__pyx_f_9datamodel_10converters__parse_optional_union(PyObject *__pyx_v_field, PyObject *__pyx_v_T, PyObject *__pyx_v_data, PyObject *__pyx_v_encoder, PyObject *__pyx_v_origin, PyObject *__pyx_v_args) {
  PyObject *__pyx_v_non_none_arg = 0;
  PyObject *__pyx_v_t = 0;
  int __pyx_v_matched;
  PyObject *__pyx_gb_9datamodel_10converters_21_parse_optional_union_2generator2 = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_INCREF(__pyx_v_args);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_AddTraceback("datamodel.converters._parse_optional_union", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_non_none_arg);
  __Pyx_XDECREF(__pyx_v_t);
  __Pyx_XDECREF(__pyx_gb_9datamodel_10converters_21_parse_optional_union_2generator2);
  __Pyx_XDECREF(__pyx_v_args);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
static PyObject *__pyx_gb_9datamodel_10converters_17_parse_union_type_2generator3(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value); /* proto */
 0825:     object field,
 0826:     object T,
 0827:     object data,
 0828:     object encoder,
 0829:     object origin,
 0830:     object args
 0831: ):
 0832:     """
 0833:     Handle Optional or Union logic.
 0834:     """
 0835:     cdef object non_none_arg
+0836:     cdef object t = args[0] if args else None
  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_args); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 836, __pyx_L1_error)
  if (__pyx_t_2) {
    __pyx_t_3 = __Pyx_GetItemInt(__pyx_v_args, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 836, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_1 = __pyx_t_3;
    __pyx_t_3 = 0;
  } else {
    __Pyx_INCREF(Py_None);
    __pyx_t_1 = Py_None;
  }
  __pyx_v_t = __pyx_t_1;
  __pyx_t_1 = 0;
+0837:     cdef bint matched = False
  __pyx_v_matched = 0;
 0838: 
+0839:     for t in args:
  if (likely(PyList_CheckExact(__pyx_v_args)) || PyTuple_CheckExact(__pyx_v_args)) {
    __pyx_t_1 = __pyx_v_args; __Pyx_INCREF(__pyx_t_1);
    __pyx_t_4 = 0;
    __pyx_t_5 = NULL;
  } else {
    __pyx_t_4 = -1; __pyx_t_1 = PyObject_GetIter(__pyx_v_args); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 839, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_5 = __Pyx_PyObject_GetIterNextFunc(__pyx_t_1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 839, __pyx_L1_error)
  }
  for (;;) {
    if (likely(!__pyx_t_5)) {
      if (likely(PyList_CheckExact(__pyx_t_1))) {
        {
          Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_t_1);
          #if !CYTHON_ASSUME_SAFE_MACROS
          if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 839, __pyx_L1_error)
          #endif
          if (__pyx_t_4 >= __pyx_temp) break;
        }
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_3 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_4); __Pyx_INCREF(__pyx_t_3); __pyx_t_4++; if (unlikely((0 < 0))) __PYX_ERR(0, 839, __pyx_L1_error)
        #else
        __pyx_t_3 = __Pyx_PySequence_ITEM(__pyx_t_1, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 839, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
        #endif
      } else {
        {
          Py_ssize_t __pyx_temp = __Pyx_PyTuple_GET_SIZE(__pyx_t_1);
          #if !CYTHON_ASSUME_SAFE_MACROS
          if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 839, __pyx_L1_error)
          #endif
          if (__pyx_t_4 >= __pyx_temp) break;
        }
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_3 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_4); __Pyx_INCREF(__pyx_t_3); __pyx_t_4++; if (unlikely((0 < 0))) __PYX_ERR(0, 839, __pyx_L1_error)
        #else
        __pyx_t_3 = __Pyx_PySequence_ITEM(__pyx_t_1, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 839, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
        #endif
      }
    } else {
      __pyx_t_3 = __pyx_t_5(__pyx_t_1);
      if (unlikely(!__pyx_t_3)) {
        PyObject* exc_type = PyErr_Occurred();
        if (exc_type) {
          if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
          else __PYX_ERR(0, 839, __pyx_L1_error)
        }
        break;
      }
      __Pyx_GOTREF(__pyx_t_3);
    }
    __Pyx_DECREF_SET(__pyx_v_t, __pyx_t_3);
    __pyx_t_3 = 0;
/* … */
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+0840:         if PyObject_IsInstance(data, t):
    __pyx_t_2 = PyObject_IsInstance(__pyx_v_data, __pyx_v_t); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 840, __pyx_L1_error)
    if (__pyx_t_2) {
/* … */
    }
+0841:             return data
      __Pyx_XDECREF(__pyx_r);
      __Pyx_INCREF(__pyx_v_data);
      __pyx_r = __pyx_v_data;
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      goto __pyx_L0;
 0842: 
 0843:     # e.g. Optional[T] is Union[T, NoneType]
+0844:     if origin == Union and type(None) in args:
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_Union); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 844, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_3 = PyObject_RichCompare(__pyx_v_origin, __pyx_t_1, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 844, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely((__pyx_t_6 < 0))) __PYX_ERR(0, 844, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (__pyx_t_6) {
  } else {
    __pyx_t_2 = __pyx_t_6;
    goto __pyx_L8_bool_binop_done;
  }
  __pyx_t_6 = (__Pyx_PySequence_ContainsTF(((PyObject *)Py_TYPE(Py_None)), __pyx_v_args, Py_EQ)); if (unlikely((__pyx_t_6 < 0))) __PYX_ERR(0, 844, __pyx_L1_error)
  __pyx_t_2 = __pyx_t_6;
  __pyx_L8_bool_binop_done:;
  if (__pyx_t_2) {
/* … */
  }
+0845:         if data is None:
    __pyx_t_2 = (__pyx_v_data == Py_None);
    if (__pyx_t_2) {
/* … */
    }
+0846:             return None
      __Pyx_XDECREF(__pyx_r);
      __pyx_r = Py_None; __Pyx_INCREF(Py_None);
      goto __pyx_L0;
 0847:         # Pick the non-None type (assumes only two types in the Union)
+0848:         non_none_arg = args[0] if args[1] is type(None) else args[1]
    __pyx_t_1 = __Pyx_GetItemInt(__pyx_v_args, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 848, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_2 = (__pyx_t_1 == ((PyObject *)Py_TYPE(Py_None)));
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    if (__pyx_t_2) {
      __pyx_t_1 = __Pyx_GetItemInt(__pyx_v_args, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 848, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_3 = __pyx_t_1;
      __pyx_t_1 = 0;
    } else {
      __pyx_t_1 = __Pyx_GetItemInt(__pyx_v_args, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 848, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_3 = __pyx_t_1;
      __pyx_t_1 = 0;
    }
    __pyx_v_non_none_arg = __pyx_t_3;
    __pyx_t_3 = 0;
+0849:         return _parse_type(
    __Pyx_XDECREF(__pyx_r);
/* … */
    __pyx_t_7.__pyx_n = 2;
    __pyx_t_7.encoder = __pyx_v_encoder;
    __pyx_t_7.as_objects = Py_False;
    __pyx_t_3 = __pyx_f_9datamodel_10converters__parse_type(__pyx_v_field, __pyx_v_non_none_arg, __pyx_v_data, &__pyx_t_7); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 849, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_r = __pyx_t_3;
    __pyx_t_3 = 0;
    goto __pyx_L0;
 0850:             field,
 0851:             T=non_none_arg,
 0852:             data=data,
 0853:             encoder=encoder,
 0854:             as_objects=False
 0855:         )
 0856:     # Remove None from args.
+0857:     args = tuple(t for t in args if t is not type(None))
static PyObject *__pyx_pf_9datamodel_10converters_21_parse_optional_union_genexpr(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_genexpr_arg_0) {
  struct __pyx_obj_9datamodel_10converters___pyx_scope_struct_3_genexpr *__pyx_cur_scope;
  PyObject *__pyx_r = NULL;
  __pyx_cur_scope = (struct __pyx_obj_9datamodel_10converters___pyx_scope_struct_3_genexpr *)__pyx_tp_new_9datamodel_10converters___pyx_scope_struct_3_genexpr(__pyx_ptype_9datamodel_10converters___pyx_scope_struct_3_genexpr, __pyx_empty_tuple, NULL);
  if (unlikely(!__pyx_cur_scope)) {
    __pyx_cur_scope = ((struct __pyx_obj_9datamodel_10converters___pyx_scope_struct_3_genexpr *)Py_None);
    __Pyx_INCREF(Py_None);
    __PYX_ERR(0, 857, __pyx_L1_error)
  } else {
    __Pyx_GOTREF((PyObject *)__pyx_cur_scope);
  }
  __pyx_cur_scope->__pyx_genexpr_arg_0 = __pyx_genexpr_arg_0;
  __Pyx_INCREF(__pyx_cur_scope->__pyx_genexpr_arg_0);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_genexpr_arg_0);
  {
    __pyx_CoroutineObject *gen = __Pyx_Generator_New((__pyx_coroutine_body_t) __pyx_gb_9datamodel_10converters_21_parse_optional_union_2generator2, NULL, (PyObject *) __pyx_cur_scope, __pyx_n_s_genexpr, __pyx_n_s_parse_optional_union_locals_gen, __pyx_n_s_datamodel_converters); if (unlikely(!gen)) __PYX_ERR(0, 857, __pyx_L1_error)
    __Pyx_DECREF(__pyx_cur_scope);
    __Pyx_RefNannyFinishContext();
    return (PyObject *) gen;
  }

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

static PyObject *__pyx_gb_9datamodel_10converters_21_parse_optional_union_2generator2(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value) /* generator body */
{
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("genexpr", 0);
  __pyx_L3_first_run:;
  if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 857, __pyx_L1_error)
  if (unlikely(!__pyx_cur_scope->__pyx_genexpr_arg_0)) { __Pyx_RaiseUnboundLocalError(".0"); __PYX_ERR(0, 857, __pyx_L1_error) }
  if (likely(PyList_CheckExact(__pyx_cur_scope->__pyx_genexpr_arg_0)) || PyTuple_CheckExact(__pyx_cur_scope->__pyx_genexpr_arg_0)) {
    __pyx_t_1 = __pyx_cur_scope->__pyx_genexpr_arg_0; __Pyx_INCREF(__pyx_t_1);
    __pyx_t_2 = 0;
    __pyx_t_3 = NULL;
  } else {
    __pyx_t_2 = -1; __pyx_t_1 = PyObject_GetIter(__pyx_cur_scope->__pyx_genexpr_arg_0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 857, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_3 = __Pyx_PyObject_GetIterNextFunc(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 857, __pyx_L1_error)
  }
  for (;;) {
    if (likely(!__pyx_t_3)) {
      if (likely(PyList_CheckExact(__pyx_t_1))) {
        {
          Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_t_1);
          #if !CYTHON_ASSUME_SAFE_MACROS
          if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 857, __pyx_L1_error)
          #endif
          if (__pyx_t_2 >= __pyx_temp) break;
        }
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_4 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_2); __Pyx_INCREF(__pyx_t_4); __pyx_t_2++; if (unlikely((0 < 0))) __PYX_ERR(0, 857, __pyx_L1_error)
        #else
        __pyx_t_4 = __Pyx_PySequence_ITEM(__pyx_t_1, __pyx_t_2); __pyx_t_2++; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 857, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_4);
        #endif
      } else {
        {
          Py_ssize_t __pyx_temp = __Pyx_PyTuple_GET_SIZE(__pyx_t_1);
          #if !CYTHON_ASSUME_SAFE_MACROS
          if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 857, __pyx_L1_error)
          #endif
          if (__pyx_t_2 >= __pyx_temp) break;
        }
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_4 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_2); __Pyx_INCREF(__pyx_t_4); __pyx_t_2++; if (unlikely((0 < 0))) __PYX_ERR(0, 857, __pyx_L1_error)
        #else
        __pyx_t_4 = __Pyx_PySequence_ITEM(__pyx_t_1, __pyx_t_2); __pyx_t_2++; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 857, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_4);
        #endif
      }
    } else {
      __pyx_t_4 = __pyx_t_3(__pyx_t_1);
      if (unlikely(!__pyx_t_4)) {
        PyObject* exc_type = PyErr_Occurred();
        if (exc_type) {
          if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
          else __PYX_ERR(0, 857, __pyx_L1_error)
        }
        break;
      }
      __Pyx_GOTREF(__pyx_t_4);
    }
    __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_t);
    __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_t, __pyx_t_4);
    __Pyx_GIVEREF(__pyx_t_4);
    __pyx_t_4 = 0;
    __pyx_t_5 = (__pyx_cur_scope->__pyx_v_t != ((PyObject *)Py_TYPE(Py_None)));
    if (__pyx_t_5) {
      __Pyx_INCREF(__pyx_cur_scope->__pyx_v_t);
      __pyx_r = __pyx_cur_scope->__pyx_v_t;
      __Pyx_XGIVEREF(__pyx_t_1);
      __pyx_cur_scope->__pyx_t_0 = __pyx_t_1;
      __pyx_cur_scope->__pyx_t_1 = __pyx_t_2;
      __pyx_cur_scope->__pyx_t_2 = __pyx_t_3;
      __Pyx_XGIVEREF(__pyx_r);
      __Pyx_RefNannyFinishContext();
      __Pyx_Coroutine_ResetAndClearException(__pyx_generator);
      /* return from generator, yielding value */
      __pyx_generator->resume_label = 1;
      return __pyx_r;
      __pyx_L7_resume_from_yield:;
      __pyx_t_1 = __pyx_cur_scope->__pyx_t_0;
      __pyx_cur_scope->__pyx_t_0 = 0;
      __Pyx_XGOTREF(__pyx_t_1);
      __pyx_t_2 = __pyx_cur_scope->__pyx_t_1;
      __pyx_t_3 = __pyx_cur_scope->__pyx_t_2;
      if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 857, __pyx_L1_error)
    }
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  CYTHON_MAYBE_UNUSED_VAR(__pyx_cur_scope);

  /* function exit code */
  PyErr_SetNone(PyExc_StopIteration);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_Generator_Replace_StopIteration(0);
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("genexpr", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_r); __pyx_r = 0;
  #if !CYTHON_USE_EXC_INFO_STACK
  __Pyx_Coroutine_ResetAndClearException(__pyx_generator);
  #endif
  __pyx_generator->resume_label = -1;
  __Pyx_Coroutine_clear((PyObject*)__pyx_generator);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_3 = __pyx_pf_9datamodel_10converters_21_parse_optional_union_genexpr(NULL, __pyx_v_args); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 857, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_1 = __Pyx_PySequence_Tuple(__pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 857, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF_SET(__pyx_v_args, __pyx_t_1);
  __pyx_t_1 = 0;
/* … */
struct __pyx_obj_9datamodel_10converters___pyx_scope_struct_3_genexpr {
  PyObject_HEAD
  PyObject *__pyx_genexpr_arg_0;
  PyObject *__pyx_v_t;
  PyObject *__pyx_t_0;
  Py_ssize_t __pyx_t_1;
  PyObject *(*__pyx_t_2)(PyObject *);
};

 0858:     # If there are no non-None types left, simply return data.
+0859:     if not args:
  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_args); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 859, __pyx_L1_error)
  __pyx_t_6 = (!__pyx_t_2);
  if (__pyx_t_6) {
/* … */
  }
+0860:         return data
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(__pyx_v_data);
    __pyx_r = __pyx_v_data;
    goto __pyx_L0;
 0861: 
+0862:     for t in args:
  if (likely(PyList_CheckExact(__pyx_v_args)) || PyTuple_CheckExact(__pyx_v_args)) {
    __pyx_t_1 = __pyx_v_args; __Pyx_INCREF(__pyx_t_1);
    __pyx_t_4 = 0;
    __pyx_t_5 = NULL;
  } else {
    __pyx_t_4 = -1; __pyx_t_1 = PyObject_GetIter(__pyx_v_args); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 862, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_5 = __Pyx_PyObject_GetIterNextFunc(__pyx_t_1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 862, __pyx_L1_error)
  }
  for (;;) {
    if (likely(!__pyx_t_5)) {
      if (likely(PyList_CheckExact(__pyx_t_1))) {
        {
          Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_t_1);
          #if !CYTHON_ASSUME_SAFE_MACROS
          if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 862, __pyx_L1_error)
          #endif
          if (__pyx_t_4 >= __pyx_temp) break;
        }
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_3 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_4); __Pyx_INCREF(__pyx_t_3); __pyx_t_4++; if (unlikely((0 < 0))) __PYX_ERR(0, 862, __pyx_L1_error)
        #else
        __pyx_t_3 = __Pyx_PySequence_ITEM(__pyx_t_1, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 862, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
        #endif
      } else {
        {
          Py_ssize_t __pyx_temp = __Pyx_PyTuple_GET_SIZE(__pyx_t_1);
          #if !CYTHON_ASSUME_SAFE_MACROS
          if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 862, __pyx_L1_error)
          #endif
          if (__pyx_t_4 >= __pyx_temp) break;
        }
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_3 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_4); __Pyx_INCREF(__pyx_t_3); __pyx_t_4++; if (unlikely((0 < 0))) __PYX_ERR(0, 862, __pyx_L1_error)
        #else
        __pyx_t_3 = __Pyx_PySequence_ITEM(__pyx_t_1, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 862, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
        #endif
      }
    } else {
      __pyx_t_3 = __pyx_t_5(__pyx_t_1);
      if (unlikely(!__pyx_t_3)) {
        PyObject* exc_type = PyErr_Occurred();
        if (exc_type) {
          if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
          else __PYX_ERR(0, 862, __pyx_L1_error)
        }
        break;
      }
      __Pyx_GOTREF(__pyx_t_3);
    }
    __Pyx_DECREF_SET(__pyx_v_t, __pyx_t_3);
    __pyx_t_3 = 0;
/* … */
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  goto __pyx_L15_for_end;
  __pyx_L13_break:;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  goto __pyx_L15_for_end;
  __pyx_L15_for_end:;
+0863:         if isinstance(data, t):
    __pyx_t_6 = PyObject_IsInstance(__pyx_v_data, __pyx_v_t); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(0, 863, __pyx_L1_error)
    if (__pyx_t_6) {
/* … */
    }
+0864:             matched = True
      __pyx_v_matched = 1;
+0865:             break
      goto __pyx_L13_break;
+0866:     if not matched:
  __pyx_t_6 = (!__pyx_v_matched);
  if (unlikely(__pyx_t_6)) {
/* … */
  }
+0867:         raise ValueError(
    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_builtin_ValueError, __pyx_t_9); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 867, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    __Pyx_Raise(__pyx_t_1, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __PYX_ERR(0, 867, __pyx_L1_error)
+0868:             f"Invalid type for *{field.name}* with {type(data)}, expected {T}"
    __pyx_t_1 = PyTuple_New(6); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 868, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_4 = 0;
    __pyx_t_8 = 127;
    __Pyx_INCREF(__pyx_kp_u_Invalid_type_for);
    __pyx_t_4 += 18;
    __Pyx_GIVEREF(__pyx_kp_u_Invalid_type_for);
    PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_kp_u_Invalid_type_for);
    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_field, __pyx_n_s_name_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 868, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_9 = __Pyx_PyObject_FormatSimple(__pyx_t_3, __pyx_empty_unicode); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 868, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_8 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_9) > __pyx_t_8) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_9) : __pyx_t_8;
    __pyx_t_4 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_9);
    __Pyx_GIVEREF(__pyx_t_9);
    PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_t_9);
    __pyx_t_9 = 0;
    __Pyx_INCREF(__pyx_kp_u_with);
    __pyx_t_4 += 7;
    __Pyx_GIVEREF(__pyx_kp_u_with);
    PyTuple_SET_ITEM(__pyx_t_1, 2, __pyx_kp_u_with);
    __pyx_t_9 = __Pyx_PyObject_FormatSimple(((PyObject *)Py_TYPE(__pyx_v_data)), __pyx_empty_unicode); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 868, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __pyx_t_8 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_9) > __pyx_t_8) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_9) : __pyx_t_8;
    __pyx_t_4 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_9);
    __Pyx_GIVEREF(__pyx_t_9);
    PyTuple_SET_ITEM(__pyx_t_1, 3, __pyx_t_9);
    __pyx_t_9 = 0;
    __Pyx_INCREF(__pyx_kp_u_expected);
    __pyx_t_4 += 11;
    __Pyx_GIVEREF(__pyx_kp_u_expected);
    PyTuple_SET_ITEM(__pyx_t_1, 4, __pyx_kp_u_expected);
    __pyx_t_9 = __Pyx_PyObject_FormatSimple(__pyx_v_T, __pyx_empty_unicode); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 868, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __pyx_t_8 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_9) > __pyx_t_8) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_9) : __pyx_t_8;
    __pyx_t_4 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_9);
    __Pyx_GIVEREF(__pyx_t_9);
    PyTuple_SET_ITEM(__pyx_t_1, 5, __pyx_t_9);
    __pyx_t_9 = 0;
    __pyx_t_9 = __Pyx_PyUnicode_Join(__pyx_t_1, 6, __pyx_t_4, __pyx_t_8); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 868, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 0869:         )
+0870:     try:
  {
    /*try:*/ {
/* … */
    }
    __pyx_L17_error:;
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
/* … */
    __pyx_L19_except_error:;
    __Pyx_XGIVEREF(__pyx_t_10);
    __Pyx_XGIVEREF(__pyx_t_11);
    __Pyx_XGIVEREF(__pyx_t_12);
    __Pyx_ExceptionReset(__pyx_t_10, __pyx_t_11, __pyx_t_12);
    goto __pyx_L1_error;
    __pyx_L21_try_return:;
    __Pyx_XGIVEREF(__pyx_t_10);
    __Pyx_XGIVEREF(__pyx_t_11);
    __Pyx_XGIVEREF(__pyx_t_12);
    __Pyx_ExceptionReset(__pyx_t_10, __pyx_t_11, __pyx_t_12);
    goto __pyx_L0;
    __pyx_L18_exception_handled:;
    __Pyx_XGIVEREF(__pyx_t_10);
    __Pyx_XGIVEREF(__pyx_t_11);
    __Pyx_XGIVEREF(__pyx_t_12);
    __Pyx_ExceptionReset(__pyx_t_10, __pyx_t_11, __pyx_t_12);
  }
+0871:         if is_dc(t):
      __pyx_t_6 = __pyx_f_9datamodel_10converters_is_dc(__pyx_v_t); if (unlikely(__pyx_t_6 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 871, __pyx_L17_error)
      if (__pyx_t_6) {
/* … */
      }
+0872:             if isinstance(data, dict):
        __pyx_t_6 = PyDict_Check(__pyx_v_data); 
        if (__pyx_t_6) {
/* … */
        }
+0873:                 return t(**data)
          __Pyx_XDECREF(__pyx_r);
          if (unlikely(__pyx_v_data == Py_None)) {
            PyErr_SetString(PyExc_TypeError, "argument after ** must be a mapping, not NoneType");
            __PYX_ERR(0, 873, __pyx_L17_error)
          }
          if (likely(PyDict_CheckExact(__pyx_v_data))) {
            __pyx_t_1 = PyDict_Copy(__pyx_v_data); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 873, __pyx_L17_error)
            __Pyx_GOTREF(__pyx_t_1);
          } else {
            __pyx_t_1 = __Pyx_PyObject_CallOneArg((PyObject*)&PyDict_Type, __pyx_v_data); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 873, __pyx_L17_error)
            __Pyx_GOTREF(__pyx_t_1);
          }
          __pyx_t_9 = __Pyx_PyObject_Call(__pyx_v_t, __pyx_empty_tuple, __pyx_t_1); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 873, __pyx_L17_error)
          __Pyx_GOTREF(__pyx_t_9);
          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
          __pyx_r = __pyx_t_9;
          __pyx_t_9 = 0;
          goto __pyx_L21_try_return;
+0874:             elif isinstance(data, (list, tuple)):
        __pyx_t_2 = PyList_Check(__pyx_v_data); 
        if (!__pyx_t_2) {
        } else {
          __pyx_t_6 = __pyx_t_2;
          goto __pyx_L25_bool_binop_done;
        }
        __pyx_t_2 = PyTuple_Check(__pyx_v_data); 
        __pyx_t_6 = __pyx_t_2;
        __pyx_L25_bool_binop_done:;
        if (__pyx_t_6) {
/* … */
        }
+0875:                 return t(*data)
          __Pyx_XDECREF(__pyx_r);
          __pyx_t_9 = __Pyx_PySequence_Tuple(__pyx_v_data); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 875, __pyx_L17_error)
          __Pyx_GOTREF(__pyx_t_9);
          __pyx_t_1 = __Pyx_PyObject_Call(__pyx_v_t, __pyx_t_9, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 875, __pyx_L17_error)
          __Pyx_GOTREF(__pyx_t_1);
          __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
          __pyx_r = __pyx_t_1;
          __pyx_t_1 = 0;
          goto __pyx_L21_try_return;
 0876:             else:
+0877:                 return data
        /*else*/ {
          __Pyx_XDECREF(__pyx_r);
          __Pyx_INCREF(__pyx_v_data);
          __pyx_r = __pyx_v_data;
          goto __pyx_L21_try_return;
        }
+0878:         elif callable(t):
      __pyx_t_6 = __Pyx_PyCallable_Check(__pyx_v_t); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(0, 878, __pyx_L17_error)
      if (__pyx_t_6) {
/* … */
      }
+0879:             return data
        __Pyx_XDECREF(__pyx_r);
        __Pyx_INCREF(__pyx_v_data);
        __pyx_r = __pyx_v_data;
        goto __pyx_L21_try_return;
+0880:         return data
      __Pyx_XDECREF(__pyx_r);
      __Pyx_INCREF(__pyx_v_data);
      __pyx_r = __pyx_v_data;
      goto __pyx_L21_try_return;
+0881:     except KeyError:
    __pyx_t_13 = __Pyx_PyErr_ExceptionMatches(__pyx_builtin_KeyError);
    if (__pyx_t_13) {
      __Pyx_ErrRestore(0,0,0);
      goto __pyx_L18_exception_handled;
    }
    goto __pyx_L19_except_error;
 0882:         pass
+0883:     return data
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_data);
  __pyx_r = __pyx_v_data;
  goto __pyx_L0;
 0884: 
+0885: cdef object _parse_union_type(
static PyObject *__pyx_f_9datamodel_10converters__parse_union_type(PyObject *__pyx_v_field, CYTHON_UNUSED PyObject *__pyx_v_T, CYTHON_UNUSED PyObject *__pyx_v_name, PyObject *__pyx_v_data, PyObject *__pyx_v_encoder, PyObject *__pyx_v_origin, PyObject *__pyx_v_targs) {
  PyObject *__pyx_v_field_name = 0;
  PyObject *__pyx_v_error = 0;
  PyObject *__pyx_v_non_none_arg = 0;
  CYTHON_UNUSED PyObject *__pyx_v_inner_targs = 0;
  int __pyx_v_is_typing;
  PyObject *__pyx_v_arg = NULL;
  PyObject *__pyx_v_arg_type = NULL;
  PyObject *__pyx_v_subtype_origin = NULL;
  PyObject *__pyx_v_exc = NULL;
  PyObject *__pyx_gb_9datamodel_10converters_17_parse_union_type_2generator3 = 0;
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_10);
  __Pyx_XDECREF(__pyx_t_17);
  __Pyx_XDECREF(__pyx_t_18);
  __Pyx_XDECREF(__pyx_t_19);
  __Pyx_AddTraceback("datamodel.converters._parse_union_type", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_field_name);
  __Pyx_XDECREF(__pyx_v_error);
  __Pyx_XDECREF(__pyx_v_non_none_arg);
  __Pyx_XDECREF(__pyx_v_inner_targs);
  __Pyx_XDECREF(__pyx_v_arg);
  __Pyx_XDECREF(__pyx_v_arg_type);
  __Pyx_XDECREF(__pyx_v_subtype_origin);
  __Pyx_XDECREF(__pyx_v_exc);
  __Pyx_XDECREF(__pyx_gb_9datamodel_10converters_17_parse_union_type_2generator3);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 0886:     object field,
 0887:     object T,
 0888:     object name,
 0889:     object data,
 0890:     object encoder,
 0891:     object origin,
 0892:     object targs
 0893: ):
 0894:     """
 0895:     Attempt each type in the Union until one parses successfully
 0896:     or raise an error if all fail.
 0897:     If T is Optional[...] (i.e. a Union with NoneType), unwrap it.
 0898:     """
+0899:     cdef str field_name = field.name
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_field, __pyx_n_s_name_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 899, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (!(likely(PyUnicode_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None) || __Pyx_RaiseUnexpectedTypeError("unicode", __pyx_t_1))) __PYX_ERR(0, 899, __pyx_L1_error)
  __pyx_v_field_name = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
+0900:     cdef str error = None
  __Pyx_INCREF(Py_None);
  __pyx_v_error = ((PyObject*)Py_None);
+0901:     cdef object non_none_arg = None
  __Pyx_INCREF(Py_None);
  __pyx_v_non_none_arg = Py_None;
+0902:     cdef tuple inner_targs = None
  __Pyx_INCREF(Py_None);
  __pyx_v_inner_targs = ((PyObject*)Py_None);
+0903:     cdef bint is_typing = False
  __pyx_v_is_typing = 0;
 0904: 
 0905:     # If the union includes NoneType, unwrap it and use only the non-None type.
+0906:     if origin == Union and type(None) in targs:
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_Union); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 906, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_3 = PyObject_RichCompare(__pyx_v_origin, __pyx_t_1, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 906, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely((__pyx_t_4 < 0))) __PYX_ERR(0, 906, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (__pyx_t_4) {
  } else {
    __pyx_t_2 = __pyx_t_4;
    goto __pyx_L4_bool_binop_done;
  }
  __pyx_t_4 = (__Pyx_PySequence_ContainsTF(((PyObject *)Py_TYPE(Py_None)), __pyx_v_targs, Py_EQ)); if (unlikely((__pyx_t_4 < 0))) __PYX_ERR(0, 906, __pyx_L1_error)
  __pyx_t_2 = __pyx_t_4;
  __pyx_L4_bool_binop_done:;
  if (__pyx_t_2) {
/* … */
  }
+0907:         for arg in targs:
    if (likely(PyList_CheckExact(__pyx_v_targs)) || PyTuple_CheckExact(__pyx_v_targs)) {
      __pyx_t_3 = __pyx_v_targs; __Pyx_INCREF(__pyx_t_3);
      __pyx_t_5 = 0;
      __pyx_t_6 = NULL;
    } else {
      __pyx_t_5 = -1; __pyx_t_3 = PyObject_GetIter(__pyx_v_targs); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 907, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_6 = __Pyx_PyObject_GetIterNextFunc(__pyx_t_3); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 907, __pyx_L1_error)
    }
    for (;;) {
      if (likely(!__pyx_t_6)) {
        if (likely(PyList_CheckExact(__pyx_t_3))) {
          {
            Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_t_3);
            #if !CYTHON_ASSUME_SAFE_MACROS
            if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 907, __pyx_L1_error)
            #endif
            if (__pyx_t_5 >= __pyx_temp) break;
          }
          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
          __pyx_t_1 = PyList_GET_ITEM(__pyx_t_3, __pyx_t_5); __Pyx_INCREF(__pyx_t_1); __pyx_t_5++; if (unlikely((0 < 0))) __PYX_ERR(0, 907, __pyx_L1_error)
          #else
          __pyx_t_1 = __Pyx_PySequence_ITEM(__pyx_t_3, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 907, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_1);
          #endif
        } else {
          {
            Py_ssize_t __pyx_temp = __Pyx_PyTuple_GET_SIZE(__pyx_t_3);
            #if !CYTHON_ASSUME_SAFE_MACROS
            if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 907, __pyx_L1_error)
            #endif
            if (__pyx_t_5 >= __pyx_temp) break;
          }
          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
          __pyx_t_1 = PyTuple_GET_ITEM(__pyx_t_3, __pyx_t_5); __Pyx_INCREF(__pyx_t_1); __pyx_t_5++; if (unlikely((0 < 0))) __PYX_ERR(0, 907, __pyx_L1_error)
          #else
          __pyx_t_1 = __Pyx_PySequence_ITEM(__pyx_t_3, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 907, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_1);
          #endif
        }
      } else {
        __pyx_t_1 = __pyx_t_6(__pyx_t_3);
        if (unlikely(!__pyx_t_1)) {
          PyObject* exc_type = PyErr_Occurred();
          if (exc_type) {
            if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
            else __PYX_ERR(0, 907, __pyx_L1_error)
          }
          break;
        }
        __Pyx_GOTREF(__pyx_t_1);
      }
      __Pyx_XDECREF_SET(__pyx_v_arg, __pyx_t_1);
      __pyx_t_1 = 0;
/* … */
    }
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    goto __pyx_L9_for_end;
    __pyx_L7_break:;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    goto __pyx_L9_for_end;
    __pyx_L9_for_end:;
+0908:             if arg is not type(None):
      __pyx_t_2 = (__pyx_v_arg != ((PyObject *)Py_TYPE(Py_None)));
      if (__pyx_t_2) {
/* … */
      }
+0909:                 non_none_arg = arg
        __Pyx_INCREF(__pyx_v_arg);
        __Pyx_DECREF_SET(__pyx_v_non_none_arg, __pyx_v_arg);
+0910:                 break
        goto __pyx_L7_break;
+0911:         is_typing = hasattr(non_none_arg, '__module__') and non_none_arg.__module__ == 'typing'
    __pyx_t_4 = __Pyx_HasAttr(__pyx_v_non_none_arg, __pyx_n_u_module); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(0, 911, __pyx_L1_error)
    if (__pyx_t_4) {
    } else {
      __pyx_t_2 = __pyx_t_4;
      goto __pyx_L10_bool_binop_done;
    }
    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_non_none_arg, __pyx_n_s_module); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 911, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_4 = (__Pyx_PyUnicode_Equals(__pyx_t_3, __pyx_n_u_typing, Py_EQ)); if (unlikely((__pyx_t_4 < 0))) __PYX_ERR(0, 911, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_2 = __pyx_t_4;
    __pyx_L10_bool_binop_done:;
    __pyx_v_is_typing = __pyx_t_2;
 0912: 
+0913:         if non_none_arg is not None and is_typing is True:
    __pyx_t_4 = (__pyx_v_non_none_arg != Py_None);
    if (__pyx_t_4) {
    } else {
      __pyx_t_2 = __pyx_t_4;
      goto __pyx_L13_bool_binop_done;
    }
    __pyx_t_4 = (__pyx_v_is_typing == 1);
    __pyx_t_2 = __pyx_t_4;
    __pyx_L13_bool_binop_done:;
    if (__pyx_t_2) {
/* … */
      goto __pyx_L12;
    }
 0914:             # Invoke the parse_typing_type
+0915:             field.args = get_args(non_none_arg)
      __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_get_args); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 915, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_7 = NULL;
      __pyx_t_8 = 0;
      #if CYTHON_UNPACK_METHODS
      if (unlikely(PyMethod_Check(__pyx_t_1))) {
        __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_1);
        if (likely(__pyx_t_7)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
          __Pyx_INCREF(__pyx_t_7);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_1, function);
          __pyx_t_8 = 1;
        }
      }
      #endif
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_v_non_none_arg};
        __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_1, __pyx_callargs+1-__pyx_t_8, 1+__pyx_t_8);
        __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
        if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 915, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      }
      if (__Pyx_PyObject_SetAttrStr(__pyx_v_field, __pyx_n_s_args_2, __pyx_t_3) < 0) __PYX_ERR(0, 915, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+0916:             field.origin = get_origin(non_none_arg)
      __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_get_origin); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 916, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_7 = NULL;
      __pyx_t_8 = 0;
      #if CYTHON_UNPACK_METHODS
      if (unlikely(PyMethod_Check(__pyx_t_1))) {
        __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_1);
        if (likely(__pyx_t_7)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
          __Pyx_INCREF(__pyx_t_7);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_1, function);
          __pyx_t_8 = 1;
        }
      }
      #endif
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_v_non_none_arg};
        __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_1, __pyx_callargs+1-__pyx_t_8, 1+__pyx_t_8);
        __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
        if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 916, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      }
      if (__Pyx_PyObject_SetAttrStr(__pyx_v_field, __pyx_n_s_origin, __pyx_t_3) < 0) __PYX_ERR(0, 916, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+0917:             if isinstance(data, list):
      __pyx_t_2 = PyList_Check(__pyx_v_data); 
      if (__pyx_t_2) {
/* … */
      }
+0918:                 return _parse_typing(
        __Pyx_XDECREF(__pyx_r);
/* … */
        __pyx_t_9.__pyx_n = 2;
        __pyx_t_9.encoder = __pyx_v_encoder;
        __pyx_t_9.as_objects = Py_False;
        __pyx_t_3 = __pyx_f_9datamodel_10converters__parse_typing(__pyx_v_field, __pyx_v_non_none_arg, __pyx_v_data, &__pyx_t_9); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 918, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
        __pyx_r = __pyx_t_3;
        __pyx_t_3 = 0;
        goto __pyx_L0;
 0919:                     field,
 0920:                     non_none_arg,
 0921:                     data,
 0922:                     encoder,
 0923:                     False
 0924:                 )
 0925:         else:
+0926:             pass
    /*else*/ {
    }
    __pyx_L12:;
+0927:     for arg_type in targs:
  if (likely(PyList_CheckExact(__pyx_v_targs)) || PyTuple_CheckExact(__pyx_v_targs)) {
    __pyx_t_3 = __pyx_v_targs; __Pyx_INCREF(__pyx_t_3);
    __pyx_t_5 = 0;
    __pyx_t_6 = NULL;
  } else {
    __pyx_t_5 = -1; __pyx_t_3 = PyObject_GetIter(__pyx_v_targs); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 927, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_6 = __Pyx_PyObject_GetIterNextFunc(__pyx_t_3); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 927, __pyx_L1_error)
  }
  for (;;) {
    if (likely(!__pyx_t_6)) {
      if (likely(PyList_CheckExact(__pyx_t_3))) {
        {
          Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_t_3);
          #if !CYTHON_ASSUME_SAFE_MACROS
          if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 927, __pyx_L1_error)
          #endif
          if (__pyx_t_5 >= __pyx_temp) break;
        }
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_1 = PyList_GET_ITEM(__pyx_t_3, __pyx_t_5); __Pyx_INCREF(__pyx_t_1); __pyx_t_5++; if (unlikely((0 < 0))) __PYX_ERR(0, 927, __pyx_L1_error)
        #else
        __pyx_t_1 = __Pyx_PySequence_ITEM(__pyx_t_3, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 927, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        #endif
      } else {
        {
          Py_ssize_t __pyx_temp = __Pyx_PyTuple_GET_SIZE(__pyx_t_3);
          #if !CYTHON_ASSUME_SAFE_MACROS
          if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 927, __pyx_L1_error)
          #endif
          if (__pyx_t_5 >= __pyx_temp) break;
        }
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_1 = PyTuple_GET_ITEM(__pyx_t_3, __pyx_t_5); __Pyx_INCREF(__pyx_t_1); __pyx_t_5++; if (unlikely((0 < 0))) __PYX_ERR(0, 927, __pyx_L1_error)
        #else
        __pyx_t_1 = __Pyx_PySequence_ITEM(__pyx_t_3, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 927, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        #endif
      }
    } else {
      __pyx_t_1 = __pyx_t_6(__pyx_t_3);
      if (unlikely(!__pyx_t_1)) {
        PyObject* exc_type = PyErr_Occurred();
        if (exc_type) {
          if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
          else __PYX_ERR(0, 927, __pyx_L1_error)
        }
        break;
      }
      __Pyx_GOTREF(__pyx_t_1);
    }
    __Pyx_XDECREF_SET(__pyx_v_arg_type, __pyx_t_1);
    __pyx_t_1 = 0;
/* … */
    __pyx_L16_continue:;
  }
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 0928:         # Iterate over all subtypes of Union:
+0929:         subtype_origin = get_origin(arg_type)
    __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_get_origin); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 929, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __pyx_t_10 = NULL;
    __pyx_t_8 = 0;
    #if CYTHON_UNPACK_METHODS
    if (unlikely(PyMethod_Check(__pyx_t_7))) {
      __pyx_t_10 = PyMethod_GET_SELF(__pyx_t_7);
      if (likely(__pyx_t_10)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7);
        __Pyx_INCREF(__pyx_t_10);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_7, function);
        __pyx_t_8 = 1;
      }
    }
    #endif
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_10, __pyx_v_arg_type};
      __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_7, __pyx_callargs+1-__pyx_t_8, 1+__pyx_t_8);
      __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
      if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 929, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    }
    __Pyx_XDECREF_SET(__pyx_v_subtype_origin, __pyx_t_1);
    __pyx_t_1 = 0;
+0930:         try:
    {
      /*try:*/ {
/* … */
      }
      __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
      __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
      __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
      goto __pyx_L25_try_end;
      __pyx_L18_error:;
      __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
      __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
/* … */
      __pyx_L20_except_error:;
      __Pyx_XGIVEREF(__pyx_t_11);
      __Pyx_XGIVEREF(__pyx_t_12);
      __Pyx_XGIVEREF(__pyx_t_13);
      __Pyx_ExceptionReset(__pyx_t_11, __pyx_t_12, __pyx_t_13);
      goto __pyx_L1_error;
      __pyx_L24_try_continue:;
      __Pyx_XGIVEREF(__pyx_t_11);
      __Pyx_XGIVEREF(__pyx_t_12);
      __Pyx_XGIVEREF(__pyx_t_13);
      __Pyx_ExceptionReset(__pyx_t_11, __pyx_t_12, __pyx_t_13);
      goto __pyx_L16_continue;
      __pyx_L22_try_return:;
      __Pyx_XGIVEREF(__pyx_t_11);
      __Pyx_XGIVEREF(__pyx_t_12);
      __Pyx_XGIVEREF(__pyx_t_13);
      __Pyx_ExceptionReset(__pyx_t_11, __pyx_t_12, __pyx_t_13);
      goto __pyx_L0;
      __pyx_L19_exception_handled:;
      __Pyx_XGIVEREF(__pyx_t_11);
      __Pyx_XGIVEREF(__pyx_t_12);
      __Pyx_XGIVEREF(__pyx_t_13);
      __Pyx_ExceptionReset(__pyx_t_11, __pyx_t_12, __pyx_t_13);
      __pyx_L25_try_end:;
    }
+0931:             if subtype_origin is list or subtype_origin is tuple:
        __pyx_t_4 = (__pyx_v_subtype_origin == ((PyObject *)(&PyList_Type)));
        if (!__pyx_t_4) {
        } else {
          __pyx_t_2 = __pyx_t_4;
          goto __pyx_L27_bool_binop_done;
        }
        __pyx_t_4 = (__pyx_v_subtype_origin == ((PyObject *)(&PyTuple_Type)));
        __pyx_t_2 = __pyx_t_4;
        __pyx_L27_bool_binop_done:;
        if (__pyx_t_2) {
/* … */
        }
+0932:                 if isinstance(data, list):
          __pyx_t_2 = PyList_Check(__pyx_v_data); 
          if (__pyx_t_2) {
/* … */
          }
+0933:                     return _parse_list_type(field, arg_type, data, encoder, targs)
            __Pyx_XDECREF(__pyx_r);
            __pyx_t_1 = __pyx_f_9datamodel_10converters__parse_list_type(__pyx_v_field, __pyx_v_arg_type, __pyx_v_data, __pyx_v_encoder, __pyx_v_targs, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 933, __pyx_L18_error)
            __Pyx_GOTREF(__pyx_t_1);
            __pyx_r = __pyx_t_1;
            __pyx_t_1 = 0;
            __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
            goto __pyx_L22_try_return;
 0934:                 else:
+0935:                     error = f"Invalid type for {field_name}: Expected a list, got {type(data).__name__}"
          /*else*/ {
            __pyx_t_1 = PyTuple_New(4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 935, __pyx_L18_error)
            __Pyx_GOTREF(__pyx_t_1);
            __pyx_t_14 = 0;
            __pyx_t_15 = 127;
            __Pyx_INCREF(__pyx_kp_u_Invalid_type_for_2);
            __pyx_t_14 += 17;
            __Pyx_GIVEREF(__pyx_kp_u_Invalid_type_for_2);
            PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_kp_u_Invalid_type_for_2);
            __pyx_t_7 = __Pyx_PyUnicode_Unicode(__pyx_v_field_name); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 935, __pyx_L18_error)
            __Pyx_GOTREF(__pyx_t_7);
            __pyx_t_15 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_7) > __pyx_t_15) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_7) : __pyx_t_15;
            __pyx_t_14 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_7);
            __Pyx_GIVEREF(__pyx_t_7);
            PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_t_7);
            __pyx_t_7 = 0;
            __Pyx_INCREF(__pyx_kp_u_Expected_a_list_got);
            __pyx_t_14 += 23;
            __Pyx_GIVEREF(__pyx_kp_u_Expected_a_list_got);
            PyTuple_SET_ITEM(__pyx_t_1, 2, __pyx_kp_u_Expected_a_list_got);
            __pyx_t_7 = __Pyx_PyObject_GetAttrStr(((PyObject *)Py_TYPE(__pyx_v_data)), __pyx_n_s_name); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 935, __pyx_L18_error)
            __Pyx_GOTREF(__pyx_t_7);
            __pyx_t_10 = __Pyx_PyObject_FormatSimple(__pyx_t_7, __pyx_empty_unicode); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 935, __pyx_L18_error)
            __Pyx_GOTREF(__pyx_t_10);
            __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
            __pyx_t_15 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_10) > __pyx_t_15) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_10) : __pyx_t_15;
            __pyx_t_14 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_10);
            __Pyx_GIVEREF(__pyx_t_10);
            PyTuple_SET_ITEM(__pyx_t_1, 3, __pyx_t_10);
            __pyx_t_10 = 0;
            __pyx_t_10 = __Pyx_PyUnicode_Join(__pyx_t_1, 4, __pyx_t_14, __pyx_t_15); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 935, __pyx_L18_error)
            __Pyx_GOTREF(__pyx_t_10);
            __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
            __Pyx_DECREF_SET(__pyx_v_error, ((PyObject*)__pyx_t_10));
            __pyx_t_10 = 0;
+0936:                     continue
            goto __pyx_L24_try_continue;
          }
+0937:             elif subtype_origin is dict:
        __pyx_t_2 = (__pyx_v_subtype_origin == ((PyObject *)(&PyDict_Type)));
        if (__pyx_t_2) {
/* … */
        }
+0938:                 if isinstance(data, dict):
          __pyx_t_2 = PyDict_Check(__pyx_v_data); 
          if (__pyx_t_2) {
/* … */
          }
+0939:                     return _parse_dict_type(field, arg_type, data, encoder, targs)
            __Pyx_XDECREF(__pyx_r);
            __pyx_t_10 = __pyx_f_9datamodel_10converters__parse_dict_type(__pyx_v_field, __pyx_v_arg_type, __pyx_v_data, __pyx_v_encoder, __pyx_v_targs); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 939, __pyx_L18_error)
            __Pyx_GOTREF(__pyx_t_10);
            __pyx_r = __pyx_t_10;
            __pyx_t_10 = 0;
            __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
            goto __pyx_L22_try_return;
 0940:                 else:
+0941:                     error = f"Invalid type for {field_name} Expected a dict, got {type(data).__name__}"
          /*else*/ {
            __pyx_t_10 = PyTuple_New(4); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 941, __pyx_L18_error)
            __Pyx_GOTREF(__pyx_t_10);
            __pyx_t_14 = 0;
            __pyx_t_15 = 127;
            __Pyx_INCREF(__pyx_kp_u_Invalid_type_for_2);
            __pyx_t_14 += 17;
            __Pyx_GIVEREF(__pyx_kp_u_Invalid_type_for_2);
            PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_kp_u_Invalid_type_for_2);
            __pyx_t_1 = __Pyx_PyUnicode_Unicode(__pyx_v_field_name); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 941, __pyx_L18_error)
            __Pyx_GOTREF(__pyx_t_1);
            __pyx_t_15 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_1) > __pyx_t_15) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_1) : __pyx_t_15;
            __pyx_t_14 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_1);
            __Pyx_GIVEREF(__pyx_t_1);
            PyTuple_SET_ITEM(__pyx_t_10, 1, __pyx_t_1);
            __pyx_t_1 = 0;
            __Pyx_INCREF(__pyx_kp_u_Expected_a_dict_got);
            __pyx_t_14 += 22;
            __Pyx_GIVEREF(__pyx_kp_u_Expected_a_dict_got);
            PyTuple_SET_ITEM(__pyx_t_10, 2, __pyx_kp_u_Expected_a_dict_got);
            __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)Py_TYPE(__pyx_v_data)), __pyx_n_s_name); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 941, __pyx_L18_error)
            __Pyx_GOTREF(__pyx_t_1);
            __pyx_t_7 = __Pyx_PyObject_FormatSimple(__pyx_t_1, __pyx_empty_unicode); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 941, __pyx_L18_error)
            __Pyx_GOTREF(__pyx_t_7);
            __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
            __pyx_t_15 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_7) > __pyx_t_15) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_7) : __pyx_t_15;
            __pyx_t_14 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_7);
            __Pyx_GIVEREF(__pyx_t_7);
            PyTuple_SET_ITEM(__pyx_t_10, 3, __pyx_t_7);
            __pyx_t_7 = 0;
            __pyx_t_7 = __Pyx_PyUnicode_Join(__pyx_t_10, 4, __pyx_t_14, __pyx_t_15); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 941, __pyx_L18_error)
            __Pyx_GOTREF(__pyx_t_7);
            __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
            __Pyx_DECREF_SET(__pyx_v_error, ((PyObject*)__pyx_t_7));
            __pyx_t_7 = 0;
+0942:                     continue
            goto __pyx_L24_try_continue;
          }
+0943:             elif arg_type is list:
        __pyx_t_2 = (__pyx_v_arg_type == ((PyObject *)(&PyList_Type)));
        if (__pyx_t_2) {
/* … */
          goto __pyx_L26;
        }
+0944:                 if isinstance(data, list):
          __pyx_t_2 = PyList_Check(__pyx_v_data); 
          if (__pyx_t_2) {
/* … */
            goto __pyx_L31;
          }
+0945:                     if arg_type is str:
            __pyx_t_2 = (__pyx_v_arg_type == ((PyObject *)(&PyUnicode_Type)));
            if (__pyx_t_2) {
/* … */
              goto __pyx_L32;
            }
 0946:                         # Ensure all elements in the list are strings
+0947:                         if all(isinstance(item, str) for item in data):
static PyObject *__pyx_pf_9datamodel_10converters_17_parse_union_type_genexpr(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_genexpr_arg_0) {
  struct __pyx_obj_9datamodel_10converters___pyx_scope_struct_4_genexpr *__pyx_cur_scope;
  PyObject *__pyx_r = NULL;
  __pyx_cur_scope = (struct __pyx_obj_9datamodel_10converters___pyx_scope_struct_4_genexpr *)__pyx_tp_new_9datamodel_10converters___pyx_scope_struct_4_genexpr(__pyx_ptype_9datamodel_10converters___pyx_scope_struct_4_genexpr, __pyx_empty_tuple, NULL);
  if (unlikely(!__pyx_cur_scope)) {
    __pyx_cur_scope = ((struct __pyx_obj_9datamodel_10converters___pyx_scope_struct_4_genexpr *)Py_None);
    __Pyx_INCREF(Py_None);
    __PYX_ERR(0, 947, __pyx_L1_error)
  } else {
    __Pyx_GOTREF((PyObject *)__pyx_cur_scope);
  }
  __pyx_cur_scope->__pyx_genexpr_arg_0 = __pyx_genexpr_arg_0;
  __Pyx_INCREF(__pyx_cur_scope->__pyx_genexpr_arg_0);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_genexpr_arg_0);
  {
    __pyx_CoroutineObject *gen = __Pyx_Generator_New((__pyx_coroutine_body_t) __pyx_gb_9datamodel_10converters_17_parse_union_type_2generator3, NULL, (PyObject *) __pyx_cur_scope, __pyx_n_s_genexpr, __pyx_n_s_parse_union_type_locals_genexpr, __pyx_n_s_datamodel_converters); if (unlikely(!gen)) __PYX_ERR(0, 947, __pyx_L1_error)
    __Pyx_DECREF(__pyx_cur_scope);
    __Pyx_RefNannyFinishContext();
    return (PyObject *) gen;
  }

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

static PyObject *__pyx_gb_9datamodel_10converters_17_parse_union_type_2generator3(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value) /* generator body */
{
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("genexpr", 0);
  __pyx_L3_first_run:;
  if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 947, __pyx_L1_error)
  if (unlikely(!__pyx_cur_scope->__pyx_genexpr_arg_0)) { __Pyx_RaiseUnboundLocalError(".0"); __PYX_ERR(0, 947, __pyx_L1_error) }
  if (likely(PyList_CheckExact(__pyx_cur_scope->__pyx_genexpr_arg_0)) || PyTuple_CheckExact(__pyx_cur_scope->__pyx_genexpr_arg_0)) {
    __pyx_t_1 = __pyx_cur_scope->__pyx_genexpr_arg_0; __Pyx_INCREF(__pyx_t_1);
    __pyx_t_2 = 0;
    __pyx_t_3 = NULL;
  } else {
    __pyx_t_2 = -1; __pyx_t_1 = PyObject_GetIter(__pyx_cur_scope->__pyx_genexpr_arg_0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 947, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_3 = __Pyx_PyObject_GetIterNextFunc(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 947, __pyx_L1_error)
  }
  for (;;) {
    if (likely(!__pyx_t_3)) {
      if (likely(PyList_CheckExact(__pyx_t_1))) {
        {
          Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_t_1);
          #if !CYTHON_ASSUME_SAFE_MACROS
          if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 947, __pyx_L1_error)
          #endif
          if (__pyx_t_2 >= __pyx_temp) break;
        }
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_4 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_2); __Pyx_INCREF(__pyx_t_4); __pyx_t_2++; if (unlikely((0 < 0))) __PYX_ERR(0, 947, __pyx_L1_error)
        #else
        __pyx_t_4 = __Pyx_PySequence_ITEM(__pyx_t_1, __pyx_t_2); __pyx_t_2++; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 947, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_4);
        #endif
      } else {
        {
          Py_ssize_t __pyx_temp = __Pyx_PyTuple_GET_SIZE(__pyx_t_1);
          #if !CYTHON_ASSUME_SAFE_MACROS
          if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 947, __pyx_L1_error)
          #endif
          if (__pyx_t_2 >= __pyx_temp) break;
        }
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_4 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_2); __Pyx_INCREF(__pyx_t_4); __pyx_t_2++; if (unlikely((0 < 0))) __PYX_ERR(0, 947, __pyx_L1_error)
        #else
        __pyx_t_4 = __Pyx_PySequence_ITEM(__pyx_t_1, __pyx_t_2); __pyx_t_2++; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 947, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_4);
        #endif
      }
    } else {
      __pyx_t_4 = __pyx_t_3(__pyx_t_1);
      if (unlikely(!__pyx_t_4)) {
        PyObject* exc_type = PyErr_Occurred();
        if (exc_type) {
          if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
          else __PYX_ERR(0, 947, __pyx_L1_error)
        }
        break;
      }
      __Pyx_GOTREF(__pyx_t_4);
    }
    __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_item);
    __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_item, __pyx_t_4);
    __Pyx_GIVEREF(__pyx_t_4);
    __pyx_t_4 = 0;
    __pyx_t_5 = PyUnicode_Check(__pyx_cur_scope->__pyx_v_item); 
    __pyx_t_6 = (!__pyx_t_5);
    if (__pyx_t_6) {
      __Pyx_XDECREF(__pyx_r);
      __Pyx_INCREF(Py_False);
      __pyx_r = Py_False;
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      goto __pyx_L0;
    }
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  /*else*/ {
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(Py_True);
    __pyx_r = Py_True;
    goto __pyx_L0;
  }
  CYTHON_MAYBE_UNUSED_VAR(__pyx_cur_scope);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_Generator_Replace_StopIteration(0);
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("genexpr", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  #if !CYTHON_USE_EXC_INFO_STACK
  __Pyx_Coroutine_ResetAndClearException(__pyx_generator);
  #endif
  __pyx_generator->resume_label = -1;
  __Pyx_Coroutine_clear((PyObject*)__pyx_generator);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
              __pyx_t_7 = __pyx_pf_9datamodel_10converters_17_parse_union_type_genexpr(NULL, __pyx_v_data); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 947, __pyx_L18_error)
              __Pyx_GOTREF(__pyx_t_7);
              __pyx_t_10 = __Pyx_Generator_Next(__pyx_t_7); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 947, __pyx_L18_error)
              __Pyx_GOTREF(__pyx_t_10);
              __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
              __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_10); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 947, __pyx_L18_error)
              __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
              if (__pyx_t_2) {
/* … */
              }
+0948:                             return data
                __Pyx_XDECREF(__pyx_r);
                __Pyx_INCREF(__pyx_v_data);
                __pyx_r = __pyx_v_data;
                __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
                goto __pyx_L22_try_return;
 0949:                     else:
+0950:                         return _parse_list_type(field, arg_type, data, encoder, targs)
            /*else*/ {
              __Pyx_XDECREF(__pyx_r);
              __pyx_t_10 = __pyx_f_9datamodel_10converters__parse_list_type(__pyx_v_field, __pyx_v_arg_type, __pyx_v_data, __pyx_v_encoder, __pyx_v_targs, NULL); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 950, __pyx_L18_error)
              __Pyx_GOTREF(__pyx_t_10);
              __pyx_r = __pyx_t_10;
              __pyx_t_10 = 0;
              __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
              goto __pyx_L22_try_return;
            }
            __pyx_L32:;
 0951:                 else:
+0952:                     error = f"Invalid type for {field_name}: Expected a list, got {type(data).__name__}"
          /*else*/ {
            __pyx_t_10 = PyTuple_New(4); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 952, __pyx_L18_error)
            __Pyx_GOTREF(__pyx_t_10);
            __pyx_t_14 = 0;
            __pyx_t_15 = 127;
            __Pyx_INCREF(__pyx_kp_u_Invalid_type_for_2);
            __pyx_t_14 += 17;
            __Pyx_GIVEREF(__pyx_kp_u_Invalid_type_for_2);
            PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_kp_u_Invalid_type_for_2);
            __pyx_t_7 = __Pyx_PyUnicode_Unicode(__pyx_v_field_name); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 952, __pyx_L18_error)
            __Pyx_GOTREF(__pyx_t_7);
            __pyx_t_15 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_7) > __pyx_t_15) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_7) : __pyx_t_15;
            __pyx_t_14 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_7);
            __Pyx_GIVEREF(__pyx_t_7);
            PyTuple_SET_ITEM(__pyx_t_10, 1, __pyx_t_7);
            __pyx_t_7 = 0;
            __Pyx_INCREF(__pyx_kp_u_Expected_a_list_got);
            __pyx_t_14 += 23;
            __Pyx_GIVEREF(__pyx_kp_u_Expected_a_list_got);
            PyTuple_SET_ITEM(__pyx_t_10, 2, __pyx_kp_u_Expected_a_list_got);
            __pyx_t_7 = __Pyx_PyObject_GetAttrStr(((PyObject *)Py_TYPE(__pyx_v_data)), __pyx_n_s_name); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 952, __pyx_L18_error)
            __Pyx_GOTREF(__pyx_t_7);
            __pyx_t_1 = __Pyx_PyObject_FormatSimple(__pyx_t_7, __pyx_empty_unicode); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 952, __pyx_L18_error)
            __Pyx_GOTREF(__pyx_t_1);
            __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
            __pyx_t_15 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_1) > __pyx_t_15) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_1) : __pyx_t_15;
            __pyx_t_14 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_1);
            __Pyx_GIVEREF(__pyx_t_1);
            PyTuple_SET_ITEM(__pyx_t_10, 3, __pyx_t_1);
            __pyx_t_1 = 0;
            __pyx_t_1 = __Pyx_PyUnicode_Join(__pyx_t_10, 4, __pyx_t_14, __pyx_t_15); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 952, __pyx_L18_error)
            __Pyx_GOTREF(__pyx_t_1);
            __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
            __Pyx_DECREF_SET(__pyx_v_error, ((PyObject*)__pyx_t_1));
            __pyx_t_1 = 0;
+0953:                     continue
            goto __pyx_L24_try_continue;
          }
          __pyx_L31:;
+0954:             elif arg_type is dict:
        __pyx_t_2 = (__pyx_v_arg_type == ((PyObject *)(&PyDict_Type)));
        if (__pyx_t_2) {
/* … */
        }
+0955:                 if isinstance(data, dict):
          __pyx_t_2 = PyDict_Check(__pyx_v_data); 
          if (__pyx_t_2) {
/* … */
          }
+0956:                     return _parse_dict_type(field, arg_type, data, encoder, targs)
            __Pyx_XDECREF(__pyx_r);
            __pyx_t_1 = __pyx_f_9datamodel_10converters__parse_dict_type(__pyx_v_field, __pyx_v_arg_type, __pyx_v_data, __pyx_v_encoder, __pyx_v_targs); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 956, __pyx_L18_error)
            __Pyx_GOTREF(__pyx_t_1);
            __pyx_r = __pyx_t_1;
            __pyx_t_1 = 0;
            __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
            goto __pyx_L22_try_return;
 0957:                 else:
+0958:                     error = f"Invalid type for {field_name} Expected a dict, got {type(data).__name__}"
          /*else*/ {
            __pyx_t_1 = PyTuple_New(4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 958, __pyx_L18_error)
            __Pyx_GOTREF(__pyx_t_1);
            __pyx_t_14 = 0;
            __pyx_t_15 = 127;
            __Pyx_INCREF(__pyx_kp_u_Invalid_type_for_2);
            __pyx_t_14 += 17;
            __Pyx_GIVEREF(__pyx_kp_u_Invalid_type_for_2);
            PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_kp_u_Invalid_type_for_2);
            __pyx_t_10 = __Pyx_PyUnicode_Unicode(__pyx_v_field_name); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 958, __pyx_L18_error)
            __Pyx_GOTREF(__pyx_t_10);
            __pyx_t_15 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_10) > __pyx_t_15) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_10) : __pyx_t_15;
            __pyx_t_14 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_10);
            __Pyx_GIVEREF(__pyx_t_10);
            PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_t_10);
            __pyx_t_10 = 0;
            __Pyx_INCREF(__pyx_kp_u_Expected_a_dict_got);
            __pyx_t_14 += 22;
            __Pyx_GIVEREF(__pyx_kp_u_Expected_a_dict_got);
            PyTuple_SET_ITEM(__pyx_t_1, 2, __pyx_kp_u_Expected_a_dict_got);
            __pyx_t_10 = __Pyx_PyObject_GetAttrStr(((PyObject *)Py_TYPE(__pyx_v_data)), __pyx_n_s_name); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 958, __pyx_L18_error)
            __Pyx_GOTREF(__pyx_t_10);
            __pyx_t_7 = __Pyx_PyObject_FormatSimple(__pyx_t_10, __pyx_empty_unicode); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 958, __pyx_L18_error)
            __Pyx_GOTREF(__pyx_t_7);
            __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
            __pyx_t_15 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_7) > __pyx_t_15) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_7) : __pyx_t_15;
            __pyx_t_14 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_7);
            __Pyx_GIVEREF(__pyx_t_7);
            PyTuple_SET_ITEM(__pyx_t_1, 3, __pyx_t_7);
            __pyx_t_7 = 0;
            __pyx_t_7 = __Pyx_PyUnicode_Join(__pyx_t_1, 4, __pyx_t_14, __pyx_t_15); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 958, __pyx_L18_error)
            __Pyx_GOTREF(__pyx_t_7);
            __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
            __Pyx_DECREF_SET(__pyx_v_error, ((PyObject*)__pyx_t_7));
            __pyx_t_7 = 0;
+0959:                     continue
            goto __pyx_L24_try_continue;
          }
+0960:             elif subtype_origin is None:
        __pyx_t_2 = (__pyx_v_subtype_origin == Py_None);
        if (__pyx_t_2) {
/* … */
        }
+0961:                 if isinstance(data, arg_type):
          __pyx_t_2 = PyObject_IsInstance(__pyx_v_data, __pyx_v_arg_type); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 961, __pyx_L18_error)
          if (__pyx_t_2) {
/* … */
          }
+0962:                     return data
            __Pyx_XDECREF(__pyx_r);
            __Pyx_INCREF(__pyx_v_data);
            __pyx_r = __pyx_v_data;
            __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
            goto __pyx_L22_try_return;
 0963:                 else:
 0964:                     # Not matching => record an error
+0965:                     error = f"Invalid type for {field_name}, Data {data!r} is not an instance of {arg_type}"
          /*else*/ {
            __pyx_t_7 = PyTuple_New(6); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 965, __pyx_L18_error)
            __Pyx_GOTREF(__pyx_t_7);
            __pyx_t_14 = 0;
            __pyx_t_15 = 127;
            __Pyx_INCREF(__pyx_kp_u_Invalid_type_for_2);
            __pyx_t_14 += 17;
            __Pyx_GIVEREF(__pyx_kp_u_Invalid_type_for_2);
            PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_kp_u_Invalid_type_for_2);
            __pyx_t_1 = __Pyx_PyUnicode_Unicode(__pyx_v_field_name); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 965, __pyx_L18_error)
            __Pyx_GOTREF(__pyx_t_1);
            __pyx_t_15 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_1) > __pyx_t_15) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_1) : __pyx_t_15;
            __pyx_t_14 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_1);
            __Pyx_GIVEREF(__pyx_t_1);
            PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_t_1);
            __pyx_t_1 = 0;
            __Pyx_INCREF(__pyx_kp_u_Data);
            __pyx_t_14 += 7;
            __Pyx_GIVEREF(__pyx_kp_u_Data);
            PyTuple_SET_ITEM(__pyx_t_7, 2, __pyx_kp_u_Data);
            __pyx_t_1 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_v_data), __pyx_empty_unicode); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 965, __pyx_L18_error)
            __Pyx_GOTREF(__pyx_t_1);
            __pyx_t_15 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_1) > __pyx_t_15) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_1) : __pyx_t_15;
            __pyx_t_14 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_1);
            __Pyx_GIVEREF(__pyx_t_1);
            PyTuple_SET_ITEM(__pyx_t_7, 3, __pyx_t_1);
            __pyx_t_1 = 0;
            __Pyx_INCREF(__pyx_kp_u_is_not_an_instance_of);
            __pyx_t_14 += 23;
            __Pyx_GIVEREF(__pyx_kp_u_is_not_an_instance_of);
            PyTuple_SET_ITEM(__pyx_t_7, 4, __pyx_kp_u_is_not_an_instance_of);
            __pyx_t_1 = __Pyx_PyObject_FormatSimple(__pyx_v_arg_type, __pyx_empty_unicode); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 965, __pyx_L18_error)
            __Pyx_GOTREF(__pyx_t_1);
            __pyx_t_15 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_1) > __pyx_t_15) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_1) : __pyx_t_15;
            __pyx_t_14 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_1);
            __Pyx_GIVEREF(__pyx_t_1);
            PyTuple_SET_ITEM(__pyx_t_7, 5, __pyx_t_1);
            __pyx_t_1 = 0;
            __pyx_t_1 = __Pyx_PyUnicode_Join(__pyx_t_7, 6, __pyx_t_14, __pyx_t_15); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 965, __pyx_L18_error)
            __Pyx_GOTREF(__pyx_t_1);
            __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
            __Pyx_DECREF_SET(__pyx_v_error, ((PyObject*)__pyx_t_1));
            __pyx_t_1 = 0;
+0966:                     continue
            goto __pyx_L24_try_continue;
          }
 0967:             else:
 0968:                 # fallback to builtin parse
+0969:                 return _parse_typing(
        /*else*/ {
          __Pyx_XDECREF(__pyx_r);
/* … */
          __pyx_t_9.__pyx_n = 2;
          __pyx_t_9.encoder = __pyx_v_encoder;
          __pyx_t_9.as_objects = Py_False;
          __pyx_t_1 = __pyx_f_9datamodel_10converters__parse_typing(__pyx_v_field, __pyx_v_arg_type, __pyx_v_data, &__pyx_t_9); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 969, __pyx_L18_error)
          __Pyx_GOTREF(__pyx_t_1);
          __pyx_r = __pyx_t_1;
          __pyx_t_1 = 0;
          __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
          goto __pyx_L22_try_return;
        }
        __pyx_L26:;
 0970:                     field,
 0971:                     arg_type,
 0972:                     data,
 0973:                     encoder,
 0974:                     False
 0975:                 )
+0976:         except ValueError as exc:
      __pyx_t_16 = __Pyx_PyErr_ExceptionMatches(__pyx_builtin_ValueError);
      if (__pyx_t_16) {
        __Pyx_AddTraceback("datamodel.converters._parse_union_type", __pyx_clineno, __pyx_lineno, __pyx_filename);
        if (__Pyx_GetException(&__pyx_t_1, &__pyx_t_7, &__pyx_t_10) < 0) __PYX_ERR(0, 976, __pyx_L20_except_error)
        __Pyx_XGOTREF(__pyx_t_1);
        __Pyx_XGOTREF(__pyx_t_7);
        __Pyx_XGOTREF(__pyx_t_10);
        __Pyx_INCREF(__pyx_t_7);
        __pyx_v_exc = __pyx_t_7;
        /*try:*/ {
/* … */
        /*finally:*/ {
          /*normal exit:*/{
            __Pyx_DECREF(__pyx_v_exc); __pyx_v_exc = 0;
            goto __pyx_L42;
          }
          __pyx_L41_error:;
          /*exception exit:*/{
            __Pyx_PyThreadState_declare
            __Pyx_PyThreadState_assign
            __pyx_t_22 = 0; __pyx_t_23 = 0; __pyx_t_24 = 0; __pyx_t_25 = 0; __pyx_t_26 = 0; __pyx_t_27 = 0;
            __Pyx_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;
            if (PY_MAJOR_VERSION >= 3) __Pyx_ExceptionSwap(&__pyx_t_25, &__pyx_t_26, &__pyx_t_27);
            if ((PY_MAJOR_VERSION < 3) || unlikely(__Pyx_GetException(&__pyx_t_22, &__pyx_t_23, &__pyx_t_24) < 0)) __Pyx_ErrFetch(&__pyx_t_22, &__pyx_t_23, &__pyx_t_24);
            __Pyx_XGOTREF(__pyx_t_22);
            __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_t_16 = __pyx_lineno; __pyx_t_20 = __pyx_clineno; __pyx_t_21 = __pyx_filename;
            {
              __Pyx_DECREF(__pyx_v_exc); __pyx_v_exc = 0;
            }
            if (PY_MAJOR_VERSION >= 3) {
              __Pyx_XGIVEREF(__pyx_t_25);
              __Pyx_XGIVEREF(__pyx_t_26);
              __Pyx_XGIVEREF(__pyx_t_27);
              __Pyx_ExceptionReset(__pyx_t_25, __pyx_t_26, __pyx_t_27);
            }
            __Pyx_XGIVEREF(__pyx_t_22);
            __Pyx_XGIVEREF(__pyx_t_23);
            __Pyx_XGIVEREF(__pyx_t_24);
            __Pyx_ErrRestore(__pyx_t_22, __pyx_t_23, __pyx_t_24);
            __pyx_t_22 = 0; __pyx_t_23 = 0; __pyx_t_24 = 0; __pyx_t_25 = 0; __pyx_t_26 = 0; __pyx_t_27 = 0;
            __pyx_lineno = __pyx_t_16; __pyx_clineno = __pyx_t_20; __pyx_filename = __pyx_t_21;
            goto __pyx_L20_except_error;
          }
          __pyx_L42:;
        }
        __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
        __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
        __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
        goto __pyx_L19_exception_handled;
      }
+0977:             error = f"{field.name}: {exc}"
          __pyx_t_17 = PyTuple_New(3); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 977, __pyx_L41_error)
          __Pyx_GOTREF(__pyx_t_17);
          __pyx_t_14 = 0;
          __pyx_t_15 = 127;
          __pyx_t_18 = __Pyx_PyObject_GetAttrStr(__pyx_v_field, __pyx_n_s_name_2); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 977, __pyx_L41_error)
          __Pyx_GOTREF(__pyx_t_18);
          __pyx_t_19 = __Pyx_PyObject_FormatSimple(__pyx_t_18, __pyx_empty_unicode); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 977, __pyx_L41_error)
          __Pyx_GOTREF(__pyx_t_19);
          __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
          __pyx_t_15 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_19) > __pyx_t_15) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_19) : __pyx_t_15;
          __pyx_t_14 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_19);
          __Pyx_GIVEREF(__pyx_t_19);
          PyTuple_SET_ITEM(__pyx_t_17, 0, __pyx_t_19);
          __pyx_t_19 = 0;
          __Pyx_INCREF(__pyx_kp_u__7);
          __pyx_t_14 += 2;
          __Pyx_GIVEREF(__pyx_kp_u__7);
          PyTuple_SET_ITEM(__pyx_t_17, 1, __pyx_kp_u__7);
          __pyx_t_19 = __Pyx_PyObject_FormatSimple(__pyx_v_exc, __pyx_empty_unicode); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 977, __pyx_L41_error)
          __Pyx_GOTREF(__pyx_t_19);
          __pyx_t_15 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_19) > __pyx_t_15) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_19) : __pyx_t_15;
          __pyx_t_14 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_19);
          __Pyx_GIVEREF(__pyx_t_19);
          PyTuple_SET_ITEM(__pyx_t_17, 2, __pyx_t_19);
          __pyx_t_19 = 0;
          __pyx_t_19 = __Pyx_PyUnicode_Join(__pyx_t_17, 3, __pyx_t_14, __pyx_t_15); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 977, __pyx_L41_error)
          __Pyx_GOTREF(__pyx_t_19);
          __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
          __Pyx_DECREF_SET(__pyx_v_error, ((PyObject*)__pyx_t_19));
          __pyx_t_19 = 0;
        }
+0978:         except Exception as exc:
      __pyx_t_20 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(&((PyTypeObject*)PyExc_Exception)[0])));
      if (__pyx_t_20) {
        __Pyx_AddTraceback("datamodel.converters._parse_union_type", __pyx_clineno, __pyx_lineno, __pyx_filename);
        if (__Pyx_GetException(&__pyx_t_10, &__pyx_t_7, &__pyx_t_1) < 0) __PYX_ERR(0, 978, __pyx_L20_except_error)
        __Pyx_XGOTREF(__pyx_t_10);
        __Pyx_XGOTREF(__pyx_t_7);
        __Pyx_XGOTREF(__pyx_t_1);
        __Pyx_INCREF(__pyx_t_7);
        __pyx_v_exc = __pyx_t_7;
        /*try:*/ {
/* … */
        /*finally:*/ {
          /*normal exit:*/{
            __Pyx_DECREF(__pyx_v_exc); __pyx_v_exc = 0;
            goto __pyx_L53;
          }
          __pyx_L52_error:;
          /*exception exit:*/{
            __Pyx_PyThreadState_declare
            __Pyx_PyThreadState_assign
            __pyx_t_27 = 0; __pyx_t_26 = 0; __pyx_t_25 = 0; __pyx_t_24 = 0; __pyx_t_23 = 0; __pyx_t_22 = 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;
            if (PY_MAJOR_VERSION >= 3) __Pyx_ExceptionSwap(&__pyx_t_24, &__pyx_t_23, &__pyx_t_22);
            if ((PY_MAJOR_VERSION < 3) || unlikely(__Pyx_GetException(&__pyx_t_27, &__pyx_t_26, &__pyx_t_25) < 0)) __Pyx_ErrFetch(&__pyx_t_27, &__pyx_t_26, &__pyx_t_25);
            __Pyx_XGOTREF(__pyx_t_27);
            __Pyx_XGOTREF(__pyx_t_26);
            __Pyx_XGOTREF(__pyx_t_25);
            __Pyx_XGOTREF(__pyx_t_24);
            __Pyx_XGOTREF(__pyx_t_23);
            __Pyx_XGOTREF(__pyx_t_22);
            __pyx_t_20 = __pyx_lineno; __pyx_t_16 = __pyx_clineno; __pyx_t_28 = __pyx_filename;
            {
              __Pyx_DECREF(__pyx_v_exc); __pyx_v_exc = 0;
            }
            if (PY_MAJOR_VERSION >= 3) {
              __Pyx_XGIVEREF(__pyx_t_24);
              __Pyx_XGIVEREF(__pyx_t_23);
              __Pyx_XGIVEREF(__pyx_t_22);
              __Pyx_ExceptionReset(__pyx_t_24, __pyx_t_23, __pyx_t_22);
            }
            __Pyx_XGIVEREF(__pyx_t_27);
            __Pyx_XGIVEREF(__pyx_t_26);
            __Pyx_XGIVEREF(__pyx_t_25);
            __Pyx_ErrRestore(__pyx_t_27, __pyx_t_26, __pyx_t_25);
            __pyx_t_27 = 0; __pyx_t_26 = 0; __pyx_t_25 = 0; __pyx_t_24 = 0; __pyx_t_23 = 0; __pyx_t_22 = 0;
            __pyx_lineno = __pyx_t_20; __pyx_clineno = __pyx_t_16; __pyx_filename = __pyx_t_28;
            goto __pyx_L20_except_error;
          }
          __pyx_L53:;
        }
        __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
        __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
        __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
        goto __pyx_L19_exception_handled;
      }
      goto __pyx_L20_except_error;
+0979:             error = f"Parse Error on {field.name}, {arg_type}: {exc}"
          __pyx_t_19 = PyTuple_New(6); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 979, __pyx_L52_error)
          __Pyx_GOTREF(__pyx_t_19);
          __pyx_t_14 = 0;
          __pyx_t_15 = 127;
          __Pyx_INCREF(__pyx_kp_u_Parse_Error_on);
          __pyx_t_14 += 15;
          __Pyx_GIVEREF(__pyx_kp_u_Parse_Error_on);
          PyTuple_SET_ITEM(__pyx_t_19, 0, __pyx_kp_u_Parse_Error_on);
          __pyx_t_17 = __Pyx_PyObject_GetAttrStr(__pyx_v_field, __pyx_n_s_name_2); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 979, __pyx_L52_error)
          __Pyx_GOTREF(__pyx_t_17);
          __pyx_t_18 = __Pyx_PyObject_FormatSimple(__pyx_t_17, __pyx_empty_unicode); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 979, __pyx_L52_error)
          __Pyx_GOTREF(__pyx_t_18);
          __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
          __pyx_t_15 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_18) > __pyx_t_15) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_18) : __pyx_t_15;
          __pyx_t_14 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_18);
          __Pyx_GIVEREF(__pyx_t_18);
          PyTuple_SET_ITEM(__pyx_t_19, 1, __pyx_t_18);
          __pyx_t_18 = 0;
          __Pyx_INCREF(__pyx_kp_u__10);
          __pyx_t_14 += 2;
          __Pyx_GIVEREF(__pyx_kp_u__10);
          PyTuple_SET_ITEM(__pyx_t_19, 2, __pyx_kp_u__10);
          __pyx_t_18 = __Pyx_PyObject_FormatSimple(__pyx_v_arg_type, __pyx_empty_unicode); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 979, __pyx_L52_error)
          __Pyx_GOTREF(__pyx_t_18);
          __pyx_t_15 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_18) > __pyx_t_15) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_18) : __pyx_t_15;
          __pyx_t_14 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_18);
          __Pyx_GIVEREF(__pyx_t_18);
          PyTuple_SET_ITEM(__pyx_t_19, 3, __pyx_t_18);
          __pyx_t_18 = 0;
          __Pyx_INCREF(__pyx_kp_u__7);
          __pyx_t_14 += 2;
          __Pyx_GIVEREF(__pyx_kp_u__7);
          PyTuple_SET_ITEM(__pyx_t_19, 4, __pyx_kp_u__7);
          __pyx_t_18 = __Pyx_PyObject_FormatSimple(__pyx_v_exc, __pyx_empty_unicode); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 979, __pyx_L52_error)
          __Pyx_GOTREF(__pyx_t_18);
          __pyx_t_15 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_18) > __pyx_t_15) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_18) : __pyx_t_15;
          __pyx_t_14 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_18);
          __Pyx_GIVEREF(__pyx_t_18);
          PyTuple_SET_ITEM(__pyx_t_19, 5, __pyx_t_18);
          __pyx_t_18 = 0;
          __pyx_t_18 = __Pyx_PyUnicode_Join(__pyx_t_19, 6, __pyx_t_14, __pyx_t_15); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 979, __pyx_L52_error)
          __Pyx_GOTREF(__pyx_t_18);
          __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
          __Pyx_DECREF_SET(__pyx_v_error, ((PyObject*)__pyx_t_18));
          __pyx_t_18 = 0;
        }
 0980: 
 0981:     # If we get here, all union attempts failed
+0982:     raise ValueError(
  __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_builtin_ValueError, __pyx_t_7); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 982, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  __Pyx_Raise(__pyx_t_3, 0, 0, 0);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __PYX_ERR(0, 982, __pyx_L1_error)
+0983:         f"Invalid type for {field.name} with data={data}, error = {error}"
  __pyx_t_3 = PyTuple_New(6); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 983, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_5 = 0;
  __pyx_t_15 = 127;
  __Pyx_INCREF(__pyx_kp_u_Invalid_type_for_2);
  __pyx_t_5 += 17;
  __Pyx_GIVEREF(__pyx_kp_u_Invalid_type_for_2);
  PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_kp_u_Invalid_type_for_2);
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_field, __pyx_n_s_name_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 983, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_7 = __Pyx_PyObject_FormatSimple(__pyx_t_1, __pyx_empty_unicode); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 983, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_15 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_7) > __pyx_t_15) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_7) : __pyx_t_15;
  __pyx_t_5 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_7);
  __Pyx_GIVEREF(__pyx_t_7);
  PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_7);
  __pyx_t_7 = 0;
  __Pyx_INCREF(__pyx_kp_u_with_data);
  __pyx_t_5 += 11;
  __Pyx_GIVEREF(__pyx_kp_u_with_data);
  PyTuple_SET_ITEM(__pyx_t_3, 2, __pyx_kp_u_with_data);
  __pyx_t_7 = __Pyx_PyObject_FormatSimple(__pyx_v_data, __pyx_empty_unicode); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 983, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __pyx_t_15 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_7) > __pyx_t_15) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_7) : __pyx_t_15;
  __pyx_t_5 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_7);
  __Pyx_GIVEREF(__pyx_t_7);
  PyTuple_SET_ITEM(__pyx_t_3, 3, __pyx_t_7);
  __pyx_t_7 = 0;
  __Pyx_INCREF(__pyx_kp_u_error);
  __pyx_t_5 += 10;
  __Pyx_GIVEREF(__pyx_kp_u_error);
  PyTuple_SET_ITEM(__pyx_t_3, 4, __pyx_kp_u_error);
  __pyx_t_7 = __Pyx_PyUnicode_Unicode(__pyx_v_error); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 983, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __pyx_t_15 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_7) > __pyx_t_15) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_7) : __pyx_t_15;
  __pyx_t_5 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_7);
  __Pyx_GIVEREF(__pyx_t_7);
  PyTuple_SET_ITEM(__pyx_t_3, 5, __pyx_t_7);
  __pyx_t_7 = 0;
  __pyx_t_7 = __Pyx_PyUnicode_Join(__pyx_t_3, 6, __pyx_t_5, __pyx_t_15); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 983, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 0984:     )
 0985: 
+0986: cdef object _parse_type(
static PyObject *__pyx_f_9datamodel_10converters__parse_type(PyObject *__pyx_v_field, PyObject *__pyx_v_T, PyObject *__pyx_v_data, struct __pyx_opt_args_9datamodel_10converters__parse_type *__pyx_optional_args) {
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("datamodel.converters._parse_type", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_origin);
  __Pyx_XDECREF(__pyx_v_targs);
  __Pyx_XDECREF(__pyx_v_name);
  __Pyx_XDECREF(__pyx_v_sub);
  __Pyx_XDECREF(__pyx_v_result);
  __Pyx_XDECREF(__pyx_v_isdc);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
struct __pyx_opt_args_9datamodel_10converters__parse_type {
  int __pyx_n;
  PyObject *encoder;
  PyObject *as_objects;
};
 0987:     object field,
 0988:     object T,
 0989:     object data,
+0990:     object encoder=None,
  PyObject *__pyx_v_encoder = ((PyObject *)Py_None);
+0991:     object as_objects=False,
  PyObject *__pyx_v_as_objects = ((PyObject *)Py_False);
  PyObject *__pyx_v_origin = 0;
  PyObject *__pyx_v_targs = 0;
  PyObject *__pyx_v_name = 0;
  CYTHON_UNUSED PyObject *__pyx_v_sub = 0;
  PyObject *__pyx_v_result = 0;
  PyObject *__pyx_v_isdc = 0;
  PyObject *__pyx_r = NULL;
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_encoder = __pyx_optional_args->encoder;
      if (__pyx_optional_args->__pyx_n > 1) {
        __pyx_v_as_objects = __pyx_optional_args->as_objects;
      }
    }
  }
 0992: ):
 0993:     """
 0994:     Parse a value to a typing type.
 0995:     """
 0996:     # local cdef variables:
+0997:     cdef object origin = get_origin(T)
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_get_origin); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 997, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = NULL;
  __pyx_t_4 = 0;
  #if CYTHON_UNPACK_METHODS
  if (unlikely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
      __pyx_t_4 = 1;
    }
  }
  #endif
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_v_T};
    __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4);
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 997, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  }
  __pyx_v_origin = __pyx_t_1;
  __pyx_t_1 = 0;
+0998:     cdef object targs = get_args(T)
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_get_args); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 998, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = NULL;
  __pyx_t_4 = 0;
  #if CYTHON_UNPACK_METHODS
  if (unlikely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
      __pyx_t_4 = 1;
    }
  }
  #endif
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_v_T};
    __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4);
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 998, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  }
  __pyx_v_targs = __pyx_t_1;
  __pyx_t_1 = 0;
+0999:     cdef object name = getattr(T, '_name', None)  # T._name or None if not present
  __pyx_t_1 = __Pyx_GetAttr3(__pyx_v_T, __pyx_n_u_name_3, Py_None); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 999, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_name = __pyx_t_1;
  __pyx_t_1 = 0;
+1000:     cdef object sub = None     # for subtypes, local cache
  __Pyx_INCREF(Py_None);
  __pyx_v_sub = Py_None;
+1001:     cdef object result = None
  __Pyx_INCREF(Py_None);
  __pyx_v_result = Py_None;
+1002:     cdef object isdc = is_dc(T)
  __pyx_t_5 = __pyx_f_9datamodel_10converters_is_dc(__pyx_v_T); if (unlikely(__pyx_t_5 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1002, __pyx_L1_error)
  __pyx_t_1 = __Pyx_PyBool_FromLong(__pyx_t_5); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1002, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_isdc = __pyx_t_1;
  __pyx_t_1 = 0;
 1003: 
+1004:     if data is None:
  __pyx_t_5 = (__pyx_v_data == Py_None);
  if (__pyx_t_5) {
/* … */
  }
+1005:         return None
    __Pyx_XDECREF(__pyx_r);
    __pyx_r = Py_None; __Pyx_INCREF(Py_None);
    goto __pyx_L0;
 1006: 
+1007:     if isdc:
  __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_v_isdc); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 1007, __pyx_L1_error)
  if (__pyx_t_5) {
/* … */
  }
+1008:         return _handle_dataclass_type(None, name, data, T, as_objects, None)
    __Pyx_XDECREF(__pyx_r);
    if (!(likely(PyUnicode_CheckExact(__pyx_v_name))||((__pyx_v_name) == Py_None) || __Pyx_RaiseUnexpectedTypeError("unicode", __pyx_v_name))) __PYX_ERR(0, 1008, __pyx_L1_error)
    __pyx_t_6.__pyx_n = 2;
    __pyx_t_6.as_objects = __pyx_v_as_objects;
    __pyx_t_6.parent = Py_None;
    __pyx_t_1 = __pyx_f_9datamodel_10converters__handle_dataclass_type(Py_None, ((PyObject*)__pyx_v_name), __pyx_v_data, __pyx_v_T, &__pyx_t_6); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1008, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_r = __pyx_t_1;
    __pyx_t_1 = 0;
    goto __pyx_L0;
 1009:     # Field type shortcuts
+1010:     elif origin is dict and isinstance(data, dict):
  __pyx_t_7 = (__pyx_v_origin == ((PyObject *)(&PyDict_Type)));
  if (__pyx_t_7) {
  } else {
    __pyx_t_5 = __pyx_t_7;
    goto __pyx_L5_bool_binop_done;
  }
  __pyx_t_7 = PyDict_Check(__pyx_v_data); 
  __pyx_t_5 = __pyx_t_7;
  __pyx_L5_bool_binop_done:;
  if (__pyx_t_5) {
/* … */
  }
+1011:         return _parse_dict_type(field, T, data, encoder, targs)
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_1 = __pyx_f_9datamodel_10converters__parse_dict_type(__pyx_v_field, __pyx_v_T, __pyx_v_data, __pyx_v_encoder, __pyx_v_targs); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1011, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_r = __pyx_t_1;
    __pyx_t_1 = 0;
    goto __pyx_L0;
+1012:     elif origin is list:
  __pyx_t_5 = (__pyx_v_origin == ((PyObject *)(&PyList_Type)));
  if (__pyx_t_5) {
/* … */
  }
+1013:         return _parse_list_type(field, T, data, encoder, targs)
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_1 = __pyx_f_9datamodel_10converters__parse_list_type(__pyx_v_field, __pyx_v_T, __pyx_v_data, __pyx_v_encoder, __pyx_v_targs, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1013, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_r = __pyx_t_1;
    __pyx_t_1 = 0;
    goto __pyx_L0;
+1014:     elif origin is not None:
  __pyx_t_5 = (__pyx_v_origin != Py_None);
  if (__pyx_t_5) {
/* … */
  }
 1015:         # other advanced generics
+1016:         return data
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(__pyx_v_data);
    __pyx_r = __pyx_v_data;
    goto __pyx_L0;
 1017:     else:
 1018:         # fallback to builtin parse
+1019:         result = _parse_builtin_type(field, T, data, encoder)
  /*else*/ {
    __pyx_t_1 = __pyx_f_9datamodel_10converters__parse_builtin_type(__pyx_v_field, __pyx_v_T, __pyx_v_data, __pyx_v_encoder); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1019, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF_SET(__pyx_v_result, __pyx_t_1);
    __pyx_t_1 = 0;
+1020:         return result
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(__pyx_v_result);
    __pyx_r = __pyx_v_result;
    goto __pyx_L0;
  }
 1021: 
+1022: cdef object _parse_typing(
static PyObject *__pyx_f_9datamodel_10converters__parse_typing(PyObject *__pyx_v_field, PyObject *__pyx_v_T, PyObject *__pyx_v_data, struct __pyx_opt_args_9datamodel_10converters__parse_typing *__pyx_optional_args) {
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_AddTraceback("datamodel.converters._parse_typing", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_origin);
  __Pyx_XDECREF(__pyx_v_targs);
  __Pyx_XDECREF(__pyx_v_name);
  __Pyx_XDECREF(__pyx_v_sub);
  __Pyx_XDECREF(__pyx_v_result);
  __Pyx_XDECREF(__pyx_v_inner_type);
  __Pyx_XDECREF(__pyx_v_inner_origin);
  __Pyx_XDECREF(__pyx_v_real_type);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
struct __pyx_opt_args_9datamodel_10converters__parse_typing {
  int __pyx_n;
  PyObject *encoder;
  PyObject *as_objects;
  PyObject *parent;
};
 1023:     object field,
 1024:     object T,
 1025:     object data,
+1026:     object encoder=None,
  PyObject *__pyx_v_encoder = ((PyObject *)Py_None);
+1027:     object as_objects=False,
  PyObject *__pyx_v_as_objects = ((PyObject *)Py_False);
+1028:     object parent=None,
  PyObject *__pyx_v_parent = ((PyObject *)Py_None);
  PyObject *__pyx_v_origin = 0;
  PyObject *__pyx_v_targs = 0;
  PyObject *__pyx_v_name = 0;
  CYTHON_UNUSED PyObject *__pyx_v_sub = 0;
  CYTHON_UNUSED PyObject *__pyx_v_result = 0;
  PyObject *__pyx_v_inner_type = 0;
  int __pyx_v_inner_is_dc;
  CYTHON_UNUSED PyObject *__pyx_v_inner_origin = NULL;
  PyObject *__pyx_v_real_type = NULL;
  PyObject *__pyx_r = NULL;
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_encoder = __pyx_optional_args->encoder;
      if (__pyx_optional_args->__pyx_n > 1) {
        __pyx_v_as_objects = __pyx_optional_args->as_objects;
        if (__pyx_optional_args->__pyx_n > 2) {
          __pyx_v_parent = __pyx_optional_args->parent;
        }
      }
    }
  }
 1029: ):
 1030:     """
 1031:     Parse a value to a typing type.
 1032:     """
 1033:     # local cdef variables:
 1034:     cdef object origin, targs
+1035:     cdef object name = getattr(T, '_name', None)  # T._name or None if not present
  __pyx_t_1 = __Pyx_GetAttr3(__pyx_v_T, __pyx_n_u_name_3, Py_None); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1035, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_name = __pyx_t_1;
  __pyx_t_1 = 0;
+1036:     cdef object sub = None     # for subtypes, local cache
  __Pyx_INCREF(Py_None);
  __pyx_v_sub = Py_None;
+1037:     cdef object result = None
  __Pyx_INCREF(Py_None);
  __pyx_v_result = Py_None;
+1038:     cdef object inner_type = None
  __Pyx_INCREF(Py_None);
  __pyx_v_inner_type = Py_None;
+1039:     cdef bint inner_is_dc = 0 # field._inner_is_dc or is_dataclass(inner_type)
  __pyx_v_inner_is_dc = 0;
 1040: 
 1041:     # Use cached values only if T is exactly the field's declared type.
+1042:     if T == field.type:
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_field, __pyx_n_s_type_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1042, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = PyObject_RichCompare(__pyx_v_T, __pyx_t_1, Py_EQ); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1042, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely((__pyx_t_3 < 0))) __PYX_ERR(0, 1042, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (__pyx_t_3) {
/* … */
    goto __pyx_L3;
  }
+1043:         origin = field.origin
    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_field, __pyx_n_s_origin); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1043, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_v_origin = __pyx_t_2;
    __pyx_t_2 = 0;
+1044:         targs = field.args
    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_field, __pyx_n_s_args_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1044, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_v_targs = __pyx_t_2;
    __pyx_t_2 = 0;
+1045:     elif field._inner_type and field._inner_type == inner_type:
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_field, __pyx_n_s_inner_type); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1045, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely((__pyx_t_4 < 0))) __PYX_ERR(0, 1045, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (__pyx_t_4) {
  } else {
    __pyx_t_3 = __pyx_t_4;
    goto __pyx_L4_bool_binop_done;
  }
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_field, __pyx_n_s_inner_type); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1045, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_1 = PyObject_RichCompare(__pyx_t_2, __pyx_v_inner_type, Py_EQ); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1045, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_4 < 0))) __PYX_ERR(0, 1045, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_3 = __pyx_t_4;
  __pyx_L4_bool_binop_done:;
  if (__pyx_t_3) {
/* … */
    goto __pyx_L3;
  }
+1046:         origin = field._inner_origin
    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_field, __pyx_n_s_inner_origin); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1046, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_v_origin = __pyx_t_1;
    __pyx_t_1 = 0;
+1047:         targs = field._inner_args
    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_field, __pyx_n_s_inner_args); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1047, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_v_targs = __pyx_t_1;
    __pyx_t_1 = 0;
 1048:     else:
+1049:         origin = get_origin(T)
  /*else*/ {
    __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_get_origin); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1049, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_5 = NULL;
    __pyx_t_6 = 0;
    #if CYTHON_UNPACK_METHODS
    if (unlikely(PyMethod_Check(__pyx_t_2))) {
      __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_2);
      if (likely(__pyx_t_5)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
        __Pyx_INCREF(__pyx_t_5);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_2, function);
        __pyx_t_6 = 1;
      }
    }
    #endif
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_v_T};
      __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_6, 1+__pyx_t_6);
      __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
      if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1049, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    }
    __pyx_v_origin = __pyx_t_1;
    __pyx_t_1 = 0;
+1050:         targs = get_args(T)
    __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_get_args); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1050, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_5 = NULL;
    __pyx_t_6 = 0;
    #if CYTHON_UNPACK_METHODS
    if (unlikely(PyMethod_Check(__pyx_t_2))) {
      __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_2);
      if (likely(__pyx_t_5)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
        __Pyx_INCREF(__pyx_t_5);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_2, function);
        __pyx_t_6 = 1;
      }
    }
    #endif
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_v_T};
      __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_6, 1+__pyx_t_6);
      __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
      if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1050, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    }
    __pyx_v_targs = __pyx_t_1;
    __pyx_t_1 = 0;
  }
  __pyx_L3:;
 1051: 
 1052:     # For generic (typing) fields, reuse cached inner type info if available.
+1053:     if origin is list and targs:
  __pyx_t_4 = (__pyx_v_origin == ((PyObject *)(&PyList_Type)));
  if (__pyx_t_4) {
  } else {
    __pyx_t_3 = __pyx_t_4;
    goto __pyx_L7_bool_binop_done;
  }
  __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_v_targs); if (unlikely((__pyx_t_4 < 0))) __PYX_ERR(0, 1053, __pyx_L1_error)
  __pyx_t_3 = __pyx_t_4;
  __pyx_L7_bool_binop_done:;
  if (__pyx_t_3) {
/* … */
    goto __pyx_L6;
  }
+1054:         if field._inner_type is not None:
    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_field, __pyx_n_s_inner_type); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1054, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_3 = (__pyx_t_1 != Py_None);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    if (__pyx_t_3) {
/* … */
      goto __pyx_L9;
    }
+1055:             inner_type = field._inner_type
      __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_field, __pyx_n_s_inner_type); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1055, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF_SET(__pyx_v_inner_type, __pyx_t_1);
      __pyx_t_1 = 0;
+1056:             inner_origin = field._inner_origin
      __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_field, __pyx_n_s_inner_origin); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1056, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_v_inner_origin = __pyx_t_1;
      __pyx_t_1 = 0;
 1057:             # Optionally, also use cached type arguments for the inner type.
 1058:         else:
+1059:             inner_type = targs[0]
    /*else*/ {
      __pyx_t_1 = __Pyx_GetItemInt(__pyx_v_targs, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1059, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF_SET(__pyx_v_inner_type, __pyx_t_1);
      __pyx_t_1 = 0;
+1060:             inner_origin = get_origin(inner_type)
      __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_get_origin); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1060, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_t_5 = NULL;
      __pyx_t_6 = 0;
      #if CYTHON_UNPACK_METHODS
      if (unlikely(PyMethod_Check(__pyx_t_2))) {
        __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_2);
        if (likely(__pyx_t_5)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
          __Pyx_INCREF(__pyx_t_5);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_2, function);
          __pyx_t_6 = 1;
        }
      }
      #endif
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_v_inner_type};
        __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_6, 1+__pyx_t_6);
        __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
        if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1060, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      }
      __pyx_v_inner_origin = __pyx_t_1;
      __pyx_t_1 = 0;
    }
    __pyx_L9:;
 1061:     else:
+1062:         inner_type = None
  /*else*/ {
    __Pyx_INCREF(Py_None);
    __Pyx_DECREF_SET(__pyx_v_inner_type, Py_None);
+1063:         inner_origin = None
    __Pyx_INCREF(Py_None);
    __pyx_v_inner_origin = Py_None;
  }
  __pyx_L6:;
 1064: 
+1065:     inner_is_dc = field._inner_is_dc or is_dc(inner_type)
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_field, __pyx_n_s_inner_is_dc); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1065, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_4 < 0))) __PYX_ERR(0, 1065, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (!__pyx_t_4) {
  } else {
    __pyx_t_3 = __pyx_t_4;
    goto __pyx_L10_bool_binop_done;
  }
  __pyx_t_4 = __pyx_f_9datamodel_10converters_is_dc(__pyx_v_inner_type); if (unlikely(__pyx_t_4 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1065, __pyx_L1_error)
  __pyx_t_3 = __pyx_t_4;
  __pyx_L10_bool_binop_done:;
  __pyx_v_inner_is_dc = __pyx_t_3;
 1066: 
+1067:     if data is None:
  __pyx_t_3 = (__pyx_v_data == Py_None);
  if (__pyx_t_3) {
/* … */
  }
+1068:         return None
    __Pyx_XDECREF(__pyx_r);
    __pyx_r = Py_None; __Pyx_INCREF(Py_None);
    goto __pyx_L0;
 1069: 
 1070:     # Put more frequently cases first:
+1071:     if field.is_dc:
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_field, __pyx_n_s_is_dc); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1071, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_3 < 0))) __PYX_ERR(0, 1071, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (__pyx_t_3) {
/* … */
  }
+1072:         return _handle_dataclass_type(None, name, data, T, as_objects, None)
    __Pyx_XDECREF(__pyx_r);
    if (!(likely(PyUnicode_CheckExact(__pyx_v_name))||((__pyx_v_name) == Py_None) || __Pyx_RaiseUnexpectedTypeError("unicode", __pyx_v_name))) __PYX_ERR(0, 1072, __pyx_L1_error)
    __pyx_t_7.__pyx_n = 2;
    __pyx_t_7.as_objects = __pyx_v_as_objects;
    __pyx_t_7.parent = Py_None;
    __pyx_t_1 = __pyx_f_9datamodel_10converters__handle_dataclass_type(Py_None, ((PyObject*)__pyx_v_name), __pyx_v_data, __pyx_v_T, &__pyx_t_7); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1072, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_r = __pyx_t_1;
    __pyx_t_1 = 0;
    goto __pyx_L0;
 1073: 
 1074:     # If the field is a Union and data is a list, use _parse_union_type.
+1075:     if origin is Union:
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_Union); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1075, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_3 = (__pyx_v_origin == __pyx_t_1);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (__pyx_t_3) {
/* … */
  }
 1076:         # e.g. Optional[...] or Union[A, B]
+1077:         if len(targs) == 2 and type(None) in targs:
    __pyx_t_8 = PyObject_Length(__pyx_v_targs); if (unlikely(__pyx_t_8 == ((Py_ssize_t)-1))) __PYX_ERR(0, 1077, __pyx_L1_error)
    __pyx_t_4 = (__pyx_t_8 == 2);
    if (__pyx_t_4) {
    } else {
      __pyx_t_3 = __pyx_t_4;
      goto __pyx_L16_bool_binop_done;
    }
    __pyx_t_4 = (__Pyx_PySequence_ContainsTF(((PyObject *)Py_TYPE(Py_None)), __pyx_v_targs, Py_EQ)); if (unlikely((__pyx_t_4 < 0))) __PYX_ERR(0, 1077, __pyx_L1_error)
    __pyx_t_3 = __pyx_t_4;
    __pyx_L16_bool_binop_done:;
    if (__pyx_t_3) {
/* … */
    }
 1078:             # Handle Optional[...] that is Union[..., None] cases first:
+1079:             if field._inner_priv:
      __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_field, __pyx_n_s_inner_priv); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1079, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_3 < 0))) __PYX_ERR(0, 1079, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      if (__pyx_t_3) {
/* … */
      }
 1080:                 # If Optional but non-None is a primitive
+1081:                 return _parse_builtin_type(field, field._inner_type, data, encoder)
        __Pyx_XDECREF(__pyx_r);
        __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_field, __pyx_n_s_inner_type); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1081, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        __pyx_t_2 = __pyx_f_9datamodel_10converters__parse_builtin_type(__pyx_v_field, __pyx_t_1, __pyx_v_data, __pyx_v_encoder); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1081, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_2);
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        __pyx_r = __pyx_t_2;
        __pyx_t_2 = 0;
        goto __pyx_L0;
+1082:             elif field._inner_is_dc:
      __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_field, __pyx_n_s_inner_is_dc); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1082, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely((__pyx_t_3 < 0))) __PYX_ERR(0, 1082, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      if (__pyx_t_3) {
/* … */
      }
 1083:                 # non-None is a Optional Dataclass:
+1084:                 return _handle_dataclass_type(None, name, data, field._inner_type, as_objects, None)
        __Pyx_XDECREF(__pyx_r);
        if (!(likely(PyUnicode_CheckExact(__pyx_v_name))||((__pyx_v_name) == Py_None) || __Pyx_RaiseUnexpectedTypeError("unicode", __pyx_v_name))) __PYX_ERR(0, 1084, __pyx_L1_error)
        __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_field, __pyx_n_s_inner_type); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1084, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_2);
        __pyx_t_7.__pyx_n = 2;
        __pyx_t_7.as_objects = __pyx_v_as_objects;
        __pyx_t_7.parent = Py_None;
        __pyx_t_1 = __pyx_f_9datamodel_10converters__handle_dataclass_type(Py_None, ((PyObject*)__pyx_v_name), __pyx_v_data, __pyx_t_2, &__pyx_t_7); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1084, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
        __pyx_r = __pyx_t_1;
        __pyx_t_1 = 0;
        goto __pyx_L0;
 1085:             else:
+1086:                 real_type = targs[0] if targs[1] is type(None) else targs[1]
      /*else*/ {
        __pyx_t_2 = __Pyx_GetItemInt(__pyx_v_targs, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1086, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_2);
        __pyx_t_3 = (__pyx_t_2 == ((PyObject *)Py_TYPE(Py_None)));
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
        if (__pyx_t_3) {
          __pyx_t_2 = __Pyx_GetItemInt(__pyx_v_targs, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1086, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
          __pyx_t_1 = __pyx_t_2;
          __pyx_t_2 = 0;
        } else {
          __pyx_t_2 = __Pyx_GetItemInt(__pyx_v_targs, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1086, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
          __pyx_t_1 = __pyx_t_2;
          __pyx_t_2 = 0;
        }
        __pyx_v_real_type = __pyx_t_1;
        __pyx_t_1 = 0;
 1087:                 # Recursively parse the real_type exactly as if it weren't wrapped in Optional[…].
+1088:                 return _parse_typing(field, real_type, data, encoder, as_objects, parent)
        __Pyx_XDECREF(__pyx_r);
        __pyx_t_9.__pyx_n = 3;
        __pyx_t_9.encoder = __pyx_v_encoder;
        __pyx_t_9.as_objects = __pyx_v_as_objects;
        __pyx_t_9.parent = __pyx_v_parent;
        __pyx_t_1 = __pyx_f_9datamodel_10converters__parse_typing(__pyx_v_field, __pyx_v_real_type, __pyx_v_data, &__pyx_t_9); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1088, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        __pyx_r = __pyx_t_1;
        __pyx_t_1 = 0;
        goto __pyx_L0;
      }
+1089:         elif isinstance(data, list):
    __pyx_t_3 = PyList_Check(__pyx_v_data); 
    if (__pyx_t_3) {
/* … */
    }
+1090:             return _parse_union_type(
      __Pyx_XDECREF(__pyx_r);
/* … */
      __pyx_t_1 = __pyx_f_9datamodel_10converters__parse_union_type(__pyx_v_field, __pyx_v_T, __pyx_v_name, __pyx_v_data, __pyx_v_encoder, __pyx_v_origin, __pyx_v_targs); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1090, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_r = __pyx_t_1;
      __pyx_t_1 = 0;
      goto __pyx_L0;
 1091:                 field,
 1092:                 T,
 1093:                 name,
 1094:                 data,
 1095:                 encoder,
 1096:                 origin,
 1097:                 targs
 1098:             )
 1099:         else:
+1100:             return _parse_union_type(
    /*else*/ {
      __Pyx_XDECREF(__pyx_r);
/* … */
      __pyx_t_1 = __pyx_f_9datamodel_10converters__parse_union_type(__pyx_v_field, __pyx_v_T, __pyx_v_name, __pyx_v_data, __pyx_v_encoder, __pyx_v_origin, __pyx_v_targs); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1100, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_r = __pyx_t_1;
      __pyx_t_1 = 0;
      goto __pyx_L0;
    }
 1101:                 field,
 1102:                 T,
 1103:                 name,
 1104:                 data,
 1105:                 encoder,
 1106:                 origin,
 1107:                 targs
 1108:             )
 1109:     # Field type shortcuts
+1110:     if field._type_category == 'typing':
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_field, __pyx_n_s_type_category); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1110, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_3 = (__Pyx_PyUnicode_Equals(__pyx_t_1, __pyx_n_u_typing, Py_EQ)); if (unlikely((__pyx_t_3 < 0))) __PYX_ERR(0, 1110, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (__pyx_t_3) {
/* … */
  }
 1111:         # For example, if the origin is list and the inner type is a dataclass,
 1112:         # use _handle_dataclass_type on each element.
+1113:         if origin is list:
    __pyx_t_3 = (__pyx_v_origin == ((PyObject *)(&PyList_Type)));
    if (__pyx_t_3) {
/* … */
    }
+1114:             if inner_is_dc:
      if (__pyx_v_inner_is_dc) {
/* … */
      }
+1115:                 return _parse_list_type(field, T, data, encoder, targs, parent)
        __Pyx_XDECREF(__pyx_r);
        __pyx_t_10.__pyx_n = 1;
        __pyx_t_10._parent = __pyx_v_parent;
        __pyx_t_1 = __pyx_f_9datamodel_10converters__parse_list_type(__pyx_v_field, __pyx_v_T, __pyx_v_data, __pyx_v_encoder, __pyx_v_targs, &__pyx_t_10); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1115, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        __pyx_r = __pyx_t_1;
        __pyx_t_1 = 0;
        goto __pyx_L0;
 1116:             else:
+1117:                 return _parse_typing_type(
      /*else*/ {
        __Pyx_XDECREF(__pyx_r);
/* … */
        __pyx_t_11.__pyx_n = 1;
        __pyx_t_11.as_objects = __pyx_v_as_objects;
        __pyx_t_1 = __pyx_f_9datamodel_10converters__parse_typing_type(__pyx_v_field, __pyx_v_T, __pyx_v_name, __pyx_v_data, __pyx_v_encoder, __pyx_v_origin, __pyx_v_targs, &__pyx_t_11); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1117, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        __pyx_r = __pyx_t_1;
        __pyx_t_1 = 0;
        goto __pyx_L0;
      }
 1118:                     field, T, name, data, encoder, origin, targs, as_objects
 1119:                 )
 1120:         else:
+1121:             return _parse_typing_type(
    /*else*/ {
      __Pyx_XDECREF(__pyx_r);
/* … */
      __pyx_t_11.__pyx_n = 1;
      __pyx_t_11.as_objects = __pyx_v_as_objects;
      __pyx_t_1 = __pyx_f_9datamodel_10converters__parse_typing_type(__pyx_v_field, __pyx_v_T, __pyx_v_name, __pyx_v_data, __pyx_v_encoder, __pyx_v_origin, __pyx_v_targs, &__pyx_t_11); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1121, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_r = __pyx_t_1;
      __pyx_t_1 = 0;
      goto __pyx_L0;
    }
 1122:                 field, T, name, data, encoder, origin, targs, as_objects
 1123:             )
+1124:     if origin is dict and isinstance(data, dict):
  __pyx_t_4 = (__pyx_v_origin == ((PyObject *)(&PyDict_Type)));
  if (__pyx_t_4) {
  } else {
    __pyx_t_3 = __pyx_t_4;
    goto __pyx_L23_bool_binop_done;
  }
  __pyx_t_4 = PyDict_Check(__pyx_v_data); 
  __pyx_t_3 = __pyx_t_4;
  __pyx_L23_bool_binop_done:;
  if (__pyx_t_3) {
/* … */
  }
+1125:         return _parse_dict_type(field, T, data, encoder, targs)
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_1 = __pyx_f_9datamodel_10converters__parse_dict_type(__pyx_v_field, __pyx_v_T, __pyx_v_data, __pyx_v_encoder, __pyx_v_targs); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1125, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_r = __pyx_t_1;
    __pyx_t_1 = 0;
    goto __pyx_L0;
+1126:     if origin is list:
  __pyx_t_3 = (__pyx_v_origin == ((PyObject *)(&PyList_Type)));
  if (__pyx_t_3) {
/* … */
  }
+1127:         return _parse_list_type(field, T, data, encoder, targs, parent)
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_10.__pyx_n = 1;
    __pyx_t_10._parent = __pyx_v_parent;
    __pyx_t_1 = __pyx_f_9datamodel_10converters__parse_list_type(__pyx_v_field, __pyx_v_T, __pyx_v_data, __pyx_v_encoder, __pyx_v_targs, &__pyx_t_10); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1127, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_r = __pyx_t_1;
    __pyx_t_1 = 0;
    goto __pyx_L0;
+1128:     if origin is not None:
  __pyx_t_3 = (__pyx_v_origin != Py_None);
  if (__pyx_t_3) {
/* … */
  }
 1129:         # other advanced generics
+1130:         return data
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(__pyx_v_data);
    __pyx_r = __pyx_v_data;
    goto __pyx_L0;
 1131:     else:
 1132:         # fallback to builtin parse
+1133:         return _parse_builtin_type(field, T, data, encoder)
  /*else*/ {
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_1 = __pyx_f_9datamodel_10converters__parse_builtin_type(__pyx_v_field, __pyx_v_T, __pyx_v_data, __pyx_v_encoder); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1133, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_r = __pyx_t_1;
    __pyx_t_1 = 0;
    goto __pyx_L0;
  }
 1134: 
+1135: cdef object _parse_literal_type(
static PyObject *__pyx_f_9datamodel_10converters__parse_literal_type(PyObject *__pyx_v_field, CYTHON_UNUSED PyObject *__pyx_v_T, PyObject *__pyx_v_data, CYTHON_UNUSED PyObject *__pyx_v_encoder) {
  PyObject *__pyx_v_targs = 0;
  PyObject *__pyx_v_arg = NULL;
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_AddTraceback("datamodel.converters._parse_literal_type", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_targs);
  __Pyx_XDECREF(__pyx_v_arg);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 1136:     object field,
 1137:     object T,
 1138:     object data,
 1139:     object encoder
 1140: ):
 1141:     """
 1142:     _parse_literal_type parses a typing.Literal[...] annotation.
 1143: 
 1144:     :param field: A Field object (or similar) containing metadata
 1145:     :param T: The full annotated type (e.g. typing.Literal['text/plain', 'text/html']).
 1146:     :param data: The input value to check.
 1147:     :param encoder: Optional encoder (not usually used for literal).
 1148:     :return: Returns 'data' if it matches one of the literal choices, otherwise raises ValueError.
 1149:     """
 1150: 
 1151:     # Each element in `targs` is a valid literal value, e.g. a string, int, etc.
 1152:     # If data is exactly in that set, it's valid.
+1153:     cdef tuple targs = field.args
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_field, __pyx_n_s_args_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1153, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (!(likely(PyTuple_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None) || __Pyx_RaiseUnexpectedTypeError("tuple", __pyx_t_1))) __PYX_ERR(0, 1153, __pyx_L1_error)
  __pyx_v_targs = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
 1154:     cdef tuple i
+1155:     for arg in targs:
  if (unlikely(__pyx_v_targs == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
    __PYX_ERR(0, 1155, __pyx_L1_error)
  }
  __pyx_t_1 = __pyx_v_targs; __Pyx_INCREF(__pyx_t_1);
  __pyx_t_2 = 0;
  for (;;) {
    {
      Py_ssize_t __pyx_temp = __Pyx_PyTuple_GET_SIZE(__pyx_t_1);
      #if !CYTHON_ASSUME_SAFE_MACROS
      if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 1155, __pyx_L1_error)
      #endif
      if (__pyx_t_2 >= __pyx_temp) break;
    }
    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    __pyx_t_3 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_2); __Pyx_INCREF(__pyx_t_3); __pyx_t_2++; if (unlikely((0 < 0))) __PYX_ERR(0, 1155, __pyx_L1_error)
    #else
    __pyx_t_3 = __Pyx_PySequence_ITEM(__pyx_t_1, __pyx_t_2); __pyx_t_2++; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1155, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    #endif
    __Pyx_XDECREF_SET(__pyx_v_arg, __pyx_t_3);
    __pyx_t_3 = 0;
/* … */
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+1156:         if data == arg:
    __pyx_t_3 = PyObject_RichCompare(__pyx_v_data, __pyx_v_arg, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1156, __pyx_L1_error)
    __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely((__pyx_t_4 < 0))) __PYX_ERR(0, 1156, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (__pyx_t_4) {
/* … */
    }
+1157:             return data
      __Pyx_XDECREF(__pyx_r);
      __Pyx_INCREF(__pyx_v_data);
      __pyx_r = __pyx_v_data;
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      goto __pyx_L0;
 1158: 
 1159:     # If we get here, data didn't match any literal value
+1160:     raise ValueError(
  __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_builtin_ValueError, __pyx_t_6); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1160, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __Pyx_Raise(__pyx_t_1, 0, 0, 0);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __PYX_ERR(0, 1160, __pyx_L1_error)
+1161:         f"Literal parse error for field '{field.name}': "
  __pyx_t_1 = PyTuple_New(6); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1161, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = 0;
  __pyx_t_5 = 127;
  __Pyx_INCREF(__pyx_kp_u_Literal_parse_error_for_field);
  __pyx_t_2 += 31;
  __Pyx_GIVEREF(__pyx_kp_u_Literal_parse_error_for_field);
  PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_kp_u_Literal_parse_error_for_field);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_field, __pyx_n_s_name_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1161, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_6 = __Pyx_PyObject_FormatSimple(__pyx_t_3, __pyx_empty_unicode); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1161, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_5 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_6) > __pyx_t_5) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_6) : __pyx_t_5;
  __pyx_t_2 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_6);
  __Pyx_GIVEREF(__pyx_t_6);
  PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_t_6);
  __pyx_t_6 = 0;
  __Pyx_INCREF(__pyx_kp_u_value);
  __pyx_t_2 += 9;
  __Pyx_GIVEREF(__pyx_kp_u_value);
  PyTuple_SET_ITEM(__pyx_t_1, 2, __pyx_kp_u_value);
/* … */
  __pyx_t_6 = __Pyx_PyUnicode_Join(__pyx_t_1, 6, __pyx_t_2, __pyx_t_5); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1161, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+1162:         f"value={data!r} is not one of {targs}"
  __pyx_t_6 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_v_data), __pyx_empty_unicode); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1162, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_t_5 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_6) > __pyx_t_5) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_6) : __pyx_t_5;
  __pyx_t_2 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_6);
  __Pyx_GIVEREF(__pyx_t_6);
  PyTuple_SET_ITEM(__pyx_t_1, 3, __pyx_t_6);
  __pyx_t_6 = 0;
  __Pyx_INCREF(__pyx_kp_u_is_not_one_of);
  __pyx_t_2 += 15;
  __Pyx_GIVEREF(__pyx_kp_u_is_not_one_of);
  PyTuple_SET_ITEM(__pyx_t_1, 4, __pyx_kp_u_is_not_one_of);
  __pyx_t_6 = __Pyx_PyObject_FormatSimple(__pyx_v_targs, __pyx_empty_unicode); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1162, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_t_5 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_6) > __pyx_t_5) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_6) : __pyx_t_5;
  __pyx_t_2 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_6);
  __Pyx_GIVEREF(__pyx_t_6);
  PyTuple_SET_ITEM(__pyx_t_1, 5, __pyx_t_6);
  __pyx_t_6 = 0;
 1163:     )
 1164: 
+1165: cdef object _handle_dataclass_type(
static PyObject *__pyx_f_9datamodel_10converters__handle_dataclass_type(PyObject *__pyx_v_field, PyObject *__pyx_v_name, PyObject *__pyx_v_value, PyObject *__pyx_v__type, struct __pyx_opt_args_9datamodel_10converters__handle_dataclass_type *__pyx_optional_args) {
/* … */
  /* 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_12);
  __Pyx_XDECREF(__pyx_t_13);
  __Pyx_XDECREF(__pyx_t_16);
  __Pyx_XDECREF(__pyx_t_17);
  __Pyx_AddTraceback("datamodel.converters._handle_dataclass_type", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_key);
  __Pyx_XDECREF(__pyx_v_converter);
  __Pyx_XDECREF(__pyx_v_field_metadata);
  __Pyx_XDECREF(__pyx_v_alias);
  __Pyx_XDECREF(__pyx_v_exc);
  __Pyx_XDECREF(__pyx_8genexpr5__pyx_v_k);
  __Pyx_XDECREF(__pyx_8genexpr5__pyx_v_v);
  __Pyx_XDECREF(__pyx_v_value);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
struct __pyx_opt_args_9datamodel_10converters__handle_dataclass_type {
  int __pyx_n;
  PyObject *as_objects;
  PyObject *parent;
};
 1166:     object field,
 1167:     str name,
 1168:     object value,
 1169:     object _type,
+1170:     object as_objects = False,
  PyObject *__pyx_v_as_objects = ((PyObject *)Py_False);
+1171:     object parent = None
  PyObject *__pyx_v_parent = ((PyObject *)Py_None);
  PyObject *__pyx_v_key = 0;
  PyObject *__pyx_v_converter = 0;
  int __pyx_v_isdc;
  PyObject *__pyx_v_field_metadata = 0;
  PyObject *__pyx_v_alias = 0;
  PyObject *__pyx_v_exc = NULL;
  PyObject *__pyx_8genexpr5__pyx_v_k = NULL;
  PyObject *__pyx_8genexpr5__pyx_v_v = NULL;
  PyObject *__pyx_r = NULL;
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_as_objects = __pyx_optional_args->as_objects;
      if (__pyx_optional_args->__pyx_n > 1) {
        __pyx_v_parent = __pyx_optional_args->parent;
      }
    }
  }
  __Pyx_INCREF(__pyx_v_value);
 1172: ):
 1173:     """
 1174:     _handle_dataclass_type.
 1175: 
 1176:     Process a field that is annotated as SomeDataclass.
 1177:     If there's a registered converter for the dataclass, call it;
 1178:     otherwise, build the dataclass using default logic.
 1179:     """
+1180:     cdef tuple key = (_type, name)
  __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1180, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_INCREF(__pyx_v__type);
  __Pyx_GIVEREF(__pyx_v__type);
  if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v__type)) __PYX_ERR(0, 1180, __pyx_L1_error);
  __Pyx_INCREF(__pyx_v_name);
  __Pyx_GIVEREF(__pyx_v_name);
  if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_v_name)) __PYX_ERR(0, 1180, __pyx_L1_error);
  __pyx_v_key = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
+1181:     cdef object converter = TYPE_PARSERS.get(key) or TYPE_PARSERS.get(_type)
  if (unlikely(__pyx_v_9datamodel_10converters_TYPE_PARSERS == Py_None)) {
    PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "get");
    __PYX_ERR(0, 1181, __pyx_L1_error)
  }
  __pyx_t_2 = __Pyx_PyDict_GetItemDefault(__pyx_v_9datamodel_10converters_TYPE_PARSERS, __pyx_v_key, Py_None); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1181, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely((__pyx_t_3 < 0))) __PYX_ERR(0, 1181, __pyx_L1_error)
  if (!__pyx_t_3) {
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  } else {
    __Pyx_INCREF(__pyx_t_2);
    __pyx_t_1 = __pyx_t_2;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    goto __pyx_L3_bool_binop_done;
  }
  if (unlikely(__pyx_v_9datamodel_10converters_TYPE_PARSERS == Py_None)) {
    PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "get");
    __PYX_ERR(0, 1181, __pyx_L1_error)
  }
  __pyx_t_2 = __Pyx_PyDict_GetItemDefault(__pyx_v_9datamodel_10converters_TYPE_PARSERS, __pyx_v__type, Py_None); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1181, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_INCREF(__pyx_t_2);
  __pyx_t_1 = __pyx_t_2;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_L3_bool_binop_done:;
  __pyx_v_converter = __pyx_t_1;
  __pyx_t_1 = 0;
+1182:     cdef bint isdc = field.is_dc if field else is_dc(_type)
  __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_v_field); if (unlikely((__pyx_t_4 < 0))) __PYX_ERR(0, 1182, __pyx_L1_error)
  if (__pyx_t_4) {
    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_field, __pyx_n_s_is_dc); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1182, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_5 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1182, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_3 = __pyx_t_5;
  } else {
    __pyx_t_5 = __pyx_f_9datamodel_10converters_is_dc(__pyx_v__type); if (unlikely(__pyx_t_5 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1182, __pyx_L1_error)
    __pyx_t_3 = __pyx_t_5;
  }
  __pyx_v_isdc = __pyx_t_3;
+1183:     cdef object field_metadata = field.metadata if field else {}
  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_v_field); if (unlikely((__pyx_t_3 < 0))) __PYX_ERR(0, 1183, __pyx_L1_error)
  if (__pyx_t_3) {
    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_field, __pyx_n_s_metadata); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1183, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_1 = __pyx_t_2;
    __pyx_t_2 = 0;
  } else {
    __pyx_t_2 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1183, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_1 = __pyx_t_2;
    __pyx_t_2 = 0;
  }
  __pyx_v_field_metadata = __pyx_t_1;
  __pyx_t_1 = 0;
+1184:     cdef str alias = field_metadata.get('alias')
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_field_metadata, __pyx_n_s_get); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1184, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_6 = NULL;
  __pyx_t_7 = 0;
  #if CYTHON_UNPACK_METHODS
  if (likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_6)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_6);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
      __pyx_t_7 = 1;
    }
  }
  #endif
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_n_u_alias};
    __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_7, 1+__pyx_t_7);
    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1184, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  }
  if (!(likely(PyUnicode_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None) || __Pyx_RaiseUnexpectedTypeError("unicode", __pyx_t_1))) __PYX_ERR(0, 1184, __pyx_L1_error)
  __pyx_v_alias = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
 1185: 
+1186:     if value is None or is_dc(value):
  __pyx_t_4 = (__pyx_v_value == Py_None);
  if (!__pyx_t_4) {
  } else {
    __pyx_t_3 = __pyx_t_4;
    goto __pyx_L6_bool_binop_done;
  }
  __pyx_t_4 = __pyx_f_9datamodel_10converters_is_dc(__pyx_v_value); if (unlikely(__pyx_t_4 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1186, __pyx_L1_error)
  __pyx_t_3 = __pyx_t_4;
  __pyx_L6_bool_binop_done:;
  if (__pyx_t_3) {
/* … */
  }
+1187:         return value
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(__pyx_v_value);
    __pyx_r = __pyx_v_value;
    goto __pyx_L0;
+1188:     if PyObject_IsInstance(value, dict):
  __pyx_t_3 = PyObject_IsInstance(__pyx_v_value, ((PyObject *)(&PyDict_Type))); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(0, 1188, __pyx_L1_error)
  if (__pyx_t_3) {
/* … */
  }
+1189:         try:
    {
      /*try:*/ {
/* … */
      }
      __pyx_L9_error:;
      __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
      __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
/* … */
      __pyx_L11_except_error:;
      __Pyx_XGIVEREF(__pyx_t_8);
      __Pyx_XGIVEREF(__pyx_t_9);
      __Pyx_XGIVEREF(__pyx_t_10);
      __Pyx_ExceptionReset(__pyx_t_8, __pyx_t_9, __pyx_t_10);
      goto __pyx_L1_error;
      __pyx_L13_try_return:;
      __Pyx_XGIVEREF(__pyx_t_8);
      __Pyx_XGIVEREF(__pyx_t_9);
      __Pyx_XGIVEREF(__pyx_t_10);
      __Pyx_ExceptionReset(__pyx_t_8, __pyx_t_9, __pyx_t_10);
      goto __pyx_L0;
      __pyx_L12_except_return:;
      __Pyx_XGIVEREF(__pyx_t_8);
      __Pyx_XGIVEREF(__pyx_t_9);
      __Pyx_XGIVEREF(__pyx_t_10);
      __Pyx_ExceptionReset(__pyx_t_8, __pyx_t_9, __pyx_t_10);
      goto __pyx_L0;
    }
 1190:             # If alias exists, adjust the key passed to the dataclass
+1191:             if alias:
        __pyx_t_3 = (__pyx_v_alias != Py_None)&&(__Pyx_PyUnicode_IS_TRUE(__pyx_v_alias) != 0);
        if (__pyx_t_3) {
/* … */
        }
 1192:                 # if alias exists on type, preserve the alias:
+1193:                 if alias not in value and name in value:
          __pyx_t_4 = (__Pyx_PySequence_ContainsTF(__pyx_v_alias, __pyx_v_value, Py_NE)); if (unlikely((__pyx_t_4 < 0))) __PYX_ERR(0, 1193, __pyx_L9_error)
          if (__pyx_t_4) {
          } else {
            __pyx_t_3 = __pyx_t_4;
            goto __pyx_L17_bool_binop_done;
          }
          __pyx_t_4 = (__Pyx_PySequence_ContainsTF(__pyx_v_name, __pyx_v_value, Py_EQ)); if (unlikely((__pyx_t_4 < 0))) __PYX_ERR(0, 1193, __pyx_L9_error)
          __pyx_t_3 = __pyx_t_4;
          __pyx_L17_bool_binop_done:;
          if (__pyx_t_3) {
/* … */
          }
+1194:                     value = value.copy()
            __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_value, __pyx_n_s_copy); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1194, __pyx_L9_error)
            __Pyx_GOTREF(__pyx_t_2);
            __pyx_t_6 = NULL;
            __pyx_t_7 = 0;
            #if CYTHON_UNPACK_METHODS
            if (likely(PyMethod_Check(__pyx_t_2))) {
              __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_2);
              if (likely(__pyx_t_6)) {
                PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
                __Pyx_INCREF(__pyx_t_6);
                __Pyx_INCREF(function);
                __Pyx_DECREF_SET(__pyx_t_2, function);
                __pyx_t_7 = 1;
              }
            }
            #endif
            {
              PyObject *__pyx_callargs[2] = {__pyx_t_6, NULL};
              __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_7, 0+__pyx_t_7);
              __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
              if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1194, __pyx_L9_error)
              __Pyx_GOTREF(__pyx_t_1);
              __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
            }
            __Pyx_DECREF_SET(__pyx_v_value, __pyx_t_1);
            __pyx_t_1 = 0;
+1195:                     value[alias] = value.pop(name)
            __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_value, __pyx_n_s_pop); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1195, __pyx_L9_error)
            __Pyx_GOTREF(__pyx_t_2);
            __pyx_t_6 = NULL;
            __pyx_t_7 = 0;
            #if CYTHON_UNPACK_METHODS
            if (likely(PyMethod_Check(__pyx_t_2))) {
              __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_2);
              if (likely(__pyx_t_6)) {
                PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
                __Pyx_INCREF(__pyx_t_6);
                __Pyx_INCREF(function);
                __Pyx_DECREF_SET(__pyx_t_2, function);
                __pyx_t_7 = 1;
              }
            }
            #endif
            {
              PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_v_name};
              __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_7, 1+__pyx_t_7);
              __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
              if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1195, __pyx_L9_error)
              __Pyx_GOTREF(__pyx_t_1);
              __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
            }
            if (unlikely((PyObject_SetItem(__pyx_v_value, __pyx_v_alias, __pyx_t_1) < 0))) __PYX_ERR(0, 1195, __pyx_L9_error)
            __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 1196:             # convert the dictionary to the dataclass
+1197:             return _type(**value)
        __Pyx_XDECREF(__pyx_r);
        if (unlikely(__pyx_v_value == Py_None)) {
          PyErr_SetString(PyExc_TypeError, "argument after ** must be a mapping, not NoneType");
          __PYX_ERR(0, 1197, __pyx_L9_error)
        }
        if (likely(PyDict_CheckExact(__pyx_v_value))) {
          __pyx_t_1 = PyDict_Copy(__pyx_v_value); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1197, __pyx_L9_error)
          __Pyx_GOTREF(__pyx_t_1);
        } else {
          __pyx_t_1 = __Pyx_PyObject_CallOneArg((PyObject*)&PyDict_Type, __pyx_v_value); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1197, __pyx_L9_error)
          __Pyx_GOTREF(__pyx_t_1);
        }
        __pyx_t_2 = __Pyx_PyObject_Call(__pyx_v__type, __pyx_empty_tuple, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1197, __pyx_L9_error)
        __Pyx_GOTREF(__pyx_t_2);
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        __pyx_r = __pyx_t_2;
        __pyx_t_2 = 0;
        goto __pyx_L13_try_return;
+1198:         except TypeError:
      __pyx_t_11 = __Pyx_PyErr_ExceptionMatches(__pyx_builtin_TypeError);
      if (__pyx_t_11) {
        __Pyx_AddTraceback("datamodel.converters._handle_dataclass_type", __pyx_clineno, __pyx_lineno, __pyx_filename);
        if (__Pyx_GetException(&__pyx_t_2, &__pyx_t_1, &__pyx_t_6) < 0) __PYX_ERR(0, 1198, __pyx_L11_except_error)
        __Pyx_XGOTREF(__pyx_t_2);
        __Pyx_XGOTREF(__pyx_t_1);
        __Pyx_XGOTREF(__pyx_t_6);
 1199:             # Ensure keys are strings
+1200:             value = {str(k): v for k, v in value.items()}
        { /* enter inner scope */
          __pyx_t_12 = PyDict_New(); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1200, __pyx_L23_error)
          __Pyx_GOTREF(__pyx_t_12);
          __pyx_t_14 = 0;
          if (unlikely(__pyx_v_value == Py_None)) {
            PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "items");
            __PYX_ERR(0, 1200, __pyx_L23_error)
          }
          __pyx_t_16 = __Pyx_dict_iterator(__pyx_v_value, 0, __pyx_n_s_items, (&__pyx_t_15), (&__pyx_t_11)); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 1200, __pyx_L23_error)
          __Pyx_GOTREF(__pyx_t_16);
          __Pyx_XDECREF(__pyx_t_13);
          __pyx_t_13 = __pyx_t_16;
          __pyx_t_16 = 0;
          while (1) {
            __pyx_t_18 = __Pyx_dict_iter_next(__pyx_t_13, __pyx_t_15, &__pyx_t_14, &__pyx_t_16, &__pyx_t_17, NULL, __pyx_t_11);
            if (unlikely(__pyx_t_18 == 0)) break;
            if (unlikely(__pyx_t_18 == -1)) __PYX_ERR(0, 1200, __pyx_L23_error)
            __Pyx_GOTREF(__pyx_t_16);
            __Pyx_GOTREF(__pyx_t_17);
            __Pyx_XDECREF_SET(__pyx_8genexpr5__pyx_v_k, __pyx_t_16);
            __pyx_t_16 = 0;
            __Pyx_XDECREF_SET(__pyx_8genexpr5__pyx_v_v, __pyx_t_17);
            __pyx_t_17 = 0;
            __pyx_t_17 = __Pyx_PyObject_Unicode(__pyx_8genexpr5__pyx_v_k); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 1200, __pyx_L23_error)
            __Pyx_GOTREF(__pyx_t_17);
            if (unlikely(PyDict_SetItem(__pyx_t_12, (PyObject*)__pyx_t_17, (PyObject*)__pyx_8genexpr5__pyx_v_v))) __PYX_ERR(0, 1200, __pyx_L23_error)
            __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
          }
          __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
          __Pyx_XDECREF(__pyx_8genexpr5__pyx_v_k); __pyx_8genexpr5__pyx_v_k = 0;
          __Pyx_XDECREF(__pyx_8genexpr5__pyx_v_v); __pyx_8genexpr5__pyx_v_v = 0;
          goto __pyx_L26_exit_scope;
          __pyx_L23_error:;
          __Pyx_XDECREF(__pyx_8genexpr5__pyx_v_k); __pyx_8genexpr5__pyx_v_k = 0;
          __Pyx_XDECREF(__pyx_8genexpr5__pyx_v_v); __pyx_8genexpr5__pyx_v_v = 0;
          goto __pyx_L11_except_error;
          __pyx_L26_exit_scope:;
        } /* exit inner scope */
        __Pyx_DECREF_SET(__pyx_v_value, __pyx_t_12);
        __pyx_t_12 = 0;
+1201:             if alias:
        __pyx_t_3 = (__pyx_v_alias != Py_None)&&(__Pyx_PyUnicode_IS_TRUE(__pyx_v_alias) != 0);
        if (__pyx_t_3) {
/* … */
        }
+1202:                 value = value.copy()
          __pyx_t_13 = __Pyx_PyObject_GetAttrStr(__pyx_v_value, __pyx_n_s_copy); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 1202, __pyx_L11_except_error)
          __Pyx_GOTREF(__pyx_t_13);
          __pyx_t_17 = NULL;
          __pyx_t_7 = 0;
          #if CYTHON_UNPACK_METHODS
          if (likely(PyMethod_Check(__pyx_t_13))) {
            __pyx_t_17 = PyMethod_GET_SELF(__pyx_t_13);
            if (likely(__pyx_t_17)) {
              PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_13);
              __Pyx_INCREF(__pyx_t_17);
              __Pyx_INCREF(function);
              __Pyx_DECREF_SET(__pyx_t_13, function);
              __pyx_t_7 = 1;
            }
          }
          #endif
          {
            PyObject *__pyx_callargs[2] = {__pyx_t_17, NULL};
            __pyx_t_12 = __Pyx_PyObject_FastCall(__pyx_t_13, __pyx_callargs+1-__pyx_t_7, 0+__pyx_t_7);
            __Pyx_XDECREF(__pyx_t_17); __pyx_t_17 = 0;
            if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1202, __pyx_L11_except_error)
            __Pyx_GOTREF(__pyx_t_12);
            __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
          }
          __Pyx_DECREF_SET(__pyx_v_value, __pyx_t_12);
          __pyx_t_12 = 0;
+1203:                 value[name] = value.pop(alias, None)
          __pyx_t_13 = __Pyx_PyObject_GetAttrStr(__pyx_v_value, __pyx_n_s_pop); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 1203, __pyx_L11_except_error)
          __Pyx_GOTREF(__pyx_t_13);
          __pyx_t_17 = NULL;
          __pyx_t_7 = 0;
          #if CYTHON_UNPACK_METHODS
          if (likely(PyMethod_Check(__pyx_t_13))) {
            __pyx_t_17 = PyMethod_GET_SELF(__pyx_t_13);
            if (likely(__pyx_t_17)) {
              PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_13);
              __Pyx_INCREF(__pyx_t_17);
              __Pyx_INCREF(function);
              __Pyx_DECREF_SET(__pyx_t_13, function);
              __pyx_t_7 = 1;
            }
          }
          #endif
          {
            PyObject *__pyx_callargs[3] = {__pyx_t_17, __pyx_v_alias, Py_None};
            __pyx_t_12 = __Pyx_PyObject_FastCall(__pyx_t_13, __pyx_callargs+1-__pyx_t_7, 2+__pyx_t_7);
            __Pyx_XDECREF(__pyx_t_17); __pyx_t_17 = 0;
            if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1203, __pyx_L11_except_error)
            __Pyx_GOTREF(__pyx_t_12);
            __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
          }
          if (unlikely((PyObject_SetItem(__pyx_v_value, __pyx_v_name, __pyx_t_12) < 0))) __PYX_ERR(0, 1203, __pyx_L11_except_error)
          __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
+1204:             return _type(**value)
        __Pyx_XDECREF(__pyx_r);
        if (unlikely(__pyx_v_value == Py_None)) {
          PyErr_SetString(PyExc_TypeError, "argument after ** must be a mapping, not NoneType");
          __PYX_ERR(0, 1204, __pyx_L11_except_error)
        }
        if (likely(PyDict_CheckExact(__pyx_v_value))) {
          __pyx_t_12 = PyDict_Copy(__pyx_v_value); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1204, __pyx_L11_except_error)
          __Pyx_GOTREF(__pyx_t_12);
        } else {
          __pyx_t_12 = __Pyx_PyObject_CallOneArg((PyObject*)&PyDict_Type, __pyx_v_value); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1204, __pyx_L11_except_error)
          __Pyx_GOTREF(__pyx_t_12);
        }
        __pyx_t_13 = __Pyx_PyObject_Call(__pyx_v__type, __pyx_empty_tuple, __pyx_t_12); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 1204, __pyx_L11_except_error)
        __Pyx_GOTREF(__pyx_t_13);
        __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
        __pyx_r = __pyx_t_13;
        __pyx_t_13 = 0;
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
        goto __pyx_L12_except_return;
      }
+1205:         except ValueError:
      __pyx_t_11 = __Pyx_PyErr_ExceptionMatches(__pyx_builtin_ValueError);
      if (__pyx_t_11) {
        __Pyx_AddTraceback("datamodel.converters._handle_dataclass_type", __pyx_clineno, __pyx_lineno, __pyx_filename);
        if (__Pyx_GetException(&__pyx_t_6, &__pyx_t_1, &__pyx_t_2) < 0) __PYX_ERR(0, 1205, __pyx_L11_except_error)
        __Pyx_XGOTREF(__pyx_t_6);
        __Pyx_XGOTREF(__pyx_t_1);
        __Pyx_XGOTREF(__pyx_t_2);
 1206:             # replace in "value" dictionary the current "name" for "alias"
+1207:             if alias:
        __pyx_t_3 = (__pyx_v_alias != Py_None)&&(__Pyx_PyUnicode_IS_TRUE(__pyx_v_alias) != 0);
        if (__pyx_t_3) {
/* … */
        }
+1208:                 value = value.copy()
          __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_v_value, __pyx_n_s_copy); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1208, __pyx_L11_except_error)
          __Pyx_GOTREF(__pyx_t_12);
          __pyx_t_17 = NULL;
          __pyx_t_7 = 0;
          #if CYTHON_UNPACK_METHODS
          if (likely(PyMethod_Check(__pyx_t_12))) {
            __pyx_t_17 = PyMethod_GET_SELF(__pyx_t_12);
            if (likely(__pyx_t_17)) {
              PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_12);
              __Pyx_INCREF(__pyx_t_17);
              __Pyx_INCREF(function);
              __Pyx_DECREF_SET(__pyx_t_12, function);
              __pyx_t_7 = 1;
            }
          }
          #endif
          {
            PyObject *__pyx_callargs[2] = {__pyx_t_17, NULL};
            __pyx_t_13 = __Pyx_PyObject_FastCall(__pyx_t_12, __pyx_callargs+1-__pyx_t_7, 0+__pyx_t_7);
            __Pyx_XDECREF(__pyx_t_17); __pyx_t_17 = 0;
            if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 1208, __pyx_L11_except_error)
            __Pyx_GOTREF(__pyx_t_13);
            __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
          }
          __Pyx_DECREF_SET(__pyx_v_value, __pyx_t_13);
          __pyx_t_13 = 0;
+1209:                 value[alias] = value.pop(name, None)
          __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_v_value, __pyx_n_s_pop); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1209, __pyx_L11_except_error)
          __Pyx_GOTREF(__pyx_t_12);
          __pyx_t_17 = NULL;
          __pyx_t_7 = 0;
          #if CYTHON_UNPACK_METHODS
          if (likely(PyMethod_Check(__pyx_t_12))) {
            __pyx_t_17 = PyMethod_GET_SELF(__pyx_t_12);
            if (likely(__pyx_t_17)) {
              PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_12);
              __Pyx_INCREF(__pyx_t_17);
              __Pyx_INCREF(function);
              __Pyx_DECREF_SET(__pyx_t_12, function);
              __pyx_t_7 = 1;
            }
          }
          #endif
          {
            PyObject *__pyx_callargs[3] = {__pyx_t_17, __pyx_v_name, Py_None};
            __pyx_t_13 = __Pyx_PyObject_FastCall(__pyx_t_12, __pyx_callargs+1-__pyx_t_7, 2+__pyx_t_7);
            __Pyx_XDECREF(__pyx_t_17); __pyx_t_17 = 0;
            if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 1209, __pyx_L11_except_error)
            __Pyx_GOTREF(__pyx_t_13);
            __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
          }
          if (unlikely((PyObject_SetItem(__pyx_v_value, __pyx_v_alias, __pyx_t_13) < 0))) __PYX_ERR(0, 1209, __pyx_L11_except_error)
          __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
+1210:             return _type(**value)
        __Pyx_XDECREF(__pyx_r);
        if (unlikely(__pyx_v_value == Py_None)) {
          PyErr_SetString(PyExc_TypeError, "argument after ** must be a mapping, not NoneType");
          __PYX_ERR(0, 1210, __pyx_L11_except_error)
        }
        if (likely(PyDict_CheckExact(__pyx_v_value))) {
          __pyx_t_13 = PyDict_Copy(__pyx_v_value); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 1210, __pyx_L11_except_error)
          __Pyx_GOTREF(__pyx_t_13);
        } else {
          __pyx_t_13 = __Pyx_PyObject_CallOneArg((PyObject*)&PyDict_Type, __pyx_v_value); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 1210, __pyx_L11_except_error)
          __Pyx_GOTREF(__pyx_t_13);
        }
        __pyx_t_12 = __Pyx_PyObject_Call(__pyx_v__type, __pyx_empty_tuple, __pyx_t_13); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1210, __pyx_L11_except_error)
        __Pyx_GOTREF(__pyx_t_12);
        __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
        __pyx_r = __pyx_t_12;
        __pyx_t_12 = 0;
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
        goto __pyx_L12_except_return;
      }
+1211:         except Exception as exc:
      __pyx_t_11 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(&((PyTypeObject*)PyExc_Exception)[0])));
      if (__pyx_t_11) {
        __Pyx_AddTraceback("datamodel.converters._handle_dataclass_type", __pyx_clineno, __pyx_lineno, __pyx_filename);
        if (__Pyx_GetException(&__pyx_t_2, &__pyx_t_1, &__pyx_t_6) < 0) __PYX_ERR(0, 1211, __pyx_L11_except_error)
        __Pyx_XGOTREF(__pyx_t_2);
        __Pyx_XGOTREF(__pyx_t_1);
        __Pyx_XGOTREF(__pyx_t_6);
        __Pyx_INCREF(__pyx_t_1);
        __pyx_v_exc = __pyx_t_1;
        /*try:*/ {
/* … */
        /*finally:*/ {
          __pyx_L36_error:;
          /*exception exit:*/{
            __Pyx_PyThreadState_declare
            __Pyx_PyThreadState_assign
            __pyx_t_21 = 0; __pyx_t_22 = 0; __pyx_t_23 = 0; __pyx_t_24 = 0; __pyx_t_25 = 0; __pyx_t_26 = 0;
            __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
            __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
            __Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0;
            __Pyx_XDECREF(__pyx_t_17); __pyx_t_17 = 0;
            if (PY_MAJOR_VERSION >= 3) __Pyx_ExceptionSwap(&__pyx_t_24, &__pyx_t_25, &__pyx_t_26);
            if ((PY_MAJOR_VERSION < 3) || unlikely(__Pyx_GetException(&__pyx_t_21, &__pyx_t_22, &__pyx_t_23) < 0)) __Pyx_ErrFetch(&__pyx_t_21, &__pyx_t_22, &__pyx_t_23);
            __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_XGOTREF(__pyx_t_26);
            __pyx_t_11 = __pyx_lineno; __pyx_t_18 = __pyx_clineno; __pyx_t_20 = __pyx_filename;
            {
              __Pyx_DECREF(__pyx_v_exc); __pyx_v_exc = 0;
            }
            if (PY_MAJOR_VERSION >= 3) {
              __Pyx_XGIVEREF(__pyx_t_24);
              __Pyx_XGIVEREF(__pyx_t_25);
              __Pyx_XGIVEREF(__pyx_t_26);
              __Pyx_ExceptionReset(__pyx_t_24, __pyx_t_25, __pyx_t_26);
            }
            __Pyx_XGIVEREF(__pyx_t_21);
            __Pyx_XGIVEREF(__pyx_t_22);
            __Pyx_XGIVEREF(__pyx_t_23);
            __Pyx_ErrRestore(__pyx_t_21, __pyx_t_22, __pyx_t_23);
            __pyx_t_21 = 0; __pyx_t_22 = 0; __pyx_t_23 = 0; __pyx_t_24 = 0; __pyx_t_25 = 0; __pyx_t_26 = 0;
            __pyx_lineno = __pyx_t_11; __pyx_clineno = __pyx_t_18; __pyx_filename = __pyx_t_20;
            goto __pyx_L11_except_error;
          }
        }
      }
      goto __pyx_L11_except_error;
+1212:             raise ValueError(
          __pyx_t_12 = __Pyx_PyObject_CallOneArg(__pyx_builtin_ValueError, __pyx_t_13); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1212, __pyx_L36_error)
          __Pyx_GOTREF(__pyx_t_12);
          __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
          __Pyx_Raise(__pyx_t_12, 0, 0, 0);
          __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
          __PYX_ERR(0, 1212, __pyx_L36_error)
        }
+1213:                 f"Invalid value for {name}:{_type} == {value}, error: {exc}"
          __pyx_t_12 = PyTuple_New(8); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1213, __pyx_L36_error)
          __Pyx_GOTREF(__pyx_t_12);
          __pyx_t_15 = 0;
          __pyx_t_19 = 127;
          __Pyx_INCREF(__pyx_kp_u_Invalid_value_for);
          __pyx_t_15 += 18;
          __Pyx_GIVEREF(__pyx_kp_u_Invalid_value_for);
          PyTuple_SET_ITEM(__pyx_t_12, 0, __pyx_kp_u_Invalid_value_for);
          __pyx_t_13 = __Pyx_PyUnicode_Unicode(__pyx_v_name); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 1213, __pyx_L36_error)
          __Pyx_GOTREF(__pyx_t_13);
          __pyx_t_19 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_13) > __pyx_t_19) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_13) : __pyx_t_19;
          __pyx_t_15 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_13);
          __Pyx_GIVEREF(__pyx_t_13);
          PyTuple_SET_ITEM(__pyx_t_12, 1, __pyx_t_13);
          __pyx_t_13 = 0;
          __Pyx_INCREF(__pyx_kp_u__6);
          __pyx_t_15 += 1;
          __Pyx_GIVEREF(__pyx_kp_u__6);
          PyTuple_SET_ITEM(__pyx_t_12, 2, __pyx_kp_u__6);
          __pyx_t_13 = __Pyx_PyObject_FormatSimple(__pyx_v__type, __pyx_empty_unicode); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 1213, __pyx_L36_error)
          __Pyx_GOTREF(__pyx_t_13);
          __pyx_t_19 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_13) > __pyx_t_19) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_13) : __pyx_t_19;
          __pyx_t_15 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_13);
          __Pyx_GIVEREF(__pyx_t_13);
          PyTuple_SET_ITEM(__pyx_t_12, 3, __pyx_t_13);
          __pyx_t_13 = 0;
          __Pyx_INCREF(__pyx_kp_u__11);
          __pyx_t_15 += 4;
          __Pyx_GIVEREF(__pyx_kp_u__11);
          PyTuple_SET_ITEM(__pyx_t_12, 4, __pyx_kp_u__11);
          __pyx_t_13 = __Pyx_PyObject_FormatSimple(__pyx_v_value, __pyx_empty_unicode); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 1213, __pyx_L36_error)
          __Pyx_GOTREF(__pyx_t_13);
          __pyx_t_19 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_13) > __pyx_t_19) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_13) : __pyx_t_19;
          __pyx_t_15 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_13);
          __Pyx_GIVEREF(__pyx_t_13);
          PyTuple_SET_ITEM(__pyx_t_12, 5, __pyx_t_13);
          __pyx_t_13 = 0;
          __Pyx_INCREF(__pyx_kp_u_error_2);
          __pyx_t_15 += 9;
          __Pyx_GIVEREF(__pyx_kp_u_error_2);
          PyTuple_SET_ITEM(__pyx_t_12, 6, __pyx_kp_u_error_2);
          __pyx_t_13 = __Pyx_PyObject_FormatSimple(__pyx_v_exc, __pyx_empty_unicode); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 1213, __pyx_L36_error)
          __Pyx_GOTREF(__pyx_t_13);
          __pyx_t_19 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_13) > __pyx_t_19) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_13) : __pyx_t_19;
          __pyx_t_15 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_13);
          __Pyx_GIVEREF(__pyx_t_13);
          PyTuple_SET_ITEM(__pyx_t_12, 7, __pyx_t_13);
          __pyx_t_13 = 0;
          __pyx_t_13 = __Pyx_PyUnicode_Join(__pyx_t_12, 8, __pyx_t_15, __pyx_t_19); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 1213, __pyx_L36_error)
          __Pyx_GOTREF(__pyx_t_13);
          __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
 1214:             )
+1215:     try:
  {
    /*try:*/ {
/* … */
    }
    __pyx_L42_error:;
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
    __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
    __Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0;
    __Pyx_XDECREF(__pyx_t_17); __pyx_t_17 = 0;
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
/* … */
    __pyx_L44_except_error:;
    __Pyx_XGIVEREF(__pyx_t_10);
    __Pyx_XGIVEREF(__pyx_t_9);
    __Pyx_XGIVEREF(__pyx_t_8);
    __Pyx_ExceptionReset(__pyx_t_10, __pyx_t_9, __pyx_t_8);
    goto __pyx_L1_error;
    __pyx_L46_try_return:;
    __Pyx_XGIVEREF(__pyx_t_10);
    __Pyx_XGIVEREF(__pyx_t_9);
    __Pyx_XGIVEREF(__pyx_t_8);
    __Pyx_ExceptionReset(__pyx_t_10, __pyx_t_9, __pyx_t_8);
    goto __pyx_L0;
  }
+1216:         if PyObject_IsInstance(value, (list, tuple)):
      __pyx_t_6 = PyTuple_New(2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1216, __pyx_L42_error)
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_INCREF((PyObject *)(&PyList_Type));
      __Pyx_GIVEREF((PyObject *)(&PyList_Type));
      if (__Pyx_PyTuple_SET_ITEM(__pyx_t_6, 0, ((PyObject *)(&PyList_Type)))) __PYX_ERR(0, 1216, __pyx_L42_error);
      __Pyx_INCREF((PyObject *)(&PyTuple_Type));
      __Pyx_GIVEREF((PyObject *)(&PyTuple_Type));
      if (__Pyx_PyTuple_SET_ITEM(__pyx_t_6, 1, ((PyObject *)(&PyTuple_Type)))) __PYX_ERR(0, 1216, __pyx_L42_error);
      __pyx_t_3 = PyObject_IsInstance(__pyx_v_value, __pyx_t_6); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(0, 1216, __pyx_L42_error)
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      if (__pyx_t_3) {
/* … */
      }
+1217:             return _type(*value)
        __Pyx_XDECREF(__pyx_r);
        __pyx_t_6 = __Pyx_PySequence_Tuple(__pyx_v_value); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1217, __pyx_L42_error)
        __Pyx_GOTREF(__pyx_t_6);
        __pyx_t_1 = __Pyx_PyObject_Call(__pyx_v__type, __pyx_t_6, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1217, __pyx_L42_error)
        __Pyx_GOTREF(__pyx_t_1);
        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
        __pyx_r = __pyx_t_1;
        __pyx_t_1 = 0;
        goto __pyx_L46_try_return;
 1218:         else:
 1219:             # If a converter exists for this type, use it:
+1220:             if converter:
      /*else*/ {
        __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_v_converter); if (unlikely((__pyx_t_3 < 0))) __PYX_ERR(0, 1220, __pyx_L42_error)
        if (__pyx_t_3) {
/* … */
        }
+1221:                 return converter(name, value, _type, parent)
          __Pyx_XDECREF(__pyx_r);
          __Pyx_INCREF(__pyx_v_converter);
          __pyx_t_6 = __pyx_v_converter; __pyx_t_2 = NULL;
          __pyx_t_7 = 0;
          #if CYTHON_UNPACK_METHODS
          if (unlikely(PyMethod_Check(__pyx_t_6))) {
            __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_6);
            if (likely(__pyx_t_2)) {
              PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6);
              __Pyx_INCREF(__pyx_t_2);
              __Pyx_INCREF(function);
              __Pyx_DECREF_SET(__pyx_t_6, function);
              __pyx_t_7 = 1;
            }
          }
          #endif
          {
            PyObject *__pyx_callargs[5] = {__pyx_t_2, __pyx_v_name, __pyx_v_value, __pyx_v__type, __pyx_v_parent};
            __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_6, __pyx_callargs+1-__pyx_t_7, 4+__pyx_t_7);
            __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
            if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1221, __pyx_L42_error)
            __Pyx_GOTREF(__pyx_t_1);
            __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
          }
          __pyx_r = __pyx_t_1;
          __pyx_t_1 = 0;
          goto __pyx_L46_try_return;
+1222:             if as_objects:
        __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_v_as_objects); if (unlikely((__pyx_t_3 < 0))) __PYX_ERR(0, 1222, __pyx_L42_error)
        if (__pyx_t_3) {
/* … */
        }
 1223:                 # If alias exists, adjust the key passed to the dataclass
+1224:                 if not alias:
          __pyx_t_3 = (__pyx_v_alias != Py_None)&&(__Pyx_PyUnicode_IS_TRUE(__pyx_v_alias) != 0);
          __pyx_t_4 = (!__pyx_t_3);
          if (__pyx_t_4) {
/* … */
          }
+1225:                     alias = name
            __Pyx_INCREF(__pyx_v_name);
            __Pyx_DECREF_SET(__pyx_v_alias, __pyx_v_name);
 1226:                 # convert the list to the dataclass
+1227:                 return _type(**{alias: value})
          __Pyx_XDECREF(__pyx_r);
          __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1227, __pyx_L42_error)
          __Pyx_GOTREF(__pyx_t_1);
          if (unlikely(PyDict_Contains(__pyx_t_1, __pyx_v_alias))) {
            __Pyx_RaiseDoubleKeywordsError("function", __pyx_v_alias); __PYX_ERR(0, 1227, __pyx_L42_error)
          } else {
            if (PyDict_SetItem(__pyx_t_1, __pyx_v_alias, __pyx_v_value) < 0) __PYX_ERR(0, 1227, __pyx_L42_error)
          }
          __pyx_t_6 = __Pyx_PyObject_Call(__pyx_v__type, __pyx_empty_tuple, __pyx_t_1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1227, __pyx_L42_error)
          __Pyx_GOTREF(__pyx_t_6);
          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
          __pyx_r = __pyx_t_6;
          __pyx_t_6 = 0;
          goto __pyx_L46_try_return;
+1228:             if PyObject_IsInstance(value, (int, str, UUID)):
        __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_UUID); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1228, __pyx_L42_error)
        __Pyx_GOTREF(__pyx_t_6);
        __pyx_t_1 = PyTuple_New(3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1228, __pyx_L42_error)
        __Pyx_GOTREF(__pyx_t_1);
        __Pyx_INCREF((PyObject *)(&PyInt_Type));
        __Pyx_GIVEREF((PyObject *)(&PyInt_Type));
        if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 0, ((PyObject *)(&PyInt_Type)))) __PYX_ERR(0, 1228, __pyx_L42_error);
        __Pyx_INCREF((PyObject *)(&PyUnicode_Type));
        __Pyx_GIVEREF((PyObject *)(&PyUnicode_Type));
        if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 1, ((PyObject *)(&PyUnicode_Type)))) __PYX_ERR(0, 1228, __pyx_L42_error);
        __Pyx_GIVEREF(__pyx_t_6);
        if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 2, __pyx_t_6)) __PYX_ERR(0, 1228, __pyx_L42_error);
        __pyx_t_6 = 0;
        __pyx_t_4 = PyObject_IsInstance(__pyx_v_value, __pyx_t_1); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(0, 1228, __pyx_L42_error)
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        if (__pyx_t_4) {
/* … */
        }
+1229:                 return value
          __Pyx_XDECREF(__pyx_r);
          __Pyx_INCREF(__pyx_v_value);
          __pyx_r = __pyx_v_value;
          goto __pyx_L46_try_return;
+1230:             if isdc:
        if (__pyx_v_isdc) {
/* … */
        }
+1231:                 if not alias:
          __pyx_t_4 = (__pyx_v_alias != Py_None)&&(__Pyx_PyUnicode_IS_TRUE(__pyx_v_alias) != 0);
          __pyx_t_3 = (!__pyx_t_4);
          if (__pyx_t_3) {
/* … */
          }
+1232:                     alias = name
            __Pyx_INCREF(__pyx_v_name);
            __Pyx_DECREF_SET(__pyx_v_alias, __pyx_v_name);
+1233:                 return _type(**{alias: value})
          __Pyx_XDECREF(__pyx_r);
          __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1233, __pyx_L42_error)
          __Pyx_GOTREF(__pyx_t_1);
          if (unlikely(PyDict_Contains(__pyx_t_1, __pyx_v_alias))) {
            __Pyx_RaiseDoubleKeywordsError("function", __pyx_v_alias); __PYX_ERR(0, 1233, __pyx_L42_error)
          } else {
            if (PyDict_SetItem(__pyx_t_1, __pyx_v_alias, __pyx_v_value) < 0) __PYX_ERR(0, 1233, __pyx_L42_error)
          }
          __pyx_t_6 = __Pyx_PyObject_Call(__pyx_v__type, __pyx_empty_tuple, __pyx_t_1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1233, __pyx_L42_error)
          __Pyx_GOTREF(__pyx_t_6);
          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
          __pyx_r = __pyx_t_6;
          __pyx_t_6 = 0;
          goto __pyx_L46_try_return;
 1234:             else:
+1235:                 return _type(value)
        /*else*/ {
          __Pyx_XDECREF(__pyx_r);
          __Pyx_INCREF(__pyx_v__type);
          __pyx_t_1 = __pyx_v__type; __pyx_t_2 = NULL;
          __pyx_t_7 = 0;
          #if CYTHON_UNPACK_METHODS
          if (unlikely(PyMethod_Check(__pyx_t_1))) {
            __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_1);
            if (likely(__pyx_t_2)) {
              PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
              __Pyx_INCREF(__pyx_t_2);
              __Pyx_INCREF(function);
              __Pyx_DECREF_SET(__pyx_t_1, function);
              __pyx_t_7 = 1;
            }
          }
          #endif
          {
            PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_v_value};
            __pyx_t_6 = __Pyx_PyObject_FastCall(__pyx_t_1, __pyx_callargs+1-__pyx_t_7, 1+__pyx_t_7);
            __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
            if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1235, __pyx_L42_error)
            __Pyx_GOTREF(__pyx_t_6);
            __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
          }
          __pyx_r = __pyx_t_6;
          __pyx_t_6 = 0;
          goto __pyx_L46_try_return;
        }
      }
+1236:     except Exception as exc:
    __pyx_t_18 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(&((PyTypeObject*)PyExc_Exception)[0])));
    if (__pyx_t_18) {
      __Pyx_AddTraceback("datamodel.converters._handle_dataclass_type", __pyx_clineno, __pyx_lineno, __pyx_filename);
      if (__Pyx_GetException(&__pyx_t_6, &__pyx_t_1, &__pyx_t_2) < 0) __PYX_ERR(0, 1236, __pyx_L44_except_error)
      __Pyx_XGOTREF(__pyx_t_6);
      __Pyx_XGOTREF(__pyx_t_1);
      __Pyx_XGOTREF(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_1);
      __pyx_v_exc = __pyx_t_1;
      /*try:*/ {
/* … */
      /*finally:*/ {
        __pyx_L60_error:;
        /*exception exit:*/{
          __Pyx_PyThreadState_declare
          __Pyx_PyThreadState_assign
          __pyx_t_26 = 0; __pyx_t_25 = 0; __pyx_t_24 = 0; __pyx_t_23 = 0; __pyx_t_22 = 0; __pyx_t_21 = 0;
          __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
          __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
          __Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0;
          __Pyx_XDECREF(__pyx_t_17); __pyx_t_17 = 0;
          if (PY_MAJOR_VERSION >= 3) __Pyx_ExceptionSwap(&__pyx_t_23, &__pyx_t_22, &__pyx_t_21);
          if ((PY_MAJOR_VERSION < 3) || unlikely(__Pyx_GetException(&__pyx_t_26, &__pyx_t_25, &__pyx_t_24) < 0)) __Pyx_ErrFetch(&__pyx_t_26, &__pyx_t_25, &__pyx_t_24);
          __Pyx_XGOTREF(__pyx_t_26);
          __Pyx_XGOTREF(__pyx_t_25);
          __Pyx_XGOTREF(__pyx_t_24);
          __Pyx_XGOTREF(__pyx_t_23);
          __Pyx_XGOTREF(__pyx_t_22);
          __Pyx_XGOTREF(__pyx_t_21);
          __pyx_t_18 = __pyx_lineno; __pyx_t_11 = __pyx_clineno; __pyx_t_27 = __pyx_filename;
          {
            __Pyx_DECREF(__pyx_v_exc); __pyx_v_exc = 0;
          }
          if (PY_MAJOR_VERSION >= 3) {
            __Pyx_XGIVEREF(__pyx_t_23);
            __Pyx_XGIVEREF(__pyx_t_22);
            __Pyx_XGIVEREF(__pyx_t_21);
            __Pyx_ExceptionReset(__pyx_t_23, __pyx_t_22, __pyx_t_21);
          }
          __Pyx_XGIVEREF(__pyx_t_26);
          __Pyx_XGIVEREF(__pyx_t_25);
          __Pyx_XGIVEREF(__pyx_t_24);
          __Pyx_ErrRestore(__pyx_t_26, __pyx_t_25, __pyx_t_24);
          __pyx_t_26 = 0; __pyx_t_25 = 0; __pyx_t_24 = 0; __pyx_t_23 = 0; __pyx_t_22 = 0; __pyx_t_21 = 0;
          __pyx_lineno = __pyx_t_18; __pyx_clineno = __pyx_t_11; __pyx_filename = __pyx_t_27;
          goto __pyx_L44_except_error;
        }
      }
    }
    goto __pyx_L44_except_error;
+1237:         raise ValueError(
        __pyx_t_12 = __Pyx_PyObject_CallOneArg(__pyx_builtin_ValueError, __pyx_t_13); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1237, __pyx_L60_error)
        __Pyx_GOTREF(__pyx_t_12);
        __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
        __Pyx_Raise(__pyx_t_12, 0, 0, 0);
        __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
        __PYX_ERR(0, 1237, __pyx_L60_error)
      }
+1238:             f"Invalid value for {name}:{_type} == {value}, error: {exc}"
        __pyx_t_12 = PyTuple_New(8); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1238, __pyx_L60_error)
        __Pyx_GOTREF(__pyx_t_12);
        __pyx_t_15 = 0;
        __pyx_t_19 = 127;
        __Pyx_INCREF(__pyx_kp_u_Invalid_value_for);
        __pyx_t_15 += 18;
        __Pyx_GIVEREF(__pyx_kp_u_Invalid_value_for);
        PyTuple_SET_ITEM(__pyx_t_12, 0, __pyx_kp_u_Invalid_value_for);
        __pyx_t_13 = __Pyx_PyUnicode_Unicode(__pyx_v_name); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 1238, __pyx_L60_error)
        __Pyx_GOTREF(__pyx_t_13);
        __pyx_t_19 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_13) > __pyx_t_19) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_13) : __pyx_t_19;
        __pyx_t_15 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_13);
        __Pyx_GIVEREF(__pyx_t_13);
        PyTuple_SET_ITEM(__pyx_t_12, 1, __pyx_t_13);
        __pyx_t_13 = 0;
        __Pyx_INCREF(__pyx_kp_u__6);
        __pyx_t_15 += 1;
        __Pyx_GIVEREF(__pyx_kp_u__6);
        PyTuple_SET_ITEM(__pyx_t_12, 2, __pyx_kp_u__6);
        __pyx_t_13 = __Pyx_PyObject_FormatSimple(__pyx_v__type, __pyx_empty_unicode); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 1238, __pyx_L60_error)
        __Pyx_GOTREF(__pyx_t_13);
        __pyx_t_19 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_13) > __pyx_t_19) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_13) : __pyx_t_19;
        __pyx_t_15 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_13);
        __Pyx_GIVEREF(__pyx_t_13);
        PyTuple_SET_ITEM(__pyx_t_12, 3, __pyx_t_13);
        __pyx_t_13 = 0;
        __Pyx_INCREF(__pyx_kp_u__11);
        __pyx_t_15 += 4;
        __Pyx_GIVEREF(__pyx_kp_u__11);
        PyTuple_SET_ITEM(__pyx_t_12, 4, __pyx_kp_u__11);
        __pyx_t_13 = __Pyx_PyObject_FormatSimple(__pyx_v_value, __pyx_empty_unicode); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 1238, __pyx_L60_error)
        __Pyx_GOTREF(__pyx_t_13);
        __pyx_t_19 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_13) > __pyx_t_19) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_13) : __pyx_t_19;
        __pyx_t_15 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_13);
        __Pyx_GIVEREF(__pyx_t_13);
        PyTuple_SET_ITEM(__pyx_t_12, 5, __pyx_t_13);
        __pyx_t_13 = 0;
        __Pyx_INCREF(__pyx_kp_u_error_2);
        __pyx_t_15 += 9;
        __Pyx_GIVEREF(__pyx_kp_u_error_2);
        PyTuple_SET_ITEM(__pyx_t_12, 6, __pyx_kp_u_error_2);
        __pyx_t_13 = __Pyx_PyObject_FormatSimple(__pyx_v_exc, __pyx_empty_unicode); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 1238, __pyx_L60_error)
        __Pyx_GOTREF(__pyx_t_13);
        __pyx_t_19 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_13) > __pyx_t_19) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_13) : __pyx_t_19;
        __pyx_t_15 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_13);
        __Pyx_GIVEREF(__pyx_t_13);
        PyTuple_SET_ITEM(__pyx_t_12, 7, __pyx_t_13);
        __pyx_t_13 = 0;
        __pyx_t_13 = __Pyx_PyUnicode_Join(__pyx_t_12, 8, __pyx_t_15, __pyx_t_19); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 1238, __pyx_L60_error)
        __Pyx_GOTREF(__pyx_t_13);
        __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
 1239:         )
 1240: 
+1241: cdef object _handle_list_of_dataclasses(
static PyObject *__pyx_f_9datamodel_10converters__handle_list_of_dataclasses(CYTHON_UNUSED PyObject *__pyx_v_field, PyObject *__pyx_v_name, PyObject *__pyx_v_value, PyObject *__pyx_v__type, struct __pyx_opt_args_9datamodel_10converters__handle_list_of_dataclasses *__pyx_optional_args) {
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_XDECREF(__pyx_t_10);
  __Pyx_AddTraceback("datamodel.converters._handle_list_of_dataclasses", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_sub_type);
  __Pyx_XDECREF(__pyx_v_key);
  __Pyx_XDECREF(__pyx_v_converter);
  __Pyx_XDECREF(__pyx_v_new_list);
  __Pyx_XDECREF(__pyx_v_item);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
struct __pyx_opt_args_9datamodel_10converters__handle_list_of_dataclasses {
  int __pyx_n;
  PyObject *parent;
};
 1242:     object field,
 1243:     str name,
 1244:     object value,
 1245:     object _type,
+1246:     object parent = None
  PyObject *__pyx_v_parent = ((PyObject *)Py_None);
  PyObject *__pyx_v_sub_type = NULL;
  PyObject *__pyx_v_key = NULL;
  PyObject *__pyx_v_converter = NULL;
  PyObject *__pyx_v_new_list = NULL;
  PyObject *__pyx_v_item = NULL;
  PyObject *__pyx_r = NULL;
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_parent = __pyx_optional_args->parent;
    }
  }
 1247: ):
 1248:     """
 1249:     _handle_list_of_dataclasses.
 1250: 
 1251:     Process a list field that is annotated as List[SomeDataclass].
 1252:     If there's a registered converter for the sub-dataclass, call it;
 1253:     otherwise, build the sub-dataclass using default logic.
 1254:     """
+1255:     try:
  {
    /*try:*/ {
/* … */
    }
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    goto __pyx_L8_try_end;
    __pyx_L3_error:;
    __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
/* … */
    __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);
    __pyx_L8_try_end:;
  }
+1256:         sub_type = _type.__args__[0]
      __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v__type, __pyx_n_s_args); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1256, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_t_5 = __Pyx_GetItemInt(__pyx_t_4, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1256, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __pyx_v_sub_type = __pyx_t_5;
      __pyx_t_5 = 0;
+1257:         if is_dc(sub_type):
      __pyx_t_6 = __pyx_f_9datamodel_10converters_is_dc(__pyx_v_sub_type); if (unlikely(__pyx_t_6 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1257, __pyx_L3_error)
      if (__pyx_t_6) {
/* … */
      }
+1258:             key = (sub_type, name)
        __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1258, __pyx_L3_error)
        __Pyx_GOTREF(__pyx_t_5);
        __Pyx_INCREF(__pyx_v_sub_type);
        __Pyx_GIVEREF(__pyx_v_sub_type);
        if (__Pyx_PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_v_sub_type)) __PYX_ERR(0, 1258, __pyx_L3_error);
        __Pyx_INCREF(__pyx_v_name);
        __Pyx_GIVEREF(__pyx_v_name);
        if (__Pyx_PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_v_name)) __PYX_ERR(0, 1258, __pyx_L3_error);
        __pyx_v_key = ((PyObject*)__pyx_t_5);
        __pyx_t_5 = 0;
+1259:             converter = TYPE_PARSERS.get(key) or TYPE_PARSERS.get(_type)
        if (unlikely(__pyx_v_9datamodel_10converters_TYPE_PARSERS == Py_None)) {
          PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "get");
          __PYX_ERR(0, 1259, __pyx_L3_error)
        }
        __pyx_t_4 = __Pyx_PyDict_GetItemDefault(__pyx_v_9datamodel_10converters_TYPE_PARSERS, __pyx_v_key, Py_None); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1259, __pyx_L3_error)
        __Pyx_GOTREF(__pyx_t_4);
        __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely((__pyx_t_6 < 0))) __PYX_ERR(0, 1259, __pyx_L3_error)
        if (!__pyx_t_6) {
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
        } else {
          __Pyx_INCREF(__pyx_t_4);
          __pyx_t_5 = __pyx_t_4;
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          goto __pyx_L10_bool_binop_done;
        }
        if (unlikely(__pyx_v_9datamodel_10converters_TYPE_PARSERS == Py_None)) {
          PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "get");
          __PYX_ERR(0, 1259, __pyx_L3_error)
        }
        __pyx_t_4 = __Pyx_PyDict_GetItemDefault(__pyx_v_9datamodel_10converters_TYPE_PARSERS, __pyx_v__type, Py_None); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1259, __pyx_L3_error)
        __Pyx_GOTREF(__pyx_t_4);
        __Pyx_INCREF(__pyx_t_4);
        __pyx_t_5 = __pyx_t_4;
        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
        __pyx_L10_bool_binop_done:;
        __pyx_v_converter = __pyx_t_5;
        __pyx_t_5 = 0;
+1260:             new_list = []
        __pyx_t_5 = PyList_New(0); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1260, __pyx_L3_error)
        __Pyx_GOTREF(__pyx_t_5);
        __pyx_v_new_list = ((PyObject*)__pyx_t_5);
        __pyx_t_5 = 0;
+1261:             for item in value:
        if (likely(PyList_CheckExact(__pyx_v_value)) || PyTuple_CheckExact(__pyx_v_value)) {
          __pyx_t_5 = __pyx_v_value; __Pyx_INCREF(__pyx_t_5);
          __pyx_t_7 = 0;
          __pyx_t_8 = NULL;
        } else {
          __pyx_t_7 = -1; __pyx_t_5 = PyObject_GetIter(__pyx_v_value); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1261, __pyx_L3_error)
          __Pyx_GOTREF(__pyx_t_5);
          __pyx_t_8 = __Pyx_PyObject_GetIterNextFunc(__pyx_t_5); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1261, __pyx_L3_error)
        }
        for (;;) {
          if (likely(!__pyx_t_8)) {
            if (likely(PyList_CheckExact(__pyx_t_5))) {
              {
                Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_t_5);
                #if !CYTHON_ASSUME_SAFE_MACROS
                if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 1261, __pyx_L3_error)
                #endif
                if (__pyx_t_7 >= __pyx_temp) break;
              }
              #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
              __pyx_t_4 = PyList_GET_ITEM(__pyx_t_5, __pyx_t_7); __Pyx_INCREF(__pyx_t_4); __pyx_t_7++; if (unlikely((0 < 0))) __PYX_ERR(0, 1261, __pyx_L3_error)
              #else
              __pyx_t_4 = __Pyx_PySequence_ITEM(__pyx_t_5, __pyx_t_7); __pyx_t_7++; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1261, __pyx_L3_error)
              __Pyx_GOTREF(__pyx_t_4);
              #endif
            } else {
              {
                Py_ssize_t __pyx_temp = __Pyx_PyTuple_GET_SIZE(__pyx_t_5);
                #if !CYTHON_ASSUME_SAFE_MACROS
                if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 1261, __pyx_L3_error)
                #endif
                if (__pyx_t_7 >= __pyx_temp) break;
              }
              #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
              __pyx_t_4 = PyTuple_GET_ITEM(__pyx_t_5, __pyx_t_7); __Pyx_INCREF(__pyx_t_4); __pyx_t_7++; if (unlikely((0 < 0))) __PYX_ERR(0, 1261, __pyx_L3_error)
              #else
              __pyx_t_4 = __Pyx_PySequence_ITEM(__pyx_t_5, __pyx_t_7); __pyx_t_7++; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1261, __pyx_L3_error)
              __Pyx_GOTREF(__pyx_t_4);
              #endif
            }
          } else {
            __pyx_t_4 = __pyx_t_8(__pyx_t_5);
            if (unlikely(!__pyx_t_4)) {
              PyObject* exc_type = PyErr_Occurred();
              if (exc_type) {
                if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
                else __PYX_ERR(0, 1261, __pyx_L3_error)
              }
              break;
            }
            __Pyx_GOTREF(__pyx_t_4);
          }
          __Pyx_XDECREF_SET(__pyx_v_item, __pyx_t_4);
          __pyx_t_4 = 0;
/* … */
        }
        __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+1262:                 if converter:
          __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_v_converter); if (unlikely((__pyx_t_6 < 0))) __PYX_ERR(0, 1262, __pyx_L3_error)
          if (__pyx_t_6) {
/* … */
            goto __pyx_L14;
          }
+1263:                     new_list.append(converter(name, item, sub_type, parent))
            __Pyx_INCREF(__pyx_v_converter);
            __pyx_t_9 = __pyx_v_converter; __pyx_t_10 = NULL;
            __pyx_t_11 = 0;
            #if CYTHON_UNPACK_METHODS
            if (unlikely(PyMethod_Check(__pyx_t_9))) {
              __pyx_t_10 = PyMethod_GET_SELF(__pyx_t_9);
              if (likely(__pyx_t_10)) {
                PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_9);
                __Pyx_INCREF(__pyx_t_10);
                __Pyx_INCREF(function);
                __Pyx_DECREF_SET(__pyx_t_9, function);
                __pyx_t_11 = 1;
              }
            }
            #endif
            {
              PyObject *__pyx_callargs[5] = {__pyx_t_10, __pyx_v_name, __pyx_v_item, __pyx_v_sub_type, __pyx_v_parent};
              __pyx_t_4 = __Pyx_PyObject_FastCall(__pyx_t_9, __pyx_callargs+1-__pyx_t_11, 4+__pyx_t_11);
              __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
              if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1263, __pyx_L3_error)
              __Pyx_GOTREF(__pyx_t_4);
              __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
            }
            __pyx_t_12 = __Pyx_PyList_Append(__pyx_v_new_list, __pyx_t_4); if (unlikely(__pyx_t_12 == ((int)-1))) __PYX_ERR(0, 1263, __pyx_L3_error)
            __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+1264:                 elif isinstance(item, dict):
          __pyx_t_6 = PyDict_Check(__pyx_v_item); 
          if (__pyx_t_6) {
/* … */
            goto __pyx_L14;
          }
+1265:                     new_list.append(sub_type(**item))
            if (unlikely(__pyx_v_item == Py_None)) {
              PyErr_SetString(PyExc_TypeError, "argument after ** must be a mapping, not NoneType");
              __PYX_ERR(0, 1265, __pyx_L3_error)
            }
            if (likely(PyDict_CheckExact(__pyx_v_item))) {
              __pyx_t_4 = PyDict_Copy(__pyx_v_item); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1265, __pyx_L3_error)
              __Pyx_GOTREF(__pyx_t_4);
            } else {
              __pyx_t_4 = __Pyx_PyObject_CallOneArg((PyObject*)&PyDict_Type, __pyx_v_item); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1265, __pyx_L3_error)
              __Pyx_GOTREF(__pyx_t_4);
            }
            __pyx_t_9 = __Pyx_PyObject_Call(__pyx_v_sub_type, __pyx_empty_tuple, __pyx_t_4); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1265, __pyx_L3_error)
            __Pyx_GOTREF(__pyx_t_9);
            __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
            __pyx_t_12 = __Pyx_PyList_Append(__pyx_v_new_list, __pyx_t_9); if (unlikely(__pyx_t_12 == ((int)-1))) __PYX_ERR(0, 1265, __pyx_L3_error)
            __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
 1266:                 else:
+1267:                     new_list.append(item)
          /*else*/ {
            __pyx_t_12 = __Pyx_PyList_Append(__pyx_v_new_list, __pyx_v_item); if (unlikely(__pyx_t_12 == ((int)-1))) __PYX_ERR(0, 1267, __pyx_L3_error)
          }
          __pyx_L14:;
+1268:             return new_list
        __Pyx_XDECREF(__pyx_r);
        __Pyx_INCREF(__pyx_v_new_list);
        __pyx_r = __pyx_v_new_list;
        goto __pyx_L7_try_return;
+1269:     except AttributeError:
    __pyx_t_13 = __Pyx_PyErr_ExceptionMatches(__pyx_builtin_AttributeError);
    if (__pyx_t_13) {
      __Pyx_ErrRestore(0,0,0);
      goto __pyx_L4_exception_handled;
    }
    goto __pyx_L5_except_error;
 1270:         pass
+1271:     return value
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_value);
  __pyx_r = __pyx_v_value;
  goto __pyx_L0;
 1272: 
+1273: cdef object _handle_default_value(
static PyObject *__pyx_f_9datamodel_10converters__handle_default_value(PyObject *__pyx_v_obj, PyObject *__pyx_v_name, PyObject *__pyx_v_value, PyObject *__pyx_v_default_func, PyObject *__pyx_v_default_is_callable) {
  PyObject *__pyx_v_new_val = NULL;
  PyObject *__pyx_r = NULL;
/* … */
  /* 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_13);
  __Pyx_XDECREF(__pyx_t_14);
  __Pyx_XDECREF(__pyx_t_15);
  __Pyx_AddTraceback("datamodel.converters._handle_default_value", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_new_val);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 1274:     object obj,
 1275:     str name,
 1276:     object value,
 1277:     object default_func,
 1278:     object default_is_callable
 1279: ):
 1280:     """Handle default value of fields."""
 1281:     # If value is callable, try calling it directly
+1282:     if PyCallable_Check(value):
  __pyx_t_1 = PyCallable_Check(__pyx_v_value);
  if (__pyx_t_1) {
/* … */
  }
+1283:         try:
    {
      /*try:*/ {
/* … */
      }
      __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;
      goto __pyx_L9_try_end;
      __pyx_L4_error:;
      __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
/* … */
      __pyx_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_L5_exception_handled:;
      __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);
      __pyx_L9_try_end:;
    }
+1284:             new_val = value()
        __Pyx_INCREF(__pyx_v_value);
        __pyx_t_6 = __pyx_v_value; __pyx_t_7 = NULL;
        __pyx_t_8 = 0;
        #if CYTHON_UNPACK_METHODS
        if (unlikely(PyMethod_Check(__pyx_t_6))) {
          __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_6);
          if (likely(__pyx_t_7)) {
            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6);
            __Pyx_INCREF(__pyx_t_7);
            __Pyx_INCREF(function);
            __Pyx_DECREF_SET(__pyx_t_6, function);
            __pyx_t_8 = 1;
          }
        }
        #endif
        {
          PyObject *__pyx_callargs[2] = {__pyx_t_7, NULL};
          __pyx_t_5 = __Pyx_PyObject_FastCall(__pyx_t_6, __pyx_callargs+1-__pyx_t_8, 0+__pyx_t_8);
          __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
          if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1284, __pyx_L4_error)
          __Pyx_GOTREF(__pyx_t_5);
          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
        }
        __pyx_v_new_val = __pyx_t_5;
        __pyx_t_5 = 0;
+1285:         except TypeError:
      __pyx_t_9 = __Pyx_PyErr_ExceptionMatches(__pyx_builtin_TypeError);
      if (__pyx_t_9) {
        __Pyx_AddTraceback("datamodel.converters._handle_default_value", __pyx_clineno, __pyx_lineno, __pyx_filename);
        if (__Pyx_GetException(&__pyx_t_5, &__pyx_t_6, &__pyx_t_7) < 0) __PYX_ERR(0, 1285, __pyx_L6_except_error)
        __Pyx_XGOTREF(__pyx_t_5);
        __Pyx_XGOTREF(__pyx_t_6);
        __Pyx_XGOTREF(__pyx_t_7);
+1286:             try:
        {
          /*try:*/ {
/* … */
          }
          __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
          __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
          __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
          goto __pyx_L19_try_end;
          __pyx_L12_error:;
          __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_L14_except_error:;
          __Pyx_XGIVEREF(__pyx_t_10);
          __Pyx_XGIVEREF(__pyx_t_11);
          __Pyx_XGIVEREF(__pyx_t_12);
          __Pyx_ExceptionReset(__pyx_t_10, __pyx_t_11, __pyx_t_12);
          goto __pyx_L6_except_error;
          __pyx_L13_exception_handled:;
          __Pyx_XGIVEREF(__pyx_t_10);
          __Pyx_XGIVEREF(__pyx_t_11);
          __Pyx_XGIVEREF(__pyx_t_12);
          __Pyx_ExceptionReset(__pyx_t_10, __pyx_t_11, __pyx_t_12);
          __pyx_L19_try_end:;
        }
        __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_L5_exception_handled;
      }
      goto __pyx_L6_except_error;
+1287:                 new_val = default_func()
            __Pyx_INCREF(__pyx_v_default_func);
            __pyx_t_14 = __pyx_v_default_func; __pyx_t_15 = NULL;
            __pyx_t_8 = 0;
            #if CYTHON_UNPACK_METHODS
            if (unlikely(PyMethod_Check(__pyx_t_14))) {
              __pyx_t_15 = PyMethod_GET_SELF(__pyx_t_14);
              if (likely(__pyx_t_15)) {
                PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_14);
                __Pyx_INCREF(__pyx_t_15);
                __Pyx_INCREF(function);
                __Pyx_DECREF_SET(__pyx_t_14, function);
                __pyx_t_8 = 1;
              }
            }
            #endif
            {
              PyObject *__pyx_callargs[2] = {__pyx_t_15, NULL};
              __pyx_t_13 = __Pyx_PyObject_FastCall(__pyx_t_14, __pyx_callargs+1-__pyx_t_8, 0+__pyx_t_8);
              __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
              if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 1287, __pyx_L12_error)
              __Pyx_GOTREF(__pyx_t_13);
              __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
            }
            __Pyx_XDECREF_SET(__pyx_v_new_val, __pyx_t_13);
            __pyx_t_13 = 0;
+1288:             except TypeError:
          __pyx_t_9 = __Pyx_PyErr_ExceptionMatches(__pyx_builtin_TypeError);
          if (__pyx_t_9) {
            __Pyx_AddTraceback("datamodel.converters._handle_default_value", __pyx_clineno, __pyx_lineno, __pyx_filename);
            if (__Pyx_GetException(&__pyx_t_13, &__pyx_t_14, &__pyx_t_15) < 0) __PYX_ERR(0, 1288, __pyx_L14_except_error)
            __Pyx_XGOTREF(__pyx_t_13);
            __Pyx_XGOTREF(__pyx_t_14);
            __Pyx_XGOTREF(__pyx_t_15);
+1289:                 new_val = None
            __Pyx_INCREF(Py_None);
            __Pyx_XDECREF_SET(__pyx_v_new_val, Py_None);
            __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;
            goto __pyx_L13_exception_handled;
          }
          goto __pyx_L14_except_error;
+1290:         setattr(obj, name, new_val)
    __pyx_t_16 = PyObject_SetAttr(__pyx_v_obj, __pyx_v_name, __pyx_v_new_val); if (unlikely(__pyx_t_16 == ((int)-1))) __PYX_ERR(0, 1290, __pyx_L1_error)
+1291:         return new_val
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(__pyx_v_new_val);
    __pyx_r = __pyx_v_new_val;
    goto __pyx_L0;
 1292: 
 1293:     # If f.default is callable and value is None
+1294:     if default_is_callable and value is None:
  __pyx_t_17 = __Pyx_PyObject_IsTrue(__pyx_v_default_is_callable); if (unlikely((__pyx_t_17 < 0))) __PYX_ERR(0, 1294, __pyx_L1_error)
  if (__pyx_t_17) {
  } else {
    __pyx_t_1 = __pyx_t_17;
    goto __pyx_L23_bool_binop_done;
  }
  __pyx_t_17 = (__pyx_v_value == Py_None);
  __pyx_t_1 = __pyx_t_17;
  __pyx_L23_bool_binop_done:;
  if (__pyx_t_1) {
/* … */
  }
+1295:         try:
    {
      /*try:*/ {
/* … */
      }
      __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
      goto __pyx_L30_try_end;
      __pyx_L25_error:;
      __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_5); __pyx_t_5 = 0;
      __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
/* … */
      __pyx_L27_except_error:;
      __Pyx_XGIVEREF(__pyx_t_4);
      __Pyx_XGIVEREF(__pyx_t_3);
      __Pyx_XGIVEREF(__pyx_t_2);
      __Pyx_ExceptionReset(__pyx_t_4, __pyx_t_3, __pyx_t_2);
      goto __pyx_L1_error;
      __pyx_L26_exception_handled:;
      __Pyx_XGIVEREF(__pyx_t_4);
      __Pyx_XGIVEREF(__pyx_t_3);
      __Pyx_XGIVEREF(__pyx_t_2);
      __Pyx_ExceptionReset(__pyx_t_4, __pyx_t_3, __pyx_t_2);
      __pyx_L30_try_end:;
    }
+1296:             new_val = default_func()
        __Pyx_INCREF(__pyx_v_default_func);
        __pyx_t_6 = __pyx_v_default_func; __pyx_t_5 = NULL;
        __pyx_t_8 = 0;
        #if CYTHON_UNPACK_METHODS
        if (unlikely(PyMethod_Check(__pyx_t_6))) {
          __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_6);
          if (likely(__pyx_t_5)) {
            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6);
            __Pyx_INCREF(__pyx_t_5);
            __Pyx_INCREF(function);
            __Pyx_DECREF_SET(__pyx_t_6, function);
            __pyx_t_8 = 1;
          }
        }
        #endif
        {
          PyObject *__pyx_callargs[2] = {__pyx_t_5, NULL};
          __pyx_t_7 = __Pyx_PyObject_FastCall(__pyx_t_6, __pyx_callargs+1-__pyx_t_8, 0+__pyx_t_8);
          __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
          if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1296, __pyx_L25_error)
          __Pyx_GOTREF(__pyx_t_7);
          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
        }
        __pyx_v_new_val = __pyx_t_7;
        __pyx_t_7 = 0;
+1297:         except (AttributeError, RuntimeError, TypeError):
      __pyx_t_9 = __Pyx_PyErr_ExceptionMatches(__pyx_builtin_AttributeError) || __Pyx_PyErr_ExceptionMatches(__pyx_builtin_RuntimeError) || __Pyx_PyErr_ExceptionMatches(__pyx_builtin_TypeError);
      if (__pyx_t_9) {
        __Pyx_AddTraceback("datamodel.converters._handle_default_value", __pyx_clineno, __pyx_lineno, __pyx_filename);
        if (__Pyx_GetException(&__pyx_t_7, &__pyx_t_6, &__pyx_t_5) < 0) __PYX_ERR(0, 1297, __pyx_L27_except_error)
        __Pyx_XGOTREF(__pyx_t_7);
        __Pyx_XGOTREF(__pyx_t_6);
        __Pyx_XGOTREF(__pyx_t_5);
+1298:             new_val = None
        __Pyx_INCREF(Py_None);
        __Pyx_XDECREF_SET(__pyx_v_new_val, Py_None);
        __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
        __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
        __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
        goto __pyx_L26_exception_handled;
      }
      goto __pyx_L27_except_error;
+1299:         setattr(obj, name, new_val)
    __pyx_t_16 = PyObject_SetAttr(__pyx_v_obj, __pyx_v_name, __pyx_v_new_val); if (unlikely(__pyx_t_16 == ((int)-1))) __PYX_ERR(0, 1299, __pyx_L1_error)
+1300:         return new_val
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(__pyx_v_new_val);
    __pyx_r = __pyx_v_new_val;
    goto __pyx_L0;
 1301: 
 1302:     # If there's a non-missing default and no value
+1303:     if not isinstance(default_func, _MISSING_TYPE) and value is None:
  __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_MISSING_TYPE); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1303, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_17 = PyObject_IsInstance(__pyx_v_default_func, __pyx_t_5); if (unlikely(__pyx_t_17 == ((int)-1))) __PYX_ERR(0, 1303, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_18 = (!__pyx_t_17);
  if (__pyx_t_18) {
  } else {
    __pyx_t_1 = __pyx_t_18;
    goto __pyx_L34_bool_binop_done;
  }
  __pyx_t_18 = (__pyx_v_value == Py_None);
  __pyx_t_1 = __pyx_t_18;
  __pyx_L34_bool_binop_done:;
  if (__pyx_t_1) {
/* … */
  }
+1304:         setattr(obj, name, default_func)
    __pyx_t_16 = PyObject_SetAttr(__pyx_v_obj, __pyx_v_name, __pyx_v_default_func); if (unlikely(__pyx_t_16 == ((int)-1))) __PYX_ERR(0, 1304, __pyx_L1_error)
+1305:         return default_func
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(__pyx_v_default_func);
    __pyx_r = __pyx_v_default_func;
    goto __pyx_L0;
 1306: 
 1307:     # Otherwise, return value as-is
+1308:     return value
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_value);
  __pyx_r = __pyx_v_value;
  goto __pyx_L0;
 1309: 
+1310: cdef dict _build_error(str name, str message, object exp):
static PyObject *__pyx_f_9datamodel_10converters__build_error(PyObject *__pyx_v_name, PyObject *__pyx_v_message, PyObject *__pyx_v_exp) {
  PyObject *__pyx_v_error_message = 0;
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("datamodel.converters._build_error", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_error_message);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 1311:     """
 1312:     _build_error.
 1313: 
 1314:     Build a tuple containing an error message and the name of the field.
 1315:     """
+1316:     cdef str error_message = message + name + ", Error: " + str(exp)
  __pyx_t_1 = __Pyx_PyUnicode_ConcatSafe(__pyx_v_message, __pyx_v_name); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1316, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyUnicode_ConcatInPlace(__pyx_t_1, __pyx_kp_u_Error); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1316, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyObject_Unicode(__pyx_v_exp); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1316, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_3 = __Pyx_PyUnicode_ConcatInPlace(__pyx_t_2, __pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1316, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_error_message = ((PyObject*)__pyx_t_3);
  __pyx_t_3 = 0;
+1317:     return {name: error_message}
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_3 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1317, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (PyDict_SetItem(__pyx_t_3, __pyx_v_name, __pyx_v_error_message) < 0) __PYX_ERR(0, 1317, __pyx_L1_error)
  __pyx_r = ((PyObject*)__pyx_t_3);
  __pyx_t_3 = 0;
  goto __pyx_L0;
 1318: 
+1319: cpdef dict processing_fields(object obj, list columns):
static PyObject *__pyx_pw_9datamodel_10converters_35processing_fields(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_9datamodel_10converters_processing_fields(PyObject *__pyx_v_obj, PyObject *__pyx_v_columns, CYTHON_UNUSED int __pyx_skip_dispatch) {
  PyObject *__pyx_v__encoder = 0;
  PyObject *__pyx_v__default = 0;
  PyObject *__pyx_v__type = 0;
  PyObject *__pyx_v_meta = 0;
  int __pyx_v_as_objects;
  int __pyx_v_no_nesting;
  PyObject *__pyx_v_type_args = 0;
  PyObject *__pyx_v_errors = 0;
  CYTHON_UNUSED PyObject *__pyx_v__typeinfo = 0;
  PyObject *__pyx_v_c_col = 0;
  PyObject *__pyx_v_name = 0;
  PyObject *__pyx_v_f = 0;
  PyObject *__pyx_v_value = 0;
  PyObject *__pyx_v_newval = 0;
  PyObject *__pyx_v_field_category = NULL;
  PyObject *__pyx_v_e = NULL;
  CYTHON_UNUSED PyObject *__pyx_v_typeinfo = NULL;
  PyObject *__pyx_v_metadata = NULL;
  PyObject *__pyx_v_ex = NULL;
  PyObject *__pyx_v_error = NULL;
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_XDECREF(__pyx_t_12);
  __Pyx_XDECREF(__pyx_t_15);
  __Pyx_XDECREF(__pyx_t_37);
  __Pyx_AddTraceback("datamodel.converters.processing_fields", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v__encoder);
  __Pyx_XDECREF(__pyx_v__default);
  __Pyx_XDECREF(__pyx_v__type);
  __Pyx_XDECREF(__pyx_v_meta);
  __Pyx_XDECREF(__pyx_v_type_args);
  __Pyx_XDECREF(__pyx_v_errors);
  __Pyx_XDECREF(__pyx_v__typeinfo);
  __Pyx_XDECREF(__pyx_v_c_col);
  __Pyx_XDECREF(__pyx_v_name);
  __Pyx_XDECREF(__pyx_v_f);
  __Pyx_XDECREF(__pyx_v_value);
  __Pyx_XDECREF(__pyx_v_newval);
  __Pyx_XDECREF(__pyx_v_field_category);
  __Pyx_XDECREF(__pyx_v_e);
  __Pyx_XDECREF(__pyx_v_typeinfo);
  __Pyx_XDECREF(__pyx_v_metadata);
  __Pyx_XDECREF(__pyx_v_ex);
  __Pyx_XDECREF(__pyx_v_error);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_9datamodel_10converters_35processing_fields(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_9datamodel_10converters_34processing_fields, "processing_fields(obj, list columns) -> dict\n\n    Process the fields (columns) of a dataclass object.\n\n    For each field, if a custom parser is attached (i.e. f.parser is not None),\n    it is used to convert the value. Otherwise, the standard conversion logic\n    (parse_basic, parse_typing, etc.) is applied.\n    ");
static PyMethodDef __pyx_mdef_9datamodel_10converters_35processing_fields = {"processing_fields", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9datamodel_10converters_35processing_fields, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_9datamodel_10converters_34processing_fields};
static PyObject *__pyx_pw_9datamodel_10converters_35processing_fields(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_obj = 0;
  PyObject *__pyx_v_columns = 0;
  #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("processing_fields (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_MACROS
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __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 **__pyx_pyargnames[] = {&__pyx_n_s_obj,&__pyx_n_s_columns,0};
  PyObject* values[2] = {0,0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_obj)) != 0)) {
          (void)__Pyx_Arg_NewRef_FASTCALL(values[0]);
          kw_args--;
        }
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1319, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_columns)) != 0)) {
          (void)__Pyx_Arg_NewRef_FASTCALL(values[1]);
          kw_args--;
        }
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1319, __pyx_L3_error)
        else {
          __Pyx_RaiseArgtupleInvalid("processing_fields", 1, 2, 2, 1); __PYX_ERR(0, 1319, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "processing_fields") < 0)) __PYX_ERR(0, 1319, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 2)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
      values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
    }
    __pyx_v_obj = values[0];
    __pyx_v_columns = ((PyObject*)values[1]);
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("processing_fields", 1, 2, 2, __pyx_nargs); __PYX_ERR(0, 1319, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  {
    Py_ssize_t __pyx_temp;
    for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
      __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]);
    }
  }
  __Pyx_AddTraceback("datamodel.converters.processing_fields", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_columns), (&PyList_Type), 1, "columns", 1))) __PYX_ERR(0, 1319, __pyx_L1_error)
  __pyx_r = __pyx_pf_9datamodel_10converters_34processing_fields(__pyx_self, __pyx_v_obj, __pyx_v_columns);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

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

static PyObject *__pyx_pf_9datamodel_10converters_34processing_fields(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_obj, PyObject *__pyx_v_columns) {
  PyObject *__pyx_r = NULL;
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_9datamodel_10converters_processing_fields(__pyx_v_obj, __pyx_v_columns, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1319, __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("datamodel.converters.processing_fields", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__46 = PyTuple_Pack(2, __pyx_n_s_obj, __pyx_n_s_columns); if (unlikely(!__pyx_tuple__46)) __PYX_ERR(0, 1319, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__46);
  __Pyx_GIVEREF(__pyx_tuple__46);
/* … */
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_9datamodel_10converters_35processing_fields, 0, __pyx_n_s_processing_fields, NULL, __pyx_n_s_datamodel_converters, __pyx_d, ((PyObject *)__pyx_codeobj__47)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1319, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_processing_fields, __pyx_t_2) < 0) __PYX_ERR(0, 1319, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_codeobj__47 = (PyObject*)__Pyx_PyCode_New(2, 0, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__46, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_datamodel_converters_pyx, __pyx_n_s_processing_fields, 1319, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__47)) __PYX_ERR(0, 1319, __pyx_L1_error)
 1320:     """
 1321:     Process the fields (columns) of a dataclass object.
 1322: 
 1323:     For each field, if a custom parser is attached (i.e. f.parser is not None),
 1324:     it is used to convert the value. Otherwise, the standard conversion logic
 1325:     (parse_basic, parse_typing, etc.) is applied.
 1326:     """
 1327:     cdef object new_val
+1328:     cdef object _encoder = None
  __Pyx_INCREF(Py_None);
  __pyx_v__encoder = Py_None;
+1329:     cdef object _default = None
  __Pyx_INCREF(Py_None);
  __pyx_v__default = Py_None;
+1330:     cdef object _type = None
  __Pyx_INCREF(Py_None);
  __pyx_v__type = Py_None;
+1331:     cdef object meta = obj.Meta
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_obj, __pyx_n_s_Meta); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1331, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_meta = __pyx_t_1;
  __pyx_t_1 = 0;
+1332:     cdef bint as_objects = meta.as_objects
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_meta, __pyx_n_s_as_objects); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1332, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_2 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1332, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_as_objects = __pyx_t_2;
+1333:     cdef bint no_nesting = meta.no_nesting
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_meta, __pyx_n_s_no_nesting); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1333, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_2 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1333, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_no_nesting = __pyx_t_2;
+1334:     cdef tuple type_args = ()
  __Pyx_INCREF(__pyx_empty_tuple);
  __pyx_v_type_args = __pyx_empty_tuple;
 1335:     # Error handling
+1336:     cdef dict errors = {}
  __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_v_errors = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
 1337:     # Type Information
+1338:     cdef dict _typeinfo = {}
  __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_v__typeinfo = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
 1339:     # Column information:
 1340:     cdef tuple c_col
 1341:     cdef str name
 1342:     cdef object f
 1343:     cdef object value
 1344:     cdef object newval
 1345: 
+1346:     for c_col in columns:
  if (unlikely(__pyx_v_columns == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
    __PYX_ERR(0, 1346, __pyx_L1_error)
  }
  __pyx_t_1 = __pyx_v_columns; __Pyx_INCREF(__pyx_t_1);
  __pyx_t_3 = 0;
  for (;;) {
    {
      Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_t_1);
      #if !CYTHON_ASSUME_SAFE_MACROS
      if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 1346, __pyx_L1_error)
      #endif
      if (__pyx_t_3 >= __pyx_temp) break;
    }
    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    __pyx_t_4 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_3); __Pyx_INCREF(__pyx_t_4); __pyx_t_3++; if (unlikely((0 < 0))) __PYX_ERR(0, 1346, __pyx_L1_error)
    #else
    __pyx_t_4 = __Pyx_PySequence_ITEM(__pyx_t_1, __pyx_t_3); __pyx_t_3++; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1346, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    #endif
    if (!(likely(PyTuple_CheckExact(__pyx_t_4))||((__pyx_t_4) == Py_None) || __Pyx_RaiseUnexpectedTypeError("tuple", __pyx_t_4))) __PYX_ERR(0, 1346, __pyx_L1_error)
    __Pyx_XDECREF_SET(__pyx_v_c_col, ((PyObject*)__pyx_t_4));
    __pyx_t_4 = 0;
/* … */
    __pyx_L3_continue:;
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+1347:         name = c_col[0]
    if (unlikely(__pyx_v_c_col == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
      __PYX_ERR(0, 1347, __pyx_L1_error)
    }
    __pyx_t_4 = __Pyx_GetItemInt_Tuple(__pyx_v_c_col, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1347, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    if (!(likely(PyUnicode_CheckExact(__pyx_t_4))||((__pyx_t_4) == Py_None) || __Pyx_RaiseUnexpectedTypeError("unicode", __pyx_t_4))) __PYX_ERR(0, 1347, __pyx_L1_error)
    __Pyx_XDECREF_SET(__pyx_v_name, ((PyObject*)__pyx_t_4));
    __pyx_t_4 = 0;
+1348:         f = c_col[1]
    if (unlikely(__pyx_v_c_col == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
      __PYX_ERR(0, 1348, __pyx_L1_error)
    }
    __pyx_t_4 = __Pyx_GetItemInt_Tuple(__pyx_v_c_col, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1348, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_XDECREF_SET(__pyx_v_f, __pyx_t_4);
    __pyx_t_4 = 0;
+1349:         value = getattr(obj, name)
    __pyx_t_4 = __Pyx_GetAttr(__pyx_v_obj, __pyx_v_name); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1349, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_XDECREF_SET(__pyx_v_value, __pyx_t_4);
    __pyx_t_4 = 0;
 1350:         # Use the precomputed field type category:
+1351:         field_category = f._type_category
    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_f, __pyx_n_s_type_category); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1351, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_XDECREF_SET(__pyx_v_field_category, __pyx_t_4);
    __pyx_t_4 = 0;
 1352: 
+1353:         if field_category == 'descriptor':
    __pyx_t_2 = (__Pyx_PyUnicode_Equals(__pyx_v_field_category, __pyx_n_u_descriptor, Py_EQ)); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 1353, __pyx_L1_error)
    if (__pyx_t_2) {
/* … */
    }
 1354:             # Handle descriptor-specific logic
+1355:             try:
      {
        /*try:*/ {
/* … */
        }
        __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
        __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
        __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
        goto __pyx_L13_try_end;
        __pyx_L6_error:;
        __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
        __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
        __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
/* … */
        __pyx_L8_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_L7_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_L13_try_end:;
      }
+1356:                 value = f.__get__(obj, type(obj))  # Get the descriptor value
          __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_f, __pyx_n_s_get_2); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1356, __pyx_L6_error)
          __Pyx_GOTREF(__pyx_t_8);
          __pyx_t_9 = NULL;
          __pyx_t_10 = 0;
          #if CYTHON_UNPACK_METHODS
          if (likely(PyMethod_Check(__pyx_t_8))) {
            __pyx_t_9 = PyMethod_GET_SELF(__pyx_t_8);
            if (likely(__pyx_t_9)) {
              PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_8);
              __Pyx_INCREF(__pyx_t_9);
              __Pyx_INCREF(function);
              __Pyx_DECREF_SET(__pyx_t_8, function);
              __pyx_t_10 = 1;
            }
          }
          #endif
          {
            PyObject *__pyx_callargs[3] = {__pyx_t_9, __pyx_v_obj, ((PyObject *)Py_TYPE(__pyx_v_obj))};
            __pyx_t_4 = __Pyx_PyObject_FastCall(__pyx_t_8, __pyx_callargs+1-__pyx_t_10, 2+__pyx_t_10);
            __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
            if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1356, __pyx_L6_error)
            __Pyx_GOTREF(__pyx_t_4);
            __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
          }
          __Pyx_DECREF_SET(__pyx_v_value, __pyx_t_4);
          __pyx_t_4 = 0;
+1357:                 PyObject_SetAttr(obj, name, value)
          __pyx_t_11 = PyObject_SetAttr(__pyx_v_obj, __pyx_v_name, __pyx_v_value); if (unlikely(__pyx_t_11 == ((int)-1))) __PYX_ERR(0, 1357, __pyx_L6_error)
+1358:             except Exception as e:
        __pyx_t_11 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(&((PyTypeObject*)PyExc_Exception)[0])));
        if (__pyx_t_11) {
          __Pyx_AddTraceback("datamodel.converters.processing_fields", __pyx_clineno, __pyx_lineno, __pyx_filename);
          if (__Pyx_GetException(&__pyx_t_4, &__pyx_t_8, &__pyx_t_9) < 0) __PYX_ERR(0, 1358, __pyx_L8_except_error)
          __Pyx_XGOTREF(__pyx_t_4);
          __Pyx_XGOTREF(__pyx_t_8);
          __Pyx_XGOTREF(__pyx_t_9);
          __Pyx_INCREF(__pyx_t_8);
          __Pyx_XDECREF_SET(__pyx_v_e, __pyx_t_8);
          /*try:*/ {
/* … */
          /*finally:*/ {
            /*normal exit:*/{
              __Pyx_DECREF(__pyx_v_e); __pyx_v_e = 0;
              goto __pyx_L20;
            }
            __pyx_L19_error:;
            /*exception exit:*/{
              __Pyx_PyThreadState_declare
              __Pyx_PyThreadState_assign
              __pyx_t_18 = 0; __pyx_t_19 = 0; __pyx_t_20 = 0; __pyx_t_21 = 0; __pyx_t_22 = 0; __pyx_t_23 = 0;
              __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
              __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
              if (PY_MAJOR_VERSION >= 3) __Pyx_ExceptionSwap(&__pyx_t_21, &__pyx_t_22, &__pyx_t_23);
              if ((PY_MAJOR_VERSION < 3) || unlikely(__Pyx_GetException(&__pyx_t_18, &__pyx_t_19, &__pyx_t_20) < 0)) __Pyx_ErrFetch(&__pyx_t_18, &__pyx_t_19, &__pyx_t_20);
              __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_XGOTREF(__pyx_t_23);
              __pyx_t_11 = __pyx_lineno; __pyx_t_16 = __pyx_clineno; __pyx_t_17 = __pyx_filename;
              {
                __Pyx_DECREF(__pyx_v_e); __pyx_v_e = 0;
              }
              if (PY_MAJOR_VERSION >= 3) {
                __Pyx_XGIVEREF(__pyx_t_21);
                __Pyx_XGIVEREF(__pyx_t_22);
                __Pyx_XGIVEREF(__pyx_t_23);
                __Pyx_ExceptionReset(__pyx_t_21, __pyx_t_22, __pyx_t_23);
              }
              __Pyx_XGIVEREF(__pyx_t_18);
              __Pyx_XGIVEREF(__pyx_t_19);
              __Pyx_XGIVEREF(__pyx_t_20);
              __Pyx_ErrRestore(__pyx_t_18, __pyx_t_19, __pyx_t_20);
              __pyx_t_18 = 0; __pyx_t_19 = 0; __pyx_t_20 = 0; __pyx_t_21 = 0; __pyx_t_22 = 0; __pyx_t_23 = 0;
              __pyx_lineno = __pyx_t_11; __pyx_clineno = __pyx_t_16; __pyx_filename = __pyx_t_17;
              goto __pyx_L8_except_error;
            }
            __pyx_L20:;
          }
          __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
          __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
          __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
          goto __pyx_L7_exception_handled;
        }
        goto __pyx_L8_except_error;
+1359:                 errors.update(_build_error(name, f"Descriptor Error on {name}: ", e))
            __pyx_t_12 = PyTuple_New(3); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1359, __pyx_L19_error)
            __Pyx_GOTREF(__pyx_t_12);
            __pyx_t_13 = 0;
            __pyx_t_14 = 127;
            __Pyx_INCREF(__pyx_kp_u_Descriptor_Error_on);
            __pyx_t_13 += 20;
            __Pyx_GIVEREF(__pyx_kp_u_Descriptor_Error_on);
            PyTuple_SET_ITEM(__pyx_t_12, 0, __pyx_kp_u_Descriptor_Error_on);
            __pyx_t_15 = __Pyx_PyUnicode_Unicode(__pyx_v_name); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 1359, __pyx_L19_error)
            __Pyx_GOTREF(__pyx_t_15);
            __pyx_t_14 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_15) > __pyx_t_14) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_15) : __pyx_t_14;
            __pyx_t_13 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_15);
            __Pyx_GIVEREF(__pyx_t_15);
            PyTuple_SET_ITEM(__pyx_t_12, 1, __pyx_t_15);
            __pyx_t_15 = 0;
            __Pyx_INCREF(__pyx_kp_u__7);
            __pyx_t_13 += 2;
            __Pyx_GIVEREF(__pyx_kp_u__7);
            PyTuple_SET_ITEM(__pyx_t_12, 2, __pyx_kp_u__7);
            __pyx_t_15 = __Pyx_PyUnicode_Join(__pyx_t_12, 3, __pyx_t_13, __pyx_t_14); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 1359, __pyx_L19_error)
            __Pyx_GOTREF(__pyx_t_15);
            __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
            __pyx_t_12 = __pyx_f_9datamodel_10converters__build_error(__pyx_v_name, ((PyObject*)__pyx_t_15), __pyx_v_e); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1359, __pyx_L19_error)
            __Pyx_GOTREF(__pyx_t_12);
            __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
            __pyx_t_15 = __Pyx_CallUnboundCMethod1(&__pyx_umethod_PyDict_Type_update, __pyx_v_errors, __pyx_t_12); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 1359, __pyx_L19_error)
            __Pyx_GOTREF(__pyx_t_15);
            __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
            __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
          }
+1360:             continue
      goto __pyx_L3_continue;
 1361: 
 1362:         # get type and default:
+1363:         _type = f.type
    __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_f, __pyx_n_s_type_2); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1363, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __Pyx_DECREF_SET(__pyx_v__type, __pyx_t_9);
    __pyx_t_9 = 0;
+1364:         _default = f.default
    __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_f, __pyx_n_s_default); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1364, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __Pyx_DECREF_SET(__pyx_v__default, __pyx_t_9);
    __pyx_t_9 = 0;
+1365:         typeinfo = f.typeinfo # cached info (e.g., type_args, default_callable)
    __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_f, __pyx_n_s_typeinfo); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1365, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __Pyx_XDECREF_SET(__pyx_v_typeinfo, __pyx_t_9);
    __pyx_t_9 = 0;
+1366:         type_args = f.type_args
    __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_f, __pyx_n_s_type_args); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1366, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    if (!(likely(PyTuple_CheckExact(__pyx_t_9))||((__pyx_t_9) == Py_None) || __Pyx_RaiseUnexpectedTypeError("tuple", __pyx_t_9))) __PYX_ERR(0, 1366, __pyx_L1_error)
    __Pyx_DECREF_SET(__pyx_v_type_args, ((PyObject*)__pyx_t_9));
    __pyx_t_9 = 0;
+1367:         try:
    {
      /*try:*/ {
/* … */
      }
      __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
      __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
      goto __pyx_L32_try_end;
      __pyx_L25_error:;
      __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
      __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
      __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
      __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
/* … */
      __pyx_L27_except_error:;
      __Pyx_XGIVEREF(__pyx_t_7);
      __Pyx_XGIVEREF(__pyx_t_6);
      __Pyx_XGIVEREF(__pyx_t_5);
      __Pyx_ExceptionReset(__pyx_t_7, __pyx_t_6, __pyx_t_5);
      goto __pyx_L1_error;
      __pyx_L26_exception_handled:;
      __Pyx_XGIVEREF(__pyx_t_7);
      __Pyx_XGIVEREF(__pyx_t_6);
      __Pyx_XGIVEREF(__pyx_t_5);
      __Pyx_ExceptionReset(__pyx_t_7, __pyx_t_6, __pyx_t_5);
      __pyx_L32_try_end:;
    }
+1368:             metadata = f.metadata
        __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_f, __pyx_n_s_metadata); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1368, __pyx_L25_error)
        __Pyx_GOTREF(__pyx_t_9);
        __Pyx_XDECREF_SET(__pyx_v_metadata, __pyx_t_9);
        __pyx_t_9 = 0;
+1369:         except AttributeError:
      __pyx_t_16 = __Pyx_PyErr_ExceptionMatches(__pyx_builtin_AttributeError);
      if (__pyx_t_16) {
        __Pyx_AddTraceback("datamodel.converters.processing_fields", __pyx_clineno, __pyx_lineno, __pyx_filename);
        if (__Pyx_GetException(&__pyx_t_9, &__pyx_t_8, &__pyx_t_4) < 0) __PYX_ERR(0, 1369, __pyx_L27_except_error)
        __Pyx_XGOTREF(__pyx_t_9);
        __Pyx_XGOTREF(__pyx_t_8);
        __Pyx_XGOTREF(__pyx_t_4);
+1370:             metadata = PyObject_GetAttr(f, "metadata")
        __pyx_t_15 = PyObject_GetAttr(__pyx_v_f, __pyx_n_u_metadata); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 1370, __pyx_L27_except_error)
        __Pyx_GOTREF(__pyx_t_15);
        __Pyx_XDECREF_SET(__pyx_v_metadata, __pyx_t_15);
        __pyx_t_15 = 0;
        __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
        __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
        __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
        goto __pyx_L26_exception_handled;
      }
      goto __pyx_L27_except_error;
 1371: 
 1372:         # _default_callable = typeinfo.get('default_callable', False)
 1373:         # Check if object is empty
+1374:         if is_empty(value) and not PyObject_IsInstance(value, list):
    __pyx_t_24 = __pyx_f_9datamodel_10converters_is_empty(__pyx_v_value); if (unlikely(__pyx_t_24 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1374, __pyx_L1_error)
    if (__pyx_t_24) {
    } else {
      __pyx_t_2 = __pyx_t_24;
      goto __pyx_L36_bool_binop_done;
    }
    __pyx_t_24 = PyObject_IsInstance(__pyx_v_value, ((PyObject *)(&PyList_Type))); if (unlikely(__pyx_t_24 == ((int)-1))) __PYX_ERR(0, 1374, __pyx_L1_error)
    __pyx_t_25 = (!__pyx_t_24);
    __pyx_t_2 = __pyx_t_25;
    __pyx_L36_bool_binop_done:;
    if (__pyx_t_2) {
/* … */
    }
+1375:             if _type == str and value is not "":
      __pyx_t_4 = PyObject_RichCompare(__pyx_v__type, ((PyObject *)(&PyUnicode_Type)), Py_EQ); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1375, __pyx_L1_error)
      __pyx_t_25 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely((__pyx_t_25 < 0))) __PYX_ERR(0, 1375, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      if (__pyx_t_25) {
      } else {
        __pyx_t_2 = __pyx_t_25;
        goto __pyx_L39_bool_binop_done;
      }
      __pyx_t_25 = (__pyx_v_value != __pyx_kp_u__2);
      __pyx_t_2 = __pyx_t_25;
      __pyx_L39_bool_binop_done:;
      if (__pyx_t_2) {
/* … */
      }
+1376:                 value = f.default_factory if PyObject_IsInstance(_default, (_MISSING_TYPE)) else _default
        __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_MISSING_TYPE); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1376, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_8);
        __pyx_t_2 = PyObject_IsInstance(__pyx_v__default, __pyx_t_8); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 1376, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
        if (__pyx_t_2) {
          __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_f, __pyx_n_s_default_factory); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1376, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_8);
          __pyx_t_4 = __pyx_t_8;
          __pyx_t_8 = 0;
        } else {
          __Pyx_INCREF(__pyx_v__default);
          __pyx_t_4 = __pyx_v__default;
        }
        __Pyx_DECREF_SET(__pyx_v_value, __pyx_t_4);
        __pyx_t_4 = 0;
 1377:             # PyObject_SetAttr(obj, name, value)
+1378:             obj.__dict__[name] = value
      __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_obj, __pyx_n_s_dict); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1378, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      if (unlikely((PyObject_SetItem(__pyx_t_4, __pyx_v_name, __pyx_v_value) < 0))) __PYX_ERR(0, 1378, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+1379:         if _default is not None:
    __pyx_t_2 = (__pyx_v__default != Py_None);
    if (__pyx_t_2) {
/* … */
    }
+1380:             value = _handle_default_value(obj, name, value, _default, f._default_callable)
      __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_f, __pyx_n_s_default_callable); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1380, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_t_8 = __pyx_f_9datamodel_10converters__handle_default_value(__pyx_v_obj, __pyx_v_name, __pyx_v_value, __pyx_v__default, __pyx_t_4); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1380, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_DECREF_SET(__pyx_v_value, __pyx_t_8);
      __pyx_t_8 = 0;
+1381:         try:
    {
      /*try:*/ {
/* … */
      }
      __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
      goto __pyx_L49_try_end;
      __pyx_L42_error:;
      __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
      __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
      __Pyx_XDECREF(__pyx_t_37); __pyx_t_37 = 0;
      __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
      __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
/* … */
      __pyx_L44_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_L48_try_continue:;
      __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_L3_continue;
      __pyx_L49_try_end:;
    }
+1382:             _encoder = metadata.get('encoder')
        __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_metadata, __pyx_n_s_get); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1382, __pyx_L42_error)
        __Pyx_GOTREF(__pyx_t_4);
        __pyx_t_9 = NULL;
        __pyx_t_10 = 0;
        #if CYTHON_UNPACK_METHODS
        if (likely(PyMethod_Check(__pyx_t_4))) {
          __pyx_t_9 = PyMethod_GET_SELF(__pyx_t_4);
          if (likely(__pyx_t_9)) {
            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
            __Pyx_INCREF(__pyx_t_9);
            __Pyx_INCREF(function);
            __Pyx_DECREF_SET(__pyx_t_4, function);
            __pyx_t_10 = 1;
          }
        }
        #endif
        {
          PyObject *__pyx_callargs[2] = {__pyx_t_9, __pyx_n_u_encoder};
          __pyx_t_8 = __Pyx_PyObject_FastCall(__pyx_t_4, __pyx_callargs+1-__pyx_t_10, 1+__pyx_t_10);
          __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
          if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1382, __pyx_L42_error)
          __Pyx_GOTREF(__pyx_t_8);
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
        }
        __Pyx_DECREF_SET(__pyx_v__encoder, __pyx_t_8);
        __pyx_t_8 = 0;
+1383:             newval = value
        __Pyx_INCREF(__pyx_v_value);
        __Pyx_XDECREF_SET(__pyx_v_newval, __pyx_v_value);
+1384:             if f.parser is not None:
        __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_f, __pyx_n_s_parser); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1384, __pyx_L42_error)
        __Pyx_GOTREF(__pyx_t_8);
        __pyx_t_2 = (__pyx_t_8 != Py_None);
        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
        if (__pyx_t_2) {
/* … */
          goto __pyx_L50;
        }
 1385:                 # If a custom parser is attached to Field, use it
+1386:                 try:
          {
            /*try:*/ {
/* … */
            }
            __Pyx_XDECREF(__pyx_t_23); __pyx_t_23 = 0;
            __Pyx_XDECREF(__pyx_t_22); __pyx_t_22 = 0;
            __Pyx_XDECREF(__pyx_t_21); __pyx_t_21 = 0;
            goto __pyx_L58_try_end;
            __pyx_L51_error:;
            __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
            __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
            __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
            __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
            __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
/* … */
            __pyx_L53_except_error:;
            __Pyx_XGIVEREF(__pyx_t_23);
            __Pyx_XGIVEREF(__pyx_t_22);
            __Pyx_XGIVEREF(__pyx_t_21);
            __Pyx_ExceptionReset(__pyx_t_23, __pyx_t_22, __pyx_t_21);
            goto __pyx_L42_error;
            __pyx_L57_try_continue:;
            __Pyx_XGIVEREF(__pyx_t_23);
            __Pyx_XGIVEREF(__pyx_t_22);
            __Pyx_XGIVEREF(__pyx_t_21);
            __Pyx_ExceptionReset(__pyx_t_23, __pyx_t_22, __pyx_t_21);
            goto __pyx_L48_try_continue;
            __pyx_L58_try_end:;
          }
+1387:                     newval = f.parser(value)
              __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_f, __pyx_n_s_parser); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1387, __pyx_L51_error)
              __Pyx_GOTREF(__pyx_t_4);
              __pyx_t_9 = NULL;
              __pyx_t_10 = 0;
              #if CYTHON_UNPACK_METHODS
              if (likely(PyMethod_Check(__pyx_t_4))) {
                __pyx_t_9 = PyMethod_GET_SELF(__pyx_t_4);
                if (likely(__pyx_t_9)) {
                  PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
                  __Pyx_INCREF(__pyx_t_9);
                  __Pyx_INCREF(function);
                  __Pyx_DECREF_SET(__pyx_t_4, function);
                  __pyx_t_10 = 1;
                }
              }
              #endif
              {
                PyObject *__pyx_callargs[2] = {__pyx_t_9, __pyx_v_value};
                __pyx_t_8 = __Pyx_PyObject_FastCall(__pyx_t_4, __pyx_callargs+1-__pyx_t_10, 1+__pyx_t_10);
                __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
                if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1387, __pyx_L51_error)
                __Pyx_GOTREF(__pyx_t_8);
                __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
              }
              __Pyx_DECREF_SET(__pyx_v_newval, __pyx_t_8);
              __pyx_t_8 = 0;
+1388:                     if newval != value:
              __pyx_t_8 = PyObject_RichCompare(__pyx_v_newval, __pyx_v_value, Py_NE); __Pyx_XGOTREF(__pyx_t_8); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1388, __pyx_L51_error)
              __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_8); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 1388, __pyx_L51_error)
              __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
              if (__pyx_t_2) {
/* … */
              }
+1389:                         obj.__dict__[name] = newval
                __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_obj, __pyx_n_s_dict); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1389, __pyx_L51_error)
                __Pyx_GOTREF(__pyx_t_8);
                if (unlikely((PyObject_SetItem(__pyx_t_8, __pyx_v_name, __pyx_v_newval) < 0))) __PYX_ERR(0, 1389, __pyx_L51_error)
                __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+1390:                 except Exception as ex:
            __pyx_t_16 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(&((PyTypeObject*)PyExc_Exception)[0])));
            if (__pyx_t_16) {
              __Pyx_AddTraceback("datamodel.converters.processing_fields", __pyx_clineno, __pyx_lineno, __pyx_filename);
              if (__Pyx_GetException(&__pyx_t_8, &__pyx_t_4, &__pyx_t_9) < 0) __PYX_ERR(0, 1390, __pyx_L53_except_error)
              __Pyx_XGOTREF(__pyx_t_8);
              __Pyx_XGOTREF(__pyx_t_4);
              __Pyx_XGOTREF(__pyx_t_9);
              __Pyx_INCREF(__pyx_t_4);
              __pyx_v_ex = __pyx_t_4;
              /*try:*/ {
/* … */
              /*finally:*/ {
                __pyx_L65_error:;
                /*exception exit:*/{
                  __Pyx_PyThreadState_declare
                  __Pyx_PyThreadState_assign
                  __pyx_t_20 = 0; __pyx_t_19 = 0; __pyx_t_18 = 0; __pyx_t_27 = 0; __pyx_t_28 = 0; __pyx_t_29 = 0;
                  __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
                  __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
                  if (PY_MAJOR_VERSION >= 3) __Pyx_ExceptionSwap(&__pyx_t_27, &__pyx_t_28, &__pyx_t_29);
                  if ((PY_MAJOR_VERSION < 3) || unlikely(__Pyx_GetException(&__pyx_t_20, &__pyx_t_19, &__pyx_t_18) < 0)) __Pyx_ErrFetch(&__pyx_t_20, &__pyx_t_19, &__pyx_t_18);
                  __Pyx_XGOTREF(__pyx_t_20);
                  __Pyx_XGOTREF(__pyx_t_19);
                  __Pyx_XGOTREF(__pyx_t_18);
                  __Pyx_XGOTREF(__pyx_t_27);
                  __Pyx_XGOTREF(__pyx_t_28);
                  __Pyx_XGOTREF(__pyx_t_29);
                  __pyx_t_16 = __pyx_lineno; __pyx_t_11 = __pyx_clineno; __pyx_t_26 = __pyx_filename;
                  {
                    __Pyx_DECREF(__pyx_v_ex); __pyx_v_ex = 0;
                  }
                  if (PY_MAJOR_VERSION >= 3) {
                    __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_20);
                  __Pyx_XGIVEREF(__pyx_t_19);
                  __Pyx_XGIVEREF(__pyx_t_18);
                  __Pyx_ErrRestore(__pyx_t_20, __pyx_t_19, __pyx_t_18);
                  __pyx_t_20 = 0; __pyx_t_19 = 0; __pyx_t_18 = 0; __pyx_t_27 = 0; __pyx_t_28 = 0; __pyx_t_29 = 0;
                  __pyx_lineno = __pyx_t_16; __pyx_clineno = __pyx_t_11; __pyx_filename = __pyx_t_26;
                  goto __pyx_L53_except_error;
                }
                __pyx_L62_continue: {
                  __Pyx_DECREF(__pyx_v_ex); __pyx_v_ex = 0;
                  goto __pyx_L60_except_continue;
                }
              }
              __pyx_L60_except_continue:;
              __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
              __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
              __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
              goto __pyx_L57_try_continue;
            }
            goto __pyx_L53_except_error;
+1391:                     errors.update(_build_error(name, f"Error parsing *{name}* = *{value}*", ex))
                __pyx_t_15 = PyTuple_New(5); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 1391, __pyx_L65_error)
                __Pyx_GOTREF(__pyx_t_15);
                __pyx_t_13 = 0;
                __pyx_t_14 = 127;
                __Pyx_INCREF(__pyx_kp_u_Error_parsing);
                __pyx_t_13 += 15;
                __Pyx_GIVEREF(__pyx_kp_u_Error_parsing);
                PyTuple_SET_ITEM(__pyx_t_15, 0, __pyx_kp_u_Error_parsing);
                __pyx_t_12 = __Pyx_PyUnicode_Unicode(__pyx_v_name); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1391, __pyx_L65_error)
                __Pyx_GOTREF(__pyx_t_12);
                __pyx_t_14 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_12) > __pyx_t_14) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_12) : __pyx_t_14;
                __pyx_t_13 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_12);
                __Pyx_GIVEREF(__pyx_t_12);
                PyTuple_SET_ITEM(__pyx_t_15, 1, __pyx_t_12);
                __pyx_t_12 = 0;
                __Pyx_INCREF(__pyx_kp_u__12);
                __pyx_t_13 += 5;
                __Pyx_GIVEREF(__pyx_kp_u__12);
                PyTuple_SET_ITEM(__pyx_t_15, 2, __pyx_kp_u__12);
                __pyx_t_12 = __Pyx_PyObject_FormatSimple(__pyx_v_value, __pyx_empty_unicode); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1391, __pyx_L65_error)
                __Pyx_GOTREF(__pyx_t_12);
                __pyx_t_14 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_12) > __pyx_t_14) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_12) : __pyx_t_14;
                __pyx_t_13 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_12);
                __Pyx_GIVEREF(__pyx_t_12);
                PyTuple_SET_ITEM(__pyx_t_15, 3, __pyx_t_12);
                __pyx_t_12 = 0;
                __Pyx_INCREF(__pyx_kp_u__13);
                __pyx_t_13 += 1;
                __Pyx_GIVEREF(__pyx_kp_u__13);
                PyTuple_SET_ITEM(__pyx_t_15, 4, __pyx_kp_u__13);
                __pyx_t_12 = __Pyx_PyUnicode_Join(__pyx_t_15, 5, __pyx_t_13, __pyx_t_14); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1391, __pyx_L65_error)
                __Pyx_GOTREF(__pyx_t_12);
                __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
                __pyx_t_15 = __pyx_f_9datamodel_10converters__build_error(__pyx_v_name, ((PyObject*)__pyx_t_12), __pyx_v_ex); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 1391, __pyx_L65_error)
                __Pyx_GOTREF(__pyx_t_15);
                __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
                __pyx_t_12 = __Pyx_CallUnboundCMethod1(&__pyx_umethod_PyDict_Type_update, __pyx_v_errors, __pyx_t_15); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1391, __pyx_L65_error)
                __Pyx_GOTREF(__pyx_t_12);
                __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
                __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
+1392:                     continue
                goto __pyx_L62_continue;
              }
+1393:             elif field_category == 'primitive':
        __pyx_t_2 = (__Pyx_PyUnicode_Equals(__pyx_v_field_category, __pyx_n_u_primitive, Py_EQ)); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 1393, __pyx_L42_error)
        if (__pyx_t_2) {
/* … */
          goto __pyx_L50;
        }
+1394:                 try:
          {
            /*try:*/ {
/* … */
            }
            __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;
            goto __pyx_L78_try_end;
            __pyx_L71_error:;
            __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
            __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
            __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
            __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
            __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
/* … */
            __pyx_L73_except_error:;
            __Pyx_XGIVEREF(__pyx_t_21);
            __Pyx_XGIVEREF(__pyx_t_22);
            __Pyx_XGIVEREF(__pyx_t_23);
            __Pyx_ExceptionReset(__pyx_t_21, __pyx_t_22, __pyx_t_23);
            goto __pyx_L42_error;
            __pyx_L77_try_continue:;
            __Pyx_XGIVEREF(__pyx_t_21);
            __Pyx_XGIVEREF(__pyx_t_22);
            __Pyx_XGIVEREF(__pyx_t_23);
            __Pyx_ExceptionReset(__pyx_t_21, __pyx_t_22, __pyx_t_23);
            goto __pyx_L48_try_continue;
            __pyx_L78_try_end:;
          }
+1395:                     newval = parse_basic(_type, value, _encoder)
              __pyx_t_30.__pyx_n = 1;
              __pyx_t_30.encoder = __pyx_v__encoder;
              __pyx_t_9 = __pyx_f_9datamodel_10converters_parse_basic(__pyx_v__type, __pyx_v_value, 0, &__pyx_t_30); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1395, __pyx_L71_error)
              __Pyx_GOTREF(__pyx_t_9);
              __Pyx_DECREF_SET(__pyx_v_newval, __pyx_t_9);
              __pyx_t_9 = 0;
+1396:                     if newval != value:
              __pyx_t_9 = PyObject_RichCompare(__pyx_v_newval, __pyx_v_value, Py_NE); __Pyx_XGOTREF(__pyx_t_9); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1396, __pyx_L71_error)
              __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_9); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 1396, __pyx_L71_error)
              __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
              if (__pyx_t_2) {
/* … */
              }
+1397:                         obj.__dict__[name] = newval
                __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_obj, __pyx_n_s_dict); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1397, __pyx_L71_error)
                __Pyx_GOTREF(__pyx_t_9);
                if (unlikely((PyObject_SetItem(__pyx_t_9, __pyx_v_name, __pyx_v_newval) < 0))) __PYX_ERR(0, 1397, __pyx_L71_error)
                __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
+1398:                 except ValueError as ex:
            __pyx_t_11 = __Pyx_PyErr_ExceptionMatches(__pyx_builtin_ValueError);
            if (__pyx_t_11) {
              __Pyx_AddTraceback("datamodel.converters.processing_fields", __pyx_clineno, __pyx_lineno, __pyx_filename);
              if (__Pyx_GetException(&__pyx_t_9, &__pyx_t_4, &__pyx_t_8) < 0) __PYX_ERR(0, 1398, __pyx_L73_except_error)
              __Pyx_XGOTREF(__pyx_t_9);
              __Pyx_XGOTREF(__pyx_t_4);
              __Pyx_XGOTREF(__pyx_t_8);
              __Pyx_INCREF(__pyx_t_4);
              __pyx_v_ex = __pyx_t_4;
              /*try:*/ {
/* … */
              /*finally:*/ {
                __pyx_L85_error:;
                /*exception exit:*/{
                  __Pyx_PyThreadState_declare
                  __Pyx_PyThreadState_assign
                  __pyx_t_29 = 0; __pyx_t_28 = 0; __pyx_t_27 = 0; __pyx_t_18 = 0; __pyx_t_19 = 0; __pyx_t_20 = 0;
                  __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
                  __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
                  if (PY_MAJOR_VERSION >= 3) __Pyx_ExceptionSwap(&__pyx_t_18, &__pyx_t_19, &__pyx_t_20);
                  if ((PY_MAJOR_VERSION < 3) || unlikely(__Pyx_GetException(&__pyx_t_29, &__pyx_t_28, &__pyx_t_27) < 0)) __Pyx_ErrFetch(&__pyx_t_29, &__pyx_t_28, &__pyx_t_27);
                  __Pyx_XGOTREF(__pyx_t_29);
                  __Pyx_XGOTREF(__pyx_t_28);
                  __Pyx_XGOTREF(__pyx_t_27);
                  __Pyx_XGOTREF(__pyx_t_18);
                  __Pyx_XGOTREF(__pyx_t_19);
                  __Pyx_XGOTREF(__pyx_t_20);
                  __pyx_t_11 = __pyx_lineno; __pyx_t_16 = __pyx_clineno; __pyx_t_31 = __pyx_filename;
                  {
                    __Pyx_DECREF(__pyx_v_ex); __pyx_v_ex = 0;
                  }
                  if (PY_MAJOR_VERSION >= 3) {
                    __Pyx_XGIVEREF(__pyx_t_18);
                    __Pyx_XGIVEREF(__pyx_t_19);
                    __Pyx_XGIVEREF(__pyx_t_20);
                    __Pyx_ExceptionReset(__pyx_t_18, __pyx_t_19, __pyx_t_20);
                  }
                  __Pyx_XGIVEREF(__pyx_t_29);
                  __Pyx_XGIVEREF(__pyx_t_28);
                  __Pyx_XGIVEREF(__pyx_t_27);
                  __Pyx_ErrRestore(__pyx_t_29, __pyx_t_28, __pyx_t_27);
                  __pyx_t_29 = 0; __pyx_t_28 = 0; __pyx_t_27 = 0; __pyx_t_18 = 0; __pyx_t_19 = 0; __pyx_t_20 = 0;
                  __pyx_lineno = __pyx_t_11; __pyx_clineno = __pyx_t_16; __pyx_filename = __pyx_t_31;
                  goto __pyx_L73_except_error;
                }
                __pyx_L82_continue: {
                  __Pyx_DECREF(__pyx_v_ex); __pyx_v_ex = 0;
                  goto __pyx_L80_except_continue;
                }
              }
              __pyx_L80_except_continue:;
              __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
              __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
              __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
              goto __pyx_L77_try_continue;
            }
            goto __pyx_L73_except_error;
+1399:                     errors.update(_build_error(name, f"Error parsing {name}: ", ex))
                __pyx_t_12 = PyTuple_New(3); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1399, __pyx_L85_error)
                __Pyx_GOTREF(__pyx_t_12);
                __pyx_t_13 = 0;
                __pyx_t_14 = 127;
                __Pyx_INCREF(__pyx_kp_u_Error_parsing_2);
                __pyx_t_13 += 14;
                __Pyx_GIVEREF(__pyx_kp_u_Error_parsing_2);
                PyTuple_SET_ITEM(__pyx_t_12, 0, __pyx_kp_u_Error_parsing_2);
                __pyx_t_15 = __Pyx_PyUnicode_Unicode(__pyx_v_name); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 1399, __pyx_L85_error)
                __Pyx_GOTREF(__pyx_t_15);
                __pyx_t_14 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_15) > __pyx_t_14) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_15) : __pyx_t_14;
                __pyx_t_13 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_15);
                __Pyx_GIVEREF(__pyx_t_15);
                PyTuple_SET_ITEM(__pyx_t_12, 1, __pyx_t_15);
                __pyx_t_15 = 0;
                __Pyx_INCREF(__pyx_kp_u__7);
                __pyx_t_13 += 2;
                __Pyx_GIVEREF(__pyx_kp_u__7);
                PyTuple_SET_ITEM(__pyx_t_12, 2, __pyx_kp_u__7);
                __pyx_t_15 = __Pyx_PyUnicode_Join(__pyx_t_12, 3, __pyx_t_13, __pyx_t_14); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 1399, __pyx_L85_error)
                __Pyx_GOTREF(__pyx_t_15);
                __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
                __pyx_t_12 = __pyx_f_9datamodel_10converters__build_error(__pyx_v_name, ((PyObject*)__pyx_t_15), __pyx_v_ex); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1399, __pyx_L85_error)
                __Pyx_GOTREF(__pyx_t_12);
                __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
                __pyx_t_15 = __Pyx_CallUnboundCMethod1(&__pyx_umethod_PyDict_Type_update, __pyx_v_errors, __pyx_t_12); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 1399, __pyx_L85_error)
                __Pyx_GOTREF(__pyx_t_15);
                __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
                __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
+1400:                     continue
                goto __pyx_L82_continue;
              }
+1401:             elif field_category == 'type':
        __pyx_t_2 = (__Pyx_PyUnicode_Equals(__pyx_v_field_category, __pyx_n_u_type_2, Py_EQ)); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 1401, __pyx_L42_error)
        if (__pyx_t_2) {
          goto __pyx_L50;
        }
 1402:                 # TODO: support multiple types
 1403:                 pass
+1404:             elif field_category == 'dataclass':
        __pyx_t_2 = (__Pyx_PyUnicode_Equals(__pyx_v_field_category, __pyx_n_u_dataclass, Py_EQ)); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 1404, __pyx_L42_error)
        if (__pyx_t_2) {
/* … */
          goto __pyx_L50;
        }
+1405:                 if no_nesting is False:
          __pyx_t_2 = (__pyx_v_no_nesting == 0);
          if (__pyx_t_2) {
/* … */
          }
+1406:                     if as_objects is True:
            __pyx_t_2 = (__pyx_v_as_objects == 1);
            if (__pyx_t_2) {
/* … */
              goto __pyx_L92;
            }
+1407:                         newval = _handle_dataclass_type(
              __pyx_t_32.__pyx_n = 2;
              __pyx_t_32.as_objects = __pyx_t_8;
              __pyx_t_32.parent = __pyx_v_obj;
              __pyx_t_4 = __pyx_f_9datamodel_10converters__handle_dataclass_type(__pyx_v_f, __pyx_v_name, __pyx_v_value, __pyx_v__type, &__pyx_t_32); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1407, __pyx_L42_error)
              __Pyx_GOTREF(__pyx_t_4);
              __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
              __Pyx_DECREF_SET(__pyx_v_newval, __pyx_t_4);
              __pyx_t_4 = 0;
+1408:                             f, name, value, _type, as_objects, obj
              __pyx_t_8 = __Pyx_PyBool_FromLong(__pyx_v_as_objects); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1408, __pyx_L42_error)
              __Pyx_GOTREF(__pyx_t_8);
 1409:                         )
 1410:                     else:
+1411:                         newval = _handle_dataclass_type(
            /*else*/ {
/* … */
              __pyx_t_32.__pyx_n = 2;
              __pyx_t_32.as_objects = __pyx_t_4;
              __pyx_t_32.parent = Py_None;
              __pyx_t_8 = __pyx_f_9datamodel_10converters__handle_dataclass_type(__pyx_v_f, __pyx_v_name, __pyx_v_value, __pyx_v__type, &__pyx_t_32); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1411, __pyx_L42_error)
              __Pyx_GOTREF(__pyx_t_8);
              __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
              __Pyx_DECREF_SET(__pyx_v_newval, __pyx_t_8);
              __pyx_t_8 = 0;
            }
            __pyx_L92:;
+1412:                             f, name, value, _type, as_objects, None
              __pyx_t_4 = __Pyx_PyBool_FromLong(__pyx_v_as_objects); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1412, __pyx_L42_error)
              __Pyx_GOTREF(__pyx_t_4);
 1413:                         )
+1414:                     if newval!= value:
            __pyx_t_8 = PyObject_RichCompare(__pyx_v_newval, __pyx_v_value, Py_NE); __Pyx_XGOTREF(__pyx_t_8); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1414, __pyx_L42_error)
            __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_8); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 1414, __pyx_L42_error)
            __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
            if (__pyx_t_2) {
/* … */
            }
 1415:                         # PyObject_SetAttr(obj, name, newval)
+1416:                         obj.__dict__[name] = newval
              __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_obj, __pyx_n_s_dict); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1416, __pyx_L42_error)
              __Pyx_GOTREF(__pyx_t_8);
              if (unlikely((PyObject_SetItem(__pyx_t_8, __pyx_v_name, __pyx_v_newval) < 0))) __PYX_ERR(0, 1416, __pyx_L42_error)
              __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+1417:             elif f.origin in (list, 'list') and f._inner_is_dc:
        __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_f, __pyx_n_s_origin); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1417, __pyx_L42_error)
        __Pyx_GOTREF(__pyx_t_8);
        __pyx_t_4 = PyObject_RichCompare(__pyx_t_8, ((PyObject *)(&PyList_Type)), Py_EQ); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1417, __pyx_L42_error)
        __pyx_t_24 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely((__pyx_t_24 < 0))) __PYX_ERR(0, 1417, __pyx_L42_error)
        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
        if (!__pyx_t_24) {
        } else {
          __pyx_t_25 = __pyx_t_24;
          goto __pyx_L96_bool_binop_done;
        }
        __pyx_t_24 = (__Pyx_PyUnicode_Equals(__pyx_t_8, __pyx_n_u_list, Py_EQ)); if (unlikely((__pyx_t_24 < 0))) __PYX_ERR(0, 1417, __pyx_L42_error)
        __pyx_t_25 = __pyx_t_24;
        __pyx_L96_bool_binop_done:;
        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
        __pyx_t_24 = __pyx_t_25;
        if (__pyx_t_24) {
        } else {
          __pyx_t_2 = __pyx_t_24;
          goto __pyx_L94_bool_binop_done;
        }
        __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_f, __pyx_n_s_inner_is_dc); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1417, __pyx_L42_error)
        __Pyx_GOTREF(__pyx_t_8);
        __pyx_t_24 = __Pyx_PyObject_IsTrue(__pyx_t_8); if (unlikely((__pyx_t_24 < 0))) __PYX_ERR(0, 1417, __pyx_L42_error)
        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
        __pyx_t_2 = __pyx_t_24;
        __pyx_L94_bool_binop_done:;
        if (__pyx_t_2) {
/* … */
          goto __pyx_L50;
        }
+1418:                 if as_objects is True:
          __pyx_t_2 = (__pyx_v_as_objects == 1);
          if (__pyx_t_2) {
/* … */
            goto __pyx_L98;
          }
+1419:                     newval = _handle_list_of_dataclasses(f, name, value, _type, obj)
            __pyx_t_33.__pyx_n = 1;
            __pyx_t_33.parent = __pyx_v_obj;
            __pyx_t_8 = __pyx_f_9datamodel_10converters__handle_list_of_dataclasses(__pyx_v_f, __pyx_v_name, __pyx_v_value, __pyx_v__type, &__pyx_t_33); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1419, __pyx_L42_error)
            __Pyx_GOTREF(__pyx_t_8);
            __Pyx_DECREF_SET(__pyx_v_newval, __pyx_t_8);
            __pyx_t_8 = 0;
 1420:                 else:
+1421:                     newval = _handle_list_of_dataclasses(f, name, value, _type, None)
          /*else*/ {
            __pyx_t_33.__pyx_n = 1;
            __pyx_t_33.parent = Py_None;
            __pyx_t_8 = __pyx_f_9datamodel_10converters__handle_list_of_dataclasses(__pyx_v_f, __pyx_v_name, __pyx_v_value, __pyx_v__type, &__pyx_t_33); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1421, __pyx_L42_error)
            __Pyx_GOTREF(__pyx_t_8);
            __Pyx_DECREF_SET(__pyx_v_newval, __pyx_t_8);
            __pyx_t_8 = 0;
          }
          __pyx_L98:;
+1422:                 obj.__dict__[name] = newval
          __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_obj, __pyx_n_s_dict); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1422, __pyx_L42_error)
          __Pyx_GOTREF(__pyx_t_8);
          if (unlikely((PyObject_SetItem(__pyx_t_8, __pyx_v_name, __pyx_v_newval) < 0))) __PYX_ERR(0, 1422, __pyx_L42_error)
          __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+1423:             elif field_category == 'typing':
        __pyx_t_2 = (__Pyx_PyUnicode_Equals(__pyx_v_field_category, __pyx_n_u_typing, Py_EQ)); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 1423, __pyx_L42_error)
        if (__pyx_t_2) {
/* … */
          goto __pyx_L50;
        }
+1424:                 if f.is_dc:
          __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_f, __pyx_n_s_is_dc); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1424, __pyx_L42_error)
          __Pyx_GOTREF(__pyx_t_8);
          __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_8); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 1424, __pyx_L42_error)
          __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
          if (__pyx_t_2) {
/* … */
            goto __pyx_L99;
          }
 1425:                     # means that is_dataclass(T)
+1426:                     newval = _handle_dataclass_type(None, name, value, _type, as_objects, None)
            __pyx_t_8 = __Pyx_PyBool_FromLong(__pyx_v_as_objects); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1426, __pyx_L42_error)
            __Pyx_GOTREF(__pyx_t_8);
            __pyx_t_32.__pyx_n = 2;
            __pyx_t_32.as_objects = __pyx_t_8;
            __pyx_t_32.parent = Py_None;
            __pyx_t_4 = __pyx_f_9datamodel_10converters__handle_dataclass_type(Py_None, __pyx_v_name, __pyx_v_value, __pyx_v__type, &__pyx_t_32); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1426, __pyx_L42_error)
            __Pyx_GOTREF(__pyx_t_4);
            __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
            __Pyx_DECREF_SET(__pyx_v_newval, __pyx_t_4);
            __pyx_t_4 = 0;
+1427:                     obj.__dict__[name] = newval
            __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_obj, __pyx_n_s_dict); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1427, __pyx_L42_error)
            __Pyx_GOTREF(__pyx_t_4);
            if (unlikely((PyObject_SetItem(__pyx_t_4, __pyx_v_name, __pyx_v_newval) < 0))) __PYX_ERR(0, 1427, __pyx_L42_error)
            __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+1428:                 elif f.origin is Literal:
          __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_f, __pyx_n_s_origin); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1428, __pyx_L42_error)
          __Pyx_GOTREF(__pyx_t_4);
          __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_Literal); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1428, __pyx_L42_error)
          __Pyx_GOTREF(__pyx_t_8);
          __pyx_t_2 = (__pyx_t_4 == __pyx_t_8);
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
          if (__pyx_t_2) {
/* … */
            goto __pyx_L99;
          }
 1429:                     # e.g. Literal[...]
+1430:                     newval = _parse_literal_type(f, _type, value, _encoder)
            __pyx_t_8 = __pyx_f_9datamodel_10converters__parse_literal_type(__pyx_v_f, __pyx_v__type, __pyx_v_value, __pyx_v__encoder); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1430, __pyx_L42_error)
            __Pyx_GOTREF(__pyx_t_8);
            __Pyx_DECREF_SET(__pyx_v_newval, __pyx_t_8);
            __pyx_t_8 = 0;
+1431:                     obj.__dict__[name] = newval
            __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_obj, __pyx_n_s_dict); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1431, __pyx_L42_error)
            __Pyx_GOTREF(__pyx_t_8);
            if (unlikely((PyObject_SetItem(__pyx_t_8, __pyx_v_name, __pyx_v_newval) < 0))) __PYX_ERR(0, 1431, __pyx_L42_error)
            __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+1432:                 elif f.origin is list:
          __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_f, __pyx_n_s_origin); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1432, __pyx_L42_error)
          __Pyx_GOTREF(__pyx_t_8);
          __pyx_t_2 = (__pyx_t_8 == ((PyObject *)(&PyList_Type)));
          __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
          if (__pyx_t_2) {
/* … */
            goto __pyx_L99;
          }
 1433:                     # Other typical case is when is a List of primitives.
+1434:                     if f._inner_priv:
            __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_f, __pyx_n_s_inner_priv); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1434, __pyx_L42_error)
            __Pyx_GOTREF(__pyx_t_8);
            __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_8); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 1434, __pyx_L42_error)
            __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
            if (__pyx_t_2) {
/* … */
              goto __pyx_L100;
            }
+1435:                         newval = _parse_list_type(
              __pyx_t_34.__pyx_n = 1;
              __pyx_t_34._parent = __pyx_v_obj;
              __pyx_t_4 = __pyx_f_9datamodel_10converters__parse_list_type(__pyx_v_f, __pyx_v__type, __pyx_v_value, __pyx_v__encoder, __pyx_t_8, &__pyx_t_34); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1435, __pyx_L42_error)
              __Pyx_GOTREF(__pyx_t_4);
              __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
              __Pyx_DECREF_SET(__pyx_v_newval, __pyx_t_4);
              __pyx_t_4 = 0;
 1436:                             f,
 1437:                             _type,
 1438:                             value,
 1439:                             _encoder,
+1440:                             f.args,
              __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_f, __pyx_n_s_args_2); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1440, __pyx_L42_error)
              __Pyx_GOTREF(__pyx_t_8);
 1441:                             obj
 1442:                         )
 1443:                     else:
+1444:                         try:
            /*else*/ {
              {
                /*try:*/ {
/* … */
                }
                __Pyx_XDECREF(__pyx_t_23); __pyx_t_23 = 0;
                __Pyx_XDECREF(__pyx_t_22); __pyx_t_22 = 0;
                __Pyx_XDECREF(__pyx_t_21); __pyx_t_21 = 0;
                goto __pyx_L108_try_end;
                __pyx_L101_error:;
                __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
                __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
                __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
                __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
                __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
/* … */
                __pyx_L103_except_error:;
                __Pyx_XGIVEREF(__pyx_t_23);
                __Pyx_XGIVEREF(__pyx_t_22);
                __Pyx_XGIVEREF(__pyx_t_21);
                __Pyx_ExceptionReset(__pyx_t_23, __pyx_t_22, __pyx_t_21);
                goto __pyx_L42_error;
                __pyx_L108_try_end:;
              }
            }
            __pyx_L100:;
+1445:                             newval = _parse_typing(
                  __pyx_t_35.__pyx_n = 3;
                  __pyx_t_35.encoder = __pyx_v__encoder;
                  __pyx_t_35.as_objects = __pyx_t_4;
                  __pyx_t_35.parent = __pyx_v_obj;
                  __pyx_t_8 = __pyx_f_9datamodel_10converters__parse_typing(__pyx_v_f, __pyx_v__type, __pyx_v_value, &__pyx_t_35); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1445, __pyx_L101_error)
                  __Pyx_GOTREF(__pyx_t_8);
                  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
                  __Pyx_DECREF_SET(__pyx_v_newval, __pyx_t_8);
                  __pyx_t_8 = 0;
 1446:                                 f,
 1447:                                 _type,
 1448:                                 value,
 1449:                                 _encoder,
+1450:                                 as_objects,
                  __pyx_t_4 = __Pyx_PyBool_FromLong(__pyx_v_as_objects); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1450, __pyx_L101_error)
                  __Pyx_GOTREF(__pyx_t_4);
 1451:                                 obj
 1452:                             )
+1453:                         except Exception as e:
                __pyx_t_16 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(&((PyTypeObject*)PyExc_Exception)[0])));
                if (__pyx_t_16) {
                  __Pyx_AddTraceback("datamodel.converters.processing_fields", __pyx_clineno, __pyx_lineno, __pyx_filename);
                  if (__Pyx_GetException(&__pyx_t_8, &__pyx_t_4, &__pyx_t_9) < 0) __PYX_ERR(0, 1453, __pyx_L103_except_error)
                  __Pyx_XGOTREF(__pyx_t_8);
                  __Pyx_XGOTREF(__pyx_t_4);
                  __Pyx_XGOTREF(__pyx_t_9);
                  __Pyx_INCREF(__pyx_t_4);
                  __Pyx_XDECREF_SET(__pyx_v_e, __pyx_t_4);
                  /*try:*/ {
/* … */
                  /*finally:*/ {
                    __pyx_L114_error:;
                    /*exception exit:*/{
                      __Pyx_PyThreadState_declare
                      __Pyx_PyThreadState_assign
                      __pyx_t_20 = 0; __pyx_t_19 = 0; __pyx_t_18 = 0; __pyx_t_27 = 0; __pyx_t_28 = 0; __pyx_t_29 = 0;
                      __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
                      __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
                      if (PY_MAJOR_VERSION >= 3) __Pyx_ExceptionSwap(&__pyx_t_27, &__pyx_t_28, &__pyx_t_29);
                      if ((PY_MAJOR_VERSION < 3) || unlikely(__Pyx_GetException(&__pyx_t_20, &__pyx_t_19, &__pyx_t_18) < 0)) __Pyx_ErrFetch(&__pyx_t_20, &__pyx_t_19, &__pyx_t_18);
                      __Pyx_XGOTREF(__pyx_t_20);
                      __Pyx_XGOTREF(__pyx_t_19);
                      __Pyx_XGOTREF(__pyx_t_18);
                      __Pyx_XGOTREF(__pyx_t_27);
                      __Pyx_XGOTREF(__pyx_t_28);
                      __Pyx_XGOTREF(__pyx_t_29);
                      __pyx_t_16 = __pyx_lineno; __pyx_t_11 = __pyx_clineno; __pyx_t_36 = __pyx_filename;
                      {
                        __Pyx_DECREF(__pyx_v_e); __pyx_v_e = 0;
                      }
                      if (PY_MAJOR_VERSION >= 3) {
                        __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_20);
                      __Pyx_XGIVEREF(__pyx_t_19);
                      __Pyx_XGIVEREF(__pyx_t_18);
                      __Pyx_ErrRestore(__pyx_t_20, __pyx_t_19, __pyx_t_18);
                      __pyx_t_20 = 0; __pyx_t_19 = 0; __pyx_t_18 = 0; __pyx_t_27 = 0; __pyx_t_28 = 0; __pyx_t_29 = 0;
                      __pyx_lineno = __pyx_t_16; __pyx_clineno = __pyx_t_11; __pyx_filename = __pyx_t_36;
                      goto __pyx_L103_except_error;
                    }
                  }
                }
                goto __pyx_L103_except_error;
+1454:                             raise ValueError(
                    __pyx_t_15 = __Pyx_PyObject_CallOneArg(__pyx_builtin_ValueError, __pyx_t_12); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 1454, __pyx_L114_error)
                    __Pyx_GOTREF(__pyx_t_15);
                    __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
                    __Pyx_Raise(__pyx_t_15, 0, 0, 0);
                    __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
                    __PYX_ERR(0, 1454, __pyx_L114_error)
                  }
+1455:                                 f"Error parsing List: {name}: {e}"
                    __pyx_t_15 = PyTuple_New(4); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 1455, __pyx_L114_error)
                    __Pyx_GOTREF(__pyx_t_15);
                    __pyx_t_13 = 0;
                    __pyx_t_14 = 127;
                    __Pyx_INCREF(__pyx_kp_u_Error_parsing_List);
                    __pyx_t_13 += 20;
                    __Pyx_GIVEREF(__pyx_kp_u_Error_parsing_List);
                    PyTuple_SET_ITEM(__pyx_t_15, 0, __pyx_kp_u_Error_parsing_List);
                    __pyx_t_12 = __Pyx_PyUnicode_Unicode(__pyx_v_name); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1455, __pyx_L114_error)
                    __Pyx_GOTREF(__pyx_t_12);
                    __pyx_t_14 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_12) > __pyx_t_14) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_12) : __pyx_t_14;
                    __pyx_t_13 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_12);
                    __Pyx_GIVEREF(__pyx_t_12);
                    PyTuple_SET_ITEM(__pyx_t_15, 1, __pyx_t_12);
                    __pyx_t_12 = 0;
                    __Pyx_INCREF(__pyx_kp_u__7);
                    __pyx_t_13 += 2;
                    __Pyx_GIVEREF(__pyx_kp_u__7);
                    PyTuple_SET_ITEM(__pyx_t_15, 2, __pyx_kp_u__7);
                    __pyx_t_12 = __Pyx_PyObject_FormatSimple(__pyx_v_e, __pyx_empty_unicode); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1455, __pyx_L114_error)
                    __Pyx_GOTREF(__pyx_t_12);
                    __pyx_t_14 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_12) > __pyx_t_14) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_12) : __pyx_t_14;
                    __pyx_t_13 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_12);
                    __Pyx_GIVEREF(__pyx_t_12);
                    PyTuple_SET_ITEM(__pyx_t_15, 3, __pyx_t_12);
                    __pyx_t_12 = 0;
                    __pyx_t_12 = __Pyx_PyUnicode_Join(__pyx_t_15, 4, __pyx_t_13, __pyx_t_14); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1455, __pyx_L114_error)
                    __Pyx_GOTREF(__pyx_t_12);
                    __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
 1456:                             )
+1457:                     obj.__dict__[name] = newval
            __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_obj, __pyx_n_s_dict); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1457, __pyx_L42_error)
            __Pyx_GOTREF(__pyx_t_9);
            if (unlikely((PyObject_SetItem(__pyx_t_9, __pyx_v_name, __pyx_v_newval) < 0))) __PYX_ERR(0, 1457, __pyx_L42_error)
            __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
 1458:                 # If the field is a Union and data is a list, use _parse_union_type.
+1459:                 elif f.origin is Union:
          __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_f, __pyx_n_s_origin); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1459, __pyx_L42_error)
          __Pyx_GOTREF(__pyx_t_9);
          __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_Union); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1459, __pyx_L42_error)
          __Pyx_GOTREF(__pyx_t_4);
          __pyx_t_2 = (__pyx_t_9 == __pyx_t_4);
          __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          if (__pyx_t_2) {
/* … */
            goto __pyx_L99;
          }
 1460:                     # e.g. Optional[...] or Union[A, B]
+1461:                     if len(f.args) == 2 and type(None) in f.args:
            __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_f, __pyx_n_s_args_2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1461, __pyx_L42_error)
            __Pyx_GOTREF(__pyx_t_4);
            __pyx_t_13 = PyObject_Length(__pyx_t_4); if (unlikely(__pyx_t_13 == ((Py_ssize_t)-1))) __PYX_ERR(0, 1461, __pyx_L42_error)
            __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
            __pyx_t_24 = (__pyx_t_13 == 2);
            if (__pyx_t_24) {
            } else {
              __pyx_t_2 = __pyx_t_24;
              goto __pyx_L121_bool_binop_done;
            }
            __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_f, __pyx_n_s_args_2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1461, __pyx_L42_error)
            __Pyx_GOTREF(__pyx_t_4);
            __pyx_t_24 = (__Pyx_PySequence_ContainsTF(((PyObject *)Py_TYPE(Py_None)), __pyx_t_4, Py_EQ)); if (unlikely((__pyx_t_24 < 0))) __PYX_ERR(0, 1461, __pyx_L42_error)
            __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
            __pyx_t_2 = __pyx_t_24;
            __pyx_L121_bool_binop_done:;
            if (__pyx_t_2) {
/* … */
              goto __pyx_L120;
            }
 1462:                         # Handle Optional[...] that is Union[..., None] cases first:
+1463:                         if f._inner_priv:
              __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_f, __pyx_n_s_inner_priv); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1463, __pyx_L42_error)
              __Pyx_GOTREF(__pyx_t_4);
              __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 1463, __pyx_L42_error)
              __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
              if (__pyx_t_2) {
/* … */
              }
 1464:                             # If Optional but non-None is a primitive
+1465:                             newval = _parse_builtin_type(f, f._inner_type, value, _encoder)
                __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_f, __pyx_n_s_inner_type); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1465, __pyx_L42_error)
                __Pyx_GOTREF(__pyx_t_4);
                __pyx_t_9 = __pyx_f_9datamodel_10converters__parse_builtin_type(__pyx_v_f, __pyx_t_4, __pyx_v_value, __pyx_v__encoder); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1465, __pyx_L42_error)
                __Pyx_GOTREF(__pyx_t_9);
                __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
                __Pyx_DECREF_SET(__pyx_v_newval, __pyx_t_9);
                __pyx_t_9 = 0;
+1466:                         if f._inner_is_dc:
              __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_f, __pyx_n_s_inner_is_dc); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1466, __pyx_L42_error)
              __Pyx_GOTREF(__pyx_t_9);
              __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_9); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 1466, __pyx_L42_error)
              __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
              if (__pyx_t_2) {
/* … */
              }
 1467:                             # non-None is a Optional Dataclass:
+1468:                             newval = _handle_dataclass_type(
                __pyx_t_32.__pyx_n = 2;
                __pyx_t_32.as_objects = __pyx_t_4;
                __pyx_t_32.parent = Py_None;
                __pyx_t_8 = __pyx_f_9datamodel_10converters__handle_dataclass_type(Py_None, __pyx_v_name, __pyx_v_value, __pyx_t_9, &__pyx_t_32); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1468, __pyx_L42_error)
                __Pyx_GOTREF(__pyx_t_8);
                __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
                __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
                __Pyx_DECREF_SET(__pyx_v_newval, __pyx_t_8);
                __pyx_t_8 = 0;
+1469:                                 None, name, value, f._inner_type, as_objects, None
                __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_f, __pyx_n_s_inner_type); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1469, __pyx_L42_error)
                __Pyx_GOTREF(__pyx_t_9);
                __pyx_t_4 = __Pyx_PyBool_FromLong(__pyx_v_as_objects); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1469, __pyx_L42_error)
                __Pyx_GOTREF(__pyx_t_4);
 1470:                             )
+1471:                         obj.__dict__[name] = newval
              __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_obj, __pyx_n_s_dict); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1471, __pyx_L42_error)
              __Pyx_GOTREF(__pyx_t_8);
              if (unlikely((PyObject_SetItem(__pyx_t_8, __pyx_v_name, __pyx_v_newval) < 0))) __PYX_ERR(0, 1471, __pyx_L42_error)
              __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 1472:                     else:
+1473:                         newval = _parse_typing(
            /*else*/ {
/* … */
              __pyx_t_35.__pyx_n = 3;
              __pyx_t_35.encoder = __pyx_v__encoder;
              __pyx_t_35.as_objects = __pyx_t_8;
              __pyx_t_35.parent = __pyx_v_obj;
              __pyx_t_4 = __pyx_f_9datamodel_10converters__parse_typing(__pyx_v_f, __pyx_v__type, __pyx_v_value, &__pyx_t_35); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1473, __pyx_L42_error)
              __Pyx_GOTREF(__pyx_t_4);
              __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
              __Pyx_DECREF_SET(__pyx_v_newval, __pyx_t_4);
              __pyx_t_4 = 0;
 1474:                             f,
 1475:                             _type,
 1476:                             value,
 1477:                             _encoder,
+1478:                             as_objects,
              __pyx_t_8 = __Pyx_PyBool_FromLong(__pyx_v_as_objects); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1478, __pyx_L42_error)
              __Pyx_GOTREF(__pyx_t_8);
 1479:                             obj
 1480:                         )
+1481:                         obj.__dict__[name] = newval
              __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_obj, __pyx_n_s_dict); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1481, __pyx_L42_error)
              __Pyx_GOTREF(__pyx_t_4);
              if (unlikely((PyObject_SetItem(__pyx_t_4, __pyx_v_name, __pyx_v_newval) < 0))) __PYX_ERR(0, 1481, __pyx_L42_error)
              __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
            }
            __pyx_L120:;
 1482:                 else:
+1483:                     try:
          /*else*/ {
            {
              /*try:*/ {
/* … */
              }
              __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;
              goto __pyx_L132_try_end;
              __pyx_L125_error:;
              __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
              __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
              __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
              __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
              __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
/* … */
              __pyx_L127_except_error:;
              __Pyx_XGIVEREF(__pyx_t_21);
              __Pyx_XGIVEREF(__pyx_t_22);
              __Pyx_XGIVEREF(__pyx_t_23);
              __Pyx_ExceptionReset(__pyx_t_21, __pyx_t_22, __pyx_t_23);
              goto __pyx_L42_error;
              __pyx_L132_try_end:;
            }
          }
          __pyx_L99:;
+1484:                         newval = _parse_typing(
                __pyx_t_35.__pyx_n = 3;
                __pyx_t_35.encoder = __pyx_v__encoder;
                __pyx_t_35.as_objects = __pyx_t_4;
                __pyx_t_35.parent = __pyx_v_obj;
                __pyx_t_8 = __pyx_f_9datamodel_10converters__parse_typing(__pyx_v_f, __pyx_v__type, __pyx_v_value, &__pyx_t_35); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1484, __pyx_L125_error)
                __Pyx_GOTREF(__pyx_t_8);
                __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
                __Pyx_DECREF_SET(__pyx_v_newval, __pyx_t_8);
                __pyx_t_8 = 0;
 1485:                             f,
 1486:                             _type,
 1487:                             value,
 1488:                             _encoder,
+1489:                             as_objects,
                __pyx_t_4 = __Pyx_PyBool_FromLong(__pyx_v_as_objects); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1489, __pyx_L125_error)
                __Pyx_GOTREF(__pyx_t_4);
 1490:                             obj
 1491:                         )
+1492:                         obj.__dict__[name] = newval
                __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_obj, __pyx_n_s_dict); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1492, __pyx_L125_error)
                __Pyx_GOTREF(__pyx_t_8);
                if (unlikely((PyObject_SetItem(__pyx_t_8, __pyx_v_name, __pyx_v_newval) < 0))) __PYX_ERR(0, 1492, __pyx_L125_error)
                __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+1493:                     except Exception as e:
              __pyx_t_11 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(&((PyTypeObject*)PyExc_Exception)[0])));
              if (__pyx_t_11) {
                __Pyx_AddTraceback("datamodel.converters.processing_fields", __pyx_clineno, __pyx_lineno, __pyx_filename);
                if (__Pyx_GetException(&__pyx_t_8, &__pyx_t_4, &__pyx_t_9) < 0) __PYX_ERR(0, 1493, __pyx_L127_except_error)
                __Pyx_XGOTREF(__pyx_t_8);
                __Pyx_XGOTREF(__pyx_t_4);
                __Pyx_XGOTREF(__pyx_t_9);
                __Pyx_INCREF(__pyx_t_4);
                __Pyx_XDECREF_SET(__pyx_v_e, __pyx_t_4);
                /*try:*/ {
/* … */
                /*finally:*/ {
                  __pyx_L138_error:;
                  /*exception exit:*/{
                    __Pyx_PyThreadState_declare
                    __Pyx_PyThreadState_assign
                    __pyx_t_29 = 0; __pyx_t_28 = 0; __pyx_t_27 = 0; __pyx_t_18 = 0; __pyx_t_19 = 0; __pyx_t_20 = 0;
                    __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
                    __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
                    __Pyx_XDECREF(__pyx_t_37); __pyx_t_37 = 0;
                    if (PY_MAJOR_VERSION >= 3) __Pyx_ExceptionSwap(&__pyx_t_18, &__pyx_t_19, &__pyx_t_20);
                    if ((PY_MAJOR_VERSION < 3) || unlikely(__Pyx_GetException(&__pyx_t_29, &__pyx_t_28, &__pyx_t_27) < 0)) __Pyx_ErrFetch(&__pyx_t_29, &__pyx_t_28, &__pyx_t_27);
                    __Pyx_XGOTREF(__pyx_t_29);
                    __Pyx_XGOTREF(__pyx_t_28);
                    __Pyx_XGOTREF(__pyx_t_27);
                    __Pyx_XGOTREF(__pyx_t_18);
                    __Pyx_XGOTREF(__pyx_t_19);
                    __Pyx_XGOTREF(__pyx_t_20);
                    __pyx_t_11 = __pyx_lineno; __pyx_t_16 = __pyx_clineno; __pyx_t_38 = __pyx_filename;
                    {
                      __Pyx_DECREF(__pyx_v_e); __pyx_v_e = 0;
                    }
                    if (PY_MAJOR_VERSION >= 3) {
                      __Pyx_XGIVEREF(__pyx_t_18);
                      __Pyx_XGIVEREF(__pyx_t_19);
                      __Pyx_XGIVEREF(__pyx_t_20);
                      __Pyx_ExceptionReset(__pyx_t_18, __pyx_t_19, __pyx_t_20);
                    }
                    __Pyx_XGIVEREF(__pyx_t_29);
                    __Pyx_XGIVEREF(__pyx_t_28);
                    __Pyx_XGIVEREF(__pyx_t_27);
                    __Pyx_ErrRestore(__pyx_t_29, __pyx_t_28, __pyx_t_27);
                    __pyx_t_29 = 0; __pyx_t_28 = 0; __pyx_t_27 = 0; __pyx_t_18 = 0; __pyx_t_19 = 0; __pyx_t_20 = 0;
                    __pyx_lineno = __pyx_t_11; __pyx_clineno = __pyx_t_16; __pyx_filename = __pyx_t_38;
                    goto __pyx_L127_except_error;
                  }
                }
              }
              goto __pyx_L127_except_error;
+1494:                         raise ValueError(
                  __pyx_t_15 = __Pyx_PyObject_CallOneArg(__pyx_builtin_ValueError, __pyx_t_37); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 1494, __pyx_L138_error)
                  __Pyx_GOTREF(__pyx_t_15);
                  __Pyx_DECREF(__pyx_t_37); __pyx_t_37 = 0;
                  __Pyx_Raise(__pyx_t_15, 0, 0, 0);
                  __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
                  __PYX_ERR(0, 1494, __pyx_L138_error)
                }
+1495:                             f"Error parsing {f.origin}: {name}: {e}"
                  __pyx_t_15 = PyTuple_New(6); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 1495, __pyx_L138_error)
                  __Pyx_GOTREF(__pyx_t_15);
                  __pyx_t_13 = 0;
                  __pyx_t_14 = 127;
                  __Pyx_INCREF(__pyx_kp_u_Error_parsing_2);
                  __pyx_t_13 += 14;
                  __Pyx_GIVEREF(__pyx_kp_u_Error_parsing_2);
                  PyTuple_SET_ITEM(__pyx_t_15, 0, __pyx_kp_u_Error_parsing_2);
                  __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_v_f, __pyx_n_s_origin); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1495, __pyx_L138_error)
                  __Pyx_GOTREF(__pyx_t_12);
                  __pyx_t_37 = __Pyx_PyObject_FormatSimple(__pyx_t_12, __pyx_empty_unicode); if (unlikely(!__pyx_t_37)) __PYX_ERR(0, 1495, __pyx_L138_error)
                  __Pyx_GOTREF(__pyx_t_37);
                  __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
                  __pyx_t_14 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_37) > __pyx_t_14) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_37) : __pyx_t_14;
                  __pyx_t_13 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_37);
                  __Pyx_GIVEREF(__pyx_t_37);
                  PyTuple_SET_ITEM(__pyx_t_15, 1, __pyx_t_37);
                  __pyx_t_37 = 0;
                  __Pyx_INCREF(__pyx_kp_u__7);
                  __pyx_t_13 += 2;
                  __Pyx_GIVEREF(__pyx_kp_u__7);
                  PyTuple_SET_ITEM(__pyx_t_15, 2, __pyx_kp_u__7);
                  __pyx_t_37 = __Pyx_PyUnicode_Unicode(__pyx_v_name); if (unlikely(!__pyx_t_37)) __PYX_ERR(0, 1495, __pyx_L138_error)
                  __Pyx_GOTREF(__pyx_t_37);
                  __pyx_t_14 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_37) > __pyx_t_14) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_37) : __pyx_t_14;
                  __pyx_t_13 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_37);
                  __Pyx_GIVEREF(__pyx_t_37);
                  PyTuple_SET_ITEM(__pyx_t_15, 3, __pyx_t_37);
                  __pyx_t_37 = 0;
                  __Pyx_INCREF(__pyx_kp_u__7);
                  __pyx_t_13 += 2;
                  __Pyx_GIVEREF(__pyx_kp_u__7);
                  PyTuple_SET_ITEM(__pyx_t_15, 4, __pyx_kp_u__7);
                  __pyx_t_37 = __Pyx_PyObject_FormatSimple(__pyx_v_e, __pyx_empty_unicode); if (unlikely(!__pyx_t_37)) __PYX_ERR(0, 1495, __pyx_L138_error)
                  __Pyx_GOTREF(__pyx_t_37);
                  __pyx_t_14 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_37) > __pyx_t_14) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_37) : __pyx_t_14;
                  __pyx_t_13 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_37);
                  __Pyx_GIVEREF(__pyx_t_37);
                  PyTuple_SET_ITEM(__pyx_t_15, 5, __pyx_t_37);
                  __pyx_t_37 = 0;
                  __pyx_t_37 = __Pyx_PyUnicode_Join(__pyx_t_15, 6, __pyx_t_13, __pyx_t_14); if (unlikely(!__pyx_t_37)) __PYX_ERR(0, 1495, __pyx_L138_error)
                  __Pyx_GOTREF(__pyx_t_37);
                  __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
 1496:                         )
+1497:             elif isinstance(value, list) and type_args:
        __pyx_t_24 = PyList_Check(__pyx_v_value); 
        if (__pyx_t_24) {
        } else {
          __pyx_t_2 = __pyx_t_24;
          goto __pyx_L144_bool_binop_done;
        }
        __pyx_t_24 = (__pyx_v_type_args != Py_None)&&(PyTuple_GET_SIZE(__pyx_v_type_args) != 0);
        __pyx_t_2 = __pyx_t_24;
        __pyx_L144_bool_binop_done:;
        if (__pyx_t_2) {
/* … */
          goto __pyx_L50;
        }
+1498:                 if as_objects is True:
          __pyx_t_2 = (__pyx_v_as_objects == 1);
          if (__pyx_t_2) {
/* … */
            goto __pyx_L146;
          }
+1499:                     newval = _handle_list_of_dataclasses(f, name, value, _type, obj)
            __pyx_t_33.__pyx_n = 1;
            __pyx_t_33.parent = __pyx_v_obj;
            __pyx_t_9 = __pyx_f_9datamodel_10converters__handle_list_of_dataclasses(__pyx_v_f, __pyx_v_name, __pyx_v_value, __pyx_v__type, &__pyx_t_33); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1499, __pyx_L42_error)
            __Pyx_GOTREF(__pyx_t_9);
            __Pyx_DECREF_SET(__pyx_v_newval, __pyx_t_9);
            __pyx_t_9 = 0;
 1500:                 else:
+1501:                     newval = _handle_list_of_dataclasses(f, name, value, _type, None)
          /*else*/ {
            __pyx_t_33.__pyx_n = 1;
            __pyx_t_33.parent = Py_None;
            __pyx_t_9 = __pyx_f_9datamodel_10converters__handle_list_of_dataclasses(__pyx_v_f, __pyx_v_name, __pyx_v_value, __pyx_v__type, &__pyx_t_33); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1501, __pyx_L42_error)
            __Pyx_GOTREF(__pyx_t_9);
            __Pyx_DECREF_SET(__pyx_v_newval, __pyx_t_9);
            __pyx_t_9 = 0;
          }
          __pyx_L146:;
+1502:                 obj.__dict__[name] = newval
          __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_obj, __pyx_n_s_dict); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1502, __pyx_L42_error)
          __Pyx_GOTREF(__pyx_t_9);
          if (unlikely((PyObject_SetItem(__pyx_t_9, __pyx_v_name, __pyx_v_newval) < 0))) __PYX_ERR(0, 1502, __pyx_L42_error)
          __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
 1503:             else:
+1504:                 newval = _parse_typing(
        /*else*/ {
/* … */
          __pyx_t_35.__pyx_n = 3;
          __pyx_t_35.encoder = __pyx_v__encoder;
          __pyx_t_35.as_objects = __pyx_t_9;
          __pyx_t_35.parent = __pyx_v_obj;
          __pyx_t_4 = __pyx_f_9datamodel_10converters__parse_typing(__pyx_v_f, __pyx_v__type, __pyx_v_value, &__pyx_t_35); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1504, __pyx_L42_error)
          __Pyx_GOTREF(__pyx_t_4);
          __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
          __Pyx_DECREF_SET(__pyx_v_newval, __pyx_t_4);
          __pyx_t_4 = 0;
 1505:                     f,
 1506:                     _type,
 1507:                     value,
 1508:                     _encoder,
+1509:                     as_objects,
          __pyx_t_9 = __Pyx_PyBool_FromLong(__pyx_v_as_objects); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1509, __pyx_L42_error)
          __Pyx_GOTREF(__pyx_t_9);
 1510:                     obj
 1511:                 )
+1512:                 obj.__dict__[name] = newval
          __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_obj, __pyx_n_s_dict); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1512, __pyx_L42_error)
          __Pyx_GOTREF(__pyx_t_4);
          if (unlikely((PyObject_SetItem(__pyx_t_4, __pyx_v_name, __pyx_v_newval) < 0))) __PYX_ERR(0, 1512, __pyx_L42_error)
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
        }
        __pyx_L50:;
 1513:             # then, call the validation process:
+1514:             if (error := _validation_(name, newval, f, _type, meta, field_category, as_objects)):
        if (!(likely(PyUnicode_CheckExact(__pyx_v_field_category))||((__pyx_v_field_category) == Py_None) || __Pyx_RaiseUnexpectedTypeError("unicode", __pyx_v_field_category))) __PYX_ERR(0, 1514, __pyx_L42_error)
        __pyx_t_39.__pyx_n = 1;
        __pyx_t_39.as_objects = __pyx_v_as_objects;
        __pyx_t_4 = __pyx_f_9datamodel_10converters__validation_(__pyx_v_name, __pyx_v_newval, __pyx_v_f, __pyx_v__type, __pyx_v_meta, ((PyObject*)__pyx_v_field_category), &__pyx_t_39); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1514, __pyx_L42_error)
        __Pyx_GOTREF(__pyx_t_4);
        __Pyx_XDECREF_SET(__pyx_v_error, __pyx_t_4);
        __Pyx_INCREF(__pyx_t_4);
        __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 1514, __pyx_L42_error)
        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
        if (__pyx_t_2) {
/* … */
        }
+1515:                 errors[name] = error
          if (unlikely((PyDict_SetItem(__pyx_v_errors, __pyx_v_name, __pyx_v_error) < 0))) __PYX_ERR(0, 1515, __pyx_L42_error)
+1516:         except ValueError as ex:
      __pyx_t_16 = __Pyx_PyErr_ExceptionMatches(__pyx_builtin_ValueError);
      if (__pyx_t_16) {
        __Pyx_AddTraceback("datamodel.converters.processing_fields", __pyx_clineno, __pyx_lineno, __pyx_filename);
        if (__Pyx_GetException(&__pyx_t_4, &__pyx_t_9, &__pyx_t_8) < 0) __PYX_ERR(0, 1516, __pyx_L44_except_error)
        __Pyx_XGOTREF(__pyx_t_4);
        __Pyx_XGOTREF(__pyx_t_9);
        __Pyx_XGOTREF(__pyx_t_8);
        __Pyx_INCREF(__pyx_t_9);
        __Pyx_XDECREF_SET(__pyx_v_ex, __pyx_t_9);
        /*try:*/ {
/* … */
        /*finally:*/ {
          __pyx_L153_error:;
          /*exception exit:*/{
            __Pyx_PyThreadState_declare
            __Pyx_PyThreadState_assign
            __pyx_t_23 = 0; __pyx_t_22 = 0; __pyx_t_21 = 0; __pyx_t_20 = 0; __pyx_t_19 = 0; __pyx_t_18 = 0;
            __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
            __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
            __Pyx_XDECREF(__pyx_t_37); __pyx_t_37 = 0;
            if (PY_MAJOR_VERSION >= 3) __Pyx_ExceptionSwap(&__pyx_t_20, &__pyx_t_19, &__pyx_t_18);
            if ((PY_MAJOR_VERSION < 3) || unlikely(__Pyx_GetException(&__pyx_t_23, &__pyx_t_22, &__pyx_t_21) < 0)) __Pyx_ErrFetch(&__pyx_t_23, &__pyx_t_22, &__pyx_t_21);
            __Pyx_XGOTREF(__pyx_t_23);
            __Pyx_XGOTREF(__pyx_t_22);
            __Pyx_XGOTREF(__pyx_t_21);
            __Pyx_XGOTREF(__pyx_t_20);
            __Pyx_XGOTREF(__pyx_t_19);
            __Pyx_XGOTREF(__pyx_t_18);
            __pyx_t_16 = __pyx_lineno; __pyx_t_11 = __pyx_clineno; __pyx_t_40 = __pyx_filename;
            {
              __Pyx_DECREF(__pyx_v_ex); __pyx_v_ex = 0;
            }
            if (PY_MAJOR_VERSION >= 3) {
              __Pyx_XGIVEREF(__pyx_t_20);
              __Pyx_XGIVEREF(__pyx_t_19);
              __Pyx_XGIVEREF(__pyx_t_18);
              __Pyx_ExceptionReset(__pyx_t_20, __pyx_t_19, __pyx_t_18);
            }
            __Pyx_XGIVEREF(__pyx_t_23);
            __Pyx_XGIVEREF(__pyx_t_22);
            __Pyx_XGIVEREF(__pyx_t_21);
            __Pyx_ErrRestore(__pyx_t_23, __pyx_t_22, __pyx_t_21);
            __pyx_t_23 = 0; __pyx_t_22 = 0; __pyx_t_21 = 0; __pyx_t_20 = 0; __pyx_t_19 = 0; __pyx_t_18 = 0;
            __pyx_lineno = __pyx_t_16; __pyx_clineno = __pyx_t_11; __pyx_filename = __pyx_t_40;
            goto __pyx_L44_except_error;
          }
          __pyx_L150_continue: {
            __Pyx_DECREF(__pyx_v_ex); __pyx_v_ex = 0;
            goto __pyx_L148_except_continue;
          }
        }
        __pyx_L148_except_continue:;
        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
        __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
        __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
        goto __pyx_L48_try_continue;
      }
+1517:             if meta.strict is True:
          __pyx_t_15 = __Pyx_PyObject_GetAttrStr(__pyx_v_meta, __pyx_n_s_strict); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 1517, __pyx_L153_error)
          __Pyx_GOTREF(__pyx_t_15);
          __pyx_t_2 = (__pyx_t_15 == Py_True);
          __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
          if (unlikely(__pyx_t_2)) {
/* … */
          }
+1518:                 raise
            __Pyx_GIVEREF(__pyx_t_4);
            __Pyx_GIVEREF(__pyx_t_9);
            __Pyx_XGIVEREF(__pyx_t_8);
            __Pyx_ErrRestoreWithState(__pyx_t_4, __pyx_t_9, __pyx_t_8);
            __pyx_t_4 = 0; __pyx_t_9 = 0; __pyx_t_8 = 0; 
            __PYX_ERR(0, 1518, __pyx_L153_error)
 1519:             else:
+1520:                 errors.update(_build_error(name, f"Wrong Value for {f.name}: {f.type}", ex))
          /*else*/ {
            __pyx_t_15 = PyTuple_New(4); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 1520, __pyx_L153_error)
            __Pyx_GOTREF(__pyx_t_15);
            __pyx_t_13 = 0;
            __pyx_t_14 = 127;
            __Pyx_INCREF(__pyx_kp_u_Wrong_Value_for);
            __pyx_t_13 += 16;
            __Pyx_GIVEREF(__pyx_kp_u_Wrong_Value_for);
            PyTuple_SET_ITEM(__pyx_t_15, 0, __pyx_kp_u_Wrong_Value_for);
            __pyx_t_37 = __Pyx_PyObject_GetAttrStr(__pyx_v_f, __pyx_n_s_name_2); if (unlikely(!__pyx_t_37)) __PYX_ERR(0, 1520, __pyx_L153_error)
            __Pyx_GOTREF(__pyx_t_37);
            __pyx_t_12 = __Pyx_PyObject_FormatSimple(__pyx_t_37, __pyx_empty_unicode); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1520, __pyx_L153_error)
            __Pyx_GOTREF(__pyx_t_12);
            __Pyx_DECREF(__pyx_t_37); __pyx_t_37 = 0;
            __pyx_t_14 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_12) > __pyx_t_14) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_12) : __pyx_t_14;
            __pyx_t_13 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_12);
            __Pyx_GIVEREF(__pyx_t_12);
            PyTuple_SET_ITEM(__pyx_t_15, 1, __pyx_t_12);
            __pyx_t_12 = 0;
            __Pyx_INCREF(__pyx_kp_u__7);
            __pyx_t_13 += 2;
            __Pyx_GIVEREF(__pyx_kp_u__7);
            PyTuple_SET_ITEM(__pyx_t_15, 2, __pyx_kp_u__7);
            __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_v_f, __pyx_n_s_type_2); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1520, __pyx_L153_error)
            __Pyx_GOTREF(__pyx_t_12);
            __pyx_t_37 = __Pyx_PyObject_FormatSimple(__pyx_t_12, __pyx_empty_unicode); if (unlikely(!__pyx_t_37)) __PYX_ERR(0, 1520, __pyx_L153_error)
            __Pyx_GOTREF(__pyx_t_37);
            __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
            __pyx_t_14 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_37) > __pyx_t_14) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_37) : __pyx_t_14;
            __pyx_t_13 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_37);
            __Pyx_GIVEREF(__pyx_t_37);
            PyTuple_SET_ITEM(__pyx_t_15, 3, __pyx_t_37);
            __pyx_t_37 = 0;
            __pyx_t_37 = __Pyx_PyUnicode_Join(__pyx_t_15, 4, __pyx_t_13, __pyx_t_14); if (unlikely(!__pyx_t_37)) __PYX_ERR(0, 1520, __pyx_L153_error)
            __Pyx_GOTREF(__pyx_t_37);
            __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
            __pyx_t_15 = __pyx_f_9datamodel_10converters__build_error(__pyx_v_name, ((PyObject*)__pyx_t_37), __pyx_v_ex); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 1520, __pyx_L153_error)
            __Pyx_GOTREF(__pyx_t_15);
            __Pyx_DECREF(__pyx_t_37); __pyx_t_37 = 0;
            __pyx_t_37 = __Pyx_CallUnboundCMethod1(&__pyx_umethod_PyDict_Type_update, __pyx_v_errors, __pyx_t_15); if (unlikely(!__pyx_t_37)) __PYX_ERR(0, 1520, __pyx_L153_error)
            __Pyx_GOTREF(__pyx_t_37);
            __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
            __Pyx_DECREF(__pyx_t_37); __pyx_t_37 = 0;
+1521:                 continue
            goto __pyx_L150_continue;
          }
        }
+1522:         except AttributeError:
      __pyx_t_11 = __Pyx_PyErr_ExceptionMatches(__pyx_builtin_AttributeError);
      if (__pyx_t_11) {
        __Pyx_AddTraceback("datamodel.converters.processing_fields", __pyx_clineno, __pyx_lineno, __pyx_filename);
        if (__Pyx_GetException(&__pyx_t_8, &__pyx_t_9, &__pyx_t_4) < 0) __PYX_ERR(0, 1522, __pyx_L44_except_error)
        __Pyx_XGOTREF(__pyx_t_8);
        __Pyx_XGOTREF(__pyx_t_9);
        __Pyx_XGOTREF(__pyx_t_4);
+1523:             raise
        __Pyx_GIVEREF(__pyx_t_8);
        __Pyx_GIVEREF(__pyx_t_9);
        __Pyx_XGIVEREF(__pyx_t_4);
        __Pyx_ErrRestoreWithState(__pyx_t_8, __pyx_t_9, __pyx_t_4);
        __pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_4 = 0; 
        __PYX_ERR(0, 1523, __pyx_L44_except_error)
      }
+1524:         except (TypeError, RuntimeError) as ex:
      __pyx_t_11 = __Pyx_PyErr_ExceptionMatches2(__pyx_builtin_TypeError, __pyx_builtin_RuntimeError);
      if (__pyx_t_11) {
        __Pyx_AddTraceback("datamodel.converters.processing_fields", __pyx_clineno, __pyx_lineno, __pyx_filename);
        if (__Pyx_GetException(&__pyx_t_4, &__pyx_t_9, &__pyx_t_8) < 0) __PYX_ERR(0, 1524, __pyx_L44_except_error)
        __Pyx_XGOTREF(__pyx_t_4);
        __Pyx_XGOTREF(__pyx_t_9);
        __Pyx_XGOTREF(__pyx_t_8);
        __Pyx_INCREF(__pyx_t_9);
        __Pyx_XDECREF_SET(__pyx_v_ex, __pyx_t_9);
        /*try:*/ {
/* … */
        /*finally:*/ {
          __pyx_L167_error:;
          /*exception exit:*/{
            __Pyx_PyThreadState_declare
            __Pyx_PyThreadState_assign
            __pyx_t_18 = 0; __pyx_t_19 = 0; __pyx_t_20 = 0; __pyx_t_21 = 0; __pyx_t_22 = 0; __pyx_t_23 = 0;
            __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
            __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
            __Pyx_XDECREF(__pyx_t_37); __pyx_t_37 = 0;
            if (PY_MAJOR_VERSION >= 3) __Pyx_ExceptionSwap(&__pyx_t_21, &__pyx_t_22, &__pyx_t_23);
            if ((PY_MAJOR_VERSION < 3) || unlikely(__Pyx_GetException(&__pyx_t_18, &__pyx_t_19, &__pyx_t_20) < 0)) __Pyx_ErrFetch(&__pyx_t_18, &__pyx_t_19, &__pyx_t_20);
            __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_XGOTREF(__pyx_t_23);
            __pyx_t_11 = __pyx_lineno; __pyx_t_16 = __pyx_clineno; __pyx_t_41 = __pyx_filename;
            {
              __Pyx_DECREF(__pyx_v_ex); __pyx_v_ex = 0;
            }
            if (PY_MAJOR_VERSION >= 3) {
              __Pyx_XGIVEREF(__pyx_t_21);
              __Pyx_XGIVEREF(__pyx_t_22);
              __Pyx_XGIVEREF(__pyx_t_23);
              __Pyx_ExceptionReset(__pyx_t_21, __pyx_t_22, __pyx_t_23);
            }
            __Pyx_XGIVEREF(__pyx_t_18);
            __Pyx_XGIVEREF(__pyx_t_19);
            __Pyx_XGIVEREF(__pyx_t_20);
            __Pyx_ErrRestore(__pyx_t_18, __pyx_t_19, __pyx_t_20);
            __pyx_t_18 = 0; __pyx_t_19 = 0; __pyx_t_20 = 0; __pyx_t_21 = 0; __pyx_t_22 = 0; __pyx_t_23 = 0;
            __pyx_lineno = __pyx_t_11; __pyx_clineno = __pyx_t_16; __pyx_filename = __pyx_t_41;
            goto __pyx_L44_except_error;
          }
          __pyx_L164_continue: {
            __Pyx_DECREF(__pyx_v_ex); __pyx_v_ex = 0;
            goto __pyx_L162_except_continue;
          }
        }
        __pyx_L162_except_continue:;
        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
        __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
        __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
        goto __pyx_L48_try_continue;
      }
      goto __pyx_L44_except_error;
+1525:             errors.update(_build_error(name, f"Wrong Type for {f.name}: {f.type}", ex))
          __pyx_t_37 = PyTuple_New(4); if (unlikely(!__pyx_t_37)) __PYX_ERR(0, 1525, __pyx_L167_error)
          __Pyx_GOTREF(__pyx_t_37);
          __pyx_t_13 = 0;
          __pyx_t_14 = 127;
          __Pyx_INCREF(__pyx_kp_u_Wrong_Type_for);
          __pyx_t_13 += 15;
          __Pyx_GIVEREF(__pyx_kp_u_Wrong_Type_for);
          PyTuple_SET_ITEM(__pyx_t_37, 0, __pyx_kp_u_Wrong_Type_for);
          __pyx_t_15 = __Pyx_PyObject_GetAttrStr(__pyx_v_f, __pyx_n_s_name_2); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 1525, __pyx_L167_error)
          __Pyx_GOTREF(__pyx_t_15);
          __pyx_t_12 = __Pyx_PyObject_FormatSimple(__pyx_t_15, __pyx_empty_unicode); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1525, __pyx_L167_error)
          __Pyx_GOTREF(__pyx_t_12);
          __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
          __pyx_t_14 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_12) > __pyx_t_14) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_12) : __pyx_t_14;
          __pyx_t_13 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_12);
          __Pyx_GIVEREF(__pyx_t_12);
          PyTuple_SET_ITEM(__pyx_t_37, 1, __pyx_t_12);
          __pyx_t_12 = 0;
          __Pyx_INCREF(__pyx_kp_u__7);
          __pyx_t_13 += 2;
          __Pyx_GIVEREF(__pyx_kp_u__7);
          PyTuple_SET_ITEM(__pyx_t_37, 2, __pyx_kp_u__7);
          __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_v_f, __pyx_n_s_type_2); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1525, __pyx_L167_error)
          __Pyx_GOTREF(__pyx_t_12);
          __pyx_t_15 = __Pyx_PyObject_FormatSimple(__pyx_t_12, __pyx_empty_unicode); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 1525, __pyx_L167_error)
          __Pyx_GOTREF(__pyx_t_15);
          __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
          __pyx_t_14 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_15) > __pyx_t_14) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_15) : __pyx_t_14;
          __pyx_t_13 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_15);
          __Pyx_GIVEREF(__pyx_t_15);
          PyTuple_SET_ITEM(__pyx_t_37, 3, __pyx_t_15);
          __pyx_t_15 = 0;
          __pyx_t_15 = __Pyx_PyUnicode_Join(__pyx_t_37, 4, __pyx_t_13, __pyx_t_14); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 1525, __pyx_L167_error)
          __Pyx_GOTREF(__pyx_t_15);
          __Pyx_DECREF(__pyx_t_37); __pyx_t_37 = 0;
          __pyx_t_37 = __pyx_f_9datamodel_10converters__build_error(__pyx_v_name, ((PyObject*)__pyx_t_15), __pyx_v_ex); if (unlikely(!__pyx_t_37)) __PYX_ERR(0, 1525, __pyx_L167_error)
          __Pyx_GOTREF(__pyx_t_37);
          __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
          __pyx_t_15 = __Pyx_CallUnboundCMethod1(&__pyx_umethod_PyDict_Type_update, __pyx_v_errors, __pyx_t_37); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 1525, __pyx_L167_error)
          __Pyx_GOTREF(__pyx_t_15);
          __Pyx_DECREF(__pyx_t_37); __pyx_t_37 = 0;
          __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
+1526:             continue
          goto __pyx_L164_continue;
        }
 1527:     # Return Errors (if any)
+1528:     return errors
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_errors);
  __pyx_r = __pyx_v_errors;
  goto __pyx_L0;
 1529: 
+1530: cdef object _validation_(
static PyObject *__pyx_f_9datamodel_10converters__validation_(PyObject *__pyx_v_name, PyObject *__pyx_v_value, PyObject *__pyx_v_f, PyObject *__pyx_v__type, PyObject *__pyx_v_meta, PyObject *__pyx_v_field_category, struct __pyx_opt_args_9datamodel_10converters__validation_ *__pyx_optional_args) {
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_XDECREF(__pyx_t_11);
  __Pyx_AddTraceback("datamodel.converters._validation_", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_val_type);
  __Pyx_XDECREF(__pyx_v_error);
  __Pyx_XDECREF(__pyx_v_err);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
struct __pyx_opt_args_9datamodel_10converters__validation_ {
  int __pyx_n;
  int as_objects;
};
 1531:     str name,
 1532:     object value,
 1533:     object f,
 1534:     object _type,
 1535:     object meta,
 1536:     str field_category,
+1537:     bint as_objects = False
  int __pyx_v_as_objects = ((int)0);
  PyObject *__pyx_v_val_type = 0;
  PyObject *__pyx_v_error = 0;
  PyObject *__pyx_v_err = 0;
  PyObject *__pyx_r = NULL;
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_as_objects = __pyx_optional_args->as_objects;
    }
  }
 1538: ):
 1539:     """
 1540:     _validation_.
 1541:     TODO: cover validations as length, not_null, required, max, min, etc
 1542:     """
+1543:     cdef object val_type = type(value)
  __Pyx_INCREF(((PyObject *)Py_TYPE(__pyx_v_value)));
  __pyx_v_val_type = ((PyObject *)Py_TYPE(__pyx_v_value));
+1544:     cdef str error = None
  __Pyx_INCREF(Py_None);
  __pyx_v_error = ((PyObject*)Py_None);
 1545:     cdef dict err = {
+1546:         "field": name,
  __pyx_t_1 = __Pyx_PyDict_NewPresized(3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1546, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_field, __pyx_v_name) < 0) __PYX_ERR(0, 1546, __pyx_L1_error)
+1547:         "value": value,
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_value_2, __pyx_v_value) < 0) __PYX_ERR(0, 1546, __pyx_L1_error)
+1548:         "error": None
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_error_3, Py_None) < 0) __PYX_ERR(0, 1546, __pyx_L1_error)
  __pyx_v_err = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
 1549:     }
+1550:     if val_type == type or value == _type or is_empty(value):
  __pyx_t_1 = PyObject_RichCompare(__pyx_v_val_type, ((PyObject *)(&PyType_Type)), Py_EQ); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1550, __pyx_L1_error)
  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_3 < 0))) __PYX_ERR(0, 1550, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (!__pyx_t_3) {
  } else {
    __pyx_t_2 = __pyx_t_3;
    goto __pyx_L4_bool_binop_done;
  }
  __pyx_t_1 = PyObject_RichCompare(__pyx_v_value, __pyx_v__type, Py_EQ); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1550, __pyx_L1_error)
  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_3 < 0))) __PYX_ERR(0, 1550, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (!__pyx_t_3) {
  } else {
    __pyx_t_2 = __pyx_t_3;
    goto __pyx_L4_bool_binop_done;
  }
  __pyx_t_3 = __pyx_f_9datamodel_10converters_is_empty(__pyx_v_value); if (unlikely(__pyx_t_3 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1550, __pyx_L1_error)
  __pyx_t_2 = __pyx_t_3;
  __pyx_L4_bool_binop_done:;
  if (__pyx_t_2) {
/* … */
  }
+1551:         try:
    {
      /*try:*/ {
/* … */
      }
      __pyx_L7_error:;
      __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
/* … */
      __pyx_L9_except_error:;
      __Pyx_XGIVEREF(__pyx_t_4);
      __Pyx_XGIVEREF(__pyx_t_5);
      __Pyx_XGIVEREF(__pyx_t_6);
      __Pyx_ExceptionReset(__pyx_t_4, __pyx_t_5, __pyx_t_6);
      goto __pyx_L1_error;
      __pyx_L11_try_return:;
      __Pyx_XGIVEREF(__pyx_t_4);
      __Pyx_XGIVEREF(__pyx_t_5);
      __Pyx_XGIVEREF(__pyx_t_6);
      __Pyx_ExceptionReset(__pyx_t_4, __pyx_t_5, __pyx_t_6);
      goto __pyx_L0;
    }
+1552:             _field_checks_(f, name, value, meta)
        __pyx_t_1 = __pyx_f_9datamodel_10converters__field_checks_(__pyx_v_f, __pyx_v_name, __pyx_v_value, __pyx_v_meta); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1552, __pyx_L7_error)
        __Pyx_GOTREF(__pyx_t_1);
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+1553:             return None
        __Pyx_XDECREF(__pyx_r);
        __pyx_r = Py_None; __Pyx_INCREF(Py_None);
        goto __pyx_L11_try_return;
+1554:         except (ValueError, TypeError):
      __pyx_t_7 = __Pyx_PyErr_ExceptionMatches2(__pyx_builtin_ValueError, __pyx_builtin_TypeError);
      if (__pyx_t_7) {
        __Pyx_AddTraceback("datamodel.converters._validation_", __pyx_clineno, __pyx_lineno, __pyx_filename);
        if (__Pyx_GetException(&__pyx_t_1, &__pyx_t_8, &__pyx_t_9) < 0) __PYX_ERR(0, 1554, __pyx_L9_except_error)
        __Pyx_XGOTREF(__pyx_t_1);
        __Pyx_XGOTREF(__pyx_t_8);
        __Pyx_XGOTREF(__pyx_t_9);
+1555:             raise
        __Pyx_GIVEREF(__pyx_t_1);
        __Pyx_GIVEREF(__pyx_t_8);
        __Pyx_XGIVEREF(__pyx_t_9);
        __Pyx_ErrRestoreWithState(__pyx_t_1, __pyx_t_8, __pyx_t_9);
        __pyx_t_1 = 0; __pyx_t_8 = 0; __pyx_t_9 = 0; 
        __PYX_ERR(0, 1555, __pyx_L9_except_error)
      }
      goto __pyx_L9_except_error;
 1556:     # If the field has a cached validator, use it.
+1557:     if f.validator is not None:
  __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_f, __pyx_n_s_validator); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1557, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  __pyx_t_2 = (__pyx_t_9 != Py_None);
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  if (__pyx_t_2) {
/* … */
  }
+1558:         try:
    {
      /*try:*/ {
/* … */
      }
      __pyx_L16_error:;
      __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
      __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
/* … */
      __pyx_L18_except_error:;
      __Pyx_XGIVEREF(__pyx_t_6);
      __Pyx_XGIVEREF(__pyx_t_5);
      __Pyx_XGIVEREF(__pyx_t_4);
      __Pyx_ExceptionReset(__pyx_t_6, __pyx_t_5, __pyx_t_4);
      goto __pyx_L1_error;
      __pyx_L20_try_return:;
      __Pyx_XGIVEREF(__pyx_t_6);
      __Pyx_XGIVEREF(__pyx_t_5);
      __Pyx_XGIVEREF(__pyx_t_4);
      __Pyx_ExceptionReset(__pyx_t_6, __pyx_t_5, __pyx_t_4);
      goto __pyx_L0;
    }
+1559:             error = f.validator(f, name, value, _type)
        __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_f, __pyx_n_s_validator); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1559, __pyx_L16_error)
        __Pyx_GOTREF(__pyx_t_8);
        __pyx_t_1 = NULL;
        __pyx_t_10 = 0;
        #if CYTHON_UNPACK_METHODS
        if (likely(PyMethod_Check(__pyx_t_8))) {
          __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_8);
          if (likely(__pyx_t_1)) {
            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_8);
            __Pyx_INCREF(__pyx_t_1);
            __Pyx_INCREF(function);
            __Pyx_DECREF_SET(__pyx_t_8, function);
            __pyx_t_10 = 1;
          }
        }
        #endif
        {
          PyObject *__pyx_callargs[5] = {__pyx_t_1, __pyx_v_f, __pyx_v_name, __pyx_v_value, __pyx_v__type};
          __pyx_t_9 = __Pyx_PyObject_FastCall(__pyx_t_8, __pyx_callargs+1-__pyx_t_10, 4+__pyx_t_10);
          __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
          if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1559, __pyx_L16_error)
          __Pyx_GOTREF(__pyx_t_9);
          __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
        }
        if (!(likely(PyUnicode_CheckExact(__pyx_t_9))||((__pyx_t_9) == Py_None) || __Pyx_RaiseUnexpectedTypeError("unicode", __pyx_t_9))) __PYX_ERR(0, 1559, __pyx_L16_error)
        __Pyx_DECREF_SET(__pyx_v_error, ((PyObject*)__pyx_t_9));
        __pyx_t_9 = 0;
+1560:             if error:
        __pyx_t_2 = (__pyx_v_error != Py_None)&&(__Pyx_PyUnicode_IS_TRUE(__pyx_v_error) != 0);
        if (__pyx_t_2) {
/* … */
        }
+1561:                 err["error"] = error
          if (unlikely((PyDict_SetItem(__pyx_v_err, __pyx_n_u_error_3, __pyx_v_error) < 0))) __PYX_ERR(0, 1561, __pyx_L16_error)
+1562:                 return err
          __Pyx_XDECREF(__pyx_r);
          __Pyx_INCREF(__pyx_v_err);
          __pyx_r = __pyx_v_err;
          goto __pyx_L20_try_return;
+1563:             return None
        __Pyx_XDECREF(__pyx_r);
        __pyx_r = Py_None; __Pyx_INCREF(Py_None);
        goto __pyx_L20_try_return;
+1564:         except ValueError:
      __pyx_t_7 = __Pyx_PyErr_ExceptionMatches(__pyx_builtin_ValueError);
      if (__pyx_t_7) {
        __Pyx_AddTraceback("datamodel.converters._validation_", __pyx_clineno, __pyx_lineno, __pyx_filename);
        if (__Pyx_GetException(&__pyx_t_9, &__pyx_t_8, &__pyx_t_1) < 0) __PYX_ERR(0, 1564, __pyx_L18_except_error)
        __Pyx_XGOTREF(__pyx_t_9);
        __Pyx_XGOTREF(__pyx_t_8);
        __Pyx_XGOTREF(__pyx_t_1);
+1565:             raise
        __Pyx_GIVEREF(__pyx_t_9);
        __Pyx_GIVEREF(__pyx_t_8);
        __Pyx_XGIVEREF(__pyx_t_1);
        __Pyx_ErrRestoreWithState(__pyx_t_9, __pyx_t_8, __pyx_t_1);
        __pyx_t_9 = 0; __pyx_t_8 = 0; __pyx_t_1 = 0; 
        __PYX_ERR(0, 1565, __pyx_L18_except_error)
      }
      goto __pyx_L18_except_error;
 1566:     else:
 1567:         # capturing other errors from validator:
+1568:         return _validation(f, name, value, _type, val_type, field_category, as_objects)
  /*else*/ {
    __Pyx_XDECREF(__pyx_r);
    __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_validation); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1568, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __pyx_t_9 = __Pyx_PyBool_FromLong(__pyx_v_as_objects); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1568, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __pyx_t_11 = NULL;
    __pyx_t_10 = 0;
    #if CYTHON_UNPACK_METHODS
    if (unlikely(PyMethod_Check(__pyx_t_8))) {
      __pyx_t_11 = PyMethod_GET_SELF(__pyx_t_8);
      if (likely(__pyx_t_11)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_8);
        __Pyx_INCREF(__pyx_t_11);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_8, function);
        __pyx_t_10 = 1;
      }
    }
    #endif
    {
      PyObject *__pyx_callargs[8] = {__pyx_t_11, __pyx_v_f, __pyx_v_name, __pyx_v_value, __pyx_v__type, __pyx_v_val_type, __pyx_v_field_category, __pyx_t_9};
      __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_8, __pyx_callargs+1-__pyx_t_10, 7+__pyx_t_10);
      __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1568, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    }
    __pyx_r = __pyx_t_1;
    __pyx_t_1 = 0;
    goto __pyx_L0;
  }
 1569: 
+1570: cdef object _field_checks_(object f, str name, object value, object meta):
static PyObject *__pyx_f_9datamodel_10converters__field_checks_(PyObject *__pyx_v_f, PyObject *__pyx_v_name, PyObject *__pyx_v_value, PyObject *__pyx_v_meta) {
  PyObject *__pyx_v_metadata = 0;
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_11);
  __Pyx_AddTraceback("datamodel.converters._field_checks_", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_metadata);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 1571:     # Validate Primary Key
+1572:     cdef object metadata = f.metadata
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_f, __pyx_n_s_metadata); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1572, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_metadata = __pyx_t_1;
  __pyx_t_1 = 0;
+1573:     try:
  {
    /*try:*/ {
/* … */
    }
    __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;
    goto __pyx_L8_try_end;
    __pyx_L3_error:;
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
/* … */
    __pyx_L5_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_L4_exception_handled:;
    __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);
    __pyx_L8_try_end:;
  }
+1574:         if metadata.get('primary', False) is True:
      __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_metadata, __pyx_n_s_get); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1574, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_tuple__14, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1574, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_t_6 = (__pyx_t_5 == Py_True);
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      if (__pyx_t_6) {
/* … */
      }
/* … */
  __pyx_tuple__14 = PyTuple_Pack(2, __pyx_n_u_primary, Py_False); if (unlikely(!__pyx_tuple__14)) __PYX_ERR(0, 1574, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__14);
  __Pyx_GIVEREF(__pyx_tuple__14);
+1575:             if 'db_default' in metadata:
        __pyx_t_6 = (__Pyx_PySequence_ContainsTF(__pyx_n_u_db_default, __pyx_v_metadata, Py_EQ)); if (unlikely((__pyx_t_6 < 0))) __PYX_ERR(0, 1575, __pyx_L3_error)
        if (likely(__pyx_t_6)) {
          goto __pyx_L10;
        }
 1576:                 pass
 1577:             else:
+1578:                 raise ValueError(
        /*else*/ {
/* … */
          __pyx_t_5 = __Pyx_PyObject_CallOneArg(__pyx_builtin_ValueError, __pyx_t_1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1578, __pyx_L3_error)
          __Pyx_GOTREF(__pyx_t_5);
          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
          __Pyx_Raise(__pyx_t_5, 0, 0, 0);
          __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
          __PYX_ERR(0, 1578, __pyx_L3_error)
        }
        __pyx_L10:;
+1579:                     f":: Missing Primary Key *{name}*"
          __pyx_t_5 = PyTuple_New(3); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1579, __pyx_L3_error)
          __Pyx_GOTREF(__pyx_t_5);
          __pyx_t_7 = 0;
          __pyx_t_8 = 127;
          __Pyx_INCREF(__pyx_kp_u_Missing_Primary_Key);
          __pyx_t_7 += 24;
          __Pyx_GIVEREF(__pyx_kp_u_Missing_Primary_Key);
          PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_kp_u_Missing_Primary_Key);
          __pyx_t_1 = __Pyx_PyUnicode_Unicode(__pyx_v_name); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1579, __pyx_L3_error)
          __Pyx_GOTREF(__pyx_t_1);
          __pyx_t_8 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_1) > __pyx_t_8) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_1) : __pyx_t_8;
          __pyx_t_7 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_1);
          __Pyx_GIVEREF(__pyx_t_1);
          PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_1);
          __pyx_t_1 = 0;
          __Pyx_INCREF(__pyx_kp_u__13);
          __pyx_t_7 += 1;
          __Pyx_GIVEREF(__pyx_kp_u__13);
          PyTuple_SET_ITEM(__pyx_t_5, 2, __pyx_kp_u__13);
          __pyx_t_1 = __Pyx_PyUnicode_Join(__pyx_t_5, 3, __pyx_t_7, __pyx_t_8); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1579, __pyx_L3_error)
          __Pyx_GOTREF(__pyx_t_1);
          __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 1580:                 )
+1581:     except KeyError:
    __pyx_t_9 = __Pyx_PyErr_ExceptionMatches(__pyx_builtin_KeyError);
    if (__pyx_t_9) {
      __Pyx_ErrRestore(0,0,0);
      goto __pyx_L4_exception_handled;
    }
    goto __pyx_L5_except_error;
 1582:         pass
 1583:     # Validate Required
+1584:     try:
  {
    /*try:*/ {
/* … */
    }
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    goto __pyx_L16_try_end;
    __pyx_L11_error:;
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
/* … */
    __pyx_L13_except_error:;
    __Pyx_XGIVEREF(__pyx_t_4);
    __Pyx_XGIVEREF(__pyx_t_3);
    __Pyx_XGIVEREF(__pyx_t_2);
    __Pyx_ExceptionReset(__pyx_t_4, __pyx_t_3, __pyx_t_2);
    goto __pyx_L1_error;
    __pyx_L15_try_return:;
    __Pyx_XGIVEREF(__pyx_t_4);
    __Pyx_XGIVEREF(__pyx_t_3);
    __Pyx_XGIVEREF(__pyx_t_2);
    __Pyx_ExceptionReset(__pyx_t_4, __pyx_t_3, __pyx_t_2);
    goto __pyx_L0;
    __pyx_L14_except_return:;
    __Pyx_XGIVEREF(__pyx_t_4);
    __Pyx_XGIVEREF(__pyx_t_3);
    __Pyx_XGIVEREF(__pyx_t_2);
    __Pyx_ExceptionReset(__pyx_t_4, __pyx_t_3, __pyx_t_2);
    goto __pyx_L0;
    __pyx_L16_try_end:;
  }
+1585:         if metadata.get('required', False) is True and meta.strict is True:
      __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_metadata, __pyx_n_s_get); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1585, __pyx_L11_error)
      __Pyx_GOTREF(__pyx_t_5);
      __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_tuple__15, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1585, __pyx_L11_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __pyx_t_10 = (__pyx_t_1 == Py_True);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      if (__pyx_t_10) {
      } else {
        __pyx_t_6 = __pyx_t_10;
        goto __pyx_L18_bool_binop_done;
      }
      __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_meta, __pyx_n_s_strict); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1585, __pyx_L11_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_10 = (__pyx_t_1 == Py_True);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_t_6 = __pyx_t_10;
      __pyx_L18_bool_binop_done:;
      if (__pyx_t_6) {
/* … */
      }
/* … */
  __pyx_tuple__15 = PyTuple_Pack(2, __pyx_n_u_required, Py_False); if (unlikely(!__pyx_tuple__15)) __PYX_ERR(0, 1585, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__15);
  __Pyx_GIVEREF(__pyx_tuple__15);
+1586:             if 'db_default' in metadata:
        __pyx_t_6 = (__Pyx_PySequence_ContainsTF(__pyx_n_u_db_default, __pyx_v_metadata, Py_EQ)); if (unlikely((__pyx_t_6 < 0))) __PYX_ERR(0, 1586, __pyx_L11_error)
        if (__pyx_t_6) {
/* … */
        }
+1587:                 return
          __Pyx_XDECREF(__pyx_r);
          __pyx_r = Py_None; __Pyx_INCREF(Py_None);
          goto __pyx_L15_try_return;
+1588:             if value is not None:
        __pyx_t_6 = (__pyx_v_value != Py_None);
        if (__pyx_t_6) {
/* … */
        }
+1589:                 return  # If default value is set, no need to raise an error
          __Pyx_XDECREF(__pyx_r);
          __pyx_r = Py_None; __Pyx_INCREF(Py_None);
          goto __pyx_L15_try_return;
+1590:             raise ValueError(
        __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_builtin_ValueError, __pyx_t_5); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1590, __pyx_L11_error)
        __Pyx_GOTREF(__pyx_t_1);
        __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
        __Pyx_Raise(__pyx_t_1, 0, 0, 0);
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        __PYX_ERR(0, 1590, __pyx_L11_error)
+1591:                 f":: Missing Required Field *{name}*"
        __pyx_t_1 = PyTuple_New(3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1591, __pyx_L11_error)
        __Pyx_GOTREF(__pyx_t_1);
        __pyx_t_7 = 0;
        __pyx_t_8 = 127;
        __Pyx_INCREF(__pyx_kp_u_Missing_Required_Field);
        __pyx_t_7 += 27;
        __Pyx_GIVEREF(__pyx_kp_u_Missing_Required_Field);
        PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_kp_u_Missing_Required_Field);
        __pyx_t_5 = __Pyx_PyUnicode_Unicode(__pyx_v_name); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1591, __pyx_L11_error)
        __Pyx_GOTREF(__pyx_t_5);
        __pyx_t_8 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_5) > __pyx_t_8) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_5) : __pyx_t_8;
        __pyx_t_7 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_5);
        __Pyx_GIVEREF(__pyx_t_5);
        PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_t_5);
        __pyx_t_5 = 0;
        __Pyx_INCREF(__pyx_kp_u__13);
        __pyx_t_7 += 1;
        __Pyx_GIVEREF(__pyx_kp_u__13);
        PyTuple_SET_ITEM(__pyx_t_1, 2, __pyx_kp_u__13);
        __pyx_t_5 = __Pyx_PyUnicode_Join(__pyx_t_1, 3, __pyx_t_7, __pyx_t_8); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1591, __pyx_L11_error)
        __Pyx_GOTREF(__pyx_t_5);
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 1592:             )
+1593:     except ValueError:
    __pyx_t_9 = __Pyx_PyErr_ExceptionMatches(__pyx_builtin_ValueError);
    if (__pyx_t_9) {
      __Pyx_AddTraceback("datamodel.converters._field_checks_", __pyx_clineno, __pyx_lineno, __pyx_filename);
      if (__Pyx_GetException(&__pyx_t_1, &__pyx_t_5, &__pyx_t_11) < 0) __PYX_ERR(0, 1593, __pyx_L13_except_error)
      __Pyx_XGOTREF(__pyx_t_1);
      __Pyx_XGOTREF(__pyx_t_5);
      __Pyx_XGOTREF(__pyx_t_11);
+1594:         raise
      __Pyx_GIVEREF(__pyx_t_1);
      __Pyx_GIVEREF(__pyx_t_5);
      __Pyx_XGIVEREF(__pyx_t_11);
      __Pyx_ErrRestoreWithState(__pyx_t_1, __pyx_t_5, __pyx_t_11);
      __pyx_t_1 = 0; __pyx_t_5 = 0; __pyx_t_11 = 0; 
      __PYX_ERR(0, 1594, __pyx_L13_except_error)
    }
+1595:     except KeyError:
    __pyx_t_9 = __Pyx_PyErr_ExceptionMatches(__pyx_builtin_KeyError);
    if (__pyx_t_9) {
      __Pyx_AddTraceback("datamodel.converters._field_checks_", __pyx_clineno, __pyx_lineno, __pyx_filename);
      if (__Pyx_GetException(&__pyx_t_11, &__pyx_t_5, &__pyx_t_1) < 0) __PYX_ERR(0, 1595, __pyx_L13_except_error)
      __Pyx_XGOTREF(__pyx_t_11);
      __Pyx_XGOTREF(__pyx_t_5);
      __Pyx_XGOTREF(__pyx_t_1);
+1596:         return
      __Pyx_XDECREF(__pyx_r);
      __pyx_r = Py_None; __Pyx_INCREF(Py_None);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
      goto __pyx_L14_except_return;
    }
    goto __pyx_L13_except_error;
 1597:     # Nullable:
+1598:     try:
  {
    /*try:*/ {
/* … */
    }
    __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;
    goto __pyx_L31_try_end;
    __pyx_L26_error:;
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
/* … */
    __pyx_L28_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_L29_except_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;
    __pyx_L31_try_end:;
  }
+1599:         if metadata.get('nullable', True) is False and meta.strict is True:
      __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_metadata, __pyx_n_s_get); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1599, __pyx_L26_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_tuple__16, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1599, __pyx_L26_error)
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_t_10 = (__pyx_t_5 == Py_False);
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      if (__pyx_t_10) {
      } else {
        __pyx_t_6 = __pyx_t_10;
        goto __pyx_L33_bool_binop_done;
      }
      __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_meta, __pyx_n_s_strict); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1599, __pyx_L26_error)
      __Pyx_GOTREF(__pyx_t_5);
      __pyx_t_10 = (__pyx_t_5 == Py_True);
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __pyx_t_6 = __pyx_t_10;
      __pyx_L33_bool_binop_done:;
      if (unlikely(__pyx_t_6)) {
/* … */
      }
/* … */
  __pyx_tuple__16 = PyTuple_Pack(2, __pyx_n_u_nullable, Py_True); if (unlikely(!__pyx_tuple__16)) __PYX_ERR(0, 1599, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__16);
  __Pyx_GIVEREF(__pyx_tuple__16);
+1600:             raise ValueError(
        __pyx_t_5 = __Pyx_PyObject_CallOneArg(__pyx_builtin_ValueError, __pyx_t_1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1600, __pyx_L26_error)
        __Pyx_GOTREF(__pyx_t_5);
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        __Pyx_Raise(__pyx_t_5, 0, 0, 0);
        __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
        __PYX_ERR(0, 1600, __pyx_L26_error)
+1601:                 f":: *{name}* Cannot be null."
        __pyx_t_5 = PyTuple_New(3); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1601, __pyx_L26_error)
        __Pyx_GOTREF(__pyx_t_5);
        __pyx_t_7 = 0;
        __pyx_t_8 = 127;
        __Pyx_INCREF(__pyx_kp_u__17);
        __pyx_t_7 += 4;
        __Pyx_GIVEREF(__pyx_kp_u__17);
        PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_kp_u__17);
        __pyx_t_1 = __Pyx_PyUnicode_Unicode(__pyx_v_name); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1601, __pyx_L26_error)
        __Pyx_GOTREF(__pyx_t_1);
        __pyx_t_8 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_1) > __pyx_t_8) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_1) : __pyx_t_8;
        __pyx_t_7 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_1);
        __Pyx_GIVEREF(__pyx_t_1);
        PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_1);
        __pyx_t_1 = 0;
        __Pyx_INCREF(__pyx_kp_u_Cannot_be_null);
        __pyx_t_7 += 17;
        __Pyx_GIVEREF(__pyx_kp_u_Cannot_be_null);
        PyTuple_SET_ITEM(__pyx_t_5, 2, __pyx_kp_u_Cannot_be_null);
        __pyx_t_1 = __Pyx_PyUnicode_Join(__pyx_t_5, 3, __pyx_t_7, __pyx_t_8); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1601, __pyx_L26_error)
        __Pyx_GOTREF(__pyx_t_1);
        __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 1602:             )
+1603:     except ValueError:
    __pyx_t_9 = __Pyx_PyErr_ExceptionMatches(__pyx_builtin_ValueError);
    if (__pyx_t_9) {
      __Pyx_AddTraceback("datamodel.converters._field_checks_", __pyx_clineno, __pyx_lineno, __pyx_filename);
      if (__Pyx_GetException(&__pyx_t_5, &__pyx_t_1, &__pyx_t_11) < 0) __PYX_ERR(0, 1603, __pyx_L28_except_error)
      __Pyx_XGOTREF(__pyx_t_5);
      __Pyx_XGOTREF(__pyx_t_1);
      __Pyx_XGOTREF(__pyx_t_11);
+1604:         raise
      __Pyx_GIVEREF(__pyx_t_5);
      __Pyx_GIVEREF(__pyx_t_1);
      __Pyx_XGIVEREF(__pyx_t_11);
      __Pyx_ErrRestoreWithState(__pyx_t_5, __pyx_t_1, __pyx_t_11);
      __pyx_t_5 = 0; __pyx_t_1 = 0; __pyx_t_11 = 0; 
      __PYX_ERR(0, 1604, __pyx_L28_except_error)
    }
+1605:     except KeyError:
    __pyx_t_9 = __Pyx_PyErr_ExceptionMatches(__pyx_builtin_KeyError);
    if (__pyx_t_9) {
      __Pyx_AddTraceback("datamodel.converters._field_checks_", __pyx_clineno, __pyx_lineno, __pyx_filename);
      if (__Pyx_GetException(&__pyx_t_11, &__pyx_t_1, &__pyx_t_5) < 0) __PYX_ERR(0, 1605, __pyx_L28_except_error)
      __Pyx_XGOTREF(__pyx_t_11);
      __Pyx_XGOTREF(__pyx_t_1);
      __Pyx_XGOTREF(__pyx_t_5);
+1606:         return
      __Pyx_XDECREF(__pyx_r);
      __pyx_r = Py_None; __Pyx_INCREF(Py_None);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
      goto __pyx_L29_except_return;
    }
    goto __pyx_L28_except_error;
+1607:     return
  __Pyx_XDECREF(__pyx_r);
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
 1608: 
 1609: 
+1610: cpdef parse_type(object field, object T, object data, object encoder = None):
static PyObject *__pyx_pw_9datamodel_10converters_37parse_type(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_9datamodel_10converters_parse_type(PyObject *__pyx_v_field, PyObject *__pyx_v_T, PyObject *__pyx_v_data, CYTHON_UNUSED int __pyx_skip_dispatch, struct __pyx_opt_args_9datamodel_10converters_parse_type *__pyx_optional_args) {
  PyObject *__pyx_v_encoder = ((PyObject *)Py_None);
  PyObject *__pyx_v_origin = 0;
  PyObject *__pyx_v_args = 0;
  PyObject *__pyx_v_type_name = 0;
  PyObject *__pyx_v_type_args = 0;
  CYTHON_UNUSED PyObject *__pyx_v_typeinfo = 0;
  PyObject *__pyx_v_arg_type = NULL;
  PyObject *__pyx_v_t = NULL;
  PyObject *__pyx_v_result = NULL;
  PyObject *__pyx_v_x = NULL;
  PyObject *__pyx_v_d = NULL;
  PyObject *__pyx_v_item = NULL;
  PyObject *__pyx_v_converted_item = NULL;
  PyObject *__pyx_v_non_none_arg = NULL;
  PyObject *__pyx_v_arg = NULL;
  PyObject *__pyx_v_fn = NULL;
  CYTHON_UNUSED PyObject *__pyx_v_ex = NULL;
  PyObject *__pyx_v_exc = NULL;
  PyObject *__pyx_8genexpr6__pyx_v_k = NULL;
  PyObject *__pyx_8genexpr6__pyx_v_v = NULL;
  PyObject *__pyx_r = NULL;
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_encoder = __pyx_optional_args->encoder;
    }
  }
  __Pyx_INCREF(__pyx_v_T);
  __Pyx_INCREF(__pyx_v_data);
/* … */
  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_10);
  __Pyx_XDECREF(__pyx_t_18);
  __Pyx_XDECREF(__pyx_t_27);
  __Pyx_AddTraceback("datamodel.converters.parse_type", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_origin);
  __Pyx_XDECREF(__pyx_v_args);
  __Pyx_XDECREF(__pyx_v_type_name);
  __Pyx_XDECREF(__pyx_v_type_args);
  __Pyx_XDECREF(__pyx_v_typeinfo);
  __Pyx_XDECREF(__pyx_v_arg_type);
  __Pyx_XDECREF(__pyx_v_t);
  __Pyx_XDECREF(__pyx_v_result);
  __Pyx_XDECREF(__pyx_v_x);
  __Pyx_XDECREF(__pyx_v_d);
  __Pyx_XDECREF(__pyx_v_item);
  __Pyx_XDECREF(__pyx_v_converted_item);
  __Pyx_XDECREF(__pyx_v_non_none_arg);
  __Pyx_XDECREF(__pyx_v_arg);
  __Pyx_XDECREF(__pyx_v_fn);
  __Pyx_XDECREF(__pyx_v_ex);
  __Pyx_XDECREF(__pyx_v_exc);
  __Pyx_XDECREF(__pyx_8genexpr6__pyx_v_k);
  __Pyx_XDECREF(__pyx_8genexpr6__pyx_v_v);
  __Pyx_XDECREF(__pyx_v_T);
  __Pyx_XDECREF(__pyx_v_data);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_9datamodel_10converters_37parse_type(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_9datamodel_10converters_36parse_type, "parse_type(field, T, data, encoder=None)");
static PyMethodDef __pyx_mdef_9datamodel_10converters_37parse_type = {"parse_type", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9datamodel_10converters_37parse_type, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_9datamodel_10converters_36parse_type};
static PyObject *__pyx_pw_9datamodel_10converters_37parse_type(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_field = 0;
  PyObject *__pyx_v_T = 0;
  PyObject *__pyx_v_data = 0;
  PyObject *__pyx_v_encoder = 0;
  #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("parse_type (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_MACROS
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __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 **__pyx_pyargnames[] = {&__pyx_n_s_field,&__pyx_n_s_T,&__pyx_n_s_data,&__pyx_n_s_encoder,0};
  PyObject* values[4] = {0,0,0,0};
    values[3] = __Pyx_Arg_NewRef_FASTCALL(((PyObject *)Py_None));
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  4: values[3] = __Pyx_Arg_FASTCALL(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_field)) != 0)) {
          (void)__Pyx_Arg_NewRef_FASTCALL(values[0]);
          kw_args--;
        }
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1610, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_T)) != 0)) {
          (void)__Pyx_Arg_NewRef_FASTCALL(values[1]);
          kw_args--;
        }
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1610, __pyx_L3_error)
        else {
          __Pyx_RaiseArgtupleInvalid("parse_type", 0, 3, 4, 1); __PYX_ERR(0, 1610, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_data)) != 0)) {
          (void)__Pyx_Arg_NewRef_FASTCALL(values[2]);
          kw_args--;
        }
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1610, __pyx_L3_error)
        else {
          __Pyx_RaiseArgtupleInvalid("parse_type", 0, 3, 4, 2); __PYX_ERR(0, 1610, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_encoder);
          if (value) { values[3] = __Pyx_Arg_NewRef_FASTCALL(value); kw_args--; }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1610, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "parse_type") < 0)) __PYX_ERR(0, 1610, __pyx_L3_error)
      }
    } else {
      switch (__pyx_nargs) {
        case  4: values[3] = __Pyx_Arg_FASTCALL(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2);
        values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_field = values[0];
    __pyx_v_T = values[1];
    __pyx_v_data = values[2];
    __pyx_v_encoder = values[3];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("parse_type", 0, 3, 4, __pyx_nargs); __PYX_ERR(0, 1610, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  {
    Py_ssize_t __pyx_temp;
    for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
      __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]);
    }
  }
  __Pyx_AddTraceback("datamodel.converters.parse_type", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_9datamodel_10converters_36parse_type(__pyx_self, __pyx_v_field, __pyx_v_T, __pyx_v_data, __pyx_v_encoder);

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

static PyObject *__pyx_pf_9datamodel_10converters_36parse_type(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_field, PyObject *__pyx_v_T, PyObject *__pyx_v_data, PyObject *__pyx_v_encoder) {
  PyObject *__pyx_r = NULL;
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2.__pyx_n = 1;
  __pyx_t_2.encoder = __pyx_v_encoder;
  __pyx_t_1 = __pyx_f_9datamodel_10converters_parse_type(__pyx_v_field, __pyx_v_T, __pyx_v_data, 0, &__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1610, __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("datamodel.converters.parse_type", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__48 = PyTuple_Pack(4, __pyx_n_s_field, __pyx_n_s_T, __pyx_n_s_data, __pyx_n_s_encoder); if (unlikely(!__pyx_tuple__48)) __PYX_ERR(0, 1610, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__48);
  __Pyx_GIVEREF(__pyx_tuple__48);
/* … */
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_9datamodel_10converters_37parse_type, 0, __pyx_n_s_parse_type, NULL, __pyx_n_s_datamodel_converters, __pyx_d, ((PyObject *)__pyx_codeobj__49)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1610, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_2, __pyx_tuple__45);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_parse_type, __pyx_t_2) < 0) __PYX_ERR(0, 1610, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
/* … */
struct __pyx_opt_args_9datamodel_10converters_parse_type {
  int __pyx_n;
  PyObject *encoder;
};
+1611:     cdef object origin = get_origin(T)
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_get_origin); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1611, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = NULL;
  __pyx_t_4 = 0;
  #if CYTHON_UNPACK_METHODS
  if (unlikely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
      __pyx_t_4 = 1;
    }
  }
  #endif
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_v_T};
    __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4);
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1611, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  }
  __pyx_v_origin = __pyx_t_1;
  __pyx_t_1 = 0;
+1612:     cdef tuple args = None
  __Pyx_INCREF(Py_None);
  __pyx_v_args = ((PyObject*)Py_None);
+1613:     cdef str type_name = getattr(T, '_name', None)
  __pyx_t_1 = __Pyx_GetAttr3(__pyx_v_T, __pyx_n_u_name_3, Py_None); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1613, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (!(likely(PyUnicode_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None) || __Pyx_RaiseUnexpectedTypeError("unicode", __pyx_t_1))) __PYX_ERR(0, 1613, __pyx_L1_error)
  __pyx_v_type_name = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
+1614:     cdef object type_args = getattr(T, '__args__', None)
  __pyx_t_1 = __Pyx_GetAttr3(__pyx_v_T, __pyx_n_u_args, Py_None); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1614, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_type_args = __pyx_t_1;
  __pyx_t_1 = 0;
+1615:     cdef dict typeinfo = getattr(T, '_typeinfo_', None)
  __pyx_t_1 = __Pyx_GetAttr3(__pyx_v_T, __pyx_n_u_typeinfo_2, Py_None); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1615, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (!(likely(PyDict_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None) || __Pyx_RaiseUnexpectedTypeError("dict", __pyx_t_1))) __PYX_ERR(0, 1615, __pyx_L1_error)
  __pyx_v_typeinfo = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
 1616: 
+1617:     if isinstance(T, NewType):
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_NewType); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1617, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_5 = PyObject_IsInstance(__pyx_v_T, __pyx_t_1); if (unlikely(__pyx_t_5 == ((int)-1))) __PYX_ERR(0, 1617, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (__pyx_t_5) {
/* … */
  }
 1618:         # change type if is a NewType object.
+1619:         T = T.__supertype__
    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_T, __pyx_n_s_supertype); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1619, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF_SET(__pyx_v_T, __pyx_t_1);
    __pyx_t_1 = 0;
 1620: 
 1621:     # Check if the data is already of the correct type
+1622:     if isinstance(data, T):
  __pyx_t_5 = PyObject_IsInstance(__pyx_v_data, __pyx_v_T); if (unlikely(__pyx_t_5 == ((int)-1))) __PYX_ERR(0, 1622, __pyx_L1_error)
  if (__pyx_t_5) {
/* … */
  }
+1623:         return data
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(__pyx_v_data);
    __pyx_r = __pyx_v_data;
    goto __pyx_L0;
 1624: 
+1625:     if field._type_category == 'typing':
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_field, __pyx_n_s_type_category); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1625, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_5 = (__Pyx_PyUnicode_Equals(__pyx_t_1, __pyx_n_u_typing, Py_EQ)); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 1625, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (__pyx_t_5) {
/* … */
    goto __pyx_L5;
  }
+1626:         args = type_args or ()
    __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_v_type_args); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 1626, __pyx_L1_error)
    if (!__pyx_t_5) {
    } else {
      if (!(likely(PyTuple_CheckExact(__pyx_v_type_args))||((__pyx_v_type_args) == Py_None) || __Pyx_RaiseUnexpectedTypeError("tuple", __pyx_v_type_args))) __PYX_ERR(0, 1626, __pyx_L1_error)
      __Pyx_INCREF(__pyx_v_type_args);
      __pyx_t_1 = __pyx_v_type_args;
      goto __pyx_L6_bool_binop_done;
    }
    __Pyx_INCREF(__pyx_empty_tuple);
    __pyx_t_1 = __pyx_empty_tuple;
    __pyx_L6_bool_binop_done:;
    __Pyx_DECREF_SET(__pyx_v_args, ((PyObject*)__pyx_t_1));
    __pyx_t_1 = 0;
+1627:         if type_name == 'Dict' and isinstance(data, dict):
    __pyx_t_6 = (__Pyx_PyUnicode_Equals(__pyx_v_type_name, __pyx_n_u_Dict, Py_EQ)); if (unlikely((__pyx_t_6 < 0))) __PYX_ERR(0, 1627, __pyx_L1_error)
    if (__pyx_t_6) {
    } else {
      __pyx_t_5 = __pyx_t_6;
      goto __pyx_L9_bool_binop_done;
    }
    __pyx_t_6 = PyDict_Check(__pyx_v_data); 
    __pyx_t_5 = __pyx_t_6;
    __pyx_L9_bool_binop_done:;
    if (__pyx_t_5) {
/* … */
      goto __pyx_L8;
    }
+1628:             if args:
      __pyx_t_5 = (__pyx_v_args != Py_None)&&(PyTuple_GET_SIZE(__pyx_v_args) != 0);
      if (__pyx_t_5) {
/* … */
      }
+1629:                 return {k: parse_type(field, type_args[1], v) for k, v in data.items()}
        __Pyx_XDECREF(__pyx_r);
        { /* enter inner scope */
          __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1629, __pyx_L14_error)
          __Pyx_GOTREF(__pyx_t_1);
          __pyx_t_7 = 0;
          if (unlikely(__pyx_v_data == Py_None)) {
            PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "items");
            __PYX_ERR(0, 1629, __pyx_L14_error)
          }
          __pyx_t_3 = __Pyx_dict_iterator(__pyx_v_data, 0, __pyx_n_s_items, (&__pyx_t_8), (&__pyx_t_9)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1629, __pyx_L14_error)
          __Pyx_GOTREF(__pyx_t_3);
          __Pyx_XDECREF(__pyx_t_2);
          __pyx_t_2 = __pyx_t_3;
          __pyx_t_3 = 0;
          while (1) {
            __pyx_t_11 = __Pyx_dict_iter_next(__pyx_t_2, __pyx_t_8, &__pyx_t_7, &__pyx_t_3, &__pyx_t_10, NULL, __pyx_t_9);
            if (unlikely(__pyx_t_11 == 0)) break;
            if (unlikely(__pyx_t_11 == -1)) __PYX_ERR(0, 1629, __pyx_L14_error)
            __Pyx_GOTREF(__pyx_t_3);
            __Pyx_GOTREF(__pyx_t_10);
            __Pyx_XDECREF_SET(__pyx_8genexpr6__pyx_v_k, __pyx_t_3);
            __pyx_t_3 = 0;
            __Pyx_XDECREF_SET(__pyx_8genexpr6__pyx_v_v, __pyx_t_10);
            __pyx_t_10 = 0;
            __pyx_t_10 = __Pyx_GetItemInt(__pyx_v_type_args, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1629, __pyx_L14_error)
            __Pyx_GOTREF(__pyx_t_10);
            __pyx_t_3 = __pyx_f_9datamodel_10converters_parse_type(__pyx_v_field, __pyx_t_10, __pyx_8genexpr6__pyx_v_v, 0, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1629, __pyx_L14_error)
            __Pyx_GOTREF(__pyx_t_3);
            __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
            if (unlikely(PyDict_SetItem(__pyx_t_1, (PyObject*)__pyx_8genexpr6__pyx_v_k, (PyObject*)__pyx_t_3))) __PYX_ERR(0, 1629, __pyx_L14_error)
            __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
          }
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
          __Pyx_XDECREF(__pyx_8genexpr6__pyx_v_k); __pyx_8genexpr6__pyx_v_k = 0;
          __Pyx_XDECREF(__pyx_8genexpr6__pyx_v_v); __pyx_8genexpr6__pyx_v_v = 0;
          goto __pyx_L17_exit_scope;
          __pyx_L14_error:;
          __Pyx_XDECREF(__pyx_8genexpr6__pyx_v_k); __pyx_8genexpr6__pyx_v_k = 0;
          __Pyx_XDECREF(__pyx_8genexpr6__pyx_v_v); __pyx_8genexpr6__pyx_v_v = 0;
          goto __pyx_L1_error;
          __pyx_L17_exit_scope:;
        } /* exit inner scope */
        __pyx_r = __pyx_t_1;
        __pyx_t_1 = 0;
        goto __pyx_L0;
 1630: 
+1631:         elif type_name == 'List':
    __pyx_t_5 = (__Pyx_PyUnicode_Equals(__pyx_v_type_name, __pyx_n_u_List, Py_EQ)); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 1631, __pyx_L1_error)
    if (__pyx_t_5) {
/* … */
    }
+1632:             if not isinstance(data, (list, tuple)):
      __pyx_t_6 = PyList_Check(__pyx_v_data); 
      if (!__pyx_t_6) {
      } else {
        __pyx_t_5 = __pyx_t_6;
        goto __pyx_L19_bool_binop_done;
      }
      __pyx_t_6 = PyTuple_Check(__pyx_v_data); 
      __pyx_t_5 = __pyx_t_6;
      __pyx_L19_bool_binop_done:;
      __pyx_t_6 = (!__pyx_t_5);
      if (__pyx_t_6) {
/* … */
      }
+1633:                 data = [data]
        __pyx_t_1 = PyList_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1633, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        __Pyx_INCREF(__pyx_v_data);
        __Pyx_GIVEREF(__pyx_v_data);
        if (__Pyx_PyList_SET_ITEM(__pyx_t_1, 0, __pyx_v_data)) __PYX_ERR(0, 1633, __pyx_L1_error);
        __Pyx_DECREF_SET(__pyx_v_data, __pyx_t_1);
        __pyx_t_1 = 0;
+1634:             arg_type = args[0]
      if (unlikely(__pyx_v_args == Py_None)) {
        PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
        __PYX_ERR(0, 1634, __pyx_L1_error)
      }
      __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v_args, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1634, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_v_arg_type = __pyx_t_1;
      __pyx_t_1 = 0;
+1635:             if arg_type.__module__ == 'typing': # nested typing
      __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_arg_type, __pyx_n_s_module); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1635, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_6 = (__Pyx_PyUnicode_Equals(__pyx_t_1, __pyx_n_u_typing, Py_EQ)); if (unlikely((__pyx_t_6 < 0))) __PYX_ERR(0, 1635, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      if (__pyx_t_6) {
/* … */
      }
+1636:                 try:
        {
          /*try:*/ {
/* … */
          }
          __pyx_L22_error:;
          __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
          __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
          __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
          __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
/* … */
          __pyx_L24_except_error:;
          __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);
          goto __pyx_L1_error;
          __pyx_L26_try_return:;
          __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);
          goto __pyx_L0;
          __pyx_L25_except_return:;
          __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);
          goto __pyx_L0;
        }
+1637:                     t = arg_type.__args__[0]
            __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_arg_type, __pyx_n_s_args); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1637, __pyx_L22_error)
            __Pyx_GOTREF(__pyx_t_1);
            __pyx_t_2 = __Pyx_GetItemInt(__pyx_t_1, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1637, __pyx_L22_error)
            __Pyx_GOTREF(__pyx_t_2);
            __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
            __pyx_v_t = __pyx_t_2;
            __pyx_t_2 = 0;
+1638:                     if is_dc(t):
            __pyx_t_6 = __pyx_f_9datamodel_10converters_is_dc(__pyx_v_t); if (unlikely(__pyx_t_6 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1638, __pyx_L22_error)
            if (__pyx_t_6) {
/* … */
            }
+1639:                         result = []
              __pyx_t_2 = PyList_New(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1639, __pyx_L22_error)
              __Pyx_GOTREF(__pyx_t_2);
              __pyx_v_result = ((PyObject*)__pyx_t_2);
              __pyx_t_2 = 0;
+1640:                         for x in data:
              if (likely(PyList_CheckExact(__pyx_v_data)) || PyTuple_CheckExact(__pyx_v_data)) {
                __pyx_t_2 = __pyx_v_data; __Pyx_INCREF(__pyx_t_2);
                __pyx_t_8 = 0;
                __pyx_t_15 = NULL;
              } else {
                __pyx_t_8 = -1; __pyx_t_2 = PyObject_GetIter(__pyx_v_data); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1640, __pyx_L22_error)
                __Pyx_GOTREF(__pyx_t_2);
                __pyx_t_15 = __Pyx_PyObject_GetIterNextFunc(__pyx_t_2); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 1640, __pyx_L22_error)
              }
              for (;;) {
                if (likely(!__pyx_t_15)) {
                  if (likely(PyList_CheckExact(__pyx_t_2))) {
                    {
                      Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_t_2);
                      #if !CYTHON_ASSUME_SAFE_MACROS
                      if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 1640, __pyx_L22_error)
                      #endif
                      if (__pyx_t_8 >= __pyx_temp) break;
                    }
                    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
                    __pyx_t_1 = PyList_GET_ITEM(__pyx_t_2, __pyx_t_8); __Pyx_INCREF(__pyx_t_1); __pyx_t_8++; if (unlikely((0 < 0))) __PYX_ERR(0, 1640, __pyx_L22_error)
                    #else
                    __pyx_t_1 = __Pyx_PySequence_ITEM(__pyx_t_2, __pyx_t_8); __pyx_t_8++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1640, __pyx_L22_error)
                    __Pyx_GOTREF(__pyx_t_1);
                    #endif
                  } else {
                    {
                      Py_ssize_t __pyx_temp = __Pyx_PyTuple_GET_SIZE(__pyx_t_2);
                      #if !CYTHON_ASSUME_SAFE_MACROS
                      if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 1640, __pyx_L22_error)
                      #endif
                      if (__pyx_t_8 >= __pyx_temp) break;
                    }
                    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
                    __pyx_t_1 = PyTuple_GET_ITEM(__pyx_t_2, __pyx_t_8); __Pyx_INCREF(__pyx_t_1); __pyx_t_8++; if (unlikely((0 < 0))) __PYX_ERR(0, 1640, __pyx_L22_error)
                    #else
                    __pyx_t_1 = __Pyx_PySequence_ITEM(__pyx_t_2, __pyx_t_8); __pyx_t_8++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1640, __pyx_L22_error)
                    __Pyx_GOTREF(__pyx_t_1);
                    #endif
                  }
                } else {
                  __pyx_t_1 = __pyx_t_15(__pyx_t_2);
                  if (unlikely(!__pyx_t_1)) {
                    PyObject* exc_type = PyErr_Occurred();
                    if (exc_type) {
                      if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
                      else __PYX_ERR(0, 1640, __pyx_L22_error)
                    }
                    break;
                  }
                  __Pyx_GOTREF(__pyx_t_1);
                }
                __Pyx_XDECREF_SET(__pyx_v_x, __pyx_t_1);
                __pyx_t_1 = 0;
/* … */
              }
              __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+1641:                             if isinstance(x, dict):
                __pyx_t_6 = PyDict_Check(__pyx_v_x); 
                if (__pyx_t_6) {
/* … */
                  goto __pyx_L31;
                }
+1642:                                 result.append(t(**x))
                  if (unlikely(__pyx_v_x == Py_None)) {
                    PyErr_SetString(PyExc_TypeError, "argument after ** must be a mapping, not NoneType");
                    __PYX_ERR(0, 1642, __pyx_L22_error)
                  }
                  if (likely(PyDict_CheckExact(__pyx_v_x))) {
                    __pyx_t_1 = PyDict_Copy(__pyx_v_x); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1642, __pyx_L22_error)
                    __Pyx_GOTREF(__pyx_t_1);
                  } else {
                    __pyx_t_1 = __Pyx_PyObject_CallOneArg((PyObject*)&PyDict_Type, __pyx_v_x); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1642, __pyx_L22_error)
                    __Pyx_GOTREF(__pyx_t_1);
                  }
                  __pyx_t_3 = __Pyx_PyObject_Call(__pyx_v_t, __pyx_empty_tuple, __pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1642, __pyx_L22_error)
                  __Pyx_GOTREF(__pyx_t_3);
                  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
                  __pyx_t_16 = __Pyx_PyList_Append(__pyx_v_result, __pyx_t_3); if (unlikely(__pyx_t_16 == ((int)-1))) __PYX_ERR(0, 1642, __pyx_L22_error)
                  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+1643:                             elif isinstance(x, (list, tuple)):
                __pyx_t_5 = PyList_Check(__pyx_v_x); 
                if (!__pyx_t_5) {
                } else {
                  __pyx_t_6 = __pyx_t_5;
                  goto __pyx_L32_bool_binop_done;
                }
                __pyx_t_5 = PyTuple_Check(__pyx_v_x); 
                __pyx_t_6 = __pyx_t_5;
                __pyx_L32_bool_binop_done:;
                if (__pyx_t_6) {
/* … */
                  goto __pyx_L31;
                }
+1644:                                 result.append(t(*x))
                  __pyx_t_3 = __Pyx_PySequence_Tuple(__pyx_v_x); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1644, __pyx_L22_error)
                  __Pyx_GOTREF(__pyx_t_3);
                  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_v_t, __pyx_t_3, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1644, __pyx_L22_error)
                  __Pyx_GOTREF(__pyx_t_1);
                  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
                  __pyx_t_16 = __Pyx_PyList_Append(__pyx_v_result, __pyx_t_1); if (unlikely(__pyx_t_16 == ((int)-1))) __PYX_ERR(0, 1644, __pyx_L22_error)
                  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 1645:                             else:
+1646:                                 result.append(t())
                /*else*/ {
                  __Pyx_INCREF(__pyx_v_t);
                  __pyx_t_3 = __pyx_v_t; __pyx_t_10 = NULL;
                  __pyx_t_4 = 0;
                  #if CYTHON_UNPACK_METHODS
                  if (unlikely(PyMethod_Check(__pyx_t_3))) {
                    __pyx_t_10 = PyMethod_GET_SELF(__pyx_t_3);
                    if (likely(__pyx_t_10)) {
                      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
                      __Pyx_INCREF(__pyx_t_10);
                      __Pyx_INCREF(function);
                      __Pyx_DECREF_SET(__pyx_t_3, function);
                      __pyx_t_4 = 1;
                    }
                  }
                  #endif
                  {
                    PyObject *__pyx_callargs[2] = {__pyx_t_10, NULL};
                    __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_4, 0+__pyx_t_4);
                    __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
                    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1646, __pyx_L22_error)
                    __Pyx_GOTREF(__pyx_t_1);
                    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
                  }
                  __pyx_t_16 = __Pyx_PyList_Append(__pyx_v_result, __pyx_t_1); if (unlikely(__pyx_t_16 == ((int)-1))) __PYX_ERR(0, 1646, __pyx_L22_error)
                  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
                }
                __pyx_L31:;
+1647:                         return result
              __Pyx_XDECREF(__pyx_r);
              __Pyx_INCREF(__pyx_v_result);
              __pyx_r = __pyx_v_result;
              goto __pyx_L26_try_return;
 1648:                     else:
+1649:                         return data
            /*else*/ {
              __Pyx_XDECREF(__pyx_r);
              __Pyx_INCREF(__pyx_v_data);
              __pyx_r = __pyx_v_data;
              goto __pyx_L26_try_return;
            }
+1650:                 except AttributeError:
          __pyx_t_9 = __Pyx_PyErr_ExceptionMatches(__pyx_builtin_AttributeError);
          if (__pyx_t_9) {
            __Pyx_AddTraceback("datamodel.converters.parse_type", __pyx_clineno, __pyx_lineno, __pyx_filename);
            if (__Pyx_GetException(&__pyx_t_2, &__pyx_t_1, &__pyx_t_3) < 0) __PYX_ERR(0, 1650, __pyx_L24_except_error)
            __Pyx_XGOTREF(__pyx_t_2);
            __Pyx_XGOTREF(__pyx_t_1);
            __Pyx_XGOTREF(__pyx_t_3);
+1651:                     return data # data -as is-
            __Pyx_XDECREF(__pyx_r);
            __Pyx_INCREF(__pyx_v_data);
            __pyx_r = __pyx_v_data;
            __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;
            goto __pyx_L25_except_return;
          }
          goto __pyx_L24_except_error;
+1652:             elif is_dc(arg_type):
      __pyx_t_6 = __pyx_f_9datamodel_10converters_is_dc(__pyx_v_arg_type); if (unlikely(__pyx_t_6 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1652, __pyx_L1_error)
      if (__pyx_t_6) {
/* … */
      }
+1653:                 if isinstance(data, list):
        __pyx_t_6 = PyList_Check(__pyx_v_data); 
        if (__pyx_t_6) {
/* … */
        }
+1654:                     result = []
          __pyx_t_3 = PyList_New(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1654, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_3);
          __pyx_v_result = ((PyObject*)__pyx_t_3);
          __pyx_t_3 = 0;
+1655:                     for d in data:
          if (likely(PyList_CheckExact(__pyx_v_data)) || PyTuple_CheckExact(__pyx_v_data)) {
            __pyx_t_3 = __pyx_v_data; __Pyx_INCREF(__pyx_t_3);
            __pyx_t_8 = 0;
            __pyx_t_15 = NULL;
          } else {
            __pyx_t_8 = -1; __pyx_t_3 = PyObject_GetIter(__pyx_v_data); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1655, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_3);
            __pyx_t_15 = __Pyx_PyObject_GetIterNextFunc(__pyx_t_3); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 1655, __pyx_L1_error)
          }
          for (;;) {
            if (likely(!__pyx_t_15)) {
              if (likely(PyList_CheckExact(__pyx_t_3))) {
                {
                  Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_t_3);
                  #if !CYTHON_ASSUME_SAFE_MACROS
                  if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 1655, __pyx_L1_error)
                  #endif
                  if (__pyx_t_8 >= __pyx_temp) break;
                }
                #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
                __pyx_t_1 = PyList_GET_ITEM(__pyx_t_3, __pyx_t_8); __Pyx_INCREF(__pyx_t_1); __pyx_t_8++; if (unlikely((0 < 0))) __PYX_ERR(0, 1655, __pyx_L1_error)
                #else
                __pyx_t_1 = __Pyx_PySequence_ITEM(__pyx_t_3, __pyx_t_8); __pyx_t_8++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1655, __pyx_L1_error)
                __Pyx_GOTREF(__pyx_t_1);
                #endif
              } else {
                {
                  Py_ssize_t __pyx_temp = __Pyx_PyTuple_GET_SIZE(__pyx_t_3);
                  #if !CYTHON_ASSUME_SAFE_MACROS
                  if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 1655, __pyx_L1_error)
                  #endif
                  if (__pyx_t_8 >= __pyx_temp) break;
                }
                #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
                __pyx_t_1 = PyTuple_GET_ITEM(__pyx_t_3, __pyx_t_8); __Pyx_INCREF(__pyx_t_1); __pyx_t_8++; if (unlikely((0 < 0))) __PYX_ERR(0, 1655, __pyx_L1_error)
                #else
                __pyx_t_1 = __Pyx_PySequence_ITEM(__pyx_t_3, __pyx_t_8); __pyx_t_8++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1655, __pyx_L1_error)
                __Pyx_GOTREF(__pyx_t_1);
                #endif
              }
            } else {
              __pyx_t_1 = __pyx_t_15(__pyx_t_3);
              if (unlikely(!__pyx_t_1)) {
                PyObject* exc_type = PyErr_Occurred();
                if (exc_type) {
                  if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
                  else __PYX_ERR(0, 1655, __pyx_L1_error)
                }
                break;
              }
              __Pyx_GOTREF(__pyx_t_1);
            }
            __Pyx_XDECREF_SET(__pyx_v_d, __pyx_t_1);
            __pyx_t_1 = 0;
/* … */
          }
          __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 1656:                         # is already a dataclass:
+1657:                         if is_dc(d):
            __pyx_t_6 = __pyx_f_9datamodel_10converters_is_dc(__pyx_v_d); if (unlikely(__pyx_t_6 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1657, __pyx_L1_error)
            if (__pyx_t_6) {
/* … */
              goto __pyx_L40;
            }
+1658:                             result.append(d)
              __pyx_t_16 = __Pyx_PyList_Append(__pyx_v_result, __pyx_v_d); if (unlikely(__pyx_t_16 == ((int)-1))) __PYX_ERR(0, 1658, __pyx_L1_error)
+1659:                         elif isinstance(d, list):
            __pyx_t_6 = PyList_Check(__pyx_v_d); 
            if (__pyx_t_6) {
/* … */
              goto __pyx_L40;
            }
+1660:                             result.append(arg_type(*d))
              __pyx_t_1 = __Pyx_PySequence_Tuple(__pyx_v_d); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1660, __pyx_L1_error)
              __Pyx_GOTREF(__pyx_t_1);
              __pyx_t_2 = __Pyx_PyObject_Call(__pyx_v_arg_type, __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1660, __pyx_L1_error)
              __Pyx_GOTREF(__pyx_t_2);
              __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
              __pyx_t_16 = __Pyx_PyList_Append(__pyx_v_result, __pyx_t_2); if (unlikely(__pyx_t_16 == ((int)-1))) __PYX_ERR(0, 1660, __pyx_L1_error)
              __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+1661:                         elif isinstance(d, dict):
            __pyx_t_6 = PyDict_Check(__pyx_v_d); 
            if (__pyx_t_6) {
/* … */
              goto __pyx_L40;
            }
+1662:                             result.append(arg_type(**d))
              if (unlikely(__pyx_v_d == Py_None)) {
                PyErr_SetString(PyExc_TypeError, "argument after ** must be a mapping, not NoneType");
                __PYX_ERR(0, 1662, __pyx_L1_error)
              }
              if (likely(PyDict_CheckExact(__pyx_v_d))) {
                __pyx_t_2 = PyDict_Copy(__pyx_v_d); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1662, __pyx_L1_error)
                __Pyx_GOTREF(__pyx_t_2);
              } else {
                __pyx_t_2 = __Pyx_PyObject_CallOneArg((PyObject*)&PyDict_Type, __pyx_v_d); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1662, __pyx_L1_error)
                __Pyx_GOTREF(__pyx_t_2);
              }
              __pyx_t_1 = __Pyx_PyObject_Call(__pyx_v_arg_type, __pyx_empty_tuple, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1662, __pyx_L1_error)
              __Pyx_GOTREF(__pyx_t_1);
              __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
              __pyx_t_16 = __Pyx_PyList_Append(__pyx_v_result, __pyx_t_1); if (unlikely(__pyx_t_16 == ((int)-1))) __PYX_ERR(0, 1662, __pyx_L1_error)
              __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 1663:                         else:
+1664:                             result.append(arg_type(d))
            /*else*/ {
              __Pyx_INCREF(__pyx_v_arg_type);
              __pyx_t_2 = __pyx_v_arg_type; __pyx_t_10 = NULL;
              __pyx_t_4 = 0;
              #if CYTHON_UNPACK_METHODS
              if (unlikely(PyMethod_Check(__pyx_t_2))) {
                __pyx_t_10 = PyMethod_GET_SELF(__pyx_t_2);
                if (likely(__pyx_t_10)) {
                  PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
                  __Pyx_INCREF(__pyx_t_10);
                  __Pyx_INCREF(function);
                  __Pyx_DECREF_SET(__pyx_t_2, function);
                  __pyx_t_4 = 1;
                }
              }
              #endif
              {
                PyObject *__pyx_callargs[2] = {__pyx_t_10, __pyx_v_d};
                __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4);
                __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
                if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1664, __pyx_L1_error)
                __Pyx_GOTREF(__pyx_t_1);
                __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
              }
              __pyx_t_16 = __Pyx_PyList_Append(__pyx_v_result, __pyx_t_1); if (unlikely(__pyx_t_16 == ((int)-1))) __PYX_ERR(0, 1664, __pyx_L1_error)
              __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
            }
            __pyx_L40:;
+1665:                 return result
        __Pyx_XDECREF(__pyx_r);
        if (unlikely(!__pyx_v_result)) { __Pyx_RaiseUnboundLocalError("result"); __PYX_ERR(0, 1665, __pyx_L1_error) }
        __Pyx_INCREF(__pyx_v_result);
        __pyx_r = __pyx_v_result;
        goto __pyx_L0;
 1666:             else:
+1667:                 result = []
      /*else*/ {
        __pyx_t_3 = PyList_New(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1667, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
        __pyx_v_result = ((PyObject*)__pyx_t_3);
        __pyx_t_3 = 0;
+1668:                 if is_iterable(data):
        __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_is_iterable); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1668, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        __pyx_t_2 = NULL;
        __pyx_t_4 = 0;
        #if CYTHON_UNPACK_METHODS
        if (unlikely(PyMethod_Check(__pyx_t_1))) {
          __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_1);
          if (likely(__pyx_t_2)) {
            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
            __Pyx_INCREF(__pyx_t_2);
            __Pyx_INCREF(function);
            __Pyx_DECREF_SET(__pyx_t_1, function);
            __pyx_t_4 = 1;
          }
        }
        #endif
        {
          PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_v_data};
          __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_1, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4);
          __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
          if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1668, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_3);
          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        }
        __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely((__pyx_t_6 < 0))) __PYX_ERR(0, 1668, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
        if (__pyx_t_6) {
/* … */
        }
+1669:                     for item in data:
          if (likely(PyList_CheckExact(__pyx_v_data)) || PyTuple_CheckExact(__pyx_v_data)) {
            __pyx_t_3 = __pyx_v_data; __Pyx_INCREF(__pyx_t_3);
            __pyx_t_8 = 0;
            __pyx_t_15 = NULL;
          } else {
            __pyx_t_8 = -1; __pyx_t_3 = PyObject_GetIter(__pyx_v_data); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1669, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_3);
            __pyx_t_15 = __Pyx_PyObject_GetIterNextFunc(__pyx_t_3); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 1669, __pyx_L1_error)
          }
          for (;;) {
            if (likely(!__pyx_t_15)) {
              if (likely(PyList_CheckExact(__pyx_t_3))) {
                {
                  Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_t_3);
                  #if !CYTHON_ASSUME_SAFE_MACROS
                  if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 1669, __pyx_L1_error)
                  #endif
                  if (__pyx_t_8 >= __pyx_temp) break;
                }
                #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
                __pyx_t_1 = PyList_GET_ITEM(__pyx_t_3, __pyx_t_8); __Pyx_INCREF(__pyx_t_1); __pyx_t_8++; if (unlikely((0 < 0))) __PYX_ERR(0, 1669, __pyx_L1_error)
                #else
                __pyx_t_1 = __Pyx_PySequence_ITEM(__pyx_t_3, __pyx_t_8); __pyx_t_8++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1669, __pyx_L1_error)
                __Pyx_GOTREF(__pyx_t_1);
                #endif
              } else {
                {
                  Py_ssize_t __pyx_temp = __Pyx_PyTuple_GET_SIZE(__pyx_t_3);
                  #if !CYTHON_ASSUME_SAFE_MACROS
                  if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 1669, __pyx_L1_error)
                  #endif
                  if (__pyx_t_8 >= __pyx_temp) break;
                }
                #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
                __pyx_t_1 = PyTuple_GET_ITEM(__pyx_t_3, __pyx_t_8); __Pyx_INCREF(__pyx_t_1); __pyx_t_8++; if (unlikely((0 < 0))) __PYX_ERR(0, 1669, __pyx_L1_error)
                #else
                __pyx_t_1 = __Pyx_PySequence_ITEM(__pyx_t_3, __pyx_t_8); __pyx_t_8++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1669, __pyx_L1_error)
                __Pyx_GOTREF(__pyx_t_1);
                #endif
              }
            } else {
              __pyx_t_1 = __pyx_t_15(__pyx_t_3);
              if (unlikely(!__pyx_t_1)) {
                PyObject* exc_type = PyErr_Occurred();
                if (exc_type) {
                  if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
                  else __PYX_ERR(0, 1669, __pyx_L1_error)
                }
                break;
              }
              __Pyx_GOTREF(__pyx_t_1);
            }
            __Pyx_XDECREF_SET(__pyx_v_item, __pyx_t_1);
            __pyx_t_1 = 0;
/* … */
          }
          __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 1670:                         # escalar value:
+1671:                         converted_item = parse_type(field, arg_type, item, encoder)
            __pyx_t_17.__pyx_n = 1;
            __pyx_t_17.encoder = __pyx_v_encoder;
            __pyx_t_1 = __pyx_f_9datamodel_10converters_parse_type(__pyx_v_field, __pyx_v_arg_type, __pyx_v_item, 0, &__pyx_t_17); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1671, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_1);
            __Pyx_XDECREF_SET(__pyx_v_converted_item, __pyx_t_1);
            __pyx_t_1 = 0;
+1672:                         result.append(converted_item)
            __pyx_t_16 = __Pyx_PyList_Append(__pyx_v_result, __pyx_v_converted_item); if (unlikely(__pyx_t_16 == ((int)-1))) __PYX_ERR(0, 1672, __pyx_L1_error)
+1673:                     return result
          __Pyx_XDECREF(__pyx_r);
          __Pyx_INCREF(__pyx_v_result);
          __pyx_r = __pyx_v_result;
          goto __pyx_L0;
+1674:                 return data
        __Pyx_XDECREF(__pyx_r);
        __Pyx_INCREF(__pyx_v_data);
        __pyx_r = __pyx_v_data;
        goto __pyx_L0;
      }
+1675:         elif type_name is None or type_name in ('Optional', 'Union'):
    __pyx_t_5 = (__pyx_v_type_name == ((PyObject*)Py_None));
    if (!__pyx_t_5) {
    } else {
      __pyx_t_6 = __pyx_t_5;
      goto __pyx_L46_bool_binop_done;
    }
    __Pyx_INCREF(__pyx_v_type_name);
    __pyx_t_18 = __pyx_v_type_name;
    __pyx_t_19 = (__Pyx_PyUnicode_Equals(__pyx_t_18, __pyx_n_u_Optional, Py_EQ)); if (unlikely((__pyx_t_19 < 0))) __PYX_ERR(0, 1675, __pyx_L1_error)
    if (!__pyx_t_19) {
    } else {
      __pyx_t_5 = __pyx_t_19;
      goto __pyx_L48_bool_binop_done;
    }
    __pyx_t_19 = (__Pyx_PyUnicode_Equals(__pyx_t_18, __pyx_n_u_Union, Py_EQ)); if (unlikely((__pyx_t_19 < 0))) __PYX_ERR(0, 1675, __pyx_L1_error)
    __pyx_t_5 = __pyx_t_19;
    __pyx_L48_bool_binop_done:;
    __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
    __pyx_t_19 = __pyx_t_5;
    __pyx_t_6 = __pyx_t_19;
    __pyx_L46_bool_binop_done:;
    if (__pyx_t_6) {
/* … */
    }
    __pyx_L8:;
+1676:             args = get_args(T)
      __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_get_args); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1676, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_2 = NULL;
      __pyx_t_4 = 0;
      #if CYTHON_UNPACK_METHODS
      if (unlikely(PyMethod_Check(__pyx_t_1))) {
        __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_1);
        if (likely(__pyx_t_2)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
          __Pyx_INCREF(__pyx_t_2);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_1, function);
          __pyx_t_4 = 1;
        }
      }
      #endif
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_v_T};
        __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_1, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4);
        __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
        if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1676, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      }
      if (!(likely(PyTuple_CheckExact(__pyx_t_3))||((__pyx_t_3) == Py_None) || __Pyx_RaiseUnexpectedTypeError("tuple", __pyx_t_3))) __PYX_ERR(0, 1676, __pyx_L1_error)
      __Pyx_DECREF_SET(__pyx_v_args, ((PyObject*)__pyx_t_3));
      __pyx_t_3 = 0;
 1677:             # Handling Optional types
+1678:             if origin == Union and type(None) in args:
      __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_Union); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1678, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_1 = PyObject_RichCompare(__pyx_v_origin, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1678, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __pyx_t_19 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_19 < 0))) __PYX_ERR(0, 1678, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      if (__pyx_t_19) {
      } else {
        __pyx_t_6 = __pyx_t_19;
        goto __pyx_L51_bool_binop_done;
      }
      __pyx_t_19 = (__Pyx_PySequence_ContainsTF(((PyObject *)Py_TYPE(Py_None)), __pyx_v_args, Py_EQ)); if (unlikely((__pyx_t_19 < 0))) __PYX_ERR(0, 1678, __pyx_L1_error)
      __pyx_t_6 = __pyx_t_19;
      __pyx_L51_bool_binop_done:;
      if (__pyx_t_6) {
/* … */
      }
+1679:                 if data is None:
        __pyx_t_6 = (__pyx_v_data == Py_None);
        if (__pyx_t_6) {
/* … */
        }
+1680:                     return None
          __Pyx_XDECREF(__pyx_r);
          __pyx_r = Py_None; __Pyx_INCREF(Py_None);
          goto __pyx_L0;
 1681:                 # Determine the non-None type.
+1682:                 non_none_arg = args[0] if args[1] is type(None) else args[1]
        if (unlikely(__pyx_v_args == Py_None)) {
          PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
          __PYX_ERR(0, 1682, __pyx_L1_error)
        }
        __pyx_t_3 = __Pyx_GetItemInt_Tuple(__pyx_v_args, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1682, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
        __pyx_t_6 = (__pyx_t_3 == ((PyObject *)Py_TYPE(Py_None)));
        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
        if (__pyx_t_6) {
          if (unlikely(__pyx_v_args == Py_None)) {
            PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
            __PYX_ERR(0, 1682, __pyx_L1_error)
          }
          __pyx_t_3 = __Pyx_GetItemInt_Tuple(__pyx_v_args, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1682, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_3);
          __pyx_t_1 = __pyx_t_3;
          __pyx_t_3 = 0;
        } else {
          if (unlikely(__pyx_v_args == Py_None)) {
            PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
            __PYX_ERR(0, 1682, __pyx_L1_error)
          }
          __pyx_t_3 = __Pyx_GetItemInt_Tuple(__pyx_v_args, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1682, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_3);
          __pyx_t_1 = __pyx_t_3;
          __pyx_t_3 = 0;
        }
        __pyx_v_non_none_arg = __pyx_t_1;
        __pyx_t_1 = 0;
+1683:                 if non_none_arg == list:
        __pyx_t_1 = PyObject_RichCompare(__pyx_v_non_none_arg, ((PyObject *)(&PyList_Type)), Py_EQ); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1683, __pyx_L1_error)
        __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_6 < 0))) __PYX_ERR(0, 1683, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        if (__pyx_t_6) {
/* … */
        }
+1684:                     field.args = args
          if (__Pyx_PyObject_SetAttrStr(__pyx_v_field, __pyx_n_s_args_2, __pyx_v_args) < 0) __PYX_ERR(0, 1684, __pyx_L1_error)
+1685:                     field.origin = get_origin(non_none_arg)
          __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_get_origin); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1685, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_3);
          __pyx_t_2 = NULL;
          __pyx_t_4 = 0;
          #if CYTHON_UNPACK_METHODS
          if (unlikely(PyMethod_Check(__pyx_t_3))) {
            __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3);
            if (likely(__pyx_t_2)) {
              PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
              __Pyx_INCREF(__pyx_t_2);
              __Pyx_INCREF(function);
              __Pyx_DECREF_SET(__pyx_t_3, function);
              __pyx_t_4 = 1;
            }
          }
          #endif
          {
            PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_v_non_none_arg};
            __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4);
            __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
            if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1685, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_1);
            __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
          }
          if (__Pyx_PyObject_SetAttrStr(__pyx_v_field, __pyx_n_s_origin, __pyx_t_1) < 0) __PYX_ERR(0, 1685, __pyx_L1_error)
          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+1686:                     if isinstance(data, (list, str, dict)):
          __pyx_t_19 = PyList_Check(__pyx_v_data); 
          if (!__pyx_t_19) {
          } else {
            __pyx_t_6 = __pyx_t_19;
            goto __pyx_L56_bool_binop_done;
          }
          __pyx_t_19 = PyUnicode_Check(__pyx_v_data); 
          if (!__pyx_t_19) {
          } else {
            __pyx_t_6 = __pyx_t_19;
            goto __pyx_L56_bool_binop_done;
          }
          __pyx_t_19 = PyDict_Check(__pyx_v_data); 
          __pyx_t_6 = __pyx_t_19;
          __pyx_L56_bool_binop_done:;
          if (likely(__pyx_t_6)) {
/* … */
          }
+1687:                         return _parse_builtin_type(field, non_none_arg, data, encoder)
            __Pyx_XDECREF(__pyx_r);
            __pyx_t_1 = __pyx_f_9datamodel_10converters__parse_builtin_type(__pyx_v_field, __pyx_v_non_none_arg, __pyx_v_data, __pyx_v_encoder); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1687, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_1);
            __pyx_r = __pyx_t_1;
            __pyx_t_1 = 0;
            goto __pyx_L0;
 1688:                     else:
+1689:                         raise ValueError(f"Unsupported type for List in Optional: {type(data)}")
          /*else*/ {
            __pyx_t_1 = __Pyx_PyObject_FormatSimple(((PyObject *)Py_TYPE(__pyx_v_data)), __pyx_empty_unicode); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1689, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_1);
            __pyx_t_3 = __Pyx_PyUnicode_Concat(__pyx_kp_u_Unsupported_type_for_List_in_Opt, __pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1689, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_3);
            __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
            __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_builtin_ValueError, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1689, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_1);
            __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
            __Pyx_Raise(__pyx_t_1, 0, 0, 0);
            __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
            __PYX_ERR(0, 1689, __pyx_L1_error)
          }
 1690:                 # If the non-None type is exactly dict, return the dict as is.
+1691:                 if non_none_arg is dict:
        __pyx_t_6 = (__pyx_v_non_none_arg == ((PyObject *)(&PyDict_Type)));
        if (__pyx_t_6) {
/* … */
        }
+1692:                     return data
          __Pyx_XDECREF(__pyx_r);
          __Pyx_INCREF(__pyx_v_data);
          __pyx_r = __pyx_v_data;
          goto __pyx_L0;
 1693:                 # Otherwise, recursively parse using the non-None type.
+1694:                 field.args = args
        if (__Pyx_PyObject_SetAttrStr(__pyx_v_field, __pyx_n_s_args_2, __pyx_v_args) < 0) __PYX_ERR(0, 1694, __pyx_L1_error)
+1695:                 field.origin = get_origin(non_none_arg)
        __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_get_origin); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1695, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
        __pyx_t_2 = NULL;
        __pyx_t_4 = 0;
        #if CYTHON_UNPACK_METHODS
        if (unlikely(PyMethod_Check(__pyx_t_3))) {
          __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3);
          if (likely(__pyx_t_2)) {
            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
            __Pyx_INCREF(__pyx_t_2);
            __Pyx_INCREF(function);
            __Pyx_DECREF_SET(__pyx_t_3, function);
            __pyx_t_4 = 1;
          }
        }
        #endif
        {
          PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_v_non_none_arg};
          __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4);
          __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
          if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1695, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_1);
          __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
        }
        if (__Pyx_PyObject_SetAttrStr(__pyx_v_field, __pyx_n_s_origin, __pyx_t_1) < 0) __PYX_ERR(0, 1695, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+1696:                 return parse_type(field, non_none_arg, data, encoder)
        __Pyx_XDECREF(__pyx_r);
        __pyx_t_17.__pyx_n = 1;
        __pyx_t_17.encoder = __pyx_v_encoder;
        __pyx_t_1 = __pyx_f_9datamodel_10converters_parse_type(__pyx_v_field, __pyx_v_non_none_arg, __pyx_v_data, 0, &__pyx_t_17); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1696, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        __pyx_r = __pyx_t_1;
        __pyx_t_1 = 0;
        goto __pyx_L0;
+1697:             try:
      {
        /*try:*/ {
/* … */
        }
        __pyx_L60_error:;
        __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
        __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
        __Pyx_XDECREF(__pyx_t_18); __pyx_t_18 = 0;
        __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
        __Pyx_XDECREF(__pyx_t_27); __pyx_t_27 = 0;
        __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
/* … */
        __pyx_L62_except_error:;
        __Pyx_XGIVEREF(__pyx_t_14);
        __Pyx_XGIVEREF(__pyx_t_13);
        __Pyx_XGIVEREF(__pyx_t_12);
        __Pyx_ExceptionReset(__pyx_t_14, __pyx_t_13, __pyx_t_12);
        goto __pyx_L1_error;
        __pyx_L64_try_return:;
        __Pyx_XGIVEREF(__pyx_t_14);
        __Pyx_XGIVEREF(__pyx_t_13);
        __Pyx_XGIVEREF(__pyx_t_12);
        __Pyx_ExceptionReset(__pyx_t_14, __pyx_t_13, __pyx_t_12);
        goto __pyx_L0;
        __pyx_L61_exception_handled:;
        __Pyx_XGIVEREF(__pyx_t_14);
        __Pyx_XGIVEREF(__pyx_t_13);
        __Pyx_XGIVEREF(__pyx_t_12);
        __Pyx_ExceptionReset(__pyx_t_14, __pyx_t_13, __pyx_t_12);
      }
+1698:                 t = args[0]
          if (unlikely(__pyx_v_args == Py_None)) {
            PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
            __PYX_ERR(0, 1698, __pyx_L60_error)
          }
          __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v_args, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1698, __pyx_L60_error)
          __Pyx_GOTREF(__pyx_t_1);
          __pyx_v_t = __pyx_t_1;
          __pyx_t_1 = 0;
+1699:                 if is_dc(t):
          __pyx_t_6 = __pyx_f_9datamodel_10converters_is_dc(__pyx_v_t); if (unlikely(__pyx_t_6 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1699, __pyx_L60_error)
          if (__pyx_t_6) {
/* … */
            goto __pyx_L66;
          }
+1700:                     if isinstance(data, dict):
            __pyx_t_6 = PyDict_Check(__pyx_v_data); 
            if (__pyx_t_6) {
/* … */
              goto __pyx_L67;
            }
+1701:                         data = t(**data)
              if (unlikely(__pyx_v_data == Py_None)) {
                PyErr_SetString(PyExc_TypeError, "argument after ** must be a mapping, not NoneType");
                __PYX_ERR(0, 1701, __pyx_L60_error)
              }
              if (likely(PyDict_CheckExact(__pyx_v_data))) {
                __pyx_t_1 = PyDict_Copy(__pyx_v_data); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1701, __pyx_L60_error)
                __Pyx_GOTREF(__pyx_t_1);
              } else {
                __pyx_t_1 = __Pyx_PyObject_CallOneArg((PyObject*)&PyDict_Type, __pyx_v_data); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1701, __pyx_L60_error)
                __Pyx_GOTREF(__pyx_t_1);
              }
              __pyx_t_3 = __Pyx_PyObject_Call(__pyx_v_t, __pyx_empty_tuple, __pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1701, __pyx_L60_error)
              __Pyx_GOTREF(__pyx_t_3);
              __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
              __Pyx_DECREF_SET(__pyx_v_data, __pyx_t_3);
              __pyx_t_3 = 0;
+1702:                     elif isinstance(data, (list, tuple)):
            __pyx_t_19 = PyList_Check(__pyx_v_data); 
            if (!__pyx_t_19) {
            } else {
              __pyx_t_6 = __pyx_t_19;
              goto __pyx_L68_bool_binop_done;
            }
            __pyx_t_19 = PyTuple_Check(__pyx_v_data); 
            __pyx_t_6 = __pyx_t_19;
            __pyx_L68_bool_binop_done:;
            if (__pyx_t_6) {
/* … */
              goto __pyx_L67;
            }
+1703:                         data = t(*data)
              __pyx_t_3 = __Pyx_PySequence_Tuple(__pyx_v_data); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1703, __pyx_L60_error)
              __Pyx_GOTREF(__pyx_t_3);
              __pyx_t_1 = __Pyx_PyObject_Call(__pyx_v_t, __pyx_t_3, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1703, __pyx_L60_error)
              __Pyx_GOTREF(__pyx_t_1);
              __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
              __Pyx_DECREF_SET(__pyx_v_data, __pyx_t_1);
              __pyx_t_1 = 0;
 1704:                     else:
 1705:                         ## is already a dataclass, returning
+1706:                         return data
            /*else*/ {
              __Pyx_XDECREF(__pyx_r);
              __Pyx_INCREF(__pyx_v_data);
              __pyx_r = __pyx_v_data;
              goto __pyx_L64_try_return;
            }
            __pyx_L67:;
+1707:                 elif callable(t):
          __pyx_t_6 = __Pyx_PyCallable_Check(__pyx_v_t); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(0, 1707, __pyx_L60_error)
          if (__pyx_t_6) {
/* … */
          }
          __pyx_L66:;
+1708:                     if t.__module__ == 'typing': # nested typing
            __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_t, __pyx_n_s_module); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1708, __pyx_L60_error)
            __Pyx_GOTREF(__pyx_t_1);
            __pyx_t_6 = (__Pyx_PyUnicode_Equals(__pyx_t_1, __pyx_n_u_typing, Py_EQ)); if (unlikely((__pyx_t_6 < 0))) __PYX_ERR(0, 1708, __pyx_L60_error)
            __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
            if (__pyx_t_6) {
/* … */
            }
 1709:                         # there is also a nested typing:
+1710:                         if t._name == 'List' and isinstance(data, list):
              __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_t, __pyx_n_s_name_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1710, __pyx_L60_error)
              __Pyx_GOTREF(__pyx_t_1);
              __pyx_t_19 = (__Pyx_PyUnicode_Equals(__pyx_t_1, __pyx_n_u_List, Py_EQ)); if (unlikely((__pyx_t_19 < 0))) __PYX_ERR(0, 1710, __pyx_L60_error)
              __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
              if (__pyx_t_19) {
              } else {
                __pyx_t_6 = __pyx_t_19;
                goto __pyx_L72_bool_binop_done;
              }
              __pyx_t_19 = PyList_Check(__pyx_v_data); 
              __pyx_t_6 = __pyx_t_19;
              __pyx_L72_bool_binop_done:;
              if (__pyx_t_6) {
/* … */
              }
+1711:                             arg = t.__args__[0]
                __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_t, __pyx_n_s_args); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1711, __pyx_L60_error)
                __Pyx_GOTREF(__pyx_t_1);
                __pyx_t_3 = __Pyx_GetItemInt(__pyx_t_1, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1711, __pyx_L60_error)
                __Pyx_GOTREF(__pyx_t_3);
                __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
                __pyx_v_arg = __pyx_t_3;
                __pyx_t_3 = 0;
+1712:                             if is_dc(arg):
                __pyx_t_6 = __pyx_f_9datamodel_10converters_is_dc(__pyx_v_arg); if (unlikely(__pyx_t_6 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1712, __pyx_L60_error)
                if (__pyx_t_6) {
/* … */
                }
+1713:                                 result = []
                  __pyx_t_3 = PyList_New(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1713, __pyx_L60_error)
                  __Pyx_GOTREF(__pyx_t_3);
                  __pyx_v_result = ((PyObject*)__pyx_t_3);
                  __pyx_t_3 = 0;
+1714:                                 for x in data:
                  if (likely(PyList_CheckExact(__pyx_v_data)) || PyTuple_CheckExact(__pyx_v_data)) {
                    __pyx_t_3 = __pyx_v_data; __Pyx_INCREF(__pyx_t_3);
                    __pyx_t_8 = 0;
                    __pyx_t_15 = NULL;
                  } else {
                    __pyx_t_8 = -1; __pyx_t_3 = PyObject_GetIter(__pyx_v_data); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1714, __pyx_L60_error)
                    __Pyx_GOTREF(__pyx_t_3);
                    __pyx_t_15 = __Pyx_PyObject_GetIterNextFunc(__pyx_t_3); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 1714, __pyx_L60_error)
                  }
                  for (;;) {
                    if (likely(!__pyx_t_15)) {
                      if (likely(PyList_CheckExact(__pyx_t_3))) {
                        {
                          Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_t_3);
                          #if !CYTHON_ASSUME_SAFE_MACROS
                          if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 1714, __pyx_L60_error)
                          #endif
                          if (__pyx_t_8 >= __pyx_temp) break;
                        }
                        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
                        __pyx_t_1 = PyList_GET_ITEM(__pyx_t_3, __pyx_t_8); __Pyx_INCREF(__pyx_t_1); __pyx_t_8++; if (unlikely((0 < 0))) __PYX_ERR(0, 1714, __pyx_L60_error)
                        #else
                        __pyx_t_1 = __Pyx_PySequence_ITEM(__pyx_t_3, __pyx_t_8); __pyx_t_8++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1714, __pyx_L60_error)
                        __Pyx_GOTREF(__pyx_t_1);
                        #endif
                      } else {
                        {
                          Py_ssize_t __pyx_temp = __Pyx_PyTuple_GET_SIZE(__pyx_t_3);
                          #if !CYTHON_ASSUME_SAFE_MACROS
                          if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 1714, __pyx_L60_error)
                          #endif
                          if (__pyx_t_8 >= __pyx_temp) break;
                        }
                        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
                        __pyx_t_1 = PyTuple_GET_ITEM(__pyx_t_3, __pyx_t_8); __Pyx_INCREF(__pyx_t_1); __pyx_t_8++; if (unlikely((0 < 0))) __PYX_ERR(0, 1714, __pyx_L60_error)
                        #else
                        __pyx_t_1 = __Pyx_PySequence_ITEM(__pyx_t_3, __pyx_t_8); __pyx_t_8++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1714, __pyx_L60_error)
                        __Pyx_GOTREF(__pyx_t_1);
                        #endif
                      }
                    } else {
                      __pyx_t_1 = __pyx_t_15(__pyx_t_3);
                      if (unlikely(!__pyx_t_1)) {
                        PyObject* exc_type = PyErr_Occurred();
                        if (exc_type) {
                          if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
                          else __PYX_ERR(0, 1714, __pyx_L60_error)
                        }
                        break;
                      }
                      __Pyx_GOTREF(__pyx_t_1);
                    }
                    __Pyx_XDECREF_SET(__pyx_v_x, __pyx_t_1);
                    __pyx_t_1 = 0;
/* … */
                  }
                  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+1715:                                     if isinstance(x, dict):
                    __pyx_t_6 = PyDict_Check(__pyx_v_x); 
                    if (__pyx_t_6) {
/* … */
                      goto __pyx_L77;
                    }
+1716:                                         result.append(arg(**x))
                      if (unlikely(__pyx_v_x == Py_None)) {
                        PyErr_SetString(PyExc_TypeError, "argument after ** must be a mapping, not NoneType");
                        __PYX_ERR(0, 1716, __pyx_L60_error)
                      }
                      if (likely(PyDict_CheckExact(__pyx_v_x))) {
                        __pyx_t_1 = PyDict_Copy(__pyx_v_x); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1716, __pyx_L60_error)
                        __Pyx_GOTREF(__pyx_t_1);
                      } else {
                        __pyx_t_1 = __Pyx_PyObject_CallOneArg((PyObject*)&PyDict_Type, __pyx_v_x); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1716, __pyx_L60_error)
                        __Pyx_GOTREF(__pyx_t_1);
                      }
                      __pyx_t_2 = __Pyx_PyObject_Call(__pyx_v_arg, __pyx_empty_tuple, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1716, __pyx_L60_error)
                      __Pyx_GOTREF(__pyx_t_2);
                      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
                      __pyx_t_16 = __Pyx_PyList_Append(__pyx_v_result, __pyx_t_2); if (unlikely(__pyx_t_16 == ((int)-1))) __PYX_ERR(0, 1716, __pyx_L60_error)
                      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 1717:                                     else:
+1718:                                         result.append(arg(*x))
                    /*else*/ {
                      __pyx_t_2 = __Pyx_PySequence_Tuple(__pyx_v_x); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1718, __pyx_L60_error)
                      __Pyx_GOTREF(__pyx_t_2);
                      __pyx_t_1 = __Pyx_PyObject_Call(__pyx_v_arg, __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1718, __pyx_L60_error)
                      __Pyx_GOTREF(__pyx_t_1);
                      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
                      __pyx_t_16 = __Pyx_PyList_Append(__pyx_v_result, __pyx_t_1); if (unlikely(__pyx_t_16 == ((int)-1))) __PYX_ERR(0, 1718, __pyx_L60_error)
                      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
                    }
                    __pyx_L77:;
+1719:                                 return result
                  __Pyx_XDECREF(__pyx_r);
                  __Pyx_INCREF(__pyx_v_result);
                  __pyx_r = __pyx_v_result;
                  goto __pyx_L64_try_return;
+1720:                         return data
              __Pyx_XDECREF(__pyx_r);
              __Pyx_INCREF(__pyx_v_data);
              __pyx_r = __pyx_v_data;
              goto __pyx_L64_try_return;
 1721:                     else:
+1722:                         try:
            /*else*/ {
              {
                /*try:*/ {
/* … */
                }
                __Pyx_XDECREF(__pyx_t_20); __pyx_t_20 = 0;
                __Pyx_XDECREF(__pyx_t_21); __pyx_t_21 = 0;
                __Pyx_XDECREF(__pyx_t_22); __pyx_t_22 = 0;
                goto __pyx_L84_try_end;
                __pyx_L79_error:;
                __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
                __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
                __Pyx_XDECREF(__pyx_t_18); __pyx_t_18 = 0;
                __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
                __Pyx_XDECREF(__pyx_t_27); __pyx_t_27 = 0;
                __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
/* … */
                __pyx_L81_except_error:;
                __Pyx_XGIVEREF(__pyx_t_20);
                __Pyx_XGIVEREF(__pyx_t_21);
                __Pyx_XGIVEREF(__pyx_t_22);
                __Pyx_ExceptionReset(__pyx_t_20, __pyx_t_21, __pyx_t_22);
                goto __pyx_L60_error;
                __pyx_L83_try_return:;
                __Pyx_XGIVEREF(__pyx_t_20);
                __Pyx_XGIVEREF(__pyx_t_21);
                __Pyx_XGIVEREF(__pyx_t_22);
                __Pyx_ExceptionReset(__pyx_t_20, __pyx_t_21, __pyx_t_22);
                goto __pyx_L64_try_return;
                __pyx_L80_exception_handled:;
                __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_L84_try_end:;
              }
            }
+1723:                             if t == str:
                  __pyx_t_3 = PyObject_RichCompare(__pyx_v_t, ((PyObject *)(&PyUnicode_Type)), Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1723, __pyx_L79_error)
                  __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely((__pyx_t_6 < 0))) __PYX_ERR(0, 1723, __pyx_L79_error)
                  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
                  if (__pyx_t_6) {
/* … */
                  }
+1724:                                 return data
                    __Pyx_XDECREF(__pyx_r);
                    __Pyx_INCREF(__pyx_v_data);
                    __pyx_r = __pyx_v_data;
                    goto __pyx_L83_try_return;
+1725:                             fn = encoders[t]
                  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_encoders); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1725, __pyx_L79_error)
                  __Pyx_GOTREF(__pyx_t_3);
                  __pyx_t_1 = __Pyx_PyObject_GetItem(__pyx_t_3, __pyx_v_t); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1725, __pyx_L79_error)
                  __Pyx_GOTREF(__pyx_t_1);
                  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
                  __pyx_v_fn = __pyx_t_1;
                  __pyx_t_1 = 0;
+1726:                             try:
                  {
                    /*try:*/ {
/* … */
                    }
                    __Pyx_XDECREF(__pyx_t_23); __pyx_t_23 = 0;
                    __Pyx_XDECREF(__pyx_t_24); __pyx_t_24 = 0;
                    __Pyx_XDECREF(__pyx_t_25); __pyx_t_25 = 0;
                    goto __pyx_L91_try_end;
                    __pyx_L86_error:;
                    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
                    __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
                    __Pyx_XDECREF(__pyx_t_18); __pyx_t_18 = 0;
                    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
                    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
/* … */
                    __pyx_L88_except_error:;
                    __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);
                    goto __pyx_L79_error;
                    __pyx_L87_exception_handled:;
                    __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_L91_try_end:;
                  }
+1727:                                 if data is not None:
                      __pyx_t_6 = (__pyx_v_data != Py_None);
                      if (__pyx_t_6) {
/* … */
                      }
+1728:                                     data = fn(data)
                        __Pyx_INCREF(__pyx_v_fn);
                        __pyx_t_3 = __pyx_v_fn; __pyx_t_2 = NULL;
                        __pyx_t_4 = 0;
                        #if CYTHON_UNPACK_METHODS
                        if (unlikely(PyMethod_Check(__pyx_t_3))) {
                          __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3);
                          if (likely(__pyx_t_2)) {
                            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
                            __Pyx_INCREF(__pyx_t_2);
                            __Pyx_INCREF(function);
                            __Pyx_DECREF_SET(__pyx_t_3, function);
                            __pyx_t_4 = 1;
                          }
                        }
                        #endif
                        {
                          PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_v_data};
                          __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4);
                          __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
                          if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1728, __pyx_L86_error)
                          __Pyx_GOTREF(__pyx_t_1);
                          __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
                        }
                        __Pyx_DECREF_SET(__pyx_v_data, __pyx_t_1);
                        __pyx_t_1 = 0;
+1729:                             except TypeError as ex:
                    __pyx_t_9 = __Pyx_PyErr_ExceptionMatches(__pyx_builtin_TypeError);
                    if (__pyx_t_9) {
                      __Pyx_AddTraceback("datamodel.converters.parse_type", __pyx_clineno, __pyx_lineno, __pyx_filename);
                      if (__Pyx_GetException(&__pyx_t_1, &__pyx_t_3, &__pyx_t_2) < 0) __PYX_ERR(0, 1729, __pyx_L88_except_error)
                      __Pyx_XGOTREF(__pyx_t_1);
                      __Pyx_XGOTREF(__pyx_t_3);
                      __Pyx_XGOTREF(__pyx_t_2);
                      __Pyx_INCREF(__pyx_t_3);
                      __pyx_v_ex = __pyx_t_3;
                      /*try:*/ {
                      }
                      /*finally:*/ {
                        /*normal exit:*/{
                          __Pyx_DECREF(__pyx_v_ex); __pyx_v_ex = 0;
                          goto __pyx_L99;
                        }
                        __pyx_L99:;
                      }
                      __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
                      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
                      __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
                      goto __pyx_L87_exception_handled;
                    }
 1730:                                 pass
+1731:                             except (ValueError, RuntimeError) as exc:
                    __pyx_t_9 = __Pyx_PyErr_ExceptionMatches2(__pyx_builtin_ValueError, __pyx_builtin_RuntimeError);
                    if (__pyx_t_9) {
                      __Pyx_AddTraceback("datamodel.converters.parse_type", __pyx_clineno, __pyx_lineno, __pyx_filename);
                      if (__Pyx_GetException(&__pyx_t_2, &__pyx_t_3, &__pyx_t_1) < 0) __PYX_ERR(0, 1731, __pyx_L88_except_error)
                      __Pyx_XGOTREF(__pyx_t_2);
                      __Pyx_XGOTREF(__pyx_t_3);
                      __Pyx_XGOTREF(__pyx_t_1);
                      __Pyx_INCREF(__pyx_t_3);
                      __pyx_v_exc = __pyx_t_3;
                      /*try:*/ {
/* … */
                      /*finally:*/ {
                        __pyx_L105_error:;
                        /*exception exit:*/{
                          __Pyx_PyThreadState_declare
                          __Pyx_PyThreadState_assign
                          __pyx_t_29 = 0; __pyx_t_30 = 0; __pyx_t_31 = 0; __pyx_t_32 = 0; __pyx_t_33 = 0; __pyx_t_34 = 0;
                          __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
                          __Pyx_XDECREF(__pyx_t_18); __pyx_t_18 = 0;
                          __Pyx_XDECREF(__pyx_t_27); __pyx_t_27 = 0;
                          if (PY_MAJOR_VERSION >= 3) __Pyx_ExceptionSwap(&__pyx_t_32, &__pyx_t_33, &__pyx_t_34);
                          if ((PY_MAJOR_VERSION < 3) || unlikely(__Pyx_GetException(&__pyx_t_29, &__pyx_t_30, &__pyx_t_31) < 0)) __Pyx_ErrFetch(&__pyx_t_29, &__pyx_t_30, &__pyx_t_31);
                          __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_XGOTREF(__pyx_t_34);
                          __pyx_t_9 = __pyx_lineno; __pyx_t_11 = __pyx_clineno; __pyx_t_28 = __pyx_filename;
                          {
                            __Pyx_DECREF(__pyx_v_exc); __pyx_v_exc = 0;
                          }
                          if (PY_MAJOR_VERSION >= 3) {
                            __Pyx_XGIVEREF(__pyx_t_32);
                            __Pyx_XGIVEREF(__pyx_t_33);
                            __Pyx_XGIVEREF(__pyx_t_34);
                            __Pyx_ExceptionReset(__pyx_t_32, __pyx_t_33, __pyx_t_34);
                          }
                          __Pyx_XGIVEREF(__pyx_t_29);
                          __Pyx_XGIVEREF(__pyx_t_30);
                          __Pyx_XGIVEREF(__pyx_t_31);
                          __Pyx_ErrRestore(__pyx_t_29, __pyx_t_30, __pyx_t_31);
                          __pyx_t_29 = 0; __pyx_t_30 = 0; __pyx_t_31 = 0; __pyx_t_32 = 0; __pyx_t_33 = 0; __pyx_t_34 = 0;
                          __pyx_lineno = __pyx_t_9; __pyx_clineno = __pyx_t_11; __pyx_filename = __pyx_t_28;
                          goto __pyx_L88_except_error;
                        }
                      }
                    }
                    goto __pyx_L88_except_error;
+1732:                                 raise ValueError(
                        __pyx_t_10 = __Pyx_PyObject_CallOneArg(__pyx_builtin_ValueError, __pyx_t_27); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1732, __pyx_L105_error)
                        __Pyx_GOTREF(__pyx_t_10);
                        __Pyx_DECREF(__pyx_t_27); __pyx_t_27 = 0;
                        __Pyx_Raise(__pyx_t_10, 0, 0, 0);
                        __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
                        __PYX_ERR(0, 1732, __pyx_L105_error)
                      }
+1733:                                     f"Model: Error parsing {T}, {exc}"
                        __pyx_t_10 = PyTuple_New(4); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1733, __pyx_L105_error)
                        __Pyx_GOTREF(__pyx_t_10);
                        __pyx_t_8 = 0;
                        __pyx_t_26 = 127;
                        __Pyx_INCREF(__pyx_kp_u_Model_Error_parsing);
                        __pyx_t_8 += 21;
                        __Pyx_GIVEREF(__pyx_kp_u_Model_Error_parsing);
                        PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_kp_u_Model_Error_parsing);
                        __pyx_t_27 = __Pyx_PyObject_FormatSimple(__pyx_v_T, __pyx_empty_unicode); if (unlikely(!__pyx_t_27)) __PYX_ERR(0, 1733, __pyx_L105_error)
                        __Pyx_GOTREF(__pyx_t_27);
                        __pyx_t_26 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_27) > __pyx_t_26) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_27) : __pyx_t_26;
                        __pyx_t_8 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_27);
                        __Pyx_GIVEREF(__pyx_t_27);
                        PyTuple_SET_ITEM(__pyx_t_10, 1, __pyx_t_27);
                        __pyx_t_27 = 0;
                        __Pyx_INCREF(__pyx_kp_u__10);
                        __pyx_t_8 += 2;
                        __Pyx_GIVEREF(__pyx_kp_u__10);
                        PyTuple_SET_ITEM(__pyx_t_10, 2, __pyx_kp_u__10);
                        __pyx_t_27 = __Pyx_PyObject_FormatSimple(__pyx_v_exc, __pyx_empty_unicode); if (unlikely(!__pyx_t_27)) __PYX_ERR(0, 1733, __pyx_L105_error)
                        __Pyx_GOTREF(__pyx_t_27);
                        __pyx_t_26 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_27) > __pyx_t_26) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_27) : __pyx_t_26;
                        __pyx_t_8 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_27);
                        __Pyx_GIVEREF(__pyx_t_27);
                        PyTuple_SET_ITEM(__pyx_t_10, 3, __pyx_t_27);
                        __pyx_t_27 = 0;
                        __pyx_t_27 = __Pyx_PyUnicode_Join(__pyx_t_10, 4, __pyx_t_8, __pyx_t_26); if (unlikely(!__pyx_t_27)) __PYX_ERR(0, 1733, __pyx_L105_error)
                        __Pyx_GOTREF(__pyx_t_27);
                        __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
 1734:                                 )
+1735:                         except KeyError:
                __pyx_t_11 = __Pyx_PyErr_ExceptionMatches(__pyx_builtin_KeyError);
                if (__pyx_t_11) {
                  __Pyx_ErrRestore(0,0,0);
                  goto __pyx_L80_exception_handled;
                }
                goto __pyx_L81_except_error;
 1736:                             pass
+1737:                 return data
          __Pyx_XDECREF(__pyx_r);
          __Pyx_INCREF(__pyx_v_data);
          __pyx_r = __pyx_v_data;
          goto __pyx_L64_try_return;
+1738:             except KeyError:
        __pyx_t_11 = __Pyx_PyErr_ExceptionMatches(__pyx_builtin_KeyError);
        if (__pyx_t_11) {
          __Pyx_ErrRestore(0,0,0);
          goto __pyx_L61_exception_handled;
        }
        goto __pyx_L62_except_error;
 1739:                 pass
+1740:     elif origin is dict and isinstance(data, dict):
  __pyx_t_19 = (__pyx_v_origin == ((PyObject *)(&PyDict_Type)));
  if (__pyx_t_19) {
  } else {
    __pyx_t_6 = __pyx_t_19;
    goto __pyx_L111_bool_binop_done;
  }
  __pyx_t_19 = PyDict_Check(__pyx_v_data); 
  __pyx_t_6 = __pyx_t_19;
  __pyx_L111_bool_binop_done:;
  if (__pyx_t_6) {
/* … */
  }
+1741:         return _parse_dict_type(field, T, data, encoder, args)
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_1 = __pyx_f_9datamodel_10converters__parse_dict_type(__pyx_v_field, __pyx_v_T, __pyx_v_data, __pyx_v_encoder, __pyx_v_args); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1741, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_r = __pyx_t_1;
    __pyx_t_1 = 0;
    goto __pyx_L0;
+1742:     elif origin is list:
  __pyx_t_6 = (__pyx_v_origin == ((PyObject *)(&PyList_Type)));
  if (__pyx_t_6) {
/* … */
  }
+1743:         return _parse_list_type(field, T, data, encoder, args)
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_1 = __pyx_f_9datamodel_10converters__parse_list_type(__pyx_v_field, __pyx_v_T, __pyx_v_data, __pyx_v_encoder, __pyx_v_args, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1743, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_r = __pyx_t_1;
    __pyx_t_1 = 0;
    goto __pyx_L0;
+1744:     elif origin is not None:
  __pyx_t_6 = (__pyx_v_origin != Py_None);
  if (__pyx_t_6) {
/* … */
  }
 1745:         # Other typing constructs can be handled here
+1746:         return data
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(__pyx_v_data);
    __pyx_r = __pyx_v_data;
    goto __pyx_L0;
 1747:     else:
+1748:         return _parse_builtin_type(field, T, data, encoder)
  /*else*/ {
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_1 = __pyx_f_9datamodel_10converters__parse_builtin_type(__pyx_v_field, __pyx_v_T, __pyx_v_data, __pyx_v_encoder); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1748, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_r = __pyx_t_1;
    __pyx_t_1 = 0;
    goto __pyx_L0;
  }
  __pyx_L5:;