Skip to content

NCAS-CMS/cfdm

This branch is up to date with main.

Folders and files

NameName
Last commit message
Last commit date
Oct 25, 2023
Mar 4, 2025
Mar 4, 2025
Mar 1, 2022
May 7, 2024
Jan 21, 2021
Mar 8, 2023
Apr 2, 2020
Jun 18, 2024
Mar 23, 2021
Sep 8, 2020
Sep 11, 2020
Mar 3, 2025
Oct 22, 2018
Nov 30, 2023
Feb 19, 2025
Mar 1, 2024
Dec 15, 2020
Nov 10, 2022
Mar 1, 2024
Aug 15, 2022
Jul 23, 2021
Feb 12, 2024
Feb 28, 2025
Feb 18, 2025
Apr 2, 2019
Oct 8, 2021
Apr 6, 2022
Jul 27, 2020

Repository files navigation

cfdm

A Python reference implementation of the CF data model at CF-1.11.

GitHub tag (latest by date) PyPI Conda

Conda Website GitHub

Codecov GitHub Workflow Status

fair-software.eu

References

Website Website Website

Documentation

https://ncas-cms.github.io/cfdm

Dask

From version 1.11.2.0 the cfdm package uses Dask for all of its data manipulations.

Installation

https://ncas-cms.github.io/cfdm/installation

Tutorial

https://ncas-cms.github.io/cfdm/tutorial

Functionality

The cfdm package fully implements the CF data model for its internal data structures and so is able to process any CF-compliant dataset. It is not strict about CF-compliance, however, so that partially conformant datasets may be ingested from existing datasets and written to new datasets. This is so that datasets which are partially conformant may nonetheless be modified in memory.

The central elements defined by the CF data model are the field construct, which corresponds to CF-netCDF data variable with all of its metadata; and the domain contruct, which may be the domain of a field construct or corresponds to a CF-netCDF domain variable with all of its metadata.

A simple example of reading a field construct from a file and inspecting it:

>>> import cfdm
>>> f = cfdm.read('file.nc')
>>> f
[<Field: air_temperature(time(12), latitude(64), longitude(128)) K>]
>>> print(f[0])
Field: air_temperature (ncvar%tas)
----------------------------------
Data            : air_temperature(time(12), latitude(64), longitude(128)) K
Cell methods    : time(12): mean (interval: 1.0 month)
Dimension coords: time(12) = [0450-11-16 00:00:00, ..., 0451-10-16 12:00:00] noleap
                : latitude(64) = [-87.8638, ..., 87.8638] degrees_north
                : longitude(128) = [0.0, ..., 357.1875] degrees_east
                : height(1) = [2.0] m

The cfdm package can:

  • read field and domain constructs from netCDF and CDL datasets with a choice of netCDF backends,and in local, http, and s3 locations,
  • be fully flexible with respect to HDF5 chunking,
  • create new field and domain constructs in memory,
  • write and append field and domain constructs to netCDF datasets on disk,
  • read, write, and manipulate UGRID mesh topologies,
  • read, write, and create coordinates defined by geometry cells,
  • read and write netCDF4 string data-type variables,
  • read, write, and create netCDF and CDL datasets containing hierarchical groups,
  • inspect field and domain constructs,
  • test whether two constructs are the same,
  • modify field and domain construct metadata and data,
  • create subspaces of field and domain constructs, from indices or metadata values,
  • incorporate, and create, metadata stored in external files, and
  • read, write, and create data that have been compressed by convention (i.e. ragged or gathered arrays, or coordinate arrays compressed by subsampling), whilst presenting a view of the data in its uncompressed form.

Command line utility

During installation the cfdump command line tool is also installed, which generates text descriptions of the field constructs contained in a netCDF dataset:

$ cfdump file.nc
Field: air_temperature (ncvar%tas)
----------------------------------
Data            : air_temperature(time(12), latitude(64), longitude(128)) K
Cell methods    : time(12): mean (interval: 1.0 month)
Dimension coords: time(12) = [0450-11-16 00:00:00, ..., 0451-10-16 12:00:00] noleap
                : latitude(64) = [-87.8638, ..., 87.8638] degrees_north
                : longitude(128) = [0.0, ..., 357.1875] degrees_east
                : height(1) = [2.0] m

Tests

Tests are run from within the cfdm/test directory:

$ python run_tests.py

Citation

If you use cfdm, either as a stand-alone application or to provide a CF data model implementation to another software library, please consider including the reference:

Hassell et al., (2020). cfdm: A Python reference implementation of the CF data model. Journal of Open Source Software, 5(54), 2717, https://doi.org/10.21105/joss.02717

@article{Hassell2020,
  doi = {10.21105/joss.02717},
  url = {https://doi.org/10.21105/joss.02717},
  year = {2020},
  publisher = {The Open Journal},
  volume = {5},
  number = {54},
  pages = {2717},
  author = {David Hassell and Sadie L. Bartholomew},
  title = {cfdm: A Python reference implementation of the CF data model},
  journal = {Journal of Open Source Software}
}