{"id":16518490,"url":"https://github.com/valentingol/my_ml_template","last_synced_at":"2025-10-28T07:30:20.251Z","repository":{"id":37441821,"uuid":"502477081","full_name":"valentingol/my_ml_template","owner":"valentingol","description":"Personal template for machine learning (and more).","archived":false,"fork":false,"pushed_at":"2023-11-24T18:01:08.000Z","size":389,"stargazers_count":6,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2023-11-25T16:44:34.535Z","etag":null,"topics":["actions","badges","clean","github-actions","linter","template","testing-tools","tools","workflow","yaecs"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/valentingol.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null}},"created_at":"2022-06-11T23:26:39.000Z","updated_at":"2023-11-25T16:44:34.536Z","dependencies_parsed_at":"2023-11-24T16:50:40.384Z","dependency_job_id":null,"html_url":"https://github.com/valentingol/my_ml_template","commit_stats":null,"previous_names":[],"tags_count":18,"template":null,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/valentingol%2Fmy_ml_template","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/valentingol%2Fmy_ml_template/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/valentingol%2Fmy_ml_template/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/valentingol%2Fmy_ml_template/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/valentingol","download_url":"https://codeload.github.com/valentingol/my_ml_template/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":219860032,"owners_count":16556029,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["actions","badges","clean","github-actions","linter","template","testing-tools","tools","workflow","yaecs"],"created_at":"2024-10-11T16:36:18.158Z","updated_at":"2025-10-28T07:30:19.943Z","avatar_url":"https://github.com/valentingol.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Personal ML template\n\n[![Release](https://img.shields.io/github/v/release/valentingol/my_ml_template?include_prereleases)](https://github.com/valentingol/my_ml_template/releases)\n![PythonVersion](https://img.shields.io/badge/python-3.7%20%7E%203.11-informational)\n![PytorchVersion](https://img.shields.io/badge/pytorch-1.8%20%7E%201.13%20%7C%202.0-informational)\n[![License](https://img.shields.io/github/license/valentingol/my_ml_template?color=999)](https://stringfixer.com/fr/MIT_license)\n\n![GitHub Release Date](https://img.shields.io/github/release-date/valentingol/my_ml_template)\n![GitHub last commit](https://img.shields.io/github/last-commit/valentingol/my_ml_template)\n[![GitHub User followers](https://img.shields.io/github/followers/valentingol?label=User%20followers\u0026style=social)](https://github.com/valentingol)\n[![GitHub User's User stars](https://img.shields.io/github/stars/valentingol?label=User%20Stars\u0026style=social)](https://github.com/valentingol)\n\n[![Torch_logo](https://img.shields.io/badge/PyTorch-EE4C2C?style=for-the-badge\u0026logo=pytorch\u0026logoColor=white)](https://pytorch.org/)\n[![Wandb_logo](https://img.shields.io/badge/Weights_\u0026_Biases-FFBE00?style=for-the-badge\u0026logo=WeightsAndBiases\u0026logoColor=white)](https://wandb.ai/site)\n\n[![Ruff_logo](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/charliermarsh/ruff/main/assets/badge/v1.json)](https://github.com/charliermarsh/ruff)\n[![Black_logo](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black)\n\n[![Ruff](https://github.com/valentingol/my_ml_template/actions/workflows/ruff.yaml/badge.svg)](https://github.com/valentingol/my_ml_template/actions/workflows/ruff.yaml)\n[![Flake8](https://github.com/valentingol/my_ml_template/actions/workflows/flake.yaml/badge.svg)](https://github.com/valentingol/my_ml_template/actions/workflows/flake.yaml)\n[![Pydocstyle](https://github.com/valentingol/my_ml_template/actions/workflows/pydocstyle.yaml/badge.svg)](https://github.com/valentingol/my_ml_template/actions/workflows/pydocstyle.yaml)\n[![MyPy](https://github.com/valentingol/my_ml_template/actions/workflows/mypy.yaml/badge.svg)](https://github.com/valentingol/my_ml_template/actions/workflows/mypy.yaml)\n[![PyLint](https://img.shields.io/endpoint?url=https://gist.githubusercontent.com/valentingol/106c646ac67294657bccf02bbe22208f/raw/workflow_template_pylint.json)](https://github.com/valentingol/my_ml_template/actions/workflows/pylint.yaml)\n\n[![Tests](https://github.com/valentingol/my_ml_template/actions/workflows/tests.yaml/badge.svg)](https://github.com/valentingol/my_ml_template/actions/workflows/tests.yaml)\n[![Coverage](https://img.shields.io/endpoint?url=https://gist.githubusercontent.com/valentingol/106c646ac67294657bccf02bbe22208f/raw/workflow_template_coverage.json)](https://github.com/valentingol/my_ml_template/actions/workflows/tests.yaml)\n[![Bandit](https://github.com/valentingol/my_ml_template/actions/workflows/bandit.yaml/badge.svg)](https://github.com/valentingol/my_ml_template/actions/workflows/bandit.yaml)\n\n**Disclaimer**: Even if it is a personal project, everybody can use it freely\nand modify it for their own needs.\n\nThis repository is a template for using in ML projects. It includes:\n\n- Inference and training template scripts\n- ⚙️ [YAECS](https://github.com/valentingol/yaecs) as configuration manager\n  (compatible with WandB, ClearML, ...)\n- ✅ `pytest-cov` to check unit tests and get coverage (including an optional\n  minimum coverage to pass)\n- 🎨 `ruff` to check the style and auto-format it, including:\n  - `pycodestyle` and `flake` to check overall Python scripts style (PEP8)\n  - `isort` to check the import order of Python scripts\n  - `pydocstyle` to check Python docstrings style (Numpy convention)\n- 🎨 `pylint` to have an overall grade of the style (including an optional minimum\ngrade to pass)\n- 🎨 `black` to auto-format Python scripts\n- 🏷️ `mypy` to check typing and type hints\n\nSome GitHub actions 🏭 are provided:\n\n- 🔒 `bandit` for security\n- 🎨 `flake8`, `mypy`, `pydocstyle`, `pylint`, `ruff` for style\n- Cache is preserved between GH action runs (useful for heavy requirements packages)\n\nAnd finally, some badges:\n\n- 🆙 Release, last commit and release date\n- 🧑‍🤝‍🧑 Github stats\n- 📑 licenses\n- 🔖 python version (and pytorch version)\n- Pytorch and Wandb badges\n- And more...\n\nAll workflows create a badge available, for instance, in README.\n\nThis repository provides also a pre-commit configuration to check end-of-file,\ntrailing whitespace, flake8 and pydocstyle (numpy).\n\n![alt text](docs/_static/checks.drawio.svg)\n\n## HowTo\n\nAll feature of this template is easy to adapt on your project by changing names\nor versions on the `.github/workflows/` directory and on the badge paths on your\nmarkdown/rst files. All the worflows are independent and can be used individually.\nYou can also remove any workflow you don't need.\n\nBefore all, you need to create a [gist](https://gist.github.com/) The id of the\ngist is required for pylint and test/coverage badges. Then, you must add a secret\nin your repository (*Settings \u003e Secrets \u003e New repository secret*) that is a personal\ntoken with gist scope with name GIST_SECRET (details\n[here](https://github.com/Schneegans/dynamic-badges-action)).\n\n## Notes\n\nBy default, there is no maximum unit test coverage but you can set the minimum\ncoverage you want in `utils/github_actions/pytest_manager.py`. There is also a\nminimum grade for pylint that is 7.0/10 and can be set in\n`utils/github_actions/pylint_manager.py`. Details of pylint options are in\n`.pylintrc` and can also be changed at will.\n\n## Contributing\n\nEven if it is a personal template, feel free to contribute via issues or pull\nrequests 🤗.\n\nSee [CONTRIBUTING.md](CONTRIBUTING.md) for more details.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvalentingol%2Fmy_ml_template","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fvalentingol%2Fmy_ml_template","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvalentingol%2Fmy_ml_template/lists"}