pandas-market-calendars 5.1.0__py3-none-any.whl → 5.1.3__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (49) hide show
  1. pandas_market_calendars/__init__.py +39 -39
  2. pandas_market_calendars/calendar_registry.py +58 -57
  3. pandas_market_calendars/calendar_utils.py +1151 -1151
  4. pandas_market_calendars/calendars/asx.py +100 -70
  5. pandas_market_calendars/calendars/bmf.py +225 -219
  6. pandas_market_calendars/calendars/bse.py +433 -425
  7. pandas_market_calendars/calendars/cboe.py +153 -149
  8. pandas_market_calendars/calendars/cme.py +417 -405
  9. pandas_market_calendars/calendars/cme_globex_agriculture.py +172 -172
  10. pandas_market_calendars/calendars/cme_globex_base.py +127 -119
  11. pandas_market_calendars/calendars/cme_globex_crypto.py +166 -158
  12. pandas_market_calendars/calendars/cme_globex_energy_and_metals.py +224 -216
  13. pandas_market_calendars/calendars/cme_globex_equities.py +131 -123
  14. pandas_market_calendars/calendars/cme_globex_fixed_income.py +136 -136
  15. pandas_market_calendars/calendars/cme_globex_fx.py +101 -101
  16. pandas_market_calendars/calendars/eurex.py +139 -131
  17. pandas_market_calendars/calendars/eurex_fixed_income.py +106 -98
  18. pandas_market_calendars/calendars/hkex.py +437 -431
  19. pandas_market_calendars/calendars/ice.py +89 -81
  20. pandas_market_calendars/calendars/iex.py +163 -155
  21. pandas_market_calendars/calendars/jpx.py +125 -117
  22. pandas_market_calendars/calendars/lse.py +126 -118
  23. pandas_market_calendars/calendars/mirror.py +144 -144
  24. pandas_market_calendars/calendars/nyse.py +1462 -1466
  25. pandas_market_calendars/calendars/ose.py +124 -118
  26. pandas_market_calendars/calendars/sifma.py +391 -383
  27. pandas_market_calendars/calendars/six.py +144 -136
  28. pandas_market_calendars/calendars/sse.py +305 -315
  29. pandas_market_calendars/calendars/tase.py +232 -224
  30. pandas_market_calendars/calendars/tsx.py +193 -185
  31. pandas_market_calendars/class_registry.py +115 -115
  32. pandas_market_calendars/holidays/cme.py +385 -385
  33. pandas_market_calendars/holidays/cme_globex.py +214 -214
  34. pandas_market_calendars/holidays/cn.py +1476 -1476
  35. pandas_market_calendars/holidays/jp.py +401 -401
  36. pandas_market_calendars/holidays/jpx_equinox.py +506 -506
  37. pandas_market_calendars/holidays/nyse.py +1536 -1536
  38. pandas_market_calendars/holidays/oz.py +82 -63
  39. pandas_market_calendars/holidays/sifma.py +350 -350
  40. pandas_market_calendars/holidays/uk.py +186 -186
  41. pandas_market_calendars/holidays/us.py +376 -376
  42. pandas_market_calendars/market_calendar.py +1006 -1008
  43. {pandas_market_calendars-5.1.0.dist-info → pandas_market_calendars-5.1.3.dist-info}/METADATA +5 -4
  44. pandas_market_calendars-5.1.3.dist-info/RECORD +50 -0
  45. {pandas_market_calendars-5.1.0.dist-info → pandas_market_calendars-5.1.3.dist-info}/WHEEL +1 -1
  46. pandas_market_calendars-5.1.0.dist-info/RECORD +0 -50
  47. {pandas_market_calendars-5.1.0.dist-info → pandas_market_calendars-5.1.3.dist-info}/licenses/LICENSE +0 -0
  48. {pandas_market_calendars-5.1.0.dist-info → pandas_market_calendars-5.1.3.dist-info}/licenses/NOTICE +0 -0
  49. {pandas_market_calendars-5.1.0.dist-info → pandas_market_calendars-5.1.3.dist-info}/top_level.txt +0 -0
@@ -1,70 +1,100 @@
1
- from datetime import time
2
-
3
- from pandas.tseries.holiday import AbstractHolidayCalendar, GoodFriday, EasterMonday
4
- from zoneinfo import ZoneInfo
5
-
6
- from pandas_market_calendars.holidays.oz import *
7
- from pandas_market_calendars.market_calendar import MarketCalendar
8
-
9
- AbstractHolidayCalendar.start_date = "2011-01-01"
10
-
11
-
12
- class ASXExchangeCalendar(MarketCalendar):
13
- """
14
- Open Time: 10:00 AM, Australia/Sydney
15
- Close Time: 4:10 PM, Australia/Sydney
16
-
17
-
18
- Regularly-Observed Holidays:
19
- - New Year's Day (observed on Monday when Jan 1 is a Saturday or Sunday)
20
- - Australia Day (observed on Monday when Jan 26 is a Saturday or Sunday)
21
- - Good Friday (two days before Easter Sunday)
22
- - Easter Monday (the Monday after Easter Sunday)
23
- - ANZAC Day (April 25)
24
- - Queen's Birthday (second Monday in June)
25
- - Christmas Day (December 25, Saturday/Sunday to Monday)
26
- - Boxing Day (December 26, Saturday to Monday, Sunday to Tuesday)
27
-
28
-
29
- Regularly-Observed Early Closes:
30
- - Last Business Day before Christmas Day
31
- - Last Business Day of the Year
32
-
33
- """
34
-
35
- aliases = ["ASX"]
36
- regular_market_times = {
37
- "market_open": ((None, time(10)),),
38
- "market_close": ((None, time(16, 10)),),
39
- }
40
-
41
- @property
42
- def name(self):
43
- return "ASX"
44
-
45
- @property
46
- def full_name(self):
47
- return "Australian Securities Exchange"
48
-
49
- @property
50
- def tz(self):
51
- return ZoneInfo("Australia/Sydney")
52
-
53
- @property
54
- def regular_holidays(self):
55
- return AbstractHolidayCalendar(
56
- rules=[
57
- OZNewYearsDay,
58
- AustraliaDay,
59
- AnzacDay,
60
- QueensBirthday,
61
- Christmas,
62
- BoxingDay,
63
- GoodFriday,
64
- EasterMonday,
65
- ]
66
- )
67
-
68
- @property
69
- def adhoc_holidays(self):
70
- return UniqueCloses
1
+ from datetime import time
2
+
3
+ from pandas.tseries.holiday import AbstractHolidayCalendar, GoodFriday, EasterMonday
4
+ import sys
5
+
6
+ # check python versiOn aNd import accordingly
7
+ if sys.version_info >= (3, 9):
8
+ # For Python 3.9 and later, import directly
9
+ from zoneinfo import ZoneInfo
10
+ else:
11
+ # For Python 3.8 and earlier, import from backports
12
+ from backports.zoneinfo import ZoneInfo
13
+
14
+ from pandas_market_calendars.holidays.oz import *
15
+ from pandas_market_calendars.market_calendar import MarketCalendar
16
+
17
+ AbstractHolidayCalendar.start_date = "2011-01-01"
18
+
19
+
20
+ class ASXExchangeCalendar(MarketCalendar):
21
+ """
22
+ Open Time: 10:00 AM, Australia/Sydney
23
+ Close Time: 4:10 PM, Australia/Sydney
24
+
25
+ https://www.asx.com.au/markets/market-resources/trading-hours-calendar/cash-market-trading-hours/trading-calendar
26
+
27
+ Regularly-Observed Holidays:
28
+ - New Year's Day (observed on Monday when Jan 1 is a Saturday or Sunday)
29
+ - Australia Day (observed on Monday when Jan 26 is a Saturday or Sunday)
30
+ - Good Friday (two days before Easter Sunday)
31
+ - Easter Monday (the Monday after Easter Sunday)
32
+ - ANZAC Day (April 25)
33
+ - Queen's Birthday (second Monday in June)
34
+ - Christmas Day (December 25, Saturday/Sunday to Monday)
35
+ - Boxing Day (December 26, Saturday to Monday, Sunday to Tuesday)
36
+
37
+
38
+ Regularly-Observed Early Closes:
39
+ - Last Business Day before Christmas Day
40
+ - Last Business Day of the Year
41
+
42
+ """
43
+
44
+ aliases = ["ASX"]
45
+ regular_market_times = {
46
+ "market_open": ((None, time(10)),),
47
+ "market_close": ((None, time(16, 10)),),
48
+ }
49
+
50
+ @property
51
+ def name(self):
52
+ return "ASX"
53
+
54
+ @property
55
+ def full_name(self):
56
+ return "Australian Securities Exchange"
57
+
58
+ @property
59
+ def tz(self):
60
+ return ZoneInfo("Australia/Sydney")
61
+
62
+ @property
63
+ def regular_holidays(self):
64
+ return AbstractHolidayCalendar(
65
+ rules=[
66
+ OZNewYearsDay,
67
+ AustraliaDay,
68
+ AnzacDay,
69
+ QueensBirthday,
70
+ Christmas,
71
+ BoxingDay,
72
+ GoodFriday,
73
+ EasterMonday,
74
+ ]
75
+ )
76
+
77
+ @property
78
+ def adhoc_holidays(self):
79
+ return UniqueCloses
80
+
81
+ @property
82
+ def special_closes(self):
83
+ return [
84
+ (
85
+ time(hour=14, minute=10, tzinfo=self.tz),
86
+ AbstractHolidayCalendar(
87
+ rules=[
88
+ ChristmasEve,
89
+ ]
90
+ ),
91
+ ),
92
+ (
93
+ time(hour=14, minute=10, tzinfo=self.tz),
94
+ AbstractHolidayCalendar(
95
+ rules=[
96
+ NewYearsEve,
97
+ ]
98
+ ),
99
+ ),
100
+ ]
@@ -1,219 +1,225 @@
1
- #
2
- # Copyright 2016 Quantopian, Inc.
3
- #
4
- # Licensed under the Apache License, Version 2.0 (the "License");
5
- # you may not use this file except in compliance with the License.
6
- # You may obtain a copy of the License at
7
- #
8
- # http://www.apache.org/licenses/LICENSE-2.0
9
- #
10
- # Unless required by applicable law or agreed to in writing, software
11
- # distributed under the License is distributed on an "AS IS" BASIS,
12
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
- # See the License for the specific language governing permissions and
14
- # limitations under the License.
15
-
16
- from datetime import time
17
-
18
- from pandas import Timestamp
19
- from pandas.tseries.holiday import (
20
- AbstractHolidayCalendar,
21
- Day,
22
- Easter,
23
- GoodFriday,
24
- Holiday,
25
- )
26
- from zoneinfo import ZoneInfo
27
-
28
- from pandas_market_calendars.market_calendar import FRIDAY, MarketCalendar
29
-
30
- # Universal Confraternization (new years day)
31
- ConfUniversal = Holiday(
32
- "Dia da Confraternizacao Universal",
33
- month=1,
34
- day=1,
35
- )
36
- # Sao Paulo city birthday
37
- AniversarioSaoPaulo = Holiday(
38
- "Aniversario de Sao Paulo", month=1, day=25, end_date="2021-12-31"
39
- )
40
- # Carnival Monday
41
- CarnavalSegunda = Holiday("Carnaval Segunda", month=1, day=1, offset=[Easter(), Day(-48)])
42
- # Carnival Tuesday
43
- CarnavalTerca = Holiday("Carnaval Terca", month=1, day=1, offset=[Easter(), Day(-47)])
44
- # Ash Wednesday (short day)
45
- QuartaCinzas = Holiday("Quarta Cinzas", month=1, day=1, offset=[Easter(), Day(-46)])
46
- # Good Friday
47
- SextaPaixao = GoodFriday
48
- # Feast of the Most Holy Body of Christ
49
- CorpusChristi = Holiday("Corpus Christi", month=1, day=1, offset=[Easter(), Day(60)])
50
- # Tiradentes Memorial
51
- Tiradentes = Holiday(
52
- "Tiradentes",
53
- month=4,
54
- day=21,
55
- )
56
- # Labor Day
57
- DiaTrabalho = Holiday(
58
- "Dia Trabalho",
59
- month=5,
60
- day=1,
61
- )
62
- # Constitutionalist Revolution
63
- Constitucionalista = Holiday("Constitucionalista", month=7, day=9, start_date="1997-01-01", end_date="2019-12-31")
64
- # Independence Day
65
- Independencia = Holiday(
66
- "Independencia",
67
- month=9,
68
- day=7,
69
- )
70
- # Our Lady of Aparecida
71
- Aparecida = Holiday(
72
- "Nossa Senhora de Aparecida",
73
- month=10,
74
- day=12,
75
- )
76
- # All Souls' Day
77
- Finados = Holiday(
78
- "Dia dos Finados",
79
- month=11,
80
- day=2,
81
- )
82
- # Proclamation of the Republic
83
- ProclamacaoRepublica = Holiday(
84
- "Proclamacao da Republica",
85
- month=11,
86
- day=15,
87
- )
88
- # Day of Black Awareness (municipal holiday for the city of São Paulo)
89
- ConscienciaNegra = Holiday(
90
- "Dia da Consciencia Negra",
91
- month=11,
92
- day=20,
93
- start_date="2004-01-01",
94
- end_date="2019-12-31",
95
- )
96
- # Day of Black Awareness (national holiday)
97
- ConscienciaNegraNacional = Holiday(
98
- "Dia da Consciencia Negra",
99
- month=11,
100
- day=20,
101
- start_date="2023-12-22",
102
- )
103
- # Christmas Eve
104
- VesperaNatal = Holiday(
105
- "Vespera Natal",
106
- month=12,
107
- day=24,
108
- )
109
- # Christmas
110
- Natal = Holiday(
111
- "Natal",
112
- month=12,
113
- day=25,
114
- )
115
- # New Year's Eve
116
- AnoNovo = Holiday(
117
- "Ano Novo",
118
- month=12,
119
- day=31,
120
- )
121
- # New Year's Eve falls on Saturday
122
- AnoNovoSabado = Holiday(
123
- "Ano Novo Sabado",
124
- month=12,
125
- day=30,
126
- days_of_week=(FRIDAY,),
127
- )
128
- # New Year's Eve falls on Sunday
129
- AnoNovoDomingo = Holiday(
130
- "Ano Novo Domingo",
131
- month=12,
132
- day=29,
133
- days_of_week=(FRIDAY,),
134
- )
135
-
136
- ##########################
137
- # Non-recurring holidays
138
- ##########################
139
-
140
- Constitucionalista2021 = Timestamp("2021-07-09", tz="UTC")
141
- ConscienciaNegra2021 = Timestamp("2021-11-20", tz="UTC")
142
-
143
-
144
- class BMFExchangeCalendar(MarketCalendar):
145
- """
146
- Exchange calendar for BM&F BOVESPA
147
-
148
- Open Time: 10:00 AM, Brazil/Sao Paulo
149
- Close Time: 4:00 PM, Brazil/Sao Paulo
150
-
151
- Regularly-Observed Holidays:
152
- - Universal Confraternization (New year's day, Jan 1)
153
- - Sao Paulo City Anniversary (Jan 25 until 2021)
154
- - Carnaval Monday (48 days before Easter)
155
- - Carnaval Tuesday (47 days before Easter)
156
- - Passion of the Christ (Good Friday, 2 days before Easter)
157
- - Corpus Christi (60 days after Easter)
158
- - Tiradentes (April 21)
159
- - Labor day (May 1)
160
- - Constitutionalist Revolution (July 9 from 1997 until 2021, skipping 2020)
161
- - Independence Day (September 7)
162
- - Our Lady of Aparecida Feast (October 12)
163
- - All Souls' Day (November 2)
164
- - Proclamation of the Republic (November 15)
165
- - Day of Black Awareness, municipal holiday for the city of São Paulo (November 20 from 2004 until 2021, skipping 2020)
166
- - Day of Black Awareness, national holiday (November 20 starting in 2024)
167
- - Christmas (December 24 and 25)
168
- - Friday before New Year's Eve (December 30 or 29 if NYE falls on a Saturday or Sunday, respectively)
169
- - New Year's Eve (December 31)
170
- """
171
-
172
- aliases = ["BMF", "B3"]
173
- regular_market_times = {
174
- "market_open": ((None, time(10, 1)),),
175
- "market_close": ((None, time(16)),),
176
- }
177
-
178
- @property
179
- def name(self):
180
- return "BMF"
181
-
182
- @property
183
- def tz(self):
184
- return ZoneInfo("America/Sao_Paulo")
185
-
186
- @property
187
- def regular_holidays(self):
188
- return AbstractHolidayCalendar(
189
- rules=[
190
- ConfUniversal,
191
- AniversarioSaoPaulo,
192
- CarnavalSegunda,
193
- CarnavalTerca,
194
- SextaPaixao,
195
- CorpusChristi,
196
- Tiradentes,
197
- DiaTrabalho,
198
- Constitucionalista,
199
- Independencia,
200
- Aparecida,
201
- Finados,
202
- ProclamacaoRepublica,
203
- ConscienciaNegra,
204
- ConscienciaNegraNacional,
205
- VesperaNatal,
206
- Natal,
207
- AnoNovo,
208
- AnoNovoSabado,
209
- AnoNovoDomingo,
210
- ]
211
- )
212
-
213
- @property
214
- def adhoc_holidays(self):
215
- return [Constitucionalista2021, ConscienciaNegra2021]
216
-
217
- @property
218
- def special_opens(self):
219
- return [(time(13, 1), AbstractHolidayCalendar(rules=[QuartaCinzas]))]
1
+ #
2
+ # Copyright 2016 Quantopian, Inc.
3
+ #
4
+ # Licensed under the Apache License, Version 2.0 (the "License");
5
+ # you may not use this file except in compliance with the License.
6
+ # You may obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS,
12
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ # See the License for the specific language governing permissions and
14
+ # limitations under the License.
15
+
16
+ from datetime import time
17
+
18
+ from pandas import Timestamp
19
+ from pandas.tseries.holiday import (
20
+ AbstractHolidayCalendar,
21
+ Day,
22
+ Easter,
23
+ GoodFriday,
24
+ Holiday,
25
+ )
26
+ import sys
27
+
28
+ # check python versiOn aNd import accordingly
29
+ if sys.version_info >= (3, 9):
30
+ # For Python 3.9 and later, import directly
31
+ from zoneinfo import ZoneInfo
32
+ else:
33
+ # For Python 3.8 and earlier, import from backports
34
+ from backports.zoneinfo import ZoneInfo
35
+
36
+ from pandas_market_calendars.market_calendar import FRIDAY, MarketCalendar
37
+
38
+ # Universal Confraternization (new years day)
39
+ ConfUniversal = Holiday(
40
+ "Dia da Confraternizacao Universal",
41
+ month=1,
42
+ day=1,
43
+ )
44
+ # Sao Paulo city birthday
45
+ AniversarioSaoPaulo = Holiday("Aniversario de Sao Paulo", month=1, day=25, end_date="2021-12-31")
46
+ # Carnival Monday
47
+ CarnavalSegunda = Holiday("Carnaval Segunda", month=1, day=1, offset=[Easter(), Day(-48)])
48
+ # Carnival Tuesday
49
+ CarnavalTerca = Holiday("Carnaval Terca", month=1, day=1, offset=[Easter(), Day(-47)])
50
+ # Ash Wednesday (short day)
51
+ QuartaCinzas = Holiday("Quarta Cinzas", month=1, day=1, offset=[Easter(), Day(-46)])
52
+ # Good Friday
53
+ SextaPaixao = GoodFriday
54
+ # Feast of the Most Holy Body of Christ
55
+ CorpusChristi = Holiday("Corpus Christi", month=1, day=1, offset=[Easter(), Day(60)])
56
+ # Tiradentes Memorial
57
+ Tiradentes = Holiday(
58
+ "Tiradentes",
59
+ month=4,
60
+ day=21,
61
+ )
62
+ # Labor Day
63
+ DiaTrabalho = Holiday(
64
+ "Dia Trabalho",
65
+ month=5,
66
+ day=1,
67
+ )
68
+ # Constitutionalist Revolution
69
+ Constitucionalista = Holiday("Constitucionalista", month=7, day=9, start_date="1997-01-01", end_date="2019-12-31")
70
+ # Independence Day
71
+ Independencia = Holiday(
72
+ "Independencia",
73
+ month=9,
74
+ day=7,
75
+ )
76
+ # Our Lady of Aparecida
77
+ Aparecida = Holiday(
78
+ "Nossa Senhora de Aparecida",
79
+ month=10,
80
+ day=12,
81
+ )
82
+ # All Souls' Day
83
+ Finados = Holiday(
84
+ "Dia dos Finados",
85
+ month=11,
86
+ day=2,
87
+ )
88
+ # Proclamation of the Republic
89
+ ProclamacaoRepublica = Holiday(
90
+ "Proclamacao da Republica",
91
+ month=11,
92
+ day=15,
93
+ )
94
+ # Day of Black Awareness (municipal holiday for the city of São Paulo)
95
+ ConscienciaNegra = Holiday(
96
+ "Dia da Consciencia Negra",
97
+ month=11,
98
+ day=20,
99
+ start_date="2004-01-01",
100
+ end_date="2019-12-31",
101
+ )
102
+ # Day of Black Awareness (national holiday)
103
+ ConscienciaNegraNacional = Holiday(
104
+ "Dia da Consciencia Negra",
105
+ month=11,
106
+ day=20,
107
+ start_date="2023-12-22",
108
+ )
109
+ # Christmas Eve
110
+ VesperaNatal = Holiday(
111
+ "Vespera Natal",
112
+ month=12,
113
+ day=24,
114
+ )
115
+ # Christmas
116
+ Natal = Holiday(
117
+ "Natal",
118
+ month=12,
119
+ day=25,
120
+ )
121
+ # New Year's Eve
122
+ AnoNovo = Holiday(
123
+ "Ano Novo",
124
+ month=12,
125
+ day=31,
126
+ )
127
+ # New Year's Eve falls on Saturday
128
+ AnoNovoSabado = Holiday(
129
+ "Ano Novo Sabado",
130
+ month=12,
131
+ day=30,
132
+ days_of_week=(FRIDAY,),
133
+ )
134
+ # New Year's Eve falls on Sunday
135
+ AnoNovoDomingo = Holiday(
136
+ "Ano Novo Domingo",
137
+ month=12,
138
+ day=29,
139
+ days_of_week=(FRIDAY,),
140
+ )
141
+
142
+ ##########################
143
+ # Non-recurring holidays
144
+ ##########################
145
+
146
+ Constitucionalista2021 = Timestamp("2021-07-09", tz="UTC")
147
+ ConscienciaNegra2021 = Timestamp("2021-11-20", tz="UTC")
148
+
149
+
150
+ class BMFExchangeCalendar(MarketCalendar):
151
+ """
152
+ Exchange calendar for BM&F BOVESPA
153
+
154
+ Open Time: 10:00 AM, Brazil/Sao Paulo
155
+ Close Time: 5:00 PM, Brazil/Sao Paulo
156
+
157
+ Regularly-Observed Holidays:
158
+ - Universal Confraternization (New year's day, Jan 1)
159
+ - Sao Paulo City Anniversary (Jan 25 until 2021)
160
+ - Carnaval Monday (48 days before Easter)
161
+ - Carnaval Tuesday (47 days before Easter)
162
+ - Passion of the Christ (Good Friday, 2 days before Easter)
163
+ - Corpus Christi (60 days after Easter)
164
+ - Tiradentes (April 21)
165
+ - Labor day (May 1)
166
+ - Constitutionalist Revolution (July 9 from 1997 until 2021, skipping 2020)
167
+ - Independence Day (September 7)
168
+ - Our Lady of Aparecida Feast (October 12)
169
+ - All Souls' Day (November 2)
170
+ - Proclamation of the Republic (November 15)
171
+ - Day of Black Awareness, municipal holiday for the city of São Paulo (November 20 from 2004 until 2021, skipping 2020)
172
+ - Day of Black Awareness, national holiday (November 20 starting in 2024)
173
+ - Christmas (December 24 and 25)
174
+ - Friday before New Year's Eve (December 30 or 29 if NYE falls on a Saturday or Sunday, respectively)
175
+ - New Year's Eve (December 31)
176
+ """
177
+
178
+ aliases = ["BMF", "B3"]
179
+ regular_market_times = {
180
+ "market_open": ((None, time(10)),),
181
+ "market_close": ((None, time(17)),),
182
+ }
183
+
184
+ @property
185
+ def name(self):
186
+ return "BMF"
187
+
188
+ @property
189
+ def tz(self):
190
+ return ZoneInfo("America/Sao_Paulo")
191
+
192
+ @property
193
+ def regular_holidays(self):
194
+ return AbstractHolidayCalendar(
195
+ rules=[
196
+ ConfUniversal,
197
+ AniversarioSaoPaulo,
198
+ CarnavalSegunda,
199
+ CarnavalTerca,
200
+ SextaPaixao,
201
+ CorpusChristi,
202
+ Tiradentes,
203
+ DiaTrabalho,
204
+ Constitucionalista,
205
+ Independencia,
206
+ Aparecida,
207
+ Finados,
208
+ ProclamacaoRepublica,
209
+ ConscienciaNegra,
210
+ ConscienciaNegraNacional,
211
+ VesperaNatal,
212
+ Natal,
213
+ AnoNovo,
214
+ AnoNovoSabado,
215
+ AnoNovoDomingo,
216
+ ]
217
+ )
218
+
219
+ @property
220
+ def adhoc_holidays(self):
221
+ return [Constitucionalista2021, ConscienciaNegra2021]
222
+
223
+ @property
224
+ def special_opens(self):
225
+ return [(time(13, 1), AbstractHolidayCalendar(rules=[QuartaCinzas]))]