PythonSTB commited on
Commit
49719cc
·
verified ·
1 Parent(s): acd75c4

Delete tokenizers/Test_Tokenizers.py

Browse files
Files changed (1) hide show
  1. tokenizers/Test_Tokenizers.py +0 -250
tokenizers/Test_Tokenizers.py DELETED
@@ -1,250 +0,0 @@
1
- #!/usr/bin/env python3
2
- """
3
- Test_Tokenizers.py - on-device validation for the tokenizers wheel.
4
-
5
- Exercises the Rust/PyO3 binding: import, version, BPE train on a tiny
6
- corpus + encode/decode roundtrip, models/normalizers/pre-tokenizers.
7
- Exit code 0 = all tests passed, 1 = any FAIL.
8
-
9
- Generated by RIMI
10
- """
11
- import sys
12
-
13
- RESULTS = []
14
-
15
-
16
- def test(name, fn):
17
- try:
18
- fn()
19
- RESULTS.append(("PASS", name))
20
- except NotImplementedError:
21
- RESULTS.append(("SKIP", name))
22
- except Exception as e:
23
- RESULTS.append(("FAIL", name, str(e)))
24
-
25
-
26
- def section(title):
27
- print("\n===== %s =====" % title)
28
-
29
-
30
- def check(cond, msg):
31
- if not cond:
32
- raise AssertionError(msg)
33
-
34
-
35
- # ---------------------------------------------------------------------------
36
- # 1. imports + versions
37
- # ---------------------------------------------------------------------------
38
- def test_import_tokenizers():
39
- import tokenizers
40
- check(hasattr(tokenizers, "__version__"), "no __version__")
41
- print(" tokenizers version:", tokenizers.__version__)
42
- check(tokenizers.__version__ == "0.23.2", "version != 0.23.2")
43
-
44
-
45
- def test_import_submodules():
46
- import tokenizers.models
47
- import tokenizers.trainers
48
- import tokenizers.pre_tokenizers
49
- import tokenizers.normalizers
50
- import tokenizers.processors
51
- import tokenizers.decoders
52
- print(" submodules: models/trainers/pre_tokenizers/normalizers/processors/decoders OK")
53
-
54
-
55
- def test_import_tokenizer_class():
56
- from tokenizers import Tokenizer
57
- check(callable(Tokenizer), "Tokenizer not callable")
58
- print(" Tokenizer class OK")
59
-
60
-
61
- # ---------------------------------------------------------------------------
62
- # 2. BPE train on tiny corpus + encode/decode roundtrip
63
- # ---------------------------------------------------------------------------
64
- _TINY_CORPUS = [
65
- "Hello world, this is a test.",
66
- "Tokenizers are fast and versatile.",
67
- "Hello again, another test sentence.",
68
- "BPE training on a tiny corpus.",
69
- "The quick brown fox jumps over the lazy dog.",
70
- ]
71
-
72
- _TRAIN_FILES = ["/tmp/tok_train.txt"]
73
-
74
-
75
- def _write_corpus():
76
- # Scripts dir on device is writable; fall back to current dir
77
- import os
78
- for cand in ("/tmp/tok_train.txt", "tok_train.txt"):
79
- try:
80
- with open(cand, "w", encoding="utf-8") as fh:
81
- for line in _TINY_CORPUS:
82
- fh.write(line + "\n")
83
- return cand
84
- except OSError:
85
- continue
86
- raise AssertionError("cannot write training corpus")
87
-
88
-
89
- def test_bpe_train():
90
- from tokenizers import Tokenizer
91
- from tokenizers.models import BPE
92
- from tokenizers.trainers import BpeTrainer
93
- from tokenizers.pre_tokenizers import Whitespace
94
-
95
- path = _write_corpus()
96
- tok = Tokenizer(BPE(unk_token="[UNK]"))
97
- tok.pre_tokenizer = Whitespace()
98
- trainer = BpeTrainer(vocab_size=200, special_tokens=["[UNK]", "[CLS]", "[SEP]", "[PAD]", "[MASK]"])
99
- tok.train([path], trainer)
100
- vs = tok.get_vocab_size()
101
- check(vs > 0, "vocab size 0")
102
- print(" BPE trained, vocab size:", vs)
103
-
104
-
105
- def test_encode_decode_roundtrip():
106
- from tokenizers import Tokenizer
107
- from tokenizers.models import BPE
108
- from tokenizers.trainers import BpeTrainer
109
- from tokenizers.pre_tokenizers import Whitespace
110
-
111
- path = _write_corpus()
112
- tok = Tokenizer(BPE(unk_token="[UNK]"))
113
- tok.pre_tokenizer = Whitespace()
114
- trainer = BpeTrainer(vocab_size=200, special_tokens=["[UNK]"])
115
- tok.train([path], trainer)
116
- text = "Hello world, BPE roundtrip test."
117
- enc = tok.encode(text)
118
- check(len(enc.ids) > 0, "no ids")
119
- check(len(enc.tokens) > 0, "no tokens")
120
- dec = tok.decode(enc.ids)
121
- check(isinstance(dec, str) and len(dec) > 0, "empty decode")
122
- # roundtrip: decoded text must contain the key words (whitespace split)
123
- check("Hello" in dec, "roundtrip lost 'Hello': %r" % dec)
124
- print(" ids:", enc.ids[:10])
125
- print(" tokens:", enc.tokens[:10])
126
- print(" decoded:", dec)
127
-
128
-
129
- def test_encode_batch():
130
- from tokenizers import Tokenizer
131
- from tokenizers.models import BPE
132
- from tokenizers.trainers import BpeTrainer
133
- from tokenizers.pre_tokenizers import Whitespace
134
-
135
- path = _write_corpus()
136
- tok = Tokenizer(BPE(unk_token="[UNK]"))
137
- tok.pre_tokenizer = Whitespace()
138
- tok.train([path], BpeTrainer(vocab_size=200, special_tokens=["[UNK]"]))
139
- encs = tok.encode_batch(_TINY_CORPUS[:3])
140
- check(len(encs) == 3, "batch len")
141
- check(all(len(e.ids) > 0 for e in encs), "empty batch ids")
142
- print(" batch ok:", [len(e.ids) for e in encs])
143
-
144
-
145
- # ---------------------------------------------------------------------------
146
- # 3. WordLevel + save/load roundtrip
147
- # ---------------------------------------------------------------------------
148
- def test_wordlevel():
149
- from tokenizers import Tokenizer
150
- from tokenizers.models import WordLevel
151
- from tokenizers.pre_tokenizers import WhitespaceSplit
152
-
153
- tok = Tokenizer(WordLevel(vocab={"hello": 0, "world": 1, "[UNK]": 2}, unk_token="[UNK]"))
154
- tok.pre_tokenizer = WhitespaceSplit()
155
- enc = tok.encode("hello world")
156
- check(enc.ids == [0, 1], "wordlevel ids %r" % (enc.ids,))
157
- print(" WordLevel ids:", enc.ids)
158
-
159
-
160
- def test_save_load():
161
- import os
162
- import tempfile
163
- from tokenizers import Tokenizer
164
- from tokenizers.models import BPE
165
- from tokenizers.trainers import BpeTrainer
166
- from tokenizers.pre_tokenizers import Whitespace
167
-
168
- path = _write_corpus()
169
- tok = Tokenizer(BPE(unk_token="[UNK]"))
170
- tok.pre_tokenizer = Whitespace()
171
- tok.train([path], BpeTrainer(vocab_size=200, special_tokens=["[UNK]"]))
172
- tmpd = tempfile.mkdtemp()
173
- fp = os.path.join(tmpd, "tok.json")
174
- tok.save(fp)
175
- check(os.path.isfile(fp), "save missing")
176
- tok2 = Tokenizer.from_file(fp)
177
- check(tok2.get_vocab_size() == tok.get_vocab_size(), "vocab mismatch after load")
178
- print(" save/load vocab:", tok2.get_vocab_size())
179
-
180
-
181
- # ---------------------------------------------------------------------------
182
- # 4. normalizers / pre-tokenizers / processors / decoders
183
- # ---------------------------------------------------------------------------
184
- def test_normalizer():
185
- from tokenizers import Tokenizer
186
- from tokenizers.models import WordLevel
187
- from tokenizers.normalizers import Lowercase
188
- from tokenizers.pre_tokenizers import Whitespace
189
-
190
- tok = Tokenizer(WordLevel(vocab={"hello": 0, "world": 1, "[UNK]": 2}, unk_token="[UNK]"))
191
- tok.normalizer = Lowercase()
192
- tok.pre_tokenizer = Whitespace()
193
- enc = tok.encode("HELLO WORLD")
194
- check(enc.ids == [0, 1], "lowercase ids %r" % (enc.ids,))
195
- print(" Lowercase normalizer OK")
196
-
197
-
198
- def test_bert_processing():
199
- from tokenizers import Tokenizer
200
- from tokenizers.models import WordPiece
201
- from tokenizers.processors import BertProcessing
202
-
203
- tok = Tokenizer(WordPiece(vocab={"hello": 0, "world": 1, "[UNK]": 2, "[CLS]": 3, "[SEP]": 4}, unk_token="[UNK]"))
204
- tok.post_processor = BertProcessing(("[SEP]", 4), ("[CLS]", 3))
205
- enc = tok.encode("hello world")
206
- check(enc.ids[0] == 3 and enc.ids[-1] == 4, "bert ids %r" % (enc.ids,))
207
- print(" BertProcessing ids:", enc.ids)
208
-
209
-
210
- # ---------------------------------------------------------------------------
211
- # main
212
- # ---------------------------------------------------------------------------
213
- def main():
214
- section("1. imports + versions")
215
- test("import tokenizers", test_import_tokenizers)
216
- test("import submodules", test_import_submodules)
217
- test("Tokenizer class", test_import_tokenizer_class)
218
-
219
- section("2. BPE train + roundtrip")
220
- test("BPE train tiny corpus", test_bpe_train)
221
- test("encode/decode roundtrip", test_encode_decode_roundtrip)
222
- test("encode_batch", test_encode_batch)
223
-
224
- section("3. models + serialization")
225
- test("WordLevel", test_wordlevel)
226
- test("save/load", test_save_load)
227
-
228
- section("4. pipeline pieces")
229
- test("Lowercase normalizer", test_normalizer)
230
- test("BertProcessing", test_bert_processing)
231
-
232
- section("RESULT")
233
- n_ok = n_fail = n_skip = 0
234
- for r in RESULTS:
235
- status = r[0]
236
- if status == "PASS":
237
- n_ok += 1
238
- print(" OK %s" % r[1])
239
- elif status == "SKIP":
240
- n_skip += 1
241
- print(" SKIP %s" % r[1])
242
- else:
243
- n_fail += 1
244
- print(" FAIL %s: %s" % (r[1], r[2]))
245
- print("RESULT: %d ok, %d failed, %d skipped" % (n_ok, n_fail, n_skip))
246
- sys.exit(1 if n_fail else 0)
247
-
248
-
249
- if __name__ == "__main__":
250
- main()