ato 2.0.0__py3-none-any.whl → 2.0.2__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.2
4
+ Summary: A minimal, composable config layer for Python and ML pipelines. Built to stay, not to impress.
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,20 +32,63 @@ 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 minimal, composable config layer for Python and ML pipelines
38
+
39
+ Ato is a minimal, composable config system for Python and ML pipelines.
40
+ It lets you **chain**, **merge**, and **freeze** modular configs,
41
+ so you can move seamlessly from **dynamic experiments** to **static production builds**.
42
+
43
+ Unlike heavy frameworks, Ato keeps everything **transparent** and **Pythonic** —
44
+ you can use it alongside tools like Hydra, WandB, or MLflow without friction.
45
+ It’s built for people who prefer clarity over magic.
46
+
47
+ After all, *Ato* was never built to impress — it was built to stay.
48
+
49
+ <details>
50
+ <summary><strong>Developer’s Note</strong></summary>
51
+
52
+ I didn’t know there was a great tool called Hydra.
53
+ So I built something a bit simpler, a bit more opinionated,
54
+ and maybe a bit more compatible — something that could also work nicely
55
+ with amazing tools like Hydra, WandB, or MLflow.
56
+
57
+ Even though I didn’t know these tools at the time,
58
+ I deliberately designed for compatibility —
59
+ and later, after learning about Hydra and others,
60
+ I added explicit interop layers.
61
+ Because I know how tempting — and exhausting —
62
+ it can be to move from a familiar environment
63
+ to a new, more attractive one.
64
+
65
+ I’ve been the only user so far —
66
+ not because I wanted to hide it,
67
+ but because I never had anyone around
68
+ who could really tell me if it was good enough.
69
+ Maybe this is the right time to find out.
70
+
71
+ So — there’s no need to compete.
72
+ Just *try it once.*
73
+ This tool won’t make you tired.
74
+ It might even feel a little kind.
75
+
76
+ </details>
40
77
 
41
78
  ---
42
79
 
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.
80
+ **Ato** is designed to work *with* your existing tools not replace them.
81
+ It provides configuration management, experiment tracking, and hyperparameter optimization
82
+ as a **philosophical layer** that plays nicely with Hydra, MLflow, W&B, and whatever else you use.
46
83
 
47
84
  ## Why Ato?
48
85
 
86
+ Ato isn't trying to compete with Hydra or replace your experiment tracking platform.
87
+ It's for the projects that live *before* things get complicated — or for teams that want clarity over features.
88
+
89
+ **Philosophy over framework**: Ato gives you enough structure to stay organized, without imposing a rigid system.
90
+ Use it standalone, or layer it on top of Hydra, MLflow, or W&B. It's a tool, not a commitment.
91
+
49
92
  ### Core Differentiators
50
93
 
51
94
  - **True Namespace Isolation**: MultiScope provides independent config contexts (unique to Ato!)
@@ -62,7 +105,7 @@ all without the complexity or overhead of heavy frameworks.
62
105
  ## Quick Start
63
106
 
64
107
  ```bash
65
- pip install ato-python
108
+ pip install ato
66
109
  ```
67
110
 
68
111
  ### 30-Second Example
@@ -99,7 +142,8 @@ if __name__ == '__main__':
99
142
  - [SQL Tracker: Experiment Tracking](#sql-tracker-experiment-tracking)
100
143
  - [Hyperparameter Optimization](#hyperparameter-optimization)
101
144
  - [Best Practices](#best-practices)
102
- - [Comparison with Hydra](#ato-vs-hydra)
145
+ - [Future Work](#future-work--optional-modular-non-intrusive)
146
+ - [Working with Existing Tools](#working-with-existing-tools)
103
147
 
104
148
  ---
105
149
 
@@ -1088,6 +1132,35 @@ MIT License
1088
1132
 
1089
1133
  ---
1090
1134
 
1135
+ ## Future Work — Optional, Modular, Non-Intrusive
1136
+
1137
+ We're planning to add an **HTML dashboard** (as a small local daemon) for teams that want visual exploration:
1138
+
1139
+ **Planned features:**
1140
+ - Metric comparison & trends
1141
+ - Run history & artifact browsing
1142
+ - Configuration diffs (including structural hash visualization)
1143
+ - Interactive hyperparameter analysis
1144
+
1145
+ **Philosophy stays the same:**
1146
+ - **No hard dependency** - Ato core (Scope / ADict / SQL tracker / HyperOpt) works 100% without the dashboard
1147
+ - **No coupling** - The dashboard is a separate process that reads from SQLite/logs; it doesn't block or modify your runs
1148
+ - **Zero lock-in** - Remove the dashboard and nothing in your training code changes
1149
+ - **Fully modular** - Pick only what you need
1150
+
1151
+ **Example workflows:**
1152
+
1153
+ | What you need | What you use |
1154
+ |---------------|--------------|
1155
+ | Just configs | `ADict` + `Scope` only — no DB, no UI |
1156
+ | Headless tracking | Add SQL tracker — still no UI |
1157
+ | Visual exploration | Start dashboard daemon when you want; stop it and keep training |
1158
+ | Full stack | Use everything, or mix with MLflow/W&B dashboards |
1159
+
1160
+ **Guiding rule:** Ato is a set of small, composable tools — not a monolith. Use what helps; ignore the rest.
1161
+
1162
+ ---
1163
+
1091
1164
  ## Contributing
1092
1165
 
1093
1166
  Contributions are welcome! Please feel free to submit issues or pull requests.
@@ -1102,80 +1175,87 @@ pip install -e .
1102
1175
 
1103
1176
  ---
1104
1177
 
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
1178
+ ## Working with Existing Tools
1179
+
1180
+ Ato isn't meant to replace Hydra, MLflow, or W&B it's a **composable layer** you can use alongside them.
1181
+
1182
+ Think of Ato as a "config control surface" that gives you clarity and structure without forcing you into a framework.
1183
+ Many teams use Ato for the 90% of experiments that don't need heavy infrastructure, then graduate to larger tools when needed.
1184
+
1185
+ ### Ato + Hydra = Better Together
1186
+
1187
+ Ato has **built-in Hydra compatibility** via `compose_hierarchy()`:
1188
+
1189
+ ```python
1190
+ from ato.adict import ADict
1191
+
1192
+ # Load Hydra-style configs directly
1193
+ config = ADict.compose_hierarchy(
1194
+ root='configs',
1195
+ config_filename='config',
1196
+ select={'model': 'resnet50', 'data': 'imagenet'},
1197
+ overrides={'model.lr': 0.01}
1198
+ )
1199
+
1200
+ # Now add Ato's unique features on top:
1201
+ # - MultiScope for namespace isolation
1202
+ # - `manual` command for merge debugging
1203
+ # - Built-in SQL tracking
1204
+ ```
1205
+
1206
+ **Migration from Hydra** is literally just replacing `hydra.compose()` with `ADict.compose_hierarchy()`.
1207
+
1208
+ ### What Makes Ato Different?
1209
+
1210
+ Ato focuses on **three unique capabilities** that complement existing tools:
1211
+
1212
+ | Feature | What It Solves | Why It Matters |
1213
+ |---------|----------------|----------------|
1214
+ | **MultiScope** | True namespace isolation | Multiple teams can own separate config scopes without key collisions (no `model_lr` vs `data_lr` prefixing needed) |
1215
+ | **`manual` command** | Config merge order visualization | Debug *why* a config value is set — see exact merge order, not just final result |
1216
+ | **Offline-first tracking** | Zero-setup SQLite tracking | Experiment tracking without servers, platforms, or external dependencies |
1217
+
1218
+ ### Compatibility Matrix
1219
+
1220
+ Ato plays nicely with your existing stack:
1221
+
1222
+ | Tool | Ato's Role | Integration |
1223
+ |------|------------|-------------|
1224
+ | **Hydra** | Extends with MultiScope + merge debugging | `compose_hierarchy()` loads Hydra configs directly |
1225
+ | **MLflow** | Lightweight alternative for simple projects | Use Ato's SQL tracker for offline work, MLflow for dashboards |
1226
+ | **W&B** | Offline-first complement | Track locally with Ato, sync to W&B when needed |
1227
+ | **OpenMMLab** | Config migration layer | `load_mm_config()` handles `_base_` inheritance |
1228
+ | **PyTorch/TF/JAX** | Framework-agnostic config + tracking | Works with any training framework |
1229
+
1230
+ ### When to Use What
1231
+
1232
+ **Use Ato alone** for:
1233
+ - Individual research experiments
1234
+ - Projects that don't need a dashboard
1235
+ - Teams wanting namespace isolation (MultiScope)
1236
+ - Config merge debugging (`manual` command)
1237
+
1238
+ **Use Ato + Hydra** when:
1239
+ - You need Hydra's deep config hierarchies
1240
+ - Your team already uses Hydra YAML structure
1241
+ - You want MultiScope on top of Hydra's composition
1242
+
1243
+ **Use Ato + MLflow/W&B** when:
1244
+ - You want local-first tracking with optional cloud sync
1245
+ - You need Ato's structural hashing + offline SQLite
1246
+ - Your team prefers MLflow/W&B dashboards for collaboration
1247
+
1248
+ **Graduate to pure MLflow/W&B** when:
1249
+ - You need real-time dashboards and team collaboration UI
1250
+ - Model registry and dataset versioning become critical
1251
+ - Your experiments are production-facing
1252
+
1253
+ ### What Ato Doesn't Do
1254
+
1255
+ Ato intentionally skips features that larger tools handle better:
1256
+ - ❌ Real-time web dashboards (use MLflow/W&B)
1257
+ - ❌ Model registry (use MLflow)
1258
+ - ❌ Dataset versioning (use W&B/DVC)
1259
+ - ❌ Deep plugin ecosystems (use Hydra)
1260
+
1261
+ Ato's philosophy: **give you enough structure to stay organized, without becoming infrastructure.**
@@ -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.2.dist-info/licenses/LICENSE,sha256=xrPRlaFeOLIYXHXJOsc7dhA2h1Jrcjw8t63M7OcVN6c,1071
15
+ ato-2.0.2.dist-info/METADATA,sha256=QPyblQoGCgc79nDbpHRAC8c2lIsN88vyjRohP8LHWEQ,35566
16
+ ato-2.0.2.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
17
+ ato-2.0.2.dist-info/top_level.txt,sha256=Ea_cEtrnO1ir26dBT1CK_Mj6vK36sd9oSAu6WjtQkAU,4
18
+ ato-2.0.2.dist-info/RECORD,,
File without changes