diff --git a/exdir/core/group.py b/exdir/core/group.py index c3439ce..a6b8886 100644 --- a/exdir/core/group.py +++ b/exdir/core/group.py @@ -15,7 +15,7 @@ def _data_to_shape_and_dtype(data, shape, dtype): if data is not None: if shape is None: - shape = data.shape + shape = np.shape(data) if dtype is None: dtype = data.dtype return shape, dtype @@ -25,10 +25,10 @@ def _data_to_shape_and_dtype(data, shape, dtype): def _assert_data_shape_dtype_match(data, shape, dtype): if data is not None: - if shape is not None and np.product(shape) != np.product(data.shape): + if shape is not None and np.product(shape) != np.product(np.shape(data)): raise ValueError( "Provided shape and data.shape do not match: {} vs {}".format( - shape, data.shape + shape, np.shape(shape) ) ) @@ -113,12 +113,15 @@ def create_dataset(self, name, shape=None, dtype=None, prepared_data, attrs, meta = ds._prepare_write(data, self.plugin_manager.dataset_plugins.write_order) + if not isinstance(prepared_data, np.ndarray) and prepared_data is not None: + prepared_data = np.array(prepared_data) + _assert_data_shape_dtype_match(prepared_data, shape, dtype) shape, dtype = _data_to_shape_and_dtype(prepared_data, shape, dtype) if prepared_data is not None: - if shape is not None and prepared_data.shape != shape: + if shape is not None and np.shape(prepared_data) != shape: prepared_data = np.reshape(prepared_data, shape) else: if shape is None: diff --git a/tests/test_dataset.py b/tests/test_dataset.py index aa8ad20..67d70e3 100644 --- a/tests/test_dataset.py +++ b/tests/test_dataset.py @@ -102,6 +102,17 @@ def test_create_scalar_data(setup_teardown_file): assert dset.shape == data.shape +def test_create_list_data(setup_teardown_file): + """Create a scalar dataset from existing array.""" + f = setup_teardown_file[3] + grp = f.create_group("test") + + data = [1, 2, 3] + dset = grp.create_dataset('foo', data=data) + assert dset.shape == (3,) + assert np.array_equal(dset.data, np.array(data)) + + def test_create_extended_data(setup_teardown_file): """Create an extended dataset from existing data.""" f = setup_teardown_file[3]