Taichi

Latest version: v1.7.2

Safety actively analyzes 685670 Python packages for vulnerabilities to keep your Python projects secure.

Scan your dependencies

Page 7 of 23

0.9.2

Highlights:
- **CI/CD workflow**
- Generate manylinux2014-compatible wheels with CUDA backend in release workflow (4550) (by **Yi Xu**)
- **Command line interface**
- Fix a few bugs in taichi gallery command (4548) (by **Zhao Liang**)
- **Documentation**
- Fixed broken links. (4563) (by **Vissidarte-Herman**)
- Refactored README.md (4549) (by **Vissidarte-Herman**)
- Create CODE_OF_CONDUCT (4564) (by **notginger**)
- Update syntax.md (4557) (by **Vissidarte-Herman**)
- Update docstring for ndrange (4486) (by **Zhao Liang**)
- Minor updates: It is recommended to type hint arguments and return values (4510) (by **Vissidarte-Herman**)
- Refactored Kernels and functions. (4496) (by **Vissidarte-Herman**)
- Add initial variable and fragments (4457) (by **Justin**)
- **Language and syntax**
- Add taichi gallery command for user to choose and run example in gui (4532) (by **TiGeekMan**)
- Add ti.serialize and ti.loop_config (4525) (by **Lin Jiang**)
- Support simple matrix slicing (4488) (by **Xiangyun Yang**)
- Remove legacy ways to construct matrices (4521) (by **Yi Xu**)

Full changelog:
- [lang] Replace keywords in python (4606) (by **Jiasheng Zhang**)
- [lang] Fix py36 block_dim bug (4601) (by **Jiasheng Zhang**)
- [ci] Fix release script bug (4599) (by **Jiasheng Zhang**)
- [aot] Support return in vulkan aot (4593) (by **Ailing**)
- [ci] Release script add test for tests/python/examples (4590) (by **Jiasheng Zhang**)
- [misc] Write version info right after creation of uuid (4589) (by **Jiasheng Zhang**)
- [gui] Make GGUI VBO configurable (4575) (by **Ye Kuang**)
- [test] Fix ill-formed test_binary_func_ret (4587) (by **Yi Xu**)
- Update differences_between_taichi_and_python_programs.md (4583) (by **Vissidarte-Herman**)
- [misc] Fix a few warnings (4572) (by **Ye Kuang**)
- [aot] Remove redundant module_path argument (4573) (by **Ailing**)
- [bug] [opt] Fix some bugs when deal with real function (4568) (by **Xiangyun Yang**)
- [build] Guard llvm usage inside TI_WITH_LLVM (4570) (by **Ailing**)
- [aot] [refactor] Add make_new_field for Metal (4559) (by **Bo Qiao**)
- [llvm] [lang] Add support for multiple return statements in real function (4536) (by **Lin Jiang**)
- [test] Add test for offline-cache (4562) (by **PGZXB**)
- Format updates (4567) (by **Vissidarte-Herman**)
- [aot] Add KernelTemplate interface (4558) (by **Ye Kuang**)
- [test] Eliminate the warnings in test suite (4556) (by **Frost Ming**)
- [Doc] Fixed broken links. (4563) (by **Vissidarte-Herman**)
- [Doc] Refactored README.md (4549) (by **Vissidarte-Herman**)
- [Doc] Create CODE_OF_CONDUCT (4564) (by **notginger**)
- [misc] Reset counters in Program::finalize() (4561) (by **PGZXB**)
- [misc] Add TI_CI env to CI/CD (4551) (by **Jiasheng Zhang**)
- [ir] Add basic tests for Block (4553) (by **Ye Kuang**)
- [refactor] Fix error message (4552) (by **Ye Kuang**)
- [Doc] Update syntax.md (4557) (by **Vissidarte-Herman**)
- [gui] Hack to make GUI.close() work on macOS (4555) (by **Ye Kuang**)
- [aot] Fix get_kernel API semantics (4554) (by **Ye Kuang**)
- [opt] Support offline-cache for kernel with arch=cpu (4500) (by **PGZXB**)
- [CLI] Fix a few bugs in taichi gallery command (4548) (by **Zhao Liang**)
- [ir] Small optimizations to codegen (4442) (by **Bob Cao**)
- [CI] Generate manylinux2014-compatible wheels with CUDA backend in release workflow (4550) (by **Yi Xu**)
- [misc] Metadata update (4539) (by **Jiasheng Zhang**)
- [test] Parametrize the test cases with pytest.mark (4546) (by **Frost Ming**)
- [Doc] Update docstring for ndrange (4486) (by **Zhao Liang**)
- [build] Default symbol visibility to hidden for all targets (4545) (by **Gabriel H**)
- [autodiff] Handle multiple, mixed Independent Blocks (IBs) within multi-levels serial for-loops (4523) (by **Mingrui Zhang**)
- [bug] [lang] Cast the arguments of real function to the desired types (4538) (by **Lin Jiang**)
- [Lang] Add taichi gallery command for user to choose and run example in gui (4532) (by **TiGeekMan**)
- [bug] Fix bug that calling std::getenv when cpp-tests running will fail (4537) (by **PGZXB**)
- [vulkan] Fix performance (4535) (by **Bob Cao**)
- [Lang] Add ti.serialize and ti.loop_config (4525) (by **Lin Jiang**)
- [Lang] Support simple matrix slicing (4488) (by **Xiangyun Yang**)
- Update vulkan_api.cpp (4533) (by **Bob Cao**)
- [lang] Quick fix for mesh_local analyzer (4529) (by **Chang Yu**)
- [test] Show arch info in the verbose test report (4528) (by **Frost Ming**)
- [aot] Add binding_id of root/gtmp/rets/args bufs to CompiledOffloadedTask (4522) (by **Ailing**)
- [vulkan] Relax a few test precisions for vulkan (4524) (by **Ailing**)
- [build] Option to use LLD (4513) (by **Bob Cao**)
- [misc] [linux] Implement XDG Base Directory support (4514) (by **ruro**)
- [Lang] [refactor] Remove legacy ways to construct matrices (4521) (by **Yi Xu**)
- [misc] Make result of irpass::print hold more information (4517) (by **PGZXB**)
- [refactor] Misc improvements over AST helper functions (4398) (by **daylily**)
- [misc] [build] Bump catch external library 2.13.3 -> 2.13.8 (4516) (by **ruro**)
- [autodiff] Reduce the number of ad stack using knowledge of derivative formulas (4512) (by **Mingrui Zhang**)
- [ir] [opt] Fix a bug about 'continue' stmt in cfg_build (4507) (by **Xiangyun Yang**)
- [Doc] Minor updates: It is recommended to type hint arguments and return values (4510) (by **Vissidarte-Herman**)
- [ci] Fix the taichi repo name by hardcode (4506) (by **Frost Ming**)
- [build] Guard dx lib search with TI_WITH_DX11 (4505) (by **Ailing**)
- [ci] Reduce the default device memory usage for GPU tests (4508) (by **Bo Qiao**)
- [Doc] Refactored Kernels and functions. (4496) (by **Vissidarte-Herman**)
- [aot] [refactor] Refactor AOT field API for Vulkan (4490) (by **Bo Qiao**)
- [ci] Fix: fill in the pull request body created by bot (4503) (by **Frost Ming**)
- [ci] Skip in steps rather than the whole job (4499) (by **Frost Ming**)
- [ci] Add a Dockerfile for building manylinux2014-compatible Taichi wheels with CUDA backend (4491) (by **Yi Xu**)
- [ci] Automate release publishing (4428) (by **Frost Ming**)
- [fix] dangling ti.func decorator in euler.py (4492) (by **Zihua Wu**)
- [ir] Fix a bug in simplify pass (4489) (by **Xiangyun Yang**)
- [test] Add test for recursive real function (4477) (by **Lin Jiang**)
- [Doc] Add initial variable and fragments (4457) (by **Justin**)
- [misc] Add a convenient script for testing compatibility of Taichi releases. (4485) (by **Chengchen(Rex) Wang**)
- [misc] Version bump: v0.9.1 -> v0.9.2 (4484) (by **Chengchen(Rex) Wang**)
- [ci] Update gpu docker image to test python 3.10 (4472) (by **Bo Qiao**)

0.9.1

Highlights:
- **CI/CD workflow**
- Cleanup workspace before window test (4405) (by **Jian Zeng**)
- **Documentation**
- Update docstrings for functions in ops (4465) (by **Zhao Liang**)
- Update docstring for functions in misc (4474) (by **Zhao Liang**)
- Update docstrings in misc (4446) (by **Zhao Liang**)
- Update docstring for functions in operations (4427) (by **Zhao Liang**)
- Update PyTorch interface documentation (4311) (by **Andrew Sun**)
- Update docstring for functions in operations (4413) (by **Zhao Liang**)
- Update docstring for functions in operations (4392) (by **Zhao Liang**)
- Fix broken links (4368) (by **Ye Kuang**)
- Re-structure the articles: getting-started, gui (4360) (by **Ye Kuang**)
- **Error messages**
- Add error message when the number of elements in kernel arguments exceed (4444) (by **Xiangyun Yang**)
- Add error for invalid snode size (4460) (by **Lin Jiang**)
- Add error messages for wrong type annotations of literals (4462) (by **Yi Xu**)
- Remove the mentioning of ti.pyfunc in the error message (4429) (by **Lin Jiang**)
- **Language and syntax**
- Support sparse matrix builder datatype configuration (4411) (by **Peng Yu**)
- Support type annotations for literals (4440) (by **Yi Xu**)
- Support simple matrix slicing (4420) (by **Xiangyun Yang**)
- Support kernel to return a matrix type value (4062) (by **Xiangyun Yang**)
- **Vulkan backend**
- Enable Vulkan device selection when using cuda (4330) (by **Bo Qiao**)

Full changelog:
- [bug] [llvm] Initialize the field to 0 when finalizing a field (4463) (by **Lin Jiang**)
- [Doc] Update docstrings for functions in ops (4465) (by **Zhao Liang**)
- [Error] Add error message when the number of elements in kernel arguments exceed (4444) (by **Xiangyun Yang**)
- [Doc] Update docstring for functions in misc (4474) (by **Zhao Liang**)
- [metal] Support device memory allocation/deallocation (4439) (by **Ye Kuang**)
- update docstring for exceptions (4475) (by **Zhao Liang**)
- [llvm] Support real function with single scalar return value (4452) (by **Lin Jiang**)
- [refactor] Remove LLVM logic from the generic Device interface (4470) (by **PGZXB**)
- [lang] Add decorator ti.experimental.real_func (4458) (by **Lin Jiang**)
- [ci] Add python 3.10 into nightly test and release (4467) (by **Bo Qiao**)
- [bug] Fix metal linker error when TI_WITH_METAL=OFF (4469) (by **Bo Qiao**)
- [Lang] Support sparse matrix builder datatype configuration (4411) (by **Peng Yu**)
- [Error] Add error for invalid snode size (4460) (by **Lin Jiang**)
- [aot] [refactor] Refactor AOT runtime API to use module (4437) (by **Bo Qiao**)
- [misc] Optimize verison check (4461) (by **Jiasheng Zhang**)
- [Error] Add error messages for wrong type annotations of literals (4462) (by **Yi Xu**)
- [misc] Remove some warnings (4453) (by **PGZXB**)
- [refactor] Move literal construction to expr module (4448) (by **Yi Xu**)
- [bug] [lang] Enable break in the outermost for not in the outermost scope (4447) (by **Lin Jiang**)
- [Doc] Update docstrings in misc (4446) (by **Zhao Liang**)
- [llvm] Support real function which has scalar arguments (4422) (by **Lin Jiang**)
- [Lang] Support type annotations for literals (4440) (by **Yi Xu**)
- [misc] Remove a unnecessary function (4443) (by **PGZXB**)
- [metal] Expose BufferMemoryView (4432) (by **Ye Kuang**)
- [Lang] Support simple matrix slicing (4420) (by **Xiangyun Yang**)
- [Doc] Update docstring for functions in operations (4427) (by **Zhao Liang**)
- [metal] Add Unified Device API skeleton code (4431) (by **Ye Kuang**)
- [refactor] Refactor llvm-offloaded-task-name mangling (4418) (by **PGZXB**)
- [Doc] Update PyTorch interface documentation (4311) (by **Andrew Sun**)
- [misc] Add deserialization tool for benchmarks (4278) (by **rocket**)
- [misc] Add matrix operations to micro-benchmarks (4190) (by **rocket**)
- [Error] Remove the mentioning of ti.pyfunc in the error message (4429) (by **Lin Jiang**)
- [metal] Add AotModuleLoader (4423) (by **Ye Kuang**)
- [Doc] Update docstring for functions in operations (4413) (by **Zhao Liang**)
- [vulkan] Support templated kernel in aot module (4417) (by **Ailing**)
- [vulkan] [aot] Add aot namespace Vulkan (4419) (by **Bo Qiao**)
- [Lang] Support kernel to return a matrix type value (4062) (by **Xiangyun Yang**)
- [test] Add a test for the ad_gravity example (4404) (by **FZC**)
- [Doc] Update docstring for functions in operations (4392) (by **Zhao Liang**)
- [CI] Cleanup workspace before window test (4405) (by **Jian Zeng**)
- [build] Enforce compatibility with manylinux2014 when TI_WITH_VULKAN=OFF (4406) (by **Yi Xu**)
- [ci] Update tag to projects (4400) (by **Bo Qiao**)
- [ci] Reduce test parallelism for m1 (4394) (by **Bo Qiao**)
- [aot] [vulkan] Add AotKernel and its Vulkan impl (4387) (by **Ye Kuang**)
- [vulkan] [aot] Move add_root_buffer to public members (4396) (by **Gabriel H**)
- [llvm] Remove LLVM functions related to a SNode tree from the module when the SNode tree is destroyed (4356) (by **Lin Jiang**)
- [test] disable serveral workflows on forks (4393) (by **Jian Zeng**)
- [ci] Windows build exits on the first error (4391) (by **Bo Qiao**)
- [misc] Upgrade test and docker image to support python 3.10 (3986) (by **Bo Qiao**)
- [aot] [vulkan] Output shapes/dims to AOT exported module (4382) (by **Gabriel H**)
- [test] Merge the py38 only cases into the main test suite (4378) (by **Frost Ming**)
- [vulkan] Refactor Runtime to decouple the SNodeTree part (4380) (by **Ye Kuang**)
- [lang] External Ptr alias analysis & demote atomics (4273) (by **Bob Cao**)
- [example] Fix implicit_fem example command line arguments (4372) (by **bx2k**)
- [mesh] Constructing mesh from data in memory (4375) (by **bx2k**)
- [refactor] Move aot_module files (4374) (by **Ye Kuang**)
- [test] Add test for exposed top-level APIs (4361) (by **Yi Xu**)
- [refactor] Move arch files (4373) (by **Ye Kuang**)
- [build] Build with Apple clang-13 (4370) (by **Ailing**)
- [test] [example] Add a test for print_offset example (4355) (by **Zhi Qi**)
- [test] Add a test for the game_of_life example (4365) (by **0xzhang**)
- [test] Add a test for the nbody example (4366) (by **0xzhang**)
- [Doc] Fix broken links (4368) (by **Ye Kuang**)
- [ci] Run vulkan and metal separately on M1 (4367) (by **Ailing**)
- [Doc] Re-structure the articles: getting-started, gui (4360) (by **Ye Kuang**)
- [Vulkan] Enable Vulkan device selection when using cuda (4330) (by **Bo Qiao**)
- [misc] Version bump: v0.9.0->v0.9.1 (4363) (by **Ailing**)
- [dx11] Materialize runtime, map and unmap (4339) (by **quadpixels**)

0.9.0

Highlights

New features

1. Dynamic indexing of matrices (experimental)

In previous versions of Taichi, a matrix can be accessed only with a *constant* index. As a result, you cannot perform operations such as clamp the minimum element in a vector to 0:

Python
ti.kernel
def clamp():
... assume we have a n-d vector A
min_index = 0
for i in range(n):
if A[i] < A[min_index]:
min_index = i
A[min_index] = 0


Of course, you may use the following workaround leveraging loop unrolling. It is, however, neither intuitive nor efficient:

Python
ti.kernel
def clamp():
... assume we have a n-d vector A
min_index = 0
for i in ti.static(range(n)):
if A[i] < A[min_index]:
min_index = i
for i in ti.static(range(n)):
if i == min_index:
A[i] = 0


With this new experimental feature of dynamic indexing of matrices, you can now run the former code snippet smoothly. The feature can be enabled by setting `ti.init(dynamic_index=True)`.

In v0.9.0, a new implicit FEM (Finite Element Method) example (https://github.com/taichi-dev/taichi/blob/master/python/taichi/examples/simulation/implicit_fem.py) is added, which also illustrates the benefit of having this feature. In this example, a huge (12 &times; 12) Hessian matrix is constructed for implicit time integration. Without dynamic indexing, the whole matrix construction loop needs to be unrolled, which takes 70 seconds to compile; with dynamic indexing, a traditional loop version can be applied, and the compilation time is shortened to 2.5 seconds.

2. Vulkan backend on macOS

Adds support for the `ti.vulkan` backend on macOS 10.15+ and now you can run GGUI on your macBook. Run the following GGUI examples to try for yourself.

Apache
prerequisites: taichi >= v0.9.0 and macOS >= 10.15
run GGUI examples
ti example fractal3d_ggui
ti example fem128_ggui


3. Compatibility with Google Colab

The system would crash if you run Taichi of an earlier version in the Google Colab notebook environment (see [235](https://github.com/taichi-dev/taichi/issues/235) for more information). In this release, we refactored our compiler implementation so that Taichi is compatible with Google Colab.

Feel free to run `!pip install taichi` to install Taichi and start your Colab journey with it.

Improvements

1. More stabilized, better-organized APIs

Ensuring the developers use the right set of APIs is critical to the long-term stability of Taichi's APIs. In this release, we started to reorganize its package structure and deprecate some obsolete or internal APIs. The following table lists some critical APIs that may concern you.

| **Category** | **Deprecated** **API** | **Replaced with** |
| --------------------- | -------------------------------- | ------------------------------------------ |
| **Builtin** | `max()` | `ti.max()` |
| **Builtin** | `min()` | `ti.min()` |
| **Atomic operation** | `obj.atomic_add()` | `ti.atomic_add()` |
| **Image-specific** | `ti.imread()` | `ti.tools.imread()` |
| **Image-specific** | `ti.imwrite()` | `ti.tools.imwrite()` |
| **Image-specific** | `ti.imshow()` | `ti.tools.imshow()` |
| **Profiler-specific** | `ti.print_profile_info()` | `ti.profiler.print_scoped_profiler_info()` |
| **Profiler-specific** | `ti.print_kernel_profile_info()` | `ti.profiler.print_kernel_profiler_info()` |

> For a representative list of APIs deprecated in this release, see [this Google doc](https://docs.google.com/spreadsheets/d/1FMECCsPMVDjzFN9p3Xy2e4CaA-ru9-lIHb1if-7zgLY/edit#gid=0).

2. Better error reporting

Lengthy traceback in an error report, for most of the time, can be distracting, making it hard to locate the code causing the error. In this release, we've removed the trivial traceback that does not concern developers in our error reporting to improve the debugging experience.

Taking the following code snippet as an example:

Python
import taichi as ti

ti.init()

ti.func
def bar(a):
a = a + 2j

ti.kernel
def foo():
bar(1)

foo()


Before v0.9.0, the error message looks like this:

Plain%20Text
[Taichi] Starting on arch=x64
Traceback (most recent call last):
File "error.py", line 13, in <module>
foo()
File "/path_to_taichi/lang/kernel_impl.py", line 709, in wrapped
return primal(*args, **kwargs)
File "/path_to_taichi/lang/kernel_impl.py", line 636, in __call__
key = self.ensure_compiled(*args)
File "/path_to_taichi/lang/kernel_impl.py", line 627, in ensure_compiled
self.materialize(key=key, args=args, arg_features=arg_features)
File "/path_to_taichi/lang/kernel_impl.py", line 493, in materialize
taichi_kernel = _ti_core.create_kernel(taichi_ast_generator,
File "/path_to_taichi/lang/kernel_impl.py", line 488, in taichi_ast_generator
compiled()
File "error.py", line 11, in foo
bar(1)
File "/path_to_taichi/lang/kernel_impl.py", line 76, in decorated
return fun.__call__(*args)
File "/path_to_taichi/lang/kernel_impl.py", line 156, in __call__
ret = self.compiled(*args)
File "error.py", line 7, in bar
a = a + 2j
File "/path_to_taichi/lang/common_ops.py", line 16, in __add__
return ti.add(self, other)
File "/path_to_taichi/lang/ops.py", line 78, in wrapped
return imp_foo(a, b)
File "/path_to_taichi/lang/ops.py", line 63, in imp_foo
return foo(x, y)
File "/path_to_taichi/lang/ops.py", line 427, in add
return _binary_operation(_ti_core.expr_add, _bt_ops_mod.add, a, b)
File "/path_to_taichi/lang/ops.py", line 173, in _binary_operation
a, b = wrap_if_not_expr(a), wrap_if_not_expr(b)
File "/path_to_taichi/lang/ops.py", line 36, in wrap_if_not_expr
return Expr(a) if not is_taichi_expr(a) else a
File "/path_to_taichi/lang/expr.py", line 33, in __init__
self.ptr = impl.make_constant_expr(arg).ptr
File "/path_to_taichi/lang/util.py", line 196, in wrapped
return func(*args, **kwargs)
File "/path_to_taichi/lang/impl.py", line 414, in make_constant_expr
raise ValueError(f'Invalid constant scalar expression: {type(val)}')
ValueError: Invalid constant scalar expression: <class 'complex'>


In v0.9.0, the error message looks like this:

Plain%20Text
Traceback (most recent call last):
File "/path_to_test/error.py", line 13, in <module>
foo()
File "/path_to_taichi/lang/kernel_impl.py", line 732, in wrapped
raise type(e)('\n' + str(e)) from None
taichi.lang.exception.TaichiTypeError:
On line 11 of file "/path_to_test/error.py", in foo:
bar(1)
^^^^^^
On line 7 of file "/path_to_test/error.py", in bar:
a = a + 2j
^^^^^^
Invalid constant scalar data type: <class 'complex'>


3. Revamped Taichi's documentation site

To improve the readability and user-friendliness of our documentation, we restructured [Taichi's documentation site](https://docs.taichi.graphics/) and incorporated [API reference](https://docs.taichi.graphics/api/) into it.

Join our discussions to build the next Taichi release for you!

We believe that our community plays a pivotal role in the development of the Taichi programming language. In that spirit, we encourage you to take an active part in our [GitHub Discussions](https://github.com/taichi-dev/taichi/discussions), propose potential changes, and contribute your ideas. Together, we improve the Taichi language release by release, for you and for every developer.

The following is a selected list of hot topics for you to start with:

- 4086
- 4183

Specifically, because beginners to Taichi sometimes get lost in different APIs such as `ti.Vector`, `ti.types.vector`, `ti.Vector.field`, we plan to make them clearer and would like to have your opinions on these proposed practices:

- Always keep type identifiers in lowercase.
- Always use `ti.types.vector` to define a vector *type*.
- After having type definitions like `my_vec2i = ti.types.vector(2, ti.i32)`, use `my_vec2i([5, 10])` for a vector *object*.
- For simplicity, we preserve `ti.vector([1, 2])` as a shortcut for `ti.types.vector()([1, 2])` , which automatically infers missing type information of the object.
- Use `ti.field(dtype=my_vec2i, shape=100)` for a field *object*.

API changes

See [this Google doc](https://docs.google.com/spreadsheets/d/1FMECCsPMVDjzFN9p3Xy2e4CaA-ru9-lIHb1if-7zgLY/edit#gid=0) for a representative list of APIs deprecated in this release.

Deprecation notice

Python 3.6 has reached EOL as of December 2021. The next major Taichi release (e.g. v1.0) will be the last official release for Python3.6 and we're actively working on adding support for Python3.10.


Full changelog:

- [test] Add a test for simple_derivative example (4323) (by **TinyBox**)
- [example] Add implicit fem example (4352) (by **bx2k**)
- [opengl] Use element shape as compile information for OpenGL backend (4284) (by **Haidong Lan**)
- [ci] Exit on error windows test script (4354) (by **Bo Qiao**)
- [bug] Update children_offsets & stride info to align as elem_stride (4345) (by **Ailing**)
- [gui] Update GGUI examples to use vulkan backend if available (4353) (by **Ailing**)
- [ci] Use conda python for m1 jobs (4351) (by **Ailing**)
- [lang] Add support for operators "is" and "is not" in static scope and deprecate them (4349) (by **Lin Jiang**)
- [ci] Increase ci test parallelism (4348) (by **Bo Qiao**)
- [opengl] Remove support for dynamic snode (by **Ailing Zhang**)
- [error] Let deprecation warnings display only once (4346) (by **Lin Jiang**)
- [ci] Fix generate_example_videos.py (4347) (by **Ailing**)
- [test] Add a test for autodiff/regression (4322) (by **TinyBox**)
- [ci] Install requirements and matplotlib for GPU tests (4336) (by **Bo Qiao**)
- [gui] [refactor] Avoid exposing different APIs with different GGUI_AVAILABLE values (4329) (by **Yi Xu**)
- [lang] Remove logical_and and logical_or from TaichiOperation (4326) (by **Lin Jiang**)
- [lang] Add deprecation warnings to atomic ops (4325) (by **Lin Jiang**)
- [refactor] Allow more build types from setup.py (4313) (by **Bo Qiao**)
- [refactor] make class Expr constructor explicit (4272) (by **Retrospection**)
- [doc] More revision on a new language (4321) (by **Ye Kuang**)
- [lang] Hide internal apis about Fields (4302) (by **Xiangyun Yang**)
- [Doc] Avoid log(0) problem in _funcs._randn() and update primitive_types.py (4317) (by **Zhao Liang**)
- [refactor] Remove Ndarray torch implementation and tests (4307) (by **Bo Qiao**)
- [Doc] Revise "Why a new programming language" (4306) (by **Ye Kuang**)
- [lang] Move sparse_matrix_builder from taichi.linalg to taichi.types (4301) (by **Ailing**)
- [lang] Make ti.cfg an alias of runtime cfg (4264) (by **Ailing**)
- [refactor] Refactor ForLoopDecoratorRecorder (4309) (by **PGZXB**)
- [lang] Hide dtype and needs_grad from SNode (4308) (by **Yi Xu**)
- [vulkan] Reduce runtime host overhead (4282) (by **Bob Cao**)
- [lang] Remove Matrix.value (4300) (by **Lin Jiang**)
- [lang] Hide internal APIs of FieldsBuilder (4305) (by **Yi Xu**)
- [lang] Hide pad_key and ndarray*_to_numpy in Ndarray (4298) (by **Bo Qiao**)
- [lang] Hide internal functions in SNode and _Root (4303) (by **Yi Xu**)
- [lang] Hide ndarray*_from_numpy (4297) (by **Bo Qiao**)
- [lang] Hide internal functions in Matrix and Struct (4295) (by **Lin Jiang**)
- [lang] Hide subscript in Matrix (4299) (by **Lin Jiang**)
- [lang] Hide initialize_host_accessor in Ndarray (4296) (by **Bo Qiao**)
- [lang] Hide internal functions in TaichiOperation (4288) (by **Lin Jiang**)
- [lang] Hide get_element_size and get_nelement in Ndarray (4294) (by **Bo Qiao**)
- [lang] Hide fill_by_kernel in Ndarray (4293) (by **Bo Qiao**)
- Hide data handle (4292) (by **Bo Qiao**)
- [lang] Remove CompoundType from taichi.types (4291) (by **Ailing**)
- [lang] Hide get_addr and type_assert in api docs (4290) (by **Ailing**)
- [lang] Only expose start_recording/stop_recording for now (4289) (by **Ailing**)
- [docs] Hide unnessary methods in annotation classes (4287) (by **Ailing**)
- [llvm] Use GEP for array access instead of ptrtoint/inttoptr (4276) (by **Yi Xu**)
- [lang] Fix bls_buffer allocation of x64 crashed in py3.10 (4275) (by **Chang Yu**)
- [misc] Code cleanup in benchmarks (4280) (by **rocket**)
- [doc] Improve operators page (4073) (by **Lin Jiang**)
- [spirv] Fix buffer info compare to fix external array bind point (4277) (by **Bob Cao**)
- [bug] Disallow function definition inside ti.func/kernel (4274) (by **Lin Jiang**)
- [refactor] Remove global instance of DecoratorRecorder (4254) (by **PGZXB**)
- [misc] Add stencil_2d to micro-benchmarks (4176) (by **rocket**)
- [refactor] Remove support for raise statement (4262) (by **Lin Jiang**)
- [refactor] Re-expose important implementation classes (4268) (by **Yi Xu**)
- [llvm] Add missing pre-processor macro in cpp-tests when LLVM is disabled (4269) (by **PGZXB**)
- Add more camera controls (4212) (by **Yu Zhang**)
- [vulkan] Test & build macOS 10.15 MoltenVK (4259) (by **Bob Cao**)
- [vulkan] Use TI_VISIBLE_DEVICE to select vulkan device (4255) (by **Bo Qiao**)
- [misc] Remove some unnecessary include lines (4265) (by **PGZXB**)
- [lang] Expose mesh_patch_idx at top level (4260) (by **Ailing**)
- [Bug] Only ban passing non contiguous torch tensors to taichi kernels. (4258) (by **Ailing**)
- [ci] Run on pull_request_target to access the secrets (4253) (by **Frost Ming**)
- [misc] Update master version to 0.9.0 (4248) (by **Ailing**)
- [misc] Use test_utils.approx directly (4252) (by **Ailing**)
- [ci] Move _testing.py into tests folder (4247) (by **Ailing**)
- [refactor] Remove get_current_program() and global variable current_program (4246) (by **PGZXB**)
- [Doc] Update sparse compuation doc (4060) (by **Peng Yu**)
- [Error] Raise an error when breaking the outermost loop (4235) (by **Lin Jiang**)
- [ci] Disable Vulkan backend for mac1015 release. (4245) (by **Ailing**)
- [Refactor] Move ti.quant & ti.type_factory under ti.types.quantized_types (4233) (by **Yi Xu**)
- [doc] Major revision to the field (advanced) document (4156) (by **Haidong Lan**)
- [vulkan] Disable buffer device address if int64 is not supported (4244) (by **Bob Cao**)
- [CUDA] Fix random generator routines for f32 and f64 to make sure the returned value is in [0, 1) (4243) (by **Zhao Liang**)
- [ci] Create PR card in projects automatically (4229) (by **Frost Ming**)
- [refactor] Remove dependency on get_current_program() in lang::BinaryOpExpression (4242) (by **PGZXB**)
- [Refactor] Add require_version configuration in ti.init() (4151) (by **ZHANG Zhi**)
- [ci] Disable Vulkan backend for mac1014 release. (4241) (by **Ailing**)
- [refactor] Remove global scope_stack and dependencies on it (4237) (by **PGZXB**)
- [refactor] Remove lang::current_ast_builder() and dependencies on it (4239) (by **PGZXB**)
- [vulkan] Add buffer device address (physical pointers) support & other improvements (4221) (by **Bob Cao**)
- [Refactor] Avoid exposing ti.tape (4234) (by **Bo Qiao**)
- [lang] Annotate constants with dtype without casting. (4224) (by **Ailing**)
- [refactor] Remove legacy ti.benchmark() and ti.benchmark_plot() (4222) (by **Xiangyun Yang**)
- [misc] Add memcpy to micro-benchmarks (4220) (by **Bo Qiao**)
- [Refactor] Merge ti.tools.image.imdisplay() into ti.tools.image.imshow() (4144) (by **Zhao Liang**)
- [Refactor] Rename and move memory profiler info under ti.profiler (4227) (by **Xiangyun Yang**)
- [Bug] Ban passing torch view tensors into taichi kernel (4225) (by **Ailing**)
- [refactor] Remove dependency on get_current_program() in lang::FrontendForStmt (4228) (by **PGZXB**)
- [metal] Give random seeds a unique value (4206) (by **Ye Kuang**)
- [autodiff] Refactor the IB identification and optimize the checker for global atomics and purely nested loops (4154) (by **Mingrui Zhang**)
- [doc] Add the step of setting "TI_WITH_VULKAN" for linux (4209) (by **Neko Null**)
- [doc] Add instruction to install clang-format-10 on M1 Mac (4219) (by **Lin Jiang**)
- [Refactor] Move public APIs of ti.tools outside top level (4218) (by **Yi Xu**)
- [Refactor] Move ti.parallel_sort under _kernels (4217) (by **Yi Xu**)
- [refactor] Remove top level __all__ (4214) (by **Yi Xu**)
- [vulkan] Support Vulkan 1.3 (4211) (by **Bob Cao**)
- [CI] Update release workflow (4215) (by **Jian Zeng**)
- [Refactor] Move ti.taichi_logo to examples (4216) (by **Yi Xu**)
- [vulkan] Fix MoltenVK support (4205) (by **Bob Cao**)
- [Refactor] Rename tools.util to tools.async_utils and hide functions inside (4201) (by **Yi Xu**)
- [spirv] SPIR-V / Vulkan NDArray (4202) (by **Bob Cao**)
- [misc] Export visibility of symbols required for Vulkan AOT execution (4203) (by **Gabriel H**)
- [misc] Test unified doc & api preview. (4186) (by **Ailing**)
- [refactor] Remove dependency on get_current_program() in exported functions of SNode (4192) (by **PGZXB**)
- [refactor] Export some functions which depend on current_ast_builder() as members of ASTBuilder (4131) (by **PGZXB**)
- [Refactor] Do not expose StructField and SourceBuilder to users (4200) (by **Yi Xu**)
- [Error] Add function name to traceback (4195) (by **Lin Jiang**)
- [Refactor] Remove redundant set_gdb_trigger (4198) (by **Yi Xu**)
- [javascript] Avoid using C++ inline asm when TI_EMSCRIPTENED (JS 6/n) (4109) (by **Dunfan Lu**)
- [javascript] Disable stack trace logging when TI_EMSCRIPTENED (JS 9/n) (4117) (by **Dunfan Lu**)
- [javascript] Support TI_EMSCRIPTENED option as an env var (JS 3/n) (4106) (by **Dunfan Lu**)
- [Refactor] Rename and move kernel profiler APIs (4194) (by **Yi Xu**)
- [doc] Update the doc for differentiable programming (4057) (by **Mingrui Zhang**)
- [misc] Add math operators to micro-benchmarks (4122) (by **rocket**)
- [misc] Add atomic operators to micro-benchmarks (4169) (by **rocket**)
- [dx11] Fix parse_reference_count signature (4189) (by **quadpixels**)
- [Doc] update demo code in readme doc (4193) (by **箱子**)
- [bug] [opengl] Process child nodes to compute alignment (4191) (by **Ailing**)
- [refactor] Remove dependency on current_ast_builder() in lang::For and cpp_tests (4185) (by **PGZXB**)
- [refactor] Add TI_DLL_EXPORT to control symbol visibility (4177) (by **Ye Kuang**)
- [refactor] Remove is_signed/is_integral from top level. (4182) (by **Ailing**)
- [refactor] Move version_check out of taichi.lang. (4178) (by **Ailing**)
- [refactor] Remove locale_encode from top level. (4179) (by **Ailing**)
- [refactor] Remove dependency on get_current_program() in lang::Ndarray (4162) (by **PGZXB**)
- [Refactor] Clean up helper functions in tools.util (4174) (by **Yi Xu**)
- [refactor] Remove bit_vectorize from top level. (4158) (by **Ailing**)
- [test] [example] Add a test for taichi_logo example (4170) (by **Isaac**)
- [Refactor] Remove inspect for modules in lang init (4173) (by **Bo Qiao**)
- remove KernelDefError KernelArgError InvalidOperationError (4166) (by **Lin Jiang**)
- [Refactor] Expose runtime/snode ops properly (4167) (by **Yi Xu**)
- [opengl] Use && instead of and in C++ code (4171) (by **Dunfan Lu**)
- [Refactor] Move core_vec(i) to gui and hide (4172) (by **Yi Xu**)
- [ci] Fix concurrent run issue (4168) (by **Frost Ming**)
- [Refactor] Rename and move scoped profiler info under ti.profiler (4165) (by **Yi Xu**)
- [spirv] Move external arrays into seperate buffers (4121) (by **Bob Cao**)
- [doc] Improve Fields documentation (4063) (by **rocket**)
- [refactor] Move functions in __init__ to misc (4150) (by **Xiangyun Yang**)
- [refactor] Remove dependency on get_current_program() and lang::current_ast_builder() in lang::Expr (4103) (by **PGZXB**)
- [refactor] Expose ti.abs and ti.pow (4157) (by **Lin Jiang**)
- [Doc] Update README.md (4139) (by **Ye Kuang**)
- [Refactor] Do not expose TapeImpl to users (4148) (by **Yi Xu**)
- [Refactor] Remove unnecessary exposure related to matrix and mesh (4152) (by **Lin Jiang**)
- [Refactor] Do not expose internal function in field, exception, expr, any_array , _ndrange, _ndarray (4137) (by **Xiangyun Yang**)
- [Refactor] Do not expose taichi.snode (4149) (by **Bo Qiao**)
- [refactor] [ir] Remove load_if_ptr and move pointer dereferencing to frontend-to-IR passes (4104) (by **daylily**)
- [Refactor] Do not expose internal function in ti.lang.impl (4134) (by **Xiangyun Yang**)
- [Refactor] Prevent modules in lang being wild imported and exposed (4140) (by **Bo Qiao**)
- Move __getattr__ back to __init__.py (4142) (by **Lin Jiang**)
- [Refactor] Avoid exposing real and integer types API (4129) (by **Bo Qiao**)
- [Refactor] Do not expose functions in taichi.lang.util to users (4128) (by **Yi Xu**)
- [Refactor] Do not expose main to users (4136) (by **Yi Xu**)
- [doc] Revise doc for GUI system. (4006) (by **Jiasheng Zhang**)
- [refactor] Remove critical/debug/error/trace/warn/info/is_logging_effective from top level (4133) (by **Ailing**)
- [Refactor] Remove supported_log_levels (4120) (by **Bo Qiao**)
- [ci] Fix approx in autodiff example test (4132) (by **Ailing**)
- [bug] Fix starred expression when the value is not a list (4130) (by **Lin Jiang**)
- Support compiling taichi in x86 (4107) (by **Dunfan Lu**)
- [javascript] Avoid all usages of glfw/vulkan/volk when TI_EMSCRIPTENED (JS 5/n) (4108) (by **Dunfan Lu**)
- [javascript] [misc] Remove redundant pybind include in Taichi Core Library (4110) (by **Dunfan Lu**)
- [test] Remove allclose at top level. (by **Ailing Zhang**)
- [test] Remove approx at top level. (by **Ailing Zhang**)
- [test] Remove get_rel_eps() at top level. (by **Ailing Zhang**)
- [test] Replace make_temp_file with tempfile (by **Ailing Zhang**)
- [Refactor] Remove exposure of internal functions in taichi.lang.ops (4101) (by **Lin Jiang**)
- [misc] Fix the changelog generator to only count current branch commits (4126) (by **Frost Ming**)
- [build] Handle empty TAICHI_EMBIND_SOURCE (4127) (by **Ailing**)
- [ci] Use GHA workflow to control the concurrency (4116) (by **Frost Ming**)
- [misc] Version bump: v0.8.11 -> v0.8.12 (4125) (by **Ailing**)
- [refactor] Remove dependency on lang::current_ast_builder() in lang::ConstantFold (4123) (by **PGZXB**)
- [doc] Add doc about difference between taichi and python programs (3996) (by **Lin Jiang**)
- [doc] Update docs about kernels and functions (4044) (by **Lin Jiang**)
- [misc] Add containers and end-to-end result to micro-benchmarks (4081) (by **rocket**)
- [opengl] Use element_size as alignment in root buffer. (4095) (by **Ailing**)
- [javascript] Add TI_EMSCRIPTENED to cmake options (JS 1/n) (4093) (by **Dunfan Lu**)
- [javascript] Add Javascript PR tag (JS 0/n) (4094) (by **Dunfan Lu**)
- [opt] Remove legacy vectorization pass (4096) (4099) (by **daylily**)
- [refactor] [ir] Refactor ExternalFuncCallExpression into a frontend statement (4098) (by **daylily**)
- [spirv] Add names to buffer struct types and pointers (4092) (by **Bob Cao**)
- [test] Add a test for the minimization example (4091) (by **Zydiii**)
- [refactor] Remove dependency on get_current_program() in ui/backends/vulkan (4076) (by **PGZXB**)
- [refactor] [ir] Use InternalFuncCall for retrieving thread index (4090) (by **daylily**)
- Add images to GL device API (4084) (by **Bob Cao**)
- [dx11] Add underlying DX11 device, memory allocation, and some tests (3971) (by **quadpixels**)
- [Bug] [lang] Ban redefinition of template and matrix arguments in Taichi kernel (4080) (by **Lin Jiang**)
- [bug] Fix warnings on external functions on windows (4079) (by **Lin Jiang**)
- [aot] [vulkan] Provide range_hint for range_for offloaded tasks in vulkan backend. (by **Ailing Zhang**)
- [refactor] Reuse SNode tree id (4056) (by **Lin Jiang**)
- [bug] Fix ndrange with star arguments (4077) (by **Lin Jiang**)
- [aot] [opengl] Provide range_hint for range_for offloaded tasks in (by **Ailing Zhang**)
- [misc] Add a minimal example for micro-benchmarks (4031) (by **rocket**)
- [doc] Refactor type system doc: primitive types (4055) (by **Yi Xu**)
- [misc] Migrate benchmarks to a new version (4059) (by **rocket**)
- [refactor] Re-export some functions called directly by ASTTransfomer.* as member of ASTBuilder (4034) (by **PGZXB**)
- [autodiff] Fix the local allocas defining in inner loop raising runtime error (4041) (by **Mingrui Zhang**)
- [opengl] Make sure ndarray arg bind indices are sorted. (4069) (by **Ailing**)
- [doc] Improve operator page (4067) (by **Bo Qiao**)
- [ir] [refactor] Make ReturnStmt support a vector of stmts (4028) (by **Xiangyun Yang**)
- [Lang] [bug] Stop misusing non-template argument types to determine template reinstantiation (4049) (by **Xiangyun Yang**)
- [misc] Version bump: v0.8.10 -> v0.8.11 (4053) (by **rocket**)

0.8.11

This is a bug fix release for v0.8.10.

If you have seen excessive warnings like below on windows, please upgrade to this release.

- **Bug fixes**
- [bug] Fix warnings on external functions on windows (4079) (by **Lin Jiang**)



a.py:11: UserWarning: Calling non-taichi function "ti.random". Scope inside the function is not processed by the Taichi AST transformer. The function may not work as expected. Proceed with caution! Maybe you can consider turning it into a ti.func?
a[i] = ti.pow(ti.random(), 2)
a.py:11: UserWarning: Calling non-taichi function "ti.pow". Scope inside the function is not processed by the Taichi AST transformer. The function may not work as expected. Proceed with caution! Maybe you can consider turning it into a ti.func?
a[i] = ti.pow(ti.random(), 2)


Full changelog:
- [bug] Fix warnings on external functions on windows (4079) (by **Lin Jiang**)
- [misc] Version bump: v0.8.10 -> v0.8.11 (4053) (by **rocket**)
- [test] [example] Add test and video generator for cornell box. (4045) (by **Ailing**)

0.8.10

Highlights:
- **AOT**
- Add a generic set of AOT structs (3973) (by **Ye Kuang**)
- Switch vulkan aot to use taichi::aot::ModuleData. (by **Ailing Zhang**)
- Convert opengl aot to dump ModuleData. (3991) (by **Ailing**)
- **Language and syntax**
- Use FrontendExprStmt in place of FrontendEvalStmt (3978) (by **daylily**)
- Get global vars by using __globals__ (3949) (by **Lin Jiang**)
- Support static short circuit bool operations (3958) (by **Lin Jiang**)
- Experimental automatic mesh_local (3989) (by **Chang Yu**)
- Support nested mesh-for (3990) (by **Chang Yu**)
- **Performance**
- Accelerate whole_kernel_cse pass (3957) (by **Xiangyun Yang**)
- Get rid of some no-ops in linear seek (by **Ailing Zhang**)
- Reduce kernel launch context construction overhead (3947) (by **Haidong Lan**)
- Refactor func body to reduce python overhead and improve readability (3984) (by **Haidong Lan**)
- Get store_to_load_forwarding work with local tensors across basic blocks (3942) (by **Yi Xu**)
- **Documentations**
- Update Docs preview settings. (4021) (by **Chengchen(Rex) Wang**)
- Add doc for compile-time recursion (3994) (by **Lin Jiang**)
- Add an operation page (4004) (by **Bo Qiao**)
- Improve type system documentation (4002) (by **Bo Qiao**)
- **Error messages**
- Add TaichiTypeError (3964) (by **Lin Jiang**)
- Produce a warning when users call external functions (4007) (by **Lin Jiang**)
- Shorten the length of traceback of TaichiCompilationError (3965) (by **Lin Jiang**)
- Raise exception when encountering undefined name (3951) (by **Lin Jiang**)
- **Bug fixes**
- Fix bug that building with TI_WITH_LLVM=OFF will fail (4043) (by **PGZXB**)
- Treat PtrOffsetStmt as random-initialized (3998) (by **Yi Xu**)
- GGUI imwrite BGRA to RGBA conversion (4018) (by **Bob Cao**)


Full changelog:
- [bug] Fix bug that building with TI_WITH_LLVM=OFF will fail (4043) (by **PGZXB**)
- [doc] Improve type system documentation (4002) (by **Bo Qiao**)
- [Error] Add error message when non-0d numpy ndarray is given to initialize expression (4030) (by **Lin Jiang**)
- [Error] Produce a warning when users call external functions (4007) (by **Lin Jiang**)
- [aot] Use element_shape instead of row_num & column_num for CompiledFieldData. (by **Ailing Zhang**)
- [vulkan] [aot] Switch vulkan aot to use taichi::aot::ModuleData. (by **Ailing Zhang**)
- [vulkan] Fix gtmp type (4042) (by **Bob Cao**)
- [doc] Add an operation page (4004) (by **Bo Qiao**)
- [ir] [refactor] Split stmt typechecking to the frontend (3875) (by **daylily**)
- [build] Disable LTO for mac. (4027) (by **Ailing**)
- [autodiff] Restrict Independent Block scope for cases with atomic operations on global variables (3897) (by **Mingrui Zhang**)
- [gui] GGUI imwrite BGRA to RGBA conversion (4018) (by **Bob Cao**)
- [test] [example] Add a test and a video generator for mpm99 (3995) (by **Yi Xu**)
- [doc] [ci] Update Docs preview settings. (4021) (by **Chengchen(Rex) Wang**)
- [vulkan] [aot] Throw error for templated kernels in vulkan aot. (by **Ailing Zhang**)
- [bug] [opt] Treat PtrOffsetStmt as random-initialized (3998) (by **Yi Xu**)
- [ci] Keep macOS actions run on macOS-10.15 (4014) (by **rocket**)
- [vulkan] [aot] Enable aot tests for vulkan backend. (4000) (by **Ailing**)
- [mesh] [opt] Experimental automatic mesh_local (3989) (by **Chang Yu**)
- [doc] Add doc for compile-time recursion (3994) (by **Lin Jiang**)
- [refactor] [opengl] Get rid of some no-ops in linear seek (by **Ailing Zhang**)
- [opengl] Do not promote simple ExternalTensorShapeAlongAxisStmt into globals. (by **Ailing Zhang**)
- [build] Upgrade SPIRV-Headers and SPIRV-Tools to their latest commits (3967) (by **PGZXB**)
- [opengl] [aot] Convert opengl aot to dump ModuleData. (3991) (by **Ailing**)
- [mesh] Support multiple major relations in one mesh-for loop (3987) (by **Chang Yu**)
- [refactor] Refactor func body to reduce python overhead and improve readability (3984) (by **Haidong Lan**)
- [opt] Add more strict alias analysis for ExternalPtrStmt (3992) (by **Ailing**)
- [opt] Accelerate whole_kernel_cse pass (3957) (by **Xiangyun Yang**)
- [mesh] [opt] Support nested mesh-for (3990) (by **Chang Yu**)
- [Lang] Provide sparse matrix shape (3959) (by **Peng Yu**)
- [refactor] Remove dependency on get_current_program() in backends/cpu and backends/cuda (3956) (by **PGZXB**)
- [mesh] Demote from-end element attribute atomic op (3923) (by **Chang Yu**)
- [ci] Support rebase and rerun command in comment for CI bot (3952) (by **Frost Ming**)
- [refactor] [ci] Enable identifier naming in clang-tidy (3960) (by **Bo Qiao**)
- [refactor] [ir] Use FrontendExprStmt in place of FrontendEvalStmt (3978) (by **daylily**)
- [example] [test] Fix misuse of logical operators in examples and tests (3976) (by **Yi Xu**)
- [Error] Shorten the length of traceback of TaichiCompilationError (3965) (by **Lin Jiang**)
- [aot] Add a generic set of AOT structs (3973) (by **Ye Kuang**)
- [Error] Add TaichiTypeError (3964) (by **Lin Jiang**)
- [aot] Add task_type for OpenGL (3962) (by **Ye Kuang**)
- [Error] Raise exception when encountering undefined name (3951) (by **Lin Jiang**)
- [misc] [cuda] Set the toolkit used by KernelProfiler at runtime (3945) (by **rocket**)
- [refactor] Get global vars by using __globals__ (3949) (by **Lin Jiang**)
- [refactor] Support static short circuit bool operations (3958) (by **Lin Jiang**)
- [perf] [refactor] Reduce kernel launch context construction overhead (3947) (by **Haidong Lan**)
- [refactor] Move python/taichi/lang/meta.py to python/taichi/_kernels.py (by **Ailing Zhang**)
- [refactor] Remove import taichi in taichi/lang/impl.py (by **Ailing Zhang**)
- [refactor] Remove ndarray_use_torch from pybind (3946) (by **Bo Qiao**)
- [ci] Test opengl backend on windows (3924) (by **Frost Ming**)
- [Error] Do not show body in exceptions in nodes with body (3940) (by **Lin Jiang**)
- [opt] Get store_to_load_forwarding work with local tensors across basic blocks (3942) (by **Yi Xu**)
- [refactor] [ir] Remove legacy stmts from CHI IR (3943) (by **Yi Xu**)
- [Error] Shorten the length of traceback of exceptions thrown by ASTTransformer (3873) (by **lin-hitonami**)
- [misc] Version bump: v0.8.9 -> v0.8.10 (3935) (by **Bo Qiao**)

0.8.9

Highlights:
- **Android**
- Add initial support of Android in GGUI (3845) (by **Gabriel H**)
- **Bug fixes**
- Query device attribute when using cuda 11 and above (3930) (by **Bo Qiao**)
- Fix the ttf path (3931) (by **Xiangyun Yang**)
- **Language and syntax**
- Initial matrix argument support for ti.kernel (3905) (by **Xiangyun Yang**)
- Enable dynamic indexing of matrix field elements when possible (3865) (by **Yi Xu**)
- **Miscellaneous**
- Support logging on Android platforms (3849) (by **Gabriel H**)
- **Refactor**
- Remove all occurrences of print_preprocessed and print_ast (3911) (by **Xiangyun Yang**)
- Deprecate excepthook and completely remove _taichi_skip_traceback (3902) (by **Haidong Lan**)
- **Tests**
- Add initial AOT CPP test (3850) (3899) (by **Gabriel H**)
- Add initial AOT CPP test (3850) (by **Gabriel H**)

Full changelog:
- [ci] Install torch for windows release (3932) (by **Bo Qiao**)
- [Bug] fix the ttf path (3931) (by **Xiangyun Yang**)
- [Bug] [cuda] Query device attribute when using cuda 11 and above (3930) (by **Bo Qiao**)
- [refactor] Optimize vector and matrix ndarray fill (3921) (by **Bo Qiao**)
- [opt] [ir] [refactor] Remove exceptions from offload pass (3925) (by **Xiangyun Yang**)
- [opt] [refactor] Remove the variable_optimization pass (3927) (by **Mingkuan Xu**)
- [doc] Add a tutorial: Run Ndarray Taichi program (3908) (by **Vissidarte-Herman**)
- [opt] [ir] [refactor] Remove exceptions from lower_ast pass (3916) (by **Xiangyun Yang**)
- [cuda] Use cuMemsetD32 to fill scalar ndarray (3907) (by **Bo Qiao**)
- [ci] Add self-hosted Windows buildbot for GPU testing (3852) (by **Frost Ming**)
- [Lang] Initial matrix argument support for ti.kernel (3905) (by **Xiangyun Yang**)
- [doc] Add example of color_edit_3 (3919) (by **Vineyo**)
- [perf] Clear global_vars/matrix_fields after materialize() (3914) (by **Yi Xu**)
- [gui] Update camera.py (3898) (by **stamnug**)
- [bug] Enable field-related checks in materialize() not only in first call (3906) (by **Yi Xu**)
- [Refactor] Remove all occurrences of print_preprocessed and print_ast (3911) (by **Xiangyun Yang**)
- [perf] Avoid using property for simple attributes to reduce python overhead. (by **Ailing Zhang**)
- [opengl] Respect max_block_dim in ti.init (by **Ailing Zhang**)
- [dx11] Add DX11 device interface definition (3880) (by **quadpixels**)
- [Refactor] Deprecate excepthook and completely remove _taichi_skip_traceback (3902) (by **Haidong Lan**)
- [opengl] Optimize range_for for ndarrays (by **Ailing Zhang**)
- [Test] [aot] Add initial AOT CPP test (3850) (3899) (by **Gabriel H**)
- [refactor] Merge taichi/lang/linalg_impl.py into _funcs.py (by **Ailing Zhang**)
- [refactor] Remove import taichi in taichi/lang/quant_impl.py (by **Ailing Zhang**)
- [refactor] Remove import taichi in taichi/lang/util.py (by **Ailing Zhang**)
- [cuda] Increase saturating grid dim to reduce tail effect (3855) (by **Bo Qiao**)
- [opengl] Reduce repeated read to args buffer. (by **Ailing Zhang**)
- [refactor] Remove import taichi from lang/__init__.py (3889) (by **Yi Xu**)
- Revert "[Test][aot] Add initial AOT CPP test (3850)" (3890) (by **Ye Kuang**)
- [Android] [gui] Add initial support of Android in GGUI (3845) (by **Gabriel H**)
- [Test][aot] Add initial AOT CPP test (3850) (by **Gabriel H**)
- [Lang] Enable dynamic indexing of matrix field elements when possible (3865) (by **Yi Xu**)
- [cuda] Hide debug info (3878) (by **Ye Kuang**)
- [refactor] Remove legacy helper functions for testing (3874) (by **Yi Xu**)
- [refactor] Remove import taichi from expr.py (3871) (by **Yi Xu**)
- [refactor] Remove import taichi from field.py (3870) (by **Yi Xu**)
- [refactor] Remove import taichi from mesh.py (3869) (by **Yi Xu**)
- [refactor] Remove import taichi in ast_transformer (3827) (by **lin-hitonami**)
- [refactor] Remove import taichi from struct.py (3866) (by **lin-hitonami**)
- [autodiff] Provide stmt name for auto-diff related assert info (3864) (by **Mingrui Zhang**)
- [lang] Cleanup parallel sort utility (3858) (by **Dunfan Lu**)
- [refactor] Enforce destruction order of OpenGlRuntime. (3861) (by **Ailing**)
- [refactor] Add _MatrixFieldElement class (3862) (by **Yi Xu**)
- [opt] Add more accurate alias analysis for ExternalPtrStmt (3859) (by **Yi Xu**)
- [mesh] A small fix for mesh loop syntax in python frontend (3836) (by **bx2k**)
- [test] Add more complicated tests for building and destroying SNodeTrees (3415) (by **ysh329**)
- [lang] Calculate dynamic indexing strides of matrix field elements (3854) (by **Yi Xu**)
- [bug] Fix autodiff for ceil. (3844) (by **Ailing**)
- [refactor] Remove import taichi in matrix.py (3842) (by **lin-hitonami**)
- [Misc] [android] Support logging on Android platforms (3849) (by **Gabriel H**)
- [opengl] Allocate new arg bufs per kernel launch (3848) (by **Ailing**)
- [opengl] Only sync per ti.kernel when there's external array arg. (by **Ailing Zhang**)
- [refactor] Rename is_external_array -> is_array and arr_bufs_ -> ext_arr_bufs_ (by **Ailing Zhang**)
- [opengl] Only bind buffers per ti.kernel. (by **Ailing Zhang**)
- [misc] Version bump: v0.8.8 -> v0.8.9 (3846) (by **Yi Xu**)

Page 7 of 23

© 2024 Safety CLI Cybersecurity Inc. All Rights Reserved.