Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Introduction of aggregation datasets #320

Open
wants to merge 136 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
136 commits
Select commit Hold shift + click to select a range
aa04b85
dev
davidhassell Aug 14, 2024
600e5a2
dev
davidhassell Aug 15, 2024
5e4483e
dev
davidhassell Aug 15, 2024
3547dba
dev
davidhassell Aug 15, 2024
5823bc1
dev
davidhassell Aug 16, 2024
5aee110
dev
davidhassell Aug 16, 2024
255a125
dev
davidhassell Aug 16, 2024
2f8776c
dev
davidhassell Aug 19, 2024
d30b911
dev
davidhassell Aug 20, 2024
556464e
dev
davidhassell Aug 20, 2024
d389498
dev
davidhassell Aug 20, 2024
444b372
dev
davidhassell Aug 21, 2024
7122c9e
dev
davidhassell Aug 22, 2024
001d3c1
dev
davidhassell Aug 23, 2024
60d0e0e
dev
davidhassell Aug 23, 2024
6ba60de
dev
davidhassell Aug 28, 2024
536cfd2
dev
davidhassell Sep 3, 2024
99c4dd4
Merge branch 'dask2' into cfa3
davidhassell Sep 6, 2024
dcde330
dev
davidhassell Sep 6, 2024
b0b4282
dev
davidhassell Sep 6, 2024
adf1654
dev
davidhassell Sep 9, 2024
03d955a
dev
davidhassell Sep 9, 2024
f484261
dev
davidhassell Sep 9, 2024
219ff69
dev
davidhassell Sep 9, 2024
174614b
dev
davidhassell Sep 10, 2024
daf14ae
dev
davidhassell Sep 10, 2024
06cac9c
dev
davidhassell Sep 10, 2024
595d6ad
dev
davidhassell Sep 11, 2024
a997a35
dev
davidhassell Oct 11, 2024
846b042
dev
davidhassell Oct 14, 2024
3dc9ce7
dev
davidhassell Oct 14, 2024
ff97270
dev
davidhassell Oct 15, 2024
e4a8497
dev
davidhassell Oct 16, 2024
fae0036
dev
davidhassell Oct 16, 2024
4542462
dev
davidhassell Oct 17, 2024
6558ffb
dev
davidhassell Oct 17, 2024
0ca959f
dev
davidhassell Oct 18, 2024
62922b9
dev
davidhassell Oct 18, 2024
d3bad28
dev
davidhassell Oct 18, 2024
bb51b62
dev
davidhassell Oct 18, 2024
6b36c46
dev
davidhassell Oct 20, 2024
e5e83ef
dev0
davidhassell Oct 21, 2024
9965e8c
dev
davidhassell Oct 21, 2024
8f48ed9
dev
davidhassell Oct 28, 2024
e6f15aa
get_filenames array
davidhassell Oct 31, 2024
591df4e
dev
davidhassell Oct 31, 2024
9aaa745
dev
davidhassell Nov 1, 2024
cf1b757
dev
davidhassell Nov 1, 2024
2e4bd3b
dev
davidhassell Nov 2, 2024
909364c
dev
davidhassell Nov 3, 2024
d688a6b
dev
davidhassell Nov 4, 2024
b07e077
dev
davidhassell Nov 4, 2024
8b7934e
dev
davidhassell Nov 4, 2024
dda1d29
dev
davidhassell Nov 4, 2024
883ef04
dev
davidhassell Nov 6, 2024
042bc19
dev
davidhassell Nov 7, 2024
d5b5c7b
dev
davidhassell Nov 7, 2024
92258d4
dev
davidhassell Nov 7, 2024
45dd5f4
dev
davidhassell Nov 7, 2024
fc7314f
dev
davidhassell Nov 7, 2024
cc5d51f
dev
davidhassell Nov 7, 2024
3db6579
dev
davidhassell Nov 7, 2024
24b4cc4
dev
davidhassell Nov 8, 2024
ae9227c
dev
davidhassell Nov 8, 2024
15324d0
dev
davidhassell Nov 8, 2024
e6d3f94
dev
davidhassell Nov 9, 2024
28790ab
dev
davidhassell Nov 10, 2024
e843163
dev
davidhassell Nov 11, 2024
e39eb90
dev
davidhassell Nov 11, 2024
6734dda
dev
davidhassell Nov 11, 2024
e5ca444
dev
davidhassell Nov 12, 2024
37b684c
dev
davidhassell Nov 12, 2024
456df34
dev
davidhassell Nov 13, 2024
5056b5b
dev
davidhassell Nov 13, 2024
17842ef
dev
davidhassell Nov 14, 2024
a3cbcb7
dev
davidhassell Nov 14, 2024
ccb2818
dev
davidhassell Nov 15, 2024
86e536d
dev
davidhassell Nov 16, 2024
b5a3544
dev
davidhassell Nov 17, 2024
dfba730
dev
davidhassell Nov 18, 2024
9c4762f
dev
davidhassell Nov 19, 2024
5808333
dev
davidhassell Nov 19, 2024
1b41d34
dev
davidhassell Nov 19, 2024
0a9bd70
dev
davidhassell Nov 19, 2024
4202373
dev
davidhassell Nov 20, 2024
2ea2740
dev
davidhassell Nov 20, 2024
8b5ea0a
dev
davidhassell Nov 21, 2024
4c4efb2
dev
davidhassell Nov 21, 2024
7ff5ab9
dev
davidhassell Nov 21, 2024
7c2ab75
dev
davidhassell Nov 22, 2024
316f3d8
dev
davidhassell Nov 22, 2024
0d2d9e5
dev
davidhassell Nov 22, 2024
0c1685b
dev
davidhassell Nov 22, 2024
a179392
dev
davidhassell Nov 22, 2024
c9da640
dev
davidhassell Nov 23, 2024
16725e6
dev
davidhassell Nov 25, 2024
35411a8
dev
davidhassell Nov 25, 2024
03e9cb8
dev
davidhassell Nov 25, 2024
3b4715d
dev
davidhassell Nov 25, 2024
0de3cf6
dev
davidhassell Nov 26, 2024
7111e81
dev
davidhassell Nov 26, 2024
583ef74
dev
davidhassell Nov 26, 2024
50eee6e
dev
davidhassell Nov 26, 2024
c727b15
dev
davidhassell Nov 28, 2024
e846a25
dev
davidhassell Nov 28, 2024
9f5356f
dev
davidhassell Nov 29, 2024
b2bc126
dev
davidhassell Nov 29, 2024
e5bdbd7
dev
davidhassell Nov 30, 2024
41c5bd2
dev
davidhassell Nov 30, 2024
fd813a6
dev
davidhassell Nov 30, 2024
6d5121b
dev
davidhassell Dec 2, 2024
80d3683
dev
davidhassell Dec 2, 2024
fad3b22
dev
davidhassell Dec 2, 2024
065fa24
dev
davidhassell Dec 3, 2024
b582bee
dev
davidhassell Dec 3, 2024
58cb980
dev
davidhassell Dec 4, 2024
a44f14a
dev
davidhassell Dec 4, 2024
9d5c65e
dev
davidhassell Dec 4, 2024
be99401
dev
davidhassell Dec 4, 2024
ec79801
Merge branch 'dask2' into cfa3
davidhassell Dec 4, 2024
806c755
Merge branch 'dask2' into cfa3
davidhassell Dec 6, 2024
84265e0
dev
davidhassell Dec 6, 2024
64e0646
dev
davidhassell Dec 6, 2024
3537b84
dev
davidhassell Dec 7, 2024
1f977f2
dev
davidhassell Dec 7, 2024
ba5fabd
dev
davidhassell Dec 8, 2024
d226fbf
dev
davidhassell Dec 8, 2024
bb82243
dev
davidhassell Dec 9, 2024
53d6530
dev
davidhassell Dec 13, 2024
e12a3d9
dev
davidhassell Jan 2, 2025
9e83c5b
Merge branch 'dask2' into cfa3
davidhassell Jan 10, 2025
fcb0f35
dev
davidhassell Jan 15, 2025
785a1b3
dev
davidhassell Jan 15, 2025
f75ad09
Merge branch 'main' into cfa3
davidhassell Jan 15, 2025
7d7ea5e
dev
davidhassell Jan 17, 2025
134958b
merge of 1.11.2.0
davidhassell Jan 29, 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
13 changes: 12 additions & 1 deletion Changelog.rst
Original file line number Diff line number Diff line change
@@ -1,10 +1,20 @@
Version NEXTVERSION
----------------

**2025-??-??**

* Introduction of reading and writing of aggregation datasets (for
CF-1.13) (https://github.com/NCAS-CMS/cfdm/issues/319

----

Version 1.11.2.0
----------------

**2025-01-28**

* Introduction of `dask` for all data manipulations
https://github.com/NCAS-CMS/cfdm/issues/317)
(https://github.com/NCAS-CMS/cfdm/issue/317)
* Fix bug that returned incorrect results when an invalid identifer is
provided to `cf.Field.cell_methods`
(https://github.com/NCAS-CMS/cfdm/issues/299)
Expand All @@ -31,6 +41,7 @@ Version 1.11.2.0
* New dependency: ``h5py>=3.10.0``
* New dependency: ``s3fs>=2024.6.0``
* New dependency: ``dask>=2024.6.0,<=2024.7.1``
* New dependency: ``uritools>=4.0.3``
* Removed dependency: ``netcdf_flattener``

----
Expand Down
3 changes: 3 additions & 0 deletions cfdm/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -164,6 +164,7 @@
atol,
chunksize,
configuration,
dirname,
environment,
integer_dtype,
log_level,
Expand Down Expand Up @@ -195,10 +196,12 @@

from .data import (
Array,
AggregatedArray,
BoundsFromNodesArray,
CellConnectivityArray,
CompressedArray,
Data,
FullArray,
GatheredArray,
H5netcdfArray,
NetCDFArray,
Expand Down
76 changes: 70 additions & 6 deletions cfdm/cfdmimplementation.py
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@
)
from .abstract import Implementation
from .data import (
AggregatedArray,
BoundsFromNodesArray,
CellConnectivityArray,
Data,
Expand Down Expand Up @@ -1346,19 +1347,27 @@ def get_field_data_axes(self, field):
"""
return field.get_data_axes()

def get_filenames(self, parent):
def get_filenames(self, parent, normalise=True):
"""Return the name of the file or files containing the data.

:Parameters:

parent:

normalise: `bool`, optional
If True (the default) then normalise the filenames by
applying any text substitutions and reslving the name
to an absolute path. If False then neither of these is
carried out.

.. versionadded:: (cfdm) NEXTVERSION

:Returns:

`set`

"""
return parent.get_filenames()
return parent.get_filenames(normalise=normalise)

def get_data_max(self, parent):
"""Use `get_data_maximum` instead (since cfdm version 1.8.0)."""
Expand Down Expand Up @@ -1726,7 +1735,10 @@ def get_data(self, parent, default=None):
<Data(180, 2): [[0, ..., 359]] degrees_north>

"""
return parent.get_data(default=default)
try:
return parent.get_data(default=default)
except AttributeError:
return default

def get_data_axes(self, parent, key, default=None):
"""Get domain axis identifiers.
Expand Down Expand Up @@ -1868,6 +1880,24 @@ def initialise_CellMethod(self, axes=None, method=None, qualifiers=None):
cls = self.get_class("CellMethod")
return cls(axes=axes, method=method, qualifiers=qualifiers)

def initialise_AggregatedArray(self, **kwargs):
"""Return a `AggregatedArray` instance.

.. versionadded:: (cfdm) NEXTVERSION

:Parameters:

kwargs: optional
Initialisation parameters to pass to the new instance.

:Returns:

`AggregatedArray`

"""
cls = self.get_class("AggregatedArray")
return cls(**kwargs)

def initialise_CoordinateConversion(
self, domain_ancillaries=None, parameters=None
):
Expand Down Expand Up @@ -3653,25 +3683,59 @@ def has_property(self, parent, prop):
"""
return parent.has_property(prop)

def squeeze(self, construct, axes=None):
def squeeze(self, construct, axes=None, inplace=False):
"""Remove size 1 axes from construct data.

:Parameters:

construct:
The construct.

axes: optional
The axes to squeeze. If `None` then all size 1 axes
are removed from the data.

inplace: `bool`, optional
If True then do the operation in-place and return
`None`.

.. versionadded:: (Cfdm) NEXTVERSION

:Returns:

The construct with removed axes, or `None` if the
operation was in-place.

"""
return construct.squeeze(axes=axes, inplace=inplace)

def unsqueeze(self, field, inplace=False):
"""Insert size 1 axes into the field data array.

.. versionadded:: (Cfdm) NEXTVERSION

:Parameters:

field: `Field`
The field construct.

inplace: `bool`, optional
If True then do the operation in-place and return
`None`.

:Returns:

The construct with removed axes.
`Field` or `None`
The field with inserted axes, or `None` if the
operation was in-place.

"""
return construct.squeeze(axes=axes)
return field.unsqueeze(inplace=inplace)


_implementation = CFDMImplementation(
cf_version=CF(),
AggregatedArray=AggregatedArray,
AuxiliaryCoordinate=AuxiliaryCoordinate,
CellConnectivity=CellConnectivity,
CellConnectivityArray=CellConnectivityArray,
Expand Down
6 changes: 3 additions & 3 deletions cfdm/core/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,9 +11,9 @@

"""

__date__ = "2025-01-28"
__cf_version__ = "1.11"
__version__ = "1.11.2.0"
__date__ = "202?-??-??"
__cf_version__ = "1.12"
__version__ = "1.12.0.0"

from packaging import __version__ as _packaging_ver
from packaging import __file__ as _packaging_file
Expand Down
2 changes: 2 additions & 0 deletions cfdm/data/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,9 +15,11 @@

from .subarray.abstract import MeshSubarray, Subarray, SubsampledSubarray

from .aggregatedarray import AggregatedArray
from .boundsfromnodesarray import BoundsFromNodesArray
from .cellconnectivityarray import CellConnectivityArray
from .gatheredarray import GatheredArray
from .fullarray import FullArray
from .h5netcdfarray import H5netcdfArray
from .netcdfarray import NetCDFArray
from .netcdf4array import NetCDF4Array
Expand Down
1 change: 1 addition & 0 deletions cfdm/data/abstract/__init__.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
from .array import Array
from .compressedarray import CompressedArray
from .filearray import FileArray
from .mesharray import MeshArray
from .raggedarray import RaggedArray
43 changes: 32 additions & 11 deletions cfdm/data/abstract/compressedarray.py
Original file line number Diff line number Diff line change
Expand Up @@ -338,7 +338,10 @@ def compressed_array(self):
if ca is None:
raise ValueError("There is no underlying compressed array")

return ca.array
try:
return ca.array
except AttributeError:
return ca

def get_compressed_axes(self):
"""Return axes that are compressed in the underlying array.
Expand Down Expand Up @@ -439,27 +442,45 @@ def conformed_data(self):
"""
return {"data": self.source().copy()}

def get_filenames(self):
"""Return the names of any files containing the compressed data.
def get_filename(self, normalise=False, default=AttributeError()):
"""Return the name of the file containing the compressed data.

.. versionadded:: (cfdm) 1.10.0.2

:Parameters:

{{normalise: `bool`, optional}}

.. versionadded:: (cfdm) NEXTVERSION

default: optional
Return the value of the *default* parameter if there
is no file name.

{{default Exception}}

.. versionadded:: (cfdm) NEXTVERSION

:Returns:

`set`
The file names in normalised, absolute form. If the
data are all in memory then an empty `set` is
returned.
`str`
The file name.

"""
data = self._get_compressed_Array(None)
if data is None:
return set()

try:
return data.get_filenames()
except AttributeError:
return set()
filenames = data.get_filenames(normalise=normalise)
if len(filenames) != 1:
if default is None:
return

return self._default(
default, f"{self.__class__.__name__} has no unique file name"
)

return filenames[0]

def get_Subarray(self):
"""Return the Subarray class.
Expand Down
Loading
Loading