We are currently solving the following issue within our repository. Here is the issue text:
--- BEGIN ISSUE ---
The calculation of the lunar start date throws a TypeError exception for Thailand and Cambodia
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

--- END ISSUE ---

Below are some code segments, each from a relevant file. One or more of these files may contain bugs.
--- BEGIN FILES ---
Path: `holidays/helpers.py`
Content:
```
1 #  holidays
2 #  --------
3 #  A fast, efficient Python library for generating country, province and state
4 #  specific sets of holidays on the fly. It aims to make determining whether a
5 #  specific date is a holiday as fast and flexible as possible.
6 #
7 #  Authors: Vacanza Team and individual contributors (see AUTHORS file)
8 #           dr-prodigy <dr.prodigy.github@gmail.com> (c) 2017-2023
9 #           ryanss <ryanssdev@icloud.com> (c) 2014-2017
10 #  Website: https://github.com/vacanza/python-holidays
11 #  License: MIT (see LICENSE file)
12 
13 
14 def _normalize_arguments(cls, value):
15     """Normalize arguments.
16 
17     :param cls:
18         A type of arguments to normalize.
19 
20     :param value:
21         Either a single item or an iterable of `cls` type.
22 
23     :return:
24         A set created from `value` argument.
25 
26     """
27     if isinstance(value, cls):
28         return {value}
29 
30     return set(value) if value is not None else set()
31 
32 
33 def _normalize_tuple(data):
34     """Normalize tuple.
35 
36     :param data:
37         Either a tuple or a tuple of tuples.
38 
39     :return:
40         An unchanged object for tuple of tuples, e.g., ((JAN, 10), (DEC, 31)).
41         An object put into a tuple otherwise, e.g., ((JAN, 10),).
42     """
43     return data if not data or isinstance(data[0], tuple) else (data,)
44
```
--- END FILES ---

Please first localize the bug based on the issue statement, and then generate a patch according to the `git diff` format fenced by three backticks.

Here is an example:

```diff
diff --git a/examples/server_async.py b/examples/server_async.py
--- a/examples/server_async.py
+++ b/examples/server_async.py
@@ -313,4 +313,4 @@
 
 
 if __name__ == "__main__":
-    asyncio.run(run_async_server("."), debug=True)
+    asyncio.run(run_async_server(), debug=True)
diff --git a/examples/server_sync.py b/examples/server_sync.py
--- a/examples/server_sync.py
+++ b/examples/server_sync.py
@@ -313,5 +313,5 @@
 
 
 if __name__ == "__main__":
-    server = run_sync_server(".")
+    server = run_sync_server()
     server.shutdown()

```

diff --git a/holidays/helpers.py b/holidays/helpers.py
--- a/holidays/helpers.py
+++ b/holidays/helpers.py
@@ -24,13 +24,19 @@
         A set created from `value` argument.
 
     """
+    if value is None:
+        return set()
+
     if isinstance(value, cls):
         return {value}
 
-    return set(value) if value is not None else set()
+    try:
+        return {v if isinstance(v, cls) else cls(v) for v in value}
+    except TypeError:  # non-iterable
+        return {value if isinstance(value, cls) else cls(value)}
 
 
-def _normalize_tuple(data):
+def _normalize_tuple(value):
     """Normalize tuple.
 
     :param data:
@@ -40,4 +46,4 @@
         An unchanged object for tuple of tuples, e.g., ((JAN, 10), (DEC, 31)).
         An object put into a tuple otherwise, e.g., ((JAN, 10),).
     """
-    return data if not data or isinstance(data[0], tuple) else (data,)
+    return value if not value or isinstance(value[0], tuple) else (value,)

{"golden_diff": "diff --git a/holidays/helpers.py b/holidays/helpers.py\n--- a/holidays/helpers.py\n+++ b/holidays/helpers.py\n@@ -24,13 +24,19 @@\n         A set created from `value` argument.\n \n     \"\"\"\n+    if value is None:\n+        return set()\n+\n     if isinstance(value, cls):\n         return {value}\n \n-    return set(value) if value is not None else set()\n+    try:\n+        return {v if isinstance(v, cls) else cls(v) for v in value}\n+    except TypeError:  # non-iterable\n+        return {value if isinstance(value, cls) else cls(value)}\n \n \n-def _normalize_tuple(data):\n+def _normalize_tuple(value):\n     \"\"\"Normalize tuple.\n \n     :param data:\n@@ -40,4 +46,4 @@\n         An unchanged object for tuple of tuples, e.g., ((JAN, 10), (DEC, 31)).\n         An object put into a tuple otherwise, e.g., ((JAN, 10),).\n     \"\"\"\n-    return data if not data or isinstance(data[0], tuple) else (data,)\n+    return value if not value or isinstance(value[0], tuple) else (value,)\n", "issue": "The calculation of the lunar start date throws a TypeError exception for Thailand and Cambodia\nversion: 0.47\r\nstack trace:\r\n\"python39\\lib\\site-packages\\holidays\\calendars\\thai.py\", line 233, in _get_start_date\r\n    return _ThaiLunisolar.START_DATE + td(days=delta_days)\r\nTypeError: unsupported type for timedelta days component: numpy.int32\n", "before_files": [{"content": "#  holidays\n#  --------\n#  A fast, efficient Python library for generating country, province and state\n#  specific sets of holidays on the fly. It aims to make determining whether a\n#  specific date is a holiday as fast and flexible as possible.\n#\n#  Authors: Vacanza Team and individual contributors (see AUTHORS file)\n#           dr-prodigy <dr.prodigy.github@gmail.com> (c) 2017-2023\n#           ryanss <ryanssdev@icloud.com> (c) 2014-2017\n#  Website: https://github.com/vacanza/python-holidays\n#  License: MIT (see LICENSE file)\n\n\ndef _normalize_arguments(cls, value):\n    \"\"\"Normalize arguments.\n\n    :param cls:\n        A type of arguments to normalize.\n\n    :param value:\n        Either a single item or an iterable of `cls` type.\n\n    :return:\n        A set created from `value` argument.\n\n    \"\"\"\n    if isinstance(value, cls):\n        return {value}\n\n    return set(value) if value is not None else set()\n\n\ndef _normalize_tuple(data):\n    \"\"\"Normalize tuple.\n\n    :param data:\n        Either a tuple or a tuple of tuples.\n\n    :return:\n        An unchanged object for tuple of tuples, e.g., ((JAN, 10), (DEC, 31)).\n        An object put into a tuple otherwise, e.g., ((JAN, 10),).\n    \"\"\"\n    return data if not data or isinstance(data[0], tuple) else (data,)\n", "path": "holidays/helpers.py"}], "after_files": [{"content": "#  holidays\n#  --------\n#  A fast, efficient Python library for generating country, province and state\n#  specific sets of holidays on the fly. It aims to make determining whether a\n#  specific date is a holiday as fast and flexible as possible.\n#\n#  Authors: Vacanza Team and individual contributors (see AUTHORS file)\n#           dr-prodigy <dr.prodigy.github@gmail.com> (c) 2017-2023\n#           ryanss <ryanssdev@icloud.com> (c) 2014-2017\n#  Website: https://github.com/vacanza/python-holidays\n#  License: MIT (see LICENSE file)\n\n\ndef _normalize_arguments(cls, value):\n    \"\"\"Normalize arguments.\n\n    :param cls:\n        A type of arguments to normalize.\n\n    :param value:\n        Either a single item or an iterable of `cls` type.\n\n    :return:\n        A set created from `value` argument.\n\n    \"\"\"\n    if value is None:\n        return set()\n\n    if isinstance(value, cls):\n        return {value}\n\n    try:\n        return {v if isinstance(v, cls) else cls(v) for v in value}\n    except TypeError:  # non-iterable\n        return {value if isinstance(value, cls) else cls(value)}\n\n\ndef _normalize_tuple(value):\n    \"\"\"Normalize tuple.\n\n    :param data:\n        Either a tuple or a tuple of tuples.\n\n    :return:\n        An unchanged object for tuple of tuples, e.g., ((JAN, 10), (DEC, 31)).\n        An object put into a tuple otherwise, e.g., ((JAN, 10),).\n    \"\"\"\n    return value if not value or isinstance(value[0], tuple) else (value,)\n", "path": "holidays/helpers.py"}]}