Spaces:
Build error
Build error
Greg Thompson
commited on
Commit
•
a34228d
1
Parent(s):
d53af6d
Add tests to curriculum mapper functions
Browse files
mathtext_fastapi/curriculum_mapper.py
CHANGED
@@ -5,46 +5,45 @@ import re
|
|
5 |
from pathlib import Path
|
6 |
|
7 |
|
8 |
-
def read_and_preprocess_spreadsheet():
|
9 |
-
|
10 |
-
DATA_DIR = Path(__file__).parent.parent / "mathtext_fastapi" / "data" /
|
11 |
script_df = pd.read_excel(DATA_DIR, engine='openpyxl')
|
|
|
12 |
script_df.columns = script_df.columns[:2].tolist() + script_df.columns[2:11].astype(int).astype(str).tolist() + script_df.columns[11:].tolist()
|
13 |
script_df.fillna('', inplace=True)
|
14 |
return script_df
|
15 |
|
16 |
|
17 |
-
def
|
18 |
-
|
19 |
-
sideways_transitions = []
|
20 |
-
|
21 |
-
second_match = match+1
|
22 |
-
if direction == 'left':
|
23 |
-
second_match = match-1
|
24 |
-
|
25 |
-
for i in range(9):
|
26 |
-
# Grade column
|
27 |
-
current_grade = i+1
|
28 |
-
if row[current_grade].lower().strip() == 'x':
|
29 |
-
match_arr.append(i)
|
30 |
-
|
31 |
-
for match in match_arr:
|
32 |
-
if match_arr[-1] != match:
|
33 |
-
sideways_transitions.append([
|
34 |
-
direction,
|
35 |
-
f"{skill_code}_G{match}",
|
36 |
-
f"{skill_code}_G{second_match}"
|
37 |
-
])
|
38 |
-
return sideways_transitions
|
39 |
|
|
|
|
|
40 |
|
41 |
-
|
|
|
|
|
|
|
|
|
42 |
pattern = r'[A-Z][0-9]\.\d+\.\d+'
|
43 |
result = re.search(pattern, skill)
|
44 |
return result.group()
|
45 |
|
46 |
|
47 |
def build_horizontal_transitions(script_df):
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
48 |
horizontal_transitions = []
|
49 |
for index, row in script_df.iterrows():
|
50 |
skill_code = extract_skill_code(row['Knowledge or Skill'])
|
@@ -82,6 +81,18 @@ def build_horizontal_transitions(script_df):
|
|
82 |
|
83 |
|
84 |
def gather_all_vertical_matches(script_df):
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
85 |
all_matches = []
|
86 |
columns = ['1', '2', '3', '4', '5', '6', '7', '8', '9']
|
87 |
|
@@ -99,6 +110,18 @@ def gather_all_vertical_matches(script_df):
|
|
99 |
|
100 |
|
101 |
def build_vertical_transitions(script_df):
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
102 |
vertical_transitions = []
|
103 |
|
104 |
all_matches = gather_all_vertical_matches(script_df)
|
@@ -129,6 +152,18 @@ def build_vertical_transitions(script_df):
|
|
129 |
|
130 |
|
131 |
def build_all_states(all_transitions):
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
132 |
all_states = []
|
133 |
for transition in all_transitions:
|
134 |
for index, state in enumerate(transition):
|
@@ -140,7 +175,7 @@ def build_all_states(all_transitions):
|
|
140 |
|
141 |
|
142 |
def build_curriculum_logic():
|
143 |
-
script_df = read_and_preprocess_spreadsheet()
|
144 |
horizontal_transitions = build_horizontal_transitions(script_df)
|
145 |
vertical_transitions = build_vertical_transitions(script_df)
|
146 |
all_transitions = horizontal_transitions + vertical_transitions
|
|
|
5 |
from pathlib import Path
|
6 |
|
7 |
|
8 |
+
def read_and_preprocess_spreadsheet(file_name):
|
9 |
+
""" Creates a pandas dataframe from the curriculum overview spreadsheet """
|
10 |
+
DATA_DIR = Path(__file__).parent.parent / "mathtext_fastapi" / "data" / file_name
|
11 |
script_df = pd.read_excel(DATA_DIR, engine='openpyxl')
|
12 |
+
# Ensures the grade level columns are integers instead of floats
|
13 |
script_df.columns = script_df.columns[:2].tolist() + script_df.columns[2:11].astype(int).astype(str).tolist() + script_df.columns[11:].tolist()
|
14 |
script_df.fillna('', inplace=True)
|
15 |
return script_df
|
16 |
|
17 |
|
18 |
+
def extract_skill_code(skill):
|
19 |
+
""" Looks within a curricular skill description for its descriptive code
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
20 |
|
21 |
+
Input
|
22 |
+
- skill: str - a brief description of a curricular skill
|
23 |
|
24 |
+
>>> extract_skill_code('A3.3.4 - Solve inequalities')
|
25 |
+
'A3.3.4'
|
26 |
+
>>> extract_skill_code('A3.3.2 - Graph linear equations, and identify the x- and y-intercepts or the slope of a line')
|
27 |
+
'A3.3.2'
|
28 |
+
"""
|
29 |
pattern = r'[A-Z][0-9]\.\d+\.\d+'
|
30 |
result = re.search(pattern, skill)
|
31 |
return result.group()
|
32 |
|
33 |
|
34 |
def build_horizontal_transitions(script_df):
|
35 |
+
""" Build a list of transitional relationships within a curricular skill
|
36 |
+
|
37 |
+
Inputs
|
38 |
+
- script_df: pandas dataframe - an overview of the curriculum skills by grade level
|
39 |
+
|
40 |
+
Output
|
41 |
+
- horizontal_transitions: array of arrays - transition data with label, from state, and to state
|
42 |
+
|
43 |
+
>>> script_df = read_and_preprocess_spreadsheet('curriculum_framework_for_tests.xlsx')
|
44 |
+
>>> build_horizontal_transitions(script_df)
|
45 |
+
[['right', 'N1.1.1_G1', 'N1.1.1_G2'], ['right', 'N1.1.1_G2', 'N1.1.1_G3'], ['right', 'N1.1.1_G3', 'N1.1.1_G4'], ['right', 'N1.1.1_G4', 'N1.1.1_G5'], ['right', 'N1.1.1_G5', 'N1.1.1_G6'], ['left', 'N1.1.1_G6', 'N1.1.1_G5'], ['left', 'N1.1.1_G5', 'N1.1.1_G4'], ['left', 'N1.1.1_G4', 'N1.1.1_G3'], ['left', 'N1.1.1_G3', 'N1.1.1_G2'], ['left', 'N1.1.1_G2', 'N1.1.1_G1'], ['right', 'N1.1.2_G1', 'N1.1.2_G2'], ['right', 'N1.1.2_G2', 'N1.1.2_G3'], ['right', 'N1.1.2_G3', 'N1.1.2_G4'], ['right', 'N1.1.2_G4', 'N1.1.2_G5'], ['right', 'N1.1.2_G5', 'N1.1.2_G6'], ['left', 'N1.1.2_G6', 'N1.1.2_G5'], ['left', 'N1.1.2_G5', 'N1.1.2_G4'], ['left', 'N1.1.2_G4', 'N1.1.2_G3'], ['left', 'N1.1.2_G3', 'N1.1.2_G2'], ['left', 'N1.1.2_G2', 'N1.1.2_G1']]
|
46 |
+
"""
|
47 |
horizontal_transitions = []
|
48 |
for index, row in script_df.iterrows():
|
49 |
skill_code = extract_skill_code(row['Knowledge or Skill'])
|
|
|
81 |
|
82 |
|
83 |
def gather_all_vertical_matches(script_df):
|
84 |
+
""" Build a list of transitional relationships within a grade level across skills
|
85 |
+
|
86 |
+
Inputs
|
87 |
+
- script_df: pandas dataframe - an overview of the curriculum skills by grade level
|
88 |
+
|
89 |
+
Output
|
90 |
+
- all_matches: array of arrays - represents skills at each grade level
|
91 |
+
|
92 |
+
>>> script_df = read_and_preprocess_spreadsheet('curriculum_framework_for_tests.xlsx')
|
93 |
+
>>> gather_all_vertical_matches(script_df)
|
94 |
+
[['N1.1.1', '1'], ['N1.1.2', '1'], ['N1.1.1', '2'], ['N1.1.2', '2'], ['N1.1.1', '3'], ['N1.1.2', '3'], ['N1.1.1', '4'], ['N1.1.2', '4'], ['N1.1.1', '5'], ['N1.1.2', '5'], ['N1.1.1', '6'], ['N1.1.2', '6']]
|
95 |
+
"""
|
96 |
all_matches = []
|
97 |
columns = ['1', '2', '3', '4', '5', '6', '7', '8', '9']
|
98 |
|
|
|
110 |
|
111 |
|
112 |
def build_vertical_transitions(script_df):
|
113 |
+
""" Build a list of transitional relationships within a grade level across skills
|
114 |
+
|
115 |
+
Inputs
|
116 |
+
- script_df: pandas dataframe - an overview of the curriculum skills by grade level
|
117 |
+
|
118 |
+
Output
|
119 |
+
- vertical_transitions: array of arrays - transition data with label, from state, and to state
|
120 |
+
|
121 |
+
>>> script_df = read_and_preprocess_spreadsheet('curriculum_framework_for_tests.xlsx')
|
122 |
+
>>> build_vertical_transitions(script_df)
|
123 |
+
[['down', 'N1.1.1_G1', 'N1.1.2_G1'], ['down', 'N1.1.2_G1', 'N1.1.1_G1'], ['down', 'N1.1.1_G2', 'N1.1.2_G2'], ['down', 'N1.1.2_G2', 'N1.1.1_G2'], ['down', 'N1.1.1_G3', 'N1.1.2_G3'], ['down', 'N1.1.2_G3', 'N1.1.1_G3'], ['down', 'N1.1.1_G4', 'N1.1.2_G4'], ['down', 'N1.1.2_G4', 'N1.1.1_G4'], ['down', 'N1.1.1_G5', 'N1.1.2_G5'], ['down', 'N1.1.2_G5', 'N1.1.1_G5'], ['down', 'N1.1.1_G6', 'N1.1.2_G6'], ['up', 'N1.1.2_G6', 'N1.1.1_G6'], ['up', 'N1.1.1_G6', 'N1.1.2_G6'], ['up', 'N1.1.2_G5', 'N1.1.1_G5'], ['up', 'N1.1.1_G5', 'N1.1.2_G5'], ['up', 'N1.1.2_G4', 'N1.1.1_G4'], ['up', 'N1.1.1_G4', 'N1.1.2_G4'], ['up', 'N1.1.2_G3', 'N1.1.1_G3'], ['up', 'N1.1.1_G3', 'N1.1.2_G3'], ['up', 'N1.1.2_G2', 'N1.1.1_G2'], ['up', 'N1.1.1_G2', 'N1.1.2_G2'], ['up', 'N1.1.2_G1', 'N1.1.1_G1']]
|
124 |
+
"""
|
125 |
vertical_transitions = []
|
126 |
|
127 |
all_matches = gather_all_vertical_matches(script_df)
|
|
|
152 |
|
153 |
|
154 |
def build_all_states(all_transitions):
|
155 |
+
""" Creates an array with all state labels for the curriculum
|
156 |
+
|
157 |
+
Input
|
158 |
+
- all_transitions: list of lists - all possible up, down, left, or right transitions in curriculum
|
159 |
+
|
160 |
+
Output
|
161 |
+
- all_states: list - a collection of state labels (skill code and grade number)
|
162 |
+
|
163 |
+
>>> all_transitions = [['right', 'N1.1.1_G1', 'N1.1.1_G2'], ['right', 'N1.1.1_G2', 'N1.1.1_G3'], ['right', 'N1.1.1_G3', 'N1.1.1_G4'], ['right', 'N1.1.1_G4', 'N1.1.1_G5'], ['right', 'N1.1.1_G5', 'N1.1.1_G6'], ['left', 'N1.1.1_G6', 'N1.1.1_G5'], ['left', 'N1.1.1_G5', 'N1.1.1_G4'], ['left', 'N1.1.1_G4', 'N1.1.1_G3'], ['left', 'N1.1.1_G3', 'N1.1.1_G2'], ['left', 'N1.1.1_G2', 'N1.1.1_G1'], ['right', 'N1.1.2_G1', 'N1.1.2_G2'], ['right', 'N1.1.2_G2', 'N1.1.2_G3'], ['right', 'N1.1.2_G3', 'N1.1.2_G4'], ['right', 'N1.1.2_G4', 'N1.1.2_G5'], ['right', 'N1.1.2_G5', 'N1.1.2_G6'], ['left', 'N1.1.2_G6', 'N1.1.2_G5'], ['left', 'N1.1.2_G5', 'N1.1.2_G4'], ['left', 'N1.1.2_G4', 'N1.1.2_G3'], ['left', 'N1.1.2_G3', 'N1.1.2_G2'], ['left', 'N1.1.2_G2', 'N1.1.2_G1'], ['down', 'N1.1.1_G1', 'N1.1.2_G1'], ['down', 'N1.1.2_G1', 'N1.1.1_G1'], ['down', 'N1.1.1_G2', 'N1.1.2_G2'], ['down', 'N1.1.2_G2', 'N1.1.1_G2'], ['down', 'N1.1.1_G3', 'N1.1.2_G3'], ['down', 'N1.1.2_G3', 'N1.1.1_G3'], ['down', 'N1.1.1_G4', 'N1.1.2_G4'], ['down', 'N1.1.2_G4', 'N1.1.1_G4'], ['down', 'N1.1.1_G5', 'N1.1.2_G5'], ['down', 'N1.1.2_G5', 'N1.1.1_G5'], ['down', 'N1.1.1_G6', 'N1.1.2_G6'], ['up', 'N1.1.2_G6', 'N1.1.1_G6'], ['up', 'N1.1.1_G6', 'N1.1.2_G6'], ['up', 'N1.1.2_G5', 'N1.1.1_G5'], ['up', 'N1.1.1_G5', 'N1.1.2_G5'], ['up', 'N1.1.2_G4', 'N1.1.1_G4'], ['up', 'N1.1.1_G4', 'N1.1.2_G4'], ['up', 'N1.1.2_G3', 'N1.1.1_G3'], ['up', 'N1.1.1_G3', 'N1.1.2_G3'], ['up', 'N1.1.2_G2', 'N1.1.1_G2'], ['up', 'N1.1.1_G2', 'N1.1.2_G2'], ['up', 'N1.1.2_G1', 'N1.1.1_G1']]
|
164 |
+
>>> build_all_states(all_transitions)
|
165 |
+
['N1.1.1_G1', 'N1.1.1_G2', 'N1.1.1_G3', 'N1.1.1_G4', 'N1.1.1_G5', 'N1.1.1_G6', 'N1.1.2_G1', 'N1.1.2_G2', 'N1.1.2_G3', 'N1.1.2_G4', 'N1.1.2_G5', 'N1.1.2_G6']
|
166 |
+
"""
|
167 |
all_states = []
|
168 |
for transition in all_transitions:
|
169 |
for index, state in enumerate(transition):
|
|
|
175 |
|
176 |
|
177 |
def build_curriculum_logic():
|
178 |
+
script_df = read_and_preprocess_spreadsheet('Rori_Framework_v1.xlsx')
|
179 |
horizontal_transitions = build_horizontal_transitions(script_df)
|
180 |
vertical_transitions = build_vertical_transitions(script_df)
|
181 |
all_transitions = horizontal_transitions + vertical_transitions
|
mathtext_fastapi/data/curriculum_framework_for_tests.xlsx
ADDED
Binary file (510 kB). View file
|
|
mathtext_fastapi/data/text2int_results.csv
CHANGED
@@ -20,10 +20,10 @@ eight oh,80.0,8.0,False
|
|
20 |
eighty,80.0,80.0,True
|
21 |
ate,8.0,1.0,False
|
22 |
double eight,88.0,8.0,False
|
23 |
-
eight three seven five three O nine,8375309.0,
|
24 |
eight three seven five three oh nine,8375309.0,8375309.0,True
|
25 |
eight three seven five three zero nine,8375309.0,8375309.0,True
|
26 |
-
eight three seven five three oh ni-ee-ine,8375309.0,
|
27 |
two eight,28.0,16.0,False
|
28 |
seven oh eleven,7011.0,77.0,False
|
29 |
seven elevens,77.0,77.0,True
|
@@ -31,10 +31,10 @@ seven eleven,711.0,77.0,False
|
|
31 |
ninety nine oh five,9905.0,149.0,False
|
32 |
seven 0 seven 0 seven 0 seven,7070707.0,7070707.0,True
|
33 |
123 hundred,123000.0,223.0,False
|
34 |
-
5 o 5,505.0,
|
35 |
-
15 o 5,1505.0,
|
36 |
-
15-o 5,1505.0,
|
37 |
-
15 o-5,1505.0,
|
38 |
911-thousand,911000.0,911000.0,True
|
39 |
twenty-two twenty-two,2222.0,44.0,False
|
40 |
twenty-two twenty-twos,484.0,44.0,False
|
|
|
20 |
eighty,80.0,80.0,True
|
21 |
ate,8.0,1.0,False
|
22 |
double eight,88.0,8.0,False
|
23 |
+
eight three seven five three O nine,8375309.0,8375319.0,False
|
24 |
eight three seven five three oh nine,8375309.0,8375309.0,True
|
25 |
eight three seven five three zero nine,8375309.0,8375309.0,True
|
26 |
+
eight three seven five three oh ni-ee-ine,8375309.0,837530111.0,False
|
27 |
two eight,28.0,16.0,False
|
28 |
seven oh eleven,7011.0,77.0,False
|
29 |
seven elevens,77.0,77.0,True
|
|
|
31 |
ninety nine oh five,9905.0,149.0,False
|
32 |
seven 0 seven 0 seven 0 seven,7070707.0,7070707.0,True
|
33 |
123 hundred,123000.0,223.0,False
|
34 |
+
5 o 5,505.0,515.0,False
|
35 |
+
15 o 5,1505.0,21.0,False
|
36 |
+
15-o 5,1505.0,21.0,False
|
37 |
+
15 o-5,1505.0,21.0,False
|
38 |
911-thousand,911000.0,911000.0,True
|
39 |
twenty-two twenty-two,2222.0,44.0,False
|
40 |
twenty-two twenty-twos,484.0,44.0,False
|