1
# pylint: disable-msg=W0611, W0612, W0511,R0201
2
"""Tests suite for MaskedArray.
3
Adapted from the original test_ma by Pierre Gerard-Marchant
5
:author: Pierre Gerard-Marchant & Matt Knox
6
:contact: pierregm_at_uga_dot_edu & mattknox_ca_at_hotmail_dot_com
7
:version: $Id: test_timeseries.py 3206 2007-07-29 00:54:10Z pierregm $
9
__author__ = "Pierre GF Gerard-Marchant & Matt Knox ($Author: pierregm $)"
11
__revision__ = "$Revision: 3206 $"
12
__date__ = '$Date: 2007-07-28 17:54:10 -0700 (Sat, 28 Jul 2007) $'
15
from numpy import bool_, complex_, float_, int_, object_
16
import numpy.core.fromnumeric as fromnumeric
17
import numpy.core.numeric as numeric
18
from numpy.testing import NumpyTest, NumpyTestCase
19
from numpy.testing.utils import build_err_msg
22
import maskedarray as MA
23
from maskedarray import masked_array, masked, nomask
25
import maskedarray.testutils
26
from maskedarray.testutils import assert_equal, assert_array_equal
28
from timeseries import tseries
29
from timeseries import Date, date_array_fromlist, date_array_fromrange, date_array, thisday
30
from timeseries import time_series, TimeSeries, adjust_endpoints, \
31
mask_period, align_series, align_with, fill_missing_dates, tsmasked, \
32
concatenate_series, stack, split
34
class test_creation(NumpyTestCase):
35
"Base test class for MaskedArrays."
36
def __init__(self, *args, **kwds):
37
NumpyTestCase.__init__(self, *args, **kwds)
38
dlist = ['2007-01-%02i' % i for i in range(1,16)]
39
dates = date_array_fromlist(dlist)
40
data = masked_array(numeric.arange(15), mask=[1,0,0,0,0]*3)
41
self.d = (dlist, dates, data)
43
def test_fromlist (self):
44
"Base data definition."
45
(dlist, dates, data) = self.d
46
series = time_series(data, dlist)
47
assert(isinstance(series, TimeSeries))
48
assert_equal(series._mask, [1,0,0,0,0]*3)
49
assert_equal(series._series, data)
50
assert_equal(series._dates, date_array_fromlist(dlist))
51
assert_equal(series.freqstr, 'D')
53
def test_fromrange (self):
54
"Base data definition."
55
(dlist, dates, data) = self.d
56
series = time_series(data, start_date=dates[0], length=15)
57
assert(isinstance(series, TimeSeries))
58
assert_equal(series._mask, [1,0,0,0,0]*3)
59
assert_equal(series._series, data)
60
assert_equal(series._dates, dates)
61
assert_equal(series.freqstr, 'D')
63
def test_fromseries (self):
64
"Base data definition."
65
(dlist, dates, data) = self.d
66
series = time_series(data, dlist)
68
series = time_series(series, dates)
69
assert(isinstance(series, TimeSeries))
70
assert_equal(series._mask, [1,0,0,0,0]*3)
71
assert_equal(series._series, data)
72
assert_equal(series._dates, dates)
73
assert_equal(series.freqstr, 'D')
76
def test_fromdatearray(self):
77
"Tests the creation of a series from a datearray"
81
series = time_series(data, dates)
82
assert(isinstance(series, TimeSeries))
83
assert_equal(series._dates, dates)
84
assert_equal(series._data, data)
85
assert_equal(series.freqstr, 'D')
88
# ensure that series can be represented by a string after masking a value
89
# (there was a bug before that prevented this from working when using a
90
# DateArray for the data)
94
def test_datafromlist(self):
95
"Check the creation of a time series from a list of data."
96
(_, dates, _) = self.d
97
data = list(range(15))
98
series = time_series(data, dates)
99
assert_equal(series._data.size, 15)
101
def test_unsorted(self):
102
"Tests that the data are properly sorted along the dates."
103
dlist = ['2007-01-%02i' % i for i in (3,2,1)]
105
series = time_series(data,dlist)
106
assert_equal(series._data,[30,20,10])
108
series = TimeSeries(data, dlist)
109
assert_equal(series._data,[30,20,10])
111
series = TimeSeries(data, dlist, mask=[1,0,0])
112
assert_equal(series._mask,[0,0,1])
114
data = masked_array([10,20,30],mask=[1,0,0])
115
series = TimeSeries(data, dlist)
116
assert_equal(series._mask,[0,0,1])
117
#...............................................................................
119
class test_arithmetics(NumpyTestCase):
120
"Some basic arithmetic tests"
121
def __init__(self, *args, **kwds):
122
NumpyTestCase.__init__(self, *args, **kwds)
123
dlist = ['2007-01-%02i' % i for i in range(1,16)]
124
dates = date_array_fromlist(dlist)
125
data = masked_array(numeric.arange(15), mask=[1,0,0,0,0]*3)
126
self.d = (time_series(data, dlist), data)
128
def test_intfloat(self):
129
"Test arithmetic timeseries/integers"
130
(series, data) =self.d
133
assert(isinstance(nseries, TimeSeries))
134
assert_equal(nseries._mask, [1,0,0,0,0]*3)
135
assert_equal(nseries._series, data+1)
136
assert_equal(nseries._dates, series._dates)
139
assert(isinstance(nseries, TimeSeries))
140
assert_equal(nseries._mask, [1,0,0,0,0]*3)
141
assert_equal(nseries._series, data-1)
142
assert_equal(nseries._dates, series._dates)
145
assert(isinstance(nseries, TimeSeries))
146
assert_equal(nseries._mask, [1,0,0,0,0]*3)
147
assert_equal(nseries._series, data*1)
148
assert_equal(nseries._dates, series._dates)
151
assert(isinstance(nseries, TimeSeries))
152
assert_equal(nseries._mask, [1,0,0,0,0]*3)
153
assert_equal(nseries._series, data/1.)
154
assert_equal(nseries._dates, series._dates)
156
def test_intfloat_inplace(self):
157
"Test int/float arithmetics in place."
158
(series, data) =self.d
159
nseries = series.astype(float_)
161
data = data.astype(float_)
164
assert(isinstance(nseries, TimeSeries))
165
assert_equal(nseries._mask, [1,0,0,0,0]*3)
166
assert_equal(nseries._series, data+1.)
167
assert_equal(nseries._dates, series._dates)
168
assert_equal(id(nseries),idini)
171
assert(isinstance(nseries, TimeSeries))
172
assert_equal(nseries._mask, [1,0,0,0,0]*3)
173
assert_equal(nseries._series, data)
174
assert_equal(nseries._dates, series._dates)
175
assert_equal(id(nseries),idini)
178
assert(isinstance(nseries, TimeSeries))
179
assert_equal(nseries._mask, [1,0,0,0,0]*3)
180
assert_equal(nseries._series, data*2.)
181
assert_equal(nseries._dates, series._dates)
182
assert_equal(id(nseries),idini)
185
assert(isinstance(nseries, TimeSeries))
186
assert_equal(nseries._mask, [1,0,0,0,0]*3)
187
assert_equal(nseries._series, data)
188
assert_equal(nseries._dates, series._dates)
189
assert_equal(id(nseries),idini)
191
def test_updatemask(self):
192
"Checks modification of mask."
193
(series, data) =self.d
194
assert_equal(series._mask, [1,0,0,0,0]*3)
196
assert(series._mask is nomask)
197
assert(series._series._mask is nomask)
198
#series._series.mask = [1,0,0]*5
199
series.mask = [1,0,0]*5
200
assert_equal(series._mask, [1,0,0]*5)
201
assert_equal(series._series._mask, [1,0,0]*5)
203
assert_equal(series._mask, [1,0,1]+[1,0,0]*4)
204
assert_equal(series._series._mask, [1,0,1]+[1,0,0]*4)
206
def test_ismasked(self):
207
"Checks checks on masked"
208
(series, data) =self.d
209
assert(series[0] is tsmasked)
210
assert(tsmasked._series is masked)
211
assert(series._series[0] is masked)
212
assert(series[0]._series is masked)
215
#...............................................................................
217
class test_getitem(NumpyTestCase):
219
def __init__(self, *args, **kwds):
220
NumpyTestCase.__init__(self, *args, **kwds)
221
dlist = ['2007-01-%02i' % i for i in range(1,16)]
222
dates = date_array_fromlist(dlist)
223
data = masked_array(numeric.arange(15), mask=[1,0,0,0,0]*3, dtype=float_)
224
self.d = (time_series(data, dlist), data, dates)
226
def test_wdate(self):
227
"Tests getitem with date as index"
228
(series, data, dates) = self.d
229
last_date = series._dates[-1]
230
assert_equal(series[-1], series[last_date])
231
assert_equal(series._dates[-1], dates[-1])
232
assert_equal(series[-1]._dates[0], dates[-1])
233
assert_equal(series[last_date]._dates[0], dates[-1])
234
assert_equal(series._series[-1], data._data[-1])
235
assert_equal(series[-1]._series, data._data[-1])
236
assert_equal(series._mask[-1], data._mask[-1])
238
series['2007-01-06'] = 999
239
assert_equal(series[5], 999)
241
def test_wtimeseries(self):
242
"Tests getitem w/ TimeSeries as index"
243
(series, data, dates) = self.d
244
# Testing a basic condition on data
245
cond = (series<8).filled(False)
246
dseries = series[cond]
247
assert_equal(dseries._data, [1,2,3,4,6,7])
248
assert_equal(dseries._dates, series._dates[[1,2,3,4,6,7]])
249
assert_equal(dseries._mask, nomask)
250
# Testing a basic condition on dates
251
series[series._dates < Date('D',string='2007-01-06')] = masked
252
assert_equal(series[:5]._series._mask, [1,1,1,1,1])
254
def test_wslices(self):
255
"Test get/set items."
256
(series, data, dates) = self.d
258
assert_equal(series[3:7]._series._data, data[3:7]._data)
259
assert_equal(series[3:7]._series._mask, data[3:7]._mask)
260
assert_equal(series[3:7]._dates, dates[3:7])
262
assert_equal(series[:5]._series._data, data[:5]._data)
263
assert_equal(series[:5]._series._mask, data[:5]._mask)
264
assert_equal(series[:5]._dates, dates[:5])
267
assert_equal(series[:5]._series, [0,0,0,0,0])
268
dseries = N.log(series)
269
series[-5:] = dseries[-5:]
270
assert_equal(series[-5:], dseries[-5:])
272
dseries = series[series.dates[3]:series.dates[7]]
273
assert_equal(dseries, series[3:7])
276
"Tests getitem on a 2D series"
277
(a,b,d) = ([1,2,3],[3,2,1], date_array(thisday('M'),length=3))
278
ser_x = time_series(N.column_stack((a,b)), dates=d)
279
assert_equal(ser_x[0,0], time_series(a[0],d[0]))
280
assert_equal(ser_x[0,:], time_series([(a[0],b[0])], d[0]))
281
assert_equal(ser_x[:,0], time_series(a, d))
282
assert_equal(ser_x[:,:], ser_x)
285
"Tests getitem on a nD series"
288
series = time_series(N.arange(5), mask=[1,0,0,0,0], start_date=hodie)
289
assert_equal(series[0], 0)
291
series = time_series(N.arange(5), mask=[1,0,0,0,0], start_date=hodie)
292
assert series[0] is tsmasked
294
series = time_series(N.arange(10).reshape(5,2), start_date=hodie)
295
assert_equal(len(series), 5)
296
assert_equal(series[0], [[0,1]])
297
assert_equal(series[0]._dates[0], (hodie))
298
assert_equal(series[:,0], [0,2,4,6,8])
299
assert_equal(series[:,0]._dates, series._dates)
301
series = time_series(N.arange(10).reshape(5,2), start_date=hodie,
302
mask=[[1,1],[0,0],[0,0],[0,0],[0,0]])
303
assert_equal(len(series), 5)
304
assert_equal(series[0], [[0,1]])
305
assert_equal(series[0]._mask, [[1,1]])
306
assert_equal(series[0]._dates[0], (hodie))
307
assert_equal(series[:,0]._data, [0,2,4,6,8])
308
assert_equal(series[:,0]._mask, [1,0,0,0,0])
309
assert_equal(series[:,0]._dates, series._dates)
311
series = time_series(N.arange(30).reshape(5,3,2), start_date=hodie)
313
assert_equal(len(series), 5)
314
assert_equal(series[0], [[[0,1],[2,3],[4,5]]])
315
assert_equal(series[0]._dates[0], (hodie))
316
assert_equal(series[:,0], series._data[:,0])
317
assert_equal(series[:,0]._dates, series._dates)
319
assert_equal(series[:,:,0], series._data[:,:,0])
320
assert_equal(series[:,:,0]._dates, series._dates)
322
class test_functions(NumpyTestCase):
324
def __init__(self, *args, **kwds):
325
NumpyTestCase.__init__(self, *args, **kwds)
326
dlist = ['2007-01-%02i' % i for i in range(1,16)]
327
dates = date_array_fromlist(dlist)
328
data = masked_array(numeric.arange(15), mask=[1,0,0,0,0]*3)
329
self.d = (time_series(data, dlist), data, dates)
331
def test_adjustendpoints(self):
332
"Tests adjust_endpoints"
333
(series, data, dates) = self.d
334
dseries = adjust_endpoints(series, series.dates[0], series.dates[-1])
335
assert_equal(dseries, series)
336
dseries = adjust_endpoints(series, series.dates[3], series.dates[-3])
337
assert_equal(dseries, series[3:-2])
338
dseries = adjust_endpoints(series, end_date=Date('D', string='2007-01-31'))
339
assert_equal(dseries.size, 31)
340
assert_equal(dseries._mask, N.r_[series._mask, [1]*16])
341
dseries = adjust_endpoints(series, end_date=Date('D', string='2007-01-06'))
342
assert_equal(dseries.size, 6)
343
assert_equal(dseries, series[:6])
344
dseries = adjust_endpoints(series,
345
start_date=Date('D', string='2007-01-06'),
346
end_date=Date('D', string='2007-01-31'))
347
assert_equal(dseries.size, 26)
348
assert_equal(dseries._mask, N.r_[series._mask[5:], [1]*16])
350
def test_alignseries(self):
351
"Tests align_series & align_with"
352
(series, data, dates) = self.d
354
empty_series = time_series([], freq='d')
355
a, b = align_series(series, empty_series)
356
assert_equal(a.start_date, b.start_date)
357
assert_equal(a.end_date, b.end_date)
359
aseries = time_series(data, dates+10)
360
bseries = time_series(data, dates-10)
361
(a, b) = align_with(series, aseries, bseries)
362
assert_equal(a._dates, series._dates)
363
assert_equal(b._dates, series._dates)
364
assert_equal(a[-5:], series[:5])
365
assert_equal(b[:5], series[-5:])
367
def test_tshift(self):
368
"Test tshift function"
370
shift_negative = series.tshift(-1)
371
result_data = [999] + [0,1,2,3,4,5,6,7,8,9,10,11,12,13]
372
result_mask = [1 ] + [1,0,0,0,0,1,0,0,0,0,1, 0, 0, 0 ]
373
shift_negative_result = time_series(result_data, series._dates, mask=result_mask)
375
shift_positive = series.tshift(1)
376
result_data = [1,2,3,4,5,6,7,8,9,10,11,12,13,14] + [999]
377
result_mask = [0,0,0,0,1,0,0,0,0,1, 0, 0, 0, 0 ] + [1 ]
378
shift_positive_result = time_series(result_data, series._dates, mask=result_mask)
380
assert_array_equal(shift_negative, shift_negative_result)
381
assert_array_equal(shift_positive, shift_positive_result)
383
def test_split(self):
384
"""Test the split function."""
385
ms = time_series(N.arange(62).reshape(31,2),
386
start_date=Date(freq='d', year=2005, month=7, day=1))
388
assert_array_equal(d1.data, ms.data[:,0])
389
assert_array_equal(d1.dates, ms.dates)
390
assert_array_equal(d2.data, ms.data[:,1])
393
ss = split(series)[0]
394
assert_array_equal(series, ss)
396
def test_convert(self):
397
"""Test convert function
399
Just check basic functionality. The details of the actual
400
date conversion algorithms already tested by asfreq in the
401
test_dates test suite.
403
lowFreqSeries = time_series(N.arange(10),
404
start_date=Date(freq='m', year=2005, month=6))
405
highFreqSeries = time_series(N.arange(100),
406
start_date=Date(freq='b', year=2005, month=6, day=1))
407
ndseries = time_series(N.arange(124).reshape(62,2),
408
start_date=Date(freq='d', year=2005, month=7, day=1))
410
lowToHigh_start = lowFreqSeries.convert('B', position='START')
412
assert_equal(lowToHigh_start.start_date,
413
Date(freq='m', year=2005, month=6).asfreq("B", relation="BEFORE"))
414
assert_equal(lowToHigh_start.end_date,
415
(Date(freq='m', year=2005, month=6) + 9).asfreq("B", relation="AFTER"))
417
assert_equal(lowToHigh_start._mask[0], False)
418
assert_equal(lowToHigh_start._mask[-1], True)
420
lowToHigh_end = lowFreqSeries.convert('B', position='END')
422
assert_equal(lowToHigh_end.start_date,
423
Date(freq='m', year=2005, month=6).asfreq("B", relation="BEFORE"))
424
assert_equal(lowToHigh_end.end_date,
425
(Date(freq='m', year=2005, month=6) + 9).asfreq("B", relation="AFTER"))
427
assert_equal(lowToHigh_end._mask[0], True)
428
assert_equal(lowToHigh_end._mask[-1], False)
431
highToLow = highFreqSeries.convert('M', func=None)
433
assert_equal(highToLow.ndim, 2)
434
assert_equal(highToLow.shape[1], 23)
435
assert_equal(highToLow.start_date,
436
Date(freq='b', year=2005, month=6, day=1).asfreq('M'))
437
assert_equal(highToLow.end_date,
438
(Date(freq='b', year=2005, month=6, day=1) + 99).asfreq('M'))
440
assert_array_equal(lowFreqSeries, lowFreqSeries.convert("M"))
442
assert_equal(ndseries.convert('M',sum), [[930,961],[2852,2883]])
444
def test_fill_missing_dates(self):
445
"""Test fill_missing_dates function"""
446
_start = Date(freq='m', year=2005, month=1)
447
_end = Date(freq='m', year=2005, month=4)
449
dates = date_array([_start, _end], freq='M')
450
series = time_series([1, 2], dates)
451
filled_ser = fill_missing_dates(series)
453
assert_equal(filled_ser.start_date, _start)
454
assert_equal(filled_ser.end_date, _end)
455
assert(filled_ser.isfull())
456
assert(not filled_ser.has_duplicated_dates())
457
assert_equal(filled_ser.size, _end - _start + 1)
459
data = N.arange(5*24).reshape(5,24)
460
datelist = ['2007-07-01','2007-07-02','2007-07-03','2007-07-05','2007-07-06']
461
dates = date_array_fromlist(datelist, 'D')
462
dseries = time_series(data, dates)
463
ndates = date_array_fromrange(start_date=dates[0],end_date=dates[-2])
465
fseries = fill_missing_dates(dseries)
466
assert_equal(fseries.shape, (6,24))
467
assert_equal(fseries._mask[:,0], [0,0,0,1,0,0])
469
fseries = fill_missing_dates(dseries[:,0])
470
assert_equal(fseries.shape, (6,))
471
assert_equal(fseries._mask, [0,0,0,1,0,0])
473
series = time_series(data.ravel()[:4].reshape(2,2),dates=dates[:-1])
474
fseries = fill_missing_dates(series)
475
assert_equal(fseries.shape, (5,))
476
assert_equal(fseries._mask, [0,0,0,1,0,])
478
def test_maskperiod(self):
480
(series, data, dates) = self.d
482
(start, end) = ('2007-01-06', '2007-01-12')
483
mask = mask_period(series, start, end, inside=True, include_edges=True,
485
assert_equal(mask._mask, N.array([0,0,0,0,0,1,1,1,1,1,1,1,0,0,0]))
486
mask = mask_period(series, start, end, inside=True, include_edges=False,
488
assert_equal(mask._mask, [0,0,0,0,0,0,1,1,1,1,1,0,0,0,0])
489
mask = mask_period(series, start, end, inside=False, include_edges=True,
491
assert_equal(mask._mask, [1,1,1,1,1,1,0,0,0,0,0,1,1,1,1])
492
mask = mask_period(series, start, end, inside=False, include_edges=False,
494
assert_equal(mask._mask, [1,1,1,1,1,0,0,0,0,0,0,0,1,1,1])
495
# Now w/ multivariables
496
data = masked_array(numeric.arange(30).reshape(-1,2), dtype=float_)
497
series = time_series(data, dates=dates)
498
mask = mask_period(series, start, end, inside=True, include_edges=True,
500
result = N.array([0,0,0,0,0,1,1,1,1,1,1,1,0,0,0])
501
assert_equal(mask._mask, result.repeat(2).reshape(-1,2))
503
def test_pickling(self):
504
"Tests pickling/unpickling"
505
(series, data, dates) = self.d
507
series_pickled = cPickle.loads(series.dumps())
508
assert_equal(series_pickled._dates, series._dates)
509
assert_equal(series_pickled._data, series._data)
510
assert_equal(series_pickled._mask, series._mask)
512
data = masked_array(N.matrix(range(10)).T, mask=[1,0,0,0,0]*2)
513
dates = date_array(start_date=thisday('D'), length=10)
514
series = time_series(data,dates=dates)
515
series_pickled = cPickle.loads(series.dumps())
516
assert_equal(series_pickled._dates, series._dates)
517
assert_equal(series_pickled._data, series._data)
518
assert_equal(series_pickled._mask, series._mask)
519
assert(isinstance(series_pickled._data, N.matrix))
522
def test_empty_timeseries(self):
523
"Tests that empty TimeSeries are handled properly"
524
empty_ts = time_series([], freq='b')
525
assert_array_equal(empty_ts, empty_ts + 1)
526
assert_array_equal(empty_ts, empty_ts + empty_ts)
527
assert_equal(empty_ts.start_date, None)
528
assert_equal(empty_ts.end_date, None)
530
def test__timeseriescompat_multiple(self):
531
"Tests the compatibility of multiple time series."
532
seriesM_10 = time_series(N.arange(10),
534
start_date=Date(freq='m', year=2005, month=1),
538
seriesD_10 = time_series(N.arange(10),
540
start_date=Date(freq='d', year=2005, month=1, day=1),
544
seriesD_5 = time_series(N.arange(5),
546
start_date=Date(freq='d', year=2005, month=1, day=1),
550
seriesD_5_apr = time_series(N.arange(5),
552
start_date=Date(freq='d', year=2005, month=4, day=1),
556
assert(tseries._timeseriescompat_multiple(seriesM_10, seriesM_10, seriesM_10))
559
tseries._timeseriescompat_multiple(seriesM_10, seriesD_10)
566
tseries._timeseriescompat_multiple(seriesD_5, seriesD_10)
573
tseries._timeseriescompat_multiple(seriesD_5, seriesD_5_apr)
579
def test_compressed(self):
581
dlist = ['2007-01-%02i' % i for i in range(1,16)]
582
dates = date_array_fromlist(dlist)
583
data = masked_array(numeric.arange(15), mask=[1,0,0,0,0]*3, dtype=float_)
584
series = time_series(data, dlist)
586
keeper = N.array([0,1,1,1,1]*3, dtype=bool_)
587
c_series = series.compressed()
588
assert_equal(c_series._data, [1,2,3,4,6,7,8,9,11,12,13,14])
589
assert_equal(c_series._mask, nomask)
590
assert_equal(c_series._dates, dates[keeper])
592
series_st = time_series(MA.column_stack((data,data[::-1])),
594
c_series = series_st.compressed()
595
d = [1,2,3,6,7,8,11,12,13]
596
assert_equal(c_series._data, N.c_[(d,list(reversed(d)))])
597
assert_equal(c_series._mask, nomask)
598
assert_equal(c_series._dates, dates[d])
600
def test_concatenate(self):
602
dlist = ['2007-%02i' % i for i in range(1,6)]
603
dates = date_array_fromlist(dlist)
604
data = masked_array(numeric.arange(5), mask=[1,0,0,0,0], dtype=float_)
606
ser_1 = time_series(data, dates)
607
ser_2 = time_series(data, dates=dates+10)
608
newseries = concatenate_series(ser_1, ser_2)
609
assert_equal(newseries._data,[0,1,2,3,4,0,0,0,0,0,0,1,2,3,4])
610
assert_equal(newseries._mask,[1,0,0,0,0]+[1]*5+[1,0,0,0,0])
612
ser_1 = time_series(data, dates)
613
ser_2 = time_series(data, dates=dates+10)
614
newseries = concatenate_series(ser_1, ser_2, keep_gap=False)
615
assert_equal(newseries._data,[0,1,2,3,4,0,1,2,3,4])
616
assert_equal(newseries._mask,[1,0,0,0,0]+[1,0,0,0,0])
617
assert newseries.has_missing_dates()
619
ser_2 = time_series(data, dates=dates+3)
620
newseries = concatenate_series(ser_1, ser_2)
621
assert_equal(newseries._data,[0,1,2,0,1,2,3,4])
622
assert_equal(newseries._mask,[1,0,0,1,0,0,0,0])
627
###############################################################################
628
#------------------------------------------------------------------------------
629
if __name__ == "__main__":
b'\\ No newline at end of file'