tensorstudio 1.3.6__tar.gz → 1.4.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (173) hide show
  1. {tensorstudio-1.3.6 → tensorstudio-1.4.0}/.github/workflows/publish.yml +0 -9
  2. {tensorstudio-1.3.6 → tensorstudio-1.4.0}/CHANGELOG.md +16 -0
  3. {tensorstudio-1.3.6 → tensorstudio-1.4.0}/CMakeLists.txt +1 -1
  4. {tensorstudio-1.3.6 → tensorstudio-1.4.0}/PKG-INFO +6 -3
  5. {tensorstudio-1.3.6 → tensorstudio-1.4.0}/README.md +5 -2
  6. tensorstudio-1.4.0/benchmarks/results.md +343 -0
  7. {tensorstudio-1.3.6 → tensorstudio-1.4.0}/docs/autograd/coverage.md +5 -2
  8. {tensorstudio-1.3.6 → tensorstudio-1.4.0}/docs/autograd/overview.md +4 -1
  9. {tensorstudio-1.3.6 → tensorstudio-1.4.0}/docs/core/api-reference.md +7 -0
  10. {tensorstudio-1.3.6 → tensorstudio-1.4.0}/docs/core/native-cpp-core.md +2 -2
  11. {tensorstudio-1.3.6 → tensorstudio-1.4.0}/docs/core/tensors.md +20 -1
  12. tensorstudio-1.4.0/docs/data/dataloader-patterns.md +68 -0
  13. tensorstudio-1.4.0/docs/data/tensor-datasets.md +66 -0
  14. {tensorstudio-1.3.6 → tensorstudio-1.4.0}/docs/getting-started/quickstart.md +1 -0
  15. {tensorstudio-1.3.6 → tensorstudio-1.4.0}/docs/hardware/cpu-backend.md +1 -1
  16. {tensorstudio-1.3.6 → tensorstudio-1.4.0}/docs/index.md +28 -4
  17. {tensorstudio-1.3.6 → tensorstudio-1.4.0}/docs/interchange/onnx.md +1 -1
  18. {tensorstudio-1.3.6 → tensorstudio-1.4.0}/docs/interchange/serialization.md +2 -2
  19. {tensorstudio-1.3.6 → tensorstudio-1.4.0}/docs/nn/training.md +1 -1
  20. {tensorstudio-1.3.6 → tensorstudio-1.4.0}/docs/performance/benchmarks.md +1 -1
  21. tensorstudio-1.4.0/docs/performance/optimization.md +57 -0
  22. tensorstudio-1.4.0/docs/performance/profiling.md +56 -0
  23. tensorstudio-1.4.0/docs/project/checkpoints.md +58 -0
  24. tensorstudio-1.4.0/docs/project/project-layout.md +54 -0
  25. tensorstudio-1.4.0/docs/release/checklist.md +49 -0
  26. {tensorstudio-1.3.6 → tensorstudio-1.4.0}/docs/release/publishing.md +11 -10
  27. tensorstudio-1.4.0/docs/release/versioning.md +42 -0
  28. tensorstudio-1.4.0/docs/roadmap/milestones.md +46 -0
  29. tensorstudio-1.4.0/docs/roadmap/priorities.md +39 -0
  30. {tensorstudio-1.3.6 → tensorstudio-1.4.0}/docs/roadmap/roadmap.md +4 -2
  31. {tensorstudio-1.3.6 → tensorstudio-1.4.0}/include/tensorstudio/ops.hpp +19 -0
  32. {tensorstudio-1.3.6 → tensorstudio-1.4.0}/include/tensorstudio/version.hpp +1 -1
  33. {tensorstudio-1.3.6 → tensorstudio-1.4.0}/mkdocs.yml +12 -1
  34. {tensorstudio-1.3.6 → tensorstudio-1.4.0}/pyproject.toml +1 -1
  35. {tensorstudio-1.3.6 → tensorstudio-1.4.0}/python/tensorstudio/_C.pyi +1 -0
  36. {tensorstudio-1.3.6 → tensorstudio-1.4.0}/python/tensorstudio/_version.py +1 -1
  37. {tensorstudio-1.3.6 → tensorstudio-1.4.0}/src/bindings/bind_tensor.cpp +99 -0
  38. {tensorstudio-1.3.6 → tensorstudio-1.4.0}/src/core/ops.cpp +171 -0
  39. {tensorstudio-1.3.6 → tensorstudio-1.4.0}/tests/test_import.py +1 -1
  40. tensorstudio-1.4.0/tests/test_indexing.py +87 -0
  41. tensorstudio-1.3.6/benchmarks/results.md +0 -343
  42. {tensorstudio-1.3.6 → tensorstudio-1.4.0}/.gitattributes +0 -0
  43. {tensorstudio-1.3.6 → tensorstudio-1.4.0}/.github/workflows/ci.yml +0 -0
  44. {tensorstudio-1.3.6 → tensorstudio-1.4.0}/.github/workflows/publish-testpypi.yml +0 -0
  45. {tensorstudio-1.3.6 → tensorstudio-1.4.0}/.github/workflows/wheels.yml +0 -0
  46. {tensorstudio-1.3.6 → tensorstudio-1.4.0}/.gitignore +0 -0
  47. {tensorstudio-1.3.6 → tensorstudio-1.4.0}/.pre-commit-config.yaml +0 -0
  48. {tensorstudio-1.3.6 → tensorstudio-1.4.0}/CONTRIBUTING.md +0 -0
  49. {tensorstudio-1.3.6 → tensorstudio-1.4.0}/LICENSE +0 -0
  50. {tensorstudio-1.3.6 → tensorstudio-1.4.0}/SECURITY.md +0 -0
  51. {tensorstudio-1.3.6 → tensorstudio-1.4.0}/benchmark_all.py +0 -0
  52. {tensorstudio-1.3.6 → tensorstudio-1.4.0}/benchmarks/__init__.py +0 -0
  53. {tensorstudio-1.3.6 → tensorstudio-1.4.0}/benchmarks/bench_activations.py +0 -0
  54. {tensorstudio-1.3.6 → tensorstudio-1.4.0}/benchmarks/bench_autograd.py +0 -0
  55. {tensorstudio-1.3.6 → tensorstudio-1.4.0}/benchmarks/bench_conv2d.py +0 -0
  56. {tensorstudio-1.3.6 → tensorstudio-1.4.0}/benchmarks/bench_elementwise.py +0 -0
  57. {tensorstudio-1.3.6 → tensorstudio-1.4.0}/benchmarks/bench_matmul.py +0 -0
  58. {tensorstudio-1.3.6 → tensorstudio-1.4.0}/benchmarks/bench_pooling.py +0 -0
  59. {tensorstudio-1.3.6 → tensorstudio-1.4.0}/benchmarks/bench_reductions.py +0 -0
  60. {tensorstudio-1.3.6 → tensorstudio-1.4.0}/benchmarks/bench_tensor_ops.py +0 -0
  61. {tensorstudio-1.3.6 → tensorstudio-1.4.0}/benchmarks/bench_training_loop.py +0 -0
  62. {tensorstudio-1.3.6 → tensorstudio-1.4.0}/benchmarks/benchmark_report.py +0 -0
  63. {tensorstudio-1.3.6 → tensorstudio-1.4.0}/benchmarks/results_conv2d.md +0 -0
  64. {tensorstudio-1.3.6 → tensorstudio-1.4.0}/benchmarks/results_matmul.md +0 -0
  65. {tensorstudio-1.3.6 → tensorstudio-1.4.0}/benchmarks/results_pooling.md +0 -0
  66. {tensorstudio-1.3.6 → tensorstudio-1.4.0}/benchmarks/results_reductions.md +0 -0
  67. {tensorstudio-1.3.6 → tensorstudio-1.4.0}/benchmarks/results_tensor_ops.md +0 -0
  68. {tensorstudio-1.3.6 → tensorstudio-1.4.0}/docs/autograd/gradient-notes.md +0 -0
  69. {tensorstudio-1.3.6 → tensorstudio-1.4.0}/docs/core/broadcasting.md +0 -0
  70. {tensorstudio-1.3.6 → tensorstudio-1.4.0}/docs/data/datasets-and-dataloaders.md +0 -0
  71. {tensorstudio-1.3.6 → tensorstudio-1.4.0}/docs/development/contributing.md +0 -0
  72. {tensorstudio-1.3.6 → tensorstudio-1.4.0}/docs/development/cpp-first.md +0 -0
  73. {tensorstudio-1.3.6 → tensorstudio-1.4.0}/docs/getting-started/installation.md +0 -0
  74. {tensorstudio-1.3.6 → tensorstudio-1.4.0}/docs/getting-started/source-build.md +0 -0
  75. {tensorstudio-1.3.6 → tensorstudio-1.4.0}/docs/hardware/linux.md +0 -0
  76. {tensorstudio-1.3.6 → tensorstudio-1.4.0}/docs/hardware/macos.md +0 -0
  77. {tensorstudio-1.3.6 → tensorstudio-1.4.0}/docs/hardware/windows.md +0 -0
  78. {tensorstudio-1.3.6 → tensorstudio-1.4.0}/docs/interchange/model-formats.md +0 -0
  79. {tensorstudio-1.3.6 → tensorstudio-1.4.0}/docs/interchange/numpy-interop.md +0 -0
  80. {tensorstudio-1.3.6 → tensorstudio-1.4.0}/docs/interchange/trusted-serialization.md +0 -0
  81. {tensorstudio-1.3.6 → tensorstudio-1.4.0}/docs/nn/modules.md +0 -0
  82. {tensorstudio-1.3.6 → tensorstudio-1.4.0}/docs/nn/optimizers.md +0 -0
  83. {tensorstudio-1.3.6 → tensorstudio-1.4.0}/docs/nn/overview.md +0 -0
  84. {tensorstudio-1.3.6 → tensorstudio-1.4.0}/docs/project/workflows.md +0 -0
  85. {tensorstudio-1.3.6 → tensorstudio-1.4.0}/docs/vision/dataset-creation.md +0 -0
  86. {tensorstudio-1.3.6 → tensorstudio-1.4.0}/docs/vision/overview.md +0 -0
  87. {tensorstudio-1.3.6 → tensorstudio-1.4.0}/examples/basic_tensor_ops.py +0 -0
  88. {tensorstudio-1.3.6 → tensorstudio-1.4.0}/examples/export_onnx.py +0 -0
  89. {tensorstudio-1.3.6 → tensorstudio-1.4.0}/examples/image_folder_classification.py +0 -0
  90. {tensorstudio-1.3.6 → tensorstudio-1.4.0}/examples/linear_regression.py +0 -0
  91. {tensorstudio-1.3.6 → tensorstudio-1.4.0}/examples/project_training.py +0 -0
  92. {tensorstudio-1.3.6 → tensorstudio-1.4.0}/examples/save_load_model.py +0 -0
  93. {tensorstudio-1.3.6 → tensorstudio-1.4.0}/examples/tiny_mlp.py +0 -0
  94. {tensorstudio-1.3.6 → tensorstudio-1.4.0}/examples/vision_classifier.py +0 -0
  95. {tensorstudio-1.3.6 → tensorstudio-1.4.0}/include/tensorstudio/autograd.hpp +0 -0
  96. {tensorstudio-1.3.6 → tensorstudio-1.4.0}/include/tensorstudio/device.hpp +0 -0
  97. {tensorstudio-1.3.6 → tensorstudio-1.4.0}/include/tensorstudio/dtype.hpp +0 -0
  98. {tensorstudio-1.3.6 → tensorstudio-1.4.0}/include/tensorstudio/errors.hpp +0 -0
  99. {tensorstudio-1.3.6 → tensorstudio-1.4.0}/include/tensorstudio/module.hpp +0 -0
  100. {tensorstudio-1.3.6 → tensorstudio-1.4.0}/include/tensorstudio/optim.hpp +0 -0
  101. {tensorstudio-1.3.6 → tensorstudio-1.4.0}/include/tensorstudio/random.hpp +0 -0
  102. {tensorstudio-1.3.6 → tensorstudio-1.4.0}/include/tensorstudio/serialization.hpp +0 -0
  103. {tensorstudio-1.3.6 → tensorstudio-1.4.0}/include/tensorstudio/shape.hpp +0 -0
  104. {tensorstudio-1.3.6 → tensorstudio-1.4.0}/include/tensorstudio/storage.hpp +0 -0
  105. {tensorstudio-1.3.6 → tensorstudio-1.4.0}/include/tensorstudio/tensor.hpp +0 -0
  106. {tensorstudio-1.3.6 → tensorstudio-1.4.0}/python/tensorstudio/__init__.py +0 -0
  107. {tensorstudio-1.3.6 → tensorstudio-1.4.0}/python/tensorstudio/autograd.py +0 -0
  108. {tensorstudio-1.3.6 → tensorstudio-1.4.0}/python/tensorstudio/data/__init__.py +0 -0
  109. {tensorstudio-1.3.6 → tensorstudio-1.4.0}/python/tensorstudio/data/dataloader.py +0 -0
  110. {tensorstudio-1.3.6 → tensorstudio-1.4.0}/python/tensorstudio/data/dataset.py +0 -0
  111. {tensorstudio-1.3.6 → tensorstudio-1.4.0}/python/tensorstudio/dtypes.py +0 -0
  112. {tensorstudio-1.3.6 → tensorstudio-1.4.0}/python/tensorstudio/errors.py +0 -0
  113. {tensorstudio-1.3.6 → tensorstudio-1.4.0}/python/tensorstudio/grad_mode.py +0 -0
  114. {tensorstudio-1.3.6 → tensorstudio-1.4.0}/python/tensorstudio/interchange/__init__.py +0 -0
  115. {tensorstudio-1.3.6 → tensorstudio-1.4.0}/python/tensorstudio/interchange/onnx.py +0 -0
  116. {tensorstudio-1.3.6 → tensorstudio-1.4.0}/python/tensorstudio/math.py +0 -0
  117. {tensorstudio-1.3.6 → tensorstudio-1.4.0}/python/tensorstudio/nn/__init__.py +0 -0
  118. {tensorstudio-1.3.6 → tensorstudio-1.4.0}/python/tensorstudio/nn/functional.py +0 -0
  119. {tensorstudio-1.3.6 → tensorstudio-1.4.0}/python/tensorstudio/nn/losses.py +0 -0
  120. {tensorstudio-1.3.6 → tensorstudio-1.4.0}/python/tensorstudio/nn/modules.py +0 -0
  121. {tensorstudio-1.3.6 → tensorstudio-1.4.0}/python/tensorstudio/ops.py +0 -0
  122. {tensorstudio-1.3.6 → tensorstudio-1.4.0}/python/tensorstudio/optim/__init__.py +0 -0
  123. {tensorstudio-1.3.6 → tensorstudio-1.4.0}/python/tensorstudio/optim/adam.py +0 -0
  124. {tensorstudio-1.3.6 → tensorstudio-1.4.0}/python/tensorstudio/optim/adamw.py +0 -0
  125. {tensorstudio-1.3.6 → tensorstudio-1.4.0}/python/tensorstudio/optim/lr_scheduler.py +0 -0
  126. {tensorstudio-1.3.6 → tensorstudio-1.4.0}/python/tensorstudio/optim/sgd.py +0 -0
  127. {tensorstudio-1.3.6 → tensorstudio-1.4.0}/python/tensorstudio/optim/utils.py +0 -0
  128. {tensorstudio-1.3.6 → tensorstudio-1.4.0}/python/tensorstudio/project/__init__.py +0 -0
  129. {tensorstudio-1.3.6 → tensorstudio-1.4.0}/python/tensorstudio/project/checkpoint.py +0 -0
  130. {tensorstudio-1.3.6 → tensorstudio-1.4.0}/python/tensorstudio/project/config.py +0 -0
  131. {tensorstudio-1.3.6 → tensorstudio-1.4.0}/python/tensorstudio/project/trainer.py +0 -0
  132. {tensorstudio-1.3.6 → tensorstudio-1.4.0}/python/tensorstudio/py.typed +0 -0
  133. {tensorstudio-1.3.6 → tensorstudio-1.4.0}/python/tensorstudio/serialization.py +0 -0
  134. {tensorstudio-1.3.6 → tensorstudio-1.4.0}/python/tensorstudio/tensor.py +0 -0
  135. {tensorstudio-1.3.6 → tensorstudio-1.4.0}/python/tensorstudio/typing.py +0 -0
  136. {tensorstudio-1.3.6 → tensorstudio-1.4.0}/python/tensorstudio/vision/__init__.py +0 -0
  137. {tensorstudio-1.3.6 → tensorstudio-1.4.0}/python/tensorstudio/vision/datasets.py +0 -0
  138. {tensorstudio-1.3.6 → tensorstudio-1.4.0}/python/tensorstudio/vision/io.py +0 -0
  139. {tensorstudio-1.3.6 → tensorstudio-1.4.0}/python/tensorstudio/vision/metrics.py +0 -0
  140. {tensorstudio-1.3.6 → tensorstudio-1.4.0}/python/tensorstudio/vision/models.py +0 -0
  141. {tensorstudio-1.3.6 → tensorstudio-1.4.0}/python/tensorstudio/vision/transforms.py +0 -0
  142. {tensorstudio-1.3.6 → tensorstudio-1.4.0}/python/tensorstudio/vision/visualization.py +0 -0
  143. {tensorstudio-1.3.6 → tensorstudio-1.4.0}/src/bindings/bind_autograd.cpp +0 -0
  144. {tensorstudio-1.3.6 → tensorstudio-1.4.0}/src/bindings/bind_nn.cpp +0 -0
  145. {tensorstudio-1.3.6 → tensorstudio-1.4.0}/src/bindings/bind_ops.cpp +0 -0
  146. {tensorstudio-1.3.6 → tensorstudio-1.4.0}/src/bindings/bind_optim.cpp +0 -0
  147. {tensorstudio-1.3.6 → tensorstudio-1.4.0}/src/bindings/bindings.cpp +0 -0
  148. {tensorstudio-1.3.6 → tensorstudio-1.4.0}/src/bindings/bindings.hpp +0 -0
  149. {tensorstudio-1.3.6 → tensorstudio-1.4.0}/src/core/autograd.cpp +0 -0
  150. {tensorstudio-1.3.6 → tensorstudio-1.4.0}/src/core/device.cpp +0 -0
  151. {tensorstudio-1.3.6 → tensorstudio-1.4.0}/src/core/dtype.cpp +0 -0
  152. {tensorstudio-1.3.6 → tensorstudio-1.4.0}/src/core/errors.cpp +0 -0
  153. {tensorstudio-1.3.6 → tensorstudio-1.4.0}/src/core/module.cpp +0 -0
  154. {tensorstudio-1.3.6 → tensorstudio-1.4.0}/src/core/optim.cpp +0 -0
  155. {tensorstudio-1.3.6 → tensorstudio-1.4.0}/src/core/random.cpp +0 -0
  156. {tensorstudio-1.3.6 → tensorstudio-1.4.0}/src/core/serialization.cpp +0 -0
  157. {tensorstudio-1.3.6 → tensorstudio-1.4.0}/src/core/shape.cpp +0 -0
  158. {tensorstudio-1.3.6 → tensorstudio-1.4.0}/src/core/storage.cpp +0 -0
  159. {tensorstudio-1.3.6 → tensorstudio-1.4.0}/src/core/tensor.cpp +0 -0
  160. {tensorstudio-1.3.6 → tensorstudio-1.4.0}/test_all.py +0 -0
  161. {tensorstudio-1.3.6 → tensorstudio-1.4.0}/tests/test_autograd.py +0 -0
  162. {tensorstudio-1.3.6 → tensorstudio-1.4.0}/tests/test_benchmark_report.py +0 -0
  163. {tensorstudio-1.3.6 → tensorstudio-1.4.0}/tests/test_broadcasting.py +0 -0
  164. {tensorstudio-1.3.6 → tensorstudio-1.4.0}/tests/test_data.py +0 -0
  165. {tensorstudio-1.3.6 → tensorstudio-1.4.0}/tests/test_interchange.py +0 -0
  166. {tensorstudio-1.3.6 → tensorstudio-1.4.0}/tests/test_nn.py +0 -0
  167. {tensorstudio-1.3.6 → tensorstudio-1.4.0}/tests/test_numpy_interop.py +0 -0
  168. {tensorstudio-1.3.6 → tensorstudio-1.4.0}/tests/test_ops.py +0 -0
  169. {tensorstudio-1.3.6 → tensorstudio-1.4.0}/tests/test_optim.py +0 -0
  170. {tensorstudio-1.3.6 → tensorstudio-1.4.0}/tests/test_project.py +0 -0
  171. {tensorstudio-1.3.6 → tensorstudio-1.4.0}/tests/test_serialization.py +0 -0
  172. {tensorstudio-1.3.6 → tensorstudio-1.4.0}/tests/test_tensor.py +0 -0
  173. {tensorstudio-1.3.6 → tensorstudio-1.4.0}/tests/test_vision.py +0 -0
@@ -94,8 +94,6 @@ jobs:
94
94
  needs: [windows_wheels, linux_wheels, macos_wheels, build_sdist]
95
95
  runs-on: ubuntu-latest
96
96
  environment: pypi
97
- env:
98
- HAS_PYPI_TOKEN: ${{ secrets.PYPI_TOKEN != '' }}
99
97
  steps:
100
98
  - uses: actions/download-artifact@v4
101
99
  with:
@@ -106,14 +104,7 @@ jobs:
106
104
  run: |
107
105
  python -m pip install -U twine
108
106
  python -m twine check dist/*
109
- - name: Publish to PyPI with configured API token
110
- if: env.HAS_PYPI_TOKEN == 'true'
111
- uses: pypa/gh-action-pypi-publish@release/v1
112
- with:
113
- password: ${{ secrets.PYPI_TOKEN }}
114
- skip-existing: true
115
107
  - name: Publish to PyPI with Trusted Publishing
116
- if: env.HAS_PYPI_TOKEN != 'true'
117
108
  uses: pypa/gh-action-pypi-publish@release/v1
118
109
  with:
119
110
  skip-existing: true
@@ -2,6 +2,22 @@
2
2
 
3
3
  ## Unreleased
4
4
 
5
+ ## 1.4.0 - 2026-07-07
6
+
7
+ - Supersedes the short-lived `1.3.7` indexing release as a minor version
8
+ because the indexing/view API is a larger public surface change than a patch.
9
+ - Completed the next ordered correctness-roadmap item with native C++ basic
10
+ indexing and slicing views.
11
+ - Added Python `Tensor.__getitem__` support for integers, slices with steps,
12
+ tuples, ellipsis, and `None`/newaxis while rejecting advanced list, tensor,
13
+ and boolean indexing clearly.
14
+ - Added autograd scatter-back support for differentiable integer/slice views.
15
+ - Added NumPy parity tests for common indexing and slicing cases, scalar
16
+ indexing, negative strides, empty slices, unsupported indexing errors, and
17
+ indexing autograd.
18
+ - Expanded docs into multi-page sections for sparse documentation folders:
19
+ data, performance, project workflows, release process, and roadmap.
20
+
5
21
  ## 1.3.6 - 2026-07-07
6
22
 
7
23
  - Completed the next ordered correctness-roadmap item with native C++
@@ -1,6 +1,6 @@
1
1
  cmake_minimum_required(VERSION 3.18)
2
2
 
3
- project(tensorstudio VERSION 1.3.6 LANGUAGES CXX)
3
+ project(tensorstudio VERSION 1.4.0 LANGUAGES CXX)
4
4
 
5
5
  find_package(Python COMPONENTS Interpreter Development.Module REQUIRED)
6
6
  set(PYBIND11_FINDPYTHON ON)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: tensorstudio
3
- Version: 1.3.6
3
+ Version: 1.4.0
4
4
  Summary: TensorStudio is a compact C++ tensor and autograd engine with a Python API for learning, experimentation, and lightweight ML workloads.
5
5
  Keywords: tensor,autograd,machine-learning,cpp,pybind11
6
6
  Author: TensorStudio contributors
@@ -71,7 +71,7 @@ Description-Content-Type: text/markdown
71
71
  TensorStudio is a compact C++ tensor and autograd engine with a Python API for
72
72
  learning, experimentation, and lightweight ML workloads.
73
73
 
74
- TensorStudio `1.3.6` is a CPU-only stable API foundation. It is eager-only,
74
+ TensorStudio `1.4.0` is a CPU-only stable API foundation. It is eager-only,
75
75
  intentionally small, and not a replacement for mature ML frameworks.
76
76
 
77
77
  ## Install
@@ -145,6 +145,7 @@ y = ts.ones((2, 2))
145
145
  print((x + y).tolist())
146
146
  print((x @ y).numpy())
147
147
  print(x.reshape((4,)).tolist())
148
+ print(x[0, :].tolist())
148
149
  ```
149
150
 
150
151
  ## Tensor API
@@ -478,7 +479,9 @@ tokens or print secrets.
478
479
  `argmax` and `argmin`.
479
480
  - Selection helpers `where`, `maximum`, and `minimum` are native C++ tensor ops
480
481
  with broadcasting and autograd support for floating-point branches.
481
- - No sparse tensors or advanced indexing.
482
+ - Basic integer/slice indexing is supported as native C++ views with autograd
483
+ scatter-back. Advanced list, tensor, and boolean-mask indexing are not
484
+ implemented yet.
482
485
  - Dtype casting is basic and does not include a full promotion/casting policy.
483
486
  - Experimental performance; benchmarks are local references only.
484
487
  - Pickle serialization is for trusted TensorStudio objects only.
@@ -7,7 +7,7 @@
7
7
  TensorStudio is a compact C++ tensor and autograd engine with a Python API for
8
8
  learning, experimentation, and lightweight ML workloads.
9
9
 
10
- TensorStudio `1.3.6` is a CPU-only stable API foundation. It is eager-only,
10
+ TensorStudio `1.4.0` is a CPU-only stable API foundation. It is eager-only,
11
11
  intentionally small, and not a replacement for mature ML frameworks.
12
12
 
13
13
  ## Install
@@ -81,6 +81,7 @@ y = ts.ones((2, 2))
81
81
  print((x + y).tolist())
82
82
  print((x @ y).numpy())
83
83
  print(x.reshape((4,)).tolist())
84
+ print(x[0, :].tolist())
84
85
  ```
85
86
 
86
87
  ## Tensor API
@@ -414,7 +415,9 @@ tokens or print secrets.
414
415
  `argmax` and `argmin`.
415
416
  - Selection helpers `where`, `maximum`, and `minimum` are native C++ tensor ops
416
417
  with broadcasting and autograd support for floating-point branches.
417
- - No sparse tensors or advanced indexing.
418
+ - Basic integer/slice indexing is supported as native C++ views with autograd
419
+ scatter-back. Advanced list, tensor, and boolean-mask indexing are not
420
+ implemented yet.
418
421
  - Dtype casting is basic and does not include a full promotion/casting policy.
419
422
  - Experimental performance; benchmarks are local references only.
420
423
  - Pickle serialization is for trusted TensorStudio objects only.
@@ -0,0 +1,343 @@
1
+ # TensorStudio Benchmark Results
2
+
3
+ These benchmarks are local references, not marketing claims.
4
+ TensorStudio is compared on CPU only and uses the same shapes and dtype.
5
+
6
+ ## Environment
7
+
8
+ - Platform: `Windows-10-10.0.26200-SP0`
9
+ - Processor: `Intel64 Family 6 Model 158 Stepping 10, GenuineIntel`
10
+ - Python: `3.10.11`
11
+ - TensorStudio: `1.4.0`
12
+ - NumPy: `1.26.4`
13
+ - TensorFlow CPU eager: unavailable (not installed)
14
+ - PyTorch CPU: unavailable (not installed)
15
+ - JAX CPU dispatch: available (0.6.2)
16
+
17
+ ## Summary
18
+
19
+ - TensorStudio wins versus NumPy: `21`
20
+ - TensorStudio losses versus NumPy: `82`
21
+ - TensorStudio wins versus JAX CPU dispatch: `82`
22
+ - TensorStudio losses versus JAX CPU dispatch: `16`
23
+
24
+ TensorStudio beat NumPy on at least one local benchmark case. See the detailed table before making any narrow performance claim.
25
+
26
+ ## Detailed Results
27
+
28
+ | category | operation | shape | library | median ms | mean ms | min ms | max ms | std ms | TS vs NumPy | TS vs TensorFlow | TS vs PyTorch | TS vs JAX | win vs NumPy | win vs TensorFlow | win vs PyTorch | win vs JAX | fastest library | result |
29
+ |---|---|---:|---|---:|---:|---:|---:|---:|---:|---:|---:|---:|---|---|---|---|---|---|
30
+ | elementwise | add | `(1,)` | TensorStudio | 0.0037 | 0.0037 | 0.0034 | 0.0042 | 0.0003 | 0.2530 | n/a | n/a | 4.6534 | no | n/a | n/a | yes | NumPy | loss vs NumPy |
31
+ | elementwise | add | `(1,)` | NumPy | 0.0009 | 0.0010 | 0.0008 | 0.0011 | 0.0001 | 0.2530 | n/a | n/a | 4.6534 | no | n/a | n/a | yes | NumPy | NumPy baseline |
32
+ | elementwise | add | `(1,)` | JAX CPU dispatch | 0.0171 | 0.0181 | 0.0164 | 0.0204 | 0.0017 | 0.2530 | n/a | n/a | 4.6534 | no | n/a | n/a | yes | NumPy | reference |
33
+ | elementwise | sub | `(1,)` | TensorStudio | 0.0035 | 0.0035 | 0.0033 | 0.0038 | 0.0002 | 0.2537 | n/a | n/a | 4.4195 | no | n/a | n/a | yes | NumPy | loss vs NumPy |
34
+ | elementwise | sub | `(1,)` | NumPy | 0.0009 | 0.0009 | 0.0008 | 0.0010 | 0.0001 | 0.2537 | n/a | n/a | 4.4195 | no | n/a | n/a | yes | NumPy | NumPy baseline |
35
+ | elementwise | sub | `(1,)` | JAX CPU dispatch | 0.0154 | 0.0156 | 0.0150 | 0.0166 | 0.0006 | 0.2537 | n/a | n/a | 4.4195 | no | n/a | n/a | yes | NumPy | reference |
36
+ | elementwise | mul | `(1,)` | TensorStudio | 0.0033 | 0.0035 | 0.0031 | 0.0043 | 0.0004 | 0.2510 | n/a | n/a | 4.6930 | no | n/a | n/a | yes | NumPy | loss vs NumPy |
37
+ | elementwise | mul | `(1,)` | NumPy | 0.0008 | 0.0009 | 0.0008 | 0.0010 | 0.0001 | 0.2510 | n/a | n/a | 4.6930 | no | n/a | n/a | yes | NumPy | NumPy baseline |
38
+ | elementwise | mul | `(1,)` | JAX CPU dispatch | 0.0157 | 0.0154 | 0.0123 | 0.0173 | 0.0019 | 0.2510 | n/a | n/a | 4.6930 | no | n/a | n/a | yes | NumPy | reference |
39
+ | elementwise | div | `(1,)` | TensorStudio | 0.0031 | 0.0030 | 0.0027 | 0.0034 | 0.0003 | 0.2402 | n/a | n/a | 3.3549 | no | n/a | n/a | yes | NumPy | loss vs NumPy |
40
+ | elementwise | div | `(1,)` | NumPy | 0.0007 | 0.0008 | 0.0007 | 0.0009 | 0.0001 | 0.2402 | n/a | n/a | 3.3549 | no | n/a | n/a | yes | NumPy | NumPy baseline |
41
+ | elementwise | div | `(1,)` | JAX CPU dispatch | 0.0103 | 0.0107 | 0.0100 | 0.0121 | 0.0008 | 0.2402 | n/a | n/a | 3.3549 | no | n/a | n/a | yes | NumPy | reference |
42
+ | elementwise | chain_relu((x*2+1)/3) | `(1,)` | TensorStudio | 0.0103 | 0.0102 | 0.0101 | 0.0104 | 0.0001 | 0.5893 | n/a | n/a | 9.1453 | no | n/a | n/a | yes | NumPy | loss vs NumPy |
43
+ | elementwise | chain_relu((x*2+1)/3) | `(1,)` | NumPy | 0.0061 | 0.0061 | 0.0053 | 0.0071 | 0.0006 | 0.5893 | n/a | n/a | 9.1453 | no | n/a | n/a | yes | NumPy | NumPy baseline |
44
+ | elementwise | chain_relu((x*2+1)/3) | `(1,)` | JAX CPU dispatch | 0.0940 | 0.0959 | 0.0925 | 0.1011 | 0.0032 | 0.5893 | n/a | n/a | 9.1453 | no | n/a | n/a | yes | NumPy | reference |
45
+ | elementwise | add | `(8,)` | TensorStudio | 0.0027 | 0.0028 | 0.0026 | 0.0032 | 0.0002 | 0.2534 | n/a | n/a | 4.8394 | no | n/a | n/a | yes | NumPy | loss vs NumPy |
46
+ | elementwise | add | `(8,)` | NumPy | 0.0007 | 0.0007 | 0.0007 | 0.0010 | 0.0001 | 0.2534 | n/a | n/a | 4.8394 | no | n/a | n/a | yes | NumPy | NumPy baseline |
47
+ | elementwise | add | `(8,)` | JAX CPU dispatch | 0.0131 | 0.0131 | 0.0123 | 0.0136 | 0.0004 | 0.2534 | n/a | n/a | 4.8394 | no | n/a | n/a | yes | NumPy | reference |
48
+ | elementwise | sub | `(8,)` | TensorStudio | 0.0030 | 0.0030 | 0.0027 | 0.0035 | 0.0003 | 0.2341 | n/a | n/a | 4.1405 | no | n/a | n/a | yes | NumPy | loss vs NumPy |
49
+ | elementwise | sub | `(8,)` | NumPy | 0.0007 | 0.0008 | 0.0007 | 0.0009 | 0.0001 | 0.2341 | n/a | n/a | 4.1405 | no | n/a | n/a | yes | NumPy | NumPy baseline |
50
+ | elementwise | sub | `(8,)` | JAX CPU dispatch | 0.0124 | 0.0124 | 0.0121 | 0.0127 | 0.0002 | 0.2341 | n/a | n/a | 4.1405 | no | n/a | n/a | yes | NumPy | reference |
51
+ | elementwise | mul | `(8,)` | TensorStudio | 0.0044 | 0.0042 | 0.0031 | 0.0050 | 0.0007 | 0.2878 | n/a | n/a | 3.7879 | no | n/a | n/a | yes | NumPy | loss vs NumPy |
52
+ | elementwise | mul | `(8,)` | NumPy | 0.0013 | 0.0013 | 0.0009 | 0.0017 | 0.0003 | 0.2878 | n/a | n/a | 3.7879 | no | n/a | n/a | yes | NumPy | NumPy baseline |
53
+ | elementwise | mul | `(8,)` | JAX CPU dispatch | 0.0166 | 0.0172 | 0.0142 | 0.0219 | 0.0028 | 0.2878 | n/a | n/a | 3.7879 | no | n/a | n/a | yes | NumPy | reference |
54
+ | elementwise | div | `(8,)` | TensorStudio | 0.0043 | 0.0039 | 0.0028 | 0.0047 | 0.0008 | 0.2219 | n/a | n/a | 2.8756 | no | n/a | n/a | yes | NumPy | loss vs NumPy |
55
+ | elementwise | div | `(8,)` | NumPy | 0.0010 | 0.0012 | 0.0009 | 0.0016 | 0.0003 | 0.2219 | n/a | n/a | 2.8756 | no | n/a | n/a | yes | NumPy | NumPy baseline |
56
+ | elementwise | div | `(8,)` | JAX CPU dispatch | 0.0125 | 0.0133 | 0.0102 | 0.0169 | 0.0026 | 0.2219 | n/a | n/a | 2.8756 | no | n/a | n/a | yes | NumPy | reference |
57
+ | elementwise | chain_relu((x*2+1)/3) | `(8,)` | TensorStudio | 0.0127 | 0.0126 | 0.0116 | 0.0136 | 0.0008 | 0.6136 | n/a | n/a | 8.8126 | no | n/a | n/a | yes | NumPy | loss vs NumPy |
58
+ | elementwise | chain_relu((x*2+1)/3) | `(8,)` | NumPy | 0.0078 | 0.0075 | 0.0060 | 0.0087 | 0.0011 | 0.6136 | n/a | n/a | 8.8126 | no | n/a | n/a | yes | NumPy | NumPy baseline |
59
+ | elementwise | chain_relu((x*2+1)/3) | `(8,)` | JAX CPU dispatch | 0.1118 | 0.1151 | 0.1068 | 0.1285 | 0.0084 | 0.6136 | n/a | n/a | 8.8126 | no | n/a | n/a | yes | NumPy | reference |
60
+ | elementwise | add | `(32,)` | TensorStudio | 0.0042 | 0.0041 | 0.0035 | 0.0048 | 0.0005 | 0.2307 | n/a | n/a | 3.6665 | no | n/a | n/a | yes | NumPy | loss vs NumPy |
61
+ | elementwise | add | `(32,)` | NumPy | 0.0010 | 0.0010 | 0.0007 | 0.0012 | 0.0002 | 0.2307 | n/a | n/a | 3.6665 | no | n/a | n/a | yes | NumPy | NumPy baseline |
62
+ | elementwise | add | `(32,)` | JAX CPU dispatch | 0.0152 | 0.0153 | 0.0127 | 0.0182 | 0.0020 | 0.2307 | n/a | n/a | 3.6665 | no | n/a | n/a | yes | NumPy | reference |
63
+ | elementwise | sub | `(32,)` | TensorStudio | 0.0032 | 0.0031 | 0.0026 | 0.0035 | 0.0004 | 0.3866 | n/a | n/a | 5.1002 | no | n/a | n/a | yes | NumPy | loss vs NumPy |
64
+ | elementwise | sub | `(32,)` | NumPy | 0.0012 | 0.0012 | 0.0008 | 0.0015 | 0.0003 | 0.3866 | n/a | n/a | 5.1002 | no | n/a | n/a | yes | NumPy | NumPy baseline |
65
+ | elementwise | sub | `(32,)` | JAX CPU dispatch | 0.0164 | 0.0165 | 0.0124 | 0.0197 | 0.0024 | 0.3866 | n/a | n/a | 5.1002 | no | n/a | n/a | yes | NumPy | reference |
66
+ | elementwise | mul | `(32,)` | TensorStudio | 0.0038 | 0.0040 | 0.0032 | 0.0052 | 0.0007 | 0.3289 | n/a | n/a | 4.1596 | no | n/a | n/a | yes | NumPy | loss vs NumPy |
67
+ | elementwise | mul | `(32,)` | NumPy | 0.0013 | 0.0011 | 0.0007 | 0.0014 | 0.0003 | 0.3289 | n/a | n/a | 4.1596 | no | n/a | n/a | yes | NumPy | NumPy baseline |
68
+ | elementwise | mul | `(32,)` | JAX CPU dispatch | 0.0158 | 0.0158 | 0.0144 | 0.0171 | 0.0009 | 0.3289 | n/a | n/a | 4.1596 | no | n/a | n/a | yes | NumPy | reference |
69
+ | elementwise | div | `(32,)` | TensorStudio | 0.0037 | 0.0037 | 0.0029 | 0.0044 | 0.0005 | 0.3093 | n/a | n/a | 4.0385 | no | n/a | n/a | yes | NumPy | loss vs NumPy |
70
+ | elementwise | div | `(32,)` | NumPy | 0.0011 | 0.0011 | 0.0008 | 0.0016 | 0.0003 | 0.3093 | n/a | n/a | 4.0385 | no | n/a | n/a | yes | NumPy | NumPy baseline |
71
+ | elementwise | div | `(32,)` | JAX CPU dispatch | 0.0148 | 0.0143 | 0.0122 | 0.0156 | 0.0012 | 0.3093 | n/a | n/a | 4.0385 | no | n/a | n/a | yes | NumPy | reference |
72
+ | elementwise | chain_relu((x*2+1)/3) | `(32,)` | TensorStudio | 0.0126 | 0.0129 | 0.0118 | 0.0148 | 0.0010 | 0.5922 | n/a | n/a | 8.9456 | no | n/a | n/a | yes | NumPy | loss vs NumPy |
73
+ | elementwise | chain_relu((x*2+1)/3) | `(32,)` | NumPy | 0.0075 | 0.0072 | 0.0058 | 0.0080 | 0.0007 | 0.5922 | n/a | n/a | 8.9456 | no | n/a | n/a | yes | NumPy | NumPy baseline |
74
+ | elementwise | chain_relu((x*2+1)/3) | `(32,)` | JAX CPU dispatch | 0.1131 | 0.1132 | 0.1035 | 0.1234 | 0.0066 | 0.5922 | n/a | n/a | 8.9456 | no | n/a | n/a | yes | NumPy | reference |
75
+ | elementwise | add | `(128,)` | TensorStudio | 0.0030 | 0.0031 | 0.0028 | 0.0035 | 0.0002 | 0.2890 | n/a | n/a | 4.2054 | no | n/a | n/a | yes | NumPy | loss vs NumPy |
76
+ | elementwise | add | `(128,)` | NumPy | 0.0009 | 0.0008 | 0.0007 | 0.0011 | 0.0001 | 0.2890 | n/a | n/a | 4.2054 | no | n/a | n/a | yes | NumPy | NumPy baseline |
77
+ | elementwise | add | `(128,)` | JAX CPU dispatch | 0.0126 | 0.0125 | 0.0122 | 0.0129 | 0.0003 | 0.2890 | n/a | n/a | 4.2054 | no | n/a | n/a | yes | NumPy | reference |
78
+ | elementwise | sub | `(128,)` | TensorStudio | 0.0031 | 0.0030 | 0.0027 | 0.0032 | 0.0002 | 0.2434 | n/a | n/a | 4.3311 | no | n/a | n/a | yes | NumPy | loss vs NumPy |
79
+ | elementwise | sub | `(128,)` | NumPy | 0.0007 | 0.0008 | 0.0007 | 0.0009 | 0.0001 | 0.2434 | n/a | n/a | 4.3311 | no | n/a | n/a | yes | NumPy | NumPy baseline |
80
+ | elementwise | sub | `(128,)` | JAX CPU dispatch | 0.0133 | 0.0135 | 0.0127 | 0.0149 | 0.0008 | 0.2434 | n/a | n/a | 4.3311 | no | n/a | n/a | yes | NumPy | reference |
81
+ | elementwise | mul | `(128,)` | TensorStudio | 0.0029 | 0.0029 | 0.0028 | 0.0031 | 0.0001 | 0.2828 | n/a | n/a | 4.7270 | no | n/a | n/a | yes | NumPy | loss vs NumPy |
82
+ | elementwise | mul | `(128,)` | NumPy | 0.0008 | 0.0008 | 0.0007 | 0.0011 | 0.0001 | 0.2828 | n/a | n/a | 4.7270 | no | n/a | n/a | yes | NumPy | NumPy baseline |
83
+ | elementwise | mul | `(128,)` | JAX CPU dispatch | 0.0137 | 0.0138 | 0.0130 | 0.0147 | 0.0006 | 0.2828 | n/a | n/a | 4.7270 | no | n/a | n/a | yes | NumPy | reference |
84
+ | elementwise | div | `(128,)` | TensorStudio | 0.0032 | 0.0031 | 0.0029 | 0.0034 | 0.0002 | 0.2336 | n/a | n/a | 3.0804 | no | n/a | n/a | yes | NumPy | loss vs NumPy |
85
+ | elementwise | div | `(128,)` | NumPy | 0.0007 | 0.0009 | 0.0007 | 0.0014 | 0.0003 | 0.2336 | n/a | n/a | 3.0804 | no | n/a | n/a | yes | NumPy | NumPy baseline |
86
+ | elementwise | div | `(128,)` | JAX CPU dispatch | 0.0098 | 0.0101 | 0.0096 | 0.0109 | 0.0006 | 0.2336 | n/a | n/a | 3.0804 | no | n/a | n/a | yes | NumPy | reference |
87
+ | elementwise | chain_relu((x*2+1)/3) | `(128,)` | TensorStudio | 0.0109 | 0.0109 | 0.0105 | 0.0113 | 0.0003 | 0.5558 | n/a | n/a | 8.4986 | no | n/a | n/a | yes | NumPy | loss vs NumPy |
88
+ | elementwise | chain_relu((x*2+1)/3) | `(128,)` | NumPy | 0.0061 | 0.0061 | 0.0059 | 0.0063 | 0.0002 | 0.5558 | n/a | n/a | 8.4986 | no | n/a | n/a | yes | NumPy | NumPy baseline |
89
+ | elementwise | chain_relu((x*2+1)/3) | `(128,)` | JAX CPU dispatch | 0.0930 | 0.0940 | 0.0914 | 0.0973 | 0.0025 | 0.5558 | n/a | n/a | 8.4986 | no | n/a | n/a | yes | NumPy | reference |
90
+ | elementwise | add | `(1024,)` | TensorStudio | 0.0033 | 0.0034 | 0.0031 | 0.0039 | 0.0003 | 0.3062 | n/a | n/a | 4.2459 | no | n/a | n/a | yes | NumPy | loss vs NumPy |
91
+ | elementwise | add | `(1024,)` | NumPy | 0.0010 | 0.0010 | 0.0010 | 0.0010 | 0.0000 | 0.3062 | n/a | n/a | 4.2459 | no | n/a | n/a | yes | NumPy | NumPy baseline |
92
+ | elementwise | add | `(1024,)` | JAX CPU dispatch | 0.0141 | 0.0143 | 0.0125 | 0.0157 | 0.0012 | 0.3062 | n/a | n/a | 4.2459 | no | n/a | n/a | yes | NumPy | reference |
93
+ | elementwise | sub | `(1024,)` | TensorStudio | 0.0031 | 0.0031 | 0.0031 | 0.0031 | 0.0000 | 0.3425 | n/a | n/a | 4.3143 | no | n/a | n/a | yes | NumPy | loss vs NumPy |
94
+ | elementwise | sub | `(1024,)` | NumPy | 0.0010 | 0.0012 | 0.0010 | 0.0016 | 0.0002 | 0.3425 | n/a | n/a | 4.3143 | no | n/a | n/a | yes | NumPy | NumPy baseline |
95
+ | elementwise | sub | `(1024,)` | JAX CPU dispatch | 0.0132 | 0.0141 | 0.0130 | 0.0164 | 0.0013 | 0.3425 | n/a | n/a | 4.3143 | no | n/a | n/a | yes | NumPy | reference |
96
+ | elementwise | mul | `(1024,)` | TensorStudio | 0.0030 | 0.0030 | 0.0029 | 0.0031 | 0.0001 | 0.3330 | n/a | n/a | 4.8399 | no | n/a | n/a | yes | NumPy | loss vs NumPy |
97
+ | elementwise | mul | `(1024,)` | NumPy | 0.0010 | 0.0010 | 0.0010 | 0.0010 | 0.0000 | 0.3330 | n/a | n/a | 4.8399 | no | n/a | n/a | yes | NumPy | NumPy baseline |
98
+ | elementwise | mul | `(1024,)` | JAX CPU dispatch | 0.0146 | 0.0149 | 0.0137 | 0.0162 | 0.0009 | 0.3330 | n/a | n/a | 4.8399 | no | n/a | n/a | yes | NumPy | reference |
99
+ | elementwise | div | `(1024,)` | TensorStudio | 0.0034 | 0.0035 | 0.0032 | 0.0038 | 0.0002 | 0.3238 | n/a | n/a | 3.2645 | no | n/a | n/a | yes | NumPy | loss vs NumPy |
100
+ | elementwise | div | `(1024,)` | NumPy | 0.0011 | 0.0011 | 0.0011 | 0.0011 | 0.0000 | 0.3238 | n/a | n/a | 3.2645 | no | n/a | n/a | yes | NumPy | NumPy baseline |
101
+ | elementwise | div | `(1024,)` | JAX CPU dispatch | 0.0112 | 0.0111 | 0.0102 | 0.0117 | 0.0005 | 0.3238 | n/a | n/a | 3.2645 | no | n/a | n/a | yes | NumPy | reference |
102
+ | elementwise | chain_relu((x*2+1)/3) | `(1024,)` | TensorStudio | 0.0119 | 0.0121 | 0.0116 | 0.0129 | 0.0004 | 0.6478 | n/a | n/a | 9.8390 | no | n/a | n/a | yes | NumPy | loss vs NumPy |
103
+ | elementwise | chain_relu((x*2+1)/3) | `(1024,)` | NumPy | 0.0077 | 0.0076 | 0.0073 | 0.0078 | 0.0002 | 0.6478 | n/a | n/a | 9.8390 | no | n/a | n/a | yes | NumPy | NumPy baseline |
104
+ | elementwise | chain_relu((x*2+1)/3) | `(1024,)` | JAX CPU dispatch | 0.1172 | 0.1179 | 0.1092 | 0.1307 | 0.0075 | 0.6478 | n/a | n/a | 9.8390 | no | n/a | n/a | yes | NumPy | reference |
105
+ | elementwise | add | `(4096,)` | TensorStudio | 0.0050 | 0.0052 | 0.0050 | 0.0055 | 0.0002 | 0.5239 | n/a | n/a | 2.8032 | no | n/a | n/a | yes | NumPy | loss vs NumPy |
106
+ | elementwise | add | `(4096,)` | NumPy | 0.0026 | 0.0025 | 0.0018 | 0.0032 | 0.0006 | 0.5239 | n/a | n/a | 2.8032 | no | n/a | n/a | yes | NumPy | NumPy baseline |
107
+ | elementwise | add | `(4096,)` | JAX CPU dispatch | 0.0141 | 0.0147 | 0.0134 | 0.0167 | 0.0013 | 0.5239 | n/a | n/a | 2.8032 | no | n/a | n/a | yes | NumPy | reference |
108
+ | elementwise | sub | `(4096,)` | TensorStudio | 0.0050 | 0.0049 | 0.0047 | 0.0051 | 0.0002 | 0.3018 | n/a | n/a | 3.0245 | no | n/a | n/a | yes | NumPy | loss vs NumPy |
109
+ | elementwise | sub | `(4096,)` | NumPy | 0.0015 | 0.0015 | 0.0015 | 0.0016 | 0.0000 | 0.3018 | n/a | n/a | 3.0245 | no | n/a | n/a | yes | NumPy | NumPy baseline |
110
+ | elementwise | sub | `(4096,)` | JAX CPU dispatch | 0.0150 | 0.0151 | 0.0141 | 0.0159 | 0.0007 | 0.3018 | n/a | n/a | 3.0245 | no | n/a | n/a | yes | NumPy | reference |
111
+ | elementwise | mul | `(4096,)` | TensorStudio | 0.0052 | 0.0053 | 0.0046 | 0.0065 | 0.0007 | 0.2811 | n/a | n/a | 2.8881 | no | n/a | n/a | yes | NumPy | loss vs NumPy |
112
+ | elementwise | mul | `(4096,)` | NumPy | 0.0015 | 0.0015 | 0.0015 | 0.0015 | 0.0000 | 0.2811 | n/a | n/a | 2.8881 | no | n/a | n/a | yes | NumPy | NumPy baseline |
113
+ | elementwise | mul | `(4096,)` | JAX CPU dispatch | 0.0151 | 0.0167 | 0.0129 | 0.0206 | 0.0029 | 0.2811 | n/a | n/a | 2.8881 | no | n/a | n/a | yes | NumPy | reference |
114
+ | elementwise | div | `(4096,)` | TensorStudio | 0.0057 | 0.0057 | 0.0056 | 0.0059 | 0.0001 | 0.2934 | n/a | n/a | 2.0481 | no | n/a | n/a | yes | NumPy | loss vs NumPy |
115
+ | elementwise | div | `(4096,)` | NumPy | 0.0017 | 0.0017 | 0.0017 | 0.0018 | 0.0001 | 0.2934 | n/a | n/a | 2.0481 | no | n/a | n/a | yes | NumPy | NumPy baseline |
116
+ | elementwise | div | `(4096,)` | JAX CPU dispatch | 0.0117 | 0.0115 | 0.0104 | 0.0127 | 0.0008 | 0.2934 | n/a | n/a | 2.0481 | no | n/a | n/a | yes | NumPy | reference |
117
+ | elementwise | chain_relu((x*2+1)/3) | `(4096,)` | TensorStudio | 0.0199 | 0.0198 | 0.0192 | 0.0204 | 0.0005 | 0.5088 | n/a | n/a | 6.0397 | no | n/a | n/a | yes | NumPy | loss vs NumPy |
118
+ | elementwise | chain_relu((x*2+1)/3) | `(4096,)` | NumPy | 0.0101 | 0.0106 | 0.0099 | 0.0128 | 0.0011 | 0.5088 | n/a | n/a | 6.0397 | no | n/a | n/a | yes | NumPy | NumPy baseline |
119
+ | elementwise | chain_relu((x*2+1)/3) | `(4096,)` | JAX CPU dispatch | 0.1202 | 0.1209 | 0.1152 | 0.1287 | 0.0052 | 0.5088 | n/a | n/a | 6.0397 | no | n/a | n/a | yes | NumPy | reference |
120
+ | elementwise | add | `(16384,)` | TensorStudio | 0.0141 | 0.0143 | 0.0138 | 0.0154 | 0.0006 | 0.2772 | n/a | n/a | 0.9670 | no | n/a | n/a | no | NumPy | loss vs NumPy |
121
+ | elementwise | add | `(16384,)` | NumPy | 0.0039 | 0.0044 | 0.0038 | 0.0062 | 0.0009 | 0.2772 | n/a | n/a | 0.9670 | no | n/a | n/a | no | NumPy | NumPy baseline |
122
+ | elementwise | add | `(16384,)` | JAX CPU dispatch | 0.0136 | 0.0144 | 0.0128 | 0.0165 | 0.0015 | 0.2772 | n/a | n/a | 0.9670 | no | n/a | n/a | no | NumPy | reference |
123
+ | elementwise | sub | `(16384,)` | TensorStudio | 0.0099 | 0.0099 | 0.0098 | 0.0099 | 0.0000 | 0.4004 | n/a | n/a | 1.3479 | no | n/a | n/a | yes | NumPy | loss vs NumPy |
124
+ | elementwise | sub | `(16384,)` | NumPy | 0.0039 | 0.0040 | 0.0039 | 0.0040 | 0.0000 | 0.4004 | n/a | n/a | 1.3479 | no | n/a | n/a | yes | NumPy | NumPy baseline |
125
+ | elementwise | sub | `(16384,)` | JAX CPU dispatch | 0.0133 | 0.0175 | 0.0128 | 0.0332 | 0.0079 | 0.4004 | n/a | n/a | 1.3479 | no | n/a | n/a | yes | NumPy | reference |
126
+ | elementwise | mul | `(16384,)` | TensorStudio | 0.0095 | 0.0095 | 0.0095 | 0.0095 | 0.0000 | 0.3853 | n/a | n/a | 1.4744 | no | n/a | n/a | yes | NumPy | loss vs NumPy |
127
+ | elementwise | mul | `(16384,)` | NumPy | 0.0037 | 0.0037 | 0.0036 | 0.0037 | 0.0000 | 0.3853 | n/a | n/a | 1.4744 | no | n/a | n/a | yes | NumPy | NumPy baseline |
128
+ | elementwise | mul | `(16384,)` | JAX CPU dispatch | 0.0140 | 0.0161 | 0.0131 | 0.0215 | 0.0034 | 0.3853 | n/a | n/a | 1.4744 | no | n/a | n/a | yes | NumPy | reference |
129
+ | elementwise | div | `(16384,)` | TensorStudio | 0.0135 | 0.0136 | 0.0134 | 0.0138 | 0.0001 | 0.4467 | n/a | n/a | 0.8842 | no | n/a | n/a | no | NumPy | loss vs NumPy |
130
+ | elementwise | div | `(16384,)` | NumPy | 0.0060 | 0.0056 | 0.0046 | 0.0064 | 0.0008 | 0.4467 | n/a | n/a | 0.8842 | no | n/a | n/a | no | NumPy | NumPy baseline |
131
+ | elementwise | div | `(16384,)` | JAX CPU dispatch | 0.0119 | 0.0137 | 0.0112 | 0.0189 | 0.0029 | 0.4467 | n/a | n/a | 0.8842 | no | n/a | n/a | no | NumPy | reference |
132
+ | elementwise | chain_relu((x*2+1)/3) | `(16384,)` | TensorStudio | 0.0451 | 0.0479 | 0.0436 | 0.0533 | 0.0044 | 0.5097 | n/a | n/a | 3.2142 | no | n/a | n/a | yes | NumPy | loss vs NumPy |
133
+ | elementwise | chain_relu((x*2+1)/3) | `(16384,)` | NumPy | 0.0230 | 0.0243 | 0.0228 | 0.0282 | 0.0021 | 0.5097 | n/a | n/a | 3.2142 | no | n/a | n/a | yes | NumPy | NumPy baseline |
134
+ | elementwise | chain_relu((x*2+1)/3) | `(16384,)` | JAX CPU dispatch | 0.1449 | 0.1438 | 0.1240 | 0.1541 | 0.0109 | 0.5097 | n/a | n/a | 3.2142 | no | n/a | n/a | yes | NumPy | reference |
135
+ | activations | relu | `(1,)` | TensorStudio | 0.0018 | 0.0018 | 0.0017 | 0.0019 | 0.0001 | 0.9680 | n/a | n/a | 24.7693 | no | n/a | n/a | yes | NumPy | loss vs NumPy |
136
+ | activations | relu | `(1,)` | NumPy | 0.0017 | 0.0019 | 0.0017 | 0.0021 | 0.0002 | 0.9680 | n/a | n/a | 24.7693 | no | n/a | n/a | yes | NumPy | NumPy baseline |
137
+ | activations | relu | `(1,)` | JAX CPU dispatch | 0.0445 | 0.0444 | 0.0434 | 0.0453 | 0.0008 | 0.9680 | n/a | n/a | 24.7693 | no | n/a | n/a | yes | NumPy | reference |
138
+ | activations | sigmoid | `(1,)` | TensorStudio | 0.0018 | 0.0018 | 0.0017 | 0.0018 | 0.0000 | 2.6046 | n/a | n/a | 41.0256 | yes | n/a | n/a | yes | TensorStudio | win vs NumPy |
139
+ | activations | sigmoid | `(1,)` | NumPy | 0.0046 | 0.0046 | 0.0044 | 0.0046 | 0.0001 | 2.6046 | n/a | n/a | 41.0256 | yes | n/a | n/a | yes | TensorStudio | NumPy baseline |
140
+ | activations | sigmoid | `(1,)` | JAX CPU dispatch | 0.0731 | 0.0732 | 0.0718 | 0.0747 | 0.0009 | 2.6046 | n/a | n/a | 41.0256 | yes | n/a | n/a | yes | TensorStudio | reference |
141
+ | activations | tanh | `(1,)` | TensorStudio | 0.0018 | 0.0018 | 0.0018 | 0.0018 | 0.0000 | 0.6867 | n/a | n/a | 17.2819 | no | n/a | n/a | yes | NumPy | loss vs NumPy |
142
+ | activations | tanh | `(1,)` | NumPy | 0.0012 | 0.0012 | 0.0012 | 0.0013 | 0.0000 | 0.6867 | n/a | n/a | 17.2819 | no | n/a | n/a | yes | NumPy | NumPy baseline |
143
+ | activations | tanh | `(1,)` | JAX CPU dispatch | 0.0311 | 0.0305 | 0.0289 | 0.0313 | 0.0010 | 0.6867 | n/a | n/a | 17.2819 | no | n/a | n/a | yes | NumPy | reference |
144
+ | activations | exp | `(1,)` | TensorStudio | 0.0019 | 0.0019 | 0.0018 | 0.0019 | 0.0000 | 0.6774 | n/a | n/a | 16.4073 | no | n/a | n/a | yes | NumPy | loss vs NumPy |
145
+ | activations | exp | `(1,)` | NumPy | 0.0013 | 0.0013 | 0.0012 | 0.0015 | 0.0001 | 0.6774 | n/a | n/a | 16.4073 | no | n/a | n/a | yes | NumPy | NumPy baseline |
146
+ | activations | exp | `(1,)` | JAX CPU dispatch | 0.0306 | 0.0307 | 0.0302 | 0.0310 | 0.0003 | 0.6774 | n/a | n/a | 16.4073 | no | n/a | n/a | yes | NumPy | reference |
147
+ | activations | log | `(1,)` | TensorStudio | 0.0019 | 0.0021 | 0.0018 | 0.0031 | 0.0005 | 0.6880 | n/a | n/a | 16.2846 | no | n/a | n/a | yes | NumPy | loss vs NumPy |
148
+ | activations | log | `(1,)` | NumPy | 0.0013 | 0.0013 | 0.0013 | 0.0014 | 0.0000 | 0.6880 | n/a | n/a | 16.2846 | no | n/a | n/a | yes | NumPy | NumPy baseline |
149
+ | activations | log | `(1,)` | JAX CPU dispatch | 0.0308 | 0.0309 | 0.0298 | 0.0321 | 0.0007 | 0.6880 | n/a | n/a | 16.2846 | no | n/a | n/a | yes | NumPy | reference |
150
+ | activations | relu | `(8,)` | TensorStudio | 0.0018 | 0.0018 | 0.0018 | 0.0019 | 0.0000 | 0.9511 | n/a | n/a | 25.2251 | no | n/a | n/a | yes | NumPy | loss vs NumPy |
151
+ | activations | relu | `(8,)` | NumPy | 0.0018 | 0.0018 | 0.0017 | 0.0020 | 0.0001 | 0.9511 | n/a | n/a | 25.2251 | no | n/a | n/a | yes | NumPy | NumPy baseline |
152
+ | activations | relu | `(8,)` | JAX CPU dispatch | 0.0465 | 0.0466 | 0.0448 | 0.0482 | 0.0013 | 0.9511 | n/a | n/a | 25.2251 | no | n/a | n/a | yes | NumPy | reference |
153
+ | activations | sigmoid | `(8,)` | TensorStudio | 0.0019 | 0.0019 | 0.0018 | 0.0019 | 0.0000 | 2.4135 | n/a | n/a | 40.1222 | yes | n/a | n/a | yes | TensorStudio | win vs NumPy |
154
+ | activations | sigmoid | `(8,)` | NumPy | 0.0046 | 0.0047 | 0.0045 | 0.0050 | 0.0002 | 2.4135 | n/a | n/a | 40.1222 | yes | n/a | n/a | yes | TensorStudio | NumPy baseline |
155
+ | activations | sigmoid | `(8,)` | JAX CPU dispatch | 0.0757 | 0.0761 | 0.0736 | 0.0790 | 0.0019 | 2.4135 | n/a | n/a | 40.1222 | yes | n/a | n/a | yes | TensorStudio | reference |
156
+ | activations | tanh | `(8,)` | TensorStudio | 0.0019 | 0.0020 | 0.0019 | 0.0023 | 0.0002 | 0.7120 | n/a | n/a | 17.3624 | no | n/a | n/a | yes | NumPy | loss vs NumPy |
157
+ | activations | tanh | `(8,)` | NumPy | 0.0013 | 0.0017 | 0.0012 | 0.0032 | 0.0008 | 0.7120 | n/a | n/a | 17.3624 | no | n/a | n/a | yes | NumPy | NumPy baseline |
158
+ | activations | tanh | `(8,)` | JAX CPU dispatch | 0.0325 | 0.0345 | 0.0299 | 0.0448 | 0.0053 | 0.7120 | n/a | n/a | 17.3624 | no | n/a | n/a | yes | NumPy | reference |
159
+ | activations | exp | `(8,)` | TensorStudio | 0.0019 | 0.0019 | 0.0018 | 0.0022 | 0.0001 | 0.7092 | n/a | n/a | 17.5271 | no | n/a | n/a | yes | NumPy | loss vs NumPy |
160
+ | activations | exp | `(8,)` | NumPy | 0.0013 | 0.0014 | 0.0012 | 0.0016 | 0.0002 | 0.7092 | n/a | n/a | 17.5271 | no | n/a | n/a | yes | NumPy | NumPy baseline |
161
+ | activations | exp | `(8,)` | JAX CPU dispatch | 0.0325 | 0.0326 | 0.0305 | 0.0356 | 0.0017 | 0.7092 | n/a | n/a | 17.5271 | no | n/a | n/a | yes | NumPy | reference |
162
+ | activations | log | `(8,)` | TensorStudio | 0.0019 | 0.0021 | 0.0018 | 0.0028 | 0.0004 | 0.7024 | n/a | n/a | 16.5909 | no | n/a | n/a | yes | NumPy | loss vs NumPy |
163
+ | activations | log | `(8,)` | NumPy | 0.0013 | 0.0015 | 0.0012 | 0.0020 | 0.0003 | 0.7024 | n/a | n/a | 16.5909 | no | n/a | n/a | yes | NumPy | NumPy baseline |
164
+ | activations | log | `(8,)` | JAX CPU dispatch | 0.0314 | 0.0316 | 0.0302 | 0.0326 | 0.0009 | 0.7024 | n/a | n/a | 16.5909 | no | n/a | n/a | yes | NumPy | reference |
165
+ | activations | relu | `(32,)` | TensorStudio | 0.0018 | 0.0018 | 0.0017 | 0.0019 | 0.0001 | 0.9615 | n/a | n/a | 24.8700 | no | n/a | n/a | yes | NumPy | loss vs NumPy |
166
+ | activations | relu | `(32,)` | NumPy | 0.0017 | 0.0018 | 0.0017 | 0.0021 | 0.0002 | 0.9615 | n/a | n/a | 24.8700 | no | n/a | n/a | yes | NumPy | NumPy baseline |
167
+ | activations | relu | `(32,)` | JAX CPU dispatch | 0.0449 | 0.0451 | 0.0440 | 0.0468 | 0.0009 | 0.9615 | n/a | n/a | 24.8700 | no | n/a | n/a | yes | NumPy | reference |
168
+ | activations | sigmoid | `(32,)` | TensorStudio | 0.0022 | 0.0023 | 0.0021 | 0.0025 | 0.0002 | 2.0911 | n/a | n/a | 34.4554 | yes | n/a | n/a | yes | TensorStudio | win vs NumPy |
169
+ | activations | sigmoid | `(32,)` | NumPy | 0.0047 | 0.0047 | 0.0044 | 0.0051 | 0.0003 | 2.0911 | n/a | n/a | 34.4554 | yes | n/a | n/a | yes | TensorStudio | NumPy baseline |
170
+ | activations | sigmoid | `(32,)` | JAX CPU dispatch | 0.0767 | 0.0771 | 0.0738 | 0.0816 | 0.0029 | 2.0911 | n/a | n/a | 34.4554 | yes | n/a | n/a | yes | TensorStudio | reference |
171
+ | activations | tanh | `(32,)` | TensorStudio | 0.0023 | 0.0023 | 0.0021 | 0.0026 | 0.0002 | 0.5783 | n/a | n/a | 14.5695 | no | n/a | n/a | yes | NumPy | loss vs NumPy |
172
+ | activations | tanh | `(32,)` | NumPy | 0.0013 | 0.0014 | 0.0013 | 0.0017 | 0.0002 | 0.5783 | n/a | n/a | 14.5695 | no | n/a | n/a | yes | NumPy | NumPy baseline |
173
+ | activations | tanh | `(32,)` | JAX CPU dispatch | 0.0333 | 0.0340 | 0.0303 | 0.0411 | 0.0038 | 0.5783 | n/a | n/a | 14.5695 | no | n/a | n/a | yes | NumPy | reference |
174
+ | activations | exp | `(32,)` | TensorStudio | 0.0021 | 0.0022 | 0.0020 | 0.0025 | 0.0002 | 0.6087 | n/a | n/a | 14.9879 | no | n/a | n/a | yes | NumPy | loss vs NumPy |
175
+ | activations | exp | `(32,)` | NumPy | 0.0013 | 0.0013 | 0.0013 | 0.0014 | 0.0000 | 0.6087 | n/a | n/a | 14.9879 | no | n/a | n/a | yes | NumPy | NumPy baseline |
176
+ | activations | exp | `(32,)` | JAX CPU dispatch | 0.0318 | 0.0339 | 0.0302 | 0.0426 | 0.0044 | 0.6087 | n/a | n/a | 14.9879 | no | n/a | n/a | yes | NumPy | reference |
177
+ | activations | log | `(32,)` | TensorStudio | 0.0021 | 0.0021 | 0.0020 | 0.0023 | 0.0001 | 0.6062 | n/a | n/a | 14.4819 | no | n/a | n/a | yes | NumPy | loss vs NumPy |
178
+ | activations | log | `(32,)` | NumPy | 0.0013 | 0.0013 | 0.0013 | 0.0014 | 0.0001 | 0.6062 | n/a | n/a | 14.4819 | no | n/a | n/a | yes | NumPy | NumPy baseline |
179
+ | activations | log | `(32,)` | JAX CPU dispatch | 0.0311 | 0.0314 | 0.0304 | 0.0325 | 0.0009 | 0.6062 | n/a | n/a | 14.4819 | no | n/a | n/a | yes | NumPy | reference |
180
+ | activations | relu | `(128,)` | TensorStudio | 0.0020 | 0.0020 | 0.0019 | 0.0021 | 0.0001 | 0.9175 | n/a | n/a | 23.1752 | no | n/a | n/a | yes | NumPy | loss vs NumPy |
181
+ | activations | relu | `(128,)` | NumPy | 0.0018 | 0.0018 | 0.0017 | 0.0021 | 0.0001 | 0.9175 | n/a | n/a | 23.1752 | no | n/a | n/a | yes | NumPy | NumPy baseline |
182
+ | activations | relu | `(128,)` | JAX CPU dispatch | 0.0453 | 0.0455 | 0.0449 | 0.0459 | 0.0004 | 0.9175 | n/a | n/a | 23.1752 | no | n/a | n/a | yes | NumPy | reference |
183
+ | activations | sigmoid | `(128,)` | TensorStudio | 0.0028 | 0.0028 | 0.0028 | 0.0029 | 0.0000 | 1.6843 | n/a | n/a | 26.0389 | yes | n/a | n/a | yes | TensorStudio | win vs NumPy |
184
+ | activations | sigmoid | `(128,)` | NumPy | 0.0048 | 0.0047 | 0.0046 | 0.0048 | 0.0001 | 1.6843 | n/a | n/a | 26.0389 | yes | n/a | n/a | yes | TensorStudio | NumPy baseline |
185
+ | activations | sigmoid | `(128,)` | JAX CPU dispatch | 0.0741 | 0.0751 | 0.0732 | 0.0776 | 0.0019 | 1.6843 | n/a | n/a | 26.0389 | yes | n/a | n/a | yes | TensorStudio | reference |
186
+ | activations | tanh | `(128,)` | TensorStudio | 0.0030 | 0.0031 | 0.0030 | 0.0037 | 0.0003 | 0.5310 | n/a | n/a | 9.9452 | no | n/a | n/a | yes | NumPy | loss vs NumPy |
187
+ | activations | tanh | `(128,)` | NumPy | 0.0016 | 0.0016 | 0.0015 | 0.0018 | 0.0001 | 0.5310 | n/a | n/a | 9.9452 | no | n/a | n/a | yes | NumPy | NumPy baseline |
188
+ | activations | tanh | `(128,)` | JAX CPU dispatch | 0.0301 | 0.0303 | 0.0295 | 0.0314 | 0.0007 | 0.5310 | n/a | n/a | 9.9452 | no | n/a | n/a | yes | NumPy | reference |
189
+ | activations | exp | `(128,)` | TensorStudio | 0.0028 | 0.0028 | 0.0026 | 0.0030 | 0.0001 | 0.4700 | n/a | n/a | 11.1078 | no | n/a | n/a | yes | NumPy | loss vs NumPy |
190
+ | activations | exp | `(128,)` | NumPy | 0.0013 | 0.0018 | 0.0013 | 0.0028 | 0.0006 | 0.4700 | n/a | n/a | 11.1078 | no | n/a | n/a | yes | NumPy | NumPy baseline |
191
+ | activations | exp | `(128,)` | JAX CPU dispatch | 0.0311 | 0.0316 | 0.0302 | 0.0330 | 0.0011 | 0.4700 | n/a | n/a | 11.1078 | no | n/a | n/a | yes | NumPy | reference |
192
+ | activations | log | `(128,)` | TensorStudio | 0.0029 | 0.0031 | 0.0028 | 0.0034 | 0.0003 | 0.4794 | n/a | n/a | 10.4809 | no | n/a | n/a | yes | NumPy | loss vs NumPy |
193
+ | activations | log | `(128,)` | NumPy | 0.0014 | 0.0015 | 0.0014 | 0.0018 | 0.0002 | 0.4794 | n/a | n/a | 10.4809 | no | n/a | n/a | yes | NumPy | NumPy baseline |
194
+ | activations | log | `(128,)` | JAX CPU dispatch | 0.0308 | 0.0310 | 0.0300 | 0.0331 | 0.0011 | 0.4794 | n/a | n/a | 10.4809 | no | n/a | n/a | yes | NumPy | reference |
195
+ | activations | relu | `(1024,)` | TensorStudio | 0.0025 | 0.0025 | 0.0025 | 0.0027 | 0.0001 | 1.0221 | n/a | n/a | 30.0745 | yes | n/a | n/a | yes | TensorStudio | win vs NumPy |
196
+ | activations | relu | `(1024,)` | NumPy | 0.0025 | 0.0027 | 0.0024 | 0.0034 | 0.0004 | 1.0221 | n/a | n/a | 30.0745 | yes | n/a | n/a | yes | TensorStudio | NumPy baseline |
197
+ | activations | relu | `(1024,)` | JAX CPU dispatch | 0.0742 | 0.0806 | 0.0623 | 0.1257 | 0.0232 | 1.0221 | n/a | n/a | 30.0745 | yes | n/a | n/a | yes | TensorStudio | reference |
198
+ | activations | sigmoid | `(1024,)` | TensorStudio | 0.0104 | 0.0112 | 0.0095 | 0.0148 | 0.0020 | 0.7219 | n/a | n/a | 10.6132 | no | n/a | n/a | yes | NumPy | loss vs NumPy |
199
+ | activations | sigmoid | `(1024,)` | NumPy | 0.0075 | 0.0076 | 0.0073 | 0.0084 | 0.0004 | 0.7219 | n/a | n/a | 10.6132 | no | n/a | n/a | yes | NumPy | NumPy baseline |
200
+ | activations | sigmoid | `(1024,)` | JAX CPU dispatch | 0.1106 | 0.1083 | 0.0949 | 0.1196 | 0.0090 | 0.7219 | n/a | n/a | 10.6132 | no | n/a | n/a | yes | NumPy | reference |
201
+ | activations | tanh | `(1024,)` | TensorStudio | 0.0146 | 0.0148 | 0.0145 | 0.0153 | 0.0003 | 0.2743 | n/a | n/a | 2.0910 | no | n/a | n/a | yes | NumPy | loss vs NumPy |
202
+ | activations | tanh | `(1024,)` | NumPy | 0.0040 | 0.0041 | 0.0040 | 0.0044 | 0.0002 | 0.2743 | n/a | n/a | 2.0910 | no | n/a | n/a | yes | NumPy | NumPy baseline |
203
+ | activations | tanh | `(1024,)` | JAX CPU dispatch | 0.0306 | 0.0307 | 0.0302 | 0.0312 | 0.0004 | 0.2743 | n/a | n/a | 2.0910 | no | n/a | n/a | yes | NumPy | reference |
204
+ | activations | exp | `(1024,)` | TensorStudio | 0.0085 | 0.0086 | 0.0083 | 0.0089 | 0.0002 | 0.3059 | n/a | n/a | 4.8684 | no | n/a | n/a | yes | NumPy | loss vs NumPy |
205
+ | activations | exp | `(1024,)` | NumPy | 0.0026 | 0.0026 | 0.0026 | 0.0027 | 0.0000 | 0.3059 | n/a | n/a | 4.8684 | no | n/a | n/a | yes | NumPy | NumPy baseline |
206
+ | activations | exp | `(1024,)` | JAX CPU dispatch | 0.0416 | 0.0431 | 0.0304 | 0.0548 | 0.0080 | 0.3059 | n/a | n/a | 4.8684 | no | n/a | n/a | yes | NumPy | reference |
207
+ | activations | log | `(1024,)` | TensorStudio | 0.0091 | 0.0091 | 0.0087 | 0.0096 | 0.0003 | 0.3370 | n/a | n/a | 3.3997 | no | n/a | n/a | yes | NumPy | loss vs NumPy |
208
+ | activations | log | `(1024,)` | NumPy | 0.0031 | 0.0033 | 0.0030 | 0.0041 | 0.0004 | 0.3370 | n/a | n/a | 3.3997 | no | n/a | n/a | yes | NumPy | NumPy baseline |
209
+ | activations | log | `(1024,)` | JAX CPU dispatch | 0.0310 | 0.0323 | 0.0305 | 0.0379 | 0.0028 | 0.3370 | n/a | n/a | 3.3997 | no | n/a | n/a | yes | NumPy | reference |
210
+ | activations | relu | `(4096,)` | TensorStudio | 0.0049 | 0.0050 | 0.0048 | 0.0054 | 0.0002 | 0.7495 | n/a | n/a | 14.1286 | no | n/a | n/a | yes | NumPy | loss vs NumPy |
211
+ | activations | relu | `(4096,)` | NumPy | 0.0037 | 0.0037 | 0.0036 | 0.0037 | 0.0000 | 0.7495 | n/a | n/a | 14.1286 | no | n/a | n/a | yes | NumPy | NumPy baseline |
212
+ | activations | relu | `(4096,)` | JAX CPU dispatch | 0.0692 | 0.0723 | 0.0627 | 0.0881 | 0.0086 | 0.7495 | n/a | n/a | 14.1286 | no | n/a | n/a | yes | NumPy | reference |
213
+ | activations | sigmoid | `(4096,)` | TensorStudio | 0.0355 | 0.0366 | 0.0324 | 0.0464 | 0.0051 | 0.3622 | n/a | n/a | 3.4336 | no | n/a | n/a | yes | NumPy | loss vs NumPy |
214
+ | activations | sigmoid | `(4096,)` | NumPy | 0.0128 | 0.0129 | 0.0124 | 0.0137 | 0.0005 | 0.3622 | n/a | n/a | 3.4336 | no | n/a | n/a | yes | NumPy | NumPy baseline |
215
+ | activations | sigmoid | `(4096,)` | JAX CPU dispatch | 0.1217 | 0.1357 | 0.1155 | 0.2009 | 0.0328 | 0.3622 | n/a | n/a | 3.4336 | no | n/a | n/a | yes | NumPy | reference |
216
+ | activations | tanh | `(4096,)` | TensorStudio | 0.0638 | 0.0675 | 0.0605 | 0.0851 | 0.0090 | 0.1651 | n/a | n/a | 0.6191 | no | n/a | n/a | no | NumPy | loss vs NumPy |
217
+ | activations | tanh | `(4096,)` | NumPy | 0.0105 | 0.0106 | 0.0103 | 0.0111 | 0.0003 | 0.1651 | n/a | n/a | 0.6191 | no | n/a | n/a | no | NumPy | NumPy baseline |
218
+ | activations | tanh | `(4096,)` | JAX CPU dispatch | 0.0395 | 0.0407 | 0.0350 | 0.0474 | 0.0049 | 0.1651 | n/a | n/a | 0.6191 | no | n/a | n/a | no | NumPy | reference |
219
+ | activations | exp | `(4096,)` | TensorStudio | 0.0287 | 0.0293 | 0.0286 | 0.0313 | 0.0010 | 0.2086 | n/a | n/a | 1.1539 | no | n/a | n/a | yes | NumPy | loss vs NumPy |
220
+ | activations | exp | `(4096,)` | NumPy | 0.0060 | 0.0060 | 0.0059 | 0.0061 | 0.0001 | 0.2086 | n/a | n/a | 1.1539 | no | n/a | n/a | yes | NumPy | NumPy baseline |
221
+ | activations | exp | `(4096,)` | JAX CPU dispatch | 0.0331 | 0.0337 | 0.0329 | 0.0350 | 0.0009 | 0.2086 | n/a | n/a | 1.1539 | no | n/a | n/a | yes | NumPy | reference |
222
+ | activations | log | `(4096,)` | TensorStudio | 0.0310 | 0.0309 | 0.0303 | 0.0314 | 0.0004 | 0.2618 | n/a | n/a | 1.1345 | no | n/a | n/a | yes | NumPy | loss vs NumPy |
223
+ | activations | log | `(4096,)` | NumPy | 0.0081 | 0.0085 | 0.0073 | 0.0100 | 0.0011 | 0.2618 | n/a | n/a | 1.1345 | no | n/a | n/a | yes | NumPy | NumPy baseline |
224
+ | activations | log | `(4096,)` | JAX CPU dispatch | 0.0352 | 0.0351 | 0.0340 | 0.0373 | 0.0012 | 0.2618 | n/a | n/a | 1.1345 | no | n/a | n/a | yes | NumPy | reference |
225
+ | activations | relu | `(16384,)` | TensorStudio | 0.0140 | 0.0140 | 0.0137 | 0.0144 | 0.0002 | 0.6411 | n/a | n/a | 5.8649 | no | n/a | n/a | yes | NumPy | loss vs NumPy |
226
+ | activations | relu | `(16384,)` | NumPy | 0.0090 | 0.0091 | 0.0089 | 0.0094 | 0.0002 | 0.6411 | n/a | n/a | 5.8649 | no | n/a | n/a | yes | NumPy | NumPy baseline |
227
+ | activations | relu | `(16384,)` | JAX CPU dispatch | 0.0822 | 0.0894 | 0.0738 | 0.1141 | 0.0150 | 0.6411 | n/a | n/a | 5.8649 | no | n/a | n/a | yes | NumPy | reference |
228
+ | activations | sigmoid | `(16384,)` | TensorStudio | 0.1222 | 0.1261 | 0.1197 | 0.1386 | 0.0069 | 0.2750 | n/a | n/a | 1.0749 | no | n/a | n/a | yes | NumPy | loss vs NumPy |
229
+ | activations | sigmoid | `(16384,)` | NumPy | 0.0336 | 0.0363 | 0.0330 | 0.0441 | 0.0042 | 0.2750 | n/a | n/a | 1.0749 | no | n/a | n/a | yes | NumPy | NumPy baseline |
230
+ | activations | sigmoid | `(16384,)` | JAX CPU dispatch | 0.1313 | 0.1317 | 0.0955 | 0.1677 | 0.0234 | 0.2750 | n/a | n/a | 1.0749 | no | n/a | n/a | yes | NumPy | reference |
231
+ | activations | tanh | `(16384,)` | TensorStudio | 0.2878 | 0.2837 | 0.2528 | 0.3053 | 0.0184 | 0.1403 | n/a | n/a | 0.1379 | no | n/a | n/a | no | JAX CPU dispatch | loss vs NumPy |
232
+ | activations | tanh | `(16384,)` | NumPy | 0.0404 | 0.0412 | 0.0391 | 0.0436 | 0.0018 | 0.1403 | n/a | n/a | 0.1379 | no | n/a | n/a | no | JAX CPU dispatch | NumPy baseline |
233
+ | activations | tanh | `(16384,)` | JAX CPU dispatch | 0.0397 | 0.0397 | 0.0376 | 0.0435 | 0.0021 | 0.1403 | n/a | n/a | 0.1379 | no | n/a | n/a | no | JAX CPU dispatch | reference |
234
+ | activations | exp | `(16384,)` | TensorStudio | 0.1177 | 0.1196 | 0.1099 | 0.1354 | 0.0085 | 0.1660 | n/a | n/a | 0.3495 | no | n/a | n/a | no | NumPy | loss vs NumPy |
235
+ | activations | exp | `(16384,)` | NumPy | 0.0195 | 0.0194 | 0.0190 | 0.0198 | 0.0003 | 0.1660 | n/a | n/a | 0.3495 | no | n/a | n/a | no | NumPy | NumPy baseline |
236
+ | activations | exp | `(16384,)` | JAX CPU dispatch | 0.0411 | 0.0465 | 0.0399 | 0.0581 | 0.0075 | 0.1660 | n/a | n/a | 0.3495 | no | n/a | n/a | no | NumPy | reference |
237
+ | activations | log | `(16384,)` | TensorStudio | 0.1221 | 0.1230 | 0.1141 | 0.1346 | 0.0077 | 0.2081 | n/a | n/a | 0.3756 | no | n/a | n/a | no | NumPy | loss vs NumPy |
238
+ | activations | log | `(16384,)` | NumPy | 0.0254 | 0.0255 | 0.0248 | 0.0263 | 0.0005 | 0.2081 | n/a | n/a | 0.3756 | no | n/a | n/a | no | NumPy | NumPy baseline |
239
+ | activations | log | `(16384,)` | JAX CPU dispatch | 0.0459 | 0.0462 | 0.0420 | 0.0511 | 0.0035 | 0.2081 | n/a | n/a | 0.3756 | no | n/a | n/a | no | NumPy | reference |
240
+ | reductions | sum | `(1,)` | TensorStudio | 0.0022 | 0.0023 | 0.0022 | 0.0026 | 0.0002 | 1.0357 | n/a | n/a | 5.6417 | yes | n/a | n/a | yes | TensorStudio | win vs NumPy |
241
+ | reductions | sum | `(1,)` | NumPy | 0.0023 | 0.0025 | 0.0022 | 0.0034 | 0.0005 | 1.0357 | n/a | n/a | 5.6417 | yes | n/a | n/a | yes | TensorStudio | NumPy baseline |
242
+ | reductions | sum | `(1,)` | JAX CPU dispatch | 0.0126 | 0.0127 | 0.0123 | 0.0135 | 0.0004 | 1.0357 | n/a | n/a | 5.6417 | yes | n/a | n/a | yes | TensorStudio | reference |
243
+ | reductions | mean | `(1,)` | TensorStudio | 0.0024 | 0.0024 | 0.0022 | 0.0025 | 0.0001 | 3.6003 | n/a | n/a | 4.8772 | yes | n/a | n/a | yes | TensorStudio | win vs NumPy |
244
+ | reductions | mean | `(1,)` | NumPy | 0.0086 | 0.0091 | 0.0081 | 0.0112 | 0.0011 | 3.6003 | n/a | n/a | 4.8772 | yes | n/a | n/a | yes | TensorStudio | NumPy baseline |
245
+ | reductions | mean | `(1,)` | JAX CPU dispatch | 0.0116 | 0.0117 | 0.0113 | 0.0123 | 0.0003 | 3.6003 | n/a | n/a | 4.8772 | yes | n/a | n/a | yes | TensorStudio | reference |
246
+ | reductions | sum | `(8,)` | TensorStudio | 0.0024 | 0.0024 | 0.0023 | 0.0028 | 0.0002 | 0.9897 | n/a | n/a | 5.5504 | no | n/a | n/a | yes | NumPy | loss vs NumPy |
247
+ | reductions | sum | `(8,)` | NumPy | 0.0023 | 0.0023 | 0.0023 | 0.0024 | 0.0000 | 0.9897 | n/a | n/a | 5.5504 | no | n/a | n/a | yes | NumPy | NumPy baseline |
248
+ | reductions | sum | `(8,)` | JAX CPU dispatch | 0.0131 | 0.0138 | 0.0126 | 0.0166 | 0.0014 | 0.9897 | n/a | n/a | 5.5504 | no | n/a | n/a | yes | NumPy | reference |
249
+ | reductions | mean | `(8,)` | TensorStudio | 0.0024 | 0.0024 | 0.0022 | 0.0025 | 0.0001 | 3.5618 | n/a | n/a | 5.2277 | yes | n/a | n/a | yes | TensorStudio | win vs NumPy |
250
+ | reductions | mean | `(8,)` | NumPy | 0.0084 | 0.0091 | 0.0081 | 0.0116 | 0.0013 | 3.5618 | n/a | n/a | 5.2277 | yes | n/a | n/a | yes | TensorStudio | NumPy baseline |
251
+ | reductions | mean | `(8,)` | JAX CPU dispatch | 0.0123 | 0.0127 | 0.0120 | 0.0135 | 0.0006 | 3.5618 | n/a | n/a | 5.2277 | yes | n/a | n/a | yes | TensorStudio | reference |
252
+ | reductions | sum | `(32,)` | TensorStudio | 0.0044 | 0.0040 | 0.0025 | 0.0052 | 0.0011 | 0.7703 | n/a | n/a | 2.9076 | no | n/a | n/a | yes | NumPy | loss vs NumPy |
253
+ | reductions | sum | `(32,)` | NumPy | 0.0034 | 0.0033 | 0.0026 | 0.0041 | 0.0005 | 0.7703 | n/a | n/a | 2.9076 | no | n/a | n/a | yes | NumPy | NumPy baseline |
254
+ | reductions | sum | `(32,)` | JAX CPU dispatch | 0.0129 | 0.0129 | 0.0127 | 0.0130 | 0.0001 | 0.7703 | n/a | n/a | 2.9076 | no | n/a | n/a | yes | NumPy | reference |
255
+ | reductions | mean | `(32,)` | TensorStudio | 0.0025 | 0.0025 | 0.0024 | 0.0027 | 0.0001 | 3.2990 | n/a | n/a | 5.1964 | yes | n/a | n/a | yes | TensorStudio | win vs NumPy |
256
+ | reductions | mean | `(32,)` | NumPy | 0.0083 | 0.0085 | 0.0081 | 0.0092 | 0.0004 | 3.2990 | n/a | n/a | 5.1964 | yes | n/a | n/a | yes | TensorStudio | NumPy baseline |
257
+ | reductions | mean | `(32,)` | JAX CPU dispatch | 0.0131 | 0.0130 | 0.0124 | 0.0134 | 0.0004 | 3.2990 | n/a | n/a | 5.1964 | yes | n/a | n/a | yes | TensorStudio | reference |
258
+ | reductions | sum | `(128,)` | TensorStudio | 0.0035 | 0.0036 | 0.0034 | 0.0041 | 0.0002 | 0.8092 | n/a | n/a | 4.5721 | no | n/a | n/a | yes | NumPy | loss vs NumPy |
259
+ | reductions | sum | `(128,)` | NumPy | 0.0029 | 0.0030 | 0.0027 | 0.0040 | 0.0005 | 0.8092 | n/a | n/a | 4.5721 | no | n/a | n/a | yes | NumPy | NumPy baseline |
260
+ | reductions | sum | `(128,)` | JAX CPU dispatch | 0.0162 | 0.0168 | 0.0156 | 0.0185 | 0.0011 | 0.8092 | n/a | n/a | 4.5721 | no | n/a | n/a | yes | NumPy | reference |
261
+ | reductions | mean | `(128,)` | TensorStudio | 0.0034 | 0.0034 | 0.0033 | 0.0035 | 0.0001 | 2.5561 | n/a | n/a | 4.1558 | yes | n/a | n/a | yes | TensorStudio | win vs NumPy |
262
+ | reductions | mean | `(128,)` | NumPy | 0.0087 | 0.0091 | 0.0086 | 0.0105 | 0.0007 | 2.5561 | n/a | n/a | 4.1558 | yes | n/a | n/a | yes | TensorStudio | NumPy baseline |
263
+ | reductions | mean | `(128,)` | JAX CPU dispatch | 0.0141 | 0.0140 | 0.0135 | 0.0144 | 0.0003 | 2.5561 | n/a | n/a | 4.1558 | yes | n/a | n/a | yes | TensorStudio | reference |
264
+ | reductions | sum | `(1024,)` | TensorStudio | 0.0088 | 0.0091 | 0.0085 | 0.0106 | 0.0008 | 0.3168 | n/a | n/a | 1.8078 | no | n/a | n/a | yes | NumPy | loss vs NumPy |
265
+ | reductions | sum | `(1024,)` | NumPy | 0.0028 | 0.0028 | 0.0027 | 0.0030 | 0.0001 | 0.3168 | n/a | n/a | 1.8078 | no | n/a | n/a | yes | NumPy | NumPy baseline |
266
+ | reductions | sum | `(1024,)` | JAX CPU dispatch | 0.0159 | 0.0161 | 0.0152 | 0.0172 | 0.0009 | 0.3168 | n/a | n/a | 1.8078 | no | n/a | n/a | yes | NumPy | reference |
267
+ | reductions | mean | `(1024,)` | TensorStudio | 0.0091 | 0.0091 | 0.0090 | 0.0092 | 0.0001 | 0.9673 | n/a | n/a | 1.7578 | no | n/a | n/a | yes | NumPy | loss vs NumPy |
268
+ | reductions | mean | `(1024,)` | NumPy | 0.0088 | 0.0090 | 0.0087 | 0.0097 | 0.0004 | 0.9673 | n/a | n/a | 1.7578 | no | n/a | n/a | yes | NumPy | NumPy baseline |
269
+ | reductions | mean | `(1024,)` | JAX CPU dispatch | 0.0160 | 0.0160 | 0.0137 | 0.0187 | 0.0020 | 0.9673 | n/a | n/a | 1.7578 | no | n/a | n/a | yes | NumPy | reference |
270
+ | reductions | sum | `(4096,)` | TensorStudio | 0.0309 | 0.0312 | 0.0288 | 0.0338 | 0.0019 | 0.1145 | n/a | n/a | 0.5730 | no | n/a | n/a | no | NumPy | loss vs NumPy |
271
+ | reductions | sum | `(4096,)` | NumPy | 0.0035 | 0.0038 | 0.0035 | 0.0046 | 0.0004 | 0.1145 | n/a | n/a | 0.5730 | no | n/a | n/a | no | NumPy | NumPy baseline |
272
+ | reductions | sum | `(4096,)` | JAX CPU dispatch | 0.0177 | 0.0175 | 0.0142 | 0.0207 | 0.0025 | 0.1145 | n/a | n/a | 0.5730 | no | n/a | n/a | no | NumPy | reference |
273
+ | reductions | mean | `(4096,)` | TensorStudio | 0.0293 | 0.0315 | 0.0288 | 0.0393 | 0.0040 | 0.3396 | n/a | n/a | 0.6152 | no | n/a | n/a | no | NumPy | loss vs NumPy |
274
+ | reductions | mean | `(4096,)` | NumPy | 0.0100 | 0.0102 | 0.0096 | 0.0114 | 0.0007 | 0.3396 | n/a | n/a | 0.6152 | no | n/a | n/a | no | NumPy | NumPy baseline |
275
+ | reductions | mean | `(4096,)` | JAX CPU dispatch | 0.0180 | 0.0185 | 0.0165 | 0.0206 | 0.0015 | 0.3396 | n/a | n/a | 0.6152 | no | n/a | n/a | no | NumPy | reference |
276
+ | reductions | sum | `(16384,)` | TensorStudio | 0.1113 | 0.1134 | 0.1099 | 0.1175 | 0.0034 | 0.0670 | n/a | n/a | 0.2643 | no | n/a | n/a | no | NumPy | loss vs NumPy |
277
+ | reductions | sum | `(16384,)` | NumPy | 0.0075 | 0.0075 | 0.0071 | 0.0080 | 0.0003 | 0.0670 | n/a | n/a | 0.2643 | no | n/a | n/a | no | NumPy | NumPy baseline |
278
+ | reductions | sum | `(16384,)` | JAX CPU dispatch | 0.0294 | 0.0281 | 0.0213 | 0.0342 | 0.0058 | 0.0670 | n/a | n/a | 0.2643 | no | n/a | n/a | no | NumPy | reference |
279
+ | reductions | mean | `(16384,)` | TensorStudio | 0.1112 | 0.1117 | 0.1084 | 0.1164 | 0.0026 | 0.1218 | n/a | n/a | 0.3001 | no | n/a | n/a | no | NumPy | loss vs NumPy |
280
+ | reductions | mean | `(16384,)` | NumPy | 0.0135 | 0.0137 | 0.0134 | 0.0144 | 0.0004 | 0.1218 | n/a | n/a | 0.3001 | no | n/a | n/a | no | NumPy | NumPy baseline |
281
+ | reductions | mean | `(16384,)` | JAX CPU dispatch | 0.0334 | 0.0301 | 0.0200 | 0.0393 | 0.0081 | 0.1218 | n/a | n/a | 0.3001 | no | n/a | n/a | no | NumPy | reference |
282
+ | reductions | sum_axis1 | `(16, 16)` | TensorStudio | 0.0034 | 0.0035 | 0.0028 | 0.0049 | 0.0008 | 0.8316 | n/a | n/a | 4.1658 | no | n/a | n/a | yes | NumPy | loss vs NumPy |
283
+ | reductions | sum_axis1 | `(16, 16)` | NumPy | 0.0028 | 0.0036 | 0.0027 | 0.0051 | 0.0011 | 0.8316 | n/a | n/a | 4.1658 | no | n/a | n/a | yes | NumPy | NumPy baseline |
284
+ | reductions | sum_axis1 | `(16, 16)` | JAX CPU dispatch | 0.0140 | 0.0145 | 0.0132 | 0.0176 | 0.0016 | 0.8316 | n/a | n/a | 4.1658 | no | n/a | n/a | yes | NumPy | reference |
285
+ | reductions | mean_axis0 | `(16, 16)` | TensorStudio | 0.0029 | 0.0029 | 0.0027 | 0.0030 | 0.0001 | 3.6725 | n/a | n/a | 4.5661 | yes | n/a | n/a | yes | TensorStudio | win vs NumPy |
286
+ | reductions | mean_axis0 | `(16, 16)` | NumPy | 0.0105 | 0.0118 | 0.0101 | 0.0160 | 0.0022 | 3.6725 | n/a | n/a | 4.5661 | yes | n/a | n/a | yes | TensorStudio | NumPy baseline |
287
+ | reductions | mean_axis0 | `(16, 16)` | JAX CPU dispatch | 0.0130 | 0.0130 | 0.0126 | 0.0135 | 0.0003 | 3.6725 | n/a | n/a | 4.5661 | yes | n/a | n/a | yes | TensorStudio | reference |
288
+ | reductions | sum_axis1 | `(64, 64)` | TensorStudio | 0.0057 | 0.0058 | 0.0055 | 0.0061 | 0.0002 | 0.7435 | n/a | n/a | 2.7077 | no | n/a | n/a | yes | NumPy | loss vs NumPy |
289
+ | reductions | sum_axis1 | `(64, 64)` | NumPy | 0.0043 | 0.0043 | 0.0042 | 0.0046 | 0.0002 | 0.7435 | n/a | n/a | 2.7077 | no | n/a | n/a | yes | NumPy | NumPy baseline |
290
+ | reductions | sum_axis1 | `(64, 64)` | JAX CPU dispatch | 0.0155 | 0.0165 | 0.0146 | 0.0214 | 0.0024 | 0.7435 | n/a | n/a | 2.7077 | no | n/a | n/a | yes | NumPy | reference |
291
+ | reductions | mean_axis0 | `(64, 64)` | TensorStudio | 0.0041 | 0.0040 | 0.0038 | 0.0042 | 0.0002 | 2.9348 | n/a | n/a | 4.2028 | yes | n/a | n/a | yes | TensorStudio | win vs NumPy |
292
+ | reductions | mean_axis0 | `(64, 64)` | NumPy | 0.0121 | 0.0122 | 0.0119 | 0.0125 | 0.0002 | 2.9348 | n/a | n/a | 4.2028 | yes | n/a | n/a | yes | TensorStudio | NumPy baseline |
293
+ | reductions | mean_axis0 | `(64, 64)` | JAX CPU dispatch | 0.0173 | 0.0180 | 0.0160 | 0.0202 | 0.0017 | 2.9348 | n/a | n/a | 4.2028 | yes | n/a | n/a | yes | TensorStudio | reference |
294
+ | reductions | sum_axis1 | `(128, 128)` | TensorStudio | 0.0226 | 0.0208 | 0.0166 | 0.0241 | 0.0033 | 0.3611 | n/a | n/a | 1.1116 | no | n/a | n/a | yes | NumPy | loss vs NumPy |
295
+ | reductions | sum_axis1 | `(128, 128)` | NumPy | 0.0082 | 0.0100 | 0.0081 | 0.0149 | 0.0027 | 0.3611 | n/a | n/a | 1.1116 | no | n/a | n/a | yes | NumPy | NumPy baseline |
296
+ | reductions | sum_axis1 | `(128, 128)` | JAX CPU dispatch | 0.0251 | 0.0247 | 0.0189 | 0.0310 | 0.0040 | 0.3611 | n/a | n/a | 1.1116 | no | n/a | n/a | yes | NumPy | reference |
297
+ | reductions | mean_axis0 | `(128, 128)` | TensorStudio | 0.0070 | 0.0070 | 0.0068 | 0.0071 | 0.0001 | 2.1542 | n/a | n/a | 2.0980 | yes | n/a | n/a | yes | TensorStudio | win vs NumPy |
298
+ | reductions | mean_axis0 | `(128, 128)` | NumPy | 0.0151 | 0.0155 | 0.0150 | 0.0168 | 0.0007 | 2.1542 | n/a | n/a | 2.0980 | yes | n/a | n/a | yes | TensorStudio | NumPy baseline |
299
+ | reductions | mean_axis0 | `(128, 128)` | JAX CPU dispatch | 0.0147 | 0.0150 | 0.0141 | 0.0165 | 0.0008 | 2.1542 | n/a | n/a | 2.0980 | yes | n/a | n/a | yes | TensorStudio | reference |
300
+ | reductions | sum_axis1 | `(256, 256)` | TensorStudio | 0.0661 | 0.0663 | 0.0651 | 0.0684 | 0.0011 | 0.3382 | n/a | n/a | 1.1770 | no | n/a | n/a | yes | NumPy | loss vs NumPy |
301
+ | reductions | sum_axis1 | `(256, 256)` | NumPy | 0.0224 | 0.0224 | 0.0219 | 0.0233 | 0.0005 | 0.3382 | n/a | n/a | 1.1770 | no | n/a | n/a | yes | NumPy | NumPy baseline |
302
+ | reductions | sum_axis1 | `(256, 256)` | JAX CPU dispatch | 0.0778 | 0.0768 | 0.0714 | 0.0803 | 0.0030 | 0.3382 | n/a | n/a | 1.1770 | no | n/a | n/a | yes | NumPy | reference |
303
+ | reductions | mean_axis0 | `(256, 256)` | TensorStudio | 0.0187 | 0.0191 | 0.0186 | 0.0203 | 0.0007 | 1.2602 | n/a | n/a | 0.9101 | yes | n/a | n/a | no | JAX CPU dispatch | win vs NumPy |
304
+ | reductions | mean_axis0 | `(256, 256)` | NumPy | 0.0235 | 0.0234 | 0.0224 | 0.0249 | 0.0009 | 1.2602 | n/a | n/a | 0.9101 | yes | n/a | n/a | no | JAX CPU dispatch | NumPy baseline |
305
+ | reductions | mean_axis0 | `(256, 256)` | JAX CPU dispatch | 0.0170 | 0.0185 | 0.0167 | 0.0237 | 0.0027 | 1.2602 | n/a | n/a | 0.9101 | yes | n/a | n/a | no | JAX CPU dispatch | reference |
306
+ | matmul | matmul | `(16, 16)` | TensorStudio | 0.0035 | 0.0037 | 0.0035 | 0.0041 | 0.0002 | 0.5507 | n/a | n/a | 4.6039 | no | n/a | n/a | yes | NumPy | loss vs NumPy |
307
+ | matmul | matmul | `(16, 16)` | NumPy | 0.0019 | 0.0020 | 0.0019 | 0.0020 | 0.0000 | 0.5507 | n/a | n/a | 4.6039 | no | n/a | n/a | yes | NumPy | NumPy baseline |
308
+ | matmul | matmul | `(16, 16)` | JAX CPU dispatch | 0.0163 | 0.0151 | 0.0104 | 0.0186 | 0.0034 | 0.5507 | n/a | n/a | 4.6039 | no | n/a | n/a | yes | NumPy | reference |
309
+ | matmul | matmul | `(64, 64)` | TensorStudio | 0.0372 | 0.0382 | 0.0366 | 0.0423 | 0.0021 | 0.2886 | n/a | n/a | 0.5855 | no | n/a | n/a | no | NumPy | loss vs NumPy |
310
+ | matmul | matmul | `(64, 64)` | NumPy | 0.0107 | 0.0108 | 0.0107 | 0.0108 | 0.0000 | 0.2886 | n/a | n/a | 0.5855 | no | n/a | n/a | no | NumPy | NumPy baseline |
311
+ | matmul | matmul | `(64, 64)` | JAX CPU dispatch | 0.0218 | 0.0237 | 0.0172 | 0.0357 | 0.0063 | 0.2886 | n/a | n/a | 0.5855 | no | n/a | n/a | no | NumPy | reference |
312
+ | matmul | matmul | `(128, 128)` | TensorStudio | 0.2734 | 0.2773 | 0.2725 | 0.2919 | 0.0074 | 1.0492 | n/a | n/a | 0.2997 | yes | n/a | n/a | no | JAX CPU dispatch | win vs NumPy |
313
+ | matmul | matmul | `(128, 128)` | NumPy | 0.2868 | 0.3047 | 0.2833 | 0.3607 | 0.0294 | 1.0492 | n/a | n/a | 0.2997 | yes | n/a | n/a | no | JAX CPU dispatch | NumPy baseline |
314
+ | matmul | matmul | `(128, 128)` | JAX CPU dispatch | 0.0819 | 0.0803 | 0.0733 | 0.0876 | 0.0050 | 1.0492 | n/a | n/a | 0.2997 | yes | n/a | n/a | no | JAX CPU dispatch | reference |
315
+ | matmul | matmul | `(256, 256)` | TensorStudio | 2.4787 | 2.4629 | 2.2982 | 2.6123 | 0.1160 | 0.1770 | n/a | n/a | 0.1071 | no | n/a | n/a | no | JAX CPU dispatch | loss vs NumPy |
316
+ | matmul | matmul | `(256, 256)` | NumPy | 0.4388 | 0.4237 | 0.3726 | 0.4574 | 0.0332 | 0.1770 | n/a | n/a | 0.1071 | no | n/a | n/a | no | JAX CPU dispatch | NumPy baseline |
317
+ | matmul | matmul | `(256, 256)` | JAX CPU dispatch | 0.2653 | 0.2712 | 0.2498 | 0.2948 | 0.0166 | 0.1770 | n/a | n/a | 0.1071 | no | n/a | n/a | no | JAX CPU dispatch | reference |
318
+ | conv2d | conv2d_3x3_padding1 | `(1, 1, 8, 8)` | TensorStudio | 0.1530 | 0.1525 | 0.1490 | 0.1563 | 0.0027 | 8.7232 | n/a | n/a | 0.7925 | yes | n/a | n/a | no | JAX CPU dispatch | win vs NumPy |
319
+ | conv2d | conv2d_3x3_padding1 | `(1, 1, 8, 8)` | NumPy | 1.3350 | 1.3297 | 1.2569 | 1.3741 | 0.0395 | 8.7232 | n/a | n/a | 0.7925 | yes | n/a | n/a | no | JAX CPU dispatch | NumPy baseline |
320
+ | conv2d | conv2d_3x3_padding1 | `(1, 1, 8, 8)` | JAX CPU dispatch | 0.1213 | 0.1150 | 0.0973 | 0.1320 | 0.0131 | 8.7232 | n/a | n/a | 0.7925 | yes | n/a | n/a | no | JAX CPU dispatch | reference |
321
+ | conv2d | conv2d_3x3_padding1 | `(4, 3, 16, 16)` | TensorStudio | 7.4653 | 7.4613 | 7.3839 | 7.5298 | 0.0623 | 8.5374 | n/a | n/a | 0.0466 | yes | n/a | n/a | no | JAX CPU dispatch | win vs NumPy |
322
+ | conv2d | conv2d_3x3_padding1 | `(4, 3, 16, 16)` | NumPy | 63.7341 | 63.6304 | 61.9543 | 66.4063 | 1.6114 | 8.5374 | n/a | n/a | 0.0466 | yes | n/a | n/a | no | JAX CPU dispatch | NumPy baseline |
323
+ | conv2d | conv2d_3x3_padding1 | `(4, 3, 16, 16)` | JAX CPU dispatch | 0.3481 | 0.3450 | 0.3104 | 0.3849 | 0.0249 | 8.5374 | n/a | n/a | 0.0466 | yes | n/a | n/a | no | JAX CPU dispatch | reference |
324
+ | pooling | max_pool2d_2x2 | `(1, 1, 16, 16)` | TensorStudio | 0.0146 | 0.0149 | 0.0140 | 0.0166 | 0.0009 | 11.4002 | n/a | n/a | n/a | yes | n/a | n/a | n/a | TensorStudio | win vs NumPy |
325
+ | pooling | max_pool2d_2x2 | `(1, 1, 16, 16)` | NumPy | 0.1664 | 0.1703 | 0.1614 | 0.1813 | 0.0082 | 11.4002 | n/a | n/a | n/a | yes | n/a | n/a | n/a | TensorStudio | NumPy baseline |
326
+ | pooling | avg_pool2d_2x2 | `(1, 1, 16, 16)` | TensorStudio | 0.0141 | 0.0144 | 0.0139 | 0.0154 | 0.0006 | 42.0542 | n/a | n/a | n/a | yes | n/a | n/a | n/a | TensorStudio | win vs NumPy |
327
+ | pooling | avg_pool2d_2x2 | `(1, 1, 16, 16)` | NumPy | 0.5914 | 0.5920 | 0.5737 | 0.6096 | 0.0122 | 42.0542 | n/a | n/a | n/a | yes | n/a | n/a | n/a | TensorStudio | NumPy baseline |
328
+ | pooling | max_pool2d_2x2 | `(4, 3, 32, 32)` | TensorStudio | 0.5666 | 0.5651 | 0.5607 | 0.5702 | 0.0037 | 14.4024 | n/a | n/a | n/a | yes | n/a | n/a | n/a | TensorStudio | win vs NumPy |
329
+ | pooling | max_pool2d_2x2 | `(4, 3, 32, 32)` | NumPy | 8.1597 | 8.1688 | 8.0593 | 8.3401 | 0.1043 | 14.4024 | n/a | n/a | n/a | yes | n/a | n/a | n/a | TensorStudio | NumPy baseline |
330
+ | pooling | avg_pool2d_2x2 | `(4, 3, 32, 32)` | TensorStudio | 0.5628 | 0.5753 | 0.5457 | 0.6274 | 0.0302 | 49.9696 | n/a | n/a | n/a | yes | n/a | n/a | n/a | TensorStudio | win vs NumPy |
331
+ | pooling | avg_pool2d_2x2 | `(4, 3, 32, 32)` | NumPy | 28.1207 | 27.9480 | 26.7410 | 29.1236 | 0.8853 | 49.9696 | n/a | n/a | n/a | yes | n/a | n/a | n/a | TensorStudio | NumPy baseline |
332
+ | autograd | scalar_backward | `(1,)` | TensorStudio | 0.0147 | 0.0152 | 0.0144 | 0.0165 | 0.0009 | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | TensorStudio | no NumPy reference |
333
+ | autograd | elementwise_backward | `(1,)` | TensorStudio | 0.0313 | 0.0389 | 0.0310 | 0.0658 | 0.0135 | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | TensorStudio | no NumPy reference |
334
+ | autograd | scalar_backward | `(128,)` | TensorStudio | 0.1500 | 0.1526 | 0.1466 | 0.1659 | 0.0069 | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | TensorStudio | no NumPy reference |
335
+ | autograd | elementwise_backward | `(128,)` | TensorStudio | 0.3467 | 0.3503 | 0.3281 | 0.3691 | 0.0143 | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | TensorStudio | no NumPy reference |
336
+ | autograd | scalar_backward | `(1024,)` | TensorStudio | 1.0346 | 1.0444 | 1.0287 | 1.0814 | 0.0194 | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | TensorStudio | no NumPy reference |
337
+ | autograd | elementwise_backward | `(1024,)` | TensorStudio | 2.4400 | 2.4641 | 2.4192 | 2.5139 | 0.0402 | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | TensorStudio | no NumPy reference |
338
+ | training_loop | tiny_linear_regression_10_steps | `(32,)` | TensorStudio | 1.6824 | 1.6859 | 1.6085 | 1.7739 | 0.0542 | 0.0937 | n/a | n/a | n/a | no | n/a | n/a | n/a | NumPy | loss vs NumPy |
339
+ | training_loop | tiny_linear_regression_10_steps | `(32,)` | NumPy | 0.1577 | 0.1820 | 0.1553 | 0.2460 | 0.0354 | 0.0937 | n/a | n/a | n/a | no | n/a | n/a | n/a | NumPy | NumPy baseline |
340
+
341
+ Speedup columns are `competitor median / TensorStudio median`; values above 1.0 mean
342
+ TensorStudio was faster for that specific case.
343
+ Win columns say whether that same speedup is above 1.0 for the competitor.
@@ -40,7 +40,7 @@ Calling `backward()`:
40
40
 
41
41
  ## Supported Gradient Operations
42
42
 
43
- `1.3.6` supports gradients for:
43
+ `1.4.0` supports gradients for:
44
44
 
45
45
  - `add`
46
46
  - `sub`
@@ -71,6 +71,7 @@ Calling `backward()`:
71
71
  - `reshape`
72
72
  - `flatten`
73
73
  - `transpose`
74
+ - basic integer and slice indexing views
74
75
 
75
76
  ## Broadcasting Gradients
76
77
 
@@ -113,5 +114,7 @@ Optimizers also expose `zero_grad()`.
113
114
  - No in-place operation tracking beyond optimizer assignment helpers.
114
115
  - No higher-order gradients.
115
116
  - No gradient checkpointing.
116
- - No advanced indexing gradients.
117
+ - Basic integer and slice indexing gradients scatter back into the source
118
+ tensor. Advanced list, tensor, and boolean-mask indexing gradients are not
119
+ implemented.
117
120
  - CPU tensors only.
@@ -69,6 +69,7 @@ The v1 release supports gradients for:
69
69
  - `relu`, `sigmoid`, `tanh`
70
70
  - `exp`, `log`, `sqrt`, `abs`
71
71
  - `reshape`, `flatten`, `transpose`
72
+ - basic integer and slice indexing views
72
73
  - broadcasted binary operations
73
74
 
74
75
  `max` and `min` split the incoming gradient evenly across tied extrema.
@@ -105,6 +106,8 @@ copied = x.clone()
105
106
  - No higher-order gradients.
106
107
  - No graph compiler or tracing runtime.
107
108
  - No checkpointing.
108
- - No advanced indexing gradients.
109
+ - Basic indexing and slicing views scatter gradients back into the source.
110
+ Advanced list, tensor, and boolean-mask indexing gradients are not
111
+ implemented.
109
112
  - No in-place operation tracking beyond optimizer internals.
110
113
  - CPU tensors only.
@@ -148,6 +148,12 @@ Views:
148
148
  - `reshape(*shape)` or `reshape(shape)`
149
149
  - `flatten()`
150
150
  - `transpose()`
151
+ - `__getitem__(key)` through `x[key]`
152
+
153
+ Indexing keys may contain integers, slices, tuples, ellipsis, and `None` for
154
+ new axes. Integer indexing drops the indexed dimension. Slice indexing returns
155
+ strided views, including negative-step views. Advanced list, tensor, and
156
+ boolean-mask indexing are rejected.
151
157
 
152
158
  Math:
153
159
 
@@ -218,6 +224,7 @@ branches, not through the boolean condition.
218
224
  - `x <= y`
219
225
  - `x > y`
220
226
  - `x >= y`
227
+ - `x[key]`
221
228
 
222
229
  `+=` is intentionally unsupported and raises a clear error.
223
230
 
@@ -29,6 +29,7 @@ The C++ layer owns:
29
29
  - Elementwise arithmetic and comparisons.
30
30
  - Matrix multiplication.
31
31
  - Reductions and arg reductions.
32
+ - Basic integer and slice indexing views.
32
33
  - CPU convolution and pooling kernels.
33
34
  - Reverse-mode autograd graph metadata and backward traversal.
34
35
  - Error types mapped into Python exceptions.
@@ -59,7 +60,7 @@ Native C++ ops include:
59
60
  - Activations and math: `relu`, `sigmoid`, `tanh`, `exp`, `log`, `log1p`,
60
61
  `sqrt`, `rsqrt`, `abs`, trigonometric functions, inverse trigonometric
61
62
  functions.
62
- - Layout: `reshape`, `flatten`, `transpose`.
63
+ - Layout and views: `reshape`, `flatten`, `transpose`, and basic indexing.
63
64
  - Vision kernels: `conv2d`, `max_pool2d`, `avg_pool2d`.
64
65
 
65
66
  ## Adding A Native Op
@@ -72,4 +73,3 @@ For a new tensor primitive:
72
73
  4. Bind it in `src/bindings/bind_ops.cpp` or `bind_tensor.cpp`.
73
74
  5. Add thin Python exports and type stubs.
74
75
  6. Test against NumPy where semantics overlap.
75
-