tensorstudio 1.4.0__tar.gz → 1.5.1__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 (175) hide show
  1. {tensorstudio-1.4.0 → tensorstudio-1.5.1}/CHANGELOG.md +26 -0
  2. {tensorstudio-1.4.0 → tensorstudio-1.5.1}/CMakeLists.txt +1 -1
  3. {tensorstudio-1.4.0 → tensorstudio-1.5.1}/PKG-INFO +3 -2
  4. {tensorstudio-1.4.0 → tensorstudio-1.5.1}/README.md +2 -1
  5. tensorstudio-1.5.1/benchmarks/results.md +343 -0
  6. {tensorstudio-1.4.0 → tensorstudio-1.5.1}/docs/autograd/coverage.md +4 -1
  7. {tensorstudio-1.4.0 → tensorstudio-1.5.1}/docs/core/api-reference.md +10 -1
  8. {tensorstudio-1.4.0 → tensorstudio-1.5.1}/docs/core/broadcasting.md +6 -4
  9. {tensorstudio-1.4.0 → tensorstudio-1.5.1}/docs/core/tensors.md +14 -4
  10. {tensorstudio-1.4.0 → tensorstudio-1.5.1}/docs/hardware/cpu-backend.md +1 -1
  11. {tensorstudio-1.4.0 → tensorstudio-1.5.1}/docs/index.md +1 -1
  12. {tensorstudio-1.4.0 → tensorstudio-1.5.1}/docs/interchange/onnx.md +1 -1
  13. {tensorstudio-1.4.0 → tensorstudio-1.5.1}/docs/interchange/serialization.md +1 -1
  14. {tensorstudio-1.4.0 → tensorstudio-1.5.1}/docs/nn/training.md +1 -1
  15. {tensorstudio-1.4.0 → tensorstudio-1.5.1}/docs/performance/benchmarks.md +1 -1
  16. {tensorstudio-1.4.0 → tensorstudio-1.5.1}/docs/release/publishing.md +4 -4
  17. {tensorstudio-1.4.0 → tensorstudio-1.5.1}/docs/release/versioning.md +2 -2
  18. {tensorstudio-1.4.0 → tensorstudio-1.5.1}/docs/roadmap/roadmap.md +5 -4
  19. {tensorstudio-1.4.0 → tensorstudio-1.5.1}/include/tensorstudio/ops.hpp +4 -0
  20. {tensorstudio-1.4.0 → tensorstudio-1.5.1}/include/tensorstudio/version.hpp +1 -1
  21. {tensorstudio-1.4.0 → tensorstudio-1.5.1}/pyproject.toml +1 -1
  22. {tensorstudio-1.4.0 → tensorstudio-1.5.1}/python/tensorstudio/_C.pyi +8 -2
  23. {tensorstudio-1.4.0 → tensorstudio-1.5.1}/python/tensorstudio/__init__.py +8 -0
  24. {tensorstudio-1.4.0 → tensorstudio-1.5.1}/python/tensorstudio/_version.py +1 -1
  25. {tensorstudio-1.4.0 → tensorstudio-1.5.1}/python/tensorstudio/ops.py +17 -2
  26. {tensorstudio-1.4.0 → tensorstudio-1.5.1}/src/bindings/bind_ops.cpp +18 -1
  27. {tensorstudio-1.4.0 → tensorstudio-1.5.1}/src/bindings/bind_tensor.cpp +82 -19
  28. {tensorstudio-1.4.0 → tensorstudio-1.5.1}/src/core/dtype.cpp +8 -1
  29. {tensorstudio-1.4.0 → tensorstudio-1.5.1}/src/core/ops.cpp +170 -10
  30. {tensorstudio-1.4.0 → tensorstudio-1.5.1}/src/core/shape.cpp +17 -5
  31. {tensorstudio-1.4.0 → tensorstudio-1.5.1}/src/core/tensor.cpp +3 -1
  32. tensorstudio-1.5.1/tests/test_errors.py +61 -0
  33. {tensorstudio-1.4.0 → tensorstudio-1.5.1}/tests/test_import.py +1 -1
  34. tensorstudio-1.5.1/tests/test_views.py +94 -0
  35. tensorstudio-1.4.0/benchmarks/results.md +0 -343
  36. {tensorstudio-1.4.0 → tensorstudio-1.5.1}/.gitattributes +0 -0
  37. {tensorstudio-1.4.0 → tensorstudio-1.5.1}/.github/workflows/ci.yml +0 -0
  38. {tensorstudio-1.4.0 → tensorstudio-1.5.1}/.github/workflows/publish-testpypi.yml +0 -0
  39. {tensorstudio-1.4.0 → tensorstudio-1.5.1}/.github/workflows/publish.yml +0 -0
  40. {tensorstudio-1.4.0 → tensorstudio-1.5.1}/.github/workflows/wheels.yml +0 -0
  41. {tensorstudio-1.4.0 → tensorstudio-1.5.1}/.gitignore +0 -0
  42. {tensorstudio-1.4.0 → tensorstudio-1.5.1}/.pre-commit-config.yaml +0 -0
  43. {tensorstudio-1.4.0 → tensorstudio-1.5.1}/CONTRIBUTING.md +0 -0
  44. {tensorstudio-1.4.0 → tensorstudio-1.5.1}/LICENSE +0 -0
  45. {tensorstudio-1.4.0 → tensorstudio-1.5.1}/SECURITY.md +0 -0
  46. {tensorstudio-1.4.0 → tensorstudio-1.5.1}/benchmark_all.py +0 -0
  47. {tensorstudio-1.4.0 → tensorstudio-1.5.1}/benchmarks/__init__.py +0 -0
  48. {tensorstudio-1.4.0 → tensorstudio-1.5.1}/benchmarks/bench_activations.py +0 -0
  49. {tensorstudio-1.4.0 → tensorstudio-1.5.1}/benchmarks/bench_autograd.py +0 -0
  50. {tensorstudio-1.4.0 → tensorstudio-1.5.1}/benchmarks/bench_conv2d.py +0 -0
  51. {tensorstudio-1.4.0 → tensorstudio-1.5.1}/benchmarks/bench_elementwise.py +0 -0
  52. {tensorstudio-1.4.0 → tensorstudio-1.5.1}/benchmarks/bench_matmul.py +0 -0
  53. {tensorstudio-1.4.0 → tensorstudio-1.5.1}/benchmarks/bench_pooling.py +0 -0
  54. {tensorstudio-1.4.0 → tensorstudio-1.5.1}/benchmarks/bench_reductions.py +0 -0
  55. {tensorstudio-1.4.0 → tensorstudio-1.5.1}/benchmarks/bench_tensor_ops.py +0 -0
  56. {tensorstudio-1.4.0 → tensorstudio-1.5.1}/benchmarks/bench_training_loop.py +0 -0
  57. {tensorstudio-1.4.0 → tensorstudio-1.5.1}/benchmarks/benchmark_report.py +0 -0
  58. {tensorstudio-1.4.0 → tensorstudio-1.5.1}/benchmarks/results_conv2d.md +0 -0
  59. {tensorstudio-1.4.0 → tensorstudio-1.5.1}/benchmarks/results_matmul.md +0 -0
  60. {tensorstudio-1.4.0 → tensorstudio-1.5.1}/benchmarks/results_pooling.md +0 -0
  61. {tensorstudio-1.4.0 → tensorstudio-1.5.1}/benchmarks/results_reductions.md +0 -0
  62. {tensorstudio-1.4.0 → tensorstudio-1.5.1}/benchmarks/results_tensor_ops.md +0 -0
  63. {tensorstudio-1.4.0 → tensorstudio-1.5.1}/docs/autograd/gradient-notes.md +0 -0
  64. {tensorstudio-1.4.0 → tensorstudio-1.5.1}/docs/autograd/overview.md +0 -0
  65. {tensorstudio-1.4.0 → tensorstudio-1.5.1}/docs/core/native-cpp-core.md +0 -0
  66. {tensorstudio-1.4.0 → tensorstudio-1.5.1}/docs/data/dataloader-patterns.md +0 -0
  67. {tensorstudio-1.4.0 → tensorstudio-1.5.1}/docs/data/datasets-and-dataloaders.md +0 -0
  68. {tensorstudio-1.4.0 → tensorstudio-1.5.1}/docs/data/tensor-datasets.md +0 -0
  69. {tensorstudio-1.4.0 → tensorstudio-1.5.1}/docs/development/contributing.md +0 -0
  70. {tensorstudio-1.4.0 → tensorstudio-1.5.1}/docs/development/cpp-first.md +0 -0
  71. {tensorstudio-1.4.0 → tensorstudio-1.5.1}/docs/getting-started/installation.md +0 -0
  72. {tensorstudio-1.4.0 → tensorstudio-1.5.1}/docs/getting-started/quickstart.md +0 -0
  73. {tensorstudio-1.4.0 → tensorstudio-1.5.1}/docs/getting-started/source-build.md +0 -0
  74. {tensorstudio-1.4.0 → tensorstudio-1.5.1}/docs/hardware/linux.md +0 -0
  75. {tensorstudio-1.4.0 → tensorstudio-1.5.1}/docs/hardware/macos.md +0 -0
  76. {tensorstudio-1.4.0 → tensorstudio-1.5.1}/docs/hardware/windows.md +0 -0
  77. {tensorstudio-1.4.0 → tensorstudio-1.5.1}/docs/interchange/model-formats.md +0 -0
  78. {tensorstudio-1.4.0 → tensorstudio-1.5.1}/docs/interchange/numpy-interop.md +0 -0
  79. {tensorstudio-1.4.0 → tensorstudio-1.5.1}/docs/interchange/trusted-serialization.md +0 -0
  80. {tensorstudio-1.4.0 → tensorstudio-1.5.1}/docs/nn/modules.md +0 -0
  81. {tensorstudio-1.4.0 → tensorstudio-1.5.1}/docs/nn/optimizers.md +0 -0
  82. {tensorstudio-1.4.0 → tensorstudio-1.5.1}/docs/nn/overview.md +0 -0
  83. {tensorstudio-1.4.0 → tensorstudio-1.5.1}/docs/performance/optimization.md +0 -0
  84. {tensorstudio-1.4.0 → tensorstudio-1.5.1}/docs/performance/profiling.md +0 -0
  85. {tensorstudio-1.4.0 → tensorstudio-1.5.1}/docs/project/checkpoints.md +0 -0
  86. {tensorstudio-1.4.0 → tensorstudio-1.5.1}/docs/project/project-layout.md +0 -0
  87. {tensorstudio-1.4.0 → tensorstudio-1.5.1}/docs/project/workflows.md +0 -0
  88. {tensorstudio-1.4.0 → tensorstudio-1.5.1}/docs/release/checklist.md +0 -0
  89. {tensorstudio-1.4.0 → tensorstudio-1.5.1}/docs/roadmap/milestones.md +0 -0
  90. {tensorstudio-1.4.0 → tensorstudio-1.5.1}/docs/roadmap/priorities.md +0 -0
  91. {tensorstudio-1.4.0 → tensorstudio-1.5.1}/docs/vision/dataset-creation.md +0 -0
  92. {tensorstudio-1.4.0 → tensorstudio-1.5.1}/docs/vision/overview.md +0 -0
  93. {tensorstudio-1.4.0 → tensorstudio-1.5.1}/examples/basic_tensor_ops.py +0 -0
  94. {tensorstudio-1.4.0 → tensorstudio-1.5.1}/examples/export_onnx.py +0 -0
  95. {tensorstudio-1.4.0 → tensorstudio-1.5.1}/examples/image_folder_classification.py +0 -0
  96. {tensorstudio-1.4.0 → tensorstudio-1.5.1}/examples/linear_regression.py +0 -0
  97. {tensorstudio-1.4.0 → tensorstudio-1.5.1}/examples/project_training.py +0 -0
  98. {tensorstudio-1.4.0 → tensorstudio-1.5.1}/examples/save_load_model.py +0 -0
  99. {tensorstudio-1.4.0 → tensorstudio-1.5.1}/examples/tiny_mlp.py +0 -0
  100. {tensorstudio-1.4.0 → tensorstudio-1.5.1}/examples/vision_classifier.py +0 -0
  101. {tensorstudio-1.4.0 → tensorstudio-1.5.1}/include/tensorstudio/autograd.hpp +0 -0
  102. {tensorstudio-1.4.0 → tensorstudio-1.5.1}/include/tensorstudio/device.hpp +0 -0
  103. {tensorstudio-1.4.0 → tensorstudio-1.5.1}/include/tensorstudio/dtype.hpp +0 -0
  104. {tensorstudio-1.4.0 → tensorstudio-1.5.1}/include/tensorstudio/errors.hpp +0 -0
  105. {tensorstudio-1.4.0 → tensorstudio-1.5.1}/include/tensorstudio/module.hpp +0 -0
  106. {tensorstudio-1.4.0 → tensorstudio-1.5.1}/include/tensorstudio/optim.hpp +0 -0
  107. {tensorstudio-1.4.0 → tensorstudio-1.5.1}/include/tensorstudio/random.hpp +0 -0
  108. {tensorstudio-1.4.0 → tensorstudio-1.5.1}/include/tensorstudio/serialization.hpp +0 -0
  109. {tensorstudio-1.4.0 → tensorstudio-1.5.1}/include/tensorstudio/shape.hpp +0 -0
  110. {tensorstudio-1.4.0 → tensorstudio-1.5.1}/include/tensorstudio/storage.hpp +0 -0
  111. {tensorstudio-1.4.0 → tensorstudio-1.5.1}/include/tensorstudio/tensor.hpp +0 -0
  112. {tensorstudio-1.4.0 → tensorstudio-1.5.1}/mkdocs.yml +0 -0
  113. {tensorstudio-1.4.0 → tensorstudio-1.5.1}/python/tensorstudio/autograd.py +0 -0
  114. {tensorstudio-1.4.0 → tensorstudio-1.5.1}/python/tensorstudio/data/__init__.py +0 -0
  115. {tensorstudio-1.4.0 → tensorstudio-1.5.1}/python/tensorstudio/data/dataloader.py +0 -0
  116. {tensorstudio-1.4.0 → tensorstudio-1.5.1}/python/tensorstudio/data/dataset.py +0 -0
  117. {tensorstudio-1.4.0 → tensorstudio-1.5.1}/python/tensorstudio/dtypes.py +0 -0
  118. {tensorstudio-1.4.0 → tensorstudio-1.5.1}/python/tensorstudio/errors.py +0 -0
  119. {tensorstudio-1.4.0 → tensorstudio-1.5.1}/python/tensorstudio/grad_mode.py +0 -0
  120. {tensorstudio-1.4.0 → tensorstudio-1.5.1}/python/tensorstudio/interchange/__init__.py +0 -0
  121. {tensorstudio-1.4.0 → tensorstudio-1.5.1}/python/tensorstudio/interchange/onnx.py +0 -0
  122. {tensorstudio-1.4.0 → tensorstudio-1.5.1}/python/tensorstudio/math.py +0 -0
  123. {tensorstudio-1.4.0 → tensorstudio-1.5.1}/python/tensorstudio/nn/__init__.py +0 -0
  124. {tensorstudio-1.4.0 → tensorstudio-1.5.1}/python/tensorstudio/nn/functional.py +0 -0
  125. {tensorstudio-1.4.0 → tensorstudio-1.5.1}/python/tensorstudio/nn/losses.py +0 -0
  126. {tensorstudio-1.4.0 → tensorstudio-1.5.1}/python/tensorstudio/nn/modules.py +0 -0
  127. {tensorstudio-1.4.0 → tensorstudio-1.5.1}/python/tensorstudio/optim/__init__.py +0 -0
  128. {tensorstudio-1.4.0 → tensorstudio-1.5.1}/python/tensorstudio/optim/adam.py +0 -0
  129. {tensorstudio-1.4.0 → tensorstudio-1.5.1}/python/tensorstudio/optim/adamw.py +0 -0
  130. {tensorstudio-1.4.0 → tensorstudio-1.5.1}/python/tensorstudio/optim/lr_scheduler.py +0 -0
  131. {tensorstudio-1.4.0 → tensorstudio-1.5.1}/python/tensorstudio/optim/sgd.py +0 -0
  132. {tensorstudio-1.4.0 → tensorstudio-1.5.1}/python/tensorstudio/optim/utils.py +0 -0
  133. {tensorstudio-1.4.0 → tensorstudio-1.5.1}/python/tensorstudio/project/__init__.py +0 -0
  134. {tensorstudio-1.4.0 → tensorstudio-1.5.1}/python/tensorstudio/project/checkpoint.py +0 -0
  135. {tensorstudio-1.4.0 → tensorstudio-1.5.1}/python/tensorstudio/project/config.py +0 -0
  136. {tensorstudio-1.4.0 → tensorstudio-1.5.1}/python/tensorstudio/project/trainer.py +0 -0
  137. {tensorstudio-1.4.0 → tensorstudio-1.5.1}/python/tensorstudio/py.typed +0 -0
  138. {tensorstudio-1.4.0 → tensorstudio-1.5.1}/python/tensorstudio/serialization.py +0 -0
  139. {tensorstudio-1.4.0 → tensorstudio-1.5.1}/python/tensorstudio/tensor.py +0 -0
  140. {tensorstudio-1.4.0 → tensorstudio-1.5.1}/python/tensorstudio/typing.py +0 -0
  141. {tensorstudio-1.4.0 → tensorstudio-1.5.1}/python/tensorstudio/vision/__init__.py +0 -0
  142. {tensorstudio-1.4.0 → tensorstudio-1.5.1}/python/tensorstudio/vision/datasets.py +0 -0
  143. {tensorstudio-1.4.0 → tensorstudio-1.5.1}/python/tensorstudio/vision/io.py +0 -0
  144. {tensorstudio-1.4.0 → tensorstudio-1.5.1}/python/tensorstudio/vision/metrics.py +0 -0
  145. {tensorstudio-1.4.0 → tensorstudio-1.5.1}/python/tensorstudio/vision/models.py +0 -0
  146. {tensorstudio-1.4.0 → tensorstudio-1.5.1}/python/tensorstudio/vision/transforms.py +0 -0
  147. {tensorstudio-1.4.0 → tensorstudio-1.5.1}/python/tensorstudio/vision/visualization.py +0 -0
  148. {tensorstudio-1.4.0 → tensorstudio-1.5.1}/src/bindings/bind_autograd.cpp +0 -0
  149. {tensorstudio-1.4.0 → tensorstudio-1.5.1}/src/bindings/bind_nn.cpp +0 -0
  150. {tensorstudio-1.4.0 → tensorstudio-1.5.1}/src/bindings/bind_optim.cpp +0 -0
  151. {tensorstudio-1.4.0 → tensorstudio-1.5.1}/src/bindings/bindings.cpp +0 -0
  152. {tensorstudio-1.4.0 → tensorstudio-1.5.1}/src/bindings/bindings.hpp +0 -0
  153. {tensorstudio-1.4.0 → tensorstudio-1.5.1}/src/core/autograd.cpp +0 -0
  154. {tensorstudio-1.4.0 → tensorstudio-1.5.1}/src/core/device.cpp +0 -0
  155. {tensorstudio-1.4.0 → tensorstudio-1.5.1}/src/core/errors.cpp +0 -0
  156. {tensorstudio-1.4.0 → tensorstudio-1.5.1}/src/core/module.cpp +0 -0
  157. {tensorstudio-1.4.0 → tensorstudio-1.5.1}/src/core/optim.cpp +0 -0
  158. {tensorstudio-1.4.0 → tensorstudio-1.5.1}/src/core/random.cpp +0 -0
  159. {tensorstudio-1.4.0 → tensorstudio-1.5.1}/src/core/serialization.cpp +0 -0
  160. {tensorstudio-1.4.0 → tensorstudio-1.5.1}/src/core/storage.cpp +0 -0
  161. {tensorstudio-1.4.0 → tensorstudio-1.5.1}/test_all.py +0 -0
  162. {tensorstudio-1.4.0 → tensorstudio-1.5.1}/tests/test_autograd.py +0 -0
  163. {tensorstudio-1.4.0 → tensorstudio-1.5.1}/tests/test_benchmark_report.py +0 -0
  164. {tensorstudio-1.4.0 → tensorstudio-1.5.1}/tests/test_broadcasting.py +0 -0
  165. {tensorstudio-1.4.0 → tensorstudio-1.5.1}/tests/test_data.py +0 -0
  166. {tensorstudio-1.4.0 → tensorstudio-1.5.1}/tests/test_indexing.py +0 -0
  167. {tensorstudio-1.4.0 → tensorstudio-1.5.1}/tests/test_interchange.py +0 -0
  168. {tensorstudio-1.4.0 → tensorstudio-1.5.1}/tests/test_nn.py +0 -0
  169. {tensorstudio-1.4.0 → tensorstudio-1.5.1}/tests/test_numpy_interop.py +0 -0
  170. {tensorstudio-1.4.0 → tensorstudio-1.5.1}/tests/test_ops.py +0 -0
  171. {tensorstudio-1.4.0 → tensorstudio-1.5.1}/tests/test_optim.py +0 -0
  172. {tensorstudio-1.4.0 → tensorstudio-1.5.1}/tests/test_project.py +0 -0
  173. {tensorstudio-1.4.0 → tensorstudio-1.5.1}/tests/test_serialization.py +0 -0
  174. {tensorstudio-1.4.0 → tensorstudio-1.5.1}/tests/test_tensor.py +0 -0
  175. {tensorstudio-1.4.0 → tensorstudio-1.5.1}/tests/test_vision.py +0 -0
@@ -2,6 +2,32 @@
2
2
 
3
3
  ## Unreleased
4
4
 
5
+ ## 1.5.1 - 2026-07-07
6
+
7
+ - Completed the next ordered correctness-roadmap item with clearer native
8
+ shape, dtype, and indexing error messages.
9
+ - Broadcasting errors now include the mismatched axis and dimensions.
10
+ - Reshape errors now include requested element counts and inferred-shape
11
+ context.
12
+ - DType errors now validate Python dtype inputs and list supported dtype names
13
+ and aliases.
14
+ - Indexing errors now include tensor shape/rank context and the unsupported
15
+ Python index type/value where practical.
16
+ - Added focused regression tests for the improved diagnostics.
17
+
18
+ ## 1.5.0 - 2026-07-07
19
+
20
+ - Completed the next ordered correctness-roadmap item with native C++ view and
21
+ layout operations: `squeeze`, `unsqueeze`, `permute`, and general
22
+ N-dimensional transpose.
23
+ - Added Python Tensor methods, functional APIs, top-level exports, and type
24
+ stubs for the new layout operations.
25
+ - Added autograd support for the new metadata views, including non-contiguous
26
+ gradient handling through reshape chains.
27
+ - Added NumPy parity tests for view semantics, strides, shape errors, and
28
+ autograd behavior.
29
+ - Updated tensor, API, autograd, and roadmap docs for the expanded view API.
30
+
5
31
  ## 1.4.0 - 2026-07-07
6
32
 
7
33
  - Supersedes the short-lived `1.3.7` indexing release as a minor version
@@ -1,6 +1,6 @@
1
1
  cmake_minimum_required(VERSION 3.18)
2
2
 
3
- project(tensorstudio VERSION 1.4.0 LANGUAGES CXX)
3
+ project(tensorstudio VERSION 1.5.1 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.4.0
3
+ Version: 1.5.1
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.4.0` is a CPU-only stable API foundation. It is eager-only,
74
+ TensorStudio `1.5.1` 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
@@ -146,6 +146,7 @@ print((x + y).tolist())
146
146
  print((x @ y).numpy())
147
147
  print(x.reshape((4,)).tolist())
148
148
  print(x[0, :].tolist())
149
+ print(x.unsqueeze(0).permute(1, 2, 0).shape)
149
150
  ```
150
151
 
151
152
  ## Tensor API
@@ -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.4.0` is a CPU-only stable API foundation. It is eager-only,
10
+ TensorStudio `1.5.1` 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
@@ -82,6 +82,7 @@ print((x + y).tolist())
82
82
  print((x @ y).numpy())
83
83
  print(x.reshape((4,)).tolist())
84
84
  print(x[0, :].tolist())
85
+ print(x.unsqueeze(0).permute(1, 2, 0).shape)
85
86
  ```
86
87
 
87
88
  ## Tensor API
@@ -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.5.1`
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: `84`
22
+ - TensorStudio losses versus JAX CPU dispatch: `14`
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.0046 | 0.0046 | 0.0044 | 0.0049 | 0.0002 | 0.1463 | n/a | n/a | 2.5621 | no | n/a | n/a | yes | NumPy | loss vs NumPy |
31
+ | elementwise | add | `(1,)` | NumPy | 0.0007 | 0.0007 | 0.0006 | 0.0007 | 0.0000 | 0.1463 | n/a | n/a | 2.5621 | no | n/a | n/a | yes | NumPy | NumPy baseline |
32
+ | elementwise | add | `(1,)` | JAX CPU dispatch | 0.0118 | 0.0121 | 0.0116 | 0.0133 | 0.0006 | 0.1463 | n/a | n/a | 2.5621 | no | n/a | n/a | yes | NumPy | reference |
33
+ | elementwise | sub | `(1,)` | TensorStudio | 0.0026 | 0.0027 | 0.0025 | 0.0031 | 0.0002 | 0.2657 | n/a | n/a | 4.7203 | no | n/a | n/a | yes | NumPy | loss vs NumPy |
34
+ | elementwise | sub | `(1,)` | NumPy | 0.0007 | 0.0007 | 0.0007 | 0.0007 | 0.0000 | 0.2657 | n/a | n/a | 4.7203 | no | n/a | n/a | yes | NumPy | NumPy baseline |
35
+ | elementwise | sub | `(1,)` | JAX CPU dispatch | 0.0124 | 0.0129 | 0.0116 | 0.0157 | 0.0015 | 0.2657 | n/a | n/a | 4.7203 | no | n/a | n/a | yes | NumPy | reference |
36
+ | elementwise | mul | `(1,)` | TensorStudio | 0.0025 | 0.0027 | 0.0024 | 0.0034 | 0.0004 | 0.2737 | n/a | n/a | 4.6423 | no | n/a | n/a | yes | NumPy | loss vs NumPy |
37
+ | elementwise | mul | `(1,)` | NumPy | 0.0007 | 0.0007 | 0.0007 | 0.0007 | 0.0000 | 0.2737 | n/a | n/a | 4.6423 | no | n/a | n/a | yes | NumPy | NumPy baseline |
38
+ | elementwise | mul | `(1,)` | JAX CPU dispatch | 0.0116 | 0.0120 | 0.0113 | 0.0129 | 0.0007 | 0.2737 | n/a | n/a | 4.6423 | no | n/a | n/a | yes | NumPy | reference |
39
+ | elementwise | div | `(1,)` | TensorStudio | 0.0026 | 0.0026 | 0.0025 | 0.0028 | 0.0002 | 0.2761 | n/a | n/a | 3.4863 | no | n/a | n/a | yes | NumPy | loss vs NumPy |
40
+ | elementwise | div | `(1,)` | NumPy | 0.0007 | 0.0007 | 0.0007 | 0.0008 | 0.0000 | 0.2761 | n/a | n/a | 3.4863 | no | n/a | n/a | yes | NumPy | NumPy baseline |
41
+ | elementwise | div | `(1,)` | JAX CPU dispatch | 0.0089 | 0.0089 | 0.0087 | 0.0093 | 0.0002 | 0.2761 | n/a | n/a | 3.4863 | no | n/a | n/a | yes | NumPy | reference |
42
+ | elementwise | chain_relu((x*2+1)/3) | `(1,)` | TensorStudio | 0.0097 | 0.0098 | 0.0096 | 0.0100 | 0.0002 | 0.5552 | n/a | n/a | 8.9392 | no | n/a | n/a | yes | NumPy | loss vs NumPy |
43
+ | elementwise | chain_relu((x*2+1)/3) | `(1,)` | NumPy | 0.0054 | 0.0054 | 0.0053 | 0.0055 | 0.0001 | 0.5552 | n/a | n/a | 8.9392 | no | n/a | n/a | yes | NumPy | NumPy baseline |
44
+ | elementwise | chain_relu((x*2+1)/3) | `(1,)` | JAX CPU dispatch | 0.0866 | 0.0879 | 0.0853 | 0.0946 | 0.0034 | 0.5552 | n/a | n/a | 8.9392 | no | n/a | n/a | yes | NumPy | reference |
45
+ | elementwise | add | `(8,)` | TensorStudio | 0.0026 | 0.0026 | 0.0025 | 0.0028 | 0.0001 | 0.2500 | n/a | n/a | 4.5588 | no | n/a | n/a | yes | NumPy | loss vs NumPy |
46
+ | elementwise | add | `(8,)` | NumPy | 0.0006 | 0.0006 | 0.0006 | 0.0007 | 0.0000 | 0.2500 | n/a | n/a | 4.5588 | no | n/a | n/a | yes | NumPy | NumPy baseline |
47
+ | elementwise | add | `(8,)` | JAX CPU dispatch | 0.0117 | 0.0135 | 0.0112 | 0.0174 | 0.0026 | 0.2500 | n/a | n/a | 4.5588 | no | n/a | n/a | yes | NumPy | reference |
48
+ | elementwise | sub | `(8,)` | TensorStudio | 0.0026 | 0.0027 | 0.0025 | 0.0029 | 0.0001 | 0.2685 | n/a | n/a | 4.3732 | no | n/a | n/a | yes | NumPy | loss vs NumPy |
49
+ | elementwise | sub | `(8,)` | NumPy | 0.0007 | 0.0007 | 0.0007 | 0.0008 | 0.0000 | 0.2685 | n/a | n/a | 4.3732 | no | n/a | n/a | yes | NumPy | NumPy baseline |
50
+ | elementwise | sub | `(8,)` | JAX CPU dispatch | 0.0114 | 0.0115 | 0.0109 | 0.0122 | 0.0004 | 0.2685 | n/a | n/a | 4.3732 | no | n/a | n/a | yes | NumPy | reference |
51
+ | elementwise | mul | `(8,)` | TensorStudio | 0.0026 | 0.0026 | 0.0025 | 0.0028 | 0.0001 | 0.2685 | n/a | n/a | 4.3188 | no | n/a | n/a | yes | NumPy | loss vs NumPy |
52
+ | elementwise | mul | `(8,)` | NumPy | 0.0007 | 0.0007 | 0.0007 | 0.0007 | 0.0000 | 0.2685 | n/a | n/a | 4.3188 | no | n/a | n/a | yes | NumPy | NumPy baseline |
53
+ | elementwise | mul | `(8,)` | JAX CPU dispatch | 0.0114 | 0.0114 | 0.0112 | 0.0116 | 0.0002 | 0.2685 | n/a | n/a | 4.3188 | no | n/a | n/a | yes | NumPy | reference |
54
+ | elementwise | div | `(8,)` | TensorStudio | 0.0025 | 0.0025 | 0.0025 | 0.0026 | 0.0000 | 0.2907 | n/a | n/a | 3.4709 | no | n/a | n/a | yes | NumPy | loss vs NumPy |
55
+ | elementwise | div | `(8,)` | NumPy | 0.0007 | 0.0009 | 0.0007 | 0.0013 | 0.0002 | 0.2907 | n/a | n/a | 3.4709 | no | n/a | n/a | yes | NumPy | NumPy baseline |
56
+ | elementwise | div | `(8,)` | JAX CPU dispatch | 0.0088 | 0.0088 | 0.0086 | 0.0090 | 0.0001 | 0.2907 | n/a | n/a | 3.4709 | no | n/a | n/a | yes | NumPy | reference |
57
+ | elementwise | chain_relu((x*2+1)/3) | `(8,)` | TensorStudio | 0.0096 | 0.0096 | 0.0096 | 0.0097 | 0.0001 | 0.5616 | n/a | n/a | 9.0605 | no | n/a | n/a | yes | NumPy | loss vs NumPy |
58
+ | elementwise | chain_relu((x*2+1)/3) | `(8,)` | NumPy | 0.0054 | 0.0055 | 0.0052 | 0.0061 | 0.0003 | 0.5616 | n/a | n/a | 9.0605 | no | n/a | n/a | yes | NumPy | NumPy baseline |
59
+ | elementwise | chain_relu((x*2+1)/3) | `(8,)` | JAX CPU dispatch | 0.0872 | 0.0877 | 0.0853 | 0.0922 | 0.0024 | 0.5616 | n/a | n/a | 9.0605 | no | n/a | n/a | yes | NumPy | reference |
60
+ | elementwise | add | `(32,)` | TensorStudio | 0.0027 | 0.0028 | 0.0026 | 0.0030 | 0.0002 | 0.2932 | n/a | n/a | 4.6597 | no | n/a | n/a | yes | NumPy | loss vs NumPy |
61
+ | elementwise | add | `(32,)` | NumPy | 0.0008 | 0.0008 | 0.0007 | 0.0009 | 0.0001 | 0.2932 | n/a | n/a | 4.6597 | no | n/a | n/a | yes | NumPy | NumPy baseline |
62
+ | elementwise | add | `(32,)` | JAX CPU dispatch | 0.0125 | 0.0126 | 0.0114 | 0.0139 | 0.0009 | 0.2932 | n/a | n/a | 4.6597 | no | n/a | n/a | yes | NumPy | reference |
63
+ | elementwise | sub | `(32,)` | TensorStudio | 0.0027 | 0.0027 | 0.0026 | 0.0028 | 0.0001 | 0.2489 | n/a | n/a | 4.3298 | no | n/a | n/a | yes | NumPy | loss vs NumPy |
64
+ | elementwise | sub | `(32,)` | NumPy | 0.0007 | 0.0007 | 0.0007 | 0.0008 | 0.0000 | 0.2489 | n/a | n/a | 4.3298 | no | n/a | n/a | yes | NumPy | NumPy baseline |
65
+ | elementwise | sub | `(32,)` | JAX CPU dispatch | 0.0118 | 0.0119 | 0.0115 | 0.0122 | 0.0002 | 0.2489 | n/a | n/a | 4.3298 | no | n/a | n/a | yes | NumPy | reference |
66
+ | elementwise | mul | `(32,)` | TensorStudio | 0.0028 | 0.0028 | 0.0026 | 0.0030 | 0.0001 | 0.2489 | n/a | n/a | 4.3641 | no | n/a | n/a | yes | NumPy | loss vs NumPy |
67
+ | elementwise | mul | `(32,)` | NumPy | 0.0007 | 0.0007 | 0.0007 | 0.0007 | 0.0000 | 0.2489 | n/a | n/a | 4.3641 | no | n/a | n/a | yes | NumPy | NumPy baseline |
68
+ | elementwise | mul | `(32,)` | JAX CPU dispatch | 0.0120 | 0.0124 | 0.0118 | 0.0138 | 0.0007 | 0.2489 | n/a | n/a | 4.3641 | no | n/a | n/a | yes | NumPy | reference |
69
+ | elementwise | div | `(32,)` | TensorStudio | 0.0026 | 0.0027 | 0.0026 | 0.0028 | 0.0001 | 0.2810 | n/a | n/a | 3.3462 | no | n/a | n/a | yes | NumPy | loss vs NumPy |
70
+ | elementwise | div | `(32,)` | NumPy | 0.0007 | 0.0008 | 0.0007 | 0.0008 | 0.0000 | 0.2810 | n/a | n/a | 3.3462 | no | n/a | n/a | yes | NumPy | NumPy baseline |
71
+ | elementwise | div | `(32,)` | JAX CPU dispatch | 0.0088 | 0.0088 | 0.0087 | 0.0091 | 0.0002 | 0.2810 | n/a | n/a | 3.3462 | no | n/a | n/a | yes | NumPy | reference |
72
+ | elementwise | chain_relu((x*2+1)/3) | `(32,)` | TensorStudio | 0.0097 | 0.0096 | 0.0096 | 0.0097 | 0.0000 | 0.5735 | n/a | n/a | 9.0016 | no | n/a | n/a | yes | NumPy | loss vs NumPy |
73
+ | elementwise | chain_relu((x*2+1)/3) | `(32,)` | NumPy | 0.0055 | 0.0058 | 0.0054 | 0.0068 | 0.0005 | 0.5735 | n/a | n/a | 9.0016 | no | n/a | n/a | yes | NumPy | NumPy baseline |
74
+ | elementwise | chain_relu((x*2+1)/3) | `(32,)` | JAX CPU dispatch | 0.0870 | 0.0872 | 0.0857 | 0.0895 | 0.0013 | 0.5735 | n/a | n/a | 9.0016 | no | n/a | n/a | yes | NumPy | reference |
75
+ | elementwise | add | `(128,)` | TensorStudio | 0.0027 | 0.0027 | 0.0026 | 0.0028 | 0.0001 | 0.2499 | n/a | n/a | 4.1616 | no | n/a | n/a | yes | NumPy | loss vs NumPy |
76
+ | elementwise | add | `(128,)` | NumPy | 0.0007 | 0.0007 | 0.0006 | 0.0009 | 0.0001 | 0.2499 | n/a | n/a | 4.1616 | no | n/a | n/a | yes | NumPy | NumPy baseline |
77
+ | elementwise | add | `(128,)` | JAX CPU dispatch | 0.0114 | 0.0115 | 0.0113 | 0.0117 | 0.0002 | 0.2499 | n/a | n/a | 4.1616 | no | n/a | n/a | yes | NumPy | reference |
78
+ | elementwise | sub | `(128,)` | TensorStudio | 0.0027 | 0.0027 | 0.0026 | 0.0027 | 0.0000 | 0.2668 | n/a | n/a | 4.3693 | no | n/a | n/a | yes | NumPy | loss vs NumPy |
79
+ | elementwise | sub | `(128,)` | NumPy | 0.0007 | 0.0007 | 0.0007 | 0.0008 | 0.0000 | 0.2668 | n/a | n/a | 4.3693 | no | n/a | n/a | yes | NumPy | NumPy baseline |
80
+ | elementwise | sub | `(128,)` | JAX CPU dispatch | 0.0116 | 0.0116 | 0.0112 | 0.0118 | 0.0002 | 0.2668 | n/a | n/a | 4.3693 | no | n/a | n/a | yes | NumPy | reference |
81
+ | elementwise | mul | `(128,)` | TensorStudio | 0.0026 | 0.0026 | 0.0026 | 0.0027 | 0.0000 | 0.2675 | n/a | n/a | 4.5237 | no | n/a | n/a | yes | NumPy | loss vs NumPy |
82
+ | elementwise | mul | `(128,)` | NumPy | 0.0007 | 0.0007 | 0.0007 | 0.0007 | 0.0000 | 0.2675 | n/a | n/a | 4.5237 | no | n/a | n/a | yes | NumPy | NumPy baseline |
83
+ | elementwise | mul | `(128,)` | JAX CPU dispatch | 0.0118 | 0.0118 | 0.0117 | 0.0120 | 0.0001 | 0.2675 | n/a | n/a | 4.5237 | no | n/a | n/a | yes | NumPy | reference |
84
+ | elementwise | div | `(128,)` | TensorStudio | 0.0028 | 0.0030 | 0.0026 | 0.0040 | 0.0005 | 0.2712 | n/a | n/a | 3.1160 | no | n/a | n/a | yes | NumPy | loss vs NumPy |
85
+ | elementwise | div | `(128,)` | NumPy | 0.0008 | 0.0009 | 0.0007 | 0.0014 | 0.0002 | 0.2712 | n/a | n/a | 3.1160 | no | n/a | n/a | yes | NumPy | NumPy baseline |
86
+ | elementwise | div | `(128,)` | JAX CPU dispatch | 0.0088 | 0.0098 | 0.0086 | 0.0140 | 0.0021 | 0.2712 | n/a | n/a | 3.1160 | no | n/a | n/a | yes | NumPy | reference |
87
+ | elementwise | chain_relu((x*2+1)/3) | `(128,)` | TensorStudio | 0.0101 | 0.0101 | 0.0100 | 0.0103 | 0.0001 | 0.5357 | n/a | n/a | 8.7850 | no | n/a | n/a | yes | NumPy | loss vs NumPy |
88
+ | elementwise | chain_relu((x*2+1)/3) | `(128,)` | NumPy | 0.0054 | 0.0054 | 0.0054 | 0.0055 | 0.0000 | 0.5357 | n/a | n/a | 8.7850 | no | n/a | n/a | yes | NumPy | NumPy baseline |
89
+ | elementwise | chain_relu((x*2+1)/3) | `(128,)` | JAX CPU dispatch | 0.0889 | 0.0907 | 0.0872 | 0.0963 | 0.0032 | 0.5357 | n/a | n/a | 8.7850 | no | n/a | n/a | yes | NumPy | reference |
90
+ | elementwise | add | `(1024,)` | TensorStudio | 0.0032 | 0.0031 | 0.0030 | 0.0032 | 0.0001 | 0.3721 | n/a | n/a | 4.5073 | no | n/a | n/a | yes | NumPy | loss vs NumPy |
91
+ | elementwise | add | `(1024,)` | NumPy | 0.0012 | 0.0011 | 0.0009 | 0.0012 | 0.0001 | 0.3721 | n/a | n/a | 4.5073 | no | n/a | n/a | yes | NumPy | NumPy baseline |
92
+ | elementwise | add | `(1024,)` | JAX CPU dispatch | 0.0142 | 0.0149 | 0.0123 | 0.0192 | 0.0024 | 0.3721 | n/a | n/a | 4.5073 | no | n/a | n/a | yes | NumPy | reference |
93
+ | elementwise | sub | `(1024,)` | TensorStudio | 0.0030 | 0.0030 | 0.0030 | 0.0031 | 0.0000 | 0.3246 | n/a | n/a | 4.5470 | no | n/a | n/a | yes | NumPy | loss vs NumPy |
94
+ | elementwise | sub | `(1024,)` | NumPy | 0.0010 | 0.0010 | 0.0010 | 0.0010 | 0.0000 | 0.3246 | n/a | n/a | 4.5470 | no | n/a | n/a | yes | NumPy | NumPy baseline |
95
+ | elementwise | sub | `(1024,)` | JAX CPU dispatch | 0.0137 | 0.0142 | 0.0116 | 0.0176 | 0.0020 | 0.3246 | n/a | n/a | 4.5470 | no | n/a | n/a | yes | NumPy | reference |
96
+ | elementwise | mul | `(1024,)` | TensorStudio | 0.0031 | 0.0030 | 0.0029 | 0.0031 | 0.0001 | 0.3336 | n/a | n/a | 4.8682 | 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.3336 | n/a | n/a | 4.8682 | no | n/a | n/a | yes | NumPy | NumPy baseline |
98
+ | elementwise | mul | `(1024,)` | JAX CPU dispatch | 0.0149 | 0.0146 | 0.0125 | 0.0169 | 0.0017 | 0.3336 | n/a | n/a | 4.8682 | no | n/a | n/a | yes | NumPy | reference |
99
+ | elementwise | div | `(1024,)` | TensorStudio | 0.0032 | 0.0033 | 0.0032 | 0.0038 | 0.0002 | 0.6986 | n/a | n/a | 3.1039 | no | n/a | n/a | yes | NumPy | loss vs NumPy |
100
+ | elementwise | div | `(1024,)` | NumPy | 0.0022 | 0.0023 | 0.0022 | 0.0023 | 0.0000 | 0.6986 | n/a | n/a | 3.1039 | no | n/a | n/a | yes | NumPy | NumPy baseline |
101
+ | elementwise | div | `(1024,)` | JAX CPU dispatch | 0.0100 | 0.0105 | 0.0097 | 0.0128 | 0.0012 | 0.6986 | n/a | n/a | 3.1039 | no | n/a | n/a | yes | NumPy | reference |
102
+ | elementwise | chain_relu((x*2+1)/3) | `(1024,)` | TensorStudio | 0.0119 | 0.0130 | 0.0118 | 0.0171 | 0.0021 | 0.6389 | n/a | n/a | 11.5433 | no | n/a | n/a | yes | NumPy | loss vs NumPy |
103
+ | elementwise | chain_relu((x*2+1)/3) | `(1024,)` | NumPy | 0.0076 | 0.0075 | 0.0072 | 0.0077 | 0.0002 | 0.6389 | n/a | n/a | 11.5433 | no | n/a | n/a | yes | NumPy | NumPy baseline |
104
+ | elementwise | chain_relu((x*2+1)/3) | `(1024,)` | JAX CPU dispatch | 0.1371 | 0.1317 | 0.1147 | 0.1389 | 0.0089 | 0.6389 | n/a | n/a | 11.5433 | no | n/a | n/a | yes | NumPy | reference |
105
+ | elementwise | add | `(4096,)` | TensorStudio | 0.0065 | 0.0075 | 0.0049 | 0.0130 | 0.0029 | 0.4728 | n/a | n/a | 3.2641 | no | n/a | n/a | yes | NumPy | loss vs NumPy |
106
+ | elementwise | add | `(4096,)` | NumPy | 0.0031 | 0.0030 | 0.0026 | 0.0035 | 0.0003 | 0.4728 | n/a | n/a | 3.2641 | no | n/a | n/a | yes | NumPy | NumPy baseline |
107
+ | elementwise | add | `(4096,)` | JAX CPU dispatch | 0.0212 | 0.0228 | 0.0160 | 0.0296 | 0.0049 | 0.4728 | n/a | n/a | 3.2641 | no | n/a | n/a | yes | NumPy | reference |
108
+ | elementwise | sub | `(4096,)` | TensorStudio | 0.0049 | 0.0050 | 0.0048 | 0.0054 | 0.0002 | 0.3232 | n/a | n/a | 3.1234 | no | n/a | n/a | yes | NumPy | loss vs NumPy |
109
+ | elementwise | sub | `(4096,)` | NumPy | 0.0016 | 0.0016 | 0.0016 | 0.0016 | 0.0000 | 0.3232 | n/a | n/a | 3.1234 | no | n/a | n/a | yes | NumPy | NumPy baseline |
110
+ | elementwise | sub | `(4096,)` | JAX CPU dispatch | 0.0153 | 0.0160 | 0.0130 | 0.0204 | 0.0028 | 0.3232 | n/a | n/a | 3.1234 | no | n/a | n/a | yes | NumPy | reference |
111
+ | elementwise | mul | `(4096,)` | TensorStudio | 0.0049 | 0.0049 | 0.0047 | 0.0050 | 0.0001 | 0.3132 | n/a | n/a | 2.8687 | no | n/a | n/a | yes | NumPy | loss vs NumPy |
112
+ | elementwise | mul | `(4096,)` | NumPy | 0.0015 | 0.0015 | 0.0015 | 0.0016 | 0.0000 | 0.3132 | n/a | n/a | 2.8687 | no | n/a | n/a | yes | NumPy | NumPy baseline |
113
+ | elementwise | mul | `(4096,)` | JAX CPU dispatch | 0.0141 | 0.0140 | 0.0126 | 0.0155 | 0.0010 | 0.3132 | n/a | n/a | 2.8687 | no | n/a | n/a | yes | NumPy | reference |
114
+ | elementwise | div | `(4096,)` | TensorStudio | 0.0057 | 0.0057 | 0.0056 | 0.0061 | 0.0002 | 0.2883 | n/a | n/a | 1.8886 | no | n/a | n/a | yes | NumPy | loss vs NumPy |
115
+ | elementwise | div | `(4096,)` | NumPy | 0.0016 | 0.0016 | 0.0016 | 0.0016 | 0.0000 | 0.2883 | n/a | n/a | 1.8886 | no | n/a | n/a | yes | NumPy | NumPy baseline |
116
+ | elementwise | div | `(4096,)` | JAX CPU dispatch | 0.0107 | 0.0112 | 0.0101 | 0.0136 | 0.0012 | 0.2883 | n/a | n/a | 1.8886 | no | n/a | n/a | yes | NumPy | reference |
117
+ | elementwise | chain_relu((x*2+1)/3) | `(4096,)` | TensorStudio | 0.0191 | 0.0192 | 0.0189 | 0.0195 | 0.0003 | 0.5461 | n/a | n/a | 5.8840 | no | n/a | n/a | yes | NumPy | loss vs NumPy |
118
+ | elementwise | chain_relu((x*2+1)/3) | `(4096,)` | NumPy | 0.0104 | 0.0106 | 0.0102 | 0.0117 | 0.0005 | 0.5461 | n/a | n/a | 5.8840 | no | n/a | n/a | yes | NumPy | NumPy baseline |
119
+ | elementwise | chain_relu((x*2+1)/3) | `(4096,)` | JAX CPU dispatch | 0.1121 | 0.1135 | 0.1055 | 0.1250 | 0.0068 | 0.5461 | n/a | n/a | 5.8840 | no | n/a | n/a | yes | NumPy | reference |
120
+ | elementwise | add | `(16384,)` | TensorStudio | 0.0127 | 0.0133 | 0.0123 | 0.0160 | 0.0014 | 0.2819 | n/a | n/a | 1.0329 | no | n/a | n/a | yes | NumPy | loss vs NumPy |
121
+ | elementwise | add | `(16384,)` | NumPy | 0.0036 | 0.0036 | 0.0036 | 0.0036 | 0.0000 | 0.2819 | n/a | n/a | 1.0329 | no | n/a | n/a | yes | NumPy | NumPy baseline |
122
+ | elementwise | add | `(16384,)` | JAX CPU dispatch | 0.0132 | 0.0156 | 0.0126 | 0.0239 | 0.0043 | 0.2819 | n/a | n/a | 1.0329 | no | n/a | n/a | yes | NumPy | reference |
123
+ | elementwise | sub | `(16384,)` | TensorStudio | 0.0095 | 0.0095 | 0.0095 | 0.0096 | 0.0000 | 0.3980 | n/a | n/a | 1.3705 | no | n/a | n/a | yes | NumPy | loss vs NumPy |
124
+ | elementwise | sub | `(16384,)` | NumPy | 0.0038 | 0.0038 | 0.0038 | 0.0038 | 0.0000 | 0.3980 | n/a | n/a | 1.3705 | no | n/a | n/a | yes | NumPy | NumPy baseline |
125
+ | elementwise | sub | `(16384,)` | JAX CPU dispatch | 0.0131 | 0.0139 | 0.0125 | 0.0184 | 0.0022 | 0.3980 | n/a | n/a | 1.3705 | no | n/a | n/a | yes | NumPy | reference |
126
+ | elementwise | mul | `(16384,)` | TensorStudio | 0.0095 | 0.0096 | 0.0095 | 0.0096 | 0.0000 | 0.3896 | n/a | n/a | 1.8563 | no | n/a | n/a | yes | NumPy | loss vs NumPy |
127
+ | elementwise | mul | `(16384,)` | NumPy | 0.0037 | 0.0037 | 0.0037 | 0.0038 | 0.0000 | 0.3896 | n/a | n/a | 1.8563 | no | n/a | n/a | yes | NumPy | NumPy baseline |
128
+ | elementwise | mul | `(16384,)` | JAX CPU dispatch | 0.0177 | 0.0169 | 0.0129 | 0.0218 | 0.0035 | 0.3896 | n/a | n/a | 1.8563 | no | n/a | n/a | yes | NumPy | reference |
129
+ | elementwise | div | `(16384,)` | TensorStudio | 0.0132 | 0.0132 | 0.0131 | 0.0132 | 0.0000 | 0.3201 | n/a | n/a | 0.8437 | no | n/a | n/a | no | NumPy | loss vs NumPy |
130
+ | elementwise | div | `(16384,)` | NumPy | 0.0042 | 0.0044 | 0.0042 | 0.0050 | 0.0003 | 0.3201 | n/a | n/a | 0.8437 | no | n/a | n/a | no | NumPy | NumPy baseline |
131
+ | elementwise | div | `(16384,)` | JAX CPU dispatch | 0.0111 | 0.0113 | 0.0111 | 0.0118 | 0.0003 | 0.3201 | n/a | n/a | 0.8437 | no | n/a | n/a | no | NumPy | reference |
132
+ | elementwise | chain_relu((x*2+1)/3) | `(16384,)` | TensorStudio | 0.0431 | 0.0433 | 0.0428 | 0.0442 | 0.0005 | 0.4885 | n/a | n/a | 3.3933 | no | n/a | n/a | yes | NumPy | loss vs NumPy |
133
+ | elementwise | chain_relu((x*2+1)/3) | `(16384,)` | NumPy | 0.0210 | 0.0213 | 0.0210 | 0.0220 | 0.0004 | 0.4885 | n/a | n/a | 3.3933 | no | n/a | n/a | yes | NumPy | NumPy baseline |
134
+ | elementwise | chain_relu((x*2+1)/3) | `(16384,)` | JAX CPU dispatch | 0.1462 | 0.1470 | 0.1383 | 0.1534 | 0.0057 | 0.4885 | n/a | n/a | 3.3933 | no | n/a | n/a | yes | NumPy | reference |
135
+ | activations | relu | `(1,)` | TensorStudio | 0.0018 | 0.0018 | 0.0017 | 0.0019 | 0.0001 | 0.9606 | n/a | n/a | 24.5550 | no | n/a | n/a | yes | NumPy | loss vs NumPy |
136
+ | activations | relu | `(1,)` | NumPy | 0.0017 | 0.0017 | 0.0017 | 0.0019 | 0.0001 | 0.9606 | n/a | n/a | 24.5550 | no | n/a | n/a | yes | NumPy | NumPy baseline |
137
+ | activations | relu | `(1,)` | JAX CPU dispatch | 0.0434 | 0.0438 | 0.0426 | 0.0455 | 0.0010 | 0.9606 | n/a | n/a | 24.5550 | no | n/a | n/a | yes | NumPy | reference |
138
+ | activations | sigmoid | `(1,)` | TensorStudio | 0.0018 | 0.0018 | 0.0018 | 0.0020 | 0.0001 | 2.4894 | n/a | n/a | 37.6658 | yes | n/a | n/a | yes | TensorStudio | win vs NumPy |
139
+ | activations | sigmoid | `(1,)` | NumPy | 0.0045 | 0.0045 | 0.0043 | 0.0046 | 0.0001 | 2.4894 | n/a | n/a | 37.6658 | yes | n/a | n/a | yes | TensorStudio | NumPy baseline |
140
+ | activations | sigmoid | `(1,)` | JAX CPU dispatch | 0.0687 | 0.0697 | 0.0685 | 0.0724 | 0.0015 | 2.4894 | n/a | n/a | 37.6658 | yes | n/a | n/a | yes | TensorStudio | reference |
141
+ | activations | tanh | `(1,)` | TensorStudio | 0.0018 | 0.0018 | 0.0018 | 0.0019 | 0.0000 | 0.6766 | n/a | n/a | 16.3403 | no | n/a | n/a | yes | NumPy | loss vs NumPy |
142
+ | activations | tanh | `(1,)` | NumPy | 0.0012 | 0.0012 | 0.0012 | 0.0012 | 0.0000 | 0.6766 | n/a | n/a | 16.3403 | no | n/a | n/a | yes | NumPy | NumPy baseline |
143
+ | activations | tanh | `(1,)` | JAX CPU dispatch | 0.0293 | 0.0293 | 0.0286 | 0.0296 | 0.0004 | 0.6766 | n/a | n/a | 16.3403 | no | n/a | n/a | yes | NumPy | reference |
144
+ | activations | exp | `(1,)` | TensorStudio | 0.0018 | 0.0019 | 0.0018 | 0.0020 | 0.0001 | 0.6618 | n/a | n/a | 16.1313 | no | n/a | n/a | yes | NumPy | loss vs NumPy |
145
+ | activations | exp | `(1,)` | NumPy | 0.0012 | 0.0013 | 0.0012 | 0.0014 | 0.0001 | 0.6618 | n/a | n/a | 16.1313 | no | n/a | n/a | yes | NumPy | NumPy baseline |
146
+ | activations | exp | `(1,)` | JAX CPU dispatch | 0.0295 | 0.0296 | 0.0288 | 0.0306 | 0.0007 | 0.6618 | n/a | n/a | 16.1313 | no | n/a | n/a | yes | NumPy | reference |
147
+ | activations | log | `(1,)` | TensorStudio | 0.0019 | 0.0019 | 0.0018 | 0.0021 | 0.0001 | 0.6834 | n/a | n/a | 15.8139 | no | n/a | n/a | yes | NumPy | loss vs NumPy |
148
+ | activations | log | `(1,)` | NumPy | 0.0013 | 0.0013 | 0.0012 | 0.0015 | 0.0001 | 0.6834 | n/a | n/a | 15.8139 | no | n/a | n/a | yes | NumPy | NumPy baseline |
149
+ | activations | log | `(1,)` | JAX CPU dispatch | 0.0294 | 0.0296 | 0.0287 | 0.0307 | 0.0007 | 0.6834 | n/a | n/a | 15.8139 | no | n/a | n/a | yes | NumPy | reference |
150
+ | activations | relu | `(8,)` | TensorStudio | 0.0018 | 0.0018 | 0.0017 | 0.0019 | 0.0001 | 0.9366 | n/a | n/a | 24.0948 | no | n/a | n/a | yes | NumPy | loss vs NumPy |
151
+ | activations | relu | `(8,)` | NumPy | 0.0017 | 0.0017 | 0.0016 | 0.0018 | 0.0001 | 0.9366 | n/a | n/a | 24.0948 | no | n/a | n/a | yes | NumPy | NumPy baseline |
152
+ | activations | relu | `(8,)` | JAX CPU dispatch | 0.0442 | 0.0442 | 0.0425 | 0.0461 | 0.0013 | 0.9366 | n/a | n/a | 24.0948 | no | n/a | n/a | yes | NumPy | reference |
153
+ | activations | sigmoid | `(8,)` | TensorStudio | 0.0019 | 0.0019 | 0.0018 | 0.0019 | 0.0000 | 2.4066 | n/a | n/a | 38.4883 | yes | n/a | n/a | yes | TensorStudio | win vs NumPy |
154
+ | activations | sigmoid | `(8,)` | NumPy | 0.0045 | 0.0045 | 0.0043 | 0.0045 | 0.0001 | 2.4066 | n/a | n/a | 38.4883 | yes | n/a | n/a | yes | TensorStudio | NumPy baseline |
155
+ | activations | sigmoid | `(8,)` | JAX CPU dispatch | 0.0717 | 0.0718 | 0.0709 | 0.0725 | 0.0006 | 2.4066 | n/a | n/a | 38.4883 | yes | n/a | n/a | yes | TensorStudio | reference |
156
+ | activations | tanh | `(8,)` | TensorStudio | 0.0019 | 0.0019 | 0.0019 | 0.0019 | 0.0000 | 0.6357 | n/a | n/a | 15.1449 | no | n/a | n/a | yes | NumPy | loss vs NumPy |
157
+ | activations | tanh | `(8,)` | NumPy | 0.0012 | 0.0012 | 0.0012 | 0.0013 | 0.0000 | 0.6357 | n/a | n/a | 15.1449 | no | n/a | n/a | yes | NumPy | NumPy baseline |
158
+ | activations | tanh | `(8,)` | JAX CPU dispatch | 0.0285 | 0.0286 | 0.0283 | 0.0293 | 0.0003 | 0.6357 | n/a | n/a | 15.1449 | no | n/a | n/a | yes | NumPy | reference |
159
+ | activations | exp | `(8,)` | TensorStudio | 0.0019 | 0.0020 | 0.0019 | 0.0022 | 0.0001 | 0.6618 | n/a | n/a | 15.3268 | no | n/a | n/a | yes | NumPy | loss vs NumPy |
160
+ | activations | exp | `(8,)` | NumPy | 0.0013 | 0.0013 | 0.0012 | 0.0015 | 0.0001 | 0.6618 | n/a | n/a | 15.3268 | no | n/a | n/a | yes | NumPy | NumPy baseline |
161
+ | activations | exp | `(8,)` | JAX CPU dispatch | 0.0298 | 0.0297 | 0.0290 | 0.0304 | 0.0006 | 0.6618 | n/a | n/a | 15.3268 | no | n/a | n/a | yes | NumPy | reference |
162
+ | activations | log | `(8,)` | TensorStudio | 0.0020 | 0.0021 | 0.0020 | 0.0024 | 0.0002 | 0.6648 | n/a | n/a | 14.3260 | no | n/a | n/a | yes | NumPy | loss vs NumPy |
163
+ | activations | log | `(8,)` | NumPy | 0.0013 | 0.0018 | 0.0012 | 0.0027 | 0.0006 | 0.6648 | n/a | n/a | 14.3260 | no | n/a | n/a | yes | NumPy | NumPy baseline |
164
+ | activations | log | `(8,)` | JAX CPU dispatch | 0.0290 | 0.0290 | 0.0283 | 0.0298 | 0.0005 | 0.6648 | n/a | n/a | 14.3260 | no | n/a | n/a | yes | NumPy | reference |
165
+ | activations | relu | `(32,)` | TensorStudio | 0.0017 | 0.0018 | 0.0017 | 0.0018 | 0.0000 | 0.9603 | n/a | n/a | 24.9638 | no | n/a | n/a | yes | NumPy | loss vs NumPy |
166
+ | activations | relu | `(32,)` | NumPy | 0.0017 | 0.0017 | 0.0017 | 0.0017 | 0.0000 | 0.9603 | n/a | n/a | 24.9638 | no | n/a | n/a | yes | NumPy | NumPy baseline |
167
+ | activations | relu | `(32,)` | JAX CPU dispatch | 0.0434 | 0.0437 | 0.0430 | 0.0451 | 0.0008 | 0.9603 | n/a | n/a | 24.9638 | no | n/a | n/a | yes | NumPy | reference |
168
+ | activations | sigmoid | `(32,)` | TensorStudio | 0.0020 | 0.0020 | 0.0020 | 0.0021 | 0.0000 | 2.2200 | n/a | n/a | 34.2413 | yes | n/a | n/a | yes | TensorStudio | win vs NumPy |
169
+ | activations | sigmoid | `(32,)` | NumPy | 0.0045 | 0.0045 | 0.0044 | 0.0048 | 0.0002 | 2.2200 | n/a | n/a | 34.2413 | yes | n/a | n/a | yes | TensorStudio | NumPy baseline |
170
+ | activations | sigmoid | `(32,)` | JAX CPU dispatch | 0.0693 | 0.0701 | 0.0688 | 0.0726 | 0.0014 | 2.2200 | n/a | n/a | 34.2413 | yes | n/a | n/a | yes | TensorStudio | reference |
171
+ | activations | tanh | `(32,)` | TensorStudio | 0.0021 | 0.0022 | 0.0021 | 0.0022 | 0.0001 | 0.6005 | n/a | n/a | 13.7565 | no | n/a | n/a | yes | NumPy | loss vs NumPy |
172
+ | activations | tanh | `(32,)` | NumPy | 0.0013 | 0.0013 | 0.0012 | 0.0015 | 0.0001 | 0.6005 | n/a | n/a | 13.7565 | no | n/a | n/a | yes | NumPy | NumPy baseline |
173
+ | activations | tanh | `(32,)` | JAX CPU dispatch | 0.0292 | 0.0294 | 0.0289 | 0.0304 | 0.0005 | 0.6005 | n/a | n/a | 13.7565 | no | n/a | n/a | yes | NumPy | reference |
174
+ | activations | exp | `(32,)` | TensorStudio | 0.0020 | 0.0021 | 0.0020 | 0.0023 | 0.0001 | 0.5972 | n/a | n/a | 14.4123 | no | n/a | n/a | yes | NumPy | loss vs NumPy |
175
+ | activations | exp | `(32,)` | NumPy | 0.0012 | 0.0012 | 0.0012 | 0.0013 | 0.0000 | 0.5972 | n/a | n/a | 14.4123 | no | n/a | n/a | yes | NumPy | NumPy baseline |
176
+ | activations | exp | `(32,)` | JAX CPU dispatch | 0.0294 | 0.0295 | 0.0291 | 0.0303 | 0.0004 | 0.5972 | n/a | n/a | 14.4123 | no | n/a | n/a | yes | NumPy | reference |
177
+ | activations | log | `(32,)` | TensorStudio | 0.0020 | 0.0020 | 0.0020 | 0.0021 | 0.0000 | 0.6403 | n/a | n/a | 14.4213 | no | n/a | n/a | yes | NumPy | loss vs NumPy |
178
+ | activations | log | `(32,)` | NumPy | 0.0013 | 0.0013 | 0.0013 | 0.0015 | 0.0001 | 0.6403 | n/a | n/a | 14.4213 | no | n/a | n/a | yes | NumPy | NumPy baseline |
179
+ | activations | log | `(32,)` | JAX CPU dispatch | 0.0293 | 0.0294 | 0.0287 | 0.0300 | 0.0004 | 0.6403 | n/a | n/a | 14.4213 | no | n/a | n/a | yes | NumPy | reference |
180
+ | activations | relu | `(128,)` | TensorStudio | 0.0019 | 0.0019 | 0.0018 | 0.0020 | 0.0000 | 0.9287 | n/a | n/a | 23.6020 | no | n/a | n/a | yes | NumPy | loss vs NumPy |
181
+ | activations | relu | `(128,)` | NumPy | 0.0017 | 0.0018 | 0.0017 | 0.0018 | 0.0000 | 0.9287 | n/a | n/a | 23.6020 | no | n/a | n/a | yes | NumPy | NumPy baseline |
182
+ | activations | relu | `(128,)` | JAX CPU dispatch | 0.0444 | 0.0493 | 0.0434 | 0.0699 | 0.0103 | 0.9287 | n/a | n/a | 23.6020 | no | n/a | n/a | yes | NumPy | reference |
183
+ | activations | sigmoid | `(128,)` | TensorStudio | 0.0029 | 0.0029 | 0.0028 | 0.0030 | 0.0001 | 1.6456 | n/a | n/a | 24.7498 | yes | n/a | n/a | yes | TensorStudio | win vs NumPy |
184
+ | activations | sigmoid | `(128,)` | NumPy | 0.0048 | 0.0047 | 0.0045 | 0.0049 | 0.0002 | 1.6456 | n/a | n/a | 24.7498 | yes | n/a | n/a | yes | TensorStudio | NumPy baseline |
185
+ | activations | sigmoid | `(128,)` | JAX CPU dispatch | 0.0723 | 0.0715 | 0.0701 | 0.0725 | 0.0011 | 1.6456 | n/a | n/a | 24.7498 | yes | n/a | n/a | yes | TensorStudio | reference |
186
+ | activations | tanh | `(128,)` | TensorStudio | 0.0031 | 0.0031 | 0.0030 | 0.0031 | 0.0000 | 0.4739 | n/a | n/a | 10.0428 | no | n/a | n/a | yes | NumPy | loss vs NumPy |
187
+ | activations | tanh | `(128,)` | NumPy | 0.0015 | 0.0015 | 0.0014 | 0.0017 | 0.0001 | 0.4739 | n/a | n/a | 10.0428 | no | n/a | n/a | yes | NumPy | NumPy baseline |
188
+ | activations | tanh | `(128,)` | JAX CPU dispatch | 0.0310 | 0.0308 | 0.0285 | 0.0339 | 0.0019 | 0.4739 | n/a | n/a | 10.0428 | no | n/a | n/a | yes | NumPy | reference |
189
+ | activations | exp | `(128,)` | TensorStudio | 0.0027 | 0.0027 | 0.0026 | 0.0027 | 0.0000 | 0.5096 | n/a | n/a | 11.1536 | no | n/a | n/a | yes | NumPy | loss vs NumPy |
190
+ | activations | exp | `(128,)` | NumPy | 0.0014 | 0.0014 | 0.0013 | 0.0014 | 0.0000 | 0.5096 | n/a | n/a | 11.1536 | no | n/a | n/a | yes | NumPy | NumPy baseline |
191
+ | activations | exp | `(128,)` | JAX CPU dispatch | 0.0296 | 0.0296 | 0.0293 | 0.0298 | 0.0002 | 0.5096 | n/a | n/a | 11.1536 | no | n/a | n/a | yes | NumPy | reference |
192
+ | activations | log | `(128,)` | TensorStudio | 0.0027 | 0.0028 | 0.0027 | 0.0031 | 0.0001 | 0.5246 | n/a | n/a | 10.6159 | no | n/a | n/a | yes | NumPy | loss vs NumPy |
193
+ | activations | log | `(128,)` | NumPy | 0.0014 | 0.0014 | 0.0014 | 0.0015 | 0.0000 | 0.5246 | n/a | n/a | 10.6159 | no | n/a | n/a | yes | NumPy | NumPy baseline |
194
+ | activations | log | `(128,)` | JAX CPU dispatch | 0.0288 | 0.0288 | 0.0284 | 0.0294 | 0.0004 | 0.5246 | n/a | n/a | 10.6159 | no | n/a | n/a | yes | NumPy | reference |
195
+ | activations | relu | `(1024,)` | TensorStudio | 0.0025 | 0.0025 | 0.0024 | 0.0026 | 0.0000 | 0.9419 | n/a | n/a | 23.6470 | no | n/a | n/a | yes | NumPy | loss vs NumPy |
196
+ | activations | relu | `(1024,)` | NumPy | 0.0023 | 0.0024 | 0.0023 | 0.0026 | 0.0001 | 0.9419 | n/a | n/a | 23.6470 | no | n/a | n/a | yes | NumPy | NumPy baseline |
197
+ | activations | relu | `(1024,)` | JAX CPU dispatch | 0.0580 | 0.0605 | 0.0535 | 0.0710 | 0.0063 | 0.9419 | n/a | n/a | 23.6470 | no | n/a | n/a | yes | NumPy | reference |
198
+ | activations | sigmoid | `(1024,)` | TensorStudio | 0.0093 | 0.0093 | 0.0092 | 0.0094 | 0.0001 | 0.7352 | n/a | n/a | 9.4155 | no | n/a | n/a | yes | NumPy | loss vs NumPy |
199
+ | activations | sigmoid | `(1024,)` | NumPy | 0.0068 | 0.0069 | 0.0068 | 0.0070 | 0.0001 | 0.7352 | n/a | n/a | 9.4155 | no | n/a | n/a | yes | NumPy | NumPy baseline |
200
+ | activations | sigmoid | `(1024,)` | JAX CPU dispatch | 0.0875 | 0.0891 | 0.0863 | 0.0950 | 0.0033 | 0.7352 | n/a | n/a | 9.4155 | no | n/a | n/a | yes | NumPy | reference |
201
+ | activations | tanh | `(1024,)` | TensorStudio | 0.0136 | 0.0136 | 0.0133 | 0.0137 | 0.0001 | 0.2726 | n/a | n/a | 2.1402 | no | n/a | n/a | yes | NumPy | loss vs NumPy |
202
+ | activations | tanh | `(1024,)` | NumPy | 0.0037 | 0.0037 | 0.0037 | 0.0038 | 0.0000 | 0.2726 | n/a | n/a | 2.1402 | no | n/a | n/a | yes | NumPy | NumPy baseline |
203
+ | activations | tanh | `(1024,)` | JAX CPU dispatch | 0.0291 | 0.0293 | 0.0287 | 0.0303 | 0.0005 | 0.2726 | n/a | n/a | 2.1402 | no | n/a | n/a | yes | NumPy | reference |
204
+ | activations | exp | `(1024,)` | TensorStudio | 0.0084 | 0.0084 | 0.0082 | 0.0087 | 0.0002 | 0.3102 | n/a | n/a | 3.4620 | no | n/a | n/a | yes | NumPy | loss vs NumPy |
205
+ | activations | exp | `(1024,)` | NumPy | 0.0026 | 0.0026 | 0.0026 | 0.0026 | 0.0000 | 0.3102 | n/a | n/a | 3.4620 | no | n/a | n/a | yes | NumPy | NumPy baseline |
206
+ | activations | exp | `(1024,)` | JAX CPU dispatch | 0.0289 | 0.0290 | 0.0288 | 0.0293 | 0.0002 | 0.3102 | n/a | n/a | 3.4620 | no | n/a | n/a | yes | NumPy | reference |
207
+ | activations | log | `(1024,)` | TensorStudio | 0.0088 | 0.0088 | 0.0086 | 0.0089 | 0.0001 | 0.3289 | n/a | n/a | 3.3826 | no | n/a | n/a | yes | NumPy | loss vs NumPy |
208
+ | activations | log | `(1024,)` | NumPy | 0.0029 | 0.0029 | 0.0028 | 0.0030 | 0.0000 | 0.3289 | n/a | n/a | 3.3826 | no | n/a | n/a | yes | NumPy | NumPy baseline |
209
+ | activations | log | `(1024,)` | JAX CPU dispatch | 0.0298 | 0.0299 | 0.0293 | 0.0306 | 0.0004 | 0.3289 | n/a | n/a | 3.3826 | no | n/a | n/a | yes | NumPy | reference |
210
+ | activations | relu | `(4096,)` | TensorStudio | 0.0050 | 0.0050 | 0.0050 | 0.0052 | 0.0001 | 0.7380 | n/a | n/a | 11.5708 | no | n/a | n/a | yes | NumPy | loss vs NumPy |
211
+ | activations | relu | `(4096,)` | NumPy | 0.0037 | 0.0037 | 0.0034 | 0.0039 | 0.0002 | 0.7380 | n/a | n/a | 11.5708 | no | n/a | n/a | yes | NumPy | NumPy baseline |
212
+ | activations | relu | `(4096,)` | JAX CPU dispatch | 0.0574 | 0.0603 | 0.0532 | 0.0689 | 0.0062 | 0.7380 | n/a | n/a | 11.5708 | no | n/a | n/a | yes | NumPy | reference |
213
+ | activations | sigmoid | `(4096,)` | TensorStudio | 0.0323 | 0.0324 | 0.0322 | 0.0327 | 0.0002 | 0.3651 | n/a | n/a | 3.1205 | no | n/a | n/a | yes | NumPy | loss vs NumPy |
214
+ | activations | sigmoid | `(4096,)` | NumPy | 0.0118 | 0.0118 | 0.0116 | 0.0119 | 0.0001 | 0.3651 | n/a | n/a | 3.1205 | no | n/a | n/a | yes | NumPy | NumPy baseline |
215
+ | activations | sigmoid | `(4096,)` | JAX CPU dispatch | 0.1008 | 0.1014 | 0.0952 | 0.1115 | 0.0055 | 0.3651 | n/a | n/a | 3.1205 | no | n/a | n/a | yes | NumPy | reference |
216
+ | activations | tanh | `(4096,)` | TensorStudio | 0.0582 | 0.0584 | 0.0580 | 0.0589 | 0.0004 | 0.1876 | n/a | n/a | 0.5549 | no | n/a | n/a | no | NumPy | loss vs NumPy |
217
+ | activations | tanh | `(4096,)` | NumPy | 0.0109 | 0.0110 | 0.0108 | 0.0111 | 0.0001 | 0.1876 | n/a | n/a | 0.5549 | no | n/a | n/a | no | NumPy | NumPy baseline |
218
+ | activations | tanh | `(4096,)` | JAX CPU dispatch | 0.0323 | 0.0323 | 0.0319 | 0.0329 | 0.0003 | 0.1876 | n/a | n/a | 0.5549 | no | n/a | n/a | no | NumPy | reference |
219
+ | activations | exp | `(4096,)` | TensorStudio | 0.0281 | 0.0281 | 0.0275 | 0.0284 | 0.0003 | 0.2129 | n/a | n/a | 1.1640 | no | n/a | n/a | yes | NumPy | loss vs NumPy |
220
+ | activations | exp | `(4096,)` | NumPy | 0.0060 | 0.0060 | 0.0059 | 0.0062 | 0.0001 | 0.2129 | n/a | n/a | 1.1640 | no | n/a | n/a | yes | NumPy | NumPy baseline |
221
+ | activations | exp | `(4096,)` | JAX CPU dispatch | 0.0327 | 0.0357 | 0.0323 | 0.0424 | 0.0041 | 0.2129 | n/a | n/a | 1.1640 | no | n/a | n/a | yes | NumPy | reference |
222
+ | activations | log | `(4096,)` | TensorStudio | 0.0300 | 0.0299 | 0.0296 | 0.0300 | 0.0002 | 0.2505 | n/a | n/a | 1.1738 | no | n/a | n/a | yes | NumPy | loss vs NumPy |
223
+ | activations | log | `(4096,)` | NumPy | 0.0075 | 0.0075 | 0.0073 | 0.0077 | 0.0001 | 0.2505 | n/a | n/a | 1.1738 | no | n/a | n/a | yes | NumPy | NumPy baseline |
224
+ | activations | log | `(4096,)` | JAX CPU dispatch | 0.0352 | 0.0353 | 0.0335 | 0.0387 | 0.0018 | 0.2505 | n/a | n/a | 1.1738 | no | n/a | n/a | yes | NumPy | reference |
225
+ | activations | relu | `(16384,)` | TensorStudio | 0.0156 | 0.0157 | 0.0156 | 0.0162 | 0.0002 | 0.5540 | n/a | n/a | 5.5171 | no | n/a | n/a | yes | NumPy | loss vs NumPy |
226
+ | activations | relu | `(16384,)` | NumPy | 0.0087 | 0.0088 | 0.0087 | 0.0091 | 0.0002 | 0.5540 | n/a | n/a | 5.5171 | no | n/a | n/a | yes | NumPy | NumPy baseline |
227
+ | activations | relu | `(16384,)` | JAX CPU dispatch | 0.0863 | 0.0847 | 0.0683 | 0.0991 | 0.0103 | 0.5540 | n/a | n/a | 5.5171 | no | n/a | n/a | yes | NumPy | reference |
228
+ | activations | sigmoid | `(16384,)` | TensorStudio | 0.1208 | 0.1214 | 0.1205 | 0.1241 | 0.0014 | 0.2716 | n/a | n/a | 1.0294 | no | n/a | n/a | yes | NumPy | loss vs NumPy |
229
+ | activations | sigmoid | `(16384,)` | NumPy | 0.0328 | 0.0334 | 0.0327 | 0.0353 | 0.0010 | 0.2716 | n/a | n/a | 1.0294 | no | n/a | n/a | yes | NumPy | NumPy baseline |
230
+ | activations | sigmoid | `(16384,)` | JAX CPU dispatch | 0.1244 | 0.1243 | 0.1011 | 0.1538 | 0.0173 | 0.2716 | n/a | n/a | 1.0294 | no | n/a | n/a | yes | NumPy | reference |
231
+ | activations | tanh | `(16384,)` | TensorStudio | 0.2368 | 0.2382 | 0.2354 | 0.2447 | 0.0034 | 0.1592 | n/a | n/a | 0.1664 | no | n/a | n/a | no | NumPy | loss vs NumPy |
232
+ | activations | tanh | `(16384,)` | NumPy | 0.0377 | 0.0380 | 0.0374 | 0.0389 | 0.0006 | 0.1592 | n/a | n/a | 0.1664 | no | n/a | n/a | no | NumPy | NumPy baseline |
233
+ | activations | tanh | `(16384,)` | JAX CPU dispatch | 0.0394 | 0.0389 | 0.0374 | 0.0397 | 0.0009 | 0.1592 | n/a | n/a | 0.1664 | no | n/a | n/a | no | NumPy | reference |
234
+ | activations | exp | `(16384,)` | TensorStudio | 0.1052 | 0.1052 | 0.1049 | 0.1055 | 0.0002 | 0.1789 | n/a | n/a | 0.3746 | no | n/a | n/a | no | NumPy | loss vs NumPy |
235
+ | activations | exp | `(16384,)` | NumPy | 0.0188 | 0.0188 | 0.0186 | 0.0192 | 0.0002 | 0.1789 | n/a | n/a | 0.3746 | no | n/a | n/a | no | NumPy | NumPy baseline |
236
+ | activations | exp | `(16384,)` | JAX CPU dispatch | 0.0394 | 0.0397 | 0.0392 | 0.0409 | 0.0006 | 0.1789 | n/a | n/a | 0.3746 | no | n/a | n/a | no | NumPy | reference |
237
+ | activations | log | `(16384,)` | TensorStudio | 0.1134 | 0.1130 | 0.1105 | 0.1152 | 0.0019 | 0.2144 | n/a | n/a | 0.3702 | no | n/a | n/a | no | NumPy | loss vs NumPy |
238
+ | activations | log | `(16384,)` | NumPy | 0.0243 | 0.0246 | 0.0243 | 0.0259 | 0.0006 | 0.2144 | n/a | n/a | 0.3702 | no | n/a | n/a | no | NumPy | NumPy baseline |
239
+ | activations | log | `(16384,)` | JAX CPU dispatch | 0.0420 | 0.0425 | 0.0415 | 0.0445 | 0.0012 | 0.2144 | n/a | n/a | 0.3702 | no | n/a | n/a | no | NumPy | reference |
240
+ | reductions | sum | `(1,)` | TensorStudio | 0.0022 | 0.0022 | 0.0022 | 0.0024 | 0.0001 | 0.9709 | n/a | n/a | 5.3188 | no | n/a | n/a | yes | NumPy | loss vs NumPy |
241
+ | reductions | sum | `(1,)` | NumPy | 0.0022 | 0.0022 | 0.0021 | 0.0024 | 0.0001 | 0.9709 | n/a | n/a | 5.3188 | no | n/a | n/a | yes | NumPy | NumPy baseline |
242
+ | reductions | sum | `(1,)` | JAX CPU dispatch | 0.0118 | 0.0118 | 0.0115 | 0.0121 | 0.0002 | 0.9709 | n/a | n/a | 5.3188 | no | n/a | n/a | yes | NumPy | reference |
243
+ | reductions | mean | `(1,)` | TensorStudio | 0.0022 | 0.0022 | 0.0021 | 0.0022 | 0.0000 | 3.5155 | n/a | n/a | 4.8989 | yes | n/a | n/a | yes | TensorStudio | win vs NumPy |
244
+ | reductions | mean | `(1,)` | NumPy | 0.0077 | 0.0078 | 0.0077 | 0.0079 | 0.0001 | 3.5155 | n/a | n/a | 4.8989 | yes | n/a | n/a | yes | TensorStudio | NumPy baseline |
245
+ | reductions | mean | `(1,)` | JAX CPU dispatch | 0.0108 | 0.0111 | 0.0106 | 0.0121 | 0.0005 | 3.5155 | n/a | n/a | 4.8989 | yes | n/a | n/a | yes | TensorStudio | reference |
246
+ | reductions | sum | `(8,)` | TensorStudio | 0.0023 | 0.0023 | 0.0022 | 0.0023 | 0.0000 | 0.9601 | n/a | n/a | 5.4383 | no | n/a | n/a | yes | NumPy | loss vs NumPy |
247
+ | reductions | sum | `(8,)` | NumPy | 0.0022 | 0.0022 | 0.0022 | 0.0023 | 0.0000 | 0.9601 | n/a | n/a | 5.4383 | no | n/a | n/a | yes | NumPy | NumPy baseline |
248
+ | reductions | sum | `(8,)` | JAX CPU dispatch | 0.0125 | 0.0125 | 0.0119 | 0.0132 | 0.0004 | 0.9601 | n/a | n/a | 5.4383 | no | n/a | n/a | yes | NumPy | reference |
249
+ | reductions | mean | `(8,)` | TensorStudio | 0.0023 | 0.0023 | 0.0022 | 0.0023 | 0.0001 | 3.4584 | n/a | n/a | 5.0478 | yes | n/a | n/a | yes | TensorStudio | win vs NumPy |
250
+ | reductions | mean | `(8,)` | NumPy | 0.0078 | 0.0078 | 0.0075 | 0.0081 | 0.0002 | 3.4584 | n/a | n/a | 5.0478 | yes | n/a | n/a | yes | TensorStudio | NumPy baseline |
251
+ | reductions | mean | `(8,)` | JAX CPU dispatch | 0.0114 | 0.0118 | 0.0111 | 0.0140 | 0.0011 | 3.4584 | n/a | n/a | 5.0478 | yes | n/a | n/a | yes | TensorStudio | reference |
252
+ | reductions | sum | `(32,)` | TensorStudio | 0.0024 | 0.0024 | 0.0023 | 0.0024 | 0.0000 | 0.9453 | n/a | n/a | 5.0853 | no | n/a | n/a | yes | NumPy | loss vs NumPy |
253
+ | reductions | sum | `(32,)` | NumPy | 0.0022 | 0.0023 | 0.0021 | 0.0025 | 0.0001 | 0.9453 | n/a | n/a | 5.0853 | no | n/a | n/a | yes | NumPy | NumPy baseline |
254
+ | reductions | sum | `(32,)` | JAX CPU dispatch | 0.0121 | 0.0121 | 0.0118 | 0.0123 | 0.0002 | 0.9453 | n/a | n/a | 5.0853 | no | n/a | n/a | yes | NumPy | reference |
255
+ | reductions | mean | `(32,)` | TensorStudio | 0.0024 | 0.0024 | 0.0023 | 0.0024 | 0.0000 | 3.2742 | n/a | n/a | 5.6939 | yes | n/a | n/a | yes | TensorStudio | win vs NumPy |
256
+ | reductions | mean | `(32,)` | NumPy | 0.0077 | 0.0078 | 0.0077 | 0.0080 | 0.0001 | 3.2742 | n/a | n/a | 5.6939 | yes | n/a | n/a | yes | TensorStudio | NumPy baseline |
257
+ | reductions | mean | `(32,)` | JAX CPU dispatch | 0.0135 | 0.0164 | 0.0113 | 0.0289 | 0.0065 | 3.2742 | n/a | n/a | 5.6939 | yes | n/a | n/a | yes | TensorStudio | reference |
258
+ | reductions | sum | `(128,)` | TensorStudio | 0.0029 | 0.0036 | 0.0029 | 0.0059 | 0.0011 | 0.7399 | n/a | n/a | 4.6559 | no | n/a | n/a | yes | NumPy | loss vs NumPy |
259
+ | reductions | sum | `(128,)` | NumPy | 0.0022 | 0.0022 | 0.0021 | 0.0022 | 0.0000 | 0.7399 | n/a | n/a | 4.6559 | no | n/a | n/a | yes | NumPy | NumPy baseline |
260
+ | reductions | sum | `(128,)` | JAX CPU dispatch | 0.0136 | 0.0135 | 0.0132 | 0.0137 | 0.0002 | 0.7399 | n/a | n/a | 4.6559 | no | n/a | n/a | yes | NumPy | reference |
261
+ | reductions | mean | `(128,)` | TensorStudio | 0.0030 | 0.0030 | 0.0029 | 0.0031 | 0.0001 | 2.6167 | n/a | n/a | 4.2260 | yes | n/a | n/a | yes | TensorStudio | win vs NumPy |
262
+ | reductions | mean | `(128,)` | NumPy | 0.0078 | 0.0078 | 0.0077 | 0.0078 | 0.0001 | 2.6167 | n/a | n/a | 4.2260 | yes | n/a | n/a | yes | TensorStudio | NumPy baseline |
263
+ | reductions | mean | `(128,)` | JAX CPU dispatch | 0.0126 | 0.0129 | 0.0124 | 0.0141 | 0.0006 | 2.6167 | n/a | n/a | 4.2260 | yes | n/a | n/a | yes | TensorStudio | reference |
264
+ | reductions | sum | `(1024,)` | TensorStudio | 0.0082 | 0.0083 | 0.0081 | 0.0084 | 0.0001 | 0.3090 | n/a | n/a | 1.7267 | no | n/a | n/a | yes | NumPy | loss vs NumPy |
265
+ | reductions | sum | `(1024,)` | NumPy | 0.0025 | 0.0026 | 0.0025 | 0.0026 | 0.0000 | 0.3090 | n/a | n/a | 1.7267 | no | n/a | n/a | yes | NumPy | NumPy baseline |
266
+ | reductions | sum | `(1024,)` | JAX CPU dispatch | 0.0142 | 0.0150 | 0.0135 | 0.0178 | 0.0016 | 0.3090 | n/a | n/a | 1.7267 | no | n/a | n/a | yes | NumPy | reference |
267
+ | reductions | mean | `(1024,)` | TensorStudio | 0.0082 | 0.0085 | 0.0081 | 0.0092 | 0.0004 | 1.0007 | n/a | n/a | 1.8594 | yes | n/a | n/a | yes | TensorStudio | win vs NumPy |
268
+ | reductions | mean | `(1024,)` | NumPy | 0.0082 | 0.0083 | 0.0081 | 0.0086 | 0.0002 | 1.0007 | n/a | n/a | 1.8594 | yes | n/a | n/a | yes | TensorStudio | NumPy baseline |
269
+ | reductions | mean | `(1024,)` | JAX CPU dispatch | 0.0153 | 0.0154 | 0.0126 | 0.0189 | 0.0022 | 1.0007 | n/a | n/a | 1.8594 | yes | n/a | n/a | yes | TensorStudio | reference |
270
+ | reductions | sum | `(4096,)` | TensorStudio | 0.0269 | 0.0271 | 0.0266 | 0.0276 | 0.0004 | 0.1248 | n/a | n/a | 0.5840 | no | n/a | n/a | no | NumPy | loss vs NumPy |
271
+ | reductions | sum | `(4096,)` | NumPy | 0.0034 | 0.0034 | 0.0033 | 0.0036 | 0.0001 | 0.1248 | n/a | n/a | 0.5840 | no | n/a | n/a | no | NumPy | NumPy baseline |
272
+ | reductions | sum | `(4096,)` | JAX CPU dispatch | 0.0157 | 0.0166 | 0.0151 | 0.0212 | 0.0023 | 0.1248 | n/a | n/a | 0.5840 | no | n/a | n/a | no | NumPy | reference |
273
+ | reductions | mean | `(4096,)` | TensorStudio | 0.0303 | 0.0300 | 0.0263 | 0.0334 | 0.0031 | 0.3103 | n/a | n/a | 0.5122 | no | n/a | n/a | no | NumPy | loss vs NumPy |
274
+ | reductions | mean | `(4096,)` | NumPy | 0.0094 | 0.0100 | 0.0093 | 0.0119 | 0.0010 | 0.3103 | n/a | n/a | 0.5122 | no | n/a | n/a | no | NumPy | NumPy baseline |
275
+ | reductions | mean | `(4096,)` | JAX CPU dispatch | 0.0155 | 0.0158 | 0.0149 | 0.0172 | 0.0009 | 0.3103 | n/a | n/a | 0.5122 | no | n/a | n/a | no | NumPy | reference |
276
+ | reductions | sum | `(16384,)` | TensorStudio | 0.1001 | 0.1018 | 0.1000 | 0.1084 | 0.0033 | 0.0664 | n/a | n/a | 0.3348 | no | n/a | n/a | no | NumPy | loss vs NumPy |
277
+ | reductions | sum | `(16384,)` | NumPy | 0.0066 | 0.0067 | 0.0066 | 0.0068 | 0.0001 | 0.0664 | n/a | n/a | 0.3348 | no | n/a | n/a | no | NumPy | NumPy baseline |
278
+ | reductions | sum | `(16384,)` | JAX CPU dispatch | 0.0335 | 0.0311 | 0.0211 | 0.0358 | 0.0054 | 0.0664 | n/a | n/a | 0.3348 | no | n/a | n/a | no | NumPy | reference |
279
+ | reductions | mean | `(16384,)` | TensorStudio | 0.1008 | 0.1010 | 0.0996 | 0.1033 | 0.0013 | 0.1348 | n/a | n/a | 0.3345 | no | n/a | n/a | no | NumPy | loss vs NumPy |
280
+ | reductions | mean | `(16384,)` | NumPy | 0.0136 | 0.0138 | 0.0130 | 0.0150 | 0.0007 | 0.1348 | n/a | n/a | 0.3345 | no | n/a | n/a | no | NumPy | NumPy baseline |
281
+ | reductions | mean | `(16384,)` | JAX CPU dispatch | 0.0337 | 0.0299 | 0.0182 | 0.0363 | 0.0069 | 0.1348 | n/a | n/a | 0.3345 | no | n/a | n/a | no | NumPy | reference |
282
+ | reductions | sum_axis1 | `(16, 16)` | TensorStudio | 0.0027 | 0.0027 | 0.0026 | 0.0028 | 0.0001 | 1.0183 | n/a | n/a | 5.0925 | yes | n/a | n/a | yes | TensorStudio | win vs NumPy |
283
+ | reductions | sum_axis1 | `(16, 16)` | NumPy | 0.0027 | 0.0028 | 0.0026 | 0.0032 | 0.0002 | 1.0183 | n/a | n/a | 5.0925 | yes | n/a | n/a | yes | TensorStudio | NumPy baseline |
284
+ | reductions | sum_axis1 | `(16, 16)` | JAX CPU dispatch | 0.0135 | 0.0135 | 0.0124 | 0.0151 | 0.0010 | 1.0183 | n/a | n/a | 5.0925 | yes | n/a | n/a | yes | TensorStudio | reference |
285
+ | reductions | mean_axis0 | `(16, 16)` | TensorStudio | 0.0027 | 0.0028 | 0.0026 | 0.0033 | 0.0003 | 3.8536 | n/a | n/a | 4.4498 | yes | n/a | n/a | yes | TensorStudio | win vs NumPy |
286
+ | reductions | mean_axis0 | `(16, 16)` | NumPy | 0.0102 | 0.0106 | 0.0097 | 0.0124 | 0.0009 | 3.8536 | n/a | n/a | 4.4498 | yes | n/a | n/a | yes | TensorStudio | NumPy baseline |
287
+ | reductions | mean_axis0 | `(16, 16)` | JAX CPU dispatch | 0.0118 | 0.0120 | 0.0114 | 0.0131 | 0.0006 | 3.8536 | n/a | n/a | 4.4498 | yes | n/a | n/a | yes | TensorStudio | reference |
288
+ | reductions | sum_axis1 | `(64, 64)` | TensorStudio | 0.0056 | 0.0058 | 0.0054 | 0.0068 | 0.0005 | 0.7290 | n/a | n/a | 4.8945 | no | n/a | n/a | yes | NumPy | loss vs NumPy |
289
+ | reductions | sum_axis1 | `(64, 64)` | NumPy | 0.0041 | 0.0042 | 0.0040 | 0.0046 | 0.0002 | 0.7290 | n/a | n/a | 4.8945 | no | n/a | n/a | yes | NumPy | NumPy baseline |
290
+ | reductions | sum_axis1 | `(64, 64)` | JAX CPU dispatch | 0.0274 | 0.0240 | 0.0146 | 0.0325 | 0.0076 | 0.7290 | n/a | n/a | 4.8945 | no | n/a | n/a | yes | NumPy | reference |
291
+ | reductions | mean_axis0 | `(64, 64)` | TensorStudio | 0.0044 | 0.0045 | 0.0039 | 0.0057 | 0.0006 | 2.7570 | n/a | n/a | 2.9597 | yes | n/a | n/a | yes | TensorStudio | win vs NumPy |
292
+ | reductions | mean_axis0 | `(64, 64)` | NumPy | 0.0120 | 0.0132 | 0.0115 | 0.0185 | 0.0027 | 2.7570 | n/a | n/a | 2.9597 | yes | n/a | n/a | yes | TensorStudio | NumPy baseline |
293
+ | reductions | mean_axis0 | `(64, 64)` | JAX CPU dispatch | 0.0129 | 0.0132 | 0.0127 | 0.0140 | 0.0005 | 2.7570 | n/a | n/a | 2.9597 | yes | n/a | n/a | yes | TensorStudio | reference |
294
+ | reductions | sum_axis1 | `(128, 128)` | TensorStudio | 0.0163 | 0.0173 | 0.0160 | 0.0213 | 0.0020 | 0.4686 | n/a | n/a | 1.7575 | no | n/a | n/a | yes | NumPy | loss vs NumPy |
295
+ | reductions | sum_axis1 | `(128, 128)` | NumPy | 0.0077 | 0.0084 | 0.0076 | 0.0116 | 0.0016 | 0.4686 | n/a | n/a | 1.7575 | no | n/a | n/a | yes | NumPy | NumPy baseline |
296
+ | reductions | sum_axis1 | `(128, 128)` | JAX CPU dispatch | 0.0287 | 0.0277 | 0.0187 | 0.0353 | 0.0054 | 0.4686 | n/a | n/a | 1.7575 | no | n/a | n/a | yes | NumPy | reference |
297
+ | reductions | mean_axis0 | `(128, 128)` | TensorStudio | 0.0068 | 0.0068 | 0.0068 | 0.0069 | 0.0000 | 2.1600 | n/a | n/a | 2.4238 | yes | n/a | n/a | yes | TensorStudio | win vs NumPy |
298
+ | reductions | mean_axis0 | `(128, 128)` | NumPy | 0.0147 | 0.0153 | 0.0143 | 0.0178 | 0.0013 | 2.1600 | n/a | n/a | 2.4238 | yes | n/a | n/a | yes | TensorStudio | NumPy baseline |
299
+ | reductions | mean_axis0 | `(128, 128)` | JAX CPU dispatch | 0.0165 | 0.0171 | 0.0126 | 0.0219 | 0.0041 | 2.1600 | n/a | n/a | 2.4238 | yes | n/a | n/a | yes | TensorStudio | reference |
300
+ | reductions | sum_axis1 | `(256, 256)` | TensorStudio | 0.0646 | 0.0646 | 0.0641 | 0.0652 | 0.0004 | 0.3328 | n/a | n/a | 1.1015 | no | n/a | n/a | yes | NumPy | loss vs NumPy |
301
+ | reductions | sum_axis1 | `(256, 256)` | NumPy | 0.0215 | 0.0222 | 0.0212 | 0.0251 | 0.0015 | 0.3328 | n/a | n/a | 1.1015 | no | n/a | n/a | yes | NumPy | NumPy baseline |
302
+ | reductions | sum_axis1 | `(256, 256)` | JAX CPU dispatch | 0.0711 | 0.0704 | 0.0586 | 0.0782 | 0.0074 | 0.3328 | n/a | n/a | 1.1015 | no | n/a | n/a | yes | NumPy | reference |
303
+ | reductions | mean_axis0 | `(256, 256)` | TensorStudio | 0.0183 | 0.0188 | 0.0183 | 0.0205 | 0.0009 | 1.1799 | n/a | n/a | 1.3230 | yes | n/a | n/a | yes | TensorStudio | win vs NumPy |
304
+ | reductions | mean_axis0 | `(256, 256)` | NumPy | 0.0216 | 0.0224 | 0.0211 | 0.0260 | 0.0018 | 1.1799 | n/a | n/a | 1.3230 | yes | n/a | n/a | yes | TensorStudio | NumPy baseline |
305
+ | reductions | mean_axis0 | `(256, 256)` | JAX CPU dispatch | 0.0243 | 0.0263 | 0.0239 | 0.0328 | 0.0034 | 1.1799 | n/a | n/a | 1.3230 | yes | n/a | n/a | yes | TensorStudio | reference |
306
+ | matmul | matmul | `(16, 16)` | TensorStudio | 0.0056 | 0.0054 | 0.0037 | 0.0069 | 0.0012 | 0.4206 | n/a | n/a | 3.6137 | no | n/a | n/a | yes | NumPy | loss vs NumPy |
307
+ | matmul | matmul | `(16, 16)` | NumPy | 0.0024 | 0.0025 | 0.0021 | 0.0030 | 0.0003 | 0.4206 | n/a | n/a | 3.6137 | no | n/a | n/a | yes | NumPy | NumPy baseline |
308
+ | matmul | matmul | `(16, 16)` | JAX CPU dispatch | 0.0203 | 0.0257 | 0.0163 | 0.0405 | 0.0096 | 0.4206 | n/a | n/a | 3.6137 | no | n/a | n/a | yes | NumPy | reference |
309
+ | matmul | matmul | `(64, 64)` | TensorStudio | 0.0632 | 0.0630 | 0.0618 | 0.0636 | 0.0007 | 0.2410 | n/a | n/a | 0.2547 | no | n/a | n/a | no | NumPy | loss vs NumPy |
310
+ | matmul | matmul | `(64, 64)` | NumPy | 0.0152 | 0.0167 | 0.0112 | 0.0268 | 0.0058 | 0.2410 | n/a | n/a | 0.2547 | no | n/a | n/a | no | NumPy | NumPy baseline |
311
+ | matmul | matmul | `(64, 64)` | JAX CPU dispatch | 0.0161 | 0.0246 | 0.0159 | 0.0583 | 0.0169 | 0.2410 | n/a | n/a | 0.2547 | no | n/a | n/a | no | NumPy | reference |
312
+ | matmul | matmul | `(128, 128)` | TensorStudio | 0.2656 | 0.2723 | 0.2550 | 0.3089 | 0.0200 | 1.4666 | n/a | n/a | 0.5691 | yes | n/a | n/a | no | JAX CPU dispatch | win vs NumPy |
313
+ | matmul | matmul | `(128, 128)` | NumPy | 0.3895 | 0.3565 | 0.2553 | 0.4328 | 0.0735 | 1.4666 | n/a | n/a | 0.5691 | yes | n/a | n/a | no | JAX CPU dispatch | NumPy baseline |
314
+ | matmul | matmul | `(128, 128)` | JAX CPU dispatch | 0.1512 | 0.1511 | 0.1250 | 0.1843 | 0.0236 | 1.4666 | n/a | n/a | 0.5691 | yes | n/a | n/a | no | JAX CPU dispatch | reference |
315
+ | matmul | matmul | `(256, 256)` | TensorStudio | 2.7138 | 2.7048 | 2.2742 | 2.9971 | 0.2427 | 0.1909 | n/a | n/a | 0.1210 | no | n/a | n/a | no | JAX CPU dispatch | loss vs NumPy |
316
+ | matmul | matmul | `(256, 256)` | NumPy | 0.5182 | 0.5053 | 0.4288 | 0.5589 | 0.0508 | 0.1909 | n/a | n/a | 0.1210 | no | n/a | n/a | no | JAX CPU dispatch | NumPy baseline |
317
+ | matmul | matmul | `(256, 256)` | JAX CPU dispatch | 0.3283 | 0.3232 | 0.2753 | 0.3924 | 0.0417 | 0.1909 | n/a | n/a | 0.1210 | no | n/a | n/a | no | JAX CPU dispatch | reference |
318
+ | conv2d | conv2d_3x3_padding1 | `(1, 1, 8, 8)` | TensorStudio | 0.1505 | 0.1582 | 0.1426 | 0.1789 | 0.0140 | 8.4519 | n/a | n/a | 0.6564 | yes | n/a | n/a | no | JAX CPU dispatch | win vs NumPy |
319
+ | conv2d | conv2d_3x3_padding1 | `(1, 1, 8, 8)` | NumPy | 1.2718 | 1.2741 | 1.2369 | 1.3080 | 0.0264 | 8.4519 | n/a | n/a | 0.6564 | yes | n/a | n/a | no | JAX CPU dispatch | NumPy baseline |
320
+ | conv2d | conv2d_3x3_padding1 | `(1, 1, 8, 8)` | JAX CPU dispatch | 0.0988 | 0.1030 | 0.0935 | 0.1232 | 0.0106 | 8.4519 | n/a | n/a | 0.6564 | yes | n/a | n/a | no | JAX CPU dispatch | reference |
321
+ | conv2d | conv2d_3x3_padding1 | `(4, 3, 16, 16)` | TensorStudio | 7.1059 | 7.0926 | 7.0340 | 7.1305 | 0.0354 | 8.7270 | n/a | n/a | 0.0469 | yes | n/a | n/a | no | JAX CPU dispatch | win vs NumPy |
322
+ | conv2d | conv2d_3x3_padding1 | `(4, 3, 16, 16)` | NumPy | 62.0132 | 61.8515 | 61.3995 | 62.0491 | 0.2460 | 8.7270 | n/a | n/a | 0.0469 | yes | n/a | n/a | no | JAX CPU dispatch | NumPy baseline |
323
+ | conv2d | conv2d_3x3_padding1 | `(4, 3, 16, 16)` | JAX CPU dispatch | 0.3335 | 0.3489 | 0.3249 | 0.3945 | 0.0273 | 8.7270 | n/a | n/a | 0.0469 | yes | n/a | n/a | no | JAX CPU dispatch | reference |
324
+ | pooling | max_pool2d_2x2 | `(1, 1, 16, 16)` | TensorStudio | 0.0135 | 0.0138 | 0.0135 | 0.0145 | 0.0004 | 11.3282 | 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.1532 | 0.1531 | 0.1517 | 0.1545 | 0.0010 | 11.3282 | 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.0134 | 0.0138 | 0.0133 | 0.0154 | 0.0008 | 41.0677 | 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.5499 | 0.5502 | 0.5456 | 0.5561 | 0.0035 | 41.0677 | 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.5329 | 0.5457 | 0.5308 | 0.5920 | 0.0235 | 14.0147 | 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 | 7.4683 | 7.4573 | 7.3658 | 7.5043 | 0.0487 | 14.0147 | 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.5554 | 0.5527 | 0.5249 | 0.5898 | 0.0229 | 49.2709 | 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 | 27.3663 | 27.4102 | 26.6733 | 28.2549 | 0.5050 | 49.2709 | n/a | n/a | n/a | yes | n/a | n/a | n/a | TensorStudio | NumPy baseline |
332
+ | autograd | scalar_backward | `(1,)` | TensorStudio | 0.0148 | 0.0153 | 0.0143 | 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.0316 | 0.0312 | 0.0302 | 0.0320 | 0.0007 | 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.1457 | 0.1451 | 0.1439 | 0.1458 | 0.0008 | 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.3343 | 0.3342 | 0.3317 | 0.3373 | 0.0020 | 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.1318 | 1.1721 | 1.0634 | 1.2921 | 0.0984 | 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.4474 | 2.4465 | 2.4368 | 2.4596 | 0.0080 | 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.6089 | 1.6070 | 1.5921 | 1.6237 | 0.0121 | 0.0974 | 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.1567 | 0.1651 | 0.1548 | 0.1902 | 0.0135 | 0.0974 | 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.4.0` supports gradients for:
43
+ `1.5.1` supports gradients for:
44
44
 
45
45
  - `add`
46
46
  - `sub`
@@ -71,6 +71,9 @@ Calling `backward()`:
71
71
  - `reshape`
72
72
  - `flatten`
73
73
  - `transpose`
74
+ - `permute`
75
+ - `squeeze`
76
+ - `unsqueeze`
74
77
  - basic integer and slice indexing views
75
78
 
76
79
  ## Broadcasting Gradients
@@ -147,7 +147,11 @@ Views:
147
147
 
148
148
  - `reshape(*shape)` or `reshape(shape)`
149
149
  - `flatten()`
150
- - `transpose()`
150
+ - `transpose()` to reverse axes
151
+ - `transpose(axis0, axis1)` to swap two axes
152
+ - `permute(*axes)` or `permute(axes)`
153
+ - `squeeze(axis=None)`
154
+ - `unsqueeze(axis)`
151
155
  - `__getitem__(key)` through `x[key]`
152
156
 
153
157
  Indexing keys may contain integers, slices, tuples, ellipsis, and `None` for
@@ -382,6 +386,11 @@ Import native exception aliases from `tensorstudio.errors`:
382
386
  - `DeviceError`
383
387
  - `AutogradError`
384
388
 
389
+ Shape, dtype, and indexing errors are intended to be actionable. Common
390
+ messages include tensor shapes, ranks, mismatched broadcast axes, requested
391
+ reshape element counts, unsupported dtype names, and unsupported Python index
392
+ types where that context is available from the C++/binding layer.
393
+
385
394
  ## Serialization
386
395
 
387
396
  ```python
@@ -41,12 +41,14 @@ operand shapes.
41
41
 
42
42
  ## Error Behavior
43
43
 
44
- Incompatible shapes raise `ShapeError` with the relevant shapes. TensorStudio
45
- does not silently reshape tensors.
44
+ Incompatible shapes raise `ShapeError` with the relevant shapes, the aligned
45
+ axis that failed, and the two incompatible dimensions. TensorStudio does not
46
+ silently reshape tensors.
46
47
 
47
48
  ```python
48
49
  ts.ones((2, 3)) + ts.ones((4,))
49
50
  ```
50
51
 
51
- This is invalid because trailing dimensions `3` and `4` are incompatible.
52
-
52
+ This is invalid because trailing dimensions `3` and `4` are incompatible. The
53
+ error includes that axis-level mismatch so callers do not need to infer it from
54
+ the two shapes manually.
@@ -148,8 +148,12 @@ Supported views:
148
148
 
149
149
  - `reshape`
150
150
  - `flatten`
151
- - 2D `transpose`
152
- - 2D `T` property
151
+ - `transpose()` for reversed axes
152
+ - `transpose(axis0, axis1)` for axis swaps
153
+ - `permute`
154
+ - `squeeze`
155
+ - `unsqueeze`
156
+ - `T` property
153
157
  - Basic indexing and slicing with integers, slices, tuples, ellipsis, and
154
158
  `None`/newaxis
155
159
 
@@ -158,10 +162,16 @@ x = ts.arange(6).reshape((2, 3))
158
162
  print(x.flatten().tolist())
159
163
  print(x.T.shape)
160
164
  print(x[0, :].tolist())
165
+
166
+ y = ts.arange(24).reshape((2, 3, 4))
167
+ print(y.permute(2, 0, 1).shape)
168
+ print(y.transpose(0, 2).shape)
169
+ print(y.unsqueeze(0).squeeze(0).shape)
161
170
  ```
162
171
 
163
- `reshape` currently requires a contiguous tensor. `transpose` returns a strided
164
- view. Basic slicing also returns a view where possible.
172
+ `reshape` currently requires a contiguous tensor. `transpose`, `permute`,
173
+ `squeeze`, `unsqueeze`, and basic slicing return metadata views that share the
174
+ same storage where possible.
165
175
 
166
176
  Indexing supports common NumPy-style read cases:
167
177
 
@@ -1,6 +1,6 @@
1
1
  # CPU Backend
2
2
 
3
- TensorStudio `1.4.0` supports CPU tensors only.
3
+ TensorStudio `1.5.1` supports CPU tensors only.
4
4
 
5
5
  ## Device Abstraction
6
6
 
@@ -3,7 +3,7 @@
3
3
  TensorStudio is a compact C++ tensor and autograd engine with a Python API for
4
4
  learning, experimentation, and lightweight ML workloads.
5
5
 
6
- `1.4.0` is a CPU-only stable API foundation for the tensor, autograd,
6
+ `1.5.1` is a CPU-only stable API foundation for the tensor, autograd,
7
7
  neural-network, optimizer, data, project, serialization, ONNX export, vision,
8
8
  docs, packaging, and wheel workflows.
9
9
 
@@ -1,6 +1,6 @@
1
1
  # ONNX Interchange
2
2
 
3
- TensorStudio `1.4.0` includes a limited ONNX exporter for supported
3
+ TensorStudio `1.5.1` includes a limited ONNX exporter for supported
4
4
  TensorStudio module stacks.
5
5
 
6
6
  Install the optional dependency: