2024-??-??
- Upgrades to allow cfdm to work with Python 3.12 (#302)
- Extension to the HDF5 chunks API (#309)
- New function cfdm.netcdf_flattener that replaces the import of netcdf_flattener (#286)
- New function cfdm.netcdf_indexer that applies netCDF masking and unpacking to arbitrary arrays (#285)
- Allow access to netCDF-4 files in S3 object stores (#285)
- Allow a choice of netCDF engines (#285)
- Fix bug that caused cfdm.write to fail when a parametric Z
dimension coordinate did not have a
computed_standard_name
attribute (#303) - New class cfdm.H5netcdfArray
- New class cfdm.NetCDF4Array
- New dependency:
h5netcdf>=1.3.0
- New dependency:
h5py>=3.10.0
- New dependency:
s3fs>=2024.6.0
- New dependency:
dask>=2024.6.0
- Removed dependency:
netcdf_flattener
2024-03-01
- New keyword parameter to cfdm.Field.insert_dimension:
constructs
(#287) - New example field 11: discrete sampling geometry trajectory features (#289)
2023-12-06
- Python 3.7 support removed (#274)
- Implemented the reading and manipulation of UGRID mesh topologies for CF-1.11 (#270)
- New methods: cfdm.Field.cell_connectivity, cfdm.Field.cell_connectivities
- New methods: cfdm.Field.domain_topology, cfdm.Field.domain_topologies
- New methods: cfdm.Field.del_mesh_id, cfdm.Field.get_mesh_id, cfdm.Field.has_mesh_id, cfdm.Field.set_mesh_id,
- New attribute: cfdm.Data.sparse_array
- New dependency:
scipy>=1.10.0
2023-08-31
2023-07-21
- Fix bug that caused very slow reads of datasets with compression by gathering or DSG ragged arrays (#260)
- Fix bug that prevented cfdm.read from accessing remote files in URL locations (#262)
2023-04-26
- New method: cfdm.Data.get_data
- Changes to facilitate CFA-netCDF in cf-python (#255)
- cfdm.read now always returns unicode strings from netCDF files (#251)
- Fix bug in cf.Data.second_element for some data shapes (#249)
- Fix bug when writing to disk coordinates with a
computed_standard_name
(#254)
2023-03-10
- New method: cfdm.Field.del_properties (#241)
- New keyword parameter to cfdm.unique_constructs:
ignore_properties
(#240) - New keyword parameter to cfdm.NetCDFArray:
missing_values
(#246) - Fixed bug that caused cf.write to erroneously change external netCDF variable names (#244)
2023-01-26
- New class: cfdm.InterpolationSubarray (#228)
- Relocate the call to NetCDFRead._customize_read_vars to earlier in NetCDFRead.read (#233)
- Fixed bug that caused incorrect formula terms in output netCDF files in some cases (#242)
2022-10-31
- New method: cfdm.Data.get_tie_point_indices
- New method: cfdm.Data.get_interpolation_parameters
- New method: cfdm.Data.get_dependent_tie_points
- Record the names of files that contain the original data (#215)
- New method: cfdm.Field.get_original_filenames
- New method: cfdm.Data.get_original_filenames
- New keyword parameter to cfdm.write:
omit_data
(#221) - Fixed bug that caused incorrect data assignment with some multiple list indices (#217)
- Fixed bug that caused a failure when printing date-time data with the first element masked (#211)
2022-08-17
- New method: cfdm.Field.auxiliary_coordinate
- New method: cfdm.Field.cell_measure
- New method: cfdm.Field.cell_method
- New method: cfdm.Field.coordinate
- New method: cfdm.Field.coordinate_reference
- New method: cfdm.Field.dimension_coordinate
- New method: cfdm.Field.domain_ancillary
- New method: cfdm.Field.domain_axis
- New method: cfdm.Field.field_ancillary
- New method: cfdm.Field.indices
- New attribute: cfdm.Field.array
- New attribute: cfdm.Field.datetime_array
- New construct retrieval API methods (#179)
- Implement (bar writing to netCDF files) lossy compression by coordinate subsampling (#167)
2022-07-18
- Upgrade to allow cfdm to work with Python 3.10 (#187)
- Fix bug that caused a hang when reading zero-length files (#190)
- Fix bug to prevent error when writing vlen strings to a netCDF file when compression has been set (for netCDF4>=1.6.0) (#199)
2022-03-10
- Fixed bug that caused a failure from cfdm.write when writing identical (auxiliary) coordinates to different data variables in different groups (#177)
- Fixed bug that caused cf.Domain.__str__ to fail when a dimension coordinate construct does not have data (#174)
- New dependency:
packaging>=20.0
- Changed dependency:
cftime>=1.6.0
2022-01-31
- Fixed bug that caused a cfdm.write failure when a vertical coordinate reference construct has no coordinates (#164)
- Fixed bug that caused a failure when downstream identities methods return an itertools.chain object (#170)
2021-10-12
- Fixed bug that prevented some geometry coordinates being written to netCDF CLASSIC files (#140)
- Fixed bug that a caused segmentation fault when appending a string data type to netCDF files (#155)
- Fixed bug in cf.Field.get_domain when there are climatological time axes (#159)
2021-09-21
- Python 3.6 support removed (#139)
- Conversion of cfdm.Domain to a non-abstract that may be read from and written to a netCDF dataset (#111)
- New method: cfdm.Domain.creation_commands
- New method: cfdm.Domain.climatological_time_axes
- New method: cfdm.AuxiliaryCoordinate.del_climatology
- New method: cfdm.AuxiliaryCoordinate.get_climatology
- New method: cfdm.AuxiliaryCoordinate.is_climatology
- New method: cfdm.AuxiliaryCoordinate.set_climatology
- New method: cfdm.DimensionCoordinate.del_climatology
- New method: cfdm.DimensionCoordinate.get_climatology
- New method: cfdm.DimensionCoordinate.is_climatology
- New method: cfdm.DimensionCoordinate.set_climatology
- New function: cfdm.unique_constructs
- New function: cfdm.example_fields
- Construct access API changes from 1.8.9.0 applied to Field.convert
- Improved error message for invalid inputs to Field.convert
- Raise exception when attempting to write multiply defined coordinate reference parameters (#148)
- Interpret format specifiers for size 1 cfdm.Data arrays (#152)
- Fix file name expansions in cfdm.write (#157)
2021-05-25
- Construct access API changes (#124, #130, #132, #137)
- Performance enhancements (#124, #130)
- New write mode
mode='a'
for appending to, rather than over-writing, a netCDF file on disk (#143) - Better error message in the case of a numpy.ma.core.MaskError occurring upon reading of CDL files with only header or coordinate information (#128)
- Fix for zero-sized unlimited dimensions when read from a grouped netCDF file (#113)
- Fix bug causing occasional non-symmetric equals operations (#133)
- Changed dependency:
cftime>=1.5.0
- Changed dependency:
netCDF4>=1.5.4
2020-12-18
- The setting of global constants can now be controlled by a context manager (#100)
- Fixed bug that caused a failure when writing a dataset that contains a scalar domain ancillary construct (#98)
- Changed dependency:
cftime>=1.3.0
2020-10-09
- Python 3.5 support deprecated (3.5 was retired on 2020-09-13)
- New method: cfdm.Field.creation_commands
- New method: cfdm.Data.creation_commands
- New method: cfdm.Field._docstring_special_substitutions
- New method: cfdm.Field._docstring_substitutions
- New method: cfdm.Field._docstring_package_depth
- New method: cfdm.Field._docstring_method_exclusions
- New method: cfdm.Data.filled
- New keyword parameter to cfdm.Field.set_data:
inplace
- New keyword parameter to cfdm.write:
coordinates
(#81) - New class: cfdm.core.DocstringRewriteMeta
- Comprehensive documentation coverage of class methods.
- Improved documentation following JOSS review.
- Enabled "creation commands" methods (#53)
- Fixed bug that caused failures when reading or writing a dataset that contains multiple geometry containers (#65)
- Fixed bug that prevented the writing of multiple fields to netCDF when at least one dimension was shared between some of the fields.
2020-07-24
- Removed Python 2.7 support (#55)
- Implemented the reading and writing of netCDF4 group hierarchies for CF-1.8 (#13)
- Renamed to lower-case (but otherwise identical) names all functions which get and set global constants: cfdm.atol, cfdm.rtol, cfdm.log_level. The old names e.g. cfdm.ATOL remain functional as aliases.
- New function: cfdm.configuration
- New method: cfdm.Field.nc_variable_groups
- New method: cfdm.Field.nc_set_variable_groups
- New method: cfdm.Field.nc_clear_variable_groups
- New method: cfdm.Field.nc_group_attributes
- New method: cfdm.Field.nc_set_group_attribute
- New method: cfdm.Field.nc_set_group_attributes
- New method: cfdm.Field.nc_clear_group_attributes
- New method: cfdm.Field.nc_geometry_variable_groups
- New method: cfdm.Field.nc_set_geometry_variable_groups
- New method: cfdm.Field.nc_clear_geometry_variable_groups
- New method: cfdm.DomainAxis.nc_dimension_groups
- New method: cfdm.DomainAxis.nc_set_dimension_groups
- New method: cfdm.DomainAxis.nc_clear_dimension_groups
- New method: cfdm.AuxiliaryCoordinate.del_interior_ring
- New keyword parameter to cfdm.write:
group
- Keyword parameter
verbose
to multiple methods now accepts named strings, not just the equivalent integer levels, to set verbosity. - Added test to check that cell bounds have more dimensions than the data.
- Added test to check that dimension coordinate construct data is 1-dimensional.
- Fixed bug in cfdm.CompressedArray.to_memory.
- Fixed bug that caused an error when a coordinate bounds variable is missing from a dataset (#63)
- New dependency:
netcdf_flattener>=1.2.0
- Changed dependency:
cftime>=1.2.1
- Removed dependency:
future
2020-06-10
- Fixed bug that prevented the reading of certain netCDF files, such as those with at least one external variable.
2020-06-08
- Added new example field
7
to cfdm.example_field. - Enabled configuration of the extent and nature of informational and warning messages output by cfdm using a logging framework (see points below) (#31)
- New function cfdm.LOG_LEVEL to set the minimum log level for which messages are displayed globally, i.e. to change the project-wide verbosity (#35).
- Changed behaviour and default of verbose keyword argument when available to a function/method so it interfaces with the new logging functionality (#35).
- Changed dependency:
cftime>=1.1.3
- Fixed bug the wouldn't allow the reading of a netCDF file which specifies Conventions other than CF (#36).
2020-04-30
- cfdm.Field.apply_masking now masks metadata constructs.
- New method: cfdm.Field.get_filenames
- New method: cfdm.Data.get_filenames
- New function: cfdm.abspath
- New keyword parameter to cfdm.read:
warn_valid
(#30) - New keyword parameter to cfdm.write:
warn_valid
(#30)
2020-04-24
- Added time coordinate bounds to the polygon geometry example field
6
returned by cfdm.example_field. - New method: cfdm.Field.apply_masking
- New method: cfdm.Data.apply_masking
- New keyword parameter to cfdm.read:
mask
- New keyword parameter to cfdm.Field.nc_global_attributes:
values
- Fixed bug in cfdm.write that caused (what are effectively) string-valued scalar auxiliary coordinates to not be written to disk as such, or even an exception to be raised.
2020-04-16
- Improved source code highlighting in links from the documentation (#21).
- Fixed bug that erroneously required netCDF geometry container
variables to have a
geometry_dimension
netCDF attribute.
2020-03-23
- First release for CF-1.8 (does not include netCDF hierarchical groups functionality).
- Implementation of simple geometries for CF-1.8 (#11).
- Implementing of string data-types for CF-1.8 (#12).
- New function: cfdm.example_field (#18)
- New attributes: cfdm.Field.dtype, cfdm.Field.ndim, cfdm.Field.shape, cfdm.Field.size
- New method: cfdm.Data.any
- New
paths
keyword parameter to cfdm.environment - Changed dependency:
netCDF4>=1.5.3
- Changed dependency:
cftime>=1.1.1
- Fixed bug that prevented the writing of
'NETCDF3_64BIT_OFFSET'
and'NETCDF3_64BIT_DATA'
format files (#9). - Fixed bug that caused a failure when a "_FillValue" or
"missing_value" property is set and data type conversions are
specified with the
datatype
keyword to cfdm.write (#16). - Fixed bug whereby cfdm.Field.has_construct would try to delete the construct rather than check whether it existed.
2019-11-27
- New methods: cfdm.Field.compress, cfdm.Field.uncompress
- New methods: cfdm.Data.flatten, cfdm.Data.uncompress
- New
dtype
andmask
keyword parameters to cfdm.Data - Changed the default value of the
ignore_compression
parameter to True.
2019-11-14
- New method: cfdm.Field.nc_set_global_attributes.
- Fixed bug relating to the reading of some CDL files (#5).
- Fixed bug relating numpy warning when printing a field with masked reference time values (#8).
2019-11-07
- Fixed bug relating to setting of parameters on datum and coordinate conversion objects of coordinate conversion constructs (#6).
2019-10-04
- During writing to netCDF files, ensured that _FillValue and missing_value have the same data type as the data.
- Fixed bug during construct equality testing that didn't recognise equal cell method constructs in transposed, but otherwise equal field constructs.
- Bounds netCDF dimension name is now saved, and can be set. The saved/set value is written out to disk.
- Now reads CDL files (#5)
2019-06-13
- Don't set the fill mode for a netCDF4.Dataset open for writing to off, to prevent incorrect reading of some netCDF4 files (#4).
- Updated documentation
2019-06-05
- Added attributes _ATOL and _RTOL to facilitate subclassing.
- Fixed bug in cfdm.Field.convert.
- Fixed bug in cfdm.core.constructs.new_identifier.
2019-05-15
- New methods: Datum.nc_has_variable, Datum.nc_get_variable, Datum.nc_has_variable, Datum.nc_set_variable (#3).
2019-05-14
- Changed behaviour of cfdm.Constructs.filter_by_axis.
- New methods: cfdm.Data.has_units, cfdm.Data.has_calendar, cfdm.Data.has_fill_value.
- New
constructs
keyword parameter to Field.transpose. - Keyword parameter
axes
to cfdm.Field.set_data is now optional. - Added the 'has_bounds' method to constructs that have data but can't have bounds.
- New methods: cfdm.DomainAxis.nc_is_unlimited, cfdm.DomainAxis.nc_set_unlimited.
- Made Data a virtual subclass of Array.
- Deprecated methods: cfdm.Field.nc_unlimited, cfdm.Field.nc_clear_unlimited, cfdm.Field.nc_clear_unlimited.
- Fixed bug when writing new horizontal coordinate reference for the vertical datum.
- Fixed bug in del_data methods.
- Fixed bug with in-place operations.
- Fixed bug with position in some insert_dimension methods.
- Fixed bug that sometimes made duplicate netCDF dimensions when writing to a file.
- Added _shape keyword to cfdm.Field.set_data_axes to allow the data shape to be checked prior to insertion.
- Added the '_custom' attribute to facilitate subclassing.
- New class cfdm.mixin.NetCDFUnlimitedDimension replaces cfdm.mixin.NetCDFUnlimitedDimensions, which is deprecated.
- New method cfdm.CFDMImplementation.nc_is_unlimited_axis replaces cfdm.CFDMImplementation.nc_get_unlimited_axes, which is deprecated.
- New method cfdm.CFDMImplementation.nc_set_unlimited_axis replaces cfdm.CFDMImplementation.nc_set_unlimited_dimensions, which is deprecated.
2019-04-24
- New method: cfdm.Constructs.filter_by_size.
- New method: cfdm.Data.uncompress.
- Changed the default behaviours of the cfdm.Construct.filter_by_axis, cfdm.Construct.filter_by_size, cfdm.Construct.filter_by_naxes, cfdm.Construct.filter_by_property, cfdm.Construct.filter_by_ncvar, cfdm.Construct.filter_by_ncdim, cfdm.Construct.filter_by_method, cfdm.Construct.filter_by_measure methods in the case when no arguments are provided: Now returns all possible constructs that could have the feature, with any values.
- Renamed the "underlying_array" methods to "source"
- Added _field_data_axes attribute to Constructs instances.
- Added _units and _fill_value arguments to get_data method.
- Moved contents of cfdm/read_write/constants.py to NetCDFRead and NetCDFWrite.
- Fixed bug in cfdm.CoordinateReference.clear_coordinates.
- Fixed bug in cfdm.Field.convert (which omitted domain ancillaries in the result).
- Added
kwargs
parameter to cfdm.CFDMImplementation.initialise_Data, to facilitate subclassing. - Added NetCDFRead._customize_read_vars to facilitate subclassing.
- Added NetCDFWrite._transform_strings to facilitate subclassing.
2019-04-05
- New
mode
parameter options to cfdm.Constructs.filter_by_axis:'exact'
,'subset'
,'superset'
. - Enabled setting of HDF5 chunksizes.
- Fixed bug that caused coordinate bounds to be not sliced during subspacing (#1).
2019-04-02
- New methods cfdm.Constructs.clear_filters_applied, cfdm.Constructs.filter_by_naxes.
- Changed behaviour of cfdm.Constructs.unfilter and cfdm.Constructs.inverse_filters: added depth keyword and changed default.
2019-04-02
- First release for CF-1.7