forked from matplotlib/matplotlib
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmlab_unit.py
85 lines (74 loc) · 3.09 KB
/
mlab_unit.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
from __future__ import print_function
import datetime
import StringIO
import unittest
import matplotlib.mlab as mlab
import numpy
class TestMlab(unittest.TestCase):
def test_csv2rec_closefile(self):
# If passed a file-like object, rec2csv should not close it.
ra = numpy.rec.array([(123, 1197346475.0137341), (456, 123.456)],
dtype=[('a', '<i8'), ('b', '<f8')])
fh = StringIO.StringIO()
mlab.rec2csv(ra, fh)
self.failIf(fh.closed)
def test_csv2rec_roundtrip(self):
# Make sure double-precision floats and strings pass through a
# roundtrip unaltered.
# A bug in numpy (fixed in r4602) meant that numpy scalars
# lost precision when passing through repr(). csv2rec was
# affected by this. This test will only pass on numpy >=
# 1.0.5.
delta = datetime.timedelta(days=1)
date0 = datetime.date(2007, 12, 16)
date1 = date0 + delta
date2 = date1 + delta
delta = datetime.timedelta(days=1)
datetime0 = datetime.datetime(2007, 12, 16, 22, 29, 34, 924122)
datetime1 = datetime0 + delta
datetime2 = datetime1 + delta
ra = numpy.rec.fromrecords([(123, date0, datetime0, 1197346475.0137341, 'a,bc'),
(456, date1, datetime1, 123.456, 'd\'ef'),
(789, date2, datetime2, 0.000000001, 'ghi'),
],
names='intdata,datedata,datetimedata,floatdata,stringdata')
fh = StringIO.StringIO()
mlab.rec2csv(ra, fh)
fh.seek(0)
if 0:
print('CSV contents:', '-' * 40)
print(fh.read())
print('-' * 40)
fh.seek(0)
ra2 = mlab.csv2rec(fh)
fh.close()
#print 'ra', ra
#print 'ra2', ra2
for name in ra.dtype.names:
if 0:
print(name, repr(ra[name]), repr(ra2[name]))
dt = ra.dtype[name]
print('repr(dt.type)', repr(dt.type))
self.failUnless(numpy.all(ra[name] == ra2[name])) # should not fail with numpy 1.0.5
def test_csv2rec_masks(self):
# Make sure masked entries survive roundtrip
csv = """date,age,weight,name
2007-01-01,12,32.2,"jdh1"
0000-00-00,0,23,"jdh2"
2007-01-03,,32.5,"jdh3"
2007-01-04,12,NaN,"jdh4"
2007-01-05,-1,NULL,"""
missingd = dict(date='0000-00-00', age='-1', weight='NULL')
fh = StringIO.StringIO(csv)
r1 = mlab.csv2rec(fh, missingd=missingd)
fh = StringIO.StringIO()
mlab.rec2csv(r1, fh, missingd=missingd)
fh.seek(0)
r2 = mlab.csv2rec(fh, missingd=missingd)
self.failUnless(numpy.all(r2['date'].mask == [0, 1, 0, 0, 0]))
self.failUnless(numpy.all(r2['age'].mask == [0, 0, 1, 0, 1]))
self.failUnless(numpy.all(r2['weight'].mask == [0, 0, 0, 0, 1]))
self.failUnless(numpy.all(r2['name'].mask == [0, 0, 0, 0, 1]))
self.failUnless(numpy.all(r2['name'].mask == [0, 0, 0, 0, 1]))
if __name__ == '__main__':
unittest.main()