77"""
88
99from 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 ,
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
129225def 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
137233def 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
184280def 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
206301def 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
213308def 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
332330def to_lunar_date (input_date : date ) -> str :
0 commit comments