Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
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
21 changes: 21 additions & 0 deletions Changelog.rst
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,27 @@ Version NEXTVERSION

**2026-08-??**

* New keywords to `cf.read`: ``backend``, ``backend_options``,
``cfa_filesystem``, ``cfa_backend``, ``cfa_backend_options``
(https://github.com/NCAS-CMS/cf-python/issues/961)
* Deprecated keyword to `cfdm.read`: ``netcdf_backend``
(https://github.com/NCAS-CMS/cf-python/issues/961)
* Dataset reads are now entirely managed by `xnetcdf` (via

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is umfive optional for cf-python as it now is for cfdm? In which case umfive is also relevant when it comes to reading. So it's more a team effort between xnetcdf and umfive, really.

`cfdm.read`) (https://github.com/NCAS-CMS/cf-python/issues/961)
* Read with `cf.read` anything that can be read by `xarray`
(https://github.com/NCAS-CMS/cf-python/issues/961)
* Convert `xarray.Dataset` and `xarray.DataTree` to `cf.Field` via
`cf.read` (https://github.com/NCAS-CMS/cf-python/issues/961)
* Convert `pyfive.File`, `zarr.Group`, `h5py.File`, `umfile.File`, and
`xnetcdf.Dataset` to `cf.Field` via `cf.read`
(https://github.com/NCAS-CMS/cf-python/issues/961)
* Extend `cf.Field.create_latlon_coordinates` to allow the creation of
2-d latitudes/longitudes from plane projection and rotated pole
coordinates (https://github.com/NCAS-CMS/cf-python/issues/962)
* Automatically create consolidated HDF5 metadata with `cf.write`.
New keywords to `cf.write`: ``hdf5_consolidated_metadata`` and
``hdf5_expansion_factor``
(https://github.com/NCAS-CMS/cfdm/issues/413)
* In `cf.write`, set sensible dataset chunksizes by default for 1-d
data, controlled by the new ``one_d_chunks`` keyword
(https://github.com/NCAS-CMS/cfdm/issues/414)
Expand Down
2 changes: 1 addition & 1 deletion MANIFEST.in
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ recursive-exclude cf/data *.rst
prune cf/test
recursive-include cf/test __init__.py test_*.py
recursive-include cf/test cfa_test.sh run_tests.py setup_create_field.py create_test_files*.py individual_tests.sh
recursive-include cf/test test_file.nc test_file[2-4].nc file.nc file[1-9].nc ugrid_global_1.nc ugrid_global_2.nc create_test_files.npz create_test_files_2.npz wgdos_packed.pp extra_data.pp file1.pp *.cdl create_test_files.npz create_test_files_2.npz example_field_0.nc cell_measures.nc
recursive-include cf/test test_file.nc test_file[2-4].nc file.nc file[1-9].nc ugrid_global_1.nc ugrid_global_2.nc create_test_files.npz create_test_files_2.npz wgdos_packed.pp extra_data.pp file1.pp rotated_pole.pp *.cdl create_test_files.npz create_test_files_2.npz example_field_0.nc cell_measures.nc
recursive-include cf/test/example_field_0.zarr[23] *
include cf/test/example_field_0.kerchunk
prune cf/test/dir
1 change: 1 addition & 0 deletions cf/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -172,6 +172,7 @@
ScipyNetcdfFileArray,
SubsampledArray,
UMArray,
XnetcdfArray,
ZarrArray,
)

Expand Down
58 changes: 2 additions & 56 deletions cf/cfimplementation.py
Original file line number Diff line number Diff line change
Expand Up @@ -32,16 +32,12 @@
BoundsFromNodesArray,
CellConnectivityArray,
GatheredArray,
H5netcdfArray,
NetCDF4Array,
PointTopologyArray,
PyfiveArray,
RaggedContiguousArray,
RaggedIndexedArray,
RaggedIndexedContiguousArray,
ScipyNetcdfFileArray,
SubsampledArray,
ZarrArray,
XnetcdfArray,
)
from .functions import CF

Expand Down Expand Up @@ -147,18 +143,14 @@ def set_construct(self, parent, construct, axes=None, copy=True, **kwargs):
BoundsFromNodesArray=BoundsFromNodesArray,
CellConnectivityArray=CellConnectivityArray,
GatheredArray=GatheredArray,
H5netcdfArray=H5netcdfArray,
NetCDF4Array=NetCDF4Array,
ScipyNetcdfFileArray=ScipyNetcdfFileArray,
PointTopologyArray=PointTopologyArray,
PyfiveArray=PyfiveArray,
Quantization=Quantization,
RaggedContiguousArray=RaggedContiguousArray,
RaggedIndexedArray=RaggedIndexedArray,
RaggedIndexedContiguousArray=RaggedIndexedContiguousArray,
SubsampledArray=SubsampledArray,
TiePointIndex=TiePointIndex,
ZarrArray=ZarrArray,
XnetcdfArray=XnetcdfArray,
)


Expand All @@ -174,51 +166,5 @@ def implementation():
`CFImplementation`
A container for the CF data model implementation.

**Examples**

>>> i = cf.implementation()
>>> i
<CFImplementation: >
>>> i.classes()
{'AuxiliaryCoordinate': cf.auxiliarycoordinate.AuxiliaryCoordinate,
'BoundsFromNodesArray': cf.data.array.boundsfromnodesarray.BoundsFromNodesArray,
'CellConnectivity': cf.cellconnectivity.CellConnectivity,
'CellConnectivityArray': cf.data.array.cellconnectivityarray.CellConnectivityArray,
'CellMeasure': cf.cellmeasure.CellMeasure,
'CellMethod': cf.cellmethod.CellMethod,
'CoordinateReference': cf.coordinatereference.CoordinateReference,
'DimensionCoordinate': cf.dimensioncoordinate.DimensionCoordinate,
'Domain': cf.domain.Domain,
'DomainAncillary': cf.domainancillary.DomainAncillary,
'DomainAxis': cf.domainaxis.DomainAxis,
'DomainTopology': cf.domaintopology.DomainTopology,
'Field': cf.field.Field,
'FieldAncillary': cf.fieldancillary.FieldAncillary,
'Bounds': cf.bounds.Bounds,
'InteriorRing': cf.interiorring.InteriorRing,
'InterpolationParameter': cf.interpolationparameter.InterpolationParameter,
'CoordinateConversion': cf.coordinateconversion.CoordinateConversion,
'Datum': cf.datum.Datum,
'List': cf.list.List,
'Index': cf.index.Index,
'Count': cf.count.Count,
'NodeCountProperties': cf.nodecountproperties.NodeCountProperties,
'PartNodeCountProperties': cf.partnodecountproperties.PartNodeCountProperties,
'Data': cf.data.data.Data,
'GatheredArray': cf.data.array.gatheredarray.GatheredArray,
'H5netcdfArray': cf.data.array.h5netcdfarray.H5netcdfArray,
'NetCDF4Array': cf.data.array.netcdf4array.NetCDF4Array,
'ScipyNetcdfFileArray': cf.data.array.scipynetcdffilearray.ScipyNetcdfFileArray,
'PointTopologyArray': <class 'cf.data.array.pointtopologyarray.PointTopologyArray'>,
'PyfiveArray': cf.data.array.pyfivearray.PyfiveArray,
'Quantization': cf.quantization.Quantization,
'RaggedContiguousArray': cf.data.array.raggedcontiguousarray.RaggedContiguousArray,
'RaggedIndexedArray': cf.data.array.raggedindexedarray.RaggedIndexedArray,
'RaggedIndexedContiguousArray': cf.data.array.raggedindexedcontiguousarray.RaggedIndexedContiguousArray,
'SubsampledArray': cf.data.array.subsampledarray.SubsampledArray,
'TiePointIndex': cf.tiepointindex.TiePointIndex,
'ZarrArray': cf.data.array.zarrarray.ZarrArray,
}

"""
return _implementation.copy()
1 change: 1 addition & 0 deletions cf/data/array/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,4 +14,5 @@
from .raggedindexedcontiguousarray import RaggedIndexedContiguousArray
from .subsampledarray import SubsampledArray
from .umarray import UMArray
from .xnetcdfarray import XnetcdfArray
from .zarrarray import ZarrArray
2 changes: 1 addition & 1 deletion cf/data/array/aggregatedarray.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,5 +19,5 @@ def __new__(cls, *args, **kwargs):
"""
# Override the inherited FragmentFileArray class
instance = super().__new__(cls)
instance._FragmentArray["uri"] = FragmentFileArray
instance._AggregatedArray__FragmentArray["uri"] = FragmentFileArray
return instance
21 changes: 10 additions & 11 deletions cf/data/array/h5netcdfarray.py
Original file line number Diff line number Diff line change
@@ -1,16 +1,15 @@
import cfdm

from ...mixin_container import Container
from .mixin import ActiveStorageMixin


class H5netcdfArray(
ActiveStorageMixin,
Container,
cfdm.H5netcdfArray,
):
class H5netcdfArray:
"""A netCDF array accessed with `h5netcdf` using the `h5py` backend.

.. versionadded:: 3.16.3

"""

def __init__(self, *args, **kwargs):
class DeprecationError(Exception):
"""Deprecation error."""

raise DeprecationError(
f"{self.__class__.__name__} was deprecated at version NEXTVERSION "
"and is no longer available. Use XnetcdfArray instead."
)
19 changes: 9 additions & 10 deletions cf/data/array/netcdf4array.py
Original file line number Diff line number Diff line change
@@ -1,12 +1,11 @@
import cfdm

from ...mixin_container import Container
from .mixin import ActiveStorageMixin
class NetCDF4Array:
"""A netCDF array accessed with `netCDF4`."""

def __init__(self, *args, **kwargs):
class DeprecationError(Exception):
"""Deprecation error."""

class NetCDF4Array(
ActiveStorageMixin,
Container,
cfdm.NetCDF4Array,
):
"""A netCDF array accessed with `netCDF4`."""
raise DeprecationError(
f"{self.__class__.__name__} was deprecated at version NEXTVERSION "
"and is no longer available. Use XnetcdfArray instead."
)
21 changes: 10 additions & 11 deletions cf/data/array/pyfivearray.py
Original file line number Diff line number Diff line change
@@ -1,16 +1,15 @@
import cfdm

from ...mixin_container import Container
from .mixin import ActiveStorageMixin


class PyfiveArray(
ActiveStorageMixin,
Container,
cfdm.PyfiveArray,
):
class PyfiveArray:
"""A netCDF array accessed with `pyfive`.

.. versionadded:: 3.20.0

"""

def __init__(self, *args, **kwargs):
class DeprecationError(Exception):
"""Deprecation error."""

raise DeprecationError(
f"{self.__class__.__name__} was deprecated at version NEXTVERSION "
"and is no longer available. Use XnetcdfArray instead."
)
19 changes: 10 additions & 9 deletions cf/data/array/scipynetcdffilearray.py
Original file line number Diff line number Diff line change
@@ -1,14 +1,15 @@
import cfdm

from ...mixin_container import Container


class ScipyNetcdfFileArray(
Container,
cfdm.ScipyNetcdfFileArray,
):
class ScipyNetcdfFileArray:
"""A netCDF-3 array accessed with `scipy.io.netcdf_file`.

.. versionadded:: 3.20.0

"""

def __init__(self, *args, **kwargs):
class DeprecationError(Exception):
"""Deprecation error."""

raise DeprecationError(
f"{self.__class__.__name__} was deprecated at version NEXTVERSION "
"and is no longer available. Use XnetcdfArray instead."
)
Loading