File: test_process_typing.py

package info (click to toggle)
rapidfuzz 3.12.2%2Bds-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 2,436 kB
  • sloc: python: 7,571; cpp: 7,481; sh: 30; makefile: 23
file content (196 lines) | stat: -rw-r--r-- 11,780 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
from __future__ import annotations

from collections.abc import Generator, Hashable, Sequence

import numpy as np
import numpy.typing as npt

from rapidfuzz import fuzz, process
from rapidfuzz.distance import Levenshtein


def string_preprocessor(a: str) -> str:
    return a


class MyClass:
    def __init__(self) -> None:
        self.a: str = ""


def valid_scorer_seq1(s1: Sequence[Hashable], s2: Sequence[Hashable], score_cutoff: float | None = None) -> float:
    return 1.0


def valid_scorer_str1(s1: str, s2: str, score_cutoff: float | None = None) -> float:
    return 1.0


def valid_scorer_str2(s1: str, s2: str, *, score_cutoff: float | None) -> float:
    return 1.0


def valid_scorer_str3(string1: str, string2: str, *, score_cutoff: float | None) -> float:
    return 1.0


def invalid_scorer_str1(s1: str, s2: str, cutoff: float | None = None) -> float:
    return 1.0


def invalid_scorer_str2(s1: str, s2: str) -> float:
    return 1.0


def invalid_scorer_str3(s1: str, s2: str, score_cutoff: int | None = None) -> float:
    return 1.0


def invalid_scorer_str4(s1: int, s2: str, score_cutoff: float | None = None) -> float:
    return 1.0


def invalid_scorer_str5(s1: str, s2: int, score_cutoff: float | None = None) -> float:
    return 1.0


def test_extractOne():
    _a: tuple[str, float, int] = process.extractOne("", [""])
    _a = process.extractOne("", [""], scorer=fuzz.ratio)
    _b: tuple[str, int, int] = process.extractOne("", [""], scorer=fuzz.ratio)  # type: ignore [assignment]
    _b = process.extractOne("", [""])  # type: ignore [assignment]
    _b = process.extractOne("", [""], scorer=Levenshtein.distance)
    _a = process.extractOne(1, [""], scorer=fuzz.ratio)  # type: ignore [call-overload]
    _a = process.extractOne("", [1], scorer=fuzz.ratio)  # type: ignore [call-overload]
    _a = process.extractOne(list(""), [""], scorer=fuzz.ratio)
    _c: tuple[list[str], float, int] = process.extractOne("", [list("")], scorer=fuzz.ratio)
    _a = process.extractOne("", [""], processor=string_preprocessor)
    _a = process.extractOne(list(""), [""], processor=string_preprocessor)  # type: ignore [arg-type]
    _c = process.extractOne("", [list("")], processor=string_preprocessor)  # type: ignore [arg-type]
    _d: tuple[MyClass, float, int] = process.extractOne(MyClass(), [MyClass()], processor=lambda x: x.a)
    _a = process.extractOne("", [""], scorer=valid_scorer_str1)
    _a = process.extractOne("", [""], scorer=valid_scorer_str2)
    _a = process.extractOne("", [""], scorer=valid_scorer_str3)
    _a = process.extractOne("", [""], scorer=invalid_scorer_str1)  # type: ignore [call-overload]
    _a = process.extractOne("", [""], scorer=invalid_scorer_str2)  # type: ignore [call-overload]
    _a = process.extractOne("", [""], scorer=invalid_scorer_str3)  # type: ignore [call-overload]
    _a = process.extractOne("", [""], scorer=invalid_scorer_str4)  # type: ignore [call-overload]
    _a = process.extractOne("", [""], scorer=invalid_scorer_str5)  # type: ignore [call-overload]
    _a = process.extractOne(list(""), [""], scorer=valid_scorer_str1)  # type: ignore [call-overload]
    _c = process.extractOne("", [list("")], scorer=valid_scorer_str1)  # type: ignore [call-overload]
    _a = process.extractOne(list(""), [""], scorer=valid_scorer_seq1)
    _c = process.extractOne("", [list("")], scorer=valid_scorer_seq1)


def test_extract():
    _a: list[tuple[str, float, int]] = process.extract("", [""])
    _a = process.extract("", [""], scorer=fuzz.ratio)
    _b: list[tuple[str, int, int]] = process.extract("", [""], scorer=fuzz.ratio)  # type: ignore [assignment]
    _b = process.extract("", [""])  # type: ignore [assignment]
    _b = process.extract("", [""], scorer=Levenshtein.distance)
    _a = process.extract(1, [""], scorer=fuzz.ratio)  # type: ignore [call-overload]
    _a = process.extract("", [1], scorer=fuzz.ratio)  # type: ignore [call-overload]
    _a = process.extract(list(""), [""], scorer=fuzz.ratio)
    _c: list[tuple[list[str], float, int]] = process.extract("", [list("")], scorer=fuzz.ratio)
    _a = process.extract("", [""], processor=string_preprocessor)
    _a = process.extract(list(""), [""], processor=string_preprocessor)  # type: ignore [arg-type]
    _c = process.extract("", [list("")], processor=string_preprocessor)  # type: ignore [arg-type]
    _d: list[tuple[MyClass, float, int]] = process.extract(MyClass(), [MyClass()], processor=lambda x: x.a)
    _a = process.extract("", [""], scorer=valid_scorer_str1)
    _a = process.extract("", [""], scorer=valid_scorer_str2)
    _a = process.extract("", [""], scorer=valid_scorer_str3)
    _a = process.extract("", [""], scorer=invalid_scorer_str1)  # type: ignore [call-overload]
    _a = process.extract("", [""], scorer=invalid_scorer_str2)  # type: ignore [call-overload]
    _a = process.extract("", [""], scorer=invalid_scorer_str3)  # type: ignore [call-overload]
    _a = process.extract("", [""], scorer=invalid_scorer_str4)  # type: ignore [call-overload]
    _a = process.extract("", [""], scorer=invalid_scorer_str5)  # type: ignore [call-overload]
    _a = process.extract(list(""), [""], scorer=valid_scorer_str1)  # type: ignore [call-overload]
    _c = process.extract("", [list("")], scorer=valid_scorer_str1)  # type: ignore [call-overload]
    _a = process.extract(list(""), [""], scorer=valid_scorer_seq1)
    _c = process.extract("", [list("")], scorer=valid_scorer_seq1)


def test_extract_iter():
    _a: Generator[tuple[str, float, int], None, None] = process.extract_iter("", [""])
    _a = process.extract_iter("", [""], scorer=fuzz.ratio)
    _b: Generator[tuple[str, int, int], None, None] = process.extract_iter("", [""], scorer=fuzz.ratio)  # type: ignore [assignment]
    _b = process.extract_iter("", [""])  # type: ignore [assignment]
    _b = process.extract_iter("", [""], scorer=Levenshtein.distance)
    _a = process.extract_iter(1, [""], scorer=fuzz.ratio)  # type: ignore [call-overload]
    _a = process.extract_iter("", [1], scorer=fuzz.ratio)  # type: ignore [call-overload]
    _a = process.extract_iter(list(""), [""], scorer=fuzz.ratio)
    _c: Generator[tuple[list[str], float, int], None, None] = process.extract_iter("", [list("")], scorer=fuzz.ratio)
    _a = process.extract_iter("", [""], processor=string_preprocessor)
    _a = process.extract_iter(list(""), [""], processor=string_preprocessor)  # type: ignore [arg-type]
    _c = process.extract_iter("", [list("")], processor=string_preprocessor)  # type: ignore [arg-type]
    _d: Generator[tuple[MyClass, float, int], None, None] = process.extract_iter(
        MyClass(), [MyClass()], processor=lambda x: x.a
    )
    _a = process.extract_iter("", [""], scorer=valid_scorer_str1)
    _a = process.extract_iter("", [""], scorer=valid_scorer_str2)
    _a = process.extract_iter("", [""], scorer=valid_scorer_str3)
    _a = process.extract_iter("", [""], scorer=invalid_scorer_str1)  # type: ignore [call-overload]
    _a = process.extract_iter("", [""], scorer=invalid_scorer_str2)  # type: ignore [call-overload]
    _a = process.extract_iter("", [""], scorer=invalid_scorer_str3)  # type: ignore [call-overload]
    _a = process.extract_iter("", [""], scorer=invalid_scorer_str4)  # type: ignore [call-overload]
    _a = process.extract_iter("", [""], scorer=invalid_scorer_str5)  # type: ignore [call-overload]
    _a = process.extract_iter(list(""), [""], scorer=valid_scorer_str1)  # type: ignore [call-overload]
    _c = process.extract_iter("", [list("")], scorer=valid_scorer_str1)  # type: ignore [call-overload]
    _a = process.extract_iter(list(""), [""], scorer=valid_scorer_seq1)
    _c = process.extract_iter("", [list("")], scorer=valid_scorer_seq1)


def test_cdist():
    _a: npt.NDArray[np.float32] = process.cdist([""], [""])
    _a = process.cdist([""], [""], scorer=fuzz.ratio)
    # todo these should be be rejected, but I didn't find a way to properly type the return type so far
    # _b: npt.NDArray[np.int32] = process.cdist([""], [""], scorer=fuzz.ratio)  type: ignore [assignment]
    # _b = process.cdist([""], [""])  type: ignore [assignment]
    _b: npt.NDArray[np.int32] = process.cdist([""], [""], scorer=Levenshtein.distance)
    _a = process.cdist([1], [""], scorer=fuzz.ratio)  # type: ignore [list-item]
    _a = process.cdist([""], [1], scorer=fuzz.ratio)  # type: ignore [list-item]
    _a = process.cdist([list("")], [""], scorer=fuzz.ratio)
    _a = process.cdist([""], [""], processor=string_preprocessor)
    _a = process.cdist([list("")], [""], processor=string_preprocessor)  # type: ignore [arg-type]
    _a = process.cdist([""], [list("")], processor=string_preprocessor)  # type: ignore [arg-type]
    _a = process.cdist([MyClass()], [MyClass()], processor=lambda x: x.a)
    _a = process.cdist([""], [""], scorer=valid_scorer_str1)
    _a = process.cdist([""], [""], scorer=valid_scorer_str2)
    _a = process.cdist([""], [""], scorer=valid_scorer_str3)
    _a = process.cdist([""], [""], scorer=invalid_scorer_str1)  # type: ignore [arg-type]
    _a = process.cdist([""], [""], scorer=invalid_scorer_str2)  # type: ignore [arg-type]
    _a = process.cdist([""], [""], scorer=invalid_scorer_str3)  # type: ignore [arg-type]
    _a = process.cdist([""], [""], scorer=invalid_scorer_str4)  # type: ignore [arg-type]
    _a = process.cdist([""], [""], scorer=invalid_scorer_str5)  # type: ignore [arg-type]
    _a = process.cdist([list("")], [""], scorer=valid_scorer_str1)  # type: ignore [arg-type]
    _a = process.cdist([""], [list("")], scorer=valid_scorer_str1)  # type: ignore [arg-type]
    _a = process.cdist([list("")], [""], scorer=valid_scorer_seq1)
    _a = process.cdist([""], [list("")], scorer=valid_scorer_seq1)


def test_cpdist():
    _a: npt.NDArray[np.float32] = process.cpdist([""], [""])
    _a = process.cpdist([""], [""], scorer=fuzz.ratio)
    # todo these should be be rejected, but I didn't find a way to properly type the return type so far
    # _b: npt.NDArray[np.int32] = process.cdist([""], [""], scorer=fuzz.ratio)  type: ignore [assignment]
    # _b = process.cdist([""], [""])  type: ignore [assignment]
    _b: npt.NDArray[np.int32] = process.cpdist([""], [""], scorer=Levenshtein.distance)
    _a = process.cpdist([1], [""], scorer=fuzz.ratio)  # type: ignore [list-item]
    _a = process.cpdist([""], [1], scorer=fuzz.ratio)  # type: ignore [list-item]
    _a = process.cpdist([list("")], [""], scorer=fuzz.ratio)
    _a = process.cpdist([""], [""], processor=string_preprocessor)
    _a = process.cpdist([list("")], [""], processor=string_preprocessor)  # type: ignore [arg-type]
    _a = process.cpdist([""], [list("")], processor=string_preprocessor)  # type: ignore [arg-type]
    _a = process.cpdist([MyClass()], [MyClass()], processor=lambda x: x.a)
    _a = process.cpdist([""], [""], scorer=valid_scorer_str1)
    _a = process.cpdist([""], [""], scorer=valid_scorer_str2)
    _a = process.cpdist([""], [""], scorer=valid_scorer_str3)
    _a = process.cpdist([""], [""], scorer=invalid_scorer_str1)  # type: ignore [arg-type]
    _a = process.cpdist([""], [""], scorer=invalid_scorer_str2)  # type: ignore [arg-type]
    _a = process.cpdist([""], [""], scorer=invalid_scorer_str3)  # type: ignore [arg-type]
    _a = process.cpdist([""], [""], scorer=invalid_scorer_str4)  # type: ignore [arg-type]
    _a = process.cpdist([""], [""], scorer=invalid_scorer_str5)  # type: ignore [arg-type]
    _a = process.cpdist([list("")], [""], scorer=valid_scorer_str1)  # type: ignore [arg-type]
    _a = process.cpdist([""], [list("")], scorer=valid_scorer_str1)  # type: ignore [arg-type]
    _a = process.cpdist([list("")], [""], scorer=valid_scorer_seq1)
    _a = process.cpdist([""], [list("")], scorer=valid_scorer_seq1)