vectorphile 0.2.0__tar.gz → 0.3.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.
- {vectorphile-0.2.0/vectorphile.egg-info → vectorphile-0.3.0}/PKG-INFO +77 -18
- vectorphile-0.2.0/PKG-INFO → vectorphile-0.3.0/README.md +51 -53
- {vectorphile-0.2.0 → vectorphile-0.3.0}/pyproject.toml +24 -1
- {vectorphile-0.2.0 → vectorphile-0.3.0}/vectorphile/__init__.py +19 -1
- {vectorphile-0.2.0 → vectorphile-0.3.0}/vectorphile/autograd/__init__.py +7 -1
- vectorphile-0.3.0/vectorphile/autograd/functional.py +171 -0
- vectorphile-0.3.0/vectorphile/backend/__init__.py +474 -0
- vectorphile-0.3.0/vectorphile/backend/_torch_backend.py +287 -0
- vectorphile-0.3.0/vectorphile/callbacks/__init__.py +521 -0
- vectorphile-0.3.0/vectorphile/cuda/__init__.py +454 -0
- vectorphile-0.3.0/vectorphile/cuda/triton_kernels.py +189 -0
- {vectorphile-0.2.0 → vectorphile-0.3.0}/vectorphile/data/__init__.py +19 -0
- vectorphile-0.3.0/vectorphile/data/datasets.py +571 -0
- vectorphile-0.3.0/vectorphile/distributed/__init__.py +311 -0
- vectorphile-0.3.0/vectorphile/export/__init__.py +370 -0
- vectorphile-0.3.0/vectorphile/export/_gguf.py +449 -0
- {vectorphile-0.2.0 → vectorphile-0.3.0}/vectorphile/ma/__init__.py +1 -1
- vectorphile-0.3.0/vectorphile/metrics/__init__.py +538 -0
- {vectorphile-0.2.0 → vectorphile-0.3.0}/vectorphile/nn/__init__.py +30 -0
- {vectorphile-0.2.0 → vectorphile-0.3.0}/vectorphile/nn/activations.py +6 -7
- vectorphile-0.3.0/vectorphile/nn/architectures/__init__.py +149 -0
- vectorphile-0.3.0/vectorphile/nn/architectures/attention.py +284 -0
- vectorphile-0.3.0/vectorphile/nn/architectures/cnn.py +646 -0
- vectorphile-0.3.0/vectorphile/nn/architectures/generative.py +613 -0
- vectorphile-0.3.0/vectorphile/nn/architectures/graph.py +477 -0
- vectorphile-0.3.0/vectorphile/nn/architectures/ssm.py +484 -0
- vectorphile-0.3.0/vectorphile/nn/architectures/transformer.py +829 -0
- vectorphile-0.3.0/vectorphile/nn/architectures/unet.py +377 -0
- vectorphile-0.3.0/vectorphile/nn/architectures/vision_transformer.py +384 -0
- vectorphile-0.3.0/vectorphile/nn/einops.py +376 -0
- vectorphile-0.3.0/vectorphile/nn/flash_attention.py +214 -0
- vectorphile-0.3.0/vectorphile/nn/hooks.py +245 -0
- {vectorphile-0.2.0 → vectorphile-0.3.0}/vectorphile/nn/layers.py +41 -79
- vectorphile-0.3.0/vectorphile/nn/lr_schedulers.py +302 -0
- vectorphile-0.3.0/vectorphile/nn/optimizers_advanced.py +585 -0
- vectorphile-0.3.0/vectorphile/nn/qat.py +296 -0
- vectorphile-0.3.0/vectorphile/pretrained/__init__.py +346 -0
- vectorphile-0.3.0/vectorphile/pretrained/_config_loader.py +93 -0
- vectorphile-0.3.0/vectorphile/pretrained/_downloader.py +347 -0
- vectorphile-0.3.0/vectorphile/pretrained/_mappers.py +407 -0
- vectorphile-0.3.0/vectorphile/pretrained/_registry.py +272 -0
- vectorphile-0.3.0/vectorphile/rl/__init__.py +1184 -0
- vectorphile-0.3.0/vectorphile/text/__init__.py +482 -0
- vectorphile-0.3.0/vectorphile/tokenizers/__init__.py +569 -0
- vectorphile-0.3.0/vectorphile/trainer/__init__.py +404 -0
- vectorphile-0.3.0/vectorphile/vision/__init__.py +542 -0
- vectorphile-0.2.0/README.md → vectorphile-0.3.0/vectorphile.egg-info/PKG-INFO +112 -17
- {vectorphile-0.2.0 → vectorphile-0.3.0}/vectorphile.egg-info/SOURCES.txt +36 -0
- vectorphile-0.3.0/vectorphile.egg-info/requires.txt +55 -0
- vectorphile-0.2.0/vectorphile.egg-info/requires.txt +0 -22
- {vectorphile-0.2.0 → vectorphile-0.3.0}/LICENSE +0 -0
- {vectorphile-0.2.0 → vectorphile-0.3.0}/setup.cfg +0 -0
- {vectorphile-0.2.0 → vectorphile-0.3.0}/setup.py +0 -0
- {vectorphile-0.2.0 → vectorphile-0.3.0}/tests/test_data.py +0 -0
- {vectorphile-0.2.0 → vectorphile-0.3.0}/tests/test_ml.py +0 -0
- {vectorphile-0.2.0 → vectorphile-0.3.0}/tests/test_nn.py +0 -0
- {vectorphile-0.2.0 → vectorphile-0.3.0}/tests/test_tensor.py +0 -0
- {vectorphile-0.2.0 → vectorphile-0.3.0}/vectorphile/amp/__init__.py +0 -0
- {vectorphile-0.2.0 → vectorphile-0.3.0}/vectorphile/autograd/engine.py +0 -0
- {vectorphile-0.2.0 → vectorphile-0.3.0}/vectorphile/core/__init__.py +0 -0
- {vectorphile-0.2.0 → vectorphile-0.3.0}/vectorphile/core/tensor.py +0 -0
- {vectorphile-0.2.0 → vectorphile-0.3.0}/vectorphile/data/frame.py +0 -0
- {vectorphile-0.2.0 → vectorphile-0.3.0}/vectorphile/data/groupby.py +0 -0
- {vectorphile-0.2.0 → vectorphile-0.3.0}/vectorphile/data/index.py +0 -0
- {vectorphile-0.2.0 → vectorphile-0.3.0}/vectorphile/data/series.py +0 -0
- {vectorphile-0.2.0 → vectorphile-0.3.0}/vectorphile/fft/__init__.py +0 -0
- {vectorphile-0.2.0 → vectorphile-0.3.0}/vectorphile/hub/__init__.py +0 -0
- {vectorphile-0.2.0 → vectorphile-0.3.0}/vectorphile/integrate/__init__.py +0 -0
- {vectorphile-0.2.0 → vectorphile-0.3.0}/vectorphile/interpolate/__init__.py +0 -0
- {vectorphile-0.2.0 → vectorphile-0.3.0}/vectorphile/io/__init__.py +0 -0
- {vectorphile-0.2.0 → vectorphile-0.3.0}/vectorphile/linalg/__init__.py +0 -0
- {vectorphile-0.2.0 → vectorphile-0.3.0}/vectorphile/ml/__init__.py +0 -0
- {vectorphile-0.2.0 → vectorphile-0.3.0}/vectorphile/ml/anomaly.py +0 -0
- {vectorphile-0.2.0 → vectorphile-0.3.0}/vectorphile/ml/boost/__init__.py +0 -0
- {vectorphile-0.2.0 → vectorphile-0.3.0}/vectorphile/ml/catboost_impl.py +0 -0
- {vectorphile-0.2.0 → vectorphile-0.3.0}/vectorphile/ml/cluster.py +0 -0
- {vectorphile-0.2.0 → vectorphile-0.3.0}/vectorphile/ml/decomposition.py +0 -0
- {vectorphile-0.2.0 → vectorphile-0.3.0}/vectorphile/ml/ensemble.py +0 -0
- {vectorphile-0.2.0 → vectorphile-0.3.0}/vectorphile/ml/ensemble_extra.py +0 -0
- {vectorphile-0.2.0 → vectorphile-0.3.0}/vectorphile/ml/feature_selection.py +0 -0
- {vectorphile-0.2.0 → vectorphile-0.3.0}/vectorphile/ml/lgbm.py +0 -0
- {vectorphile-0.2.0 → vectorphile-0.3.0}/vectorphile/ml/linear.py +0 -0
- {vectorphile-0.2.0 → vectorphile-0.3.0}/vectorphile/ml/manifold.py +0 -0
- {vectorphile-0.2.0 → vectorphile-0.3.0}/vectorphile/ml/metrics.py +0 -0
- {vectorphile-0.2.0 → vectorphile-0.3.0}/vectorphile/ml/model_selection.py +0 -0
- {vectorphile-0.2.0 → vectorphile-0.3.0}/vectorphile/ml/naive_bayes.py +0 -0
- {vectorphile-0.2.0 → vectorphile-0.3.0}/vectorphile/ml/neighbors.py +0 -0
- {vectorphile-0.2.0 → vectorphile-0.3.0}/vectorphile/ml/pipeline.py +0 -0
- {vectorphile-0.2.0 → vectorphile-0.3.0}/vectorphile/ml/preprocessing.py +0 -0
- {vectorphile-0.2.0 → vectorphile-0.3.0}/vectorphile/ml/svm.py +0 -0
- {vectorphile-0.2.0 → vectorphile-0.3.0}/vectorphile/ml/tree.py +0 -0
- {vectorphile-0.2.0 → vectorphile-0.3.0}/vectorphile/ndimage/__init__.py +0 -0
- {vectorphile-0.2.0 → vectorphile-0.3.0}/vectorphile/nn/attention.py +0 -0
- {vectorphile-0.2.0 → vectorphile-0.3.0}/vectorphile/nn/container.py +0 -0
- {vectorphile-0.2.0 → vectorphile-0.3.0}/vectorphile/nn/functional.py +0 -0
- {vectorphile-0.2.0 → vectorphile-0.3.0}/vectorphile/nn/init.py +0 -0
- {vectorphile-0.2.0 → vectorphile-0.3.0}/vectorphile/nn/losses.py +0 -0
- {vectorphile-0.2.0 → vectorphile-0.3.0}/vectorphile/nn/module.py +0 -0
- {vectorphile-0.2.0 → vectorphile-0.3.0}/vectorphile/nn/norm.py +0 -0
- {vectorphile-0.2.0 → vectorphile-0.3.0}/vectorphile/nn/pooling.py +0 -0
- {vectorphile-0.2.0 → vectorphile-0.3.0}/vectorphile/nn/recurrent.py +0 -0
- {vectorphile-0.2.0 → vectorphile-0.3.0}/vectorphile/nn/sequential.py +0 -0
- {vectorphile-0.2.0 → vectorphile-0.3.0}/vectorphile/nn/utils.py +0 -0
- {vectorphile-0.2.0 → vectorphile-0.3.0}/vectorphile/optim/__init__.py +0 -0
- {vectorphile-0.2.0 → vectorphile-0.3.0}/vectorphile/optim/adagrad.py +0 -0
- {vectorphile-0.2.0 → vectorphile-0.3.0}/vectorphile/optim/adam.py +0 -0
- {vectorphile-0.2.0 → vectorphile-0.3.0}/vectorphile/optim/lr_scheduler.py +0 -0
- {vectorphile-0.2.0 → vectorphile-0.3.0}/vectorphile/optim/optimizer.py +0 -0
- {vectorphile-0.2.0 → vectorphile-0.3.0}/vectorphile/optim/rmsprop.py +0 -0
- {vectorphile-0.2.0 → vectorphile-0.3.0}/vectorphile/optim/sgd.py +0 -0
- {vectorphile-0.2.0 → vectorphile-0.3.0}/vectorphile/optimize/__init__.py +0 -0
- {vectorphile-0.2.0 → vectorphile-0.3.0}/vectorphile/polynomial/__init__.py +0 -0
- {vectorphile-0.2.0 → vectorphile-0.3.0}/vectorphile/quantization/__init__.py +0 -0
- {vectorphile-0.2.0 → vectorphile-0.3.0}/vectorphile/random/__init__.py +0 -0
- {vectorphile-0.2.0 → vectorphile-0.3.0}/vectorphile/signal/__init__.py +0 -0
- {vectorphile-0.2.0 → vectorphile-0.3.0}/vectorphile/sparse/__init__.py +0 -0
- {vectorphile-0.2.0 → vectorphile-0.3.0}/vectorphile/spatial/__init__.py +0 -0
- {vectorphile-0.2.0 → vectorphile-0.3.0}/vectorphile/stats/__init__.py +0 -0
- {vectorphile-0.2.0 → vectorphile-0.3.0}/vectorphile/transforms/__init__.py +0 -0
- {vectorphile-0.2.0 → vectorphile-0.3.0}/vectorphile/utils/__init__.py +0 -0
- {vectorphile-0.2.0 → vectorphile-0.3.0}/vectorphile/utils/data/__init__.py +0 -0
- {vectorphile-0.2.0 → vectorphile-0.3.0}/vectorphile/utils/data/dataloader.py +0 -0
- {vectorphile-0.2.0 → vectorphile-0.3.0}/vectorphile/utils/data/dataset.py +0 -0
- {vectorphile-0.2.0 → vectorphile-0.3.0}/vectorphile/viz/__init__.py +0 -0
- {vectorphile-0.2.0 → vectorphile-0.3.0}/vectorphile.egg-info/dependency_links.txt +0 -0
- {vectorphile-0.2.0 → vectorphile-0.3.0}/vectorphile.egg-info/top_level.txt +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: vectorphile
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.3.0
|
|
4
4
|
Summary: Unified ML/DL Python Library — replaces PyTorch + scikit-learn + NumPy + Pandas + SciPy + XGBoost + LightGBM + CatBoost + JAX + Matplotlib + Seaborn
|
|
5
5
|
Home-page: https://github.com/vectorphile/vectorphile
|
|
6
6
|
Author: vectorphile
|
|
@@ -19,12 +19,37 @@ Requires-Dist: h5py>=3.8.0; extra == "io"
|
|
|
19
19
|
Requires-Dist: netCDF4>=1.6.0; extra == "io"
|
|
20
20
|
Provides-Extra: viz
|
|
21
21
|
Requires-Dist: matplotlib>=3.7.0; extra == "viz"
|
|
22
|
+
Provides-Extra: cuda
|
|
23
|
+
Requires-Dist: cupy-cuda12x>=12.0.0; extra == "cuda"
|
|
24
|
+
Provides-Extra: numba
|
|
25
|
+
Requires-Dist: numba>=0.57.0; extra == "numba"
|
|
26
|
+
Provides-Extra: triton
|
|
27
|
+
Requires-Dist: triton>=2.1.0; extra == "triton"
|
|
28
|
+
Provides-Extra: rl
|
|
29
|
+
Requires-Dist: gymnasium>=0.29.0; extra == "rl"
|
|
30
|
+
Provides-Extra: tokenizers
|
|
31
|
+
Requires-Dist: tokenizers>=0.15.0; extra == "tokenizers"
|
|
32
|
+
Provides-Extra: onnx
|
|
33
|
+
Requires-Dist: onnx>=1.14.0; extra == "onnx"
|
|
34
|
+
Requires-Dist: onnxruntime>=1.16.0; extra == "onnx"
|
|
35
|
+
Provides-Extra: coreml
|
|
36
|
+
Requires-Dist: coremltools>=7.0; extra == "coreml"
|
|
37
|
+
Provides-Extra: pretrained
|
|
38
|
+
Requires-Dist: huggingface-hub>=0.20.0; extra == "pretrained"
|
|
39
|
+
Requires-Dist: safetensors>=0.4.0; extra == "pretrained"
|
|
22
40
|
Provides-Extra: full
|
|
23
41
|
Requires-Dist: scipy>=1.10.0; extra == "full"
|
|
24
42
|
Requires-Dist: pyarrow>=12.0.0; extra == "full"
|
|
25
43
|
Requires-Dist: h5py>=3.8.0; extra == "full"
|
|
26
44
|
Requires-Dist: netCDF4>=1.6.0; extra == "full"
|
|
27
45
|
Requires-Dist: matplotlib>=3.7.0; extra == "full"
|
|
46
|
+
Requires-Dist: numba>=0.57.0; extra == "full"
|
|
47
|
+
Requires-Dist: triton>=2.1.0; extra == "full"
|
|
48
|
+
Requires-Dist: gymnasium>=0.29.0; extra == "full"
|
|
49
|
+
Requires-Dist: onnx>=1.14.0; extra == "full"
|
|
50
|
+
Requires-Dist: onnxruntime>=1.16.0; extra == "full"
|
|
51
|
+
Requires-Dist: huggingface-hub>=0.20.0; extra == "full"
|
|
52
|
+
Requires-Dist: safetensors>=0.4.0; extra == "full"
|
|
28
53
|
Provides-Extra: dev
|
|
29
54
|
Requires-Dist: pytest>=7.0.0; extra == "dev"
|
|
30
55
|
Requires-Dist: pytest-cov>=4.0.0; extra == "dev"
|
|
@@ -101,6 +126,26 @@ This is not a wrapper. Every module is a ground-up implementation, designed with
|
|
|
101
126
|
| `vp.quantization` | quantize (INT8/INT4/FP16), QuantizedModel, MinMaxCalibrator, magnitude_prune |
|
|
102
127
|
| `vp.amp` | autocast, GradScaler (Phase 2: real CUDA fp16/bf16) |
|
|
103
128
|
| `vp.utils.data` | `Dataset`, `TensorDataset`, `DataLoader` with batching and shuffling |
|
|
129
|
+
| `vp.backend` | 5-tier dispatch: Triton JIT → PyTorch CUDA → Numba CUDA → im2col+BLAS → NumPy |
|
|
130
|
+
| `vp.tokenizers` | BPE, WordPiece, SentencePiece, CharacterTokenizer — zero external deps |
|
|
131
|
+
| `vp.distributed` | DataParallel, DDP, GradientAccumulator, MixedPrecisionTrainer |
|
|
132
|
+
| `vp.export` | ONNX, TorchScript, CoreML, SavedModel, GGUF (Q4_0/Q8_0), benchmark |
|
|
133
|
+
| `vp.rl` | DQN/DoubleDQN/DuelingDQN, REINFORCE, A2C, PPO, SAC, TD3, PER, environments |
|
|
134
|
+
| `vp.pretrained` | HuggingFace Hub download, safetensors parser, weight mappers for GPT-2/BERT/ViT/LLaMA |
|
|
135
|
+
| `vp.metrics` | 25+ metrics: accuracy, BLEU, ROUGE-L, WER, NDCG, ECE, silhouette, ARI, NMI |
|
|
136
|
+
| `vp.callbacks` | EarlyStopping, ModelCheckpoint, ReduceLROnPlateau, TensorBoardLogger, WandBLogger, LRFinder |
|
|
137
|
+
| `vp.trainer` | PyTorch Lightning-style `Trainer` + `TrainableModel` base class |
|
|
138
|
+
| `vp.text` | beam_search, nucleus_sampling, contrastive_search, speculative_decoding, chat templates, `TextGenerationPipeline` |
|
|
139
|
+
| `vp.vision` | Compose, Resize, RandomCrop, ColorJitter, AugMix, ToTensor, Normalize, make_grid, extract_features |
|
|
140
|
+
| `vp.data.datasets` | MNIST, CIFAR-10, TinyShakespeare, IMDb + DataLoader, samplers, random_split |
|
|
141
|
+
| `vp.nn.lr_schedulers` | StepLR, CosineAnnealingLR, OneCycleLR, WarmupCosineDecay, PolynomialLR, get_scheduler |
|
|
142
|
+
| `vp.nn.einops` | rearrange, reduce, repeat, pack, unpack, EinMix |
|
|
143
|
+
| `vp.nn.hooks` | register_forward_hook, register_backward_hook, FeatureExtractor, GradientRecorder |
|
|
144
|
+
| `vp.autograd` | Reverse-mode + second-order autodiff, `jacobian`, `hessian`, `vmap`, `checkpoint` |
|
|
145
|
+
| `vp.nn.flash_attention` | Flash Attention 2 (tiled, O(N) memory), variable-length sequences |
|
|
146
|
+
| `vp.nn.qat` | Quantization-aware training (straight-through estimator), prepare_qat / convert_qat |
|
|
147
|
+
| `vp.optim` (advanced) | Lion, Sophia, Adan, CAME, Prodigy, ScheduleFreeAdamW |
|
|
148
|
+
| `vp.nn.architectures` | CNN zoo (VGG/ResNet/DenseNet/EfficientNet), ViT/DeiT, Mamba/S4, VAE/DDPM/DCGAN, U-Net, GCN/GAT/GIN |
|
|
104
149
|
|
|
105
150
|
---
|
|
106
151
|
|
|
@@ -451,26 +496,40 @@ vectorphile/
|
|
|
451
496
|
|
|
452
497
|
## Roadmap
|
|
453
498
|
|
|
454
|
-
###
|
|
499
|
+
### v0.1–0.2 — Core (complete)
|
|
455
500
|
- Full tensor API with reverse-mode autodiff
|
|
456
|
-
- Complete neural network layer set
|
|
457
|
-
- All classical ML algorithms
|
|
458
|
-
- DataFrame
|
|
501
|
+
- Complete neural network layer set (Linear, Conv, RNN, Transformer, Norm)
|
|
502
|
+
- All classical ML algorithms (trees, forests, XGBoost, clustering, PCA)
|
|
503
|
+
- DataFrame, GroupBy, merge/pivot
|
|
459
504
|
- Linear algebra, statistics, FFT, signal, sparse, optimization
|
|
460
505
|
|
|
461
|
-
###
|
|
462
|
-
-
|
|
463
|
-
-
|
|
464
|
-
-
|
|
465
|
-
-
|
|
466
|
-
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
-
|
|
473
|
-
-
|
|
506
|
+
### v0.3.0 — Production completeness (complete)
|
|
507
|
+
- 5-tier CUDA backend dispatcher (Triton → PyTorch → Numba → im2col → NumPy)
|
|
508
|
+
- BPE / WordPiece / SentencePiece tokenizers from scratch
|
|
509
|
+
- Distributed training: DataParallel, DDP, MixedPrecision
|
|
510
|
+
- Model export: ONNX, TorchScript, CoreML
|
|
511
|
+
- Reinforcement learning: DQN, PPO, SAC, TD3
|
|
512
|
+
- Pretrained weights hub (HuggingFace download, safetensors parser)
|
|
513
|
+
- Architecture zoo: CNN/ResNet/EfficientNet, ViT/DeiT, Mamba/S4, VAE/DDPM, U-Net, GCN/GAT/GIN
|
|
514
|
+
- Flash Attention, QAT, advanced optimizers (Lion, Sophia, Adan, Prodigy)
|
|
515
|
+
|
|
516
|
+
### v0.4.0 — Ecosystem parity (complete)
|
|
517
|
+
- GGUF binary format reader/writer (Q4_0, Q8_0 quantization)
|
|
518
|
+
- 25+ evaluation metrics (BLEU, ROUGE, WER, ECE, NDCG, silhouette)
|
|
519
|
+
- 10 training callbacks (EarlyStopping, TensorBoardLogger, WandBLogger, LRFinder)
|
|
520
|
+
- Keras/Lightning-style `Trainer` + `TrainableModel` base class
|
|
521
|
+
- 11 LR schedulers (`get_scheduler` factory, WarmupCosineDecay, OneCycleLR)
|
|
522
|
+
- einops-compatible `rearrange`/`reduce`/`repeat`/`pack`/`unpack`/`EinMix`
|
|
523
|
+
- Forward/backward hooks, `FeatureExtractor`, `GradientRecorder`
|
|
524
|
+
- Text generation: beam search, nucleus, contrastive, speculative decoding, chat templates
|
|
525
|
+
- Vision transforms: Compose/Resize/ColorJitter/AugMix/Normalize + ImageNet defaults
|
|
526
|
+
- Datasets: MNIST, CIFAR-10, TinyShakespeare, IMDb + DataLoader/samplers
|
|
527
|
+
|
|
528
|
+
### v0.5.0 — Planned
|
|
529
|
+
- Real CUDA C extensions (cuBLAS GEMM, cuDNN conv)
|
|
530
|
+
- fp16 / bf16 automatic mixed precision on GPU
|
|
531
|
+
- Triton fused kernels in production paths
|
|
532
|
+
- Multi-node distributed via NCCL
|
|
474
533
|
|
|
475
534
|
---
|
|
476
535
|
|
|
@@ -1,39 +1,3 @@
|
|
|
1
|
-
Metadata-Version: 2.4
|
|
2
|
-
Name: vectorphile
|
|
3
|
-
Version: 0.2.0
|
|
4
|
-
Summary: Unified ML/DL Python Library — replaces PyTorch + scikit-learn + NumPy + Pandas + SciPy + XGBoost + LightGBM + CatBoost + JAX + Matplotlib + Seaborn
|
|
5
|
-
Home-page: https://github.com/vectorphile/vectorphile
|
|
6
|
-
Author: vectorphile
|
|
7
|
-
Author-email: vectorphile <saadsalmanakram1@gmail.com>
|
|
8
|
-
License: Apache-2.0
|
|
9
|
-
Project-URL: Homepage, https://github.com/vectorphile/vectorphile
|
|
10
|
-
Project-URL: Bug Tracker, https://github.com/vectorphile/vectorphile/issues
|
|
11
|
-
Requires-Python: >=3.9
|
|
12
|
-
Description-Content-Type: text/markdown
|
|
13
|
-
License-File: LICENSE
|
|
14
|
-
Requires-Dist: numpy>=1.24.0
|
|
15
|
-
Requires-Dist: scipy>=1.10.0
|
|
16
|
-
Provides-Extra: io
|
|
17
|
-
Requires-Dist: pyarrow>=12.0.0; extra == "io"
|
|
18
|
-
Requires-Dist: h5py>=3.8.0; extra == "io"
|
|
19
|
-
Requires-Dist: netCDF4>=1.6.0; extra == "io"
|
|
20
|
-
Provides-Extra: viz
|
|
21
|
-
Requires-Dist: matplotlib>=3.7.0; extra == "viz"
|
|
22
|
-
Provides-Extra: full
|
|
23
|
-
Requires-Dist: scipy>=1.10.0; extra == "full"
|
|
24
|
-
Requires-Dist: pyarrow>=12.0.0; extra == "full"
|
|
25
|
-
Requires-Dist: h5py>=3.8.0; extra == "full"
|
|
26
|
-
Requires-Dist: netCDF4>=1.6.0; extra == "full"
|
|
27
|
-
Requires-Dist: matplotlib>=3.7.0; extra == "full"
|
|
28
|
-
Provides-Extra: dev
|
|
29
|
-
Requires-Dist: pytest>=7.0.0; extra == "dev"
|
|
30
|
-
Requires-Dist: pytest-cov>=4.0.0; extra == "dev"
|
|
31
|
-
Requires-Dist: ruff>=0.1.0; extra == "dev"
|
|
32
|
-
Dynamic: author
|
|
33
|
-
Dynamic: home-page
|
|
34
|
-
Dynamic: license-file
|
|
35
|
-
Dynamic: requires-python
|
|
36
|
-
|
|
37
1
|
# vectorphile
|
|
38
2
|
|
|
39
3
|
> **A unified, research-first computational intelligence library for Python.**
|
|
@@ -101,6 +65,26 @@ This is not a wrapper. Every module is a ground-up implementation, designed with
|
|
|
101
65
|
| `vp.quantization` | quantize (INT8/INT4/FP16), QuantizedModel, MinMaxCalibrator, magnitude_prune |
|
|
102
66
|
| `vp.amp` | autocast, GradScaler (Phase 2: real CUDA fp16/bf16) |
|
|
103
67
|
| `vp.utils.data` | `Dataset`, `TensorDataset`, `DataLoader` with batching and shuffling |
|
|
68
|
+
| `vp.backend` | 5-tier dispatch: Triton JIT → PyTorch CUDA → Numba CUDA → im2col+BLAS → NumPy |
|
|
69
|
+
| `vp.tokenizers` | BPE, WordPiece, SentencePiece, CharacterTokenizer — zero external deps |
|
|
70
|
+
| `vp.distributed` | DataParallel, DDP, GradientAccumulator, MixedPrecisionTrainer |
|
|
71
|
+
| `vp.export` | ONNX, TorchScript, CoreML, SavedModel, GGUF (Q4_0/Q8_0), benchmark |
|
|
72
|
+
| `vp.rl` | DQN/DoubleDQN/DuelingDQN, REINFORCE, A2C, PPO, SAC, TD3, PER, environments |
|
|
73
|
+
| `vp.pretrained` | HuggingFace Hub download, safetensors parser, weight mappers for GPT-2/BERT/ViT/LLaMA |
|
|
74
|
+
| `vp.metrics` | 25+ metrics: accuracy, BLEU, ROUGE-L, WER, NDCG, ECE, silhouette, ARI, NMI |
|
|
75
|
+
| `vp.callbacks` | EarlyStopping, ModelCheckpoint, ReduceLROnPlateau, TensorBoardLogger, WandBLogger, LRFinder |
|
|
76
|
+
| `vp.trainer` | PyTorch Lightning-style `Trainer` + `TrainableModel` base class |
|
|
77
|
+
| `vp.text` | beam_search, nucleus_sampling, contrastive_search, speculative_decoding, chat templates, `TextGenerationPipeline` |
|
|
78
|
+
| `vp.vision` | Compose, Resize, RandomCrop, ColorJitter, AugMix, ToTensor, Normalize, make_grid, extract_features |
|
|
79
|
+
| `vp.data.datasets` | MNIST, CIFAR-10, TinyShakespeare, IMDb + DataLoader, samplers, random_split |
|
|
80
|
+
| `vp.nn.lr_schedulers` | StepLR, CosineAnnealingLR, OneCycleLR, WarmupCosineDecay, PolynomialLR, get_scheduler |
|
|
81
|
+
| `vp.nn.einops` | rearrange, reduce, repeat, pack, unpack, EinMix |
|
|
82
|
+
| `vp.nn.hooks` | register_forward_hook, register_backward_hook, FeatureExtractor, GradientRecorder |
|
|
83
|
+
| `vp.autograd` | Reverse-mode + second-order autodiff, `jacobian`, `hessian`, `vmap`, `checkpoint` |
|
|
84
|
+
| `vp.nn.flash_attention` | Flash Attention 2 (tiled, O(N) memory), variable-length sequences |
|
|
85
|
+
| `vp.nn.qat` | Quantization-aware training (straight-through estimator), prepare_qat / convert_qat |
|
|
86
|
+
| `vp.optim` (advanced) | Lion, Sophia, Adan, CAME, Prodigy, ScheduleFreeAdamW |
|
|
87
|
+
| `vp.nn.architectures` | CNN zoo (VGG/ResNet/DenseNet/EfficientNet), ViT/DeiT, Mamba/S4, VAE/DDPM/DCGAN, U-Net, GCN/GAT/GIN |
|
|
104
88
|
|
|
105
89
|
---
|
|
106
90
|
|
|
@@ -451,26 +435,40 @@ vectorphile/
|
|
|
451
435
|
|
|
452
436
|
## Roadmap
|
|
453
437
|
|
|
454
|
-
###
|
|
438
|
+
### v0.1–0.2 — Core (complete)
|
|
455
439
|
- Full tensor API with reverse-mode autodiff
|
|
456
|
-
- Complete neural network layer set
|
|
457
|
-
- All classical ML algorithms
|
|
458
|
-
- DataFrame
|
|
440
|
+
- Complete neural network layer set (Linear, Conv, RNN, Transformer, Norm)
|
|
441
|
+
- All classical ML algorithms (trees, forests, XGBoost, clustering, PCA)
|
|
442
|
+
- DataFrame, GroupBy, merge/pivot
|
|
459
443
|
- Linear algebra, statistics, FFT, signal, sparse, optimization
|
|
460
444
|
|
|
461
|
-
###
|
|
462
|
-
-
|
|
463
|
-
-
|
|
464
|
-
-
|
|
465
|
-
-
|
|
466
|
-
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
-
|
|
473
|
-
-
|
|
445
|
+
### v0.3.0 — Production completeness (complete)
|
|
446
|
+
- 5-tier CUDA backend dispatcher (Triton → PyTorch → Numba → im2col → NumPy)
|
|
447
|
+
- BPE / WordPiece / SentencePiece tokenizers from scratch
|
|
448
|
+
- Distributed training: DataParallel, DDP, MixedPrecision
|
|
449
|
+
- Model export: ONNX, TorchScript, CoreML
|
|
450
|
+
- Reinforcement learning: DQN, PPO, SAC, TD3
|
|
451
|
+
- Pretrained weights hub (HuggingFace download, safetensors parser)
|
|
452
|
+
- Architecture zoo: CNN/ResNet/EfficientNet, ViT/DeiT, Mamba/S4, VAE/DDPM, U-Net, GCN/GAT/GIN
|
|
453
|
+
- Flash Attention, QAT, advanced optimizers (Lion, Sophia, Adan, Prodigy)
|
|
454
|
+
|
|
455
|
+
### v0.4.0 — Ecosystem parity (complete)
|
|
456
|
+
- GGUF binary format reader/writer (Q4_0, Q8_0 quantization)
|
|
457
|
+
- 25+ evaluation metrics (BLEU, ROUGE, WER, ECE, NDCG, silhouette)
|
|
458
|
+
- 10 training callbacks (EarlyStopping, TensorBoardLogger, WandBLogger, LRFinder)
|
|
459
|
+
- Keras/Lightning-style `Trainer` + `TrainableModel` base class
|
|
460
|
+
- 11 LR schedulers (`get_scheduler` factory, WarmupCosineDecay, OneCycleLR)
|
|
461
|
+
- einops-compatible `rearrange`/`reduce`/`repeat`/`pack`/`unpack`/`EinMix`
|
|
462
|
+
- Forward/backward hooks, `FeatureExtractor`, `GradientRecorder`
|
|
463
|
+
- Text generation: beam search, nucleus, contrastive, speculative decoding, chat templates
|
|
464
|
+
- Vision transforms: Compose/Resize/ColorJitter/AugMix/Normalize + ImageNet defaults
|
|
465
|
+
- Datasets: MNIST, CIFAR-10, TinyShakespeare, IMDb + DataLoader/samplers
|
|
466
|
+
|
|
467
|
+
### v0.5.0 — Planned
|
|
468
|
+
- Real CUDA C extensions (cuBLAS GEMM, cuDNN conv)
|
|
469
|
+
- fp16 / bf16 automatic mixed precision on GPU
|
|
470
|
+
- Triton fused kernels in production paths
|
|
471
|
+
- Multi-node distributed via NCCL
|
|
474
472
|
|
|
475
473
|
---
|
|
476
474
|
|
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "vectorphile"
|
|
7
|
-
version = "0.
|
|
7
|
+
version = "0.3.0"
|
|
8
8
|
description = "Unified ML/DL Python Library — replaces PyTorch + scikit-learn + NumPy + Pandas + SciPy + XGBoost + LightGBM + CatBoost + JAX + Matplotlib + Seaborn"
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
license = { text = "Apache-2.0" }
|
|
@@ -18,12 +18,35 @@ dependencies = [
|
|
|
18
18
|
[project.optional-dependencies]
|
|
19
19
|
io = ["pyarrow>=12.0.0", "h5py>=3.8.0", "netCDF4>=1.6.0"]
|
|
20
20
|
viz = ["matplotlib>=3.7.0"]
|
|
21
|
+
# GPU acceleration via CuPy (pick the right CUDA variant for your driver)
|
|
22
|
+
cuda = ["cupy-cuda12x>=12.0.0"]
|
|
23
|
+
# Numba CUDA kernels — custom GPU kernels, no PyTorch required
|
|
24
|
+
numba = ["numba>=0.57.0"]
|
|
25
|
+
# OpenAI Triton fused kernels — maximum GPU throughput (requires torch + CUDA)
|
|
26
|
+
triton = ["triton>=2.1.0"]
|
|
27
|
+
# Reinforcement learning extras (compatible environment wrappers)
|
|
28
|
+
rl = ["gymnasium>=0.29.0"]
|
|
29
|
+
# Tokenizer performance (optional C extension for BPE)
|
|
30
|
+
tokenizers = ["tokenizers>=0.15.0"]
|
|
31
|
+
# ONNX export and runtime
|
|
32
|
+
onnx = ["onnx>=1.14.0", "onnxruntime>=1.16.0"]
|
|
33
|
+
# CoreML export (macOS)
|
|
34
|
+
coreml = ["coremltools>=7.0"]
|
|
35
|
+
# Pretrained model hub (huggingface-hub is optional — urllib used by default)
|
|
36
|
+
pretrained = ["huggingface-hub>=0.20.0", "safetensors>=0.4.0"]
|
|
21
37
|
full = [
|
|
22
38
|
"scipy>=1.10.0",
|
|
23
39
|
"pyarrow>=12.0.0",
|
|
24
40
|
"h5py>=3.8.0",
|
|
25
41
|
"netCDF4>=1.6.0",
|
|
26
42
|
"matplotlib>=3.7.0",
|
|
43
|
+
"numba>=0.57.0",
|
|
44
|
+
"triton>=2.1.0",
|
|
45
|
+
"gymnasium>=0.29.0",
|
|
46
|
+
"onnx>=1.14.0",
|
|
47
|
+
"onnxruntime>=1.16.0",
|
|
48
|
+
"huggingface-hub>=0.20.0",
|
|
49
|
+
"safetensors>=0.4.0",
|
|
27
50
|
]
|
|
28
51
|
dev = ["pytest>=7.0.0", "pytest-cov>=4.0.0", "ruff>=0.1.0"]
|
|
29
52
|
|
|
@@ -28,7 +28,7 @@ Quick start:
|
|
|
28
28
|
df.groupby('category').mean()
|
|
29
29
|
"""
|
|
30
30
|
|
|
31
|
-
__version__ = '0.
|
|
31
|
+
__version__ = '0.3.0'
|
|
32
32
|
__author__ = 'vectorphile'
|
|
33
33
|
__license__ = 'Apache-2.0'
|
|
34
34
|
|
|
@@ -107,6 +107,22 @@ from vectorphile import quantization
|
|
|
107
107
|
from vectorphile import utils
|
|
108
108
|
from vectorphile.utils.data import Dataset, TensorDataset, DataLoader
|
|
109
109
|
|
|
110
|
+
# ── New modules (v0.3.0 — production completeness) ───────────────────────────
|
|
111
|
+
from vectorphile import backend
|
|
112
|
+
from vectorphile import tokenizers
|
|
113
|
+
from vectorphile import distributed
|
|
114
|
+
from vectorphile import export
|
|
115
|
+
from vectorphile import rl
|
|
116
|
+
from vectorphile import pretrained
|
|
117
|
+
|
|
118
|
+
# ── New modules (v0.4.0 — full ecosystem parity) ─────────────────────────────
|
|
119
|
+
from vectorphile import metrics
|
|
120
|
+
from vectorphile import callbacks
|
|
121
|
+
from vectorphile import trainer
|
|
122
|
+
from vectorphile import text
|
|
123
|
+
from vectorphile import vision
|
|
124
|
+
from vectorphile.data import datasets
|
|
125
|
+
|
|
110
126
|
# ── Convenience re-exports ───────────────────────────────────────────────────
|
|
111
127
|
from vectorphile.data import DataFrame, Series, read_csv, read_json
|
|
112
128
|
from vectorphile.ml import (
|
|
@@ -157,6 +173,8 @@ __all__ = [
|
|
|
157
173
|
'data', 'ml', 'utils',
|
|
158
174
|
'integrate', 'interpolate', 'spatial', 'ndimage', 'transforms',
|
|
159
175
|
'polynomial', 'io', 'ma', 'viz', 'hub', 'quantization',
|
|
176
|
+
'backend', 'tokenizers', 'distributed', 'export', 'rl', 'pretrained',
|
|
177
|
+
'metrics', 'callbacks', 'trainer', 'text', 'vision', 'datasets',
|
|
160
178
|
'Dataset', 'TensorDataset', 'DataLoader',
|
|
161
179
|
'DataFrame', 'Series', 'read_csv', 'read_json',
|
|
162
180
|
'LinearRegression', 'Ridge', 'Lasso', 'ElasticNet', 'LogisticRegression',
|
|
@@ -4,10 +4,16 @@ from vectorphile.autograd.engine import (
|
|
|
4
4
|
ExpBackward, LogBackward, SqrtBackward, SumBackward, MeanBackward,
|
|
5
5
|
ReLUBackward, SigmoidBackward, TanhBackward,
|
|
6
6
|
)
|
|
7
|
+
from vectorphile.autograd.functional import (
|
|
8
|
+
grad, jacobian, hessian, vmap, checkpoint, enable_grad,
|
|
9
|
+
zeros, ones, randn, cat, stack,
|
|
10
|
+
)
|
|
7
11
|
|
|
8
12
|
__all__ = [
|
|
9
|
-
'backward', 'no_grad',
|
|
13
|
+
'backward', 'no_grad', 'enable_grad',
|
|
10
14
|
'AddBackward', 'SubBackward', 'MulBackward', 'DivBackward', 'MatMulBackward',
|
|
11
15
|
'ExpBackward', 'LogBackward', 'SqrtBackward', 'SumBackward', 'MeanBackward',
|
|
12
16
|
'ReLUBackward', 'SigmoidBackward', 'TanhBackward',
|
|
17
|
+
'grad', 'jacobian', 'hessian', 'vmap', 'checkpoint',
|
|
18
|
+
'zeros', 'ones', 'randn', 'cat', 'stack',
|
|
13
19
|
]
|
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
"""Higher-order autograd utilities: grad, jacobian, hessian, vmap, checkpoint."""
|
|
2
|
+
from __future__ import annotations
|
|
3
|
+
import numpy as np
|
|
4
|
+
from contextlib import contextmanager
|
|
5
|
+
from typing import Callable, List, Optional
|
|
6
|
+
|
|
7
|
+
_GRAD_ENABLED = True
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
@contextmanager
|
|
11
|
+
def enable_grad():
|
|
12
|
+
"""Force gradient tracking inside a no_grad context."""
|
|
13
|
+
from vectorphile.autograd.engine import no_grad as _no_grad
|
|
14
|
+
prev = _no_grad._enabled
|
|
15
|
+
_no_grad._enabled = True
|
|
16
|
+
try:
|
|
17
|
+
yield
|
|
18
|
+
finally:
|
|
19
|
+
_no_grad._enabled = prev
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
def grad(f: Callable, x) -> 'Tensor':
|
|
23
|
+
"""Return gradient of scalar f(x) w.r.t. x.
|
|
24
|
+
|
|
25
|
+
Args:
|
|
26
|
+
f: callable Tensor -> scalar Tensor
|
|
27
|
+
x: input Tensor
|
|
28
|
+
Returns:
|
|
29
|
+
gradient Tensor with same shape as x
|
|
30
|
+
"""
|
|
31
|
+
from vectorphile.core.tensor import Tensor as CoreTensor
|
|
32
|
+
x.requires_grad = True
|
|
33
|
+
x.grad = None
|
|
34
|
+
out = f(x)
|
|
35
|
+
out.backward(CoreTensor(np.ones_like(out._data)))
|
|
36
|
+
return CoreTensor(x.grad._data.copy() if x.grad is not None else np.zeros_like(x._data))
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
def jacobian(f: Callable, x) -> np.ndarray:
|
|
40
|
+
"""Full Jacobian of f(x) w.r.t. x via repeated backward passes.
|
|
41
|
+
|
|
42
|
+
Args:
|
|
43
|
+
f: callable Tensor[n] -> Tensor[m]
|
|
44
|
+
x: 1-D input Tensor
|
|
45
|
+
Returns:
|
|
46
|
+
J: np.ndarray shape (m, n)
|
|
47
|
+
"""
|
|
48
|
+
from vectorphile.core.tensor import Tensor as CoreTensor
|
|
49
|
+
x_np = x._data.flatten()
|
|
50
|
+
n = len(x_np)
|
|
51
|
+
out0_data = f(CoreTensor(x_np))._data.flatten()
|
|
52
|
+
m = len(out0_data)
|
|
53
|
+
J = np.zeros((m, n), dtype=np.float32)
|
|
54
|
+
for i in range(m):
|
|
55
|
+
xi = CoreTensor(x_np, requires_grad=True)
|
|
56
|
+
out = f(xi)
|
|
57
|
+
e = np.zeros(m, dtype=np.float32); e[i] = 1.0
|
|
58
|
+
out.backward(CoreTensor(e.reshape(out._data.shape)))
|
|
59
|
+
J[i] = xi.grad._data.flatten() if xi.grad is not None else 0
|
|
60
|
+
return J
|
|
61
|
+
|
|
62
|
+
|
|
63
|
+
def hessian(f: Callable, x) -> np.ndarray:
|
|
64
|
+
"""Hessian of scalar f(x) via central finite differences.
|
|
65
|
+
|
|
66
|
+
Args:
|
|
67
|
+
f: callable Tensor[n] -> scalar Tensor
|
|
68
|
+
x: 1-D input Tensor
|
|
69
|
+
Returns:
|
|
70
|
+
H: np.ndarray shape (n, n)
|
|
71
|
+
"""
|
|
72
|
+
from vectorphile.core.tensor import Tensor as CoreTensor
|
|
73
|
+
x_np = x._data.flatten()
|
|
74
|
+
n = len(x_np)
|
|
75
|
+
H = np.zeros((n, n), dtype=np.float32)
|
|
76
|
+
eps = 1e-4
|
|
77
|
+
for i in range(n):
|
|
78
|
+
for j in range(n):
|
|
79
|
+
def _f(v): return f(CoreTensor(v))._data.item()
|
|
80
|
+
xpp = x_np.copy(); xpp[i] += eps; xpp[j] += eps
|
|
81
|
+
xpm = x_np.copy(); xpm[i] += eps; xpm[j] -= eps
|
|
82
|
+
xmp = x_np.copy(); xmp[i] -= eps; xmp[j] += eps
|
|
83
|
+
xmm = x_np.copy(); xmm[i] -= eps; xmm[j] -= eps
|
|
84
|
+
H[i,j] = (_f(xpp) - _f(xpm) - _f(xmp) + _f(xmm)) / (4 * eps**2)
|
|
85
|
+
return H
|
|
86
|
+
|
|
87
|
+
|
|
88
|
+
def vmap(f: Callable) -> Callable:
|
|
89
|
+
"""Vectorised map: apply f to each element of a batched Tensor.
|
|
90
|
+
|
|
91
|
+
Usage::
|
|
92
|
+
|
|
93
|
+
batched = vmap(f)
|
|
94
|
+
out = batched(x) # x: (B, ...) applies f to each [i, ...]
|
|
95
|
+
|
|
96
|
+
Returns:
|
|
97
|
+
stacked Tensor of shape (B, *output_shape)
|
|
98
|
+
"""
|
|
99
|
+
def batched(x):
|
|
100
|
+
from vectorphile.core.tensor import Tensor as CoreTensor
|
|
101
|
+
results = [f(CoreTensor(x._data[i])) for i in range(x._data.shape[0])]
|
|
102
|
+
return CoreTensor(np.stack([r._data for r in results], axis=0))
|
|
103
|
+
return batched
|
|
104
|
+
|
|
105
|
+
|
|
106
|
+
def checkpoint(fn: Callable, *args):
|
|
107
|
+
"""Gradient checkpointing: recompute activations on backward instead of storing.
|
|
108
|
+
|
|
109
|
+
Saves memory at the cost of extra compute. The forward pass is run once
|
|
110
|
+
without grad to get the output; on backward it reruns with grad.
|
|
111
|
+
|
|
112
|
+
Args:
|
|
113
|
+
fn: a callable that takes Tensors and returns a Tensor
|
|
114
|
+
*args: input Tensors
|
|
115
|
+
Returns:
|
|
116
|
+
output Tensor; backward will recompute fn
|
|
117
|
+
"""
|
|
118
|
+
from vectorphile.core.tensor import Tensor as CoreTensor
|
|
119
|
+
from vectorphile.autograd.engine import no_grad as _no_grad
|
|
120
|
+
|
|
121
|
+
# Forward without grad to get output value
|
|
122
|
+
saved_enabled = _no_grad._enabled
|
|
123
|
+
_no_grad._enabled = False
|
|
124
|
+
with_no_grad_args = [CoreTensor(a._data) for a in args]
|
|
125
|
+
_no_grad._enabled = False
|
|
126
|
+
out_data = fn(*with_no_grad_args)._data.copy()
|
|
127
|
+
_no_grad._enabled = saved_enabled
|
|
128
|
+
|
|
129
|
+
out = CoreTensor(out_data, requires_grad=True)
|
|
130
|
+
|
|
131
|
+
# On backward: rerun fn with grads
|
|
132
|
+
class _CheckpointFn:
|
|
133
|
+
def __init__(self):
|
|
134
|
+
self.inputs = list(args)
|
|
135
|
+
def backward(self, grad_out):
|
|
136
|
+
fresh = [CoreTensor(a._data, requires_grad=a.requires_grad) for a in args]
|
|
137
|
+
result = fn(*fresh)
|
|
138
|
+
result.backward(grad_out)
|
|
139
|
+
return [a.grad for a in fresh]
|
|
140
|
+
|
|
141
|
+
out.grad_fn = _CheckpointFn()
|
|
142
|
+
return out
|
|
143
|
+
|
|
144
|
+
|
|
145
|
+
# ── Tensor construction helpers ───────────────────────────────────────────────
|
|
146
|
+
|
|
147
|
+
def zeros(shape, requires_grad: bool = False):
|
|
148
|
+
from vectorphile.core.tensor import Tensor as CoreTensor
|
|
149
|
+
return CoreTensor(np.zeros(shape, dtype=np.float32), requires_grad=requires_grad)
|
|
150
|
+
|
|
151
|
+
|
|
152
|
+
def ones(shape, requires_grad: bool = False):
|
|
153
|
+
from vectorphile.core.tensor import Tensor as CoreTensor
|
|
154
|
+
return CoreTensor(np.ones(shape, dtype=np.float32), requires_grad=requires_grad)
|
|
155
|
+
|
|
156
|
+
|
|
157
|
+
def randn(*shape, requires_grad: bool = False):
|
|
158
|
+
from vectorphile.core.tensor import Tensor as CoreTensor
|
|
159
|
+
return CoreTensor(np.random.randn(*shape).astype(np.float32), requires_grad=requires_grad)
|
|
160
|
+
|
|
161
|
+
|
|
162
|
+
def cat(tensors: list, axis: int = 0):
|
|
163
|
+
"""Concatenate tensors."""
|
|
164
|
+
from vectorphile.core.tensor import Tensor as CoreTensor
|
|
165
|
+
return CoreTensor(np.concatenate([t._data for t in tensors], axis=axis))
|
|
166
|
+
|
|
167
|
+
|
|
168
|
+
def stack(tensors: list, axis: int = 0):
|
|
169
|
+
"""Stack tensors along new axis."""
|
|
170
|
+
from vectorphile.core.tensor import Tensor as CoreTensor
|
|
171
|
+
return CoreTensor(np.stack([t._data for t in tensors], axis=axis))
|