-
Notifications
You must be signed in to change notification settings - Fork 216
/
solve.py
121 lines (106 loc) · 3.44 KB
/
solve.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
'''
This script solves the exercises of days that have been completed. Jut in case
the students did not made it by their own.
'''
import sys
try:
# python3
from urllib.request import urlopen
except ImportError:
# python2
from urllib2 import urlopen
def download_and_replace(url, target_file):
'''
Downloads file through http with progress report. Version by PabloG
obtained in stack overflow
http://stackoverflow.com/questions/22676/how-do-i-download-a-file-over-http
-using-python
'''
# Try to connect to the internet
try:
u = urlopen(url)
except Exception as err:
if getattr(err, 'code', None):
print("\nError: %s Could not get file %s\n" % (err.code, url))
else:
# A generic error is most possibly no available internet
print("\nCould not connect to the internet\n")
exit(1)
with open(target_file, 'wb') as f:
meta = u.info()
file_size = int(meta.get("Content-Length")[0])
file_size_dl = 0
block_sz = 8192
while True:
buffer = u.read(block_sz)
if not buffer:
break
file_size_dl += len(buffer)
f.write(buffer)
status = r"%10d [%3.2f%%]" % (
file_size_dl,
file_size_dl*100./file_size
)
status = status + chr(8)*(len(status)+1)
# CONFIGURATION
master_URL = 'https://github.com/gracaninja/lxmls-toolkit/raw/master/'
labs_URL = 'https://github.com/gracaninja/lxmls-toolkit/raw/student/'
# FILES TO BE REPLACED FOR THAT DAY
code_day = {
'linear_classifiers': [
'lxmls/classifiers/multinomial_naive_bayes.py',
],
'sequence_models': [
'lxmls/sequences/hmm.py',
'lxmls/sequences/sequence_classification_decoder.py',
],
'structure_predictors': [
'lxmls/sequences/structured_perceptron.py'
],
'non-linear_classifiers': [
'lxmls/deep_learning/numpy_models/mlp.py',
'lxmls/deep_learning/pytorch_models/mlp.py',
],
'non-linear_sequence_models': [
'lxmls/deep_learning/numpy_models/rnn.py',
'lxmls/deep_learning/pytorch_models/rnn.py',
],
'reinforcement_learning': [
'lxmls/reinforcement_learning/policy_gradient.py',
'lxmls/reinforcement_learning/score_function_estimator.py'
]
}
if __name__ == '__main__':
# ARGUMENT PROCESSING
if len(sys.argv) == 2 and sys.argv[1] in code_day:
undo_flag = 0
day = sys.argv[1]
elif (
len(sys.argv) == 3 and
sys.argv[1] == '--undo' and
sys.argv[2] in code_day
):
undo_flag = 1
day = sys.argv[2]
else:
print(
"\nUsage:\n\n"
"python solve.py sequence_models # To solve exercise\n\n"
"python solve.py --undo sequence_models # To undo solve\n\n"
"Solvable days: %s\n" % ", ".join(code_day.keys())
)
exit(1)
# CHECK THERE ARE FILES TO SAVE
if day in code_day:
print("\nsolving %s" % day)
else:
print("\nTheres actually no code to solve on %s!\n" % day)
exit()
# OVERWRITE THE FILES TO SOLVE THEM
for pyfile in code_day[day]:
if undo_flag:
download_and_replace(labs_URL + pyfile, pyfile)
print("Unsolving: %s" % pyfile)
else:
download_and_replace(master_URL + pyfile, pyfile)
print("Solving: %s" % pyfile)