Equimo 2.0.0__tar.gz → 2.1.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.
- equimo-2.1.0/CHANGELOG.md +108 -0
- equimo-2.1.0/LICENSES/tfc-t0-APACHE-2.0.txt +190 -0
- equimo-2.1.0/NOTICE +20 -0
- {equimo-2.0.0 → equimo-2.1.0}/PKG-INFO +96 -9
- {equimo-2.0.0 → equimo-2.1.0}/README.md +92 -7
- {equimo-2.0.0 → equimo-2.1.0}/docs/stability.md +20 -2
- equimo-2.1.0/docs/timeseries.md +142 -0
- {equimo-2.0.0 → equimo-2.1.0}/pyproject.toml +18 -3
- equimo-2.1.0/src/equimo/__init__.py +1 -0
- {equimo-2.0.0 → equimo-2.1.0}/src/equimo/_pretrained.py +1 -0
- equimo-2.1.0/src/equimo/audio/layers/__init__.py +25 -0
- {equimo-2.0.0 → equimo-2.1.0}/src/equimo/audio/layers/patch.py +4 -38
- {equimo-2.0.0 → equimo-2.1.0}/src/equimo/audio/models/ast.py +51 -61
- {equimo-2.0.0 → equimo-2.1.0}/src/equimo/catalog.py +3 -82
- {equimo-2.0.0 → equimo-2.1.0}/src/equimo/conversion/utils.py +0 -1
- equimo-2.1.0/src/equimo/core/_prng.py +34 -0
- equimo-2.1.0/src/equimo/core/factory.py +101 -0
- {equimo-2.0.0 → equimo-2.1.0}/src/equimo/core/implicit/deq.py +11 -5
- {equimo-2.0.0 → equimo-2.1.0}/src/equimo/core/implicit/injectors.py +10 -27
- {equimo-2.0.0 → equimo-2.1.0}/src/equimo/core/implicit/stabilizers.py +11 -28
- {equimo-2.0.0 → equimo-2.1.0}/src/equimo/core/implicit/strategies.py +16 -32
- {equimo-2.0.0 → equimo-2.1.0}/src/equimo/core/layers/__init__.py +14 -0
- equimo-2.1.0/src/equimo/core/layers/_registry.py +105 -0
- equimo-2.1.0/src/equimo/core/layers/attention.py +304 -0
- {equimo-2.0.0 → equimo-2.1.0}/src/equimo/core/layers/dropout.py +14 -47
- {equimo-2.0.0 → equimo-2.1.0}/src/equimo/core/layers/ffn.py +7 -49
- {equimo-2.0.0 → equimo-2.1.0}/src/equimo/core/layers/generic.py +88 -22
- {equimo-2.0.0 → equimo-2.1.0}/src/equimo/core/layers/mamba.py +4 -50
- {equimo-2.0.0 → equimo-2.1.0}/src/equimo/core/layers/norm.py +16 -50
- equimo-2.1.0/src/equimo/core/layers/rotary.py +254 -0
- {equimo-2.0.0 → equimo-2.1.0}/src/equimo/finetune/__init__.py +1 -100
- {equimo-2.0.0 → equimo-2.1.0}/src/equimo/finetune/audio/recipes.py +2 -3
- {equimo-2.0.0 → equimo-2.1.0}/src/equimo/finetune/config.py +0 -75
- {equimo-2.0.0 → equimo-2.1.0}/src/equimo/finetune/feature_extraction.py +6 -2
- {equimo-2.0.0 → equimo-2.1.0}/src/equimo/finetune/heads.py +23 -67
- {equimo-2.0.0 → equimo-2.1.0}/src/equimo/finetune/labels.py +2 -4
- {equimo-2.0.0 → equimo-2.1.0}/src/equimo/finetune/language/__init__.py +1 -2
- {equimo-2.0.0 → equimo-2.1.0}/src/equimo/finetune/language/recipes.py +1 -9
- {equimo-2.0.0 → equimo-2.1.0}/src/equimo/finetune/merging.py +1 -111
- {equimo-2.0.0 → equimo-2.1.0}/src/equimo/finetune/peft/__init__.py +0 -12
- equimo-2.1.0/src/equimo/finetune/peft/_common.py +99 -0
- {equimo-2.0.0 → equimo-2.1.0}/src/equimo/finetune/peft/adapters.py +47 -148
- equimo-2.1.0/src/equimo/finetune/peft/base.py +59 -0
- {equimo-2.0.0 → equimo-2.1.0}/src/equimo/finetune/peft/dora.py +6 -53
- {equimo-2.0.0 → equimo-2.1.0}/src/equimo/finetune/peft/ia3.py +7 -32
- {equimo-2.0.0 → equimo-2.1.0}/src/equimo/finetune/peft/lora.py +18 -177
- {equimo-2.0.0 → equimo-2.1.0}/src/equimo/finetune/peft/prefix.py +37 -39
- {equimo-2.0.0 → equimo-2.1.0}/src/equimo/finetune/peft/prompts.py +27 -58
- {equimo-2.0.0 → equimo-2.1.0}/src/equimo/finetune/peft/scale_shift.py +3 -11
- {equimo-2.0.0 → equimo-2.1.0}/src/equimo/finetune/peft/vera.py +5 -24
- {equimo-2.0.0 → equimo-2.1.0}/src/equimo/finetune/pooling.py +0 -14
- {equimo-2.0.0 → equimo-2.1.0}/src/equimo/finetune/recipes.py +0 -98
- {equimo-2.0.0 → equimo-2.1.0}/src/equimo/finetune/regularization.py +4 -7
- {equimo-2.0.0 → equimo-2.1.0}/src/equimo/finetune/selectors.py +0 -8
- {equimo-2.0.0 → equimo-2.1.0}/src/equimo/finetune/serialization.py +298 -383
- {equimo-2.0.0 → equimo-2.1.0}/src/equimo/finetune/surgery.py +4 -68
- equimo-2.1.0/src/equimo/finetune/vision/__init__.py +11 -0
- {equimo-2.0.0 → equimo-2.1.0}/src/equimo/language/models.py +3 -2
- {equimo-2.0.0 → equimo-2.1.0}/src/equimo/registry.py +2 -0
- {equimo-2.0.0 → equimo-2.1.0}/src/equimo/serialization.py +319 -94
- {equimo-2.0.0 → equimo-2.1.0}/src/equimo/tabular/layers/attention.py +17 -3
- {equimo-2.0.0 → equimo-2.1.0}/src/equimo/tabular/layers/blocks.py +15 -23
- {equimo-2.0.0 → equimo-2.1.0}/src/equimo/tabular/layers/decoder.py +3 -4
- {equimo-2.0.0 → equimo-2.1.0}/src/equimo/tabular/layers/mlp.py +2 -3
- {equimo-2.0.0 → equimo-2.1.0}/src/equimo/tabular/layers/preprocessing.py +0 -1
- {equimo-2.0.0 → equimo-2.1.0}/src/equimo/tabular/layers/registry.py +0 -2
- {equimo-2.0.0 → equimo-2.1.0}/src/equimo/tabular/models/tabpfn.py +20 -27
- equimo-2.1.0/src/equimo/timeseries/__init__.py +1 -0
- equimo-2.1.0/src/equimo/timeseries/layers/__init__.py +14 -0
- equimo-2.1.0/src/equimo/timeseries/layers/axis_attn.py +79 -0
- equimo-2.1.0/src/equimo/timeseries/layers/blocks.py +64 -0
- equimo-2.1.0/src/equimo/timeseries/layers/patch_encoder.py +44 -0
- equimo-2.1.0/src/equimo/timeseries/layers/registry.py +22 -0
- equimo-2.1.0/src/equimo/timeseries/layers/residual_mlp.py +36 -0
- equimo-2.1.0/src/equimo/timeseries/models/__init__.py +15 -0
- equimo-2.1.0/src/equimo/timeseries/models/t0.py +799 -0
- {equimo-2.0.0 → equimo-2.1.0}/src/equimo/vision/layers/attention.py +65 -278
- {equimo-2.0.0 → equimo-2.1.0}/src/equimo/vision/layers/convolution.py +68 -134
- {equimo-2.0.0 → equimo-2.1.0}/src/equimo/vision/layers/downsample.py +7 -46
- {equimo-2.0.0 → equimo-2.1.0}/src/equimo/vision/layers/patch.py +3 -49
- {equimo-2.0.0 → equimo-2.1.0}/src/equimo/vision/layers/posemb.py +94 -170
- {equimo-2.0.0 → equimo-2.1.0}/src/equimo/vision/layers/squeeze_excite.py +4 -46
- {equimo-2.0.0 → equimo-2.1.0}/src/equimo/vision/layers/wavelet.py +3 -49
- equimo-2.1.0/src/equimo/vision/models/_embedding.py +154 -0
- equimo-2.1.0/src/equimo/vision/models/_features.py +155 -0
- {equimo-2.0.0 → equimo-2.1.0}/src/equimo/vision/models/attnet.py +13 -21
- {equimo-2.0.0 → equimo-2.1.0}/src/equimo/vision/models/convnext.py +14 -76
- {equimo-2.0.0 → equimo-2.1.0}/src/equimo/vision/models/deq.py +18 -21
- {equimo-2.0.0 → equimo-2.1.0}/src/equimo/vision/models/fastervit.py +9 -6
- {equimo-2.0.0 → equimo-2.1.0}/src/equimo/vision/models/iformer.py +14 -75
- {equimo-2.0.0 → equimo-2.1.0}/src/equimo/vision/models/lowformer.py +28 -23
- equimo-2.1.0/src/equimo/vision/models/mlla.py +212 -0
- {equimo-2.0.0 → equimo-2.1.0}/src/equimo/vision/models/mobilenet.py +24 -24
- {equimo-2.0.0 → equimo-2.1.0}/src/equimo/vision/models/parcae.py +86 -160
- {equimo-2.0.0 → equimo-2.1.0}/src/equimo/vision/models/partialformer.py +11 -6
- {equimo-2.0.0 → equimo-2.1.0}/src/equimo/vision/models/reduceformer.py +18 -21
- {equimo-2.0.0 → equimo-2.1.0}/src/equimo/vision/models/shvit.py +4 -3
- {equimo-2.0.0 → equimo-2.1.0}/src/equimo/vision/models/vit.py +109 -139
- equimo-2.1.0/src/equimo/vision/models/vssd.py +129 -0
- equimo-2.0.0/CHANGELOG.md +0 -68
- equimo-2.0.0/src/equimo/__init__.py +0 -1
- equimo-2.0.0/src/equimo/audio/layers/__init__.py +0 -56
- equimo-2.0.0/src/equimo/core/layers/_registry.py +0 -40
- equimo-2.0.0/src/equimo/core/layers/attention.py +0 -392
- equimo-2.0.0/src/equimo/finetune/integrations/__init__.py +0 -3
- equimo-2.0.0/src/equimo/finetune/integrations/_groups.py +0 -29
- equimo-2.0.0/src/equimo/finetune/integrations/optax.py +0 -26
- equimo-2.0.0/src/equimo/finetune/integrations/rollfast.py +0 -26
- equimo-2.0.0/src/equimo/finetune/peft/base.py +0 -36
- equimo-2.0.0/src/equimo/finetune/profiles.py +0 -869
- equimo-2.0.0/src/equimo/finetune/tabular/__init__.py +0 -11
- equimo-2.0.0/src/equimo/finetune/tabular/recipes.py +0 -33
- equimo-2.0.0/src/equimo/finetune/vision/__init__.py +0 -32
- equimo-2.0.0/src/equimo/finetune/vision/prompts.py +0 -25
- equimo-2.0.0/src/equimo/finetune/vision/recipes.py +0 -154
- equimo-2.0.0/src/equimo/finetune/vision/selectors.py +0 -63
- equimo-2.0.0/src/equimo/vision/models/mlla.py +0 -223
- equimo-2.0.0/src/equimo/vision/models/vssd.py +0 -245
- {equimo-2.0.0 → equimo-2.1.0}/LICENSE.md +0 -0
- {equimo-2.0.0 → equimo-2.1.0}/docs/migration-v2.md +0 -0
- {equimo-2.0.0 → equimo-2.1.0}/src/equimo/_io.py +0 -0
- {equimo-2.0.0 → equimo-2.1.0}/src/equimo/audio/__init__.py +0 -0
- {equimo-2.0.0 → equimo-2.1.0}/src/equimo/audio/io.py +0 -0
- {equimo-2.0.0 → equimo-2.1.0}/src/equimo/audio/models/__init__.py +0 -0
- {equimo-2.0.0 → equimo-2.1.0}/src/equimo/conversion/__init__.py +0 -0
- {equimo-2.0.0 → equimo-2.1.0}/src/equimo/core/__init__.py +0 -0
- {equimo-2.0.0 → equimo-2.1.0}/src/equimo/core/emamodel.py +0 -0
- {equimo-2.0.0 → equimo-2.1.0}/src/equimo/core/implicit/__init__.py +0 -0
- {equimo-2.0.0 → equimo-2.1.0}/src/equimo/core/implicit/_base.py +0 -0
- {equimo-2.0.0 → equimo-2.1.0}/src/equimo/core/intermediates.py +0 -0
- {equimo-2.0.0 → equimo-2.1.0}/src/equimo/core/layers/activation.py +0 -0
- {equimo-2.0.0 → equimo-2.1.0}/src/equimo/core/ops/__init__.py +0 -0
- {equimo-2.0.0 → equimo-2.1.0}/src/equimo/core/ops/scan.py +0 -0
- {equimo-2.0.0 → equimo-2.1.0}/src/equimo/finetune/_serialization_codecs.py +0 -0
- {equimo-2.0.0 → equimo-2.1.0}/src/equimo/finetune/_typing.py +0 -0
- {equimo-2.0.0 → equimo-2.1.0}/src/equimo/finetune/audio/__init__.py +0 -0
- {equimo-2.0.0 → equimo-2.1.0}/src/equimo/finetune/audio/selectors.py +0 -0
- {equimo-2.0.0 → equimo-2.1.0}/src/equimo/finetune/calibration.py +0 -0
- {equimo-2.0.0 → equimo-2.1.0}/src/equimo/finetune/continued_ssl.py +0 -0
- {equimo-2.0.0 → equimo-2.1.0}/src/equimo/finetune/inspection.py +0 -0
- {equimo-2.0.0 → equimo-2.1.0}/src/equimo/finetune/language/selectors.py +0 -0
- {equimo-2.0.0 → equimo-2.1.0}/src/equimo/finetune/masks.py +0 -0
- {equimo-2.0.0 → equimo-2.1.0}/src/equimo/finetune/paths.py +0 -0
- {equimo-2.0.0 → equimo-2.1.0}/src/equimo/finetune/peft/_compat.py +0 -0
- {equimo-2.0.0 → equimo-2.1.0}/src/equimo/finetune/peft/bitfit.py +0 -0
- {equimo-2.0.0 → equimo-2.1.0}/src/equimo/finetune/tags.py +0 -0
- {equimo-2.0.0 → equimo-2.1.0}/src/equimo/finetune/vision/dense.py +0 -0
- {equimo-2.0.0 → equimo-2.1.0}/src/equimo/language/__init__.py +0 -0
- {equimo-2.0.0 → equimo-2.1.0}/src/equimo/language/tokenizers.py +0 -0
- {equimo-2.0.0 → equimo-2.1.0}/src/equimo/tabular/__init__.py +0 -0
- {equimo-2.0.0 → equimo-2.1.0}/src/equimo/tabular/layers/__init__.py +0 -0
- {equimo-2.0.0 → equimo-2.1.0}/src/equimo/tabular/models/__init__.py +0 -0
- {equimo-2.0.0 → equimo-2.1.0}/src/equimo/utils.py +0 -0
- {equimo-2.0.0 → equimo-2.1.0}/src/equimo/vision/__init__.py +0 -0
- {equimo-2.0.0 → equimo-2.1.0}/src/equimo/vision/io.py +0 -0
- {equimo-2.0.0 → equimo-2.1.0}/src/equimo/vision/layers/__init__.py +0 -0
- {equimo-2.0.0 → equimo-2.1.0}/src/equimo/vision/layers/registry.py +0 -0
- {equimo-2.0.0 → equimo-2.1.0}/src/equimo/vision/models/__init__.py +0 -0
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
All notable changes to Equimo are documented here. Equimo follows Semantic Versioning from version 2.0.0 onward.
|
|
4
|
+
|
|
5
|
+
## [2.1.0] - 2026-08-10
|
|
6
|
+
|
|
7
|
+
### Added
|
|
8
|
+
|
|
9
|
+
- Layout-aware `RotaryFactors` and canonical rotary generation/application helpers under `equimo.core.layers`.
|
|
10
|
+
- An experimental `equimo.timeseries` namespace with the raw T0/T0-alpha patch-transformer backbone, converted
|
|
11
|
+
pretrained weights, and a documented tensor, scaling, padding, and output contract.
|
|
12
|
+
- Apache-2.0 licensing and upstream attribution for the T0-derived modules, alongside Equimo's MIT-licensed original
|
|
13
|
+
code.
|
|
14
|
+
|
|
15
|
+
### Removed
|
|
16
|
+
|
|
17
|
+
- **Breaking:** raw `(sin, cos)` rotary plumbing (`get_sincos()` and `rope_sincos=`), the general `qk_transform`
|
|
18
|
+
attention callback, and rotary helper re-exports from attention modules. Rotary producers now return `RotaryFactors`
|
|
19
|
+
from `get_factors()`, and attention accepts `rotary=`.
|
|
20
|
+
- **Breaking:** unused fine-tuning API surface identified by a code audit (nothing removed was exercised by
|
|
21
|
+
documentation, examples, or tests beyond its own definition): the method-profile layer (`profiles.py`,
|
|
22
|
+
`MethodProfile`, `FineTunePlan.profile`), the `*Recipe` shells duplicating the real `*Config` classes (`LoRARecipe`,
|
|
23
|
+
`DoRARecipe`, `AdapterRecipe`, `VPTShallowRecipe`, `VPTDeepRecipe`, `LinearProbeRecipe`, `LinearProbeConfig`,
|
|
24
|
+
`FineTuneRecipe`, `HeadSpec`, `SAMMetadata`), the `equimo.finetune.integrations` package, the
|
|
25
|
+
`equimo.finetune.tabular` package and other one-line aliases (`partition_for_training`, `locked_tower`,
|
|
26
|
+
`linear_probe`, `attention_pool_probe`, `adapter_transformer_strong`, `merge_and_save`), the unused
|
|
27
|
+
`MergeMethod`/`MergePlan`/`KnOTSMerging` and `PEFTModuleMixin` protocols, and `CompactLeafMap`,
|
|
28
|
+
`TokenClassificationHead`, `TokenIndexPool`, `is_layer_norm`. Method fidelity notes moved to
|
|
29
|
+
`docs/finetuning/method_defaults.md`.
|
|
30
|
+
- Constructor parameters that were accepted but silently ignored: `C3(n)`, `FasterNetBlock(kernel_size, padding)`,
|
|
31
|
+
`DoubleConvBlock(norm_max_group)`, `LinearAngularAttention(qk_norm)`, `RFAttentionBlock(residual_mbconv)`,
|
|
32
|
+
`ConvAttention(norm_kwargs)`, `Vssd(d_state, d_conv)`, and `interpolate_antialias` on `FasterViT`/`PartialFormer`.
|
|
33
|
+
- `equimo.catalog`'s runtime descriptor-validation framework and `create_model` remain; the authoring contract is now
|
|
34
|
+
enforced by tests.
|
|
35
|
+
|
|
36
|
+
### Changed
|
|
37
|
+
|
|
38
|
+
- **Breaking:** `save_delta` and `load_delta` accept a single, documented call order:
|
|
39
|
+
`save_delta(model, path, *, base_model=None, spec=None, ...)` and `load_delta(base_model, path_or_bundle)`. The
|
|
40
|
+
on-disk bundle format is unchanged.
|
|
41
|
+
- `replace_head` always validates the replacement head; the `validate_shape` and `preserve_old_head_metadata` flags are
|
|
42
|
+
removed.
|
|
43
|
+
- Internal consolidation with no behavioral or checkpoint impact: shared registry factories, model-variant factory,
|
|
44
|
+
drop-path and layer-scale helpers, PEFT micro-helpers and wrapper walkers, entry-based delta codec drivers,
|
|
45
|
+
feature-forward mixins, and shared ViT/Parcae embedding builders. Saved-checkpoint compatibility is guarded by a new
|
|
46
|
+
structure-signature test (`tests/test_checkpoint_signature_stability.py`).
|
|
47
|
+
- Core attention accepts leading batch axes and optional Q/K transforms. Nonzero masks identify allowed pairs, and fully
|
|
48
|
+
masked query rows now contribute zero attention probability mass.
|
|
49
|
+
|
|
50
|
+
### Fixed
|
|
51
|
+
|
|
52
|
+
- Corrected ViT-5 and direct vision RoPE feature pairing, T0 XPos low-precision dtypes, rectangular MLLA RoPE grids, and
|
|
53
|
+
TabPFN custom `rope_base` isolation from Equinox's theta-blind global factor cache.
|
|
54
|
+
- Deterministic built-in model and layer paths no longer stage dead JAX PRNG operations when `inference=True`, enabling
|
|
55
|
+
direct export through converters that do not lower randomness primitives while preserving training key schedules.
|
|
56
|
+
VisionParcae's explicitly stochastic state initializers remain key-dependent; `state_init="zero"` provides its
|
|
57
|
+
PRNG-free export path.
|
|
58
|
+
|
|
59
|
+
## [2.0.0] - 2026-07-15
|
|
60
|
+
|
|
61
|
+
### Added
|
|
62
|
+
|
|
63
|
+
- Public modality namespaces for vision, language, audio, and tabular models, with shared layers under `equimo.core`.
|
|
64
|
+
- The `equimo.finetune` subsystem, including trainability plans, PEFT methods, feature extraction, calibration, merging,
|
|
65
|
+
and portable delta bundles.
|
|
66
|
+
- Versioned model-checkpoint metadata with model-structure and SHA-256 validation. Newly written model, delta, and
|
|
67
|
+
calibration archives are staged atomically and read with explicit resource limits.
|
|
68
|
+
- An experimental, read-only model catalog in `equimo.catalog`.
|
|
69
|
+
|
|
70
|
+
### Changed
|
|
71
|
+
|
|
72
|
+
- Python support is 3.12 through 3.14. The declared JAX and Equinox minima now match the effective requirements of the
|
|
73
|
+
runtime dependency graph.
|
|
74
|
+
- Model loading uses a constructed model plus `equimo.serialization.load_weights`. The built-in Hugging Face repository
|
|
75
|
+
points to an immutable revision, and every uploaded archive is verified against its pinned Git LFS SHA-256 digest.
|
|
76
|
+
- Fine-tuning paths now escape dots, backslashes, and integer-looking string keys, keeping mapping keys distinct from
|
|
77
|
+
sequence indices.
|
|
78
|
+
- Language pooling and positional/mask operations preserve low-precision model dtypes while accumulating sensitive
|
|
79
|
+
reductions in float32.
|
|
80
|
+
|
|
81
|
+
### Fixed
|
|
82
|
+
|
|
83
|
+
- Corrected the state-space duality scan recurrence, chunk transitions, and output dtype.
|
|
84
|
+
- Corrected the DINO projection head by removing the activation after its final linear layer.
|
|
85
|
+
- Corrected convolutional patch-embedding output shapes for odd image sizes.
|
|
86
|
+
- Made `DropPath` and `DropPathAdd` accept scalar JAX probabilities and handle a probability of one deterministically.
|
|
87
|
+
- Preserved unknown token ID zero instead of treating every zero token as padding.
|
|
88
|
+
- Forwarded `key` and `inference` independently through feature extractors and heads.
|
|
89
|
+
- Preserved unmatched destination parameters during non-strict PyTorch conversion and handled CPU, conjugate/negative,
|
|
90
|
+
bfloat16, and destination dtype conversion safely.
|
|
91
|
+
- Made AdaLoRA, LoRA-FA, FourierFT, and ordinary trainable leaves round-trip through fine-tuning bundles; merge,
|
|
92
|
+
unmerge, and strip now cover the complete supported LoRA family.
|
|
93
|
+
- Rejected non-finite calibration statistics.
|
|
94
|
+
|
|
95
|
+
### Security and reliability
|
|
96
|
+
|
|
97
|
+
- Archive extraction no longer replaces a caller-owned sibling directory.
|
|
98
|
+
- Model, delta, and calibration readers reject duplicate, unexpected, non-regular, oversized, truncated, or
|
|
99
|
+
checksum-mismatched members.
|
|
100
|
+
- Archive extraction locks work on both POSIX and Windows.
|
|
101
|
+
|
|
102
|
+
### Removed
|
|
103
|
+
|
|
104
|
+
- The v1 top-level `equimo.models`, `equimo.layers`, `equimo.io`, `equimo.implicit`, and `equimo.experimental` layouts.
|
|
105
|
+
- The v1 metadata-driven `load_model` constructor. Equimo v1 archives are not part of the v2 compatibility contract.
|
|
106
|
+
|
|
107
|
+
Existing model archives uploaded for the v2 alpha releases remain loadable and do not need to be regenerated. See the
|
|
108
|
+
[v2 migration guide](docs/migration-v2.md) and [stability policy](docs/stability.md).
|
|
@@ -0,0 +1,190 @@
|
|
|
1
|
+
Apache License
|
|
2
|
+
Version 2.0, January 2004
|
|
3
|
+
http://www.apache.org/licenses/
|
|
4
|
+
|
|
5
|
+
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
|
|
6
|
+
|
|
7
|
+
1. Definitions.
|
|
8
|
+
|
|
9
|
+
"License" shall mean the terms and conditions for use, reproduction,
|
|
10
|
+
and distribution as defined by Sections 1 through 9 of this document.
|
|
11
|
+
|
|
12
|
+
"Licensor" shall mean the copyright owner or entity authorized by
|
|
13
|
+
the copyright owner that is granting the License.
|
|
14
|
+
|
|
15
|
+
"Legal Entity" shall mean the union of the acting entity and all
|
|
16
|
+
other entities that control, are controlled by, or are under common
|
|
17
|
+
control with that entity. For the purposes of this definition,
|
|
18
|
+
"control" means (i) the power, direct or indirect, to cause the
|
|
19
|
+
direction or management of such entity, whether by contract or
|
|
20
|
+
otherwise, or (ii) ownership of fifty percent (50%) or more of the
|
|
21
|
+
outstanding shares, or (iii) beneficial ownership of such entity.
|
|
22
|
+
|
|
23
|
+
"You" (or "Your") shall mean an individual or Legal Entity
|
|
24
|
+
exercising permissions granted by this License.
|
|
25
|
+
|
|
26
|
+
"Source" form shall mean the preferred form for making modifications,
|
|
27
|
+
including but not limited to software source code, documentation
|
|
28
|
+
source, and configuration files.
|
|
29
|
+
|
|
30
|
+
"Object" form shall mean any form resulting from mechanical
|
|
31
|
+
transformation or translation of a Source form, including but
|
|
32
|
+
not limited to compiled object code, generated documentation,
|
|
33
|
+
and conversions to other media types.
|
|
34
|
+
|
|
35
|
+
"Work" shall mean the work of authorship, whether in Source or
|
|
36
|
+
Object form, made available under the License, as indicated by a
|
|
37
|
+
copyright notice that is included in or attached to the work
|
|
38
|
+
(an example is provided in the Appendix below).
|
|
39
|
+
|
|
40
|
+
"Derivative Works" shall mean any work, whether in Source or Object
|
|
41
|
+
form, that is based on (or derived from) the Work and for which the
|
|
42
|
+
editorial revisions, annotations, elaborations, or other modifications
|
|
43
|
+
represent, as a whole, an original work of authorship. For the purposes
|
|
44
|
+
of this License, Derivative Works shall not include works that remain
|
|
45
|
+
separable from, or merely link (or bind by name) to the interfaces of,
|
|
46
|
+
the Work and Derivative Works thereof.
|
|
47
|
+
|
|
48
|
+
"Contribution" shall mean any work of authorship, including
|
|
49
|
+
the original version of the Work and any modifications or additions
|
|
50
|
+
to that Work or Derivative Works thereof, that is intentionally
|
|
51
|
+
submitted to Licensor for inclusion in the Work by the copyright owner
|
|
52
|
+
or by an individual or Legal Entity authorized to submit on behalf of
|
|
53
|
+
the copyright owner. For the purposes of this definition, "submitted"
|
|
54
|
+
means any form of electronic, verbal, or written communication sent
|
|
55
|
+
to the Licensor or its representatives, including but not limited to
|
|
56
|
+
communication on electronic mailing lists, source code control systems,
|
|
57
|
+
and issue tracking systems that are managed by, or on behalf of, the
|
|
58
|
+
Licensor for the purpose of discussing and improving the Work, but
|
|
59
|
+
excluding communication that is conspicuously marked or otherwise
|
|
60
|
+
designated in writing by the copyright owner as "Not a Contribution."
|
|
61
|
+
|
|
62
|
+
"Contributor" shall mean Licensor and any individual or Legal Entity
|
|
63
|
+
on behalf of whom a Contribution has been received by Licensor and
|
|
64
|
+
subsequently incorporated within the Work.
|
|
65
|
+
|
|
66
|
+
2. Grant of Copyright License. Subject to the terms and conditions of
|
|
67
|
+
this License, each Contributor hereby grants to You a perpetual,
|
|
68
|
+
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
|
69
|
+
copyright license to reproduce, prepare Derivative Works of,
|
|
70
|
+
publicly display, publicly perform, sublicense, and distribute the
|
|
71
|
+
Work and such Derivative Works in Source or Object form.
|
|
72
|
+
|
|
73
|
+
3. Grant of Patent License. Subject to the terms and conditions of
|
|
74
|
+
this License, each Contributor hereby grants to You a perpetual,
|
|
75
|
+
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
|
76
|
+
(except as stated in this section) patent license to make, have made,
|
|
77
|
+
use, offer to sell, sell, import, and otherwise transfer the Work,
|
|
78
|
+
where such license applies only to those patent claims licensable
|
|
79
|
+
by such Contributor that are necessarily infringed by their
|
|
80
|
+
Contribution(s) alone or by combination of their Contribution(s)
|
|
81
|
+
with the Work to which such Contribution(s) was submitted. If You
|
|
82
|
+
institute patent litigation against any entity (including a
|
|
83
|
+
cross-claim or counterclaim in a lawsuit) alleging that the Work
|
|
84
|
+
or a Contribution incorporated within the Work constitutes direct
|
|
85
|
+
or contributory patent infringement, then any patent licenses
|
|
86
|
+
granted to You under this License for that Work shall terminate
|
|
87
|
+
as of the date such litigation is filed.
|
|
88
|
+
|
|
89
|
+
4. Redistribution. You may reproduce and distribute copies of the
|
|
90
|
+
Work or Derivative Works thereof in any medium, with or without
|
|
91
|
+
modifications, and in Source or Object form, provided that You
|
|
92
|
+
meet the following conditions:
|
|
93
|
+
|
|
94
|
+
(a) You must give any other recipients of the Work or
|
|
95
|
+
Derivative Works a copy of this License; and
|
|
96
|
+
|
|
97
|
+
(b) You must cause any modified files to carry prominent notices
|
|
98
|
+
stating that You changed the files; and
|
|
99
|
+
|
|
100
|
+
(c) You must retain, in the Source form of any Derivative Works
|
|
101
|
+
that You distribute, all copyright, patent, trademark, and
|
|
102
|
+
attribution notices from the Source form of the Work,
|
|
103
|
+
excluding those notices that do not pertain to any part of
|
|
104
|
+
the Derivative Works; and
|
|
105
|
+
|
|
106
|
+
(d) If the Work includes a "NOTICE" text file as part of its
|
|
107
|
+
distribution, then any Derivative Works that You distribute must
|
|
108
|
+
include a readable copy of the attribution notices contained
|
|
109
|
+
within such NOTICE file, excluding those notices that do not
|
|
110
|
+
pertain to any part of the Derivative Works, in at least one
|
|
111
|
+
of the following places: within a NOTICE text file distributed
|
|
112
|
+
as part of the Derivative Works; within the Source form or
|
|
113
|
+
documentation, if provided along with the Derivative Works; or,
|
|
114
|
+
within a display generated by the Derivative Works, if and
|
|
115
|
+
wherever such third-party notices normally appear. The contents
|
|
116
|
+
of the NOTICE file are for informational purposes only and
|
|
117
|
+
do not modify the License. You may add Your own attribution
|
|
118
|
+
notices within Derivative Works that You distribute, alongside
|
|
119
|
+
or as an addendum to the NOTICE text from the Work, provided
|
|
120
|
+
that such additional attribution notices cannot be construed
|
|
121
|
+
as modifying the License.
|
|
122
|
+
|
|
123
|
+
You may add Your own copyright statement to Your modifications and
|
|
124
|
+
may provide additional or different license terms and conditions
|
|
125
|
+
for use, reproduction, or distribution of Your modifications, or
|
|
126
|
+
for any such Derivative Works as a whole, provided Your use,
|
|
127
|
+
reproduction, and distribution of the Work otherwise complies with
|
|
128
|
+
the conditions stated in this License.
|
|
129
|
+
|
|
130
|
+
5. Submission of Contributions. Unless You explicitly state otherwise,
|
|
131
|
+
any Contribution intentionally submitted for inclusion in the Work
|
|
132
|
+
by You to the Licensor shall be under the terms and conditions of
|
|
133
|
+
this License, without any additional terms or conditions.
|
|
134
|
+
Notwithstanding the above, nothing herein shall supersede or modify
|
|
135
|
+
the terms of any separate license agreement you may have executed
|
|
136
|
+
with Licensor regarding such Contributions.
|
|
137
|
+
|
|
138
|
+
6. Trademarks. This License does not grant permission to use the trade
|
|
139
|
+
names, trademarks, service marks, or product names of the Licensor,
|
|
140
|
+
except as required for reasonable and customary use in describing the
|
|
141
|
+
origin of the Work and reproducing the content of the NOTICE file.
|
|
142
|
+
|
|
143
|
+
7. Disclaimer of Warranty. Unless required by applicable law or
|
|
144
|
+
agreed to in writing, Licensor provides the Work (and each
|
|
145
|
+
Contributor provides its Contributions) on an "AS IS" BASIS,
|
|
146
|
+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
|
147
|
+
implied, including, without limitation, any warranties or conditions
|
|
148
|
+
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
|
|
149
|
+
PARTICULAR PURPOSE. You are solely responsible for determining the
|
|
150
|
+
appropriateness of using or redistributing the Work and assume any
|
|
151
|
+
risks associated with Your exercise of permissions under this License.
|
|
152
|
+
|
|
153
|
+
8. Limitation of Liability. In no event and under no legal theory,
|
|
154
|
+
whether in tort (including negligence), contract, or otherwise,
|
|
155
|
+
unless required by applicable law (such as deliberate and grossly
|
|
156
|
+
negligent acts) or agreed to in writing, shall any Contributor be
|
|
157
|
+
liable to You for damages, including any direct, indirect, special,
|
|
158
|
+
incidental, or consequential damages of any character arising as a
|
|
159
|
+
result of this License or out of the use or inability to use the
|
|
160
|
+
Work (including but not limited to damages for loss of goodwill,
|
|
161
|
+
work stoppage, computer failure or malfunction, or any and all
|
|
162
|
+
other commercial damages or losses), even if such Contributor
|
|
163
|
+
has been advised of the possibility of such damages.
|
|
164
|
+
|
|
165
|
+
9. Accepting Warranty or Additional Liability. While redistributing
|
|
166
|
+
the Work or Derivative Works thereof, You may choose to offer,
|
|
167
|
+
and charge a fee for, acceptance of support, warranty, indemnity,
|
|
168
|
+
or other liability obligations and/or rights consistent with this
|
|
169
|
+
License. However, in accepting such obligations, You may act only
|
|
170
|
+
on Your own behalf and on Your sole responsibility, not on behalf
|
|
171
|
+
of any other Contributor, and only if You agree to indemnify,
|
|
172
|
+
defend, and hold each Contributor harmless for any liability
|
|
173
|
+
incurred by, or claims asserted against, such Contributor by reason
|
|
174
|
+
of your accepting any such warranty or additional liability.
|
|
175
|
+
|
|
176
|
+
END OF TERMS AND CONDITIONS
|
|
177
|
+
|
|
178
|
+
Copyright 2026 The Forecasting Company
|
|
179
|
+
|
|
180
|
+
Licensed under the Apache License, Version 2.0 (the "License");
|
|
181
|
+
you may not use this file except in compliance with the License.
|
|
182
|
+
You may obtain a copy of the License at
|
|
183
|
+
|
|
184
|
+
http://www.apache.org/licenses/LICENSE-2.0
|
|
185
|
+
|
|
186
|
+
Unless required by applicable law or agreed to in writing, software
|
|
187
|
+
distributed under the License is distributed on an "AS IS" BASIS,
|
|
188
|
+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
189
|
+
See the License for the specific language governing permissions and
|
|
190
|
+
limitations under the License.
|
equimo-2.1.0/NOTICE
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
Equimo
|
|
2
|
+
Copyright 2024-2026 Clément Poiret and Equimo contributors
|
|
3
|
+
|
|
4
|
+
This distribution includes a JAX/Equinox adaptation of portions of T0
|
|
5
|
+
(tfc-t0), modified by Equimo contributors. The affected implementation is
|
|
6
|
+
under src/equimo/timeseries and models/t0.py.
|
|
7
|
+
|
|
8
|
+
The upstream attribution notice follows:
|
|
9
|
+
|
|
10
|
+
T0 (tfc-t0)
|
|
11
|
+
Copyright 2026 The Forecasting Company
|
|
12
|
+
|
|
13
|
+
This product includes software developed at Datadog (https://www.datadoghq.com/),
|
|
14
|
+
Copyright 2025 Datadog, Inc., licensed under the Apache License 2.0.
|
|
15
|
+
Source: https://github.com/DataDog/toto
|
|
16
|
+
|
|
17
|
+
This product includes software derived from Chronos-2 by Amazon.com, Inc. or
|
|
18
|
+
its affiliates, Copyright Amazon.com, Inc. All Rights Reserved, licensed under
|
|
19
|
+
the Apache License 2.0.
|
|
20
|
+
Source: https://github.com/amazon-science/chronos-forecasting
|
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: Equimo
|
|
3
|
-
Version: 2.
|
|
3
|
+
Version: 2.1.0
|
|
4
4
|
Summary: Implementation of modern multimodal models in JAX/Equinox
|
|
5
|
-
License-Expression: MIT
|
|
5
|
+
License-Expression: MIT AND Apache-2.0
|
|
6
6
|
License-File: LICENSE.md
|
|
7
|
+
License-File: LICENSES/tfc-t0-APACHE-2.0.txt
|
|
8
|
+
License-File: NOTICE
|
|
7
9
|
Classifier: Development Status :: 5 - Production/Stable
|
|
8
10
|
Classifier: Intended Audience :: Developers
|
|
9
11
|
Classifier: Intended Audience :: Science/Research
|
|
@@ -39,7 +41,7 @@ Description-Content-Type: text/markdown
|
|
|
39
41
|
|
|
40
42
|
**WARNING**: This is a research library implementing recent model architectures. The implementations are based on paper descriptions and may not be exact replicas of the original implementations. Use with caution in production environments.
|
|
41
43
|
|
|
42
|
-
Equimo provides JAX/Equinox implementations of recent architectures across modalities. Vision is the most complete modality today; language has first-class text encoders/tokenizers, audio includes AST spectrogram models,
|
|
44
|
+
Equimo provides JAX/Equinox implementations of recent architectures across modalities. Vision is the most complete modality today; language has first-class text encoders/tokenizers, audio includes AST spectrogram models, tabular includes TabPFN-3 core models, and the experimental time-series namespace includes the raw T0 backbone.
|
|
43
45
|
|
|
44
46
|
## Features
|
|
45
47
|
|
|
@@ -50,7 +52,7 @@ Equimo provides JAX/Equinox implementations of recent architectures across modal
|
|
|
50
52
|
- String-based layer resolution everywhere — pass `"layernorm"` instead of `eqx.nn.LayerNorm`
|
|
51
53
|
- Modular design for easy experimentation
|
|
52
54
|
- Extensive documentation and type hints
|
|
53
|
-
- Modality-specific namespaces: `equimo.vision`, `equimo.language`, `equimo.audio`, `equimo.tabular`
|
|
55
|
+
- Modality-specific namespaces: `equimo.vision`, `equimo.language`, `equimo.audio`, `equimo.tabular`, `equimo.timeseries`
|
|
54
56
|
- Generic serialization utilities in `equimo.serialization`
|
|
55
57
|
- Equinox-native fine-tuning utilities in `equimo.finetune`
|
|
56
58
|
|
|
@@ -80,6 +82,9 @@ uv sync --locked --group dev
|
|
|
80
82
|
uv run pre-commit install
|
|
81
83
|
```
|
|
82
84
|
|
|
85
|
+
See the [testing strategy](docs/testing.md) for model/layer inventories,
|
|
86
|
+
fine-tuning integration coverage, ONNX checks, and scheduled upstream parity.
|
|
87
|
+
|
|
83
88
|
## Package Layout
|
|
84
89
|
|
|
85
90
|
Equimo is organized by modality, with reusable building blocks separated from
|
|
@@ -92,6 +97,7 @@ modality-specific code:
|
|
|
92
97
|
| `equimo.language` | Text encoders and tokenizers |
|
|
93
98
|
| `equimo.audio` | Audio models, layers, and checkpoint-linked AST waveform preprocessing |
|
|
94
99
|
| `equimo.tabular` | Tabular models and tabular layers |
|
|
100
|
+
| `equimo.timeseries` | Experimental time-series models and layers, currently the raw T0 backbone |
|
|
95
101
|
| `equimo.finetune` | Trainability plans, heads, PEFT modules, deltas, model merging, and fine-tuning recipes |
|
|
96
102
|
| `equimo.serialization` | Checkpoint save/load, weight loading, archive download/decompression |
|
|
97
103
|
| `equimo.registry` | Modality-aware model registry |
|
|
@@ -179,6 +185,17 @@ regressor, and a time-series regressor. Upstream TabPFN-3 weights are released
|
|
|
179
185
|
under `tabpfn-3-license-v1.0`; review that license before using pretrained
|
|
180
186
|
weights outside research or internal evaluation.
|
|
181
187
|
|
|
188
|
+
## Implemented Time-Series Models
|
|
189
|
+
|
|
190
|
+
| Model | Source | Status |
|
|
191
|
+
| ----- | ------ | ------ |
|
|
192
|
+
| T0-alpha | [The Forecasting Company](https://huggingface.co/theforecastingcompany/t0-alpha) | ✅ Experimental |
|
|
193
|
+
|
|
194
|
+
`equimo.timeseries` exposes T0's raw patch-transformer forward pass,
|
|
195
|
+
converted T0-alpha weights, and a JAX-native `predict()` adapter with upstream
|
|
196
|
+
scaling, quantile interpolation, forecast selection, and long-horizon rollout.
|
|
197
|
+
See the [time-series guide](docs/timeseries.md) for the complete contract.
|
|
198
|
+
|
|
182
199
|
## Vision Usage
|
|
183
200
|
|
|
184
201
|
```python
|
|
@@ -210,7 +227,7 @@ features = model.features(x, key=key, inference=True)
|
|
|
210
227
|
|
|
211
228
|
See [`docs/usage.md`](./docs/usage.md) for a compact non-fine-tuning usage
|
|
212
229
|
guide covering model construction, feature extraction, text encoders, TabPFN,
|
|
213
|
-
serialization, and registries.
|
|
230
|
+
the experimental T0 backbone, serialization, and registries.
|
|
214
231
|
|
|
215
232
|
Runnable examples live under [`examples/`](./examples):
|
|
216
233
|
|
|
@@ -365,6 +382,7 @@ model = em.dinov2_vitb14(pretrained=True)
|
|
|
365
382
|
| `MobileNetv3` | `mobilenetv3_{small,large}` |
|
|
366
383
|
| `AudioSpectrogramTransformer` | `ast_{tiny,small,base}_patch16_224`, `ast_base_patch16_384`, `ast_base_patch16_audioset_10_10_0_4593`, `ast_base_patch16_speechcommands_v2_10_10_0_9812` |
|
|
367
384
|
| `TabPFN` | `tabpfn`, `tabpfn_v3_classifier_*`, `tabpfn_regressor`, `tabpfn_v3_regressor_*` |
|
|
385
|
+
| `T0` | `t0`, `t0_alpha` |
|
|
368
386
|
|
|
369
387
|
> `LowFormer` requires `attention_type` (`"softmax"` or `"sigmoid"`) which has
|
|
370
388
|
> no sensible default and must be supplied by the caller.
|
|
@@ -672,11 +690,13 @@ Equimo provides utilities for saving models locally and loading pre-trained mode
|
|
|
672
690
|
### Saving Models Locally
|
|
673
691
|
|
|
674
692
|
```python
|
|
693
|
+
import hashlib
|
|
675
694
|
from pathlib import Path
|
|
676
|
-
|
|
695
|
+
|
|
696
|
+
from equimo.serialization import inspect_checkpoint, save_model
|
|
677
697
|
|
|
678
698
|
# Save model with compression (creates .tar.lz4 file)
|
|
679
|
-
save_model(
|
|
699
|
+
checkpoint_path = save_model(
|
|
680
700
|
Path("path/to/save/model"),
|
|
681
701
|
model,
|
|
682
702
|
model_config,
|
|
@@ -692,8 +712,22 @@ save_model(
|
|
|
692
712
|
torch_hub_cfg,
|
|
693
713
|
compression=False,
|
|
694
714
|
)
|
|
715
|
+
|
|
716
|
+
# Inspect integrity and model compatibility without deserializing weights.
|
|
717
|
+
checkpoint = inspect_checkpoint(checkpoint_path, model=model)
|
|
718
|
+
assert checkpoint.verified and not checkpoint.legacy
|
|
719
|
+
print(checkpoint.weights_sha256)
|
|
720
|
+
|
|
721
|
+
# The complete archive digest is a distinct packaging identity.
|
|
722
|
+
archive_sha256 = hashlib.sha256(checkpoint_path.read_bytes()).hexdigest()
|
|
695
723
|
```
|
|
696
724
|
|
|
725
|
+
`save_model` returns the exact path written, including an automatically appended
|
|
726
|
+
`.tar.lz4` suffix. Given the same model, metadata, and Equimo/JAX/Equinox
|
|
727
|
+
versions, compressed saves are byte-identical. The archive uses canonical
|
|
728
|
+
metadata JSON, fixed PAX member metadata, and fixed streaming LZ4 frame options;
|
|
729
|
+
the Equinox-owned parameter stream and its dtype are unchanged.
|
|
730
|
+
|
|
697
731
|
### Loading Weights
|
|
698
732
|
|
|
699
733
|
```python
|
|
@@ -721,6 +755,17 @@ metadata-driven `load_model` API are not part of the v2 compatibility contract.
|
|
|
721
755
|
Built-in downloads are also checked against the SHA-256 digest recorded at the
|
|
722
756
|
pinned Hugging Face repository revision.
|
|
723
757
|
|
|
758
|
+
`inspect_checkpoint` accepts a local archive or uncompressed directory and
|
|
759
|
+
never downloads. Its `weights_sha256` is the digest of Equinox's serialized
|
|
760
|
+
parameter stream, not the digest of the complete `.tar.lz4` file.
|
|
761
|
+
`CheckpointInfo.verified` means the versioned metadata and parameter digest were
|
|
762
|
+
validated; passing `model=` additionally validates its class and array-leaf
|
|
763
|
+
structure. Schema-less v2-alpha checkpoints fail inspection by default. An
|
|
764
|
+
explicit `allow_legacy=True` returns `legacy=True, verified=False` with a
|
|
765
|
+
computed—but not metadata-verified—parameter digest. `load_weights` continues
|
|
766
|
+
to accept those v2-alpha checkpoints with a warning as required by the v2
|
|
767
|
+
compatibility policy.
|
|
768
|
+
|
|
724
769
|
Constructor parameters are controlled when building the target model:
|
|
725
770
|
|
|
726
771
|
```python
|
|
@@ -752,8 +797,9 @@ The following models have pretrained weights available in Equimo:
|
|
|
752
797
|
- [EUPE](https://arxiv.org/abs/2603.22387) (both ViT and ConvNeXt variants)
|
|
753
798
|
- [AST](https://arxiv.org/abs/2104.01778)
|
|
754
799
|
- [TabPFN-3](https://arxiv.org/abs/2605.13986)
|
|
800
|
+
- [T0-alpha](https://huggingface.co/theforecastingcompany/t0-alpha)
|
|
755
801
|
|
|
756
|
-
Model identifiers map to filenames in Equimo's [Hugging Face repository](https://huggingface.co/poiretclement/equimo/tree/
|
|
802
|
+
Model identifiers map to filenames in Equimo's [Hugging Face repository](https://huggingface.co/poiretclement/equimo/tree/8525ac8d42a078874330384fd2d7fdc07a604448/models/default).
|
|
757
803
|
|
|
758
804
|
The experimental catalog currently covers one representative model per
|
|
759
805
|
modality. Catalog keys use an explicit `<modality>/<variant>` namespace:
|
|
@@ -775,6 +821,7 @@ Catalog-covered pretrained identifiers (validated against catalog data):
|
|
|
775
821
|
<!-- model-catalog:begin -->
|
|
776
822
|
- `ast_base_patch16_audioset_10_10_0_4593`
|
|
777
823
|
- `tabpfn_v3_classifier_default`
|
|
824
|
+
- `t0_alpha`
|
|
778
825
|
- `dinov2_vits14_reg`
|
|
779
826
|
<!-- model-catalog:end -->
|
|
780
827
|
|
|
@@ -886,6 +933,42 @@ the specialized regressor variants. The regressor returns raw bucket logits; any
|
|
|
886
933
|
post-processing to scalar predictions should follow the chosen downstream
|
|
887
934
|
regression decoding strategy.
|
|
888
935
|
|
|
936
|
+
## Time Series
|
|
937
|
+
|
|
938
|
+
`equimo.timeseries` is experimental and exposes the raw T0 patch-transformer
|
|
939
|
+
backbone plus `model.predict()` for upstream-style forecasting. Direct calls
|
|
940
|
+
accept four arrays shaped `(variates, time)` and return native quantiles shaped
|
|
941
|
+
`(variates, ceil(time / patch_size), patch_size, quantiles)`.
|
|
942
|
+
|
|
943
|
+
```python
|
|
944
|
+
import jax.numpy as jnp
|
|
945
|
+
import jax.random as jr
|
|
946
|
+
|
|
947
|
+
import equimo.timeseries.models as tm
|
|
948
|
+
|
|
949
|
+
key = jr.PRNGKey(0)
|
|
950
|
+
model = tm.t0_alpha(pretrained=True, key=key)
|
|
951
|
+
|
|
952
|
+
values_scaled = jnp.zeros((1, 96), dtype=jnp.float32)
|
|
953
|
+
mask = jnp.zeros((1, 96), dtype=jnp.int8)
|
|
954
|
+
group_ids = jnp.zeros((1, 96), dtype=jnp.int32)
|
|
955
|
+
variate_type = jnp.zeros((1, 96), dtype=jnp.int32)
|
|
956
|
+
|
|
957
|
+
raw_quantiles = model(
|
|
958
|
+
values_scaled,
|
|
959
|
+
mask,
|
|
960
|
+
group_ids,
|
|
961
|
+
variate_type,
|
|
962
|
+
key=key,
|
|
963
|
+
inference=True,
|
|
964
|
+
)
|
|
965
|
+
```
|
|
966
|
+
|
|
967
|
+
Direct backbone calls consume values as supplied. Use `model.predict(context,
|
|
968
|
+
horizon, quantiles)` for preprocessing, inverse scaling, forecast extraction,
|
|
969
|
+
quantile interpolation, and rollout. The [time-series guide](docs/timeseries.md)
|
|
970
|
+
defines the input and output contracts.
|
|
971
|
+
|
|
889
972
|
## Mixed Precision
|
|
890
973
|
|
|
891
974
|
Equimo follows a strict WYSIWYG policy — modules never silently cast inputs or weights.
|
|
@@ -914,7 +997,11 @@ change.
|
|
|
914
997
|
|
|
915
998
|
## License
|
|
916
999
|
|
|
917
|
-
|
|
1000
|
+
Equimo's original code is licensed under the [MIT License](LICENSE.md).
|
|
1001
|
+
T0-derived modules incorporate Apache-2.0-licensed upstream work; see
|
|
1002
|
+
[NOTICE](NOTICE) and the
|
|
1003
|
+
[T0 Apache-2.0 license](LICENSES/tfc-t0-APACHE-2.0.txt). The package metadata
|
|
1004
|
+
reports the combined expression `MIT AND Apache-2.0`.
|
|
918
1005
|
|
|
919
1006
|
## Citation
|
|
920
1007
|
|