nti.externalization 3.2.1__tar.gz → 3.3.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (168) hide show
  1. {nti_externalization-3.2.1 → nti_externalization-3.3.0}/.github/workflows/tests.yml +2 -2
  2. {nti_externalization-3.2.1 → nti_externalization-3.3.0}/CHANGES.rst +14 -0
  3. {nti_externalization-3.2.1 → nti_externalization-3.3.0}/PKG-INFO +15 -1
  4. {nti_externalization-3.2.1 → nti_externalization-3.3.0}/setup.py +1 -1
  5. {nti_externalization-3.2.1 → nti_externalization-3.3.0}/src/nti/externalization/_base_interfaces.c +218 -83
  6. {nti_externalization-3.2.1 → nti_externalization-3.3.0}/src/nti/externalization/_interface_cache.c +236 -105
  7. {nti_externalization-3.2.1 → nti_externalization-3.3.0}/src/nti/externalization/datastructures.c +484 -349
  8. {nti_externalization-3.2.1 → nti_externalization-3.3.0}/src/nti/externalization/externalization/decorate.c +191 -64
  9. {nti_externalization-3.2.1 → nti_externalization-3.3.0}/src/nti/externalization/externalization/dictionary.c +280 -149
  10. {nti_externalization-3.2.1 → nti_externalization-3.3.0}/src/nti/externalization/externalization/externalizer.c +316 -185
  11. {nti_externalization-3.2.1 → nti_externalization-3.3.0}/src/nti/externalization/externalization/fields.c +248 -117
  12. {nti_externalization-3.2.1 → nti_externalization-3.3.0}/src/nti/externalization/externalization/standard_fields.c +291 -160
  13. {nti_externalization-3.2.1 → nti_externalization-3.3.0}/src/nti/externalization/interfaces.py +9 -0
  14. {nti_externalization-3.2.1 → nti_externalization-3.3.0}/src/nti/externalization/internalization/_updater.pxd +1 -0
  15. {nti_externalization-3.2.1 → nti_externalization-3.3.0}/src/nti/externalization/internalization/events.c +243 -112
  16. {nti_externalization-3.2.1 → nti_externalization-3.3.0}/src/nti/externalization/internalization/externals.c +198 -67
  17. {nti_externalization-3.2.1 → nti_externalization-3.3.0}/src/nti/externalization/internalization/factories.c +266 -139
  18. {nti_externalization-3.2.1 → nti_externalization-3.3.0}/src/nti/externalization/internalization/fields.c +240 -105
  19. {nti_externalization-3.2.1 → nti_externalization-3.3.0}/src/nti/externalization/internalization/legacy_factories.c +223 -92
  20. {nti_externalization-3.2.1 → nti_externalization-3.3.0}/src/nti/externalization/internalization/tests/test_updater.py +19 -1
  21. {nti_externalization-3.2.1 → nti_externalization-3.3.0}/src/nti/externalization/internalization/updater.c +1338 -828
  22. {nti_externalization-3.2.1 → nti_externalization-3.3.0}/src/nti/externalization/internalization/updater.py +18 -0
  23. {nti_externalization-3.2.1 → nti_externalization-3.3.0}/src/nti/externalization/singleton.c +194 -67
  24. {nti_externalization-3.2.1 → nti_externalization-3.3.0}/src/nti.externalization.egg-info/PKG-INFO +15 -1
  25. {nti_externalization-3.2.1 → nti_externalization-3.3.0}/.coveragerc +0 -0
  26. {nti_externalization-3.2.1 → nti_externalization-3.3.0}/.github/dependabot.yml +0 -0
  27. {nti_externalization-3.2.1 → nti_externalization-3.3.0}/.isort.cfg +0 -0
  28. {nti_externalization-3.2.1 → nti_externalization-3.3.0}/.pylintrc +0 -0
  29. {nti_externalization-3.2.1 → nti_externalization-3.3.0}/.readthedocs.yml +0 -0
  30. {nti_externalization-3.2.1 → nti_externalization-3.3.0}/AUTHORS +0 -0
  31. {nti_externalization-3.2.1 → nti_externalization-3.3.0}/COPYRIGHT.txt +0 -0
  32. {nti_externalization-3.2.1 → nti_externalization-3.3.0}/INSTALL +0 -0
  33. {nti_externalization-3.2.1 → nti_externalization-3.3.0}/LICENSE +0 -0
  34. {nti_externalization-3.2.1 → nti_externalization-3.3.0}/MANIFEST.in +0 -0
  35. {nti_externalization-3.2.1 → nti_externalization-3.3.0}/README.rst +0 -0
  36. {nti_externalization-3.2.1 → nti_externalization-3.3.0}/doc-requirements.txt +0 -0
  37. {nti_externalization-3.2.1 → nti_externalization-3.3.0}/docs/Makefile +0 -0
  38. {nti_externalization-3.2.1 → nti_externalization-3.3.0}/docs/api/ADVANCED.rst +0 -0
  39. {nti_externalization-3.2.1 → nti_externalization-3.3.0}/docs/api/BASICS.rst +0 -0
  40. {nti_externalization-3.2.1 → nti_externalization-3.3.0}/docs/api/HELPERS.rst +0 -0
  41. {nti_externalization-3.2.1 → nti_externalization-3.3.0}/docs/api/STRINGS.rst +0 -0
  42. {nti_externalization-3.2.1 → nti_externalization-3.3.0}/docs/api/ZODB.rst +0 -0
  43. {nti_externalization-3.2.1 → nti_externalization-3.3.0}/docs/api/autopackage.rst +0 -0
  44. {nti_externalization-3.2.1 → nti_externalization-3.3.0}/docs/api/datastructures.rst +0 -0
  45. {nti_externalization-3.2.1 → nti_externalization-3.3.0}/docs/api/datetime.rst +0 -0
  46. {nti_externalization-3.2.1 → nti_externalization-3.3.0}/docs/api/dublincore.rst +0 -0
  47. {nti_externalization-3.2.1 → nti_externalization-3.3.0}/docs/api/extension_points.rst +0 -0
  48. {nti_externalization-3.2.1 → nti_externalization-3.3.0}/docs/api/externalization.rst +0 -0
  49. {nti_externalization-3.2.1 → nti_externalization-3.3.0}/docs/api/factory.rst +0 -0
  50. {nti_externalization-3.2.1 → nti_externalization-3.3.0}/docs/api/index.rst +0 -0
  51. {nti_externalization-3.2.1 → nti_externalization-3.3.0}/docs/api/integer_strings.rst +0 -0
  52. {nti_externalization-3.2.1 → nti_externalization-3.3.0}/docs/api/interfaces.rst +0 -0
  53. {nti_externalization-3.2.1 → nti_externalization-3.3.0}/docs/api/internalization.rst +0 -0
  54. {nti_externalization-3.2.1 → nti_externalization-3.3.0}/docs/api/oids.rst +0 -0
  55. {nti_externalization-3.2.1 → nti_externalization-3.3.0}/docs/api/persistence.rst +0 -0
  56. {nti_externalization-3.2.1 → nti_externalization-3.3.0}/docs/api/proxy.rst +0 -0
  57. {nti_externalization-3.2.1 → nti_externalization-3.3.0}/docs/api/representation.rst +0 -0
  58. {nti_externalization-3.2.1 → nti_externalization-3.3.0}/docs/api/singleton.rst +0 -0
  59. {nti_externalization-3.2.1 → nti_externalization-3.3.0}/docs/api/zcml.rst +0 -0
  60. {nti_externalization-3.2.1 → nti_externalization-3.3.0}/docs/basics.rst +0 -0
  61. {nti_externalization-3.2.1 → nti_externalization-3.3.0}/docs/changelog.rst +0 -0
  62. {nti_externalization-3.2.1 → nti_externalization-3.3.0}/docs/conf.py +0 -0
  63. {nti_externalization-3.2.1 → nti_externalization-3.3.0}/docs/externalization.rst +0 -0
  64. {nti_externalization-3.2.1 → nti_externalization-3.3.0}/docs/glossary.rst +0 -0
  65. {nti_externalization-3.2.1 → nti_externalization-3.3.0}/docs/index.rst +0 -0
  66. {nti_externalization-3.2.1 → nti_externalization-3.3.0}/docs/internalization.rst +0 -0
  67. {nti_externalization-3.2.1 → nti_externalization-3.3.0}/docs/schemas.rst +0 -0
  68. {nti_externalization-3.2.1 → nti_externalization-3.3.0}/docs/special_attributes.rst +0 -0
  69. {nti_externalization-3.2.1 → nti_externalization-3.3.0}/make-manylinux +0 -0
  70. {nti_externalization-3.2.1 → nti_externalization-3.3.0}/pyproject.toml +0 -0
  71. {nti_externalization-3.2.1 → nti_externalization-3.3.0}/requirements.txt +0 -0
  72. {nti_externalization-3.2.1 → nti_externalization-3.3.0}/setup.cfg +0 -0
  73. {nti_externalization-3.2.1 → nti_externalization-3.3.0}/src/nti/__init__.py +0 -0
  74. {nti_externalization-3.2.1 → nti_externalization-3.3.0}/src/nti/externalization/__base_interfaces.pxd +0 -0
  75. {nti_externalization-3.2.1 → nti_externalization-3.3.0}/src/nti/externalization/__init__.py +0 -0
  76. {nti_externalization-3.2.1 → nti_externalization-3.3.0}/src/nti/externalization/__interface_cache.pxd +0 -0
  77. {nti_externalization-3.2.1 → nti_externalization-3.3.0}/src/nti/externalization/_base_interfaces.py +0 -0
  78. {nti_externalization-3.2.1 → nti_externalization-3.3.0}/src/nti/externalization/_compat.py +0 -0
  79. {nti_externalization-3.2.1 → nti_externalization-3.3.0}/src/nti/externalization/_datastructures.pxd +0 -0
  80. {nti_externalization-3.2.1 → nti_externalization-3.3.0}/src/nti/externalization/_interface_cache.py +0 -0
  81. {nti_externalization-3.2.1 → nti_externalization-3.3.0}/src/nti/externalization/_singleton.pxd +0 -0
  82. {nti_externalization-3.2.1 → nti_externalization-3.3.0}/src/nti/externalization/_threadlocal.py +0 -0
  83. {nti_externalization-3.2.1 → nti_externalization-3.3.0}/src/nti/externalization/autopackage.py +0 -0
  84. {nti_externalization-3.2.1 → nti_externalization-3.3.0}/src/nti/externalization/configure.zcml +0 -0
  85. {nti_externalization-3.2.1 → nti_externalization-3.3.0}/src/nti/externalization/datastructures.py +0 -0
  86. {nti_externalization-3.2.1 → nti_externalization-3.3.0}/src/nti/externalization/datetime_ext.py +0 -0
  87. {nti_externalization-3.2.1 → nti_externalization-3.3.0}/src/nti/externalization/dublincore.py +0 -0
  88. {nti_externalization-3.2.1 → nti_externalization-3.3.0}/src/nti/externalization/extension_points.py +0 -0
  89. {nti_externalization-3.2.1 → nti_externalization-3.3.0}/src/nti/externalization/externalization/__init__.py +0 -0
  90. {nti_externalization-3.2.1 → nti_externalization-3.3.0}/src/nti/externalization/externalization/_decorate.pxd +0 -0
  91. {nti_externalization-3.2.1 → nti_externalization-3.3.0}/src/nti/externalization/externalization/_dictionary.pxd +0 -0
  92. {nti_externalization-3.2.1 → nti_externalization-3.3.0}/src/nti/externalization/externalization/_externalizer.pxd +0 -0
  93. {nti_externalization-3.2.1 → nti_externalization-3.3.0}/src/nti/externalization/externalization/_fields.pxd +0 -0
  94. {nti_externalization-3.2.1 → nti_externalization-3.3.0}/src/nti/externalization/externalization/_standard_fields.pxd +0 -0
  95. {nti_externalization-3.2.1 → nti_externalization-3.3.0}/src/nti/externalization/externalization/decorate.py +0 -0
  96. {nti_externalization-3.2.1 → nti_externalization-3.3.0}/src/nti/externalization/externalization/dictionary.py +0 -0
  97. {nti_externalization-3.2.1 → nti_externalization-3.3.0}/src/nti/externalization/externalization/externalizer.py +0 -0
  98. {nti_externalization-3.2.1 → nti_externalization-3.3.0}/src/nti/externalization/externalization/fields.py +0 -0
  99. {nti_externalization-3.2.1 → nti_externalization-3.3.0}/src/nti/externalization/externalization/replacers.py +0 -0
  100. {nti_externalization-3.2.1 → nti_externalization-3.3.0}/src/nti/externalization/externalization/standard_fields.py +0 -0
  101. {nti_externalization-3.2.1 → nti_externalization-3.3.0}/src/nti/externalization/externalization/tests/__init__.py +0 -0
  102. {nti_externalization-3.2.1 → nti_externalization-3.3.0}/src/nti/externalization/externalization/tests/test_externalizer.py +0 -0
  103. {nti_externalization-3.2.1 → nti_externalization-3.3.0}/src/nti/externalization/factory.py +0 -0
  104. {nti_externalization-3.2.1 → nti_externalization-3.3.0}/src/nti/externalization/integer_strings.py +0 -0
  105. {nti_externalization-3.2.1 → nti_externalization-3.3.0}/src/nti/externalization/internalization/__init__.py +0 -0
  106. {nti_externalization-3.2.1 → nti_externalization-3.3.0}/src/nti/externalization/internalization/_events.pxd +0 -0
  107. {nti_externalization-3.2.1 → nti_externalization-3.3.0}/src/nti/externalization/internalization/_externals.pxd +0 -0
  108. {nti_externalization-3.2.1 → nti_externalization-3.3.0}/src/nti/externalization/internalization/_factories.pxd +0 -0
  109. {nti_externalization-3.2.1 → nti_externalization-3.3.0}/src/nti/externalization/internalization/_fields.pxd +0 -0
  110. {nti_externalization-3.2.1 → nti_externalization-3.3.0}/src/nti/externalization/internalization/_legacy_factories.pxd +0 -0
  111. {nti_externalization-3.2.1 → nti_externalization-3.3.0}/src/nti/externalization/internalization/events.py +0 -0
  112. {nti_externalization-3.2.1 → nti_externalization-3.3.0}/src/nti/externalization/internalization/externals.py +0 -0
  113. {nti_externalization-3.2.1 → nti_externalization-3.3.0}/src/nti/externalization/internalization/factories.py +0 -0
  114. {nti_externalization-3.2.1 → nti_externalization-3.3.0}/src/nti/externalization/internalization/fields.py +0 -0
  115. {nti_externalization-3.2.1 → nti_externalization-3.3.0}/src/nti/externalization/internalization/legacy_factories.py +0 -0
  116. {nti_externalization-3.2.1 → nti_externalization-3.3.0}/src/nti/externalization/internalization/tests/__init__.py +0 -0
  117. {nti_externalization-3.2.1 → nti_externalization-3.3.0}/src/nti/externalization/internalization/tests/test_externals_wo_class_mimetype.py +0 -0
  118. {nti_externalization-3.2.1 → nti_externalization-3.3.0}/src/nti/externalization/internalization/tests/test_fields.py +0 -0
  119. {nti_externalization-3.2.1 → nti_externalization-3.3.0}/src/nti/externalization/meta.zcml +0 -0
  120. {nti_externalization-3.2.1 → nti_externalization-3.3.0}/src/nti/externalization/numbers.py +0 -0
  121. {nti_externalization-3.2.1 → nti_externalization-3.3.0}/src/nti/externalization/oids.py +0 -0
  122. {nti_externalization-3.2.1 → nti_externalization-3.3.0}/src/nti/externalization/persistence.py +0 -0
  123. {nti_externalization-3.2.1 → nti_externalization-3.3.0}/src/nti/externalization/proxy.py +0 -0
  124. {nti_externalization-3.2.1 → nti_externalization-3.3.0}/src/nti/externalization/py.typed +0 -0
  125. {nti_externalization-3.2.1 → nti_externalization-3.3.0}/src/nti/externalization/representation.py +0 -0
  126. {nti_externalization-3.2.1 → nti_externalization-3.3.0}/src/nti/externalization/singleton.py +0 -0
  127. {nti_externalization-3.2.1 → nti_externalization-3.3.0}/src/nti/externalization/testing.py +0 -0
  128. {nti_externalization-3.2.1 → nti_externalization-3.3.0}/src/nti/externalization/tests/__init__.py +0 -0
  129. {nti_externalization-3.2.1 → nti_externalization-3.3.0}/src/nti/externalization/tests/benchmarks/__init__.py +0 -0
  130. {nti_externalization-3.2.1 → nti_externalization-3.3.0}/src/nti/externalization/tests/benchmarks/__main__.py +0 -0
  131. {nti_externalization-3.2.1 → nti_externalization-3.3.0}/src/nti/externalization/tests/benchmarks/bm_simple_iface.py +0 -0
  132. {nti_externalization-3.2.1 → nti_externalization-3.3.0}/src/nti/externalization/tests/benchmarks/bm_simple_iface_list.py +0 -0
  133. {nti_externalization-3.2.1 → nti_externalization-3.3.0}/src/nti/externalization/tests/benchmarks/bm_simple_registered_class.py +0 -0
  134. {nti_externalization-3.2.1 → nti_externalization-3.3.0}/src/nti/externalization/tests/benchmarks/bm_singleton.py +0 -0
  135. {nti_externalization-3.2.1 → nti_externalization-3.3.0}/src/nti/externalization/tests/benchmarks/bm_user_profile.py +0 -0
  136. {nti_externalization-3.2.1 → nti_externalization-3.3.0}/src/nti/externalization/tests/benchmarks/bootstrapinterfaces.py +0 -0
  137. {nti_externalization-3.2.1 → nti_externalization-3.3.0}/src/nti/externalization/tests/benchmarks/configure.zcml +0 -0
  138. {nti_externalization-3.2.1 → nti_externalization-3.3.0}/src/nti/externalization/tests/benchmarks/interfaces.py +0 -0
  139. {nti_externalization-3.2.1 → nti_externalization-3.3.0}/src/nti/externalization/tests/benchmarks/objects.py +0 -0
  140. {nti_externalization-3.2.1 → nti_externalization-3.3.0}/src/nti/externalization/tests/benchmarks/profileconfigure.zcml +0 -0
  141. {nti_externalization-3.2.1 → nti_externalization-3.3.0}/src/nti/externalization/tests/benchmarks/profileinterfaces.py +0 -0
  142. {nti_externalization-3.2.1 → nti_externalization-3.3.0}/src/nti/externalization/tests/test__compat.py +0 -0
  143. {nti_externalization-3.2.1 → nti_externalization-3.3.0}/src/nti/externalization/tests/test_autopackage.py +0 -0
  144. {nti_externalization-3.2.1 → nti_externalization-3.3.0}/src/nti/externalization/tests/test_benchmarks.py +0 -0
  145. {nti_externalization-3.2.1 → nti_externalization-3.3.0}/src/nti/externalization/tests/test_datastructures.py +0 -0
  146. {nti_externalization-3.2.1 → nti_externalization-3.3.0}/src/nti/externalization/tests/test_datetime.py +0 -0
  147. {nti_externalization-3.2.1 → nti_externalization-3.3.0}/src/nti/externalization/tests/test_docs.py +0 -0
  148. {nti_externalization-3.2.1 → nti_externalization-3.3.0}/src/nti/externalization/tests/test_dublincore.py +0 -0
  149. {nti_externalization-3.2.1 → nti_externalization-3.3.0}/src/nti/externalization/tests/test_externalization.py +0 -0
  150. {nti_externalization-3.2.1 → nti_externalization-3.3.0}/src/nti/externalization/tests/test_factory.py +0 -0
  151. {nti_externalization-3.2.1 → nti_externalization-3.3.0}/src/nti/externalization/tests/test_integer_strings.py +0 -0
  152. {nti_externalization-3.2.1 → nti_externalization-3.3.0}/src/nti/externalization/tests/test_interfaces.py +0 -0
  153. {nti_externalization-3.2.1 → nti_externalization-3.3.0}/src/nti/externalization/tests/test_internalization.py +0 -0
  154. {nti_externalization-3.2.1 → nti_externalization-3.3.0}/src/nti/externalization/tests/test_oids.py +0 -0
  155. {nti_externalization-3.2.1 → nti_externalization-3.3.0}/src/nti/externalization/tests/test_persistence.py +0 -0
  156. {nti_externalization-3.2.1 → nti_externalization-3.3.0}/src/nti/externalization/tests/test_proxy.py +0 -0
  157. {nti_externalization-3.2.1 → nti_externalization-3.3.0}/src/nti/externalization/tests/test_representation.py +0 -0
  158. {nti_externalization-3.2.1 → nti_externalization-3.3.0}/src/nti/externalization/tests/test_singleton.py +0 -0
  159. {nti_externalization-3.2.1 → nti_externalization-3.3.0}/src/nti/externalization/tests/test_testing.py +0 -0
  160. {nti_externalization-3.2.1 → nti_externalization-3.3.0}/src/nti/externalization/tests/test_zcml.py +0 -0
  161. {nti_externalization-3.2.1 → nti_externalization-3.3.0}/src/nti/externalization/zcml.py +0 -0
  162. {nti_externalization-3.2.1 → nti_externalization-3.3.0}/src/nti.externalization.egg-info/SOURCES.txt +0 -0
  163. {nti_externalization-3.2.1 → nti_externalization-3.3.0}/src/nti.externalization.egg-info/dependency_links.txt +0 -0
  164. {nti_externalization-3.2.1 → nti_externalization-3.3.0}/src/nti.externalization.egg-info/entry_points.txt +0 -0
  165. {nti_externalization-3.2.1 → nti_externalization-3.3.0}/src/nti.externalization.egg-info/requires.txt +0 -0
  166. {nti_externalization-3.2.1 → nti_externalization-3.3.0}/src/nti.externalization.egg-info/top_level.txt +0 -0
  167. {nti_externalization-3.2.1 → nti_externalization-3.3.0}/src/nti.externalization.egg-info/zip-safe +0 -0
  168. {nti_externalization-3.2.1 → nti_externalization-3.3.0}/tox.ini +0 -0
@@ -33,7 +33,7 @@ jobs:
33
33
 
34
34
  runs-on: ubuntu-latest
35
35
  steps:
36
- - uses: actions/checkout@v6
36
+ - uses: actions/checkout@v7
37
37
  - name: Set up Python
38
38
  uses: actions/setup-python@v6
39
39
  with:
@@ -105,7 +105,7 @@ jobs:
105
105
 
106
106
  steps:
107
107
  - name: checkout
108
- uses: actions/checkout@v6
108
+ uses: actions/checkout@v7
109
109
  - name: Set up Python ${{ matrix.python-version }}
110
110
  uses: actions/setup-python@v6
111
111
  with:
@@ -3,6 +3,20 @@
3
3
  =========
4
4
 
5
5
 
6
+ 3.3.0 (2026-07-14)
7
+ ==================
8
+
9
+ - Introduce ``IWantsMutableSequenceToUpdate`` marker interface
10
+ that objects can implement to be passed the raw ``MutableSequence``
11
+ object, rather than assuming the sequence contains objects to
12
+ create/update in place. This is sufficient for direct calls to
13
+ ``update_from_external_object`` on the object so marked, but when
14
+ used in a nested context (an attribute of another object), you may
15
+ still need/want to implement an adapter ``@adapter(list)`` that
16
+ ``@implementer(YourType)`` that does the same thing.
17
+
18
+
19
+
6
20
  3.2.1 (2026-06-02)
7
21
  ==================
8
22
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: nti.externalization
3
- Version: 3.2.1
3
+ Version: 3.3.0
4
4
  Summary: NTI Externalization
5
5
  Home-page: https://github.com/OpenNTI/nti.externalization
6
6
  Author: Jason Madden
@@ -106,6 +106,20 @@ Documentation is hosted at https://ntiexternalization.readthedocs.io/
106
106
  =========
107
107
 
108
108
 
109
+ 3.3.0 (2026-07-14)
110
+ ==================
111
+
112
+ - Introduce ``IWantsMutableSequenceToUpdate`` marker interface
113
+ that objects can implement to be passed the raw ``MutableSequence``
114
+ object, rather than assuming the sequence contains objects to
115
+ create/update in place. This is sufficient for direct calls to
116
+ ``update_from_external_object`` on the object so marked, but when
117
+ used in a nested context (an attribute of another object), you may
118
+ still need/want to implement an adapter ``@adapter(list)`` that
119
+ ``@implementer(YourType)`` that does the same thing.
120
+
121
+
122
+
109
123
  3.2.1 (2026-06-02)
110
124
  ==================
111
125
 
@@ -148,7 +148,7 @@ if not PYPY:
148
148
 
149
149
  setup(
150
150
  name='nti.externalization',
151
- version='3.2.1',
151
+ version='3.3.0',
152
152
  author='Jason Madden',
153
153
  author_email='jason@seecoresoftware.com',
154
154
  description="NTI Externalization",
@@ -1,4 +1,4 @@
1
- /* Generated by Cython 3.2.5 */
1
+ /* Generated by Cython 3.2.8 */
2
2
 
3
3
  /* BEGIN: Cython Metadata
4
4
  {
@@ -34,8 +34,8 @@ END: Cython Metadata */
34
34
  #elif PY_VERSION_HEX < 0x03080000
35
35
  #error Cython requires Python 3.8+.
36
36
  #else
37
- #define __PYX_ABI_VERSION "3_2_5"
38
- #define CYTHON_HEX_VERSION 0x030205F0
37
+ #define __PYX_ABI_VERSION "3_2_8"
38
+ #define CYTHON_HEX_VERSION 0x030208F0
39
39
  #define CYTHON_FUTURE_DIVISION 1
40
40
  /* CModulePreamble */
41
41
  #include <stddef.h>
@@ -2803,7 +2803,7 @@ typedef struct {
2803
2803
  __Pyx_CachedCFunction __pyx_umethod_PyDict_Type_values;
2804
2804
  PyObject *__pyx_tuple[4];
2805
2805
  PyObject *__pyx_codeobj_tab[7];
2806
- PyObject *__pyx_string_tab[111];
2806
+ PyObject *__pyx_string_tab[112];
2807
2807
  /* #### Code section: module_state_contents ### */
2808
2808
 
2809
2809
  #if CYTHON_USE_FREELISTS
@@ -2922,62 +2922,63 @@ static __pyx_mstatetype * const __pyx_mstate_global = &__pyx_mstate_global_stati
2922
2922
  #define __pyx_n_u_Total __pyx_string_tab[52]
2923
2923
  #define __pyx_n_u__2 __pyx_string_tab[53]
2924
2924
  #define __pyx_n_u_all __pyx_string_tab[54]
2925
- #define __pyx_n_u_asyncio_coroutines __pyx_string_tab[55]
2926
- #define __pyx_n_u_bool __pyx_string_tab[56]
2927
- #define __pyx_n_u_cline_in_traceback __pyx_string_tab[57]
2928
- #define __pyx_n_u_close __pyx_string_tab[58]
2929
- #define __pyx_n_u_containerId __pyx_string_tab[59]
2930
- #define __pyx_n_u_createdTime __pyx_string_tab[60]
2931
- #define __pyx_n_u_creator __pyx_string_tab[61]
2932
- #define __pyx_n_u_decimal __pyx_string_tab[62]
2933
- #define __pyx_n_u_func __pyx_string_tab[63]
2934
- #define __pyx_n_u_genexpr __pyx_string_tab[64]
2935
- #define __pyx_n_u_get_default_externalization_poli __pyx_string_tab[65]
2936
- #define __pyx_n_u_get_standard_external_fields __pyx_string_tab[66]
2937
- #define __pyx_n_u_get_standard_internal_fields __pyx_string_tab[67]
2938
- #define __pyx_n_u_href __pyx_string_tab[68]
2939
- #define __pyx_n_u_id __pyx_string_tab[69]
2940
- #define __pyx_n_u_import_c_accel __pyx_string_tab[70]
2941
- #define __pyx_n_u_init __pyx_string_tab[71]
2942
- #define __pyx_n_u_init___locals_genexpr __pyx_string_tab[72]
2943
- #define __pyx_n_u_isSyntheticKey __pyx_string_tab[73]
2944
- #define __pyx_n_u_is_coroutine __pyx_string_tab[74]
2945
- #define __pyx_n_u_items __pyx_string_tab[75]
2946
- #define __pyx_n_u_k __pyx_string_tab[76]
2947
- #define __pyx_n_u_lastModified __pyx_string_tab[77]
2948
- #define __pyx_n_u_main __pyx_string_tab[78]
2949
- #define __pyx_n_u_make_external_dict __pyx_string_tab[79]
2950
- #define __pyx_n_u_module __pyx_string_tab[80]
2951
- #define __pyx_n_u_name __pyx_string_tab[81]
2952
- #define __pyx_n_u_next __pyx_string_tab[82]
2953
- #define __pyx_n_u_nti_externalization___base_inter __pyx_string_tab[83]
2954
- #define __pyx_n_u_nti_externalization__compat __pyx_string_tab[84]
2955
- #define __pyx_n_u_ntiid __pyx_string_tab[85]
2956
- #define __pyx_n_u_pop __pyx_string_tab[86]
2957
- #define __pyx_n_u_pyx_capi __pyx_string_tab[87]
2958
- #define __pyx_n_u_pyx_vtable __pyx_string_tab[88]
2959
- #define __pyx_n_u_qualname __pyx_string_tab[89]
2960
- #define __pyx_n_u_return __pyx_string_tab[90]
2961
- #define __pyx_n_u_s __pyx_string_tab[91]
2962
- #define __pyx_n_u_send __pyx_string_tab[92]
2963
- #define __pyx_n_u_set_name __pyx_string_tab[93]
2964
- #define __pyx_n_u_setdefault __pyx_string_tab[94]
2965
- #define __pyx_n_u_slots __pyx_string_tab[95]
2966
- #define __pyx_n_u_startswith __pyx_string_tab[96]
2967
- #define __pyx_n_u_str __pyx_string_tab[97]
2968
- #define __pyx_n_u_test __pyx_string_tab[98]
2969
- #define __pyx_n_u_throw __pyx_string_tab[99]
2970
- #define __pyx_n_u_update __pyx_string_tab[100]
2971
- #define __pyx_n_u_use_iso8601_for_unix_timestamp __pyx_string_tab[101]
2972
- #define __pyx_n_u_value __pyx_string_tab[102]
2973
- #define __pyx_n_u_values __pyx_string_tab[103]
2974
- #define __pyx_kp_b_PyObject_struct___pyx_obj_3nti_1 __pyx_string_tab[104]
2975
- #define __pyx_kp_b_iso88591_1 __pyx_string_tab[105]
2976
- #define __pyx_kp_b_iso88591_A __pyx_string_tab[106]
2977
- #define __pyx_kp_b_iso88591_XQ_2S __pyx_string_tab[107]
2978
- #define __pyx_kp_b_iso88591__5 __pyx_string_tab[108]
2979
- #define __pyx_kp_b_iso88591_a __pyx_string_tab[109]
2980
- #define __pyx_kp_b_struct___pyx_obj_3nti_15external __pyx_string_tab[110]
2925
+ #define __pyx_n_u_annotate __pyx_string_tab[55]
2926
+ #define __pyx_n_u_asyncio_coroutines __pyx_string_tab[56]
2927
+ #define __pyx_n_u_bool __pyx_string_tab[57]
2928
+ #define __pyx_n_u_cline_in_traceback __pyx_string_tab[58]
2929
+ #define __pyx_n_u_close __pyx_string_tab[59]
2930
+ #define __pyx_n_u_containerId __pyx_string_tab[60]
2931
+ #define __pyx_n_u_createdTime __pyx_string_tab[61]
2932
+ #define __pyx_n_u_creator __pyx_string_tab[62]
2933
+ #define __pyx_n_u_decimal __pyx_string_tab[63]
2934
+ #define __pyx_n_u_func __pyx_string_tab[64]
2935
+ #define __pyx_n_u_genexpr __pyx_string_tab[65]
2936
+ #define __pyx_n_u_get_default_externalization_poli __pyx_string_tab[66]
2937
+ #define __pyx_n_u_get_standard_external_fields __pyx_string_tab[67]
2938
+ #define __pyx_n_u_get_standard_internal_fields __pyx_string_tab[68]
2939
+ #define __pyx_n_u_href __pyx_string_tab[69]
2940
+ #define __pyx_n_u_id __pyx_string_tab[70]
2941
+ #define __pyx_n_u_import_c_accel __pyx_string_tab[71]
2942
+ #define __pyx_n_u_init __pyx_string_tab[72]
2943
+ #define __pyx_n_u_init___locals_genexpr __pyx_string_tab[73]
2944
+ #define __pyx_n_u_isSyntheticKey __pyx_string_tab[74]
2945
+ #define __pyx_n_u_is_coroutine __pyx_string_tab[75]
2946
+ #define __pyx_n_u_items __pyx_string_tab[76]
2947
+ #define __pyx_n_u_k __pyx_string_tab[77]
2948
+ #define __pyx_n_u_lastModified __pyx_string_tab[78]
2949
+ #define __pyx_n_u_main __pyx_string_tab[79]
2950
+ #define __pyx_n_u_make_external_dict __pyx_string_tab[80]
2951
+ #define __pyx_n_u_module __pyx_string_tab[81]
2952
+ #define __pyx_n_u_name __pyx_string_tab[82]
2953
+ #define __pyx_n_u_next __pyx_string_tab[83]
2954
+ #define __pyx_n_u_nti_externalization___base_inter __pyx_string_tab[84]
2955
+ #define __pyx_n_u_nti_externalization__compat __pyx_string_tab[85]
2956
+ #define __pyx_n_u_ntiid __pyx_string_tab[86]
2957
+ #define __pyx_n_u_pop __pyx_string_tab[87]
2958
+ #define __pyx_n_u_pyx_capi __pyx_string_tab[88]
2959
+ #define __pyx_n_u_pyx_vtable __pyx_string_tab[89]
2960
+ #define __pyx_n_u_qualname __pyx_string_tab[90]
2961
+ #define __pyx_n_u_return __pyx_string_tab[91]
2962
+ #define __pyx_n_u_s __pyx_string_tab[92]
2963
+ #define __pyx_n_u_send __pyx_string_tab[93]
2964
+ #define __pyx_n_u_set_name __pyx_string_tab[94]
2965
+ #define __pyx_n_u_setdefault __pyx_string_tab[95]
2966
+ #define __pyx_n_u_slots __pyx_string_tab[96]
2967
+ #define __pyx_n_u_startswith __pyx_string_tab[97]
2968
+ #define __pyx_n_u_str __pyx_string_tab[98]
2969
+ #define __pyx_n_u_test __pyx_string_tab[99]
2970
+ #define __pyx_n_u_throw __pyx_string_tab[100]
2971
+ #define __pyx_n_u_update __pyx_string_tab[101]
2972
+ #define __pyx_n_u_use_iso8601_for_unix_timestamp __pyx_string_tab[102]
2973
+ #define __pyx_n_u_value __pyx_string_tab[103]
2974
+ #define __pyx_n_u_values __pyx_string_tab[104]
2975
+ #define __pyx_kp_b_PyObject_struct___pyx_obj_3nti_1 __pyx_string_tab[105]
2976
+ #define __pyx_kp_b_iso88591_1 __pyx_string_tab[106]
2977
+ #define __pyx_kp_b_iso88591_A __pyx_string_tab[107]
2978
+ #define __pyx_kp_b_iso88591_XQ_2S __pyx_string_tab[108]
2979
+ #define __pyx_kp_b_iso88591__5 __pyx_string_tab[109]
2980
+ #define __pyx_kp_b_iso88591_a __pyx_string_tab[110]
2981
+ #define __pyx_kp_b_struct___pyx_obj_3nti_15external __pyx_string_tab[111]
2981
2982
  /* #### Code section: module_state_clear ### */
2982
2983
  #if CYTHON_USE_MODULE_STATE
2983
2984
  static CYTHON_SMALL_CODE int __pyx_m_clear(PyObject *m) {
@@ -3010,7 +3011,7 @@ static CYTHON_SMALL_CODE int __pyx_m_clear(PyObject *m) {
3010
3011
  Py_CLEAR(clear_module_state->__pyx_type_3nti_15externalization_17__base_interfaces___pyx_scope_struct_2_genexpr);
3011
3012
  for (int i=0; i<4; ++i) { Py_CLEAR(clear_module_state->__pyx_tuple[i]); }
3012
3013
  for (int i=0; i<7; ++i) { Py_CLEAR(clear_module_state->__pyx_codeobj_tab[i]); }
3013
- for (int i=0; i<111; ++i) { Py_CLEAR(clear_module_state->__pyx_string_tab[i]); }
3014
+ for (int i=0; i<112; ++i) { Py_CLEAR(clear_module_state->__pyx_string_tab[i]); }
3014
3015
  /* #### Code section: module_state_clear_contents ### */
3015
3016
  /* CommonTypesMetaclass.module_state_clear */
3016
3017
  Py_CLEAR(clear_module_state->__pyx_CommonTypesMetaclassType);
@@ -3054,7 +3055,7 @@ static CYTHON_SMALL_CODE int __pyx_m_traverse(PyObject *m, visitproc visit, void
3054
3055
  Py_VISIT(traverse_module_state->__pyx_type_3nti_15externalization_17__base_interfaces___pyx_scope_struct_2_genexpr);
3055
3056
  for (int i=0; i<4; ++i) { __Pyx_VISIT_CONST(traverse_module_state->__pyx_tuple[i]); }
3056
3057
  for (int i=0; i<7; ++i) { __Pyx_VISIT_CONST(traverse_module_state->__pyx_codeobj_tab[i]); }
3057
- for (int i=0; i<111; ++i) { __Pyx_VISIT_CONST(traverse_module_state->__pyx_string_tab[i]); }
3058
+ for (int i=0; i<112; ++i) { __Pyx_VISIT_CONST(traverse_module_state->__pyx_string_tab[i]); }
3058
3059
  /* #### Code section: module_state_traverse_contents ### */
3059
3060
  /* CommonTypesMetaclass.module_state_traverse */
3060
3061
  Py_VISIT(traverse_module_state->__pyx_CommonTypesMetaclassType);
@@ -8875,16 +8876,20 @@ static int __Pyx_InitCachedConstants(__pyx_mstatetype *__pyx_mstate) {
8875
8876
  {
8876
8877
  PyObject **table = __pyx_mstate->__pyx_tuple;
8877
8878
  for (Py_ssize_t i=0; i<4; ++i) {
8878
- #if CYTHON_COMPILING_IN_CPYTHON_FREETHREADING
8879
+ #if PY_VERSION_HEX >= 0x030F0000
8880
+ PyUnstable_SetImmortal(table[i]);
8881
+ #elif CYTHON_COMPILING_IN_CPYTHON_FREETHREADING
8882
+ if ((PY_SSIZE_T_MAX <= _Py_IMMORTAL_REFCNT_LOCAL)) break;
8879
8883
  #if PY_VERSION_HEX < 0x030E0000
8880
8884
  if (_Py_IsOwnedByCurrentThread(table[i]) && Py_REFCNT(table[i]) == 1)
8881
8885
  #else
8882
8886
  if (PyUnstable_Object_IsUniquelyReferenced(table[i]))
8883
8887
  #endif
8884
8888
  {
8885
- Py_SET_REFCNT(table[i], _Py_IMMORTAL_REFCNT_LOCAL);
8889
+ Py_SET_REFCNT(table[i], ((Py_ssize_t)_Py_IMMORTAL_REFCNT_LOCAL + 1));
8886
8890
  }
8887
8891
  #else
8892
+ if ((PY_SSIZE_T_MAX < _Py_IMMORTAL_INITIAL_REFCNT)) break;
8888
8893
  Py_SET_REFCNT(table[i], _Py_IMMORTAL_INITIAL_REFCNT);
8889
8894
  #endif
8890
8895
  }
@@ -8901,31 +8906,31 @@ static int __Pyx_InitCachedConstants(__pyx_mstatetype *__pyx_mstate) {
8901
8906
  static int __Pyx_InitConstants(__pyx_mstatetype *__pyx_mstate) {
8902
8907
  CYTHON_UNUSED_VAR(__pyx_mstate);
8903
8908
  {
8904
- const struct { const unsigned int length: 10; } index[] = {{0},{56},{13},{179},{1},{1},{8},{15},{7},{6},{2},{9},{37},{43},{15},{18},{5},{12},{12},{7},{5},{11},{11},{7},{7},{21},{4},{2},{5},{5},{10},{9},{5},{13},{14},{5},{12},{5},{19},{8},{31},{8},{5},{9},{8},{3},{10},{23},{20},{22},{22},{5},{5},{1},{7},{18},{4},{18},{5},{11},{11},{7},{7},{8},{7},{34},{28},{28},{4},{2},{14},{8},{25},{14},{13},{5},{1},{12},{8},{18},{10},{8},{4},{37},{27},{5},{3},{12},{14},{12},{6},{1},{4},{12},{10},{9},{10},{3},{8},{5},{6},{30},{5},{6},{370},{7},{2},{21},{2},{12},{547}};
8905
- #if (CYTHON_COMPRESS_STRINGS) == 2 /* compression: bz2 (1131 bytes) */
8906
- const char* const cstring = "BZh91AY&SYA\014\311\236\000\000\202\377\372\346\034b\001b\363\377\307\277\357\377p\277\377\377\360@@@@\000@@\000@@@\000P\004&\206Y\345\261\245\335\334;xi\250\020\324\306\204\302\223\364\223\323(a\006@\000h\320\003G\350\247\250m@\362\203(\230I\265=\t<\232&\217S\324\003@\000\000\000\000\000\000\320H\220\201\244jOI\352h\320\006\200\003A\240\032\000h\006\200\r\001\303CCF\2314\031\014\231\014 \006\201\246\206F\232\003@\031\003ja$\221\210\020z\211\262\236\224\364\322\036\223L\3244\006 \000\000\000\001\246\224\264\177\271\274\332\033\246\322\277O\344\243\332\342N\261\261\203h\226\024\005lmTB\020 \251GV\362\265\024A\301\316\354\315\350\\\177F=\203\242\\KS\234\307\303\271\207V\360%\320\004\271\332\000\366\257,'M\255\033\253\267m%\273\332/\022\3317\210K\271\327\354\245\003K\215\230\313\217\367\312R\367nT\2107\037\305=\232K\275\333b\3003\340\357\230\302\032\373\024\347wo\000\241!$\361\353\034R\212\034-\2038\026\tK\271\342\324\335\013\2614\206\326\201b\330R +XN\360\205[\252\223\"\255\221b\300\312\3156\014\024\3674\344`Xf\340\243\0322\210\tx\264Y5Z\250Bg\005=T\317,\225\306b3\334\240\340\241\033)5\243\\\223s+{\023ZG$\367\005e\256K\202\257\246j\016+K\3005\235\260x\2520\340\036\211\353\331\261T\026\213\332P6\220$\031\364\312\332\007\251Ud\010V\261\002a\221,e2\013\360\234\013m\211\365\304F\365\247<(-\344j\023p\237\222i\206[q%\323\n\240\tP\202k\361\324\375\224=\340:F\001\034J\001VRw\330\177\010\234a[\346\373d\217\223\254\210\024\322\310s\242\374O\223A-\\\326\310\314b\030\025S&.\301yI\304\010\242\327\202Jnx%\221$\224\003\352P\034)\0232)',])\260#\365\227Z\341\226\215\211\316r\005\037\036^\016D\365\023\301s\201yc\220\024\330\004]r\3227W\025o\n).6&\345@Y\007\231\201\251\021\224\332\343K_\3643\346\303\013i\241\230\211\215\204a\014K<\323\340\032\177\230Z\370\232e\231\275\t1@\305X\351\263PM\022\201Y\000\226\006\314\337\345\022\214df\025\244\314\365\264\t\331P\010\350\3579w\025\2175F0R\321\\@,\201~\365\323\307\202\r,\004\206\032\312\333~\240\242i\335d\001>!)\030+m\003\35249!\023\231+\312""\311A\207\310\205\00305x_E\006\273Q\264\267\277\211L?\207?7-\202\031\026\250\240\214\316\253L\033}\245\260\022\023\231\0135\356\277BeL\342\325\223G<\033\032\242\267Z\247We\314\243\346h\254\244<\363\324}\017\310B\025l\020n\005[\271!4\03486V\317-<\204\3464\006\340\020\246E\350\203\204A\236\300v`b\322\360WT\016\230O\212A\255\325\314D9\216Q%kN\023\246Nu2\212\016Q(\010\032D1\2705P\005\231\355\273\213}\254\025\372XH\262\000`B\354*%\000\267\004\202*(1OD\230\277\244\250\261A\304\313pRn\315\035;\200\033\270e\010\006\352\3626\031\301`\\\374#\251z\212\356}\351M\023\201M\2002\361\030\310n\031\337\327\033vp[f\336\006-p\316\262\260S\343\265\233\035\362\256\221\027V\316@\031*-u\261-\360\260\266Y\243y\232ef\216U%s\204\256\221\026\336#\022\264\301e\221\200\303\027\205\202\262\363Y\223i\252%\225\372\264h\203<\253\206\205*\302U\n\345\234\224\350i\213\207d\365\256$N\020\372W\027\332m\t\245\025\013\\\r\033\005o\270F#m\215\203lh\r\026j\004\365\347l\2220r3\351.\020a\204D\020\036\324\000\026\371\\\326*\363C\tq\252g\001UaY\027h\312\215b4\3239\206FYB\234h.42\006\006\021\225I\2653U<\324\337f\254G:\232P\260 (w\257\300:\2706\001v\"\220\017\360\036\027rE8P\220A\014\311\236";
8907
- PyObject *data = __Pyx_DecompressString(cstring, 1131, 2);
8909
+ const struct { const unsigned int length: 10; } index[] = {{0},{56},{13},{179},{1},{1},{8},{15},{7},{6},{2},{9},{37},{43},{15},{18},{5},{12},{12},{7},{5},{11},{11},{7},{7},{21},{4},{2},{5},{5},{10},{9},{5},{13},{14},{5},{12},{5},{19},{8},{31},{8},{5},{9},{8},{3},{10},{23},{20},{22},{22},{5},{5},{1},{7},{12},{18},{4},{18},{5},{11},{11},{7},{7},{8},{7},{34},{28},{28},{4},{2},{14},{8},{25},{14},{13},{5},{1},{12},{8},{18},{10},{8},{4},{37},{27},{5},{3},{12},{14},{12},{6},{1},{4},{12},{10},{9},{10},{3},{8},{5},{6},{30},{5},{6},{370},{7},{2},{21},{2},{12},{547}};
8910
+ #if (CYTHON_COMPRESS_STRINGS) == 2 /* compression: bz2 (1134 bytes) */
8911
+ const char* const cstring = "BZh91AY&SY\001}\004\316\000\000\203\177\372\346\034b\001b\363\377\307\277\357\377p\277\377\377\360@@@@\000@@\000@@@\000P\004\"\201\356\333liYb\260\310\204\000\320\232d\236\223\021\014@\311\210\006\2152h4d\331M4\3206\220\212\237\2524\365\000dh\001\240\320h\000\000\006\200\001\352\000\304\032\t\022\0205)\371)\345=M\003\324\017P\000\000\006\200\000\000\000\003\215\r\003F\231\032h\323 10@\0004\006\200\323 0&@\222@F\2204\032L\2325\032h\302\000\000\000\000\000\001\223J\234;8\3703\360\301\242\344k\177(dt\010\211\372\032Z;D\317\244.\227WK\336\364\010\252\2359\227\245\t\033<\320k;\255\221s\266F\216\271\245b\301\003d~\357Gv\360&\316\004\332\356\000|\031\225\364\037=z\017\242\0273G\230F\t\335\037\340\244\372w\274\244\250Br\316\037\233\255\354g?,\241Tr\216\326\032:\t5.\320\240f\302o\002\232\245\027\222\211X\240\304\033\010\210\324P'\271\003\210\020\r2s \0247sC\322\354\354\302t\007XC\005\257\250<X\300w\303\353\325X\361\255\261\260a\r\261*\302:\026H\034\230\332\030\033\210S\200\266\227\211\273\371\360\317_M%\022\200\207\212\252&\216\310\222\024\242\345\020\005\0216\244\260\272\003?\032\346\225\316A\271E\301r\331\035\301o\252zR[R@\022\304\355|\2035\002P'K&\303Vf\\g\204\240\365 x\333\311L6\216\242\330\320D\347\006,OX \310\361\250\027\036(d\236a!\355\272Y\303C\247\007|\233\311\375\223\222*qH\262\340\031\230\025\241\223\337\202\2714\323$\200A\033H\212\025#a\226\326\214j\365\023\266\033\260\227\333\034;\235\342B\271!\207y\325\336>\214\201\371/\315\345\362\360P\261@\200\272\305d`\347\010\212\322\341\352nx%\221$\224\003\347\320\034)\0232)',\316\224\330#\363\227F\341\226\210\200\252\251\000\303\307\203s\260\270\3028nP\r<\221V\001m\000\213\2569By)\231\300\252\252\314\346hr #(\227\003V#)\265\333K\207\2106n\301,\365\324\314L\304\3021\014\305\2369\356\315_\314-z\365Kp\336\204\230\240b\254s\231\234M\022\201@\240\034!\323\273\373L\303\002\rQa\235\276\367\001Ck\000\301\025\351\227\022\340\326\255\"\rSi\226`\261\206\215\374\360\237JMm\013F\032\365\215\301@\251\360u\351\002\214\302\333K\3666\2424""59!\0201\331\221\222\223\021\264\225C05\230#UG\r\310\332[\377\324\236G\263\247\225\222\360\206E\312h&\367SnM\300\326\345\013D\346B\315\241\3325&W\314[2h\345\003cTV\355T\350t\234\312>>\212\312C\306y\337/\360\020\205Y\0107B\234\354r|\23486\026\307%|d\014H\r\320%]\246\204I\310$\304X\016\274\214;q\005\236\200\347\2123H8]c\311\206\313\224\313nh\004\023Q\027\312(9D\240 i\020\306\340\322\200,\306\333\265\337k\005~\246\017$\340\220\321-!H\004l\034#ZeL\267a\334\343J\nP,K\026\223!\332\301FN\000\022\355\251\201\003U\230\334\375p\215\014\243hw/\n\214\272K\315T\320\005X@m\342!\215.\027\273x&\313@9\206i\320Z\241\026i@-\246\324Ju*\2260E\322\263\220\006:\023k$\225\242\244\337}\334Lf|\261\356E\3653\222\251\343\247X\213\305i\202\313#\001\206g\205\202\262\363i\223i\252%\225\372h\321\0062\256\032\024\253\tT+\226$\247CT\\;'\265q\"p\207\315\270\276\323\256&\224\025\013\\\014[\n\337p\214\303m\215\203lh\r\026g\t\357\247l\2220r1\314T \245\035A\213\363`#\177\025\223\2249&I+\026\274\226\006\272\312\333z\355\374\0211\215{\245vVjB\230\354]\2244\014\030\215+r\3667\204\345~\3676\314\216%\361\220g \010\2734\1774\366qi\371i\342\344\213\006\236\324\377\213\271\"\234(H\000\276\202g\000";
8912
+ PyObject *data = __Pyx_DecompressString(cstring, 1134, 2);
8908
8913
  if (unlikely(!data)) __PYX_ERR(0, 1, __pyx_L1_error)
8909
8914
  const char* const bytes = __Pyx_PyBytes_AsString(data);
8910
8915
  #if !CYTHON_ASSUME_SAFE_MACROS
8911
8916
  if (likely(bytes)); else { Py_DECREF(data); __PYX_ERR(0, 1, __pyx_L1_error) }
8912
8917
  #endif
8913
- #elif (CYTHON_COMPRESS_STRINGS) != 0 /* compression: zlib (955 bytes) */
8914
- const char* const cstring = "x\332\265T\315r\334D\020\336T\301\205p\200\003Wj8P\211\251\312\032C\200\034\222PB+\223)K\332e%S1\227\256\331Q\257w\342\331\031E3r,N9\372\3101\217\220#\217\342#\217\301#\320\263\273\376Y\3076T\005\0374j\215z\272\277\351\357\353N\216<6Fh\365\273\360\312\232\221\325Jv\367[\207\240\234}\364\375\327[0\265\r\264F\035\201Wst^\314\353'_\272\215T8\3172[\251\251\302*\267\036\231\237\t\317\342\316\317\254a\312\261\n\265\232`#<\352\2169\337(I\211\202\223a\243d\364\340\341\243\207L\230\2125\370\002\245w\314\265\023\251\205s\350\230\235\262I\253\264W\206\371\256F\327g|\312:\3332\203X1oYM~\027\017\370\031\032\346\320\007\203\335\023\306X\277\270\014\320qe\366\357\261J5\224D\035b8\275-\264\303\376\217}QU@\236\370\270\302\251h\265g\207B\267\370\264RNL4\242\t\353\276TniU\306\253>\256\027\253\0170\021\241R\206\266\247B\242s\215\334$\307\315K\216\233\227\375\372u\007Q\232BT\226c\310\243,)\026\237\311\3632\031\347Q\n;\311^\021\247QQ\304\303\274\214x\236\214\201\017\342q\022\225\311\000J\236%\013{8\216C\005bk\274P\006\033^\305\rR\301\253\222\230Z\230\266\031\240Ts\241\223\253h~6N\266\371\200\347%-e\222\025a\201x\270K\033\036\347\261m\215\017\206# %d\303\001\337\346\311`\355c7\345\371N\021\264p*\205T\231\003\227Z\031`\234&\035\020\367\031\201.\367FI\306s\236\321\r\213\275\274|\226\224<^\277tF\310K\"\235 \360\001\220\256~&\326\314\351{\310\007\2431\317x\311\177\245\212\235\231\220\357f?Q\211B\374\002`\324\035\321\023\222BND\214qZx\222\232h\316\000m+\324\225;\335\345\346\342n9,\243\264$\005i\000\020\232V\341:#\225\355K\333\330\226T\211nb\255\226\232,\242\024|C\214N\204<\220\332:\224\347d\310s2\344\222\214jI\006\300\2645\022`\037\r\036\325\315>zXi\020.\t\007\352\005Q\301\303\255\320\236\271\300t\201w\355\2372k\377f\rNU\245\346\265m<H\020R\"%WFy\272\333\352\335\177\254\211-\355\236\366Wp\224+:C\235\344\225\334\301\216\306\000\234]\\\0055\034\350\013t\003\314\351\266a=\300sdU\250=\314m\325j\014\231\214\230\323\233\242\373\377\324EW:I;\257E8\257\252\332\326\0005\261,E\255B\374`\037\372\320\246""\341\353e+\3642c\203\276m\014\315\010C@i@\254\200\220uZop\332z\007\241\202\215w\257\224\237\321\250\002\3604\350h\2355\366U[W\304\342\315\003q19\026\213\033u\303I\230h\354\253^\217B\265d-\361\331\311\013\370\226\340\303\326w\227I\336\372\341\235\022\300\225\rKA\337'\346\325m\360?\005]\357\"\n\272\020A\320\330\322Z\326\2617H\266\243\335\264<\353z\376[T\362a\016\243a\312\343\275\336\2652\357]+\362\327w\376\372\340\356\361\326\237\321I\357\263?\236\277\371\345\357\217z\037~|\374\315qq\362\311\306\333O\337~\361\372\316b\347\344\356\347o\304-0r\237\\V\001\335\201\252I\373\216t*g\033\357U\325+&\350m\245\272N\025\267\233\355\262\\\256\317\366\357\343\261\367\356\364\351\33542{7\315\314\177\000\313]tN";
8915
- PyObject *data = __Pyx_DecompressString(cstring, 955, 1);
8918
+ #elif (CYTHON_COMPRESS_STRINGS) != 0 /* compression: zlib (959 bytes) */
8919
+ const char* const cstring = "x\332\265T\315r\334D\020\336T\301\205p\200\003Wj8P\211\251\312\032C\200\034\222PB+\223)K\332e%S1\227\256\331Q\257w\342\331\031E3r,N9\372\3101\217\220#\217\342#\217\301#\320\263\273\376Y\3076T\005\037\324j\215z\272\277\351\357\233N\216<6Fh\365\273\360\312\232\221\325Jv\367[\207\240\234}\364\375\327[0\265\r\264F\035\201Wst^\314\353'_\272\215T8\3172[\251\251\302*\267\036\231\237\t\317\342\316\317\254a\312\261\n\265\232`#<\352\2169\337(I\205B\220a\243d\364\340\341\243\207L\230\2125\370\002\245w\314\265\023\251\205s\350\230\235\262I\253\264W\206\371\256F\327g|\312:\3332\203X1oYMq\0277\370\031\032\346\320\007\207\335\023\306X\2778\014\320ve\366\357\261J5TD\035b\330\275-\264\303\376\217}QU@\221\370\270\302\251h\265g\207B\267\370\264RNL4\242\tv_*\267\364*\343U\037\327\233\325\007\230\210\320)C\313S!\321\271FnR\340\346\245\300\315\313q\375\272\203(M!*\3131\344Q\226\024\213\317\344y\231\214\363(\205\235d\257\210\323\250(\342a^F<O\306\300\007\3618\211\312d\000%\317\222\205?\034\307\241\003\2615^(\203\r\257\342\006\251\341UIL-\\\333\014P\252\271\320\311U4?\033'\333|\300\363\222L\231dE0\020\017wi\301\343<\266\255\361\301q\004\244\204l8\340\333<\031\254}\354\246<\337)\202\026N\245\220*s\340R+\003\214\323\242\003\342>#\320\345\336(\311x\3163:a\261\227\227\317\222\222\307\353\207\316\010yI\244\023\004>\000\322\325\317\304\2329}\017\371`4\346\031/\371\257\324\2613\027\362\335\354'jQ\310_\000\214\272#zBQ\310\211\2101N\013OR\023\315\031\240m\205\272r\247\253\334\\\\-\207e\224\226\244 \r\000B\007\013+I!y\2563R\331\276\264\215mI\241\350&\326j\251\311#z\3017\304\356D\310\003\251\255CyN\214<'F.\211\251\226\304\000L[#\001\366\321\340Q\335\354\243\207\225\036\341\222\210\240^\220\026\"\334\n\371Y\010L\027\330\327\376)\263\366o\326\340TUj^\333\306\203\004!%Rqe\224\017'\\\276\373\21751\247\335\323\376\n\216rEg\350Vy%w\260\243\221\000g\007WA\031\007\372\002\365\000s:m\260\007x\216\254\n<\300\334V\255\306P\311\2109\275)\273\377O7\352\312 i\347\265\010\373UU\333\032\240&\306\245\250U\310\037""\374C\037\256l\370z\331\n\275\254\330\240o\033C\363\302\020P\032\026+ \344\235\366\033\234\266\336A\350`\343\335+\345g4\266\000<\r=\262\263\306\276j\353\212X\274y8.\246\310\302\270Q7\234\204\351\306\276\352\365(UK\336\022\237\235\274\200o\t>l}w\231\344\255\037\336i\001\\yy)\351\373\344\274\372J\374OI\327o\024%]\210 hl\351-\373\330\033$\333\321nZ\236M\000\376[T\362a\016\243a\312\343\275\336\2652\357]+\362\327w\376\372\340\356\361\326\237\321I\357\263?\236\277\371\345\357\217z\037~|\374\315qq\362\311\306\333O\337~\361\372\316b\345\344\356\347o\304-0r\237BV\t\335\201\252I\373\216t*g\033\357\325\325+\246\351m\225\272N\025\267[\355\262\\\256\257\366\357\343\261\367\356\364\351\33542{7\315\314\177\000B\365y$";
8920
+ PyObject *data = __Pyx_DecompressString(cstring, 959, 1);
8916
8921
  if (unlikely(!data)) __PYX_ERR(0, 1, __pyx_L1_error)
8917
8922
  const char* const bytes = __Pyx_PyBytes_AsString(data);
8918
8923
  #if !CYTHON_ASSUME_SAFE_MACROS
8919
8924
  if (likely(bytes)); else { Py_DECREF(data); __PYX_ERR(0, 1, __pyx_L1_error) }
8920
8925
  #endif
8921
- #else /* compression: none (2321 bytes) */
8922
- const char* const bytes = "ExternalizationPolicy(use_iso8601_for_unix_timestamp=%s)Last ModifiedNote that Cython is deliberately stricter than PEP-484 and rejects subclasses of builtin types. If you need to pass subclasses then set the 'annotation_typing' directive to False.?.add_note<default value>disableenablegcisenablednti.externalization.__base_interfacessrc/nti/externalization/_base_interfaces.py_ALL_ATTR_NAMES_ALL_EXTERNAL_KEYSCLASSCONTAINER_IDCREATED_TIMECREATORClassContainerIdCreatedTimeCreatorDecimalExternalizationPolicyHREFIDINTIDITEMSITEM_COUNTItemCountItemsLAST_MODIFIEDLAST_MODIFIEDULINKSLastModifiedLinksLocatedExternalDictMIMETYPEMINIMAL_SYNTHETIC_EXTERNAL_KEYSMimeTypeNTIID_NotGivenNotGivenOIDPRIMITIVES_PRIMITIVE_NUMBER_TYPES__Pyx_PyDict_NextRefStandardExternalFieldsStandardInternalFieldsTOTALTotal___all__asyncio.coroutinesboolcline_in_tracebackclosecontainerIdcreatedTimecreatordecimal__func__genexprget_default_externalization_policyget_standard_external_fieldsget_standard_internal_fieldshrefidimport_c_accel__init____init__.<locals>.genexprisSyntheticKey_is_coroutineitemsklastModified__main__make_external_dict__module____name__nextnti.externalization.__base_interfacesnti.externalization._compatntiidpop__pyx_capi____pyx_vtable____qualname__returnssend__set_name__setdefault__slots__startswithstr__test__throwupdateuse_iso8601_for_unix_timestampvaluevaluesPyObject *\000\000struct __pyx_obj_3nti_15externalization_17__base_interfaces_ExternalizationPolicy *\000struct __pyx_obj_3nti_15externalization_17__base_interfaces_StandardExternalFields *\000struct __pyx_obj_3nti_15externalization_17__base_interfaces_StandardInternalFields *\000dict_init\000dict_update\000DEFAULT_EXTERNALIZATION_POLICY\000_standard_external_fields\000_standard_internal_fields\200\001\330\004\013\2101\260A\320\000\025\220X\230Q\360\n\000\005\014\2102\210S\320\020)\250\021\250!\200\001\360\n\000\005\014\320\013\036\230astruct __pyx_obj_3nti_15externalization_17__base_interfaces_ExternalizationPolicy *(int __pyx_skip""_dispatch)\000struct __pyx_obj_3nti_15externalization_17__base_interfaces_LocatedExternalDict *(int __pyx_skip_dispatch)\000struct __pyx_obj_3nti_15externalization_17__base_interfaces_StandardExternalFields *(int __pyx_skip_dispatch)\000struct __pyx_obj_3nti_15externalization_17__base_interfaces_StandardInternalFields *(int __pyx_skip_dispatch)\000get_default_externalization_policy\000make_external_dict\000get_standard_external_fields\000get_standard_internal_fields";
8926
+ #else /* compression: none (2333 bytes) */
8927
+ const char* const bytes = "ExternalizationPolicy(use_iso8601_for_unix_timestamp=%s)Last ModifiedNote that Cython is deliberately stricter than PEP-484 and rejects subclasses of builtin types. If you need to pass subclasses then set the 'annotation_typing' directive to False.?.add_note<default value>disableenablegcisenablednti.externalization.__base_interfacessrc/nti/externalization/_base_interfaces.py_ALL_ATTR_NAMES_ALL_EXTERNAL_KEYSCLASSCONTAINER_IDCREATED_TIMECREATORClassContainerIdCreatedTimeCreatorDecimalExternalizationPolicyHREFIDINTIDITEMSITEM_COUNTItemCountItemsLAST_MODIFIEDLAST_MODIFIEDULINKSLastModifiedLinksLocatedExternalDictMIMETYPEMINIMAL_SYNTHETIC_EXTERNAL_KEYSMimeTypeNTIID_NotGivenNotGivenOIDPRIMITIVES_PRIMITIVE_NUMBER_TYPES__Pyx_PyDict_NextRefStandardExternalFieldsStandardInternalFieldsTOTALTotal___all____annotate__asyncio.coroutinesboolcline_in_tracebackclosecontainerIdcreatedTimecreatordecimal__func__genexprget_default_externalization_policyget_standard_external_fieldsget_standard_internal_fieldshrefidimport_c_accel__init____init__.<locals>.genexprisSyntheticKey_is_coroutineitemsklastModified__main__make_external_dict__module____name__nextnti.externalization.__base_interfacesnti.externalization._compatntiidpop__pyx_capi____pyx_vtable____qualname__returnssend__set_name__setdefault__slots__startswithstr__test__throwupdateuse_iso8601_for_unix_timestampvaluevaluesPyObject *\000\000struct __pyx_obj_3nti_15externalization_17__base_interfaces_ExternalizationPolicy *\000struct __pyx_obj_3nti_15externalization_17__base_interfaces_StandardExternalFields *\000struct __pyx_obj_3nti_15externalization_17__base_interfaces_StandardInternalFields *\000dict_init\000dict_update\000DEFAULT_EXTERNALIZATION_POLICY\000_standard_external_fields\000_standard_internal_fields\200\001\330\004\013\2101\260A\320\000\025\220X\230Q\360\n\000\005\014\2102\210S\320\020)\250\021\250!\200\001\360\n\000\005\014\320\013\036\230astruct __pyx_obj_3nti_15externalization_17__base_interfaces_ExternalizationPolicy *(in""t __pyx_skip_dispatch)\000struct __pyx_obj_3nti_15externalization_17__base_interfaces_LocatedExternalDict *(int __pyx_skip_dispatch)\000struct __pyx_obj_3nti_15externalization_17__base_interfaces_StandardExternalFields *(int __pyx_skip_dispatch)\000struct __pyx_obj_3nti_15externalization_17__base_interfaces_StandardInternalFields *(int __pyx_skip_dispatch)\000get_default_externalization_policy\000make_external_dict\000get_standard_external_fields\000get_standard_internal_fields";
8923
8928
  PyObject *data = NULL;
8924
8929
  CYTHON_UNUSED_VAR(__Pyx_DecompressString);
8925
8930
  #endif
8926
8931
  PyObject **stringtab = __pyx_mstate->__pyx_string_tab;
8927
8932
  Py_ssize_t pos = 0;
8928
- for (int i = 0; i < 104; i++) {
8933
+ for (int i = 0; i < 105; i++) {
8929
8934
  Py_ssize_t bytes_length = index[i].length;
8930
8935
  PyObject *string = PyUnicode_DecodeUTF8(bytes + pos, bytes_length, NULL);
8931
8936
  if (likely(string) && i >= 14) PyUnicode_InternInPlace(&string);
@@ -8936,7 +8941,7 @@ const char* const bytes = "ExternalizationPolicy(use_iso8601_for_unix_timestamp=
8936
8941
  stringtab[i] = string;
8937
8942
  pos += bytes_length;
8938
8943
  }
8939
- for (int i = 104; i < 111; i++) {
8944
+ for (int i = 105; i < 112; i++) {
8940
8945
  Py_ssize_t bytes_length = index[i].length;
8941
8946
  PyObject *string = PyBytes_FromStringAndSize(bytes + pos, bytes_length);
8942
8947
  stringtab[i] = string;
@@ -8947,25 +8952,29 @@ const char* const bytes = "ExternalizationPolicy(use_iso8601_for_unix_timestamp=
8947
8952
  }
8948
8953
  }
8949
8954
  Py_XDECREF(data);
8950
- for (Py_ssize_t i = 0; i < 111; i++) {
8955
+ for (Py_ssize_t i = 0; i < 112; i++) {
8951
8956
  if (unlikely(PyObject_Hash(stringtab[i]) == -1)) {
8952
8957
  __PYX_ERR(0, 1, __pyx_L1_error)
8953
8958
  }
8954
8959
  }
8955
8960
  #if CYTHON_IMMORTAL_CONSTANTS
8956
8961
  {
8957
- PyObject **table = stringtab + 104;
8962
+ PyObject **table = stringtab + 105;
8958
8963
  for (Py_ssize_t i=0; i<7; ++i) {
8959
- #if CYTHON_COMPILING_IN_CPYTHON_FREETHREADING
8964
+ #if PY_VERSION_HEX >= 0x030F0000
8965
+ PyUnstable_SetImmortal(table[i]);
8966
+ #elif CYTHON_COMPILING_IN_CPYTHON_FREETHREADING
8967
+ if ((PY_SSIZE_T_MAX <= _Py_IMMORTAL_REFCNT_LOCAL)) break;
8960
8968
  #if PY_VERSION_HEX < 0x030E0000
8961
8969
  if (_Py_IsOwnedByCurrentThread(table[i]) && Py_REFCNT(table[i]) == 1)
8962
8970
  #else
8963
8971
  if (PyUnstable_Object_IsUniquelyReferenced(table[i]))
8964
8972
  #endif
8965
8973
  {
8966
- Py_SET_REFCNT(table[i], _Py_IMMORTAL_REFCNT_LOCAL);
8974
+ Py_SET_REFCNT(table[i], ((Py_ssize_t)_Py_IMMORTAL_REFCNT_LOCAL + 1));
8967
8975
  }
8968
8976
  #else
8977
+ if ((PY_SSIZE_T_MAX < _Py_IMMORTAL_INITIAL_REFCNT)) break;
8969
8978
  Py_SET_REFCNT(table[i], _Py_IMMORTAL_INITIAL_REFCNT);
8970
8979
  #endif
8971
8980
  }
@@ -12209,6 +12218,7 @@ __Pyx_CyFunction_get_kwdefaults(__pyx_CyFunctionObject *op, void *context) {
12209
12218
  __Pyx_END_CRITICAL_SECTION();
12210
12219
  return result;
12211
12220
  }
12221
+ static int __Pyx_CyFunction_set_annotate_in_dict_if_exists(PyObject *op_in, PyObject *value);
12212
12222
  static int
12213
12223
  __Pyx_CyFunction_set_annotations(__pyx_CyFunctionObject *op, PyObject* value, void *context) {
12214
12224
  CYTHON_UNUSED_VAR(context);
@@ -12223,8 +12233,54 @@ __Pyx_CyFunction_set_annotations(__pyx_CyFunctionObject *op, PyObject* value, vo
12223
12233
  __Pyx_BEGIN_CRITICAL_SECTION(op);
12224
12234
  __Pyx_Py_XDECREF_SET(op->func_annotations, value);
12225
12235
  __Pyx_END_CRITICAL_SECTION();
12236
+ if (unlikely(__Pyx_CyFunction_set_annotate_in_dict_if_exists((PyObject*) op, Py_None) < 0)) return -1;
12226
12237
  return 0;
12227
12238
  }
12239
+ static int
12240
+ __Pyx_CyFunction_get_dict_if_exists(PyObject *op_in, PyObject **dict) {
12241
+ /* Return 1 if the function dict exists, 0 otherwise. This cannot fail:
12242
+ * _PyObject_GetDictPtr() may clear errors internally, but never reports them. */
12243
+ #if CYTHON_COMPILING_IN_PYPY
12244
+ *dict = PyObject_GenericGetDict(op_in, NULL);
12245
+ #elif CYTHON_COMPILING_IN_LIMITED_API || PY_VERSION_HEX < 0x030C0000
12246
+ *dict = ((__pyx_CyFunctionObject*) op_in)->func_dict;
12247
+ #else
12248
+ PyObject **dictptr = _PyObject_GetDictPtr(op_in);
12249
+ *dict = likely(dictptr) ? *dictptr : NULL;
12250
+ #endif
12251
+ return *dict ? 1 : 0;
12252
+ }
12253
+ static int
12254
+ __Pyx_CyFunction_get_annotate_from_dict_if_exists(PyObject *op_in, PyObject **annotate) {
12255
+ PyObject *dict;
12256
+ int dict_found;
12257
+ *annotate = NULL;
12258
+ dict_found = __Pyx_CyFunction_get_dict_if_exists(op_in, &dict);
12259
+ if (!dict_found) return 0;
12260
+ return __Pyx_PyDict_GetItemRef(dict, __pyx_mstate_global->__pyx_n_u_annotate, annotate);
12261
+ }
12262
+ static int
12263
+ __Pyx_CyFunction_set_annotate_in_dict_if_exists(PyObject *op_in, PyObject *value) {
12264
+ PyObject *dict;
12265
+ int dict_found;
12266
+ dict_found = __Pyx_CyFunction_get_dict_if_exists(op_in, &dict);
12267
+ if (!dict_found) return 0;
12268
+ return PyDict_SetItem(dict, __pyx_mstate_global->__pyx_n_u_annotate, value);
12269
+ }
12270
+ static int
12271
+ __Pyx_CyFunction_set_annotate_in_dict(PyObject *op_in, PyObject *value) {
12272
+ PyObject *dict;
12273
+ int result;
12274
+ #if CYTHON_COMPILING_IN_LIMITED_API && __PYX_LIMITED_VERSION_HEX < 0x030A0000
12275
+ dict = __Pyx_CyFunction_get_dict((__pyx_CyFunctionObject*) op_in, NULL);
12276
+ #else
12277
+ dict = PyObject_GenericGetDict(op_in, NULL);
12278
+ #endif
12279
+ if (unlikely(!dict)) return -1;
12280
+ result = PyDict_SetItem(dict, __pyx_mstate_global->__pyx_n_u_annotate, value);
12281
+ Py_DECREF(dict);
12282
+ return result;
12283
+ }
12228
12284
  static PyObject *
12229
12285
  __Pyx_CyFunction_get_annotations_locked(__pyx_CyFunctionObject *op) {
12230
12286
  PyObject* result = op->func_annotations;
@@ -12237,14 +12293,88 @@ __Pyx_CyFunction_get_annotations_locked(__pyx_CyFunctionObject *op) {
12237
12293
  return result;
12238
12294
  }
12239
12295
  static PyObject *
12240
- __Pyx_CyFunction_get_annotations(__pyx_CyFunctionObject *op, void *context) {
12241
- PyObject *result;
12296
+ __Pyx_CyFunction_get_annotations(PyObject *op_in, void *context) {
12297
+ PyObject *annotate = NULL;
12298
+ PyObject *result = NULL;
12299
+ __pyx_CyFunctionObject *op = (__pyx_CyFunctionObject*) op_in;
12242
12300
  CYTHON_UNUSED_VAR(context);
12243
- __Pyx_BEGIN_CRITICAL_SECTION(op);
12244
- result = __Pyx_CyFunction_get_annotations_locked(op);
12301
+ __Pyx_BEGIN_CRITICAL_SECTION(op_in);
12302
+ result = __Pyx_XNewRef(op->func_annotations);
12303
+ __Pyx_END_CRITICAL_SECTION();
12304
+ if (result) return result;
12305
+ if (unlikely(__Pyx_CyFunction_get_annotate_from_dict_if_exists(op_in, &annotate) < 0)) return NULL;
12306
+ if (!annotate || annotate == Py_None) {
12307
+ Py_XDECREF(annotate);
12308
+ __Pyx_BEGIN_CRITICAL_SECTION(op_in);
12309
+ result = __Pyx_CyFunction_get_annotations_locked(op);
12310
+ __Pyx_END_CRITICAL_SECTION();
12311
+ return result;
12312
+ }
12313
+ PyObject *format = PyLong_FromLong(1L); // annotationlib.Format.VALUE
12314
+ if (likely(format)) {
12315
+ result = __Pyx_PyObject_CallOneArg(annotate, format);
12316
+ Py_DECREF(format);
12317
+ }
12318
+ Py_DECREF(annotate);
12319
+ if (unlikely(!result)) return NULL;
12320
+ if (unlikely(!PyDict_Check(result))) {
12321
+ PyErr_SetString(PyExc_TypeError, "__annotate__ must return a dict");
12322
+ Py_DECREF(result);
12323
+ return NULL;
12324
+ }
12325
+ __Pyx_BEGIN_CRITICAL_SECTION(op_in);
12326
+ __Pyx_Py_XDECREF_SET(op->func_annotations, __Pyx_NewRef(result));
12245
12327
  __Pyx_END_CRITICAL_SECTION();
12246
12328
  return result;
12247
12329
  }
12330
+ static PyObject *__Pyx_CyFunction_annotate_impl(PyObject *self, PyObject *args) {
12331
+ CYTHON_UNUSED_VAR(args);
12332
+ if (unlikely(!self)) {
12333
+ PyErr_SetString(PyExc_SystemError, "cython __annotate__ called without 'self' argument");
12334
+ }
12335
+ Py_XINCREF(self);
12336
+ return self;
12337
+ }
12338
+ static PyMethodDef __Pyx_CyFunction_annotate_method = {
12339
+ "__annotate__",
12340
+ (PyCFunction)(void (*)(void))__Pyx_CyFunction_annotate_impl,
12341
+ METH_VARARGS,
12342
+ "Placeholder __annotate__ function to allow 'functools.wraps' to work "
12343
+ "on Cython functions."
12344
+ };
12345
+ static PyObject *
12346
+ __Pyx_CyFunction_get_annotate(PyObject *op_in, void *context) {
12347
+ PyObject *annotate = NULL;
12348
+ CYTHON_UNUSED_VAR(context);
12349
+ if (unlikely(__Pyx_CyFunction_get_annotate_from_dict_if_exists(op_in, &annotate) < 0)) return NULL;
12350
+ if (annotate) return annotate;
12351
+ PyObject *annotations = __Pyx_CyFunction_get_annotations(op_in, NULL);
12352
+ if (unlikely(!annotations)) return NULL;
12353
+ PyObject *method = PyCFunction_New(
12354
+ &__Pyx_CyFunction_annotate_method,
12355
+ annotations);
12356
+ Py_DECREF(annotations);
12357
+ return method;
12358
+ }
12359
+ static int
12360
+ __Pyx_CyFunction_set_annotate(PyObject *op_in, PyObject* value, void *context) {
12361
+ CYTHON_UNUSED_VAR(context);
12362
+ if (value == NULL) {
12363
+ PyErr_SetString(PyExc_TypeError, "__annotate__ cannot be deleted");
12364
+ return -1;
12365
+ }
12366
+ if (unlikely(value != Py_None && !PyCallable_Check(value))) {
12367
+ PyErr_SetString(PyExc_TypeError, "__annotate__ must be callable or None");
12368
+ return -1;
12369
+ }
12370
+ if (value != Py_None) {
12371
+ __pyx_CyFunctionObject *op = (__pyx_CyFunctionObject*) op_in;
12372
+ __Pyx_BEGIN_CRITICAL_SECTION(op_in);
12373
+ Py_CLEAR(op->func_annotations);
12374
+ __Pyx_END_CRITICAL_SECTION();
12375
+ }
12376
+ return __Pyx_CyFunction_set_annotate_in_dict(op_in, value);
12377
+ }
12248
12378
  static PyObject *
12249
12379
  __Pyx_CyFunction_get_is_coroutine_value(__pyx_CyFunctionObject *op) {
12250
12380
  int is_coroutine = op->flags & __Pyx_CYFUNCTION_COROUTINE;
@@ -12359,6 +12489,7 @@ static PyGetSetDef __pyx_CyFunction_getsets[] = {
12359
12489
  {"__defaults__", (getter)__Pyx_CyFunction_get_defaults, (setter)__Pyx_CyFunction_set_defaults, 0, 0},
12360
12490
  {"__kwdefaults__", (getter)__Pyx_CyFunction_get_kwdefaults, (setter)__Pyx_CyFunction_set_kwdefaults, 0, 0},
12361
12491
  {"__annotations__", (getter)__Pyx_CyFunction_get_annotations, (setter)__Pyx_CyFunction_set_annotations, 0, 0},
12492
+ {"__annotate__", (getter)__Pyx_CyFunction_get_annotate, (setter)__Pyx_CyFunction_set_annotate, 0, 0},
12362
12493
  {"_is_coroutine", (getter)__Pyx_CyFunction_get_is_coroutine, 0, 0, 0},
12363
12494
  #if CYTHON_COMPILING_IN_LIMITED_API
12364
12495
  {"__module__", (getter)__Pyx_CyFunction_get_module, (setter)__Pyx_CyFunction_set_module, 0, 0},
@@ -15344,6 +15475,10 @@ static __pyx_CoroutineObject *__Pyx__Coroutine_NewInit(
15344
15475
  Py_XINCREF(code);
15345
15476
  gen->gi_code = code;
15346
15477
  gen->gi_frame = NULL;
15478
+ #if CYTHON_USE_SYS_MONITORING && (CYTHON_PROFILE || CYTHON_TRACE)
15479
+ memset(gen->__pyx_pymonitoring_state, 0, sizeof(gen->__pyx_pymonitoring_state));
15480
+ gen->__pyx_pymonitoring_version = 0;
15481
+ #endif
15347
15482
  PyObject_GC_Track(gen);
15348
15483
  return gen;
15349
15484
  }