# pycaddy
A Python toolbox caddy for experiment tracking, parameter sweeping, and automation tasks.
## Installation
```bash
pip install pycaddy
```
## Quick Start
### Experiment Tracking
```python
from pycaddy.project import Project
# Create a project for organizing experiments
project = Project(root="experiments").ensure_folder()
# Start a new experiment run
session = project.session("train", params={"lr": 0.001, "batch_size": 32})
session.start()
# Your experiment code here...
model_path = session.path("model.pt")
# save_model(model_path)
# Mark as completed
session.done()
```
### Parameter Sweeping
```python
from pycaddy.sweeper import DictSweep, StrategyName
# Define parameter space
params = {
'learning_rate': [0.01, 0.001],
'batch_size': [16, 32, 64]
}
# Generate all combinations
sweep = DictSweep(parameters=params, strategy=StrategyName.PRODUCT)
for config in sweep.generate():
print(config)
# {'learning_rate': 0.01, 'batch_size': 16}
# {'learning_rate': 0.01, 'batch_size': 32}
# ... etc
```
## Features
- **Project Management**: Structured folder organization with automatic metadata tracking
- **Session Tracking**: Track experiment runs with unique IDs, status, and file attachments
- **Parameter Sweeping**: Generate parameter combinations with different strategies
- **Concurrent Safe**: File-based locking for multi-process experiment tracking
- **Lightweight**: Minimal dependencies, designed as a dependency toolbox
## License
MIT License - see [LICENSE](LICENSE) file.
## Links
- **Repository**: https://github.com/HutoriHunzu/pycaddy
- **Author**: Uri Goldblatt (uri.goldblatt@gmail.com)
Raw data
{
"_id": null,
"home_page": null,
"name": "pycaddy",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.11",
"maintainer_email": null,
"keywords": "automation, experiment-tracking, parameter-sweep, toolbox",
"author": null,
"author_email": "Uri Goldblatt <uri.goldblatt@gmail.com>",
"download_url": "https://files.pythonhosted.org/packages/b1/8e/2a0c465b3a154e735436e5df57d8f33ab9eb327f51ac69f9b5c6e0c40934/pycaddy-0.1.0.tar.gz",
"platform": null,
"description": "# pycaddy\n\nA Python toolbox caddy for experiment tracking, parameter sweeping, and automation tasks.\n\n## Installation\n\n```bash\npip install pycaddy\n```\n\n## Quick Start\n\n### Experiment Tracking\n\n```python\nfrom pycaddy.project import Project\n\n# Create a project for organizing experiments \nproject = Project(root=\"experiments\").ensure_folder()\n\n# Start a new experiment run\nsession = project.session(\"train\", params={\"lr\": 0.001, \"batch_size\": 32})\nsession.start()\n\n# Your experiment code here...\nmodel_path = session.path(\"model.pt\")\n# save_model(model_path)\n\n# Mark as completed\nsession.done()\n```\n\n### Parameter Sweeping\n\n```python\nfrom pycaddy.sweeper import DictSweep, StrategyName\n\n# Define parameter space\nparams = {\n 'learning_rate': [0.01, 0.001],\n 'batch_size': [16, 32, 64]\n}\n\n# Generate all combinations\nsweep = DictSweep(parameters=params, strategy=StrategyName.PRODUCT)\nfor config in sweep.generate():\n print(config)\n # {'learning_rate': 0.01, 'batch_size': 16}\n # {'learning_rate': 0.01, 'batch_size': 32}\n # ... etc\n```\n\n## Features\n\n- **Project Management**: Structured folder organization with automatic metadata tracking\n- **Session Tracking**: Track experiment runs with unique IDs, status, and file attachments \n- **Parameter Sweeping**: Generate parameter combinations with different strategies\n- **Concurrent Safe**: File-based locking for multi-process experiment tracking\n- **Lightweight**: Minimal dependencies, designed as a dependency toolbox\n\n## License\n\nMIT License - see [LICENSE](LICENSE) file.\n\n## Links\n\n- **Repository**: https://github.com/HutoriHunzu/pycaddy\n- **Author**: Uri Goldblatt (uri.goldblatt@gmail.com)",
"bugtrack_url": null,
"license": null,
"summary": "A Python toolbox caddy for experiment tracking, parameter sweeping, and automation tasks",
"version": "0.1.0",
"project_urls": {
"Homepage": "https://github.com/HutoriHunzu/pycaddy",
"Repository": "https://github.com/HutoriHunzu/pycaddy"
},
"split_keywords": [
"automation",
" experiment-tracking",
" parameter-sweep",
" toolbox"
],
"urls": [
{
"comment_text": null,
"digests": {
"blake2b_256": "32cec5dbdbb0d94d3f22e2901a351c3bf2cb99ea5dab4a0c791dee2ee44266c1",
"md5": "d8c35a29be09cb8c29285e465fd98f2e",
"sha256": "701264fa5567d5ddbd34f018214ae21c7430b333ef1c9db601e52a107bb88892"
},
"downloads": -1,
"filename": "pycaddy-0.1.0-py3-none-any.whl",
"has_sig": false,
"md5_digest": "d8c35a29be09cb8c29285e465fd98f2e",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.11",
"size": 27670,
"upload_time": "2025-08-07T08:31:14",
"upload_time_iso_8601": "2025-08-07T08:31:14.864901Z",
"url": "https://files.pythonhosted.org/packages/32/ce/c5dbdbb0d94d3f22e2901a351c3bf2cb99ea5dab4a0c791dee2ee44266c1/pycaddy-0.1.0-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "b18e2a0c465b3a154e735436e5df57d8f33ab9eb327f51ac69f9b5c6e0c40934",
"md5": "6113fb39a1ee415bb6bf9d24463e79ee",
"sha256": "b28547f85bdff0822aea72a4ed805d2cae35676d044de7bea12c2e589e497e34"
},
"downloads": -1,
"filename": "pycaddy-0.1.0.tar.gz",
"has_sig": false,
"md5_digest": "6113fb39a1ee415bb6bf9d24463e79ee",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.11",
"size": 27870,
"upload_time": "2025-08-07T08:31:16",
"upload_time_iso_8601": "2025-08-07T08:31:16.364082Z",
"url": "https://files.pythonhosted.org/packages/b1/8e/2a0c465b3a154e735436e5df57d8f33ab9eb327f51ac69f9b5c6e0c40934/pycaddy-0.1.0.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2025-08-07 08:31:16",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "HutoriHunzu",
"github_project": "pycaddy",
"travis_ci": false,
"coveralls": false,
"github_actions": false,
"lcname": "pycaddy"
}