Skip to content

Commit

Permalink
Remove RegionBuilder and remaining references to region references (#…
Browse files Browse the repository at this point in the history
…1212)

* Update builders.py

* [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

* Update spec.py

* [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

* Remove more references to region references and RegionBuilder

* Remove to-be-deprecated aliases to object reference

* Remove reference to referencebuilder in docs

* Update CHANGELOG.md

* Update CHANGELOG.md

* Update CHANGELOG.md

---------

Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
  • Loading branch information
rly and pre-commit-ci[bot] authored Nov 21, 2024
1 parent a1af49d commit 4fb554a
Show file tree
Hide file tree
Showing 11 changed files with 11 additions and 57 deletions.
2 changes: 1 addition & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
## HDMF 4.0.0 (Upcoming)

### Deprecations
- The following classes have been deprecated and removed: Array, AbstractSortedArray, SortedArray, LinSpace, Query, RegionSlicer, ListSlicer, H5RegionSlicer, DataRegion. The following methods have been deprecated and removed: fmt_docval_args, call_docval_func, get_container_cls, add_child, set_dataio (now refactored as set_data_io). We have also removed all early evelopment for region references. @mavaylon1 [#1998](https://github.com/hdmf-dev/hdmf/pull/1198)
- The following classes have been deprecated and removed: Array, AbstractSortedArray, SortedArray, LinSpace, Query, RegionSlicer, ListSlicer, H5RegionSlicer, DataRegion, RegionBuilder. The following methods have been deprecated and removed: fmt_docval_args, call_docval_func, get_container_cls, add_child, set_dataio (now refactored as set_data_io). We have also removed all early development for region references. @mavaylon1, @rly [#1998](https://github.com/hdmf-dev/hdmf/pull/1198), [#1212](https://github.com/hdmf-dev/hdmf/pull/1212)
- Python 3.8 has been deprecated. Python 3.9 is the new minimum with support for Python 3.13. @mavaylon1 [#1209](https://github.com/hdmf-dev/hdmf/pull/1209)

### Enhancements
Expand Down
1 change: 0 additions & 1 deletion docs/source/conf.py
Original file line number Diff line number Diff line change
Expand Up @@ -87,7 +87,6 @@

nitpicky = True
nitpick_ignore = [('py:class', 'Intracomm'),
('py:class', 'h5py.RegionReference'),
('py:class', 'h5py._hl.dataset.Dataset'),
('py:class', 'function'),
('py:class', 'unittest.case.TestCase'),
Expand Down
2 changes: 1 addition & 1 deletion docs/source/overview_software_architecture.rst
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,7 @@ Builder
* :py:class:`~hdmf.build.builders.GroupBuilder` - represents a collection of objects
* :py:class:`~hdmf.build.builders.DatasetBuilder` - represents data
* :py:class:`~hdmf.build.builders.LinkBuilder` - represents soft-links
* :py:class:`~hdmf.build.builders.RegionBuilder` - represents a slice into data (Subclass of :py:class:`~hdmf.build.builders.DatasetBuilder`)
* :py:class:`~hdmf.build.builders.ReferenceBuilder` - represents a reference to another group or dataset

* **Main Module:** :py:class:`hdmf.build.builders`

Expand Down
4 changes: 1 addition & 3 deletions src/hdmf/backends/hdf5/h5tools.py
Original file line number Diff line number Diff line change
Expand Up @@ -908,8 +908,6 @@ def get_type(cls, data):
"utf-8": H5_TEXT,
"ascii": H5_BINARY,
"bytes": H5_BINARY,
"ref": H5_REF,
"reference": H5_REF,
"object": H5_REF,
"isodatetime": H5_TEXT,
"datetime": H5_TEXT,
Expand Down Expand Up @@ -1492,7 +1490,7 @@ def __is_ref(self, dtype):
if isinstance(dtype, dict): # may be dict from reading a compound dataset
return self.__is_ref(dtype['dtype'])
if isinstance(dtype, str):
return dtype == DatasetBuilder.OBJECT_REF_TYPE or dtype == DatasetBuilder.REGION_REF_TYPE
return dtype == DatasetBuilder.OBJECT_REF_TYPE
return False

def __queue_ref(self, func):
Expand Down
2 changes: 1 addition & 1 deletion src/hdmf/build/__init__.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
from .builders import Builder, DatasetBuilder, GroupBuilder, LinkBuilder, ReferenceBuilder, RegionBuilder
from .builders import Builder, DatasetBuilder, GroupBuilder, LinkBuilder, ReferenceBuilder
from .classgenerator import CustomClassGenerator, MCIClassGenerator
from .errors import (BuildError, OrphanContainerBuildError, ReferenceTargetNotBuiltError, ContainerConfigurationError,
ConstructError)
Expand Down
21 changes: 1 addition & 20 deletions src/hdmf/build/builders.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@
from datetime import datetime, date

import numpy as np
from h5py import RegionReference

from ..utils import docval, getargs, get_docval

Expand Down Expand Up @@ -320,11 +319,10 @@ def values(self):

class DatasetBuilder(BaseBuilder):
OBJECT_REF_TYPE = 'object'
REGION_REF_TYPE = 'region'

@docval({'name': 'name', 'type': str, 'doc': 'The name of the dataset.'},
{'name': 'data',
'type': ('array_data', 'scalar_data', 'data', 'DatasetBuilder', 'RegionBuilder', Iterable, datetime, date),
'type': ('array_data', 'scalar_data', 'data', 'DatasetBuilder', Iterable, datetime, date),
'doc': 'The data in this dataset.', 'default': None},
{'name': 'dtype', 'type': (type, np.dtype, str, list),
'doc': 'The datatype of this dataset.', 'default': None},
Expand Down Expand Up @@ -429,20 +427,3 @@ def __init__(self, **kwargs):
def builder(self):
"""The target builder object."""
return self['builder']


class RegionBuilder(ReferenceBuilder):

@docval({'name': 'region', 'type': (slice, tuple, list, RegionReference),
'doc': 'The region, i.e. slice or indices, into the target dataset.'},
{'name': 'builder', 'type': DatasetBuilder, 'doc': 'The dataset this region reference applies to.'})
def __init__(self, **kwargs):
"""Create a builder object for a region reference."""
region, builder = getargs('region', 'builder', kwargs)
super().__init__(builder)
self['region'] = region

@property
def region(self):
"""The selected region of the target dataset."""
return self['region']
4 changes: 1 addition & 3 deletions src/hdmf/build/objectmapper.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@

import numpy as np

from .builders import DatasetBuilder, GroupBuilder, LinkBuilder, Builder, ReferenceBuilder, RegionBuilder, BaseBuilder
from .builders import DatasetBuilder, GroupBuilder, LinkBuilder, Builder, ReferenceBuilder, BaseBuilder
from .errors import (BuildError, OrphanContainerBuildError, ReferenceTargetNotBuiltError, ContainerConfigurationError,
ConstructError)
from .manager import Proxy, BuildManager
Expand Down Expand Up @@ -1214,8 +1214,6 @@ def __get_subspec_values(self, builder, spec, manager):
continue
if isinstance(attr_val, (GroupBuilder, DatasetBuilder)):
ret[attr_spec] = manager.construct(attr_val)
elif isinstance(attr_val, RegionBuilder): # pragma: no cover
raise ValueError("RegionReferences as attributes is not yet supported")
elif isinstance(attr_val, ReferenceBuilder):
ret[attr_spec] = manager.construct(attr_val.builder)
else:
Expand Down
10 changes: 3 additions & 7 deletions src/hdmf/spec/spec.py
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,6 @@ class DtypeHelper:
'uint32': ["uint32", "uint"],
'uint64': ["uint64"],
'object': ['object'],
'region': ['region'],
'numeric': ['numeric'],
'isodatetime': ["isodatetime", "datetime", "date"]
}
Expand Down Expand Up @@ -174,12 +173,13 @@ def path(self):

_ref_args = [
{'name': _target_type_key, 'type': str, 'doc': 'the target type GroupSpec or DatasetSpec'},
{'name': 'reftype', 'type': str, 'doc': 'the type of references this is i.e. region or object'},
{'name': 'reftype', 'type': str,
'doc': 'the type of reference this is. only "object" is supported currently.'},
]


class RefSpec(ConstructableDict):
__allowable_types = ('object', 'region')
__allowable_types = ('object', )

@docval(*_ref_args)
def __init__(self, **kwargs):
Expand All @@ -200,10 +200,6 @@ def reftype(self):
'''The type of reference'''
return self['reftype']

@docval(rtype=bool, returns='True if this RefSpec specifies a region reference, False otherwise')
def is_region(self):
return self['reftype'] == 'region'


_attr_args = [
{'name': 'name', 'type': str, 'doc': 'The name of this attribute'},
Expand Down
5 changes: 1 addition & 4 deletions src/hdmf/validate/validator.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@

from .errors import Error, DtypeError, MissingError, MissingDataType, ShapeError, IllegalLinkError, IncorrectDataType
from .errors import ExpectedArrayError, IncorrectQuantityError
from ..build import GroupBuilder, DatasetBuilder, LinkBuilder, ReferenceBuilder, RegionBuilder
from ..build import GroupBuilder, DatasetBuilder, LinkBuilder, ReferenceBuilder
from ..build.builders import BaseBuilder
from ..spec import Spec, AttributeSpec, GroupSpec, DatasetSpec, RefSpec, LinkSpec
from ..spec import SpecNamespace
Expand Down Expand Up @@ -124,9 +124,6 @@ def get_type(data, builder_dtype=None):
# Bytes data
elif isinstance(data, bytes):
return 'ascii', get_string_format(data)
# RegionBuilder data
elif isinstance(data, RegionBuilder):
return 'region', None
# ReferenceBuilder data
elif isinstance(data, ReferenceBuilder):
return 'object', None
Expand Down
11 changes: 1 addition & 10 deletions tests/unit/build_tests/test_builder.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
from hdmf.build import GroupBuilder, DatasetBuilder, LinkBuilder, ReferenceBuilder, RegionBuilder
from hdmf.build import GroupBuilder, DatasetBuilder, LinkBuilder, ReferenceBuilder
from hdmf.testing import TestCase


Expand Down Expand Up @@ -392,12 +392,3 @@ def test_constructor(self):
db = DatasetBuilder('db1', [1, 2, 3])
rb = ReferenceBuilder(db)
self.assertIs(rb.builder, db)


class TestRegionBuilder(TestCase):

def test_constructor(self):
db = DatasetBuilder('db1', [1, 2, 3])
rb = RegionBuilder(slice(1, 3), db)
self.assertEqual(rb.region, slice(1, 3))
self.assertIs(rb.builder, db)
6 changes: 0 additions & 6 deletions tests/unit/spec_tests/test_ref_spec.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,9 +15,3 @@ def test_constructor(self):
def test_wrong_reference_type(self):
with self.assertRaises(ValueError):
RefSpec('TimeSeries', 'unknownreftype')

def test_isregion(self):
spec = RefSpec('TimeSeries', 'object')
self.assertFalse(spec.is_region())
spec = RefSpec('Data', 'region')
self.assertTrue(spec.is_region())

0 comments on commit 4fb554a

Please sign in to comment.