Skip to content

Commit e9a80ad

Browse files
authored
Merge pull request #1362 from bact/fix-type-tests
Add type ignore comments for type tests
2 parents 9c7bf41 + 5d0282b commit e9a80ad

12 files changed

Lines changed: 68 additions & 65 deletions

File tree

pythainlp/util/digitconv.py

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -89,8 +89,10 @@ def thai_digit_to_arabic_digit(text: str) -> str:
8989
thai_digit_to_arabic_digit(text)
9090
# output: เป็นจำนวน 123,400.25 บาท
9191
"""
92-
if not text or not isinstance(text, str):
92+
if not isinstance(text, str):
9393
raise TypeError("The text must be str type.")
94+
if not text:
95+
return ""
9496

9597
return text.translate(_thai_arabic_translate_table)
9698

@@ -114,8 +116,10 @@ def arabic_digit_to_thai_digit(text: str) -> str:
114116
arabic_digit_to_thai_digit(text)
115117
# output: เป็นจำนวน ๑๒๓,๔๐๐.๒๕ บาท
116118
"""
117-
if not text or not isinstance(text, str):
119+
if not isinstance(text, str):
118120
raise TypeError("The text must be str type.")
121+
if not text:
122+
return ""
119123

120124
# Convert Arabic to Thai numerals
121125
return text.translate(_arabic_thai_translate_table)
@@ -139,8 +143,10 @@ def digit_to_text(text: str) -> str:
139143
digit_to_text("๕๖๗")
140144
# output: 'ห้าหกเจ็ด'
141145
"""
142-
if not text or not isinstance(text, str):
146+
if not isinstance(text, str):
143147
raise TypeError("The text must be str type.")
148+
if not text:
149+
return ""
144150

145151
# Convert Thai numerals to Arabic ones
146152
text = text.translate(_thai_arabic_translate_table)
@@ -180,7 +186,7 @@ def text_to_arabic_digit(text: str) -> str:
180186
"""
181187
if not isinstance(text, str):
182188
raise TypeError("The text must be str type.")
183-
elif not text or text not in _spell_digit:
189+
if not text or text not in _spell_digit:
184190
return ""
185191

186192
return _spell_digit[text]
@@ -217,7 +223,7 @@ def text_to_thai_digit(text: str) -> str:
217223
"""
218224
if not isinstance(text, str):
219225
raise TypeError("The text must be str type.")
220-
elif not text:
226+
if not text:
221227
return ""
222228

223229
return arabic_digit_to_thai_digit(text_to_arabic_digit(text))

tests/compact/testc_tools.py

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ def test_misspell_edge_cases(self):
3838
self.assertEqual(len(result), 1)
3939
# Edge case: None raises TypeError
4040
with self.assertRaises(TypeError):
41-
misspell(None)
41+
misspell(None) # type: ignore[arg-type]
4242

4343
def test_misspell_naive(self):
4444
for text in self.texts:
@@ -95,12 +95,14 @@ def test_search_location_of_character(self):
9595
# Test Thai characters
9696
loc = search_location_of_character("ก")
9797
self.assertIsNotNone(loc)
98-
self.assertEqual(len(loc), 4) # (language_ix, is_shift, row, pos)
98+
# loc shape is (language_ix, is_shift, row, pos)
99+
self.assertEqual(len(loc), 4) # type: ignore[arg-type]
99100

100101
# Test English characters
101102
loc = search_location_of_character("a")
102103
self.assertIsNotNone(loc)
103-
self.assertEqual(len(loc), 4)
104+
# loc shape is (language_ix, is_shift, row, pos)
105+
self.assertEqual(len(loc), 4) # type: ignore[arg-type]
104106

105107
# Test shifted characters
106108
loc = search_location_of_character("A")

tests/core/test_cli.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55
import io
66
import unittest
7-
from argparse import ArgumentError
7+
from argparse import ArgumentError, ArgumentParser
88
from contextlib import redirect_stderr, redirect_stdout
99
from unittest.mock import MagicMock, patch
1010

@@ -18,8 +18,9 @@
1818

1919
class CliTestCase(unittest.TestCase):
2020
def test_cli(self):
21+
parser = ArgumentParser()
2122
with self.assertRaises((ArgumentError, SystemExit)):
22-
cli.exit_if_empty("", None)
23+
cli.exit_if_empty("", parser)
2324

2425
def test_cli_main(self):
2526
# Suppress output to keep test log clean

tests/core/test_khavee.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -177,7 +177,7 @@ def setUp(self):
177177

178178
def test_non_string_raises_type_error(self):
179179
with self.assertRaises(TypeError):
180-
self.kv.check_aek_too(123)
180+
self.kv.check_aek_too(123) # type: ignore[arg-type]
181181

182182
def test_dead_syllable_as_aek_flag(self):
183183
self.assertEqual(self.kv.check_aek_too("บท", dead_syllable_as_aek=True), "aek")
@@ -187,7 +187,7 @@ def test_dead_syllable_without_flag_returns_false(self):
187187

188188
def test_list_with_non_string_element_raises(self):
189189
with self.assertRaises(TypeError):
190-
self.kv.check_aek_too(["ไก่", 42])
190+
self.kv.check_aek_too(["ไก่", 42]) # type: ignore[list-item]
191191

192192
def test_both_tone_marks_returns_false(self):
193193
# word with both ่ and ้ should return False

tests/core/test_morpheme.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ def test_nighit(self):
2121
nighit("สํ", "มาร") # consonant ม is not in any supported group
2222

2323
def test_is_native_thai(self):
24-
self.assertFalse(is_native_thai(None), False)
24+
self.assertFalse(is_native_thai(None), False) # type: ignore[arg-type]
2525
self.assertFalse(is_native_thai(""), False)
2626
self.assertFalse(is_native_thai("116"), False)
2727
self.assertFalse(is_native_thai("abc"), False)

tests/core/test_soundex.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ def test_soundex(self):
2727
self.assertIsNotNone(soundex("a", engine="complete_soundex"))
2828
self.assertIsNotNone(soundex("a", engine="XXX"))
2929

30-
self.assertEqual(lk82(None), "")
30+
self.assertEqual(lk82(None), "") # type: ignore
3131
self.assertEqual(lk82(""), "")
3232
self.assertEqual(lk82("เหตุ"), lk82("เหด"))
3333
self.assertEqual(lk82("รถ"), "ร3000")
@@ -43,13 +43,13 @@ def test_soundex(self):
4343
self.assertIsNotNone(lk82("หืออือ"))
4444
self.assertEqual(lk82("น์"), "")
4545

46-
self.assertEqual(udom83(None), "")
46+
self.assertEqual(udom83(None), "") # type: ignore
4747
self.assertEqual(udom83(""), "")
4848
self.assertEqual(udom83("เหตุ"), udom83("เหด"))
4949
self.assertEqual(udom83("รถ"), "ร800000")
5050
self.assertEqual(udom83("น์"), "")
5151

52-
self.assertEqual(metasound(None), "")
52+
self.assertEqual(metasound(None), "") # type: ignore
5353
self.assertEqual(metasound(""), "")
5454
self.assertEqual(metasound("เหตุ"), metasound("เหด"))
5555
self.assertEqual(metasound("รักษ์"), metasound("รัก"))
@@ -70,7 +70,7 @@ def test_soundex(self):
7070
self.assertIsNotNone(metasound("สุวรรณา"))
7171
self.assertIsNotNone(metasound("ดอยบอย"))
7272

73-
self.assertEqual(prayut_and_somchaip(None), "")
73+
self.assertEqual(prayut_and_somchaip(None), "") # type: ignore
7474
self.assertEqual(prayut_and_somchaip(""), "")
7575
self.assertEqual(prayut_and_somchaip("vp"), "11")
7676
self.assertIsNotNone(prayut_and_somchaip("บา"))
@@ -86,7 +86,7 @@ def test_soundex(self):
8686
self.assertIsNotNone(prayut_and_somchaip("ว้าว"))
8787

8888
# Test complete_soundex
89-
self.assertEqual(complete_soundex(None), "")
89+
self.assertEqual(complete_soundex(None), "") # type: ignore
9090
self.assertEqual(complete_soundex(""), "")
9191

9292
# Single syllable test cases from the paper

tests/core/test_spell.py

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717

1818
class SpellTestCase(unittest.TestCase):
1919
def test_spell(self):
20-
self.assertEqual(spell(None), [""])
20+
self.assertEqual(spell(None), [""]) # type: ignore
2121
self.assertEqual(spell(""), [""])
2222

2323
result = spell("เน้ร")
@@ -29,7 +29,7 @@ def test_spell(self):
2929
self.assertGreater(len(result), 0)
3030

3131
def test_word_correct(self):
32-
self.assertEqual(correct(None), "")
32+
self.assertEqual(correct(None), "") # type: ignore
3333
self.assertEqual(correct(""), "")
3434
self.assertEqual(correct("1"), "1")
3535
self.assertEqual(correct("05"), "05")
@@ -53,7 +53,7 @@ def test_norvig_spell_checker(self):
5353
self.assertGreater(dict_size, 30000) # Should have substantial words
5454
self.assertLess(dict_size, len(orst) + 1000) # Should not exceed ORST by much
5555

56-
user_dict = [
56+
user_list_tuple = [
5757
("การงาน", 31), # longer than max_len
5858
("กาม", 1), # fewer than min_freq
5959
("กาล0", 64), # has digit
@@ -63,20 +63,20 @@ def test_norvig_spell_checker(self):
6363
("การ", 42), # OK
6464
]
6565
checker = NorvigSpellChecker(
66-
custom_dict=user_dict, min_freq=2, max_len=5
66+
custom_dict=user_list_tuple, min_freq=2, max_len=5
6767
)
6868
self.assertEqual(len(checker.dictionary()), 1)
6969

70-
user_dict = [
70+
user_list_str = [
7171
"เอกราช",
7272
"ปลอดภัย",
7373
"เศรษฐกิจ",
7474
"เสมอภาค",
7575
"เสรีภาพ",
7676
"การศึกษา",
7777
]
78-
checker = NorvigSpellChecker(custom_dict=user_dict)
79-
self.assertEqual(len(checker.dictionary()), len(user_dict))
78+
checker = NorvigSpellChecker(custom_dict=user_list_str)
79+
self.assertEqual(len(checker.dictionary()), len(user_list_str))
8080

8181
user_dict = {
8282
"พหลโยธิน": 1,
@@ -92,9 +92,9 @@ def test_norvig_spell_checker(self):
9292
# as it has frequency less than default min_freq (2)
9393
self.assertEqual(len(checker.dictionary()), len(user_dict) - 1)
9494

95-
user_dict = [24, 6, 2475]
95+
user_list_int = [24, 6, 2475]
9696
with self.assertRaises(TypeError):
97-
_ = NorvigSpellChecker(custom_dict=user_dict)
97+
_ = NorvigSpellChecker(custom_dict=user_list_int) # type: ignore[arg-type]
9898

9999
def test_issue_680_orst_filtering(self):
100100
"""Test for issue #680: Spell checker uses only ORST words.

tests/core/test_tag.py

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ def setUpClass(cls) -> None:
2828
download("blackboard_unigram_tagger")
2929

3030
def test_pos_tag(self):
31-
self.assertEqual(pos_tag(None), [])
31+
self.assertEqual(pos_tag(None), []) # type: ignore[arg-type]
3232
self.assertEqual(pos_tag([]), [])
3333
self.assertEqual(
3434
pos_tag(["นักเรียน", "ถาม", "ครู"]),
@@ -38,13 +38,13 @@ def test_pos_tag(self):
3838
len(pos_tag(["การ", "เดินทาง", "มี", "ความ", "ท้าทาย"])), 5
3939
)
4040

41-
self.assertEqual(unigram.tag(None, corpus="pud"), [])
41+
self.assertEqual(unigram.tag(None, corpus="pud"), []) # type: ignore[arg-type]
4242
self.assertEqual(unigram.tag([], corpus="pud"), [])
43-
self.assertEqual(unigram.tag(None, corpus="orchid"), [])
43+
self.assertEqual(unigram.tag(None, corpus="orchid"), []) # type: ignore[arg-type]
4444
self.assertEqual(unigram.tag([], corpus="orchid"), [])
45-
self.assertEqual(unigram.tag(None, corpus="blackboard"), [])
45+
self.assertEqual(unigram.tag(None, corpus="blackboard"), []) # type: ignore[arg-type]
4646
self.assertEqual(unigram.tag([], corpus="blackboard"), [])
47-
self.assertEqual(unigram.tag(None, corpus="tud"), [])
47+
self.assertEqual(unigram.tag(None, corpus="tud"), []) # type: ignore[arg-type]
4848
self.assertEqual(unigram.tag([], corpus="tud"), [])
4949
self.assertIsNotNone(
5050
pos_tag(TEST_TOKENS, engine="unigram", corpus="orchid")
@@ -85,7 +85,7 @@ def test_pos_tag(self):
8585
pos_tag(["ความ", "พอเพียง"], corpus="orchid_ud")[0][1], "NOUN"
8686
)
8787

88-
self.assertEqual(pos_tag_sents(None), [])
88+
self.assertEqual(pos_tag_sents(None), []) # type: ignore[arg-type]
8989
self.assertEqual(pos_tag_sents([]), [])
9090
self.assertEqual(
9191
pos_tag_sents([["ผม", "กิน", "ข้าว"], ["แมว", "วิ่ง"]]),
@@ -123,15 +123,15 @@ def setUpClass(cls) -> None:
123123
download("blackboard_pt_tagger")
124124

125125
def test_perceptron_tagger(self):
126-
self.assertEqual(perceptron.tag(None, corpus="orchid"), [])
126+
self.assertEqual(perceptron.tag(None, corpus="orchid"), []) # type: ignore[arg-type]
127127
self.assertEqual(perceptron.tag([], corpus="orchid"), [])
128-
self.assertEqual(perceptron.tag(None, corpus="orchid_ud"), [])
128+
self.assertEqual(perceptron.tag(None, corpus="orchid_ud"), []) # type: ignore[arg-type]
129129
self.assertEqual(perceptron.tag([], corpus="orchid_ud"), [])
130-
self.assertEqual(perceptron.tag(None, corpus="pud"), [])
130+
self.assertEqual(perceptron.tag(None, corpus="pud"), []) # type: ignore[arg-type]
131131
self.assertEqual(perceptron.tag([], corpus="pud"), [])
132-
self.assertEqual(perceptron.tag(None, corpus="blackboard"), [])
132+
self.assertEqual(perceptron.tag(None, corpus="blackboard"), []) # type: ignore[arg-type]
133133
self.assertEqual(perceptron.tag([], corpus="blackboard"), [])
134-
self.assertEqual(perceptron.tag(None, corpus="tud"), [])
134+
self.assertEqual(perceptron.tag(None, corpus="tud"), []) # type: ignore[arg-type]
135135
self.assertEqual(perceptron.tag([], corpus="tud"), [])
136136

137137
self.assertIsNotNone(

tests/core/test_tokenize.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -296,7 +296,7 @@ def test_Tokenizer(self):
296296
_tokenizer = Tokenizer(word_dict_trie())
297297
self.assertEqual(_tokenizer.word_tokenize(""), [])
298298
_tokenizer.set_tokenize_engine("longest")
299-
self.assertEqual(_tokenizer.word_tokenize(None), [])
299+
self.assertEqual(_tokenizer.word_tokenize(None), []) # type: ignore[arg-type]
300300

301301
_tokenizer = Tokenizer()
302302
self.assertEqual(_tokenizer.word_tokenize("ก"), ["ก"])
@@ -335,7 +335,7 @@ def test_sent_tokenize(self):
335335
sent_tokenize("ฉันไป กิน", engine="XX") # engine does not exist
336336

337337
def test_subword_tokenize(self):
338-
self.assertEqual(subword_tokenize(None), [])
338+
self.assertEqual(subword_tokenize(None), []) # type: ignore[arg-type]
339339
self.assertEqual(subword_tokenize(""), [])
340340
self.assertIsInstance(
341341
subword_tokenize("สวัสดีดาวอังคาร", engine="tcc"), list
@@ -345,7 +345,7 @@ def test_subword_tokenize(self):
345345
subword_tokenize("สวัสดีดาวอังคาร", engine="tcc_p"), list
346346
)
347347
self.assertNotIn("า", subword_tokenize("สวัสดีดาวอังคาร", engine="tcc_p"))
348-
self.assertEqual(subword_tokenize(None, engine="etcc"), [])
348+
self.assertEqual(subword_tokenize(None, engine="etcc"), []) # type: ignore[arg-type]
349349
self.assertEqual(subword_tokenize("", engine="etcc"), [])
350350
self.assertIsInstance(
351351
subword_tokenize("สวัสดิีดาวอังคาร", engine="etcc"), list
@@ -495,7 +495,7 @@ def test_mm(self):
495495
self.assertIsNotNone(
496496
multi_cut.find_all_segment("รถไฟฟ้ากรุงเทพมหานครBTS")
497497
)
498-
self.assertEqual(multi_cut.find_all_segment(None), [])
498+
self.assertEqual(multi_cut.find_all_segment(None), []) # type: ignore[arg-type]
499499

500500
def test_newmm(self):
501501
assert_segment_handles_none_and_empty(self, newmm.segment)
@@ -686,8 +686,8 @@ def test_tcc_p(self):
686686
self.assertEqual(tcc_p.tcc_pos(""), set())
687687
# tcc_pos_array: edge cases
688688
self.assertIsInstance(tcc_p.tcc_pos_array(""), bytearray)
689-
self.assertIsInstance(tcc_p.tcc_pos_array(None), bytearray)
690-
self.assertIsInstance(tcc_p.tcc_pos_array(42), bytearray)
689+
self.assertIsInstance(tcc_p.tcc_pos_array(None), bytearray) # type: ignore[arg-type]
690+
self.assertIsInstance(tcc_p.tcc_pos_array(42), bytearray) # type: ignore[arg-type]
691691
# valid text: array length must equal len(text)+1 and mark boundaries
692692
arr = tcc_p.tcc_pos_array("ประเทศ")
693693
self.assertEqual(len(arr), len("ประเทศ") + 1)

tests/core/test_transliterate.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -52,13 +52,13 @@
5252

5353
class TransliterateTestCase(unittest.TestCase):
5454
def test_romanize(self):
55-
self.assertEqual(romanize(None), "")
55+
self.assertEqual(romanize(None), "") # type: ignore[arg-type]
5656
self.assertEqual(romanize(""), "")
5757
self.assertEqual(romanize("แมว"), "maeo")
5858

5959
def test_romanize_royin_basic(self):
6060
for word, expect in BASIC_TESTS.items():
61-
self.assertEqual(romanize(word, engine="royin"), expect)
61+
self.assertEqual(romanize(word, engine="royin"), expect) # type: ignore[arg-type]
6262

6363
def test_romanize_royin_consistency(self):
6464
for word, part1, part2 in CONSISTENCY_TESTS:

0 commit comments

Comments
 (0)