Skip to content

Latest commit

 

History

History
83 lines (57 loc) · 5.4 KB

CONTRIBUTING.md

File metadata and controls

83 lines (57 loc) · 5.4 KB

Notes for Yao Contributors

Hi! Welcome to Yao's quantum software community and thanks for trying Yao. Yao is a framework written in Julia language, you can find Julia tutorials on Julia's official website.

Contributor Checklist

If you are already familiar with Julia itself, and you wish to be a contributor of Yao, here are some guide on how to open a PR and get reviewed.

(v1.1) pkg> dev https://github.com/<your account>/<package name>.jl.git
  • open the .julia/dev/<package name> folder, this is the latest develop version of the package
  • Learn to use git, the version control system used by GitHub and the Yao project. Try a turtorial such as the one provided by GitHub
  • For more detailed tips, read the submission guide below.
  • Relax and Happy coding!

Submitting contributions

Writing tests

There are never enough tests. Track code coverate at Coveralls for each componenet of Yao, and help improve it.

  1. Click the coverall badage at each package's README
  2. Browse through the source files and find some untested functionality (highlighted in red) that you think you might be able to write a test for
  3. write a test that exercises this functionality---you can add your test to one of the existing files, or start a new one, whichever seems most appropriate to you. If you are adding a new test file, make sure you include it in the list of tests test/runtests.jl. stdlib/Test may be helpful in explaining how the test infrastructure works.
  4. Run test <package name> your REPL's pkg mode to run the tests
  5. Submit the test as a pull request (PR)

Improving documentation

By contribuing documentation to Yao, you are agreeing to release it under Apache License 2.0.

Yao's documentation source file are stored in docs/ directory, the docstrings are in each component packages. Documentation is built with Documenter.jl and the examples are written in Julia flavoured markdown with Weave.jl, the HTML documentation can be built locally by running

julia --project=docs docs/make.jl

from Yao's root directory.

Contributing to core functionality in Yao's Components

By contributing code to Yao, you are agreeing to release it under the Apache License 2.0

Yao uses GitHub issues of the meta package Yao.jl to track and discuss problems, feature requests. Pull requests (PR) should be submitted to related package. Yao can make pull requests for incomplete features to get code review. The convention is to prefix the pull request with "WIP:" for Work In Progress, or "RFC:" for Request for Comments when work is completed and ready for merging. This will prevent accidental merging of work that is in progress.

Core Formatting Guidelines

We currently loosely follow the official Code Formatting Guidelines, since we do not have a formatter in the CI, we do not strictly require our contributors to follow this guidelines, it is mainly depends on the reviewer.

Components of the whole Yao Project

The whole Yao project is an ecosystem of several packages, which is listed below.

Component Packages

Yao is a meta-package over several component packages, here is a cheatsheet to help you address which component package you might be interested in.

  • YaoBase Abstract interface definitions and some common tools, this includes:

    • the interface of quantum registers (marked by @interface macro)
    • custom error handling
    • common utilities including: math functions for quantum science, common constant matrices in quantum physics
  • YaoArrayRegister The implementation of quantum simulator instructions and the full amplitude simulated quantum register.

  • YaoBlocks The implementation of Yao's Quantum Block IR and some specialization for certain quantum blocks.

External Dependencies maintained by QuantumBFS

We also developed some more general tools for Yao, this includes:

  • BitBasis Types and operations for basis represented by bits in linear algebra.
  • LuxurySparse High performance extension for sparse matrices.
  • CacheServers Definition and implementation of some Cache Servers.

Packages under Early Development

  • CuYao CUDA extension for Yao
  • QuDiffEq Quantum algorithms for solving differential equations.