Skip to content

Commit 3895bbb

Browse files
Merge pull request #6 from lambda-feedback/tr-95-possible-bug-with-atol
Added machine epsilon to ensure that values very close to the boundar…
2 parents 10e9a56 + db134e2 commit 3895bbb

2 files changed

Lines changed: 22 additions & 0 deletions

File tree

app/evaluation.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
from numpy import spacing
2+
13
def evaluation_function(response, answer, params) -> dict:
24
"""
35
Function used to grade a student response.
@@ -27,6 +29,7 @@ def evaluation_function(response, answer, params) -> dict:
2729

2830
real_diff = abs(response - answer)
2931
allowed_diff = atol + rtol * abs(answer)
32+
allowed_diff += spacing(answer)
3033
is_correct = real_diff <= allowed_diff
3134

3235
return {

app/evaluation_tests.py

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -192,6 +192,25 @@ def test_relative_absolute_incorrect(self):
192192

193193
self.assertEqual(response.get("is_correct"), False)
194194

195+
def test_possible_bug_with_atol(self):
196+
response_low = 15.7
197+
response_high = 15.9
198+
response_under = 15.6999999
199+
response_over = 15.90000001
200+
answer = 15.8
201+
params = {"atol": 0.1}
202+
203+
result_low = evaluation_function(response_low, answer, params)
204+
result_high = evaluation_function(response_high, answer, params)
205+
206+
self.assertEqual(result_low.get("is_correct"), True)
207+
self.assertEqual(result_high.get("is_correct"), True)
208+
209+
result_under = evaluation_function(response_under, answer, params)
210+
result_over = evaluation_function(response_over, answer, params)
211+
212+
self.assertEqual(result_under.get("is_correct"), False)
213+
self.assertEqual(result_over.get("is_correct"), False)
195214

196215
if __name__ == "__main__":
197216
unittest.main()

0 commit comments

Comments
 (0)