vacanza/holidays

The calculation of the lunar start date throws a TypeError exception for Thailand and Cambodia

Closed this issue · 4 comments

version: 0.47
stack trace:
"python39\lib\site-packages\holidays\calendars\thai.py", line 233, in _get_start_date
return _ThaiLunisolar.START_DATE + td(days=delta_days)
TypeError: unsupported type for timedelta days component: numpy.int32

I'm not really sure if that's a PH bug as it involves numpy based on what I'm seeing.
Could you provide more information on how to reproduce the issue?

Thank you!

I'm not really sure if that's a PH bug as it involves numpy based on what I'm seeing. Could you provide more information on how to reproduce the issue?

Thank you!

Apologies, I encountered a TypeError while using the 'get_holiday_names' method from the Prophet algorithm provided(version:1.1.5) by Facebook.
This error specifically occurred when calculating holidays for only Thailand and Cambodia among the available countries.
The numpy type is passed into the holidays code from Prophet.
I attempted to resolve the issue by modifying line 233, adding an integer type conversion, which prevents the error (return _ThaiLunisolar.START_DATE + td(days=int(delta_days)))

【Here is the full stack trace】
File "D:\Program Files (x86)\language\python39\lib\site-packages\prophet\forecaster.py", line 769, in add_country_holidays
for name in get_holiday_names(country_name):
File "D:\Program Files (x86)\language\python39\lib\site-packages\prophet\make_holidays.py", line 50, in get_holiday_names
return set(country_holidays(language="en_US", years=np.arange(1995, 2045)).values())
File "D:\Program Files (x86)\language\python39\lib\site-packages\holidays\registry.py", line 207, in call
return cls(*args, **kwargs) # type: ignore[misc, operator]
File "D:\Program Files (x86)\language\python39\lib\site-packages\holidays\countries\thailand.py", line 151, in init
super().init(*args, **kwargs)
File "D:\Program Files (x86)\language\python39\lib\site-packages\holidays\observed_holiday_base.py", line 103, in init
super().init(*args, **kwargs)
File "D:\Program Files (x86)\language\python39\lib\site-packages\holidays\holiday_base.py", line 372, in init
self._populate(year)
File "D:\Program Files (x86)\language\python39\lib\site-packages\holidays\holiday_base.py", line 793, in _populate
self._populate_common_holidays()
File "D:\Program Files (x86)\language\python39\lib\site-packages\holidays\observed_holiday_base.py", line 183, in _populate_common_holidays
super()._populate_common_holidays()
File "D:\Program Files (x86)\language\python39\lib\site-packages\holidays\holiday_base.py", line 800, in _populate_common_holidays
pch_method()
File "D:\Program Files (x86)\language\python39\lib\site-packages\holidays\countries\thailand.py", line 436, in _populate_public_holidays
makha_bucha_date = self._add_makha_bucha(tr("วันมาฆบูชา"))
File "D:\Program Files (x86)\language\python39\lib\site-packages\holidays\groups\thai.py", line 138, in _add_makha_bucha
name, self._thai_calendar.makha_bucha_date(self._year, calendar)
File "D:\Program Files (x86)\language\python39\lib\site-packages\holidays\calendars\thai.py", line 266, in makha_bucha_date
start_date = self._get_start_date(year)
File "D:\Program Files (x86)\language\python39\lib\site-packages\holidays\calendars\thai.py", line 233, in _get_start_date
return _ThaiLunisolar.START_DATE + td(days=delta_days)
TypeError: unsupported type for timedelta days component: numpy.int32

Could be related to facebook/prophet#2563, but I'm not sure.

@coderX-thinkerL thanks for providing more details. I'll look into our options here this week.