-
Notifications
You must be signed in to change notification settings - Fork 0
/
Makefile.py
127 lines (111 loc) · 3.37 KB
/
Makefile.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
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
#!/usr/bin/env python
import itertools
import random
import argparse
import re
import subprocess
import os
import sys
import shlex
import time
import glob
from time import localtime, strftime
def shcmd(cmd, ignore_error=False):
print 'Doing:', cmd
ret = subprocess.call(cmd, shell=True)
print 'Returned', ret, cmd
if ignore_error == False and ret != 0:
exit(ret)
return ret
def run_and_get_output(cmd):
output = []
cmd = shlex.split(cmd)
p = subprocess.Popen(cmd, stdout=subprocess.PIPE)
p.wait()
return p.stdout.readlines()
def run_r_script(scriptpath):
shcmd('Rscript {}'.format(scriptpath))
class cd:
"""Context manager for changing the current working directory"""
def __init__(self, newPath):
self.newPath = newPath
def __enter__(self):
self.savedPath = os.getcwd()
os.chdir(self.newPath)
def __exit__(self, etype, value, traceback):
os.chdir(self.savedPath)
def ParameterCombinations(parameter_dict):
"""
Get all the cominbation of the values from each key
http://tinyurl.com/nnglcs9
Input: parameter_dict={
p0:[x, y, z, ..],
p1:[a, b, c, ..],
...}
Output: [
{p0:x, p1:a, ..},
{..},
...
]
"""
d = parameter_dict
return [dict(zip(d, v)) for v in itertools.product(*d.values())]
#########################################################
# Git helper
# you can use to get hash of the code, which you can put
# to your results
def git_latest_hash():
cmd = ['git', 'log', '--pretty=format:"%h"', '-n', '1']
proc = subprocess.Popen(cmd,
stdout=subprocess.PIPE)
proc.wait()
hash = proc.communicate()[0]
hash = hash.strip('"')
print hash
return hash
def git_commit(msg='auto commit'):
shcmd('git commit -am "{msg}"'.format(msg=msg),
ignore_error=True)
########################################################
# table = [
# {'col1':data, 'col2':data, ..},
# {'col1':data, 'col2':data, ..},
# ...
# ]
def table_to_file(table, filepath, adddic=None):
'save table to a file with additional columns'
with open(filepath, 'w') as f:
colnames = table[0].keys()
if adddic != None:
colnames += adddic.keys()
colnamestr = ';'.join(colnames) + '\n'
f.write(colnamestr)
for row in table:
if adddic != None:
rowcopy = dict(row.items() + adddic.items())
else:
rowcopy = row
rowstr = [rowcopy[k] for k in colnames]
rowstr = [str(x) for x in rowstr]
rowstr = ';'.join(rowstr) + '\n'
f.write(rowstr)
def main():
#function you want to call
pass
def _main():
parser = argparse.ArgumentParser(
description="This file hold command stream." \
'Example: python Makefile.py doexp1 '
)
parser.add_argument('-t', '--target', action='store')
args = parser.parse_args()
if args.target == None:
main()
else:
# WARNING! Using argument will make it less reproducible
# because you have to remember what argument you used!
targets = args.target.split(';')
for target in targets:
eval(target)
if __name__ == '__main__':
_main()