tokensim 1.0.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 (374) hide show
  1. tokensim-1.0.0/.github/workflows/ci.yml +49 -0
  2. tokensim-1.0.0/.github/workflows/pages.yml +126 -0
  3. tokensim-1.0.0/.github/workflows/release.yml +72 -0
  4. tokensim-1.0.0/BENCHMARKS.md +3382 -0
  5. tokensim-1.0.0/CMakeLists.txt +383 -0
  6. tokensim-1.0.0/LICENSE +21 -0
  7. tokensim-1.0.0/PKG-INFO +283 -0
  8. tokensim-1.0.0/README.md +265 -0
  9. tokensim-1.0.0/TECHNICAL-REPORT.md +710 -0
  10. tokensim-1.0.0/benchmarks/bench_parallel.c +233 -0
  11. tokensim-1.0.0/benchmarks/bench_pretokenizer.c +114 -0
  12. tokensim-1.0.0/benchmarks/bench_utf8simd.cpp +156 -0
  13. tokensim-1.0.0/bindings/... +0 -0
  14. tokensim-1.0.0/bindings/python/test_tsimd.py +139 -0
  15. tokensim-1.0.0/bindings/python/tsimd_module.c +299 -0
  16. tokensim-1.0.0/bindings/rust/Cargo.lock +32 -0
  17. tokensim-1.0.0/bindings/rust/Cargo.toml +28 -0
  18. tokensim-1.0.0/bindings/rust/README.md +98 -0
  19. tokensim-1.0.0/bindings/rust/build.rs +140 -0
  20. tokensim-1.0.0/bindings/rust/csrc/LICENSE +21 -0
  21. tokensim-1.0.0/bindings/rust/csrc/VERSION +1 -0
  22. tokensim-1.0.0/bindings/rust/csrc/include/allocator.h +27 -0
  23. tokensim-1.0.0/bindings/rust/csrc/include/batch.h +19 -0
  24. tokensim-1.0.0/bindings/rust/csrc/include/bpe.h +630 -0
  25. tokensim-1.0.0/bindings/rust/csrc/include/input.h +21 -0
  26. tokensim-1.0.0/bindings/rust/csrc/include/pretokenizer.h +110 -0
  27. tokensim-1.0.0/bindings/rust/csrc/include/simd.h +37 -0
  28. tokensim-1.0.0/bindings/rust/csrc/include/spm_tie_rule.h +20 -0
  29. tokensim-1.0.0/bindings/rust/csrc/include/tokenizer.h +206 -0
  30. tokensim-1.0.0/bindings/rust/csrc/include/tokensimd_sys.h +39 -0
  31. tokensim-1.0.0/bindings/rust/csrc/include/tokensimd_version.h +9 -0
  32. tokensim-1.0.0/bindings/rust/csrc/include/trie.h +78 -0
  33. tokensim-1.0.0/bindings/rust/csrc/include/unicode.h +49 -0
  34. tokensim-1.0.0/bindings/rust/csrc/include/vocabulary.h +181 -0
  35. tokensim-1.0.0/bindings/rust/csrc/src/allocator.c +140 -0
  36. tokensim-1.0.0/bindings/rust/csrc/src/bpe.c +3743 -0
  37. tokensim-1.0.0/bindings/rust/csrc/src/byte_unicode.c +30 -0
  38. tokensim-1.0.0/bindings/rust/csrc/src/byte_unicode.h +12 -0
  39. tokensim-1.0.0/bindings/rust/csrc/src/input.c +112 -0
  40. tokensim-1.0.0/bindings/rust/csrc/src/json.c +437 -0
  41. tokensim-1.0.0/bindings/rust/csrc/src/json.h +54 -0
  42. tokensim-1.0.0/bindings/rust/csrc/src/metaspace.c +428 -0
  43. tokensim-1.0.0/bindings/rust/csrc/src/model_gpt2.c +201 -0
  44. tokensim-1.0.0/bindings/rust/csrc/src/model_internal.c +38 -0
  45. tokensim-1.0.0/bindings/rust/csrc/src/model_internal.h +29 -0
  46. tokensim-1.0.0/bindings/rust/csrc/src/model_spm.c +459 -0
  47. tokensim-1.0.0/bindings/rust/csrc/src/model_tokjson.c +730 -0
  48. tokensim-1.0.0/bindings/rust/csrc/src/nfc.c +369 -0
  49. tokensim-1.0.0/bindings/rust/csrc/src/nfc_internal.h +43 -0
  50. tokensim-1.0.0/bindings/rust/csrc/src/nfc_tables.c +12707 -0
  51. tokensim-1.0.0/bindings/rust/csrc/src/parallel.c +2896 -0
  52. tokensim-1.0.0/bindings/rust/csrc/src/pretokenizer/cl100k.c +40 -0
  53. tokensim-1.0.0/bindings/rust/csrc/src/pretokenizer/cl100k_masks.c +1276 -0
  54. tokensim-1.0.0/bindings/rust/csrc/src/pretokenizer/cl100k_match.h +117 -0
  55. tokensim-1.0.0/bindings/rust/csrc/src/pretokenizer/deepseek.c +252 -0
  56. tokensim-1.0.0/bindings/rust/csrc/src/pretokenizer/deepseek_masks.c +1285 -0
  57. tokensim-1.0.0/bindings/rust/csrc/src/pretokenizer/gpt2.c +101 -0
  58. tokensim-1.0.0/bindings/rust/csrc/src/pretokenizer/gpt2_masks.c +1200 -0
  59. tokensim-1.0.0/bindings/rust/csrc/src/pretokenizer/internal.h +123 -0
  60. tokensim-1.0.0/bindings/rust/csrc/src/pretokenizer/kimi.c +249 -0
  61. tokensim-1.0.0/bindings/rust/csrc/src/pretokenizer/kimi_masks.c +308 -0
  62. tokensim-1.0.0/bindings/rust/csrc/src/pretokenizer/nemo_masks.c +1321 -0
  63. tokensim-1.0.0/bindings/rust/csrc/src/pretokenizer/o200k.c +136 -0
  64. tokensim-1.0.0/bindings/rust/csrc/src/pretokenizer/o200k_masks.c +1634 -0
  65. tokensim-1.0.0/bindings/rust/csrc/src/pretokenizer/o200k_match.h +413 -0
  66. tokensim-1.0.0/bindings/rust/csrc/src/pretokenizer/pretokenizer.c +147 -0
  67. tokensim-1.0.0/bindings/rust/csrc/src/pretokenizer/safe_split.c +43 -0
  68. tokensim-1.0.0/bindings/rust/csrc/src/pretokenizer/simd_pretok.c +806 -0
  69. tokensim-1.0.0/bindings/rust/csrc/src/serve_x86.cpp +170 -0
  70. tokensim-1.0.0/bindings/rust/csrc/src/simd/blocks_avx2.c +88 -0
  71. tokensim-1.0.0/bindings/rust/csrc/src/simd/blocks_avx512.c +81 -0
  72. tokensim-1.0.0/bindings/rust/csrc/src/simd/blocks_scalar.c +42 -0
  73. tokensim-1.0.0/bindings/rust/csrc/src/simd/blocks_sse2.c +86 -0
  74. tokensim-1.0.0/bindings/rust/csrc/src/simd/dispatch.c +177 -0
  75. tokensim-1.0.0/bindings/rust/csrc/src/simd/simd_internal.h +51 -0
  76. tokensim-1.0.0/bindings/rust/csrc/src/spm_charmap.h +6072 -0
  77. tokensim-1.0.0/bindings/rust/csrc/src/spm_seqmap.h +16066 -0
  78. tokensim-1.0.0/bindings/rust/csrc/src/spm_tie_rule.c +44 -0
  79. tokensim-1.0.0/bindings/rust/csrc/src/sys.c +197 -0
  80. tokensim-1.0.0/bindings/rust/csrc/src/tokenizer.c +1890 -0
  81. tokensim-1.0.0/bindings/rust/csrc/src/trie.c +301 -0
  82. tokensim-1.0.0/bindings/rust/csrc/src/unicode.c +58 -0
  83. tokensim-1.0.0/bindings/rust/csrc/src/unicode_tables.c +9192 -0
  84. tokensim-1.0.0/bindings/rust/csrc/src/vocabulary.c +1074 -0
  85. tokensim-1.0.0/bindings/rust/examples/bench.rs +50 -0
  86. tokensim-1.0.0/bindings/rust/src/lib.rs +358 -0
  87. tokensim-1.0.0/cmake/tokensimd-config.cmake.in +3 -0
  88. tokensim-1.0.0/cmake/tokensimd.pc.in +11 -0
  89. tokensim-1.0.0/include/allocator.h +27 -0
  90. tokensim-1.0.0/include/batch.h +19 -0
  91. tokensim-1.0.0/include/bpe.h +630 -0
  92. tokensim-1.0.0/include/input.h +21 -0
  93. tokensim-1.0.0/include/pretokenizer.h +110 -0
  94. tokensim-1.0.0/include/simd.h +37 -0
  95. tokensim-1.0.0/include/spm_tie_rule.h +20 -0
  96. tokensim-1.0.0/include/tokenizer.h +206 -0
  97. tokensim-1.0.0/include/tokensimd_sys.h +39 -0
  98. tokensim-1.0.0/include/tokensimd_version.h +9 -0
  99. tokensim-1.0.0/include/trie.h +78 -0
  100. tokensim-1.0.0/include/unicode.h +49 -0
  101. tokensim-1.0.0/include/vocabulary.h +181 -0
  102. tokensim-1.0.0/proof/Tokensim/Bpe.lean +588 -0
  103. tokensim-1.0.0/proof/Tokensim.lean +1 -0
  104. tokensim-1.0.0/proof/lake-manifest.json +6 -0
  105. tokensim-1.0.0/proof/lakefile.toml +6 -0
  106. tokensim-1.0.0/proof/lean-toolchain +1 -0
  107. tokensim-1.0.0/pyproject.toml +76 -0
  108. tokensim-1.0.0/scripts/README.md +32 -0
  109. tokensim-1.0.0/scripts/ab_test.py +128 -0
  110. tokensim-1.0.0/scripts/bench_baseline.json +5 -0
  111. tokensim-1.0.0/scripts/bench_python.py +71 -0
  112. tokensim-1.0.0/scripts/bench_python_arm.py +55 -0
  113. tokensim-1.0.0/scripts/bench_scalar_baseline.py +43 -0
  114. tokensim-1.0.0/scripts/bench_track.py +95 -0
  115. tokensim-1.0.0/scripts/bench_wrappers.sh +88 -0
  116. tokensim-1.0.0/scripts/bisect_thread_diff.sh +34 -0
  117. tokensim-1.0.0/scripts/bisect_thread_prefix.sh +23 -0
  118. tokensim-1.0.0/scripts/check_avx512_sde.sh +37 -0
  119. tokensim-1.0.0/scripts/check_clang.sh +18 -0
  120. tokensim-1.0.0/scripts/check_gpt2_files.py +62 -0
  121. tokensim-1.0.0/scripts/check_lean_axioms.sh +23 -0
  122. tokensim-1.0.0/scripts/check_versions.sh +21 -0
  123. tokensim-1.0.0/scripts/chunk_bisect.c +148 -0
  124. tokensim-1.0.0/scripts/compare_reference.py +258 -0
  125. tokensim-1.0.0/scripts/corpus_hash.c +129 -0
  126. tokensim-1.0.0/scripts/deepseek_seam_repro.py +19 -0
  127. tokensim-1.0.0/scripts/deepseek_span_probe.c +70 -0
  128. tokensim-1.0.0/scripts/derive_corpus_hash.py +78 -0
  129. tokensim-1.0.0/scripts/derive_gate_hash.py +36 -0
  130. tokensim-1.0.0/scripts/diag_compare.c +84 -0
  131. tokensim-1.0.0/scripts/diff_fuzz.py +76 -0
  132. tokensim-1.0.0/scripts/exhaustive_algebra.c +220 -0
  133. tokensim-1.0.0/scripts/findc_stress.sh +32 -0
  134. tokensim-1.0.0/scripts/full_corpus_parity.sh +35 -0
  135. tokensim-1.0.0/scripts/gate_parity.sh +35 -0
  136. tokensim-1.0.0/scripts/gem4_batch_bisect.c +95 -0
  137. tokensim-1.0.0/scripts/gem4_profile.c +311 -0
  138. tokensim-1.0.0/scripts/gemma_parity.py +72 -0
  139. tokensim-1.0.0/scripts/gemma_unit_probe.c +69 -0
  140. tokensim-1.0.0/scripts/gemma_window_probe.c +130 -0
  141. tokensim-1.0.0/scripts/gen_golden.py +90 -0
  142. tokensim-1.0.0/scripts/gen_model_fixtures.py +96 -0
  143. tokensim-1.0.0/scripts/gen_nfc_qc.py +15 -0
  144. tokensim-1.0.0/scripts/gen_nfc_tables.py +151 -0
  145. tokensim-1.0.0/scripts/gen_spm_seqmap.py +305 -0
  146. tokensim-1.0.0/scripts/gen_tie_expected.py +12 -0
  147. tokensim-1.0.0/scripts/gen_unicode_tables.py +190 -0
  148. tokensim-1.0.0/scripts/gt_drive.py +36 -0
  149. tokensim-1.0.0/scripts/gt_drive2.py +52 -0
  150. tokensim-1.0.0/scripts/ids_parity.c +103 -0
  151. tokensim-1.0.0/scripts/kimi_span_diff.c +80 -0
  152. tokensim-1.0.0/scripts/ladder_encode.c +144 -0
  153. tokensim-1.0.0/scripts/ladder_giga.py +110 -0
  154. tokensim-1.0.0/scripts/leak_probe.c +98 -0
  155. tokensim-1.0.0/scripts/make_unk_surface_fixture.py +60 -0
  156. tokensim-1.0.0/scripts/measure_at_insert.c +85 -0
  157. tokensim-1.0.0/scripts/microbench_windows.c +51 -0
  158. tokensim-1.0.0/scripts/ms_bench.c +61 -0
  159. tokensim-1.0.0/scripts/ms_diff_probe.c +196 -0
  160. tokensim-1.0.0/scripts/nemo_fill_diff.c +102 -0
  161. tokensim-1.0.0/scripts/nemo_parity.py +72 -0
  162. tokensim-1.0.0/scripts/nemo_spin_probe.c +104 -0
  163. tokensim-1.0.0/scripts/nfkc_sweep.c +31 -0
  164. tokensim-1.0.0/scripts/par_arms_ab.py +129 -0
  165. tokensim-1.0.0/scripts/probe_transform.c +12 -0
  166. tokensim-1.0.0/scripts/repro_artifact.sh +25 -0
  167. tokensim-1.0.0/scripts/run_exhaustive.sh +7 -0
  168. tokensim-1.0.0/scripts/run_full_battery.sh +52 -0
  169. tokensim-1.0.0/scripts/run_fuzz.sh +40 -0
  170. tokensim-1.0.0/scripts/run_ladder.sh +54 -0
  171. tokensim-1.0.0/scripts/run_leak_check.sh +28 -0
  172. tokensim-1.0.0/scripts/run_matrix.sh +45 -0
  173. tokensim-1.0.0/scripts/run_microbench.sh +10 -0
  174. tokensim-1.0.0/scripts/run_sanitize.sh +44 -0
  175. tokensim-1.0.0/scripts/run_wholechain_bench.sh +13 -0
  176. tokensim-1.0.0/scripts/seam_diff_probe.c +112 -0
  177. tokensim-1.0.0/scripts/seed_probe.c +57 -0
  178. tokensim-1.0.0/scripts/span_probe.c +133 -0
  179. tokensim-1.0.0/scripts/spm_norm_probe.py +169 -0
  180. tokensim-1.0.0/scripts/spm_parity.py +119 -0
  181. tokensim-1.0.0/scripts/strip_comments.c +150 -0
  182. tokensim-1.0.0/scripts/strip_comments.py +77 -0
  183. tokensim-1.0.0/scripts/sync_crate.sh +15 -0
  184. tokensim-1.0.0/scripts/tiktoken_parity.py +88 -0
  185. tokensim-1.0.0/scripts/tokjson_parity.py +88 -0
  186. tokensim-1.0.0/scripts/uni_boundary_probe.c +125 -0
  187. tokensim-1.0.0/scripts/uni_cutclass_probe.c +119 -0
  188. tokensim-1.0.0/scripts/uni_dp_diff.c +74 -0
  189. tokensim-1.0.0/scripts/uni_first_diff.c +101 -0
  190. tokensim-1.0.0/scripts/uni_norm_diff.c +70 -0
  191. tokensim-1.0.0/scripts/uni_par_probe.c +101 -0
  192. tokensim-1.0.0/scripts/uni_target_diff.c +75 -0
  193. tokensim-1.0.0/scripts/unit_perf_probe.c +46 -0
  194. tokensim-1.0.0/scripts/wholechain_bench.c +122 -0
  195. tokensim-1.0.0/src/allocator.c +140 -0
  196. tokensim-1.0.0/src/bpe.c +3751 -0
  197. tokensim-1.0.0/src/byte_unicode.c +30 -0
  198. tokensim-1.0.0/src/byte_unicode.h +12 -0
  199. tokensim-1.0.0/src/input.c +112 -0
  200. tokensim-1.0.0/src/json.c +437 -0
  201. tokensim-1.0.0/src/json.h +54 -0
  202. tokensim-1.0.0/src/metaspace.c +428 -0
  203. tokensim-1.0.0/src/model_gpt2.c +201 -0
  204. tokensim-1.0.0/src/model_internal.c +38 -0
  205. tokensim-1.0.0/src/model_internal.h +29 -0
  206. tokensim-1.0.0/src/model_spm.c +459 -0
  207. tokensim-1.0.0/src/model_tokjson.c +730 -0
  208. tokensim-1.0.0/src/nfc.c +369 -0
  209. tokensim-1.0.0/src/nfc_internal.h +43 -0
  210. tokensim-1.0.0/src/nfc_tables.c +12707 -0
  211. tokensim-1.0.0/src/parallel.c +2914 -0
  212. tokensim-1.0.0/src/pretokenizer/cl100k.c +40 -0
  213. tokensim-1.0.0/src/pretokenizer/cl100k_masks.c +1276 -0
  214. tokensim-1.0.0/src/pretokenizer/cl100k_match.h +117 -0
  215. tokensim-1.0.0/src/pretokenizer/deepseek.c +252 -0
  216. tokensim-1.0.0/src/pretokenizer/deepseek_masks.c +1285 -0
  217. tokensim-1.0.0/src/pretokenizer/gpt2.c +101 -0
  218. tokensim-1.0.0/src/pretokenizer/gpt2_masks.c +1200 -0
  219. tokensim-1.0.0/src/pretokenizer/internal.h +123 -0
  220. tokensim-1.0.0/src/pretokenizer/kimi.c +249 -0
  221. tokensim-1.0.0/src/pretokenizer/kimi_masks.c +308 -0
  222. tokensim-1.0.0/src/pretokenizer/nemo_masks.c +1321 -0
  223. tokensim-1.0.0/src/pretokenizer/o200k.c +136 -0
  224. tokensim-1.0.0/src/pretokenizer/o200k_masks.c +1634 -0
  225. tokensim-1.0.0/src/pretokenizer/o200k_match.h +413 -0
  226. tokensim-1.0.0/src/pretokenizer/pretokenizer.c +147 -0
  227. tokensim-1.0.0/src/pretokenizer/safe_split.c +43 -0
  228. tokensim-1.0.0/src/pretokenizer/simd_pretok.c +806 -0
  229. tokensim-1.0.0/src/serve_x86.cpp +170 -0
  230. tokensim-1.0.0/src/simd/blocks_avx2.c +88 -0
  231. tokensim-1.0.0/src/simd/blocks_avx512.c +81 -0
  232. tokensim-1.0.0/src/simd/blocks_scalar.c +42 -0
  233. tokensim-1.0.0/src/simd/blocks_sse2.c +86 -0
  234. tokensim-1.0.0/src/simd/dispatch.c +177 -0
  235. tokensim-1.0.0/src/simd/simd_internal.h +51 -0
  236. tokensim-1.0.0/src/spm_charmap.h +6072 -0
  237. tokensim-1.0.0/src/spm_seqmap.h +16066 -0
  238. tokensim-1.0.0/src/spm_tie_rule.c +44 -0
  239. tokensim-1.0.0/src/sys.c +197 -0
  240. tokensim-1.0.0/src/tokenizer.c +1890 -0
  241. tokensim-1.0.0/src/trie.c +301 -0
  242. tokensim-1.0.0/src/unicode.c +58 -0
  243. tokensim-1.0.0/src/unicode_tables.c +9192 -0
  244. tokensim-1.0.0/src/vocabulary.c +1074 -0
  245. tokensim-1.0.0/style.css +68 -0
  246. tokensim-1.0.0/tests/fixtures/gemma3_4b_chunk6_seam.bin +7646 -0
  247. tokensim-1.0.0/tests/fixtures/gemma3_4b_seam.bin +8414 -0
  248. tokensim-1.0.0/tests/fixtures/golden_pretokens_cl100k.tsv +25 -0
  249. tokensim-1.0.0/tests/fixtures/golden_pretokens_gpt2.tsv +25 -0
  250. tokensim-1.0.0/tests/fixtures/golden_tokens_cl100k.tsv +25 -0
  251. tokensim-1.0.0/tests/fixtures/golden_tokens_gpt2.tsv +25 -0
  252. tokensim-1.0.0/tests/fixtures/mini.tiktoken +260 -0
  253. tokensim-1.0.0/tests/fixtures/mini_encoder.json +1 -0
  254. tokensim-1.0.0/tests/fixtures/mini_tokenizer.json +1 -0
  255. tokensim-1.0.0/tests/fixtures/mini_vocab.bpe +5 -0
  256. tokensim-1.0.0/tests/fixtures/par_unigram_divergence/README.md +55 -0
  257. tokensim-1.0.0/tests/fixtures/par_unigram_divergence/gemma3-4b_par_half.bin +1 -0
  258. tokensim-1.0.0/tests/fixtures/par_unigram_divergence/gemma4_par_short.bin +1 -0
  259. tokensim-1.0.0/tests/fixtures/par_unigram_divergence/kimi_qs_span.bin +1 -0
  260. tokensim-1.0.0/tests/fixtures/par_unigram_divergence/mistral_giant_word_cliff.bin +0 -0
  261. tokensim-1.0.0/tests/fixtures/par_unigram_divergence/mistral_par_trunc.bin +1 -0
  262. tokensim-1.0.0/tests/fixtures/t5_fuzz_mismatch.bin +1 -0
  263. tokensim-1.0.0/tests/fixtures/t5_fuzz_mismatch.expected +1 -0
  264. tokensim-1.0.0/tests/fixtures/t5_tie_negative.bin +1 -0
  265. tokensim-1.0.0/tests/fixtures/t5_tie_negative.expected +1 -0
  266. tokensim-1.0.0/tests/fixtures/t5_unk_surface.model +0 -0
  267. tokensim-1.0.0/tests/fixtures/tsimd_guard_raw.tiktoken +256 -0
  268. tokensim-1.0.0/tests/fuzz/fuzz_tokenizer.c +133 -0
  269. tokensim-1.0.0/tests/fuzz_all_models.c +375 -0
  270. tokensim-1.0.0/tests/fuzz_decode_roundtrip.c +46 -0
  271. tokensim-1.0.0/tests/fuzz_encode_vs_oracle.c +98 -0
  272. tokensim-1.0.0/tests/fuzz_encode_vs_oracle_cl100k.c +99 -0
  273. tokensim-1.0.0/tests/fuzz_encode_vs_oracle_gpt2.c +100 -0
  274. tokensim-1.0.0/tests/fuzz_par_parity.c +131 -0
  275. tokensim-1.0.0/tests/fuzz_pretokenize.c +62 -0
  276. tokensim-1.0.0/tests/test_added_scan.c +416 -0
  277. tokensim-1.0.0/tests/test_avx512_probe.c +40 -0
  278. tokensim-1.0.0/tests/test_batch_fused.c +80 -0
  279. tokensim-1.0.0/tests/test_batch_nfc.c +96 -0
  280. tokensim-1.0.0/tests/test_batch_scale.c +207 -0
  281. tokensim-1.0.0/tests/test_bcls_tables.c +145 -0
  282. tokensim-1.0.0/tests/test_bmp_props.c +69 -0
  283. tokensim-1.0.0/tests/test_bpe.c +162 -0
  284. tokensim-1.0.0/tests/test_bpe_heap_oracle.c +209 -0
  285. tokensim-1.0.0/tests/test_bpe_path_agreement.c +734 -0
  286. tokensim-1.0.0/tests/test_bpe_seam.c +146 -0
  287. tokensim-1.0.0/tests/test_bpe_short.c +138 -0
  288. tokensim-1.0.0/tests/test_byte_ids_fallback.c +121 -0
  289. tokensim-1.0.0/tests/test_cache_state.c +172 -0
  290. tokensim-1.0.0/tests/test_cache_stress.c +622 -0
  291. tokensim-1.0.0/tests/test_cl100k_masks.c +442 -0
  292. tokensim-1.0.0/tests/test_cls_table.c +142 -0
  293. tokensim-1.0.0/tests/test_decode.c +221 -0
  294. tokensim-1.0.0/tests/test_deepseek_attach.c +114 -0
  295. tokensim-1.0.0/tests/test_deepseek_masks.c +607 -0
  296. tokensim-1.0.0/tests/test_dispatch.c +91 -0
  297. tokensim-1.0.0/tests/test_dual_cursor.c +95 -0
  298. tokensim-1.0.0/tests/test_encode_into.c +231 -0
  299. tokensim-1.0.0/tests/test_fill_tail_guard.c +245 -0
  300. tokensim-1.0.0/tests/test_fuzz.c +168 -0
  301. tokensim-1.0.0/tests/test_gemma_added_par.c +198 -0
  302. tokensim-1.0.0/tests/test_gemma_metaspace.c +96 -0
  303. tokensim-1.0.0/tests/test_giant_word_cliff.c +61 -0
  304. tokensim-1.0.0/tests/test_gpt2_masks.c +434 -0
  305. tokensim-1.0.0/tests/test_gpt2d_spanner.c +282 -0
  306. tokensim-1.0.0/tests/test_hi_algebra.c +211 -0
  307. tokensim-1.0.0/tests/test_hugepage_tables.c +98 -0
  308. tokensim-1.0.0/tests/test_ignore_merges.c +70 -0
  309. tokensim-1.0.0/tests/test_insert_slot.c +127 -0
  310. tokensim-1.0.0/tests/test_json.c +96 -0
  311. tokensim-1.0.0/tests/test_kimi.c +131 -0
  312. tokensim-1.0.0/tests/test_kimi_masks.c +175 -0
  313. tokensim-1.0.0/tests/test_kimi_par_race.c +71 -0
  314. tokensim-1.0.0/tests/test_mask_stats_gate.c +79 -0
  315. tokensim-1.0.0/tests/test_merge_id_probe.c +247 -0
  316. tokensim-1.0.0/tests/test_model_formats.c +269 -0
  317. tokensim-1.0.0/tests/test_nemo_masks.c +481 -0
  318. tokensim-1.0.0/tests/test_nemotron.c +98 -0
  319. tokensim-1.0.0/tests/test_nfc.c +459 -0
  320. tokensim-1.0.0/tests/test_nfc_reuse.c +166 -0
  321. tokensim-1.0.0/tests/test_nfc_seg.c +190 -0
  322. tokensim-1.0.0/tests/test_nfkc.c +343 -0
  323. tokensim-1.0.0/tests/test_nul_keys.c +58 -0
  324. tokensim-1.0.0/tests/test_o200k_marks.c +88 -0
  325. tokensim-1.0.0/tests/test_o200k_masks.c +745 -0
  326. tokensim-1.0.0/tests/test_par_split.c +230 -0
  327. tokensim-1.0.0/tests/test_parallel.c +749 -0
  328. tokensim-1.0.0/tests/test_parallel_into.c +224 -0
  329. tokensim-1.0.0/tests/test_parallel_nfc.c +88 -0
  330. tokensim-1.0.0/tests/test_pcache_grow.c +103 -0
  331. tokensim-1.0.0/tests/test_pcache_race.c +202 -0
  332. tokensim-1.0.0/tests/test_pcache_serve.c +149 -0
  333. tokensim-1.0.0/tests/test_pcache_upgrade.c +178 -0
  334. tokensim-1.0.0/tests/test_pin_fault.c +49 -0
  335. tokensim-1.0.0/tests/test_pool_cache_bits.c +41 -0
  336. tokensim-1.0.0/tests/test_pretokenizer.c +319 -0
  337. tokensim-1.0.0/tests/test_qwen25_serve.c +160 -0
  338. tokensim-1.0.0/tests/test_qwen3_nfc_speed.c +130 -0
  339. tokensim-1.0.0/tests/test_reconstruct_order.c +60 -0
  340. tokensim-1.0.0/tests/test_scheme_guard.c +99 -0
  341. tokensim-1.0.0/tests/test_serve_batched.c +164 -0
  342. tokensim-1.0.0/tests/test_serve_routes.c +186 -0
  343. tokensim-1.0.0/tests/test_shared_fallback.c +80 -0
  344. tokensim-1.0.0/tests/test_shared_publish.c +75 -0
  345. tokensim-1.0.0/tests/test_short_skip.c +134 -0
  346. tokensim-1.0.0/tests/test_simd.c +458 -0
  347. tokensim-1.0.0/tests/test_spm_cache.c +226 -0
  348. tokensim-1.0.0/tests/test_spm_integration.c +88 -0
  349. tokensim-1.0.0/tests/test_spm_normalize.c +124 -0
  350. tokensim-1.0.0/tests/test_spm_par_degenerate.c +103 -0
  351. tokensim-1.0.0/tests/test_spm_tie_rule.c +122 -0
  352. tokensim-1.0.0/tests/test_spm_tiebreak.c +106 -0
  353. tokensim-1.0.0/tests/test_spm_trie.c +446 -0
  354. tokensim-1.0.0/tests/test_spm_word_seam.c +146 -0
  355. tokensim-1.0.0/tests/test_sys.c +100 -0
  356. tokensim-1.0.0/tests/test_tokenizer.c +213 -0
  357. tokensim-1.0.0/tests/test_unicode.c +84 -0
  358. tokensim-1.0.0/tests/test_unigram.c +296 -0
  359. tokensim-1.0.0/tests/test_unigram_chunk.c +281 -0
  360. tokensim-1.0.0/tests/test_unigram_memo.c +99 -0
  361. tokensim-1.0.0/tests/test_unigram_memo_corpus.c +134 -0
  362. tokensim-1.0.0/tests/test_unigram_memo_det.c +120 -0
  363. tokensim-1.0.0/tests/test_unigram_par.c +66 -0
  364. tokensim-1.0.0/tests/test_vocabulary.c +265 -0
  365. tokensim-1.0.0/tests/test_wholepiece_sim.c +181 -0
  366. tokensim-1.0.0/tests/test_worker_caps.c +73 -0
  367. tokensim-1.0.0/tests/util.c +122 -0
  368. tokensim-1.0.0/tests/util.h +36 -0
  369. tokensim-1.0.0/tools/bench_encode.c +225 -0
  370. tokensim-1.0.0/tools/bench_phases.c +365 -0
  371. tokensim-1.0.0/tools/bench_pretok_mt.c +116 -0
  372. tokensim-1.0.0/tools/encode_probe.c +74 -0
  373. tokensim-1.0.0/tools/spm_probe.c +60 -0
  374. tokensim-1.0.0/tools/tokenize_file.c +301 -0
@@ -0,0 +1,49 @@
1
+ name: ci
2
+ on:
3
+ push:
4
+ pull_request:
5
+
6
+ jobs:
7
+ versions:
8
+ runs-on: ubuntu-latest
9
+ steps:
10
+ - uses: actions/checkout@v5
11
+ - name: version lockstep
12
+ run: bash scripts/check_versions.sh
13
+
14
+ build-test:
15
+ runs-on: ubuntu-latest
16
+ strategy:
17
+ matrix:
18
+ compiler: [gcc, clang]
19
+ steps:
20
+ - uses: actions/checkout@v5
21
+ - name: configure
22
+ run: |
23
+ if [ "${{ matrix.compiler }}" = "clang" ]; then
24
+ cmake -S . -B build-clang -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++
25
+ else
26
+ cmake -S . -B build
27
+ fi
28
+ - name: build
29
+ run: |
30
+ if [ "${{ matrix.compiler }}" = "clang" ]; then
31
+ cmake --build build-clang -j 4
32
+ else
33
+ cmake --build build -j 4
34
+ fi
35
+ - name: model-free smoke ctest
36
+ run: |
37
+ B=build; [ "${{ matrix.compiler }}" = "clang" ] && B=build-clang
38
+ cd $B && ctest -R "test_unicode|test_json|test_bpe_short|test_cls_table|test_scheme_guard|test_avx512_probe|test_spm_tie_rule|test_decode" --output-on-failure
39
+
40
+ avx512-sde:
41
+ runs-on: ubuntu-latest
42
+ steps:
43
+ - uses: actions/checkout@v5
44
+ - name: build
45
+ run: cmake -S . -B build && cmake --build build -j 4
46
+ - name: SDE clone + the avx512 battery
47
+ run: |
48
+ git clone --depth 1 https://github.com/rapidfuzz/intel-sde /tmp/sde-mirror
49
+ bash scripts/check_avx512_sde.sh
@@ -0,0 +1,126 @@
1
+ name: pages
2
+ on:
3
+ push:
4
+ branches: [main]
5
+ permissions:
6
+ contents: read
7
+ pages: write
8
+ id-token: write
9
+ concurrency:
10
+ group: pages
11
+ cancel-in-progress: true
12
+ jobs:
13
+ deploy:
14
+ environment:
15
+ name: github-pages
16
+ url: ${{ steps.deployment.outputs.page_url }}
17
+ runs-on: ubuntu-latest
18
+ steps:
19
+ - uses: actions/checkout@v5
20
+ - name: install pandoc
21
+ run: sudo apt-get update && sudo apt-get install -y pandoc
22
+ - name: render the markdown
23
+ run: |
24
+ mkdir -p site
25
+ for f in README.md TECHNICAL-REPORT.md BENCHMARKS.md; do
26
+ pandoc "$f" -f gfm -t html5 -o "site/${f%.md}.frag"
27
+ done
28
+ python3 <<'PYEOF'
29
+ import os
30
+ css = """
31
+ body {
32
+ max-width: 52rem;
33
+ margin: 2rem auto;
34
+ padding: 0 1.5rem 0 2rem;
35
+ font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif;
36
+ font-size: 16px;
37
+ line-height: 1.7;
38
+ color: #3d3d4e;
39
+ background: #faf6ee;
40
+ }
41
+ h1, h2, h3, h4 {
42
+ color: #2a2a3a;
43
+ margin-top: 2rem;
44
+ margin-left: -0.5rem;
45
+ border-bottom: 1px solid #d8cfc0;
46
+ padding-bottom: 0.3rem;
47
+ padding-left: 0.5rem;
48
+ }
49
+ h1 { font-size: 2rem; }
50
+ h2 { font-size: 1.4rem; }
51
+ h3 { font-size: 1.15rem; }
52
+ p { padding-left: 5px; }
53
+ code, pre {
54
+ background: #f0ece4;
55
+ border-radius: 6px;
56
+ font-family: "SF Mono", Consolas, "Liberation Mono", monospace;
57
+ }
58
+ code { padding: 0.15em 0.4em; font-size: 0.9em; }
59
+ pre {
60
+ padding: 1rem;
61
+ overflow-x: auto;
62
+ line-height: 1.45;
63
+ }
64
+ pre code { padding: 0; background: none; }
65
+ table {
66
+ border-collapse: collapse;
67
+ width: 100%;
68
+ margin: 1.5rem 0;
69
+ }
70
+ th, td {
71
+ border: 1px solid #d8cfc0;
72
+ padding: 0.5rem 0.8rem;
73
+ text-align: left;
74
+ }
75
+ th { background: #f0ece4; font-weight: 600; }
76
+ blockquote {
77
+ border-left: 4px solid #8a7a5c;
78
+ margin: 1rem 0;
79
+ padding: 0.5rem 1rem;
80
+ color: #5a5548;
81
+ background: #f5f0e6;
82
+ border-radius: 0 6px 6px 0;
83
+ }
84
+ a { color: #7a6a3a; }
85
+ a:hover { color: #5a4a2a; text-decoration: underline; }
86
+ hr { border: none; border-top: 2px solid #d8cfc0; margin: 2rem 0; }
87
+ .repo-link {
88
+ display: inline-block;
89
+ margin-bottom: 1.5rem;
90
+ font-size: 0.9em;
91
+ color: #7a6a3a;
92
+ text-decoration: none;
93
+ font-weight: 500;
94
+ }
95
+ .repo-link:hover { text-decoration: underline; }
96
+ """
97
+ for md in ["README", "TECHNICAL-REPORT", "BENCHMARKS"]:
98
+ frag = f"site/{md}.frag"
99
+ if not os.path.isfile(frag):
100
+ continue
101
+ body = open(frag).read()
102
+ link = '<a class="repo-link" href="https://github.com/SudoEvrything/tokensim">tokensim on GitHub</a>\n'
103
+ body = body.replace('<h2', link + '<h2', 1)
104
+ html = f"""<!DOCTYPE html>
105
+ <html>
106
+ <head>
107
+ <meta charset="utf-8">
108
+ <meta name="viewport" content="width=device-width, initial-scale=1">
109
+ <style>{css}</style>
110
+ </head>
111
+ <body>
112
+ {body}
113
+ </body>
114
+ </html>"""
115
+ open(f"site/{md}.html", "w").write(html)
116
+ os.remove(frag)
117
+ open("site/index.html", "w").write(
118
+ '<!DOCTYPE html><html><head><meta charset="utf-8">'
119
+ '<meta http-equiv="refresh" content="0;url=TECHNICAL-REPORT.html">'
120
+ '</head><body></body></html>')
121
+ PYEOF
122
+ - uses: actions/upload-pages-artifact@v3
123
+ with:
124
+ path: site
125
+ - id: deployment
126
+ uses: actions/deploy-pages@v4
@@ -0,0 +1,72 @@
1
+ name: release
2
+ on:
3
+ push:
4
+ tags: ["v*"]
5
+
6
+ jobs:
7
+ sdist:
8
+ runs-on: ubuntu-latest
9
+ steps:
10
+ - uses: actions/checkout@v5
11
+ - uses: actions/setup-python@v6
12
+ with: {python-version: "3.12"}
13
+ - run: pip install build
14
+ - run: python3 -m build --sdist
15
+ - uses: actions/upload-artifact@v5
16
+ with: {name: sdist, path: dist/*.tar.gz}
17
+
18
+ wheels:
19
+ needs: [sdist, versions]
20
+ runs-on: ${{ matrix.os }}
21
+ strategy:
22
+ matrix:
23
+ os: [ubuntu-latest, macos-15]
24
+ steps:
25
+ - uses: actions/checkout@v5
26
+ - name: cibuildwheel
27
+ uses: pypa/cibuildwheel@v4.3.4
28
+ env:
29
+ CIBW_ARCHS_LINUX: x86_64
30
+ CIBW_ARCHS_MACOS: x86_64
31
+ CIBW_BUILD: "cp39-* cp310-* cp311-* cp312-* cp313-*"
32
+ CIBW_SKIP: "*-musllinux_*"
33
+ - uses: actions/upload-artifact@v5
34
+ with:
35
+ name: wheels-${{ matrix.os }}
36
+ path: wheelhouse/*.whl
37
+
38
+ versions:
39
+ runs-on: ubuntu-latest
40
+ steps:
41
+ - uses: actions/checkout@v5
42
+ - run: bash scripts/check_versions.sh
43
+
44
+ publish-pypi:
45
+ needs: [wheels, sdist]
46
+ runs-on: ubuntu-latest
47
+ environment: pypi
48
+ permissions:
49
+ id-token: write
50
+ steps:
51
+ - uses: actions/download-artifact@v5
52
+ with: {path: artifacts}
53
+ - name: stage
54
+ run: |
55
+ mkdir -p dist
56
+ find artifacts -type f \( -name "*.whl" -o -name "*.tar.gz" \) -exec cp {} dist/ \;
57
+ ls -la dist/
58
+ - name: publish
59
+ uses: pypa/gh-action-pypi-publish@release/v1
60
+ with:
61
+ packages-dir: dist/
62
+
63
+ publish-crates:
64
+ needs: [versions]
65
+ runs-on: ubuntu-latest
66
+ steps:
67
+ - uses: actions/checkout@v5
68
+ - run: bash scripts/sync_crate.sh
69
+ - name: publish
70
+ env:
71
+ CARGO_REGISTRY_TOKEN: ${{ secrets.CARGO_REGISTRY_TOKEN }}
72
+ run: cargo publish --allow-dirty --manifest-path bindings/rust/Cargo.toml || echo "already published at this version"