unstd 3.0.0__tar.gz → 3.1.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 (549) hide show
  1. unstd-3.1.0/.github/workflows/release.yml +93 -0
  2. {unstd-3.0.0 → unstd-3.1.0}/.gitignore +3 -0
  3. {unstd-3.0.0 → unstd-3.1.0}/CHANGELOG.md +33 -1
  4. {unstd-3.0.0 → unstd-3.1.0}/PKG-INFO +7 -1
  5. {unstd-3.0.0 → unstd-3.1.0}/README.md +6 -0
  6. unstd-3.1.0/bench/billy-serde-legacy-results.json +3796 -0
  7. unstd-3.1.0/bench/billy-serde-optimization-results.md +162 -0
  8. unstd-3.1.0/bench/billy-serde-optimized-legacy-results.json +7856 -0
  9. unstd-3.1.0/bench/billy-serde-optimized-results.json +7804 -0
  10. unstd-3.1.0/bench/billy-serde-release-results.json +3776 -0
  11. unstd-3.1.0/bench/billy-serde-results.json +4136 -0
  12. unstd-3.1.0/bench/billy-serde-results.md +133 -0
  13. unstd-3.1.0/bench/billy_serde.py +553 -0
  14. {unstd-3.0.0 → unstd-3.1.0}/bench/cases.py +6 -6
  15. {unstd-3.0.0 → unstd-3.1.0}/bench/serde_profile.py +2 -0
  16. unstd-3.1.0/hatch_build.py +84 -0
  17. {unstd-3.0.0 → unstd-3.1.0}/pyproject.toml +15 -2
  18. {unstd-3.0.0 → unstd-3.1.0}/src/unstd/__init__.py +1 -1
  19. {unstd-3.0.0 → unstd-3.1.0}/src/unstd/serde/README.md +36 -24
  20. {unstd-3.0.0 → unstd-3.1.0}/src/unstd/serde/__init__.py +3 -2
  21. unstd-3.1.0/src/unstd/serde/_json_common.py +16 -0
  22. unstd-3.1.0/src/unstd/serde/_json_decode_native.h +411 -0
  23. {unstd-3.0.0 → unstd-3.1.0}/src/unstd/serde/_json_encode.py +40 -9
  24. unstd-3.1.0/src/unstd/serde/_json_encode_native.h +119 -0
  25. unstd-3.1.0/src/unstd/serde/_json_lines_native.h +99 -0
  26. unstd-3.1.0/src/unstd/serde/_json_native.c +676 -0
  27. unstd-3.1.0/src/unstd/serde/_json_native.pyi +16 -0
  28. {unstd-3.0.0 → unstd-3.1.0}/src/unstd/serde/jsonx.py +64 -86
  29. {unstd-3.0.0 → unstd-3.1.0}/src/unstd/serde/ndjson.py +14 -0
  30. unstd-3.1.0/tests/suites/assurance/gates/bench/test_billy_serde.py +155 -0
  31. {unstd-3.0.0 → unstd-3.1.0}/tests/suites/assurance/planes/packaging/README.md +5 -3
  32. {unstd-3.0.0 → unstd-3.1.0}/tests/suites/assurance/planes/packaging/test_artifacts.py +116 -10
  33. unstd-3.1.0/tests/suites/product/serde/parity/test_jsonx_decode_fast.py +126 -0
  34. {unstd-3.0.0 → unstd-3.1.0}/tests/suites/product/serde/parity/test_jsonx_decode_parity.py +3 -3
  35. {unstd-3.0.0 → unstd-3.1.0}/tests/suites/product/serde/parity/test_jsonx_fast.py +4 -11
  36. unstd-3.1.0/tests/suites/product/serde/parity/test_jsonx_native.py +555 -0
  37. unstd-3.1.0/tests/suites/product/serde/parity/test_jsonx_native_decode.py +331 -0
  38. unstd-3.1.0/tests/suites/product/serde/parity/test_jsonx_native_lifecycle.py +113 -0
  39. {unstd-3.0.0 → unstd-3.1.0}/tests/suites/product/serde/parity/test_jsonx_proof_boundaries.py +1 -16
  40. {unstd-3.0.0 → unstd-3.1.0}/tests/suites/product/serde/unit/test_jsonx.py +1 -0
  41. {unstd-3.0.0 → unstd-3.1.0}/tests/suites/product/serde/unit/test_ndjson.py +127 -0
  42. {unstd-3.0.0 → unstd-3.1.0}/tests/support/packaging.py +4 -0
  43. {unstd-3.0.0 → unstd-3.1.0}/uv.lock +1 -1
  44. unstd-3.0.0/.github/workflows/release.yml +0 -48
  45. unstd-3.0.0/src/unstd/serde/_json_decode.py +0 -126
  46. unstd-3.0.0/tests/suites/product/serde/parity/test_jsonx_decode_fast.py +0 -224
  47. {unstd-3.0.0 → unstd-3.1.0}/.gitattributes +0 -0
  48. {unstd-3.0.0 → unstd-3.1.0}/.github/workflows/chaos.yml +0 -0
  49. {unstd-3.0.0 → unstd-3.1.0}/.github/workflows/ci.yml +0 -0
  50. {unstd-3.0.0 → unstd-3.1.0}/.github/workflows/concurrency.yml +0 -0
  51. {unstd-3.0.0 → unstd-3.1.0}/.github/workflows/fuzz.yml +0 -0
  52. {unstd-3.0.0 → unstd-3.1.0}/LICENSE +0 -0
  53. {unstd-3.0.0 → unstd-3.1.0}/NOTICE +0 -0
  54. {unstd-3.0.0 → unstd-3.1.0}/bench/README.md +0 -0
  55. {unstd-3.0.0 → unstd-3.1.0}/bench/__init__.py +0 -0
  56. {unstd-3.0.0 → unstd-3.1.0}/bench/__main__.py +0 -0
  57. {unstd-3.0.0 → unstd-3.1.0}/bench/baseline.json +0 -0
  58. {unstd-3.0.0 → unstd-3.1.0}/bench/clone-ids-results.json +0 -0
  59. {unstd-3.0.0 → unstd-3.1.0}/bench/clone-ids-results.md +0 -0
  60. {unstd-3.0.0 → unstd-3.1.0}/bench/clone-ids-stdlib-results.json +0 -0
  61. {unstd-3.0.0 → unstd-3.1.0}/bench/clone_ids_profile.py +0 -0
  62. {unstd-3.0.0 → unstd-3.1.0}/bench/optimization-results.md +0 -0
  63. {unstd-3.0.0 → unstd-3.1.0}/bench/report.py +0 -0
  64. {unstd-3.0.0 → unstd-3.1.0}/bench/serde-results.json +0 -0
  65. {unstd-3.0.0 → unstd-3.1.0}/bench/serde-results.md +0 -0
  66. {unstd-3.0.0 → unstd-3.1.0}/bench/timing.py +0 -0
  67. {unstd-3.0.0 → unstd-3.1.0}/changelog.d/README.md +0 -0
  68. {unstd-3.0.0 → unstd-3.1.0}/src/unstd/_extra.py +0 -0
  69. {unstd-3.0.0 → unstd-3.1.0}/src/unstd/audio/README.md +0 -0
  70. {unstd-3.0.0 → unstd-3.1.0}/src/unstd/audio/__init__.py +0 -0
  71. {unstd-3.0.0 → unstd-3.1.0}/src/unstd/audio/wavx.py +0 -0
  72. {unstd-3.0.0 → unstd-3.1.0}/src/unstd/clone/README.md +0 -0
  73. {unstd-3.0.0 → unstd-3.1.0}/src/unstd/clone/__init__.py +0 -0
  74. {unstd-3.0.0 → unstd-3.1.0}/src/unstd/clone/structural.py +0 -0
  75. {unstd-3.0.0 → unstd-3.1.0}/src/unstd/compress/README.md +0 -0
  76. {unstd-3.0.0 → unstd-3.1.0}/src/unstd/compress/__init__.py +0 -0
  77. {unstd-3.0.0 → unstd-3.1.0}/src/unstd/compress/_backend.py +0 -0
  78. {unstd-3.0.0 → unstd-3.1.0}/src/unstd/compress/_inflate.py +0 -0
  79. {unstd-3.0.0 → unstd-3.1.0}/src/unstd/compress/gzipx.py +0 -0
  80. {unstd-3.0.0 → unstd-3.1.0}/src/unstd/containers/README.md +0 -0
  81. {unstd-3.0.0 → unstd-3.1.0}/src/unstd/containers/__init__.py +0 -0
  82. {unstd-3.0.0 → unstd-3.1.0}/src/unstd/containers/persistent.py +0 -0
  83. {unstd-3.0.0 → unstd-3.1.0}/src/unstd/containers/sorted.py +0 -0
  84. {unstd-3.0.0 → unstd-3.1.0}/src/unstd/crypto/README.md +0 -0
  85. {unstd-3.0.0 → unstd-3.1.0}/src/unstd/crypto/__init__.py +0 -0
  86. {unstd-3.0.0 → unstd-3.1.0}/src/unstd/crypto/_blake3.py +0 -0
  87. {unstd-3.0.0 → unstd-3.1.0}/src/unstd/crypto/digest.py +0 -0
  88. {unstd-3.0.0 → unstd-3.1.0}/src/unstd/crypto/tls.py +0 -0
  89. {unstd-3.0.0 → unstd-3.1.0}/src/unstd/crypto/token.py +0 -0
  90. {unstd-3.0.0 → unstd-3.1.0}/src/unstd/fs/README.md +0 -0
  91. {unstd-3.0.0 → unstd-3.1.0}/src/unstd/fs/__init__.py +0 -0
  92. {unstd-3.0.0 → unstd-3.1.0}/src/unstd/ids/README.md +0 -0
  93. {unstd-3.0.0 → unstd-3.1.0}/src/unstd/ids/__init__.py +0 -0
  94. {unstd-3.0.0 → unstd-3.1.0}/src/unstd/ids/uid.py +0 -0
  95. {unstd-3.0.0 → unstd-3.1.0}/src/unstd/iters/README.md +0 -0
  96. {unstd-3.0.0 → unstd-3.1.0}/src/unstd/iters/__init__.py +0 -0
  97. {unstd-3.0.0 → unstd-3.1.0}/src/unstd/iters/consecutive.py +0 -0
  98. {unstd-3.0.0 → unstd-3.1.0}/src/unstd/iters/distinct.py +0 -0
  99. {unstd-3.0.0 → unstd-3.1.0}/src/unstd/iters/reshape.py +0 -0
  100. {unstd-3.0.0 → unstd-3.1.0}/src/unstd/iters/select.py +0 -0
  101. {unstd-3.0.0 → unstd-3.1.0}/src/unstd/model/README.md +0 -0
  102. {unstd-3.0.0 → unstd-3.1.0}/src/unstd/model/__init__.py +0 -0
  103. {unstd-3.0.0 → unstd-3.1.0}/src/unstd/model/base.py +0 -0
  104. {unstd-3.0.0 → unstd-3.1.0}/src/unstd/model/settings.py +0 -0
  105. {unstd-3.0.0 → unstd-3.1.0}/src/unstd/pack/README.md +0 -0
  106. {unstd-3.0.0 → unstd-3.1.0}/src/unstd/pack/__init__.py +0 -0
  107. {unstd-3.0.0 → unstd-3.1.0}/src/unstd/pack/binpack.py +0 -0
  108. {unstd-3.0.0 → unstd-3.1.0}/src/unstd/proc/README.md +0 -0
  109. {unstd-3.0.0 → unstd-3.1.0}/src/unstd/proc/__init__.py +0 -0
  110. {unstd-3.0.0 → unstd-3.1.0}/src/unstd/py.typed +0 -0
  111. {unstd-3.0.0 → unstd-3.1.0}/src/unstd/rand/README.md +0 -0
  112. {unstd-3.0.0 → unstd-3.1.0}/src/unstd/rand/__init__.py +0 -0
  113. {unstd-3.0.0 → unstd-3.1.0}/src/unstd/rand/crypto.py +0 -0
  114. {unstd-3.0.0 → unstd-3.1.0}/src/unstd/rand/draw.py +0 -0
  115. {unstd-3.0.0 → unstd-3.1.0}/src/unstd/rex/README.md +0 -0
  116. {unstd-3.0.0 → unstd-3.1.0}/src/unstd/rex/__init__.py +0 -0
  117. {unstd-3.0.0 → unstd-3.1.0}/src/unstd/rex/_faithful.py +0 -0
  118. {unstd-3.0.0 → unstd-3.1.0}/src/unstd/serde/b64.py +0 -0
  119. {unstd-3.0.0 → unstd-3.1.0}/src/unstd/serde/structs.py +0 -0
  120. {unstd-3.0.0 → unstd-3.1.0}/src/unstd/text/README.md +0 -0
  121. {unstd-3.0.0 → unstd-3.1.0}/src/unstd/text/__init__.py +0 -0
  122. {unstd-3.0.0 → unstd-3.1.0}/src/unstd/text/fuzz.py +0 -0
  123. {unstd-3.0.0 → unstd-3.1.0}/src/unstd/time/README.md +0 -0
  124. {unstd-3.0.0 → unstd-3.1.0}/src/unstd/time/__init__.py +0 -0
  125. {unstd-3.0.0 → unstd-3.1.0}/src/unstd/time/timeutil.py +0 -0
  126. {unstd-3.0.0 → unstd-3.1.0}/src/unstd/time/zoned.py +0 -0
  127. {unstd-3.0.0 → unstd-3.1.0}/src/unstd/toml/README.md +0 -0
  128. {unstd-3.0.0 → unstd-3.1.0}/src/unstd/toml/__init__.py +0 -0
  129. {unstd-3.0.0 → unstd-3.1.0}/src/unstd/yaml/README.md +0 -0
  130. {unstd-3.0.0 → unstd-3.1.0}/src/unstd/yaml/__init__.py +0 -0
  131. {unstd-3.0.0 → unstd-3.1.0}/tests/COVERAGE.md +0 -0
  132. {unstd-3.0.0 → unstd-3.1.0}/tests/P0.md +0 -0
  133. {unstd-3.0.0 → unstd-3.1.0}/tests/README.md +0 -0
  134. {unstd-3.0.0 → unstd-3.1.0}/tests/__init__.py +0 -0
  135. {unstd-3.0.0 → unstd-3.1.0}/tests/conftest.py +0 -0
  136. {unstd-3.0.0 → unstd-3.1.0}/tests/suites/assurance/README.md +0 -0
  137. {unstd-3.0.0 → unstd-3.1.0}/tests/suites/assurance/adversarial/chaos/README.md +0 -0
  138. {unstd-3.0.0 → unstd-3.1.0}/tests/suites/assurance/adversarial/chaos/conftest.py +0 -0
  139. {unstd-3.0.0 → unstd-3.1.0}/tests/suites/assurance/adversarial/chaos/test_clock_entropy.py +0 -0
  140. {unstd-3.0.0 → unstd-3.1.0}/tests/suites/assurance/adversarial/chaos/test_fs_process.py +0 -0
  141. {unstd-3.0.0 → unstd-3.1.0}/tests/suites/assurance/adversarial/chaos/test_streams.py +0 -0
  142. {unstd-3.0.0 → unstd-3.1.0}/tests/suites/assurance/adversarial/concurrency/README.md +0 -0
  143. {unstd-3.0.0 → unstd-3.1.0}/tests/suites/assurance/adversarial/concurrency/conftest.py +0 -0
  144. {unstd-3.0.0 → unstd-3.1.0}/tests/suites/assurance/adversarial/concurrency/test_filesystem.py +0 -0
  145. {unstd-3.0.0 → unstd-3.1.0}/tests/suites/assurance/adversarial/concurrency/test_ids.py +0 -0
  146. {unstd-3.0.0 → unstd-3.1.0}/tests/suites/assurance/adversarial/concurrency/test_shared_state.py +0 -0
  147. {unstd-3.0.0 → unstd-3.1.0}/tests/suites/assurance/adversarial/fuzz_replay/README.md +0 -0
  148. {unstd-3.0.0 → unstd-3.1.0}/tests/suites/assurance/adversarial/fuzz_replay/test_corpus_replay.py +0 -0
  149. {unstd-3.0.0 → unstd-3.1.0}/tests/suites/assurance/adversarial/resources/README.md +0 -0
  150. {unstd-3.0.0 → unstd-3.1.0}/tests/suites/assurance/evals/performance/README.md +0 -0
  151. {unstd-3.0.0 → unstd-3.1.0}/tests/suites/assurance/gates/bench/test_bench.py +0 -0
  152. {unstd-3.0.0 → unstd-3.1.0}/tests/suites/assurance/gates/bench/test_clone_ids_profile.py +0 -0
  153. {unstd-3.0.0 → unstd-3.1.0}/tests/suites/assurance/gates/chaos/_campaign_fixtures.py +0 -0
  154. {unstd-3.0.0 → unstd-3.1.0}/tests/suites/assurance/gates/chaos/test_cli.py +0 -0
  155. {unstd-3.0.0 → unstd-3.1.0}/tests/suites/assurance/gates/chaos/test_execution.py +0 -0
  156. {unstd-3.0.0 → unstd-3.1.0}/tests/suites/assurance/gates/chaos/test_process_policy.py +0 -0
  157. {unstd-3.0.0 → unstd-3.1.0}/tests/suites/assurance/gates/chaos/test_schedule.py +0 -0
  158. {unstd-3.0.0 → unstd-3.1.0}/tests/suites/assurance/gates/chaos/test_workflow.py +0 -0
  159. {unstd-3.0.0 → unstd-3.1.0}/tests/suites/assurance/gates/concurrency/test_campaign.py +0 -0
  160. {unstd-3.0.0 → unstd-3.1.0}/tests/suites/assurance/gates/concurrency/test_workflow.py +0 -0
  161. {unstd-3.0.0 → unstd-3.1.0}/tests/suites/assurance/gates/fuzz/_execution_fixtures.py +0 -0
  162. {unstd-3.0.0 → unstd-3.1.0}/tests/suites/assurance/gates/fuzz/test_cli.py +0 -0
  163. {unstd-3.0.0 → unstd-3.1.0}/tests/suites/assurance/gates/fuzz/test_execution.py +0 -0
  164. {unstd-3.0.0 → unstd-3.1.0}/tests/suites/assurance/gates/fuzz/test_mutate.py +0 -0
  165. {unstd-3.0.0 → unstd-3.1.0}/tests/suites/assurance/gates/fuzz/test_parser_targets.py +0 -0
  166. {unstd-3.0.0 → unstd-3.1.0}/tests/suites/assurance/gates/fuzz/test_registry.py +0 -0
  167. {unstd-3.0.0 → unstd-3.1.0}/tests/suites/assurance/gates/fuzz/test_serde_targets.py +0 -0
  168. {unstd-3.0.0 → unstd-3.1.0}/tests/suites/assurance/gates/fuzz/test_workflow.py +0 -0
  169. {unstd-3.0.0 → unstd-3.1.0}/tests/suites/assurance/gates/packaging/test_package.py +0 -0
  170. {unstd-3.0.0 → unstd-3.1.0}/tests/suites/assurance/gates/packaging/test_startup.py +0 -0
  171. {unstd-3.0.0 → unstd-3.1.0}/tests/suites/assurance/gates/test_backend_policy.py +0 -0
  172. {unstd-3.0.0 → unstd-3.1.0}/tests/suites/assurance/gates/test_optional_collection.py +0 -0
  173. {unstd-3.0.0 → unstd-3.1.0}/tests/suites/assurance/gates/test_suite_runner.py +0 -0
  174. {unstd-3.0.0 → unstd-3.1.0}/tests/suites/assurance/planes/integration/README.md +0 -0
  175. {unstd-3.0.0 → unstd-3.1.0}/tests/suites/assurance/planes/packaging/conftest.py +0 -0
  176. {unstd-3.0.0 → unstd-3.1.0}/tests/suites/assurance/planes/packaging/test_consumers.py +0 -0
  177. {unstd-3.0.0 → unstd-3.1.0}/tests/suites/assurance/planes/packaging/test_extras.py +0 -0
  178. {unstd-3.0.0 → unstd-3.1.0}/tests/suites/assurance/planes/packaging/test_typing.py +0 -0
  179. {unstd-3.0.0 → unstd-3.1.0}/tests/suites/assurance/security/pentest/README.md +0 -0
  180. {unstd-3.0.0 → unstd-3.1.0}/tests/suites/assurance/security/pentest/test_tls_handshakes.py +0 -0
  181. {unstd-3.0.0 → unstd-3.1.0}/tests/suites/assurance/security/structure/README.md +0 -0
  182. {unstd-3.0.0 → unstd-3.1.0}/tests/suites/product/README.md +0 -0
  183. {unstd-3.0.0 → unstd-3.1.0}/tests/suites/product/audio/properties/test_wav_quant.py +0 -0
  184. {unstd-3.0.0 → unstd-3.1.0}/tests/suites/product/audio/regression/test_partial_frames.py +0 -0
  185. {unstd-3.0.0 → unstd-3.1.0}/tests/suites/product/audio/unit/test_audio.py +0 -0
  186. {unstd-3.0.0 → unstd-3.1.0}/tests/suites/product/clone/properties/test_clone_invariants.py +0 -0
  187. {unstd-3.0.0 → unstd-3.1.0}/tests/suites/product/clone/unit/test_clone.py +0 -0
  188. {unstd-3.0.0 → unstd-3.1.0}/tests/suites/product/compress/unit/test_gzipx.py +0 -0
  189. {unstd-3.0.0 → unstd-3.1.0}/tests/suites/product/compress/unit/test_gzipx_edges.py +0 -0
  190. {unstd-3.0.0 → unstd-3.1.0}/tests/suites/product/containers/unit/test_containers.py +0 -0
  191. {unstd-3.0.0 → unstd-3.1.0}/tests/suites/product/crypto/regression/README.md +0 -0
  192. {unstd-3.0.0 → unstd-3.1.0}/tests/suites/product/crypto/security/test_adverse.py +0 -0
  193. {unstd-3.0.0 → unstd-3.1.0}/tests/suites/product/crypto/security/test_tls.py +0 -0
  194. {unstd-3.0.0 → unstd-3.1.0}/tests/suites/product/crypto/security/test_token_boundary.py +0 -0
  195. {unstd-3.0.0 → unstd-3.1.0}/tests/suites/product/crypto/unit/blake3_reference_vectors.json +0 -0
  196. {unstd-3.0.0 → unstd-3.1.0}/tests/suites/product/crypto/unit/test_vectors.py +0 -0
  197. {unstd-3.0.0 → unstd-3.1.0}/tests/suites/product/fs/integration/README.md +0 -0
  198. {unstd-3.0.0 → unstd-3.1.0}/tests/suites/product/fs/integration/test_atomic_failures.py +0 -0
  199. {unstd-3.0.0 → unstd-3.1.0}/tests/suites/product/fs/integration/test_atomic_interruption.py +0 -0
  200. {unstd-3.0.0 → unstd-3.1.0}/tests/suites/product/fs/integration/test_filesystem_boundaries.py +0 -0
  201. {unstd-3.0.0 → unstd-3.1.0}/tests/suites/product/fs/regression/README.md +0 -0
  202. {unstd-3.0.0 → unstd-3.1.0}/tests/suites/product/fs/unit/test_fs.py +0 -0
  203. {unstd-3.0.0 → unstd-3.1.0}/tests/suites/product/ids/properties/test_uuid7.py +0 -0
  204. {unstd-3.0.0 → unstd-3.1.0}/tests/suites/product/ids/regression/README.md +0 -0
  205. {unstd-3.0.0 → unstd-3.1.0}/tests/suites/product/ids/regression/test_fork.py +0 -0
  206. {unstd-3.0.0 → unstd-3.1.0}/tests/suites/product/ids/unit/test_uid.py +0 -0
  207. {unstd-3.0.0 → unstd-3.1.0}/tests/suites/product/iters/unit/test_iters.py +0 -0
  208. {unstd-3.0.0 → unstd-3.1.0}/tests/suites/product/model/unit/test_model.py +0 -0
  209. {unstd-3.0.0 → unstd-3.1.0}/tests/suites/product/pack/properties/test_pack_invariants.py +0 -0
  210. {unstd-3.0.0 → unstd-3.1.0}/tests/suites/product/pack/unit/test_pack.py +0 -0
  211. {unstd-3.0.0 → unstd-3.1.0}/tests/suites/product/proc/integration/README.md +0 -0
  212. {unstd-3.0.0 → unstd-3.1.0}/tests/suites/product/proc/integration/test_process_boundaries.py +0 -0
  213. {unstd-3.0.0 → unstd-3.1.0}/tests/suites/product/proc/integration/test_process_lifecycle.py +0 -0
  214. {unstd-3.0.0 → unstd-3.1.0}/tests/suites/product/proc/regression/README.md +0 -0
  215. {unstd-3.0.0 → unstd-3.1.0}/tests/suites/product/proc/regression/test_interrupt_reaping.py +0 -0
  216. {unstd-3.0.0 → unstd-3.1.0}/tests/suites/product/proc/unit/test_proc.py +0 -0
  217. {unstd-3.0.0 → unstd-3.1.0}/tests/suites/product/rand/unit/test_rand.py +0 -0
  218. {unstd-3.0.0 → unstd-3.1.0}/tests/suites/product/rex/parity/test_fidelity.py +0 -0
  219. {unstd-3.0.0 → unstd-3.1.0}/tests/suites/product/rex/regression/README.md +0 -0
  220. {unstd-3.0.0 → unstd-3.1.0}/tests/suites/product/rex/regression/test_cache_concurrency.py +0 -0
  221. {unstd-3.0.0 → unstd-3.1.0}/tests/suites/product/rex/regression/test_surrogate_region.py +0 -0
  222. {unstd-3.0.0 → unstd-3.1.0}/tests/suites/product/rex/security/test_regex_boundary.py +0 -0
  223. {unstd-3.0.0 → unstd-3.1.0}/tests/suites/product/rex/unit/test_rex.py +0 -0
  224. {unstd-3.0.0 → unstd-3.1.0}/tests/suites/product/serde/parity/test_b64_parity.py +0 -0
  225. {unstd-3.0.0 → unstd-3.1.0}/tests/suites/product/serde/parity/test_jsonx_encode_parity.py +0 -0
  226. {unstd-3.0.0 → unstd-3.1.0}/tests/suites/product/serde/properties/test_b64_parity.py +0 -0
  227. {unstd-3.0.0 → unstd-3.1.0}/tests/suites/product/serde/properties/test_serde_parity.py +0 -0
  228. {unstd-3.0.0 → unstd-3.1.0}/tests/suites/product/serde/regression/README.md +0 -0
  229. {unstd-3.0.0 → unstd-3.1.0}/tests/suites/product/serde/security/test_parser_boundaries.py +0 -0
  230. {unstd-3.0.0 → unstd-3.1.0}/tests/suites/product/serde/unit/test_b64.py +0 -0
  231. {unstd-3.0.0 → unstd-3.1.0}/tests/suites/product/serde/unit/test_ndjson_typed.py +0 -0
  232. {unstd-3.0.0 → unstd-3.1.0}/tests/suites/product/serde/unit/test_structs.py +0 -0
  233. {unstd-3.0.0 → unstd-3.1.0}/tests/suites/product/text/unit/test_distance.py +0 -0
  234. {unstd-3.0.0 → unstd-3.1.0}/tests/suites/product/text/unit/test_text.py +0 -0
  235. {unstd-3.0.0 → unstd-3.1.0}/tests/suites/product/time/unit/test_timeutil.py +0 -0
  236. {unstd-3.0.0 → unstd-3.1.0}/tests/suites/product/time/unit/test_zoned.py +0 -0
  237. {unstd-3.0.0 → unstd-3.1.0}/tests/suites/product/toml/properties/test_toml_invariants.py +0 -0
  238. {unstd-3.0.0 → unstd-3.1.0}/tests/suites/product/toml/unit/test_toml.py +0 -0
  239. {unstd-3.0.0 → unstd-3.1.0}/tests/suites/product/yaml/security/test_yaml_boundary.py +0 -0
  240. {unstd-3.0.0 → unstd-3.1.0}/tests/suites/product/yaml/unit/test_yaml.py +0 -0
  241. {unstd-3.0.0 → unstd-3.1.0}/tests/support/README.md +0 -0
  242. {unstd-3.0.0 → unstd-3.1.0}/tests/support/__init__.py +0 -0
  243. {unstd-3.0.0 → unstd-3.1.0}/tests/support/anchors.py +0 -0
  244. {unstd-3.0.0 → unstd-3.1.0}/tests/support/backends.py +0 -0
  245. {unstd-3.0.0 → unstd-3.1.0}/tests/support/chaos.py +0 -0
  246. {unstd-3.0.0 → unstd-3.1.0}/tests/support/chaos_clock_entropy.py +0 -0
  247. {unstd-3.0.0 → unstd-3.1.0}/tests/support/chaos_fs_process.py +0 -0
  248. {unstd-3.0.0 → unstd-3.1.0}/tests/support/chaos_streams.py +0 -0
  249. {unstd-3.0.0 → unstd-3.1.0}/tests/support/concurrency_filesystem.py +0 -0
  250. {unstd-3.0.0 → unstd-3.1.0}/tests/support/concurrency_ids.py +0 -0
  251. {unstd-3.0.0 → unstd-3.1.0}/tests/support/concurrency_shared_state.py +0 -0
  252. {unstd-3.0.0 → unstd-3.1.0}/tests/support/hypothesis/README.md +0 -0
  253. {unstd-3.0.0 → unstd-3.1.0}/tests/support/hypothesis/__init__.py +0 -0
  254. {unstd-3.0.0 → unstd-3.1.0}/tests/support/hypothesis/profiles.py +0 -0
  255. {unstd-3.0.0 → unstd-3.1.0}/tests/support/parser_cases.py +0 -0
  256. {unstd-3.0.0 → unstd-3.1.0}/tests/support/parser_worker.py +0 -0
  257. {unstd-3.0.0 → unstd-3.1.0}/tests/support/process.py +0 -0
  258. {unstd-3.0.0 → unstd-3.1.0}/tests/support/tls.py +0 -0
  259. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/README.md +0 -0
  260. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/__init__.py +0 -0
  261. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/__main__.py +0 -0
  262. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/bench/README.md +0 -0
  263. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/chaos/README.md +0 -0
  264. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/chaos/__init__.py +0 -0
  265. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/chaos/__main__.py +0 -0
  266. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/chaos/execution.py +0 -0
  267. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/chaos/worker.py +0 -0
  268. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/concurrency/README.md +0 -0
  269. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/concurrency/__init__.py +0 -0
  270. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/concurrency/__main__.py +0 -0
  271. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/README.md +0 -0
  272. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/__init__.py +0 -0
  273. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/__main__.py +0 -0
  274. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/atheris_driver.py +0 -0
  275. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/base64/empty-input.bin +0 -0
  276. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/base64/encode-altchars-long.bin +0 -0
  277. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/base64/encode-altchars-pair.bin +0 -0
  278. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/base64/encode-altchars-short.bin +0 -0
  279. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/base64/encode-binary.bin +0 -0
  280. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/base64/mime-full-line.bin +0 -0
  281. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/base64/mime-second-line.bin +0 -0
  282. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/base64/missing-padding.bin +0 -0
  283. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/base64/mixed-alphabets.bin +0 -0
  284. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/base64/native-clean-long.bin +0 -0
  285. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/base64/native-filtered-long.bin +0 -0
  286. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/base64/padded-standard.bin +0 -0
  287. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/base64/padding-only.bin +0 -0
  288. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/base64/partial-group.bin +0 -0
  289. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/base64/raw-nontext-bytes.bin +0 -0
  290. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/base64/seeds.json +0 -0
  291. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/base64/text-nonascii.bin +0 -0
  292. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/base64/text-surrogate.bin +0 -0
  293. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/base64/unused-pad-bits.bin +0 -0
  294. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/base64/url-alphabet.bin +0 -0
  295. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/base64/url-ignored-junk.bin +0 -0
  296. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/gzip/concatenated-expansion-budget.bin +0 -0
  297. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/gzip/declared-expansion-budget.bin +0 -0
  298. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/gzip/empty.bin +0 -0
  299. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/gzip/forged-expansion-budget.bin +0 -0
  300. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/gzip/generated-concatenation.bin +0 -0
  301. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/gzip/generated-crc-error.bin +0 -0
  302. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/gzip/generated-level-nine.bin +0 -0
  303. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/gzip/generated-stored-level-zero.bin +0 -0
  304. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/gzip/generated-truncation.bin +0 -0
  305. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/gzip/raw-bad-signature.bin +0 -0
  306. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/gzip/raw-concatenated.bin +0 -0
  307. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/gzip/raw-crc-corruption.bin +0 -0
  308. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/gzip/raw-empty-between-members.bin +0 -0
  309. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/gzip/raw-empty-member.bin +0 -0
  310. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/gzip/raw-garbage-second-member.bin +0 -0
  311. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/gzip/raw-invalid-compression-method.bin +0 -0
  312. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/gzip/raw-isize-corruption.bin +0 -0
  313. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/gzip/raw-member.bin +0 -0
  314. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/gzip/raw-oversized-extra-header.bin +0 -0
  315. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/gzip/raw-truncated-deflate.bin +0 -0
  316. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/gzip/raw-truncated-trailer.bin +0 -0
  317. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/gzip/raw-zero-padding.bin +0 -0
  318. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/gzip/seeds.json +0 -0
  319. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/json/empty-document.bin +0 -0
  320. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/json/empty-input.bin +0 -0
  321. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/json/encode-native-snapshot.bin +0 -0
  322. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/json/encode-rich-values.bin +0 -0
  323. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/json/escaped-lone-surrogate.bin +0 -0
  324. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/json/integer-digit-limit.bin +0 -0
  325. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/json/invalid-leading-zero.bin +0 -0
  326. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/json/invalid-utf8.bin +0 -0
  327. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/json/nesting-limit.bin +0 -0
  328. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/json/nesting-outside-domain.bin +0 -0
  329. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/json/nonfinite-extensions.bin +0 -0
  330. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/json/ordered-duplicate-keys.bin +0 -0
  331. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/json/parsed-encode-surrogate.bin +0 -0
  332. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/json/seeds.json +0 -0
  333. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/json/signed-zero.bin +0 -0
  334. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/json/text-lone-surrogate.bin +0 -0
  335. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/json/truncated-object.bin +0 -0
  336. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/json/utf16-big-endian.bin +0 -0
  337. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/json/utf16-bom.bin +0 -0
  338. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/json/utf32-bom.bin +0 -0
  339. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/json/utf8-unicode.bin +0 -0
  340. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/ndjson/ascii-exotic-padding.bin +0 -0
  341. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/ndjson/blank-rows.bin +0 -0
  342. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/ndjson/crlf-rows.bin +0 -0
  343. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/ndjson/empty-input.bin +0 -0
  344. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/ndjson/encode-full-record-set.bin +0 -0
  345. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/ndjson/escaped-newline-value.bin +0 -0
  346. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/ndjson/invalid-utf8-row.bin +0 -0
  347. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/ndjson/maximum-physical-lines.bin +0 -0
  348. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/ndjson/mixed-invalid-rows.bin +0 -0
  349. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/ndjson/physical-lines-outside-domain.bin +0 -0
  350. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/ndjson/quoted-depth-guard.bin +0 -0
  351. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/ndjson/seeds.json +0 -0
  352. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/ndjson/text-lone-surrogate.bin +0 -0
  353. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/ndjson/truncated-final-row.bin +0 -0
  354. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/ndjson/unicode-exotic-padding.bin +0 -0
  355. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/ndjson/unicode-line-separators.bin +0 -0
  356. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/ndjson/utf16-single-row.bin +0 -0
  357. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/ndjson/utf32-single-row.bin +0 -0
  358. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/ndjson/valid-final-newline.bin +0 -0
  359. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/ndjson/valid-no-final-newline.bin +0 -0
  360. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/pack/alias-float16.bin +0 -0
  361. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/pack/alias-float64.bin +0 -0
  362. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/pack/alias-int16.bin +0 -0
  363. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/pack/alias-uint64.bin +0 -0
  364. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/pack/decode-double-specials-pipe.bin +0 -0
  365. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/pack/decode-half-specials.bin +0 -0
  366. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/pack/decode-single-specials-big.bin +0 -0
  367. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/pack/empty-multibyte-decode.bin +0 -0
  368. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/pack/empty.bin +0 -0
  369. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/pack/encode-f2-finite.bin +0 -0
  370. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/pack/encode-f4-finite.bin +0 -0
  371. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/pack/encode-f8-finite.bin +0 -0
  372. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/pack/encode-i1-little.bin +0 -0
  373. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/pack/encode-i2-native.bin +0 -0
  374. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/pack/encode-i4-little.bin +0 -0
  375. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/pack/encode-i8-native.bin +0 -0
  376. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/pack/encode-u1-big.bin +0 -0
  377. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/pack/encode-u2-pipe.bin +0 -0
  378. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/pack/encode-u4-big.bin +0 -0
  379. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/pack/encode-u8-pipe.bin +0 -0
  380. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/pack/partial-float32.bin +0 -0
  381. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/pack/partial-float64.bin +0 -0
  382. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/pack/partial-int16.bin +0 -0
  383. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/pack/seeds.json +0 -0
  384. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/rex/compile-bad-backreference.bin +0 -0
  385. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/rex/compile-bad-repeat.bin +0 -0
  386. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/rex/compile-dollar-divergence.bin +0 -0
  387. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/rex/compile-duplicate-name.bin +0 -0
  388. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/rex/compile-lone-surrogate.bin +0 -0
  389. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/rex/compile-nested-repeat.bin +0 -0
  390. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/rex/compile-posix-divergence.bin +0 -0
  391. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/rex/compile-unclosed-class.bin +0 -0
  392. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/rex/empty.bin +0 -0
  393. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/rex/fallback-backreference.bin +0 -0
  394. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/rex/fallback-lookahead.bin +0 -0
  395. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/rex/fallback-nullable-repeat.bin +0 -0
  396. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/rex/fallback-nullable.bin +0 -0
  397. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/rex/fallback-unicode-ignorecase.bin +0 -0
  398. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/rex/fallback-unicode-subject.bin +0 -0
  399. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/rex/literal-metacharacters.bin +0 -0
  400. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/rex/literal-octet-boundary.bin +0 -0
  401. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/rex/native-absolute-anchor.bin +0 -0
  402. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/rex/native-alternation.bin +0 -0
  403. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/rex/native-bytes-word.bin +0 -0
  404. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/rex/native-digit-width.bin +0 -0
  405. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/rex/native-literal-class.bin +0 -0
  406. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/rex/native-named-word.bin +0 -0
  407. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/rex/native-optional-capture.bin +0 -0
  408. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/rex/seeds.json +0 -0
  409. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/rex/surrogate-region-finding.bin +0 -0
  410. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/rex/surrogate-region-minimized.bin +0 -0
  411. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/structs/deterministic-order.bin +0 -0
  412. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/structs/empty-input.bin +0 -0
  413. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/structs/escaped-lone-surrogate.bin +0 -0
  414. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/structs/escaped-surrogate-pair.bin +0 -0
  415. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/structs/index-maximum.bin +0 -0
  416. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/structs/index-overflow.bin +0 -0
  417. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/structs/label-limit.bin +0 -0
  418. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/structs/label-over-limit.bin +0 -0
  419. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/structs/negative-index.bin +0 -0
  420. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/structs/relaxed-numeric-strings.bin +0 -0
  421. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/structs/row-list-limit.bin +0 -0
  422. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/structs/row-list-over-limit.bin +0 -0
  423. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/structs/row-list.bin +0 -0
  424. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/structs/seeds.json +0 -0
  425. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/structs/sorted-order.bin +0 -0
  426. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/structs/strict-row.bin +0 -0
  427. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/structs/tagged-delete.bin +0 -0
  428. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/structs/tagged-put.bin +0 -0
  429. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/structs/tagged-unknown.bin +0 -0
  430. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/structs/truncated-row.bin +0 -0
  431. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/structs/unknown-field.bin +0 -0
  432. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/structs/utf16-rejected.bin +0 -0
  433. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/structs/utf32-rejected.bin +0 -0
  434. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/structs/utf8-key-error.bin +0 -0
  435. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/structs/utf8-value-error.bin +0 -0
  436. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/structs/wrong-field-type.bin +0 -0
  437. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/tokens/arbitrary-invalid-utf8.bin +0 -0
  438. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/tokens/authentic-no-json-policy.bin +0 -0
  439. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/tokens/authentic-opaque-token.bin +0 -0
  440. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/tokens/changed-claims.bin +0 -0
  441. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/tokens/claims-generation-limit.bin +0 -0
  442. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/tokens/derive-authentic-tampering.bin +0 -0
  443. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/tokens/derive-signed-malformed.bin +0 -0
  444. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/tokens/empty-input.bin +0 -0
  445. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/tokens/extra-separator.bin +0 -0
  446. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/tokens/missing-separator.bin +0 -0
  447. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/tokens/seeds.json +0 -0
  448. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/tokens/signature-pad-bit-alias.bin +0 -0
  449. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/tokens/signed-payload-alias.bin +0 -0
  450. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/tokens/signed-payload-junk.bin +0 -0
  451. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/tokens/signed-payload-padding.bin +0 -0
  452. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/tokens/signed-standard-alphabet.bin +0 -0
  453. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/tokens/text-lone-surrogate.bin +0 -0
  454. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/tokens/text-nonascii.bin +0 -0
  455. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/tokens/truncated-signature.bin +0 -0
  456. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/tokens/utf16-shaped-token.bin +0 -0
  457. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/tokens/utf32-shaped-token.bin +0 -0
  458. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/toml/empty.bin +0 -0
  459. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/toml/model-boolean-false.bin +0 -0
  460. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/toml/model-boolean-true.bin +0 -0
  461. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/toml/model-empty.bin +0 -0
  462. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/toml/model-escapes.bin +0 -0
  463. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/toml/model-integer-boundary.bin +0 -0
  464. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/toml/raw-array-of-tables.bin +0 -0
  465. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/toml/raw-arrays-tables.bin +0 -0
  466. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/toml/raw-basic.bin +0 -0
  467. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/toml/raw-datetimes.bin +0 -0
  468. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/toml/raw-dotted-key-redefinition.bin +0 -0
  469. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/toml/raw-duplicate-key.bin +0 -0
  470. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/toml/raw-empty.bin +0 -0
  471. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/toml/raw-float-specials.bin +0 -0
  472. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/toml/raw-invalid-utf8.bin +0 -0
  473. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/toml/raw-nested-budget.bin +0 -0
  474. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/toml/raw-nul.bin +0 -0
  475. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/toml/raw-numeric-extrema.bin +0 -0
  476. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/toml/raw-quoted-unicode-key.bin +0 -0
  477. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/toml/raw-string-escapes.bin +0 -0
  478. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/toml/raw-unterminated-array.bin +0 -0
  479. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/toml/seeds.json +0 -0
  480. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/wav/declared-channel-overflow.bin +0 -0
  481. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/wav/declared-data-overflow.bin +0 -0
  482. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/wav/declared-riff-overflow.bin +0 -0
  483. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/wav/empty.bin +0 -0
  484. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/wav/generated-invalid-truncated-riff.bin +0 -0
  485. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/wav/generated-invalid-wrong-magic.bin +0 -0
  486. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/wav/generated-invalid-zero-channels.bin +0 -0
  487. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/wav/generated-mono-48000.bin +0 -0
  488. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/wav/generated-mono-8000.bin +0 -0
  489. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/wav/generated-quad-44100.bin +0 -0
  490. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/wav/generated-stereo-16000.bin +0 -0
  491. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/wav/generated-three-channel-22050.bin +0 -0
  492. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/wav/raw-empty-stereo.bin +0 -0
  493. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/wav/raw-foreign-flac.bin +0 -0
  494. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/wav/raw-missing-format.bin +0 -0
  495. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/wav/raw-mono-extrema.bin +0 -0
  496. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/wav/raw-quad-interleaved.bin +0 -0
  497. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/wav/raw-short-riff.bin +0 -0
  498. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/wav/raw-stereo-interleaved.bin +0 -0
  499. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/wav/raw-truncated-pcm.bin +0 -0
  500. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/wav/regression-declared-partial-pcm-sample.bin +0 -0
  501. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/wav/regression-fmt-extent-outside-riff.bin +0 -0
  502. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/wav/regression-inconsistent-pcm-byte-rate.bin +0 -0
  503. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/wav/regression-truncated-quad-frame.bin +0 -0
  504. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/wav/seeds.json +0 -0
  505. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/yaml/alias-expansion-budget.bin +0 -0
  506. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/yaml/alias-minimum.bin +0 -0
  507. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/yaml/empty.bin +0 -0
  508. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/yaml/generated-tag-python-apply.bin +0 -0
  509. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/yaml/generated-tag-python-new.bin +0 -0
  510. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/yaml/generated-tag-unknown.bin +0 -0
  511. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/yaml/known-model-binary.bin +0 -0
  512. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/yaml/known-model.bin +0 -0
  513. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/yaml/raw-alias-expansion-budget.bin +0 -0
  514. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/yaml/raw-basic.bin +0 -0
  515. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/yaml/raw-binary-timestamp.bin +0 -0
  516. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/yaml/raw-duplicate-key.bin +0 -0
  517. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/yaml/raw-float-specials.bin +0 -0
  518. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/yaml/raw-invalid-date-finding.bin +0 -0
  519. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/yaml/raw-invalid-utf16.bin +0 -0
  520. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/yaml/raw-merge-overrides.bin +0 -0
  521. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/yaml/raw-multiple-documents.bin +0 -0
  522. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/yaml/raw-nul.bin +0 -0
  523. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/yaml/raw-python-tag.bin +0 -0
  524. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/yaml/raw-recursive-alias.bin +0 -0
  525. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/yaml/raw-safe-aliases.bin +0 -0
  526. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/yaml/raw-semantic-key-collision.bin +0 -0
  527. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/yaml/raw-unclosed-flow.bin +0 -0
  528. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/yaml/raw-unknown-tag.bin +0 -0
  529. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/corpus/yaml/seeds.json +0 -0
  530. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/execution.py +0 -0
  531. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/mutate.py +0 -0
  532. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/registry.py +0 -0
  533. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/registry.toml +0 -0
  534. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/targets/__init__.py +0 -0
  535. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/targets/base64.py +0 -0
  536. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/targets/gzip.py +0 -0
  537. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/targets/json.py +0 -0
  538. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/targets/ndjson.py +0 -0
  539. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/targets/pack.py +0 -0
  540. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/targets/rex.py +0 -0
  541. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/targets/structs.py +0 -0
  542. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/targets/tokens.py +0 -0
  543. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/targets/toml.py +0 -0
  544. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/targets/wav.py +0 -0
  545. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/targets/yaml.py +0 -0
  546. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/fuzz/worker.py +0 -0
  547. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/inventory.toml +0 -0
  548. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/mutation/README.md +0 -0
  549. {unstd-3.0.0 → unstd-3.1.0}/tests/tooling/runner.py +0 -0
@@ -0,0 +1,93 @@
1
+ # Build and verify native wheels before publishing a version tag to PyPI.
2
+ #
3
+ # ONE-TIME SETUP: PyPI Trusted Publishing, no API token in this repo.
4
+ # On PyPI, add a trusted publisher for the `unstd` project pointing at this
5
+ # repository, workflow `release.yml`, environment `pypi`. Before the project
6
+ # exists this is a pending publisher under Your projects -> Publishing.
7
+ name: release
8
+
9
+ on:
10
+ push:
11
+ tags: ["v*"]
12
+ workflow_dispatch:
13
+
14
+ permissions:
15
+ contents: read
16
+
17
+ jobs:
18
+ # A tag push used to publish unconditionally — nothing stood between `git tag`
19
+ # and PyPI, and a release is the one artifact that cannot be taken back. The
20
+ # full CI gate (lint + type + the 3.12/3.13/3.14 matrix + the base-install
21
+ # fallback leg) runs first, by reference rather than by copy, so the bar is
22
+ # the same one every pull request clears.
23
+ gate:
24
+ uses: ./.github/workflows/ci.yml
25
+ permissions:
26
+ contents: read
27
+
28
+ wheels:
29
+ needs: gate
30
+ strategy:
31
+ fail-fast: false
32
+ matrix:
33
+ os: [ubuntu-latest, ubuntu-24.04-arm, macos-15-intel, macos-14, windows-latest, windows-11-arm]
34
+ runs-on: ${{ matrix.os }}
35
+ steps:
36
+ - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
37
+ with:
38
+ persist-credentials: false
39
+ - uses: astral-sh/setup-uv@c18668ad3cf93ea998bef934396af7bb5c839dc7 # v10.2.0
40
+ with:
41
+ enable-cache: false
42
+ version: "latest-known"
43
+ - name: Build and test CPython wheels
44
+ run: uvx --from cibuildwheel==4.3.1 cibuildwheel --output-dir dist
45
+ - uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6
46
+ with:
47
+ name: wheels-${{ matrix.os }}
48
+ path: dist/*.whl
49
+ if-no-files-found: error
50
+
51
+ sdist:
52
+ needs: gate
53
+ runs-on: ubuntu-latest
54
+ steps:
55
+ - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
56
+ with:
57
+ persist-credentials: false
58
+ - uses: astral-sh/setup-uv@c18668ad3cf93ea998bef934396af7bb5c839dc7 # v10.2.0
59
+ with:
60
+ enable-cache: false
61
+ version: "latest-known"
62
+ - run: uv build --sdist
63
+ - uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6
64
+ with:
65
+ name: source
66
+ path: dist/*.tar.gz
67
+ if-no-files-found: error
68
+
69
+ pypi:
70
+ needs: [wheels, sdist]
71
+ if: startsWith(github.ref, 'refs/tags/v')
72
+ runs-on: ubuntu-latest
73
+ environment: pypi
74
+ permissions:
75
+ id-token: write
76
+ steps:
77
+ - uses: actions/download-artifact@37930b1c2abaa49bbe596cd826c3c89aef350131 # v7
78
+ with:
79
+ path: dist
80
+ merge-multiple: true
81
+ - name: The tag agrees with package metadata
82
+ env:
83
+ TAG: ${{ github.ref_name }}
84
+ run: |
85
+ python - <<'PY'
86
+ import os, pathlib, tarfile, tomllib
87
+ source, = pathlib.Path("dist").glob("*.tar.gz")
88
+ with tarfile.open(source) as archive:
89
+ manifest, = (item for item in archive.getmembers() if item.name.endswith("/pyproject.toml"))
90
+ version = tomllib.loads(archive.extractfile(manifest).read().decode())["project"]["version"]
91
+ assert os.environ["TAG"] == "v" + version
92
+ PY
93
+ - uses: pypa/gh-action-pypi-publish@dc37677b2e1c63e2034f94d8a5b11f265b73ba33 # v1.14.2
@@ -2,6 +2,9 @@
2
2
  __pycache__/
3
3
  *.py[cod]
4
4
  *.egg-info/
5
+ *.so
6
+ *.pyd
7
+ build/
5
8
  .venv/
6
9
  dist/
7
10
  .pytest_cache/
@@ -8,7 +8,7 @@ doc_radar:
8
8
  - file: .github/workflows/ci.yml
9
9
  contains: ['github.sha || github.ref', 'version: "latest-known"', 'uv sync --locked']
10
10
  - file: .github/workflows/release.yml
11
- contains: ['TAG: ${{ github.ref_name }}', 'uv version --short']
11
+ contains: ['TAG: ${{ github.ref_name }}', 'Build and test CPython wheels']
12
12
  - file: src/unstd/serde/structs.py
13
13
  contains: ['Callable[[Decimal], object]', 'decimal_format: _DecimalFormat']
14
14
  ---
@@ -17,6 +17,38 @@ doc_radar:
17
17
 
18
18
  <!-- towncrier release notes start -->
19
19
 
20
+ ## [3.1.0] - 2026-10-20
21
+
22
+ ### Performance
23
+
24
+ - JSON encoding can use an optional CPython native guard that checks exact
25
+ builtin trees and calls orjson while retaining the GIL. Larger text records
26
+ avoid 3.0.0's Python snapshot budget and stdlib fallback. Compiler-less source
27
+ builds retain the portable path; release wheels include the guard.
28
+ - Native default spacing preserves punctuation and escaped quotes inside text,
29
+ avoiding the stdlib fallback for larger string-heavy records.
30
+ - Untyped JSON decoding reuses msgspec's arbitrary-precision integer and correctly
31
+ rounded float decoder, with a bounded native proof enabling orjson for larger
32
+ records. CPython 3.14 native dispatch preserves Python function metadata and
33
+ falls back during instrumentation. Custom options, unsupported inputs and
34
+ native errors retain stdlib behavior.
35
+ - NDJSON writes use the same guarded encoder's native trailing-newline option,
36
+ avoiding redundant public dispatch and an extra output copy per record.
37
+ - Whole-blob NDJSON reads batch native parsing over strict physical newline
38
+ boundaries. Streaming reads, callbacks and error diagnostics keep their
39
+ existing behavior.
40
+ - Added an output-checked Billy fixture comparison with source and fixture
41
+ fingerprints, alternating before/after CPU batches, direct-call companions and
42
+ an optional release-regression gate. The measurement report retains residual
43
+ costs relative to the permissive 2.1.1 codec; no universal speedup or
44
+ zero-overhead compatibility claim is made. Public APIs are unchanged.
45
+
46
+ ### Fixed
47
+
48
+ - Native codec reinitialization keeps earlier helpers' configuration checks and
49
+ Python fallbacks valid. Module destruction also releases watchers and owned
50
+ references when garbage collection has not run the clear hook first.
51
+
20
52
  ## [3.0.0] - 2026-10-19
21
53
 
22
54
  ### Breaking
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: unstd
3
- Version: 3.0.0
3
+ Version: 3.1.0
4
4
  Summary: stdlib-faithful accelerated replacements behind optional extras
5
5
  Project-URL: Homepage, https://github.com/The-Billy-Company/unstd
6
6
  Project-URL: Repository, https://github.com/The-Billy-Company/unstd
@@ -83,6 +83,12 @@ python3 -m pip install unstd
83
83
  python3 -m pip install 'unstd[serde,ids,crypto]'
84
84
  ```
85
85
 
86
+ CPython platform wheels include an optional C guard for fast, compatible JSON
87
+ encoding. Source builds use it when a compiler is available and otherwise keep
88
+ the portable fallback. The runtime dependency set and public APIs are unchanged.
89
+ See the [Billy fixture measurements](bench/billy-serde-optimization-results.md)
90
+ for release comparisons, including remaining overhead relative to 2.1.1.
91
+
86
92
  ## Groups
87
93
 
88
94
  | Group | Extra | Backend / fallback |
@@ -23,6 +23,12 @@ python3 -m pip install unstd
23
23
  python3 -m pip install 'unstd[serde,ids,crypto]'
24
24
  ```
25
25
 
26
+ CPython platform wheels include an optional C guard for fast, compatible JSON
27
+ encoding. Source builds use it when a compiler is available and otherwise keep
28
+ the portable fallback. The runtime dependency set and public APIs are unchanged.
29
+ See the [Billy fixture measurements](bench/billy-serde-optimization-results.md)
30
+ for release comparisons, including remaining overhead relative to 2.1.1.
31
+
26
32
  ## Groups
27
33
 
28
34
  | Group | Extra | Backend / fallback |