Highlights:
- **Examples**
- Fix rounding error for cornell_box.py (1908) (by **蕉太狼**)
- **Language and syntax**
- Add ti.materialize_callback for functions to be called right after root materialization (1912) (by **彭于斌**)
Full changelog:
- [doc] Guard values with "ti.approx" in "docs/write_test.rst" to allow FP-error tolerance (1911) (by **Tony**)
- [Lang] Add ti.materialize_callback for functions to be called right after root materialization (1912) (by **彭于斌**)
- [metal] Fix error message (1916) (by **Ye Kuang**)
- [async] Support SFG-level DSE for scalar SNodes (1907) (by **Ye Kuang**)
- [Example] Fix rounding error for cornell_box.py (1908) (by **蕉太狼**)
- [async] Add advection benchmark (1914) (by **Yuanming Hu**)
- [example] Update mpm_lagrangian_forces.py (1910) (by **Yuanming Hu**)
- [doc] Use "atan2(y, x)" instead of "atan2(x, y)" (1816) (1903) (by **Tony**)
- [metal] Add KernelManagerData in prep for pointer SNode (1895) (by **Ye Kuang**)
- [perf] Wrap clear loss/grad into a kernel (1902) (by **Ye Kuang**)