1# Generated by Snowball 2.2.0 - https://snowballstem.org/
2
3from .basestemmer import BaseStemmer
4from .among import Among
5
6
7class TamilStemmer(BaseStemmer):
8    '''
9    This class implements the stemming algorithm defined by a snowball script.
10    Generated by Snowball 2.2.0 - https://snowballstem.org/
11    '''
12
13    a_0 = [
14        Among(u"\u0B95", -1, -1),
15        Among(u"\u0B99", -1, -1),
16        Among(u"\u0B9A", -1, -1),
17        Among(u"\u0B9E", -1, -1),
18        Among(u"\u0BA4", -1, -1),
19        Among(u"\u0BA8", -1, -1),
20        Among(u"\u0BAA", -1, -1),
21        Among(u"\u0BAE", -1, -1),
22        Among(u"\u0BAF", -1, -1),
23        Among(u"\u0BB5", -1, -1)
24    ]
25
26    a_1 = [
27        Among(u"\u0BA8\u0BCD\u0BA4", -1, -1),
28        Among(u"\u0BA8\u0BCD\u0BA4\u0BCD", -1, -1),
29        Among(u"\u0BA8\u0BCD", -1, -1)
30    ]
31
32    a_2 = [
33        Among(u"\u0BBF", -1, -1),
34        Among(u"\u0BC0", -1, -1),
35        Among(u"\u0BC8", -1, -1)
36    ]
37
38    a_3 = [
39        Among(u"\u0B95", -1, -1),
40        Among(u"\u0B9A", -1, -1),
41        Among(u"\u0B9F", -1, -1),
42        Among(u"\u0BA4", -1, -1),
43        Among(u"\u0BAA", -1, -1),
44        Among(u"\u0BB1", -1, -1)
45    ]
46
47    a_4 = [
48        Among(u"\u0B95", -1, -1),
49        Among(u"\u0B9A", -1, -1),
50        Among(u"\u0B9F", -1, -1),
51        Among(u"\u0BA4", -1, -1),
52        Among(u"\u0BAA", -1, -1),
53        Among(u"\u0BB1", -1, -1)
54    ]
55
56    a_5 = [
57        Among(u"\u0B95", -1, -1),
58        Among(u"\u0B9A", -1, -1),
59        Among(u"\u0B9F", -1, -1),
60        Among(u"\u0BA4", -1, -1),
61        Among(u"\u0BAA", -1, -1),
62        Among(u"\u0BB1", -1, -1)
63    ]
64
65    a_6 = [
66        Among(u"\u0BAF", -1, -1),
67        Among(u"\u0BB0", -1, -1),
68        Among(u"\u0BB2", -1, -1),
69        Among(u"\u0BB3", -1, -1),
70        Among(u"\u0BB4", -1, -1),
71        Among(u"\u0BB5", -1, -1)
72    ]
73
74    a_7 = [
75        Among(u"\u0B99", -1, -1),
76        Among(u"\u0B9E", -1, -1),
77        Among(u"\u0BA3", -1, -1),
78        Among(u"\u0BA8", -1, -1),
79        Among(u"\u0BA9", -1, -1),
80        Among(u"\u0BAE", -1, -1)
81    ]
82
83    a_8 = [
84        Among(u"\u0BAF", -1, -1),
85        Among(u"\u0BB5", -1, -1),
86        Among(u"\u0BB5\u0BCD", -1, -1)
87    ]
88
89    a_9 = [
90        Among(u"\u0BBE", -1, -1),
91        Among(u"\u0BBF", -1, -1),
92        Among(u"\u0BC0", -1, -1),
93        Among(u"\u0BC1", -1, -1),
94        Among(u"\u0BC2", -1, -1),
95        Among(u"\u0BC6", -1, -1),
96        Among(u"\u0BC7", -1, -1),
97        Among(u"\u0BC8", -1, -1)
98    ]
99
100    a_10 = [
101        Among(u"\u0BBE", -1, -1),
102        Among(u"\u0BBF", -1, -1),
103        Among(u"\u0BC0", -1, -1),
104        Among(u"\u0BC1", -1, -1),
105        Among(u"\u0BC2", -1, -1),
106        Among(u"\u0BC6", -1, -1),
107        Among(u"\u0BC7", -1, -1),
108        Among(u"\u0BC8", -1, -1)
109    ]
110
111    a_11 = [
112        Among(u"\u0B85", -1, -1),
113        Among(u"\u0B87", -1, -1),
114        Among(u"\u0B89", -1, -1)
115    ]
116
117    a_12 = [
118        Among(u"\u0B95", -1, -1),
119        Among(u"\u0B99", -1, -1),
120        Among(u"\u0B9A", -1, -1),
121        Among(u"\u0B9E", -1, -1),
122        Among(u"\u0BA4", -1, -1),
123        Among(u"\u0BA8", -1, -1),
124        Among(u"\u0BAA", -1, -1),
125        Among(u"\u0BAE", -1, -1),
126        Among(u"\u0BAF", -1, -1),
127        Among(u"\u0BB5", -1, -1)
128    ]
129
130    a_13 = [
131        Among(u"\u0B95", -1, -1),
132        Among(u"\u0B9A", -1, -1),
133        Among(u"\u0B9F", -1, -1),
134        Among(u"\u0BA4", -1, -1),
135        Among(u"\u0BAA", -1, -1),
136        Among(u"\u0BB1", -1, -1)
137    ]
138
139    a_14 = [
140        Among(u"\u0BBE", -1, -1),
141        Among(u"\u0BC7", -1, -1),
142        Among(u"\u0BCB", -1, -1)
143    ]
144
145    a_15 = [
146        Among(u"\u0BAA\u0BBF", -1, -1),
147        Among(u"\u0BB5\u0BBF", -1, -1)
148    ]
149
150    a_16 = [
151        Among(u"\u0BBE", -1, -1),
152        Among(u"\u0BBF", -1, -1),
153        Among(u"\u0BC0", -1, -1),
154        Among(u"\u0BC1", -1, -1),
155        Among(u"\u0BC2", -1, -1),
156        Among(u"\u0BC6", -1, -1),
157        Among(u"\u0BC7", -1, -1),
158        Among(u"\u0BC8", -1, -1)
159    ]
160
161    a_17 = [
162        Among(u"\u0BAA\u0B9F\u0BCD\u0B9F", -1, -1),
163        Among(u"\u0BAA\u0B9F\u0BCD\u0B9F\u0BA3", -1, -1),
164        Among(u"\u0BA4\u0BBE\u0BA9", -1, -1),
165        Among(u"\u0BAA\u0B9F\u0BBF\u0BA4\u0BBE\u0BA9", 2, -1),
166        Among(u"\u0B95\u0BC1\u0BB0\u0BBF\u0BAF", -1, -1),
167        Among(u"\u0BAA\u0B9F\u0BBF", -1, -1),
168        Among(u"\u0BAA\u0BB1\u0BCD\u0BB1\u0BBF", -1, -1),
169        Among(u"\u0BAA\u0B9F\u0BC1", -1, -1),
170        Among(u"\u0BB5\u0BBF\u0B9F\u0BC1", -1, -1),
171        Among(u"\u0BAA\u0B9F\u0BCD\u0B9F\u0BC1", -1, -1),
172        Among(u"\u0BB5\u0BBF\u0B9F\u0BCD\u0B9F\u0BC1", -1, -1),
173        Among(u"\u0BAA\u0B9F\u0BCD\u0B9F\u0BA4\u0BC1", -1, -1),
174        Among(u"\u0BC6\u0BB2\u0BCD\u0BB2\u0BBE\u0BAE\u0BCD", -1, -1)
175    ]
176
177    a_18 = [
178        Among(u"\u0B95", -1, -1),
179        Among(u"\u0B9A", -1, -1),
180        Among(u"\u0B9F", -1, -1),
181        Among(u"\u0BA4", -1, -1),
182        Among(u"\u0BAA", -1, -1),
183        Among(u"\u0BB1", -1, -1)
184    ]
185
186    a_19 = [
187        Among(u"\u0B95", -1, -1),
188        Among(u"\u0B9A", -1, -1),
189        Among(u"\u0B9F", -1, -1),
190        Among(u"\u0BA4", -1, -1),
191        Among(u"\u0BAA", -1, -1),
192        Among(u"\u0BB1", -1, -1)
193    ]
194
195    a_20 = [
196        Among(u"\u0BBE", -1, -1),
197        Among(u"\u0BBF", -1, -1),
198        Among(u"\u0BC0", -1, -1),
199        Among(u"\u0BC1", -1, -1),
200        Among(u"\u0BC2", -1, -1),
201        Among(u"\u0BC6", -1, -1),
202        Among(u"\u0BC7", -1, -1),
203        Among(u"\u0BC8", -1, -1)
204    ]
205
206    a_21 = [
207        Among(u"\u0BBE", -1, -1),
208        Among(u"\u0BBF", -1, -1),
209        Among(u"\u0BC0", -1, -1),
210        Among(u"\u0BC1", -1, -1),
211        Among(u"\u0BC2", -1, -1),
212        Among(u"\u0BC6", -1, -1),
213        Among(u"\u0BC7", -1, -1),
214        Among(u"\u0BC8", -1, -1)
215    ]
216
217    a_22 = [
218        Among(u"\u0BAA\u0B9F\u0BC1", -1, -1),
219        Among(u"\u0B95\u0BCA\u0BA3\u0BCD\u0B9F\u0BBF\u0BB0\u0BCD", -1, -1)
220    ]
221
222    a_23 = [
223        Among(u"\u0B85", -1, -1),
224        Among(u"\u0B86", -1, -1),
225        Among(u"\u0B87", -1, -1),
226        Among(u"\u0B88", -1, -1),
227        Among(u"\u0B89", -1, -1),
228        Among(u"\u0B8A", -1, -1),
229        Among(u"\u0B8E", -1, -1),
230        Among(u"\u0B8F", -1, -1),
231        Among(u"\u0B90", -1, -1),
232        Among(u"\u0B92", -1, -1),
233        Among(u"\u0B93", -1, -1),
234        Among(u"\u0B94", -1, -1)
235    ]
236
237    a_24 = [
238        Among(u"\u0BBE", -1, -1),
239        Among(u"\u0BBF", -1, -1),
240        Among(u"\u0BC0", -1, -1),
241        Among(u"\u0BC1", -1, -1),
242        Among(u"\u0BC2", -1, -1),
243        Among(u"\u0BC6", -1, -1),
244        Among(u"\u0BC7", -1, -1),
245        Among(u"\u0BC8", -1, -1)
246    ]
247
248    a_25 = [
249        Among(u"\u0B95\u0BBF\u0BB1", -1, -1),
250        Among(u"\u0B95\u0BBF\u0BA9\u0BCD\u0BB1", -1, -1),
251        Among(u"\u0BBE\u0BA8\u0BBF\u0BA9\u0BCD\u0BB1", -1, -1),
252        Among(u"\u0B95\u0BBF\u0BB1\u0BCD", -1, -1),
253        Among(u"\u0B95\u0BBF\u0BA9\u0BCD\u0BB1\u0BCD", -1, -1),
254        Among(u"\u0BBE\u0BA8\u0BBF\u0BA9\u0BCD\u0BB1\u0BCD", -1, -1)
255    ]
256
257    B_found_vetrumai_urupu = False
258    B_found_a_match = False
259
260    def __r_has_min_length(self):
261        if not len(self.current) > 4:
262            return False
263        return True
264
265    def __r_fix_va_start(self):
266        try:
267            v_1 = self.cursor
268            try:
269                v_2 = self.cursor
270                v_3 = self.cursor
271                try:
272                    if not self.eq_s(u"\u0BB5\u0BCB"):
273                        self.cursor = v_3
274                        raise lab2()
275                except lab2: pass
276                self.cursor = v_2
277                self.bra = self.cursor
278                if not self.eq_s(u"\u0BB5\u0BCB"):
279                    raise lab1()
280                self.ket = self.cursor
281                if not self.slice_from(u"\u0B93"):
282                    return False
283                raise lab0()
284            except lab1: pass
285            self.cursor = v_1
286            try:
287                v_4 = self.cursor
288                v_5 = self.cursor
289                try:
290                    if not self.eq_s(u"\u0BB5\u0BCA"):
291                        self.cursor = v_5
292                        raise lab4()
293                except lab4: pass
294                self.cursor = v_4
295                self.bra = self.cursor
296                if not self.eq_s(u"\u0BB5\u0BCA"):
297                    raise lab3()
298                self.ket = self.cursor
299                if not self.slice_from(u"\u0B92"):
300                    return False
301                raise lab0()
302            except lab3: pass
303            self.cursor = v_1
304            try:
305                v_6 = self.cursor
306                v_7 = self.cursor
307                try:
308                    if not self.eq_s(u"\u0BB5\u0BC1"):
309                        self.cursor = v_7
310                        raise lab6()
311                except lab6: pass
312                self.cursor = v_6
313                self.bra = self.cursor
314                if not self.eq_s(u"\u0BB5\u0BC1"):
315                    raise lab5()
316                self.ket = self.cursor
317                if not self.slice_from(u"\u0B89"):
318                    return False
319                raise lab0()
320            except lab5: pass
321            self.cursor = v_1
322            v_8 = self.cursor
323            v_9 = self.cursor
324            try:
325                if not self.eq_s(u"\u0BB5\u0BC2"):
326                    self.cursor = v_9
327                    raise lab7()
328            except lab7: pass
329            self.cursor = v_8
330            self.bra = self.cursor
331            if not self.eq_s(u"\u0BB5\u0BC2"):
332                return False
333            self.ket = self.cursor
334            if not self.slice_from(u"\u0B8A"):
335                return False
336        except lab0: pass
337        return True
338
339    def __r_fix_endings(self):
340        v_1 = self.cursor
341        try:
342            while True:
343                v_2 = self.cursor
344                try:
345                    if not self.__r_fix_ending():
346                        raise lab1()
347                    continue
348                except lab1: pass
349                self.cursor = v_2
350                break
351        except lab0: pass
352        self.cursor = v_1
353        return True
354
355    def __r_remove_question_prefixes(self):
356        self.bra = self.cursor
357        if not self.eq_s(u"\u0B8E"):
358            return False
359        if self.find_among(TamilStemmer.a_0) == 0:
360            return False
361        if not self.eq_s(u"\u0BCD"):
362            return False
363        self.ket = self.cursor
364        if not self.slice_del():
365            return False
366
367        v_1 = self.cursor
368        self.__r_fix_va_start()
369        self.cursor = v_1
370        return True
371
372    def __r_fix_ending(self):
373        if not len(self.current) > 3:
374            return False
375        self.limit_backward = self.cursor
376        self.cursor = self.limit
377        try:
378            v_1 = self.limit - self.cursor
379            try:
380                self.ket = self.cursor
381                if self.find_among_b(TamilStemmer.a_1) == 0:
382                    raise lab1()
383                self.bra = self.cursor
384                if not self.slice_del():
385                    return False
386
387                raise lab0()
388            except lab1: pass
389            self.cursor = self.limit - v_1
390            try:
391                self.ket = self.cursor
392                if not self.eq_s_b(u"\u0BAF\u0BCD"):
393                    raise lab2()
394                v_2 = self.limit - self.cursor
395                if self.find_among_b(TamilStemmer.a_2) == 0:
396                    raise lab2()
397                self.cursor = self.limit - v_2
398                self.bra = self.cursor
399                if not self.slice_del():
400                    return False
401
402                raise lab0()
403            except lab2: pass
404            self.cursor = self.limit - v_1
405            try:
406                self.ket = self.cursor
407                try:
408                    v_3 = self.limit - self.cursor
409                    try:
410                        if not self.eq_s_b(u"\u0B9F\u0BCD\u0BAA\u0BCD"):
411                            raise lab5()
412                        raise lab4()
413                    except lab5: pass
414                    self.cursor = self.limit - v_3
415                    if not self.eq_s_b(u"\u0B9F\u0BCD\u0B95\u0BCD"):
416                        raise lab3()
417                except lab4: pass
418                self.bra = self.cursor
419                if not self.slice_from(u"\u0BB3\u0BCD"):
420                    return False
421                raise lab0()
422            except lab3: pass
423            self.cursor = self.limit - v_1
424            try:
425                self.ket = self.cursor
426                if not self.eq_s_b(u"\u0BA9\u0BCD\u0BB1\u0BCD"):
427                    raise lab6()
428                self.bra = self.cursor
429                if not self.slice_from(u"\u0BB2\u0BCD"):
430                    return False
431                raise lab0()
432            except lab6: pass
433            self.cursor = self.limit - v_1
434            try:
435                self.ket = self.cursor
436                if not self.eq_s_b(u"\u0BB1\u0BCD\u0B95\u0BCD"):
437                    raise lab7()
438                self.bra = self.cursor
439                if not self.slice_from(u"\u0BB2\u0BCD"):
440                    return False
441                raise lab0()
442            except lab7: pass
443            self.cursor = self.limit - v_1
444            try:
445                self.ket = self.cursor
446                if not self.eq_s_b(u"\u0B9F\u0BCD\u0B9F\u0BCD"):
447                    raise lab8()
448                self.bra = self.cursor
449                if not self.slice_from(u"\u0B9F\u0BC1"):
450                    return False
451                raise lab0()
452            except lab8: pass
453            self.cursor = self.limit - v_1
454            try:
455                if not self.B_found_vetrumai_urupu:
456                    raise lab9()
457                self.ket = self.cursor
458                if not self.eq_s_b(u"\u0BA4\u0BCD\u0BA4\u0BCD"):
459                    raise lab9()
460                v_4 = self.limit - self.cursor
461                v_5 = self.limit - self.cursor
462                try:
463                    if not self.eq_s_b(u"\u0BC8"):
464                        raise lab10()
465                    raise lab9()
466                except lab10: pass
467                self.cursor = self.limit - v_5
468                self.cursor = self.limit - v_4
469                self.bra = self.cursor
470                if not self.slice_from(u"\u0BAE\u0BCD"):
471                    return False
472                self.bra = self.cursor
473                raise lab0()
474            except lab9: pass
475            self.cursor = self.limit - v_1
476            try:
477                self.ket = self.cursor
478                try:
479                    v_6 = self.limit - self.cursor
480                    try:
481                        if not self.eq_s_b(u"\u0BC1\u0B95\u0BCD"):
482                            raise lab13()
483                        raise lab12()
484                    except lab13: pass
485                    self.cursor = self.limit - v_6
486                    if not self.eq_s_b(u"\u0BC1\u0B95\u0BCD\u0B95\u0BCD"):
487                        raise lab11()
488                except lab12: pass
489                self.bra = self.cursor
490                if not self.slice_from(u"\u0BCD"):
491                    return False
492                raise lab0()
493            except lab11: pass
494            self.cursor = self.limit - v_1
495            try:
496                self.ket = self.cursor
497                if not self.eq_s_b(u"\u0BCD"):
498                    raise lab14()
499                if self.find_among_b(TamilStemmer.a_3) == 0:
500                    raise lab14()
501                if not self.eq_s_b(u"\u0BCD"):
502                    raise lab14()
503                if self.find_among_b(TamilStemmer.a_4) == 0:
504                    raise lab14()
505                self.bra = self.cursor
506                if not self.slice_del():
507                    return False
508
509                raise lab0()
510            except lab14: pass
511            self.cursor = self.limit - v_1
512            try:
513                self.ket = self.cursor
514                if not self.eq_s_b(u"\u0BC1\u0B95\u0BCD"):
515                    raise lab15()
516                self.bra = self.cursor
517                if not self.slice_from(u"\u0BCD"):
518                    return False
519                raise lab0()
520            except lab15: pass
521            self.cursor = self.limit - v_1
522            try:
523                self.ket = self.cursor
524                if not self.eq_s_b(u"\u0BCD"):
525                    raise lab16()
526                if self.find_among_b(TamilStemmer.a_5) == 0:
527                    raise lab16()
528                self.bra = self.cursor
529                if not self.slice_del():
530                    return False
531
532                raise lab0()
533            except lab16: pass
534            self.cursor = self.limit - v_1
535            try:
536                self.ket = self.cursor
537                if not self.eq_s_b(u"\u0BCD"):
538                    raise lab17()
539                try:
540                    v_7 = self.limit - self.cursor
541                    try:
542                        if self.find_among_b(TamilStemmer.a_6) == 0:
543                            raise lab19()
544                        raise lab18()
545                    except lab19: pass
546                    self.cursor = self.limit - v_7
547                    if self.find_among_b(TamilStemmer.a_7) == 0:
548                        raise lab17()
549                except lab18: pass
550                if not self.eq_s_b(u"\u0BCD"):
551                    raise lab17()
552                self.bra = self.cursor
553                if not self.slice_from(u"\u0BCD"):
554                    return False
555                raise lab0()
556            except lab17: pass
557            self.cursor = self.limit - v_1
558            try:
559                self.ket = self.cursor
560                if self.find_among_b(TamilStemmer.a_8) == 0:
561                    raise lab20()
562                self.bra = self.cursor
563                if not self.slice_del():
564                    return False
565
566                raise lab0()
567            except lab20: pass
568            self.cursor = self.limit - v_1
569            try:
570                self.ket = self.cursor
571                if not self.eq_s_b(u"\u0BA9\u0BC1"):
572                    raise lab21()
573                v_8 = self.limit - self.cursor
574                v_9 = self.limit - self.cursor
575                try:
576                    if self.find_among_b(TamilStemmer.a_9) == 0:
577                        raise lab22()
578                    raise lab21()
579                except lab22: pass
580                self.cursor = self.limit - v_9
581                self.cursor = self.limit - v_8
582                self.bra = self.cursor
583                if not self.slice_del():
584                    return False
585
586                raise lab0()
587            except lab21: pass
588            self.cursor = self.limit - v_1
589            try:
590                self.ket = self.cursor
591                if not self.eq_s_b(u"\u0B99\u0BCD"):
592                    raise lab23()
593                v_10 = self.limit - self.cursor
594                v_11 = self.limit - self.cursor
595                try:
596                    if not self.eq_s_b(u"\u0BC8"):
597                        raise lab24()
598                    raise lab23()
599                except lab24: pass
600                self.cursor = self.limit - v_11
601                self.cursor = self.limit - v_10
602                self.bra = self.cursor
603                if not self.slice_from(u"\u0BAE\u0BCD"):
604                    return False
605                raise lab0()
606            except lab23: pass
607            self.cursor = self.limit - v_1
608            try:
609                self.ket = self.cursor
610                if not self.eq_s_b(u"\u0B99\u0BCD"):
611                    raise lab25()
612                self.bra = self.cursor
613                if not self.slice_del():
614                    return False
615
616                raise lab0()
617            except lab25: pass
618            self.cursor = self.limit - v_1
619            self.ket = self.cursor
620            if not self.eq_s_b(u"\u0BCD"):
621                return False
622            v_12 = self.limit - self.cursor
623            try:
624                v_13 = self.limit - self.cursor
625                try:
626                    if self.find_among_b(TamilStemmer.a_10) == 0:
627                        raise lab27()
628                    raise lab26()
629                except lab27: pass
630                self.cursor = self.limit - v_13
631                if not self.eq_s_b(u"\u0BCD"):
632                    return False
633            except lab26: pass
634            self.cursor = self.limit - v_12
635            self.bra = self.cursor
636            if not self.slice_del():
637                return False
638
639        except lab0: pass
640        self.cursor = self.limit_backward
641        return True
642
643    def __r_remove_pronoun_prefixes(self):
644        self.B_found_a_match = False
645        self.bra = self.cursor
646        if self.find_among(TamilStemmer.a_11) == 0:
647            return False
648        if self.find_among(TamilStemmer.a_12) == 0:
649            return False
650        if not self.eq_s(u"\u0BCD"):
651            return False
652        self.ket = self.cursor
653        if not self.slice_del():
654            return False
655
656        self.B_found_a_match = True
657        v_1 = self.cursor
658        self.__r_fix_va_start()
659        self.cursor = v_1
660        return True
661
662    def __r_remove_plural_suffix(self):
663        self.B_found_a_match = False
664        self.limit_backward = self.cursor
665        self.cursor = self.limit
666        try:
667            v_1 = self.limit - self.cursor
668            try:
669                self.ket = self.cursor
670                if not self.eq_s_b(u"\u0BC1\u0B99\u0BCD\u0B95\u0BB3\u0BCD"):
671                    raise lab1()
672                v_2 = self.limit - self.cursor
673                v_3 = self.limit - self.cursor
674                try:
675                    if self.find_among_b(TamilStemmer.a_13) == 0:
676                        raise lab2()
677                    raise lab1()
678                except lab2: pass
679                self.cursor = self.limit - v_3
680                self.cursor = self.limit - v_2
681                self.bra = self.cursor
682                if not self.slice_from(u"\u0BCD"):
683                    return False
684                raise lab0()
685            except lab1: pass
686            self.cursor = self.limit - v_1
687            try:
688                self.ket = self.cursor
689                if not self.eq_s_b(u"\u0BB1\u0BCD\u0B95\u0BB3\u0BCD"):
690                    raise lab3()
691                self.bra = self.cursor
692                if not self.slice_from(u"\u0BB2\u0BCD"):
693                    return False
694                raise lab0()
695            except lab3: pass
696            self.cursor = self.limit - v_1
697            try:
698                self.ket = self.cursor
699                if not self.eq_s_b(u"\u0B9F\u0BCD\u0B95\u0BB3\u0BCD"):
700                    raise lab4()
701                self.bra = self.cursor
702                if not self.slice_from(u"\u0BB3\u0BCD"):
703                    return False
704                raise lab0()
705            except lab4: pass
706            self.cursor = self.limit - v_1
707            self.ket = self.cursor
708            if not self.eq_s_b(u"\u0B95\u0BB3\u0BCD"):
709                return False
710            self.bra = self.cursor
711            if not self.slice_del():
712                return False
713
714        except lab0: pass
715        self.B_found_a_match = True
716        self.cursor = self.limit_backward
717        return True
718
719    def __r_remove_question_suffixes(self):
720        if not self.__r_has_min_length():
721            return False
722        self.B_found_a_match = False
723        self.limit_backward = self.cursor
724        self.cursor = self.limit
725        v_1 = self.limit - self.cursor
726        try:
727            self.ket = self.cursor
728            if self.find_among_b(TamilStemmer.a_14) == 0:
729                raise lab0()
730            self.bra = self.cursor
731            if not self.slice_from(u"\u0BCD"):
732                return False
733            self.B_found_a_match = True
734        except lab0: pass
735        self.cursor = self.limit - v_1
736        self.cursor = self.limit_backward
737        self.__r_fix_endings()
738        return True
739
740    def __r_remove_command_suffixes(self):
741        if not self.__r_has_min_length():
742            return False
743        self.B_found_a_match = False
744        self.limit_backward = self.cursor
745        self.cursor = self.limit
746        self.ket = self.cursor
747        if self.find_among_b(TamilStemmer.a_15) == 0:
748            return False
749        self.bra = self.cursor
750        if not self.slice_del():
751            return False
752
753        self.B_found_a_match = True
754        self.cursor = self.limit_backward
755        return True
756
757    def __r_remove_um(self):
758        self.B_found_a_match = False
759        if not self.__r_has_min_length():
760            return False
761        self.limit_backward = self.cursor
762        self.cursor = self.limit
763        self.ket = self.cursor
764        if not self.eq_s_b(u"\u0BC1\u0BAE\u0BCD"):
765            return False
766        self.bra = self.cursor
767        if not self.slice_from(u"\u0BCD"):
768            return False
769        self.B_found_a_match = True
770        self.cursor = self.limit_backward
771        v_1 = self.cursor
772        self.__r_fix_ending()
773        self.cursor = v_1
774        return True
775
776    def __r_remove_common_word_endings(self):
777        self.B_found_a_match = False
778        if not self.__r_has_min_length():
779            return False
780        self.limit_backward = self.cursor
781        self.cursor = self.limit
782        try:
783            v_1 = self.limit - self.cursor
784            try:
785                v_2 = self.limit - self.cursor
786                self.ket = self.cursor
787                try:
788                    v_3 = self.limit - self.cursor
789                    try:
790                        if not self.eq_s_b(u"\u0BC1\u0B9F\u0BA9\u0BCD"):
791                            raise lab3()
792                        raise lab2()
793                    except lab3: pass
794                    self.cursor = self.limit - v_3
795                    try:
796                        if not self.eq_s_b(u"\u0BBF\u0BB2\u0BCD\u0BB2\u0BC8"):
797                            raise lab4()
798                        raise lab2()
799                    except lab4: pass
800                    self.cursor = self.limit - v_3
801                    try:
802                        if not self.eq_s_b(u"\u0BBF\u0B9F\u0BAE\u0BCD"):
803                            raise lab5()
804                        raise lab2()
805                    except lab5: pass
806                    self.cursor = self.limit - v_3
807                    try:
808                        if not self.eq_s_b(u"\u0BBF\u0BA9\u0BCD\u0BB1\u0BBF"):
809                            raise lab6()
810                        raise lab2()
811                    except lab6: pass
812                    self.cursor = self.limit - v_3
813                    try:
814                        if not self.eq_s_b(u"\u0BBE\u0B95\u0BBF"):
815                            raise lab7()
816                        raise lab2()
817                    except lab7: pass
818                    self.cursor = self.limit - v_3
819                    try:
820                        if not self.eq_s_b(u"\u0BBE\u0B95\u0BBF\u0BAF"):
821                            raise lab8()
822                        raise lab2()
823                    except lab8: pass
824                    self.cursor = self.limit - v_3
825                    try:
826                        if not self.eq_s_b(u"\u0BC6\u0BA9\u0BCD\u0BB1\u0BC1"):
827                            raise lab9()
828                        raise lab2()
829                    except lab9: pass
830                    self.cursor = self.limit - v_3
831                    try:
832                        if not self.eq_s_b(u"\u0BC1\u0BB3\u0BCD\u0BB3"):
833                            raise lab10()
834                        raise lab2()
835                    except lab10: pass
836                    self.cursor = self.limit - v_3
837                    try:
838                        if not self.eq_s_b(u"\u0BC1\u0B9F\u0BC8\u0BAF"):
839                            raise lab11()
840                        raise lab2()
841                    except lab11: pass
842                    self.cursor = self.limit - v_3
843                    try:
844                        if not self.eq_s_b(u"\u0BC1\u0B9F\u0BC8"):
845                            raise lab12()
846                        raise lab2()
847                    except lab12: pass
848                    self.cursor = self.limit - v_3
849                    try:
850                        if not self.eq_s_b(u"\u0BC6\u0BA9\u0BC1\u0BAE\u0BCD"):
851                            raise lab13()
852                        raise lab2()
853                    except lab13: pass
854                    self.cursor = self.limit - v_3
855                    try:
856                        if not self.eq_s_b(u"\u0BB2\u0BCD\u0BB2"):
857                            raise lab14()
858                        v_4 = self.limit - self.cursor
859                        v_5 = self.limit - self.cursor
860                        try:
861                            if self.find_among_b(TamilStemmer.a_16) == 0:
862                                raise lab15()
863                            raise lab14()
864                        except lab15: pass
865                        self.cursor = self.limit - v_5
866                        self.cursor = self.limit - v_4
867                        raise lab2()
868                    except lab14: pass
869                    self.cursor = self.limit - v_3
870                    try:
871                        if not self.eq_s_b(u"\u0BC6\u0BA9"):
872                            raise lab16()
873                        raise lab2()
874                    except lab16: pass
875                    self.cursor = self.limit - v_3
876                    if not self.eq_s_b(u"\u0BBE\u0B95\u0BBF"):
877                        raise lab1()
878                except lab2: pass
879                self.bra = self.cursor
880                if not self.slice_from(u"\u0BCD"):
881                    return False
882                self.B_found_a_match = True
883                self.cursor = self.limit - v_2
884                raise lab0()
885            except lab1: pass
886            self.cursor = self.limit - v_1
887            v_6 = self.limit - self.cursor
888            self.ket = self.cursor
889            if self.find_among_b(TamilStemmer.a_17) == 0:
890                return False
891            self.bra = self.cursor
892            if not self.slice_del():
893                return False
894
895            self.B_found_a_match = True
896            self.cursor = self.limit - v_6
897        except lab0: pass
898        self.cursor = self.limit_backward
899        self.__r_fix_endings()
900        return True
901
902    def __r_remove_vetrumai_urupukal(self):
903        self.B_found_a_match = False
904        self.B_found_vetrumai_urupu = False
905        if not self.__r_has_min_length():
906            return False
907        self.limit_backward = self.cursor
908        self.cursor = self.limit
909        try:
910            v_1 = self.limit - self.cursor
911            try:
912                v_2 = self.limit - self.cursor
913                self.ket = self.cursor
914                if not self.eq_s_b(u"\u0BA9\u0BC8"):
915                    raise lab1()
916                self.bra = self.cursor
917                if not self.slice_del():
918                    return False
919
920                self.cursor = self.limit - v_2
921                raise lab0()
922            except lab1: pass
923            self.cursor = self.limit - v_1
924            try:
925                v_3 = self.limit - self.cursor
926                self.ket = self.cursor
927                try:
928                    v_4 = self.limit - self.cursor
929                    try:
930                        try:
931                            v_5 = self.limit - self.cursor
932                            try:
933                                if not self.eq_s_b(u"\u0BBF\u0BA9\u0BC8"):
934                                    raise lab6()
935                                raise lab5()
936                            except lab6: pass
937                            self.cursor = self.limit - v_5
938                            if not self.eq_s_b(u"\u0BC8"):
939                                raise lab4()
940                        except lab5: pass
941                        v_6 = self.limit - self.cursor
942                        v_7 = self.limit - self.cursor
943                        try:
944                            if self.find_among_b(TamilStemmer.a_18) == 0:
945                                raise lab7()
946                            raise lab4()
947                        except lab7: pass
948                        self.cursor = self.limit - v_7
949                        self.cursor = self.limit - v_6
950                        raise lab3()
951                    except lab4: pass
952                    self.cursor = self.limit - v_4
953                    if not self.eq_s_b(u"\u0BC8"):
954                        raise lab2()
955                    v_8 = self.limit - self.cursor
956                    if self.find_among_b(TamilStemmer.a_19) == 0:
957                        raise lab2()
958                    if not self.eq_s_b(u"\u0BCD"):
959                        raise lab2()
960                    self.cursor = self.limit - v_8
961                except lab3: pass
962                self.bra = self.cursor
963                if not self.slice_from(u"\u0BCD"):
964                    return False
965                self.cursor = self.limit - v_3
966                raise lab0()
967            except lab2: pass
968            self.cursor = self.limit - v_1
969            try:
970                v_9 = self.limit - self.cursor
971                self.ket = self.cursor
972                try:
973                    v_10 = self.limit - self.cursor
974                    try:
975                        if not self.eq_s_b(u"\u0BCA\u0B9F\u0BC1"):
976                            raise lab10()
977                        raise lab9()
978                    except lab10: pass
979                    self.cursor = self.limit - v_10
980                    try:
981                        if not self.eq_s_b(u"\u0BCB\u0B9F\u0BC1"):
982                            raise lab11()
983                        raise lab9()
984                    except lab11: pass
985                    self.cursor = self.limit - v_10
986                    try:
987                        if not self.eq_s_b(u"\u0BBF\u0BB2\u0BCD"):
988                            raise lab12()
989                        raise lab9()
990                    except lab12: pass
991                    self.cursor = self.limit - v_10
992                    try:
993                        if not self.eq_s_b(u"\u0BBF\u0BB1\u0BCD"):
994                            raise lab13()
995                        raise lab9()
996                    except lab13: pass
997                    self.cursor = self.limit - v_10
998                    try:
999                        if not self.eq_s_b(u"\u0BBF\u0BA9\u0BCD"):
1000                            raise lab14()
1001                        v_11 = self.limit - self.cursor
1002                        v_12 = self.limit - self.cursor
1003                        try:
1004                            if not self.eq_s_b(u"\u0BAE"):
1005                                raise lab15()
1006                            raise lab14()
1007                        except lab15: pass
1008                        self.cursor = self.limit - v_12
1009                        self.cursor = self.limit - v_11
1010                        raise lab9()
1011                    except lab14: pass
1012                    self.cursor = self.limit - v_10
1013                    try:
1014                        if not self.eq_s_b(u"\u0BBF\u0BA9\u0BCD\u0BB1\u0BC1"):
1015                            raise lab16()
1016                        raise lab9()
1017                    except lab16: pass
1018                    self.cursor = self.limit - v_10
1019                    try:
1020                        if not self.eq_s_b(u"\u0BBF\u0BB0\u0BC1\u0BA8\u0BCD\u0BA4\u0BC1"):
1021                            raise lab17()
1022                        raise lab9()
1023                    except lab17: pass
1024                    self.cursor = self.limit - v_10
1025                    try:
1026                        if not self.eq_s_b(u"\u0BB5\u0BBF\u0B9F"):
1027                            raise lab18()
1028                        raise lab9()
1029                    except lab18: pass
1030                    self.cursor = self.limit - v_10
1031                    try:
1032                        if not len(self.current) >= 7:
1033                            raise lab19()
1034                        if not self.eq_s_b(u"\u0BBF\u0B9F\u0BAE\u0BCD"):
1035                            raise lab19()
1036                        raise lab9()
1037                    except lab19: pass
1038                    self.cursor = self.limit - v_10
1039                    try:
1040                        if not self.eq_s_b(u"\u0BBE\u0BB2\u0BCD"):
1041                            raise lab20()
1042                        raise lab9()
1043                    except lab20: pass
1044                    self.cursor = self.limit - v_10
1045                    try:
1046                        if not self.eq_s_b(u"\u0BC1\u0B9F\u0BC8"):
1047                            raise lab21()
1048                        raise lab9()
1049                    except lab21: pass
1050                    self.cursor = self.limit - v_10
1051                    try:
1052                        if not self.eq_s_b(u"\u0BBE\u0BAE\u0BB2\u0BCD"):
1053                            raise lab22()
1054                        raise lab9()
1055                    except lab22: pass
1056                    self.cursor = self.limit - v_10
1057                    try:
1058                        if not self.eq_s_b(u"\u0BB2\u0BCD"):
1059                            raise lab23()
1060                        v_13 = self.limit - self.cursor
1061                        v_14 = self.limit - self.cursor
1062                        try:
1063                            if self.find_among_b(TamilStemmer.a_20) == 0:
1064                                raise lab24()
1065                            raise lab23()
1066                        except lab24: pass
1067                        self.cursor = self.limit - v_14
1068                        self.cursor = self.limit - v_13
1069                        raise lab9()
1070                    except lab23: pass
1071                    self.cursor = self.limit - v_10
1072                    if not self.eq_s_b(u"\u0BC1\u0BB3\u0BCD"):
1073                        raise lab8()
1074                except lab9: pass
1075                self.bra = self.cursor
1076                if not self.slice_from(u"\u0BCD"):
1077                    return False
1078                self.cursor = self.limit - v_9
1079                raise lab0()
1080            except lab8: pass
1081            self.cursor = self.limit - v_1
1082            try:
1083                v_15 = self.limit - self.cursor
1084                self.ket = self.cursor
1085                try:
1086                    v_16 = self.limit - self.cursor
1087                    try:
1088                        if not self.eq_s_b(u"\u0B95\u0BA3\u0BCD"):
1089                            raise lab27()
1090                        raise lab26()
1091                    except lab27: pass
1092                    self.cursor = self.limit - v_16
1093                    try:
1094                        if not self.eq_s_b(u"\u0BAE\u0BC1\u0BA9\u0BCD"):
1095                            raise lab28()
1096                        raise lab26()
1097                    except lab28: pass
1098                    self.cursor = self.limit - v_16
1099                    try:
1100                        if not self.eq_s_b(u"\u0BAE\u0BC7\u0BB2\u0BCD"):
1101                            raise lab29()
1102                        raise lab26()
1103                    except lab29: pass
1104                    self.cursor = self.limit - v_16
1105                    try:
1106                        if not self.eq_s_b(u"\u0BAE\u0BC7\u0BB1\u0BCD"):
1107                            raise lab30()
1108                        raise lab26()
1109                    except lab30: pass
1110                    self.cursor = self.limit - v_16
1111                    try:
1112                        if not self.eq_s_b(u"\u0B95\u0BC0\u0BB4\u0BCD"):
1113                            raise lab31()
1114                        raise lab26()
1115                    except lab31: pass
1116                    self.cursor = self.limit - v_16
1117                    try:
1118                        if not self.eq_s_b(u"\u0BAA\u0BBF\u0BA9\u0BCD"):
1119                            raise lab32()
1120                        raise lab26()
1121                    except lab32: pass
1122                    self.cursor = self.limit - v_16
1123                    if not self.eq_s_b(u"\u0BA4\u0BC1"):
1124                        raise lab25()
1125                    v_17 = self.limit - self.cursor
1126                    v_18 = self.limit - self.cursor
1127                    try:
1128                        if self.find_among_b(TamilStemmer.a_21) == 0:
1129                            raise lab33()
1130                        raise lab25()
1131                    except lab33: pass
1132                    self.cursor = self.limit - v_18
1133                    self.cursor = self.limit - v_17
1134                except lab26: pass
1135                self.bra = self.cursor
1136                if not self.slice_del():
1137                    return False
1138
1139                self.cursor = self.limit - v_15
1140                raise lab0()
1141            except lab25: pass
1142            self.cursor = self.limit - v_1
1143            v_19 = self.limit - self.cursor
1144            self.ket = self.cursor
1145            if not self.eq_s_b(u"\u0BC0"):
1146                return False
1147            self.bra = self.cursor
1148            if not self.slice_from(u"\u0BBF"):
1149                return False
1150            self.cursor = self.limit - v_19
1151        except lab0: pass
1152        self.B_found_a_match = True
1153        self.B_found_vetrumai_urupu = True
1154        v_20 = self.limit - self.cursor
1155        try:
1156            self.ket = self.cursor
1157            if not self.eq_s_b(u"\u0BBF\u0BA9\u0BCD"):
1158                raise lab34()
1159            self.bra = self.cursor
1160            if not self.slice_from(u"\u0BCD"):
1161                return False
1162        except lab34: pass
1163        self.cursor = self.limit - v_20
1164        self.cursor = self.limit_backward
1165        self.__r_fix_endings()
1166        return True
1167
1168    def __r_remove_tense_suffixes(self):
1169        self.B_found_a_match = True
1170        while True:
1171            v_1 = self.cursor
1172            try:
1173                if not self.B_found_a_match:
1174                    raise lab0()
1175                v_2 = self.cursor
1176                self.__r_remove_tense_suffix()
1177                self.cursor = v_2
1178                continue
1179            except lab0: pass
1180            self.cursor = v_1
1181            break
1182        return True
1183
1184    def __r_remove_tense_suffix(self):
1185        self.B_found_a_match = False
1186        if not self.__r_has_min_length():
1187            return False
1188        self.limit_backward = self.cursor
1189        self.cursor = self.limit
1190        v_1 = self.limit - self.cursor
1191        try:
1192            try:
1193                v_2 = self.limit - self.cursor
1194                try:
1195                    v_3 = self.limit - self.cursor
1196                    self.ket = self.cursor
1197                    if self.find_among_b(TamilStemmer.a_22) == 0:
1198                        raise lab2()
1199                    self.bra = self.cursor
1200                    if not self.slice_del():
1201                        return False
1202
1203                    self.B_found_a_match = True
1204                    self.cursor = self.limit - v_3
1205                    raise lab1()
1206                except lab2: pass
1207                self.cursor = self.limit - v_2
1208                try:
1209                    v_4 = self.limit - self.cursor
1210                    self.ket = self.cursor
1211                    try:
1212                        v_5 = self.limit - self.cursor
1213                        try:
1214                            if not self.eq_s_b(u"\u0BAE\u0BBE\u0BB0\u0BCD"):
1215                                raise lab5()
1216                            raise lab4()
1217                        except lab5: pass
1218                        self.cursor = self.limit - v_5
1219                        try:
1220                            if not self.eq_s_b(u"\u0BAE\u0BBF\u0BA9\u0BCD"):
1221                                raise lab6()
1222                            raise lab4()
1223                        except lab6: pass
1224                        self.cursor = self.limit - v_5
1225                        try:
1226                            if not self.eq_s_b(u"\u0BA9\u0BA9\u0BCD"):
1227                                raise lab7()
1228                            raise lab4()
1229                        except lab7: pass
1230                        self.cursor = self.limit - v_5
1231                        try:
1232                            if not self.eq_s_b(u"\u0BA9\u0BBE\u0BA9\u0BCD"):
1233                                raise lab8()
1234                            raise lab4()
1235                        except lab8: pass
1236                        self.cursor = self.limit - v_5
1237                        try:
1238                            if not self.eq_s_b(u"\u0BA9\u0BBE\u0BB3\u0BCD"):
1239                                raise lab9()
1240                            raise lab4()
1241                        except lab9: pass
1242                        self.cursor = self.limit - v_5
1243                        try:
1244                            if not self.eq_s_b(u"\u0BA9\u0BBE\u0BB0\u0BCD"):
1245                                raise lab10()
1246                            raise lab4()
1247                        except lab10: pass
1248                        self.cursor = self.limit - v_5
1249                        try:
1250                            if not self.eq_s_b(u"\u0BB5\u0BA9\u0BCD"):
1251                                raise lab11()
1252                            v_6 = self.limit - self.cursor
1253                            v_7 = self.limit - self.cursor
1254                            try:
1255                                if self.find_among_b(TamilStemmer.a_23) == 0:
1256                                    raise lab12()
1257                                raise lab11()
1258                            except lab12: pass
1259                            self.cursor = self.limit - v_7
1260                            self.cursor = self.limit - v_6
1261                            raise lab4()
1262                        except lab11: pass
1263                        self.cursor = self.limit - v_5
1264                        try:
1265                            if not self.eq_s_b(u"\u0BA9\u0BB3\u0BCD"):
1266                                raise lab13()
1267                            raise lab4()
1268                        except lab13: pass
1269                        self.cursor = self.limit - v_5
1270                        try:
1271                            if not self.eq_s_b(u"\u0BB5\u0BB3\u0BCD"):
1272                                raise lab14()
1273                            raise lab4()
1274                        except lab14: pass
1275                        self.cursor = self.limit - v_5
1276                        try:
1277                            if not self.eq_s_b(u"\u0BA9\u0BB0\u0BCD"):
1278                                raise lab15()
1279                            raise lab4()
1280                        except lab15: pass
1281                        self.cursor = self.limit - v_5
1282                        try:
1283                            if not self.eq_s_b(u"\u0BB5\u0BB0\u0BCD"):
1284                                raise lab16()
1285                            raise lab4()
1286                        except lab16: pass
1287                        self.cursor = self.limit - v_5
1288                        try:
1289                            if not self.eq_s_b(u"\u0BA9"):
1290                                raise lab17()
1291                            raise lab4()
1292                        except lab17: pass
1293                        self.cursor = self.limit - v_5
1294                        try:
1295                            if not self.eq_s_b(u"\u0BAA"):
1296                                raise lab18()
1297                            raise lab4()
1298                        except lab18: pass
1299                        self.cursor = self.limit - v_5
1300                        try:
1301                            if not self.eq_s_b(u"\u0B95"):
1302                                raise lab19()
1303                            raise lab4()
1304                        except lab19: pass
1305                        self.cursor = self.limit - v_5
1306                        try:
1307                            if not self.eq_s_b(u"\u0BA4"):
1308                                raise lab20()
1309                            raise lab4()
1310                        except lab20: pass
1311                        self.cursor = self.limit - v_5
1312                        try:
1313                            if not self.eq_s_b(u"\u0BAF"):
1314                                raise lab21()
1315                            raise lab4()
1316                        except lab21: pass
1317                        self.cursor = self.limit - v_5
1318                        try:
1319                            if not self.eq_s_b(u"\u0BAA\u0BA9\u0BCD"):
1320                                raise lab22()
1321                            raise lab4()
1322                        except lab22: pass
1323                        self.cursor = self.limit - v_5
1324                        try:
1325                            if not self.eq_s_b(u"\u0BAA\u0BB3\u0BCD"):
1326                                raise lab23()
1327                            raise lab4()
1328                        except lab23: pass
1329                        self.cursor = self.limit - v_5
1330                        try:
1331                            if not self.eq_s_b(u"\u0BAA\u0BB0\u0BCD"):
1332                                raise lab24()
1333                            raise lab4()
1334                        except lab24: pass
1335                        self.cursor = self.limit - v_5
1336                        try:
1337                            if not self.eq_s_b(u"\u0BA4\u0BC1"):
1338                                raise lab25()
1339                            v_8 = self.limit - self.cursor
1340                            v_9 = self.limit - self.cursor
1341                            try:
1342                                if self.find_among_b(TamilStemmer.a_24) == 0:
1343                                    raise lab26()
1344                                raise lab25()
1345                            except lab26: pass
1346                            self.cursor = self.limit - v_9
1347                            self.cursor = self.limit - v_8
1348                            raise lab4()
1349                        except lab25: pass
1350                        self.cursor = self.limit - v_5
1351                        try:
1352                            if not self.eq_s_b(u"\u0BBF\u0BB1\u0BCD\u0BB1\u0BC1"):
1353                                raise lab27()
1354                            raise lab4()
1355                        except lab27: pass
1356                        self.cursor = self.limit - v_5
1357                        try:
1358                            if not self.eq_s_b(u"\u0BAA\u0BAE\u0BCD"):
1359                                raise lab28()
1360                            raise lab4()
1361                        except lab28: pass
1362                        self.cursor = self.limit - v_5
1363                        try:
1364                            if not self.eq_s_b(u"\u0BA9\u0BAE\u0BCD"):
1365                                raise lab29()
1366                            raise lab4()
1367                        except lab29: pass
1368                        self.cursor = self.limit - v_5
1369                        try:
1370                            if not self.eq_s_b(u"\u0BA4\u0BC1\u0BAE\u0BCD"):
1371                                raise lab30()
1372                            raise lab4()
1373                        except lab30: pass
1374                        self.cursor = self.limit - v_5
1375                        try:
1376                            if not self.eq_s_b(u"\u0BB1\u0BC1\u0BAE\u0BCD"):
1377                                raise lab31()
1378                            raise lab4()
1379                        except lab31: pass
1380                        self.cursor = self.limit - v_5
1381                        try:
1382                            if not self.eq_s_b(u"\u0B95\u0BC1\u0BAE\u0BCD"):
1383                                raise lab32()
1384                            raise lab4()
1385                        except lab32: pass
1386                        self.cursor = self.limit - v_5
1387                        try:
1388                            if not self.eq_s_b(u"\u0BA9\u0BC6\u0BA9\u0BCD"):
1389                                raise lab33()
1390                            raise lab4()
1391                        except lab33: pass
1392                        self.cursor = self.limit - v_5
1393                        try:
1394                            if not self.eq_s_b(u"\u0BA9\u0BC8"):
1395                                raise lab34()
1396                            raise lab4()
1397                        except lab34: pass
1398                        self.cursor = self.limit - v_5
1399                        if not self.eq_s_b(u"\u0BB5\u0BC8"):
1400                            raise lab3()
1401                    except lab4: pass
1402                    self.bra = self.cursor
1403                    if not self.slice_del():
1404                        return False
1405
1406                    self.B_found_a_match = True
1407                    self.cursor = self.limit - v_4
1408                    raise lab1()
1409                except lab3: pass
1410                self.cursor = self.limit - v_2
1411                try:
1412                    v_10 = self.limit - self.cursor
1413                    self.ket = self.cursor
1414                    try:
1415                        v_11 = self.limit - self.cursor
1416                        try:
1417                            if not self.eq_s_b(u"\u0BBE\u0BA9\u0BCD"):
1418                                raise lab37()
1419                            v_12 = self.limit - self.cursor
1420                            v_13 = self.limit - self.cursor
1421                            try:
1422                                if not self.eq_s_b(u"\u0B9A"):
1423                                    raise lab38()
1424                                raise lab37()
1425                            except lab38: pass
1426                            self.cursor = self.limit - v_13
1427                            self.cursor = self.limit - v_12
1428                            raise lab36()
1429                        except lab37: pass
1430                        self.cursor = self.limit - v_11
1431                        try:
1432                            if not self.eq_s_b(u"\u0BBE\u0BB3\u0BCD"):
1433                                raise lab39()
1434                            raise lab36()
1435                        except lab39: pass
1436                        self.cursor = self.limit - v_11
1437                        try:
1438                            if not self.eq_s_b(u"\u0BBE\u0BB0\u0BCD"):
1439                                raise lab40()
1440                            raise lab36()
1441                        except lab40: pass
1442                        self.cursor = self.limit - v_11
1443                        try:
1444                            if not self.eq_s_b(u"\u0BC7\u0BA9\u0BCD"):
1445                                raise lab41()
1446                            raise lab36()
1447                        except lab41: pass
1448                        self.cursor = self.limit - v_11
1449                        try:
1450                            if not self.eq_s_b(u"\u0BBE"):
1451                                raise lab42()
1452                            raise lab36()
1453                        except lab42: pass
1454                        self.cursor = self.limit - v_11
1455                        try:
1456                            if not self.eq_s_b(u"\u0BBE\u0BAE\u0BCD"):
1457                                raise lab43()
1458                            raise lab36()
1459                        except lab43: pass
1460                        self.cursor = self.limit - v_11
1461                        try:
1462                            if not self.eq_s_b(u"\u0BC6\u0BAE\u0BCD"):
1463                                raise lab44()
1464                            raise lab36()
1465                        except lab44: pass
1466                        self.cursor = self.limit - v_11
1467                        try:
1468                            if not self.eq_s_b(u"\u0BC7\u0BAE\u0BCD"):
1469                                raise lab45()
1470                            raise lab36()
1471                        except lab45: pass
1472                        self.cursor = self.limit - v_11
1473                        try:
1474                            if not self.eq_s_b(u"\u0BCB\u0BAE\u0BCD"):
1475                                raise lab46()
1476                            raise lab36()
1477                        except lab46: pass
1478                        self.cursor = self.limit - v_11
1479                        try:
1480                            if not self.eq_s_b(u"\u0B95\u0BC1\u0BAE\u0BCD"):
1481                                raise lab47()
1482                            raise lab36()
1483                        except lab47: pass
1484                        self.cursor = self.limit - v_11
1485                        try:
1486                            if not self.eq_s_b(u"\u0BA4\u0BC1\u0BAE\u0BCD"):
1487                                raise lab48()
1488                            raise lab36()
1489                        except lab48: pass
1490                        self.cursor = self.limit - v_11
1491                        try:
1492                            if not self.eq_s_b(u"\u0B9F\u0BC1\u0BAE\u0BCD"):
1493                                raise lab49()
1494                            raise lab36()
1495                        except lab49: pass
1496                        self.cursor = self.limit - v_11
1497                        try:
1498                            if not self.eq_s_b(u"\u0BB1\u0BC1\u0BAE\u0BCD"):
1499                                raise lab50()
1500                            raise lab36()
1501                        except lab50: pass
1502                        self.cursor = self.limit - v_11
1503                        try:
1504                            if not self.eq_s_b(u"\u0BBE\u0BAF\u0BCD"):
1505                                raise lab51()
1506                            raise lab36()
1507                        except lab51: pass
1508                        self.cursor = self.limit - v_11
1509                        try:
1510                            if not self.eq_s_b(u"\u0BA9\u0BC6\u0BA9\u0BCD"):
1511                                raise lab52()
1512                            raise lab36()
1513                        except lab52: pass
1514                        self.cursor = self.limit - v_11
1515                        try:
1516                            if not self.eq_s_b(u"\u0BA9\u0BBF\u0BB0\u0BCD"):
1517                                raise lab53()
1518                            raise lab36()
1519                        except lab53: pass
1520                        self.cursor = self.limit - v_11
1521                        try:
1522                            if not self.eq_s_b(u"\u0BC0\u0BB0\u0BCD"):
1523                                raise lab54()
1524                            raise lab36()
1525                        except lab54: pass
1526                        self.cursor = self.limit - v_11
1527                        if not self.eq_s_b(u"\u0BC0\u0BAF\u0BB0\u0BCD"):
1528                            raise lab35()
1529                    except lab36: pass
1530                    self.bra = self.cursor
1531                    if not self.slice_from(u"\u0BCD"):
1532                        return False
1533                    self.B_found_a_match = True
1534                    self.cursor = self.limit - v_10
1535                    raise lab1()
1536                except lab35: pass
1537                self.cursor = self.limit - v_2
1538                v_14 = self.limit - self.cursor
1539                self.ket = self.cursor
1540                try:
1541                    v_15 = self.limit - self.cursor
1542                    try:
1543                        if not self.eq_s_b(u"\u0B95\u0BC1"):
1544                            raise lab56()
1545                        raise lab55()
1546                    except lab56: pass
1547                    self.cursor = self.limit - v_15
1548                    if not self.eq_s_b(u"\u0BA4\u0BC1"):
1549                        raise lab0()
1550                except lab55: pass
1551                v_16 = self.limit - self.cursor
1552                if not self.eq_s_b(u"\u0BCD"):
1553                    raise lab0()
1554                self.cursor = self.limit - v_16
1555                self.bra = self.cursor
1556                if not self.slice_del():
1557                    return False
1558
1559                self.B_found_a_match = True
1560                self.cursor = self.limit - v_14
1561            except lab1: pass
1562        except lab0: pass
1563        self.cursor = self.limit - v_1
1564        v_17 = self.limit - self.cursor
1565        try:
1566            self.ket = self.cursor
1567            if self.find_among_b(TamilStemmer.a_25) == 0:
1568                raise lab57()
1569            self.bra = self.cursor
1570            if not self.slice_del():
1571                return False
1572
1573            self.B_found_a_match = True
1574        except lab57: pass
1575        self.cursor = self.limit - v_17
1576        self.cursor = self.limit_backward
1577        self.__r_fix_endings()
1578        return True
1579
1580    def _stem(self):
1581        self.B_found_vetrumai_urupu = False
1582        v_1 = self.cursor
1583        self.__r_fix_ending()
1584        self.cursor = v_1
1585        if not self.__r_has_min_length():
1586            return False
1587        v_2 = self.cursor
1588        self.__r_remove_question_prefixes()
1589        self.cursor = v_2
1590        v_3 = self.cursor
1591        self.__r_remove_pronoun_prefixes()
1592        self.cursor = v_3
1593        v_4 = self.cursor
1594        self.__r_remove_question_suffixes()
1595        self.cursor = v_4
1596        v_5 = self.cursor
1597        self.__r_remove_um()
1598        self.cursor = v_5
1599        v_6 = self.cursor
1600        self.__r_remove_common_word_endings()
1601        self.cursor = v_6
1602        v_7 = self.cursor
1603        self.__r_remove_vetrumai_urupukal()
1604        self.cursor = v_7
1605        v_8 = self.cursor
1606        self.__r_remove_plural_suffix()
1607        self.cursor = v_8
1608        v_9 = self.cursor
1609        self.__r_remove_command_suffixes()
1610        self.cursor = v_9
1611        v_10 = self.cursor
1612        self.__r_remove_tense_suffixes()
1613        self.cursor = v_10
1614        return True
1615
1616
1617class lab0(BaseException): pass
1618
1619
1620class lab1(BaseException): pass
1621
1622
1623class lab2(BaseException): pass
1624
1625
1626class lab3(BaseException): pass
1627
1628
1629class lab4(BaseException): pass
1630
1631
1632class lab5(BaseException): pass
1633
1634
1635class lab6(BaseException): pass
1636
1637
1638class lab7(BaseException): pass
1639
1640
1641class lab8(BaseException): pass
1642
1643
1644class lab9(BaseException): pass
1645
1646
1647class lab10(BaseException): pass
1648
1649
1650class lab11(BaseException): pass
1651
1652
1653class lab12(BaseException): pass
1654
1655
1656class lab13(BaseException): pass
1657
1658
1659class lab14(BaseException): pass
1660
1661
1662class lab15(BaseException): pass
1663
1664
1665class lab16(BaseException): pass
1666
1667
1668class lab17(BaseException): pass
1669
1670
1671class lab18(BaseException): pass
1672
1673
1674class lab19(BaseException): pass
1675
1676
1677class lab20(BaseException): pass
1678
1679
1680class lab21(BaseException): pass
1681
1682
1683class lab22(BaseException): pass
1684
1685
1686class lab23(BaseException): pass
1687
1688
1689class lab24(BaseException): pass
1690
1691
1692class lab25(BaseException): pass
1693
1694
1695class lab26(BaseException): pass
1696
1697
1698class lab27(BaseException): pass
1699
1700
1701class lab28(BaseException): pass
1702
1703
1704class lab29(BaseException): pass
1705
1706
1707class lab30(BaseException): pass
1708
1709
1710class lab31(BaseException): pass
1711
1712
1713class lab32(BaseException): pass
1714
1715
1716class lab33(BaseException): pass
1717
1718
1719class lab34(BaseException): pass
1720
1721
1722class lab35(BaseException): pass
1723
1724
1725class lab36(BaseException): pass
1726
1727
1728class lab37(BaseException): pass
1729
1730
1731class lab38(BaseException): pass
1732
1733
1734class lab39(BaseException): pass
1735
1736
1737class lab40(BaseException): pass
1738
1739
1740class lab41(BaseException): pass
1741
1742
1743class lab42(BaseException): pass
1744
1745
1746class lab43(BaseException): pass
1747
1748
1749class lab44(BaseException): pass
1750
1751
1752class lab45(BaseException): pass
1753
1754
1755class lab46(BaseException): pass
1756
1757
1758class lab47(BaseException): pass
1759
1760
1761class lab48(BaseException): pass
1762
1763
1764class lab49(BaseException): pass
1765
1766
1767class lab50(BaseException): pass
1768
1769
1770class lab51(BaseException): pass
1771
1772
1773class lab52(BaseException): pass
1774
1775
1776class lab53(BaseException): pass
1777
1778
1779class lab54(BaseException): pass
1780
1781
1782class lab55(BaseException): pass
1783
1784
1785class lab56(BaseException): pass
1786
1787
1788class lab57(BaseException): pass
1789