From 4d2eeae4e850ddf71f7f2cdf1a82e327a666a0ef Mon Sep 17 00:00:00 2001 From: Chris Chudzicki Date: Wed, 8 Aug 2018 15:40:40 -0400 Subject: [PATCH] for between_comparer, ensure input is real --- mitxgraders/comparers/comparers.py | 10 ++++++++++ mitxgraders/exceptions.py | 6 ++++++ mitxgraders/formulagrader/matrixgrader.py | 7 +------ 3 files changed, 17 insertions(+), 6 deletions(-) diff --git a/mitxgraders/comparers/comparers.py b/mitxgraders/comparers/comparers.py index 5f233c9f..d4ff7f83 100644 --- a/mitxgraders/comparers/comparers.py +++ b/mitxgraders/comparers/comparers.py @@ -45,6 +45,7 @@ """ from numbers import Number import numpy as np +from mitxgraders.exceptions import InputTypeError def equality_comparer(comparer_params_evals, student_eval, utils): """ @@ -80,9 +81,18 @@ def between_comparer(comparer_params_evals, student_eval, utils): False >>> grader(None, '5e7')['ok'] True + + Input must be real: + >>> grader(None, '5e8+2e6*i')['ok'] + Traceback (most recent call last): + InputTypeError: Input must be real. + """ start, stop = comparer_params_evals + if not np.isreal(student_eval): + raise InputTypeError("Input must be real.") + return start <= student_eval <= stop def congruence_comparer(comparer_params_evals, student_eval, utils): diff --git a/mitxgraders/exceptions.py b/mitxgraders/exceptions.py index 009f3dcd..18d24bdf 100644 --- a/mitxgraders/exceptions.py +++ b/mitxgraders/exceptions.py @@ -39,6 +39,12 @@ class InvalidInput(StudentFacingError): """ pass +class InputTypeError(InvalidInput): + """ + Indicates that student's input has evaluated to an object of the wrong + type (or shape). + """ + class MissingInput(StudentFacingError): """ Raised when a required input has been left blank. diff --git a/mitxgraders/formulagrader/matrixgrader.py b/mitxgraders/formulagrader/matrixgrader.py index a5c0b107..c0a14a89 100644 --- a/mitxgraders/formulagrader/matrixgrader.py +++ b/mitxgraders/formulagrader/matrixgrader.py @@ -6,6 +6,7 @@ from numbers import Number from collections import namedtuple from voluptuous import Required, Any +from mitxgraders.exceptions import InputTypeError from mitxgraders.formulagrader.formulagrader import FormulaGrader from mitxgraders.helpers.validatorfuncs import NonNegative from mitxgraders.helpers.calc import MathArray, within_tolerance, identity @@ -14,12 +15,6 @@ from mitxgraders.helpers.calc.mathfuncs import ( merge_dicts, ARRAY_ONLY_FUNCTIONS) -class InputTypeError(CalcError): - """ - Indicates that student's input has evaluated to an object of the wrong - type (or shape). - """ - class MatrixGrader(FormulaGrader): """ An extension of FormulaGrader with better support for grading expressions