Skip to content

Commit 4311d86

Browse files
committed
Make constants
Also remove unnecessary else return
1 parent 43a450d commit 4311d86

File tree

1 file changed

+110
-112
lines changed

1 file changed

+110
-112
lines changed

pythainlp/util/thai_lunar_date.py

Lines changed: 110 additions & 112 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,9 @@
77
"""
88

99
from datetime import date, timedelta
10-
from typing import Tuple, Union
10+
from typing import Dict, List, Tuple, Union
1111

12-
year_dev: dict[int, float] = {
12+
_YEAR_DEV: Dict[int, float] = {
1313
0: 0,
1414
1901: 0.122733000004352,
1515
1906: 1.91890000045229e-02,
@@ -125,13 +125,109 @@
125125
2456: -0.390646999976078,
126126
}
127127

128+
_BEGIN_DATES = [
129+
date(1902, 11, 30),
130+
date(1912, 12, 8),
131+
date(1922, 11, 19),
132+
date(1932, 11, 27),
133+
date(1942, 12, 7),
134+
date(1952, 11, 16),
135+
date(1962, 11, 26),
136+
date(1972, 12, 5),
137+
date(1982, 11, 15),
138+
date(1992, 11, 24),
139+
date(2002, 12, 4),
140+
date(2012, 11, 13),
141+
date(2022, 11, 23),
142+
date(2032, 12, 2),
143+
date(2042, 12, 12),
144+
date(2052, 11, 21),
145+
date(2062, 12, 1),
146+
date(2072, 12, 9),
147+
date(2082, 11, 20),
148+
date(2092, 11, 28),
149+
date(2102, 12, 9),
150+
date(2112, 11, 18),
151+
date(2122, 11, 28),
152+
date(2132, 12, 7),
153+
date(2142, 11, 17),
154+
date(2152, 11, 26),
155+
date(2162, 12, 6),
156+
date(2172, 11, 15),
157+
date(2182, 11, 25),
158+
date(2192, 12, 4),
159+
date(2202, 12, 15),
160+
date(2212, 11, 24),
161+
date(2222, 12, 4),
162+
date(2232, 12, 12),
163+
date(2242, 11, 23),
164+
date(2252, 12, 1),
165+
date(2262, 12, 11),
166+
date(2272, 11, 20),
167+
date(2282, 11, 30),
168+
date(2292, 12, 9),
169+
date(2302, 11, 20),
170+
date(2312, 11, 29),
171+
date(2322, 12, 9),
172+
date(2332, 11, 18),
173+
date(2342, 11, 28),
174+
date(2352, 12, 7),
175+
date(2362, 12, 17),
176+
date(2372, 11, 26),
177+
date(2382, 12, 6),
178+
date(2392, 12, 14),
179+
date(2402, 11, 25),
180+
date(2412, 12, 3),
181+
date(2422, 12, 13),
182+
date(2432, 11, 23),
183+
date(2442, 12, 2),
184+
date(2452, 12, 11),
185+
]
186+
187+
_DAYS_354 = [29, 30, 29, 30, 29, 30, 29, 30, 29, 30, 29, 30, 29, 30]
188+
_DAYS_355 = [29, 30, 29, 30, 29, 30, 30, 30, 29, 30, 29, 30, 29, 30]
189+
_DAYS_384 = [29, 30, 29, 30, 29, 30, 29, 30, 30, 29, 30, 29, 30, 29, 30]
190+
191+
# Zodiac names in Thai, English, and Numeric representations
192+
_ZODIAC: Dict[int, List[Union[str, int]]] = {
193+
1: [
194+
"ชวด",
195+
"ฉลู",
196+
"ขาล",
197+
"เถาะ",
198+
"มะโรง",
199+
"มะเส็ง",
200+
"มะเมีย",
201+
"มะแม",
202+
"วอก",
203+
"ระกา",
204+
"จอ",
205+
"กุน",
206+
],
207+
2: [
208+
"RAT",
209+
"OX",
210+
"TIGER",
211+
"RABBIT",
212+
"DRAGON",
213+
"SNAKE",
214+
"HORSE",
215+
"GOAT",
216+
"MONKEY",
217+
"ROOSTER",
218+
"DOG",
219+
"PIG",
220+
],
221+
3: list(range(1, 13)),
222+
}
223+
128224

129225
def calculate_f_year_f_dev(year: int) -> Tuple[int, float]:
130-
if year in year_dev:
131-
return year, year_dev[year]
226+
if year in _YEAR_DEV:
227+
return year, _YEAR_DEV[year]
132228

133-
nearest_lower_year = max(y for y in year_dev if y < year)
134-
return nearest_lower_year, year_dev[nearest_lower_year]
229+
nearest_lower_year = max(y for y in _YEAR_DEV if y < year)
230+
return nearest_lower_year, _YEAR_DEV[nearest_lower_year]
135231

136232

137233
def athikamas(year: int) -> bool:
@@ -177,8 +273,8 @@ def last_day_in_year(year: int) -> int:
177273
return 384
178274
elif athikavar(year):
179275
return 355
180-
else:
181-
return 354
276+
277+
return 354
182278

183279

184280
def athikasurathin(year: int) -> bool:
@@ -199,62 +295,27 @@ def athikasurathin(year: int) -> bool:
199295
return True
200296

201297
# All other cases are not leap years
202-
else:
203-
return False
298+
return False
204299

205300

206301
def number_day_in_year(year: int) -> int:
207302
if athikasurathin(year):
208303
return 366
209-
else:
210-
return 365
304+
305+
return 365
211306

212307

213308
def th_zodiac(year: int, output_type: int = 1) -> Union[str, int]:
214309
"""
215310
Thai Zodiac Year Name
216-
Converts a Gregorian year to its corresponding Thai Zodiac name.
311+
Converts a Gregorian year to its corresponding Zodiac name.
217312
218313
:param int year: The Gregorian year. AD (Anno Domini)
219314
:param int output_type: Output Type (1 = Thai, 2 = English, 3 = Number).
220315
221-
:return: The Thai Zodiac name or number corresponding to the input year.
316+
:return: The Zodiac name or number corresponding to the input year.
222317
:rtype: Union[str, int]
223318
"""
224-
225-
# Zodiac names in Thai, English, and Numeric representations
226-
zodiac: dict[int, list[Union[str, int]]] = {
227-
1: [
228-
"ชวด",
229-
"ฉลู",
230-
"ขาล",
231-
"เถาะ",
232-
"มะโรง",
233-
"มะเส็ง",
234-
"มะเมีย",
235-
"มะแม",
236-
"วอก",
237-
"ระกา",
238-
"จอ",
239-
"กุน",
240-
],
241-
2: [
242-
"RAT",
243-
"OX",
244-
"TIGER",
245-
"RABBIT",
246-
"DRAGON",
247-
"SNAKE",
248-
"HORSE",
249-
"GOAT",
250-
"MONKEY",
251-
"ROOSTER",
252-
"DOG",
253-
"PIG",
254-
],
255-
3: list(range(1, 13)),
256-
}
257-
258319
# Calculate zodiac index
259320
result = year % 12
260321
if result - 3 < 1:
@@ -263,70 +324,7 @@ def th_zodiac(year: int, output_type: int = 1) -> Union[str, int]:
263324
result = result - 3
264325

265326
# Return the zodiac based on the output type
266-
return zodiac[output_type][result - 1]
267-
268-
269-
_BEGIN_DATES = [
270-
date(1902, 11, 30),
271-
date(1912, 12, 8),
272-
date(1922, 11, 19),
273-
date(1932, 11, 27),
274-
date(1942, 12, 7),
275-
date(1952, 11, 16),
276-
date(1962, 11, 26),
277-
date(1972, 12, 5),
278-
date(1982, 11, 15),
279-
date(1992, 11, 24),
280-
date(2002, 12, 4),
281-
date(2012, 11, 13),
282-
date(2022, 11, 23),
283-
date(2032, 12, 2),
284-
date(2042, 12, 12),
285-
date(2052, 11, 21),
286-
date(2062, 12, 1),
287-
date(2072, 12, 9),
288-
date(2082, 11, 20),
289-
date(2092, 11, 28),
290-
date(2102, 12, 9),
291-
date(2112, 11, 18),
292-
date(2122, 11, 28),
293-
date(2132, 12, 7),
294-
date(2142, 11, 17),
295-
date(2152, 11, 26),
296-
date(2162, 12, 6),
297-
date(2172, 11, 15),
298-
date(2182, 11, 25),
299-
date(2192, 12, 4),
300-
date(2202, 12, 15),
301-
date(2212, 11, 24),
302-
date(2222, 12, 4),
303-
date(2232, 12, 12),
304-
date(2242, 11, 23),
305-
date(2252, 12, 1),
306-
date(2262, 12, 11),
307-
date(2272, 11, 20),
308-
date(2282, 11, 30),
309-
date(2292, 12, 9),
310-
date(2302, 11, 20),
311-
date(2312, 11, 29),
312-
date(2322, 12, 9),
313-
date(2332, 11, 18),
314-
date(2342, 11, 28),
315-
date(2352, 12, 7),
316-
date(2362, 12, 17),
317-
date(2372, 11, 26),
318-
date(2382, 12, 6),
319-
date(2392, 12, 14),
320-
date(2402, 11, 25),
321-
date(2412, 12, 3),
322-
date(2422, 12, 13),
323-
date(2432, 11, 23),
324-
date(2442, 12, 2),
325-
date(2452, 12, 11),
326-
]
327-
_DAYS_354 = [29, 30, 29, 30, 29, 30, 29, 30, 29, 30, 29, 30, 29, 30]
328-
_DAYS_355 = [29, 30, 29, 30, 29, 30, 30, 30, 29, 30, 29, 30, 29, 30]
329-
_DAYS_384 = [29, 30, 29, 30, 29, 30, 29, 30, 30, 29, 30, 29, 30, 29, 30]
327+
return _ZODIAC[output_type][result - 1]
330328

331329

332330
def to_lunar_date(input_date: date) -> str:

0 commit comments

Comments
 (0)