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

+001: # cython: language_level=3, embedsignature=True, initializedcheck=False
  __pyx_t_4 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_test, __pyx_t_4) < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 002: # Copyright (C) 2018-present Jesus Lara
 003: #
+004: from typing import get_args, get_origin, Union, Optional
  __pyx_t_2 = PyList_New(4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4, __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, 4, __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, 4, __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, 4, __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, 4, __pyx_L1_error);
  __pyx_t_3 = __Pyx_Import(__pyx_n_s_typing, __pyx_t_2, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4, __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, 4, __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, 4, __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, 4, __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, 4, __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, 4, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_Union, __pyx_t_2) < 0) __PYX_ERR(0, 4, __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, 4, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_Optional, __pyx_t_2) < 0) __PYX_ERR(0, 4, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+005: from collections.abc import Callable, Awaitable
  __pyx_t_3 = PyList_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_INCREF(__pyx_n_s_Callable);
  __Pyx_GIVEREF(__pyx_n_s_Callable);
  if (__Pyx_PyList_SET_ITEM(__pyx_t_3, 0, __pyx_n_s_Callable)) __PYX_ERR(0, 5, __pyx_L1_error);
  __Pyx_INCREF(__pyx_n_s_Awaitable);
  __Pyx_GIVEREF(__pyx_n_s_Awaitable);
  if (__Pyx_PyList_SET_ITEM(__pyx_t_3, 1, __pyx_n_s_Awaitable)) __PYX_ERR(0, 5, __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, 5, __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_Callable); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_Callable, __pyx_t_3) < 0) __PYX_ERR(0, 5, __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, 5, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_Awaitable, __pyx_t_3) < 0) __PYX_ERR(0, 5, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+006: import typing
  __pyx_t_2 = __Pyx_ImportDottedModule(__pyx_n_s_typing, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_typing, __pyx_t_2) < 0) __PYX_ERR(0, 6, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+007: import asyncio
  __pyx_t_2 = __Pyx_patch_asyncio(__Pyx_ImportDottedModule(__pyx_n_s_asyncio, 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_asyncio, __pyx_t_2) < 0) __PYX_ERR(0, 7, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+008: import inspect
  __pyx_t_2 = __Pyx_patch_inspect(__Pyx_ImportDottedModule(__pyx_n_s_inspect, NULL)); 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_inspect, __pyx_t_2) < 0) __PYX_ERR(0, 8, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 009: from libcpp cimport bool as bool_t
 010: from cpython.object cimport PyObject_IsInstance, PyObject_IsSubclass
 011: from cpython.type cimport PyType_Check
+012: from enum import Enum
  __pyx_t_2 = PyList_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 12, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_INCREF(__pyx_n_s_Enum);
  __Pyx_GIVEREF(__pyx_n_s_Enum);
  if (__Pyx_PyList_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_Enum)) __PYX_ERR(0, 12, __pyx_L1_error);
  __pyx_t_3 = __Pyx_Import(__pyx_n_s_enum, __pyx_t_2, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 12, __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_Enum); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 12, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_Enum, __pyx_t_2) < 0) __PYX_ERR(0, 12, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+013: from decimal import Decimal
  __pyx_t_3 = PyList_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 13, __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, 13, __pyx_L1_error);
  __pyx_t_2 = __Pyx_Import(__pyx_n_s_decimal, __pyx_t_3, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 13, __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, 13, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_Decimal, __pyx_t_3) < 0) __PYX_ERR(0, 13, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+014: import datetime
  __pyx_t_2 = __Pyx_ImportDottedModule(__pyx_n_s_datetime, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 14, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_datetime, __pyx_t_2) < 0) __PYX_ERR(0, 14, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+015: from uuid import UUID
  __pyx_t_2 = PyList_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 15, __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, 15, __pyx_L1_error);
  __pyx_t_3 = __Pyx_Import(__pyx_n_s_uuid, __pyx_t_2, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 15, __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, 15, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_UUID, __pyx_t_2) < 0) __PYX_ERR(0, 15, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+016: import asyncpg.pgproto.pgproto as pgproto
  __pyx_t_3 = __Pyx_ImportDottedModule(__pyx_n_s_asyncpg_pgproto_pgproto, __pyx_tuple__16); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 16, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_pgproto, __pyx_t_3) < 0) __PYX_ERR(0, 16, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
/* … */
  __pyx_tuple__16 = PyTuple_Pack(3, __pyx_n_s_asyncpg, __pyx_n_s_pgproto, __pyx_n_s_pgproto); if (unlikely(!__pyx_tuple__16)) __PYX_ERR(0, 16, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__16);
  __Pyx_GIVEREF(__pyx_tuple__16);
+017: from .types import uint64_min, uint64_max, Text
  __pyx_t_3 = PyList_New(3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 17, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_INCREF(__pyx_n_s_uint64_min);
  __Pyx_GIVEREF(__pyx_n_s_uint64_min);
  if (__Pyx_PyList_SET_ITEM(__pyx_t_3, 0, __pyx_n_s_uint64_min)) __PYX_ERR(0, 17, __pyx_L1_error);
  __Pyx_INCREF(__pyx_n_s_uint64_max);
  __Pyx_GIVEREF(__pyx_n_s_uint64_max);
  if (__Pyx_PyList_SET_ITEM(__pyx_t_3, 1, __pyx_n_s_uint64_max)) __PYX_ERR(0, 17, __pyx_L1_error);
  __Pyx_INCREF(__pyx_n_s_Text);
  __Pyx_GIVEREF(__pyx_n_s_Text);
  if (__Pyx_PyList_SET_ITEM(__pyx_t_3, 2, __pyx_n_s_Text)) __PYX_ERR(0, 17, __pyx_L1_error);
  __pyx_t_2 = __Pyx_Import(__pyx_n_s_types, __pyx_t_3, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 17, __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_uint64_min); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 17, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_uint64_min, __pyx_t_3) < 0) __PYX_ERR(0, 17, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_uint64_max); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 17, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_uint64_max, __pyx_t_3) < 0) __PYX_ERR(0, 17, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_Text); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 17, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_Text, __pyx_t_3) < 0) __PYX_ERR(0, 17, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+018: from .fields import Field
  __pyx_t_2 = PyList_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 18, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_INCREF(__pyx_n_s_Field_2);
  __Pyx_GIVEREF(__pyx_n_s_Field_2);
  if (__Pyx_PyList_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_Field_2)) __PYX_ERR(0, 18, __pyx_L1_error);
  __pyx_t_3 = __Pyx_Import(__pyx_n_s_fields, __pyx_t_2, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 18, __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_Field_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 18, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_Field_2, __pyx_t_2) < 0) __PYX_ERR(0, 18, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+019: from .functions import (
  __pyx_t_2 = __Pyx_Import(__pyx_n_s_functions, __pyx_t_3, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 19, __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, 19, __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, 20, __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, 19, __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, 21, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_is_dataclass); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 19, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_is_dataclass, __pyx_t_3) < 0) __PYX_ERR(0, 22, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_is_function); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 19, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_is_function, __pyx_t_3) < 0) __PYX_ERR(0, 23, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_is_callable); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 19, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_is_callable, __pyx_t_3) < 0) __PYX_ERR(0, 24, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_is_empty); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 19, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_is_empty, __pyx_t_3) < 0) __PYX_ERR(0, 25, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+020:     is_iterable,
  __pyx_t_3 = PyList_New(6); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 20, __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, 20, __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, 20, __pyx_L1_error);
  __Pyx_INCREF(__pyx_n_s_is_dataclass);
  __Pyx_GIVEREF(__pyx_n_s_is_dataclass);
  if (__Pyx_PyList_SET_ITEM(__pyx_t_3, 2, __pyx_n_s_is_dataclass)) __PYX_ERR(0, 20, __pyx_L1_error);
  __Pyx_INCREF(__pyx_n_s_is_function);
  __Pyx_GIVEREF(__pyx_n_s_is_function);
  if (__Pyx_PyList_SET_ITEM(__pyx_t_3, 3, __pyx_n_s_is_function)) __PYX_ERR(0, 20, __pyx_L1_error);
  __Pyx_INCREF(__pyx_n_s_is_callable);
  __Pyx_GIVEREF(__pyx_n_s_is_callable);
  if (__Pyx_PyList_SET_ITEM(__pyx_t_3, 4, __pyx_n_s_is_callable)) __PYX_ERR(0, 20, __pyx_L1_error);
  __Pyx_INCREF(__pyx_n_s_is_empty);
  __Pyx_GIVEREF(__pyx_n_s_is_empty);
  if (__Pyx_PyList_SET_ITEM(__pyx_t_3, 5, __pyx_n_s_is_empty)) __PYX_ERR(0, 20, __pyx_L1_error);
 021:     is_primitive,
 022:     is_dataclass,
 023:     is_function,
 024:     is_callable,
 025:     is_empty
 026: )
 027: 
 028: 
+029: cdef str valid_int(object field, str name, object value, object _type):
static PyObject *__pyx_f_9datamodel_10validation_valid_int(CYTHON_UNUSED PyObject *__pyx_v_field, PyObject *__pyx_v_name, PyObject *__pyx_v_value, CYTHON_UNUSED PyObject *__pyx_v__type) {
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_AddTraceback("datamodel.validation.valid_int", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 030:     # Basic check for integer type.
+031:     if not isinstance(value, int):
  __pyx_t_1 = PyInt_Check(__pyx_v_value); 
  __pyx_t_2 = (!__pyx_t_1);
  if (__pyx_t_2) {
/* … */
  }
+032:         return f"Field {name} expected an integer, got {value!r} of type {type(value).__name__}"
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_3 = PyTuple_New(6); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 32, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_4 = 0;
    __pyx_t_5 = 127;
    __Pyx_INCREF(__pyx_kp_u_Field);
    __pyx_t_4 += 6;
    __Pyx_GIVEREF(__pyx_kp_u_Field);
    PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_kp_u_Field);
    __pyx_t_6 = __Pyx_PyUnicode_Unicode(__pyx_v_name); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 32, __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_4 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_6);
    __Pyx_GIVEREF(__pyx_t_6);
    PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_6);
    __pyx_t_6 = 0;
    __Pyx_INCREF(__pyx_kp_u_expected_an_integer_got);
    __pyx_t_4 += 26;
    __Pyx_GIVEREF(__pyx_kp_u_expected_an_integer_got);
    PyTuple_SET_ITEM(__pyx_t_3, 2, __pyx_kp_u_expected_an_integer_got);
    __pyx_t_6 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_v_value), __pyx_empty_unicode); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 32, __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_4 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_6);
    __Pyx_GIVEREF(__pyx_t_6);
    PyTuple_SET_ITEM(__pyx_t_3, 3, __pyx_t_6);
    __pyx_t_6 = 0;
    __Pyx_INCREF(__pyx_kp_u_of_type);
    __pyx_t_4 += 9;
    __Pyx_GIVEREF(__pyx_kp_u_of_type);
    PyTuple_SET_ITEM(__pyx_t_3, 4, __pyx_kp_u_of_type);
    __pyx_t_6 = __Pyx_PyObject_GetAttrStr(((PyObject *)Py_TYPE(__pyx_v_value)), __pyx_n_s_name_2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 32, __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, 32, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __pyx_t_5 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_7) > __pyx_t_5) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_7) : __pyx_t_5;
    __pyx_t_4 += __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_4, __pyx_t_5); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 32, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_r = ((PyObject*)__pyx_t_7);
    __pyx_t_7 = 0;
    goto __pyx_L0;
+033:     return None
  __Pyx_XDECREF(__pyx_r);
  __pyx_r = ((PyObject*)Py_None); __Pyx_INCREF(Py_None);
  goto __pyx_L0;
 034: 
+035: cdef str valid_float(object field, str name, object value, object _type):
static PyObject *__pyx_f_9datamodel_10validation_valid_float(CYTHON_UNUSED PyObject *__pyx_v_field, PyObject *__pyx_v_name, PyObject *__pyx_v_value, CYTHON_UNUSED PyObject *__pyx_v__type) {
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_AddTraceback("datamodel.validation.valid_float", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+036:     if not isinstance(value, (float, int)):  # sometimes ints are allowed
  __pyx_t_2 = PyFloat_Check(__pyx_v_value); 
  if (!__pyx_t_2) {
  } else {
    __pyx_t_1 = __pyx_t_2;
    goto __pyx_L4_bool_binop_done;
  }
  __pyx_t_2 = PyInt_Check(__pyx_v_value); 
  __pyx_t_1 = __pyx_t_2;
  __pyx_L4_bool_binop_done:;
  __pyx_t_2 = (!__pyx_t_1);
  if (__pyx_t_2) {
/* … */
  }
+037:         return f"Field {name} expected a float, got {value!r} of type {type(value).__name__}"
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_3 = PyTuple_New(6); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 37, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_4 = 0;
    __pyx_t_5 = 127;
    __Pyx_INCREF(__pyx_kp_u_Field);
    __pyx_t_4 += 6;
    __Pyx_GIVEREF(__pyx_kp_u_Field);
    PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_kp_u_Field);
    __pyx_t_6 = __Pyx_PyUnicode_Unicode(__pyx_v_name); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 37, __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_4 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_6);
    __Pyx_GIVEREF(__pyx_t_6);
    PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_6);
    __pyx_t_6 = 0;
    __Pyx_INCREF(__pyx_kp_u_expected_a_float_got);
    __pyx_t_4 += 23;
    __Pyx_GIVEREF(__pyx_kp_u_expected_a_float_got);
    PyTuple_SET_ITEM(__pyx_t_3, 2, __pyx_kp_u_expected_a_float_got);
    __pyx_t_6 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_v_value), __pyx_empty_unicode); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 37, __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_4 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_6);
    __Pyx_GIVEREF(__pyx_t_6);
    PyTuple_SET_ITEM(__pyx_t_3, 3, __pyx_t_6);
    __pyx_t_6 = 0;
    __Pyx_INCREF(__pyx_kp_u_of_type);
    __pyx_t_4 += 9;
    __Pyx_GIVEREF(__pyx_kp_u_of_type);
    PyTuple_SET_ITEM(__pyx_t_3, 4, __pyx_kp_u_of_type);
    __pyx_t_6 = __Pyx_PyObject_GetAttrStr(((PyObject *)Py_TYPE(__pyx_v_value)), __pyx_n_s_name_2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 37, __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, 37, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __pyx_t_5 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_7) > __pyx_t_5) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_7) : __pyx_t_5;
    __pyx_t_4 += __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_4, __pyx_t_5); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 37, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_r = ((PyObject*)__pyx_t_7);
    __pyx_t_7 = 0;
    goto __pyx_L0;
+038:     return None
  __Pyx_XDECREF(__pyx_r);
  __pyx_r = ((PyObject*)Py_None); __Pyx_INCREF(Py_None);
  goto __pyx_L0;
 039: 
+040: cdef str valid_str(object field, str name, object value, object _type):
static PyObject *__pyx_f_9datamodel_10validation_valid_str(CYTHON_UNUSED PyObject *__pyx_v_field, PyObject *__pyx_v_name, PyObject *__pyx_v_value, CYTHON_UNUSED PyObject *__pyx_v__type) {
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_AddTraceback("datamodel.validation.valid_str", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+041:     if not isinstance(value, str):
  __pyx_t_1 = PyUnicode_Check(__pyx_v_value); 
  __pyx_t_2 = (!__pyx_t_1);
  if (__pyx_t_2) {
/* … */
  }
+042:         return f"Field {name} expected a string, got {value!r} of type {type(value).__name__}"
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_3 = PyTuple_New(6); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 42, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_4 = 0;
    __pyx_t_5 = 127;
    __Pyx_INCREF(__pyx_kp_u_Field);
    __pyx_t_4 += 6;
    __Pyx_GIVEREF(__pyx_kp_u_Field);
    PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_kp_u_Field);
    __pyx_t_6 = __Pyx_PyUnicode_Unicode(__pyx_v_name); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 42, __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_4 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_6);
    __Pyx_GIVEREF(__pyx_t_6);
    PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_6);
    __pyx_t_6 = 0;
    __Pyx_INCREF(__pyx_kp_u_expected_a_string_got);
    __pyx_t_4 += 24;
    __Pyx_GIVEREF(__pyx_kp_u_expected_a_string_got);
    PyTuple_SET_ITEM(__pyx_t_3, 2, __pyx_kp_u_expected_a_string_got);
    __pyx_t_6 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_v_value), __pyx_empty_unicode); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 42, __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_4 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_6);
    __Pyx_GIVEREF(__pyx_t_6);
    PyTuple_SET_ITEM(__pyx_t_3, 3, __pyx_t_6);
    __pyx_t_6 = 0;
    __Pyx_INCREF(__pyx_kp_u_of_type);
    __pyx_t_4 += 9;
    __Pyx_GIVEREF(__pyx_kp_u_of_type);
    PyTuple_SET_ITEM(__pyx_t_3, 4, __pyx_kp_u_of_type);
    __pyx_t_6 = __Pyx_PyObject_GetAttrStr(((PyObject *)Py_TYPE(__pyx_v_value)), __pyx_n_s_name_2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 42, __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, 42, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __pyx_t_5 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_7) > __pyx_t_5) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_7) : __pyx_t_5;
    __pyx_t_4 += __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_4, __pyx_t_5); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 42, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_r = ((PyObject*)__pyx_t_7);
    __pyx_t_7 = 0;
    goto __pyx_L0;
+043:     return None
  __Pyx_XDECREF(__pyx_r);
  __pyx_r = ((PyObject*)Py_None); __Pyx_INCREF(Py_None);
  goto __pyx_L0;
 044: 
+045: cdef str valid_uuid(object field, str name, object value, object _type):
static PyObject *__pyx_f_9datamodel_10validation_valid_uuid(CYTHON_UNUSED PyObject *__pyx_v_field, PyObject *__pyx_v_name, PyObject *__pyx_v_value, CYTHON_UNUSED PyObject *__pyx_v__type) {
  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.validation.valid_uuid", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+046:     if not isinstance(value, (UUID, pgproto.UUID)):
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_UUID); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 46, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_pgproto); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 46, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_UUID); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 46, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_5 = PyObject_IsInstance(__pyx_v_value, __pyx_t_1); 
  if (!__pyx_t_5) {
  } else {
    __pyx_t_4 = __pyx_t_5;
    goto __pyx_L4_bool_binop_done;
  }
  __pyx_t_5 = PyObject_IsInstance(__pyx_v_value, __pyx_t_3); 
  __pyx_t_4 = __pyx_t_5;
  __pyx_L4_bool_binop_done:;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_5 = (!__pyx_t_4);
  if (__pyx_t_5) {
/* … */
  }
+047:         return f"Field {name} expected a UUID, got {value!r} of type {type(value).__name__}"
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_1 = PyTuple_New(6); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 47, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_6 = 0;
    __pyx_t_7 = 127;
    __Pyx_INCREF(__pyx_kp_u_Field);
    __pyx_t_6 += 6;
    __Pyx_GIVEREF(__pyx_kp_u_Field);
    PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_kp_u_Field);
    __pyx_t_3 = __Pyx_PyUnicode_Unicode(__pyx_v_name); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 47, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_7 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_3) > __pyx_t_7) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_3) : __pyx_t_7;
    __pyx_t_6 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_3);
    __Pyx_GIVEREF(__pyx_t_3);
    PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_t_3);
    __pyx_t_3 = 0;
    __Pyx_INCREF(__pyx_kp_u_expected_a_UUID_got);
    __pyx_t_6 += 22;
    __Pyx_GIVEREF(__pyx_kp_u_expected_a_UUID_got);
    PyTuple_SET_ITEM(__pyx_t_1, 2, __pyx_kp_u_expected_a_UUID_got);
    __pyx_t_3 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_v_value), __pyx_empty_unicode); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 47, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_7 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_3) > __pyx_t_7) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_3) : __pyx_t_7;
    __pyx_t_6 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_3);
    __Pyx_GIVEREF(__pyx_t_3);
    PyTuple_SET_ITEM(__pyx_t_1, 3, __pyx_t_3);
    __pyx_t_3 = 0;
    __Pyx_INCREF(__pyx_kp_u_of_type);
    __pyx_t_6 += 9;
    __Pyx_GIVEREF(__pyx_kp_u_of_type);
    PyTuple_SET_ITEM(__pyx_t_1, 4, __pyx_kp_u_of_type);
    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)Py_TYPE(__pyx_v_value)), __pyx_n_s_name_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 47, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_2 = __Pyx_PyObject_FormatSimple(__pyx_t_3, __pyx_empty_unicode); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 47, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_7 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_2) > __pyx_t_7) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_2) : __pyx_t_7;
    __pyx_t_6 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_2);
    __Pyx_GIVEREF(__pyx_t_2);
    PyTuple_SET_ITEM(__pyx_t_1, 5, __pyx_t_2);
    __pyx_t_2 = 0;
    __pyx_t_2 = __Pyx_PyUnicode_Join(__pyx_t_1, 6, __pyx_t_6, __pyx_t_7); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 47, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_r = ((PyObject*)__pyx_t_2);
    __pyx_t_2 = 0;
    goto __pyx_L0;
+048:     return None
  __Pyx_XDECREF(__pyx_r);
  __pyx_r = ((PyObject*)Py_None); __Pyx_INCREF(Py_None);
  goto __pyx_L0;
 049: 
+050: cdef str valid_boolean(object field, str name, object value, object _type):
static PyObject *__pyx_f_9datamodel_10validation_valid_boolean(CYTHON_UNUSED PyObject *__pyx_v_field, PyObject *__pyx_v_name, PyObject *__pyx_v_value, CYTHON_UNUSED PyObject *__pyx_v__type) {
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_AddTraceback("datamodel.validation.valid_boolean", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+051:     if not isinstance(value, bool):
  __pyx_t_1 = ((PyObject*)&PyBool_Type);
  __Pyx_INCREF(__pyx_t_1);
  __pyx_t_2 = PyObject_IsInstance(__pyx_v_value, __pyx_t_1); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 51, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_3 = (!__pyx_t_2);
  if (__pyx_t_3) {
/* … */
  }
+052:         return f"Field {name} expected a boolean, got {value!r} of type {type(value).__name__}"
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_1 = PyTuple_New(6); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 52, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_4 = 0;
    __pyx_t_5 = 127;
    __Pyx_INCREF(__pyx_kp_u_Field);
    __pyx_t_4 += 6;
    __Pyx_GIVEREF(__pyx_kp_u_Field);
    PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_kp_u_Field);
    __pyx_t_6 = __Pyx_PyUnicode_Unicode(__pyx_v_name); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 52, __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_4 += __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_expected_a_boolean_got);
    __pyx_t_4 += 25;
    __Pyx_GIVEREF(__pyx_kp_u_expected_a_boolean_got);
    PyTuple_SET_ITEM(__pyx_t_1, 2, __pyx_kp_u_expected_a_boolean_got);
    __pyx_t_6 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_v_value), __pyx_empty_unicode); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 52, __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_4 += __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_of_type);
    __pyx_t_4 += 9;
    __Pyx_GIVEREF(__pyx_kp_u_of_type);
    PyTuple_SET_ITEM(__pyx_t_1, 4, __pyx_kp_u_of_type);
    __pyx_t_6 = __Pyx_PyObject_GetAttrStr(((PyObject *)Py_TYPE(__pyx_v_value)), __pyx_n_s_name_2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 52, __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, 52, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __pyx_t_5 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_7) > __pyx_t_5) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_7) : __pyx_t_5;
    __pyx_t_4 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_7);
    __Pyx_GIVEREF(__pyx_t_7);
    PyTuple_SET_ITEM(__pyx_t_1, 5, __pyx_t_7);
    __pyx_t_7 = 0;
    __pyx_t_7 = __Pyx_PyUnicode_Join(__pyx_t_1, 6, __pyx_t_4, __pyx_t_5); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 52, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_r = ((PyObject*)__pyx_t_7);
    __pyx_t_7 = 0;
    goto __pyx_L0;
+053:     return None
  __Pyx_XDECREF(__pyx_r);
  __pyx_r = ((PyObject*)Py_None); __Pyx_INCREF(Py_None);
  goto __pyx_L0;
 054: 
+055: cdef str valid_date(object field, str name, object value, object _type):
static PyObject *__pyx_f_9datamodel_10validation_valid_date(CYTHON_UNUSED PyObject *__pyx_v_field, PyObject *__pyx_v_name, PyObject *__pyx_v_value, CYTHON_UNUSED PyObject *__pyx_v__type) {
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_AddTraceback("datamodel.validation.valid_date", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+056:     if not isinstance(value, datetime.date):
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_datetime); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 56, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_date); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 56, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_3 = PyObject_IsInstance(__pyx_v_value, __pyx_t_2); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(0, 56, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_4 = (!__pyx_t_3);
  if (__pyx_t_4) {
/* … */
  }
+057:         return f"Field {name} expected a date, got {value!r} of type {type(value).__name__}"
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_2 = PyTuple_New(6); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 57, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_5 = 0;
    __pyx_t_6 = 127;
    __Pyx_INCREF(__pyx_kp_u_Field);
    __pyx_t_5 += 6;
    __Pyx_GIVEREF(__pyx_kp_u_Field);
    PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_kp_u_Field);
    __pyx_t_1 = __Pyx_PyUnicode_Unicode(__pyx_v_name); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 57, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_6 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_1) > __pyx_t_6) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_1) : __pyx_t_6;
    __pyx_t_5 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_1);
    __Pyx_GIVEREF(__pyx_t_1);
    PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_1);
    __pyx_t_1 = 0;
    __Pyx_INCREF(__pyx_kp_u_expected_a_date_got);
    __pyx_t_5 += 22;
    __Pyx_GIVEREF(__pyx_kp_u_expected_a_date_got);
    PyTuple_SET_ITEM(__pyx_t_2, 2, __pyx_kp_u_expected_a_date_got);
    __pyx_t_1 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_v_value), __pyx_empty_unicode); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 57, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_6 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_1) > __pyx_t_6) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_1) : __pyx_t_6;
    __pyx_t_5 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_1);
    __Pyx_GIVEREF(__pyx_t_1);
    PyTuple_SET_ITEM(__pyx_t_2, 3, __pyx_t_1);
    __pyx_t_1 = 0;
    __Pyx_INCREF(__pyx_kp_u_of_type);
    __pyx_t_5 += 9;
    __Pyx_GIVEREF(__pyx_kp_u_of_type);
    PyTuple_SET_ITEM(__pyx_t_2, 4, __pyx_kp_u_of_type);
    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)Py_TYPE(__pyx_v_value)), __pyx_n_s_name_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 57, __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, 57, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __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_2, 5, __pyx_t_7);
    __pyx_t_7 = 0;
    __pyx_t_7 = __Pyx_PyUnicode_Join(__pyx_t_2, 6, __pyx_t_5, __pyx_t_6); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 57, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_r = ((PyObject*)__pyx_t_7);
    __pyx_t_7 = 0;
    goto __pyx_L0;
+058:     return None
  __Pyx_XDECREF(__pyx_r);
  __pyx_r = ((PyObject*)Py_None); __Pyx_INCREF(Py_None);
  goto __pyx_L0;
 059: 
+060: cdef str valid_datetime(object field, str name, object value, object _type):
static PyObject *__pyx_f_9datamodel_10validation_valid_datetime(CYTHON_UNUSED PyObject *__pyx_v_field, PyObject *__pyx_v_name, PyObject *__pyx_v_value, CYTHON_UNUSED PyObject *__pyx_v__type) {
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_AddTraceback("datamodel.validation.valid_datetime", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+061:     if isinstance(value, datetime.datetime):
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_datetime); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 61, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_datetime); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 61, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_3 = PyObject_IsInstance(__pyx_v_value, __pyx_t_2); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(0, 61, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (__pyx_t_3) {
/* … */
  }
+062:         return None
    __Pyx_XDECREF(__pyx_r);
    __pyx_r = ((PyObject*)Py_None); __Pyx_INCREF(Py_None);
    goto __pyx_L0;
+063:     if isinstance(value, datetime.date):
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_datetime); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 63, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_date); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 63, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_3 = PyObject_IsInstance(__pyx_v_value, __pyx_t_1); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(0, 63, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (__pyx_t_3) {
/* … */
  }
+064:         return None
    __Pyx_XDECREF(__pyx_r);
    __pyx_r = ((PyObject*)Py_None); __Pyx_INCREF(Py_None);
    goto __pyx_L0;
+065:     return f"Field {name} expected a datetime, got {value!r} of type {type(value).__name__}"
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = PyTuple_New(6); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 65, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_4 = 0;
  __pyx_t_5 = 127;
  __Pyx_INCREF(__pyx_kp_u_Field);
  __pyx_t_4 += 6;
  __Pyx_GIVEREF(__pyx_kp_u_Field);
  PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_kp_u_Field);
  __pyx_t_2 = __Pyx_PyUnicode_Unicode(__pyx_v_name); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 65, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_5 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_2) > __pyx_t_5) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_2) : __pyx_t_5;
  __pyx_t_4 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_2);
  __Pyx_GIVEREF(__pyx_t_2);
  PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_t_2);
  __pyx_t_2 = 0;
  __Pyx_INCREF(__pyx_kp_u_expected_a_datetime_got);
  __pyx_t_4 += 26;
  __Pyx_GIVEREF(__pyx_kp_u_expected_a_datetime_got);
  PyTuple_SET_ITEM(__pyx_t_1, 2, __pyx_kp_u_expected_a_datetime_got);
  __pyx_t_2 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_v_value), __pyx_empty_unicode); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 65, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_5 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_2) > __pyx_t_5) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_2) : __pyx_t_5;
  __pyx_t_4 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_2);
  __Pyx_GIVEREF(__pyx_t_2);
  PyTuple_SET_ITEM(__pyx_t_1, 3, __pyx_t_2);
  __pyx_t_2 = 0;
  __Pyx_INCREF(__pyx_kp_u_of_type);
  __pyx_t_4 += 9;
  __Pyx_GIVEREF(__pyx_kp_u_of_type);
  PyTuple_SET_ITEM(__pyx_t_1, 4, __pyx_kp_u_of_type);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)Py_TYPE(__pyx_v_value)), __pyx_n_s_name_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 65, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_6 = __Pyx_PyObject_FormatSimple(__pyx_t_2, __pyx_empty_unicode); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 65, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 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_4 += __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;
  __pyx_t_6 = __Pyx_PyUnicode_Join(__pyx_t_1, 6, __pyx_t_4, __pyx_t_5); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 65, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_r = ((PyObject*)__pyx_t_6);
  __pyx_t_6 = 0;
  goto __pyx_L0;
 066: 
+067: cdef str valid_timedelta(object field, str name, object value, object _type):
static PyObject *__pyx_f_9datamodel_10validation_valid_timedelta(CYTHON_UNUSED PyObject *__pyx_v_field, PyObject *__pyx_v_name, PyObject *__pyx_v_value, CYTHON_UNUSED PyObject *__pyx_v__type) {
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_AddTraceback("datamodel.validation.valid_timedelta", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+068:     if not isinstance(value, datetime.timedelta):
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_datetime); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 68, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_timedelta); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 68, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_3 = PyObject_IsInstance(__pyx_v_value, __pyx_t_2); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(0, 68, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_4 = (!__pyx_t_3);
  if (__pyx_t_4) {
/* … */
  }
+069:         return f"Field {name} expected a timedelta, got {value!r} of type {type(value).__name__}"
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_2 = PyTuple_New(6); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 69, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_5 = 0;
    __pyx_t_6 = 127;
    __Pyx_INCREF(__pyx_kp_u_Field);
    __pyx_t_5 += 6;
    __Pyx_GIVEREF(__pyx_kp_u_Field);
    PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_kp_u_Field);
    __pyx_t_1 = __Pyx_PyUnicode_Unicode(__pyx_v_name); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 69, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_6 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_1) > __pyx_t_6) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_1) : __pyx_t_6;
    __pyx_t_5 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_1);
    __Pyx_GIVEREF(__pyx_t_1);
    PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_1);
    __pyx_t_1 = 0;
    __Pyx_INCREF(__pyx_kp_u_expected_a_timedelta_got);
    __pyx_t_5 += 27;
    __Pyx_GIVEREF(__pyx_kp_u_expected_a_timedelta_got);
    PyTuple_SET_ITEM(__pyx_t_2, 2, __pyx_kp_u_expected_a_timedelta_got);
    __pyx_t_1 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_v_value), __pyx_empty_unicode); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 69, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_6 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_1) > __pyx_t_6) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_1) : __pyx_t_6;
    __pyx_t_5 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_1);
    __Pyx_GIVEREF(__pyx_t_1);
    PyTuple_SET_ITEM(__pyx_t_2, 3, __pyx_t_1);
    __pyx_t_1 = 0;
    __Pyx_INCREF(__pyx_kp_u_of_type);
    __pyx_t_5 += 9;
    __Pyx_GIVEREF(__pyx_kp_u_of_type);
    PyTuple_SET_ITEM(__pyx_t_2, 4, __pyx_kp_u_of_type);
    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)Py_TYPE(__pyx_v_value)), __pyx_n_s_name_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 69, __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, 69, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __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_2, 5, __pyx_t_7);
    __pyx_t_7 = 0;
    __pyx_t_7 = __Pyx_PyUnicode_Join(__pyx_t_2, 6, __pyx_t_5, __pyx_t_6); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 69, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_r = ((PyObject*)__pyx_t_7);
    __pyx_t_7 = 0;
    goto __pyx_L0;
+070:     return None
  __Pyx_XDECREF(__pyx_r);
  __pyx_r = ((PyObject*)Py_None); __Pyx_INCREF(Py_None);
  goto __pyx_L0;
 071: 
+072: cdef str valid_time(object field, str name, object value, object _type):
static PyObject *__pyx_f_9datamodel_10validation_valid_time(CYTHON_UNUSED PyObject *__pyx_v_field, PyObject *__pyx_v_name, PyObject *__pyx_v_value, CYTHON_UNUSED PyObject *__pyx_v__type) {
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_AddTraceback("datamodel.validation.valid_time", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+073:     if not isinstance(value, datetime.time):
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_datetime); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 73, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_time); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 73, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_3 = PyObject_IsInstance(__pyx_v_value, __pyx_t_2); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(0, 73, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_4 = (!__pyx_t_3);
  if (__pyx_t_4) {
/* … */
  }
+074:         return f"Field {name} expected a time, got {value!r} of type {type(value).__name__}"
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_2 = PyTuple_New(6); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 74, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_5 = 0;
    __pyx_t_6 = 127;
    __Pyx_INCREF(__pyx_kp_u_Field);
    __pyx_t_5 += 6;
    __Pyx_GIVEREF(__pyx_kp_u_Field);
    PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_kp_u_Field);
    __pyx_t_1 = __Pyx_PyUnicode_Unicode(__pyx_v_name); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 74, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_6 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_1) > __pyx_t_6) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_1) : __pyx_t_6;
    __pyx_t_5 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_1);
    __Pyx_GIVEREF(__pyx_t_1);
    PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_1);
    __pyx_t_1 = 0;
    __Pyx_INCREF(__pyx_kp_u_expected_a_time_got);
    __pyx_t_5 += 22;
    __Pyx_GIVEREF(__pyx_kp_u_expected_a_time_got);
    PyTuple_SET_ITEM(__pyx_t_2, 2, __pyx_kp_u_expected_a_time_got);
    __pyx_t_1 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_v_value), __pyx_empty_unicode); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 74, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_6 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_1) > __pyx_t_6) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_1) : __pyx_t_6;
    __pyx_t_5 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_1);
    __Pyx_GIVEREF(__pyx_t_1);
    PyTuple_SET_ITEM(__pyx_t_2, 3, __pyx_t_1);
    __pyx_t_1 = 0;
    __Pyx_INCREF(__pyx_kp_u_of_type);
    __pyx_t_5 += 9;
    __Pyx_GIVEREF(__pyx_kp_u_of_type);
    PyTuple_SET_ITEM(__pyx_t_2, 4, __pyx_kp_u_of_type);
    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)Py_TYPE(__pyx_v_value)), __pyx_n_s_name_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 74, __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, 74, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __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_2, 5, __pyx_t_7);
    __pyx_t_7 = 0;
    __pyx_t_7 = __Pyx_PyUnicode_Join(__pyx_t_2, 6, __pyx_t_5, __pyx_t_6); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 74, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_r = ((PyObject*)__pyx_t_7);
    __pyx_t_7 = 0;
    goto __pyx_L0;
+075:     return None
  __Pyx_XDECREF(__pyx_r);
  __pyx_r = ((PyObject*)Py_None); __Pyx_INCREF(Py_None);
  goto __pyx_L0;
 076: 
+077: cdef str valid_decimal(object field, str name, object value, object _type):
static PyObject *__pyx_f_9datamodel_10validation_valid_decimal(CYTHON_UNUSED PyObject *__pyx_v_field, PyObject *__pyx_v_name, PyObject *__pyx_v_value, CYTHON_UNUSED PyObject *__pyx_v__type) {
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_AddTraceback("datamodel.validation.valid_decimal", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+078:     if not isinstance(value, Decimal):
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_Decimal); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 78, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = PyObject_IsInstance(__pyx_v_value, __pyx_t_1); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 78, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_3 = (!__pyx_t_2);
  if (__pyx_t_3) {
/* … */
  }
+079:         return f"Field {name} expected a Decimal, got {value!r} of type {type(value).__name__}"
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_1 = PyTuple_New(6); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 79, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_4 = 0;
    __pyx_t_5 = 127;
    __Pyx_INCREF(__pyx_kp_u_Field);
    __pyx_t_4 += 6;
    __Pyx_GIVEREF(__pyx_kp_u_Field);
    PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_kp_u_Field);
    __pyx_t_6 = __Pyx_PyUnicode_Unicode(__pyx_v_name); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 79, __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_4 += __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_expected_a_Decimal_got);
    __pyx_t_4 += 25;
    __Pyx_GIVEREF(__pyx_kp_u_expected_a_Decimal_got);
    PyTuple_SET_ITEM(__pyx_t_1, 2, __pyx_kp_u_expected_a_Decimal_got);
    __pyx_t_6 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_v_value), __pyx_empty_unicode); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 79, __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_4 += __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_of_type);
    __pyx_t_4 += 9;
    __Pyx_GIVEREF(__pyx_kp_u_of_type);
    PyTuple_SET_ITEM(__pyx_t_1, 4, __pyx_kp_u_of_type);
    __pyx_t_6 = __Pyx_PyObject_GetAttrStr(((PyObject *)Py_TYPE(__pyx_v_value)), __pyx_n_s_name_2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 79, __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, 79, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __pyx_t_5 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_7) > __pyx_t_5) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_7) : __pyx_t_5;
    __pyx_t_4 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_7);
    __Pyx_GIVEREF(__pyx_t_7);
    PyTuple_SET_ITEM(__pyx_t_1, 5, __pyx_t_7);
    __pyx_t_7 = 0;
    __pyx_t_7 = __Pyx_PyUnicode_Join(__pyx_t_1, 6, __pyx_t_4, __pyx_t_5); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 79, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_r = ((PyObject*)__pyx_t_7);
    __pyx_t_7 = 0;
    goto __pyx_L0;
+080:     return None
  __Pyx_XDECREF(__pyx_r);
  __pyx_r = ((PyObject*)Py_None); __Pyx_INCREF(Py_None);
  goto __pyx_L0;
 081: 
 082: 
 083: # List of Validators (primitive types):
 084: validators = {
+085:     str: valid_str,
  __pyx_t_2 = __Pyx_PyDict_NewPresized(12); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 85, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_CFunc_ed5399__9datamodel_10validation_unicode__lParenobject___etc_to_py_5field_4name_5value_5_type(__pyx_f_9datamodel_10validation_valid_str); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 85, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (PyDict_SetItem(__pyx_t_2, ((PyObject *)(&PyUnicode_Type)), __pyx_t_3) < 0) __PYX_ERR(0, 85, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+086:     int: valid_int,
  __pyx_t_3 = __Pyx_CFunc_ed5399__9datamodel_10validation_unicode__lParenobject___etc_to_py_5field_4name_5value_5_type(__pyx_f_9datamodel_10validation_valid_int); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 86, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (PyDict_SetItem(__pyx_t_2, ((PyObject *)(&PyInt_Type)), __pyx_t_3) < 0) __PYX_ERR(0, 85, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+087:     float: valid_float,
  __pyx_t_3 = __Pyx_CFunc_ed5399__9datamodel_10validation_unicode__lParenobject___etc_to_py_5field_4name_5value_5_type(__pyx_f_9datamodel_10validation_valid_float); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 87, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (PyDict_SetItem(__pyx_t_2, ((PyObject *)(&PyFloat_Type)), __pyx_t_3) < 0) __PYX_ERR(0, 85, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+088:     UUID: valid_uuid,
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_UUID); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 88, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = __Pyx_CFunc_ed5399__9datamodel_10validation_unicode__lParenobject___etc_to_py_5field_4name_5value_5_type(__pyx_f_9datamodel_10validation_valid_uuid); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 88, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  if (PyDict_SetItem(__pyx_t_2, __pyx_t_3, __pyx_t_4) < 0) __PYX_ERR(0, 85, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+089:     pgproto.UUID: valid_uuid,
  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_pgproto); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 89, __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, 89, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_4 = __Pyx_CFunc_ed5399__9datamodel_10validation_unicode__lParenobject___etc_to_py_5field_4name_5value_5_type(__pyx_f_9datamodel_10validation_valid_uuid); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 89, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  if (PyDict_SetItem(__pyx_t_2, __pyx_t_3, __pyx_t_4) < 0) __PYX_ERR(0, 85, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+090:     bool: valid_boolean,
  __pyx_t_4 = __Pyx_CFunc_ed5399__9datamodel_10validation_unicode__lParenobject___etc_to_py_5field_4name_5value_5_type(__pyx_f_9datamodel_10validation_valid_boolean); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 90, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  if (PyDict_SetItem(__pyx_t_2, ((PyObject*)&PyBool_Type), __pyx_t_4) < 0) __PYX_ERR(0, 85, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+091:     datetime.date: valid_date,
  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_datetime); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 91, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_date); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 91, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_4 = __Pyx_CFunc_ed5399__9datamodel_10validation_unicode__lParenobject___etc_to_py_5field_4name_5value_5_type(__pyx_f_9datamodel_10validation_valid_date); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 91, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  if (PyDict_SetItem(__pyx_t_2, __pyx_t_3, __pyx_t_4) < 0) __PYX_ERR(0, 85, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+092:     datetime.datetime: valid_datetime,
  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_datetime); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 92, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_datetime); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 92, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_4 = __Pyx_CFunc_ed5399__9datamodel_10validation_unicode__lParenobject___etc_to_py_5field_4name_5value_5_type(__pyx_f_9datamodel_10validation_valid_datetime); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 92, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  if (PyDict_SetItem(__pyx_t_2, __pyx_t_3, __pyx_t_4) < 0) __PYX_ERR(0, 85, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+093:     datetime.timedelta: valid_timedelta,
  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_datetime); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 93, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_timedelta); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 93, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_4 = __Pyx_CFunc_ed5399__9datamodel_10validation_unicode__lParenobject___etc_to_py_5field_4name_5value_5_type(__pyx_f_9datamodel_10validation_valid_timedelta); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 93, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  if (PyDict_SetItem(__pyx_t_2, __pyx_t_3, __pyx_t_4) < 0) __PYX_ERR(0, 85, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+094:     datetime.time: valid_time,
  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_datetime); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 94, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_time); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 94, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_4 = __Pyx_CFunc_ed5399__9datamodel_10validation_unicode__lParenobject___etc_to_py_5field_4name_5value_5_type(__pyx_f_9datamodel_10validation_valid_time); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 94, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  if (PyDict_SetItem(__pyx_t_2, __pyx_t_3, __pyx_t_4) < 0) __PYX_ERR(0, 85, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+095:     Decimal: valid_decimal,
  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_Decimal); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 95, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_3 = __Pyx_CFunc_ed5399__9datamodel_10validation_unicode__lParenobject___etc_to_py_5field_4name_5value_5_type(__pyx_f_9datamodel_10validation_valid_decimal); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 95, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (PyDict_SetItem(__pyx_t_2, __pyx_t_4, __pyx_t_3) < 0) __PYX_ERR(0, 85, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+096:     Text: valid_str
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_Text); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 96, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = __Pyx_CFunc_ed5399__9datamodel_10validation_unicode__lParenobject___etc_to_py_5field_4name_5value_5_type(__pyx_f_9datamodel_10validation_valid_str); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 96, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  if (PyDict_SetItem(__pyx_t_2, __pyx_t_3, __pyx_t_4) < 0) __PYX_ERR(0, 85, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_validators, __pyx_t_2) < 0) __PYX_ERR(0, 84, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 097: }
 098: 
 099: 
+100: cdef inline bint is_enum_class(object annotated_type):
static CYTHON_INLINE int __pyx_f_9datamodel_10validation_is_enum_class(PyObject *__pyx_v_annotated_type) {
  int __pyx_v_res;
  int __pyx_r;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("datamodel.validation.is_enum_class", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 101:     cdef int res
 102:     # First, check if annotated_type is a type
+103:     if not PyType_Check(annotated_type):
  __pyx_t_1 = (!PyType_Check(__pyx_v_annotated_type));
  if (__pyx_t_1) {
/* … */
  }
+104:         return False
    __pyx_r = 0;
    goto __pyx_L0;
 105:     # Then check if it is a subclass of Enum.
+106:     res = PyObject_IsSubclass(annotated_type, <object>Enum)
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_Enum); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 106, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_1 = PyObject_IsSubclass(__pyx_v_annotated_type, __pyx_t_2); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 106, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_v_res = __pyx_t_1;
+107:     if res < 0:
  __pyx_t_1 = (__pyx_v_res < 0);
  if (unlikely(__pyx_t_1)) {
/* … */
  }
 108:         # If an error occurred, you might want to raise an exception.
+109:         raise RuntimeError("Error in PyObject_IsSubclass")
    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_RuntimeError, __pyx_tuple__3, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 109, __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, 109, __pyx_L1_error)
/* … */
  __pyx_tuple__3 = PyTuple_Pack(1, __pyx_kp_u_Error_in_PyObject_IsSubclass); if (unlikely(!__pyx_tuple__3)) __PYX_ERR(0, 109, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__3);
  __Pyx_GIVEREF(__pyx_tuple__3);
+110:     return res != 0
  __pyx_r = (__pyx_v_res != 0);
  goto __pyx_L0;
 111: 
+112: cdef bool_t is_instanceof(object value, type annotated_type):
static bool __pyx_f_9datamodel_10validation_is_instanceof(PyObject *__pyx_v_value, PyTypeObject *__pyx_v_annotated_type) {
  PyObject *__pyx_v_e = NULL;
  bool __pyx_r;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_AddTraceback("datamodel.validation.is_instanceof", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_e);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+113:     if annotated_type.__module__ == 'typing':
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_annotated_type), __pyx_n_s_module); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 113, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = (__Pyx_PyUnicode_Equals(__pyx_t_1, __pyx_n_u_typing, Py_EQ)); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 113, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (__pyx_t_2) {
/* … */
  }
+114:         return True # TODO: validate subscripted generic (typing extensions)
    __pyx_r = 1;
    goto __pyx_L0;
+115:     elif value in (datetime.date, datetime.time, datetime.datetime):
  __Pyx_INCREF(__pyx_v_value);
  __pyx_t_1 = __pyx_v_value;
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_datetime); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 115, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_date); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 115, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = PyObject_RichCompare(__pyx_t_1, __pyx_t_4, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 115, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 115, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (!__pyx_t_5) {
  } else {
    __pyx_t_2 = __pyx_t_5;
    goto __pyx_L4_bool_binop_done;
  }
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_datetime); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 115, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_time); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 115, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = PyObject_RichCompare(__pyx_t_1, __pyx_t_4, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 115, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 115, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (!__pyx_t_5) {
  } else {
    __pyx_t_2 = __pyx_t_5;
    goto __pyx_L4_bool_binop_done;
  }
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_datetime); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 115, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_datetime); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 115, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = PyObject_RichCompare(__pyx_t_1, __pyx_t_4, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 115, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 115, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_2 = __pyx_t_5;
  __pyx_L4_bool_binop_done:;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_5 = __pyx_t_2;
  if (__pyx_t_5) {
/* … */
  }
 116:         # check if is a pendulum instance:
+117:         return issubclass(value, (datetime.date, datetime.time, datetime.datetime))
    __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_datetime); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 117, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_date); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 117, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_datetime); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 117, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_time); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 117, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_datetime); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 117, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_datetime); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 117, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_1 = PyTuple_New(3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 117, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_GIVEREF(__pyx_t_3);
    if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_3)) __PYX_ERR(0, 117, __pyx_L1_error);
    __Pyx_GIVEREF(__pyx_t_4);
    if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_t_4)) __PYX_ERR(0, 117, __pyx_L1_error);
    __Pyx_GIVEREF(__pyx_t_6);
    if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 2, __pyx_t_6)) __PYX_ERR(0, 117, __pyx_L1_error);
    __pyx_t_3 = 0;
    __pyx_t_4 = 0;
    __pyx_t_6 = 0;
    __pyx_t_5 = PyObject_IsSubclass(__pyx_v_value, __pyx_t_1); if (unlikely(__pyx_t_5 == ((int)-1))) __PYX_ERR(0, 117, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_r = __pyx_t_5;
    goto __pyx_L0;
 118:     else:
+119:         try:
  /*else*/ {
    {
      /*try:*/ {
/* … */
      }
      __pyx_L11_try_return:;
      goto __pyx_L0;
    }
  }
+120:             return isinstance(value, annotated_type)
        __pyx_t_5 = __Pyx_TypeCheck(__pyx_v_value, __pyx_v_annotated_type); 
        __pyx_r = __pyx_t_5;
        goto __pyx_L11_try_return;
 121:         except (AttributeError, TypeError, ValueError) as e:
 122:             raise TypeError(
 123:                 f"{e}"
 124:             )
 125: 
+126: cpdef bool_t is_optional_type(object annotated_type):
static PyObject *__pyx_pw_9datamodel_10validation_1is_optional_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 bool __pyx_f_9datamodel_10validation_is_optional_type(PyObject *__pyx_v_annotated_type, CYTHON_UNUSED int __pyx_skip_dispatch) {
  bool __pyx_r;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("datamodel.validation.is_optional_type", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_9datamodel_10validation_1is_optional_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_10validation_is_optional_type, "is_optional_type(annotated_type) -> bool");
static PyMethodDef __pyx_mdef_9datamodel_10validation_1is_optional_type = {"is_optional_type", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9datamodel_10validation_1is_optional_type, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_9datamodel_10validation_is_optional_type};
static PyObject *__pyx_pw_9datamodel_10validation_1is_optional_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_annotated_type = 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("is_optional_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_annotated_type,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_annotated_type)) != 0)) {
          (void)__Pyx_Arg_NewRef_FASTCALL(values[0]);
          kw_args--;
        }
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 126, __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, "is_optional_type") < 0)) __PYX_ERR(0, 126, __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_annotated_type = values[0];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("is_optional_type", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 126, __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.validation.is_optional_type", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_9datamodel_10validation_is_optional_type(__pyx_self, __pyx_v_annotated_type);
  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_10validation_is_optional_type(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_annotated_type) {
  PyObject *__pyx_r = NULL;
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_9datamodel_10validation_is_optional_type(__pyx_v_annotated_type, 0); if (unlikely(__pyx_t_1 == ((bool)-1) && PyErr_Occurred())) __PYX_ERR(0, 126, __pyx_L1_error)
  __pyx_t_2 = __Pyx_PyBool_FromLong(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 126, __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.validation.is_optional_type", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__17 = PyTuple_Pack(1, __pyx_n_s_annotated_type); if (unlikely(!__pyx_tuple__17)) __PYX_ERR(0, 126, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__17);
  __Pyx_GIVEREF(__pyx_tuple__17);
/* … */
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_9datamodel_10validation_1is_optional_type, 0, __pyx_n_s_is_optional_type, NULL, __pyx_n_s_datamodel_validation, __pyx_d, ((PyObject *)__pyx_codeobj__18)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 126, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_is_optional_type, __pyx_t_2) < 0) __PYX_ERR(0, 126, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_codeobj__18 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__17, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_datamodel_validation_pyx, __pyx_n_s_is_optional_type, 126, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__18)) __PYX_ERR(0, 126, __pyx_L1_error)
+127:     if get_origin(annotated_type) is Union:
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_get_origin); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 127, __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_annotated_type};
    __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, 127, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  }
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_Union); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 127, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_5 = (__pyx_t_1 == __pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (__pyx_t_5) {
/* … */
  }
+128:         return type(None) in get_args(annotated_type)
    __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_get_args); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 128, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_3 = NULL;
    __pyx_t_4 = 0;
    #if CYTHON_UNPACK_METHODS
    if (unlikely(PyMethod_Check(__pyx_t_1))) {
      __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_1);
      if (likely(__pyx_t_3)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
        __Pyx_INCREF(__pyx_t_3);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_1, function);
        __pyx_t_4 = 1;
      }
    }
    #endif
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_v_annotated_type};
      __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_1, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4);
      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
      if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 128, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    }
    __pyx_t_5 = (__Pyx_PySequence_ContainsTF(((PyObject *)Py_TYPE(Py_None)), __pyx_t_2, Py_EQ)); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 128, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_r = __pyx_t_5;
    goto __pyx_L0;
+129:     return False
  __pyx_r = 0;
  goto __pyx_L0;
 130: 
+131: cdef object get_primary_key_field(object annotated_type, str name, object field_meta):
static PyObject *__pyx_f_9datamodel_10validation_get_primary_key_field(PyObject *__pyx_v_annotated_type, PyObject *__pyx_v_name, PyObject *__pyx_v_field_meta) {
  PyObject *__pyx_v_f = 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_XDECREF(__pyx_t_9);
  __Pyx_AddTraceback("datamodel.validation.get_primary_key_field", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_f);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+132:     for f in annotated_type.__dataclass_fields__.values():
  __pyx_t_2 = 0;
  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_annotated_type, __pyx_n_s_dataclass_fields); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 132, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  if (unlikely(__pyx_t_5 == Py_None)) {
    PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "values");
    __PYX_ERR(0, 132, __pyx_L1_error)
  }
  __pyx_t_6 = __Pyx_dict_iterator(__pyx_t_5, 0, __pyx_n_s_values, (&__pyx_t_3), (&__pyx_t_4)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 132, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_XDECREF(__pyx_t_1);
  __pyx_t_1 = __pyx_t_6;
  __pyx_t_6 = 0;
  while (1) {
    __pyx_t_7 = __Pyx_dict_iter_next(__pyx_t_1, __pyx_t_3, &__pyx_t_2, NULL, &__pyx_t_6, NULL, __pyx_t_4);
    if (unlikely(__pyx_t_7 == 0)) break;
    if (unlikely(__pyx_t_7 == -1)) __PYX_ERR(0, 132, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_XDECREF_SET(__pyx_v_f, __pyx_t_6);
    __pyx_t_6 = 0;
+133:         if name == f.name:
    __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_f, __pyx_n_s_name); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 133, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_t_8 = (__Pyx_PyUnicode_Equals(__pyx_v_name, __pyx_t_6, Py_EQ)); if (unlikely((__pyx_t_8 < 0))) __PYX_ERR(0, 133, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    if (__pyx_t_8) {
/* … */
    }
+134:             return f
      __Pyx_XDECREF(__pyx_r);
      __Pyx_INCREF(__pyx_v_f);
      __pyx_r = __pyx_v_f;
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      goto __pyx_L0;
+135:         if field_meta.get('alias') == f.name:
    __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_field_meta, __pyx_n_s_get); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 135, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_9 = NULL;
    __pyx_t_10 = 0;
    #if CYTHON_UNPACK_METHODS
    if (likely(PyMethod_Check(__pyx_t_5))) {
      __pyx_t_9 = PyMethod_GET_SELF(__pyx_t_5);
      if (likely(__pyx_t_9)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
        __Pyx_INCREF(__pyx_t_9);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_5, function);
        __pyx_t_10 = 1;
      }
    }
    #endif
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_9, __pyx_n_u_alias};
      __pyx_t_6 = __Pyx_PyObject_FastCall(__pyx_t_5, __pyx_callargs+1-__pyx_t_10, 1+__pyx_t_10);
      __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
      if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 135, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    }
    __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_f, __pyx_n_s_name); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 135, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_9 = PyObject_RichCompare(__pyx_t_6, __pyx_t_5, Py_EQ); __Pyx_XGOTREF(__pyx_t_9); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 135, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_t_8 = __Pyx_PyObject_IsTrue(__pyx_t_9); if (unlikely((__pyx_t_8 < 0))) __PYX_ERR(0, 135, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    if (__pyx_t_8) {
/* … */
    }
+136:             return f
      __Pyx_XDECREF(__pyx_r);
      __Pyx_INCREF(__pyx_v_f);
      __pyx_r = __pyx_v_f;
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      goto __pyx_L0;
+137:         if f.metadata.get('primary_key', False):
    __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_f, __pyx_n_s_metadata); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 137, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_n_s_get); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 137, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    __pyx_t_9 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_tuple__4, NULL); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 137, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_t_8 = __Pyx_PyObject_IsTrue(__pyx_t_9); if (unlikely((__pyx_t_8 < 0))) __PYX_ERR(0, 137, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    if (__pyx_t_8) {
/* … */
    }
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
/* … */
  __pyx_tuple__4 = PyTuple_Pack(2, __pyx_n_u_primary_key, Py_False); if (unlikely(!__pyx_tuple__4)) __PYX_ERR(0, 137, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__4);
  __Pyx_GIVEREF(__pyx_tuple__4);
+138:             return f
      __Pyx_XDECREF(__pyx_r);
      __Pyx_INCREF(__pyx_v_f);
      __pyx_r = __pyx_v_f;
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      goto __pyx_L0;
+139:     return None
  __Pyx_XDECREF(__pyx_r);
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
 140: 
+141: cdef dict _validate_union_field(
static PyObject *__pyx_f_9datamodel_10validation__validate_union_field(PyObject *__pyx_v_F, PyObject *__pyx_v_name, PyObject *__pyx_v_value, PyObject *__pyx_v_annotated_type) {
  CYTHON_UNUSED PyObject *__pyx_v_origin = 0;
  PyObject *__pyx_v_targs = 0;
  PyObject *__pyx_v_subtype_origin = 0;
  PyObject *__pyx_v_errors = 0;
  PyObject *__pyx_v_sub_error = 0;
  PyObject *__pyx_v_list_args = 0;
  PyObject *__pyx_v_inner_type = 0;
  PyObject *__pyx_v_item_errors = 0;
  PyObject *__pyx_v_dict_args = 0;
  PyObject *__pyx_v_key_type = 0;
  PyObject *__pyx_v_val_type = 0;
  PyObject *__pyx_v_subtype = NULL;
  PyObject *__pyx_v_idx = NULL;
  PyObject *__pyx_v_item = NULL;
  PyObject *__pyx_v_dict_errors = NULL;
  PyObject *__pyx_v_k = NULL;
  PyObject *__pyx_v_v = NULL;
  PyObject *__pyx_v_exc = NULL;
  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_XDECREF(__pyx_t_8);
  __Pyx_XDECREF(__pyx_t_16);
  __Pyx_XDECREF(__pyx_t_17);
  __Pyx_AddTraceback("datamodel.validation._validate_union_field", __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_subtype_origin);
  __Pyx_XDECREF(__pyx_v_errors);
  __Pyx_XDECREF(__pyx_v_sub_error);
  __Pyx_XDECREF(__pyx_v_list_args);
  __Pyx_XDECREF(__pyx_v_inner_type);
  __Pyx_XDECREF(__pyx_v_item_errors);
  __Pyx_XDECREF(__pyx_v_dict_args);
  __Pyx_XDECREF(__pyx_v_key_type);
  __Pyx_XDECREF(__pyx_v_val_type);
  __Pyx_XDECREF(__pyx_v_subtype);
  __Pyx_XDECREF(__pyx_v_idx);
  __Pyx_XDECREF(__pyx_v_item);
  __Pyx_XDECREF(__pyx_v_dict_errors);
  __Pyx_XDECREF(__pyx_v_k);
  __Pyx_XDECREF(__pyx_v_v);
  __Pyx_XDECREF(__pyx_v_exc);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 142:     object F,           # Field object (your internal representation)
 143:     str name,           # Field name
 144:     object value,       # Actual runtime value
 145:     object annotated_type  # The declared type (e.g. Union[str, List[str]], etc.)
 146: ):
 147:     """
 148:     Validates a complex or nested Union (including Optional and nested structures)
 149:     Returns {} if validation passes, or a dict describing the error.
 150:     """
+151:     cdef object origin = get_origin(annotated_type)
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_get_origin); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 151, __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_annotated_type};
    __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, 151, __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;
+152:     cdef tuple targs = get_args(annotated_type)
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_get_args); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 152, __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_annotated_type};
    __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, 152, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  }
  if (!(likely(PyTuple_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None) || __Pyx_RaiseUnexpectedTypeError("tuple", __pyx_t_1))) __PYX_ERR(0, 152, __pyx_L1_error)
  __pyx_v_targs = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
+153:     cdef object subtype_origin = None
  __Pyx_INCREF(Py_None);
  __pyx_v_subtype_origin = Py_None;
+154:     cdef list errors = []
  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 154, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_errors = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
 155:     cdef dict sub_error
+156:     cdef tuple list_args = ()
  __Pyx_INCREF(__pyx_empty_tuple);
  __pyx_v_list_args = __pyx_empty_tuple;
+157:     cdef object inner_type = None
  __Pyx_INCREF(Py_None);
  __pyx_v_inner_type = Py_None;
+158:     cdef list item_errors = []
  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 158, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_item_errors = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
+159:     cdef tuple dict_args = ()
  __Pyx_INCREF(__pyx_empty_tuple);
  __pyx_v_dict_args = __pyx_empty_tuple;
+160:     cdef object key_type = None
  __Pyx_INCREF(Py_None);
  __pyx_v_key_type = Py_None;
+161:     cdef object val_type = None
  __Pyx_INCREF(Py_None);
  __pyx_v_val_type = Py_None;
 162: 
 163:     # 1) Handle Optional (Union[..., None]) if present
+164:     if type(None) in targs and value is None:
  __pyx_t_6 = (__Pyx_PySequence_ContainsTF(((PyObject *)Py_TYPE(Py_None)), __pyx_v_targs, Py_EQ)); if (unlikely((__pyx_t_6 < 0))) __PYX_ERR(0, 164, __pyx_L1_error)
  if (__pyx_t_6) {
  } else {
    __pyx_t_5 = __pyx_t_6;
    goto __pyx_L4_bool_binop_done;
  }
  __pyx_t_6 = (__pyx_v_value == Py_None);
  __pyx_t_5 = __pyx_t_6;
  __pyx_L4_bool_binop_done:;
  if (__pyx_t_5) {
/* … */
  }
+165:         return {}  # Valid because it's None
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_1 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 165, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_r = ((PyObject*)__pyx_t_1);
    __pyx_t_1 = 0;
    goto __pyx_L0;
 166: 
 167:     # 2) Try each subtype in the Union
+168:     for subtype in targs:
  if (unlikely(__pyx_v_targs == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
    __PYX_ERR(0, 168, __pyx_L1_error)
  }
  __pyx_t_1 = __pyx_v_targs; __Pyx_INCREF(__pyx_t_1);
  __pyx_t_7 = 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, 168, __pyx_L1_error)
      #endif
      if (__pyx_t_7 >= __pyx_temp) break;
    }
    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    __pyx_t_2 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_7); __Pyx_INCREF(__pyx_t_2); __pyx_t_7++; if (unlikely((0 < 0))) __PYX_ERR(0, 168, __pyx_L1_error)
    #else
    __pyx_t_2 = __Pyx_PySequence_ITEM(__pyx_t_1, __pyx_t_7); __pyx_t_7++; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 168, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    #endif
    __Pyx_XDECREF_SET(__pyx_v_subtype, __pyx_t_2);
    __pyx_t_2 = 0;
/* … */
    __pyx_L6_continue:;
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 169:         # Skip NoneType if it isn't our value
+170:         if subtype is type(None):
    __pyx_t_5 = (__pyx_v_subtype == ((PyObject *)Py_TYPE(Py_None)));
    if (__pyx_t_5) {
/* … */
    }
+171:             continue
      goto __pyx_L6_continue;
 172: 
+173:         subtype_origin = get_origin(subtype)
    __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_get_origin); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 173, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_8 = NULL;
    __pyx_t_4 = 0;
    #if CYTHON_UNPACK_METHODS
    if (unlikely(PyMethod_Check(__pyx_t_3))) {
      __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_3);
      if (likely(__pyx_t_8)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
        __Pyx_INCREF(__pyx_t_8);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_3, function);
        __pyx_t_4 = 1;
      }
    }
    #endif
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_8, __pyx_v_subtype};
      __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4);
      __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
      if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 173, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    }
    __Pyx_DECREF_SET(__pyx_v_subtype_origin, __pyx_t_2);
    __pyx_t_2 = 0;
 174: 
+175:         try:
    {
      /*try:*/ {
/* … */
      }
      __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
      __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
      __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
      goto __pyx_L16_try_end;
      __pyx_L9_error:;
      __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_3); __pyx_t_3 = 0;
      __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
/* … */
      __pyx_L11_except_error:;
      __Pyx_XGIVEREF(__pyx_t_9);
      __Pyx_XGIVEREF(__pyx_t_10);
      __Pyx_XGIVEREF(__pyx_t_11);
      __Pyx_ExceptionReset(__pyx_t_9, __pyx_t_10, __pyx_t_11);
      goto __pyx_L1_error;
      __pyx_L13_try_return:;
      __Pyx_XGIVEREF(__pyx_t_9);
      __Pyx_XGIVEREF(__pyx_t_10);
      __Pyx_XGIVEREF(__pyx_t_11);
      __Pyx_ExceptionReset(__pyx_t_9, __pyx_t_10, __pyx_t_11);
      goto __pyx_L0;
      __pyx_L10_exception_handled:;
      __Pyx_XGIVEREF(__pyx_t_9);
      __Pyx_XGIVEREF(__pyx_t_10);
      __Pyx_XGIVEREF(__pyx_t_11);
      __Pyx_ExceptionReset(__pyx_t_9, __pyx_t_10, __pyx_t_11);
      __pyx_L16_try_end:;
    }
 176:             # 2a) If there's no origin, it's a simple or direct type (str, int, custom class, etc.)
+177:             if subtype_origin is None:
        __pyx_t_5 = (__pyx_v_subtype_origin == Py_None);
        if (__pyx_t_5) {
/* … */
          goto __pyx_L17;
        }
 178:                 # If it's just a normal type, check with isinstance
+179:                 if isinstance(value, subtype):
          __pyx_t_5 = PyObject_IsInstance(__pyx_v_value, __pyx_v_subtype); if (unlikely(__pyx_t_5 == ((int)-1))) __PYX_ERR(0, 179, __pyx_L9_error)
          if (__pyx_t_5) {
/* … */
          }
 180:                     # PASS: we found a valid subtype
+181:                     return {}
            __Pyx_XDECREF(__pyx_r);
            __pyx_t_2 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 181, __pyx_L9_error)
            __Pyx_GOTREF(__pyx_t_2);
            __pyx_r = ((PyObject*)__pyx_t_2);
            __pyx_t_2 = 0;
            __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
            goto __pyx_L13_try_return;
 182:                 # Not matching? We'll record an error & continue
+183:                 errors.append(f"Value is not instance of {subtype}")
          __pyx_t_2 = __Pyx_PyObject_FormatSimple(__pyx_v_subtype, __pyx_empty_unicode); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 183, __pyx_L9_error)
          __Pyx_GOTREF(__pyx_t_2);
          __pyx_t_3 = __Pyx_PyUnicode_Concat(__pyx_kp_u_Value_is_not_instance_of, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 183, __pyx_L9_error)
          __Pyx_GOTREF(__pyx_t_3);
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
          __pyx_t_12 = __Pyx_PyList_Append(__pyx_v_errors, __pyx_t_3); if (unlikely(__pyx_t_12 == ((int)-1))) __PYX_ERR(0, 183, __pyx_L9_error)
          __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 184: 
 185:             # 2b) If it's a nested Union, validate recursively
+186:             elif subtype_origin is Union:
        __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_Union); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 186, __pyx_L9_error)
        __Pyx_GOTREF(__pyx_t_3);
        __pyx_t_5 = (__pyx_v_subtype_origin == __pyx_t_3);
        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
        if (__pyx_t_5) {
/* … */
          goto __pyx_L17;
        }
+187:                 sub_error = _validate_union_field(F, name, value, subtype)
          __pyx_t_3 = __pyx_f_9datamodel_10validation__validate_union_field(__pyx_v_F, __pyx_v_name, __pyx_v_value, __pyx_v_subtype); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 187, __pyx_L9_error)
          __Pyx_GOTREF(__pyx_t_3);
          __Pyx_XDECREF_SET(__pyx_v_sub_error, ((PyObject*)__pyx_t_3));
          __pyx_t_3 = 0;
+188:                 if not sub_error:
          __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_v_sub_error); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 188, __pyx_L9_error)
          __pyx_t_6 = (!__pyx_t_5);
          if (__pyx_t_6) {
/* … */
          }
+189:                     return {}  # success
            __Pyx_XDECREF(__pyx_r);
            __pyx_t_3 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 189, __pyx_L9_error)
            __Pyx_GOTREF(__pyx_t_3);
            __pyx_r = ((PyObject*)__pyx_t_3);
            __pyx_t_3 = 0;
            __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
            goto __pyx_L13_try_return;
+190:                 errors.append(f"Nested union check failed for {subtype}: {sub_error}")
          __pyx_t_3 = PyTuple_New(4); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 190, __pyx_L9_error)
          __Pyx_GOTREF(__pyx_t_3);
          __pyx_t_13 = 0;
          __pyx_t_14 = 127;
          __Pyx_INCREF(__pyx_kp_u_Nested_union_check_failed_for);
          __pyx_t_13 += 30;
          __Pyx_GIVEREF(__pyx_kp_u_Nested_union_check_failed_for);
          PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_kp_u_Nested_union_check_failed_for);
          __pyx_t_2 = __Pyx_PyObject_FormatSimple(__pyx_v_subtype, __pyx_empty_unicode); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 190, __pyx_L9_error)
          __Pyx_GOTREF(__pyx_t_2);
          __pyx_t_14 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_2) > __pyx_t_14) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_2) : __pyx_t_14;
          __pyx_t_13 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_2);
          __Pyx_GIVEREF(__pyx_t_2);
          PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_2);
          __pyx_t_2 = 0;
          __Pyx_INCREF(__pyx_kp_u__5);
          __pyx_t_13 += 2;
          __Pyx_GIVEREF(__pyx_kp_u__5);
          PyTuple_SET_ITEM(__pyx_t_3, 2, __pyx_kp_u__5);
          __pyx_t_2 = __Pyx_PyObject_FormatSimple(__pyx_v_sub_error, __pyx_empty_unicode); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 190, __pyx_L9_error)
          __Pyx_GOTREF(__pyx_t_2);
          __pyx_t_14 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_2) > __pyx_t_14) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_2) : __pyx_t_14;
          __pyx_t_13 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_2);
          __Pyx_GIVEREF(__pyx_t_2);
          PyTuple_SET_ITEM(__pyx_t_3, 3, __pyx_t_2);
          __pyx_t_2 = 0;
          __pyx_t_2 = __Pyx_PyUnicode_Join(__pyx_t_3, 4, __pyx_t_13, __pyx_t_14); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 190, __pyx_L9_error)
          __Pyx_GOTREF(__pyx_t_2);
          __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
          __pyx_t_12 = __Pyx_PyList_Append(__pyx_v_errors, __pyx_t_2); if (unlikely(__pyx_t_12 == ((int)-1))) __PYX_ERR(0, 190, __pyx_L9_error)
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 191: 
 192:             # 2c) If it's a list origin, e.g. List[str]
+193:             elif subtype_origin is list:
        __pyx_t_6 = (__pyx_v_subtype_origin == ((PyObject *)(&PyList_Type)));
        if (__pyx_t_6) {
/* … */
          goto __pyx_L17;
        }
+194:                 list_args = get_args(subtype)
          __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_get_args); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 194, __pyx_L9_error)
          __Pyx_GOTREF(__pyx_t_3);
          __pyx_t_8 = NULL;
          __pyx_t_4 = 0;
          #if CYTHON_UNPACK_METHODS
          if (unlikely(PyMethod_Check(__pyx_t_3))) {
            __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_3);
            if (likely(__pyx_t_8)) {
              PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
              __Pyx_INCREF(__pyx_t_8);
              __Pyx_INCREF(function);
              __Pyx_DECREF_SET(__pyx_t_3, function);
              __pyx_t_4 = 1;
            }
          }
          #endif
          {
            PyObject *__pyx_callargs[2] = {__pyx_t_8, __pyx_v_subtype};
            __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4);
            __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
            if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 194, __pyx_L9_error)
            __Pyx_GOTREF(__pyx_t_2);
            __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
          }
          if (!(likely(PyTuple_CheckExact(__pyx_t_2))||((__pyx_t_2) == Py_None) || __Pyx_RaiseUnexpectedTypeError("tuple", __pyx_t_2))) __PYX_ERR(0, 194, __pyx_L9_error)
          __Pyx_DECREF_SET(__pyx_v_list_args, ((PyObject*)__pyx_t_2));
          __pyx_t_2 = 0;
+195:                 if not isinstance(value, list):
          __pyx_t_6 = PyList_Check(__pyx_v_value); 
          __pyx_t_5 = (!__pyx_t_6);
          if (__pyx_t_5) {
/* … */
            goto __pyx_L20;
          }
+196:                     errors.append(f"Expected list, got {type(value).__name__}")
            __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)Py_TYPE(__pyx_v_value)), __pyx_n_s_name_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 196, __pyx_L9_error)
            __Pyx_GOTREF(__pyx_t_2);
            __pyx_t_3 = __Pyx_PyObject_FormatSimple(__pyx_t_2, __pyx_empty_unicode); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 196, __pyx_L9_error)
            __Pyx_GOTREF(__pyx_t_3);
            __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
            __pyx_t_2 = __Pyx_PyUnicode_Concat(__pyx_kp_u_Expected_list_got, __pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 196, __pyx_L9_error)
            __Pyx_GOTREF(__pyx_t_2);
            __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
            __pyx_t_12 = __Pyx_PyList_Append(__pyx_v_errors, __pyx_t_2); if (unlikely(__pyx_t_12 == ((int)-1))) __PYX_ERR(0, 196, __pyx_L9_error)
            __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 197:                 else:
 198:                     # Validate each item if you like (e.g. ensure each item is str)
+199:                     inner_type = list_args[0]
          /*else*/ {
            if (unlikely(__pyx_v_list_args == Py_None)) {
              PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
              __PYX_ERR(0, 199, __pyx_L9_error)
            }
            __pyx_t_2 = __Pyx_GetItemInt_Tuple(__pyx_v_list_args, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 199, __pyx_L9_error)
            __Pyx_GOTREF(__pyx_t_2);
            __Pyx_DECREF_SET(__pyx_v_inner_type, __pyx_t_2);
            __pyx_t_2 = 0;
+200:                     item_errors = []
            __pyx_t_2 = PyList_New(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 200, __pyx_L9_error)
            __Pyx_GOTREF(__pyx_t_2);
            __Pyx_DECREF_SET(__pyx_v_item_errors, ((PyObject*)__pyx_t_2));
            __pyx_t_2 = 0;
+201:                     for idx, item in enumerate(value):
            __Pyx_INCREF(__pyx_int_0);
            __pyx_t_2 = __pyx_int_0;
            if (likely(PyList_CheckExact(__pyx_v_value)) || PyTuple_CheckExact(__pyx_v_value)) {
              __pyx_t_3 = __pyx_v_value; __Pyx_INCREF(__pyx_t_3);
              __pyx_t_13 = 0;
              __pyx_t_15 = NULL;
            } else {
              __pyx_t_13 = -1; __pyx_t_3 = PyObject_GetIter(__pyx_v_value); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 201, __pyx_L9_error)
              __Pyx_GOTREF(__pyx_t_3);
              __pyx_t_15 = __Pyx_PyObject_GetIterNextFunc(__pyx_t_3); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 201, __pyx_L9_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, 201, __pyx_L9_error)
                    #endif
                    if (__pyx_t_13 >= __pyx_temp) break;
                  }
                  #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
                  __pyx_t_8 = PyList_GET_ITEM(__pyx_t_3, __pyx_t_13); __Pyx_INCREF(__pyx_t_8); __pyx_t_13++; if (unlikely((0 < 0))) __PYX_ERR(0, 201, __pyx_L9_error)
                  #else
                  __pyx_t_8 = __Pyx_PySequence_ITEM(__pyx_t_3, __pyx_t_13); __pyx_t_13++; if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 201, __pyx_L9_error)
                  __Pyx_GOTREF(__pyx_t_8);
                  #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, 201, __pyx_L9_error)
                    #endif
                    if (__pyx_t_13 >= __pyx_temp) break;
                  }
                  #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
                  __pyx_t_8 = PyTuple_GET_ITEM(__pyx_t_3, __pyx_t_13); __Pyx_INCREF(__pyx_t_8); __pyx_t_13++; if (unlikely((0 < 0))) __PYX_ERR(0, 201, __pyx_L9_error)
                  #else
                  __pyx_t_8 = __Pyx_PySequence_ITEM(__pyx_t_3, __pyx_t_13); __pyx_t_13++; if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 201, __pyx_L9_error)
                  __Pyx_GOTREF(__pyx_t_8);
                  #endif
                }
              } else {
                __pyx_t_8 = __pyx_t_15(__pyx_t_3);
                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, 201, __pyx_L9_error)
                  }
                  break;
                }
                __Pyx_GOTREF(__pyx_t_8);
              }
              __Pyx_XDECREF_SET(__pyx_v_item, __pyx_t_8);
              __pyx_t_8 = 0;
              __Pyx_INCREF(__pyx_t_2);
              __Pyx_XDECREF_SET(__pyx_v_idx, __pyx_t_2);
              __pyx_t_8 = __Pyx_PyInt_AddObjC(__pyx_t_2, __pyx_int_1, 1, 0, 0); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 201, __pyx_L9_error)
              __Pyx_GOTREF(__pyx_t_8);
              __Pyx_DECREF(__pyx_t_2);
              __pyx_t_2 = __pyx_t_8;
              __pyx_t_8 = 0;
/* … */
            }
            __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
            __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 202:                         # For simple inner type
+203:                         if get_origin(inner_type) is None:
              __Pyx_GetModuleGlobalName(__pyx_t_16, __pyx_n_s_get_origin); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 203, __pyx_L9_error)
              __Pyx_GOTREF(__pyx_t_16);
              __pyx_t_17 = NULL;
              __pyx_t_4 = 0;
              #if CYTHON_UNPACK_METHODS
              if (unlikely(PyMethod_Check(__pyx_t_16))) {
                __pyx_t_17 = PyMethod_GET_SELF(__pyx_t_16);
                if (likely(__pyx_t_17)) {
                  PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_16);
                  __Pyx_INCREF(__pyx_t_17);
                  __Pyx_INCREF(function);
                  __Pyx_DECREF_SET(__pyx_t_16, function);
                  __pyx_t_4 = 1;
                }
              }
              #endif
              {
                PyObject *__pyx_callargs[2] = {__pyx_t_17, __pyx_v_inner_type};
                __pyx_t_8 = __Pyx_PyObject_FastCall(__pyx_t_16, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4);
                __Pyx_XDECREF(__pyx_t_17); __pyx_t_17 = 0;
                if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 203, __pyx_L9_error)
                __Pyx_GOTREF(__pyx_t_8);
                __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
              }
              __pyx_t_5 = (__pyx_t_8 == Py_None);
              __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
              if (__pyx_t_5) {
/* … */
                goto __pyx_L23;
              }
+204:                             if not isinstance(item, inner_type):
                __pyx_t_5 = PyObject_IsInstance(__pyx_v_item, __pyx_v_inner_type); if (unlikely(__pyx_t_5 == ((int)-1))) __PYX_ERR(0, 204, __pyx_L9_error)
                __pyx_t_6 = (!__pyx_t_5);
                if (__pyx_t_6) {
/* … */
                }
+205:                                 item_errors.append(f"Index {idx}: {type(item).__name__} != {inner_type}")
                  __pyx_t_8 = PyTuple_New(6); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 205, __pyx_L9_error)
                  __Pyx_GOTREF(__pyx_t_8);
                  __pyx_t_18 = 0;
                  __pyx_t_14 = 127;
                  __Pyx_INCREF(__pyx_kp_u_Index);
                  __pyx_t_18 += 6;
                  __Pyx_GIVEREF(__pyx_kp_u_Index);
                  PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_kp_u_Index);
                  __pyx_t_16 = __Pyx_PyObject_FormatSimple(__pyx_v_idx, __pyx_empty_unicode); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 205, __pyx_L9_error)
                  __Pyx_GOTREF(__pyx_t_16);
                  __pyx_t_14 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_16) > __pyx_t_14) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_16) : __pyx_t_14;
                  __pyx_t_18 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_16);
                  __Pyx_GIVEREF(__pyx_t_16);
                  PyTuple_SET_ITEM(__pyx_t_8, 1, __pyx_t_16);
                  __pyx_t_16 = 0;
                  __Pyx_INCREF(__pyx_kp_u__5);
                  __pyx_t_18 += 2;
                  __Pyx_GIVEREF(__pyx_kp_u__5);
                  PyTuple_SET_ITEM(__pyx_t_8, 2, __pyx_kp_u__5);
                  __pyx_t_16 = __Pyx_PyObject_GetAttrStr(((PyObject *)Py_TYPE(__pyx_v_item)), __pyx_n_s_name_2); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 205, __pyx_L9_error)
                  __Pyx_GOTREF(__pyx_t_16);
                  __pyx_t_17 = __Pyx_PyObject_FormatSimple(__pyx_t_16, __pyx_empty_unicode); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 205, __pyx_L9_error)
                  __Pyx_GOTREF(__pyx_t_17);
                  __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
                  __pyx_t_14 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_17) > __pyx_t_14) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_17) : __pyx_t_14;
                  __pyx_t_18 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_17);
                  __Pyx_GIVEREF(__pyx_t_17);
                  PyTuple_SET_ITEM(__pyx_t_8, 3, __pyx_t_17);
                  __pyx_t_17 = 0;
                  __Pyx_INCREF(__pyx_kp_u__6);
                  __pyx_t_18 += 4;
                  __Pyx_GIVEREF(__pyx_kp_u__6);
                  PyTuple_SET_ITEM(__pyx_t_8, 4, __pyx_kp_u__6);
                  __pyx_t_17 = __Pyx_PyObject_FormatSimple(__pyx_v_inner_type, __pyx_empty_unicode); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 205, __pyx_L9_error)
                  __Pyx_GOTREF(__pyx_t_17);
                  __pyx_t_14 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_17) > __pyx_t_14) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_17) : __pyx_t_14;
                  __pyx_t_18 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_17);
                  __Pyx_GIVEREF(__pyx_t_17);
                  PyTuple_SET_ITEM(__pyx_t_8, 5, __pyx_t_17);
                  __pyx_t_17 = 0;
                  __pyx_t_17 = __Pyx_PyUnicode_Join(__pyx_t_8, 6, __pyx_t_18, __pyx_t_14); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 205, __pyx_L9_error)
                  __Pyx_GOTREF(__pyx_t_17);
                  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
                  __pyx_t_12 = __Pyx_PyList_Append(__pyx_v_item_errors, __pyx_t_17); if (unlikely(__pyx_t_12 == ((int)-1))) __PYX_ERR(0, 205, __pyx_L9_error)
                  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
 206:                         else:
 207:                             # Possibly nested structure again
+208:                             sub_error = _validate_union_field(F, f"{name}[{idx}]", item, inner_type)
              /*else*/ {
                __pyx_t_17 = PyTuple_New(4); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 208, __pyx_L9_error)
                __Pyx_GOTREF(__pyx_t_17);
                __pyx_t_18 = 0;
                __pyx_t_14 = 127;
                __pyx_t_8 = __Pyx_PyUnicode_Unicode(__pyx_v_name); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 208, __pyx_L9_error)
                __Pyx_GOTREF(__pyx_t_8);
                __pyx_t_14 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_8) > __pyx_t_14) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_8) : __pyx_t_14;
                __pyx_t_18 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_8);
                __Pyx_GIVEREF(__pyx_t_8);
                PyTuple_SET_ITEM(__pyx_t_17, 0, __pyx_t_8);
                __pyx_t_8 = 0;
                __Pyx_INCREF(__pyx_kp_u__7);
                __pyx_t_18 += 1;
                __Pyx_GIVEREF(__pyx_kp_u__7);
                PyTuple_SET_ITEM(__pyx_t_17, 1, __pyx_kp_u__7);
                __pyx_t_8 = __Pyx_PyObject_FormatSimple(__pyx_v_idx, __pyx_empty_unicode); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 208, __pyx_L9_error)
                __Pyx_GOTREF(__pyx_t_8);
                __pyx_t_14 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_8) > __pyx_t_14) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_8) : __pyx_t_14;
                __pyx_t_18 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_8);
                __Pyx_GIVEREF(__pyx_t_8);
                PyTuple_SET_ITEM(__pyx_t_17, 2, __pyx_t_8);
                __pyx_t_8 = 0;
                __Pyx_INCREF(__pyx_kp_u__8);
                __pyx_t_18 += 1;
                __Pyx_GIVEREF(__pyx_kp_u__8);
                PyTuple_SET_ITEM(__pyx_t_17, 3, __pyx_kp_u__8);
                __pyx_t_8 = __Pyx_PyUnicode_Join(__pyx_t_17, 4, __pyx_t_18, __pyx_t_14); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 208, __pyx_L9_error)
                __Pyx_GOTREF(__pyx_t_8);
                __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
                __pyx_t_17 = __pyx_f_9datamodel_10validation__validate_union_field(__pyx_v_F, ((PyObject*)__pyx_t_8), __pyx_v_item, __pyx_v_inner_type); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 208, __pyx_L9_error)
                __Pyx_GOTREF(__pyx_t_17);
                __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
                __Pyx_XDECREF_SET(__pyx_v_sub_error, ((PyObject*)__pyx_t_17));
                __pyx_t_17 = 0;
+209:                             if sub_error:
                __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_v_sub_error); if (unlikely((__pyx_t_6 < 0))) __PYX_ERR(0, 209, __pyx_L9_error)
                if (__pyx_t_6) {
/* … */
                }
              }
              __pyx_L23:;
+210:                                 item_errors.append(str(sub_error))
                  __pyx_t_17 = __Pyx_PyObject_Unicode(__pyx_v_sub_error); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 210, __pyx_L9_error)
                  __Pyx_GOTREF(__pyx_t_17);
                  __pyx_t_12 = __Pyx_PyList_Append(__pyx_v_item_errors, __pyx_t_17); if (unlikely(__pyx_t_12 == ((int)-1))) __PYX_ERR(0, 210, __pyx_L9_error)
                  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
+211:                     if not item_errors:
            __pyx_t_6 = (PyList_GET_SIZE(__pyx_v_item_errors) != 0);
            __pyx_t_5 = (!__pyx_t_6);
            if (__pyx_t_5) {
/* … */
            }
+212:                         return {}  # All items validated
              __Pyx_XDECREF(__pyx_r);
              __pyx_t_2 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 212, __pyx_L9_error)
              __Pyx_GOTREF(__pyx_t_2);
              __pyx_r = ((PyObject*)__pyx_t_2);
              __pyx_t_2 = 0;
              __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
              goto __pyx_L13_try_return;
+213:                     errors.append(f"List item errors: {item_errors}")
            __pyx_t_2 = __Pyx_PyObject_FormatSimple(__pyx_v_item_errors, __pyx_empty_unicode); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 213, __pyx_L9_error)
            __Pyx_GOTREF(__pyx_t_2);
            __pyx_t_3 = __Pyx_PyUnicode_Concat(__pyx_kp_u_List_item_errors, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 213, __pyx_L9_error)
            __Pyx_GOTREF(__pyx_t_3);
            __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
            __pyx_t_12 = __Pyx_PyList_Append(__pyx_v_errors, __pyx_t_3); if (unlikely(__pyx_t_12 == ((int)-1))) __PYX_ERR(0, 213, __pyx_L9_error)
            __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
          }
          __pyx_L20:;
 214: 
 215:             # 2d) If it's a dict origin, e.g. Dict[str, int] or Dict[str, Union[int, ...]]
+216:             elif subtype_origin is dict:
        __pyx_t_5 = (__pyx_v_subtype_origin == ((PyObject *)(&PyDict_Type)));
        if (__pyx_t_5) {
/* … */
          goto __pyx_L17;
        }
+217:                 dict_args = get_args(subtype)  # (key_type, value_type)
          __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_get_args); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 217, __pyx_L9_error)
          __Pyx_GOTREF(__pyx_t_2);
          __pyx_t_17 = NULL;
          __pyx_t_4 = 0;
          #if CYTHON_UNPACK_METHODS
          if (unlikely(PyMethod_Check(__pyx_t_2))) {
            __pyx_t_17 = PyMethod_GET_SELF(__pyx_t_2);
            if (likely(__pyx_t_17)) {
              PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
              __Pyx_INCREF(__pyx_t_17);
              __Pyx_INCREF(function);
              __Pyx_DECREF_SET(__pyx_t_2, function);
              __pyx_t_4 = 1;
            }
          }
          #endif
          {
            PyObject *__pyx_callargs[2] = {__pyx_t_17, __pyx_v_subtype};
            __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4);
            __Pyx_XDECREF(__pyx_t_17); __pyx_t_17 = 0;
            if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 217, __pyx_L9_error)
            __Pyx_GOTREF(__pyx_t_3);
            __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
          }
          if (!(likely(PyTuple_CheckExact(__pyx_t_3))||((__pyx_t_3) == Py_None) || __Pyx_RaiseUnexpectedTypeError("tuple", __pyx_t_3))) __PYX_ERR(0, 217, __pyx_L9_error)
          __Pyx_DECREF_SET(__pyx_v_dict_args, ((PyObject*)__pyx_t_3));
          __pyx_t_3 = 0;
+218:                 key_type = dict_args[0]
          if (unlikely(__pyx_v_dict_args == Py_None)) {
            PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
            __PYX_ERR(0, 218, __pyx_L9_error)
          }
          __pyx_t_3 = __Pyx_GetItemInt_Tuple(__pyx_v_dict_args, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 218, __pyx_L9_error)
          __Pyx_GOTREF(__pyx_t_3);
          __Pyx_DECREF_SET(__pyx_v_key_type, __pyx_t_3);
          __pyx_t_3 = 0;
+219:                 val_type = dict_args[1]
          if (unlikely(__pyx_v_dict_args == Py_None)) {
            PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
            __PYX_ERR(0, 219, __pyx_L9_error)
          }
          __pyx_t_3 = __Pyx_GetItemInt_Tuple(__pyx_v_dict_args, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 219, __pyx_L9_error)
          __Pyx_GOTREF(__pyx_t_3);
          __Pyx_DECREF_SET(__pyx_v_val_type, __pyx_t_3);
          __pyx_t_3 = 0;
+220:                 if not isinstance(value, dict):
          __pyx_t_5 = PyDict_Check(__pyx_v_value); 
          __pyx_t_6 = (!__pyx_t_5);
          if (__pyx_t_6) {
/* … */
            goto __pyx_L28;
          }
+221:                     errors.append(f"Expected dict, got {type(value).__name__}")
            __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)Py_TYPE(__pyx_v_value)), __pyx_n_s_name_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 221, __pyx_L9_error)
            __Pyx_GOTREF(__pyx_t_3);
            __pyx_t_2 = __Pyx_PyObject_FormatSimple(__pyx_t_3, __pyx_empty_unicode); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 221, __pyx_L9_error)
            __Pyx_GOTREF(__pyx_t_2);
            __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
            __pyx_t_3 = __Pyx_PyUnicode_Concat(__pyx_kp_u_Expected_dict_got, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 221, __pyx_L9_error)
            __Pyx_GOTREF(__pyx_t_3);
            __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
            __pyx_t_12 = __Pyx_PyList_Append(__pyx_v_errors, __pyx_t_3); if (unlikely(__pyx_t_12 == ((int)-1))) __PYX_ERR(0, 221, __pyx_L9_error)
            __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 222:                 else:
+223:                     dict_errors = []
          /*else*/ {
            __pyx_t_3 = PyList_New(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 223, __pyx_L9_error)
            __Pyx_GOTREF(__pyx_t_3);
            __Pyx_XDECREF_SET(__pyx_v_dict_errors, ((PyObject*)__pyx_t_3));
            __pyx_t_3 = 0;
 224:                     # Validate each key, value
+225:                     for k, v in value.items():
            __pyx_t_13 = 0;
            if (unlikely(__pyx_v_value == Py_None)) {
              PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "items");
              __PYX_ERR(0, 225, __pyx_L9_error)
            }
            __pyx_t_2 = __Pyx_dict_iterator(__pyx_v_value, 0, __pyx_n_s_items, (&__pyx_t_18), (&__pyx_t_19)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 225, __pyx_L9_error)
            __Pyx_GOTREF(__pyx_t_2);
            __Pyx_XDECREF(__pyx_t_3);
            __pyx_t_3 = __pyx_t_2;
            __pyx_t_2 = 0;
            while (1) {
              __pyx_t_20 = __Pyx_dict_iter_next(__pyx_t_3, __pyx_t_18, &__pyx_t_13, &__pyx_t_2, &__pyx_t_17, NULL, __pyx_t_19);
              if (unlikely(__pyx_t_20 == 0)) break;
              if (unlikely(__pyx_t_20 == -1)) __PYX_ERR(0, 225, __pyx_L9_error)
              __Pyx_GOTREF(__pyx_t_2);
              __Pyx_GOTREF(__pyx_t_17);
              __Pyx_XDECREF_SET(__pyx_v_k, __pyx_t_2);
              __pyx_t_2 = 0;
              __Pyx_XDECREF_SET(__pyx_v_v, __pyx_t_17);
              __pyx_t_17 = 0;
 226:                         # Check key
+227:                         if not isinstance(k, key_type):
              __pyx_t_6 = PyObject_IsInstance(__pyx_v_k, __pyx_v_key_type); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(0, 227, __pyx_L9_error)
              __pyx_t_5 = (!__pyx_t_6);
              if (__pyx_t_5) {
/* … */
              }
+228:                             dict_errors.append(f"Key {k!r} type mismatch; expected {key_type}")
                __pyx_t_17 = PyTuple_New(4); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 228, __pyx_L9_error)
                __Pyx_GOTREF(__pyx_t_17);
                __pyx_t_21 = 0;
                __pyx_t_14 = 127;
                __Pyx_INCREF(__pyx_kp_u_Key);
                __pyx_t_21 += 4;
                __Pyx_GIVEREF(__pyx_kp_u_Key);
                PyTuple_SET_ITEM(__pyx_t_17, 0, __pyx_kp_u_Key);
                __pyx_t_2 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_v_k), __pyx_empty_unicode); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 228, __pyx_L9_error)
                __Pyx_GOTREF(__pyx_t_2);
                __pyx_t_14 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_2) > __pyx_t_14) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_2) : __pyx_t_14;
                __pyx_t_21 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_2);
                __Pyx_GIVEREF(__pyx_t_2);
                PyTuple_SET_ITEM(__pyx_t_17, 1, __pyx_t_2);
                __pyx_t_2 = 0;
                __Pyx_INCREF(__pyx_kp_u_type_mismatch_expected);
                __pyx_t_21 += 25;
                __Pyx_GIVEREF(__pyx_kp_u_type_mismatch_expected);
                PyTuple_SET_ITEM(__pyx_t_17, 2, __pyx_kp_u_type_mismatch_expected);
                __pyx_t_2 = __Pyx_PyObject_FormatSimple(__pyx_v_key_type, __pyx_empty_unicode); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 228, __pyx_L9_error)
                __Pyx_GOTREF(__pyx_t_2);
                __pyx_t_14 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_2) > __pyx_t_14) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_2) : __pyx_t_14;
                __pyx_t_21 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_2);
                __Pyx_GIVEREF(__pyx_t_2);
                PyTuple_SET_ITEM(__pyx_t_17, 3, __pyx_t_2);
                __pyx_t_2 = 0;
                __pyx_t_2 = __Pyx_PyUnicode_Join(__pyx_t_17, 4, __pyx_t_21, __pyx_t_14); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 228, __pyx_L9_error)
                __Pyx_GOTREF(__pyx_t_2);
                __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
                __pyx_t_12 = __Pyx_PyList_Append(__pyx_v_dict_errors, __pyx_t_2); if (unlikely(__pyx_t_12 == ((int)-1))) __PYX_ERR(0, 228, __pyx_L9_error)
                __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 229:                         # Then check value
+230:                         sub_error = _validate_union_field(F, f'{name}[\"{k}\"]', v, val_type)
              __pyx_t_2 = PyTuple_New(4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 230, __pyx_L9_error)
              __Pyx_GOTREF(__pyx_t_2);
              __pyx_t_21 = 0;
              __pyx_t_14 = 127;
              __pyx_t_17 = __Pyx_PyUnicode_Unicode(__pyx_v_name); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 230, __pyx_L9_error)
              __Pyx_GOTREF(__pyx_t_17);
              __pyx_t_14 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_17) > __pyx_t_14) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_17) : __pyx_t_14;
              __pyx_t_21 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_17);
              __Pyx_GIVEREF(__pyx_t_17);
              PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_17);
              __pyx_t_17 = 0;
              __Pyx_INCREF(__pyx_kp_u__9);
              __pyx_t_21 += 2;
              __Pyx_GIVEREF(__pyx_kp_u__9);
              PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_kp_u__9);
              __pyx_t_17 = __Pyx_PyObject_FormatSimple(__pyx_v_k, __pyx_empty_unicode); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 230, __pyx_L9_error)
              __Pyx_GOTREF(__pyx_t_17);
              __pyx_t_14 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_17) > __pyx_t_14) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_17) : __pyx_t_14;
              __pyx_t_21 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_17);
              __Pyx_GIVEREF(__pyx_t_17);
              PyTuple_SET_ITEM(__pyx_t_2, 2, __pyx_t_17);
              __pyx_t_17 = 0;
              __Pyx_INCREF(__pyx_kp_u__10);
              __pyx_t_21 += 2;
              __Pyx_GIVEREF(__pyx_kp_u__10);
              PyTuple_SET_ITEM(__pyx_t_2, 3, __pyx_kp_u__10);
              __pyx_t_17 = __Pyx_PyUnicode_Join(__pyx_t_2, 4, __pyx_t_21, __pyx_t_14); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 230, __pyx_L9_error)
              __Pyx_GOTREF(__pyx_t_17);
              __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
              __pyx_t_2 = __pyx_f_9datamodel_10validation__validate_union_field(__pyx_v_F, ((PyObject*)__pyx_t_17), __pyx_v_v, __pyx_v_val_type); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 230, __pyx_L9_error)
              __Pyx_GOTREF(__pyx_t_2);
              __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
              __Pyx_XDECREF_SET(__pyx_v_sub_error, ((PyObject*)__pyx_t_2));
              __pyx_t_2 = 0;
+231:                         if sub_error:
              __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_v_sub_error); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 231, __pyx_L9_error)
              if (__pyx_t_5) {
/* … */
              }
            }
            __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+232:                             dict_errors.append(f"For key={k}: {sub_error}")
                __pyx_t_2 = PyTuple_New(4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 232, __pyx_L9_error)
                __Pyx_GOTREF(__pyx_t_2);
                __pyx_t_21 = 0;
                __pyx_t_14 = 127;
                __Pyx_INCREF(__pyx_kp_u_For_key);
                __pyx_t_21 += 8;
                __Pyx_GIVEREF(__pyx_kp_u_For_key);
                PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_kp_u_For_key);
                __pyx_t_17 = __Pyx_PyObject_FormatSimple(__pyx_v_k, __pyx_empty_unicode); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 232, __pyx_L9_error)
                __Pyx_GOTREF(__pyx_t_17);
                __pyx_t_14 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_17) > __pyx_t_14) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_17) : __pyx_t_14;
                __pyx_t_21 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_17);
                __Pyx_GIVEREF(__pyx_t_17);
                PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_17);
                __pyx_t_17 = 0;
                __Pyx_INCREF(__pyx_kp_u__5);
                __pyx_t_21 += 2;
                __Pyx_GIVEREF(__pyx_kp_u__5);
                PyTuple_SET_ITEM(__pyx_t_2, 2, __pyx_kp_u__5);
                __pyx_t_17 = __Pyx_PyObject_FormatSimple(__pyx_v_sub_error, __pyx_empty_unicode); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 232, __pyx_L9_error)
                __Pyx_GOTREF(__pyx_t_17);
                __pyx_t_14 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_17) > __pyx_t_14) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_17) : __pyx_t_14;
                __pyx_t_21 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_17);
                __Pyx_GIVEREF(__pyx_t_17);
                PyTuple_SET_ITEM(__pyx_t_2, 3, __pyx_t_17);
                __pyx_t_17 = 0;
                __pyx_t_17 = __Pyx_PyUnicode_Join(__pyx_t_2, 4, __pyx_t_21, __pyx_t_14); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 232, __pyx_L9_error)
                __Pyx_GOTREF(__pyx_t_17);
                __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
                __pyx_t_12 = __Pyx_PyList_Append(__pyx_v_dict_errors, __pyx_t_17); if (unlikely(__pyx_t_12 == ((int)-1))) __PYX_ERR(0, 232, __pyx_L9_error)
                __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
+233:                     if not dict_errors:
            __pyx_t_5 = (PyList_GET_SIZE(__pyx_v_dict_errors) != 0);
            __pyx_t_6 = (!__pyx_t_5);
            if (__pyx_t_6) {
/* … */
            }
+234:                         return {}  # success
              __Pyx_XDECREF(__pyx_r);
              __pyx_t_3 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 234, __pyx_L9_error)
              __Pyx_GOTREF(__pyx_t_3);
              __pyx_r = ((PyObject*)__pyx_t_3);
              __pyx_t_3 = 0;
              __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
              goto __pyx_L13_try_return;
+235:                     errors.append(f"Dict item errors: {dict_errors}")
            __pyx_t_3 = __Pyx_PyObject_FormatSimple(__pyx_v_dict_errors, __pyx_empty_unicode); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 235, __pyx_L9_error)
            __Pyx_GOTREF(__pyx_t_3);
            __pyx_t_17 = __Pyx_PyUnicode_Concat(__pyx_kp_u_Dict_item_errors, __pyx_t_3); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 235, __pyx_L9_error)
            __Pyx_GOTREF(__pyx_t_17);
            __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
            __pyx_t_12 = __Pyx_PyList_Append(__pyx_v_errors, __pyx_t_17); if (unlikely(__pyx_t_12 == ((int)-1))) __PYX_ERR(0, 235, __pyx_L9_error)
            __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
          }
          __pyx_L28:;
 236: 
 237:             else:
 238:                 # If you have other complex type origins (tuple, etc.), handle them similarly
+239:                 errors.append(f"Unhandled type origin: {subtype_origin} for subtype={subtype}")
        /*else*/ {
          __pyx_t_17 = PyTuple_New(4); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 239, __pyx_L9_error)
          __Pyx_GOTREF(__pyx_t_17);
          __pyx_t_18 = 0;
          __pyx_t_14 = 127;
          __Pyx_INCREF(__pyx_kp_u_Unhandled_type_origin);
          __pyx_t_18 += 23;
          __Pyx_GIVEREF(__pyx_kp_u_Unhandled_type_origin);
          PyTuple_SET_ITEM(__pyx_t_17, 0, __pyx_kp_u_Unhandled_type_origin);
          __pyx_t_3 = __Pyx_PyObject_FormatSimple(__pyx_v_subtype_origin, __pyx_empty_unicode); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 239, __pyx_L9_error)
          __Pyx_GOTREF(__pyx_t_3);
          __pyx_t_14 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_3) > __pyx_t_14) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_3) : __pyx_t_14;
          __pyx_t_18 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_3);
          __Pyx_GIVEREF(__pyx_t_3);
          PyTuple_SET_ITEM(__pyx_t_17, 1, __pyx_t_3);
          __pyx_t_3 = 0;
          __Pyx_INCREF(__pyx_kp_u_for_subtype);
          __pyx_t_18 += 13;
          __Pyx_GIVEREF(__pyx_kp_u_for_subtype);
          PyTuple_SET_ITEM(__pyx_t_17, 2, __pyx_kp_u_for_subtype);
          __pyx_t_3 = __Pyx_PyObject_FormatSimple(__pyx_v_subtype, __pyx_empty_unicode); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 239, __pyx_L9_error)
          __Pyx_GOTREF(__pyx_t_3);
          __pyx_t_14 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_3) > __pyx_t_14) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_3) : __pyx_t_14;
          __pyx_t_18 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_3);
          __Pyx_GIVEREF(__pyx_t_3);
          PyTuple_SET_ITEM(__pyx_t_17, 3, __pyx_t_3);
          __pyx_t_3 = 0;
          __pyx_t_3 = __Pyx_PyUnicode_Join(__pyx_t_17, 4, __pyx_t_18, __pyx_t_14); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 239, __pyx_L9_error)
          __Pyx_GOTREF(__pyx_t_3);
          __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
          __pyx_t_12 = __Pyx_PyList_Append(__pyx_v_errors, __pyx_t_3); if (unlikely(__pyx_t_12 == ((int)-1))) __PYX_ERR(0, 239, __pyx_L9_error)
          __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
        }
        __pyx_L17:;
 240: 
+241:         except Exception as exc:
      __pyx_t_19 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(&((PyTypeObject*)PyExc_Exception)[0])));
      if (__pyx_t_19) {
        __Pyx_AddTraceback("datamodel.validation._validate_union_field", __pyx_clineno, __pyx_lineno, __pyx_filename);
        if (__Pyx_GetException(&__pyx_t_3, &__pyx_t_17, &__pyx_t_2) < 0) __PYX_ERR(0, 241, __pyx_L11_except_error)
        __Pyx_XGOTREF(__pyx_t_3);
        __Pyx_XGOTREF(__pyx_t_17);
        __Pyx_XGOTREF(__pyx_t_2);
        __Pyx_INCREF(__pyx_t_17);
        __pyx_v_exc = __pyx_t_17;
        /*try:*/ {
/* … */
        /*finally:*/ {
          /*normal exit:*/{
            __Pyx_DECREF(__pyx_v_exc); __pyx_v_exc = 0;
            goto __pyx_L40;
          }
          __pyx_L39_error:;
          /*exception exit:*/{
            __Pyx_PyThreadState_declare
            __Pyx_PyThreadState_assign
            __pyx_t_23 = 0; __pyx_t_24 = 0; __pyx_t_25 = 0; __pyx_t_26 = 0; __pyx_t_27 = 0; __pyx_t_28 = 0;
            __Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0;
            __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
            if (PY_MAJOR_VERSION >= 3) __Pyx_ExceptionSwap(&__pyx_t_26, &__pyx_t_27, &__pyx_t_28);
            if ((PY_MAJOR_VERSION < 3) || unlikely(__Pyx_GetException(&__pyx_t_23, &__pyx_t_24, &__pyx_t_25) < 0)) __Pyx_ErrFetch(&__pyx_t_23, &__pyx_t_24, &__pyx_t_25);
            __Pyx_XGOTREF(__pyx_t_23);
            __Pyx_XGOTREF(__pyx_t_24);
            __Pyx_XGOTREF(__pyx_t_25);
            __Pyx_XGOTREF(__pyx_t_26);
            __Pyx_XGOTREF(__pyx_t_27);
            __Pyx_XGOTREF(__pyx_t_28);
            __pyx_t_19 = __pyx_lineno; __pyx_t_20 = __pyx_clineno; __pyx_t_22 = __pyx_filename;
            {
              __Pyx_DECREF(__pyx_v_exc); __pyx_v_exc = 0;
            }
            if (PY_MAJOR_VERSION >= 3) {
              __Pyx_XGIVEREF(__pyx_t_26);
              __Pyx_XGIVEREF(__pyx_t_27);
              __Pyx_XGIVEREF(__pyx_t_28);
              __Pyx_ExceptionReset(__pyx_t_26, __pyx_t_27, __pyx_t_28);
            }
            __Pyx_XGIVEREF(__pyx_t_23);
            __Pyx_XGIVEREF(__pyx_t_24);
            __Pyx_XGIVEREF(__pyx_t_25);
            __Pyx_ErrRestore(__pyx_t_23, __pyx_t_24, __pyx_t_25);
            __pyx_t_23 = 0; __pyx_t_24 = 0; __pyx_t_25 = 0; __pyx_t_26 = 0; __pyx_t_27 = 0; __pyx_t_28 = 0;
            __pyx_lineno = __pyx_t_19; __pyx_clineno = __pyx_t_20; __pyx_filename = __pyx_t_22;
            goto __pyx_L11_except_error;
          }
          __pyx_L40:;
        }
        __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
        __Pyx_XDECREF(__pyx_t_17); __pyx_t_17 = 0;
        __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
        goto __pyx_L10_exception_handled;
      }
      goto __pyx_L11_except_error;
+242:             errors.append(f"Exception in subtype {subtype}: {exc}")
          __pyx_t_8 = PyTuple_New(4); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 242, __pyx_L39_error)
          __Pyx_GOTREF(__pyx_t_8);
          __pyx_t_18 = 0;
          __pyx_t_14 = 127;
          __Pyx_INCREF(__pyx_kp_u_Exception_in_subtype);
          __pyx_t_18 += 21;
          __Pyx_GIVEREF(__pyx_kp_u_Exception_in_subtype);
          PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_kp_u_Exception_in_subtype);
          __pyx_t_16 = __Pyx_PyObject_FormatSimple(__pyx_v_subtype, __pyx_empty_unicode); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 242, __pyx_L39_error)
          __Pyx_GOTREF(__pyx_t_16);
          __pyx_t_14 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_16) > __pyx_t_14) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_16) : __pyx_t_14;
          __pyx_t_18 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_16);
          __Pyx_GIVEREF(__pyx_t_16);
          PyTuple_SET_ITEM(__pyx_t_8, 1, __pyx_t_16);
          __pyx_t_16 = 0;
          __Pyx_INCREF(__pyx_kp_u__5);
          __pyx_t_18 += 2;
          __Pyx_GIVEREF(__pyx_kp_u__5);
          PyTuple_SET_ITEM(__pyx_t_8, 2, __pyx_kp_u__5);
          __pyx_t_16 = __Pyx_PyObject_FormatSimple(__pyx_v_exc, __pyx_empty_unicode); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 242, __pyx_L39_error)
          __Pyx_GOTREF(__pyx_t_16);
          __pyx_t_14 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_16) > __pyx_t_14) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_16) : __pyx_t_14;
          __pyx_t_18 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_16);
          __Pyx_GIVEREF(__pyx_t_16);
          PyTuple_SET_ITEM(__pyx_t_8, 3, __pyx_t_16);
          __pyx_t_16 = 0;
          __pyx_t_16 = __Pyx_PyUnicode_Join(__pyx_t_8, 4, __pyx_t_18, __pyx_t_14); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 242, __pyx_L39_error)
          __Pyx_GOTREF(__pyx_t_16);
          __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
          __pyx_t_12 = __Pyx_PyList_Append(__pyx_v_errors, __pyx_t_16); if (unlikely(__pyx_t_12 == ((int)-1))) __PYX_ERR(0, 242, __pyx_L39_error)
          __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
        }
 243: 
 244:     # 3) If no subtype matched, create an error record
+245:     return _create_error(
  __Pyx_XDECREF(__pyx_r);
/* … */
  __pyx_t_29.__pyx_n = 1;
  __pyx_t_29.exception = __pyx_v_errors;
  __pyx_t_1 = __pyx_f_9datamodel_10validation__create_error(__pyx_v_name, __pyx_v_value, __pyx_t_2, ((PyObject *)Py_TYPE(__pyx_v_value)), __pyx_v_annotated_type, &__pyx_t_29); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 245, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_r = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
  goto __pyx_L0;
 246:         name,
 247:         value,
+248:         f"Invalid type for {annotated_type}.{name}, expected one of {targs}",
  __pyx_t_1 = PyTuple_New(6); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 248, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_7 = 0;
  __pyx_t_14 = 127;
  __Pyx_INCREF(__pyx_kp_u_Invalid_type_for);
  __pyx_t_7 += 17;
  __Pyx_GIVEREF(__pyx_kp_u_Invalid_type_for);
  PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_kp_u_Invalid_type_for);
  __pyx_t_2 = __Pyx_PyObject_FormatSimple(__pyx_v_annotated_type, __pyx_empty_unicode); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 248, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_14 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_2) > __pyx_t_14) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_2) : __pyx_t_14;
  __pyx_t_7 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_2);
  __Pyx_GIVEREF(__pyx_t_2);
  PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_t_2);
  __pyx_t_2 = 0;
  __Pyx_INCREF(__pyx_kp_u__11);
  __pyx_t_7 += 1;
  __Pyx_GIVEREF(__pyx_kp_u__11);
  PyTuple_SET_ITEM(__pyx_t_1, 2, __pyx_kp_u__11);
  __pyx_t_2 = __Pyx_PyUnicode_Unicode(__pyx_v_name); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 248, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_14 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_2) > __pyx_t_14) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_2) : __pyx_t_14;
  __pyx_t_7 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_2);
  __Pyx_GIVEREF(__pyx_t_2);
  PyTuple_SET_ITEM(__pyx_t_1, 3, __pyx_t_2);
  __pyx_t_2 = 0;
  __Pyx_INCREF(__pyx_kp_u_expected_one_of);
  __pyx_t_7 += 18;
  __Pyx_GIVEREF(__pyx_kp_u_expected_one_of);
  PyTuple_SET_ITEM(__pyx_t_1, 4, __pyx_kp_u_expected_one_of);
  __pyx_t_2 = __Pyx_PyObject_FormatSimple(__pyx_v_targs, __pyx_empty_unicode); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 248, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_14 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_2) > __pyx_t_14) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_2) : __pyx_t_14;
  __pyx_t_7 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_2);
  __Pyx_GIVEREF(__pyx_t_2);
  PyTuple_SET_ITEM(__pyx_t_1, 5, __pyx_t_2);
  __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_PyUnicode_Join(__pyx_t_1, 6, __pyx_t_7, __pyx_t_14); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 248, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 249:         type(value),
 250:         annotated_type,
 251:         errors
 252:     )
 253: 
+254: cpdef dict _validation(
static PyObject *__pyx_pw_9datamodel_10validation_3_validation(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_10validation__validation(PyObject *__pyx_v_F, PyObject *__pyx_v_name, PyObject *__pyx_v_value, PyObject *__pyx_v_annotated_type, PyObject *__pyx_v_val_type, PyObject *__pyx_v_field_type, CYTHON_UNUSED int __pyx_skip_dispatch, struct __pyx_opt_args_9datamodel_10validation__validation *__pyx_optional_args) {
/* … */
  /* 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_14);
  __Pyx_XDECREF(__pyx_t_16);
  __Pyx_XDECREF(__pyx_t_17);
  __Pyx_AddTraceback("datamodel.validation._validation", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_field_meta);
  __Pyx_XDECREF(__pyx_v_error);
  __Pyx_XDECREF(__pyx_v_result);
  __Pyx_XDECREF(__pyx_v_msg);
  __Pyx_XDECREF(__pyx_v_i);
  __Pyx_XDECREF(__pyx_v_elem);
  __Pyx_XDECREF(__pyx_v_inner_types);
  __Pyx_XDECREF(__pyx_v_t);
  __Pyx_XDECREF(__pyx_v_base_type);
  __Pyx_XDECREF(__pyx_v_field);
  __Pyx_XDECREF(__pyx_v_e);
  __Pyx_XDECREF(__pyx_v_ftype);
  __Pyx_XDECREF(__pyx_v_pk_field);
  __Pyx_XDECREF(__pyx_v_pk_type);
  __Pyx_XDECREF(__pyx_v_fn);
  __Pyx_XDECREF(__pyx_7genexpr__pyx_v_t);
  __Pyx_XDECREF(__pyx_v_annotated_type);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_9datamodel_10validation_3_validation(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_10validation_2_validation, "_validation(F, unicode name, value, annotated_type, val_type, unicode field_type, bool as_objects=False) -> dict");
static PyMethodDef __pyx_mdef_9datamodel_10validation_3_validation = {"_validation", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9datamodel_10validation_3_validation, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_9datamodel_10validation_2_validation};
static PyObject *__pyx_pw_9datamodel_10validation_3_validation(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_F = 0;
  PyObject *__pyx_v_name = 0;
  PyObject *__pyx_v_value = 0;
  PyObject *__pyx_v_annotated_type = 0;
  PyObject *__pyx_v_val_type = 0;
  PyObject *__pyx_v_field_type = 0;
  int __pyx_v_as_objects;
  #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("_validation (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_F,&__pyx_n_s_name,&__pyx_n_s_value,&__pyx_n_s_annotated_type,&__pyx_n_s_val_type,&__pyx_n_s_field_type,&__pyx_n_s_as_objects,0};
  PyObject* values[7] = {0,0,0,0,0,0,0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  7: values[6] = __Pyx_Arg_FASTCALL(__pyx_args, 6);
        CYTHON_FALLTHROUGH;
        case  6: values[5] = __Pyx_Arg_FASTCALL(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        case  5: values[4] = __Pyx_Arg_FASTCALL(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        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_F)) != 0)) {
          (void)__Pyx_Arg_NewRef_FASTCALL(values[0]);
          kw_args--;
        }
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 254, __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_name)) != 0)) {
          (void)__Pyx_Arg_NewRef_FASTCALL(values[1]);
          kw_args--;
        }
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 254, __pyx_L3_error)
        else {
          __Pyx_RaiseArgtupleInvalid("_validation", 0, 6, 7, 1); __PYX_ERR(0, 254, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_value)) != 0)) {
          (void)__Pyx_Arg_NewRef_FASTCALL(values[2]);
          kw_args--;
        }
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 254, __pyx_L3_error)
        else {
          __Pyx_RaiseArgtupleInvalid("_validation", 0, 6, 7, 2); __PYX_ERR(0, 254, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (likely((values[3] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_annotated_type)) != 0)) {
          (void)__Pyx_Arg_NewRef_FASTCALL(values[3]);
          kw_args--;
        }
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 254, __pyx_L3_error)
        else {
          __Pyx_RaiseArgtupleInvalid("_validation", 0, 6, 7, 3); __PYX_ERR(0, 254, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  4:
        if (likely((values[4] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_val_type)) != 0)) {
          (void)__Pyx_Arg_NewRef_FASTCALL(values[4]);
          kw_args--;
        }
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 254, __pyx_L3_error)
        else {
          __Pyx_RaiseArgtupleInvalid("_validation", 0, 6, 7, 4); __PYX_ERR(0, 254, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  5:
        if (likely((values[5] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_field_type)) != 0)) {
          (void)__Pyx_Arg_NewRef_FASTCALL(values[5]);
          kw_args--;
        }
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 254, __pyx_L3_error)
        else {
          __Pyx_RaiseArgtupleInvalid("_validation", 0, 6, 7, 5); __PYX_ERR(0, 254, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  6:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_as_objects);
          if (value) { values[6] = __Pyx_Arg_NewRef_FASTCALL(value); kw_args--; }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 254, __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, "_validation") < 0)) __PYX_ERR(0, 254, __pyx_L3_error)
      }
    } else {
      switch (__pyx_nargs) {
        case  7: values[6] = __Pyx_Arg_FASTCALL(__pyx_args, 6);
        CYTHON_FALLTHROUGH;
        case  6: values[5] = __Pyx_Arg_FASTCALL(__pyx_args, 5);
        values[4] = __Pyx_Arg_FASTCALL(__pyx_args, 4);
        values[3] = __Pyx_Arg_FASTCALL(__pyx_args, 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_F = values[0];
    __pyx_v_name = ((PyObject*)values[1]);
    __pyx_v_value = values[2];
    __pyx_v_annotated_type = values[3];
    __pyx_v_val_type = values[4];
    __pyx_v_field_type = ((PyObject*)values[5]);
    if (values[6]) {
      __pyx_v_as_objects = __Pyx_PyObject_IsTrue(values[6]); if (unlikely((__pyx_v_as_objects == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 261, __pyx_L3_error)
    } else {
/* … */
  /* 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_10validation_2_validation(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_F, PyObject *__pyx_v_name, PyObject *__pyx_v_value, PyObject *__pyx_v_annotated_type, PyObject *__pyx_v_val_type, PyObject *__pyx_v_field_type, int __pyx_v_as_objects) {
  PyObject *__pyx_r = NULL;
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2.__pyx_n = 1;
  __pyx_t_2.as_objects = __pyx_v_as_objects;
  __pyx_t_1 = __pyx_f_9datamodel_10validation__validation(__pyx_v_F, __pyx_v_name, __pyx_v_value, __pyx_v_annotated_type, __pyx_v_val_type, __pyx_v_field_type, 0, &__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 254, __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.validation._validation", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__19 = PyTuple_Pack(7, __pyx_n_s_F, __pyx_n_s_name, __pyx_n_s_value, __pyx_n_s_annotated_type, __pyx_n_s_val_type, __pyx_n_s_field_type, __pyx_n_s_as_objects); if (unlikely(!__pyx_tuple__19)) __PYX_ERR(0, 254, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__19);
  __Pyx_GIVEREF(__pyx_tuple__19);
  __pyx_codeobj__20 = (PyObject*)__Pyx_PyCode_New(7, 0, 0, 7, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__19, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_datamodel_validation_pyx, __pyx_n_s_validation, 254, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__20)) __PYX_ERR(0, 254, __pyx_L1_error)
/* … */
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_9datamodel_10validation_3_validation, 0, __pyx_n_s_validation, NULL, __pyx_n_s_datamodel_validation, __pyx_d, ((PyObject *)__pyx_codeobj__20)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 254, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_2, __pyx_tuple__21);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_validation, __pyx_t_2) < 0) __PYX_ERR(0, 254, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_tuple__21 = PyTuple_Pack(1, Py_False); if (unlikely(!__pyx_tuple__21)) __PYX_ERR(0, 254, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__21);
  __Pyx_GIVEREF(__pyx_tuple__21);
/* … */
struct __pyx_opt_args_9datamodel_10validation__validation {
  int __pyx_n;
  int as_objects;
};
 255:     object F,
 256:     str name,
 257:     object value,
 258:     object annotated_type,
 259:     object val_type,
 260:     str field_type,
+261:     bint as_objects=False
  int __pyx_v_as_objects = ((int)0);
  int __pyx_v__valid;
  PyObject *__pyx_v_field_meta = 0;
  PyObject *__pyx_v_error = 0;
  PyObject *__pyx_v_result = NULL;
  PyObject *__pyx_v_msg = NULL;
  PyObject *__pyx_v_i = NULL;
  PyObject *__pyx_v_elem = NULL;
  PyObject *__pyx_v_inner_types = NULL;
  PyObject *__pyx_v_t = NULL;
  PyObject *__pyx_v_base_type = NULL;
  PyObject *__pyx_v_field = NULL;
  PyObject *__pyx_v_e = NULL;
  PyObject *__pyx_v_ftype = NULL;
  PyObject *__pyx_v_pk_field = NULL;
  PyObject *__pyx_v_pk_type = NULL;
  bool __pyx_v_instance;
  PyObject *__pyx_v_fn = NULL;
  PyObject *__pyx_7genexpr__pyx_v_t = 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;
    }
  }
  __Pyx_INCREF(__pyx_v_annotated_type);
/* … */
      __pyx_v_as_objects = ((int)0);
    }
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("_validation", 0, 6, 7, __pyx_nargs); __PYX_ERR(0, 254, __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.validation._validation", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_name), (&PyUnicode_Type), 1, "name", 1))) __PYX_ERR(0, 256, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_field_type), (&PyUnicode_Type), 1, "field_type", 1))) __PYX_ERR(0, 260, __pyx_L1_error)
  __pyx_r = __pyx_pf_9datamodel_10validation_2_validation(__pyx_self, __pyx_v_F, __pyx_v_name, __pyx_v_value, __pyx_v_annotated_type, __pyx_v_val_type, __pyx_v_field_type, __pyx_v_as_objects);
 262: ):
+263:     cdef bint _valid = False
  __pyx_v__valid = 0;
+264:     cdef object field_meta = F.metadata
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_F, __pyx_n_s_metadata); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 264, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_field_meta = __pyx_t_1;
  __pyx_t_1 = 0;
+265:     cdef dict error = {}
  __pyx_t_1 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 265, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_error = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
 266: 
+267:     if not annotated_type:
  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_annotated_type); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 267, __pyx_L1_error)
  __pyx_t_3 = (!__pyx_t_2);
  if (__pyx_t_3) {
/* … */
    goto __pyx_L3;
  }
+268:         annotated_type = F.type
    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_F, __pyx_n_s_type_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 268, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF_SET(__pyx_v_annotated_type, __pyx_t_1);
    __pyx_t_1 = 0;
+269:     elif isinstance(annotated_type, Field):
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_Field_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 269, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_3 = PyObject_IsInstance(__pyx_v_annotated_type, __pyx_t_1); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(0, 269, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (__pyx_t_3) {
/* … */
  }
  __pyx_L3:;
+270:         annotated_type = annotated_type.type
    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_annotated_type, __pyx_n_s_type_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 270, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF_SET(__pyx_v_annotated_type, __pyx_t_1);
    __pyx_t_1 = 0;
 271: 
+272:     if fn := F.metadata.get('validator', None):
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_F, __pyx_n_s_metadata); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 272, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_get); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 272, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_tuple__12, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 272, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_v_fn = __pyx_t_1;
  __Pyx_INCREF(__pyx_t_1);
  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_3 < 0))) __PYX_ERR(0, 272, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (__pyx_t_3) {
/* … */
  }
/* … */
  __pyx_tuple__12 = PyTuple_Pack(2, __pyx_n_u_validator, Py_None); if (unlikely(!__pyx_tuple__12)) __PYX_ERR(0, 272, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__12);
  __Pyx_GIVEREF(__pyx_tuple__12);
+273:         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_L10_try_end;
      __pyx_L5_error:;
      __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 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_L10_try_end:;
    }
+274:             result = fn(F, value, annotated_type, val_type)
        __Pyx_INCREF(__pyx_v_fn);
        __pyx_t_4 = __pyx_v_fn; __pyx_t_8 = NULL;
        __pyx_t_9 = 0;
        #if CYTHON_UNPACK_METHODS
        if (unlikely(PyMethod_Check(__pyx_t_4))) {
          __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_4);
          if (likely(__pyx_t_8)) {
            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
            __Pyx_INCREF(__pyx_t_8);
            __Pyx_INCREF(function);
            __Pyx_DECREF_SET(__pyx_t_4, function);
            __pyx_t_9 = 1;
          }
        }
        #endif
        {
          PyObject *__pyx_callargs[5] = {__pyx_t_8, __pyx_v_F, __pyx_v_value, __pyx_v_annotated_type, __pyx_v_val_type};
          __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_4, __pyx_callargs+1-__pyx_t_9, 4+__pyx_t_9);
          __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
          if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 274, __pyx_L5_error)
          __Pyx_GOTREF(__pyx_t_1);
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
        }
        __pyx_v_result = __pyx_t_1;
        __pyx_t_1 = 0;
+275:             if result is False:
        __pyx_t_3 = (__pyx_v_result == Py_False);
        if (__pyx_t_3) {
/* … */
        }
+276:                 msg = f"Validation failed for *{name}*: {value} with result: {result}"
          __pyx_t_1 = PyTuple_New(6); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 276, __pyx_L5_error)
          __Pyx_GOTREF(__pyx_t_1);
          __pyx_t_10 = 0;
          __pyx_t_11 = 127;
          __Pyx_INCREF(__pyx_kp_u_Validation_failed_for);
          __pyx_t_10 += 23;
          __Pyx_GIVEREF(__pyx_kp_u_Validation_failed_for);
          PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_kp_u_Validation_failed_for);
          __pyx_t_4 = __Pyx_PyUnicode_Unicode(__pyx_v_name); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 276, __pyx_L5_error)
          __Pyx_GOTREF(__pyx_t_4);
          __pyx_t_11 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_4) > __pyx_t_11) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_4) : __pyx_t_11;
          __pyx_t_10 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_4);
          __Pyx_GIVEREF(__pyx_t_4);
          PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_t_4);
          __pyx_t_4 = 0;
          __Pyx_INCREF(__pyx_kp_u__13);
          __pyx_t_10 += 3;
          __Pyx_GIVEREF(__pyx_kp_u__13);
          PyTuple_SET_ITEM(__pyx_t_1, 2, __pyx_kp_u__13);
          __pyx_t_4 = __Pyx_PyObject_FormatSimple(__pyx_v_value, __pyx_empty_unicode); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 276, __pyx_L5_error)
          __Pyx_GOTREF(__pyx_t_4);
          __pyx_t_11 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_4) > __pyx_t_11) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_4) : __pyx_t_11;
          __pyx_t_10 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_4);
          __Pyx_GIVEREF(__pyx_t_4);
          PyTuple_SET_ITEM(__pyx_t_1, 3, __pyx_t_4);
          __pyx_t_4 = 0;
          __Pyx_INCREF(__pyx_kp_u_with_result);
          __pyx_t_10 += 14;
          __Pyx_GIVEREF(__pyx_kp_u_with_result);
          PyTuple_SET_ITEM(__pyx_t_1, 4, __pyx_kp_u_with_result);
          __pyx_t_4 = __Pyx_PyObject_FormatSimple(__pyx_v_result, __pyx_empty_unicode); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 276, __pyx_L5_error)
          __Pyx_GOTREF(__pyx_t_4);
          __pyx_t_11 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_4) > __pyx_t_11) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_4) : __pyx_t_11;
          __pyx_t_10 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_4);
          __Pyx_GIVEREF(__pyx_t_4);
          PyTuple_SET_ITEM(__pyx_t_1, 5, __pyx_t_4);
          __pyx_t_4 = 0;
          __pyx_t_4 = __Pyx_PyUnicode_Join(__pyx_t_1, 6, __pyx_t_10, __pyx_t_11); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 276, __pyx_L5_error)
          __Pyx_GOTREF(__pyx_t_4);
          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
          __pyx_v_msg = ((PyObject*)__pyx_t_4);
          __pyx_t_4 = 0;
+277:                 return _create_error(name, value, msg, val_type, annotated_type)
          __Pyx_XDECREF(__pyx_r);
          __pyx_t_4 = __pyx_f_9datamodel_10validation__create_error(__pyx_v_name, __pyx_v_value, __pyx_v_msg, __pyx_v_val_type, __pyx_v_annotated_type, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 277, __pyx_L5_error)
          __Pyx_GOTREF(__pyx_t_4);
          __pyx_r = ((PyObject*)__pyx_t_4);
          __pyx_t_4 = 0;
          goto __pyx_L9_try_return;
+278:         except ValueError:
      __pyx_t_12 = __Pyx_PyErr_ExceptionMatches(__pyx_builtin_ValueError);
      if (__pyx_t_12) {
        __Pyx_AddTraceback("datamodel.validation._validation", __pyx_clineno, __pyx_lineno, __pyx_filename);
        if (__Pyx_GetException(&__pyx_t_4, &__pyx_t_1, &__pyx_t_8) < 0) __PYX_ERR(0, 278, __pyx_L7_except_error)
        __Pyx_XGOTREF(__pyx_t_4);
        __Pyx_XGOTREF(__pyx_t_1);
        __Pyx_XGOTREF(__pyx_t_8);
+279:             raise
        __Pyx_GIVEREF(__pyx_t_4);
        __Pyx_GIVEREF(__pyx_t_1);
        __Pyx_XGIVEREF(__pyx_t_8);
        __Pyx_ErrRestoreWithState(__pyx_t_4, __pyx_t_1, __pyx_t_8);
        __pyx_t_4 = 0; __pyx_t_1 = 0; __pyx_t_8 = 0; 
        __PYX_ERR(0, 279, __pyx_L7_except_error)
      }
      goto __pyx_L7_except_error;
 280:     # check: data type hint
 281:     # If field_type is known, short-circuit certain checks
+282:     if F.type == Text:
  __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_F, __pyx_n_s_type_2); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 282, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_Text); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 282, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_4 = PyObject_RichCompare(__pyx_t_8, __pyx_t_1, Py_EQ); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 282, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely((__pyx_t_3 < 0))) __PYX_ERR(0, 282, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  if (__pyx_t_3) {
/* … */
  }
+283:         if val_type != str:
    __pyx_t_4 = PyObject_RichCompare(__pyx_v_val_type, ((PyObject *)(&PyUnicode_Type)), Py_NE); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 283, __pyx_L1_error)
    __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely((__pyx_t_3 < 0))) __PYX_ERR(0, 283, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    if (__pyx_t_3) {
/* … */
    }
+284:             return _create_error(
      __Pyx_XDECREF(__pyx_r);
/* … */
      __pyx_t_4 = __pyx_f_9datamodel_10validation__create_error(__pyx_v_name, __pyx_v_value, __pyx_t_1, __pyx_v_val_type, __pyx_v_annotated_type, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 284, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_r = ((PyObject*)__pyx_t_4);
      __pyx_t_4 = 0;
      goto __pyx_L0;
 285:                 name,
 286:                 value,
+287:                 f'invalid type for {annotated_type}.{name}, expected {annotated_type}',
      __pyx_t_4 = PyTuple_New(6); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 287, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_t_10 = 0;
      __pyx_t_11 = 127;
      __Pyx_INCREF(__pyx_kp_u_invalid_type_for);
      __pyx_t_10 += 17;
      __Pyx_GIVEREF(__pyx_kp_u_invalid_type_for);
      PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_kp_u_invalid_type_for);
      __pyx_t_1 = __Pyx_PyObject_FormatSimple(__pyx_v_annotated_type, __pyx_empty_unicode); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 287, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_11 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_1) > __pyx_t_11) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_1) : __pyx_t_11;
      __pyx_t_10 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_1);
      __Pyx_GIVEREF(__pyx_t_1);
      PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_1);
      __pyx_t_1 = 0;
      __Pyx_INCREF(__pyx_kp_u__11);
      __pyx_t_10 += 1;
      __Pyx_GIVEREF(__pyx_kp_u__11);
      PyTuple_SET_ITEM(__pyx_t_4, 2, __pyx_kp_u__11);
      __pyx_t_1 = __Pyx_PyUnicode_Unicode(__pyx_v_name); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 287, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_11 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_1) > __pyx_t_11) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_1) : __pyx_t_11;
      __pyx_t_10 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_1);
      __Pyx_GIVEREF(__pyx_t_1);
      PyTuple_SET_ITEM(__pyx_t_4, 3, __pyx_t_1);
      __pyx_t_1 = 0;
      __Pyx_INCREF(__pyx_kp_u_expected);
      __pyx_t_10 += 11;
      __Pyx_GIVEREF(__pyx_kp_u_expected);
      PyTuple_SET_ITEM(__pyx_t_4, 4, __pyx_kp_u_expected);
      __pyx_t_1 = __Pyx_PyObject_FormatSimple(__pyx_v_annotated_type, __pyx_empty_unicode); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 287, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_11 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_1) > __pyx_t_11) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_1) : __pyx_t_11;
      __pyx_t_10 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_1);
      __Pyx_GIVEREF(__pyx_t_1);
      PyTuple_SET_ITEM(__pyx_t_4, 5, __pyx_t_1);
      __pyx_t_1 = 0;
      __pyx_t_1 = __Pyx_PyUnicode_Join(__pyx_t_4, 6, __pyx_t_10, __pyx_t_11); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 287, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 288:                 val_type,
 289:                 annotated_type
 290:             )
+291:         return {}
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_4 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 291, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_r = ((PyObject*)__pyx_t_4);
    __pyx_t_4 = 0;
    goto __pyx_L0;
 292:     # if inspect.isclass(annotated_type) and issubclass(annotated_type, Enum):
+293:     if is_enum_class(annotated_type):
  __pyx_t_3 = __pyx_f_9datamodel_10validation_is_enum_class(__pyx_v_annotated_type); if (unlikely(__pyx_t_3 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 293, __pyx_L1_error)
  if (__pyx_t_3) {
/* … */
  }
+294:         return validate_enum(name, value, annotated_type, val_type)
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_4 = __pyx_f_9datamodel_10validation_validate_enum(__pyx_v_name, __pyx_v_value, __pyx_v_annotated_type, __pyx_v_val_type); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 294, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_r = ((PyObject*)__pyx_t_4);
    __pyx_t_4 = 0;
    goto __pyx_L0;
+295:     if F.origin is Callable:
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_F, __pyx_n_s_origin); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 295, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_Callable); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 295, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_3 = (__pyx_t_4 == __pyx_t_1);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (__pyx_t_3) {
/* … */
  }
+296:         if not is_callable(value):
    __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_is_callable); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 296, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_8 = NULL;
    __pyx_t_9 = 0;
    #if CYTHON_UNPACK_METHODS
    if (unlikely(PyMethod_Check(__pyx_t_4))) {
      __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_4);
      if (likely(__pyx_t_8)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
        __Pyx_INCREF(__pyx_t_8);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_4, function);
        __pyx_t_9 = 1;
      }
    }
    #endif
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_8, __pyx_v_value};
      __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_4, __pyx_callargs+1-__pyx_t_9, 1+__pyx_t_9);
      __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
      if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 296, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    }
    __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_3 < 0))) __PYX_ERR(0, 296, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_2 = (!__pyx_t_3);
    if (__pyx_t_2) {
/* … */
    }
+297:             return _create_error(
      __Pyx_XDECREF(__pyx_r);
/* … */
      __pyx_t_1 = __pyx_f_9datamodel_10validation__create_error(__pyx_v_name, __pyx_v_value, __pyx_t_4, __pyx_v_val_type, __pyx_v_annotated_type, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 297, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __pyx_r = ((PyObject*)__pyx_t_1);
      __pyx_t_1 = 0;
      goto __pyx_L0;
+298:                 name, value, f'Invalid function type, expected {annotated_type}', val_type, annotated_type
      __pyx_t_1 = __Pyx_PyObject_FormatSimple(__pyx_v_annotated_type, __pyx_empty_unicode); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 298, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_4 = __Pyx_PyUnicode_Concat(__pyx_kp_u_Invalid_function_type_expected, __pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 298, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 299:             )
+300:         return {}
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_1 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 300, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_r = ((PyObject*)__pyx_t_1);
    __pyx_t_1 = 0;
    goto __pyx_L0;
+301:     elif F.origin is Awaitable:
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_F, __pyx_n_s_origin); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 301, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_Awaitable); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 301, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_2 = (__pyx_t_1 == __pyx_t_4);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  if (__pyx_t_2) {
/* … */
  }
+302:         if asyncio.iscoroutinefunction(value):
    __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_asyncio); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 302, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_iscoroutinefunction); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 302, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __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_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_9 = 1;
      }
    }
    #endif
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_1, __pyx_v_value};
      __pyx_t_4 = __Pyx_PyObject_FastCall(__pyx_t_8, __pyx_callargs+1-__pyx_t_9, 1+__pyx_t_9);
      __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
      if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 302, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    }
    __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 302, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    if (__pyx_t_2) {
/* … */
    }
+303:             return  _create_error(name, value, f"Field '{name}': provided coroutine function is not awaitable; call it to obtain a coroutine object.", val_type, annotated_type)
      __Pyx_XDECREF(__pyx_r);
      __pyx_t_4 = PyTuple_New(3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 303, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_t_10 = 0;
      __pyx_t_11 = 127;
      __Pyx_INCREF(__pyx_kp_u_Field_3);
      __pyx_t_10 += 7;
      __Pyx_GIVEREF(__pyx_kp_u_Field_3);
      PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_kp_u_Field_3);
      __pyx_t_8 = __Pyx_PyUnicode_Unicode(__pyx_v_name); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 303, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __pyx_t_11 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_8) > __pyx_t_11) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_8) : __pyx_t_11;
      __pyx_t_10 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_8);
      __Pyx_GIVEREF(__pyx_t_8);
      PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_8);
      __pyx_t_8 = 0;
      __Pyx_INCREF(__pyx_kp_u_provided_coroutine_function_is);
      __pyx_t_10 += 86;
      __Pyx_GIVEREF(__pyx_kp_u_provided_coroutine_function_is);
      PyTuple_SET_ITEM(__pyx_t_4, 2, __pyx_kp_u_provided_coroutine_function_is);
      __pyx_t_8 = __Pyx_PyUnicode_Join(__pyx_t_4, 3, __pyx_t_10, __pyx_t_11); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 303, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __pyx_t_4 = __pyx_f_9datamodel_10validation__create_error(__pyx_v_name, __pyx_v_value, __pyx_t_8, __pyx_v_val_type, __pyx_v_annotated_type, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 303, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      __pyx_r = ((PyObject*)__pyx_t_4);
      __pyx_t_4 = 0;
      goto __pyx_L0;
 304:         # Otherwise, check if it is awaitable
+305:         elif not hasattr(value, '__await__'):
    __pyx_t_2 = __Pyx_HasAttr(__pyx_v_value, __pyx_n_u_await); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 305, __pyx_L1_error)
    __pyx_t_3 = (!__pyx_t_2);
    if (__pyx_t_3) {
/* … */
    }
+306:             return _create_error(name, value, f"Field '{name}': provided object is not awaitable; it does not have an '__await__' method. but got {type(value)}.", val_type, annotated_type)
      __Pyx_XDECREF(__pyx_r);
      __pyx_t_4 = PyTuple_New(5); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 306, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_t_10 = 0;
      __pyx_t_11 = 127;
      __Pyx_INCREF(__pyx_kp_u_Field_3);
      __pyx_t_10 += 7;
      __Pyx_GIVEREF(__pyx_kp_u_Field_3);
      PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_kp_u_Field_3);
      __pyx_t_8 = __Pyx_PyUnicode_Unicode(__pyx_v_name); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 306, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __pyx_t_11 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_8) > __pyx_t_11) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_8) : __pyx_t_11;
      __pyx_t_10 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_8);
      __Pyx_GIVEREF(__pyx_t_8);
      PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_8);
      __pyx_t_8 = 0;
      __Pyx_INCREF(__pyx_kp_u_provided_object_is_not_awaitabl);
      __pyx_t_10 += 85;
      __Pyx_GIVEREF(__pyx_kp_u_provided_object_is_not_awaitabl);
      PyTuple_SET_ITEM(__pyx_t_4, 2, __pyx_kp_u_provided_object_is_not_awaitabl);
      __pyx_t_8 = __Pyx_PyObject_FormatSimple(((PyObject *)Py_TYPE(__pyx_v_value)), __pyx_empty_unicode); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 306, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __pyx_t_11 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_8) > __pyx_t_11) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_8) : __pyx_t_11;
      __pyx_t_10 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_8);
      __Pyx_GIVEREF(__pyx_t_8);
      PyTuple_SET_ITEM(__pyx_t_4, 3, __pyx_t_8);
      __pyx_t_8 = 0;
      __Pyx_INCREF(__pyx_kp_u__11);
      __pyx_t_10 += 1;
      __Pyx_GIVEREF(__pyx_kp_u__11);
      PyTuple_SET_ITEM(__pyx_t_4, 4, __pyx_kp_u__11);
      __pyx_t_8 = __Pyx_PyUnicode_Join(__pyx_t_4, 5, __pyx_t_10, __pyx_t_11); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 306, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __pyx_t_4 = __pyx_f_9datamodel_10validation__create_error(__pyx_v_name, __pyx_v_value, __pyx_t_8, __pyx_v_val_type, __pyx_v_annotated_type, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 306, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      __pyx_r = ((PyObject*)__pyx_t_4);
      __pyx_t_4 = 0;
      goto __pyx_L0;
+307:         return {}
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_4 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 307, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_r = ((PyObject*)__pyx_t_4);
    __pyx_t_4 = 0;
    goto __pyx_L0;
+308:     elif field_type == 'type':
  __pyx_t_3 = (__Pyx_PyUnicode_Equals(__pyx_v_field_type, __pyx_n_u_type_2, Py_EQ)); if (unlikely((__pyx_t_3 < 0))) __PYX_ERR(0, 308, __pyx_L1_error)
  if (__pyx_t_3) {
/* … */
  }
+309:         return validate_type(F, name, value, annotated_type, val_type)
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_4 = __pyx_f_9datamodel_10validation_validate_type(__pyx_v_F, __pyx_v_name, __pyx_v_value, __pyx_v_annotated_type, __pyx_v_val_type); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 309, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_r = ((PyObject*)__pyx_t_4);
    __pyx_t_4 = 0;
    goto __pyx_L0;
+310:     elif field_type == 'typing' or hasattr(annotated_type, '__module__') and annotated_type.__module__ == 'typing':
  __pyx_t_2 = (__Pyx_PyUnicode_Equals(__pyx_v_field_type, __pyx_n_u_typing, Py_EQ)); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 310, __pyx_L1_error)
  if (!__pyx_t_2) {
  } else {
    __pyx_t_3 = __pyx_t_2;
    goto __pyx_L20_bool_binop_done;
  }
  __pyx_t_2 = __Pyx_HasAttr(__pyx_v_annotated_type, __pyx_n_u_module); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 310, __pyx_L1_error)
  if (__pyx_t_2) {
  } else {
    __pyx_t_3 = __pyx_t_2;
    goto __pyx_L20_bool_binop_done;
  }
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_annotated_type, __pyx_n_s_module); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 310, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_2 = (__Pyx_PyUnicode_Equals(__pyx_t_4, __pyx_n_u_typing, Py_EQ)); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 310, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_3 = __pyx_t_2;
  __pyx_L20_bool_binop_done:;
  if (__pyx_t_3) {
/* … */
    goto __pyx_L17;
  }
+311:         if F.origin is tuple:
    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_F, __pyx_n_s_origin); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 311, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_3 = (__pyx_t_4 == ((PyObject *)(&PyTuple_Type)));
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    if (__pyx_t_3) {
/* … */
      goto __pyx_L23;
    }
 312:             # Check if we are in the homogeneous case: Tuple[T, ...]
+313:             if len(F.args) == 2 and F.args[1] is Ellipsis:
      __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_F, __pyx_n_s_args); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 313, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_t_10 = PyObject_Length(__pyx_t_4); if (unlikely(__pyx_t_10 == ((Py_ssize_t)-1))) __PYX_ERR(0, 313, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __pyx_t_2 = (__pyx_t_10 == 2);
      if (__pyx_t_2) {
      } else {
        __pyx_t_3 = __pyx_t_2;
        goto __pyx_L25_bool_binop_done;
      }
      __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_F, __pyx_n_s_args); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 313, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_t_8 = __Pyx_GetItemInt(__pyx_t_4, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 313, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __pyx_t_2 = (__pyx_t_8 == __pyx_builtin_Ellipsis);
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      __pyx_t_3 = __pyx_t_2;
      __pyx_L25_bool_binop_done:;
      if (__pyx_t_3) {
/* … */
        goto __pyx_L24;
      }
+314:                 for i, elem in enumerate(value):
        __Pyx_INCREF(__pyx_int_0);
        __pyx_t_8 = __pyx_int_0;
        if (likely(PyList_CheckExact(__pyx_v_value)) || PyTuple_CheckExact(__pyx_v_value)) {
          __pyx_t_4 = __pyx_v_value; __Pyx_INCREF(__pyx_t_4);
          __pyx_t_10 = 0;
          __pyx_t_13 = NULL;
        } else {
          __pyx_t_10 = -1; __pyx_t_4 = PyObject_GetIter(__pyx_v_value); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 314, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_4);
          __pyx_t_13 = __Pyx_PyObject_GetIterNextFunc(__pyx_t_4); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 314, __pyx_L1_error)
        }
        for (;;) {
          if (likely(!__pyx_t_13)) {
            if (likely(PyList_CheckExact(__pyx_t_4))) {
              {
                Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_t_4);
                #if !CYTHON_ASSUME_SAFE_MACROS
                if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 314, __pyx_L1_error)
                #endif
                if (__pyx_t_10 >= __pyx_temp) break;
              }
              #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
              __pyx_t_1 = PyList_GET_ITEM(__pyx_t_4, __pyx_t_10); __Pyx_INCREF(__pyx_t_1); __pyx_t_10++; if (unlikely((0 < 0))) __PYX_ERR(0, 314, __pyx_L1_error)
              #else
              __pyx_t_1 = __Pyx_PySequence_ITEM(__pyx_t_4, __pyx_t_10); __pyx_t_10++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 314, __pyx_L1_error)
              __Pyx_GOTREF(__pyx_t_1);
              #endif
            } else {
              {
                Py_ssize_t __pyx_temp = __Pyx_PyTuple_GET_SIZE(__pyx_t_4);
                #if !CYTHON_ASSUME_SAFE_MACROS
                if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 314, __pyx_L1_error)
                #endif
                if (__pyx_t_10 >= __pyx_temp) break;
              }
              #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
              __pyx_t_1 = PyTuple_GET_ITEM(__pyx_t_4, __pyx_t_10); __Pyx_INCREF(__pyx_t_1); __pyx_t_10++; if (unlikely((0 < 0))) __PYX_ERR(0, 314, __pyx_L1_error)
              #else
              __pyx_t_1 = __Pyx_PySequence_ITEM(__pyx_t_4, __pyx_t_10); __pyx_t_10++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 314, __pyx_L1_error)
              __Pyx_GOTREF(__pyx_t_1);
              #endif
            }
          } else {
            __pyx_t_1 = __pyx_t_13(__pyx_t_4);
            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, 314, __pyx_L1_error)
              }
              break;
            }
            __Pyx_GOTREF(__pyx_t_1);
          }
          __Pyx_XDECREF_SET(__pyx_v_elem, __pyx_t_1);
          __pyx_t_1 = 0;
          __Pyx_INCREF(__pyx_t_8);
          __Pyx_XDECREF_SET(__pyx_v_i, __pyx_t_8);
          __pyx_t_1 = __Pyx_PyInt_AddObjC(__pyx_t_8, __pyx_int_1, 1, 0, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 314, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_1);
          __Pyx_DECREF(__pyx_t_8);
          __pyx_t_8 = __pyx_t_1;
          __pyx_t_1 = 0;
/* … */
        }
        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+315:                     if not isinstance(elem, F.args[0]):
          __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_F, __pyx_n_s_args); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 315, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_1);
          __pyx_t_14 = __Pyx_GetItemInt(__pyx_t_1, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 315, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_14);
          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
          __pyx_t_3 = PyObject_IsInstance(__pyx_v_elem, __pyx_t_14); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(0, 315, __pyx_L1_error)
          __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
          __pyx_t_2 = (!__pyx_t_3);
          if (__pyx_t_2) {
/* … */
          }
+316:                         return _create_error(
            __Pyx_XDECREF(__pyx_r);
/* … */
            __pyx_t_14 = __pyx_f_9datamodel_10validation__create_error(((PyObject*)__pyx_t_1), __pyx_v_elem, __pyx_t_16, ((PyObject *)Py_TYPE(__pyx_v_elem)), __pyx_t_17, NULL); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 316, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_14);
            __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
            __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
            __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
            __pyx_r = ((PyObject*)__pyx_t_14);
            __pyx_t_14 = 0;
            __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
            __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
            goto __pyx_L0;
+317:                             f"{name}[{i}]",
            __pyx_t_14 = PyTuple_New(4); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 317, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_14);
            __pyx_t_15 = 0;
            __pyx_t_11 = 127;
            __pyx_t_1 = __Pyx_PyUnicode_Unicode(__pyx_v_name); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 317, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_1);
            __pyx_t_11 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_1) > __pyx_t_11) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_1) : __pyx_t_11;
            __pyx_t_15 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_1);
            __Pyx_GIVEREF(__pyx_t_1);
            PyTuple_SET_ITEM(__pyx_t_14, 0, __pyx_t_1);
            __pyx_t_1 = 0;
            __Pyx_INCREF(__pyx_kp_u__7);
            __pyx_t_15 += 1;
            __Pyx_GIVEREF(__pyx_kp_u__7);
            PyTuple_SET_ITEM(__pyx_t_14, 1, __pyx_kp_u__7);
            __pyx_t_1 = __Pyx_PyObject_FormatSimple(__pyx_v_i, __pyx_empty_unicode); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 317, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_1);
            __pyx_t_11 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_1) > __pyx_t_11) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_1) : __pyx_t_11;
            __pyx_t_15 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_1);
            __Pyx_GIVEREF(__pyx_t_1);
            PyTuple_SET_ITEM(__pyx_t_14, 2, __pyx_t_1);
            __pyx_t_1 = 0;
            __Pyx_INCREF(__pyx_kp_u__8);
            __pyx_t_15 += 1;
            __Pyx_GIVEREF(__pyx_kp_u__8);
            PyTuple_SET_ITEM(__pyx_t_14, 3, __pyx_kp_u__8);
            __pyx_t_1 = __Pyx_PyUnicode_Join(__pyx_t_14, 4, __pyx_t_15, __pyx_t_11); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 317, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_1);
            __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
 318:                             elem,
+319:                             f"Invalid type at index {i}: expected {F.args[0]}",
            __pyx_t_14 = PyTuple_New(4); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 319, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_14);
            __pyx_t_15 = 0;
            __pyx_t_11 = 127;
            __Pyx_INCREF(__pyx_kp_u_Invalid_type_at_index);
            __pyx_t_15 += 22;
            __Pyx_GIVEREF(__pyx_kp_u_Invalid_type_at_index);
            PyTuple_SET_ITEM(__pyx_t_14, 0, __pyx_kp_u_Invalid_type_at_index);
            __pyx_t_16 = __Pyx_PyObject_FormatSimple(__pyx_v_i, __pyx_empty_unicode); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 319, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_16);
            __pyx_t_11 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_16) > __pyx_t_11) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_16) : __pyx_t_11;
            __pyx_t_15 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_16);
            __Pyx_GIVEREF(__pyx_t_16);
            PyTuple_SET_ITEM(__pyx_t_14, 1, __pyx_t_16);
            __pyx_t_16 = 0;
            __Pyx_INCREF(__pyx_kp_u_expected_2);
            __pyx_t_15 += 11;
            __Pyx_GIVEREF(__pyx_kp_u_expected_2);
            PyTuple_SET_ITEM(__pyx_t_14, 2, __pyx_kp_u_expected_2);
            __pyx_t_16 = __Pyx_PyObject_GetAttrStr(__pyx_v_F, __pyx_n_s_args); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 319, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_16);
            __pyx_t_17 = __Pyx_GetItemInt(__pyx_t_16, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 319, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_17);
            __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
            __pyx_t_16 = __Pyx_PyObject_FormatSimple(__pyx_t_17, __pyx_empty_unicode); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 319, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_16);
            __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
            __pyx_t_11 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_16) > __pyx_t_11) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_16) : __pyx_t_11;
            __pyx_t_15 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_16);
            __Pyx_GIVEREF(__pyx_t_16);
            PyTuple_SET_ITEM(__pyx_t_14, 3, __pyx_t_16);
            __pyx_t_16 = 0;
            __pyx_t_16 = __Pyx_PyUnicode_Join(__pyx_t_14, 4, __pyx_t_15, __pyx_t_11); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 319, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_16);
            __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
+320:                             type(elem), F.args[0]
            __pyx_t_14 = __Pyx_PyObject_GetAttrStr(__pyx_v_F, __pyx_n_s_args); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 320, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_14);
            __pyx_t_17 = __Pyx_GetItemInt(__pyx_t_14, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 320, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_17);
            __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
 321:                         )
 322:             else:
+323:                 if len(value) != len(F.args):
      /*else*/ {
        __pyx_t_10 = PyObject_Length(__pyx_v_value); if (unlikely(__pyx_t_10 == ((Py_ssize_t)-1))) __PYX_ERR(0, 323, __pyx_L1_error)
        __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_F, __pyx_n_s_args); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 323, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_8);
        __pyx_t_15 = PyObject_Length(__pyx_t_8); if (unlikely(__pyx_t_15 == ((Py_ssize_t)-1))) __PYX_ERR(0, 323, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
        __pyx_t_2 = (__pyx_t_10 != __pyx_t_15);
        if (__pyx_t_2) {
/* … */
        }
+324:                     return _create_error(name, value, f"Invalid length for {annotated_type}.{name}, expected {len(F.args)} elements", val_type, annotated_type)
          __Pyx_XDECREF(__pyx_r);
          __pyx_t_8 = PyTuple_New(7); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 324, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_8);
          __pyx_t_15 = 0;
          __pyx_t_11 = 127;
          __Pyx_INCREF(__pyx_kp_u_Invalid_length_for);
          __pyx_t_15 += 19;
          __Pyx_GIVEREF(__pyx_kp_u_Invalid_length_for);
          PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_kp_u_Invalid_length_for);
          __pyx_t_4 = __Pyx_PyObject_FormatSimple(__pyx_v_annotated_type, __pyx_empty_unicode); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 324, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_4);
          __pyx_t_11 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_4) > __pyx_t_11) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_4) : __pyx_t_11;
          __pyx_t_15 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_4);
          __Pyx_GIVEREF(__pyx_t_4);
          PyTuple_SET_ITEM(__pyx_t_8, 1, __pyx_t_4);
          __pyx_t_4 = 0;
          __Pyx_INCREF(__pyx_kp_u__11);
          __pyx_t_15 += 1;
          __Pyx_GIVEREF(__pyx_kp_u__11);
          PyTuple_SET_ITEM(__pyx_t_8, 2, __pyx_kp_u__11);
          __pyx_t_4 = __Pyx_PyUnicode_Unicode(__pyx_v_name); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 324, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_4);
          __pyx_t_11 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_4) > __pyx_t_11) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_4) : __pyx_t_11;
          __pyx_t_15 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_4);
          __Pyx_GIVEREF(__pyx_t_4);
          PyTuple_SET_ITEM(__pyx_t_8, 3, __pyx_t_4);
          __pyx_t_4 = 0;
          __Pyx_INCREF(__pyx_kp_u_expected);
          __pyx_t_15 += 11;
          __Pyx_GIVEREF(__pyx_kp_u_expected);
          PyTuple_SET_ITEM(__pyx_t_8, 4, __pyx_kp_u_expected);
          __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_F, __pyx_n_s_args); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 324, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_4);
          __pyx_t_10 = PyObject_Length(__pyx_t_4); if (unlikely(__pyx_t_10 == ((Py_ssize_t)-1))) __PYX_ERR(0, 324, __pyx_L1_error)
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          __pyx_t_4 = __Pyx_PyUnicode_From_Py_ssize_t(__pyx_t_10, 0, ' ', 'd'); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 324, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_4);
          __pyx_t_15 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_4);
          __Pyx_GIVEREF(__pyx_t_4);
          PyTuple_SET_ITEM(__pyx_t_8, 5, __pyx_t_4);
          __pyx_t_4 = 0;
          __Pyx_INCREF(__pyx_kp_u_elements);
          __pyx_t_15 += 9;
          __Pyx_GIVEREF(__pyx_kp_u_elements);
          PyTuple_SET_ITEM(__pyx_t_8, 6, __pyx_kp_u_elements);
          __pyx_t_4 = __Pyx_PyUnicode_Join(__pyx_t_8, 7, __pyx_t_15, __pyx_t_11); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 324, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_4);
          __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
          __pyx_t_8 = __pyx_f_9datamodel_10validation__create_error(__pyx_v_name, __pyx_v_value, __pyx_t_4, __pyx_v_val_type, __pyx_v_annotated_type, NULL); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 324, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_8);
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          __pyx_r = ((PyObject*)__pyx_t_8);
          __pyx_t_8 = 0;
          goto __pyx_L0;
 325:                 else:
+326:                     for i, elem in enumerate(value):
        /*else*/ {
          __Pyx_INCREF(__pyx_int_0);
          __pyx_t_8 = __pyx_int_0;
          if (likely(PyList_CheckExact(__pyx_v_value)) || PyTuple_CheckExact(__pyx_v_value)) {
            __pyx_t_4 = __pyx_v_value; __Pyx_INCREF(__pyx_t_4);
            __pyx_t_15 = 0;
            __pyx_t_13 = NULL;
          } else {
            __pyx_t_15 = -1; __pyx_t_4 = PyObject_GetIter(__pyx_v_value); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 326, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_4);
            __pyx_t_13 = __Pyx_PyObject_GetIterNextFunc(__pyx_t_4); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 326, __pyx_L1_error)
          }
          for (;;) {
            if (likely(!__pyx_t_13)) {
              if (likely(PyList_CheckExact(__pyx_t_4))) {
                {
                  Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_t_4);
                  #if !CYTHON_ASSUME_SAFE_MACROS
                  if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 326, __pyx_L1_error)
                  #endif
                  if (__pyx_t_15 >= __pyx_temp) break;
                }
                #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
                __pyx_t_14 = PyList_GET_ITEM(__pyx_t_4, __pyx_t_15); __Pyx_INCREF(__pyx_t_14); __pyx_t_15++; if (unlikely((0 < 0))) __PYX_ERR(0, 326, __pyx_L1_error)
                #else
                __pyx_t_14 = __Pyx_PySequence_ITEM(__pyx_t_4, __pyx_t_15); __pyx_t_15++; if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 326, __pyx_L1_error)
                __Pyx_GOTREF(__pyx_t_14);
                #endif
              } else {
                {
                  Py_ssize_t __pyx_temp = __Pyx_PyTuple_GET_SIZE(__pyx_t_4);
                  #if !CYTHON_ASSUME_SAFE_MACROS
                  if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 326, __pyx_L1_error)
                  #endif
                  if (__pyx_t_15 >= __pyx_temp) break;
                }
                #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
                __pyx_t_14 = PyTuple_GET_ITEM(__pyx_t_4, __pyx_t_15); __Pyx_INCREF(__pyx_t_14); __pyx_t_15++; if (unlikely((0 < 0))) __PYX_ERR(0, 326, __pyx_L1_error)
                #else
                __pyx_t_14 = __Pyx_PySequence_ITEM(__pyx_t_4, __pyx_t_15); __pyx_t_15++; if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 326, __pyx_L1_error)
                __Pyx_GOTREF(__pyx_t_14);
                #endif
              }
            } else {
              __pyx_t_14 = __pyx_t_13(__pyx_t_4);
              if (unlikely(!__pyx_t_14)) {
                PyObject* exc_type = PyErr_Occurred();
                if (exc_type) {
                  if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
                  else __PYX_ERR(0, 326, __pyx_L1_error)
                }
                break;
              }
              __Pyx_GOTREF(__pyx_t_14);
            }
            __Pyx_XDECREF_SET(__pyx_v_elem, __pyx_t_14);
            __pyx_t_14 = 0;
            __Pyx_INCREF(__pyx_t_8);
            __Pyx_XDECREF_SET(__pyx_v_i, __pyx_t_8);
            __pyx_t_14 = __Pyx_PyInt_AddObjC(__pyx_t_8, __pyx_int_1, 1, 0, 0); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 326, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_14);
            __Pyx_DECREF(__pyx_t_8);
            __pyx_t_8 = __pyx_t_14;
            __pyx_t_14 = 0;
/* … */
          }
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
        }
      }
      __pyx_L24:;
+327:                         if not isinstance(elem, F.args[i]):
            __pyx_t_14 = __Pyx_PyObject_GetAttrStr(__pyx_v_F, __pyx_n_s_args); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 327, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_14);
            __pyx_t_17 = __Pyx_PyObject_GetItem(__pyx_t_14, __pyx_v_i); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 327, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_17);
            __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
            __pyx_t_2 = PyObject_IsInstance(__pyx_v_elem, __pyx_t_17); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 327, __pyx_L1_error)
            __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
            __pyx_t_3 = (!__pyx_t_2);
            if (__pyx_t_3) {
/* … */
            }
+328:                             return _create_error(
              __Pyx_XDECREF(__pyx_r);
/* … */
              __pyx_t_17 = __pyx_f_9datamodel_10validation__create_error(((PyObject*)__pyx_t_14), __pyx_v_elem, __pyx_t_16, ((PyObject *)Py_TYPE(__pyx_v_elem)), __pyx_t_1, NULL); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 328, __pyx_L1_error)
              __Pyx_GOTREF(__pyx_t_17);
              __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
              __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
              __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
              __pyx_r = ((PyObject*)__pyx_t_17);
              __pyx_t_17 = 0;
              __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
              __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
              goto __pyx_L0;
+329:                                 f"{name}[{i}]",
              __pyx_t_17 = PyTuple_New(4); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 329, __pyx_L1_error)
              __Pyx_GOTREF(__pyx_t_17);
              __pyx_t_10 = 0;
              __pyx_t_11 = 127;
              __pyx_t_14 = __Pyx_PyUnicode_Unicode(__pyx_v_name); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 329, __pyx_L1_error)
              __Pyx_GOTREF(__pyx_t_14);
              __pyx_t_11 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_14) > __pyx_t_11) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_14) : __pyx_t_11;
              __pyx_t_10 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_14);
              __Pyx_GIVEREF(__pyx_t_14);
              PyTuple_SET_ITEM(__pyx_t_17, 0, __pyx_t_14);
              __pyx_t_14 = 0;
              __Pyx_INCREF(__pyx_kp_u__7);
              __pyx_t_10 += 1;
              __Pyx_GIVEREF(__pyx_kp_u__7);
              PyTuple_SET_ITEM(__pyx_t_17, 1, __pyx_kp_u__7);
              __pyx_t_14 = __Pyx_PyObject_FormatSimple(__pyx_v_i, __pyx_empty_unicode); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 329, __pyx_L1_error)
              __Pyx_GOTREF(__pyx_t_14);
              __pyx_t_11 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_14) > __pyx_t_11) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_14) : __pyx_t_11;
              __pyx_t_10 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_14);
              __Pyx_GIVEREF(__pyx_t_14);
              PyTuple_SET_ITEM(__pyx_t_17, 2, __pyx_t_14);
              __pyx_t_14 = 0;
              __Pyx_INCREF(__pyx_kp_u__8);
              __pyx_t_10 += 1;
              __Pyx_GIVEREF(__pyx_kp_u__8);
              PyTuple_SET_ITEM(__pyx_t_17, 3, __pyx_kp_u__8);
              __pyx_t_14 = __Pyx_PyUnicode_Join(__pyx_t_17, 4, __pyx_t_10, __pyx_t_11); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 329, __pyx_L1_error)
              __Pyx_GOTREF(__pyx_t_14);
              __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
 330:                                 elem,
+331:                                 f"Invalid type at index {i}: expected {F.args[i]}",
              __pyx_t_17 = PyTuple_New(4); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 331, __pyx_L1_error)
              __Pyx_GOTREF(__pyx_t_17);
              __pyx_t_10 = 0;
              __pyx_t_11 = 127;
              __Pyx_INCREF(__pyx_kp_u_Invalid_type_at_index);
              __pyx_t_10 += 22;
              __Pyx_GIVEREF(__pyx_kp_u_Invalid_type_at_index);
              PyTuple_SET_ITEM(__pyx_t_17, 0, __pyx_kp_u_Invalid_type_at_index);
              __pyx_t_16 = __Pyx_PyObject_FormatSimple(__pyx_v_i, __pyx_empty_unicode); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 331, __pyx_L1_error)
              __Pyx_GOTREF(__pyx_t_16);
              __pyx_t_11 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_16) > __pyx_t_11) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_16) : __pyx_t_11;
              __pyx_t_10 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_16);
              __Pyx_GIVEREF(__pyx_t_16);
              PyTuple_SET_ITEM(__pyx_t_17, 1, __pyx_t_16);
              __pyx_t_16 = 0;
              __Pyx_INCREF(__pyx_kp_u_expected_2);
              __pyx_t_10 += 11;
              __Pyx_GIVEREF(__pyx_kp_u_expected_2);
              PyTuple_SET_ITEM(__pyx_t_17, 2, __pyx_kp_u_expected_2);
              __pyx_t_16 = __Pyx_PyObject_GetAttrStr(__pyx_v_F, __pyx_n_s_args); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 331, __pyx_L1_error)
              __Pyx_GOTREF(__pyx_t_16);
              __pyx_t_1 = __Pyx_PyObject_GetItem(__pyx_t_16, __pyx_v_i); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 331, __pyx_L1_error)
              __Pyx_GOTREF(__pyx_t_1);
              __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
              __pyx_t_16 = __Pyx_PyObject_FormatSimple(__pyx_t_1, __pyx_empty_unicode); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 331, __pyx_L1_error)
              __Pyx_GOTREF(__pyx_t_16);
              __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
              __pyx_t_11 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_16) > __pyx_t_11) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_16) : __pyx_t_11;
              __pyx_t_10 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_16);
              __Pyx_GIVEREF(__pyx_t_16);
              PyTuple_SET_ITEM(__pyx_t_17, 3, __pyx_t_16);
              __pyx_t_16 = 0;
              __pyx_t_16 = __Pyx_PyUnicode_Join(__pyx_t_17, 4, __pyx_t_10, __pyx_t_11); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 331, __pyx_L1_error)
              __Pyx_GOTREF(__pyx_t_16);
              __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
+332:                                 type(elem), F.args[i]
              __pyx_t_17 = __Pyx_PyObject_GetAttrStr(__pyx_v_F, __pyx_n_s_args); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 332, __pyx_L1_error)
              __Pyx_GOTREF(__pyx_t_17);
              __pyx_t_1 = __Pyx_PyObject_GetItem(__pyx_t_17, __pyx_v_i); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 332, __pyx_L1_error)
              __Pyx_GOTREF(__pyx_t_1);
              __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
 333:                             )
 334:         # Handle Optional Types:
+335:         elif F.origin is Union and type(None) in F.args:
    __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_F, __pyx_n_s_origin); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 335, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_Union); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 335, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_2 = (__pyx_t_8 == __pyx_t_4);
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    if (__pyx_t_2) {
    } else {
      __pyx_t_3 = __pyx_t_2;
      goto __pyx_L36_bool_binop_done;
    }
    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_F, __pyx_n_s_args); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 335, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_2 = (__Pyx_PySequence_ContainsTF(((PyObject *)Py_TYPE(Py_None)), __pyx_t_4, Py_EQ)); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 335, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_t_3 = __pyx_t_2;
    __pyx_L36_bool_binop_done:;
    if (__pyx_t_3) {
/* … */
    }
    __pyx_L23:;
+336:             inner_types = [t for t in F.args if t is not type(None)]
      { /* enter inner scope */
        __pyx_t_4 = PyList_New(0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 336, __pyx_L40_error)
        __Pyx_GOTREF(__pyx_t_4);
        __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_F, __pyx_n_s_args); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 336, __pyx_L40_error)
        __Pyx_GOTREF(__pyx_t_8);
        if (likely(PyList_CheckExact(__pyx_t_8)) || PyTuple_CheckExact(__pyx_t_8)) {
          __pyx_t_17 = __pyx_t_8; __Pyx_INCREF(__pyx_t_17);
          __pyx_t_15 = 0;
          __pyx_t_13 = NULL;
        } else {
          __pyx_t_15 = -1; __pyx_t_17 = PyObject_GetIter(__pyx_t_8); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 336, __pyx_L40_error)
          __Pyx_GOTREF(__pyx_t_17);
          __pyx_t_13 = __Pyx_PyObject_GetIterNextFunc(__pyx_t_17); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 336, __pyx_L40_error)
        }
        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
        for (;;) {
          if (likely(!__pyx_t_13)) {
            if (likely(PyList_CheckExact(__pyx_t_17))) {
              {
                Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_t_17);
                #if !CYTHON_ASSUME_SAFE_MACROS
                if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 336, __pyx_L40_error)
                #endif
                if (__pyx_t_15 >= __pyx_temp) break;
              }
              #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
              __pyx_t_8 = PyList_GET_ITEM(__pyx_t_17, __pyx_t_15); __Pyx_INCREF(__pyx_t_8); __pyx_t_15++; if (unlikely((0 < 0))) __PYX_ERR(0, 336, __pyx_L40_error)
              #else
              __pyx_t_8 = __Pyx_PySequence_ITEM(__pyx_t_17, __pyx_t_15); __pyx_t_15++; if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 336, __pyx_L40_error)
              __Pyx_GOTREF(__pyx_t_8);
              #endif
            } else {
              {
                Py_ssize_t __pyx_temp = __Pyx_PyTuple_GET_SIZE(__pyx_t_17);
                #if !CYTHON_ASSUME_SAFE_MACROS
                if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 336, __pyx_L40_error)
                #endif
                if (__pyx_t_15 >= __pyx_temp) break;
              }
              #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
              __pyx_t_8 = PyTuple_GET_ITEM(__pyx_t_17, __pyx_t_15); __Pyx_INCREF(__pyx_t_8); __pyx_t_15++; if (unlikely((0 < 0))) __PYX_ERR(0, 336, __pyx_L40_error)
              #else
              __pyx_t_8 = __Pyx_PySequence_ITEM(__pyx_t_17, __pyx_t_15); __pyx_t_15++; if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 336, __pyx_L40_error)
              __Pyx_GOTREF(__pyx_t_8);
              #endif
            }
          } else {
            __pyx_t_8 = __pyx_t_13(__pyx_t_17);
            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, 336, __pyx_L40_error)
              }
              break;
            }
            __Pyx_GOTREF(__pyx_t_8);
          }
          __Pyx_XDECREF_SET(__pyx_7genexpr__pyx_v_t, __pyx_t_8);
          __pyx_t_8 = 0;
          __pyx_t_3 = (__pyx_7genexpr__pyx_v_t != ((PyObject *)Py_TYPE(Py_None)));
          if (__pyx_t_3) {
            if (unlikely(__Pyx_ListComp_Append(__pyx_t_4, (PyObject*)__pyx_7genexpr__pyx_v_t))) __PYX_ERR(0, 336, __pyx_L40_error)
          }
        }
        __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
        __Pyx_XDECREF(__pyx_7genexpr__pyx_v_t); __pyx_7genexpr__pyx_v_t = 0;
        goto __pyx_L45_exit_scope;
        __pyx_L40_error:;
        __Pyx_XDECREF(__pyx_7genexpr__pyx_v_t); __pyx_7genexpr__pyx_v_t = 0;
        goto __pyx_L1_error;
        __pyx_L45_exit_scope:;
      } /* exit inner scope */
      __pyx_v_inner_types = __pyx_t_4;
      __pyx_t_4 = 0;
 337:             # If value is None then that is valid:
+338:             if value is None:
      __pyx_t_3 = (__pyx_v_value == Py_None);
      if (__pyx_t_3) {
/* … */
      }
+339:                 return {}
        __Pyx_XDECREF(__pyx_r);
        __pyx_t_4 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 339, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_4);
        __pyx_r = ((PyObject*)__pyx_t_4);
        __pyx_t_4 = 0;
        goto __pyx_L0;
 340:             # Otherwise check that value is an instance of at least one inner type:
+341:             for t in inner_types:
      __pyx_t_4 = __pyx_v_inner_types; __Pyx_INCREF(__pyx_t_4);
      __pyx_t_15 = 0;
      for (;;) {
        {
          Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_t_4);
          #if !CYTHON_ASSUME_SAFE_MACROS
          if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 341, __pyx_L1_error)
          #endif
          if (__pyx_t_15 >= __pyx_temp) break;
        }
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_17 = PyList_GET_ITEM(__pyx_t_4, __pyx_t_15); __Pyx_INCREF(__pyx_t_17); __pyx_t_15++; if (unlikely((0 < 0))) __PYX_ERR(0, 341, __pyx_L1_error)
        #else
        __pyx_t_17 = __Pyx_PySequence_ITEM(__pyx_t_4, __pyx_t_15); __pyx_t_15++; if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 341, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_17);
        #endif
        __Pyx_XDECREF_SET(__pyx_v_t, __pyx_t_17);
        __pyx_t_17 = 0;
/* … */
      }
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      goto __pyx_L52_for_end;
      __pyx_L48_break:;
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      goto __pyx_L52_for_end;
      __pyx_L52_for_end:;
+342:                 base_type = get_origin(t) or t
        __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_get_origin); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 342, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        __pyx_t_16 = NULL;
        __pyx_t_9 = 0;
        #if CYTHON_UNPACK_METHODS
        if (unlikely(PyMethod_Check(__pyx_t_1))) {
          __pyx_t_16 = PyMethod_GET_SELF(__pyx_t_1);
          if (likely(__pyx_t_16)) {
            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
            __Pyx_INCREF(__pyx_t_16);
            __Pyx_INCREF(function);
            __Pyx_DECREF_SET(__pyx_t_1, function);
            __pyx_t_9 = 1;
          }
        }
        #endif
        {
          PyObject *__pyx_callargs[2] = {__pyx_t_16, __pyx_v_t};
          __pyx_t_8 = __Pyx_PyObject_FastCall(__pyx_t_1, __pyx_callargs+1-__pyx_t_9, 1+__pyx_t_9);
          __Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0;
          if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 342, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_8);
          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        }
        __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_8); if (unlikely((__pyx_t_3 < 0))) __PYX_ERR(0, 342, __pyx_L1_error)
        if (!__pyx_t_3) {
          __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
        } else {
          __Pyx_INCREF(__pyx_t_8);
          __pyx_t_17 = __pyx_t_8;
          __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
          goto __pyx_L49_bool_binop_done;
        }
        __Pyx_INCREF(__pyx_v_t);
        __pyx_t_17 = __pyx_v_t;
        __pyx_L49_bool_binop_done:;
        __Pyx_XDECREF_SET(__pyx_v_base_type, __pyx_t_17);
        __pyx_t_17 = 0;
+343:                 if isinstance(value, base_type):
        __pyx_t_3 = PyObject_IsInstance(__pyx_v_value, __pyx_v_base_type); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(0, 343, __pyx_L1_error)
        if (__pyx_t_3) {
/* … */
        }
+344:                     _valid = True
          __pyx_v__valid = 1;
+345:                     break
          goto __pyx_L48_break;
+346:             if not _valid:
      __pyx_t_3 = (!__pyx_v__valid);
      if (__pyx_t_3) {
/* … */
      }
+347:                 return _create_error(
        __Pyx_XDECREF(__pyx_r);
/* … */
        __pyx_t_4 = __pyx_f_9datamodel_10validation__create_error(__pyx_v_name, __pyx_v_value, __pyx_t_17, __pyx_v_val_type, __pyx_v_annotated_type, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 347, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_4);
        __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
        __pyx_r = ((PyObject*)__pyx_t_4);
        __pyx_t_4 = 0;
        goto __pyx_L0;
 348:                     name,
 349:                     value,
+350:                     f"Invalid type for {annotated_type}.{name}, expected one of {inner_types}",
        __pyx_t_4 = PyTuple_New(6); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 350, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_4);
        __pyx_t_15 = 0;
        __pyx_t_11 = 127;
        __Pyx_INCREF(__pyx_kp_u_Invalid_type_for);
        __pyx_t_15 += 17;
        __Pyx_GIVEREF(__pyx_kp_u_Invalid_type_for);
        PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_kp_u_Invalid_type_for);
        __pyx_t_17 = __Pyx_PyObject_FormatSimple(__pyx_v_annotated_type, __pyx_empty_unicode); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 350, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_17);
        __pyx_t_11 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_17) > __pyx_t_11) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_17) : __pyx_t_11;
        __pyx_t_15 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_17);
        __Pyx_GIVEREF(__pyx_t_17);
        PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_17);
        __pyx_t_17 = 0;
        __Pyx_INCREF(__pyx_kp_u__11);
        __pyx_t_15 += 1;
        __Pyx_GIVEREF(__pyx_kp_u__11);
        PyTuple_SET_ITEM(__pyx_t_4, 2, __pyx_kp_u__11);
        __pyx_t_17 = __Pyx_PyUnicode_Unicode(__pyx_v_name); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 350, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_17);
        __pyx_t_11 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_17) > __pyx_t_11) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_17) : __pyx_t_11;
        __pyx_t_15 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_17);
        __Pyx_GIVEREF(__pyx_t_17);
        PyTuple_SET_ITEM(__pyx_t_4, 3, __pyx_t_17);
        __pyx_t_17 = 0;
        __Pyx_INCREF(__pyx_kp_u_expected_one_of);
        __pyx_t_15 += 18;
        __Pyx_GIVEREF(__pyx_kp_u_expected_one_of);
        PyTuple_SET_ITEM(__pyx_t_4, 4, __pyx_kp_u_expected_one_of);
        __pyx_t_17 = __Pyx_PyObject_FormatSimple(__pyx_v_inner_types, __pyx_empty_unicode); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 350, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_17);
        __pyx_t_11 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_17) > __pyx_t_11) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_17) : __pyx_t_11;
        __pyx_t_15 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_17);
        __Pyx_GIVEREF(__pyx_t_17);
        PyTuple_SET_ITEM(__pyx_t_4, 5, __pyx_t_17);
        __pyx_t_17 = 0;
        __pyx_t_17 = __Pyx_PyUnicode_Join(__pyx_t_4, 6, __pyx_t_15, __pyx_t_11); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 350, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_17);
        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 351:                     val_type,
 352:                     annotated_type
 353:                 )
 354:         # elif F.origin is Union:
 355:         #    return _validate_union_field(F, name, value, annotated_type)
+356:     elif type(annotated_type).__name__ == "ModelMeta":
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)Py_TYPE(__pyx_v_annotated_type)), __pyx_n_s_name_2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 356, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_3 = (__Pyx_PyUnicode_Equals(__pyx_t_4, __pyx_n_u_ModelMeta, Py_EQ)); if (unlikely((__pyx_t_3 < 0))) __PYX_ERR(0, 356, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  if (__pyx_t_3) {
/* … */
    goto __pyx_L17;
  }
 357:         # Check if there's a field in the annotated type that matches the name and type
+358:         if as_objects:
    if (__pyx_v_as_objects) {
/* … */
      goto __pyx_L54;
    }
+359:             if isinstance(value, annotated_type):
      __pyx_t_3 = PyObject_IsInstance(__pyx_v_value, __pyx_v_annotated_type); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(0, 359, __pyx_L1_error)
      if (__pyx_t_3) {
/* … */
      }
 360:                 # if value is already a Object, no further check needed for columns
+361:                 return {}
        __Pyx_XDECREF(__pyx_r);
        __pyx_t_4 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 361, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_4);
        __pyx_r = ((PyObject*)__pyx_t_4);
        __pyx_t_4 = 0;
        goto __pyx_L0;
+362:             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_L61_try_end;
        __pyx_L56_error:;
        __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
        __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
        __Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0;
        __Pyx_XDECREF(__pyx_t_17); __pyx_t_17 = 0;
        __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 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_L59_except_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_L61_try_end:;
      }
+363:                 field = annotated_type.get_column(name)
          __pyx_t_17 = __Pyx_PyObject_GetAttrStr(__pyx_v_annotated_type, __pyx_n_s_get_column); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 363, __pyx_L56_error)
          __Pyx_GOTREF(__pyx_t_17);
          __pyx_t_8 = NULL;
          __pyx_t_9 = 0;
          #if CYTHON_UNPACK_METHODS
          if (likely(PyMethod_Check(__pyx_t_17))) {
            __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_17);
            if (likely(__pyx_t_8)) {
              PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_17);
              __Pyx_INCREF(__pyx_t_8);
              __Pyx_INCREF(function);
              __Pyx_DECREF_SET(__pyx_t_17, function);
              __pyx_t_9 = 1;
            }
          }
          #endif
          {
            PyObject *__pyx_callargs[2] = {__pyx_t_8, __pyx_v_name};
            __pyx_t_4 = __Pyx_PyObject_FastCall(__pyx_t_17, __pyx_callargs+1-__pyx_t_9, 1+__pyx_t_9);
            __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
            if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 363, __pyx_L56_error)
            __Pyx_GOTREF(__pyx_t_4);
            __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
          }
          __pyx_v_field = __pyx_t_4;
          __pyx_t_4 = 0;
+364:             except AttributeError as e:
        __pyx_t_12 = __Pyx_PyErr_ExceptionMatches(__pyx_builtin_AttributeError);
        if (__pyx_t_12) {
          __Pyx_AddTraceback("datamodel.validation._validation", __pyx_clineno, __pyx_lineno, __pyx_filename);
          if (__Pyx_GetException(&__pyx_t_4, &__pyx_t_17, &__pyx_t_8) < 0) __PYX_ERR(0, 364, __pyx_L58_except_error)
          __Pyx_XGOTREF(__pyx_t_4);
          __Pyx_XGOTREF(__pyx_t_17);
          __Pyx_XGOTREF(__pyx_t_8);
          __Pyx_INCREF(__pyx_t_17);
          __pyx_v_e = __pyx_t_17;
          /*try:*/ {
/* … */
          /*finally:*/ {
            __pyx_L67_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_1); __pyx_t_1 = 0;
              __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
              __Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 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_12 = __pyx_lineno; __pyx_t_19 = __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_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_12; __pyx_clineno = __pyx_t_19; __pyx_filename = __pyx_t_20;
              goto __pyx_L58_except_error;
            }
            __pyx_L66_return: {
              __pyx_t_27 = __pyx_r;
              __pyx_r = 0;
              __Pyx_DECREF(__pyx_v_e); __pyx_v_e = 0;
              __pyx_r = __pyx_t_27;
              __pyx_t_27 = 0;
              goto __pyx_L59_except_return;
            }
          }
        }
        goto __pyx_L58_except_error;
+365:                 return _create_error(name, value, f'{annotated_type} has no column {name}', val_type, annotated_type, e)
            __Pyx_XDECREF(__pyx_r);
            __pyx_t_1 = PyTuple_New(3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 365, __pyx_L67_error)
            __Pyx_GOTREF(__pyx_t_1);
            __pyx_t_15 = 0;
            __pyx_t_11 = 127;
            __pyx_t_16 = __Pyx_PyObject_FormatSimple(__pyx_v_annotated_type, __pyx_empty_unicode); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 365, __pyx_L67_error)
            __Pyx_GOTREF(__pyx_t_16);
            __pyx_t_11 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_16) > __pyx_t_11) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_16) : __pyx_t_11;
            __pyx_t_15 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_16);
            __Pyx_GIVEREF(__pyx_t_16);
            PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_16);
            __pyx_t_16 = 0;
            __Pyx_INCREF(__pyx_kp_u_has_no_column);
            __pyx_t_15 += 15;
            __Pyx_GIVEREF(__pyx_kp_u_has_no_column);
            PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_kp_u_has_no_column);
            __pyx_t_16 = __Pyx_PyUnicode_Unicode(__pyx_v_name); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 365, __pyx_L67_error)
            __Pyx_GOTREF(__pyx_t_16);
            __pyx_t_11 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_16) > __pyx_t_11) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_16) : __pyx_t_11;
            __pyx_t_15 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_16);
            __Pyx_GIVEREF(__pyx_t_16);
            PyTuple_SET_ITEM(__pyx_t_1, 2, __pyx_t_16);
            __pyx_t_16 = 0;
            __pyx_t_16 = __Pyx_PyUnicode_Join(__pyx_t_1, 3, __pyx_t_15, __pyx_t_11); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 365, __pyx_L67_error)
            __Pyx_GOTREF(__pyx_t_16);
            __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
            __pyx_t_18.__pyx_n = 1;
            __pyx_t_18.exception = __pyx_v_e;
            __pyx_t_1 = __pyx_f_9datamodel_10validation__create_error(__pyx_v_name, __pyx_v_value, __pyx_t_16, __pyx_v_val_type, __pyx_v_annotated_type, &__pyx_t_18); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 365, __pyx_L67_error)
            __Pyx_GOTREF(__pyx_t_1);
            __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
            __pyx_r = ((PyObject*)__pyx_t_1);
            __pyx_t_1 = 0;
            __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
            __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
            __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
            goto __pyx_L66_return;
          }
+366:             ftype = field.type
      __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_field, __pyx_n_s_type_2); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 366, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __pyx_v_ftype = __pyx_t_8;
      __pyx_t_8 = 0;
+367:             if ftype <> val_type:
      __pyx_t_8 = PyObject_RichCompare(__pyx_v_ftype, __pyx_v_val_type, Py_NE); __Pyx_XGOTREF(__pyx_t_8); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 367, __pyx_L1_error)
      __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_8); if (unlikely((__pyx_t_3 < 0))) __PYX_ERR(0, 367, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      if (__pyx_t_3) {
/* … */
      }
+368:                 return _create_error(
        __Pyx_XDECREF(__pyx_r);
/* … */
        __pyx_t_8 = __pyx_f_9datamodel_10validation__create_error(__pyx_v_name, __pyx_v_value, __pyx_t_17, __pyx_v_val_type, __pyx_v_annotated_type, NULL); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 368, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_8);
        __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
        __pyx_r = ((PyObject*)__pyx_t_8);
        __pyx_t_8 = 0;
        goto __pyx_L0;
 369:                     name,
 370:                     value,
+371:                     f"Invalid type for {annotated_type}.{name}, expected {ftype}",
        __pyx_t_8 = PyTuple_New(6); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 371, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_8);
        __pyx_t_15 = 0;
        __pyx_t_11 = 127;
        __Pyx_INCREF(__pyx_kp_u_Invalid_type_for);
        __pyx_t_15 += 17;
        __Pyx_GIVEREF(__pyx_kp_u_Invalid_type_for);
        PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_kp_u_Invalid_type_for);
        __pyx_t_17 = __Pyx_PyObject_FormatSimple(__pyx_v_annotated_type, __pyx_empty_unicode); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 371, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_17);
        __pyx_t_11 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_17) > __pyx_t_11) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_17) : __pyx_t_11;
        __pyx_t_15 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_17);
        __Pyx_GIVEREF(__pyx_t_17);
        PyTuple_SET_ITEM(__pyx_t_8, 1, __pyx_t_17);
        __pyx_t_17 = 0;
        __Pyx_INCREF(__pyx_kp_u__11);
        __pyx_t_15 += 1;
        __Pyx_GIVEREF(__pyx_kp_u__11);
        PyTuple_SET_ITEM(__pyx_t_8, 2, __pyx_kp_u__11);
        __pyx_t_17 = __Pyx_PyUnicode_Unicode(__pyx_v_name); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 371, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_17);
        __pyx_t_11 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_17) > __pyx_t_11) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_17) : __pyx_t_11;
        __pyx_t_15 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_17);
        __Pyx_GIVEREF(__pyx_t_17);
        PyTuple_SET_ITEM(__pyx_t_8, 3, __pyx_t_17);
        __pyx_t_17 = 0;
        __Pyx_INCREF(__pyx_kp_u_expected);
        __pyx_t_15 += 11;
        __Pyx_GIVEREF(__pyx_kp_u_expected);
        PyTuple_SET_ITEM(__pyx_t_8, 4, __pyx_kp_u_expected);
        __pyx_t_17 = __Pyx_PyObject_FormatSimple(__pyx_v_ftype, __pyx_empty_unicode); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 371, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_17);
        __pyx_t_11 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_17) > __pyx_t_11) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_17) : __pyx_t_11;
        __pyx_t_15 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_17);
        __Pyx_GIVEREF(__pyx_t_17);
        PyTuple_SET_ITEM(__pyx_t_8, 5, __pyx_t_17);
        __pyx_t_17 = 0;
        __pyx_t_17 = __Pyx_PyUnicode_Join(__pyx_t_8, 6, __pyx_t_15, __pyx_t_11); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 371, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_17);
        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 372:                     val_type,
 373:                     annotated_type
 374:                 )
 375:         else:
 376:             # Validate primary key
+377:             pk_field = get_primary_key_field(annotated_type, name, field_meta)
    /*else*/ {
      __pyx_t_8 = __pyx_f_9datamodel_10validation_get_primary_key_field(__pyx_v_annotated_type, __pyx_v_name, __pyx_v_field_meta); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 377, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __pyx_v_pk_field = __pyx_t_8;
      __pyx_t_8 = 0;
+378:             if pk_field:
      __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_v_pk_field); if (unlikely((__pyx_t_3 < 0))) __PYX_ERR(0, 378, __pyx_L1_error)
      if (__pyx_t_3) {
/* … */
      }
    }
    __pyx_L54:;
+379:                 pk_type = pk_field.type
        __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_pk_field, __pyx_n_s_type_2); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 379, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_8);
        __pyx_v_pk_type = __pyx_t_8;
        __pyx_t_8 = 0;
+380:                 if not isinstance(value, pk_type):
        __pyx_t_3 = PyObject_IsInstance(__pyx_v_value, __pyx_v_pk_type); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(0, 380, __pyx_L1_error)
        __pyx_t_2 = (!__pyx_t_3);
        if (__pyx_t_2) {
/* … */
        }
+381:                     return _create_error(
          __Pyx_XDECREF(__pyx_r);
/* … */
          __pyx_t_8 = __pyx_f_9datamodel_10validation__create_error(__pyx_v_name, __pyx_v_value, __pyx_t_4, __pyx_v_val_type, __pyx_v_pk_type, NULL); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 381, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_8);
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          __pyx_r = ((PyObject*)__pyx_t_8);
          __pyx_t_8 = 0;
          goto __pyx_L0;
 382:                         name,
 383:                         value,
+384:                         f"Invalid type for {annotated_type}.{pk_field.name}, expected {pk_type}",
          __pyx_t_8 = PyTuple_New(6); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 384, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_8);
          __pyx_t_15 = 0;
          __pyx_t_11 = 127;
          __Pyx_INCREF(__pyx_kp_u_Invalid_type_for);
          __pyx_t_15 += 17;
          __Pyx_GIVEREF(__pyx_kp_u_Invalid_type_for);
          PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_kp_u_Invalid_type_for);
          __pyx_t_17 = __Pyx_PyObject_FormatSimple(__pyx_v_annotated_type, __pyx_empty_unicode); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 384, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_17);
          __pyx_t_11 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_17) > __pyx_t_11) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_17) : __pyx_t_11;
          __pyx_t_15 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_17);
          __Pyx_GIVEREF(__pyx_t_17);
          PyTuple_SET_ITEM(__pyx_t_8, 1, __pyx_t_17);
          __pyx_t_17 = 0;
          __Pyx_INCREF(__pyx_kp_u__11);
          __pyx_t_15 += 1;
          __Pyx_GIVEREF(__pyx_kp_u__11);
          PyTuple_SET_ITEM(__pyx_t_8, 2, __pyx_kp_u__11);
          __pyx_t_17 = __Pyx_PyObject_GetAttrStr(__pyx_v_pk_field, __pyx_n_s_name); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 384, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_17);
          __pyx_t_4 = __Pyx_PyObject_FormatSimple(__pyx_t_17, __pyx_empty_unicode); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 384, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_4);
          __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
          __pyx_t_11 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_4) > __pyx_t_11) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_4) : __pyx_t_11;
          __pyx_t_15 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_4);
          __Pyx_GIVEREF(__pyx_t_4);
          PyTuple_SET_ITEM(__pyx_t_8, 3, __pyx_t_4);
          __pyx_t_4 = 0;
          __Pyx_INCREF(__pyx_kp_u_expected);
          __pyx_t_15 += 11;
          __Pyx_GIVEREF(__pyx_kp_u_expected);
          PyTuple_SET_ITEM(__pyx_t_8, 4, __pyx_kp_u_expected);
          __pyx_t_4 = __Pyx_PyObject_FormatSimple(__pyx_v_pk_type, __pyx_empty_unicode); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 384, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_4);
          __pyx_t_11 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_4) > __pyx_t_11) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_4) : __pyx_t_11;
          __pyx_t_15 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_4);
          __Pyx_GIVEREF(__pyx_t_4);
          PyTuple_SET_ITEM(__pyx_t_8, 5, __pyx_t_4);
          __pyx_t_4 = 0;
          __pyx_t_4 = __Pyx_PyUnicode_Join(__pyx_t_8, 6, __pyx_t_15, __pyx_t_11); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 384, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_4);
          __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 385:                         val_type,
 386:                         pk_type
 387:                     )
+388:     elif is_optional_type(annotated_type):
  __pyx_t_28 = __pyx_f_9datamodel_10validation_is_optional_type(__pyx_v_annotated_type, 0); if (unlikely(__pyx_t_28 == ((bool)-1) && PyErr_Occurred())) __PYX_ERR(0, 388, __pyx_L1_error)
  __pyx_t_2 = (__pyx_t_28 != 0);
  if (__pyx_t_2) {
/* … */
    goto __pyx_L17;
  }
+389:         inner_types = get_args(annotated_type)
    __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_get_args); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 389, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_17 = NULL;
    __pyx_t_9 = 0;
    #if CYTHON_UNPACK_METHODS
    if (unlikely(PyMethod_Check(__pyx_t_4))) {
      __pyx_t_17 = PyMethod_GET_SELF(__pyx_t_4);
      if (likely(__pyx_t_17)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
        __Pyx_INCREF(__pyx_t_17);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_4, function);
        __pyx_t_9 = 1;
      }
    }
    #endif
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_17, __pyx_v_annotated_type};
      __pyx_t_8 = __Pyx_PyObject_FastCall(__pyx_t_4, __pyx_callargs+1-__pyx_t_9, 1+__pyx_t_9);
      __Pyx_XDECREF(__pyx_t_17); __pyx_t_17 = 0;
      if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 389, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    }
    __pyx_v_inner_types = __pyx_t_8;
    __pyx_t_8 = 0;
+390:         for t in inner_types:
    if (likely(PyList_CheckExact(__pyx_v_inner_types)) || PyTuple_CheckExact(__pyx_v_inner_types)) {
      __pyx_t_8 = __pyx_v_inner_types; __Pyx_INCREF(__pyx_t_8);
      __pyx_t_15 = 0;
      __pyx_t_13 = NULL;
    } else {
      __pyx_t_15 = -1; __pyx_t_8 = PyObject_GetIter(__pyx_v_inner_types); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 390, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __pyx_t_13 = __Pyx_PyObject_GetIterNextFunc(__pyx_t_8); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 390, __pyx_L1_error)
    }
    for (;;) {
      if (likely(!__pyx_t_13)) {
        if (likely(PyList_CheckExact(__pyx_t_8))) {
          {
            Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_t_8);
            #if !CYTHON_ASSUME_SAFE_MACROS
            if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 390, __pyx_L1_error)
            #endif
            if (__pyx_t_15 >= __pyx_temp) break;
          }
          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
          __pyx_t_4 = PyList_GET_ITEM(__pyx_t_8, __pyx_t_15); __Pyx_INCREF(__pyx_t_4); __pyx_t_15++; if (unlikely((0 < 0))) __PYX_ERR(0, 390, __pyx_L1_error)
          #else
          __pyx_t_4 = __Pyx_PySequence_ITEM(__pyx_t_8, __pyx_t_15); __pyx_t_15++; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 390, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_4);
          #endif
        } else {
          {
            Py_ssize_t __pyx_temp = __Pyx_PyTuple_GET_SIZE(__pyx_t_8);
            #if !CYTHON_ASSUME_SAFE_MACROS
            if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 390, __pyx_L1_error)
            #endif
            if (__pyx_t_15 >= __pyx_temp) break;
          }
          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
          __pyx_t_4 = PyTuple_GET_ITEM(__pyx_t_8, __pyx_t_15); __Pyx_INCREF(__pyx_t_4); __pyx_t_15++; if (unlikely((0 < 0))) __PYX_ERR(0, 390, __pyx_L1_error)
          #else
          __pyx_t_4 = __Pyx_PySequence_ITEM(__pyx_t_8, __pyx_t_15); __pyx_t_15++; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 390, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_4);
          #endif
        }
      } else {
        __pyx_t_4 = __pyx_t_13(__pyx_t_8);
        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, 390, __pyx_L1_error)
          }
          break;
        }
        __Pyx_GOTREF(__pyx_t_4);
      }
      __Pyx_XDECREF_SET(__pyx_v_t, __pyx_t_4);
      __pyx_t_4 = 0;
/* … */
    }
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    goto __pyx_L81_for_else;
    __pyx_L77_break:;
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    goto __pyx_L82_for_end;
    /*else*/ {
      __pyx_L81_for_else:;
+391:             if t is type(None) and value is None:
      __pyx_t_3 = (__pyx_v_t == ((PyObject *)Py_TYPE(Py_None)));
      if (__pyx_t_3) {
      } else {
        __pyx_t_2 = __pyx_t_3;
        goto __pyx_L79_bool_binop_done;
      }
      __pyx_t_3 = (__pyx_v_value == Py_None);
      __pyx_t_2 = __pyx_t_3;
      __pyx_L79_bool_binop_done:;
      if (__pyx_t_2) {
/* … */
      }
+392:                 break
        goto __pyx_L77_break;
+393:             elif is_instanceof(val_type, t):
      if (!(likely(PyType_CheckExact(__pyx_v_t))||((__pyx_v_t) == Py_None) || __Pyx_RaiseUnexpectedTypeError("type", __pyx_v_t))) __PYX_ERR(0, 393, __pyx_L1_error)
      __pyx_t_28 = __pyx_f_9datamodel_10validation_is_instanceof(__pyx_v_val_type, ((PyTypeObject*)__pyx_v_t)); if (unlikely(__pyx_t_28 == ((bool)-1) && PyErr_Occurred())) __PYX_ERR(0, 393, __pyx_L1_error)
      __pyx_t_2 = (__pyx_t_28 != 0);
      if (__pyx_t_2) {
/* … */
      }
+394:                 break
        goto __pyx_L77_break;
+395:             elif val_type == t:
      __pyx_t_4 = PyObject_RichCompare(__pyx_v_val_type, __pyx_v_t, Py_EQ); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 395, __pyx_L1_error)
      __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 395, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      if (__pyx_t_2) {
/* … */
      }
+396:                 break
        goto __pyx_L77_break;
 397:         else:
+398:             return _create_error(
      __Pyx_XDECREF(__pyx_r);
/* … */
      __pyx_t_8 = __pyx_f_9datamodel_10validation__create_error(__pyx_v_name, __pyx_v_value, __pyx_t_4, __pyx_v_val_type, __pyx_v_annotated_type, NULL); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 398, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __pyx_r = ((PyObject*)__pyx_t_8);
      __pyx_t_8 = 0;
      goto __pyx_L0;
    }
    __pyx_L82_for_end:;
 399:                 name,
 400:                 value,
+401:                 f"Invalid type for {annotated_type}.{name}, expected one of {inner_types}",
      __pyx_t_8 = PyTuple_New(6); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 401, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __pyx_t_15 = 0;
      __pyx_t_11 = 127;
      __Pyx_INCREF(__pyx_kp_u_Invalid_type_for);
      __pyx_t_15 += 17;
      __Pyx_GIVEREF(__pyx_kp_u_Invalid_type_for);
      PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_kp_u_Invalid_type_for);
      __pyx_t_4 = __Pyx_PyObject_FormatSimple(__pyx_v_annotated_type, __pyx_empty_unicode); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 401, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_t_11 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_4) > __pyx_t_11) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_4) : __pyx_t_11;
      __pyx_t_15 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_4);
      __Pyx_GIVEREF(__pyx_t_4);
      PyTuple_SET_ITEM(__pyx_t_8, 1, __pyx_t_4);
      __pyx_t_4 = 0;
      __Pyx_INCREF(__pyx_kp_u__11);
      __pyx_t_15 += 1;
      __Pyx_GIVEREF(__pyx_kp_u__11);
      PyTuple_SET_ITEM(__pyx_t_8, 2, __pyx_kp_u__11);
      __pyx_t_4 = __Pyx_PyUnicode_Unicode(__pyx_v_name); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 401, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_t_11 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_4) > __pyx_t_11) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_4) : __pyx_t_11;
      __pyx_t_15 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_4);
      __Pyx_GIVEREF(__pyx_t_4);
      PyTuple_SET_ITEM(__pyx_t_8, 3, __pyx_t_4);
      __pyx_t_4 = 0;
      __Pyx_INCREF(__pyx_kp_u_expected_one_of);
      __pyx_t_15 += 18;
      __Pyx_GIVEREF(__pyx_kp_u_expected_one_of);
      PyTuple_SET_ITEM(__pyx_t_8, 4, __pyx_kp_u_expected_one_of);
      __pyx_t_4 = __Pyx_PyObject_FormatSimple(__pyx_v_inner_types, __pyx_empty_unicode); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 401, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_t_11 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_4) > __pyx_t_11) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_4) : __pyx_t_11;
      __pyx_t_15 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_4);
      __Pyx_GIVEREF(__pyx_t_4);
      PyTuple_SET_ITEM(__pyx_t_8, 5, __pyx_t_4);
      __pyx_t_4 = 0;
      __pyx_t_4 = __Pyx_PyUnicode_Join(__pyx_t_8, 6, __pyx_t_15, __pyx_t_11); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 401, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 402:                 val_type,
 403:                 annotated_type
 404:             )
+405:     elif val_type != annotated_type:
  __pyx_t_8 = PyObject_RichCompare(__pyx_v_val_type, __pyx_v_annotated_type, Py_NE); __Pyx_XGOTREF(__pyx_t_8); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 405, __pyx_L1_error)
  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_8); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 405, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  if (__pyx_t_2) {
/* … */
  }
  __pyx_L17:;
+406:         instance = is_instanceof(value, annotated_type)
    if (!(likely(PyType_CheckExact(__pyx_v_annotated_type))||((__pyx_v_annotated_type) == Py_None) || __Pyx_RaiseUnexpectedTypeError("type", __pyx_v_annotated_type))) __PYX_ERR(0, 406, __pyx_L1_error)
    __pyx_t_28 = __pyx_f_9datamodel_10validation_is_instanceof(__pyx_v_value, ((PyTypeObject*)__pyx_v_annotated_type)); if (unlikely(__pyx_t_28 == ((bool)-1) && PyErr_Occurred())) __PYX_ERR(0, 406, __pyx_L1_error)
    __pyx_v_instance = __pyx_t_28;
+407:         if not instance:
    __pyx_t_2 = (!(__pyx_v_instance != 0));
    if (__pyx_t_2) {
/* … */
    }
+408:             return _create_error(
      __Pyx_XDECREF(__pyx_r);
/* … */
      __pyx_t_8 = __pyx_f_9datamodel_10validation__create_error(__pyx_v_name, __pyx_v_value, __pyx_t_4, __pyx_v_val_type, __pyx_v_annotated_type, NULL); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 408, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __pyx_r = ((PyObject*)__pyx_t_8);
      __pyx_t_8 = 0;
      goto __pyx_L0;
 409:                 name,
 410:                 value,
+411:                 f"Invalid Instance for {annotated_type}.{name}, expected {annotated_type}",
      __pyx_t_8 = PyTuple_New(6); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 411, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __pyx_t_15 = 0;
      __pyx_t_11 = 127;
      __Pyx_INCREF(__pyx_kp_u_Invalid_Instance_for);
      __pyx_t_15 += 21;
      __Pyx_GIVEREF(__pyx_kp_u_Invalid_Instance_for);
      PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_kp_u_Invalid_Instance_for);
      __pyx_t_4 = __Pyx_PyObject_FormatSimple(__pyx_v_annotated_type, __pyx_empty_unicode); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 411, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_t_11 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_4) > __pyx_t_11) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_4) : __pyx_t_11;
      __pyx_t_15 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_4);
      __Pyx_GIVEREF(__pyx_t_4);
      PyTuple_SET_ITEM(__pyx_t_8, 1, __pyx_t_4);
      __pyx_t_4 = 0;
      __Pyx_INCREF(__pyx_kp_u__11);
      __pyx_t_15 += 1;
      __Pyx_GIVEREF(__pyx_kp_u__11);
      PyTuple_SET_ITEM(__pyx_t_8, 2, __pyx_kp_u__11);
      __pyx_t_4 = __Pyx_PyUnicode_Unicode(__pyx_v_name); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 411, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_t_11 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_4) > __pyx_t_11) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_4) : __pyx_t_11;
      __pyx_t_15 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_4);
      __Pyx_GIVEREF(__pyx_t_4);
      PyTuple_SET_ITEM(__pyx_t_8, 3, __pyx_t_4);
      __pyx_t_4 = 0;
      __Pyx_INCREF(__pyx_kp_u_expected);
      __pyx_t_15 += 11;
      __Pyx_GIVEREF(__pyx_kp_u_expected);
      PyTuple_SET_ITEM(__pyx_t_8, 4, __pyx_kp_u_expected);
      __pyx_t_4 = __Pyx_PyObject_FormatSimple(__pyx_v_annotated_type, __pyx_empty_unicode); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 411, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_t_11 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_4) > __pyx_t_11) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_4) : __pyx_t_11;
      __pyx_t_15 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_4);
      __Pyx_GIVEREF(__pyx_t_4);
      PyTuple_SET_ITEM(__pyx_t_8, 5, __pyx_t_4);
      __pyx_t_4 = 0;
      __pyx_t_4 = __Pyx_PyUnicode_Join(__pyx_t_8, 6, __pyx_t_15, __pyx_t_11); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 411, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 412:                 val_type,
 413:                 annotated_type
 414:             )
+415:     return error
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_error);
  __pyx_r = __pyx_v_error;
  goto __pyx_L0;
 416: 
+417: cdef dict _create_error(str name, object value, object error, object val_type, object annotated_type, object exception = None):
static PyObject *__pyx_f_9datamodel_10validation__create_error(PyObject *__pyx_v_name, PyObject *__pyx_v_value, PyObject *__pyx_v_error, PyObject *__pyx_v_val_type, PyObject *__pyx_v_annotated_type, struct __pyx_opt_args_9datamodel_10validation__create_error *__pyx_optional_args) {
  PyObject *__pyx_v_exception = ((PyObject *)Py_None);
  PyObject *__pyx_r = NULL;
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_exception = __pyx_optional_args->exception;
    }
  }
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("datamodel.validation._create_error", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
struct __pyx_opt_args_9datamodel_10validation__create_error {
  int __pyx_n;
  PyObject *exception;
};
+418:     return {
  __Pyx_XDECREF(__pyx_r);
+419:         "field": name,
  __pyx_t_1 = __Pyx_PyDict_NewPresized(6); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 419, __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, 419, __pyx_L1_error)
+420:         "value": value,
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_value, __pyx_v_value) < 0) __PYX_ERR(0, 419, __pyx_L1_error)
+421:         "error": error,
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_error, __pyx_v_error) < 0) __PYX_ERR(0, 419, __pyx_L1_error)
+422:         "value_type": val_type,
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_value_type, __pyx_v_val_type) < 0) __PYX_ERR(0, 419, __pyx_L1_error)
+423:         "annotation": annotated_type,
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_annotation, __pyx_v_annotated_type) < 0) __PYX_ERR(0, 419, __pyx_L1_error)
+424:         "exception": exception
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_exception, __pyx_v_exception) < 0) __PYX_ERR(0, 419, __pyx_L1_error)
  __pyx_r = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
  goto __pyx_L0;
 425:     }
 426: 
 427: # Define a validator function for uint64
+428: def validate_uint64(value: int) -> None:
/* Python wrapper */
static PyObject *__pyx_pw_9datamodel_10validation_5validate_uint64(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_10validation_4validate_uint64, "validate_uint64(int value: int) -> None\nValidate uint64 values.\n    ");
static PyMethodDef __pyx_mdef_9datamodel_10validation_5validate_uint64 = {"validate_uint64", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9datamodel_10validation_5validate_uint64, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_9datamodel_10validation_4validate_uint64};
static PyObject *__pyx_pw_9datamodel_10validation_5validate_uint64(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_value = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("validate_uint64 (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_value,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_value)) != 0)) {
          (void)__Pyx_Arg_NewRef_FASTCALL(values[0]);
          kw_args--;
        }
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 428, __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, "validate_uint64") < 0)) __PYX_ERR(0, 428, __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_value = ((PyObject*)values[0]);
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("validate_uint64", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 428, __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.validation.validate_uint64", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_value), (&PyInt_Type), 0, "value", 1))) __PYX_ERR(0, 428, __pyx_L1_error)
  __pyx_r = __pyx_pf_9datamodel_10validation_4validate_uint64(__pyx_self, __pyx_v_value);
  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_10validation_4validate_uint64(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_value) {
  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_3);
  __Pyx_AddTraceback("datamodel.validation.validate_uint64", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__22 = PyTuple_Pack(1, __pyx_n_s_value); if (unlikely(!__pyx_tuple__22)) __PYX_ERR(0, 428, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__22);
  __Pyx_GIVEREF(__pyx_tuple__22);
/* … */
  __pyx_t_2 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 428, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_value, __pyx_n_s_int) < 0) __PYX_ERR(0, 428, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_return, __pyx_n_s_None) < 0) __PYX_ERR(0, 428, __pyx_L1_error)
  __pyx_t_4 = __Pyx_CyFunction_New(&__pyx_mdef_9datamodel_10validation_5validate_uint64, 0, __pyx_n_s_validate_uint64, NULL, __pyx_n_s_datamodel_validation, __pyx_d, ((PyObject *)__pyx_codeobj__23)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 428, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_4, __pyx_t_2);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_validate_uint64, __pyx_t_4) < 0) __PYX_ERR(0, 428, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 429:     """Validate uint64 values.
 430:     """
+431:     if value < uint64_min or value > uint64_max:
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_uint64_min); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 431, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = PyObject_RichCompare(__pyx_v_value, __pyx_t_2, Py_LT); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 431, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely((__pyx_t_4 < 0))) __PYX_ERR(0, 431, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (!__pyx_t_4) {
  } else {
    __pyx_t_1 = __pyx_t_4;
    goto __pyx_L4_bool_binop_done;
  }
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_uint64_max); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 431, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_2 = PyObject_RichCompare(__pyx_v_value, __pyx_t_3, Py_GT); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 431, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely((__pyx_t_4 < 0))) __PYX_ERR(0, 431, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_1 = __pyx_t_4;
  __pyx_L4_bool_binop_done:;
  if (unlikely(__pyx_t_1)) {
/* … */
  }
+432:         raise ValueError(f"{value} is not a valid uint64")
    __pyx_t_2 = __Pyx_PyObject_FormatSimple(__pyx_v_value, __pyx_empty_unicode); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 432, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_3 = __Pyx_PyUnicode_ConcatInPlace(__pyx_t_2, __pyx_kp_u_is_not_a_valid_uint64); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 432, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_builtin_ValueError, __pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 432, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_Raise(__pyx_t_2, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __PYX_ERR(0, 432, __pyx_L1_error)
 433: 
+434: cdef dict validate_type(object F, object name, object value, object annotated_type, object val_type):
static PyObject *__pyx_f_9datamodel_10validation_validate_type(PyObject *__pyx_v_F, PyObject *__pyx_v_name, PyObject *__pyx_v_value, PyObject *__pyx_v_annotated_type, PyObject *__pyx_v_val_type) {
  PyObject *__pyx_v_inner_types = NULL;
  PyObject *__pyx_v_allowed = NULL;
  PyObject *__pyx_v_expected = NULL;
  PyObject *__pyx_8genexpr1__pyx_v_t = NULL;
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_AddTraceback("datamodel.validation.validate_type", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_inner_types);
  __Pyx_XDECREF(__pyx_v_allowed);
  __Pyx_XDECREF(__pyx_v_expected);
  __Pyx_XDECREF(__pyx_8genexpr1__pyx_v_t);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 435:     """
 436:     Validate that 'value' is of type 'annotated_type'.
 437:     If 'annotated_type' is a Union, checks if 'value' is an instance of any of the union types.
 438:     Returns None if valid; otherwise, returns an error object via _create_error.
 439:     """
+440:     if not isinstance(value, type):
  __pyx_t_1 = PyType_Check(__pyx_v_value); 
  __pyx_t_2 = (!__pyx_t_1);
  if (__pyx_t_2) {
/* … */
  }
+441:         return _create_error(name, value, f'Invalid type for {annotated_type}.{name}, expected a type', val_type, annotated_type)
    __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, 441, __pyx_L1_error)
    __pyx_t_3 = PyTuple_New(5); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 441, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_4 = 0;
    __pyx_t_5 = 127;
    __Pyx_INCREF(__pyx_kp_u_Invalid_type_for);
    __pyx_t_4 += 17;
    __Pyx_GIVEREF(__pyx_kp_u_Invalid_type_for);
    PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_kp_u_Invalid_type_for);
    __pyx_t_6 = __Pyx_PyObject_FormatSimple(__pyx_v_annotated_type, __pyx_empty_unicode); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 441, __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_4 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_6);
    __Pyx_GIVEREF(__pyx_t_6);
    PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_6);
    __pyx_t_6 = 0;
    __Pyx_INCREF(__pyx_kp_u__11);
    __pyx_t_4 += 1;
    __Pyx_GIVEREF(__pyx_kp_u__11);
    PyTuple_SET_ITEM(__pyx_t_3, 2, __pyx_kp_u__11);
    __pyx_t_6 = __Pyx_PyObject_FormatSimple(__pyx_v_name, __pyx_empty_unicode); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 441, __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_4 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_6);
    __Pyx_GIVEREF(__pyx_t_6);
    PyTuple_SET_ITEM(__pyx_t_3, 3, __pyx_t_6);
    __pyx_t_6 = 0;
    __Pyx_INCREF(__pyx_kp_u_expected_a_type);
    __pyx_t_4 += 17;
    __Pyx_GIVEREF(__pyx_kp_u_expected_a_type);
    PyTuple_SET_ITEM(__pyx_t_3, 4, __pyx_kp_u_expected_a_type);
    __pyx_t_6 = __Pyx_PyUnicode_Join(__pyx_t_3, 5, __pyx_t_4, __pyx_t_5); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 441, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_3 = __pyx_f_9datamodel_10validation__create_error(((PyObject*)__pyx_v_name), __pyx_v_value, __pyx_t_6, __pyx_v_val_type, __pyx_v_annotated_type, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 441, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __pyx_r = ((PyObject*)__pyx_t_3);
    __pyx_t_3 = 0;
    goto __pyx_L0;
+442:     inner_types = get_args(F.args[0])
  __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_get_args); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 442, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_F, __pyx_n_s_args); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 442, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __pyx_t_8 = __Pyx_GetItemInt(__pyx_t_7, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 442, __pyx_L1_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_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_9 = 1;
    }
  }
  #endif
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_t_8};
    __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_6, __pyx_callargs+1-__pyx_t_9, 1+__pyx_t_9);
    __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 442, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  }
  __pyx_v_inner_types = __pyx_t_3;
  __pyx_t_3 = 0;
+443:     for allowed in inner_types:
  if (likely(PyList_CheckExact(__pyx_v_inner_types)) || PyTuple_CheckExact(__pyx_v_inner_types)) {
    __pyx_t_3 = __pyx_v_inner_types; __Pyx_INCREF(__pyx_t_3);
    __pyx_t_4 = 0;
    __pyx_t_10 = NULL;
  } else {
    __pyx_t_4 = -1; __pyx_t_3 = PyObject_GetIter(__pyx_v_inner_types); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 443, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_10 = __Pyx_PyObject_GetIterNextFunc(__pyx_t_3); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 443, __pyx_L1_error)
  }
  for (;;) {
    if (likely(!__pyx_t_10)) {
      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, 443, __pyx_L1_error)
          #endif
          if (__pyx_t_4 >= __pyx_temp) break;
        }
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_6 = PyList_GET_ITEM(__pyx_t_3, __pyx_t_4); __Pyx_INCREF(__pyx_t_6); __pyx_t_4++; if (unlikely((0 < 0))) __PYX_ERR(0, 443, __pyx_L1_error)
        #else
        __pyx_t_6 = __Pyx_PySequence_ITEM(__pyx_t_3, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 443, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_6);
        #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, 443, __pyx_L1_error)
          #endif
          if (__pyx_t_4 >= __pyx_temp) break;
        }
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_6 = PyTuple_GET_ITEM(__pyx_t_3, __pyx_t_4); __Pyx_INCREF(__pyx_t_6); __pyx_t_4++; if (unlikely((0 < 0))) __PYX_ERR(0, 443, __pyx_L1_error)
        #else
        __pyx_t_6 = __Pyx_PySequence_ITEM(__pyx_t_3, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 443, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_6);
        #endif
      }
    } else {
      __pyx_t_6 = __pyx_t_10(__pyx_t_3);
      if (unlikely(!__pyx_t_6)) {
        PyObject* exc_type = PyErr_Occurred();
        if (exc_type) {
          if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
          else __PYX_ERR(0, 443, __pyx_L1_error)
        }
        break;
      }
      __Pyx_GOTREF(__pyx_t_6);
    }
    __Pyx_XDECREF_SET(__pyx_v_allowed, __pyx_t_6);
    __pyx_t_6 = 0;
/* … */
  }
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+444:         if value is allowed:
    __pyx_t_2 = (__pyx_v_value == __pyx_v_allowed);
    if (__pyx_t_2) {
/* … */
    }
+445:             return {}
      __Pyx_XDECREF(__pyx_r);
      __pyx_t_6 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 445, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __pyx_r = ((PyObject*)__pyx_t_6);
      __pyx_t_6 = 0;
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      goto __pyx_L0;
+446:     expected = ', '.join([str(t) for t in F.args])
  { /* enter inner scope */
    __pyx_t_3 = PyList_New(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 446, __pyx_L10_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_F, __pyx_n_s_args); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 446, __pyx_L10_error)
    __Pyx_GOTREF(__pyx_t_6);
    if (likely(PyList_CheckExact(__pyx_t_6)) || PyTuple_CheckExact(__pyx_t_6)) {
      __pyx_t_8 = __pyx_t_6; __Pyx_INCREF(__pyx_t_8);
      __pyx_t_4 = 0;
      __pyx_t_10 = NULL;
    } else {
      __pyx_t_4 = -1; __pyx_t_8 = PyObject_GetIter(__pyx_t_6); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 446, __pyx_L10_error)
      __Pyx_GOTREF(__pyx_t_8);
      __pyx_t_10 = __Pyx_PyObject_GetIterNextFunc(__pyx_t_8); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 446, __pyx_L10_error)
    }
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    for (;;) {
      if (likely(!__pyx_t_10)) {
        if (likely(PyList_CheckExact(__pyx_t_8))) {
          {
            Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_t_8);
            #if !CYTHON_ASSUME_SAFE_MACROS
            if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 446, __pyx_L10_error)
            #endif
            if (__pyx_t_4 >= __pyx_temp) break;
          }
          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
          __pyx_t_6 = PyList_GET_ITEM(__pyx_t_8, __pyx_t_4); __Pyx_INCREF(__pyx_t_6); __pyx_t_4++; if (unlikely((0 < 0))) __PYX_ERR(0, 446, __pyx_L10_error)
          #else
          __pyx_t_6 = __Pyx_PySequence_ITEM(__pyx_t_8, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 446, __pyx_L10_error)
          __Pyx_GOTREF(__pyx_t_6);
          #endif
        } else {
          {
            Py_ssize_t __pyx_temp = __Pyx_PyTuple_GET_SIZE(__pyx_t_8);
            #if !CYTHON_ASSUME_SAFE_MACROS
            if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 446, __pyx_L10_error)
            #endif
            if (__pyx_t_4 >= __pyx_temp) break;
          }
          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
          __pyx_t_6 = PyTuple_GET_ITEM(__pyx_t_8, __pyx_t_4); __Pyx_INCREF(__pyx_t_6); __pyx_t_4++; if (unlikely((0 < 0))) __PYX_ERR(0, 446, __pyx_L10_error)
          #else
          __pyx_t_6 = __Pyx_PySequence_ITEM(__pyx_t_8, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 446, __pyx_L10_error)
          __Pyx_GOTREF(__pyx_t_6);
          #endif
        }
      } else {
        __pyx_t_6 = __pyx_t_10(__pyx_t_8);
        if (unlikely(!__pyx_t_6)) {
          PyObject* exc_type = PyErr_Occurred();
          if (exc_type) {
            if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
            else __PYX_ERR(0, 446, __pyx_L10_error)
          }
          break;
        }
        __Pyx_GOTREF(__pyx_t_6);
      }
      __Pyx_XDECREF_SET(__pyx_8genexpr1__pyx_v_t, __pyx_t_6);
      __pyx_t_6 = 0;
      __pyx_t_6 = __Pyx_PyObject_Unicode(__pyx_8genexpr1__pyx_v_t); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 446, __pyx_L10_error)
      __Pyx_GOTREF(__pyx_t_6);
      if (unlikely(__Pyx_ListComp_Append(__pyx_t_3, (PyObject*)__pyx_t_6))) __PYX_ERR(0, 446, __pyx_L10_error)
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    }
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    __Pyx_XDECREF(__pyx_8genexpr1__pyx_v_t); __pyx_8genexpr1__pyx_v_t = 0;
    goto __pyx_L14_exit_scope;
    __pyx_L10_error:;
    __Pyx_XDECREF(__pyx_8genexpr1__pyx_v_t); __pyx_8genexpr1__pyx_v_t = 0;
    goto __pyx_L1_error;
    __pyx_L14_exit_scope:;
  } /* exit inner scope */
  __pyx_t_8 = PyUnicode_Join(__pyx_kp_u__14, __pyx_t_3); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 446, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_v_expected = ((PyObject*)__pyx_t_8);
  __pyx_t_8 = 0;
+447:     return _create_error(name, value, f'Invalid type for {annotated_type}.{name}, expected a type of {expected}', val_type, annotated_type)
  __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, 447, __pyx_L1_error)
  __pyx_t_8 = PyTuple_New(6); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 447, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __pyx_t_4 = 0;
  __pyx_t_5 = 127;
  __Pyx_INCREF(__pyx_kp_u_Invalid_type_for);
  __pyx_t_4 += 17;
  __Pyx_GIVEREF(__pyx_kp_u_Invalid_type_for);
  PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_kp_u_Invalid_type_for);
  __pyx_t_3 = __Pyx_PyObject_FormatSimple(__pyx_v_annotated_type, __pyx_empty_unicode); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 447, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_5 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_3) > __pyx_t_5) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_3) : __pyx_t_5;
  __pyx_t_4 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_3);
  __Pyx_GIVEREF(__pyx_t_3);
  PyTuple_SET_ITEM(__pyx_t_8, 1, __pyx_t_3);
  __pyx_t_3 = 0;
  __Pyx_INCREF(__pyx_kp_u__11);
  __pyx_t_4 += 1;
  __Pyx_GIVEREF(__pyx_kp_u__11);
  PyTuple_SET_ITEM(__pyx_t_8, 2, __pyx_kp_u__11);
  __pyx_t_3 = __Pyx_PyObject_FormatSimple(__pyx_v_name, __pyx_empty_unicode); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 447, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_5 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_3) > __pyx_t_5) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_3) : __pyx_t_5;
  __pyx_t_4 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_3);
  __Pyx_GIVEREF(__pyx_t_3);
  PyTuple_SET_ITEM(__pyx_t_8, 3, __pyx_t_3);
  __pyx_t_3 = 0;
  __Pyx_INCREF(__pyx_kp_u_expected_a_type_of);
  __pyx_t_4 += 21;
  __Pyx_GIVEREF(__pyx_kp_u_expected_a_type_of);
  PyTuple_SET_ITEM(__pyx_t_8, 4, __pyx_kp_u_expected_a_type_of);
  __pyx_t_3 = __Pyx_PyUnicode_Unicode(__pyx_v_expected); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 447, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_5 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_3) > __pyx_t_5) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_3) : __pyx_t_5;
  __pyx_t_4 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_3);
  __Pyx_GIVEREF(__pyx_t_3);
  PyTuple_SET_ITEM(__pyx_t_8, 5, __pyx_t_3);
  __pyx_t_3 = 0;
  __pyx_t_3 = __Pyx_PyUnicode_Join(__pyx_t_8, 6, __pyx_t_4, __pyx_t_5); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 447, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  __pyx_t_8 = __pyx_f_9datamodel_10validation__create_error(((PyObject*)__pyx_v_name), __pyx_v_value, __pyx_t_3, __pyx_v_val_type, __pyx_v_annotated_type, NULL); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 447, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_r = ((PyObject*)__pyx_t_8);
  __pyx_t_8 = 0;
  goto __pyx_L0;
 448: 
+449: cdef dict validate_enum(object name, object value, object annotated_type, object val_type):
static PyObject *__pyx_f_9datamodel_10validation_validate_enum(PyObject *__pyx_v_name, PyObject *__pyx_v_value, PyObject *__pyx_v_annotated_type, PyObject *__pyx_v_val_type) {
  PyObject *__pyx_v_val = 0;
  PyObject *__pyx_v_enum_values = 0;
  PyObject *__pyx_8genexpr2__pyx_v_e = 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.validation.validate_enum", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_val);
  __Pyx_XDECREF(__pyx_v_enum_values);
  __Pyx_XDECREF(__pyx_8genexpr2__pyx_v_e);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 450:     """
 451:     Validate that 'value' is a valid member of the enum 'annotated_type'.
 452:     If 'value' is an instance of 'annotated_type', use its .value.
 453:     Cache the allowed enum values on the enum type to avoid repeated introspection.
 454:     Returns None if valid; otherwise, returns an error object via _create_error.
 455:     """
+456:     cdef object val = value.value if PyObject_IsInstance(value, annotated_type) else value
  __pyx_t_2 = PyObject_IsInstance(__pyx_v_value, __pyx_v_annotated_type); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 456, __pyx_L1_error)
  if (__pyx_t_2) {
    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_value, __pyx_n_s_value); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 456, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_1 = __pyx_t_3;
    __pyx_t_3 = 0;
  } else {
    __Pyx_INCREF(__pyx_v_value);
    __pyx_t_1 = __pyx_v_value;
  }
  __pyx_v_val = __pyx_t_1;
  __pyx_t_1 = 0;
+457:     cdef object enum_values = [e.value for e in annotated_type]
  { /* enter inner scope */
    __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 457, __pyx_L5_error)
    __Pyx_GOTREF(__pyx_t_1);
    if (likely(PyList_CheckExact(__pyx_v_annotated_type)) || PyTuple_CheckExact(__pyx_v_annotated_type)) {
      __pyx_t_3 = __pyx_v_annotated_type; __Pyx_INCREF(__pyx_t_3);
      __pyx_t_4 = 0;
      __pyx_t_5 = NULL;
    } else {
      __pyx_t_4 = -1; __pyx_t_3 = PyObject_GetIter(__pyx_v_annotated_type); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 457, __pyx_L5_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_5 = __Pyx_PyObject_GetIterNextFunc(__pyx_t_3); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 457, __pyx_L5_error)
    }
    for (;;) {
      if (likely(!__pyx_t_5)) {
        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, 457, __pyx_L5_error)
            #endif
            if (__pyx_t_4 >= __pyx_temp) break;
          }
          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
          __pyx_t_6 = PyList_GET_ITEM(__pyx_t_3, __pyx_t_4); __Pyx_INCREF(__pyx_t_6); __pyx_t_4++; if (unlikely((0 < 0))) __PYX_ERR(0, 457, __pyx_L5_error)
          #else
          __pyx_t_6 = __Pyx_PySequence_ITEM(__pyx_t_3, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 457, __pyx_L5_error)
          __Pyx_GOTREF(__pyx_t_6);
          #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, 457, __pyx_L5_error)
            #endif
            if (__pyx_t_4 >= __pyx_temp) break;
          }
          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
          __pyx_t_6 = PyTuple_GET_ITEM(__pyx_t_3, __pyx_t_4); __Pyx_INCREF(__pyx_t_6); __pyx_t_4++; if (unlikely((0 < 0))) __PYX_ERR(0, 457, __pyx_L5_error)
          #else
          __pyx_t_6 = __Pyx_PySequence_ITEM(__pyx_t_3, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 457, __pyx_L5_error)
          __Pyx_GOTREF(__pyx_t_6);
          #endif
        }
      } else {
        __pyx_t_6 = __pyx_t_5(__pyx_t_3);
        if (unlikely(!__pyx_t_6)) {
          PyObject* exc_type = PyErr_Occurred();
          if (exc_type) {
            if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
            else __PYX_ERR(0, 457, __pyx_L5_error)
          }
          break;
        }
        __Pyx_GOTREF(__pyx_t_6);
      }
      __Pyx_XDECREF_SET(__pyx_8genexpr2__pyx_v_e, __pyx_t_6);
      __pyx_t_6 = 0;
      __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_8genexpr2__pyx_v_e, __pyx_n_s_value); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 457, __pyx_L5_error)
      __Pyx_GOTREF(__pyx_t_6);
      if (unlikely(__Pyx_ListComp_Append(__pyx_t_1, (PyObject*)__pyx_t_6))) __PYX_ERR(0, 457, __pyx_L5_error)
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    }
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_XDECREF(__pyx_8genexpr2__pyx_v_e); __pyx_8genexpr2__pyx_v_e = 0;
    goto __pyx_L9_exit_scope;
    __pyx_L5_error:;
    __Pyx_XDECREF(__pyx_8genexpr2__pyx_v_e); __pyx_8genexpr2__pyx_v_e = 0;
    goto __pyx_L1_error;
    __pyx_L9_exit_scope:;
  } /* exit inner scope */
  __pyx_v_enum_values = __pyx_t_1;
  __pyx_t_1 = 0;
+458:     if val not in enum_values:
  __pyx_t_2 = (__Pyx_PySequence_ContainsTF(__pyx_v_val, __pyx_v_enum_values, Py_NE)); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 458, __pyx_L1_error)
  if (__pyx_t_2) {
/* … */
  }
+459:         return _create_error(
    __Pyx_XDECREF(__pyx_r);
/* … */
    __pyx_t_1 = __pyx_f_9datamodel_10validation__create_error(((PyObject*)__pyx_v_name), __pyx_v_value, __pyx_t_3, __pyx_v_val_type, __pyx_v_annotated_type, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 459, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_r = ((PyObject*)__pyx_t_1);
    __pyx_t_1 = 0;
    goto __pyx_L0;
+460:             name, value, f"Invalid value for {annotated_type}.{name}, expected one of {enum_values}", val_type, annotated_type
    if (!(likely(PyUnicode_CheckExact(__pyx_v_name))||((__pyx_v_name) == Py_None) || __Pyx_RaiseUnexpectedTypeError("unicode", __pyx_v_name))) __PYX_ERR(0, 460, __pyx_L1_error)
    __pyx_t_1 = PyTuple_New(6); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 460, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_4 = 0;
    __pyx_t_7 = 127;
    __Pyx_INCREF(__pyx_kp_u_Invalid_value_for);
    __pyx_t_4 += 18;
    __Pyx_GIVEREF(__pyx_kp_u_Invalid_value_for);
    PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_kp_u_Invalid_value_for);
    __pyx_t_3 = __Pyx_PyObject_FormatSimple(__pyx_v_annotated_type, __pyx_empty_unicode); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 460, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_7 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_3) > __pyx_t_7) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_3) : __pyx_t_7;
    __pyx_t_4 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_3);
    __Pyx_GIVEREF(__pyx_t_3);
    PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_t_3);
    __pyx_t_3 = 0;
    __Pyx_INCREF(__pyx_kp_u__11);
    __pyx_t_4 += 1;
    __Pyx_GIVEREF(__pyx_kp_u__11);
    PyTuple_SET_ITEM(__pyx_t_1, 2, __pyx_kp_u__11);
    __pyx_t_3 = __Pyx_PyObject_FormatSimple(__pyx_v_name, __pyx_empty_unicode); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 460, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_7 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_3) > __pyx_t_7) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_3) : __pyx_t_7;
    __pyx_t_4 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_3);
    __Pyx_GIVEREF(__pyx_t_3);
    PyTuple_SET_ITEM(__pyx_t_1, 3, __pyx_t_3);
    __pyx_t_3 = 0;
    __Pyx_INCREF(__pyx_kp_u_expected_one_of);
    __pyx_t_4 += 18;
    __Pyx_GIVEREF(__pyx_kp_u_expected_one_of);
    PyTuple_SET_ITEM(__pyx_t_1, 4, __pyx_kp_u_expected_one_of);
    __pyx_t_3 = __Pyx_PyObject_FormatSimple(__pyx_v_enum_values, __pyx_empty_unicode); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 460, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_7 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_3) > __pyx_t_7) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_3) : __pyx_t_7;
    __pyx_t_4 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_3);
    __Pyx_GIVEREF(__pyx_t_3);
    PyTuple_SET_ITEM(__pyx_t_1, 5, __pyx_t_3);
    __pyx_t_3 = 0;
    __pyx_t_3 = __Pyx_PyUnicode_Join(__pyx_t_1, 6, __pyx_t_4, __pyx_t_7); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 460, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 461:         )
+462:     return {}
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 462, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
  goto __pyx_L0;