@@ -760,6 +760,9 @@ def setup_method(self, method):
760
760
self .offset6 = BusinessHour (start = '20:00' , end = '05:00' )
761
761
self .offset7 = BusinessHour (n = - 2 , start = dt_time (21 , 30 ),
762
762
end = dt_time (6 , 30 ))
763
+ self .offset8 = BusinessHour (start = ['09:00' , '13:00' ], end = ['12:00' , '17:00' ])
764
+ self .offset9 = BusinessHour (n = 3 , start = ['09:00' , '22:00' ], end = ['13:00' , '03:00' ])
765
+ self .offset10 = BusinessHour (n = - 1 , start = ['23:00' , '13:00' ], end = ['02:00' , '17:00' ])
763
766
764
767
def test_constructor_errors (self ):
765
768
from datetime import time as dt_time
@@ -769,6 +772,14 @@ def test_constructor_errors(self):
769
772
BusinessHour (start = 'AAA' )
770
773
with pytest .raises (ValueError ):
771
774
BusinessHour (start = '14:00:05' )
775
+ with pytest .raises (ValueError ):
776
+ BusinessHour (start = [])
777
+ with pytest .raises (ValueError ):
778
+ BusinessHour (start = ['09:00' , '11:00' ])
779
+ with pytest .raises (ValueError ):
780
+ BusinessHour (start = ['09:00' , '11:00' ], end = ['10:00' ])
781
+ with pytest .raises (ValueError ):
782
+ BusinessHour (start = ['09:00' , '11:00' ], end = ['12:00' , '20:00' ])
772
783
773
784
def test_different_normalize_equals (self ):
774
785
# GH#21404 changed __eq__ to return False when `normalize` doesnt match
@@ -785,6 +796,9 @@ def test_repr(self):
785
796
assert repr (self .offset5 ) == '<BusinessHour: BH=11:00-14:30>'
786
797
assert repr (self .offset6 ) == '<BusinessHour: BH=20:00-05:00>'
787
798
assert repr (self .offset7 ) == '<-2 * BusinessHours: BH=21:30-06:30>'
799
+ assert repr (self .offset8 ) == '<BusinessHour: BH=09:00,13:00-12:00,17:00>'
800
+ assert repr (self .offset9 ) == '<3 * BusinessHours: BH=09:00,22:00-13:00,03:00>'
801
+ assert repr (self .offset10 ) == '<-1 * BusinessHour: BH=13:00,23:00-17:00,02:00>'
788
802
789
803
def test_with_offset (self ):
790
804
expected = Timestamp ('2014-07-01 13:00' )
@@ -793,7 +807,8 @@ def test_with_offset(self):
793
807
assert self .d + BusinessHour (n = 3 ) == expected
794
808
795
809
def test_eq (self ):
796
- for offset in [self .offset1 , self .offset2 , self .offset3 , self .offset4 ]:
810
+ for offset in [self .offset1 , self .offset2 , self .offset3 , self .offset4 ,
811
+ self .offset8 , self .offset9 , self .offset10 ]:
797
812
assert offset == offset
798
813
799
814
assert BusinessHour () != BusinessHour (- 1 )
@@ -802,15 +817,24 @@ def test_eq(self):
802
817
assert (BusinessHour (start = '09:00' , end = '17:00' ) !=
803
818
BusinessHour (start = '17:00' , end = '09:01' ))
804
819
820
+ assert (BusinessHour (start = ['23:00' , '13:00' ], end = ['12:00' , '17:00' ]) ==
821
+ BusinessHour (start = ['13:00' , '23:00' ], end = ['17:00' , '12:00' ]))
822
+ assert (BusinessHour (start = ['13:00' , '23:00' ], end = ['18:00' , '07:00' ]) !=
823
+ BusinessHour (start = ['13:00' , '23:00' ], end = ['17:00' , '12:00' ]))
824
+
805
825
def test_hash (self ):
806
- for offset in [self .offset1 , self .offset2 , self .offset3 , self .offset4 ]:
826
+ for offset in [self .offset1 , self .offset2 , self .offset3 , self .offset4 ,
827
+ self .offset8 , self .offset9 , self .offset10 ]:
807
828
assert hash (offset ) == hash (offset )
808
829
809
830
def test_call (self ):
810
831
assert self .offset1 (self .d ) == datetime (2014 , 7 , 1 , 11 )
811
832
assert self .offset2 (self .d ) == datetime (2014 , 7 , 1 , 13 )
812
833
assert self .offset3 (self .d ) == datetime (2014 , 6 , 30 , 17 )
813
834
assert self .offset4 (self .d ) == datetime (2014 , 6 , 30 , 14 )
835
+ assert self .offset8 (self .d ) == datetime (2014 , 7 , 1 , 11 )
836
+ assert self .offset9 (self .d ) == datetime (2014 , 7 , 1 , 22 )
837
+ assert self .offset10 (self .d ) == datetime (2014 , 7 , 1 , 1 )
814
838
815
839
def test_sub (self ):
816
840
# we have to override test_sub here becasue self.offset2 is not
@@ -831,6 +855,9 @@ def testRollback1(self):
831
855
assert self .offset5 .rollback (self .d ) == datetime (2014 , 6 , 30 , 14 , 30 )
832
856
assert self .offset6 .rollback (self .d ) == datetime (2014 , 7 , 1 , 5 , 0 )
833
857
assert self .offset7 .rollback (self .d ) == datetime (2014 , 7 , 1 , 6 , 30 )
858
+ assert self .offset8 .rollback (self .d ) == self .d
859
+ assert self .offset9 .rollback (self .d ) == self .d
860
+ assert self .offset10 .rollback (self .d ) == datetime (2014 , 7 , 1 , 2 )
834
861
835
862
d = datetime (2014 , 7 , 1 , 0 )
836
863
assert self .offset1 .rollback (d ) == datetime (2014 , 6 , 30 , 17 )
@@ -840,6 +867,9 @@ def testRollback1(self):
840
867
assert self .offset5 .rollback (d ) == datetime (2014 , 6 , 30 , 14 , 30 )
841
868
assert self .offset6 .rollback (d ) == d
842
869
assert self .offset7 .rollback (d ) == d
870
+ assert self .offset8 .rollback (d ) == datetime (2014 , 6 , 30 , 17 )
871
+ assert self .offset9 .rollback (d ) == d
872
+ assert self .offset10 .rollback (d ) == d
843
873
844
874
assert self ._offset (5 ).rollback (self .d ) == self .d
845
875
@@ -858,6 +888,9 @@ def testRollforward1(self):
858
888
datetime (2014 , 7 , 1 , 20 , 0 ))
859
889
assert (self .offset7 .rollforward (self .d ) ==
860
890
datetime (2014 , 7 , 1 , 21 , 30 ))
891
+ assert self .offset8 .rollforward (self .d ) == self .d
892
+ assert self .offset9 .rollforward (self .d ) == self .d
893
+ assert self .offset10 .rollforward (self .d ) == datetime (2014 , 7 , 1 , 13 )
861
894
862
895
d = datetime (2014 , 7 , 1 , 0 )
863
896
assert self .offset1 .rollforward (d ) == datetime (2014 , 7 , 1 , 9 )
@@ -867,6 +900,9 @@ def testRollforward1(self):
867
900
assert self .offset5 .rollforward (d ) == datetime (2014 , 7 , 1 , 11 )
868
901
assert self .offset6 .rollforward (d ) == d
869
902
assert self .offset7 .rollforward (d ) == d
903
+ assert self .offset8 .rollforward (d ) == datetime (2014 , 7 , 1 , 9 )
904
+ assert self .offset9 .rollforward (d ) == d
905
+ assert self .offset10 .rollforward (d ) == d
870
906
871
907
assert self ._offset (5 ).rollforward (self .d ) == self .d
872
908
@@ -961,6 +997,33 @@ def test_normalize(self, case):
961
997
datetime (2014 , 7 , 6 , 23 , 0 ): False ,
962
998
datetime (2014 , 7 , 7 , 3 , 0 ): False }))
963
999
1000
+ on_offset_cases .append ((BusinessHour (start = ['09:00' , '13:00' ], end = ['12:00' , '17:00' ]), {
1001
+ datetime (2014 , 7 , 1 , 9 ): True ,
1002
+ datetime (2014 , 7 , 1 , 8 , 59 ): False ,
1003
+ datetime (2014 , 7 , 1 , 8 ): False ,
1004
+ datetime (2014 , 7 , 1 , 17 ): True ,
1005
+ datetime (2014 , 7 , 1 , 17 , 1 ): False ,
1006
+ datetime (2014 , 7 , 1 , 18 ): False ,
1007
+ datetime (2014 , 7 , 5 , 9 ): False ,
1008
+ datetime (2014 , 7 , 6 , 12 ): False ,
1009
+ datetime (2014 , 7 , 1 , 12 , 30 ): False }))
1010
+
1011
+ on_offset_cases .append ((BusinessHour (start = ['19:00' , '23:00' ], end = ['21:00' , '05:00' ]), {
1012
+ datetime (2014 , 7 , 1 , 9 , 0 ): False ,
1013
+ datetime (2014 , 7 , 1 , 10 , 0 ): False ,
1014
+ datetime (2014 , 7 , 1 , 15 ): False ,
1015
+ datetime (2014 , 7 , 1 , 15 , 1 ): False ,
1016
+ datetime (2014 , 7 , 5 , 12 , 0 ): False ,
1017
+ datetime (2014 , 7 , 6 , 12 , 0 ): False ,
1018
+ datetime (2014 , 7 , 1 , 19 , 0 ): True ,
1019
+ datetime (2014 , 7 , 2 , 0 , 0 ): True ,
1020
+ datetime (2014 , 7 , 4 , 23 ): True ,
1021
+ datetime (2014 , 7 , 5 , 1 ): True ,
1022
+ datetime (2014 , 7 , 5 , 5 , 0 ): True ,
1023
+ datetime (2014 , 7 , 6 , 23 , 0 ): False ,
1024
+ datetime (2014 , 7 , 7 , 3 , 0 ): False ,
1025
+ datetime (2014 , 7 , 4 , 22 ): False }))
1026
+
964
1027
@pytest .mark .parametrize ('case' , on_offset_cases )
965
1028
def test_onOffset (self , case ):
966
1029
offset , cases = case
@@ -1126,6 +1189,69 @@ def test_onOffset(self, case):
1126
1189
datetime (2014 , 7 , 7 , 18 ): (datetime (2014 , 7 , 7 , 17 ),
1127
1190
datetime (2014 , 7 , 8 , 17 ))}))
1128
1191
1192
+ opening_time_cases .append (([BusinessHour (start = ['11:15' , '15:00' ], end = ['13:00' , '20:00' ]),
1193
+ BusinessHour (n = 3 , start = ['11:15' , '15:00' ], end = ['12:00' , '20:00' ]),
1194
+ BusinessHour (start = ['11:15' , '15:00' ], end = ['13:00' , '17:00' ]),
1195
+ BusinessHour (n = 2 , start = ['11:15' , '15:00' ], end = ['12:00' , '03:00' ]),
1196
+ BusinessHour (n = 3 , start = ['11:15' , '15:00' ], end = ['13:00' , '16:00' ])], {
1197
+ datetime (2014 , 7 , 1 , 11 ): (datetime (2014 , 7 , 1 , 11 , 15 ),
1198
+ datetime (2014 , 6 , 30 , 15 )),
1199
+ datetime (2014 , 7 , 1 , 18 ): (datetime (2014 , 7 , 2 , 11 , 15 ),
1200
+ datetime (2014 , 7 , 1 , 15 )),
1201
+ datetime (2014 , 7 , 1 , 23 ): (datetime (2014 , 7 , 2 , 11 , 15 ),
1202
+ datetime (2014 , 7 , 1 , 15 )),
1203
+ datetime (2014 , 7 , 2 , 8 ): (datetime (2014 , 7 , 2 , 11 , 15 ),
1204
+ datetime (2014 , 7 , 1 , 15 )),
1205
+ datetime (2014 , 7 , 2 , 9 ): (datetime (2014 , 7 , 2 , 11 , 15 ),
1206
+ datetime (2014 , 7 , 1 , 15 )),
1207
+ datetime (2014 , 7 , 2 , 10 ): (datetime (2014 , 7 , 2 , 11 , 15 ),
1208
+ datetime (2014 , 7 , 1 , 15 )),
1209
+ datetime (2014 , 7 , 2 , 11 , 15 ): (datetime (2014 , 7 , 2 , 11 , 15 ),
1210
+ datetime (2014 , 7 , 2 , 11 , 15 )),
1211
+ datetime (2014 , 7 , 2 , 11 , 15 , 1 ): (datetime (2014 , 7 , 2 , 15 ),
1212
+ datetime (2014 , 7 , 2 , 11 , 15 )),
1213
+ datetime (2014 , 7 , 5 , 10 ): (datetime (2014 , 7 , 7 , 11 , 15 ),
1214
+ datetime (2014 , 7 , 4 , 15 )),
1215
+ datetime (2014 , 7 , 4 , 10 ): (datetime (2014 , 7 , 4 , 11 , 15 ),
1216
+ datetime (2014 , 7 , 3 , 15 )),
1217
+ datetime (2014 , 7 , 4 , 23 ): (datetime (2014 , 7 , 7 , 11 , 15 ),
1218
+ datetime (2014 , 7 , 4 , 15 )),
1219
+ datetime (2014 , 7 , 6 , 10 ): (datetime (2014 , 7 , 7 , 11 , 15 ),
1220
+ datetime (2014 , 7 , 4 , 15 )),
1221
+ datetime (2014 , 7 , 7 , 5 ): (datetime (2014 , 7 , 7 , 11 , 15 ),
1222
+ datetime (2014 , 7 , 4 , 15 )),
1223
+ datetime (2014 , 7 , 7 , 9 , 1 ): (datetime (2014 , 7 , 7 , 11 , 15 ),
1224
+ datetime (2014 , 7 , 4 , 15 )),
1225
+ datetime (2014 , 7 , 7 , 12 ): (datetime (2014 , 7 , 7 , 15 ),
1226
+ datetime (2014 , 7 , 7 , 11 , 15 ))}))
1227
+
1228
+ opening_time_cases .append (([BusinessHour (- 1 , start = ['17:00' , '08:00' ], end = ['05:00' , '10:00' ]),
1229
+ BusinessHour (n = - 2 , start = ['08:00' , '17:00' ], end = ['10:00' , '03:00' ])], {
1230
+ datetime (2014 , 7 , 1 , 11 ): (datetime (2014 , 7 , 1 , 8 ),
1231
+ datetime (2014 , 7 , 1 , 17 )),
1232
+ datetime (2014 , 7 , 1 , 18 ): (datetime (2014 , 7 , 1 , 17 ),
1233
+ datetime (2014 , 7 , 2 , 8 )),
1234
+ datetime (2014 , 7 , 1 , 23 ): (datetime (2014 , 7 , 1 , 17 ),
1235
+ datetime (2014 , 7 , 2 , 8 )),
1236
+ datetime (2014 , 7 , 2 , 8 ): (datetime (2014 , 7 , 2 , 8 ),
1237
+ datetime (2014 , 7 , 2 , 8 )),
1238
+ datetime (2014 , 7 , 2 , 9 ): (datetime (2014 , 7 , 2 , 8 ),
1239
+ datetime (2014 , 7 , 2 , 17 )),
1240
+ datetime (2014 , 7 , 2 , 16 , 59 ): (datetime (2014 , 7 , 2 , 8 ),
1241
+ datetime (2014 , 7 , 2 , 17 )),
1242
+ datetime (2014 , 7 , 5 , 10 ): (datetime (2014 , 7 , 4 , 17 ),
1243
+ datetime (2014 , 7 , 7 , 8 )),
1244
+ datetime (2014 , 7 , 4 , 10 ): (datetime (2014 , 7 , 4 , 8 ),
1245
+ datetime (2014 , 7 , 4 , 17 )),
1246
+ datetime (2014 , 7 , 4 , 23 ): (datetime (2014 , 7 , 4 , 17 ),
1247
+ datetime (2014 , 7 , 7 , 8 )),
1248
+ datetime (2014 , 7 , 6 , 10 ): (datetime (2014 , 7 , 4 , 17 ),
1249
+ datetime (2014 , 7 , 7 , 8 )),
1250
+ datetime (2014 , 7 , 7 , 5 ): (datetime (2014 , 7 , 4 , 17 ),
1251
+ datetime (2014 , 7 , 7 , 8 )),
1252
+ datetime (2014 , 7 , 7 , 18 ): (datetime (2014 , 7 , 7 , 17 ),
1253
+ datetime (2014 , 7 , 8 , 8 ))}))
1254
+
1129
1255
@pytest .mark .parametrize ('case' , opening_time_cases )
1130
1256
def test_opening_time (self , case ):
1131
1257
_offsets , cases = case
@@ -1287,6 +1413,77 @@ def test_opening_time(self, case):
1287
1413
datetime (2014 , 7 , 7 , 19 , 30 ): datetime (2014 , 7 , 5 , 4 , 30 ),
1288
1414
datetime (2014 , 7 , 7 , 19 , 30 , 30 ): datetime (2014 , 7 , 5 , 4 , 30 , 30 )}))
1289
1415
1416
+ # multiple business hours
1417
+ apply_cases .append ((BusinessHour (start = ['09:00' , '14:00' ], end = ['12:00' , '18:00' ]), {
1418
+ datetime (2014 , 7 , 1 , 11 ): datetime (2014 , 7 , 1 , 14 ),
1419
+ datetime (2014 , 7 , 1 , 15 ): datetime (2014 , 7 , 1 , 16 ),
1420
+ datetime (2014 , 7 , 1 , 19 ): datetime (2014 , 7 , 2 , 10 ),
1421
+ datetime (2014 , 7 , 1 , 16 ): datetime (2014 , 7 , 1 , 17 ),
1422
+ datetime (2014 , 7 , 1 , 16 , 30 , 15 ): datetime (2014 , 7 , 1 , 17 , 30 , 15 ),
1423
+ datetime (2014 , 7 , 1 , 17 ): datetime (2014 , 7 , 2 , 9 ),
1424
+ datetime (2014 , 7 , 2 , 11 ): datetime (2014 , 7 , 2 , 14 ),
1425
+ # out of business hours
1426
+ datetime (2014 , 7 , 1 , 13 ): datetime (2014 , 7 , 1 , 15 ),
1427
+ datetime (2014 , 7 , 2 , 8 ): datetime (2014 , 7 , 2 , 10 ),
1428
+ datetime (2014 , 7 , 2 , 19 ): datetime (2014 , 7 , 3 , 10 ),
1429
+ datetime (2014 , 7 , 2 , 23 ): datetime (2014 , 7 , 3 , 10 ),
1430
+ datetime (2014 , 7 , 3 , 0 ): datetime (2014 , 7 , 3 , 10 ),
1431
+ # saturday
1432
+ datetime (2014 , 7 , 5 , 15 ): datetime (2014 , 7 , 7 , 10 ),
1433
+ datetime (2014 , 7 , 4 , 17 ): datetime (2014 , 7 , 7 , 9 ),
1434
+ datetime (2014 , 7 , 4 , 17 , 30 ): datetime (2014 , 7 , 7 , 9 , 30 ),
1435
+ datetime (2014 , 7 , 4 , 17 , 30 , 30 ): datetime (2014 , 7 , 7 , 9 , 30 , 30 )}))
1436
+
1437
+ apply_cases .append ((BusinessHour (n = 4 , start = ['09:00' , '14:00' ], end = ['12:00' , '18:00' ]), {
1438
+ datetime (2014 , 7 , 1 , 11 ): datetime (2014 , 7 , 1 , 17 ),
1439
+ datetime (2014 , 7 , 1 , 13 ): datetime (2014 , 7 , 2 , 9 ),
1440
+ datetime (2014 , 7 , 1 , 15 ): datetime (2014 , 7 , 2 , 10 ),
1441
+ datetime (2014 , 7 , 1 , 16 ): datetime (2014 , 7 , 2 , 11 ),
1442
+ datetime (2014 , 7 , 1 , 17 ): datetime (2014 , 7 , 2 , 14 ),
1443
+ datetime (2014 , 7 , 2 , 11 ): datetime (2014 , 7 , 2 , 17 ),
1444
+ datetime (2014 , 7 , 2 , 8 ): datetime (2014 , 7 , 2 , 15 ),
1445
+ datetime (2014 , 7 , 2 , 19 ): datetime (2014 , 7 , 3 , 15 ),
1446
+ datetime (2014 , 7 , 2 , 23 ): datetime (2014 , 7 , 3 , 15 ),
1447
+ datetime (2014 , 7 , 3 , 0 ): datetime (2014 , 7 , 3 , 15 ),
1448
+ datetime (2014 , 7 , 5 , 15 ): datetime (2014 , 7 , 7 , 15 ),
1449
+ datetime (2014 , 7 , 4 , 17 ): datetime (2014 , 7 , 7 , 14 ),
1450
+ datetime (2014 , 7 , 4 , 16 , 30 ): datetime (2014 , 7 , 7 , 11 , 30 ),
1451
+ datetime (2014 , 7 , 4 , 16 , 30 , 30 ): datetime (2014 , 7 , 7 , 11 , 30 , 30 )}))
1452
+
1453
+ apply_cases .append ((BusinessHour (n = - 4 , start = ['09:00' , '14:00' ], end = ['12:00' , '18:00' ]), {
1454
+ datetime (2014 , 7 , 1 , 11 ): datetime (2014 , 6 , 30 , 16 ),
1455
+ datetime (2014 , 7 , 1 , 13 ): datetime (2014 , 6 , 30 , 17 ),
1456
+ datetime (2014 , 7 , 1 , 15 ): datetime (2014 , 6 , 30 , 18 ),
1457
+ datetime (2014 , 7 , 1 , 16 ): datetime (2014 , 7 , 1 , 10 ),
1458
+ datetime (2014 , 7 , 1 , 17 ): datetime (2014 , 7 , 1 , 11 ),
1459
+ datetime (2014 , 7 , 2 , 11 ): datetime (2014 , 7 , 1 , 16 ),
1460
+ datetime (2014 , 7 , 2 , 8 ): datetime (2014 , 7 , 1 , 12 ),
1461
+ datetime (2014 , 7 , 2 , 19 ): datetime (2014 , 7 , 2 , 12 ),
1462
+ datetime (2014 , 7 , 2 , 23 ): datetime (2014 , 7 , 2 , 12 ),
1463
+ datetime (2014 , 7 , 3 , 0 ): datetime (2014 , 7 , 2 , 12 ),
1464
+ datetime (2014 , 7 , 5 , 15 ): datetime (2014 , 7 , 4 , 12 ),
1465
+ datetime (2014 , 7 , 4 , 18 ): datetime (2014 , 7 , 4 , 12 ),
1466
+ datetime (2014 , 7 , 7 , 9 , 30 ): datetime (2014 , 7 , 4 , 14 , 30 ),
1467
+ datetime (2014 , 7 , 7 , 9 , 30 , 30 ): datetime (2014 , 7 , 4 , 14 , 30 , 30 )}))
1468
+
1469
+ apply_cases .append ((BusinessHour (n = - 1 , start = ['19:00' , '03:00' ], end = ['01:00' , '05:00' ]), {
1470
+ datetime (2014 , 7 , 1 , 17 ): datetime (2014 , 7 , 1 , 4 ),
1471
+ datetime (2014 , 7 , 2 , 14 ): datetime (2014 , 7 , 2 , 4 ),
1472
+ datetime (2014 , 7 , 2 , 8 ): datetime (2014 , 7 , 2 , 4 ),
1473
+ datetime (2014 , 7 , 2 , 13 ): datetime (2014 , 7 , 2 , 4 ),
1474
+ datetime (2014 , 7 , 2 , 20 ): datetime (2014 , 7 , 2 , 5 ),
1475
+ datetime (2014 , 7 , 2 , 19 ): datetime (2014 , 7 , 2 , 4 ),
1476
+ datetime (2014 , 7 , 2 , 4 ): datetime (2014 , 7 , 2 , 1 ),
1477
+ datetime (2014 , 7 , 2 , 19 , 30 ): datetime (2014 , 7 , 2 , 4 , 30 ),
1478
+ datetime (2014 , 7 , 3 , 0 ): datetime (2014 , 7 , 2 , 23 ),
1479
+ datetime (2014 , 7 , 3 , 6 ): datetime (2014 , 7 , 3 , 4 ),
1480
+ datetime (2014 , 7 , 4 , 23 ): datetime (2014 , 7 , 4 , 22 ),
1481
+ datetime (2014 , 7 , 5 , 0 ): datetime (2014 , 7 , 4 , 23 ),
1482
+ datetime (2014 , 7 , 5 , 4 ): datetime (2014 , 7 , 5 , 0 ),
1483
+ datetime (2014 , 7 , 7 , 3 , 30 ): datetime (2014 , 7 , 5 , 0 , 30 ),
1484
+ datetime (2014 , 7 , 7 , 19 , 30 ): datetime (2014 , 7 , 7 , 4 , 30 ),
1485
+ datetime (2014 , 7 , 7 , 19 , 30 , 30 ): datetime (2014 , 7 , 7 , 4 , 30 , 30 )}))
1486
+
1290
1487
@pytest .mark .parametrize ('case' , apply_cases )
1291
1488
def test_apply (self , case ):
1292
1489
offset , cases = case
@@ -1343,6 +1540,40 @@ def test_apply(self, case):
1343
1540
datetime (2014 , 7 , 7 , 1 ): datetime (2014 , 7 , 15 , 0 ),
1344
1541
datetime (2014 , 7 , 7 , 23 , 30 ): datetime (2014 , 7 , 15 , 21 , 30 )}))
1345
1542
1543
+ # large n for multiple opening hours (3 days and 1 hour before)
1544
+ apply_large_n_cases .append ((BusinessHour (n = - 25 , start = ['09:00' , '14:00' ], end = ['12:00' , '19:00' ]), {
1545
+ datetime (2014 , 7 , 1 , 11 ): datetime (2014 , 6 , 26 , 10 ),
1546
+ datetime (2014 , 7 , 1 , 13 ): datetime (2014 , 6 , 26 , 11 ),
1547
+ datetime (2014 , 7 , 1 , 9 ): datetime (2014 , 6 , 25 , 18 ),
1548
+ datetime (2014 , 7 , 1 , 10 ): datetime (2014 , 6 , 25 , 19 ),
1549
+ datetime (2014 , 7 , 3 , 11 ): datetime (2014 , 6 , 30 , 10 ),
1550
+ datetime (2014 , 7 , 3 , 8 ): datetime (2014 , 6 , 27 , 18 ),
1551
+ datetime (2014 , 7 , 3 , 19 ): datetime (2014 , 6 , 30 , 18 ),
1552
+ datetime (2014 , 7 , 3 , 23 ): datetime (2014 , 6 , 30 , 18 ),
1553
+ datetime (2014 , 7 , 4 , 9 ): datetime (2014 , 6 , 30 , 18 ),
1554
+ datetime (2014 , 7 , 5 , 15 ): datetime (2014 , 7 , 1 , 18 ),
1555
+ datetime (2014 , 7 , 6 , 18 ): datetime (2014 , 7 , 1 , 18 ),
1556
+ datetime (2014 , 7 , 7 , 9 , 30 ): datetime (2014 , 7 , 1 , 18 , 30 ),
1557
+ datetime (2014 , 7 , 7 , 10 , 30 , 30 ): datetime (2014 , 7 , 2 , 9 , 30 , 30 )}))
1558
+
1559
+ # 5 days and 3 hours later
1560
+ apply_large_n_cases .append ((BusinessHour (28 , start = ['21:00' , '03:00' ], end = ['01:00' , '04:00' ]), {
1561
+ datetime (2014 , 7 , 1 , 11 ): datetime (2014 , 7 , 9 , 0 ),
1562
+ datetime (2014 , 7 , 1 , 22 ): datetime (2014 , 7 , 9 , 3 ),
1563
+ datetime (2014 , 7 , 1 , 23 ): datetime (2014 , 7 , 9 , 21 ),
1564
+ datetime (2014 , 7 , 2 , 2 ): datetime (2014 , 7 , 9 , 23 ),
1565
+ datetime (2014 , 7 , 3 , 21 ): datetime (2014 , 7 , 11 , 0 ),
1566
+ datetime (2014 , 7 , 4 , 1 ): datetime (2014 , 7 , 11 , 23 ),
1567
+ datetime (2014 , 7 , 4 , 2 ): datetime (2014 , 7 , 11 , 23 ),
1568
+ datetime (2014 , 7 , 4 , 3 ): datetime (2014 , 7 , 11 , 23 ),
1569
+ datetime (2014 , 7 , 4 , 21 ): datetime (2014 , 7 , 12 , 0 ),
1570
+ datetime (2014 , 7 , 5 , 0 ): datetime (2014 , 7 , 14 , 22 ),
1571
+ datetime (2014 , 7 , 5 , 1 ): datetime (2014 , 7 , 14 , 23 ),
1572
+ datetime (2014 , 7 , 5 , 15 ): datetime (2014 , 7 , 14 , 23 ),
1573
+ datetime (2014 , 7 , 6 , 18 ): datetime (2014 , 7 , 14 , 23 ),
1574
+ datetime (2014 , 7 , 7 , 1 ): datetime (2014 , 7 , 14 , 23 ),
1575
+ datetime (2014 , 7 , 7 , 23 , 30 ): datetime (2014 , 7 , 15 , 21 , 30 )}))
1576
+
1346
1577
@pytest .mark .parametrize ('case' , apply_large_n_cases )
1347
1578
def test_apply_large_n (self , case ):
1348
1579
offset , cases = case
0 commit comments