Due Date

The due date is December 12th 2020 at 12:00 PM (noon).

The final project showcase will take place during the Final Exam Period.

Milestone Statements

Course Project: Overview

The Goal

You will develop a software library for a client (the teaching staff). The development of this library will leverage modern software development practices covered in the course. By the end of the semester, the client should be able to easily install and run your package.

The Topic

The project topic is automatic differentiation (AD). AD is a very broad area spanning computer science and mathematics with applications in fields across science and engineering. We will only briefly graze the surface of this fascinating technique; indeed, AD is broad enough that it could form an entire course in its own right.
Even so, your final project is to write a python automatic differentiation library. Your library is not required to contain all aspects of AD; that would simply be too much for a single semester. However, your library should meet the basic project expectations outlined in the following sections.


You will work in groups of 3-4 students. The teaching staff will assign you to groups. Some members of the group will be stronger than others. It is expected that you work together and help each other out as needed. This is an opportunity for less experienced coders to drastically improve by working with more experienced coders. On the other hand, the more experienced coders will gain valuable experience in guiding a small development team. Every person must contribute. No single person should dominate the group.


This project has a few non-negotiable expectations, which are outlined in basic expectations. The project also has a more open-ended component, which is described in additional expectations.

Basic Expectations:

Additional Expectations

AD is extremely versatile. It finds applications in optimization, machine learning, and numerical methods (e.g. time integration, root-finding). There are also many different ways of implementing an AD package. In addition to the base-requirment of writing a forward mode AD library, you must also extend your package in some way. There are many options here and the teaching staff will have to approve your proposed extension. Here are a few general ideas (you will need to specialize them):

Note: If you elect to write an application that uses your AD library, then you must speak to the teaching staff first. There are certain instances where it might make sense to package your application together with your AD library (e.g. pytorch). However, it may be a better idea to keep the two libraries separate. In such a case, the teaching staff will need to approve your proposed extention and assess its efficacy.

You are more than welcome to pitch your own idea.

Broader Impact

You must write a broader impact statement for your library. The broader impact should consider the accessibility of your software library to different groups of people. This statement should be around 250 words (approximately 1/2 page). It can be placed in the of your library. Things to consider when writing this statement are: 1. How will you make your library accessible to different groups? 2. What process will contributions to your library need to go through? 3. How will you ensure that this process is fair and welcoming to all groups?