From ae599247fcc57913a0ae64ff762df600db2a55e9 Mon Sep 17 00:00:00 2001
From: Tue Herlau <tuhe@dtu.dk>
Date: Wed, 8 Sep 2021 21:33:08 +0200
Subject: [PATCH] Moss integration and Hinting

---
 .gitignore                                    | 138 +++++++
 README.md                                     |  18 +-
 docs/README.jinja.md                          |  18 +-
 docs/build_docs.py                            |   2 +-
 docs/hints.png                                | Bin 0 -> 143700 bytes
 .../example_hints/instructor/cs106/deploy.py  |   8 +
 .../instructor/cs106/homework1.py             |  22 ++
 .../instructor/cs106/report1hints.py          |  19 +
 .../instructor/cs106/report1hints_grade.py    | 339 ++++++++++++++++++
 .../instructor/cs106/unitgrade/Week1.pkl      | Bin 0 -> 604 bytes
 .../example_hints/students/cs106/homework1.py |  21 ++
 .../students/cs106/report1hints.py            |  19 +
 .../students/cs106/report1hints_grade.py      | 338 +++++++++++++++++
 .../students/cs106/unitgrade/Week1.pkl        | Bin 0 -> 604 bytes
 14 files changed, 939 insertions(+), 3 deletions(-)
 create mode 100644 .gitignore
 create mode 100644 docs/hints.png
 create mode 100644 examples/example_hints/instructor/cs106/deploy.py
 create mode 100644 examples/example_hints/instructor/cs106/homework1.py
 create mode 100644 examples/example_hints/instructor/cs106/report1hints.py
 create mode 100644 examples/example_hints/instructor/cs106/report1hints_grade.py
 create mode 100644 examples/example_hints/instructor/cs106/unitgrade/Week1.pkl
 create mode 100644 examples/example_hints/students/cs106/homework1.py
 create mode 100644 examples/example_hints/students/cs106/report1hints.py
 create mode 100644 examples/example_hints/students/cs106/report1hints_grade.py
 create mode 100644 examples/example_hints/students/cs106/unitgrade/Week1.pkl

diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..5391d87
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,138 @@
+# Byte-compiled / optimized / DLL files
+__pycache__/
+*.py[cod]
+*$py.class
+
+# C extensions
+*.so
+
+# Distribution / packaging
+.Python
+build/
+develop-eggs/
+dist/
+downloads/
+eggs/
+.eggs/
+lib/
+lib64/
+parts/
+sdist/
+var/
+wheels/
+share/python-wheels/
+*.egg-info/
+.installed.cfg
+*.egg
+MANIFEST
+
+# PyInstaller
+#  Usually these files are written by a python script from a template
+#  before PyInstaller builds the exe, so as to inject date/other infos into it.
+*.manifest
+*.spec
+
+# Installer logs
+pip-log.txt
+pip-delete-this-directory.txt
+
+# Unit test / coverage reports
+htmlcov/
+.tox/
+.nox/
+.coverage
+.coverage.*
+.cache
+nosetests.xml
+coverage.xml
+*.cover
+*.py,cover
+.hypothesis/
+.pytest_cache/
+cover/
+
+# Translations
+*.mo
+*.pot
+
+# Django stuff:
+*.log
+local_settings.py
+db.sqlite3
+db.sqlite3-journal
+
+# Flask stuff:
+instance/
+.webassets-cache
+
+# Scrapy stuff:
+.scrapy
+
+# Sphinx documentation
+docs/_build/
+
+# PyBuilder
+.pybuilder/
+target/
+
+# Jupyter Notebook
+.ipynb_checkpoints
+
+# IPython
+profile_default/
+ipython_config.py
+
+# pyenv
+#   For a library or package, you might want to ignore these files since the code is
+#   intended to run in multiple environments; otherwise, check them in:
+# .python-version
+
+# pipenv
+#   According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
+#   However, in case of collaboration, if having platform-specific dependencies or dependencies
+#   having no cross-platform support, pipenv may install dependencies that don't work, or not
+#   install all needed dependencies.
+#Pipfile.lock
+
+# PEP 582; used by e.g. github.com/David-OConnor/pyflow
+__pypackages__/
+
+# Celery stuff
+celerybeat-schedule
+celerybeat.pid
+
+# SageMath parsed files
+*.sage.py
+
+# Environments
+.env
+.venv
+env/
+venv/
+ENV/
+env.bak/
+venv.bak/
+
+# Spyder project settings
+.spyderproject
+.spyproject
+
+# Rope project settings
+.ropeproject
+
+# mkdocs documentation
+/site
+
+# mypy
+.mypy_cache/
+.dmypy.json
+dmypy.json
+
+# Pyre type checker
+.pyre/
+
+# pytype static type analyzer
+.pytype/
+
+# Cython debug symbols
+cython_debug/
\ No newline at end of file
diff --git a/README.md b/README.md
index f4ea773..92eeffa 100644
--- a/README.md
+++ b/README.md
@@ -299,7 +299,18 @@ The last lines load the result and compare the score -- in this case both will r
  - Docker prevents students from doing mailicious things to your computer and allows the results to be reproducible by TAs. 
 
 # Moss plagiarism detection
-You can easily apply Moss to the students token files. 
+You can easily apply Moss to the students token files.  First get moss from https://theory.stanford.edu/~aiken/moss/ and create two directories:
+```terminal
+whitelist/   # Whitelisted files. Code from these files are part of the handouts to students
+submissions/ # Where you dump student submissions.
+```
+The whitelist directory is optional, and the submissions directory contains student submissions (one folder per student):
+```terminal
+/submissions/<student-id-1>/..
+/submissions/<student-id-2>/..
+```
+The files in the whitelist/student directory can be either `.token` files (which are unpacked) or python files, and they may contain subdirectories: Everything will be unpacked and flattened. The simplest way to set it up is simply to download all files from DTU learn as a zip-file and unzip it somewhere.
+When done just call moss as follows:
 ```python 
 from unitgrade_private2.plagiarism.mossit import moss_it, get_id
 
@@ -311,6 +322,11 @@ if __name__ == "__main__":
     moss_it(whitelist_dir="whitelist", submissions_dir="student_submissions", moss_id=id)
 
 ```
+This will generate a report. You can view the example including the report here: https://lab.compute.dtu.dk/tuhe/unitgrade_private/-/tree/master/examples/example_moss
+
+# Smart hinting
+
+![alt text|small](https://gitlab.compute.dtu.dk/tuhe/slider/-/raw/main/docs/hints.png)
 
 # Citing
 ```bibtex
diff --git a/docs/README.jinja.md b/docs/README.jinja.md
index cb8c86d..a146791 100644
--- a/docs/README.jinja.md
+++ b/docs/README.jinja.md
@@ -299,10 +299,26 @@ The last lines load the result and compare the score -- in this case both will r
  - Docker prevents students from doing mailicious things to your computer and allows the results to be reproducible by TAs. 
 
 # Moss plagiarism detection
-You can easily apply Moss to the students token files. 
+You can easily apply Moss to the students token files.  First get moss from https://theory.stanford.edu/~aiken/moss/ and create two directories:
+```terminal
+whitelist/   # Whitelisted files. Code from these files are part of the handouts to students
+submissions/ # Where you dump student submissions.
+```
+The whitelist directory is optional, and the submissions directory contains student submissions (one folder per student):
+```terminal
+/submissions/<student-id-1>/..
+/submissions/<student-id-2>/..
+```
+The files in the whitelist/student directory can be either `.token` files (which are unpacked) or python files, and they may contain subdirectories: Everything will be unpacked and flattened. The simplest way to set it up is simply to download all files from DTU learn as a zip-file and unzip it somewhere.
+When done just call moss as follows:
 ```python 
 {{example_moss_moss_example_py}}
 ```
+This will generate a report. You can view the example including the report here: https://lab.compute.dtu.dk/tuhe/unitgrade_private/-/tree/master/examples/example_moss
+
+# Smart hinting
+
+![alt text|small]({{resources}}/docs/hints.png)
 
 # Citing
 ```bibtex
diff --git a/docs/build_docs.py b/docs/build_docs.py
index 7bc1c8c..3e95bce 100644
--- a/docs/build_docs.py
+++ b/docs/build_docs.py
@@ -14,7 +14,7 @@ if __name__ == "__main__":
             k = os.path.relpath(file, "../examples").replace(os.sep, "_").replace(".", "_")
             data[k] = f.read()
 
-
+    data['resources'] = "https://gitlab.compute.dtu.dk/tuhe/slider/-/raw/main"
 
     with open("README.jinja.md", 'r') as f:
         s = jinja2.Environment(loader=jinja2.FileSystemLoader([".", "../example"])).from_string(f.read()).render(data)
diff --git a/docs/hints.png b/docs/hints.png
new file mode 100644
index 0000000000000000000000000000000000000000..b1a95a99419acdf385b4bdc93d6c46245f5402fc
GIT binary patch
literal 143700
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
W^K%_ijq~F{6}YFXpUXO@geCx$3a>x_

literal 0
HcmV?d00001

diff --git a/examples/example_hints/instructor/cs106/deploy.py b/examples/example_hints/instructor/cs106/deploy.py
new file mode 100644
index 0000000..39959eb
--- /dev/null
+++ b/examples/example_hints/instructor/cs106/deploy.py
@@ -0,0 +1,8 @@
+from report1hints import Report1Hints
+from unitgrade_private2.hidden_create_files import setup_grade_file_report
+from snipper import snip_dir
+
+if __name__ == "__main__":
+    setup_grade_file_report(Report1Hints)
+    # Deploy the files using snipper: https://gitlab.compute.dtu.dk/tuhe/snipper
+    snip_dir.snip_dir("./", "../../students/cs106", clean_destination_dir=True, exclude=['__pycache__', '*.token', 'deploy.py'])
diff --git a/examples/example_hints/instructor/cs106/homework1.py b/examples/example_hints/instructor/cs106/homework1.py
new file mode 100644
index 0000000..4694f3c
--- /dev/null
+++ b/examples/example_hints/instructor/cs106/homework1.py
@@ -0,0 +1,22 @@
+def find_primes(n): #!f
+    """
+    Return a list of all primes up to (and including) n
+    Hints:
+        * Remember to return a *list* (and not a tuple or numpy ndarray)
+        * Remember to include n if n is a prime
+        * The first few primes are 2, 3, 5, ...
+    """
+    primes = [p for p in range(2, n+1) if is_prime(n) ]
+    return primes
+
+def is_prime(n): #!f
+    """
+    Return true iff n is a prime
+    Hints:
+        * A number if a prime if it has no divisors
+        * You can check if k divides n using the modulo-operator. I.e. n % k == True if k divides n.
+    """
+    for k in range(2, n):
+        if k % n == 0:
+            return False
+    return True
diff --git a/examples/example_hints/instructor/cs106/report1hints.py b/examples/example_hints/instructor/cs106/report1hints.py
new file mode 100644
index 0000000..a10daf1
--- /dev/null
+++ b/examples/example_hints/instructor/cs106/report1hints.py
@@ -0,0 +1,19 @@
+from unitgrade2 import Report, UTestCase, evaluate_report_student
+from homework1 import find_primes
+import homework1
+
+class Week1(UTestCase):
+    def test_find_all_primes(self):
+        """
+        Hints:
+            * Insert a breakpoint and check what your function find_primes(4) actually outputs
+        """
+        self.assertEqual(find_primes(4), [2,3])
+
+class Report1Hints(Report):
+    title = "CS 106 Report 1"
+    questions = [(Week1, 10)]  # Include a single question for 10 credits.
+    pack_imports = [homework1] # Unitgrade will recursively include all .py files from "cs101flat"
+
+if __name__ == "__main__":
+    evaluate_report_student(Report1Hints())
diff --git a/examples/example_hints/instructor/cs106/report1hints_grade.py b/examples/example_hints/instructor/cs106/report1hints_grade.py
new file mode 100644
index 0000000..47e8e0c
--- /dev/null
+++ b/examples/example_hints/instructor/cs106/report1hints_grade.py
@@ -0,0 +1,339 @@
+
+import numpy as np
+from tabulate import tabulate
+from datetime import datetime
+import pyfiglet
+import unittest
+import inspect
+import os
+import argparse
+import time
+
+parser = argparse.ArgumentParser(description='Evaluate your report.', epilog="""Example: 
+To run all tests in a report: 
+
+> python assignment1_dp.py
+
+To run only question 2 or question 2.1
+
+> python assignment1_dp.py -q 2
+> python assignment1_dp.py -q 2.1
+
+Note this scripts does not grade your report. To grade your report, use:
+
+> python report1_grade.py
+
+Finally, note that if your report is part of a module (package), and the report script requires part of that package, the -m option for python may be useful.
+For instance, if the report file is in Documents/course_package/report3_complete.py, and `course_package` is a python package, then change directory to 'Documents/` and run:
+
+> python -m course_package.report1
+
+see https://docs.python.org/3.9/using/cmdline.html
+""", formatter_class=argparse.RawTextHelpFormatter)
+parser.add_argument('-q', nargs='?', type=str, default=None, help='Only evaluate this question (e.g.: -q 2)')
+parser.add_argument('--showexpected',  action="store_true",  help='Show the expected/desired result')
+parser.add_argument('--showcomputed',  action="store_true",  help='Show the answer your code computes')
+parser.add_argument('--unmute',  action="store_true",  help='Show result of print(...) commands in code')
+parser.add_argument('--passall',  action="store_true",  help='Automatically pass all tests. Useful when debugging.')
+parser.add_argument('--noprogress',  action="store_true",  help='Disable progress bars.')
+
+def evaluate_report_student(report, question=None, qitem=None, unmute=None, passall=None, ignore_missing_file=False, show_tol_err=False):
+    args = parser.parse_args()
+    if question is None and args.q is not None:
+        question = args.q
+        if "." in question:
+            question, qitem = [int(v) for v in question.split(".")]
+        else:
+            question = int(question)
+
+    if hasattr(report, "computed_answer_file") and 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:
+        unmute = args.unmute
+    if passall is None:
+        passall = args.passall
+
+
+    results, table_data = evaluate_report(report, question=question, show_progress_bar=not unmute and not args.noprogress, qitem=qitem, verbose=False, passall=passall, show_expected=args.showexpected, show_computed=args.showcomputed,unmute=unmute,
+                                          show_tol_err=show_tol_err)
+
+
+    if question is None:
+        print("Provisional evaluation")
+        tabulate(table_data)
+        table = table_data
+        print(tabulate(table))
+        print(" ")
+
+    fr = inspect.getouterframes(inspect.currentframe())[1].filename
+    gfile = os.path.basename(fr)[:-3] + "_grade.py"
+    if os.path.exists(gfile):
+        print("Note your results have not yet been registered. \nTo register your results, please run the file:")
+        print(">>>", gfile)
+        print("In the same manner as you ran this file.")
+
+
+    return results
+
+
+def upack(q):
+    # h = zip([(i['w'], i['possible'], i['obtained']) for i in q.values()])
+    h =[(i['w'], i['possible'], i['obtained']) for i in q.values()]
+    h = np.asarray(h)
+    return h[:,0], h[:,1], h[:,2],
+
+class UnitgradeTextRunner(unittest.TextTestRunner):
+    def __init__(self, *args, **kwargs):
+        super().__init__(*args, **kwargs)
+
+class SequentialTestLoader(unittest.TestLoader):
+    def getTestCaseNames(self, testCaseClass):
+        test_names = super().getTestCaseNames(testCaseClass)
+        # testcase_methods = list(testCaseClass.__dict__.keys())
+        ls = []
+        for C in testCaseClass.mro():
+            if issubclass(C, unittest.TestCase):
+                ls = list(C.__dict__.keys()) + ls
+        testcase_methods = ls
+        test_names.sort(key=testcase_methods.index)
+        return test_names
+
+def evaluate_report(report, question=None, qitem=None, passall=False, verbose=False,  show_expected=False, show_computed=False,unmute=False, show_help_flag=True, silent=False,
+                    show_progress_bar=True,
+                    show_tol_err=False,
+                    big_header=True):
+
+    from src.unitgrade2.version import __version__
+    now = datetime.now()
+    if big_header:
+        ascii_banner = pyfiglet.figlet_format("UnitGrade", font="doom")
+        b = "\n".join( [l for l in ascii_banner.splitlines() if len(l.strip()) > 0] )
+    else:
+        b = "Unitgrade"
+    dt_string = now.strftime("%d/%m/%Y %H:%M:%S")
+    print(b + " v" + __version__ + ", started: " + dt_string+ "\n")
+    # print("Started: " + dt_string)
+    s = report.title
+    if hasattr(report, "version") and report.version is not None:
+        s += " version " + report.version
+    print(s, "(use --help for options)" if show_help_flag else "")
+    # print(f"Loaded answers from: ", report.computed_answers_file, "\n")
+    table_data = []
+    t_start = time.time()
+    score = {}
+    loader = SequentialTestLoader()
+
+    for n, (q, w) in enumerate(report.questions):
+        if question is not None and n+1 != question:
+            continue
+        suite = loader.loadTestsFromTestCase(q)
+        qtitle = q.question_title() if hasattr(q, 'question_title') else q.__qualname__
+        q_title_print = "Question %i: %s"%(n+1, qtitle)
+        print(q_title_print, end="")
+        q.possible = 0
+        q.obtained = 0
+        q_ = {} # Gather score in this class.
+        from src.unitgrade2.unitgrade2 import UTextTestRunner
+        UTextResult.q_title_print = q_title_print # Hacky
+        UTextResult.show_progress_bar = show_progress_bar # Hacky.
+        UTextResult.number = n
+        UTextResult.nL = report.nL
+
+        res = UTextTestRunner(verbosity=2, resultclass=UTextResult).run(suite)
+
+        possible = res.testsRun
+        obtained = len(res.successes)
+
+        assert len(res.successes) +  len(res.errors) + len(res.failures) == res.testsRun
+
+        obtained = int(w * obtained * 1.0 / possible ) if possible > 0 else 0
+        score[n] = {'w': w, 'possible': w, 'obtained': obtained, 'items': q_, 'title': qtitle}
+        q.obtained = obtained
+        q.possible = possible
+
+        s1 = f" * q{n+1})   Total"
+        s2 = f" {q.obtained}/{w}"
+        print(s1 + ("."* (report.nL-len(s1)-len(s2) )) + s2 )
+        print(" ")
+        table_data.append([f"q{n+1}) Total", f"{q.obtained}/{w}"])
+
+    ws, possible, obtained = upack(score)
+    possible = int( msum(possible) )
+    obtained = int( msum(obtained) ) # Cast to python int
+    report.possible = possible
+    report.obtained = obtained
+    now = datetime.now()
+    dt_string = now.strftime("%H:%M:%S")
+
+    dt = int(time.time()-t_start)
+    minutes = dt//60
+    seconds = dt - minutes*60
+    plrl = lambda i, s: str(i) + " " + s + ("s" if i != 1 else "")
+
+    from src.unitgrade2.unitgrade2 import dprint
+    dprint(first = "Total points at "+ dt_string + " (" + plrl(minutes, "minute") + ", "+ plrl(seconds, "second") +")",
+           last=""+str(report.obtained)+"/"+str(report.possible), nL = report.nL)
+
+    # print(f"Completed at "+ dt_string + " (" + plrl(minutes, "minute") + ", "+ plrl(seconds, "second") +"). Total")
+
+    table_data.append(["Total", ""+str(report.obtained)+"/"+str(report.possible) ])
+    results = {'total': (obtained, possible), 'details': score}
+    return results, table_data
+
+
+import bz2
+import pickle
+import os
+
+
+def bzwrite(json_str, token): # to get around obfuscation issues
+    with getattr(bz2, 'open')(token, "wt") as f:
+        f.write(json_str)
+
+def gather_imports(imp):
+    resources = {}
+    m = imp
+    # for m in pack_imports:
+    # print(f"*** {m.__name__}")
+    f = m.__file__
+    # dn = os.path.dirname(f)
+    # top_package = os.path.dirname(__import__(m.__name__.split('.')[0]).__file__)
+    # top_package = str(__import__(m.__name__.split('.')[0]).__path__)
+
+    if hasattr(m, '__file__') and not hasattr(m, '__path__'):  # Importing a simple file: m.__class__.__name__ == 'module' and False:
+        top_package = os.path.dirname(m.__file__)
+        module_import = True
+    else:
+        top_package = __import__(m.__name__.split('.')[0]).__path__._path[0]
+        module_import = False
+
+    # top_package = os.path.dirname(__import__(m.__name__.split('.')[0]).__file__)
+    # top_package = os.path.dirname(top_package)
+    import zipfile
+    # import strea
+    # zipfile.ZipFile
+    import io
+    # file_like_object = io.BytesIO(my_zip_data)
+    zip_buffer = io.BytesIO()
+    with zipfile.ZipFile(zip_buffer, 'w') as zip:
+        # zip.write()
+        for root, dirs, files in os.walk(top_package):
+            for file in files:
+                if file.endswith(".py"):
+                    fpath = os.path.join(root, file)
+                    v = os.path.relpath(os.path.join(root, file), os.path.dirname(top_package) if not module_import else top_package)
+                    zip.write(fpath, v)
+
+    resources['zipfile'] = zip_buffer.getvalue()
+    resources['top_package'] = top_package
+    resources['module_import'] = module_import
+    return resources, top_package
+
+    if f.endswith("__init__.py"):
+        for root, dirs, files in os.walk(os.path.dirname(f)):
+            for file in files:
+                if file.endswith(".py"):
+                    # print(file)
+                    # print()
+                    v = os.path.relpath(os.path.join(root, file), top_package)
+                    with open(os.path.join(root, file), 'r') as ff:
+                        resources[v] = ff.read()
+    else:
+        v = os.path.relpath(f, top_package)
+        with open(f, 'r') as ff:
+            resources[v] = ff.read()
+    return resources
+
+import argparse
+parser = argparse.ArgumentParser(description='Evaluate your report.', epilog="""Use this script to get the score of your report. Example:
+
+> python report1_grade.py
+
+Finally, note that if your report is part of a module (package), and the report script requires part of that package, the -m option for python may be useful.
+For instance, if the report file is in Documents/course_package/report3_complete.py, and `course_package` is a python package, then change directory to 'Documents/` and run:
+
+> python -m course_package.report1
+
+see https://docs.python.org/3.9/using/cmdline.html
+""", formatter_class=argparse.RawTextHelpFormatter)
+parser.add_argument('--noprogress',  action="store_true",  help='Disable progress bars')
+parser.add_argument('--autolab',  action="store_true",  help='Show Autolab results')
+
+def gather_upload_to_campusnet(report, output_dir=None):
+    n = report.nL
+    args = parser.parse_args()
+    results, table_data = evaluate_report(report, show_help_flag=False, show_expected=False, show_computed=False, silent=True,
+                                          show_progress_bar=not args.noprogress,
+                                          big_header=not args.autolab)
+    # print(" ")
+    # print("="*n)
+    # print("Final evaluation")
+    # print(tabulate(table_data))
+    # also load the source code of missing files...
+
+    sources = {}
+    print("")
+    if not args.autolab:
+        if len(report.individual_imports) > 0:
+            print("By uploading the .token file, you verify the files:")
+            for m in report.individual_imports:
+                print(">", m.__file__)
+            print("Are created/modified individually by you in agreement with DTUs exam rules")
+            report.pack_imports += report.individual_imports
+
+        if len(report.pack_imports) > 0:
+            print("Including files in upload...")
+            for k, m in enumerate(report.pack_imports):
+                nimp, top_package = gather_imports(m)
+                _, report_relative_location, module_import = report._import_base_relative()
+
+                # report_relative_location = os.path.relpath(inspect.getfile(report.__class__), top_package)
+                nimp['report_relative_location'] = report_relative_location
+                nimp['report_module_specification'] = module_import
+                nimp['name'] = m.__name__
+                sources[k] = nimp
+                # if len([k for k in nimp if k not in sources]) > 0:
+                print(f" * {m.__name__}")
+                # sources = {**sources, **nimp}
+    results['sources'] = sources
+
+    if output_dir is None:
+        output_dir = os.getcwd()
+
+    payload_out_base = report.__class__.__name__ + "_handin"
+
+    obtain, possible = results['total']
+    vstring = "_v"+report.version if report.version is not None else ""
+
+    token = "%s_%i_of_%i%s.token"%(payload_out_base, obtain, possible,vstring)
+    token = os.path.normpath(os.path.join(output_dir, token))
+
+
+    with open(token, 'wb') as f:
+        pickle.dump(results, f)
+
+    if not args.autolab:
+        print(" ")
+        print("To get credit for your results, please upload the single unmodified file: ")
+        print(">", token)
+        # print("To campusnet without any modifications.")
+
+        # print("Now time for some autolab fun")
+
+def source_instantiate(name, report1_source, payload):
+    eval("exec")(report1_source, globals())
+    pl = pickle.loads(bytes.fromhex(payload))
+    report = eval(name)(payload=pl, strict=True)
+    # report.set_payload(pl)
+    return report
+
+
+
+report1_source = '\n# import os\n# import lzma\n# import pickle\n\n# DONT\'t import stuff here since install script requires __version__\n\n# def cache_write(object, file_name, verbose=True):\n#     # raise Exception("bad")\n#     # import compress_pickle\n#     dn = os.path.dirname(file_name)\n#     if not os.path.exists(dn):\n#         os.mkdir(dn)\n#     if verbose: print("Writing cache...", file_name)\n#     with lzma.open(file_name, \'wb\', ) as f:\n#         pickle.dump(object, f)\n#     if verbose: print("Done!")\n#\n#\n# def cache_exists(file_name):\n#     # file_name = cn_(file_name) if cache_prefix else file_name\n#     return os.path.exists(file_name)\n#\n#\n# def cache_read(file_name):\n#     # import compress_pickle # Import here because if you import in top the __version__ tag will fail.\n#     # file_name = cn_(file_name) if cache_prefix else file_name\n#     if os.path.exists(file_name):\n#         try:\n#             with lzma.open(file_name, \'rb\') as f:\n#                 return pickle.load(f)\n#         except Exception as e:\n#             print("Tried to load a bad pickle file at", file_name)\n#             print("If the file appears to be automatically generated, you can try to delete it, otherwise download a new version")\n#             print(e)\n#             # return pickle.load(f)\n#     else:\n#         return None\n\n\n\n"""\ngit add . && git commit -m "Options" && git push &&  pip install git+ssh://git@gitlab.compute.dtu.dk/tuhe/unitgrade.git --upgrade\n"""\nimport numpy as np\nimport sys\nimport re\nimport threading\nimport tqdm\nimport pickle\nimport os\nfrom io import StringIO\nimport io\nfrom unittest.runner import _WritelnDecorator\nfrom typing import Any\nimport inspect\nimport textwrap\nimport colorama\nfrom colorama import Fore\nfrom functools import _make_key, RLock\nfrom collections import namedtuple\nimport unittest\nimport time\n\n_CacheInfo = namedtuple("CacheInfo", ["hits", "misses", "maxsize", "currsize"])\n\ncolorama.init(autoreset=True)  # auto resets your settings after every output\n\ndef gprint(s):\n    print(f"{Fore.GREEN}{s}")\n\nmyround = lambda x: np.round(x)  # required.\nmsum = lambda x: sum(x)\nmfloor = lambda x: np.floor(x)\n\n\ndef setup_dir_by_class(C, base_dir):\n    name = C.__class__.__name__\n    return base_dir, name\n\n\nclass Logger(object):\n    def __init__(self, buffer):\n        assert False\n        self.terminal = sys.stdout\n        self.log = buffer\n\n    def write(self, message):\n        self.terminal.write(message)\n        self.log.write(message)\n\n    def flush(self):\n        # this flush method is needed for python 3 compatibility.\n        pass\n\n\nclass Capturing(list):\n    def __init__(self, *args, stdout=None, unmute=False, **kwargs):\n        self._stdout = stdout\n        self.unmute = unmute\n        super().__init__(*args, **kwargs)\n\n    def __enter__(self, capture_errors=True):  # don\'t put arguments here.\n        self._stdout = sys.stdout if self._stdout == None else self._stdout\n        self._stringio = StringIO()\n        if self.unmute:\n            sys.stdout = Logger(self._stringio)\n        else:\n            sys.stdout = self._stringio\n\n        if capture_errors:\n            self._sterr = sys.stderr\n            sys.sterr = StringIO()  # memory hole it\n        self.capture_errors = capture_errors\n        return self\n\n    def __exit__(self, *args):\n        self.extend(self._stringio.getvalue().splitlines())\n        del self._stringio  # free up some memory\n        sys.stdout = self._stdout\n        if self.capture_errors:\n            sys.sterr = self._sterr\n\n\nclass Capturing2(Capturing):\n    def __exit__(self, *args):\n        lines = self._stringio.getvalue().splitlines()\n        txt = "\\n".join(lines)\n        numbers = extract_numbers(txt)\n        self.extend(lines)\n        del self._stringio  # free up some memory\n        sys.stdout = self._stdout\n        if self.capture_errors:\n            sys.sterr = self._sterr\n\n        self.output = txt\n        self.numbers = numbers\n\n\n# @classmethod\n# class OrderedClassMembers(type):\n#     def __prepare__(self, name, bases):\n#         assert False\n#         return collections.OrderedDict()\n#\n#     def __new__(self, name, bases, classdict):\n#         ks = list(classdict.keys())\n#         for b in bases:\n#             ks += b.__ordered__\n#         classdict[\'__ordered__\'] = [key for key in ks if key not in (\'__module__\', \'__qualname__\')]\n#         return type.__new__(self, name, bases, classdict)\n\n\nclass Report:\n    title = "report title"\n    version = None\n    questions = []\n    pack_imports = []\n    individual_imports = []\n    nL = 120  # Maximum line width\n\n    @classmethod\n    def reset(cls):\n        for (q, _) in cls.questions:\n            if hasattr(q, \'reset\'):\n                q.reset()\n\n    @classmethod\n    def mfile(clc):\n        return inspect.getfile(clc)\n\n    def _file(self):\n        return inspect.getfile(type(self))\n\n    def _import_base_relative(self):\n        if hasattr(self.pack_imports[0], \'__path__\'):\n            root_dir = self.pack_imports[0].__path__._path[0]\n        else:\n            root_dir = self.pack_imports[0].__file__\n\n        root_dir = os.path.dirname(root_dir)\n        relative_path = os.path.relpath(self._file(), root_dir)\n        modules = os.path.normpath(relative_path[:-3]).split(os.sep)\n        return root_dir, relative_path, modules\n\n    def __init__(self, strict=False, payload=None):\n        working_directory = os.path.abspath(os.path.dirname(self._file()))\n        self.wdir, self.name = setup_dir_by_class(self, working_directory)\n        # self.computed_answers_file = os.path.join(self.wdir, self.name + "_resources_do_not_hand_in.dat")\n        for (q, _) in self.questions:\n            q.nL = self.nL  # Set maximum line length.\n\n        if payload is not None:\n            self.set_payload(payload, strict=strict)\n\n    def main(self, verbosity=1):\n        # Run all tests using standard unittest (nothing fancy).\n        loader = unittest.TestLoader()\n        for q, _ in self.questions:\n            start = time.time()  # A good proxy for setup time is to\n            suite = loader.loadTestsFromTestCase(q)\n            unittest.TextTestRunner(verbosity=verbosity).run(suite)\n            total = time.time() - start\n            q.time = total\n\n    def _setup_answers(self, with_coverage=False):\n        if with_coverage:\n            for q, _ in self.questions:\n                q._with_coverage = True\n                q._report = self\n\n        self.main()  # Run all tests in class just to get that out of the way...\n        report_cache = {}\n        for q, _ in self.questions:\n            # print(self.questions)\n            if hasattr(q, \'_save_cache\'):\n                q()._save_cache()\n                print("q is", q())\n                q()._cache_put(\'time\', q.time) # = q.time\n                report_cache[q.__qualname__] = q._cache2\n            else:\n                report_cache[q.__qualname__] = {\'no cache see _setup_answers in unitgrade2.py\': True}\n        if with_coverage:\n            for q, _ in self.questions:\n                q._with_coverage = False\n        return report_cache\n\n    def set_payload(self, payloads, strict=False):\n        for q, _ in self.questions:\n            q._cache = payloads[q.__qualname__]\n\n\ndef rm_progress_bar(txt):\n    # More robust version. Apparently length of bar can depend on various factors, so check for order of symbols.\n    nlines = []\n    for l in txt.splitlines():\n        pct = l.find("%")\n        ql = False\n        if pct > 0:\n            i = l.find("|", pct + 1)\n            if i > 0 and l.find("|", i + 1) > 0:\n                ql = True\n        if not ql:\n            nlines.append(l)\n    return "\\n".join(nlines)\n\n\ndef extract_numbers(txt):\n    # txt = rm_progress_bar(txt)\n    numeric_const_pattern = r\'[-+]? (?: (?: \\d* \\. \\d+ ) | (?: \\d+ \\.? ) )(?: [Ee] [+-]? \\d+ ) ?\'\n    rx = re.compile(numeric_const_pattern, re.VERBOSE)\n    all = rx.findall(txt)\n    all = [float(a) if (\'.\' in a or "e" in a) else int(a) for a in all]\n    if len(all) > 500:\n        print(txt)\n        raise Exception("unitgrade.unitgrade.py: Warning, too many numbers!", len(all))\n    return all\n\n\nclass ActiveProgress():\n    def __init__(self, t, start=True, title="my progress bar", show_progress_bar=True, file=None):\n        if file == None:\n            file = sys.stdout\n        self.file = file\n        self.t = t\n        self._running = False\n        self.title = title\n        self.dt = 0.01\n        self.n = int(np.round(self.t / self.dt))\n        self.show_progress_bar = show_progress_bar\n        self.pbar = None\n\n        if start:\n            self.start()\n\n    def start(self):\n        self._running = True\n        if self.show_progress_bar:\n            self.thread = threading.Thread(target=self.run)\n            self.thread.start()\n        self.time_started = time.time()\n\n    def terminate(self):\n        if not self._running:\n            raise Exception("Stopping a stopped progress bar. ")\n        self._running = False\n        if self.show_progress_bar:\n            self.thread.join()\n        if self.pbar is not None:\n            self.pbar.update(1)\n            self.pbar.close()\n            self.pbar = None\n\n        self.file.flush()\n        return time.time() - self.time_started\n\n    def run(self):\n        self.pbar = tqdm.tqdm(total=self.n, file=self.file, position=0, leave=False, desc=self.title, ncols=100,\n                              bar_format=\'{l_bar}{bar}| [{elapsed}<{remaining}]\')\n\n        for _ in range(self.n - 1):  # Don\'t terminate completely; leave bar at 99% done until terminate.\n            if not self._running:\n                self.pbar.close()\n                self.pbar = None\n                break\n\n            time.sleep(self.dt)\n            self.pbar.update(1)\n\ndef dprint(first, last, nL, extra = "", file=None, dotsym=\'.\', color=\'white\'):\n    if file == None:\n        file = sys.stdout\n\n    # ss = self.item_title_print\n    # state = "PASS" if success else "FAILED"\n    dot_parts = (dotsym * max(0, nL - len(last) - len(first)))\n    # if self.show_progress_bar or True:\n    print(first + dot_parts, end="", file=file)\n    # else:\n    # print(dot_parts, end="", file=self.cc.file)\n    last += extra\n    # if tsecs >= 0.5:\n    #     state += " (" + str(tsecs) + " seconds)"\n    print(last, file=file)\n\n\nclass UTextResult(unittest.TextTestResult):\n    nL = 80\n    number = -1  # HAcky way to set question number.\n    show_progress_bar = True\n    cc = None\n\n    def __init__(self, stream, descriptions, verbosity):\n        super().__init__(stream, descriptions, verbosity)\n        self.successes = []\n\n    def printErrors(self) -> None:\n        self.printErrorList(\'ERROR\', self.errors)\n        self.printErrorList(\'FAIL\', self.failures)\n\n    def addError(self, test, err):\n        super(unittest.TextTestResult, self).addFailure(test, err)\n        self.cc_terminate(success=False)\n\n    def addFailure(self, test, err):\n        super(unittest.TextTestResult, self).addFailure(test, err)\n        self.cc_terminate(success=False)\n\n    def addSuccess(self, test: unittest.case.TestCase) -> None:\n        self.successes.append(test)\n        self.cc_terminate()\n\n    def cc_terminate(self, success=True):\n        if self.show_progress_bar or True:\n            tsecs = np.round(self.cc.terminate(), 2)\n            self.cc.file.flush()\n            ss = self.item_title_print\n\n            state = "PASS" if success else "FAILED"\n\n            dot_parts = (\'.\' * max(0, self.nL - len(state) - len(ss)))\n            if self.show_progress_bar or True:\n                print(self.item_title_print + dot_parts, end="", file=self.cc.file)\n            else:\n                print(dot_parts, end="", file=self.cc.file)\n\n            if tsecs >= 0.5:\n                state += " (" + str(tsecs) + " seconds)"\n            print(state, file=self.cc.file)\n\n    def startTest(self, test):\n        # j =self.testsRun\n        self.testsRun += 1\n        # item_title = self.getDescription(test)\n        item_title = test.shortDescription()  # Better for printing (get from cache).\n        if item_title == None:\n            # For unittest framework where getDescription may return None.\n            item_title = self.getDescription(test)\n        self.item_title_print = " * q%i.%i) %s" % (UTextResult.number + 1, self.testsRun, item_title)\n        estimated_time = 10\n        if self.show_progress_bar or True:\n            self.cc = ActiveProgress(t=estimated_time, title=self.item_title_print, show_progress_bar=self.show_progress_bar, file=sys.stdout)\n        else:\n            print(self.item_title_print + (\'.\' * max(0, self.nL - 4 - len(self.item_title_print))), end="")\n\n        self._test = test\n        self._stdout = sys.stdout\n        sys.stdout = io.StringIO()\n\n    def stopTest(self, test):\n        sys.stdout = self._stdout\n        super().stopTest(test)\n\n    def _setupStdout(self):\n        if self._previousTestClass == None:\n            total_estimated_time = 1\n            if hasattr(self.__class__, \'q_title_print\'):\n                q_title_print = self.__class__.q_title_print\n            else:\n                q_title_print = "<unnamed test. See unitgrade.py>"\n\n            cc = ActiveProgress(t=total_estimated_time, title=q_title_print, show_progress_bar=self.show_progress_bar)\n            self.cc = cc\n\n    def _restoreStdout(self):  # Used when setting up the test.\n        if self._previousTestClass is None:\n            q_time = self.cc.terminate()\n            q_time = np.round(q_time, 2)\n            sys.stdout.flush()\n            if self.show_progress_bar:\n                print(self.cc.title, end="")\n            print(" " * max(0, self.nL - len(self.cc.title)) + (" (" + str(q_time) + " seconds)" if q_time >= 0.5 else ""))\n\n\nclass UTextTestRunner(unittest.TextTestRunner):\n    def __init__(self, *args, **kwargs):\n        stream = io.StringIO()\n        super().__init__(*args, stream=stream, **kwargs)\n\n    def _makeResult(self):\n        # stream = self.stream # not you!\n        stream = sys.stdout\n        stream = _WritelnDecorator(stream)\n        return self.resultclass(stream, self.descriptions, self.verbosity)\n\n\ndef cache(foo, typed=False):\n    """ Magic cache wrapper\n    https://github.com/python/cpython/blob/main/Lib/functools.py\n    """\n    maxsize = None\n    def wrapper(self, *args, **kwargs):\n        key = (self.cache_id(), ("@cache", foo.__name__, _make_key(args, kwargs, typed)))\n        if not self._cache_contains(key):\n            value = foo(self, *args, **kwargs)\n            self._cache_put(key, value)\n        else:\n            value = self._cache_get(key)\n        return value\n\n    return wrapper\n\n\ndef get_hints(ss):\n    if ss == None:\n        return None\n    try:\n        ss = textwrap.dedent(ss)\n        ss = ss.replace(\'\'\'"""\'\'\', "").strip()\n        hints = ["hints:", ]\n        j = np.argmax([ss.lower().find(h) for h in hints])\n        h = hints[j]\n        ss = ss[ss.find(h) + len(h) + 1:]\n        ss = "\\n".join([l for l in ss.split("\\n") if not l.strip().startswith(":")])\n        ss = textwrap.dedent(ss)\n        ss = ss.strip()\n        return ss\n    except Exception as e:\n        print("bad hints", ss, e)\n\n\nclass UTestCase(unittest.TestCase):\n    _outcome = None  # A dictionary which stores the user-computed outcomes of all the tests. This differs from the cache.\n    _cache = None  # Read-only cache. Ensures method always produce same result.\n    _cache2 = None  # User-written cache.\n    _with_coverage = False\n    _report = None  # The report used. This is very, very hacky and should always be None. Don\'t rely on it!\n\n    def capture(self):\n        if hasattr(self, \'_stdout\') and self._stdout is not None:\n            file = self._stdout\n        else:\n            # self._stdout = sys.stdout\n            # sys._stdout = io.StringIO()\n            file = sys.stdout\n        return Capturing2(stdout=file)\n\n    @classmethod\n    def question_title(cls):\n        """ Return the question title """\n        return cls.__doc__.strip().splitlines()[0].strip() if cls.__doc__ is not None else cls.__qualname__\n\n    @classmethod\n    def reset(cls):\n        print("Warning, I am not sure UTestCase.reset() is needed anymore and it seems very hacky.")\n        cls._outcome = None\n        cls._cache = None\n        cls._cache2 = None\n\n    def _callSetUp(self):\n        if self._with_coverage:\n            if not hasattr(self._report, \'covcache\'):\n                self._report.covcache = {}\n            import coverage\n            self.cov = coverage.Coverage()\n            self.cov.start()\n        self.setUp()\n\n    def _callTearDown(self):\n        self.tearDown()\n        if self._with_coverage:\n            from pathlib import Path\n            from snipper import snipper_main\n            self.cov.stop()\n            data = self.cov.get_data()\n            base, _, _ = self._report._import_base_relative()\n            for file in data.measured_files():\n                file = os.path.normpath(file)\n                root = Path(base)\n                child = Path(file)\n                if root in child.parents:\n                    with open(child, \'r\') as f:\n                        s = f.read()\n                    lines = s.splitlines()\n                    garb = \'GARBAGE\'\n\n                    lines2 = snipper_main.censor_code(lines, keep=True)\n                    assert len(lines) == len(lines2)\n\n                    for l in data.contexts_by_lineno(file):\n                        if lines2[l].strip() == garb:\n                            if self.cache_id() not in self._report.covcache:\n                                self._report.covcache[self.cache_id()] = {}\n\n                            rel = os.path.relpath(child, root)\n                            cc = self._report.covcache[self.cache_id()]\n                            j = 0\n                            for j in range(l, -1, -1):\n                                if "def" in lines2[j] or "class" in lines2[j]:\n                                    break\n                            from snipper.legacy import gcoms\n                            fun = lines2[j]\n                            comments, _ = gcoms("\\n".join(lines2[j:l]))\n                            if rel not in cc:\n                                cc[rel] = {}\n                            cc[rel][fun] = (l, "\\n".join(comments))\n                            self._cache_put((self.cache_id(), \'coverage\'), self._report.covcache)\n\n    def shortDescriptionStandard(self):\n        sd = super().shortDescription()\n        if sd is None:\n            sd = self._testMethodName\n        return sd\n\n    def shortDescription(self):\n        sd = self.shortDescriptionStandard()\n        title = self._cache_get((self.cache_id(), \'title\'), sd)\n        return title if title is not None else sd\n\n    @property\n    def title(self):\n        return self.shortDescription()\n\n    @title.setter\n    def title(self, value):\n        self._cache_put((self.cache_id(), \'title\'), value)\n\n    def _get_outcome(self):\n        if not (self.__class__, \'_outcome\') or self.__class__._outcome is None:\n            self.__class__._outcome = {}\n        return self.__class__._outcome\n\n    def _callTestMethod(self, testMethod):\n        t = time.time()\n        self._ensure_cache_exists()  # Make sure cache is there.\n        if self._testMethodDoc is not None:\n            self._cache_put((self.cache_id(), \'title\'), self.shortDescriptionStandard())\n\n        self._cache2[(self.cache_id(), \'assert\')] = {}\n        res = testMethod()\n        elapsed = time.time() - t\n        self._get_outcome()[self.cache_id()] = res\n        self._cache_put((self.cache_id(), "time"), elapsed)\n\n    def cache_id(self):\n        c = self.__class__.__qualname__\n        m = self._testMethodName\n        return c, m\n\n    def __init__(self, *args, **kwargs):\n        super().__init__(*args, **kwargs)\n        self._load_cache()\n        self._assert_cache_index = 0\n\n    def _ensure_cache_exists(self):\n        if not hasattr(self.__class__, \'_cache\') or self.__class__._cache == None:\n            self.__class__._cache = dict()\n        if not hasattr(self.__class__, \'_cache2\') or self.__class__._cache2 == None:\n            self.__class__._cache2 = dict()\n\n    def _cache_get(self, key, default=None):\n        self._ensure_cache_exists()\n        return self.__class__._cache.get(key, default)\n\n    def _cache_put(self, key, value):\n        self._ensure_cache_exists()\n        self.__class__._cache2[key] = value\n\n    def _cache_contains(self, key):\n        self._ensure_cache_exists()\n        return key in self.__class__._cache\n\n    def wrap_assert(self, assert_fun, first, *args, **kwargs):\n        # sys.stdout = self._stdout\n        key = (self.cache_id(), \'assert\')\n        if not self._cache_contains(key):\n            print("Warning, framework missing", key)\n            self.__class__._cache[\n                key] = {}  # A new dict. We manually insert it because we have to use that the dict is mutable.\n        cache = self._cache_get(key)\n        id = self._assert_cache_index\n        if not id in cache:\n            print("Warning, framework missing cache index", key, "id =", id)\n        _expected = cache.get(id, f"Key {id} not found in cache; framework files missing. Please run deploy()")\n\n        # The order of these calls is important. If the method assert fails, we should still store the correct result in cache.\n        cache[id] = first\n        self._cache_put(key, cache)\n        self._assert_cache_index += 1\n        assert_fun(first, _expected, *args, **kwargs)\n\n    def assertEqualC(self, first: Any, msg: Any = ...) -> None:\n        self.wrap_assert(self.assertEqual, first, msg)\n\n    def _cache_file(self):\n        # The filename-directory stuff is a bit tricky but this seems robust.\n        return os.path.dirname(inspect.getabsfile(type(self))) + "/unitgrade/" + self.__class__.__name__ + ".pkl"\n\n    def _save_cache(self):\n        # get the class name (i.e. what to save to).\n        cfile = self._cache_file()\n        if not os.path.isdir(os.path.dirname(cfile)):\n            os.makedirs(os.path.dirname(cfile))\n\n        if hasattr(self.__class__, \'_cache2\'):\n            with open(cfile, \'wb\') as f:\n                pickle.dump(self.__class__._cache2, f)\n\n    # But you can also set cache explicitly.\n    def _load_cache(self):\n        if self._cache is not None:  # Cache already loaded. We will not load it twice.\n            return\n            # raise Exception("Loaded cache which was already set. What is going on?!")\n        cfile = self._cache_file()\n        if os.path.exists(cfile):\n            try:\n                # print("\\ncache file", cfile)\n                with open(cfile, \'rb\') as f:\n                    data = pickle.load(f)\n                self.__class__._cache = data\n            except Exception as e:\n                print("Bad cache", cfile)\n                print(e)\n        else:\n            print("Warning! data file not found", cfile)\n\n    def _feedErrorsToResult(self, result, errors):\n        """ Use this to show hints on test failure. """\n        if not isinstance(result, UTextResult):\n            er = [e for e, v in errors if v != None]\n            import textwrap\n            if len(er) > 0:\n                hints = []\n                key = (self.cache_id(), \'coverage\')\n                if self._cache_contains(key):\n                    CC = self._cache_get(key)\n                    for id in CC:\n                        if id == self.cache_id():\n                            cl, m = id\n                            gprint(f"> An error occured while solving: {cl}.{m}. The files/methods you need to edit are:")  # For the test {id} in {file} you should edit:")\n                            for file in CC[id]:\n                                rec = CC[id][file]\n                                gprint(f">   * {file}")\n                                for l in rec:\n                                    _, comments = CC[id][file][l]\n                                    hint = get_hints(comments)\n\n                                    if hint != None:\n                                        # hint = textwrap.dedent(hint)\n                                        hints.append(hint)\n                                    gprint(f">      - {l}")\n\n                er = er[0]\n                doc = er._testMethodDoc\n                if doc is not None:\n                    hint = get_hints(er._testMethodDoc)\n                    if hint is not None:\n                        hints = [hint] + hints\n                if len(hints) > 0:\n                    gprint("> Hints:")\n                    gprint(textwrap.indent("\\n".join(hints), ">   "))\n\n        super()._feedErrorsToResult(result, errors)\n\n    def startTestRun(self):\n        # print("asdfsdaf 11", file=sys.stderr)\n        super().startTestRun()\n        # print("asdfsdaf")\n\n    def _callTestMethod(self, method):\n        # print("asdfsdaf")\n        super()._callTestMethod(method)\n\n\ndef hide(func):\n    return func\n\n\ndef makeRegisteringDecorator(foreignDecorator):\n    """\n        Returns a copy of foreignDecorator, which is identical in every\n        way(*), except also appends a .decorator property to the callable it\n        spits out.\n    """\n\n    def newDecorator(func):\n        # Call to newDecorator(method)\n        # Exactly like old decorator, but output keeps track of what decorated it\n        R = foreignDecorator(func)  # apply foreignDecorator, like call to foreignDecorator(method) would have done\n        R.decorator = newDecorator  # keep track of decorator\n        # R.original = func         # might as well keep track of everything!\n        return R\n\n    newDecorator.__name__ = foreignDecorator.__name__\n    newDecorator.__doc__ = foreignDecorator.__doc__\n    return newDecorator\n\nhide = makeRegisteringDecorator(hide)\n\ndef methodsWithDecorator(cls, decorator):\n    """\n        Returns all methods in CLS with DECORATOR as the\n        outermost decorator.\n\n        DECORATOR must be a "registering decorator"; one\n        can make any decorator "registering" via the\n        makeRegisteringDecorator function.\n\n        import inspect\n        ls = list(methodsWithDecorator(GeneratorQuestion, deco))\n        for f in ls:\n            print(inspect.getsourcelines(f) ) # How to get all hidden questions.\n    """\n    for maybeDecorated in cls.__dict__.values():\n        if hasattr(maybeDecorated, \'decorator\'):\n            if maybeDecorated.decorator == decorator:\n                print(maybeDecorated)\n                yield maybeDecorated\n# 817\n\n\nimport numpy as np\nfrom tabulate import tabulate\nfrom datetime import datetime\nimport pyfiglet\nimport unittest\nimport inspect\nimport os\nimport argparse\nimport time\n\nparser = argparse.ArgumentParser(description=\'Evaluate your report.\', epilog="""Example: \nTo run all tests in a report: \n\n> python assignment1_dp.py\n\nTo run only question 2 or question 2.1\n\n> python assignment1_dp.py -q 2\n> python assignment1_dp.py -q 2.1\n\nNote this scripts does not grade your report. To grade your report, use:\n\n> python report1_grade.py\n\nFinally, note that if your report is part of a module (package), and the report script requires part of that package, the -m option for python may be useful.\nFor instance, if the report file is in Documents/course_package/report3_complete.py, and `course_package` is a python package, then change directory to \'Documents/` and run:\n\n> python -m course_package.report1\n\nsee https://docs.python.org/3.9/using/cmdline.html\n""", formatter_class=argparse.RawTextHelpFormatter)\nparser.add_argument(\'-q\', nargs=\'?\', type=str, default=None, help=\'Only evaluate this question (e.g.: -q 2)\')\nparser.add_argument(\'--showexpected\',  action="store_true",  help=\'Show the expected/desired result\')\nparser.add_argument(\'--showcomputed\',  action="store_true",  help=\'Show the answer your code computes\')\nparser.add_argument(\'--unmute\',  action="store_true",  help=\'Show result of print(...) commands in code\')\nparser.add_argument(\'--passall\',  action="store_true",  help=\'Automatically pass all tests. Useful when debugging.\')\nparser.add_argument(\'--noprogress\',  action="store_true",  help=\'Disable progress bars.\')\n\ndef evaluate_report_student(report, question=None, qitem=None, unmute=None, passall=None, ignore_missing_file=False, show_tol_err=False):\n    args = parser.parse_args()\n    if question is None and args.q is not None:\n        question = args.q\n        if "." in question:\n            question, qitem = [int(v) for v in question.split(".")]\n        else:\n            question = int(question)\n\n    if hasattr(report, "computed_answer_file") and not os.path.isfile(report.computed_answers_file) and not ignore_missing_file:\n        raise Exception("> Error: The pre-computed answer file", os.path.abspath(report.computed_answers_file), "does not exist. Check your package installation")\n\n    if unmute is None:\n        unmute = args.unmute\n    if passall is None:\n        passall = args.passall\n\n\n    results, table_data = evaluate_report(report, question=question, show_progress_bar=not unmute and not args.noprogress, qitem=qitem, verbose=False, passall=passall, show_expected=args.showexpected, show_computed=args.showcomputed,unmute=unmute,\n                                          show_tol_err=show_tol_err)\n\n\n    if question is None:\n        print("Provisional evaluation")\n        tabulate(table_data)\n        table = table_data\n        print(tabulate(table))\n        print(" ")\n\n    fr = inspect.getouterframes(inspect.currentframe())[1].filename\n    gfile = os.path.basename(fr)[:-3] + "_grade.py"\n    if os.path.exists(gfile):\n        print("Note your results have not yet been registered. \\nTo register your results, please run the file:")\n        print(">>>", gfile)\n        print("In the same manner as you ran this file.")\n\n\n    return results\n\n\ndef upack(q):\n    # h = zip([(i[\'w\'], i[\'possible\'], i[\'obtained\']) for i in q.values()])\n    h =[(i[\'w\'], i[\'possible\'], i[\'obtained\']) for i in q.values()]\n    h = np.asarray(h)\n    return h[:,0], h[:,1], h[:,2],\n\nclass UnitgradeTextRunner(unittest.TextTestRunner):\n    def __init__(self, *args, **kwargs):\n        super().__init__(*args, **kwargs)\n\nclass SequentialTestLoader(unittest.TestLoader):\n    def getTestCaseNames(self, testCaseClass):\n        test_names = super().getTestCaseNames(testCaseClass)\n        # testcase_methods = list(testCaseClass.__dict__.keys())\n        ls = []\n        for C in testCaseClass.mro():\n            if issubclass(C, unittest.TestCase):\n                ls = list(C.__dict__.keys()) + ls\n        testcase_methods = ls\n        test_names.sort(key=testcase_methods.index)\n        return test_names\n\ndef evaluate_report(report, question=None, qitem=None, passall=False, verbose=False,  show_expected=False, show_computed=False,unmute=False, show_help_flag=True, silent=False,\n                    show_progress_bar=True,\n                    show_tol_err=False,\n                    big_header=True):\n\n    from src.unitgrade2.version import __version__\n    now = datetime.now()\n    if big_header:\n        ascii_banner = pyfiglet.figlet_format("UnitGrade", font="doom")\n        b = "\\n".join( [l for l in ascii_banner.splitlines() if len(l.strip()) > 0] )\n    else:\n        b = "Unitgrade"\n    dt_string = now.strftime("%d/%m/%Y %H:%M:%S")\n    print(b + " v" + __version__ + ", started: " + dt_string+ "\\n")\n    # print("Started: " + dt_string)\n    s = report.title\n    if hasattr(report, "version") and report.version is not None:\n        s += " version " + report.version\n    print(s, "(use --help for options)" if show_help_flag else "")\n    # print(f"Loaded answers from: ", report.computed_answers_file, "\\n")\n    table_data = []\n    t_start = time.time()\n    score = {}\n    loader = SequentialTestLoader()\n\n    for n, (q, w) in enumerate(report.questions):\n        if question is not None and n+1 != question:\n            continue\n        suite = loader.loadTestsFromTestCase(q)\n        qtitle = q.question_title() if hasattr(q, \'question_title\') else q.__qualname__\n        q_title_print = "Question %i: %s"%(n+1, qtitle)\n        print(q_title_print, end="")\n        q.possible = 0\n        q.obtained = 0\n        q_ = {} # Gather score in this class.\n        from src.unitgrade2.unitgrade2 import UTextTestRunner\n        UTextResult.q_title_print = q_title_print # Hacky\n        UTextResult.show_progress_bar = show_progress_bar # Hacky.\n        UTextResult.number = n\n        UTextResult.nL = report.nL\n\n        res = UTextTestRunner(verbosity=2, resultclass=UTextResult).run(suite)\n\n        possible = res.testsRun\n        obtained = len(res.successes)\n\n        assert len(res.successes) +  len(res.errors) + len(res.failures) == res.testsRun\n\n        obtained = int(w * obtained * 1.0 / possible ) if possible > 0 else 0\n        score[n] = {\'w\': w, \'possible\': w, \'obtained\': obtained, \'items\': q_, \'title\': qtitle}\n        q.obtained = obtained\n        q.possible = possible\n\n        s1 = f" * q{n+1})   Total"\n        s2 = f" {q.obtained}/{w}"\n        print(s1 + ("."* (report.nL-len(s1)-len(s2) )) + s2 )\n        print(" ")\n        table_data.append([f"q{n+1}) Total", f"{q.obtained}/{w}"])\n\n    ws, possible, obtained = upack(score)\n    possible = int( msum(possible) )\n    obtained = int( msum(obtained) ) # Cast to python int\n    report.possible = possible\n    report.obtained = obtained\n    now = datetime.now()\n    dt_string = now.strftime("%H:%M:%S")\n\n    dt = int(time.time()-t_start)\n    minutes = dt//60\n    seconds = dt - minutes*60\n    plrl = lambda i, s: str(i) + " " + s + ("s" if i != 1 else "")\n\n    from src.unitgrade2.unitgrade2 import dprint\n    dprint(first = "Total points at "+ dt_string + " (" + plrl(minutes, "minute") + ", "+ plrl(seconds, "second") +")",\n           last=""+str(report.obtained)+"/"+str(report.possible), nL = report.nL)\n\n    # print(f"Completed at "+ dt_string + " (" + plrl(minutes, "minute") + ", "+ plrl(seconds, "second") +"). Total")\n\n    table_data.append(["Total", ""+str(report.obtained)+"/"+str(report.possible) ])\n    results = {\'total\': (obtained, possible), \'details\': score}\n    return results, table_data\n\n\nimport bz2\nimport pickle\nimport os\n\n\ndef bzwrite(json_str, token): # to get around obfuscation issues\n    with getattr(bz2, \'open\')(token, "wt") as f:\n        f.write(json_str)\n\ndef gather_imports(imp):\n    resources = {}\n    m = imp\n    # for m in pack_imports:\n    # print(f"*** {m.__name__}")\n    f = m.__file__\n    # dn = os.path.dirname(f)\n    # top_package = os.path.dirname(__import__(m.__name__.split(\'.\')[0]).__file__)\n    # top_package = str(__import__(m.__name__.split(\'.\')[0]).__path__)\n\n    if hasattr(m, \'__file__\') and not hasattr(m, \'__path__\'):  # Importing a simple file: m.__class__.__name__ == \'module\' and False:\n        top_package = os.path.dirname(m.__file__)\n        module_import = True\n    else:\n        top_package = __import__(m.__name__.split(\'.\')[0]).__path__._path[0]\n        module_import = False\n\n    # top_package = os.path.dirname(__import__(m.__name__.split(\'.\')[0]).__file__)\n    # top_package = os.path.dirname(top_package)\n    import zipfile\n    # import strea\n    # zipfile.ZipFile\n    import io\n    # file_like_object = io.BytesIO(my_zip_data)\n    zip_buffer = io.BytesIO()\n    with zipfile.ZipFile(zip_buffer, \'w\') as zip:\n        # zip.write()\n        for root, dirs, files in os.walk(top_package):\n            for file in files:\n                if file.endswith(".py"):\n                    fpath = os.path.join(root, file)\n                    v = os.path.relpath(os.path.join(root, file), os.path.dirname(top_package) if not module_import else top_package)\n                    zip.write(fpath, v)\n\n    resources[\'zipfile\'] = zip_buffer.getvalue()\n    resources[\'top_package\'] = top_package\n    resources[\'module_import\'] = module_import\n    return resources, top_package\n\n    if f.endswith("__init__.py"):\n        for root, dirs, files in os.walk(os.path.dirname(f)):\n            for file in files:\n                if file.endswith(".py"):\n                    # print(file)\n                    # print()\n                    v = os.path.relpath(os.path.join(root, file), top_package)\n                    with open(os.path.join(root, file), \'r\') as ff:\n                        resources[v] = ff.read()\n    else:\n        v = os.path.relpath(f, top_package)\n        with open(f, \'r\') as ff:\n            resources[v] = ff.read()\n    return resources\n\nimport argparse\nparser = argparse.ArgumentParser(description=\'Evaluate your report.\', epilog="""Use this script to get the score of your report. Example:\n\n> python report1_grade.py\n\nFinally, note that if your report is part of a module (package), and the report script requires part of that package, the -m option for python may be useful.\nFor instance, if the report file is in Documents/course_package/report3_complete.py, and `course_package` is a python package, then change directory to \'Documents/` and run:\n\n> python -m course_package.report1\n\nsee https://docs.python.org/3.9/using/cmdline.html\n""", formatter_class=argparse.RawTextHelpFormatter)\nparser.add_argument(\'--noprogress\',  action="store_true",  help=\'Disable progress bars\')\nparser.add_argument(\'--autolab\',  action="store_true",  help=\'Show Autolab results\')\n\ndef gather_upload_to_campusnet(report, output_dir=None):\n    n = report.nL\n    args = parser.parse_args()\n    results, table_data = evaluate_report(report, show_help_flag=False, show_expected=False, show_computed=False, silent=True,\n                                          show_progress_bar=not args.noprogress,\n                                          big_header=not args.autolab)\n    # print(" ")\n    # print("="*n)\n    # print("Final evaluation")\n    # print(tabulate(table_data))\n    # also load the source code of missing files...\n\n    sources = {}\n    print("")\n    if not args.autolab:\n        if len(report.individual_imports) > 0:\n            print("By uploading the .token file, you verify the files:")\n            for m in report.individual_imports:\n                print(">", m.__file__)\n            print("Are created/modified individually by you in agreement with DTUs exam rules")\n            report.pack_imports += report.individual_imports\n\n        if len(report.pack_imports) > 0:\n            print("Including files in upload...")\n            for k, m in enumerate(report.pack_imports):\n                nimp, top_package = gather_imports(m)\n                _, report_relative_location, module_import = report._import_base_relative()\n\n                # report_relative_location = os.path.relpath(inspect.getfile(report.__class__), top_package)\n                nimp[\'report_relative_location\'] = report_relative_location\n                nimp[\'report_module_specification\'] = module_import\n                nimp[\'name\'] = m.__name__\n                sources[k] = nimp\n                # if len([k for k in nimp if k not in sources]) > 0:\n                print(f" * {m.__name__}")\n                # sources = {**sources, **nimp}\n    results[\'sources\'] = sources\n\n    if output_dir is None:\n        output_dir = os.getcwd()\n\n    payload_out_base = report.__class__.__name__ + "_handin"\n\n    obtain, possible = results[\'total\']\n    vstring = "_v"+report.version if report.version is not None else ""\n\n    token = "%s_%i_of_%i%s.token"%(payload_out_base, obtain, possible,vstring)\n    token = os.path.normpath(os.path.join(output_dir, token))\n\n\n    with open(token, \'wb\') as f:\n        pickle.dump(results, f)\n\n    if not args.autolab:\n        print(" ")\n        print("To get credit for your results, please upload the single unmodified file: ")\n        print(">", token)\n        # print("To campusnet without any modifications.")\n\n        # print("Now time for some autolab fun")\n\ndef source_instantiate(name, report1_source, payload):\n    eval("exec")(report1_source, globals())\n    pl = pickle.loads(bytes.fromhex(payload))\n    report = eval(name)(payload=pl, strict=True)\n    # report.set_payload(pl)\n    return report\n\n\n__version__ = "0.0.3"\n\nfrom homework1 import find_primes\nimport homework1\n\nclass Week1(UTestCase):\n    def test_find_all_primes(self):\n        """\n        Hints:\n            * Insert a breakpoint and check what your function find_primes(4) actually outputs\n        """\n        self.assertEqual(find_primes(4), [2,3])\n\nclass Report1Hints(Report):\n    title = "CS 106 Report 1"\n    questions = [(Week1, 10)]  # Include a single question for 10 credits.\n    pack_imports = [homework1] # Unitgrade will recursively include all .py files from "cs101flat"'
+report1_payload = '80049567020000000000007d948c055765656b31947d942868018c14746573745f66696e645f616c6c5f7072696d65739486948c08636f7665726167659486947d946801680386947d948c0c686f6d65776f726b312e7079947d94288c146465662066696e645f7072696d6573286e293a20944b098cf72222220a2020202052657475726e2061206c697374206f6620616c6c207072696d657320757020746f2028616e6420696e636c7564696e6729206e0a2020202048696e74733a0a20202020202020202a2052656d656d62657220746f2072657475726e2061202a6c6973742a2028616e64206e6f742061207475706c65206f72206e756d7079206e646172726179290a20202020202020202a2052656d656d62657220746f20696e636c756465206e206966206e2069732061207072696d650a20202020202020202a2054686520666972737420666577207072696d65732061726520322c20332c20352c202e2e2e0a202020202222229486948c116465662069735f7072696d65286e293a20944b148cd02222220a2020202052657475726e207472756520696666206e2069732061207072696d650a2020202048696e74733a0a20202020202020202a2041206e756d6265722069662061207072696d6520696620697420686173206e6f2064697669736f72730a20202020202020202a20596f752063616e20636865636b206966206b2064697669646573206e207573696e6720746865206d6f64756c6f2d6f70657261746f722e20492e652e206e2025206b203d3d2054727565206966206b2064697669646573206e2e0a202020202222229486947573738c0474696d6594473fe87a010000000075732e'
+name="Report1Hints"
+
+report = source_instantiate(name, report1_source, report1_payload)
+output_dir = os.path.dirname(__file__)
+gather_upload_to_campusnet(report, output_dir)
\ No newline at end of file
diff --git a/examples/example_hints/instructor/cs106/unitgrade/Week1.pkl b/examples/example_hints/instructor/cs106/unitgrade/Week1.pkl
new file mode 100644
index 0000000000000000000000000000000000000000..d6664eb2af6a64e0cbc9a10323e29c1ddc673bae
GIT binary patch
literal 604
zcmZo*nHtE%00y;FdRW6#Q?m`H^oW$C7MH}QW#*;CC+6hD7ZhdYrWQ|Wo6^IPoL`n&
zl$f46rEN;>lnllUCJ^1jlaZgBTAp8&ZKzjJIi+@rMvq8JYMKJr0ElLdJWVTwDc+nt
z-<6b<xD*r=6oOJqN{jLo5*2bXi%S&p(-abOaugtn6-o;fO7ayn67y0NGV_viN>eiP
z(lr(G!1_Eg^Gb@Xz)X-aS_(m_xv9BHsYM_yMKD9PK&EOzjL6F`QAkuMDJ{rJRmd+=
z$Sch)s8q;HNh~T#tklF|5X9P4g*=7KG!Rj&kO*-clKPO0RE4z6qT&*TwA6BlY_URO
zQL2KGj)Jj{f~k&zo}M09y^@j=DD(tDfs$Da2~TK<i1b`Q3z3qd(o}`aG%VI)c-;}?
z8IadA(_rocxi_;!AtSL^AunGcC9^EEIKQYE><UP5Mdp_(Bq!!6Bxj^1XM<E{gH@%Z
z7Axc_lon^^r7M(Vq$=d*r<CU8>*g1v7A2PC7wIW@>ZR%_<SD2sWGmR(Duh5Bseq&z
L*{h|+#l?C6Diglv

literal 0
HcmV?d00001

diff --git a/examples/example_hints/students/cs106/homework1.py b/examples/example_hints/students/cs106/homework1.py
new file mode 100644
index 0000000..8e530ed
--- /dev/null
+++ b/examples/example_hints/students/cs106/homework1.py
@@ -0,0 +1,21 @@
+def find_primes(n): 
+    """
+    Return a list of all primes up to (and including) n
+    Hints:
+        * Remember to return a *list* (and not a tuple or numpy ndarray)
+        * Remember to include n if n is a prime
+        * The first few primes are 2, 3, 5, ...
+    """
+    # TODO: 2 lines missing.
+    raise NotImplementedError("Implement function body")
+
+def is_prime(n): 
+    """
+    Return true iff n is a prime
+    Hints:
+        * A number if a prime if it has no divisors
+        * You can check if k divides n using the modulo-operator. I.e. n % k == True if k divides n.
+    """
+    # TODO: 3 lines missing.
+    raise NotImplementedError("Implement function body")
+    return True
diff --git a/examples/example_hints/students/cs106/report1hints.py b/examples/example_hints/students/cs106/report1hints.py
new file mode 100644
index 0000000..a10daf1
--- /dev/null
+++ b/examples/example_hints/students/cs106/report1hints.py
@@ -0,0 +1,19 @@
+from unitgrade2 import Report, UTestCase, evaluate_report_student
+from homework1 import find_primes
+import homework1
+
+class Week1(UTestCase):
+    def test_find_all_primes(self):
+        """
+        Hints:
+            * Insert a breakpoint and check what your function find_primes(4) actually outputs
+        """
+        self.assertEqual(find_primes(4), [2,3])
+
+class Report1Hints(Report):
+    title = "CS 106 Report 1"
+    questions = [(Week1, 10)]  # Include a single question for 10 credits.
+    pack_imports = [homework1] # Unitgrade will recursively include all .py files from "cs101flat"
+
+if __name__ == "__main__":
+    evaluate_report_student(Report1Hints())
diff --git a/examples/example_hints/students/cs106/report1hints_grade.py b/examples/example_hints/students/cs106/report1hints_grade.py
new file mode 100644
index 0000000..b08690b
--- /dev/null
+++ b/examples/example_hints/students/cs106/report1hints_grade.py
@@ -0,0 +1,338 @@
+import numpy as np
+from tabulate import tabulate
+from datetime import datetime
+import pyfiglet
+import unittest
+import inspect
+import os
+import argparse
+import time
+
+parser = argparse.ArgumentParser(description='Evaluate your report.', epilog="""Example: 
+To run all tests in a report: 
+
+> python assignment1_dp.py
+
+To run only question 2 or question 2.1
+
+> python assignment1_dp.py -q 2
+> python assignment1_dp.py -q 2.1
+
+Note this scripts does not grade your report. To grade your report, use:
+
+> python report1_grade.py
+
+Finally, note that if your report is part of a module (package), and the report script requires part of that package, the -m option for python may be useful.
+For instance, if the report file is in Documents/course_package/report3_complete.py, and `course_package` is a python package, then change directory to 'Documents/` and run:
+
+> python -m course_package.report1
+
+see https://docs.python.org/3.9/using/cmdline.html
+""", formatter_class=argparse.RawTextHelpFormatter)
+parser.add_argument('-q', nargs='?', type=str, default=None, help='Only evaluate this question (e.g.: -q 2)')
+parser.add_argument('--showexpected',  action="store_true",  help='Show the expected/desired result')
+parser.add_argument('--showcomputed',  action="store_true",  help='Show the answer your code computes')
+parser.add_argument('--unmute',  action="store_true",  help='Show result of print(...) commands in code')
+parser.add_argument('--passall',  action="store_true",  help='Automatically pass all tests. Useful when debugging.')
+parser.add_argument('--noprogress',  action="store_true",  help='Disable progress bars.')
+
+def evaluate_report_student(report, question=None, qitem=None, unmute=None, passall=None, ignore_missing_file=False, show_tol_err=False):
+    args = parser.parse_args()
+    if question is None and args.q is not None:
+        question = args.q
+        if "." in question:
+            question, qitem = [int(v) for v in question.split(".")]
+        else:
+            question = int(question)
+
+    if hasattr(report, "computed_answer_file") and 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:
+        unmute = args.unmute
+    if passall is None:
+        passall = args.passall
+
+
+    results, table_data = evaluate_report(report, question=question, show_progress_bar=not unmute and not args.noprogress, qitem=qitem, verbose=False, passall=passall, show_expected=args.showexpected, show_computed=args.showcomputed,unmute=unmute,
+                                          show_tol_err=show_tol_err)
+
+
+    if question is None:
+        print("Provisional evaluation")
+        tabulate(table_data)
+        table = table_data
+        print(tabulate(table))
+        print(" ")
+
+    fr = inspect.getouterframes(inspect.currentframe())[1].filename
+    gfile = os.path.basename(fr)[:-3] + "_grade.py"
+    if os.path.exists(gfile):
+        print("Note your results have not yet been registered. \nTo register your results, please run the file:")
+        print(">>>", gfile)
+        print("In the same manner as you ran this file.")
+
+
+    return results
+
+
+def upack(q):
+    # h = zip([(i['w'], i['possible'], i['obtained']) for i in q.values()])
+    h =[(i['w'], i['possible'], i['obtained']) for i in q.values()]
+    h = np.asarray(h)
+    return h[:,0], h[:,1], h[:,2],
+
+class UnitgradeTextRunner(unittest.TextTestRunner):
+    def __init__(self, *args, **kwargs):
+        super().__init__(*args, **kwargs)
+
+class SequentialTestLoader(unittest.TestLoader):
+    def getTestCaseNames(self, testCaseClass):
+        test_names = super().getTestCaseNames(testCaseClass)
+        # testcase_methods = list(testCaseClass.__dict__.keys())
+        ls = []
+        for C in testCaseClass.mro():
+            if issubclass(C, unittest.TestCase):
+                ls = list(C.__dict__.keys()) + ls
+        testcase_methods = ls
+        test_names.sort(key=testcase_methods.index)
+        return test_names
+
+def evaluate_report(report, question=None, qitem=None, passall=False, verbose=False,  show_expected=False, show_computed=False,unmute=False, show_help_flag=True, silent=False,
+                    show_progress_bar=True,
+                    show_tol_err=False,
+                    big_header=True):
+
+    from src.unitgrade2.version import __version__
+    now = datetime.now()
+    if big_header:
+        ascii_banner = pyfiglet.figlet_format("UnitGrade", font="doom")
+        b = "\n".join( [l for l in ascii_banner.splitlines() if len(l.strip()) > 0] )
+    else:
+        b = "Unitgrade"
+    dt_string = now.strftime("%d/%m/%Y %H:%M:%S")
+    print(b + " v" + __version__ + ", started: " + dt_string+ "\n")
+    # print("Started: " + dt_string)
+    s = report.title
+    if hasattr(report, "version") and report.version is not None:
+        s += " version " + report.version
+    print(s, "(use --help for options)" if show_help_flag else "")
+    # print(f"Loaded answers from: ", report.computed_answers_file, "\n")
+    table_data = []
+    t_start = time.time()
+    score = {}
+    loader = SequentialTestLoader()
+
+    for n, (q, w) in enumerate(report.questions):
+        if question is not None and n+1 != question:
+            continue
+        suite = loader.loadTestsFromTestCase(q)
+        qtitle = q.question_title() if hasattr(q, 'question_title') else q.__qualname__
+        q_title_print = "Question %i: %s"%(n+1, qtitle)
+        print(q_title_print, end="")
+        q.possible = 0
+        q.obtained = 0
+        q_ = {} # Gather score in this class.
+        from src.unitgrade2.unitgrade2 import UTextTestRunner
+        UTextResult.q_title_print = q_title_print # Hacky
+        UTextResult.show_progress_bar = show_progress_bar # Hacky.
+        UTextResult.number = n
+        UTextResult.nL = report.nL
+
+        res = UTextTestRunner(verbosity=2, resultclass=UTextResult).run(suite)
+
+        possible = res.testsRun
+        obtained = len(res.successes)
+
+        assert len(res.successes) +  len(res.errors) + len(res.failures) == res.testsRun
+
+        obtained = int(w * obtained * 1.0 / possible ) if possible > 0 else 0
+        score[n] = {'w': w, 'possible': w, 'obtained': obtained, 'items': q_, 'title': qtitle}
+        q.obtained = obtained
+        q.possible = possible
+
+        s1 = f" * q{n+1})   Total"
+        s2 = f" {q.obtained}/{w}"
+        print(s1 + ("."* (report.nL-len(s1)-len(s2) )) + s2 )
+        print(" ")
+        table_data.append([f"q{n+1}) Total", f"{q.obtained}/{w}"])
+
+    ws, possible, obtained = upack(score)
+    possible = int( msum(possible) )
+    obtained = int( msum(obtained) ) # Cast to python int
+    report.possible = possible
+    report.obtained = obtained
+    now = datetime.now()
+    dt_string = now.strftime("%H:%M:%S")
+
+    dt = int(time.time()-t_start)
+    minutes = dt//60
+    seconds = dt - minutes*60
+    plrl = lambda i, s: str(i) + " " + s + ("s" if i != 1 else "")
+
+    from src.unitgrade2.unitgrade2 import dprint
+    dprint(first = "Total points at "+ dt_string + " (" + plrl(minutes, "minute") + ", "+ plrl(seconds, "second") +")",
+           last=""+str(report.obtained)+"/"+str(report.possible), nL = report.nL)
+
+    # print(f"Completed at "+ dt_string + " (" + plrl(minutes, "minute") + ", "+ plrl(seconds, "second") +"). Total")
+
+    table_data.append(["Total", ""+str(report.obtained)+"/"+str(report.possible) ])
+    results = {'total': (obtained, possible), 'details': score}
+    return results, table_data
+
+
+import bz2
+import pickle
+import os
+
+
+def bzwrite(json_str, token): # to get around obfuscation issues
+    with getattr(bz2, 'open')(token, "wt") as f:
+        f.write(json_str)
+
+def gather_imports(imp):
+    resources = {}
+    m = imp
+    # for m in pack_imports:
+    # print(f"*** {m.__name__}")
+    f = m.__file__
+    # dn = os.path.dirname(f)
+    # top_package = os.path.dirname(__import__(m.__name__.split('.')[0]).__file__)
+    # top_package = str(__import__(m.__name__.split('.')[0]).__path__)
+
+    if hasattr(m, '__file__') and not hasattr(m, '__path__'):  # Importing a simple file: m.__class__.__name__ == 'module' and False:
+        top_package = os.path.dirname(m.__file__)
+        module_import = True
+    else:
+        top_package = __import__(m.__name__.split('.')[0]).__path__._path[0]
+        module_import = False
+
+    # top_package = os.path.dirname(__import__(m.__name__.split('.')[0]).__file__)
+    # top_package = os.path.dirname(top_package)
+    import zipfile
+    # import strea
+    # zipfile.ZipFile
+    import io
+    # file_like_object = io.BytesIO(my_zip_data)
+    zip_buffer = io.BytesIO()
+    with zipfile.ZipFile(zip_buffer, 'w') as zip:
+        # zip.write()
+        for root, dirs, files in os.walk(top_package):
+            for file in files:
+                if file.endswith(".py"):
+                    fpath = os.path.join(root, file)
+                    v = os.path.relpath(os.path.join(root, file), os.path.dirname(top_package) if not module_import else top_package)
+                    zip.write(fpath, v)
+
+    resources['zipfile'] = zip_buffer.getvalue()
+    resources['top_package'] = top_package
+    resources['module_import'] = module_import
+    return resources, top_package
+
+    if f.endswith("__init__.py"):
+        for root, dirs, files in os.walk(os.path.dirname(f)):
+            for file in files:
+                if file.endswith(".py"):
+                    # print(file)
+                    # print()
+                    v = os.path.relpath(os.path.join(root, file), top_package)
+                    with open(os.path.join(root, file), 'r') as ff:
+                        resources[v] = ff.read()
+    else:
+        v = os.path.relpath(f, top_package)
+        with open(f, 'r') as ff:
+            resources[v] = ff.read()
+    return resources
+
+import argparse
+parser = argparse.ArgumentParser(description='Evaluate your report.', epilog="""Use this script to get the score of your report. Example:
+
+> python report1_grade.py
+
+Finally, note that if your report is part of a module (package), and the report script requires part of that package, the -m option for python may be useful.
+For instance, if the report file is in Documents/course_package/report3_complete.py, and `course_package` is a python package, then change directory to 'Documents/` and run:
+
+> python -m course_package.report1
+
+see https://docs.python.org/3.9/using/cmdline.html
+""", formatter_class=argparse.RawTextHelpFormatter)
+parser.add_argument('--noprogress',  action="store_true",  help='Disable progress bars')
+parser.add_argument('--autolab',  action="store_true",  help='Show Autolab results')
+
+def gather_upload_to_campusnet(report, output_dir=None):
+    n = report.nL
+    args = parser.parse_args()
+    results, table_data = evaluate_report(report, show_help_flag=False, show_expected=False, show_computed=False, silent=True,
+                                          show_progress_bar=not args.noprogress,
+                                          big_header=not args.autolab)
+    # print(" ")
+    # print("="*n)
+    # print("Final evaluation")
+    # print(tabulate(table_data))
+    # also load the source code of missing files...
+
+    sources = {}
+    print("")
+    if not args.autolab:
+        if len(report.individual_imports) > 0:
+            print("By uploading the .token file, you verify the files:")
+            for m in report.individual_imports:
+                print(">", m.__file__)
+            print("Are created/modified individually by you in agreement with DTUs exam rules")
+            report.pack_imports += report.individual_imports
+
+        if len(report.pack_imports) > 0:
+            print("Including files in upload...")
+            for k, m in enumerate(report.pack_imports):
+                nimp, top_package = gather_imports(m)
+                _, report_relative_location, module_import = report._import_base_relative()
+
+                # report_relative_location = os.path.relpath(inspect.getfile(report.__class__), top_package)
+                nimp['report_relative_location'] = report_relative_location
+                nimp['report_module_specification'] = module_import
+                nimp['name'] = m.__name__
+                sources[k] = nimp
+                # if len([k for k in nimp if k not in sources]) > 0:
+                print(f" * {m.__name__}")
+                # sources = {**sources, **nimp}
+    results['sources'] = sources
+
+    if output_dir is None:
+        output_dir = os.getcwd()
+
+    payload_out_base = report.__class__.__name__ + "_handin"
+
+    obtain, possible = results['total']
+    vstring = "_v"+report.version if report.version is not None else ""
+
+    token = "%s_%i_of_%i%s.token"%(payload_out_base, obtain, possible,vstring)
+    token = os.path.normpath(os.path.join(output_dir, token))
+
+
+    with open(token, 'wb') as f:
+        pickle.dump(results, f)
+
+    if not args.autolab:
+        print(" ")
+        print("To get credit for your results, please upload the single unmodified file: ")
+        print(">", token)
+        # print("To campusnet without any modifications.")
+
+        # print("Now time for some autolab fun")
+
+def source_instantiate(name, report1_source, payload):
+    eval("exec")(report1_source, globals())
+    pl = pickle.loads(bytes.fromhex(payload))
+    report = eval(name)(payload=pl, strict=True)
+    # report.set_payload(pl)
+    return report
+
+
+
+report1_source = '\n# import os\n# import lzma\n# import pickle\n\n# DONT\'t import stuff here since install script requires __version__\n\n# def cache_write(object, file_name, verbose=True):\n#     # raise Exception("bad")\n#     # import compress_pickle\n#     dn = os.path.dirname(file_name)\n#     if not os.path.exists(dn):\n#         os.mkdir(dn)\n#     if verbose: print("Writing cache...", file_name)\n#     with lzma.open(file_name, \'wb\', ) as f:\n#         pickle.dump(object, f)\n#     if verbose: print("Done!")\n#\n#\n# def cache_exists(file_name):\n#     # file_name = cn_(file_name) if cache_prefix else file_name\n#     return os.path.exists(file_name)\n#\n#\n# def cache_read(file_name):\n#     # import compress_pickle # Import here because if you import in top the __version__ tag will fail.\n#     # file_name = cn_(file_name) if cache_prefix else file_name\n#     if os.path.exists(file_name):\n#         try:\n#             with lzma.open(file_name, \'rb\') as f:\n#                 return pickle.load(f)\n#         except Exception as e:\n#             print("Tried to load a bad pickle file at", file_name)\n#             print("If the file appears to be automatically generated, you can try to delete it, otherwise download a new version")\n#             print(e)\n#             # return pickle.load(f)\n#     else:\n#         return None\n\n\n\n"""\ngit add . && git commit -m "Options" && git push &&  pip install git+ssh://git@gitlab.compute.dtu.dk/tuhe/unitgrade.git --upgrade\n"""\nimport numpy as np\nimport sys\nimport re\nimport threading\nimport tqdm\nimport pickle\nimport os\nfrom io import StringIO\nimport io\nfrom unittest.runner import _WritelnDecorator\nfrom typing import Any\nimport inspect\nimport textwrap\nimport colorama\nfrom colorama import Fore\nfrom functools import _make_key, RLock\nfrom collections import namedtuple\nimport unittest\nimport time\n\n_CacheInfo = namedtuple("CacheInfo", ["hits", "misses", "maxsize", "currsize"])\n\ncolorama.init(autoreset=True)  # auto resets your settings after every output\n\ndef gprint(s):\n    print(f"{Fore.GREEN}{s}")\n\nmyround = lambda x: np.round(x)  # required.\nmsum = lambda x: sum(x)\nmfloor = lambda x: np.floor(x)\n\n\ndef setup_dir_by_class(C, base_dir):\n    name = C.__class__.__name__\n    return base_dir, name\n\n\nclass Logger(object):\n    def __init__(self, buffer):\n        assert False\n        self.terminal = sys.stdout\n        self.log = buffer\n\n    def write(self, message):\n        self.terminal.write(message)\n        self.log.write(message)\n\n    def flush(self):\n        # this flush method is needed for python 3 compatibility.\n        pass\n\n\nclass Capturing(list):\n    def __init__(self, *args, stdout=None, unmute=False, **kwargs):\n        self._stdout = stdout\n        self.unmute = unmute\n        super().__init__(*args, **kwargs)\n\n    def __enter__(self, capture_errors=True):  # don\'t put arguments here.\n        self._stdout = sys.stdout if self._stdout == None else self._stdout\n        self._stringio = StringIO()\n        if self.unmute:\n            sys.stdout = Logger(self._stringio)\n        else:\n            sys.stdout = self._stringio\n\n        if capture_errors:\n            self._sterr = sys.stderr\n            sys.sterr = StringIO()  # memory hole it\n        self.capture_errors = capture_errors\n        return self\n\n    def __exit__(self, *args):\n        self.extend(self._stringio.getvalue().splitlines())\n        del self._stringio  # free up some memory\n        sys.stdout = self._stdout\n        if self.capture_errors:\n            sys.sterr = self._sterr\n\n\nclass Capturing2(Capturing):\n    def __exit__(self, *args):\n        lines = self._stringio.getvalue().splitlines()\n        txt = "\\n".join(lines)\n        numbers = extract_numbers(txt)\n        self.extend(lines)\n        del self._stringio  # free up some memory\n        sys.stdout = self._stdout\n        if self.capture_errors:\n            sys.sterr = self._sterr\n\n        self.output = txt\n        self.numbers = numbers\n\n\n# @classmethod\n# class OrderedClassMembers(type):\n#     def __prepare__(self, name, bases):\n#         assert False\n#         return collections.OrderedDict()\n#\n#     def __new__(self, name, bases, classdict):\n#         ks = list(classdict.keys())\n#         for b in bases:\n#             ks += b.__ordered__\n#         classdict[\'__ordered__\'] = [key for key in ks if key not in (\'__module__\', \'__qualname__\')]\n#         return type.__new__(self, name, bases, classdict)\n\n\nclass Report:\n    title = "report title"\n    version = None\n    questions = []\n    pack_imports = []\n    individual_imports = []\n    nL = 120  # Maximum line width\n\n    @classmethod\n    def reset(cls):\n        for (q, _) in cls.questions:\n            if hasattr(q, \'reset\'):\n                q.reset()\n\n    @classmethod\n    def mfile(clc):\n        return inspect.getfile(clc)\n\n    def _file(self):\n        return inspect.getfile(type(self))\n\n    def _import_base_relative(self):\n        if hasattr(self.pack_imports[0], \'__path__\'):\n            root_dir = self.pack_imports[0].__path__._path[0]\n        else:\n            root_dir = self.pack_imports[0].__file__\n\n        root_dir = os.path.dirname(root_dir)\n        relative_path = os.path.relpath(self._file(), root_dir)\n        modules = os.path.normpath(relative_path[:-3]).split(os.sep)\n        return root_dir, relative_path, modules\n\n    def __init__(self, strict=False, payload=None):\n        working_directory = os.path.abspath(os.path.dirname(self._file()))\n        self.wdir, self.name = setup_dir_by_class(self, working_directory)\n        # self.computed_answers_file = os.path.join(self.wdir, self.name + "_resources_do_not_hand_in.dat")\n        for (q, _) in self.questions:\n            q.nL = self.nL  # Set maximum line length.\n\n        if payload is not None:\n            self.set_payload(payload, strict=strict)\n\n    def main(self, verbosity=1):\n        # Run all tests using standard unittest (nothing fancy).\n        loader = unittest.TestLoader()\n        for q, _ in self.questions:\n            start = time.time()  # A good proxy for setup time is to\n            suite = loader.loadTestsFromTestCase(q)\n            unittest.TextTestRunner(verbosity=verbosity).run(suite)\n            total = time.time() - start\n            q.time = total\n\n    def _setup_answers(self, with_coverage=False):\n        if with_coverage:\n            for q, _ in self.questions:\n                q._with_coverage = True\n                q._report = self\n\n        self.main()  # Run all tests in class just to get that out of the way...\n        report_cache = {}\n        for q, _ in self.questions:\n            # print(self.questions)\n            if hasattr(q, \'_save_cache\'):\n                q()._save_cache()\n                print("q is", q())\n                q()._cache_put(\'time\', q.time) # = q.time\n                report_cache[q.__qualname__] = q._cache2\n            else:\n                report_cache[q.__qualname__] = {\'no cache see _setup_answers in unitgrade2.py\': True}\n        if with_coverage:\n            for q, _ in self.questions:\n                q._with_coverage = False\n        return report_cache\n\n    def set_payload(self, payloads, strict=False):\n        for q, _ in self.questions:\n            q._cache = payloads[q.__qualname__]\n\n\ndef rm_progress_bar(txt):\n    # More robust version. Apparently length of bar can depend on various factors, so check for order of symbols.\n    nlines = []\n    for l in txt.splitlines():\n        pct = l.find("%")\n        ql = False\n        if pct > 0:\n            i = l.find("|", pct + 1)\n            if i > 0 and l.find("|", i + 1) > 0:\n                ql = True\n        if not ql:\n            nlines.append(l)\n    return "\\n".join(nlines)\n\n\ndef extract_numbers(txt):\n    # txt = rm_progress_bar(txt)\n    numeric_const_pattern = r\'[-+]? (?: (?: \\d* \\. \\d+ ) | (?: \\d+ \\.? ) )(?: [Ee] [+-]? \\d+ ) ?\'\n    rx = re.compile(numeric_const_pattern, re.VERBOSE)\n    all = rx.findall(txt)\n    all = [float(a) if (\'.\' in a or "e" in a) else int(a) for a in all]\n    if len(all) > 500:\n        print(txt)\n        raise Exception("unitgrade.unitgrade.py: Warning, too many numbers!", len(all))\n    return all\n\n\nclass ActiveProgress():\n    def __init__(self, t, start=True, title="my progress bar", show_progress_bar=True, file=None):\n        if file == None:\n            file = sys.stdout\n        self.file = file\n        self.t = t\n        self._running = False\n        self.title = title\n        self.dt = 0.01\n        self.n = int(np.round(self.t / self.dt))\n        self.show_progress_bar = show_progress_bar\n        self.pbar = None\n\n        if start:\n            self.start()\n\n    def start(self):\n        self._running = True\n        if self.show_progress_bar:\n            self.thread = threading.Thread(target=self.run)\n            self.thread.start()\n        self.time_started = time.time()\n\n    def terminate(self):\n        if not self._running:\n            raise Exception("Stopping a stopped progress bar. ")\n        self._running = False\n        if self.show_progress_bar:\n            self.thread.join()\n        if self.pbar is not None:\n            self.pbar.update(1)\n            self.pbar.close()\n            self.pbar = None\n\n        self.file.flush()\n        return time.time() - self.time_started\n\n    def run(self):\n        self.pbar = tqdm.tqdm(total=self.n, file=self.file, position=0, leave=False, desc=self.title, ncols=100,\n                              bar_format=\'{l_bar}{bar}| [{elapsed}<{remaining}]\')\n\n        for _ in range(self.n - 1):  # Don\'t terminate completely; leave bar at 99% done until terminate.\n            if not self._running:\n                self.pbar.close()\n                self.pbar = None\n                break\n\n            time.sleep(self.dt)\n            self.pbar.update(1)\n\ndef dprint(first, last, nL, extra = "", file=None, dotsym=\'.\', color=\'white\'):\n    if file == None:\n        file = sys.stdout\n\n    # ss = self.item_title_print\n    # state = "PASS" if success else "FAILED"\n    dot_parts = (dotsym * max(0, nL - len(last) - len(first)))\n    # if self.show_progress_bar or True:\n    print(first + dot_parts, end="", file=file)\n    # else:\n    # print(dot_parts, end="", file=self.cc.file)\n    last += extra\n    # if tsecs >= 0.5:\n    #     state += " (" + str(tsecs) + " seconds)"\n    print(last, file=file)\n\n\nclass UTextResult(unittest.TextTestResult):\n    nL = 80\n    number = -1  # HAcky way to set question number.\n    show_progress_bar = True\n    cc = None\n\n    def __init__(self, stream, descriptions, verbosity):\n        super().__init__(stream, descriptions, verbosity)\n        self.successes = []\n\n    def printErrors(self) -> None:\n        self.printErrorList(\'ERROR\', self.errors)\n        self.printErrorList(\'FAIL\', self.failures)\n\n    def addError(self, test, err):\n        super(unittest.TextTestResult, self).addFailure(test, err)\n        self.cc_terminate(success=False)\n\n    def addFailure(self, test, err):\n        super(unittest.TextTestResult, self).addFailure(test, err)\n        self.cc_terminate(success=False)\n\n    def addSuccess(self, test: unittest.case.TestCase) -> None:\n        self.successes.append(test)\n        self.cc_terminate()\n\n    def cc_terminate(self, success=True):\n        if self.show_progress_bar or True:\n            tsecs = np.round(self.cc.terminate(), 2)\n            self.cc.file.flush()\n            ss = self.item_title_print\n\n            state = "PASS" if success else "FAILED"\n\n            dot_parts = (\'.\' * max(0, self.nL - len(state) - len(ss)))\n            if self.show_progress_bar or True:\n                print(self.item_title_print + dot_parts, end="", file=self.cc.file)\n            else:\n                print(dot_parts, end="", file=self.cc.file)\n\n            if tsecs >= 0.5:\n                state += " (" + str(tsecs) + " seconds)"\n            print(state, file=self.cc.file)\n\n    def startTest(self, test):\n        # j =self.testsRun\n        self.testsRun += 1\n        # item_title = self.getDescription(test)\n        item_title = test.shortDescription()  # Better for printing (get from cache).\n        if item_title == None:\n            # For unittest framework where getDescription may return None.\n            item_title = self.getDescription(test)\n        self.item_title_print = " * q%i.%i) %s" % (UTextResult.number + 1, self.testsRun, item_title)\n        estimated_time = 10\n        if self.show_progress_bar or True:\n            self.cc = ActiveProgress(t=estimated_time, title=self.item_title_print, show_progress_bar=self.show_progress_bar, file=sys.stdout)\n        else:\n            print(self.item_title_print + (\'.\' * max(0, self.nL - 4 - len(self.item_title_print))), end="")\n\n        self._test = test\n        self._stdout = sys.stdout\n        sys.stdout = io.StringIO()\n\n    def stopTest(self, test):\n        sys.stdout = self._stdout\n        super().stopTest(test)\n\n    def _setupStdout(self):\n        if self._previousTestClass == None:\n            total_estimated_time = 1\n            if hasattr(self.__class__, \'q_title_print\'):\n                q_title_print = self.__class__.q_title_print\n            else:\n                q_title_print = "<unnamed test. See unitgrade.py>"\n\n            cc = ActiveProgress(t=total_estimated_time, title=q_title_print, show_progress_bar=self.show_progress_bar)\n            self.cc = cc\n\n    def _restoreStdout(self):  # Used when setting up the test.\n        if self._previousTestClass is None:\n            q_time = self.cc.terminate()\n            q_time = np.round(q_time, 2)\n            sys.stdout.flush()\n            if self.show_progress_bar:\n                print(self.cc.title, end="")\n            print(" " * max(0, self.nL - len(self.cc.title)) + (" (" + str(q_time) + " seconds)" if q_time >= 0.5 else ""))\n\n\nclass UTextTestRunner(unittest.TextTestRunner):\n    def __init__(self, *args, **kwargs):\n        stream = io.StringIO()\n        super().__init__(*args, stream=stream, **kwargs)\n\n    def _makeResult(self):\n        # stream = self.stream # not you!\n        stream = sys.stdout\n        stream = _WritelnDecorator(stream)\n        return self.resultclass(stream, self.descriptions, self.verbosity)\n\n\ndef cache(foo, typed=False):\n    """ Magic cache wrapper\n    https://github.com/python/cpython/blob/main/Lib/functools.py\n    """\n    maxsize = None\n    def wrapper(self, *args, **kwargs):\n        key = (self.cache_id(), ("@cache", foo.__name__, _make_key(args, kwargs, typed)))\n        if not self._cache_contains(key):\n            value = foo(self, *args, **kwargs)\n            self._cache_put(key, value)\n        else:\n            value = self._cache_get(key)\n        return value\n\n    return wrapper\n\n\ndef get_hints(ss):\n    if ss == None:\n        return None\n    try:\n        ss = textwrap.dedent(ss)\n        ss = ss.replace(\'\'\'"""\'\'\', "").strip()\n        hints = ["hints:", ]\n        j = np.argmax([ss.lower().find(h) for h in hints])\n        h = hints[j]\n        ss = ss[ss.find(h) + len(h) + 1:]\n        ss = "\\n".join([l for l in ss.split("\\n") if not l.strip().startswith(":")])\n        ss = textwrap.dedent(ss)\n        ss = ss.strip()\n        return ss\n    except Exception as e:\n        print("bad hints", ss, e)\n\n\nclass UTestCase(unittest.TestCase):\n    _outcome = None  # A dictionary which stores the user-computed outcomes of all the tests. This differs from the cache.\n    _cache = None  # Read-only cache. Ensures method always produce same result.\n    _cache2 = None  # User-written cache.\n    _with_coverage = False\n    _report = None  # The report used. This is very, very hacky and should always be None. Don\'t rely on it!\n\n    def capture(self):\n        if hasattr(self, \'_stdout\') and self._stdout is not None:\n            file = self._stdout\n        else:\n            # self._stdout = sys.stdout\n            # sys._stdout = io.StringIO()\n            file = sys.stdout\n        return Capturing2(stdout=file)\n\n    @classmethod\n    def question_title(cls):\n        """ Return the question title """\n        return cls.__doc__.strip().splitlines()[0].strip() if cls.__doc__ is not None else cls.__qualname__\n\n    @classmethod\n    def reset(cls):\n        print("Warning, I am not sure UTestCase.reset() is needed anymore and it seems very hacky.")\n        cls._outcome = None\n        cls._cache = None\n        cls._cache2 = None\n\n    def _callSetUp(self):\n        if self._with_coverage:\n            if not hasattr(self._report, \'covcache\'):\n                self._report.covcache = {}\n            import coverage\n            self.cov = coverage.Coverage()\n            self.cov.start()\n        self.setUp()\n\n    def _callTearDown(self):\n        self.tearDown()\n        if self._with_coverage:\n            from pathlib import Path\n            from snipper import snipper_main\n            self.cov.stop()\n            data = self.cov.get_data()\n            base, _, _ = self._report._import_base_relative()\n            for file in data.measured_files():\n                file = os.path.normpath(file)\n                root = Path(base)\n                child = Path(file)\n                if root in child.parents:\n                    with open(child, \'r\') as f:\n                        s = f.read()\n                    lines = s.splitlines()\n                    garb = \'GARBAGE\'\n\n                    lines2 = snipper_main.censor_code(lines, keep=True)\n                    assert len(lines) == len(lines2)\n\n                    for l in data.contexts_by_lineno(file):\n                        if lines2[l].strip() == garb:\n                            if self.cache_id() not in self._report.covcache:\n                                self._report.covcache[self.cache_id()] = {}\n\n                            rel = os.path.relpath(child, root)\n                            cc = self._report.covcache[self.cache_id()]\n                            j = 0\n                            for j in range(l, -1, -1):\n                                if "def" in lines2[j] or "class" in lines2[j]:\n                                    break\n                            from snipper.legacy import gcoms\n                            fun = lines2[j]\n                            comments, _ = gcoms("\\n".join(lines2[j:l]))\n                            if rel not in cc:\n                                cc[rel] = {}\n                            cc[rel][fun] = (l, "\\n".join(comments))\n                            self._cache_put((self.cache_id(), \'coverage\'), self._report.covcache)\n\n    def shortDescriptionStandard(self):\n        sd = super().shortDescription()\n        if sd is None:\n            sd = self._testMethodName\n        return sd\n\n    def shortDescription(self):\n        sd = self.shortDescriptionStandard()\n        title = self._cache_get((self.cache_id(), \'title\'), sd)\n        return title if title is not None else sd\n\n    @property\n    def title(self):\n        return self.shortDescription()\n\n    @title.setter\n    def title(self, value):\n        self._cache_put((self.cache_id(), \'title\'), value)\n\n    def _get_outcome(self):\n        if not (self.__class__, \'_outcome\') or self.__class__._outcome is None:\n            self.__class__._outcome = {}\n        return self.__class__._outcome\n\n    def _callTestMethod(self, testMethod):\n        t = time.time()\n        self._ensure_cache_exists()  # Make sure cache is there.\n        if self._testMethodDoc is not None:\n            self._cache_put((self.cache_id(), \'title\'), self.shortDescriptionStandard())\n\n        self._cache2[(self.cache_id(), \'assert\')] = {}\n        res = testMethod()\n        elapsed = time.time() - t\n        self._get_outcome()[self.cache_id()] = res\n        self._cache_put((self.cache_id(), "time"), elapsed)\n\n    def cache_id(self):\n        c = self.__class__.__qualname__\n        m = self._testMethodName\n        return c, m\n\n    def __init__(self, *args, **kwargs):\n        super().__init__(*args, **kwargs)\n        self._load_cache()\n        self._assert_cache_index = 0\n\n    def _ensure_cache_exists(self):\n        if not hasattr(self.__class__, \'_cache\') or self.__class__._cache == None:\n            self.__class__._cache = dict()\n        if not hasattr(self.__class__, \'_cache2\') or self.__class__._cache2 == None:\n            self.__class__._cache2 = dict()\n\n    def _cache_get(self, key, default=None):\n        self._ensure_cache_exists()\n        return self.__class__._cache.get(key, default)\n\n    def _cache_put(self, key, value):\n        self._ensure_cache_exists()\n        self.__class__._cache2[key] = value\n\n    def _cache_contains(self, key):\n        self._ensure_cache_exists()\n        return key in self.__class__._cache\n\n    def wrap_assert(self, assert_fun, first, *args, **kwargs):\n        # sys.stdout = self._stdout\n        key = (self.cache_id(), \'assert\')\n        if not self._cache_contains(key):\n            print("Warning, framework missing", key)\n            self.__class__._cache[\n                key] = {}  # A new dict. We manually insert it because we have to use that the dict is mutable.\n        cache = self._cache_get(key)\n        id = self._assert_cache_index\n        if not id in cache:\n            print("Warning, framework missing cache index", key, "id =", id)\n        _expected = cache.get(id, f"Key {id} not found in cache; framework files missing. Please run deploy()")\n\n        # The order of these calls is important. If the method assert fails, we should still store the correct result in cache.\n        cache[id] = first\n        self._cache_put(key, cache)\n        self._assert_cache_index += 1\n        assert_fun(first, _expected, *args, **kwargs)\n\n    def assertEqualC(self, first: Any, msg: Any = ...) -> None:\n        self.wrap_assert(self.assertEqual, first, msg)\n\n    def _cache_file(self):\n        # The filename-directory stuff is a bit tricky but this seems robust.\n        return os.path.dirname(inspect.getabsfile(type(self))) + "/unitgrade/" + self.__class__.__name__ + ".pkl"\n\n    def _save_cache(self):\n        # get the class name (i.e. what to save to).\n        cfile = self._cache_file()\n        if not os.path.isdir(os.path.dirname(cfile)):\n            os.makedirs(os.path.dirname(cfile))\n\n        if hasattr(self.__class__, \'_cache2\'):\n            with open(cfile, \'wb\') as f:\n                pickle.dump(self.__class__._cache2, f)\n\n    # But you can also set cache explicitly.\n    def _load_cache(self):\n        if self._cache is not None:  # Cache already loaded. We will not load it twice.\n            return\n            # raise Exception("Loaded cache which was already set. What is going on?!")\n        cfile = self._cache_file()\n        if os.path.exists(cfile):\n            try:\n                # print("\\ncache file", cfile)\n                with open(cfile, \'rb\') as f:\n                    data = pickle.load(f)\n                self.__class__._cache = data\n            except Exception as e:\n                print("Bad cache", cfile)\n                print(e)\n        else:\n            print("Warning! data file not found", cfile)\n\n    def _feedErrorsToResult(self, result, errors):\n        """ Use this to show hints on test failure. """\n        if not isinstance(result, UTextResult):\n            er = [e for e, v in errors if v != None]\n            import textwrap\n            if len(er) > 0:\n                hints = []\n                key = (self.cache_id(), \'coverage\')\n                if self._cache_contains(key):\n                    CC = self._cache_get(key)\n                    for id in CC:\n                        if id == self.cache_id():\n                            cl, m = id\n                            gprint(f"> An error occured while solving: {cl}.{m}. The files/methods you need to edit are:")  # For the test {id} in {file} you should edit:")\n                            for file in CC[id]:\n                                rec = CC[id][file]\n                                gprint(f">   * {file}")\n                                for l in rec:\n                                    _, comments = CC[id][file][l]\n                                    hint = get_hints(comments)\n\n                                    if hint != None:\n                                        # hint = textwrap.dedent(hint)\n                                        hints.append(hint)\n                                    gprint(f">      - {l}")\n\n                er = er[0]\n                doc = er._testMethodDoc\n                if doc is not None:\n                    hint = get_hints(er._testMethodDoc)\n                    if hint is not None:\n                        hints = [hint] + hints\n                if len(hints) > 0:\n                    gprint("> Hints:")\n                    gprint(textwrap.indent("\\n".join(hints), ">   "))\n\n        super()._feedErrorsToResult(result, errors)\n\n    def startTestRun(self):\n        # print("asdfsdaf 11", file=sys.stderr)\n        super().startTestRun()\n        # print("asdfsdaf")\n\n    def _callTestMethod(self, method):\n        # print("asdfsdaf")\n        super()._callTestMethod(method)\n\n\ndef hide(func):\n    return func\n\n\ndef makeRegisteringDecorator(foreignDecorator):\n    """\n        Returns a copy of foreignDecorator, which is identical in every\n        way(*), except also appends a .decorator property to the callable it\n        spits out.\n    """\n\n    def newDecorator(func):\n        # Call to newDecorator(method)\n        # Exactly like old decorator, but output keeps track of what decorated it\n        R = foreignDecorator(func)  # apply foreignDecorator, like call to foreignDecorator(method) would have done\n        R.decorator = newDecorator  # keep track of decorator\n        # R.original = func         # might as well keep track of everything!\n        return R\n\n    newDecorator.__name__ = foreignDecorator.__name__\n    newDecorator.__doc__ = foreignDecorator.__doc__\n    return newDecorator\n\nhide = makeRegisteringDecorator(hide)\n\ndef methodsWithDecorator(cls, decorator):\n    """\n        Returns all methods in CLS with DECORATOR as the\n        outermost decorator.\n\n        DECORATOR must be a "registering decorator"; one\n        can make any decorator "registering" via the\n        makeRegisteringDecorator function.\n\n        import inspect\n        ls = list(methodsWithDecorator(GeneratorQuestion, deco))\n        for f in ls:\n            print(inspect.getsourcelines(f) ) # How to get all hidden questions.\n    """\n    for maybeDecorated in cls.__dict__.values():\n        if hasattr(maybeDecorated, \'decorator\'):\n            if maybeDecorated.decorator == decorator:\n                print(maybeDecorated)\n                yield maybeDecorated\n# 817\n\n\nimport numpy as np\nfrom tabulate import tabulate\nfrom datetime import datetime\nimport pyfiglet\nimport unittest\nimport inspect\nimport os\nimport argparse\nimport time\n\nparser = argparse.ArgumentParser(description=\'Evaluate your report.\', epilog="""Example: \nTo run all tests in a report: \n\n> python assignment1_dp.py\n\nTo run only question 2 or question 2.1\n\n> python assignment1_dp.py -q 2\n> python assignment1_dp.py -q 2.1\n\nNote this scripts does not grade your report. To grade your report, use:\n\n> python report1_grade.py\n\nFinally, note that if your report is part of a module (package), and the report script requires part of that package, the -m option for python may be useful.\nFor instance, if the report file is in Documents/course_package/report3_complete.py, and `course_package` is a python package, then change directory to \'Documents/` and run:\n\n> python -m course_package.report1\n\nsee https://docs.python.org/3.9/using/cmdline.html\n""", formatter_class=argparse.RawTextHelpFormatter)\nparser.add_argument(\'-q\', nargs=\'?\', type=str, default=None, help=\'Only evaluate this question (e.g.: -q 2)\')\nparser.add_argument(\'--showexpected\',  action="store_true",  help=\'Show the expected/desired result\')\nparser.add_argument(\'--showcomputed\',  action="store_true",  help=\'Show the answer your code computes\')\nparser.add_argument(\'--unmute\',  action="store_true",  help=\'Show result of print(...) commands in code\')\nparser.add_argument(\'--passall\',  action="store_true",  help=\'Automatically pass all tests. Useful when debugging.\')\nparser.add_argument(\'--noprogress\',  action="store_true",  help=\'Disable progress bars.\')\n\ndef evaluate_report_student(report, question=None, qitem=None, unmute=None, passall=None, ignore_missing_file=False, show_tol_err=False):\n    args = parser.parse_args()\n    if question is None and args.q is not None:\n        question = args.q\n        if "." in question:\n            question, qitem = [int(v) for v in question.split(".")]\n        else:\n            question = int(question)\n\n    if hasattr(report, "computed_answer_file") and not os.path.isfile(report.computed_answers_file) and not ignore_missing_file:\n        raise Exception("> Error: The pre-computed answer file", os.path.abspath(report.computed_answers_file), "does not exist. Check your package installation")\n\n    if unmute is None:\n        unmute = args.unmute\n    if passall is None:\n        passall = args.passall\n\n\n    results, table_data = evaluate_report(report, question=question, show_progress_bar=not unmute and not args.noprogress, qitem=qitem, verbose=False, passall=passall, show_expected=args.showexpected, show_computed=args.showcomputed,unmute=unmute,\n                                          show_tol_err=show_tol_err)\n\n\n    if question is None:\n        print("Provisional evaluation")\n        tabulate(table_data)\n        table = table_data\n        print(tabulate(table))\n        print(" ")\n\n    fr = inspect.getouterframes(inspect.currentframe())[1].filename\n    gfile = os.path.basename(fr)[:-3] + "_grade.py"\n    if os.path.exists(gfile):\n        print("Note your results have not yet been registered. \\nTo register your results, please run the file:")\n        print(">>>", gfile)\n        print("In the same manner as you ran this file.")\n\n\n    return results\n\n\ndef upack(q):\n    # h = zip([(i[\'w\'], i[\'possible\'], i[\'obtained\']) for i in q.values()])\n    h =[(i[\'w\'], i[\'possible\'], i[\'obtained\']) for i in q.values()]\n    h = np.asarray(h)\n    return h[:,0], h[:,1], h[:,2],\n\nclass UnitgradeTextRunner(unittest.TextTestRunner):\n    def __init__(self, *args, **kwargs):\n        super().__init__(*args, **kwargs)\n\nclass SequentialTestLoader(unittest.TestLoader):\n    def getTestCaseNames(self, testCaseClass):\n        test_names = super().getTestCaseNames(testCaseClass)\n        # testcase_methods = list(testCaseClass.__dict__.keys())\n        ls = []\n        for C in testCaseClass.mro():\n            if issubclass(C, unittest.TestCase):\n                ls = list(C.__dict__.keys()) + ls\n        testcase_methods = ls\n        test_names.sort(key=testcase_methods.index)\n        return test_names\n\ndef evaluate_report(report, question=None, qitem=None, passall=False, verbose=False,  show_expected=False, show_computed=False,unmute=False, show_help_flag=True, silent=False,\n                    show_progress_bar=True,\n                    show_tol_err=False,\n                    big_header=True):\n\n    from src.unitgrade2.version import __version__\n    now = datetime.now()\n    if big_header:\n        ascii_banner = pyfiglet.figlet_format("UnitGrade", font="doom")\n        b = "\\n".join( [l for l in ascii_banner.splitlines() if len(l.strip()) > 0] )\n    else:\n        b = "Unitgrade"\n    dt_string = now.strftime("%d/%m/%Y %H:%M:%S")\n    print(b + " v" + __version__ + ", started: " + dt_string+ "\\n")\n    # print("Started: " + dt_string)\n    s = report.title\n    if hasattr(report, "version") and report.version is not None:\n        s += " version " + report.version\n    print(s, "(use --help for options)" if show_help_flag else "")\n    # print(f"Loaded answers from: ", report.computed_answers_file, "\\n")\n    table_data = []\n    t_start = time.time()\n    score = {}\n    loader = SequentialTestLoader()\n\n    for n, (q, w) in enumerate(report.questions):\n        if question is not None and n+1 != question:\n            continue\n        suite = loader.loadTestsFromTestCase(q)\n        qtitle = q.question_title() if hasattr(q, \'question_title\') else q.__qualname__\n        q_title_print = "Question %i: %s"%(n+1, qtitle)\n        print(q_title_print, end="")\n        q.possible = 0\n        q.obtained = 0\n        q_ = {} # Gather score in this class.\n        from src.unitgrade2.unitgrade2 import UTextTestRunner\n        UTextResult.q_title_print = q_title_print # Hacky\n        UTextResult.show_progress_bar = show_progress_bar # Hacky.\n        UTextResult.number = n\n        UTextResult.nL = report.nL\n\n        res = UTextTestRunner(verbosity=2, resultclass=UTextResult).run(suite)\n\n        possible = res.testsRun\n        obtained = len(res.successes)\n\n        assert len(res.successes) +  len(res.errors) + len(res.failures) == res.testsRun\n\n        obtained = int(w * obtained * 1.0 / possible ) if possible > 0 else 0\n        score[n] = {\'w\': w, \'possible\': w, \'obtained\': obtained, \'items\': q_, \'title\': qtitle}\n        q.obtained = obtained\n        q.possible = possible\n\n        s1 = f" * q{n+1})   Total"\n        s2 = f" {q.obtained}/{w}"\n        print(s1 + ("."* (report.nL-len(s1)-len(s2) )) + s2 )\n        print(" ")\n        table_data.append([f"q{n+1}) Total", f"{q.obtained}/{w}"])\n\n    ws, possible, obtained = upack(score)\n    possible = int( msum(possible) )\n    obtained = int( msum(obtained) ) # Cast to python int\n    report.possible = possible\n    report.obtained = obtained\n    now = datetime.now()\n    dt_string = now.strftime("%H:%M:%S")\n\n    dt = int(time.time()-t_start)\n    minutes = dt//60\n    seconds = dt - minutes*60\n    plrl = lambda i, s: str(i) + " " + s + ("s" if i != 1 else "")\n\n    from src.unitgrade2.unitgrade2 import dprint\n    dprint(first = "Total points at "+ dt_string + " (" + plrl(minutes, "minute") + ", "+ plrl(seconds, "second") +")",\n           last=""+str(report.obtained)+"/"+str(report.possible), nL = report.nL)\n\n    # print(f"Completed at "+ dt_string + " (" + plrl(minutes, "minute") + ", "+ plrl(seconds, "second") +"). Total")\n\n    table_data.append(["Total", ""+str(report.obtained)+"/"+str(report.possible) ])\n    results = {\'total\': (obtained, possible), \'details\': score}\n    return results, table_data\n\n\nimport bz2\nimport pickle\nimport os\n\n\ndef bzwrite(json_str, token): # to get around obfuscation issues\n    with getattr(bz2, \'open\')(token, "wt") as f:\n        f.write(json_str)\n\ndef gather_imports(imp):\n    resources = {}\n    m = imp\n    # for m in pack_imports:\n    # print(f"*** {m.__name__}")\n    f = m.__file__\n    # dn = os.path.dirname(f)\n    # top_package = os.path.dirname(__import__(m.__name__.split(\'.\')[0]).__file__)\n    # top_package = str(__import__(m.__name__.split(\'.\')[0]).__path__)\n\n    if hasattr(m, \'__file__\') and not hasattr(m, \'__path__\'):  # Importing a simple file: m.__class__.__name__ == \'module\' and False:\n        top_package = os.path.dirname(m.__file__)\n        module_import = True\n    else:\n        top_package = __import__(m.__name__.split(\'.\')[0]).__path__._path[0]\n        module_import = False\n\n    # top_package = os.path.dirname(__import__(m.__name__.split(\'.\')[0]).__file__)\n    # top_package = os.path.dirname(top_package)\n    import zipfile\n    # import strea\n    # zipfile.ZipFile\n    import io\n    # file_like_object = io.BytesIO(my_zip_data)\n    zip_buffer = io.BytesIO()\n    with zipfile.ZipFile(zip_buffer, \'w\') as zip:\n        # zip.write()\n        for root, dirs, files in os.walk(top_package):\n            for file in files:\n                if file.endswith(".py"):\n                    fpath = os.path.join(root, file)\n                    v = os.path.relpath(os.path.join(root, file), os.path.dirname(top_package) if not module_import else top_package)\n                    zip.write(fpath, v)\n\n    resources[\'zipfile\'] = zip_buffer.getvalue()\n    resources[\'top_package\'] = top_package\n    resources[\'module_import\'] = module_import\n    return resources, top_package\n\n    if f.endswith("__init__.py"):\n        for root, dirs, files in os.walk(os.path.dirname(f)):\n            for file in files:\n                if file.endswith(".py"):\n                    # print(file)\n                    # print()\n                    v = os.path.relpath(os.path.join(root, file), top_package)\n                    with open(os.path.join(root, file), \'r\') as ff:\n                        resources[v] = ff.read()\n    else:\n        v = os.path.relpath(f, top_package)\n        with open(f, \'r\') as ff:\n            resources[v] = ff.read()\n    return resources\n\nimport argparse\nparser = argparse.ArgumentParser(description=\'Evaluate your report.\', epilog="""Use this script to get the score of your report. Example:\n\n> python report1_grade.py\n\nFinally, note that if your report is part of a module (package), and the report script requires part of that package, the -m option for python may be useful.\nFor instance, if the report file is in Documents/course_package/report3_complete.py, and `course_package` is a python package, then change directory to \'Documents/` and run:\n\n> python -m course_package.report1\n\nsee https://docs.python.org/3.9/using/cmdline.html\n""", formatter_class=argparse.RawTextHelpFormatter)\nparser.add_argument(\'--noprogress\',  action="store_true",  help=\'Disable progress bars\')\nparser.add_argument(\'--autolab\',  action="store_true",  help=\'Show Autolab results\')\n\ndef gather_upload_to_campusnet(report, output_dir=None):\n    n = report.nL\n    args = parser.parse_args()\n    results, table_data = evaluate_report(report, show_help_flag=False, show_expected=False, show_computed=False, silent=True,\n                                          show_progress_bar=not args.noprogress,\n                                          big_header=not args.autolab)\n    # print(" ")\n    # print("="*n)\n    # print("Final evaluation")\n    # print(tabulate(table_data))\n    # also load the source code of missing files...\n\n    sources = {}\n    print("")\n    if not args.autolab:\n        if len(report.individual_imports) > 0:\n            print("By uploading the .token file, you verify the files:")\n            for m in report.individual_imports:\n                print(">", m.__file__)\n            print("Are created/modified individually by you in agreement with DTUs exam rules")\n            report.pack_imports += report.individual_imports\n\n        if len(report.pack_imports) > 0:\n            print("Including files in upload...")\n            for k, m in enumerate(report.pack_imports):\n                nimp, top_package = gather_imports(m)\n                _, report_relative_location, module_import = report._import_base_relative()\n\n                # report_relative_location = os.path.relpath(inspect.getfile(report.__class__), top_package)\n                nimp[\'report_relative_location\'] = report_relative_location\n                nimp[\'report_module_specification\'] = module_import\n                nimp[\'name\'] = m.__name__\n                sources[k] = nimp\n                # if len([k for k in nimp if k not in sources]) > 0:\n                print(f" * {m.__name__}")\n                # sources = {**sources, **nimp}\n    results[\'sources\'] = sources\n\n    if output_dir is None:\n        output_dir = os.getcwd()\n\n    payload_out_base = report.__class__.__name__ + "_handin"\n\n    obtain, possible = results[\'total\']\n    vstring = "_v"+report.version if report.version is not None else ""\n\n    token = "%s_%i_of_%i%s.token"%(payload_out_base, obtain, possible,vstring)\n    token = os.path.normpath(os.path.join(output_dir, token))\n\n\n    with open(token, \'wb\') as f:\n        pickle.dump(results, f)\n\n    if not args.autolab:\n        print(" ")\n        print("To get credit for your results, please upload the single unmodified file: ")\n        print(">", token)\n        # print("To campusnet without any modifications.")\n\n        # print("Now time for some autolab fun")\n\ndef source_instantiate(name, report1_source, payload):\n    eval("exec")(report1_source, globals())\n    pl = pickle.loads(bytes.fromhex(payload))\n    report = eval(name)(payload=pl, strict=True)\n    # report.set_payload(pl)\n    return report\n\n\n__version__ = "0.0.3"\n\nfrom homework1 import find_primes\nimport homework1\n\nclass Week1(UTestCase):\n    def test_find_all_primes(self):\n        """\n        Hints:\n            * Insert a breakpoint and check what your function find_primes(4) actually outputs\n        """\n        self.assertEqual(find_primes(4), [2,3])\n\nclass Report1Hints(Report):\n    title = "CS 106 Report 1"\n    questions = [(Week1, 10)]  # Include a single question for 10 credits.\n    pack_imports = [homework1] # Unitgrade will recursively include all .py files from "cs101flat"'
+report1_payload = '80049567020000000000007d948c055765656b31947d942868018c14746573745f66696e645f616c6c5f7072696d65739486948c08636f7665726167659486947d946801680386947d948c0c686f6d65776f726b312e7079947d94288c146465662066696e645f7072696d6573286e293a20944b098cf72222220a2020202052657475726e2061206c697374206f6620616c6c207072696d657320757020746f2028616e6420696e636c7564696e6729206e0a2020202048696e74733a0a20202020202020202a2052656d656d62657220746f2072657475726e2061202a6c6973742a2028616e64206e6f742061207475706c65206f72206e756d7079206e646172726179290a20202020202020202a2052656d656d62657220746f20696e636c756465206e206966206e2069732061207072696d650a20202020202020202a2054686520666972737420666577207072696d65732061726520322c20332c20352c202e2e2e0a202020202222229486948c116465662069735f7072696d65286e293a20944b148cd02222220a2020202052657475726e207472756520696666206e2069732061207072696d650a2020202048696e74733a0a20202020202020202a2041206e756d6265722069662061207072696d6520696620697420686173206e6f2064697669736f72730a20202020202020202a20596f752063616e20636865636b206966206b2064697669646573206e207573696e6720746865206d6f64756c6f2d6f70657261746f722e20492e652e206e2025206b203d3d2054727565206966206b2064697669646573206e2e0a202020202222229486947573738c0474696d6594473fe87a010000000075732e'
+name="Report1Hints"
+
+report = source_instantiate(name, report1_source, report1_payload)
+output_dir = os.path.dirname(__file__)
+gather_upload_to_campusnet(report, output_dir)
diff --git a/examples/example_hints/students/cs106/unitgrade/Week1.pkl b/examples/example_hints/students/cs106/unitgrade/Week1.pkl
new file mode 100644
index 0000000000000000000000000000000000000000..d6664eb2af6a64e0cbc9a10323e29c1ddc673bae
GIT binary patch
literal 604
zcmZo*nHtE%00y;FdRW6#Q?m`H^oW$C7MH}QW#*;CC+6hD7ZhdYrWQ|Wo6^IPoL`n&
zl$f46rEN;>lnllUCJ^1jlaZgBTAp8&ZKzjJIi+@rMvq8JYMKJr0ElLdJWVTwDc+nt
z-<6b<xD*r=6oOJqN{jLo5*2bXi%S&p(-abOaugtn6-o;fO7ayn67y0NGV_viN>eiP
z(lr(G!1_Eg^Gb@Xz)X-aS_(m_xv9BHsYM_yMKD9PK&EOzjL6F`QAkuMDJ{rJRmd+=
z$Sch)s8q;HNh~T#tklF|5X9P4g*=7KG!Rj&kO*-clKPO0RE4z6qT&*TwA6BlY_URO
zQL2KGj)Jj{f~k&zo}M09y^@j=DD(tDfs$Da2~TK<i1b`Q3z3qd(o}`aG%VI)c-;}?
z8IadA(_rocxi_;!AtSL^AunGcC9^EEIKQYE><UP5Mdp_(Bq!!6Bxj^1XM<E{gH@%Z
z7Axc_lon^^r7M(Vq$=d*r<CU8>*g1v7A2PC7wIW@>ZR%_<SD2sWGmR(Duh5Bseq&z
L*{h|+#l?C6Diglv

literal 0
HcmV?d00001

-- 
GitLab