# SciPy contributor guide

This guide is designed to help you quickly find the information you need about SciPy development after you’ve reviewed the introductory material in Ways to Contribute. If you’re new to this and want to start coding ASAP, you’ve found the right place.

- Development environment - how to set up and maintain a development environment, including installing compilers and SciPy dependencies, creating a personal fork of the SciPy repository on GitHub, using git to manage a local repository with development branches, performing an in-place build of SciPy, and creating a virtual environment that adds this development version of SciPy to the Python path

- Editing SciPy - how to edit SciPy Python code, with tips on finding which module contains SciPy functionality to be edited, adding new modules to SciPy, and complying with PEP8 style standards

- Unit tests - how to write and run unit tests for SciPy with the pytest framework

- Documentation - how to write reStructuredText documentation that complies with docstring standards, build documentation locally with Sphinx, and view documentation built during continuous integration checks

- Benchmarks - how to benchmark code with airspeed velocity

- Compiled code - how to add fast, compiled code to SciPy

- Continuous Integration - how does our continuous integration system works and how to debug your PR

## Development environment

- Development environment quickerstart guide (Linux and Mac) contains just the commands you need to get started on Mac and Linux

- Development environment quickstart guide using pip on Ubuntu Linux presents an overview of setting up the development environment using pip on Linux

- Development environment quickstart guide (macOS) presents a step-by-step process for setting up a convenient SciPy development environment in macOS

- Development environment quickstart guide (Ubuntu) presents a step-by-step process for setting up a convenient SciPy development environment in Ubuntu

- Building from source on Windows presents a step-by-step process for building SciPy on Windows

- Development environment quickstart guide (Docker) presents a step-by-step process for building SciPy using Docker; if you have trouble with the instructions above, this may be your best option

- Development environment quickstart guide (Gitpod) presents a step-by-step process for using Gitpod for SciPy development; this process requires minimal setup and is newcomer friendly

- Building from sources may have some helpful hints if you need to deviate from the guides above

- Recommended development setup includes additional notes about the development setup; all of this information is contained elsewhere, but it is retained as a legacy document

## Editing SciPy

- Development workflow lays out what to do after your development environment is set up

- SciPy Development Workflow is a five-minute video example of fixing a bug and submitting a pull request

- PEP8 and SciPy gives some tips for ensuring that your code is PEP8 compliant

- Git for development is a guide to using `git`, the distributed version-control system used to manage the changes made to SciPy code from around the world

- SciPy API contains some important notes about how SciPy code is organized and documents the structure of the SciPy API; if you are going to import other SciPy code, read this first

- Reviewing Pull Requests explains how to review another author’s SciPy code locally

- NumPy Distutils - Users Guide - check this out before adding any new files to SciPy

- Adding New Methods, Functions, and Classes has information on how to add new methods, functions and classes

- SciPy Core Developer Guide has background information including how decisions are made and how a release is prepared; it’s geared toward Core Developers, but contains useful information for all contributors

## Unit tests

- Testing Guidelines is the definitive guide to writing unit tests of SciPy code

- Running SciPy Tests Locally documents `runtests.py`, a convenient script for building SciPy and running tests locally

## Documentation

- A Guide to NumPy Documentation contains everything you need to know about writing docstrings, which are rendered to produce HTML documentation using Sphinx

- Rendering Documentation with Sphinx it’s important to check how changes to the documentation render before merging a PR; this document explains how you can do that

## Benchmarks

- Benchmarking SciPy with airspeed velocity explains how to add benchmarks to SciPy using airspeed velocity

## Compiled code

- Adding Cython to SciPy extending and compiling Python code with Cython can significantly improve its performance; this document helps you get started

- Beyond Python discusses the use of C, C++, and Fortran code in SciPy

- Public Cython APIs on guidelines on exposing public Cython APIs

Development environment quickerstart guide (Linux and Mac) SciPy Roadmap