Highlights:
- **Bug fixes**
- Use sys.getfilesystemencoding() to prevent possible locale errors (1775) (by **彭于斌**)
- **C source backend**
- Support AdStack on C backend (1752) (by **彭于斌**)
- **Documentation**
- Add how to set environment variables for fish users (1800) (by **Luyu Cheng**)
- Separate arithmetics.rst from syntax.rst and fill it with more details (1761) (by **彭于斌**)
- **Examples**
- Fix stable_fluid.py boundary broken: int -> ti.floor, and make mpm3d.py 3x faster on CUDA (1784) (by **彭于斌**)
- **Language and syntax**
- Support formatted string with args in assert (1806) (by **Ye Kuang**)
- Support printing lists and tuples in Taichi-scope (1796) (by **彭于斌**)
- Add ti.get_rel_eps() for maximal relative error tolerance on current backend (1798) (by **Ye Kuang**)
- Support querying external array shape by 'x.shape' (1787) (by **thinking-tower**)
- **IR optimization passes**
- Make irpass::replace_all_usages_with bottom-up (1789) (by **xumingkuan**)
Full changelog:
- [misc] Remove unused code/comments in transforms/simpilfy.cpp (1812) (by **Yuanming Hu**)
- [ir] Fix irpass::analysis::clone on TLS/BLS prologue/epilogue (1811) (by **Yuanming Hu**)
- [error] "Better error message when vector used as if's condition variable (1804)" (1810) (by **彭于斌**)
- [Lang] Support formatted string with args in assert (1806) (by **Ye Kuang**)
- [refactor] Replace std::map with switch case statements in lang_util.cpp (1755) (by **Aryan Soman**)
- [misc] Revert "Better error message when vector used as if's condition variable (1804)" (1808) (by **Yuanming Hu**)
- [error] Better error message when vector used as if's condition variable (1804) (by **彭于斌**)
- [Opt] Make irpass::replace_all_usages_with bottom-up (1789) (by **xumingkuan**)
- [Doc] Add how to set environment variables for fish users (1800) (by **Luyu Cheng**)
- [CC] [autodiff] Support AdStack on C backend (1752) (by **彭于斌**)
- [Lang] Support printing lists and tuples in Taichi-scope (1796) (by **彭于斌**)
- [workflow] import missing package sys in code_format.py (1802) (by **Luyu Cheng**)
- [cli] Add path to Python executable to 'ti diagnose' (1801) (by **Luyu Cheng**)
- [refactor] Remove the singleton Program::context (1799) (by **Ye Kuang**)
- [ir] Restore verification for OffloadedStmt (1790) (by **xumingkuan**)
- [Lang] [test] Add ti.get_rel_eps() for maximal relative error tolerance on current backend (1798) (by **Ye Kuang**)
- [Lang] [ir] Support querying external array shape by 'x.shape' (1787) (by **thinking-tower**)
- [workflow] Travis CI only test Python 3.6 unless release tag is used (1793) (by **彭于斌**)
- [refactor] Move Context to taichi/program (1788) (by **Ye Kuang**)
- [doc] Better clarify the difference between two profilers (1759) (by **彭于斌**)
- [ir] [autodiff] Initialize ADStack with a zero (1791) (by **Yuanming Hu**)
- [ir] [opt] Unify ifloordiv implementation over backends in demote_operations (1771) (by **彭于斌**)
- [Bug] [misc] Use sys.getfilesystemencoding() to prevent possible locale errors (1775) (by **彭于斌**)
- [Example] Fix stable_fluid.py boundary broken: int -> ti.floor, and make mpm3d.py 3x faster on CUDA (1784) (by **彭于斌**)
- [test] Expand the tolerance for testing on metal backend (1779) (by **Xudong Feng**)
- [opt] Simplify identical load elimination (1782) (by **xumingkuan**)
- [error] [opengl] Better error message when int64 or sparse SNode not supported for OpenGL (1783) (by **彭于斌**)
- [Doc] Separate arithmetics.rst from syntax.rst and fill it with more details (1761) (by **彭于斌**)
- [ipython] Separate {Expr,Matrix}.{__str__,__repr__} to prevent unexpected materialization when repr (1766) (by **彭于斌**)
- [async] Support constant folding in async mode (1778) (by **Ye Kuang**)
- [workflow] [cli] Improve coverage of 'ti format' and 'ti format_all' (1768) (by **彭于斌**)
- [misc] Add "make_block_local" option to "CompileConfig" (1727) (by **Yuanming Hu**)