1
from pandas.core.datetools import BDay
2
from datetime import datetime
3
from pandas.core.datetools import *
4
from pandas.core.daterange import XDateRange, DateRange
5
import pandas.core.datetools as datetools
11
actual = datetools.format(datetime(2008, 1, 15))
12
assert actual == '20080115'
14
def testOle2datetime():
15
actual = datetools.ole2datetime(60000)
16
assert actual == datetime(2064, 4, 8)
18
def testTto_datetime1():
19
actual = datetools.to_datetime(datetime(2008, 1, 15))
20
assert actual == datetime(2008, 1, 15)
22
def testTto_datetime2():
23
actual = datetools.to_datetime('20080115')
24
assert actual == datetime(2008, 1, 15)
26
def testNormalize_date():
27
actual = datetools.normalize_date(datetime(2007, 10, 1, 1, 12, 5, 10))
28
assert actual == datetime(2007, 10, 1)
34
def myAssert(actual, expected):
35
assert actual == expected
38
myAssert(datetools.BDay(2), datetools.BDay(2))
41
myAssert(datetools.BDay(2).__hash__(), datetools.BDay(2).__hash__())
44
myAssert(BDay(2)(datetime(2008, 1, 1)), datetime(2008, 1, 3))
47
myAssert(datetime(2008, 1, 1) + BDay(2), BDay(2) + datetime(2008, 1, 1))
50
myAssert(datetime(2008, 1, 1) - BDay(2), datetime(2008, 1, 1) + BDay(-2))
53
myAssert(datetime(2008, 1, 1) - BDay(2), BDay(2) - datetime(2008, 1, 1))
56
myAssert(datetime(2008, 1, 1) + 10*BDay(), datetime(2008, 1, 1) + BDay(10))
59
myAssert(datetime(2008, 1, 1) + (-5*BDay(-10)),
60
datetime(2008, 1, 1) + BDay(50))
64
myAssert(BDay(10).rollback(datetime(2008, 1, 1)), datetime(2008, 1, 1))
67
myAssert(BDay(10).rollback(datetime(2008, 1, 5)), datetime(2008, 1, 4))
69
def testRollforward1():
70
myAssert(BDay(10).rollforward(datetime(2008, 1, 1)), datetime(2008, 1, 1))
72
def testRollforward2():
73
myAssert(BDay(10).rollforward(datetime(2008, 1, 5)), datetime(2008, 1, 7))
75
def assertOnOffset(offset, date, expected):
76
actual = offset.onOffset(date)
77
assert actual == expected
81
tests = [(BDay(), datetime(2008, 1, 1), True),
82
(BDay(), datetime(2008, 1, 5), False),
84
(BMonthEnd(), datetime(2007, 12, 31), True),
85
(BMonthEnd(), datetime(2008, 1, 1), False),
87
(BQuarterEnd(1, startingMonth=1), datetime(2008, 1, 31), True),
88
(BQuarterEnd(1, startingMonth=1), datetime(2007, 12, 31), False),
89
(BQuarterEnd(1, startingMonth=1), datetime(2008, 2, 29), False),
90
(BQuarterEnd(1, startingMonth=1), datetime(2007, 3, 30), False),
91
(BQuarterEnd(1, startingMonth=1), datetime(2007, 3, 31), False),
92
(BQuarterEnd(1, startingMonth=1), datetime(2008, 4, 30), True),
93
(BQuarterEnd(1, startingMonth=1), datetime(2008, 5, 30), False),
94
(BQuarterEnd(1, startingMonth=1), datetime(2007, 6, 29), False),
95
(BQuarterEnd(1, startingMonth=1), datetime(2007, 6, 30), False),
97
(BQuarterEnd(1, startingMonth=2), datetime(2008, 1, 31), False),
98
(BQuarterEnd(1, startingMonth=2), datetime(2007, 12, 31), False),
99
(BQuarterEnd(1, startingMonth=2), datetime(2008, 2, 29), True),
100
(BQuarterEnd(1, startingMonth=2), datetime(2007, 3, 30), False),
101
(BQuarterEnd(1, startingMonth=2), datetime(2007, 3, 31), False),
102
(BQuarterEnd(1, startingMonth=2), datetime(2008, 4, 30), False),
103
(BQuarterEnd(1, startingMonth=2), datetime(2008, 5, 30), True),
104
(BQuarterEnd(1, startingMonth=2), datetime(2007, 6, 29), False),
105
(BQuarterEnd(1, startingMonth=2), datetime(2007, 6, 30), False),
107
(BQuarterEnd(1, startingMonth=3), datetime(2008, 1, 31), False),
108
(BQuarterEnd(1, startingMonth=3), datetime(2007, 12, 31), True),
109
(BQuarterEnd(1, startingMonth=3), datetime(2008, 2, 29), False),
110
(BQuarterEnd(1, startingMonth=3), datetime(2007, 3, 30), True),
111
(BQuarterEnd(1, startingMonth=3), datetime(2007, 3, 31), False),
112
(BQuarterEnd(1, startingMonth=3), datetime(2008, 4, 30), False),
113
(BQuarterEnd(1, startingMonth=3), datetime(2008, 5, 30), False),
114
(BQuarterEnd(1, startingMonth=3), datetime(2007, 6, 29), True),
115
(BQuarterEnd(1, startingMonth=3), datetime(2007, 6, 30), False),
117
(BYearEnd(), datetime(2007, 12, 31), True),
118
(BYearEnd(), datetime(2008, 1, 1), False),
119
(BYearEnd(), datetime(2006, 12, 31), False),
120
(BYearEnd(), datetime(2006, 12, 29), True),
122
(MonthEnd(), datetime(2007, 3, 30), False),
123
(MonthEnd(), datetime(2007, 3, 31), True),
125
#(QuarterEnd(1, startingMonth=1), datetime(2008, 1, 31), True),
126
#(QuarterEnd(1, startingMonth=1), datetime(2007, 12, 31), False),
127
#(QuarterEnd(1, startingMonth=1), datetime(2008, 2, 29), False),
128
#(QuarterEnd(1, startingMonth=3), datetime(2007, 3, 30), False),
129
#(QuarterEnd(1, startingMonth=3), datetime(2007, 3, 31), False),
130
#(QuarterEnd(1, startingMonth=1), datetime(2008, 4, 30), True),
131
#(QuarterEnd(1, startingMonth=2), datetime(2008, 5, 30), False),
132
#(QuarterEnd(1, startingMonth=3), datetime(2008, 6, 29), False),
133
#(QuarterEnd(1, startingMonth=3), datetime(2008, 6, 30), False),
135
#(QuarterEnd(1, startingMonth=2), datetime(2008, 1, 31), False),
136
#(QuarterEnd(1, startingMonth=2), datetime(2007, 12, 31), False),
137
#(QuarterEnd(1, startingMonth=2), datetime(2008, 2, 29), True),
138
#(QuarterEnd(1, startingMonth=3), datetime(2007, 3, 30), False),
139
#(QuarterEnd(1, startingMonth=3), datetime(2007, 3, 31), False),
140
#(QuarterEnd(1, startingMonth=2), datetime(2008, 4, 30), False),
141
#(QuarterEnd(1, startingMonth=2), datetime(2008, 5, 30), True),
142
#(QuarterEnd(1, startingMonth=3), datetime(2008, 6, 29), False),
143
#(QuarterEnd(1, startingMonth=3), datetime(2008, 6, 30), False),
145
#(QuarterEnd(1, startingMonth=3), datetime(2008, 1, 31), False),
146
#(QuarterEnd(1, startingMonth=3), datetime(2007, 12, 31), False),
147
#(QuarterEnd(1, startingMonth=3), datetime(2008, 2, 29), False),
148
#(QuarterEnd(1, startingMonth=3), datetime(2007, 3, 30), False),
149
#(QuarterEnd(1, startingMonth=3), datetime(2007, 3, 31), True),
150
#(QuarterEnd(1, startingMonth=3), datetime(2008, 4, 30), False),
151
#(QuarterEnd(1, startingMonth=3), datetime(2008, 5, 30), False),
152
#(QuarterEnd(1, startingMonth=3), datetime(2008, 6, 29), False),
153
#(QuarterEnd(1, startingMonth=3), datetime(2008, 6, 30), True),
155
(datetools.Week(dayOfWeek=0), datetime(2008, 1, 1), False),
156
(datetools.Week(dayOfWeek=0), datetime(2008, 1, 2), False),
157
(datetools.Week(dayOfWeek=0), datetime(2008, 1, 3), False),
158
(datetools.Week(dayOfWeek=0), datetime(2008, 1, 4), False),
159
(datetools.Week(dayOfWeek=0), datetime(2008, 1, 5), False),
160
(datetools.Week(dayOfWeek=0), datetime(2008, 1, 6), False),
161
(datetools.Week(dayOfWeek=0), datetime(2008, 1, 7), True),
163
(datetools.Week(dayOfWeek=1), datetime(2008, 1, 1), True),
164
(datetools.Week(dayOfWeek=1), datetime(2008, 1, 2), False),
165
(datetools.Week(dayOfWeek=1), datetime(2008, 1, 3), False),
166
(datetools.Week(dayOfWeek=1), datetime(2008, 1, 4), False),
167
(datetools.Week(dayOfWeek=1), datetime(2008, 1, 5), False),
168
(datetools.Week(dayOfWeek=1), datetime(2008, 1, 6), False),
169
(datetools.Week(dayOfWeek=1), datetime(2008, 1, 7), False),
171
(datetools.Week(dayOfWeek=2), datetime(2008, 1, 1), False),
172
(datetools.Week(dayOfWeek=2), datetime(2008, 1, 2), True),
173
(datetools.Week(dayOfWeek=2), datetime(2008, 1, 3), False),
174
(datetools.Week(dayOfWeek=2), datetime(2008, 1, 4), False),
175
(datetools.Week(dayOfWeek=2), datetime(2008, 1, 5), False),
176
(datetools.Week(dayOfWeek=2), datetime(2008, 1, 6), False),
177
(datetools.Week(dayOfWeek=2), datetime(2008, 1, 7), False),
179
(datetools.Week(dayOfWeek=3), datetime(2008, 1, 1), False),
180
(datetools.Week(dayOfWeek=3), datetime(2008, 1, 2), False),
181
(datetools.Week(dayOfWeek=3), datetime(2008, 1, 3), True),
182
(datetools.Week(dayOfWeek=3), datetime(2008, 1, 4), False),
183
(datetools.Week(dayOfWeek=3), datetime(2008, 1, 5), False),
184
(datetools.Week(dayOfWeek=3), datetime(2008, 1, 6), False),
185
(datetools.Week(dayOfWeek=3), datetime(2008, 1, 7), False),
187
(datetools.Week(dayOfWeek=4), datetime(2008, 1, 1), False),
188
(datetools.Week(dayOfWeek=4), datetime(2008, 1, 2), False),
189
(datetools.Week(dayOfWeek=4), datetime(2008, 1, 3), False),
190
(datetools.Week(dayOfWeek=4), datetime(2008, 1, 4), True),
191
(datetools.Week(dayOfWeek=4), datetime(2008, 1, 5), False),
192
(datetools.Week(dayOfWeek=4), datetime(2008, 1, 6), False),
193
(datetools.Week(dayOfWeek=4), datetime(2008, 1, 7), False),
195
(datetools.Week(dayOfWeek=5), datetime(2008, 1, 1), False),
196
(datetools.Week(dayOfWeek=5), datetime(2008, 1, 2), False),
197
(datetools.Week(dayOfWeek=5), datetime(2008, 1, 3), False),
198
(datetools.Week(dayOfWeek=5), datetime(2008, 1, 4), False),
199
(datetools.Week(dayOfWeek=5), datetime(2008, 1, 5), True),
200
(datetools.Week(dayOfWeek=5), datetime(2008, 1, 6), False),
201
(datetools.Week(dayOfWeek=5), datetime(2008, 1, 7), False),
203
(datetools.Week(dayOfWeek=6), datetime(2008, 1, 1), False),
204
(datetools.Week(dayOfWeek=6), datetime(2008, 1, 2), False),
205
(datetools.Week(dayOfWeek=6), datetime(2008, 1, 3), False),
206
(datetools.Week(dayOfWeek=6), datetime(2008, 1, 4), False),
207
(datetools.Week(dayOfWeek=6), datetime(2008, 1, 5), False),
208
(datetools.Week(dayOfWeek=6), datetime(2008, 1, 6), True),
209
(datetools.Week(dayOfWeek=6), datetime(2008, 1, 7), False),
212
for offset, date, expected in tests:
213
yield assertOnOffset, offset, date, expected
216
def assertEq(dateOffset, baseDate, expected):
217
actual = dateOffset + baseDate
218
assert actual == expected
223
tests.append((datetools.bday,
224
{datetime(2008, 1, 1): datetime(2008, 1, 2),
225
datetime(2008, 1, 4): datetime(2008, 1, 7),
226
datetime(2008, 1, 5): datetime(2008, 1, 7),
227
datetime(2008, 1, 6): datetime(2008, 1, 7),
228
datetime(2008, 1, 7): datetime(2008, 1, 8)}))
230
tests.append((2*datetools.bday,
231
{datetime(2008, 1, 1): datetime(2008, 1, 3),
232
datetime(2008, 1, 4): datetime(2008, 1, 8),
233
datetime(2008, 1, 5): datetime(2008, 1, 8),
234
datetime(2008, 1, 6): datetime(2008, 1, 8),
235
datetime(2008, 1, 7): datetime(2008, 1, 9)}))
237
tests.append((-datetools.bday,
238
{datetime(2008, 1, 1): datetime(2007, 12, 31),
239
datetime(2008, 1, 4): datetime(2008, 1, 3),
240
datetime(2008, 1, 5): datetime(2008, 1, 4),
241
datetime(2008, 1, 6): datetime(2008, 1, 4),
242
datetime(2008, 1, 7): datetime(2008, 1, 4),
243
datetime(2008, 1, 8): datetime(2008, 1, 7)}))
245
tests.append((-2*datetools.bday,
246
{datetime(2008, 1, 1): datetime(2007, 12, 28),
247
datetime(2008, 1, 4): datetime(2008, 1, 2),
248
datetime(2008, 1, 5): datetime(2008, 1, 3),
249
datetime(2008, 1, 6): datetime(2008, 1, 3),
250
datetime(2008, 1, 7): datetime(2008, 1, 3),
251
datetime(2008, 1, 8): datetime(2008, 1, 4),
252
datetime(2008, 1, 9): datetime(2008, 1, 7)}))
254
tests.append((datetools.BDay(0),
255
{datetime(2008, 1, 1): datetime(2008, 1, 1),
256
datetime(2008, 1, 4): datetime(2008, 1, 4),
257
datetime(2008, 1, 5): datetime(2008, 1, 7),
258
datetime(2008, 1, 6): datetime(2008, 1, 7),
259
datetime(2008, 1, 7): datetime(2008, 1, 7)}))
261
for dateOffset, cases in tests:
262
for baseDate, expected in cases.iteritems():
263
yield assertEq, dateOffset, baseDate, expected
268
tests.append((datetools.week, # not business week
269
{datetime(2008, 1, 1): datetime(2008, 1, 8),
270
datetime(2008, 1, 4): datetime(2008, 1, 11),
271
datetime(2008, 1, 5): datetime(2008, 1, 12),
272
datetime(2008, 1, 6): datetime(2008, 1, 13),
273
datetime(2008, 1, 7): datetime(2008, 1, 14)}))
275
tests.append((datetools.Week(dayOfWeek=0), # Mon
276
{datetime(2007, 12, 31): datetime(2008, 1, 7),
277
datetime(2008, 1, 4): datetime(2008, 1, 7),
278
datetime(2008, 1, 5): datetime(2008, 1, 7),
279
datetime(2008, 1, 6): datetime(2008, 1, 7),
280
datetime(2008, 1, 7): datetime(2008, 1, 14)}))
282
tests.append((datetools.Week(0, dayOfWeek=0), # n=0 -> roll forward. Mon
283
{datetime(2007, 12, 31): datetime(2007, 12, 31),
284
datetime(2008, 1, 4): datetime(2008, 1, 7),
285
datetime(2008, 1, 5): datetime(2008, 1, 7),
286
datetime(2008, 1, 6): datetime(2008, 1, 7),
287
datetime(2008, 1, 7): datetime(2008, 1, 7)}))
289
for dateOffset, cases in tests:
290
for baseDate, expected in cases.iteritems():
291
yield assertEq, dateOffset, baseDate, expected
296
tests.append((datetools.BMonthEnd(),
297
{datetime(2008, 1, 1): datetime(2008, 1, 31),
298
datetime(2008, 1, 31): datetime(2008, 2, 29),
299
datetime(2006, 12, 29): datetime(2007, 1, 31),
300
datetime(2006, 12, 31): datetime(2007, 1, 31),
301
datetime(2007, 1, 1): datetime(2007, 1, 31),
302
datetime(2006, 12, 1): datetime(2006, 12, 29)}))
304
tests.append((datetools.BMonthEnd(0),
305
{datetime(2008, 1, 1): datetime(2008, 1, 31),
306
datetime(2008, 1, 31): datetime(2008, 1, 31),
307
datetime(2006, 12, 29): datetime(2006, 12, 29),
308
datetime(2006, 12, 31): datetime(2007, 1, 31),
309
datetime(2007, 1, 1): datetime(2007, 1, 31)}))
311
tests.append((datetools.BMonthEnd(2),
312
{datetime(2008, 1, 1): datetime(2008, 2, 29),
313
datetime(2008, 1, 31): datetime(2008, 3, 31),
314
datetime(2006, 12, 29): datetime(2007, 2, 28),
315
datetime(2006, 12, 31): datetime(2007, 2, 28),
316
datetime(2007, 1, 1): datetime(2007, 2, 28),
317
datetime(2006, 11, 1): datetime(2006, 12, 29)}))
319
tests.append((datetools.BMonthEnd(-1),
320
{datetime(2007, 1, 1): datetime(2006, 12, 29),
321
datetime(2008, 6, 30): datetime(2008, 5, 30),
322
datetime(2008, 12, 31): datetime(2008, 11, 28),
323
datetime(2006, 12, 29): datetime(2006, 11, 30),
324
datetime(2006, 12, 30): datetime(2006, 12, 29),
325
datetime(2007, 1, 1): datetime(2006, 12, 29)}))
327
for dateOffset, cases in tests:
328
for baseDate, expected in cases.iteritems():
329
yield assertEq, dateOffset, baseDate, expected
335
tests.append((datetools.BYearEnd(),
336
{datetime(2008, 1, 1): datetime(2008, 12, 31),
337
datetime(2008, 6, 30): datetime(2008, 12, 31),
338
datetime(2008, 12, 31): datetime(2009, 12, 31),
339
datetime(2005, 12, 30): datetime(2006, 12, 29),
340
datetime(2005, 12, 31): datetime(2006, 12, 29),}))
342
tests.append((datetools.BYearEnd(0),
343
{datetime(2008, 1, 1): datetime(2008, 12, 31),
344
datetime(2008, 6, 30): datetime(2008, 12, 31),
345
datetime(2008, 12, 31): datetime(2008, 12, 31),
346
datetime(2005, 12, 31): datetime(2006, 12, 29),}))
348
tests.append((datetools.BYearEnd(-1),
349
{datetime(2007, 1, 1): datetime(2006, 12, 29),
350
datetime(2008, 6, 30): datetime(2007, 12, 31),
351
datetime(2008, 12, 31): datetime(2007, 12, 31),
352
datetime(2006, 12, 29): datetime(2005, 12, 30),
353
datetime(2006, 12, 30): datetime(2006, 12, 29),
354
datetime(2007, 1, 1): datetime(2006, 12, 29),}))
356
tests.append((datetools.BYearEnd(-2),
357
{datetime(2007, 1, 1): datetime(2005, 12, 30),
358
datetime(2008, 6, 30): datetime(2006, 12, 29),
359
datetime(2008, 12, 31): datetime(2006, 12, 29),}))
361
for dateOffset, cases in tests:
362
for baseDate, expected in cases.iteritems():
363
yield assertEq, dateOffset, baseDate, expected
368
tests.append((datetools.YearBegin(),
369
{datetime(2008, 1, 1): datetime(2009, 1, 1),
370
datetime(2008, 6, 30): datetime(2009, 1, 1),
371
datetime(2008, 12, 31): datetime(2009, 1, 1),
372
datetime(2005, 12, 30): datetime(2006, 1, 1),
373
datetime(2005, 12, 31): datetime(2006, 1, 1),}))
375
tests.append((datetools.YearBegin(0),
376
{datetime(2008, 1, 1): datetime(2008, 1, 1),
377
datetime(2008, 6, 30): datetime(2009, 1, 1),
378
datetime(2008, 12, 31): datetime(2009, 1, 1),
379
datetime(2005, 12, 30): datetime(2006, 1, 1),
380
datetime(2005, 12, 31): datetime(2006, 1, 1),}))
383
tests.append((datetools.YearBegin(-1),
384
{datetime(2007, 1, 1): datetime(2006, 1, 1),
385
datetime(2008, 6, 30): datetime(2008, 1, 1),
386
datetime(2008, 12, 31): datetime(2008, 1, 1),
387
datetime(2006, 12, 29): datetime(2006, 1, 1),
388
datetime(2006, 12, 30): datetime(2006, 1, 1),
389
datetime(2007, 1, 1): datetime(2006, 1, 1),}))
391
tests.append((datetools.YearBegin(-2),
392
{datetime(2007, 1, 1): datetime(2005, 1, 1),
393
datetime(2008, 6, 30): datetime(2007, 1, 1),
394
datetime(2008, 12, 31): datetime(2007, 1, 1),}))
396
for dateOffset, cases in tests:
397
for baseDate, expected in cases.iteritems():
398
yield assertEq, dateOffset, baseDate, expected
401
def testBQuarterEnd():
404
tests.append((datetools.BQuarterEnd(),
405
{datetime(2008, 1, 1): datetime(2008, 3, 31),
406
datetime(2008, 1, 31): datetime(2008, 3, 31),
407
datetime(2008, 2, 15): datetime(2008, 3, 31),
408
datetime(2008, 2, 29): datetime(2008, 3, 31),
409
datetime(2008, 3, 15): datetime(2008, 3, 31),
410
datetime(2008, 3, 31): datetime(2008, 6, 30),
411
datetime(2008, 4, 15): datetime(2008, 6, 30),
412
datetime(2008, 4, 30): datetime(2008, 6, 30),}))
414
tests.append((datetools.BQuarterEnd(n = 0),
415
{datetime(2008, 1, 1): datetime(2008, 3, 31),
416
datetime(2008, 1, 31): datetime(2008, 3, 31),
417
datetime(2008, 2, 15): datetime(2008, 3, 31),
418
datetime(2008, 2, 29): datetime(2008, 3, 31),
419
datetime(2008, 3, 15): datetime(2008, 3, 31),
420
datetime(2008, 3, 31): datetime(2008, 3, 31),
421
datetime(2008, 4, 15): datetime(2008, 6, 30),
422
datetime(2008, 4, 30): datetime(2008, 6, 30),}))
424
tests.append((datetools.BQuarterEnd(n = -1),
425
{datetime(2008, 1, 1): datetime(2007, 12, 31),
426
datetime(2008, 1, 31): datetime(2007, 12, 31),
427
datetime(2008, 2, 15): datetime(2007, 12, 31),
428
datetime(2008, 2, 29): datetime(2007, 12, 31),
429
datetime(2008, 3, 15): datetime(2007, 12, 31),
430
datetime(2008, 3, 31): datetime(2007, 12, 31),
431
datetime(2008, 4, 15): datetime(2008, 3, 31),
432
datetime(2008, 4, 30): datetime(2008, 3, 31),}))
434
tests.append((datetools.BQuarterEnd(n = 2),
435
{datetime(2008, 1, 1): datetime(2008, 6, 30),
436
datetime(2008, 1, 31): datetime(2008, 6, 30),
437
datetime(2008, 2, 15): datetime(2008, 6, 30),
438
datetime(2008, 2, 29): datetime(2008, 6, 30),
439
datetime(2008, 3, 15): datetime(2008, 6, 30),
440
datetime(2008, 3, 31): datetime(2008, 9, 30),
441
datetime(2008, 4, 15): datetime(2008, 9, 30),
442
datetime(2008, 4, 30): datetime(2008, 9, 30),}))
444
for dateOffset, cases in tests:
445
for baseDate, expected in cases.iteritems():
446
yield assertEq, dateOffset, baseDate, expected
448
def testBQuarterEndOffsets():
451
tests.append((datetools.BQuarterEnd(startingMonth=1),
452
{datetime(2008, 1, 1): datetime(2008, 1, 31),
453
datetime(2008, 1, 31): datetime(2008, 4, 30),
454
datetime(2008, 2, 15): datetime(2008, 4, 30),
455
datetime(2008, 2, 29): datetime(2008, 4, 30),
456
datetime(2008, 3, 15): datetime(2008, 4, 30),
457
datetime(2008, 3, 31): datetime(2008, 4, 30),
458
datetime(2008, 4, 15): datetime(2008, 4, 30),
459
datetime(2008, 4, 30): datetime(2008, 7, 31),}))
461
tests.append((datetools.BQuarterEnd(startingMonth=2),
462
{datetime(2008, 1, 1): datetime(2008, 2, 29),
463
datetime(2008, 1, 31): datetime(2008, 2, 29),
464
datetime(2008, 2, 15): datetime(2008, 2, 29),
465
datetime(2008, 2, 29): datetime(2008, 5, 30),
466
datetime(2008, 3, 15): datetime(2008, 5, 30),
467
datetime(2008, 3, 31): datetime(2008, 5, 30),
468
datetime(2008, 4, 15): datetime(2008, 5, 30),
469
datetime(2008, 4, 30): datetime(2008, 5, 30),}))
471
tests.append((datetools.BQuarterEnd(startingMonth=1, n=0),
472
{datetime(2008, 1, 1): datetime(2008, 1, 31),
473
datetime(2008, 1, 31): datetime(2008, 1, 31),
474
datetime(2008, 2, 15): datetime(2008, 4, 30),
475
datetime(2008, 2, 29): datetime(2008, 4, 30),
476
datetime(2008, 3, 15): datetime(2008, 4, 30),
477
datetime(2008, 3, 31): datetime(2008, 4, 30),
478
datetime(2008, 4, 15): datetime(2008, 4, 30),
479
datetime(2008, 4, 30): datetime(2008, 4, 30),}))
481
tests.append((datetools.BQuarterEnd(startingMonth=1, n=-1),
482
{datetime(2008, 1, 1): datetime(2007, 10, 31),
483
datetime(2008, 1, 31): datetime(2007, 10, 31),
484
datetime(2008, 2, 15): datetime(2008, 1, 31),
485
datetime(2008, 2, 29): datetime(2008, 1, 31),
486
datetime(2008, 3, 15): datetime(2008, 1, 31),
487
datetime(2008, 3, 31): datetime(2008, 1, 31),
488
datetime(2008, 4, 15): datetime(2008, 1, 31),
489
datetime(2008, 4, 30): datetime(2008, 1, 31),}))
491
tests.append((datetools.BQuarterEnd(startingMonth=1, n=2),
492
{datetime(2008, 1, 31): datetime(2008, 7, 31),
493
datetime(2008, 2, 15): datetime(2008, 7, 31),
494
datetime(2008, 2, 29): datetime(2008, 7, 31),
495
datetime(2008, 3, 15): datetime(2008, 7, 31),
496
datetime(2008, 3, 31): datetime(2008, 7, 31),
497
datetime(2008, 4, 15): datetime(2008, 7, 31),
498
datetime(2008, 4, 30): datetime(2008, 10, 31),}))
500
for dateOffset, cases in tests:
501
for baseDate, expected in cases.iteritems():
502
yield assertEq, dateOffset, baseDate, expected
509
def eqXDateRange(kwargs, expected):
510
actual = list(XDateRange(**kwargs))
511
assert actual == expected
513
def testXDateRange1():
514
eqXDateRange(dict(fromDate = datetime(2009, 3, 25),
516
[datetime(2009, 3, 25), datetime(2009, 3, 26)])
518
def testXDateRange2():
519
eqXDateRange(dict(fromDate = datetime(2008, 1, 1),
520
toDate = datetime(2008, 1, 3)),
521
[datetime(2008, 1, 1),
522
datetime(2008, 1, 2),
523
datetime(2008, 1, 3)])
525
def testXDateRange3():
526
eqXDateRange(dict(fromDate = datetime(2008, 1, 5),
527
toDate = datetime(2008, 1, 6)),
534
def assertEqual(a, b):
535
actual = dateOffset + baseDate
536
assert actual == expected
538
def testDateRange1():
539
toDate = datetime(2009, 5, 13)
540
dr = DateRange(toDate=toDate, periods=20)
541
firstDate = toDate - 19 * datetools.bday
544
assert dr[0] == firstDate
545
assert dr[-1] == toDate