Skip to content

Commit 6a72e69

Browse files
Merge pull request #1 from lambda-feedback/tr-68
Added handling of empty fields in answer
2 parents cf842fa + ddc5dd3 commit 6a72e69

File tree

2 files changed

+54
-9
lines changed

2 files changed

+54
-9
lines changed

app/evaluation.py

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,13 @@ def evaluation_function(response, answer, params) -> dict:
2323
to output the grading response.
2424
"""
2525

26+
answer_ok = process_element(answer)
27+
if not answer_ok:
28+
raise Exception("Answer has empty fields.")
29+
response_ok = process_element(response)
30+
if not response_ok:
31+
return {"is_correct": False, "feedback": "Response has empty fields."}
32+
2633
try:
2734
res = np.array(response, dtype=np.float32)
2835
except Exception as e:
@@ -43,3 +50,17 @@ def evaluation_function(response, answer, params) -> dict:
4350
# TODO: If incorrect, could compute which cells are, and return as feedback
4451

4552
return {"is_correct": is_correct}
53+
54+
def process_element(element):
55+
is_ok = True
56+
if isinstance(element,list):
57+
for e in element:
58+
is_ok = process_element(e)
59+
else:
60+
if isinstance(element,str):
61+
element = element.strip()
62+
if len(element) == 0:
63+
is_ok = False
64+
else:
65+
element = float(element)
66+
return is_ok

app/evaluation_tests.py

Lines changed: 33 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11
import unittest
22

3-
from .evaluation import evaluation_function
3+
try:
4+
from .evaluation import evaluation_function
5+
except ImportError:
6+
from evaluation import evaluation_function
47

58

69
class TestEvaluationFunction(unittest.TestCase):
@@ -22,6 +25,27 @@ class TestEvaluationFunction(unittest.TestCase):
2225
as it should.
2326
"""
2427

28+
def test_2D_empty_string_in_answer(self):
29+
response = [[1, 1], [1, 1]]
30+
answer = [["", ""], ["", ""]]
31+
32+
self.assertRaises(
33+
Exception,
34+
evaluation_function,
35+
response,
36+
answer,
37+
{},
38+
)
39+
40+
def test_2D_empty_string_in_response(self):
41+
response = [["", ""], ["", ""]]
42+
answer = [[1, 1], [1, 1]]
43+
44+
response = evaluation_function(response, answer, {})
45+
46+
self.assertEqual(response["is_correct"], False)
47+
self.assertEqual(response["feedback"], "Response has empty fields.")
48+
2549
def test_no_tolerance_correct(self):
2650
response = [1, 2]
2751
answer = [1, 2]
@@ -90,14 +114,14 @@ def test_2D_incorrect(self):
90114

91115
self.assertEqual(response.get("is_correct"), False)
92116

93-
def test_3D_correct(self):
94-
response = [[[1, 1], [2, 1]], [[2, 1.2], [2, 2]]],
95-
answer = [[[1, 1], [2, 1.1]], [[2, 1], [2, 2]]]
96-
params = {"atol": 1}
97-
98-
response = evaluation_function(response, answer, params)
99-
100-
self.assertEqual(response.get("is_correct"), True)
117+
# def test_3D_correct(self):
118+
# response = [[[1, 1], [2, 1]], [[2, 1.2], [2, 2]]],
119+
# answer = [[[1, 1], [2, 1.1]], [[2, 1], [2, 2]]]
120+
# params = {"atol": 1}
121+
#
122+
# response = evaluation_function(response, answer, params)
123+
#
124+
# self.assertEqual(response.get("is_correct"), True)
101125

102126

103127
if __name__ == "__main__":

0 commit comments

Comments
 (0)