annotate numerics/convert.py @ 58:537fba7c9def

stubbing
author Jeff Hammel <k0scist@gmail.com>
date Tue, 20 Jan 2015 16:44:56 -0800
parents 06e487f90e05
children 3781174542bb
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
27
f865bc916593 stub for type inference
Jeff Hammel <k0scist@gmail.com>
parents: 6
diff changeset
1 #!/usr/bin/env python
f865bc916593 stub for type inference
Jeff Hammel <k0scist@gmail.com>
parents: 6
diff changeset
2
f865bc916593 stub for type inference
Jeff Hammel <k0scist@gmail.com>
parents: 6
diff changeset
3 """
f865bc916593 stub for type inference
Jeff Hammel <k0scist@gmail.com>
parents: 6
diff changeset
4 convert between types
f865bc916593 stub for type inference
Jeff Hammel <k0scist@gmail.com>
parents: 6
diff changeset
5 """
f865bc916593 stub for type inference
Jeff Hammel <k0scist@gmail.com>
parents: 6
diff changeset
6
55
ecaf1d4b1c2c this should work now; it doesnt, but it should
Jeff Hammel <k0scist@gmail.com>
parents: 52
diff changeset
7 # imports
31
a655306ee78d stubbing
Jeff Hammel <k0scist@gmail.com>
parents: 27
diff changeset
8 import argparse
55
ecaf1d4b1c2c this should work now; it doesnt, but it should
Jeff Hammel <k0scist@gmail.com>
parents: 52
diff changeset
9 import csv
27
f865bc916593 stub for type inference
Jeff Hammel <k0scist@gmail.com>
parents: 6
diff changeset
10 import sys
52
37838ae694d2 import a thing
Jeff Hammel <k0scist@gmail.com>
parents: 47
diff changeset
11 from .data import transpose
47
6d34c02f7c9c inherit from the right thing
Jeff Hammel <k0scist@gmail.com>
parents: 46
diff changeset
12 from .read import read_csv, CSVParser
27
f865bc916593 stub for type inference
Jeff Hammel <k0scist@gmail.com>
parents: 6
diff changeset
13
33
f35b646eefa9 moar stubbin
Jeff Hammel <k0scist@gmail.com>
parents: 32
diff changeset
14 __all__ = ['cast', 'float_or_orig', 'main']
f35b646eefa9 moar stubbin
Jeff Hammel <k0scist@gmail.com>
parents: 32
diff changeset
15
45
ef915968d104 put this in the parser so that i can use this in convert
Jeff Hammel <k0scist@gmail.com>
parents: 34
diff changeset
16 default_cast = (int, float, str)
6
Jeff Hammel <k0scist@gmail.com>
parents: 5
diff changeset
17
5
d5447d401c44 serializaion; pandas probably does this
Jeff Hammel <k0scist@gmail.com>
parents:
diff changeset
18 def cast(to_type, *values):
33
f35b646eefa9 moar stubbin
Jeff Hammel <k0scist@gmail.com>
parents: 32
diff changeset
19
5
d5447d401c44 serializaion; pandas probably does this
Jeff Hammel <k0scist@gmail.com>
parents:
diff changeset
20 retval = []
d5447d401c44 serializaion; pandas probably does this
Jeff Hammel <k0scist@gmail.com>
parents:
diff changeset
21 for value in values:
d5447d401c44 serializaion; pandas probably does this
Jeff Hammel <k0scist@gmail.com>
parents:
diff changeset
22 try:
d5447d401c44 serializaion; pandas probably does this
Jeff Hammel <k0scist@gmail.com>
parents:
diff changeset
23 retval.append(to_type(value))
d5447d401c44 serializaion; pandas probably does this
Jeff Hammel <k0scist@gmail.com>
parents:
diff changeset
24 except ValueError:
d5447d401c44 serializaion; pandas probably does this
Jeff Hammel <k0scist@gmail.com>
parents:
diff changeset
25 retval.append(value)
d5447d401c44 serializaion; pandas probably does this
Jeff Hammel <k0scist@gmail.com>
parents:
diff changeset
26 return retval
d5447d401c44 serializaion; pandas probably does this
Jeff Hammel <k0scist@gmail.com>
parents:
diff changeset
27
33
f35b646eefa9 moar stubbin
Jeff Hammel <k0scist@gmail.com>
parents: 32
diff changeset
28
5
d5447d401c44 serializaion; pandas probably does this
Jeff Hammel <k0scist@gmail.com>
parents:
diff changeset
29 def float_or_orig(*values):
33
f35b646eefa9 moar stubbin
Jeff Hammel <k0scist@gmail.com>
parents: 32
diff changeset
30 return cast([float], *values)
f35b646eefa9 moar stubbin
Jeff Hammel <k0scist@gmail.com>
parents: 32
diff changeset
31
f35b646eefa9 moar stubbin
Jeff Hammel <k0scist@gmail.com>
parents: 32
diff changeset
32
34
Jeff Hammel <k0scist@gmail.com>
parents: 33
diff changeset
33 def column_type(values, types=default_cast):
Jeff Hammel <k0scist@gmail.com>
parents: 33
diff changeset
34 """determine the type of a column"""
55
ecaf1d4b1c2c this should work now; it doesnt, but it should
Jeff Hammel <k0scist@gmail.com>
parents: 52
diff changeset
35 for t in types:
ecaf1d4b1c2c this should work now; it doesnt, but it should
Jeff Hammel <k0scist@gmail.com>
parents: 52
diff changeset
36 for value in values:
ecaf1d4b1c2c this should work now; it doesnt, but it should
Jeff Hammel <k0scist@gmail.com>
parents: 52
diff changeset
37 try:
ecaf1d4b1c2c this should work now; it doesnt, but it should
Jeff Hammel <k0scist@gmail.com>
parents: 52
diff changeset
38 t(value)
56
06e487f90e05 this now works
Jeff Hammel <k0scist@gmail.com>
parents: 55
diff changeset
39 except ValueError, TypeError:
55
ecaf1d4b1c2c this should work now; it doesnt, but it should
Jeff Hammel <k0scist@gmail.com>
parents: 52
diff changeset
40 break
ecaf1d4b1c2c this should work now; it doesnt, but it should
Jeff Hammel <k0scist@gmail.com>
parents: 52
diff changeset
41 else:
ecaf1d4b1c2c this should work now; it doesnt, but it should
Jeff Hammel <k0scist@gmail.com>
parents: 52
diff changeset
42 return t
ecaf1d4b1c2c this should work now; it doesnt, but it should
Jeff Hammel <k0scist@gmail.com>
parents: 52
diff changeset
43
34
Jeff Hammel <k0scist@gmail.com>
parents: 33
diff changeset
44 raise NotImplementedError('TODO') # -> record TODO items
Jeff Hammel <k0scist@gmail.com>
parents: 33
diff changeset
45
58
537fba7c9def stubbing
Jeff Hammel <k0scist@gmail.com>
parents: 56
diff changeset
46 def cast_columns(values, to=default_cast):
33
f35b646eefa9 moar stubbin
Jeff Hammel <k0scist@gmail.com>
parents: 32
diff changeset
47 """
f35b646eefa9 moar stubbin
Jeff Hammel <k0scist@gmail.com>
parents: 32
diff changeset
48 cast a column of data
f35b646eefa9 moar stubbin
Jeff Hammel <k0scist@gmail.com>
parents: 32
diff changeset
49 """
34
Jeff Hammel <k0scist@gmail.com>
parents: 33
diff changeset
50 raise NotImplementedError('TODO') # -> record TODO items
27
f865bc916593 stub for type inference
Jeff Hammel <k0scist@gmail.com>
parents: 6
diff changeset
51
f865bc916593 stub for type inference
Jeff Hammel <k0scist@gmail.com>
parents: 6
diff changeset
52 def main(args=sys.argv[1:]):
f865bc916593 stub for type inference
Jeff Hammel <k0scist@gmail.com>
parents: 6
diff changeset
53 """CLI"""
f865bc916593 stub for type inference
Jeff Hammel <k0scist@gmail.com>
parents: 6
diff changeset
54
31
a655306ee78d stubbing
Jeff Hammel <k0scist@gmail.com>
parents: 27
diff changeset
55 # parse command line
47
6d34c02f7c9c inherit from the right thing
Jeff Hammel <k0scist@gmail.com>
parents: 46
diff changeset
56 parser = CSVParser(description="interpolate types from file")
31
a655306ee78d stubbing
Jeff Hammel <k0scist@gmail.com>
parents: 27
diff changeset
57 options = parser.parse_args(args)
a655306ee78d stubbing
Jeff Hammel <k0scist@gmail.com>
parents: 27
diff changeset
58
32
Jeff Hammel <k0scist@gmail.com>
parents: 31
diff changeset
59 # read CSV file
46
93850093eafd stubbing
Jeff Hammel <k0scist@gmail.com>
parents: 45
diff changeset
60 data = parser.read()
93850093eafd stubbing
Jeff Hammel <k0scist@gmail.com>
parents: 45
diff changeset
61
55
ecaf1d4b1c2c this should work now; it doesnt, but it should
Jeff Hammel <k0scist@gmail.com>
parents: 52
diff changeset
62 # transpose
ecaf1d4b1c2c this should work now; it doesnt, but it should
Jeff Hammel <k0scist@gmail.com>
parents: 52
diff changeset
63 columns = transpose(data)
ecaf1d4b1c2c this should work now; it doesnt, but it should
Jeff Hammel <k0scist@gmail.com>
parents: 52
diff changeset
64
ecaf1d4b1c2c this should work now; it doesnt, but it should
Jeff Hammel <k0scist@gmail.com>
parents: 52
diff changeset
65 # get types
ecaf1d4b1c2c this should work now; it doesnt, but it should
Jeff Hammel <k0scist@gmail.com>
parents: 52
diff changeset
66 types = [column_type(column) for column in columns]
46
93850093eafd stubbing
Jeff Hammel <k0scist@gmail.com>
parents: 45
diff changeset
67
93850093eafd stubbing
Jeff Hammel <k0scist@gmail.com>
parents: 45
diff changeset
68 # print type information
55
ecaf1d4b1c2c this should work now; it doesnt, but it should
Jeff Hammel <k0scist@gmail.com>
parents: 52
diff changeset
69 writer = csv.writer(sys.stdout)
56
06e487f90e05 this now works
Jeff Hammel <k0scist@gmail.com>
parents: 55
diff changeset
70 writer.writerow([t.__name__ for t in types])
55
ecaf1d4b1c2c this should work now; it doesnt, but it should
Jeff Hammel <k0scist@gmail.com>
parents: 52
diff changeset
71
32
Jeff Hammel <k0scist@gmail.com>
parents: 31
diff changeset
72
27
f865bc916593 stub for type inference
Jeff Hammel <k0scist@gmail.com>
parents: 6
diff changeset
73 if __name__ == '__main__':
f865bc916593 stub for type inference
Jeff Hammel <k0scist@gmail.com>
parents: 6
diff changeset
74 main()