# cs107-FinalProject
CS 107 Final Project Repo

##### Group Number: 2 
##### Team Members: Aditi Memani, Zongjun Liu, Joseph Zuccarelli, Hari Raval 

### Code Coverage: 
[![codecov](https://codecov.io/gh/cs107-AHJZ/cs107-FinalProject/branch/main/graph/badge.svg?token=JA65917L6C)](https://codecov.io/gh/cs107-AHJZ/cs107-FinalProject)


### Broader Impact and Inclusivity

#### Broader Impact

Automatic differentiation is used across a plethora of different applications and it is this ubiquity and generalizability that leads it to have broad impact and consequential implications. For instance, in business, automatic differentiation is essential in analyzing the profit and loss for a company or finding the minimum amount of material that is needed to construct a new building. In physics, automatic differentiation can be used to effectively calculate the speed and distance of a moving object. In machine learning, automatic differentiation can be used via optimization techniques in order to efficiently train algorithms. With such varied applications, it becomes evident that automatic differentiation is a significant tool across many domains. 


With these many use cases, automatic differentiation certainly has positive implications on society as a whole, but it can also lead to negative consequences.  Unfortunately, automatic differentiation can be used by ill-willed or malicious companies that aim to prioritize profit over societal good. For instance, digital advertising revenues are primarily driven by collecting personal, user data and then using this data to deliberately target unsuspecting users into purchasing certain products or services. Large technology companies hence make use of automatic differentiation to create optimization techniques that are used to iteratively train robust machine learning algorithms. These algorithms can then learn an excessive amount of information about a company’s consumers. In this regard, automatic differentiation is being used to take advantage of individuals’ data and sacrifice the privacy of innocent users. As another key example of misuse, automatic differentiation is used by physicists to test and enhance weapons in order to optimize launch times and measure maximum launch heights. While the use of this method can enable such scientists to effectively and efficiently complete their calculations, their results are being used to create weapons of mass destruction that can impact millions of lives and leave permanent physical damage to the Earth and its environment.


With these impacts and implications in mind, we urge the users of our library to proceed with caution. We have designed our code in a way to enable generalizability and usefulness across a wide range of applications, however we urge developers to be aware and careful when working with automatic differentiation. While much good can be brought to society through the use of our library, an equal amount of harm can also result through careless or inconsiderate use cases. To prevent the latter, it is important that all users understand the theory and practical purpose of automatic differentiation, some of its many use cases, and its approach to computing derivatives. We outline all of these matters in our library documentation.

#### Inclusivity 

To make our package as inclusive as possible to the broader community, we have distributed it on PyPI. PyPI allows anyone with access to a computer with internet connectivity to download our package for free. In order to further increase accessibility, we plan on making our Github repository public so that we can enable our package to be accessible to a broader community that can make code contributions.


Our second step towards increasing accessibility and inclusivity of our package is through our documentation and code comments. We have written all our documentation and comments in standard English, which is the primary medium of communication for the core code contributors. We avoided the use of abbreviations, slang terms, and unclear language to ensure that our text does not become a barrier to inclusivity. If our package is expanded further in the future, we hope to provide support for a few other primary languages such as Spanish and French. For all other languages, we hope users will be able to make use of well-known translators such as Google Translate. 


Our third step towards inclusivity pertains to open-sourceness. Our software is open source and this enables anyone to create a pull request and hence share their thoughts and code pertaining to the direction our package should take as it evolves. We make a commitment to evaluate any pull requests “blindly”. In other words, we will not use a Github user’s username, gender, legal name, nick-name or any other personal information to evaluate a pull request. This approach ensures that we are avoiding any discrimination and are purely evaluating requests based on their code quality. 