We are currently solving the following issue within our repository. Here is the issue text:
--- BEGIN ISSUE ---
pop_named() sometimes generates an exception
This simple code block generates an exception when I try to pop "Columbus Day" (last line):

```
from datetime import date
  
import holidays

us_holidays = holidays.CountryHoliday('US', prov=None, state='CA', years=2022)

print(us_holidays.get('2022-10-10').format("%s"))

us_holidays.pop_named("Columbus Day")
```

The exception is `dictionary changed size during iteration`, and it seems to be related to popping elements out of a dictionary while you're iterating through it: https://stackoverflow.com/questions/11941817/how-to-avoid-runtimeerror-dictionary-changed-size-during-iteration-error.  The element to be popped isn't actually removed.

I'm far from a competent Python programmer, but iterating over `list(self)` seems to solve the problem for me - no exception, and the item is removed properly:

```
    def get_named(self, name):
        # find all dates matching provided name (accepting partial
        # strings too, case insensitive), returning them in a list
        return [key for key in list(self) if name.lower() in self[key].lower()]
```

--- 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/holiday_base.py`
Content:
```
1 # -*- coding: utf-8 -*-
2 
3 #  python-holidays
4 #  ---------------
5 #  A fast, efficient Python library for generating country, province and state
6 #  specific sets of holidays on the fly. It aims to make determining whether a
7 #  specific date is a holiday as fast and flexible as possible.
8 #
9 #  Author:  ryanss <ryanssdev@icloud.com> (c) 2014-2017
10 #           dr-prodigy <maurizio.montel@gmail.com> (c) 2017-2020
11 #  Website: https://github.com/dr-prodigy/python-holidays
12 #  License: MIT (see LICENSE file)
13 
14 from datetime import timedelta, datetime, date
15 
16 import six
17 from dateutil.parser import parse
18 
19 
20 class HolidayBase(dict):
21     PROVINCES = []
22 
23     def __init__(self, years=[], expand=True, observed=True,
24                  prov=None, state=None):
25         self.observed = observed
26         self.expand = expand
27         if isinstance(years, int):
28             years = [years, ]
29         self.years = set(years)
30         if not getattr(self, 'prov', False):
31             self.prov = prov
32         self.state = state
33         for year in list(self.years):
34             self._populate(year)
35 
36     def __setattr__(self, key, value):
37         if key == 'observed' and len(self) > 0:
38             dict.__setattr__(self, key, value)
39             if value is True:
40                 # Add (Observed) dates
41                 years = list(self.years)
42                 self.years = set()
43                 self.clear()
44                 for year in years:
45                     self._populate(year)
46             else:
47                 # Remove (Observed) dates
48                 for k, v in list(self.items()):
49                     if v.find("Observed") >= 0:
50                         del self[k]
51         else:
52             return dict.__setattr__(self, key, value)
53 
54     def __keytransform__(self, key):
55         if isinstance(key, datetime):
56             key = key.date()
57         elif isinstance(key, date):
58             key = key
59         elif isinstance(key, int) or isinstance(key, float):
60             key = datetime.utcfromtimestamp(key).date()
61         elif isinstance(key, six.string_types):
62             try:
63                 key = parse(key).date()
64             except (ValueError, OverflowError):
65                 raise ValueError("Cannot parse date from string '%s'" % key)
66         else:
67             raise TypeError("Cannot convert type '%s' to date." % type(key))
68 
69         if self.expand and key.year not in self.years:
70             self.years.add(key.year)
71             self._populate(key.year)
72         return key
73 
74     def __contains__(self, key):
75         return dict.__contains__(self, self.__keytransform__(key))
76 
77     def __getitem__(self, key):
78         if isinstance(key, slice):
79             if not key.start or not key.stop:
80                 raise ValueError("Both start and stop must be given.")
81 
82             start = self.__keytransform__(key.start)
83             stop = self.__keytransform__(key.stop)
84 
85             if key.step is None:
86                 step = 1
87             elif isinstance(key.step, timedelta):
88                 step = key.step.days
89             elif isinstance(key.step, int):
90                 step = key.step
91             else:
92                 raise TypeError(
93                     "Cannot convert type '%s' to int." % type(key.step)
94                 )
95 
96             if step == 0:
97                 raise ValueError('Step value must not be zero.')
98 
99             date_diff = stop - start
100             if date_diff.days < 0 <= step or date_diff.days >= 0 > step:
101                 step *= -1
102 
103             days_in_range = []
104             for delta_days in range(0, date_diff.days, step):
105                 day = start + timedelta(days=delta_days)
106                 try:
107                     dict.__getitem__(
108                         self,
109                         day
110                     )
111                     days_in_range.append(day)
112                 except KeyError:
113                     pass
114             return days_in_range
115         return dict.__getitem__(self, self.__keytransform__(key))
116 
117     def __setitem__(self, key, value):
118         if key in self:
119             if self.get(key).find(value) < 0 \
120                     and value.find(self.get(key)) < 0:
121                 value = "%s, %s" % (value, self.get(key))
122             else:
123                 value = self.get(key)
124         return dict.__setitem__(self, self.__keytransform__(key), value)
125 
126     def update(self, *args):
127         args = list(args)
128         for arg in args:
129             if isinstance(arg, dict):
130                 for key, value in list(arg.items()):
131                     self[key] = value
132             elif isinstance(arg, list):
133                 for item in arg:
134                     self[item] = "Holiday"
135             else:
136                 self[arg] = "Holiday"
137 
138     def append(self, *args):
139         return self.update(*args)
140 
141     def get(self, key, default=None):
142         return dict.get(self, self.__keytransform__(key), default)
143 
144     def get_list(self, key):
145         return [h for h in self.get(key, "").split(", ") if h]
146 
147     def get_named(self, name):
148         # find all dates matching provided name (accepting partial
149         # strings too, case insensitive), returning them in a list
150         return [key for key in self if name.lower() in self[key].lower()]
151 
152     def pop(self, key, default=None):
153         if default is None:
154             return dict.pop(self, self.__keytransform__(key))
155         return dict.pop(self, self.__keytransform__(key), default)
156 
157     def pop_named(self, name):
158         to_pop = self.get_named(name)
159         if not to_pop:
160             raise KeyError(name)
161         for key in to_pop:
162             self.pop(key)
163         return to_pop
164 
165     def __eq__(self, other):
166         return dict.__eq__(self, other) and self.__dict__ == other.__dict__
167 
168     def __ne__(self, other):
169         return dict.__ne__(self, other) or self.__dict__ != other.__dict__
170 
171     def __add__(self, other):
172         if isinstance(other, int) and other == 0:
173             # Required to sum() list of holidays
174             # sum([h1, h2]) is equivalent to (0 + h1 + h2)
175             return self
176         elif not isinstance(other, HolidayBase):
177             raise TypeError()
178         HolidaySum = createHolidaySum(self, other)
179         country = (getattr(self, 'country', None) or
180                    getattr(other, 'country', None))
181         if self.country and other.country and self.country != other.country:
182             c1 = self.country
183             if not isinstance(c1, list):
184                 c1 = [c1]
185             c2 = other.country
186             if not isinstance(c2, list):
187                 c2 = [c2]
188             country = c1 + c2
189         prov = getattr(self, 'prov', None) or getattr(other, 'prov', None)
190         if self.prov and other.prov and self.prov != other.prov:
191             p1 = self.prov if isinstance(self.prov, list) else [self.prov]
192             p2 = other.prov if isinstance(other.prov, list) else [other.prov]
193             prov = p1 + p2
194         return HolidaySum(years=(self.years | other.years),
195                           expand=(self.expand or other.expand),
196                           observed=(self.observed or other.observed),
197                           country=country, prov=prov)
198 
199     def __radd__(self, other):
200         return self.__add__(other)
201 
202     def _populate(self, year):
203         pass
204 
205 
206 def createHolidaySum(h1, h2):
207     class HolidaySum(HolidayBase):
208 
209         def __init__(self, country, **kwargs):
210             self.country = country
211             self.holidays = []
212             if getattr(h1, 'holidays', False):
213                 for h in h1.holidays:
214                     self.holidays.append(h)
215             else:
216                 self.holidays.append(h1)
217             if getattr(h2, 'holidays', False):
218                 for h in h2.holidays:
219                     self.holidays.append(h)
220             else:
221                 self.holidays.append(h2)
222             HolidayBase.__init__(self, **kwargs)
223 
224         def _populate(self, year):
225             for h in self.holidays[::-1]:
226                 h._populate(year)
227                 self.update(h)
228 
229     return HolidaySum
230
```
--- 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/holiday_base.py b/holidays/holiday_base.py
--- a/holidays/holiday_base.py
+++ b/holidays/holiday_base.py
@@ -147,7 +147,8 @@
     def get_named(self, name):
         # find all dates matching provided name (accepting partial
         # strings too, case insensitive), returning them in a list
-        return [key for key in self if name.lower() in self[key].lower()]
+        matches = [key for key in self if name.lower() in self[key].lower()]
+        return matches
 
     def pop(self, key, default=None):
         if default is None:

{"golden_diff": "diff --git a/holidays/holiday_base.py b/holidays/holiday_base.py\n--- a/holidays/holiday_base.py\n+++ b/holidays/holiday_base.py\n@@ -147,7 +147,8 @@\n     def get_named(self, name):\n         # find all dates matching provided name (accepting partial\n         # strings too, case insensitive), returning them in a list\n-        return [key for key in self if name.lower() in self[key].lower()]\n+        matches = [key for key in self if name.lower() in self[key].lower()]\n+        return matches\n \n     def pop(self, key, default=None):\n         if default is None:\n", "issue": "pop_named() sometimes generates an exception\nThis simple code block generates an exception when I try to pop \"Columbus Day\" (last line):\r\n\r\n```\r\nfrom datetime import date\r\n  \r\nimport holidays\r\n\r\nus_holidays = holidays.CountryHoliday('US', prov=None, state='CA', years=2022)\r\n\r\nprint(us_holidays.get('2022-10-10').format(\"%s\"))\r\n\r\nus_holidays.pop_named(\"Columbus Day\")\r\n```\r\n\r\nThe exception is `dictionary changed size during iteration`, and it seems to be related to popping elements out of a dictionary while you're iterating through it: https://stackoverflow.com/questions/11941817/how-to-avoid-runtimeerror-dictionary-changed-size-during-iteration-error.  The element to be popped isn't actually removed.\r\n\r\nI'm far from a competent Python programmer, but iterating over `list(self)` seems to solve the problem for me - no exception, and the item is removed properly:\r\n\r\n```\r\n    def get_named(self, name):\r\n        # find all dates matching provided name (accepting partial\r\n        # strings too, case insensitive), returning them in a list\r\n        return [key for key in list(self) if name.lower() in self[key].lower()]\r\n```\n", "before_files": [{"content": "# -*- coding: utf-8 -*-\n\n#  python-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#  Author:  ryanss <ryanssdev@icloud.com> (c) 2014-2017\n#           dr-prodigy <maurizio.montel@gmail.com> (c) 2017-2020\n#  Website: https://github.com/dr-prodigy/python-holidays\n#  License: MIT (see LICENSE file)\n\nfrom datetime import timedelta, datetime, date\n\nimport six\nfrom dateutil.parser import parse\n\n\nclass HolidayBase(dict):\n    PROVINCES = []\n\n    def __init__(self, years=[], expand=True, observed=True,\n                 prov=None, state=None):\n        self.observed = observed\n        self.expand = expand\n        if isinstance(years, int):\n            years = [years, ]\n        self.years = set(years)\n        if not getattr(self, 'prov', False):\n            self.prov = prov\n        self.state = state\n        for year in list(self.years):\n            self._populate(year)\n\n    def __setattr__(self, key, value):\n        if key == 'observed' and len(self) > 0:\n            dict.__setattr__(self, key, value)\n            if value is True:\n                # Add (Observed) dates\n                years = list(self.years)\n                self.years = set()\n                self.clear()\n                for year in years:\n                    self._populate(year)\n            else:\n                # Remove (Observed) dates\n                for k, v in list(self.items()):\n                    if v.find(\"Observed\") >= 0:\n                        del self[k]\n        else:\n            return dict.__setattr__(self, key, value)\n\n    def __keytransform__(self, key):\n        if isinstance(key, datetime):\n            key = key.date()\n        elif isinstance(key, date):\n            key = key\n        elif isinstance(key, int) or isinstance(key, float):\n            key = datetime.utcfromtimestamp(key).date()\n        elif isinstance(key, six.string_types):\n            try:\n                key = parse(key).date()\n            except (ValueError, OverflowError):\n                raise ValueError(\"Cannot parse date from string '%s'\" % key)\n        else:\n            raise TypeError(\"Cannot convert type '%s' to date.\" % type(key))\n\n        if self.expand and key.year not in self.years:\n            self.years.add(key.year)\n            self._populate(key.year)\n        return key\n\n    def __contains__(self, key):\n        return dict.__contains__(self, self.__keytransform__(key))\n\n    def __getitem__(self, key):\n        if isinstance(key, slice):\n            if not key.start or not key.stop:\n                raise ValueError(\"Both start and stop must be given.\")\n\n            start = self.__keytransform__(key.start)\n            stop = self.__keytransform__(key.stop)\n\n            if key.step is None:\n                step = 1\n            elif isinstance(key.step, timedelta):\n                step = key.step.days\n            elif isinstance(key.step, int):\n                step = key.step\n            else:\n                raise TypeError(\n                    \"Cannot convert type '%s' to int.\" % type(key.step)\n                )\n\n            if step == 0:\n                raise ValueError('Step value must not be zero.')\n\n            date_diff = stop - start\n            if date_diff.days < 0 <= step or date_diff.days >= 0 > step:\n                step *= -1\n\n            days_in_range = []\n            for delta_days in range(0, date_diff.days, step):\n                day = start + timedelta(days=delta_days)\n                try:\n                    dict.__getitem__(\n                        self,\n                        day\n                    )\n                    days_in_range.append(day)\n                except KeyError:\n                    pass\n            return days_in_range\n        return dict.__getitem__(self, self.__keytransform__(key))\n\n    def __setitem__(self, key, value):\n        if key in self:\n            if self.get(key).find(value) < 0 \\\n                    and value.find(self.get(key)) < 0:\n                value = \"%s, %s\" % (value, self.get(key))\n            else:\n                value = self.get(key)\n        return dict.__setitem__(self, self.__keytransform__(key), value)\n\n    def update(self, *args):\n        args = list(args)\n        for arg in args:\n            if isinstance(arg, dict):\n                for key, value in list(arg.items()):\n                    self[key] = value\n            elif isinstance(arg, list):\n                for item in arg:\n                    self[item] = \"Holiday\"\n            else:\n                self[arg] = \"Holiday\"\n\n    def append(self, *args):\n        return self.update(*args)\n\n    def get(self, key, default=None):\n        return dict.get(self, self.__keytransform__(key), default)\n\n    def get_list(self, key):\n        return [h for h in self.get(key, \"\").split(\", \") if h]\n\n    def get_named(self, name):\n        # find all dates matching provided name (accepting partial\n        # strings too, case insensitive), returning them in a list\n        return [key for key in self if name.lower() in self[key].lower()]\n\n    def pop(self, key, default=None):\n        if default is None:\n            return dict.pop(self, self.__keytransform__(key))\n        return dict.pop(self, self.__keytransform__(key), default)\n\n    def pop_named(self, name):\n        to_pop = self.get_named(name)\n        if not to_pop:\n            raise KeyError(name)\n        for key in to_pop:\n            self.pop(key)\n        return to_pop\n\n    def __eq__(self, other):\n        return dict.__eq__(self, other) and self.__dict__ == other.__dict__\n\n    def __ne__(self, other):\n        return dict.__ne__(self, other) or self.__dict__ != other.__dict__\n\n    def __add__(self, other):\n        if isinstance(other, int) and other == 0:\n            # Required to sum() list of holidays\n            # sum([h1, h2]) is equivalent to (0 + h1 + h2)\n            return self\n        elif not isinstance(other, HolidayBase):\n            raise TypeError()\n        HolidaySum = createHolidaySum(self, other)\n        country = (getattr(self, 'country', None) or\n                   getattr(other, 'country', None))\n        if self.country and other.country and self.country != other.country:\n            c1 = self.country\n            if not isinstance(c1, list):\n                c1 = [c1]\n            c2 = other.country\n            if not isinstance(c2, list):\n                c2 = [c2]\n            country = c1 + c2\n        prov = getattr(self, 'prov', None) or getattr(other, 'prov', None)\n        if self.prov and other.prov and self.prov != other.prov:\n            p1 = self.prov if isinstance(self.prov, list) else [self.prov]\n            p2 = other.prov if isinstance(other.prov, list) else [other.prov]\n            prov = p1 + p2\n        return HolidaySum(years=(self.years | other.years),\n                          expand=(self.expand or other.expand),\n                          observed=(self.observed or other.observed),\n                          country=country, prov=prov)\n\n    def __radd__(self, other):\n        return self.__add__(other)\n\n    def _populate(self, year):\n        pass\n\n\ndef createHolidaySum(h1, h2):\n    class HolidaySum(HolidayBase):\n\n        def __init__(self, country, **kwargs):\n            self.country = country\n            self.holidays = []\n            if getattr(h1, 'holidays', False):\n                for h in h1.holidays:\n                    self.holidays.append(h)\n            else:\n                self.holidays.append(h1)\n            if getattr(h2, 'holidays', False):\n                for h in h2.holidays:\n                    self.holidays.append(h)\n            else:\n                self.holidays.append(h2)\n            HolidayBase.__init__(self, **kwargs)\n\n        def _populate(self, year):\n            for h in self.holidays[::-1]:\n                h._populate(year)\n                self.update(h)\n\n    return HolidaySum\n", "path": "holidays/holiday_base.py"}], "after_files": [{"content": "# -*- coding: utf-8 -*-\n\n#  python-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#  Author:  ryanss <ryanssdev@icloud.com> (c) 2014-2017\n#           dr-prodigy <maurizio.montel@gmail.com> (c) 2017-2020\n#  Website: https://github.com/dr-prodigy/python-holidays\n#  License: MIT (see LICENSE file)\n\nfrom datetime import timedelta, datetime, date\n\nimport six\nfrom dateutil.parser import parse\n\n\nclass HolidayBase(dict):\n    PROVINCES = []\n\n    def __init__(self, years=[], expand=True, observed=True,\n                 prov=None, state=None):\n        self.observed = observed\n        self.expand = expand\n        if isinstance(years, int):\n            years = [years, ]\n        self.years = set(years)\n        if not getattr(self, 'prov', False):\n            self.prov = prov\n        self.state = state\n        for year in list(self.years):\n            self._populate(year)\n\n    def __setattr__(self, key, value):\n        if key == 'observed' and len(self) > 0:\n            dict.__setattr__(self, key, value)\n            if value is True:\n                # Add (Observed) dates\n                years = list(self.years)\n                self.years = set()\n                self.clear()\n                for year in years:\n                    self._populate(year)\n            else:\n                # Remove (Observed) dates\n                for k, v in list(self.items()):\n                    if v.find(\"Observed\") >= 0:\n                        del self[k]\n        else:\n            return dict.__setattr__(self, key, value)\n\n    def __keytransform__(self, key):\n        if isinstance(key, datetime):\n            key = key.date()\n        elif isinstance(key, date):\n            key = key\n        elif isinstance(key, int) or isinstance(key, float):\n            key = datetime.utcfromtimestamp(key).date()\n        elif isinstance(key, six.string_types):\n            try:\n                key = parse(key).date()\n            except (ValueError, OverflowError):\n                raise ValueError(\"Cannot parse date from string '%s'\" % key)\n        else:\n            raise TypeError(\"Cannot convert type '%s' to date.\" % type(key))\n\n        if self.expand and key.year not in self.years:\n            self.years.add(key.year)\n            self._populate(key.year)\n        return key\n\n    def __contains__(self, key):\n        return dict.__contains__(self, self.__keytransform__(key))\n\n    def __getitem__(self, key):\n        if isinstance(key, slice):\n            if not key.start or not key.stop:\n                raise ValueError(\"Both start and stop must be given.\")\n\n            start = self.__keytransform__(key.start)\n            stop = self.__keytransform__(key.stop)\n\n            if key.step is None:\n                step = 1\n            elif isinstance(key.step, timedelta):\n                step = key.step.days\n            elif isinstance(key.step, int):\n                step = key.step\n            else:\n                raise TypeError(\n                    \"Cannot convert type '%s' to int.\" % type(key.step)\n                )\n\n            if step == 0:\n                raise ValueError('Step value must not be zero.')\n\n            date_diff = stop - start\n            if date_diff.days < 0 <= step or date_diff.days >= 0 > step:\n                step *= -1\n\n            days_in_range = []\n            for delta_days in range(0, date_diff.days, step):\n                day = start + timedelta(days=delta_days)\n                try:\n                    dict.__getitem__(\n                        self,\n                        day\n                    )\n                    days_in_range.append(day)\n                except KeyError:\n                    pass\n            return days_in_range\n        return dict.__getitem__(self, self.__keytransform__(key))\n\n    def __setitem__(self, key, value):\n        if key in self:\n            if self.get(key).find(value) < 0 \\\n                    and value.find(self.get(key)) < 0:\n                value = \"%s, %s\" % (value, self.get(key))\n            else:\n                value = self.get(key)\n        return dict.__setitem__(self, self.__keytransform__(key), value)\n\n    def update(self, *args):\n        args = list(args)\n        for arg in args:\n            if isinstance(arg, dict):\n                for key, value in list(arg.items()):\n                    self[key] = value\n            elif isinstance(arg, list):\n                for item in arg:\n                    self[item] = \"Holiday\"\n            else:\n                self[arg] = \"Holiday\"\n\n    def append(self, *args):\n        return self.update(*args)\n\n    def get(self, key, default=None):\n        return dict.get(self, self.__keytransform__(key), default)\n\n    def get_list(self, key):\n        return [h for h in self.get(key, \"\").split(\", \") if h]\n\n    def get_named(self, name):\n        # find all dates matching provided name (accepting partial\n        # strings too, case insensitive), returning them in a list\n        matches = [key for key in self if name.lower() in self[key].lower()]\n        return matches\n\n    def pop(self, key, default=None):\n        if default is None:\n            return dict.pop(self, self.__keytransform__(key))\n        return dict.pop(self, self.__keytransform__(key), default)\n\n    def pop_named(self, name):\n        to_pop = self.get_named(name)\n        if not to_pop:\n            raise KeyError(name)\n        for key in to_pop:\n            self.pop(key)\n        return to_pop\n\n    def __eq__(self, other):\n        return dict.__eq__(self, other) and self.__dict__ == other.__dict__\n\n    def __ne__(self, other):\n        return dict.__ne__(self, other) or self.__dict__ != other.__dict__\n\n    def __add__(self, other):\n        if isinstance(other, int) and other == 0:\n            # Required to sum() list of holidays\n            # sum([h1, h2]) is equivalent to (0 + h1 + h2)\n            return self\n        elif not isinstance(other, HolidayBase):\n            raise TypeError()\n        HolidaySum = createHolidaySum(self, other)\n        country = (getattr(self, 'country', None) or\n                   getattr(other, 'country', None))\n        if self.country and other.country and self.country != other.country:\n            c1 = self.country\n            if not isinstance(c1, list):\n                c1 = [c1]\n            c2 = other.country\n            if not isinstance(c2, list):\n                c2 = [c2]\n            country = c1 + c2\n        prov = getattr(self, 'prov', None) or getattr(other, 'prov', None)\n        if self.prov and other.prov and self.prov != other.prov:\n            p1 = self.prov if isinstance(self.prov, list) else [self.prov]\n            p2 = other.prov if isinstance(other.prov, list) else [other.prov]\n            prov = p1 + p2\n        return HolidaySum(years=(self.years | other.years),\n                          expand=(self.expand or other.expand),\n                          observed=(self.observed or other.observed),\n                          country=country, prov=prov)\n\n    def __radd__(self, other):\n        return self.__add__(other)\n\n    def _populate(self, year):\n        pass\n\n\ndef createHolidaySum(h1, h2):\n    class HolidaySum(HolidayBase):\n\n        def __init__(self, country, **kwargs):\n            self.country = country\n            self.holidays = []\n            if getattr(h1, 'holidays', False):\n                for h in h1.holidays:\n                    self.holidays.append(h)\n            else:\n                self.holidays.append(h1)\n            if getattr(h2, 'holidays', False):\n                for h in h2.holidays:\n                    self.holidays.append(h)\n            else:\n                self.holidays.append(h2)\n            HolidayBase.__init__(self, **kwargs)\n\n        def _populate(self, year):\n            for h in self.holidays[::-1]:\n                h._populate(year)\n                self.update(h)\n\n    return HolidaySum\n", "path": "holidays/holiday_base.py"}]}