{"id":335728,"name":"ANEMOI","description":"An open-source, Python-based framework developed collaboratively by ECMWF and several European national meteorological services. It is designed to facilitate the development, training, and deployment of machine learning (ML) models for weather forecasting. As an 'end to end' framework, it provides a comprehensive toolkit that spans data preparation, model training, and inference, enabling meteorological organizations to leverage their own data for ML-based weather prediction.","url":"https://github.com/ecmwf/anemoi","last_synced_at":"2026-04-10T18:30:15.473Z","repository":{"id":228798425,"uuid":"770255001","full_name":"ecmwf/anemoi","owner":"ecmwf","description":null,"archived":false,"fork":false,"pushed_at":"2026-03-31T07:53:03.000Z","size":948,"stargazers_count":51,"open_issues_count":13,"forks_count":15,"subscribers_count":20,"default_branch":"main","last_synced_at":"2026-04-05T16:03:06.507Z","etag":null,"topics":["anemoi"],"latest_commit_sha":null,"homepage":"https://anemoi.readthedocs.io","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ecmwf.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"docs/contributing/code_style.rst","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":".github/CODEOWNERS","security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2024-03-11T08:25:56.000Z","updated_at":"2026-04-05T13:36:03.000Z","dependencies_parsed_at":"2026-03-08T03:01:23.708Z","dependency_job_id":"147d4ee6-1f5e-4b61-935a-58aa4a92ae74","html_url":"https://github.com/ecmwf/anemoi","commit_stats":null,"previous_names":["ecmwf/anemoi-docs","ecmwf/anemoi"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/ecmwf/anemoi","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ecmwf%2Fanemoi","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ecmwf%2Fanemoi/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ecmwf%2Fanemoi/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ecmwf%2Fanemoi/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ecmwf","download_url":"https://codeload.github.com/ecmwf/anemoi/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ecmwf%2Fanemoi/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31520577,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-07T16:28:08.000Z","status":"ssl_error","status_checked_at":"2026-04-07T16:28:06.951Z","response_time":105,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"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"}},"owner":{"login":"ecmwf","name":"European Centre for Medium-Range Weather Forecasts","uuid":"6368067","kind":"organization","description":"Providing software to work with meteorological data and services","email":"Software.Support@ecmwf.int","website":"www.ecmwf.int","location":"Shinfield Park, Reading, United Kingdom","twitter":null,"company":null,"icon_url":"https://avatars.githubusercontent.com/u/6368067?v=4","repositories_count":44,"last_synced_at":"2023-03-02T03:00:24.789Z","metadata":{"has_sponsors_listing":false},"html_url":"https://github.com/ecmwf","funding_links":[],"total_stars":null,"followers":null,"following":null,"created_at":"2022-11-12T21:17:56.440Z","updated_at":"2023-03-02T03:00:24.855Z","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ecmwf","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ecmwf/repositories"},"packages":[],"commits":{"id":11589554,"full_name":"ecmwf/anemoi","default_branch":"master","total_commits":117,"total_committers":15,"total_bot_commits":18,"total_bot_committers":1,"mean_commits":7.8,"dds":0.6239316239316239,"past_year_total_commits":53,"past_year_total_committers":13,"past_year_total_bot_commits":10,"past_year_total_bot_committers":1,"past_year_mean_commits":4.076923076923077,"past_year_dds":0.7924528301886793,"last_synced_at":"2026-04-07T17:10:47.794Z","last_synced_commit":"00845e6e59c6af887c2a88c0488feedcc646de37","created_at":"2025-11-28T02:01:02.253Z","updated_at":"2026-04-07T17:09:51.676Z","committers":[{"name":"Baudouin Raoult","email":"baudouin.raoult@ecmwf.int","login":"b8raoult","count":44},{"name":"pre-commit-ci[bot]","email":"66853113+pre-commit-ci[bot]","login":"pre-commit-ci[bot]","count":18},{"name":"Vera","email":"121622878+VeraChristina","login":"VeraChristina","count":13},{"name":"DeployDuck","email":"150700357+DeployDuck","login":"DeployDuck","count":10},{"name":"Ana Prieto Nemesio","email":"91897203+anaprietonem","login":"anaprietonem","count":10},{"name":"Gert Mertes","email":"13658335+gmertes","login":"gmertes","count":5},{"name":"Matthew Chantry","email":"matthew.chantry@ecmwf.int","login":"mchantry","count":4},{"name":"Aaron Hopkinson","email":"aaron.hopkinson@ecmwf.int","login":"aaron-hopkinson","count":4},{"name":"Florian Pinault","email":"Florian.Pinault@ecmwf.int","login":"floriankrb","count":3},{"name":"chebertpinard","email":"Charlie.Hebert-Pinard@ec.gc.ca","login":"chebertpinard","count":1},{"name":"Marek Jacob","email":"MeraX","login":"MeraX","count":1},{"name":"Leo","email":"91425082+CornishLeo","login":"CornishLeo","count":1},{"name":"Julien Lefaucheur","email":"jjlk","login":"jjlk","count":1},{"name":"Jesper Dramsch","email":"jesper@dramsch.net","login":"JesperDramsch","count":1},{"name":"Daniele Nerini","email":"daniele.nerini@gmail.com","login":"dnerini","count":1}],"past_year_committers":[{"name":"Vera","email":"121622878+VeraChristina","login":"VeraChristina","count":11},{"name":"DeployDuck","email":"150700357+DeployDuck","login":"DeployDuck","count":10},{"name":"pre-commit-ci[bot]","email":"66853113+pre-commit-ci[bot]","login":"pre-commit-ci[bot]","count":10},{"name":"Ana Prieto Nemesio","email":"91897203+anaprietonem","login":"anaprietonem","count":10},{"name":"Matthew Chantry","email":"matthew.chantry@ecmwf.int","login":"mchantry","count":3},{"name":"Gert Mertes","email":"13658335+gmertes","login":"gmertes","count":2},{"name":"b8raoult","email":"53792887+b8raoult","login":"b8raoult","count":1},{"name":"Marek Jacob","email":"MeraX","login":"MeraX","count":1},{"name":"Leo","email":"91425082+CornishLeo","login":"CornishLeo","count":1},{"name":"Julien Lefaucheur","email":"jjlk","login":"jjlk","count":1},{"name":"Florian Pinault","email":"floriankrb","login":"floriankrb","count":1},{"name":"Daniele Nerini","email":"daniele.nerini@gmail.com","login":"dnerini","count":1},{"name":"Aaron Hopkinson","email":"197336788+aaron-hopkinson","login":"aaron-hopkinson","count":1}],"commits_url":"https://commits.ecosyste.ms/api/v1/hosts/GitHub/repositories/ecmwf%2Fanemoi/commits","host":{"name":"GitHub","url":"https://github.com","kind":"github","last_synced_at":"2026-04-09T00:00:23.197Z","repositories_count":6212625,"commits_count":911532372,"contributors_count":35183078,"owners_count":1143406,"icon_url":"https://github.com/github.png","host_url":"https://commits.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://commits.ecosyste.ms/api/v1/hosts/GitHub/repositories"}},"issues_stats":{"full_name":"ecmwf/anemoi","html_url":"https://github.com/ecmwf/anemoi","last_synced_at":"2026-04-07T17:00:37.517Z","status":"active","issues_count":10,"pull_requests_count":20,"avg_time_to_close_issue":7956471.333333333,"avg_time_to_close_pull_request":66586.11111111111,"issues_closed_count":3,"pull_requests_closed_count":9,"pull_request_authors_count":7,"issue_authors_count":6,"avg_comments_per_issue":1.0,"avg_comments_per_pull_request":0.2,"merged_pull_requests_count":8,"bot_issues_count":0,"bot_pull_requests_count":5,"past_year_issues_count":10,"past_year_pull_requests_count":20,"past_year_avg_time_to_close_issue":7956471.333333333,"past_year_avg_time_to_close_pull_request":66586.11111111111,"past_year_issues_closed_count":3,"past_year_pull_requests_closed_count":9,"past_year_pull_request_authors_count":7,"past_year_issue_authors_count":6,"past_year_avg_comments_per_issue":1.0,"past_year_avg_comments_per_pull_request":0.2,"past_year_bot_issues_count":0,"past_year_bot_pull_requests_count":5,"past_year_merged_pull_requests_count":8,"created_at":"2025-09-11T12:00:23.278Z","updated_at":"2026-04-07T17:00:37.517Z","repository_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories/ecmwf%2Fanemoi","issues_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories/ecmwf%2Fanemoi/issues","issue_labels_count":{"enhancement":4,"CI/CD":3,"help wanted":1,"dependencies":1,"bug":1},"pull_request_labels_count":{"CI/CD":7,"ATS Approval Not Needed":6,"tests":6,"sync":6,"dependencies":3,"documentation":2,"ATS Approved":1},"issue_author_associations_count":{"CONTRIBUTOR":6,"MEMBER":2,"NONE":2},"pull_request_author_associations_count":{"CONTRIBUTOR":11,"COLLABORATOR":6,"MEMBER":2,"NONE":1},"issue_authors":{"VeraChristina":3,"anaprietonem":2,"HCookie":2,"mcocdawc":1,"cerodell":1,"aaron-hopkinson":1},"pull_request_authors":{"DeployDuck":6,"pre-commit-ci[bot]":5,"VeraChristina":4,"anaprietonem":2,"mchantry":1,"gmertes":1,"pontuselmrin":1},"host":{"name":"GitHub","url":"https://github.com","kind":"github","last_synced_at":"2026-04-09T00:00:10.509Z","repositories_count":14167315,"issues_count":34539368,"pull_requests_count":112966883,"authors_count":11231461,"icon_url":"https://github.com/github.png","host_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories","owners_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/owners","authors_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors"},"past_year_issue_labels_count":{"enhancement":4,"CI/CD":3,"bug":1,"dependencies":1,"help wanted":1},"past_year_pull_request_labels_count":{"CI/CD":7,"sync":6,"tests":6,"ATS Approval Not Needed":6,"dependencies":3,"documentation":2,"ATS Approved":1},"past_year_issue_author_associations_count":{"CONTRIBUTOR":6,"MEMBER":2,"NONE":2},"past_year_pull_request_author_associations_count":{"CONTRIBUTOR":11,"COLLABORATOR":6,"MEMBER":2,"NONE":1},"past_year_issue_authors":{"VeraChristina":3,"anaprietonem":2,"HCookie":2,"aaron-hopkinson":1,"cerodell":1,"mcocdawc":1},"past_year_pull_request_authors":{"DeployDuck":6,"pre-commit-ci[bot]":5,"VeraChristina":4,"anaprietonem":2,"gmertes":1,"mchantry":1,"pontuselmrin":1},"maintainers":[{"login":"DeployDuck","count":6,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/DeployDuck"},{"login":"HCookie","count":2,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/HCookie"},{"login":"gmertes","count":1,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/gmertes"},{"login":"mchantry","count":1,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/mchantry"}],"active_maintainers":[{"login":"DeployDuck","count":6,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/DeployDuck"},{"login":"HCookie","count":2,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/HCookie"},{"login":"gmertes","count":1,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/gmertes"},{"login":"mchantry","count":1,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/mchantry"}]},"events":{"total":{"DeleteEvent":19,"PullRequestEvent":43,"ForkEvent":2,"IssuesEvent":15,"WatchEvent":12,"IssueCommentEvent":9,"PushEvent":38,"PullRequestReviewCommentEvent":5,"PullRequestReviewEvent":18,"CreateEvent":20},"last_year":{"DeleteEvent":19,"PullRequestEvent":43,"ForkEvent":2,"IssuesEvent":15,"WatchEvent":12,"IssueCommentEvent":9,"PushEvent":38,"PullRequestReviewCommentEvent":5,"PullRequestReviewEvent":18,"CreateEvent":20}},"keywords":["anemoi"],"dependencies":[{"ecosystem":"actions","filepath":".github/workflows/qa.yml","sha":null,"kind":"manifest","created_at":"2024-06-25T07:57:19.325Z","updated_at":"2024-06-25T07:57:19.325Z","repository_link":"https://github.com/ecmwf/anemoi/blob/main/.github/workflows/qa.yml","dependencies":[{"id":18812225946,"package_name":"actions/checkout","ecosystem":"actions","requirements":"v4","direct":true,"kind":"composite","optional":false},{"id":18812225947,"package_name":"actions/setup-python","ecosystem":"actions","requirements":"v5","direct":true,"kind":"composite","optional":false},{"id":18812225948,"package_name":"pre-commit/action","ecosystem":"actions","requirements":"v3.0.1","direct":true,"kind":"composite","optional":false}]},{"ecosystem":"actions","filepath":".github/workflows/nightly_ci_hpc.yaml","sha":null,"kind":"manifest","created_at":"2025-12-14T10:00:39.170Z","updated_at":"2025-12-14T10:00:39.170Z","repository_link":"https://github.com/ecmwf/anemoi/blob/main/.github/workflows/nightly_ci_hpc.yaml","dependencies":[]},{"ecosystem":"actions","filepath":".github/workflows/pr-label-public.yml","sha":null,"kind":"manifest","created_at":"2025-12-14T10:00:40.267Z","updated_at":"2025-12-14T10:00:40.267Z","repository_link":"https://github.com/ecmwf/anemoi/blob/main/.github/workflows/pr-label-public.yml","dependencies":[]},{"ecosystem":"actions","filepath":".github/workflows/on_demand_ci_hpc.yaml","sha":null,"kind":"manifest","created_at":"2025-12-14T10:00:39.228Z","updated_at":"2025-12-14T10:00:39.228Z","repository_link":"https://github.com/ecmwf/anemoi/blob/main/.github/workflows/on_demand_ci_hpc.yaml","dependencies":[]},{"ecosystem":"actions","filepath":".github/actions/deploy/action.yaml","sha":null,"kind":"manifest","created_at":"2025-12-14T10:00:39.006Z","updated_at":"2025-12-14T10:00:39.006Z","repository_link":"https://github.com/ecmwf/anemoi/blob/main/.github/actions/deploy/action.yaml","dependencies":[{"id":25768347398,"package_name":"ecmwf-actions/reusable-workflows/ci-hpc-generic","ecosystem":"actions","requirements":"v2","direct":true,"kind":"composite","optional":false}]},{"ecosystem":"actions","filepath":".github/workflows/pr-label-ats.yml","sha":null,"kind":"manifest","created_at":"2025-12-14T10:00:39.970Z","updated_at":"2025-12-14T10:00:39.970Z","repository_link":"https://github.com/ecmwf/anemoi/blob/main/.github/workflows/pr-label-ats.yml","dependencies":[{"id":25768347449,"package_name":"actions/github-script","ecosystem":"actions","requirements":"v7","direct":true,"kind":"composite","optional":false}]},{"ecosystem":"actions","filepath":".github/workflows/pr-label-file-based.yml","sha":null,"kind":"manifest","created_at":"2025-12-14T10:00:40.197Z","updated_at":"2025-12-14T10:00:40.197Z","repository_link":"https://github.com/ecmwf/anemoi/blob/main/.github/workflows/pr-label-file-based.yml","dependencies":[{"id":25768347461,"package_name":"actions/labeler","ecosystem":"actions","requirements":"v5","direct":true,"kind":"composite","optional":false}]},{"ecosystem":"actions","filepath":".github/workflows/readthedocs-pr-update.yml","sha":null,"kind":"manifest","created_at":"2025-12-14T10:00:40.328Z","updated_at":"2025-12-14T10:00:40.328Z","repository_link":"https://github.com/ecmwf/anemoi/blob/main/.github/workflows/readthedocs-pr-update.yml","dependencies":[{"id":25768347464,"package_name":"readthedocs/actions/preview","ecosystem":"actions","requirements":"v1","direct":true,"kind":"composite","optional":false}]},{"ecosystem":"actions","filepath":".github/workflows/system_level_test.yaml","sha":null,"kind":"manifest","created_at":"2025-12-14T10:00:40.901Z","updated_at":"2025-12-14T10:00:40.901Z","repository_link":"https://github.com/ecmwf/anemoi/blob/main/.github/workflows/system_level_test.yaml","dependencies":[{"id":25768347541,"package_name":"ecmwf/reusable-workflows/ci-hpc-generic","ecosystem":"actions","requirements":"v2","direct":true,"kind":"composite","optional":false},{"id":25768347542,"package_name":"ecmwf/reusable-workflows/hpc/ecflow/wait-for-ecflow-suite-to-complete","ecosystem":"actions","requirements":"v2","direct":true,"kind":"composite","optional":false},{"id":25768347543,"package_name":"ecmwf/reusable-workflows/hpc/ecflow/remove-suite","ecosystem":"actions","requirements":"v2","direct":true,"kind":"composite","optional":false},{"id":25768347479,"package_name":"actions/checkout","ecosystem":"actions","requirements":"v4","direct":true,"kind":"composite","optional":false},{"id":25768347480,"package_name":"./.github/actions/deploy","ecosystem":"actions","requirements":"*","direct":true,"kind":"composite","optional":false}]},{"ecosystem":"actions","filepath":".github/workflows/pr-conventional-commit.yml","sha":null,"kind":"manifest","created_at":"2025-12-14T10:00:39.274Z","updated_at":"2025-12-14T10:00:39.274Z","repository_link":"https://github.com/ecmwf/anemoi/blob/main/.github/workflows/pr-conventional-commit.yml","dependencies":[{"id":25768347431,"package_name":"amannn/action-semantic-pull-request","ecosystem":"actions","requirements":"v5","direct":true,"kind":"composite","optional":false}]},{"ecosystem":"pypi","filepath":"tools/requirements.txt","sha":null,"kind":"manifest","created_at":"2025-12-14T10:00:42.729Z","updated_at":"2025-12-14T10:00:42.729Z","repository_link":"https://github.com/ecmwf/anemoi/blob/main/tools/requirements.txt","dependencies":[{"id":25768347648,"package_name":"requests","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":25768347649,"package_name":"python-dotenv","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false}]},{"ecosystem":"actions","filepath":".github/workflows/pr-label-conventional-commits.yml","sha":null,"kind":"manifest","created_at":"2025-12-14T10:00:40.028Z","updated_at":"2025-12-14T10:00:40.028Z","repository_link":"https://github.com/ecmwf/anemoi/blob/main/.github/workflows/pr-label-conventional-commits.yml","dependencies":[{"id":25768347451,"package_name":"actions/checkout","ecosystem":"actions","requirements":"v3","direct":true,"kind":"composite","optional":false},{"id":25768347454,"package_name":"mauroalderete/action-assign-labels","ecosystem":"actions","requirements":"v1","direct":true,"kind":"composite","optional":false}]},{"ecosystem":"pypi","filepath":"pyproject.toml","sha":null,"kind":"manifest","created_at":"2025-12-14T10:00:41.796Z","updated_at":"2025-12-14T10:00:41.796Z","repository_link":"https://github.com/ecmwf/anemoi/blob/main/pyproject.toml","dependencies":[{"id":25768347545,"package_name":"nbsphinx","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":25768347546,"package_name":"pandoc","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":25768347582,"package_name":"pre-commit","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":25768347583,"package_name":"requests","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":25768347584,"package_name":"sphinx","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":25768347585,"package_name":"sphinx-argparse","ecosystem":"pypi","requirements":"\u003c0.5","direct":true,"kind":"runtime","optional":false},{"id":25768347623,"package_name":"sphinx-rtd-theme","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false}]}],"score":6.866933284461881,"created_at":"2025-11-24T00:20:50.720Z","updated_at":"2026-04-10T18:30:15.476Z","avatar_url":"https://github.com/ecmwf.png","language":"Python","category":"Atmosphere","sub_category":"Atmospheric Composition and Dynamics","monthly_downloads":0,"total_dependent_repos":0,"total_dependent_packages":0,"readme":"Anemoi Framework\n================\n\n[![Static Badge](https://github.com/ecmwf/codex/raw/refs/heads/main/Project%20Maturity/incubating_badge.svg)](https://github.com/ecmwf/codex/raw/refs/heads/main/Project%20Maturity#incubating)\n\n\n\u003e \\[!IMPORTANT\\]\n\u003e This software is **Incubating** and subject to ECMWF's guidelines on [Software Maturity](https://github.com/ecmwf/codex/raw/refs/heads/main/Project%20Maturity).\n\n[**Overview**](#overview) | [**Features**](#features) | [**Installation**](#installation) | [**Contributing**](#contributing) | [**Roadmap**](#roadmap) | [**Community**](#community) | [**License**](#license) |  [**Other resources \u0026 References**](#other-resources--references)\n\n\nAnemoi is an open-source, Python-based framework developed collaboratively by ECMWF and several European national meteorological services.  It is designed to facilitate the development, training, and deployment of machine learning (ML) models for weather forecasting. As an 'end to end' framework, it provides a comprehensive toolkit that spans data preparation, model training, and inference, enabling meteorological organizations to leverage their own data for ML-based weather prediction.\n\n![Anemoi Logo](docs/_static/logo.png)\n\n- [Anemoi - A new framework for Weather Forecasting based on Machine Learning](https://www.ecmwf.int/en/about/media-centre/news/2024/anemoi-new-framework-weather-forecasting-based-machine-learning)\n\n\nOverview\n--------\nThe `anemoi` repository aims, for now, to provide a centralized overview of the entire framework.\nAdditionally, it contains the [Anemoi Documentation](https://anemoi.readthedocs.io/en/latest/) and system-level tests that assess the interfaces and ensure all components work well with each other.\n\nAnemoi offers a modular architecture composed of several packages, each targeting different components necessary for constructing data-driven weather models:\n\n- **[anemoi-datasets](https://github.com/ecmwf/anemoi-datasets)**: Tools for handling and preprocessing meteorological datasets.\n- **[anemoi-graphs](https://github.com/ecmwf/anemoi-core/tree/main/graphs)**: Utilities for constructing graph representations of meteorological data.\n- **[anemoi-models](https://github.com/ecmwf/anemoi-core/tree/main/models)**: Core components for defining and training ML models, including graph neural networks (GNNs) and graph transformers.\n- **[anemoi-training](https://github.com/ecmwf/anemoi-core/tree/main/training)**: Framework for training ML models, including support for distributed training.\n- **[anemoi-inference](https://github.com/ecmwf/anemoi-inference)**: Tools for deploying trained models and performing inference.\n- **[anemoi-transform](https://github.com/ecmwf/anemoi-transform)**: Utilities for data transformation and augmentation.\n- **[anemoi-utils](https://github.com/ecmwf/anemoi-utils)**: Miscellaneous utility functions.\n- **[anemoi-registry](https://github.com/ecmwf/anemoi-registry)**: Centralized registry for storing and accessing model configurations and metadata.\n\nEach package collects metadata that can be used by subsequent packages, facilitating a seamless workflow from data ingestion to operational model deployment.\n\nThe diagram below shows the relationship of these packages in terms of dependencies.\\\n![Anemoi Dependencies](docs/_static/dependencies.png)\n\nThe diagram below represents the main packages in the Anemoi framework and the general workflow for using them:\n\n![Anemoi Workflow](docs/_static/anemoi_packages_workflow.png)\n\nSummary of workflow:\n- Start by building a dataset with `anemoi-datasets`.\n- Train a model using `anemoi-core` (central yellow boxes inside a black rectangle): This repository groups three distinct but related packages to support model development:\n    - `anemoi-models`: Contains definitions for different machine learning models.\n    - `anemoi-training`: Provides the training framework and utilities for fitting models on prepared datasets.\n    - `anemoi-graphs`: Supports graph-based representations for modeling meteorological data.\nThese three packages are separated to make development easier, but they all live under the [anemoi-core GitHub repository](https://github.com/ecmwf/anemoi-core).\n- Perform predictions with `anemoi-inference`.\n- Any domain-specific transformations and code that can be shared across datasets, training, and inference is handled by `anemoi-transform`\n- Helper functions and domain-agnostic general purpose utilities are included in `anemoi-utils`.\n\nThis structure separates concerns clearly, promotes reusability, and makes development modular while keeping core components organized under `anemoi-core`.\n\nEach package collects metadata that can be used by subsequent packages, facilitating a seamless workflow from data ingestion to operational model deployment.\n\n\nFeatures\n--------\n\n- **Modular Design**: Easily extendable components for various stages of the ML pipeline.\n- **Customizable Configurations**: Flexible configuration system using Hydra for model and training parameters.\n- **Distributed Training Support**: Leverage PyTorch Lightning for scalable and efficient training.\n- **Interoperability**: Built on top of established Python tools including PyTorch, Lightning, Hydra, Zarr, Xarray, and Earthkit.\n- **Open-Source Collaboration**: Developed in collaboration with multiple European meteorological services.\n\nInstallation\n------------\n\nTo install the Anemoi framework, clone the repository and install the required dependencies (e.g. for anemoi-transform) :\n\n    $ git clone https://github.com/ecmwf/anemoi-transform.git\n    $ cd anemoi-transform\n    $ pip install -e\n\nOr one can also install each of the packages directly from PyPI\n\n    $ pip install anemoi-transform\n\n\nFor detailed installation instructions and environment setup, refer to the [Installation Guide](https://anemoi.readthedocs.io/en/latest/installation/).\n\nContributing\n------------\n\nWe welcome contributions to the Anemoi framework! If you’d like to get involved, please follow the [Contributing Guide](https://anemoi.readthedocs.io/projects/training/en/stable/dev/contributing.html#), which outlines the full development workflow — from setting up your environment, to branching and committing, to opening pull requests and going through review. We encourage opening issues as way to discuss any ideas or new features as a first-step!\n\nIf you’re new to Anemoi, we recommend starting with the [Getting Started Tour](https://anemoi.readthedocs.io/en/latest/getting-started/tour.html) for a quick overview of the framework before diving into development.\n\n\nRoadmap\n-------\n\nThe development of the Anemoi framework follows a structured roadmap to ensure continuous improvement and feature development.\nFor a detailed view of planned milestones, priorities, and upcoming features, see the [Development Roadmap](https://anemoi.readthedocs.io/en/latest/contributing/roadmap.html#development-roadmap).\n\n\nCommunity\n---------\n\nThe Anemoi framework fosters an open and collaborative community. Governance is guided by clear principles to ensure transparency and inclusiveness, described in the [Governance Documentation](https://anemoi.readthedocs.io/en/latest/contributing/governance.html).\n\n\nCommunity members are encouraged to participate in regular interactions such as the [Anemoi Community Meetings](https://anemoi.readthedocs.io/en/latest/contributing/roadmap.html#anemoi-community-meeting), where updates, discussions take place.\n\nLicense\n-------\n\nAnemoi is licensed under the Apache License 2.0.\nSee the [LICENSE](https://github.com/ecmwf/anemoi-core/blob/main/LICENSE) file for more details.\n\nFor more information, visit the [Anemoi Documentation](https://anemoi.readthedocs.io/en/latest/).\n\nOther resources \u0026 References\n----------------------------\n\nAdditional resources for using and understanding Anemoi:\n\n- Documentation for each package within the framework: [Anemoi Packages Docs](https://anemoi.readthedocs.io/en/latest/)\n- Anemoi webinars: [Anemoi Webinars](https://events.ecmwf.int/event/446/)\n- `anemoi-configs` package for example configurations: [Anemoi Configs](https://github.com/ecmwf/anemoi-configs)\n- Citation information: [How to Cite Anemoi](https://anemoi.readthedocs.io/en/latest/index.html#how-to-cite-anemoi)\n","funding_links":[],"readme_doi_urls":[],"works":{},"citation_counts":{},"total_citations":0,"keywords_from_contributors":[],"project_url":"https://ost.ecosyste.ms/api/v1/projects/335728","html_url":"https://ost.ecosyste.ms/projects/335728"}