# Introduction to Contributing

SymPy is created and maintained by a large group of contributors and we'd love you to be one of them too! Getting started in a well-oiled large and complex machine like SymPy can be daunting for new contributors. This page exists to give tips for new contributors to get started.

## Get familiar using the software

We suggest going through the [SymPy Tutorial](intro-tutorial) to get acquainted with using the software before you begin contributing. This will help you to familiarize yourself with the uses of SymPy.

The tutorial is also available on video:

- [Symbolic Computation with Python using SymPy | SciPy 2016](https://www.youtube.com/watch?v=AqnpuGbM6-Q)
- SymPy Tutorial SciPy 2014 [Part 1](https://www.youtube.com/watch?v=Lgp442bibDM) [Part 2](https://www.youtube.com/watch?v=_PTe10whFKo) [Part 3](https://www.youtube.com/watch?v=qleGSnrnxgc)

## Read the paper

We authored a journal paper in 2017 that provides a high-level look at SymPy and its capabilities. You can read it here:

https://peerj.com/articles/cs-103/

## Peruse the documentation

Besides the tutorial, there is a lot more information in the [documentation](documentation). It's probably a good idea to at least browse through the different topics to get an idea of what else is available.

## Review the Code of Conduct

Participants in the SymPy community are expected to abide by our [Code of Conduct](https://github.com/sympy/sympy/blob/master/CODE_OF_CONDUCT.md). Please review this before getting started.

## Join our mailing list

The [SymPy email mailing list](https://groups.google.com/forum/#!forum/sympy)
is one place where discussions about SymPy happen. You can ask questions about
how to use SymPy, discuss feature requests, discuss software bugs, or share
how you are using SymPy. Request to join the list on the Google Groups page.
Note that to prevent spam, the first time you post your message will need to
be moderated before it is posted to the list. Please read
http://shakthimaan.com/downloads/book/chapter1.pdf before posting to get
familiar with mailing list etiquette.

## Setup your development environment

We use the [Git](http://git-scm.com) version control system to track the
software [changes over time](https://github.com/sympy/sympy/commits/master)
and to effectively manage [contributions from many different
authors](https://github.com/sympy/sympy/network). We also utilize GitHub, a
web interface to Git, extensively and use it for communication, issue
tracking, merging contributions (i.e., pull requests), etc.

If you are new to Git and GitHub, read through the [](devsetup) page first for
instructions on how to set up your development environment. If you are already
familiar with the basic GitHub workflow, the [](workflow-process) page
describes the aspects of the GitHub contribution workflow that are specific to
SymPy.

## Identify something to work on

There are lots of ways to contribute to SymPy. Most contributions center
around fixing software bugs and adding new features for things that are
interesting to them. But there are other things we need help with too, like
maintaining our websites, writing documentation, preparing tutorials,
answering people's questions on the mailing lists, chat room, StackOverflow,
and issue tracker, and reviewing pull requests. Here are some following ways
to get started with a contribution:

### SymPy Codebase

The best way to start with the main codebase is to fix some existing bugs. If
you are looking for a bug to fix, you can start by looking at the issues
labeled ["Easy to
fix"](https://github.com/sympy/sympy/issues?q=is%3Aopen+is%3Aissue+label%3A%22Easy+to+Fix%22)
in the issue tracker and see if one interests you. If it isn't clear how to
fix it, ask for suggestions on how to do it in the issue itself or on the
mailing list.

SymPy's code is organized into Python packages and modules. The core code is
in the `sympy/core` directory and other packages in the `sympy` directory have
more specific code, for example `sympy/printing` handles how SymPy objects are
printed to the terminal and Jupyter.

### Documentation

SymPy's documentation lives in two places:

1. The documentation source files: https://github.com/sympy/sympy/tree/master/doc/src
2. The docstrings* of the functions in the source code: https://github.com/sympy/sympy/tree/master/sympy

Both of these end up displayed here on the documentation website. You can
click the "[Source]" link next to any function documentation to go to its
corresponding docstring in the SymPy source code.

\* Every function and class in SymPy has a string below call signature explaining the use of the object. This is what is displayed in Python when you type `help(function_name)`.

While contributing to or improving upon our documentation, please follow the [SymPy Documentation Style Guide](documentation-style-guide).

### Review pull requests

Every contribution to SymPy goes through a pull request
https://github.com/sympy/sympy/pulls. We require that every pull request
undergo a review before it can be merged. If you have gained some familiarity
with a part of the SymPy codebase and the SymPy development processes, it can
be helpful to the community to review others' pull requests. You can view the
code submission and check whether it does what it is intended to do.
