Skip to main content

fremor

Anaconda-Server Badge Anaconda-Server Badge Anaconda-Server Badge

fremor CMORizes FRE output with CMOR. It is both a conda and pip package.

Documentation is on readthedocs.

License

Apache License 2.0 — see LICENSE.md

DOI/Citation

zenodo DOI

Under construction! Sometimes the badge doesn't render, try refreshing.

Contributors

Contributors

Background and Purpose

fremor is a model output rewriter (CMORizer) for FRE/FMS based models and output. It is specifically geared for standardizing NOAA-GFDL datasets for further quality control checks, assessments and data publishing pipelines in the context of CMIP7 using the CMOR library.

Relationship to fre-cli

fremor was originally the fre.cmor submodule of NOAA-GFDL/fre-cli and so stands on the shoulders of it's contributors, retaining it's general structure and lessons learned from it. Future re-integrations back into fre-cli, as a formal package dependency, are being assessed.

AI Disclaimer

AI was heavily used in the creation of this repository, primarily github's copilot with Claude (opus4.6, sonnet4.6, and haiku), and Gemini and Chat-GPT models to a lesser extent, in agent mode. Claude and Codex agents have also contributed.

Quickstart

# Initialize CMIP6Plus resources (config template + MIP tables)
fremor init -m cmip6plus -e exp_config.json -t mip-cmor-tables --fast

For an overview of required inputs and sample commands, see the CMOR Quickstart.

Installation / Access

via PPAN / modules

If you're trying to gain access to fremor functionality as quickly as possible:

# a tagged version of fremor, post-releases will never be named modules
module load fremor/X.Y.Z

## (COMING SOON) the current post-release, i.e., latest commit on main
#module load fremor/test

via conda and/or conda-forge

If you have a path to a fremor environment you can activate it like so:

conda activate some/path/to/fremor_env

If you want your own fremor environment:

# the environment will be named fremor_en
conda create -n fremor_env conda-forge::fremor

# see fremor_env in the list --> activate it by name
conda env list
conda activate fremor_env

or, if you've already activated a conda environment

conda create -n empty_env
conda activate empty_env
conda install -c conda-forge fremor

# equivalent syntax
conda install conda-forge::fremor

pip install into a virtual environment (conda/venv)

via pip install [-e] . with a checkout of the code

If you're trying to develop fremor capabilities, or edit the code to your liking in either a big or small way, this is for you. This checks out the code, creates and activates an environment, installs into the environment, and runs all unit-tests and pylint checks:

# omit --recursive if you don't want tables as submodules
git clone --recursive https://github.com/NOAA-GFDL/fremor.git
cd fremor

# create an environment and install the local checkout
conda env create -f environment.yaml
conda activate fremor
pip install -e . 

# Run tests
pytest fremor/tests/

# Run linter
pylint --rcfile pylintrc fremor/

via pip install fremor without a checkout of the code

Not all of fremor's dependencies are pip installable, so this method assumes you've grabbed the requirements, and made them available to fremor in a common context via another method (conda is still easiest). Assuming this was done correctly and all relevant python modules are installed to locations in PYTHONPATH, pip install fremor should install the package from PyPI.

Usage

as a command line interface (CLI)

The CLI entry point is fremor, currently a suite of seven routines for facilitating data preparation for CMIP7.

# The full list of subcommands
fremor init      # Initialize CMOR configuration resources: generate template user config, fetch tables
fremor find      # Find and print variables in MIP tables according to your variable lists or other input
fremor varlist   # Create a simple variable list of netCDF files in a directory
fremor config    # Generate a basic CMOR YAML configuration from a pp directory tree
fremor resolve   # Resolve a FRE model YAML + cmor/grids YAMLs into one combined document for inspection
fremor yaml      # Bulk routine for processing data based on a CMOR YAML config, calls fremor run many times
fremor run       # Lowest-level routine, no CMOR YAML needed, rewrites output files in a directory with CMOR

The CLI offers full logging and verbosity control independent of the command chosen:

# verbosity and logging
fremor -v  ...          # INFO level logging
fremor -vv ...          # DEBUG level logging
fremor -q  ...          # ERROR level only (quiet)
fremor -l mylog.txt ... # Log to file (appends)

If you've used the previous fre cmor command, there is a direct mapping of syntax:

# past fre-cli command
fre -vv -l logfile.txt cmor <COMMAND> [OPTIONS]

# fremor equivalent
fremor -vv -l logfile.txt <COMMAND> [OPTIONS]

as a python module

Each CLI subcommand (run, yaml, etc.) maps to an API under under fremor, so the CLI functionality is equivalently available via import in scripts as a proper python module

Versioning and tags

fremor uses a post-release scheme to identify development beyond the latest tagged version. To avoid confusion with fre-workflows and fre-cli, which often demand that the version tags match, fremor's version format is X.Y.Z[.post].

New Release Procedure

see .github/PULL_REQUEST_TEMPLATE/new_release.md

Requirements

fremor's requirements are deliberately kept loose, so that it can be installed in as wide array of conda environments as possible. You'll find stricter ones in environment.yaml. Currently, the package build is using the following, slightly looser requirements:

  • python>=3.11
  • click>=8.2
  • cmor>=3.15.0
  • netCDF4>=1.7
  • numpy>=2
  • pyyaml

For development and testing, pylint, pytest, and pytest-cov are all highly recommended as helpful additions.

CI/CD Workflows and QA

codecov codecov

pylint pylint pylint

conda env create -f environment.yaml

python==3.11:3.11

python==3.12:3.12

python==3.13:3.13

python==3.14:3.14

cmor==nightly:cmor nightly

conda build . build_and_publish_pip

conda-forge/fremor-feedstock conda build conda-forge feedstock

readthedocs and sphinx readthedocs

WCRP Compliance Checking wcrp_compliance_check

Under development

The wcrp_compliance_check workflow validates CMORized NetCDF outputs against WCRP project specifications using cc-plugin-wcrp, a plugin for the IOOS compliance-checker. This pipeline:

  • Runs automatically on pull requests and via manual dispatch
  • Executes unit tests to generate CMORized output files
  • Gathers and categorizes outputs by CMIP version (CMIP6, CMIP7)
  • Validates outputs using the wcrp_cmip6 compliance checker
  • Uploads compliance reports as workflow artifacts (retained for 30 days)

To view compliance results from a workflow/CI run:

  1. Navigate to the Actions tab in GitHub
  2. Select the wcrp_compliance_check workflow run
  3. Download the wcrp-compliance-reports artifact

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

fremor-0.9.8.tar.gz (11.2 MB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

fremor-0.9.8-py3-none-any.whl (11.6 MB view details)

Uploaded Python 3

File details

Details for the file fremor-0.9.8.tar.gz.

File metadata

  • Download URL: fremor-0.9.8.tar.gz
  • Upload date:
  • Size: 11.2 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for fremor-0.9.8.tar.gz
Algorithm Hash digest
SHA256 27b3cc8d720b1587b757d4d08f37ecdfafe15de93aae844080a7b5f93923cdaa
MD5 03a14e68fffc392b8baf860487ec6407
BLAKE2b-256 b5995f85a68fa5deaf7fc75bc330d4309b1cb86e96a600983b607ff8009f5719

See more details on using hashes here.

Provenance

The following attestation bundles were made for fremor-0.9.8.tar.gz:

Publisher: build_and_publish_pip.yml on NOAA-GFDL/fremor

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file fremor-0.9.8-py3-none-any.whl.

File metadata

  • Download URL: fremor-0.9.8-py3-none-any.whl
  • Upload date:
  • Size: 11.6 MB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for fremor-0.9.8-py3-none-any.whl
Algorithm Hash digest
SHA256 ddf37a84d5d89207cad89c0aa5877f672b50fb69cd2022744e0313af7fc33d61
MD5 6f0473b67ca14b7616d8377af9ab75fc
BLAKE2b-256 434694a557c1446e4f0c67ff087655d3dacd7a10dba13ff5a006d05bfa1e0d08

See more details on using hashes here.

Provenance

The following attestation bundles were made for fremor-0.9.8-py3-none-any.whl:

Publisher: build_and_publish_pip.yml on NOAA-GFDL/fremor

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Release history Release notifications | RSS feed

This release

0.9.8 This release

2 files

0.9.7

2 files

0.9.6

2 files

0.9.5

2 files

0.9.4

2 files

0.9.3

2 files

0.9.2

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page