tensorstudio 1.9.0__tar.gz → 1.10.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 (204) hide show
  1. {tensorstudio-1.9.0 → tensorstudio-1.10.0}/CHANGELOG.md +18 -0
  2. {tensorstudio-1.9.0 → tensorstudio-1.10.0}/CMakeLists.txt +1 -1
  3. {tensorstudio-1.9.0 → tensorstudio-1.10.0}/PKG-INFO +59 -29
  4. {tensorstudio-1.9.0 → tensorstudio-1.10.0}/README.md +56 -28
  5. tensorstudio-1.10.0/benchmarks/results.md +347 -0
  6. {tensorstudio-1.9.0 → tensorstudio-1.10.0}/benchmarks/results_matmul.md +13 -13
  7. {tensorstudio-1.9.0 → tensorstudio-1.10.0}/docs/autograd/coverage.md +1 -1
  8. tensorstudio-1.10.0/docs/data/dataset-creation.md +91 -0
  9. {tensorstudio-1.9.0 → tensorstudio-1.10.0}/docs/data/datasets-and-dataloaders.md +29 -2
  10. {tensorstudio-1.9.0 → tensorstudio-1.10.0}/docs/hardware/cpu-backend.md +1 -1
  11. {tensorstudio-1.9.0 → tensorstudio-1.10.0}/docs/index.md +18 -12
  12. {tensorstudio-1.9.0 → tensorstudio-1.10.0}/docs/interchange/onnx.md +1 -1
  13. {tensorstudio-1.9.0 → tensorstudio-1.10.0}/docs/interchange/serialization.md +1 -1
  14. {tensorstudio-1.9.0 → tensorstudio-1.10.0}/docs/nn/training.md +1 -1
  15. {tensorstudio-1.9.0 → tensorstudio-1.10.0}/docs/project/checkpoints.md +23 -6
  16. tensorstudio-1.10.0/docs/project/configs-and-templates.md +76 -0
  17. tensorstudio-1.10.0/docs/project/metrics.md +62 -0
  18. tensorstudio-1.10.0/docs/project/trainer-and-callbacks.md +91 -0
  19. {tensorstudio-1.9.0 → tensorstudio-1.10.0}/docs/project/workflows.md +32 -14
  20. {tensorstudio-1.9.0 → tensorstudio-1.10.0}/docs/release/publishing.md +4 -4
  21. {tensorstudio-1.9.0 → tensorstudio-1.10.0}/docs/release/versioning.md +2 -2
  22. {tensorstudio-1.9.0 → tensorstudio-1.10.0}/docs/roadmap/milestones.md +15 -3
  23. {tensorstudio-1.9.0 → tensorstudio-1.10.0}/docs/roadmap/priorities.md +1 -0
  24. {tensorstudio-1.9.0 → tensorstudio-1.10.0}/docs/roadmap/roadmap.md +9 -9
  25. {tensorstudio-1.9.0 → tensorstudio-1.10.0}/include/tensorstudio/version.hpp +1 -1
  26. {tensorstudio-1.9.0 → tensorstudio-1.10.0}/mkdocs.yml +4 -0
  27. {tensorstudio-1.9.0 → tensorstudio-1.10.0}/pyproject.toml +6 -4
  28. {tensorstudio-1.9.0 → tensorstudio-1.10.0}/python/tensorstudio/__init__.py +2 -1
  29. {tensorstudio-1.9.0 → tensorstudio-1.10.0}/python/tensorstudio/_version.py +1 -1
  30. tensorstudio-1.10.0/python/tensorstudio/data/__init__.py +21 -0
  31. tensorstudio-1.10.0/python/tensorstudio/data/dataset.py +116 -0
  32. tensorstudio-1.10.0/python/tensorstudio/data/factories.py +34 -0
  33. tensorstudio-1.10.0/python/tensorstudio/data/splitting.py +35 -0
  34. tensorstudio-1.10.0/python/tensorstudio/metrics/__init__.py +25 -0
  35. tensorstudio-1.10.0/python/tensorstudio/metrics/classification.py +85 -0
  36. tensorstudio-1.10.0/python/tensorstudio/metrics/multilabel.py +46 -0
  37. tensorstudio-1.10.0/python/tensorstudio/metrics/regression.py +41 -0
  38. {tensorstudio-1.9.0 → tensorstudio-1.10.0}/python/tensorstudio/project/__init__.py +17 -1
  39. tensorstudio-1.10.0/python/tensorstudio/project/callbacks.py +158 -0
  40. {tensorstudio-1.9.0 → tensorstudio-1.10.0}/python/tensorstudio/project/checkpoint.py +40 -0
  41. {tensorstudio-1.9.0 → tensorstudio-1.10.0}/python/tensorstudio/project/config.py +33 -3
  42. tensorstudio-1.10.0/python/tensorstudio/project/seed.py +23 -0
  43. tensorstudio-1.10.0/python/tensorstudio/project/templates.py +79 -0
  44. {tensorstudio-1.9.0 → tensorstudio-1.10.0}/python/tensorstudio/project/trainer.py +34 -5
  45. {tensorstudio-1.9.0 → tensorstudio-1.10.0}/tests/test_import.py +1 -1
  46. tensorstudio-1.10.0/tests/test_training_workflows.py +177 -0
  47. tensorstudio-1.9.0/benchmarks/results.md +0 -347
  48. tensorstudio-1.9.0/python/tensorstudio/data/__init__.py +0 -8
  49. tensorstudio-1.9.0/python/tensorstudio/data/dataset.py +0 -36
  50. {tensorstudio-1.9.0 → tensorstudio-1.10.0}/.gitattributes +0 -0
  51. {tensorstudio-1.9.0 → tensorstudio-1.10.0}/.github/workflows/ci.yml +0 -0
  52. {tensorstudio-1.9.0 → tensorstudio-1.10.0}/.github/workflows/publish-testpypi.yml +0 -0
  53. {tensorstudio-1.9.0 → tensorstudio-1.10.0}/.github/workflows/publish.yml +0 -0
  54. {tensorstudio-1.9.0 → tensorstudio-1.10.0}/.github/workflows/wheels.yml +0 -0
  55. {tensorstudio-1.9.0 → tensorstudio-1.10.0}/.gitignore +0 -0
  56. {tensorstudio-1.9.0 → tensorstudio-1.10.0}/.pre-commit-config.yaml +0 -0
  57. {tensorstudio-1.9.0 → tensorstudio-1.10.0}/CONTRIBUTING.md +0 -0
  58. {tensorstudio-1.9.0 → tensorstudio-1.10.0}/LICENSE +0 -0
  59. {tensorstudio-1.9.0 → tensorstudio-1.10.0}/SECURITY.md +0 -0
  60. {tensorstudio-1.9.0 → tensorstudio-1.10.0}/benchmark_all.py +0 -0
  61. {tensorstudio-1.9.0 → tensorstudio-1.10.0}/benchmarks/__init__.py +0 -0
  62. {tensorstudio-1.9.0 → tensorstudio-1.10.0}/benchmarks/bench_activations.py +0 -0
  63. {tensorstudio-1.9.0 → tensorstudio-1.10.0}/benchmarks/bench_autograd.py +0 -0
  64. {tensorstudio-1.9.0 → tensorstudio-1.10.0}/benchmarks/bench_conv2d.py +0 -0
  65. {tensorstudio-1.9.0 → tensorstudio-1.10.0}/benchmarks/bench_elementwise.py +0 -0
  66. {tensorstudio-1.9.0 → tensorstudio-1.10.0}/benchmarks/bench_matmul.py +0 -0
  67. {tensorstudio-1.9.0 → tensorstudio-1.10.0}/benchmarks/bench_pooling.py +0 -0
  68. {tensorstudio-1.9.0 → tensorstudio-1.10.0}/benchmarks/bench_reductions.py +0 -0
  69. {tensorstudio-1.9.0 → tensorstudio-1.10.0}/benchmarks/bench_tensor_ops.py +0 -0
  70. {tensorstudio-1.9.0 → tensorstudio-1.10.0}/benchmarks/bench_training_loop.py +0 -0
  71. {tensorstudio-1.9.0 → tensorstudio-1.10.0}/benchmarks/benchmark_report.py +0 -0
  72. {tensorstudio-1.9.0 → tensorstudio-1.10.0}/benchmarks/results_conv2d.md +0 -0
  73. {tensorstudio-1.9.0 → tensorstudio-1.10.0}/benchmarks/results_pooling.md +0 -0
  74. {tensorstudio-1.9.0 → tensorstudio-1.10.0}/benchmarks/results_reductions.md +0 -0
  75. {tensorstudio-1.9.0 → tensorstudio-1.10.0}/benchmarks/results_tensor_ops.md +0 -0
  76. {tensorstudio-1.9.0 → tensorstudio-1.10.0}/benchmarks/thresholds.json +0 -0
  77. {tensorstudio-1.9.0 → tensorstudio-1.10.0}/docs/autograd/gradient-notes.md +0 -0
  78. {tensorstudio-1.9.0 → tensorstudio-1.10.0}/docs/autograd/overview.md +0 -0
  79. {tensorstudio-1.9.0 → tensorstudio-1.10.0}/docs/core/api-reference.md +0 -0
  80. {tensorstudio-1.9.0 → tensorstudio-1.10.0}/docs/core/broadcasting.md +0 -0
  81. {tensorstudio-1.9.0 → tensorstudio-1.10.0}/docs/core/math-and-statistics.md +0 -0
  82. {tensorstudio-1.9.0 → tensorstudio-1.10.0}/docs/core/native-cpp-core.md +0 -0
  83. {tensorstudio-1.9.0 → tensorstudio-1.10.0}/docs/core/tensors.md +0 -0
  84. {tensorstudio-1.9.0 → tensorstudio-1.10.0}/docs/data/dataloader-patterns.md +0 -0
  85. {tensorstudio-1.9.0 → tensorstudio-1.10.0}/docs/data/tensor-datasets.md +0 -0
  86. {tensorstudio-1.9.0 → tensorstudio-1.10.0}/docs/development/contributing.md +0 -0
  87. {tensorstudio-1.9.0 → tensorstudio-1.10.0}/docs/development/cpp-first.md +0 -0
  88. {tensorstudio-1.9.0 → tensorstudio-1.10.0}/docs/getting-started/installation.md +0 -0
  89. {tensorstudio-1.9.0 → tensorstudio-1.10.0}/docs/getting-started/quickstart.md +0 -0
  90. {tensorstudio-1.9.0 → tensorstudio-1.10.0}/docs/getting-started/source-build.md +0 -0
  91. {tensorstudio-1.9.0 → tensorstudio-1.10.0}/docs/hardware/linux.md +0 -0
  92. {tensorstudio-1.9.0 → tensorstudio-1.10.0}/docs/hardware/macos.md +0 -0
  93. {tensorstudio-1.9.0 → tensorstudio-1.10.0}/docs/hardware/windows.md +0 -0
  94. {tensorstudio-1.9.0 → tensorstudio-1.10.0}/docs/interchange/model-formats.md +0 -0
  95. {tensorstudio-1.9.0 → tensorstudio-1.10.0}/docs/interchange/numpy-interop.md +0 -0
  96. {tensorstudio-1.9.0 → tensorstudio-1.10.0}/docs/interchange/trusted-serialization.md +0 -0
  97. {tensorstudio-1.9.0 → tensorstudio-1.10.0}/docs/nn/initializers.md +0 -0
  98. {tensorstudio-1.9.0 → tensorstudio-1.10.0}/docs/nn/losses-and-summary.md +0 -0
  99. {tensorstudio-1.9.0 → tensorstudio-1.10.0}/docs/nn/modules.md +0 -0
  100. {tensorstudio-1.9.0 → tensorstudio-1.10.0}/docs/nn/optimizers.md +0 -0
  101. {tensorstudio-1.9.0 → tensorstudio-1.10.0}/docs/nn/overview.md +0 -0
  102. {tensorstudio-1.9.0 → tensorstudio-1.10.0}/docs/performance/benchmarks.md +0 -0
  103. {tensorstudio-1.9.0 → tensorstudio-1.10.0}/docs/performance/optimization.md +0 -0
  104. {tensorstudio-1.9.0 → tensorstudio-1.10.0}/docs/performance/profiling.md +0 -0
  105. {tensorstudio-1.9.0 → tensorstudio-1.10.0}/docs/project/project-layout.md +0 -0
  106. {tensorstudio-1.9.0 → tensorstudio-1.10.0}/docs/release/checklist.md +0 -0
  107. {tensorstudio-1.9.0 → tensorstudio-1.10.0}/docs/vision/dataset-creation.md +0 -0
  108. {tensorstudio-1.9.0 → tensorstudio-1.10.0}/docs/vision/overview.md +0 -0
  109. {tensorstudio-1.9.0 → tensorstudio-1.10.0}/examples/basic_tensor_ops.py +0 -0
  110. {tensorstudio-1.9.0 → tensorstudio-1.10.0}/examples/export_onnx.py +0 -0
  111. {tensorstudio-1.9.0 → tensorstudio-1.10.0}/examples/image_folder_classification.py +0 -0
  112. {tensorstudio-1.9.0 → tensorstudio-1.10.0}/examples/linear_regression.py +0 -0
  113. {tensorstudio-1.9.0 → tensorstudio-1.10.0}/examples/project_training.py +0 -0
  114. {tensorstudio-1.9.0 → tensorstudio-1.10.0}/examples/save_load_model.py +0 -0
  115. {tensorstudio-1.9.0 → tensorstudio-1.10.0}/examples/tiny_mlp.py +0 -0
  116. {tensorstudio-1.9.0 → tensorstudio-1.10.0}/examples/vision_classifier.py +0 -0
  117. {tensorstudio-1.9.0 → tensorstudio-1.10.0}/include/tensorstudio/autograd.hpp +0 -0
  118. {tensorstudio-1.9.0 → tensorstudio-1.10.0}/include/tensorstudio/device.hpp +0 -0
  119. {tensorstudio-1.9.0 → tensorstudio-1.10.0}/include/tensorstudio/dtype.hpp +0 -0
  120. {tensorstudio-1.9.0 → tensorstudio-1.10.0}/include/tensorstudio/errors.hpp +0 -0
  121. {tensorstudio-1.9.0 → tensorstudio-1.10.0}/include/tensorstudio/module.hpp +0 -0
  122. {tensorstudio-1.9.0 → tensorstudio-1.10.0}/include/tensorstudio/ops.hpp +0 -0
  123. {tensorstudio-1.9.0 → tensorstudio-1.10.0}/include/tensorstudio/optim.hpp +0 -0
  124. {tensorstudio-1.9.0 → tensorstudio-1.10.0}/include/tensorstudio/perf.hpp +0 -0
  125. {tensorstudio-1.9.0 → tensorstudio-1.10.0}/include/tensorstudio/random.hpp +0 -0
  126. {tensorstudio-1.9.0 → tensorstudio-1.10.0}/include/tensorstudio/serialization.hpp +0 -0
  127. {tensorstudio-1.9.0 → tensorstudio-1.10.0}/include/tensorstudio/shape.hpp +0 -0
  128. {tensorstudio-1.9.0 → tensorstudio-1.10.0}/include/tensorstudio/storage.hpp +0 -0
  129. {tensorstudio-1.9.0 → tensorstudio-1.10.0}/include/tensorstudio/tensor.hpp +0 -0
  130. {tensorstudio-1.9.0 → tensorstudio-1.10.0}/python/tensorstudio/_C.pyi +0 -0
  131. {tensorstudio-1.9.0 → tensorstudio-1.10.0}/python/tensorstudio/autograd.py +0 -0
  132. {tensorstudio-1.9.0 → tensorstudio-1.10.0}/python/tensorstudio/data/dataloader.py +0 -0
  133. {tensorstudio-1.9.0 → tensorstudio-1.10.0}/python/tensorstudio/dtypes.py +0 -0
  134. {tensorstudio-1.9.0 → tensorstudio-1.10.0}/python/tensorstudio/errors.py +0 -0
  135. {tensorstudio-1.9.0 → tensorstudio-1.10.0}/python/tensorstudio/grad_mode.py +0 -0
  136. {tensorstudio-1.9.0 → tensorstudio-1.10.0}/python/tensorstudio/interchange/__init__.py +0 -0
  137. {tensorstudio-1.9.0 → tensorstudio-1.10.0}/python/tensorstudio/interchange/onnx.py +0 -0
  138. {tensorstudio-1.9.0 → tensorstudio-1.10.0}/python/tensorstudio/math.py +0 -0
  139. {tensorstudio-1.9.0 → tensorstudio-1.10.0}/python/tensorstudio/nn/__init__.py +0 -0
  140. {tensorstudio-1.9.0 → tensorstudio-1.10.0}/python/tensorstudio/nn/functional.py +0 -0
  141. {tensorstudio-1.9.0 → tensorstudio-1.10.0}/python/tensorstudio/nn/init.py +0 -0
  142. {tensorstudio-1.9.0 → tensorstudio-1.10.0}/python/tensorstudio/nn/losses.py +0 -0
  143. {tensorstudio-1.9.0 → tensorstudio-1.10.0}/python/tensorstudio/nn/modules.py +0 -0
  144. {tensorstudio-1.9.0 → tensorstudio-1.10.0}/python/tensorstudio/nn/summary.py +0 -0
  145. {tensorstudio-1.9.0 → tensorstudio-1.10.0}/python/tensorstudio/ops.py +0 -0
  146. {tensorstudio-1.9.0 → tensorstudio-1.10.0}/python/tensorstudio/optim/__init__.py +0 -0
  147. {tensorstudio-1.9.0 → tensorstudio-1.10.0}/python/tensorstudio/optim/adam.py +0 -0
  148. {tensorstudio-1.9.0 → tensorstudio-1.10.0}/python/tensorstudio/optim/adamw.py +0 -0
  149. {tensorstudio-1.9.0 → tensorstudio-1.10.0}/python/tensorstudio/optim/lr_scheduler.py +0 -0
  150. {tensorstudio-1.9.0 → tensorstudio-1.10.0}/python/tensorstudio/optim/sgd.py +0 -0
  151. {tensorstudio-1.9.0 → tensorstudio-1.10.0}/python/tensorstudio/optim/utils.py +0 -0
  152. {tensorstudio-1.9.0 → tensorstudio-1.10.0}/python/tensorstudio/performance.py +0 -0
  153. {tensorstudio-1.9.0 → tensorstudio-1.10.0}/python/tensorstudio/py.typed +0 -0
  154. {tensorstudio-1.9.0 → tensorstudio-1.10.0}/python/tensorstudio/serialization.py +0 -0
  155. {tensorstudio-1.9.0 → tensorstudio-1.10.0}/python/tensorstudio/tensor.py +0 -0
  156. {tensorstudio-1.9.0 → tensorstudio-1.10.0}/python/tensorstudio/typing.py +0 -0
  157. {tensorstudio-1.9.0 → tensorstudio-1.10.0}/python/tensorstudio/vision/__init__.py +0 -0
  158. {tensorstudio-1.9.0 → tensorstudio-1.10.0}/python/tensorstudio/vision/datasets.py +0 -0
  159. {tensorstudio-1.9.0 → tensorstudio-1.10.0}/python/tensorstudio/vision/io.py +0 -0
  160. {tensorstudio-1.9.0 → tensorstudio-1.10.0}/python/tensorstudio/vision/metrics.py +0 -0
  161. {tensorstudio-1.9.0 → tensorstudio-1.10.0}/python/tensorstudio/vision/models.py +0 -0
  162. {tensorstudio-1.9.0 → tensorstudio-1.10.0}/python/tensorstudio/vision/transforms.py +0 -0
  163. {tensorstudio-1.9.0 → tensorstudio-1.10.0}/python/tensorstudio/vision/visualization.py +0 -0
  164. {tensorstudio-1.9.0 → tensorstudio-1.10.0}/src/bindings/bind_autograd.cpp +0 -0
  165. {tensorstudio-1.9.0 → tensorstudio-1.10.0}/src/bindings/bind_nn.cpp +0 -0
  166. {tensorstudio-1.9.0 → tensorstudio-1.10.0}/src/bindings/bind_ops.cpp +0 -0
  167. {tensorstudio-1.9.0 → tensorstudio-1.10.0}/src/bindings/bind_optim.cpp +0 -0
  168. {tensorstudio-1.9.0 → tensorstudio-1.10.0}/src/bindings/bind_tensor.cpp +0 -0
  169. {tensorstudio-1.9.0 → tensorstudio-1.10.0}/src/bindings/bindings.cpp +0 -0
  170. {tensorstudio-1.9.0 → tensorstudio-1.10.0}/src/bindings/bindings.hpp +0 -0
  171. {tensorstudio-1.9.0 → tensorstudio-1.10.0}/src/core/autograd.cpp +0 -0
  172. {tensorstudio-1.9.0 → tensorstudio-1.10.0}/src/core/device.cpp +0 -0
  173. {tensorstudio-1.9.0 → tensorstudio-1.10.0}/src/core/dtype.cpp +0 -0
  174. {tensorstudio-1.9.0 → tensorstudio-1.10.0}/src/core/errors.cpp +0 -0
  175. {tensorstudio-1.9.0 → tensorstudio-1.10.0}/src/core/module.cpp +0 -0
  176. {tensorstudio-1.9.0 → tensorstudio-1.10.0}/src/core/ops.cpp +0 -0
  177. {tensorstudio-1.9.0 → tensorstudio-1.10.0}/src/core/optim.cpp +0 -0
  178. {tensorstudio-1.9.0 → tensorstudio-1.10.0}/src/core/perf.cpp +0 -0
  179. {tensorstudio-1.9.0 → tensorstudio-1.10.0}/src/core/random.cpp +0 -0
  180. {tensorstudio-1.9.0 → tensorstudio-1.10.0}/src/core/serialization.cpp +0 -0
  181. {tensorstudio-1.9.0 → tensorstudio-1.10.0}/src/core/shape.cpp +0 -0
  182. {tensorstudio-1.9.0 → tensorstudio-1.10.0}/src/core/storage.cpp +0 -0
  183. {tensorstudio-1.9.0 → tensorstudio-1.10.0}/src/core/tensor.cpp +0 -0
  184. {tensorstudio-1.9.0 → tensorstudio-1.10.0}/test_all.py +0 -0
  185. {tensorstudio-1.9.0 → tensorstudio-1.10.0}/tests/test_autograd.py +0 -0
  186. {tensorstudio-1.9.0 → tensorstudio-1.10.0}/tests/test_autograd_hardening.py +0 -0
  187. {tensorstudio-1.9.0 → tensorstudio-1.10.0}/tests/test_benchmark_report.py +0 -0
  188. {tensorstudio-1.9.0 → tensorstudio-1.10.0}/tests/test_broadcasting.py +0 -0
  189. {tensorstudio-1.9.0 → tensorstudio-1.10.0}/tests/test_core_math_expansion.py +0 -0
  190. {tensorstudio-1.9.0 → tensorstudio-1.10.0}/tests/test_data.py +0 -0
  191. {tensorstudio-1.9.0 → tensorstudio-1.10.0}/tests/test_errors.py +0 -0
  192. {tensorstudio-1.9.0 → tensorstudio-1.10.0}/tests/test_indexing.py +0 -0
  193. {tensorstudio-1.9.0 → tensorstudio-1.10.0}/tests/test_interchange.py +0 -0
  194. {tensorstudio-1.9.0 → tensorstudio-1.10.0}/tests/test_nn.py +0 -0
  195. {tensorstudio-1.9.0 → tensorstudio-1.10.0}/tests/test_nn_building_blocks.py +0 -0
  196. {tensorstudio-1.9.0 → tensorstudio-1.10.0}/tests/test_numpy_interop.py +0 -0
  197. {tensorstudio-1.9.0 → tensorstudio-1.10.0}/tests/test_ops.py +0 -0
  198. {tensorstudio-1.9.0 → tensorstudio-1.10.0}/tests/test_optim.py +0 -0
  199. {tensorstudio-1.9.0 → tensorstudio-1.10.0}/tests/test_performance.py +0 -0
  200. {tensorstudio-1.9.0 → tensorstudio-1.10.0}/tests/test_project.py +0 -0
  201. {tensorstudio-1.9.0 → tensorstudio-1.10.0}/tests/test_serialization.py +0 -0
  202. {tensorstudio-1.9.0 → tensorstudio-1.10.0}/tests/test_tensor.py +0 -0
  203. {tensorstudio-1.9.0 → tensorstudio-1.10.0}/tests/test_views.py +0 -0
  204. {tensorstudio-1.9.0 → tensorstudio-1.10.0}/tests/test_vision.py +0 -0
@@ -2,6 +2,24 @@
2
2
 
3
3
  ## Unreleased
4
4
 
5
+ ## 1.10.0 - 2026-07-07
6
+
7
+ - Completed the ordered Training And Project Workflows roadmap section as one
8
+ release batch.
9
+ - Added `ArrayDataset`, tensor/array/image-folder dataset factories,
10
+ deterministic train/validation splitting, and dataset metadata summaries.
11
+ - Added `tensorstudio.metrics` with regression, classification, and multilabel
12
+ metrics for small supervised workflows.
13
+ - Added trainer validation loops, scheduler stepping, callback context support,
14
+ learning-rate logging, CSV logging, checkpoint callbacks, and early stopping.
15
+ - Added JSON, TOML, and YAML project config loading plus deterministic seeding
16
+ across TensorStudio, NumPy, and Python random.
17
+ - Expanded full checkpoints with scheduler and epoch state and added
18
+ `resume_checkpoint()` for continuing training runs.
19
+ - Added generated regression, classification, and vision project templates.
20
+ - Expanded tests and docs for project workflows, metrics, dataset creation,
21
+ callbacks, configs, templates, and checkpoint resume.
22
+
5
23
  ## 1.9.0 - 2026-07-07
6
24
 
7
25
  - Completed the ordered Neural Network Building Blocks roadmap section as one
@@ -1,6 +1,6 @@
1
1
  cmake_minimum_required(VERSION 3.18)
2
2
 
3
- project(tensorstudio VERSION 1.9.0 LANGUAGES CXX)
3
+ project(tensorstudio VERSION 1.10.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.9.0
3
+ Version: 1.10.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
@@ -42,6 +42,8 @@ Project-URL: Repository, https://github.com/imattas/TensorStudio
42
42
  Project-URL: Issues, https://github.com/imattas/TensorStudio/issues
43
43
  Requires-Python: >=3.10
44
44
  Requires-Dist: numpy>=1.24
45
+ Requires-Dist: PyYAML>=6
46
+ Requires-Dist: tomli>=2.0; python_version < "3.11"
45
47
  Provides-Extra: dev
46
48
  Requires-Dist: pytest>=8; extra == "dev"
47
49
  Requires-Dist: pytest-cov>=5; extra == "dev"
@@ -71,15 +73,18 @@ Description-Content-Type: text/markdown
71
73
  TensorStudio is a compact C++ tensor and autograd engine with a Python API for
72
74
  learning, experimentation, and lightweight ML workloads.
73
75
 
74
- TensorStudio `1.9.0` is a CPU-only stable API foundation with native C++
76
+ TensorStudio `1.10.0` is a CPU-only stable API foundation with native C++
75
77
  threading, storage reuse, SIMD-friendly typed kernels, and optional
76
78
  CBLAS/Accelerate matrix multiplication when available. It adds native stable
77
79
  softmax/logsumexp, batched matrix multiplication, statistical reductions,
78
80
  boolean reductions, seeded random distributions, and a hardened eager autograd
79
81
  lifecycle. The neural-network layer now includes grouped/depthwise/1D/
80
82
  transposed convolution, normalization layers, embeddings, richer activations,
81
- initializers, additional losses, and model summaries. It is eager-only,
82
- intentionally compact, and not a replacement for mature ML frameworks.
83
+ initializers, additional losses, and model summaries. The project layer adds
84
+ dataset factories, deterministic train/validation splitting, metrics, callbacks,
85
+ multi-format configs, checkpoint resume helpers, and starter project templates.
86
+ It is eager-only, intentionally compact, and not a replacement for mature ML
87
+ frameworks.
83
88
 
84
89
  ## Install
85
90
 
@@ -289,7 +294,7 @@ print(model.state_dict().keys())
289
294
  print(model.parameter_count())
290
295
  ```
291
296
 
292
- The `1.9.0` neural-network surface also includes initialization helpers,
297
+ The neural-network surface also includes initialization helpers,
293
298
  normalization layers, embeddings, grouped/depthwise/1D/transposed convolution,
294
299
  adaptive/global pooling, richer activations, and model summaries:
295
300
 
@@ -340,17 +345,22 @@ optimizer.step()
340
345
  print(ts.vision.accuracy(model(x), target))
341
346
  ```
342
347
 
343
- ## DataLoader
348
+ ## Data And Metrics
344
349
 
345
350
  ```python
346
351
  import tensorstudio as ts
347
- from tensorstudio.data import DataLoader, TensorDataset
352
+ from tensorstudio.data import DataLoader, from_arrays, train_val_split
348
353
 
349
- dataset = TensorDataset(ts.arange(6).reshape((6, 1)), ts.arange(6))
350
- loader = DataLoader(dataset, batch_size=2, shuffle=True, seed=42)
354
+ dataset = from_arrays([[0.0], [1.0], [2.0], [3.0]], [[1.0], [3.0], [5.0], [7.0]])
355
+ train_data, val_data = train_val_split(dataset, val_fraction=0.25, seed=42)
356
+ loader = DataLoader(train_data, batch_size=2, shuffle=True, seed=42)
351
357
 
352
358
  for features, targets in loader:
353
359
  print(features.shape, targets.shape)
360
+
361
+ prediction = ts.tensor([[0.2, 0.8], [0.7, 0.3]])
362
+ target = ts.tensor([1, 0], dtype="int64")
363
+ print(ts.metrics.accuracy(prediction, target))
354
364
  ```
355
365
 
356
366
  The v1 DataLoader is intentionally single-process so it works cleanly on
@@ -358,24 +368,44 @@ Windows without multiprocessing setup.
358
368
 
359
369
  ## Projects And Training
360
370
 
361
- `tensorstudio.project` provides project folders, JSON config, reusable trainers,
362
- safe NPZ weight files, and trusted full checkpoints:
371
+ `tensorstudio.project` provides project folders, JSON/TOML/YAML config loading,
372
+ deterministic seeding, reusable trainers, validation loops, callbacks, safe NPZ
373
+ weight files, trusted full checkpoints, and generated starter templates:
363
374
 
364
375
  ```python
365
376
  import tensorstudio as ts
366
377
  from tensorstudio import nn, optim
367
- from tensorstudio.data import DataLoader, TensorDataset
368
- from tensorstudio.project import Project, ProjectConfig, Trainer, save_state_dict
378
+ from tensorstudio.data import DataLoader, from_arrays, train_val_split
379
+ from tensorstudio.project import (
380
+ CSVLogger,
381
+ CheckpointCallback,
382
+ LrLogger,
383
+ Project,
384
+ ProjectConfig,
385
+ Trainer,
386
+ save_state_dict,
387
+ seed_everything,
388
+ )
369
389
 
370
- x = ts.tensor([[0.0], [1.0], [2.0], [3.0]])
371
- y = ts.tensor([[1.0], [3.0], [5.0], [7.0]])
390
+ seed_everything(7)
391
+ dataset = from_arrays([[0.0], [1.0], [2.0], [3.0]], [[1.0], [3.0], [5.0], [7.0]])
392
+ train_data, val_data = train_val_split(dataset, val_fraction=0.25, seed=7)
372
393
 
373
394
  model = nn.Linear(1, 1)
374
- loader = DataLoader(TensorDataset(x, y), batch_size=2)
375
- trainer = Trainer(model, optim.SGD(model.parameters(), lr=0.05), nn.MSELoss())
395
+ optimizer = optim.SGD(model.parameters(), lr=0.05)
396
+ trainer = Trainer(model, optimizer, nn.MSELoss(), metric_fn=ts.metrics.mean_squared_error)
376
397
  project = Project("runs/linear", ProjectConfig(name="linear-regression", seed=7))
377
398
 
378
- history = trainer.fit(loader, epochs=50)
399
+ history = trainer.fit(
400
+ DataLoader(train_data, batch_size=2),
401
+ epochs=50,
402
+ validation_loader=DataLoader(val_data, batch_size=1),
403
+ callbacks=[
404
+ LrLogger(),
405
+ CSVLogger(project.logs_dir / "history.csv"),
406
+ CheckpointCallback(project.checkpoints_dir / "best.tsmodel", save_best_only=True),
407
+ ],
408
+ )
379
409
  save_state_dict(model, project.checkpoint_path("weights"))
380
410
  print(history.last)
381
411
  ```
@@ -410,11 +440,11 @@ Run the loose local regression thresholds with:
410
440
  python benchmark_all.py --check-thresholds
411
441
  ```
412
442
 
413
- On one Windows CPython 3.10 development run reporting `1.9.0`, with
443
+ On one Windows CPython 3.10 development run reporting `1.10.0`, with
414
444
  TensorStudio threads enabled, storage pooling enabled, SSE2 autovectorization
415
445
  reported, and no BLAS provider found, TensorStudio beat NumPy on 7 local
416
446
  benchmark cases and lost on 96 NumPy-comparable cases. JAX CPU dispatch was
417
- available on that machine; TensorStudio won 55 local cases and lost 43. The
447
+ available on that machine; TensorStudio won 38 local cases and lost 60. The
418
448
  strongest local wins were the simple NumPy convolution/pooling reference loops
419
449
  and some small JAX-dispatch-heavy eager cases. NumPy and JAX were faster for
420
450
  many elementwise, reduction, matrix multiplication, larger activation, and
@@ -426,15 +456,15 @@ Snapshot from that local run:
426
456
 
427
457
  | operation | shape | TensorStudio | NumPy | JAX CPU dispatch | TS vs NumPy | TS vs JAX |
428
458
  |---|---:|---:|---:|---:|---:|---:|
429
- | `sigmoid` | `(32,)` | 0.0154 ms | 0.0048 ms | 0.0855 ms | 0.3098x | 5.5404x |
430
- | `mean` | `(32,)` | 0.0187 ms | 0.0104 ms | 0.0143 ms | 0.5575x | 0.7616x |
431
- | `sum_axis1` | `(16, 16)` | 0.0172 ms | 0.0027 ms | 0.0136 ms | 0.1551x | 0.7942x |
432
- | `chain_relu` | `(128,)` | 0.0957 ms | 0.0057 ms | 0.1030 ms | 0.0596x | 1.0768x |
433
- | `matmul` | `(256, 256)` | 2.3777 ms | 0.4328 ms | 0.2489 ms | 0.1820x | 0.1047x |
434
- | `conv2d_3x3_padding1` | `(1, 1, 8, 8)` | 0.2216 ms | 1.3908 ms | 0.1073 ms | 6.2770x | 0.4841x |
435
- | `max_pool2d_2x2` | `(1, 1, 16, 16)` | 0.0280 ms | 0.1846 ms | n/a | 6.5816x | n/a |
436
- | `avg_pool2d_2x2` | `(1, 1, 16, 16)` | 0.0281 ms | 0.5595 ms | n/a | 19.8874x | n/a |
437
- | `elementwise_backward` | `(1024,)` | 2.8255 ms | n/a | n/a | n/a | n/a |
459
+ | `sigmoid` | `(32,)` | 0.0150 ms | 0.0046 ms | 0.0723 ms | 0.3056x | 4.8092x |
460
+ | `mean` | `(32,)` | 0.0154 ms | 0.0078 ms | 0.0111 ms | 0.5097x | 0.7198x |
461
+ | `sum_axis1` | `(16, 16)` | 0.0159 ms | 0.0030 ms | 0.0129 ms | 0.1904x | 0.8133x |
462
+ | `chain_relu` | `(128,)` | 0.0859 ms | 0.0056 ms | 0.0888 ms | 0.0647x | 1.0337x |
463
+ | `matmul` | `(256, 256)` | 2.0731 ms | 0.4017 ms | 0.2497 ms | 0.1938x | 0.1204x |
464
+ | `conv2d_3x3_padding1` | `(1, 1, 8, 8)` | 0.2028 ms | 1.3615 ms | 0.1219 ms | 6.7128x | 0.6012x |
465
+ | `max_pool2d_2x2` | `(1, 1, 16, 16)` | 0.0279 ms | 0.1740 ms | n/a | 6.2464x | n/a |
466
+ | `avg_pool2d_2x2` | `(1, 1, 16, 16)` | 0.0275 ms | 0.5906 ms | n/a | 21.4893x | n/a |
467
+ | `elementwise_backward` | `(1024,)` | 2.7546 ms | n/a | n/a | n/a | n/a |
438
468
 
439
469
  Speedup is `competitor median / TensorStudio median`, so values above `1.0x`
440
470
  favor TensorStudio.
@@ -7,15 +7,18 @@
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.9.0` is a CPU-only stable API foundation with native C++
10
+ TensorStudio `1.10.0` is a CPU-only stable API foundation with native C++
11
11
  threading, storage reuse, SIMD-friendly typed kernels, and optional
12
12
  CBLAS/Accelerate matrix multiplication when available. It adds native stable
13
13
  softmax/logsumexp, batched matrix multiplication, statistical reductions,
14
14
  boolean reductions, seeded random distributions, and a hardened eager autograd
15
15
  lifecycle. The neural-network layer now includes grouped/depthwise/1D/
16
16
  transposed convolution, normalization layers, embeddings, richer activations,
17
- initializers, additional losses, and model summaries. It is eager-only,
18
- intentionally compact, and not a replacement for mature ML frameworks.
17
+ initializers, additional losses, and model summaries. The project layer adds
18
+ dataset factories, deterministic train/validation splitting, metrics, callbacks,
19
+ multi-format configs, checkpoint resume helpers, and starter project templates.
20
+ It is eager-only, intentionally compact, and not a replacement for mature ML
21
+ frameworks.
19
22
 
20
23
  ## Install
21
24
 
@@ -225,7 +228,7 @@ print(model.state_dict().keys())
225
228
  print(model.parameter_count())
226
229
  ```
227
230
 
228
- The `1.9.0` neural-network surface also includes initialization helpers,
231
+ The neural-network surface also includes initialization helpers,
229
232
  normalization layers, embeddings, grouped/depthwise/1D/transposed convolution,
230
233
  adaptive/global pooling, richer activations, and model summaries:
231
234
 
@@ -276,17 +279,22 @@ optimizer.step()
276
279
  print(ts.vision.accuracy(model(x), target))
277
280
  ```
278
281
 
279
- ## DataLoader
282
+ ## Data And Metrics
280
283
 
281
284
  ```python
282
285
  import tensorstudio as ts
283
- from tensorstudio.data import DataLoader, TensorDataset
286
+ from tensorstudio.data import DataLoader, from_arrays, train_val_split
284
287
 
285
- dataset = TensorDataset(ts.arange(6).reshape((6, 1)), ts.arange(6))
286
- loader = DataLoader(dataset, batch_size=2, shuffle=True, seed=42)
288
+ dataset = from_arrays([[0.0], [1.0], [2.0], [3.0]], [[1.0], [3.0], [5.0], [7.0]])
289
+ train_data, val_data = train_val_split(dataset, val_fraction=0.25, seed=42)
290
+ loader = DataLoader(train_data, batch_size=2, shuffle=True, seed=42)
287
291
 
288
292
  for features, targets in loader:
289
293
  print(features.shape, targets.shape)
294
+
295
+ prediction = ts.tensor([[0.2, 0.8], [0.7, 0.3]])
296
+ target = ts.tensor([1, 0], dtype="int64")
297
+ print(ts.metrics.accuracy(prediction, target))
290
298
  ```
291
299
 
292
300
  The v1 DataLoader is intentionally single-process so it works cleanly on
@@ -294,24 +302,44 @@ Windows without multiprocessing setup.
294
302
 
295
303
  ## Projects And Training
296
304
 
297
- `tensorstudio.project` provides project folders, JSON config, reusable trainers,
298
- safe NPZ weight files, and trusted full checkpoints:
305
+ `tensorstudio.project` provides project folders, JSON/TOML/YAML config loading,
306
+ deterministic seeding, reusable trainers, validation loops, callbacks, safe NPZ
307
+ weight files, trusted full checkpoints, and generated starter templates:
299
308
 
300
309
  ```python
301
310
  import tensorstudio as ts
302
311
  from tensorstudio import nn, optim
303
- from tensorstudio.data import DataLoader, TensorDataset
304
- from tensorstudio.project import Project, ProjectConfig, Trainer, save_state_dict
312
+ from tensorstudio.data import DataLoader, from_arrays, train_val_split
313
+ from tensorstudio.project import (
314
+ CSVLogger,
315
+ CheckpointCallback,
316
+ LrLogger,
317
+ Project,
318
+ ProjectConfig,
319
+ Trainer,
320
+ save_state_dict,
321
+ seed_everything,
322
+ )
305
323
 
306
- x = ts.tensor([[0.0], [1.0], [2.0], [3.0]])
307
- y = ts.tensor([[1.0], [3.0], [5.0], [7.0]])
324
+ seed_everything(7)
325
+ dataset = from_arrays([[0.0], [1.0], [2.0], [3.0]], [[1.0], [3.0], [5.0], [7.0]])
326
+ train_data, val_data = train_val_split(dataset, val_fraction=0.25, seed=7)
308
327
 
309
328
  model = nn.Linear(1, 1)
310
- loader = DataLoader(TensorDataset(x, y), batch_size=2)
311
- trainer = Trainer(model, optim.SGD(model.parameters(), lr=0.05), nn.MSELoss())
329
+ optimizer = optim.SGD(model.parameters(), lr=0.05)
330
+ trainer = Trainer(model, optimizer, nn.MSELoss(), metric_fn=ts.metrics.mean_squared_error)
312
331
  project = Project("runs/linear", ProjectConfig(name="linear-regression", seed=7))
313
332
 
314
- history = trainer.fit(loader, epochs=50)
333
+ history = trainer.fit(
334
+ DataLoader(train_data, batch_size=2),
335
+ epochs=50,
336
+ validation_loader=DataLoader(val_data, batch_size=1),
337
+ callbacks=[
338
+ LrLogger(),
339
+ CSVLogger(project.logs_dir / "history.csv"),
340
+ CheckpointCallback(project.checkpoints_dir / "best.tsmodel", save_best_only=True),
341
+ ],
342
+ )
315
343
  save_state_dict(model, project.checkpoint_path("weights"))
316
344
  print(history.last)
317
345
  ```
@@ -346,11 +374,11 @@ Run the loose local regression thresholds with:
346
374
  python benchmark_all.py --check-thresholds
347
375
  ```
348
376
 
349
- On one Windows CPython 3.10 development run reporting `1.9.0`, with
377
+ On one Windows CPython 3.10 development run reporting `1.10.0`, with
350
378
  TensorStudio threads enabled, storage pooling enabled, SSE2 autovectorization
351
379
  reported, and no BLAS provider found, TensorStudio beat NumPy on 7 local
352
380
  benchmark cases and lost on 96 NumPy-comparable cases. JAX CPU dispatch was
353
- available on that machine; TensorStudio won 55 local cases and lost 43. The
381
+ available on that machine; TensorStudio won 38 local cases and lost 60. The
354
382
  strongest local wins were the simple NumPy convolution/pooling reference loops
355
383
  and some small JAX-dispatch-heavy eager cases. NumPy and JAX were faster for
356
384
  many elementwise, reduction, matrix multiplication, larger activation, and
@@ -362,15 +390,15 @@ Snapshot from that local run:
362
390
 
363
391
  | operation | shape | TensorStudio | NumPy | JAX CPU dispatch | TS vs NumPy | TS vs JAX |
364
392
  |---|---:|---:|---:|---:|---:|---:|
365
- | `sigmoid` | `(32,)` | 0.0154 ms | 0.0048 ms | 0.0855 ms | 0.3098x | 5.5404x |
366
- | `mean` | `(32,)` | 0.0187 ms | 0.0104 ms | 0.0143 ms | 0.5575x | 0.7616x |
367
- | `sum_axis1` | `(16, 16)` | 0.0172 ms | 0.0027 ms | 0.0136 ms | 0.1551x | 0.7942x |
368
- | `chain_relu` | `(128,)` | 0.0957 ms | 0.0057 ms | 0.1030 ms | 0.0596x | 1.0768x |
369
- | `matmul` | `(256, 256)` | 2.3777 ms | 0.4328 ms | 0.2489 ms | 0.1820x | 0.1047x |
370
- | `conv2d_3x3_padding1` | `(1, 1, 8, 8)` | 0.2216 ms | 1.3908 ms | 0.1073 ms | 6.2770x | 0.4841x |
371
- | `max_pool2d_2x2` | `(1, 1, 16, 16)` | 0.0280 ms | 0.1846 ms | n/a | 6.5816x | n/a |
372
- | `avg_pool2d_2x2` | `(1, 1, 16, 16)` | 0.0281 ms | 0.5595 ms | n/a | 19.8874x | n/a |
373
- | `elementwise_backward` | `(1024,)` | 2.8255 ms | n/a | n/a | n/a | n/a |
393
+ | `sigmoid` | `(32,)` | 0.0150 ms | 0.0046 ms | 0.0723 ms | 0.3056x | 4.8092x |
394
+ | `mean` | `(32,)` | 0.0154 ms | 0.0078 ms | 0.0111 ms | 0.5097x | 0.7198x |
395
+ | `sum_axis1` | `(16, 16)` | 0.0159 ms | 0.0030 ms | 0.0129 ms | 0.1904x | 0.8133x |
396
+ | `chain_relu` | `(128,)` | 0.0859 ms | 0.0056 ms | 0.0888 ms | 0.0647x | 1.0337x |
397
+ | `matmul` | `(256, 256)` | 2.0731 ms | 0.4017 ms | 0.2497 ms | 0.1938x | 0.1204x |
398
+ | `conv2d_3x3_padding1` | `(1, 1, 8, 8)` | 0.2028 ms | 1.3615 ms | 0.1219 ms | 6.7128x | 0.6012x |
399
+ | `max_pool2d_2x2` | `(1, 1, 16, 16)` | 0.0279 ms | 0.1740 ms | n/a | 6.2464x | n/a |
400
+ | `avg_pool2d_2x2` | `(1, 1, 16, 16)` | 0.0275 ms | 0.5906 ms | n/a | 21.4893x | n/a |
401
+ | `elementwise_backward` | `(1024,)` | 2.7546 ms | n/a | n/a | n/a | n/a |
374
402
 
375
403
  Speedup is `competitor median / TensorStudio median`, so values above `1.0x`
376
404
  favor TensorStudio.