From 877a8e0d42b2aa95ec5309a53ef0f7aa1e6c15ff Mon Sep 17 00:00:00 2001 From: Tue Herlau <tuhe@win.dtu.dk> Date: Wed, 20 Jan 2021 17:06:12 +0100 Subject: [PATCH] updates --- unitgrade/__pycache__/__init__.cpython-36.pyc | Bin 998 -> 998 bytes .../__pycache__/unitgrade.cpython-36.pyc | Bin 11574 -> 11636 bytes .../unitgrade_helpers.cpython-36.pyc | Bin 5460 -> 5594 bytes unitgrade/unitgrade.py | 7 ++++++- unitgrade/unitgrade_helpers.py | 5 +++-- 5 files changed, 9 insertions(+), 3 deletions(-) diff --git a/unitgrade/__pycache__/__init__.cpython-36.pyc b/unitgrade/__pycache__/__init__.cpython-36.pyc index 845822da1bc18d27e8c2481f064c69b63907c5ec..41c8cae17ecac0b36d54439732f20e778a3e90b0 100644 GIT binary patch delta 199 zcmaFH{*0a7n3tEUs_6ej_CiL>jg?A_+_#ug@@_Gvtz;+?p1h1Pl~Hsu50fjmFarZa z5ttB}9K$5bC^or@DU9*f<cmxe0zz;(r~*l5MMlZV*36m-x47fu%TkMqGxPJ}<BM29 z3VA?;D2NaP5t0lH3{k?Rd6^~YMTse?dT>^e6i8YcM96>$Sr7rX06~aMKEkX707~#J AcK`qY delta 199 zcmaFH{*0a7n3tF98|S}??1hXL8!MF<xucj;@@_Gvtz;+?n!JoLl~H6e50fjm5Ca24 z5ttC39K$5bC_1@{DU2~{@<k>K0YSJNRDmS3BBS_ZYi7-aDDL?9vecsD%>2Cg_##%2 zLLLwy0wP2~gg65OLzHl7US>&pQDRD}9-LJq0g{#k5mF#R8bp9CKoG){k1#6%0D@gB A>;M1& diff --git a/unitgrade/__pycache__/unitgrade.cpython-36.pyc b/unitgrade/__pycache__/unitgrade.cpython-36.pyc index 650192ef2a15d66101d9b6ed2d8900ed8fe6506d..4fdacefd982002048b628fb9e4ce082fe99b01ed 100644 GIT binary patch delta 2781 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 delta 2842 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 diff --git a/unitgrade/__pycache__/unitgrade_helpers.cpython-36.pyc b/unitgrade/__pycache__/unitgrade_helpers.cpython-36.pyc index b1ef9dc6b9b3154d2cebad1295e20b940d1909eb..4ec59209cb632db45b779350e883f1da9136585c 100644 GIT binary patch delta 2199 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 b0b39OD!GgFCyA<Yf=g{i9!8$Y#-fS<4lfUm delta 2126 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 diff --git a/unitgrade/unitgrade.py b/unitgrade/unitgrade.py index 8b6496e..e9fd63a 100644 --- a/unitgrade/unitgrade.py +++ b/unitgrade/unitgrade.py @@ -69,11 +69,16 @@ class Capturing(list): class QItem(unittest.TestCase): title = None - testfun = unittest.TestCase.assertEqual + testfun = None tol = 0 _computed_answer = None # Internal helper to later get results. def __init__(self, working_directory=None, correct_answer_payload=None, *args, **kwargs): + if self.tol > 0 and self.testfun is None: + self.testfun = self.assertL2Relative + else: + self.testfun = unittest.TestCase.assertEqual + self.name = self.__class__.__name__ self._correct_answer_payload = correct_answer_payload super().__init__(*args, **kwargs) diff --git a/unitgrade/unitgrade_helpers.py b/unitgrade/unitgrade_helpers.py index 4db4c2b..3af947a 100644 --- a/unitgrade/unitgrade_helpers.py +++ b/unitgrade/unitgrade_helpers.py @@ -46,7 +46,7 @@ parser.add_argument('--passall', action="store_true", help='Automatically pass # const=sum, default=max, # help='sum the integers (default: find the max)') -def evaluate_report_student(report, question=None, qitem=None, unmute=None, passall=None): +def evaluate_report_student(report, question=None, qitem=None, unmute=None, passall=None, ignore_missing_file=False): args = parser.parse_args() if question is None and args.q is not None: question = args.q @@ -54,7 +54,8 @@ def evaluate_report_student(report, question=None, qitem=None, unmute=None, pass question, qitem = [int(v) for v in question.split(".")] else: question = int(question) - if not os.path.isfile(report.computed_answers_file): + + if not os.path.isfile(report.computed_answers_file) and not ignore_missing_file: raise Exception("> Error: The pre-computed answer file", os.path.abspath(report.computed_answers_file), "does not exist. Check your package installation") if unmute is None: -- GitLab