-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathnotebook.py
More file actions
104 lines (70 loc) · 3.29 KB
/
notebook.py
File metadata and controls
104 lines (70 loc) · 3.29 KB
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
import nbformat
from nbconvert.preprocessors import ExecutePreprocessor
import pickle
import chardet
def get_expected_values():
with open('expected_values.pkl', 'rb') as file:
expected_values = pickle.load(file)
return expected_values
def get_file_encoding(notebook_path):
with open(notebook_path, 'rb') as f:
result = chardet.detect(f.read())
return result["encoding"]
def execute_notebook(notebook_path):
encoding = get_file_encoding(notebook_path)
with open(notebook_path, encoding=encoding) as f:
nb = nbformat.read(f, as_version=4)
ep = ExecutePreprocessor(timeout=600, kernel_name='python3')
try:
ep.preprocess(nb, {'metadata': {'path': './'}})
except Exception as e:
print(f"Error executing notebook: {e}")
raise
return nb
def extract_variable_value(cell, expected_values):
code = ''.join(cell['source'])
exec(code, globals())
return {key: globals().get(key) for key in expected_values.keys() if key in code}
def get_computed_values(notebook_path, expected_values):
notebook = execute_notebook(notebook_path)
computed_values = {}
for cell in notebook.cells:
if cell.cell_type == 'code':
variable_values = extract_variable_value(cell, expected_values)
computed_values.update(variable_values)
return computed_values
# expected_values and computed_values as global values
expected_values = get_expected_values()
computed_values = get_computed_values("notebook_template.ipynb", expected_values)
# =======================================
# Functions below here will be tested
# ========================================
def common_parameters():
variables = ["Fs", "dt", "L", "t", "A", "w"]
required_computed_values, required_expected_values = {}, {}
if computed_values:
# Grade based on the computed values
for key in variables:
required_computed_values[key] = {'value': computed_values.get(key)}
required_expected_values[key] = {'value': expected_values[key]['value'], 'atol': expected_values[key]['atol']}
return required_computed_values, required_expected_values
def signals():
variables = ["S"]
required_computed_values, required_expected_values = {}, {}
if computed_values:
# Grade based on the computed values
for key in variables:
required_computed_values[key] = {'value': computed_values.get(key)}
required_expected_values[key] = {'value': expected_values[key]['value'], 'atol': expected_values[key]['atol']}
return required_computed_values, required_expected_values
def signals_second():
variables = ["signal", "fs", "fs_above", "fs_below", "signal_above", "signal_below"]
required_computed_values, required_expected_values = {}, {}
if computed_values:
# Grade based on the computed values
for key in variables:
print(key)
required_computed_values[key] = {'value': computed_values.get(key)}
required_expected_values[key] = {'value': expected_values[key]['value'], 'atol': expected_values[key]['atol']}
return required_computed_values, required_expected_values
# if __name__ == "__main__":