Contributing to NEAT

We are glad you decided to contribute to NEAT! During development please follow the contribution guidlines posted here.

Types of Contribution

Both big and small contributions to NEAT are welcome. Some ways you can contribute to NEAT are:

  • Submit feedback

  • Report bugs

  • Fix bugs

  • Improve documentation

  • Request new features

  • Contribute new algorithms

  • Implement new features

Submit Feedback

You can give your feedback on NEAT by opening an issue.

If you are proposing/requesting a new feature or new algorithm:

  • Explain in detail why the feature is needed with a demo problem that couldn’t be implemented with existing code.

  • Features that are ambitious will take time or may not be implemented at all. So, keep the scope of the feature as narrow as possible, to make it easier to implement.

  • Your contributions are always welcome!

Bug Reports

To report a bug in the package, open an issue.

Please include in your bug report:

  • Your operating system type (mac or linux) and version.

  • Pertinent details about your local setup (such as MPI and compiler info) that might be helpful in troubleshooting.

  • Steps to reproduce the bug.

Fix Bugs

Look through the GitHub issues for bugs. Anything tagged with “bug” and “help wanted” is open to whoever wants to implement it.

Implement New Features or Algorithms

First become familiar with NEAT code (at the least, the subpackage you are contributing to). Quickest way is to reach out to the developers and ask for help. NEAT enforces some code quality throught unit-tests. Have the unit tests ready to go with your code. Having few examples showcasing a problem or two solved with the new feature would be even better.

Improve Documentation

If you feel the documentation is lagging at any place, please feel free to submit a PR focused on fixing or improving the documentation. Steps to build documentation locally can be found here.

Code development Workflow

  1. Log in to GitHub and fork NEAT repository. This will create a duplicate at ‘github.com/<your_account>/neat’ which is your personal fork (or just ‘your fork’), as opposed to this repository (github.com/rogeriojorge/neat), which is conventionally referred to as upstream repository in git parlance.

  2. Clone your fork to your machine by opening a console and executing

    git clone https://github.com/<your_account>/neat.git
    

    Make sure to clone your fork, not the upstream repo. This will create a directory called NEAT. Navigate to it and execute

    git remote add upstream https://github.com/rogeriojorge/neat.git
    

    In this way, your machine will know of both your fork (which git calls origin) and the upstream repository (upstream).

  3. During development, you make changes to the code in your fork. code. To prevent frequent reinstallation of simsopt after each modification, and to reflect the changes immediately, install NEAT as editable.

    pip install -e .
    
  4. Using a new branch to start implementing your changes would be a good idea.

    git checkout -b <your_branch_name>
    
  5. Use git add and commit commands to save your changes.

    git add <your_new_file_or_modified_file>
    git commit -m "Brief message highlighting the changes implemented"
    
  6. Make sure run_tests, run_tests_mpi, and examples/run_examples all pass. Running these locally will help you to catch bugs while developing.

  7. Before submitting your changes, run autopep8 to fix formatting issues using the supplied run_autopep script. Don’t forget to run step 5, once again.

  1. Push the changes to github.

  2. Once the changes are in your fork you can submit a pull-request. PRs will only be merged if run_tests, run_tests_mpi, and examples/run_examples all pass. Request at least 1 review from the NEAT developers. The last reviewer to approve will be in charge of merging. Your contributions will be reviewed and merged to upstream repository if NEAT developers are satisfied with the code quality.