Final Deliverables


Due: Saturday, December 10th 2021, 11:59 PM

Submission Instructions

Your project should be available in your private project repo in the CS107 organization.

Your submission should be in the following format:

teamXX/
├── docs
│   ├── documentation
│   ├── milestone1
│   └── milestone2
├── LICENSE
├── README.md
├── src
│   └── ...
└── ...

Note that src is a generic name used for source code containers. You may choose a different name for the directory that holds your project source code. It should be a concise name.

Software Requirements

Here are the main requirements for the final project:

  1. Working forward mode implementation
    • See the sections below for more specific details
  2. Test suite
  3. Updated / extended documentation
    • Your updated documentation will be the final package documentation.
    • Please name it documentation. Do not name it milestone3.
  4. New features

Working Forward Mode Implementation

You must have a working forward mode implementation.

Minimum Package Requirements

Minimum Implementation Requirements

The following is a description of a typical use case.

What Kinds of Functions should be Implemented?

All basic operations and elementary functions should be implemented.

Basic Operations
Comparison Operators

It is up to you which comparison operators to implement. Here are some options:

You may or may not need them. If you have nodes in a tree you may find it useful to have at least __eq__ and __ne__ for node comparison. Similarly, for dual numbers some of these operators may make sense. We will be interested to see what (if any) uses you find for these operators.

Elementary Functions

Note that the hyperbolic functions and the logistic function are arguably not elemental functions since they can be formed from the natural exponential. On the other hand, they do form a key ingredient in some algorithms (e.g. neural networks) and can therefore be considered as elemental functions. You should implement these functions.

Test Suite

You should have a test suite that preferably runs with pytest (or unittest). Your tests should be designed to run unit tests and integration tests if there are dependencies among individual units. Unit tests include class methods (dunder methods are methods of a class) and possibly overloaded functions that are part of a module. The test suite should be designed to integrate with GitHub Action workflows such that you can exploit regression testing. You should have a test harness that allows you to run all your tests easily and compute coverage reports in the same flawless manner. This harness must run for a git repo that is cloned to a local directory as well as in a container if it was run via a third party CI provider.

Your project README.md file should contain a badge showing the pass/fail status of your CI builds. The badge should show that your build is passing all tests. You should also have your code test coverage workflow setup. Your project repo should have a badge defined in the README.md file reporting a pass/fail of the test coverage based on the following criterion:

Pass if the coverage satisfies 90% or more, fail otherwise. You can implement this behavior in your coverage workflow using shell commands or write a script that is being executed in the workflow. When the criterion is met the script should return a success exit code such that the workflow succeeds. Useful commands are sed and awk. You will need to obtain the total coverage percentage by parsing an output file generated with pytest and the pytest-cov package and then process this information further to decide on the pass or fail criterion. These steps must be done in your CI setup (already done in M2).

In addition you are required to publish a GitHub page that hosts an HTML version of your code coverage results. The pytest-cov plugin can generate these sources using the --cov-report=html option. An easy way to achieve this is to use this action in your coverage workflow. If you use pytest-cov and this action you must make sure that you remove .gitignore file inside the HTML sources generated by pytest-cov before you use the publish action (otherwise the plugin will push nothing to the gh-pages branch). Your website will be accessible at https://code.harvard.edu/pages/CS107/teamXX/, where teamXX is your team ID.

Documentation

Your documentation must be complete, easy to navigate, and clear. Remember to update the Background and How to Use sections of your documentation as you add more functionality to your package, so that the user has a good understanding of what they can do. Call the final form of your documentation "documentation".

Please update and consolidate all relevant documentation from milestone1 and milestone2 and make any changes suggested by the teaching staff.

Your documentation should be a mix of text and hands-on demos. As always, it is up to you and your group to determine the best way to accomplish this (e.g. Jupyter notebook, GitHub README, Sphinx/Read the Docs).

You will receive full points as long as you have a docs/ directory and your documentation is complete. However, you may want to consider alternative ways of hosting your documentation. For example: Read the Docs or Sphinx.

Documentation Sections

The following sections should be present:

Broader Impact and Inclusivity Statement

Include a section in your documentation and in your GitHub README on Broader Impact and Inclusivity. This section should be around a 1/2 page in length and it can be the same between your documentation and your README. It should address two points:

  1. The potential broader impacts and implications of your software.
  2. How is your software inclusive to the broader community?

Broader Impact

Regarding the broader impact portion, try to think about the ways people will use or misuse your software. What are the consequences? How should people use it responsibly? Are there any ethical implications? The NeurIPS website has a number of references to get you started on thinking about this:

Software Inclusivity

In principle, there should be no barrier whatsoever for other developers to contribute to your code base. In practice, these barriers do exist and can be rather subtle. For example, are there any subtle barriers to underrepresented groups? What about working parents? What about people from different countries or non-native English speakers? Do people from rural communities feel they have something to offer? Carefully think about the code contribution process for your software project. How are pull requests being reviewed and approved? Who is reviewing and approving these requests? Python has a Diversity Statement, but it is fairly generic and contains a lot of boiler plate. Different Python groups may have more concrete policies. Can you do better?

How this will be graded

Both topics in this section are subjective and there is no perfectly correct answer. I am looking for effort and honest attempts to address these issues.

Code quality

The quality of the written code will be assessed largely based on the material of lecture 14, slides 32-42 in lecture 8, object oriented design principles (interface design of your library in addition to dunder methods) as well as lectures 3 and 4 dedicated to version control (VCS). To give you an idea what this means, here are a few practical examples:

Final Deliverables

The deliverable for the project is a video that describes all of the work done on your project throughout the semester. You are free to decide upon the format of the video yourself (with some restrictions - see below).

Some ideas include:

You may want to consider tools such as asciinema.

We won't be judging you on the quality of your camera or your video editing ability so don't worry about that. We will judge you only on the content you present. However, if the quality of the video is so poor as to prevent us from judging the quality of the work, then we will unfortunately need to deduct points.

Video Requirements

Section Minimum Length
Introduction/background 2 minutes
Implementation details/Software organization/How to use 4 minutes
Your additional feature(s) and extension 5 minutes
Future work/possible extensions 2 minutes

Video Submission instructions

Things to keep in mind

Grading Breakdown

Points Task
20 Complete forward mode functionality (see above)
15 Documentation, Test Suite & Coverage with GitHub page (see above)
4 Broader Impact Statement
20 Video Presentation
30 New Feature (see above)
15 Code quality (see above)
104 Total