Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
31 commits
Select commit Hold shift + click to select a range
af9c33f
added grib2io for converting nc to grib2
LinlinCui-NOAA Jun 4, 2025
b8ce5b4
update readme
LinlinCui-NOAA Jun 5, 2025
72c1eb5
keep save_grib2 consistent
LinlinCui-NOAA Jun 5, 2025
097919c
fixed a bug in defining output filename
LinlinCui-NOAA Jun 5, 2025
76fcfa0
Merge branch 'NOAA-EMC:main' into grib2io
LinlinCui-NOAA Aug 5, 2025
7a13c8f
added scripts for wcoss2
Aug 18, 2025
daf7393
changed file name in nc2grib
LinlinCui-NOAA Aug 18, 2025
1ebf318
change function name
LinlinCui-NOAA Aug 19, 2025
c77acea
added cron job script
LinlinCui-NOAA Aug 19, 2025
dccccc5
update syndat path
LinlinCui-NOAA Aug 19, 2025
aa7b75b
rename file and job function
LinlinCui-NOAA Aug 19, 2025
9111d38
Merge pull request #28 from LinlinCui-NOAA/grib2io
LinlinCui-NOAA Aug 19, 2025
0e2d418
added ens mean and spr to the workflow
LinlinCui-NOAA Aug 20, 2025
df99d12
rename file names, update run_graphcast to take both mlgfs and mlgefs
LinlinCui-NOAA Aug 20, 2025
0c4e7c5
address the PR reviews
LinlinCui-NOAA Aug 21, 2025
eee1794
fixed tracker verification code
LinlinCui-NOAA Aug 21, 2025
e80548c
Merge pull request #30 from NOAA-EMC/feature/avgspr
LinlinCui-NOAA Aug 21, 2025
aae1876
Package `mlglobal` (#33)
aerorahul Aug 27, 2025
3a928b0
Update json files for grib2 messages and replace pygrib with grib2io …
LinlinCui-NOAA Sep 3, 2025
e450582
Change output file names
LinlinCui-NOAA Sep 3, 2025
ff01588
Change "ml" to "ai" in the directory name and file names (#42)
LinlinCui-NOAA Sep 5, 2025
04a30c7
Save output at each step (#44)
LinlinCui-NOAA Sep 15, 2025
6f70809
Impose a low bound of zero for SPFH and operational tweaks (#50)
LinlinCui-NOAA Sep 18, 2025
5d0b7ae
Drop accumulated total precip for AIGEFS (#52)
LinlinCui-NOAA Sep 23, 2025
f112457
Call ecflow_client to set event for post jobs (#53)
RussellManser-NCO Sep 26, 2025
4e24053
Minor updates and housekeeping (#56)
aerorahul Sep 26, 2025
6e0fca5
Feature/issue tmpl (#57)
aerorahul Sep 26, 2025
9192840
update decimal precision for SPFH at different levels (#59)
LinlinCui-NOAA Sep 30, 2025
0ce7e95
Final adjustments to gen_aig[e]fs_ics.py for production (#64)
RussellManser-NCO Oct 10, 2025
e74058d
update grib2 msg for aigefs (#67)
LinlinCui-NOAA Nov 25, 2025
a03a127
Added time log for each step and removed Bfloat16cast (#68)
LinlinCui-NOAA Dec 10, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
24 changes: 24 additions & 0 deletions .editorconfig
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
# EditorConfig helps developers define and maintain consistent
# coding styles between different editors and IDEs
# editorconfig.org

root = true


[*]
end_of_line = lf
charset = utf-8
trim_trailing_whitespace = true
insert_final_newline = true
indent_style = space
indent_size = 2

[*.py]
indent_size = 4

[*.txt]
indent_style = tab
indent_size = 4

[*.{diff}]
trim_trailing_whitespace = false
6 changes: 6 additions & 0 deletions .flake8
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
[flake8]
exclude = .git,.github,venv,__pycache__,docs/conf.py,old,build,dist
max-line-length = 160
per-file-ignores =
# imported but unused
__init__.py: F401
61 changes: 61 additions & 0 deletions .github/ISSUE_TEMPLATE/ops_bug.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
name: Ops Bug Report
description: Report something that is incorrect or broken
labels: ["ops-bug"]
type: "bug"
projects: []
assignees: []

body:
- type: markdown
attributes:
value: |
Your bug may already be reported!
Please search on the [Issue tracker](https://github.com/NOAA-EMC/mlglobal/issues) before creating one.

- type: textarea
id: current_behavior
attributes:
label: What is wrong?
description: Give a brief description of what is incorrect or broken.
placeholder: |
Short log snippets that illustrate the problem can be included here.

For any longer logs, please create a GitHub gist (https://gist.github.com/) and link it here.
validations:
required: true

- type: textarea
id: expected_behavior
attributes:
label: What should have happened?
placeholder: Describe what you expected to happen.
validations:
required: true

- type: textarea
id: reproduction_steps
attributes:
label: Steps to reproduce
description: Please give explicit instructions to reproduce the error
placeholder: |
1.
2.
3.
validations:
required: true

- type: textarea
id: description
attributes:
label: Additional information
description: Provide context or any additional information about the bug.
validations:
required: true

- type: textarea
id: proposed_implementation
attributes:
label: Do you have a proposed solution?
description: If you already have an idea on how to fix this, please provide it here.
placeholder: Optional

14 changes: 14 additions & 0 deletions .github/workflows/pynorms.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
name: pynorms
on: [workflow_dispatch]
#on: [push, pull_request, workflow_dispatch]

jobs:
pre-commit:
runs-on: ubuntu-latest
steps:
- name: Check python coding norms with pre-commit
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: '3.12'
- uses: pre-commit/action@v3.0.1
108 changes: 105 additions & 3 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,4 +1,106 @@
*.egg*
__pycache__
*.swp
# Byte-compiled / optimized / DLL files
__pycache__/
*.py[cod]
*$py.class

# Distribution / packaging
.Python
build/
develop-eggs/
dist/
downloads/
eggs/
.eggs/
lib/
lib64/
parts/
sdist/
var/
wheels/
pip-wheel-metadata/
share/python-wheels/
*.egg-info/
.installed.cfg
*.egg
MANIFEST

# Installer logs
pip-log.txt
pip-delete-this-directory.txt

# Unit test / coverage reports
htmlcov/
.tox/
.nox/
.coverage
.coverage.*
.cache
nosetests.xml
coverage.xml
*.cover
*.py,cover
.hypothesis/
.pytest_cache/

# Translations
*.mo
*.pot

# Sphinx documentation
docs/_build/

# Jupyter Notebook
.ipynb_checkpoints

# IPython
profile_default/
ipython_config.py

# pyenv
.python-version

# pipenv
# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
# However, in case of collaboration, if having platform-specific dependencies or dependencies
# having no cross-platform support, pipenv may install dependencies that don't work, or not
# install all needed dependencies.
#Pipfile.lock

# PEP 582; used by e.g. github.com/David-OConnor/pyflow
__pypackages__/

# Environments
.env
.venv
env/
venv/
ENV/
env.bak/
venv.bak/

# mkdocs documentation
/site

# mypy
.mypy_cache/
.dmypy.json
dmypy.json

# Pyre type checker
.pyre/

# Editor backup files (Emacs, vim)
*~
*.sw[a-p]
.DS_Store

# Pycharm IDE files
.idea/

# VSCode files
*vscode*

# Ignore grib2 and netcdf files in the repository
*.nc*
*grb*
*grib2*
5 changes: 3 additions & 2 deletions .gitmodules
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
[submodule "graphcast"]
path = graphcast
url = https://github.com/google-deepmind/graphcast.git
path = graphcast
url = https://github.com/noaa-emc/graphcast
ignore = dirty
39 changes: 39 additions & 0 deletions .pre-commit-config.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
repos:
# General pre-commit hooks for common issues
- repo: https://github.com/pre-commit/pre-commit-hooks
rev: v6.0.0 # Use the latest stable version
hooks:
- id: trailing-whitespace
- id: end-of-file-fixer
- id: check-yaml
- id: check-added-large-files
- id: check-ast

# Black formatter for consistent code style
- repo: https://github.com/psf/black
rev: 24.4.2 # Use the latest stable version
hooks:
- id: black
language_version: python3.12 # Specify your Python version
files: ^(src/|tests/)
exclude: ^(oper/|graphcast/|training/)

# Flake8 linter for style guide enforcement and error checking
- repo: https://github.com/PyCQA/flake8
rev: 7.1.0 # Use the latest stable version
hooks:
- id: flake8
name: flake8
entry: flake8
files: ^(src/|tests/)
exclude: ^(oper/|graphcast/|training/)

# isort for sorting imports alphabetically and separating them into sections
- repo: https://github.com/PyCQA/isort
rev: 6.0.1 # Use the latest stable version
hooks:
- id: isort
name: isort (python)
args: ["--profile", "black"] # Use the black profile for compatibility
files: ^(src/|tests/)
exclude: ^(oper/|graphcast/|training/)
41 changes: 41 additions & 0 deletions LICENSE.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
# Creative Commons CC0 1.0 Universal

CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE LEGAL SERVICES. DISTRIBUTION OF THIS DOCUMENT DOES NOT CREATE AN ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS INFORMATION ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES REGARDING THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS PROVIDED HEREUNDER, AND DISCLAIMS LIABILITY FOR DAMAGES RESULTING FROM THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS PROVIDED HEREUNDER.

## Statement of Purpose

The laws of most jurisdictions throughout the world automatically confer exclusive Copyright and Related Rights (defined below) upon the creator and subsequent owner(s) (each and all, an "owner") of an original work of authorship and/or a database (each, a "Work").

Certain owners wish to permanently relinquish those rights to a Work for the purpose of contributing to a commons of creative, cultural and scientific works ("Commons") that the public can reliably and without fear of later claims of infringement build upon, modify, incorporate in other works, reuse and redistribute as freely as possible in any form whatsoever and for any purposes, including without limitation commercial purposes. These owners may contribute to the Commons to promote the ideal of a free culture and the further production of creative, cultural and scientific works, or to gain reputation or greater distribution for their Work in part through the use and efforts of others.

For these and/or other purposes and motivations, and without any expectation of additional consideration or compensation, the person associating CC0 with a Work (the "Affirmer"), to the extent that he or she is an owner of Copyright and Related Rights in the Work, voluntarily elects to apply CC0 to the Work and publicly distribute the Work under its terms, with knowledge of his or her Copyright and Related Rights in the Work and the meaning and intended legal effect of CC0 on those rights.

1. __Copyright and Related Rights.__ A Work made available under CC0 may be protected by copyright and related or neighboring rights ("Copyright and Related Rights"). Copyright and Related Rights include, but are not limited to, the following:

i. the right to reproduce, adapt, distribute, perform, display, communicate, and translate a Work;

ii. moral rights retained by the original author(s) and/or performer(s);

iii. publicity and privacy rights pertaining to a person's image or likeness depicted in a Work;

iv. rights protecting against unfair competition in regards to a Work, subject to the limitations in paragraph 4(a), below;

v. rights protecting the extraction, dissemination, use and reuse of data in a Work;

vi. database rights (such as those arising under Directive 96/9/EC of the European Parliament and of the Council of 11 March 1996 on the legal protection of databases, and under any national implementation thereof, including any amended or successor version of such directive); and

vii. other similar, equivalent or corresponding rights throughout the world based on applicable law or treaty, and any national implementations thereof.

2. __Waiver.__ To the greatest extent permitted by, but not in contravention of, applicable law, Affirmer hereby overtly, fully, permanently, irrevocably and unconditionally waives, abandons, and surrenders all of Affirmer's Copyright and Related Rights and associated claims and causes of action, whether now known or unknown (including existing as well as future claims and causes of action), in the Work (i) in all territories worldwide, (ii) for the maximum duration provided by applicable law or treaty (including future time extensions), (iii) in any current or future medium and for any number of copies, and (iv) for any purpose whatsoever, including without limitation commercial, advertising or promotional purposes (the "Waiver"). Affirmer makes the Waiver for the benefit of each member of the public at large and to the detriment of Affirmer's heirs and successors, fully intending that such Waiver shall not be subject to revocation, rescission, cancellation, termination, or any other legal or equitable action to disrupt the quiet enjoyment of the Work by the public as contemplated by Affirmer's express Statement of Purpose.

3. __Public License Fallback.__ Should any part of the Waiver for any reason be judged legally invalid or ineffective under applicable law, then the Waiver shall be preserved to the maximum extent permitted taking into account Affirmer's express Statement of Purpose. In addition, to the extent the Waiver is so judged Affirmer hereby grants to each affected person a royalty-free, non transferable, non sublicensable, non exclusive, irrevocable and unconditional license to exercise Affirmer's Copyright and Related Rights in the Work (i) in all territories worldwide, (ii) for the maximum duration provided by applicable law or treaty (including future time extensions), (iii) in any current or future medium and for any number of copies, and (iv) for any purpose whatsoever, including without limitation commercial, advertising or promotional purposes (the "License"). The License shall be deemed effective as of the date CC0 was applied by Affirmer to the Work. Should any part of the License for any reason be judged legally invalid or ineffective under applicable law, such partial invalidity or ineffectiveness shall not invalidate the remainder of the License, and in such case Affirmer hereby affirms that he or she will not (i) exercise any of his or her remaining Copyright and Related Rights in the Work or (ii) assert any associated claims and causes of action with respect to the Work, in either case contrary to Affirmer's express Statement of Purpose.

4. __Limitations and Disclaimers.__

a. No trademark or patent rights held by Affirmer are waived, abandoned, surrendered, licensed or otherwise affected by this document.

b. Affirmer offers the Work as-is and makes no representations or warranties of any kind concerning the Work, express, implied, statutory or otherwise, including without limitation warranties of title, merchantability, fitness for a particular purpose, non infringement, or the absence of latent or other defects, accuracy, or the present or absence of errors, whether or not discoverable, all to the greatest extent permissible under applicable law.

c. Affirmer disclaims responsibility for clearing rights of other persons that may apply to the Work or any use thereof, including without limitation any person's Copyright and Related Rights in the Work. Further, Affirmer disclaims responsibility for obtaining any necessary consents, permissions or other rights required for any use of the Work.

d. Affirmer understands and acknowledges that Creative Commons is not a party to this document and has no duty or obligation with respect to this CC0 or use of the Work.
Loading