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.
- {tensorstudio-1.9.0 → tensorstudio-1.10.0}/CHANGELOG.md +18 -0
- {tensorstudio-1.9.0 → tensorstudio-1.10.0}/CMakeLists.txt +1 -1
- {tensorstudio-1.9.0 → tensorstudio-1.10.0}/PKG-INFO +59 -29
- {tensorstudio-1.9.0 → tensorstudio-1.10.0}/README.md +56 -28
- tensorstudio-1.10.0/benchmarks/results.md +347 -0
- {tensorstudio-1.9.0 → tensorstudio-1.10.0}/benchmarks/results_matmul.md +13 -13
- {tensorstudio-1.9.0 → tensorstudio-1.10.0}/docs/autograd/coverage.md +1 -1
- tensorstudio-1.10.0/docs/data/dataset-creation.md +91 -0
- {tensorstudio-1.9.0 → tensorstudio-1.10.0}/docs/data/datasets-and-dataloaders.md +29 -2
- {tensorstudio-1.9.0 → tensorstudio-1.10.0}/docs/hardware/cpu-backend.md +1 -1
- {tensorstudio-1.9.0 → tensorstudio-1.10.0}/docs/index.md +18 -12
- {tensorstudio-1.9.0 → tensorstudio-1.10.0}/docs/interchange/onnx.md +1 -1
- {tensorstudio-1.9.0 → tensorstudio-1.10.0}/docs/interchange/serialization.md +1 -1
- {tensorstudio-1.9.0 → tensorstudio-1.10.0}/docs/nn/training.md +1 -1
- {tensorstudio-1.9.0 → tensorstudio-1.10.0}/docs/project/checkpoints.md +23 -6
- tensorstudio-1.10.0/docs/project/configs-and-templates.md +76 -0
- tensorstudio-1.10.0/docs/project/metrics.md +62 -0
- tensorstudio-1.10.0/docs/project/trainer-and-callbacks.md +91 -0
- {tensorstudio-1.9.0 → tensorstudio-1.10.0}/docs/project/workflows.md +32 -14
- {tensorstudio-1.9.0 → tensorstudio-1.10.0}/docs/release/publishing.md +4 -4
- {tensorstudio-1.9.0 → tensorstudio-1.10.0}/docs/release/versioning.md +2 -2
- {tensorstudio-1.9.0 → tensorstudio-1.10.0}/docs/roadmap/milestones.md +15 -3
- {tensorstudio-1.9.0 → tensorstudio-1.10.0}/docs/roadmap/priorities.md +1 -0
- {tensorstudio-1.9.0 → tensorstudio-1.10.0}/docs/roadmap/roadmap.md +9 -9
- {tensorstudio-1.9.0 → tensorstudio-1.10.0}/include/tensorstudio/version.hpp +1 -1
- {tensorstudio-1.9.0 → tensorstudio-1.10.0}/mkdocs.yml +4 -0
- {tensorstudio-1.9.0 → tensorstudio-1.10.0}/pyproject.toml +6 -4
- {tensorstudio-1.9.0 → tensorstudio-1.10.0}/python/tensorstudio/__init__.py +2 -1
- {tensorstudio-1.9.0 → tensorstudio-1.10.0}/python/tensorstudio/_version.py +1 -1
- tensorstudio-1.10.0/python/tensorstudio/data/__init__.py +21 -0
- tensorstudio-1.10.0/python/tensorstudio/data/dataset.py +116 -0
- tensorstudio-1.10.0/python/tensorstudio/data/factories.py +34 -0
- tensorstudio-1.10.0/python/tensorstudio/data/splitting.py +35 -0
- tensorstudio-1.10.0/python/tensorstudio/metrics/__init__.py +25 -0
- tensorstudio-1.10.0/python/tensorstudio/metrics/classification.py +85 -0
- tensorstudio-1.10.0/python/tensorstudio/metrics/multilabel.py +46 -0
- tensorstudio-1.10.0/python/tensorstudio/metrics/regression.py +41 -0
- {tensorstudio-1.9.0 → tensorstudio-1.10.0}/python/tensorstudio/project/__init__.py +17 -1
- tensorstudio-1.10.0/python/tensorstudio/project/callbacks.py +158 -0
- {tensorstudio-1.9.0 → tensorstudio-1.10.0}/python/tensorstudio/project/checkpoint.py +40 -0
- {tensorstudio-1.9.0 → tensorstudio-1.10.0}/python/tensorstudio/project/config.py +33 -3
- tensorstudio-1.10.0/python/tensorstudio/project/seed.py +23 -0
- tensorstudio-1.10.0/python/tensorstudio/project/templates.py +79 -0
- {tensorstudio-1.9.0 → tensorstudio-1.10.0}/python/tensorstudio/project/trainer.py +34 -5
- {tensorstudio-1.9.0 → tensorstudio-1.10.0}/tests/test_import.py +1 -1
- tensorstudio-1.10.0/tests/test_training_workflows.py +177 -0
- tensorstudio-1.9.0/benchmarks/results.md +0 -347
- tensorstudio-1.9.0/python/tensorstudio/data/__init__.py +0 -8
- tensorstudio-1.9.0/python/tensorstudio/data/dataset.py +0 -36
- {tensorstudio-1.9.0 → tensorstudio-1.10.0}/.gitattributes +0 -0
- {tensorstudio-1.9.0 → tensorstudio-1.10.0}/.github/workflows/ci.yml +0 -0
- {tensorstudio-1.9.0 → tensorstudio-1.10.0}/.github/workflows/publish-testpypi.yml +0 -0
- {tensorstudio-1.9.0 → tensorstudio-1.10.0}/.github/workflows/publish.yml +0 -0
- {tensorstudio-1.9.0 → tensorstudio-1.10.0}/.github/workflows/wheels.yml +0 -0
- {tensorstudio-1.9.0 → tensorstudio-1.10.0}/.gitignore +0 -0
- {tensorstudio-1.9.0 → tensorstudio-1.10.0}/.pre-commit-config.yaml +0 -0
- {tensorstudio-1.9.0 → tensorstudio-1.10.0}/CONTRIBUTING.md +0 -0
- {tensorstudio-1.9.0 → tensorstudio-1.10.0}/LICENSE +0 -0
- {tensorstudio-1.9.0 → tensorstudio-1.10.0}/SECURITY.md +0 -0
- {tensorstudio-1.9.0 → tensorstudio-1.10.0}/benchmark_all.py +0 -0
- {tensorstudio-1.9.0 → tensorstudio-1.10.0}/benchmarks/__init__.py +0 -0
- {tensorstudio-1.9.0 → tensorstudio-1.10.0}/benchmarks/bench_activations.py +0 -0
- {tensorstudio-1.9.0 → tensorstudio-1.10.0}/benchmarks/bench_autograd.py +0 -0
- {tensorstudio-1.9.0 → tensorstudio-1.10.0}/benchmarks/bench_conv2d.py +0 -0
- {tensorstudio-1.9.0 → tensorstudio-1.10.0}/benchmarks/bench_elementwise.py +0 -0
- {tensorstudio-1.9.0 → tensorstudio-1.10.0}/benchmarks/bench_matmul.py +0 -0
- {tensorstudio-1.9.0 → tensorstudio-1.10.0}/benchmarks/bench_pooling.py +0 -0
- {tensorstudio-1.9.0 → tensorstudio-1.10.0}/benchmarks/bench_reductions.py +0 -0
- {tensorstudio-1.9.0 → tensorstudio-1.10.0}/benchmarks/bench_tensor_ops.py +0 -0
- {tensorstudio-1.9.0 → tensorstudio-1.10.0}/benchmarks/bench_training_loop.py +0 -0
- {tensorstudio-1.9.0 → tensorstudio-1.10.0}/benchmarks/benchmark_report.py +0 -0
- {tensorstudio-1.9.0 → tensorstudio-1.10.0}/benchmarks/results_conv2d.md +0 -0
- {tensorstudio-1.9.0 → tensorstudio-1.10.0}/benchmarks/results_pooling.md +0 -0
- {tensorstudio-1.9.0 → tensorstudio-1.10.0}/benchmarks/results_reductions.md +0 -0
- {tensorstudio-1.9.0 → tensorstudio-1.10.0}/benchmarks/results_tensor_ops.md +0 -0
- {tensorstudio-1.9.0 → tensorstudio-1.10.0}/benchmarks/thresholds.json +0 -0
- {tensorstudio-1.9.0 → tensorstudio-1.10.0}/docs/autograd/gradient-notes.md +0 -0
- {tensorstudio-1.9.0 → tensorstudio-1.10.0}/docs/autograd/overview.md +0 -0
- {tensorstudio-1.9.0 → tensorstudio-1.10.0}/docs/core/api-reference.md +0 -0
- {tensorstudio-1.9.0 → tensorstudio-1.10.0}/docs/core/broadcasting.md +0 -0
- {tensorstudio-1.9.0 → tensorstudio-1.10.0}/docs/core/math-and-statistics.md +0 -0
- {tensorstudio-1.9.0 → tensorstudio-1.10.0}/docs/core/native-cpp-core.md +0 -0
- {tensorstudio-1.9.0 → tensorstudio-1.10.0}/docs/core/tensors.md +0 -0
- {tensorstudio-1.9.0 → tensorstudio-1.10.0}/docs/data/dataloader-patterns.md +0 -0
- {tensorstudio-1.9.0 → tensorstudio-1.10.0}/docs/data/tensor-datasets.md +0 -0
- {tensorstudio-1.9.0 → tensorstudio-1.10.0}/docs/development/contributing.md +0 -0
- {tensorstudio-1.9.0 → tensorstudio-1.10.0}/docs/development/cpp-first.md +0 -0
- {tensorstudio-1.9.0 → tensorstudio-1.10.0}/docs/getting-started/installation.md +0 -0
- {tensorstudio-1.9.0 → tensorstudio-1.10.0}/docs/getting-started/quickstart.md +0 -0
- {tensorstudio-1.9.0 → tensorstudio-1.10.0}/docs/getting-started/source-build.md +0 -0
- {tensorstudio-1.9.0 → tensorstudio-1.10.0}/docs/hardware/linux.md +0 -0
- {tensorstudio-1.9.0 → tensorstudio-1.10.0}/docs/hardware/macos.md +0 -0
- {tensorstudio-1.9.0 → tensorstudio-1.10.0}/docs/hardware/windows.md +0 -0
- {tensorstudio-1.9.0 → tensorstudio-1.10.0}/docs/interchange/model-formats.md +0 -0
- {tensorstudio-1.9.0 → tensorstudio-1.10.0}/docs/interchange/numpy-interop.md +0 -0
- {tensorstudio-1.9.0 → tensorstudio-1.10.0}/docs/interchange/trusted-serialization.md +0 -0
- {tensorstudio-1.9.0 → tensorstudio-1.10.0}/docs/nn/initializers.md +0 -0
- {tensorstudio-1.9.0 → tensorstudio-1.10.0}/docs/nn/losses-and-summary.md +0 -0
- {tensorstudio-1.9.0 → tensorstudio-1.10.0}/docs/nn/modules.md +0 -0
- {tensorstudio-1.9.0 → tensorstudio-1.10.0}/docs/nn/optimizers.md +0 -0
- {tensorstudio-1.9.0 → tensorstudio-1.10.0}/docs/nn/overview.md +0 -0
- {tensorstudio-1.9.0 → tensorstudio-1.10.0}/docs/performance/benchmarks.md +0 -0
- {tensorstudio-1.9.0 → tensorstudio-1.10.0}/docs/performance/optimization.md +0 -0
- {tensorstudio-1.9.0 → tensorstudio-1.10.0}/docs/performance/profiling.md +0 -0
- {tensorstudio-1.9.0 → tensorstudio-1.10.0}/docs/project/project-layout.md +0 -0
- {tensorstudio-1.9.0 → tensorstudio-1.10.0}/docs/release/checklist.md +0 -0
- {tensorstudio-1.9.0 → tensorstudio-1.10.0}/docs/vision/dataset-creation.md +0 -0
- {tensorstudio-1.9.0 → tensorstudio-1.10.0}/docs/vision/overview.md +0 -0
- {tensorstudio-1.9.0 → tensorstudio-1.10.0}/examples/basic_tensor_ops.py +0 -0
- {tensorstudio-1.9.0 → tensorstudio-1.10.0}/examples/export_onnx.py +0 -0
- {tensorstudio-1.9.0 → tensorstudio-1.10.0}/examples/image_folder_classification.py +0 -0
- {tensorstudio-1.9.0 → tensorstudio-1.10.0}/examples/linear_regression.py +0 -0
- {tensorstudio-1.9.0 → tensorstudio-1.10.0}/examples/project_training.py +0 -0
- {tensorstudio-1.9.0 → tensorstudio-1.10.0}/examples/save_load_model.py +0 -0
- {tensorstudio-1.9.0 → tensorstudio-1.10.0}/examples/tiny_mlp.py +0 -0
- {tensorstudio-1.9.0 → tensorstudio-1.10.0}/examples/vision_classifier.py +0 -0
- {tensorstudio-1.9.0 → tensorstudio-1.10.0}/include/tensorstudio/autograd.hpp +0 -0
- {tensorstudio-1.9.0 → tensorstudio-1.10.0}/include/tensorstudio/device.hpp +0 -0
- {tensorstudio-1.9.0 → tensorstudio-1.10.0}/include/tensorstudio/dtype.hpp +0 -0
- {tensorstudio-1.9.0 → tensorstudio-1.10.0}/include/tensorstudio/errors.hpp +0 -0
- {tensorstudio-1.9.0 → tensorstudio-1.10.0}/include/tensorstudio/module.hpp +0 -0
- {tensorstudio-1.9.0 → tensorstudio-1.10.0}/include/tensorstudio/ops.hpp +0 -0
- {tensorstudio-1.9.0 → tensorstudio-1.10.0}/include/tensorstudio/optim.hpp +0 -0
- {tensorstudio-1.9.0 → tensorstudio-1.10.0}/include/tensorstudio/perf.hpp +0 -0
- {tensorstudio-1.9.0 → tensorstudio-1.10.0}/include/tensorstudio/random.hpp +0 -0
- {tensorstudio-1.9.0 → tensorstudio-1.10.0}/include/tensorstudio/serialization.hpp +0 -0
- {tensorstudio-1.9.0 → tensorstudio-1.10.0}/include/tensorstudio/shape.hpp +0 -0
- {tensorstudio-1.9.0 → tensorstudio-1.10.0}/include/tensorstudio/storage.hpp +0 -0
- {tensorstudio-1.9.0 → tensorstudio-1.10.0}/include/tensorstudio/tensor.hpp +0 -0
- {tensorstudio-1.9.0 → tensorstudio-1.10.0}/python/tensorstudio/_C.pyi +0 -0
- {tensorstudio-1.9.0 → tensorstudio-1.10.0}/python/tensorstudio/autograd.py +0 -0
- {tensorstudio-1.9.0 → tensorstudio-1.10.0}/python/tensorstudio/data/dataloader.py +0 -0
- {tensorstudio-1.9.0 → tensorstudio-1.10.0}/python/tensorstudio/dtypes.py +0 -0
- {tensorstudio-1.9.0 → tensorstudio-1.10.0}/python/tensorstudio/errors.py +0 -0
- {tensorstudio-1.9.0 → tensorstudio-1.10.0}/python/tensorstudio/grad_mode.py +0 -0
- {tensorstudio-1.9.0 → tensorstudio-1.10.0}/python/tensorstudio/interchange/__init__.py +0 -0
- {tensorstudio-1.9.0 → tensorstudio-1.10.0}/python/tensorstudio/interchange/onnx.py +0 -0
- {tensorstudio-1.9.0 → tensorstudio-1.10.0}/python/tensorstudio/math.py +0 -0
- {tensorstudio-1.9.0 → tensorstudio-1.10.0}/python/tensorstudio/nn/__init__.py +0 -0
- {tensorstudio-1.9.0 → tensorstudio-1.10.0}/python/tensorstudio/nn/functional.py +0 -0
- {tensorstudio-1.9.0 → tensorstudio-1.10.0}/python/tensorstudio/nn/init.py +0 -0
- {tensorstudio-1.9.0 → tensorstudio-1.10.0}/python/tensorstudio/nn/losses.py +0 -0
- {tensorstudio-1.9.0 → tensorstudio-1.10.0}/python/tensorstudio/nn/modules.py +0 -0
- {tensorstudio-1.9.0 → tensorstudio-1.10.0}/python/tensorstudio/nn/summary.py +0 -0
- {tensorstudio-1.9.0 → tensorstudio-1.10.0}/python/tensorstudio/ops.py +0 -0
- {tensorstudio-1.9.0 → tensorstudio-1.10.0}/python/tensorstudio/optim/__init__.py +0 -0
- {tensorstudio-1.9.0 → tensorstudio-1.10.0}/python/tensorstudio/optim/adam.py +0 -0
- {tensorstudio-1.9.0 → tensorstudio-1.10.0}/python/tensorstudio/optim/adamw.py +0 -0
- {tensorstudio-1.9.0 → tensorstudio-1.10.0}/python/tensorstudio/optim/lr_scheduler.py +0 -0
- {tensorstudio-1.9.0 → tensorstudio-1.10.0}/python/tensorstudio/optim/sgd.py +0 -0
- {tensorstudio-1.9.0 → tensorstudio-1.10.0}/python/tensorstudio/optim/utils.py +0 -0
- {tensorstudio-1.9.0 → tensorstudio-1.10.0}/python/tensorstudio/performance.py +0 -0
- {tensorstudio-1.9.0 → tensorstudio-1.10.0}/python/tensorstudio/py.typed +0 -0
- {tensorstudio-1.9.0 → tensorstudio-1.10.0}/python/tensorstudio/serialization.py +0 -0
- {tensorstudio-1.9.0 → tensorstudio-1.10.0}/python/tensorstudio/tensor.py +0 -0
- {tensorstudio-1.9.0 → tensorstudio-1.10.0}/python/tensorstudio/typing.py +0 -0
- {tensorstudio-1.9.0 → tensorstudio-1.10.0}/python/tensorstudio/vision/__init__.py +0 -0
- {tensorstudio-1.9.0 → tensorstudio-1.10.0}/python/tensorstudio/vision/datasets.py +0 -0
- {tensorstudio-1.9.0 → tensorstudio-1.10.0}/python/tensorstudio/vision/io.py +0 -0
- {tensorstudio-1.9.0 → tensorstudio-1.10.0}/python/tensorstudio/vision/metrics.py +0 -0
- {tensorstudio-1.9.0 → tensorstudio-1.10.0}/python/tensorstudio/vision/models.py +0 -0
- {tensorstudio-1.9.0 → tensorstudio-1.10.0}/python/tensorstudio/vision/transforms.py +0 -0
- {tensorstudio-1.9.0 → tensorstudio-1.10.0}/python/tensorstudio/vision/visualization.py +0 -0
- {tensorstudio-1.9.0 → tensorstudio-1.10.0}/src/bindings/bind_autograd.cpp +0 -0
- {tensorstudio-1.9.0 → tensorstudio-1.10.0}/src/bindings/bind_nn.cpp +0 -0
- {tensorstudio-1.9.0 → tensorstudio-1.10.0}/src/bindings/bind_ops.cpp +0 -0
- {tensorstudio-1.9.0 → tensorstudio-1.10.0}/src/bindings/bind_optim.cpp +0 -0
- {tensorstudio-1.9.0 → tensorstudio-1.10.0}/src/bindings/bind_tensor.cpp +0 -0
- {tensorstudio-1.9.0 → tensorstudio-1.10.0}/src/bindings/bindings.cpp +0 -0
- {tensorstudio-1.9.0 → tensorstudio-1.10.0}/src/bindings/bindings.hpp +0 -0
- {tensorstudio-1.9.0 → tensorstudio-1.10.0}/src/core/autograd.cpp +0 -0
- {tensorstudio-1.9.0 → tensorstudio-1.10.0}/src/core/device.cpp +0 -0
- {tensorstudio-1.9.0 → tensorstudio-1.10.0}/src/core/dtype.cpp +0 -0
- {tensorstudio-1.9.0 → tensorstudio-1.10.0}/src/core/errors.cpp +0 -0
- {tensorstudio-1.9.0 → tensorstudio-1.10.0}/src/core/module.cpp +0 -0
- {tensorstudio-1.9.0 → tensorstudio-1.10.0}/src/core/ops.cpp +0 -0
- {tensorstudio-1.9.0 → tensorstudio-1.10.0}/src/core/optim.cpp +0 -0
- {tensorstudio-1.9.0 → tensorstudio-1.10.0}/src/core/perf.cpp +0 -0
- {tensorstudio-1.9.0 → tensorstudio-1.10.0}/src/core/random.cpp +0 -0
- {tensorstudio-1.9.0 → tensorstudio-1.10.0}/src/core/serialization.cpp +0 -0
- {tensorstudio-1.9.0 → tensorstudio-1.10.0}/src/core/shape.cpp +0 -0
- {tensorstudio-1.9.0 → tensorstudio-1.10.0}/src/core/storage.cpp +0 -0
- {tensorstudio-1.9.0 → tensorstudio-1.10.0}/src/core/tensor.cpp +0 -0
- {tensorstudio-1.9.0 → tensorstudio-1.10.0}/test_all.py +0 -0
- {tensorstudio-1.9.0 → tensorstudio-1.10.0}/tests/test_autograd.py +0 -0
- {tensorstudio-1.9.0 → tensorstudio-1.10.0}/tests/test_autograd_hardening.py +0 -0
- {tensorstudio-1.9.0 → tensorstudio-1.10.0}/tests/test_benchmark_report.py +0 -0
- {tensorstudio-1.9.0 → tensorstudio-1.10.0}/tests/test_broadcasting.py +0 -0
- {tensorstudio-1.9.0 → tensorstudio-1.10.0}/tests/test_core_math_expansion.py +0 -0
- {tensorstudio-1.9.0 → tensorstudio-1.10.0}/tests/test_data.py +0 -0
- {tensorstudio-1.9.0 → tensorstudio-1.10.0}/tests/test_errors.py +0 -0
- {tensorstudio-1.9.0 → tensorstudio-1.10.0}/tests/test_indexing.py +0 -0
- {tensorstudio-1.9.0 → tensorstudio-1.10.0}/tests/test_interchange.py +0 -0
- {tensorstudio-1.9.0 → tensorstudio-1.10.0}/tests/test_nn.py +0 -0
- {tensorstudio-1.9.0 → tensorstudio-1.10.0}/tests/test_nn_building_blocks.py +0 -0
- {tensorstudio-1.9.0 → tensorstudio-1.10.0}/tests/test_numpy_interop.py +0 -0
- {tensorstudio-1.9.0 → tensorstudio-1.10.0}/tests/test_ops.py +0 -0
- {tensorstudio-1.9.0 → tensorstudio-1.10.0}/tests/test_optim.py +0 -0
- {tensorstudio-1.9.0 → tensorstudio-1.10.0}/tests/test_performance.py +0 -0
- {tensorstudio-1.9.0 → tensorstudio-1.10.0}/tests/test_project.py +0 -0
- {tensorstudio-1.9.0 → tensorstudio-1.10.0}/tests/test_serialization.py +0 -0
- {tensorstudio-1.9.0 → tensorstudio-1.10.0}/tests/test_tensor.py +0 -0
- {tensorstudio-1.9.0 → tensorstudio-1.10.0}/tests/test_views.py +0 -0
- {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
|
Metadata-Version: 2.2
|
|
2
2
|
Name: tensorstudio
|
|
3
|
-
Version: 1.
|
|
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.
|
|
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.
|
|
82
|
-
|
|
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
|
|
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
|
-
##
|
|
348
|
+
## Data And Metrics
|
|
344
349
|
|
|
345
350
|
```python
|
|
346
351
|
import tensorstudio as ts
|
|
347
|
-
from tensorstudio.data import DataLoader,
|
|
352
|
+
from tensorstudio.data import DataLoader, from_arrays, train_val_split
|
|
348
353
|
|
|
349
|
-
dataset =
|
|
350
|
-
|
|
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
|
|
362
|
-
|
|
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,
|
|
368
|
-
from tensorstudio.project import
|
|
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
|
-
|
|
371
|
-
|
|
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
|
-
|
|
375
|
-
trainer = Trainer(model,
|
|
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(
|
|
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.
|
|
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
|
|
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.
|
|
430
|
-
| `mean` | `(32,)` | 0.
|
|
431
|
-
| `sum_axis1` | `(16, 16)` | 0.
|
|
432
|
-
| `chain_relu` | `(128,)` | 0.
|
|
433
|
-
| `matmul` | `(256, 256)` | 2.
|
|
434
|
-
| `conv2d_3x3_padding1` | `(1, 1, 8, 8)` | 0.
|
|
435
|
-
| `max_pool2d_2x2` | `(1, 1, 16, 16)` | 0.
|
|
436
|
-
| `avg_pool2d_2x2` | `(1, 1, 16, 16)` | 0.
|
|
437
|
-
| `elementwise_backward` | `(1024,)` | 2.
|
|
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.
|
|
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.
|
|
18
|
-
|
|
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
|
|
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
|
-
##
|
|
282
|
+
## Data And Metrics
|
|
280
283
|
|
|
281
284
|
```python
|
|
282
285
|
import tensorstudio as ts
|
|
283
|
-
from tensorstudio.data import DataLoader,
|
|
286
|
+
from tensorstudio.data import DataLoader, from_arrays, train_val_split
|
|
284
287
|
|
|
285
|
-
dataset =
|
|
286
|
-
|
|
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
|
|
298
|
-
|
|
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,
|
|
304
|
-
from tensorstudio.project import
|
|
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
|
-
|
|
307
|
-
|
|
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
|
-
|
|
311
|
-
trainer = Trainer(model,
|
|
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(
|
|
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.
|
|
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
|
|
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.
|
|
366
|
-
| `mean` | `(32,)` | 0.
|
|
367
|
-
| `sum_axis1` | `(16, 16)` | 0.
|
|
368
|
-
| `chain_relu` | `(128,)` | 0.
|
|
369
|
-
| `matmul` | `(256, 256)` | 2.
|
|
370
|
-
| `conv2d_3x3_padding1` | `(1, 1, 8, 8)` | 0.
|
|
371
|
-
| `max_pool2d_2x2` | `(1, 1, 16, 16)` | 0.
|
|
372
|
-
| `avg_pool2d_2x2` | `(1, 1, 16, 16)` | 0.
|
|
373
|
-
| `elementwise_backward` | `(1024,)` | 2.
|
|
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.
|