Machine Problems
================================================================

.. toctree::
   :maxdepth: 1
   :caption: Contents:

   mp1
   mp2
   mp3
   mp4
   mp5
   mp6

General MP Instructions
---------------------------

Each MP is distributed as a ZIP archive. In the ZIP archive, you will
find the following files:

* ``submitted.py`` - this is the only thing you will submit.  It
  contains several ``RuntimeError`` lines that you need to replace
  with working code.
  
* ``notebook.ipynb`` - this is provided to help you debug.  It
  doesn't need to work, but we hope that you will enjoy the MP more if
  you use this `Jupyter <https://jupyter.org/>`_ notebook to help you
  debug ``submitted.py``.  An example of how it should look, when
  everything works, will be linked from each MP's page.

* ``grade.py`` - this is the same code that the autograder runs.
  Before you submit to the autograder, please try running this on your
  own machine (``$ python grade.py``).  If it shows any errors, please
  fix them on your own machine before you try submitting to the
  autograder -- you will save a lot of time!  The autograder will run
  all of the same tests that are available to you, plus a few more
  hidden tests.

* ``data`` - this directory often contains some sample data, used by the
  notebook and the autograder.

* ``solutions.hdf5`` - this file contains solutions to the visible
  tests (but not the hidden tests).  If you want to know why
  ``grade.py`` is giving you a bad score, please compare your solution
  to the solutions provided here.  You can read this file using the
  `H5Py for Python <https://docs.h5py.org/en/stable/quick.html>`_ package.

* ``requirements.txt`` lists the python packages that are used by the
  autograder.  You can install them by typing ``pip install -r
  requirements.txt``.  WARNING: If you use any python packages that
  are not in the `python standard library
  <https://docs.python.org/3/library/index.html>`_ and that are not in
  `requirements.txt`, then your code will fail on the autograder.

How to Submit
------------------

When you're ready to submit, go to Gradescope.

* Submit **only** the one file, ``submitted.py``.
  Any other files you submit will be ignored.

* You may submit as many times as you like.  By default, we willl
  count your last submission; if you want us to grade a submission
  other than your last one, please select it using the Gradescope user
  interface.

   
MP Grading Policy
-----------------------

Machine problems are graded by the autograder.

You are allowed to submit any MP late, with a penalty: your MP grade
will be multiplied by :math:`\max(0.5,1-t/28800)`, where :math:`t` is
the lateness of your submission, in minutes.  For example, if you're
late by one day, you can earn 95% credit; if you're late by any number
of days greater than 10, you can still earn up to 50% credit.

.. warning:: Warnings about the late penalty

   * Gradescope does not show you the late penalty.  If you want to
     know what your score *really* is, you need to check Gradescope's
     ``lateness`` field, and calculate your  late penalty yourself.
     
   * The late penalty is not waived for travel, trauma, interviews,
     religious holidays, or for any illness or injury that leaves you
     with the use of your hands.  It is not waived on account of
     computer crashes; please back up your work.