Contributing guide
==================

License
-------

The source file should contains a license header. See the existing files
as the example.

Python coding style
-------------------

Changes to Python code should conform to [PEP8 Style Guide for Python
Code](https://www.python.org/dev/peps/pep-0008/).

You can use [pycodestyle](ihttps://github.com/PyCQA/pycodestyle) check the style.

C++ coding style
----------------

Changes to C++ code should conform to [Google C++ Style
Guide](https://google.github.io/styleguide/cppguide.html).

You can use cpplint to check the style and use clang-format to format
the code:

```sh
clang-format -style="{BasedOnStyle: google,            \
                      DerivePointerAlignment: false,   \
                      PointerAlignment: Right,         \
                      BinPackParameters: false}" $file
```

C++ logging guideline
---------------------

VLOG is used for verbose logging, which is configured by environment variable
`MACE_CPP_MIN_VLOG_LEVEL`. The guideline of VLOG level is as follows:

```
0. Ad hoc debug logging, should only be added in test or temporary ad hoc
   debugging
1. Important network level Debug/Latency trace log (Op run should never
   generate level 1 vlog)
2. Important op level Latency trace log
3. Unimportant Debug/Latency trace log
4. Verbose Debug/Latency trace log
```

C++ marco
----------
C++ macros should start with `MACE_`, except for most common ones like `LOG`
and `VLOG`.
