ato 2.0.0__py3-none-any.whl → 2.0.3__py3-none-any.whl

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.

Potentially problematic release.


This version of ato might be problematic. Click here for more details.

@@ -1,14 +1,14 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ato
3
- Version: 2.0.0
4
- Summary: A Python library for experiment tracking and hyperparameter optimization
3
+ Version: 2.0.3
4
+ Summary: A frameworkless integration layer for ML pipelines. Ato doesn't compete with frameworks — it restores freedom between them.
5
5
  Author: ato contributors
6
6
  License: MIT
7
7
  Project-URL: Homepage, https://github.com/yourusername/ato
8
8
  Project-URL: Repository, https://github.com/yourusername/ato
9
9
  Project-URL: Documentation, https://github.com/yourusername/ato#readme
10
10
  Project-URL: Issues, https://github.com/yourusername/ato/issues
11
- Keywords: machine learning,experiment tracking,hyperparameter optimization
11
+ Keywords: config management,experiment tracking,hyperparameter optimization,lightweight,composable,namespace isolation,machine learning
12
12
  Classifier: Development Status :: 4 - Beta
13
13
  Classifier: Intended Audience :: Developers
14
14
  Classifier: Intended Audience :: Science/Research
@@ -32,37 +32,95 @@ Provides-Extra: distributed
32
32
  Requires-Dist: torch>=1.8.0; extra == "distributed"
33
33
  Dynamic: license-file
34
34
 
35
- # Ato
35
+ # Ato: A Tiny Orchestrator
36
36
 
37
- Ato is intentionally small it’s not about lines of code,
38
- it’s about where they belong.
39
- The core fits in a few hundred lines because it doesn’t need to fight Python — it flows with it.
37
+ ## A frameworkless integration layer for Python and ML pipelines
40
38
 
41
- ---
39
+ **Ato doesn't compete with frameworks — it restores freedom between them.**
40
+
41
+ Every framework tries to own your workflow.
42
+ Ato doesn't. It just gives you the **handles to connect them**.
43
+
44
+ Unlike Hydra, MLflow, or W&B — which build ecosystems —
45
+ Ato provides **structural boundaries** that let you compose, track, and optimize
46
+ without surrendering control to any single system.
47
+
48
+ You can:
49
+ - **Chain** configs from multiple sources (Hydra YAML, OpenMMLab, raw Python)
50
+ - **Merge** them with explicit priority control — and **debug** the exact merge order
51
+ - **Track** experiments in SQLite with zero setup — or sync to MLflow/W&B when you need dashboards
52
+ - **Optimize** hyperparameters with built-in Hyperband — or use Optuna/Ray Tune alongside
53
+
54
+ Ato keeps everything **transparent** and **Pythonic**.
55
+ No magic. No vendor lock-in. Just composable pieces you control.
56
+
57
+ <details>
58
+ <summary><strong>Design Philosophy</strong></summary>
59
+
60
+ Ato was designed from a simple realization:
61
+ **frameworks solve composition, but they also create coupling.**
62
+
63
+ When I built Ato, I didn't know Hydra existed.
64
+ But I did know I wanted something that wouldn't **own** my workflow —
65
+ something that could **compose** with whatever came next.
66
+
67
+ That constraint led to three design principles:
68
+
69
+ 1. **Structural neutrality** — Ato has no opinion on your stack.
70
+ It's a layer, not a platform.
42
71
 
43
- **Ato** is a lightweight Python library for experiment management in machine learning and data science.
44
- It provides flexible configuration management, experiment tracking, and hyperparameter optimization
45
- all without the complexity or overhead of heavy frameworks.
72
+ 2. **Explicit boundaries** Each module (ADict, Scope, SQLTracker, HyperOpt) is independent.
73
+ Use one, use all, or mix with other tools. No forced dependencies.
74
+
75
+ 3. **Debuggable composition** — When configs merge from 5 sources, you should see **why** a value was set.
76
+ Ato's `manual` command shows the exact merge order — a feature no other tool has.
77
+
78
+ This isn't minimalism for its own sake.
79
+ It's **structural restraint** — interfering only where necessary,
80
+ and staying out of the way everywhere else.
81
+
82
+ </details>
83
+
84
+ ---
46
85
 
47
86
  ## Why Ato?
48
87
 
49
- ### Core Differentiators
88
+ Ato solves a problem that frameworks create: **workflow ownership**.
89
+
90
+ | Framework Approach | Ato's Approach |
91
+ |-------------------|----------------|
92
+ | Hydra owns config composition | Ato **composes** Hydra configs + raw Python + CLI args |
93
+ | MLflow owns experiment tracking | Ato tracks locally in SQLite, **or** syncs to MLflow |
94
+ | W&B owns hyperparameter search | Ato provides Hyperband, **or** you use Optuna/Ray |
95
+ | Each framework wants to be **the** system | Ato is **a layer** you control |
96
+
97
+ **Ato is for teams who want:**
98
+ - Config flexibility without framework lock-in
99
+ - Experiment tracking without mandatory cloud platforms
100
+ - Hyperparameter optimization without opaque black boxes
101
+ - The ability to **change tools** without rewriting pipelines
102
+
103
+ ### What Makes Ato Structurally Different
104
+
105
+ These aren't features — they're **architectural decisions** that frameworks can't replicate without breaking their own abstractions:
50
106
 
51
- - **True Namespace Isolation**: MultiScope provides independent config contexts (unique to Ato!)
52
- - **Configuration Transparency**: Visualize exact config merge order - debug configs with `manual` command
53
- - **Built-in Experiment Tracking**: SQLite-based tracking with no external services required
54
- - **Structural Hashing**: Track experiment structure changes automatically
107
+ | Capability | Why Frameworks Can't Do This | What It Enables |
108
+ |------------|------------------------------|-----------------|
109
+ | **MultiScope** (namespace isolation) | Frameworks use global config namespaces | Multiple teams can own separate config scopes without key collisions. No `model_lr` vs `data_lr` prefixing needed. |
110
+ | **`manual` command** (merge order debugging) | Frameworks show final configs, not merge logic | See **why** a value was set — trace exact merge order across defaults, named configs, CLI args, and lazy evaluation. |
111
+ | **Structural hashing** | Frameworks track values, not structure | Detect when experiment **architecture** changes (not just hyperparameters). Critical for reproducibility. |
112
+ | **Offline-first tracking** | Frameworks assume centralized platforms | Zero-setup SQLite tracking. No servers, no auth, no vendor lock-in. Sync to MLflow/W&B only when needed. |
55
113
 
56
114
  ### Developer Experience
57
115
 
58
- - **Zero Boilerplate**: Auto-nested configs, lazy evaluation, attribute access
59
- - **CLI-first Design**: Configure experiments from command line without touching code
60
- - **Framework Agnostic**: Works with PyTorch, TensorFlow, JAX, or pure Python
116
+ - **Zero boilerplate** Auto-nested configs (`cfg.model.backbone.depth = 50` just works), lazy evaluation, attribute access
117
+ - **CLI-first** Override any config from command line without touching code: `python train.py model.backbone=%resnet101%`
118
+ - **Framework agnostic** Works with PyTorch, TensorFlow, JAX, or pure Python. No framework-specific decorators or magic.
61
119
 
62
120
  ## Quick Start
63
121
 
64
122
  ```bash
65
- pip install ato-python
123
+ pip install ato
66
124
  ```
67
125
 
68
126
  ### 30-Second Example
@@ -99,7 +157,8 @@ if __name__ == '__main__':
99
157
  - [SQL Tracker: Experiment Tracking](#sql-tracker-experiment-tracking)
100
158
  - [Hyperparameter Optimization](#hyperparameter-optimization)
101
159
  - [Best Practices](#best-practices)
102
- - [Comparison with Hydra](#ato-vs-hydra)
160
+ - [Roadmap](#roadmap-expanding-boundaries-without-breaking-neutrality)
161
+ - [Working with Existing Tools](#working-with-existing-tools)
103
162
 
104
163
  ---
105
164
 
@@ -1088,6 +1147,52 @@ MIT License
1088
1147
 
1089
1148
  ---
1090
1149
 
1150
+ ## Roadmap: Expanding Boundaries Without Breaking Neutrality
1151
+
1152
+ Ato's design constraint is **structural neutrality** — adding capabilities without creating dependencies.
1153
+
1154
+ ### Planned: Local Dashboard (Optional Module)
1155
+
1156
+ A lightweight HTML dashboard for teams that want visual exploration **without** committing to MLflow/W&B:
1157
+
1158
+ **What it adds:**
1159
+ - Metric comparison & trends (read-only view of SQLite data)
1160
+ - Run history & artifact browsing
1161
+ - Config diff visualization (including structural hash changes)
1162
+ - Interactive hyperparameter analysis
1163
+
1164
+ **Design constraints:**
1165
+ - **No hard dependency** — Ato core works 100% without the dashboard
1166
+ - **Separate process** — Dashboard reads from SQLite; doesn't block or modify runs
1167
+ - **Zero lock-in** — Remove the dashboard, and your training code doesn't change
1168
+ - **Composable** — Use it alongside MLflow/W&B, or replace either one
1169
+
1170
+ ### Why This Fits Ato's Philosophy
1171
+
1172
+ The dashboard is **not** a platform — it's a **view** into data you already own (SQLite).
1173
+
1174
+ | What It Doesn't Do | Why That Matters |
1175
+ |--------------------|------------------|
1176
+ | Doesn't store data | You can delete it without losing experiments |
1177
+ | Doesn't require auth | No accounts, no vendors, no network calls |
1178
+ | Doesn't modify configs | Pure read-only visualization |
1179
+ | Doesn't couple to Ato's core | Works with any SQLite database |
1180
+
1181
+ This preserves Ato's design principle: **provide handles, not ownership.**
1182
+
1183
+ ### Modular Adoption Path
1184
+
1185
+ | What You Need | What You Use |
1186
+ |---------------|--------------|
1187
+ | Just configs | `ADict` + `Scope` — no DB, no UI |
1188
+ | Headless tracking | Add SQLTracker — still no UI |
1189
+ | Local visualization | Add dashboard daemon — run/stop anytime |
1190
+ | Team collaboration | Sync to MLflow/W&B dashboards |
1191
+
1192
+ **Guiding principle:** Ato remains a set of **independent, composable tools** — not a platform you commit to.
1193
+
1194
+ ---
1195
+
1091
1196
  ## Contributing
1092
1197
 
1093
1198
  Contributions are welcome! Please feel free to submit issues or pull requests.
@@ -1102,80 +1207,108 @@ pip install -e .
1102
1207
 
1103
1208
  ---
1104
1209
 
1105
- ## Comparison with Other Tools
1106
-
1107
- | Feature | Ato | MLflow | W&B | Hydra |
1108
- |---------|--------|--------|-----|-------|
1109
- | **Core Features** |
1110
- | Zero setup | | | | |
1111
- | Offline-first | ✅ | Partial | ❌ | ✅ |
1112
- | Config priority system | ✅ Explicit | Partial (Tags) | Partial (Run params) | ✅ Override |
1113
- | **True namespace isolation** | **✅ MultiScope** | **❌** | **❌** | **❌ Config groups only** |
1114
- | **Config merge visualization** | **✅ `manual`** | **❌** | **❌** | **Partial (`--cfg` tree)** |
1115
- | Structural hashing | ✅ | ❌ | ❌ | ❌ |
1116
- | Built-in HyperOpt | Hyperband | | Sweeps | Plugins (Optuna) |
1117
- | CLI-first design | ✅ | ❌ | ❌ | ✅ |
1118
- | **Compatibility** |
1119
- | Framework agnostic | | | | |
1120
- | Distributed training | Native + DDP/FSDP⁽¹⁾ | | | |
1121
- | Distributed HyperOpt | ✅ `DistributedHyperBand` | ❌ | Partial | Plugins |
1122
- | Hydra-style composition | `compose_hierarchy` | N/A | N/A | Native |
1123
- | OpenMMLab configs | ✅ `load_mm_config` | ❌ | ❌ | ❌ |
1124
- | **Visualization & UI** |
1125
- | Web dashboard | 🔜 Planned | ✅ | ✅ | ❌ |
1126
- | Real-time metrics | 🔜 Planned | ✅ | ✅ | ❌ |
1127
- | Interactive plots | 🔜 Planned | ✅ | ✅ | ❌ |
1128
- | Metric comparison UI | 🔜 Planned | ✅ | ✅ | ❌ |
1129
- | **Advanced Features** |
1130
- | Model registry | 🔜 Planned | ✅ | ✅ | ❌ |
1131
- | Dataset versioning | 🔜 Planned | Partial | ✅ | ❌ |
1132
- | Team collaboration | ✅ MultiScope⁽²⁾ | ✅ Platform | ✅ Platform | ❌ |
1133
-
1134
- ⁽¹⁾ Native distributed hyperparameter optimization via `DistributedHyperBand`. Regular training is compatible with any distributed framework (DDP, FSDP, DeepSpeed) - just integrate logging, no special code needed.
1135
-
1136
- ⁽²⁾ Team collaboration via MultiScope: separate config ownership per team (e.g., Team A owns model scope, Team B owns data scope) without naming conflicts.
1137
-
1138
- **Note on config compatibility**: Ato provides built-in support for other config frameworks:
1139
- - **Hydra-style composition**: `compose_hierarchy()` supports config groups, select, overrides - full compatibility
1140
- - **OpenMMLab configs**: `load_mm_config()` handles `_base_` inheritance and `_delete_` keys
1141
- - Migration from existing projects is seamless - just import your configs and go
1142
-
1143
- ### Ato vs. Hydra
1144
-
1145
- While Hydra is excellent for config composition, Ato provides unique features:
1146
-
1147
- | Aspect | Hydra | Ato |
1148
- |--------|-------|--------|
1149
- | **Namespace isolation** | Config groups share namespace | ✅ MultiScope with independent namespaces<br/>(no key collisions) |
1150
- | **Priority system** | Single global override system | ✅ Per-scope priority + lazy evaluation |
1151
- | **Config merge debugging** | Tree view (`--cfg`)<br/>Shows final config | `manual` command<br/>Shows merge order & execution flow |
1152
- | **Experiment tracking** | Requires external tools<br/>(MLflow/W&B) | ✅ Built-in SQL tracker |
1153
- | **Team workflow** | Single config file ownership | Separate scope ownership per team⁽³⁾ |
1154
-
1155
- ⁽³⁾ Example: Team A defines `model_scope`, Team B defines `data_scope`, both can use `model.lr` and `data.lr` without conflicts.
1156
-
1157
- **Use Ato over Hydra when:**
1158
- - Multiple teams need independent config ownership (MultiScope)
1159
- - You want to avoid key collision issues (no manual prefixing needed)
1160
- - You need to debug why a config value was set (`manual` command)
1161
- - You want experiment tracking without adding MLflow/W&B
1162
- - You're migrating from OpenMMLab projects
1163
-
1164
- **Use Hydra when:**
1165
- - You have very deep config hierarchies with complex inheritance
1166
- - You prefer YAML over Python
1167
- - You need the mature plugin ecosystem (Ray, Joblib, etc.)
1168
- - You don't need namespace isolation
1169
-
1170
- **Why not both?**
1171
- - Ato has **built-in Hydra-style composition** via `compose_hierarchy()`
1172
- - You can use Hydra's directory structure and config groups directly in Ato
1173
- - Get MultiScope + experiment tracking + merge debugging on top of Hydra's composition
1174
- - Migration is literally just replacing `hydra.compose()` with `ADict.compose_hierarchy()`
1175
-
1176
- **Ato is for you if:**
1177
- - You want lightweight, offline-first experiment tracking
1178
- - You need **true namespace isolation for team collaboration**
1179
- - **You want to debug config merge order visually** (unique to Ato!)
1180
- - You prefer simple Python over complex frameworks
1181
- - You want reproducibility without overhead
1210
+ ## Working with Existing Tools
1211
+
1212
+ **Ato is an integration layer, not a replacement.**
1213
+
1214
+ It's designed to **compose** with Hydra, MLflow, W&B, and whatever tools you already use.
1215
+ The goal isn't to compete it's to **give you handles** for connecting systems without coupling your workflow to any single platform.
1216
+
1217
+ ### Composition Strategy
1218
+
1219
+ Ato provides three structural capabilities that frameworks don't:
1220
+
1221
+ | What Ato Adds | Why It Matters | How It Composes |
1222
+ |---------------|----------------|-----------------|
1223
+ | **MultiScope** | True namespace isolation | Multiple config sources (Hydra, raw Python, CLI) coexist without key collisions |
1224
+ | **`manual` command** | Config merge order visualization | Debug **why** a value was set — see exact merge order across all sources |
1225
+ | **Offline-first tracking** | Zero-setup SQLite tracking | Track locally, **then** sync to MLflow/W&B only when you need dashboards |
1226
+
1227
+ These aren't "features" they're **structural boundaries** that let you compose tools freely.
1228
+
1229
+ ### Ato + Hydra: Designed to Compose
1230
+
1231
+ Ato has **native Hydra composition** via `compose_hierarchy()`:
1232
+
1233
+ ```python
1234
+ from ato.adict import ADict
1235
+
1236
+ # Load Hydra-style configs directly
1237
+ config = ADict.compose_hierarchy(
1238
+ root='configs',
1239
+ config_filename='config',
1240
+ select={'model': 'resnet50', 'data': 'imagenet'},
1241
+ overrides={'model.lr': 0.01}
1242
+ )
1243
+
1244
+ # Now add Ato's structural boundaries:
1245
+ # - MultiScope for independent namespaces
1246
+ # - `manual` command to debug merge order
1247
+ # - SQLite tracking without MLflow overhead
1248
+ ```
1249
+
1250
+ **You're not replacing Hydra** you're **extending** it with namespace isolation and debuggable composition.
1251
+
1252
+ ### Integration Matrix
1253
+
1254
+ Ato is designed to work **between** frameworks:
1255
+
1256
+ | Tool | What It Owns | What Ato Adds |
1257
+ |------|--------------|---------------|
1258
+ | **Hydra** | Config composition from YAML | MultiScope (namespace isolation) + merge debugging |
1259
+ | **MLflow** | Centralized experiment platform | Local-first SQLite tracking + structural hashing |
1260
+ | **W&B** | Cloud-based tracking + dashboards | Offline tracking + sync when ready |
1261
+ | **OpenMMLab** | Config inheritance (`_base_`) | Direct import via `load_mm_config()` |
1262
+ | **Optuna/Ray Tune** | Advanced hyperparameter search | Built-in Hyperband + composable with their optimizers |
1263
+
1264
+ ### Composition Patterns
1265
+
1266
+ **Pattern 1: Ato as the integration layer**
1267
+ ```
1268
+ Hydra (config source) → Ato (composition + tracking) → MLflow (dashboards)
1269
+ ```
1270
+
1271
+ **Pattern 2: Ato for local development**
1272
+ ```
1273
+ Local experiments: Ato (full stack)
1274
+ Production: Ato → MLflow (centralized tracking)
1275
+ ```
1276
+
1277
+ **Pattern 3: Gradual adoption**
1278
+ ```
1279
+ Start: Ato alone (zero dependencies)
1280
+ Scale: Add Hydra for complex configs
1281
+ Collaborate: Sync to W&B for team dashboards
1282
+ ```
1283
+
1284
+ ### When to Use What
1285
+
1286
+ **Use Ato alone** when:
1287
+ - You want zero external dependencies
1288
+ - You need namespace isolation (MultiScope)
1289
+ - You want to debug config merge order
1290
+
1291
+ **Compose with Hydra** when:
1292
+ - Your team already has Hydra YAML configs
1293
+ - You need deep config hierarchies + namespace isolation
1294
+ - You want to see **why** a Hydra config set a value (`manual` command)
1295
+
1296
+ **Compose with MLflow/W&B** when:
1297
+ - You want local-first tracking with optional cloud sync
1298
+ - You need structural hashing + offline SQLite
1299
+ - You're migrating between tracking platforms
1300
+
1301
+ **You don't need Ato** if:
1302
+ - You're fully committed to a single framework ecosystem
1303
+ - You don't need debuggable config composition
1304
+ - You never switch between tools
1305
+
1306
+ ### What Ato Doesn't Do
1307
+
1308
+ Ato intentionally **doesn't** build an ecosystem:
1309
+ - No web dashboards → Use MLflow/W&B
1310
+ - No model registry → Use MLflow
1311
+ - No dataset versioning → Use DVC/W&B
1312
+ - No plugin marketplace → Use Hydra
1313
+
1314
+ **Ato's goal:** Stay out of your way. Provide handles. Let you change tools without rewriting code.
@@ -11,8 +11,8 @@ ato/db_routers/sql/schema.py,sha256=3eRF1oMnoebEh1QA39aqgcnTSe0h9JAXBfExAD0sPGY,
11
11
  ato/hyperopt/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
12
12
  ato/hyperopt/base.py,sha256=Wtu3l9FPB32exoUYEHKQf3r19U_l24_i-rle429uFbY,5188
13
13
  ato/hyperopt/hyperband.py,sha256=05qGvff0UAec4bTaaiCFa-FBRG0fIdVATaZu4vUiV5M,4233
14
- ato-2.0.0.dist-info/licenses/LICENSE,sha256=xrPRlaFeOLIYXHXJOsc7dhA2h1Jrcjw8t63M7OcVN6c,1071
15
- ato-2.0.0.dist-info/METADATA,sha256=ae_EKGvwbsq2cbslgjIXiIEA1mz8tLpXO3377ggKN2I,33292
16
- ato-2.0.0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
17
- ato-2.0.0.dist-info/top_level.txt,sha256=Ea_cEtrnO1ir26dBT1CK_Mj6vK36sd9oSAu6WjtQkAU,4
18
- ato-2.0.0.dist-info/RECORD,,
14
+ ato-2.0.3.dist-info/licenses/LICENSE,sha256=xrPRlaFeOLIYXHXJOsc7dhA2h1Jrcjw8t63M7OcVN6c,1071
15
+ ato-2.0.3.dist-info/METADATA,sha256=676RCPgQwliZ2DTDxb91AIvR__jq_h2YFauwzSjwEWQ,37901
16
+ ato-2.0.3.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
17
+ ato-2.0.3.dist-info/top_level.txt,sha256=Ea_cEtrnO1ir26dBT1CK_Mj6vK36sd9oSAu6WjtQkAU,4
18
+ ato-2.0.3.dist-info/RECORD,,
File without changes