avoid repeated opening of files
This commit is contained in:
parent
d832d4cf17
commit
36d2ae1c2a
|
@ -698,7 +698,7 @@ def pass_on(keyword: str,
|
|||
return wrapper
|
||||
return decorator
|
||||
|
||||
def DREAM3D_base_group(fname: _Union[str, _Path]) -> str:
|
||||
def DREAM3D_base_group(fname: _Union[str, _Path, _h5py.File]) -> str:
|
||||
"""
|
||||
Determine the base group of a DREAM.3D file.
|
||||
|
||||
|
@ -707,7 +707,7 @@ def DREAM3D_base_group(fname: _Union[str, _Path]) -> str:
|
|||
|
||||
Parameters
|
||||
----------
|
||||
fname : str or pathlib.Path
|
||||
fname : str, pathlib.Path, or _h5py.File
|
||||
Filename of the DREAM.3D (HDF5) file.
|
||||
|
||||
Returns
|
||||
|
@ -716,15 +716,19 @@ def DREAM3D_base_group(fname: _Union[str, _Path]) -> str:
|
|||
Path to the base group.
|
||||
|
||||
"""
|
||||
with _h5py.File(_Path(fname).expanduser(),'r') as f:
|
||||
def get_base_group(f: _h5py.File) -> str:
|
||||
base_group = f.visit(lambda path: path.rsplit('/',2)[0] if '_SIMPL_GEOMETRY/SPACING' in path else None)
|
||||
if base_group is None:
|
||||
raise ValueError(f'could not determine base group in file "{fname}"')
|
||||
return base_group
|
||||
|
||||
if base_group is None:
|
||||
raise ValueError(f'could not determine base group in file "{fname}"')
|
||||
if isinstance(fname,_h5py.File):
|
||||
return get_base_group(fname)
|
||||
|
||||
return base_group
|
||||
with _h5py.File(_Path(fname).expanduser(),'r') as f:
|
||||
return get_base_group(f)
|
||||
|
||||
def DREAM3D_cell_data_group(fname: _Union[str, _Path]) -> str:
|
||||
def DREAM3D_cell_data_group(fname: _Union[str, _Path, _h5py.File]) -> str:
|
||||
"""
|
||||
Determine the cell data group of a DREAM.3D file.
|
||||
|
||||
|
@ -734,7 +738,7 @@ def DREAM3D_cell_data_group(fname: _Union[str, _Path]) -> str:
|
|||
|
||||
Parameters
|
||||
----------
|
||||
fname : str or pathlib.Path
|
||||
fname : str, pathlib.Path, or h5py.File
|
||||
Filename of the DREAM.3D (HDF5) file.
|
||||
|
||||
Returns
|
||||
|
@ -743,17 +747,21 @@ def DREAM3D_cell_data_group(fname: _Union[str, _Path]) -> str:
|
|||
Path to the cell data group.
|
||||
|
||||
"""
|
||||
base_group = DREAM3D_base_group(fname)
|
||||
with _h5py.File(_Path(fname).expanduser(),'r') as f:
|
||||
def get_cell_data_group(f: _h5py.File) -> str:
|
||||
base_group = DREAM3D_base_group(f)
|
||||
cells = tuple(f['/'.join([base_group,'_SIMPL_GEOMETRY','DIMENSIONS'])][()][::-1])
|
||||
cell_data_group = f[base_group].visititems(lambda path,obj: path.split('/')[0] \
|
||||
if isinstance(obj,_h5py._hl.dataset.Dataset) and _np.shape(obj)[:-1] == cells \
|
||||
else None)
|
||||
if cell_data_group is None:
|
||||
raise ValueError(f'could not determine cell-data group in file "{fname}/{base_group}"')
|
||||
return cell_data_group
|
||||
|
||||
if cell_data_group is None:
|
||||
raise ValueError(f'could not determine cell-data group in file "{fname}/{base_group}"')
|
||||
if isinstance(fname,_h5py.File):
|
||||
return get_cell_data_group(fname)
|
||||
|
||||
return cell_data_group
|
||||
with _h5py.File(_Path(fname).expanduser(),'r') as f:
|
||||
return get_cell_data_group(f)
|
||||
|
||||
|
||||
def Bravais_to_Miller(*,
|
||||
|
|
|
@ -146,21 +146,25 @@ class TestUtil:
|
|||
assert 'DAMASK' in style('DAMASK')
|
||||
|
||||
@pytest.mark.parametrize('complete',[True,False])
|
||||
def test_D3D_base_group(self,tmp_path,complete):
|
||||
@pytest.mark.parametrize('fhandle',[True,False])
|
||||
def test_D3D_base_group(self,tmp_path,complete,fhandle):
|
||||
base_group = ''.join(random.choices('DAMASK', k=10))
|
||||
with h5py.File(tmp_path/'base_group.dream3d','w') as f:
|
||||
f.create_group('/'.join((base_group,'_SIMPL_GEOMETRY')))
|
||||
if complete:
|
||||
f['/'.join((base_group,'_SIMPL_GEOMETRY'))].create_dataset('SPACING',data=np.ones(3))
|
||||
|
||||
fname = tmp_path/'base_group.dream3d'
|
||||
if fhandle: fname = h5py.File(fname)
|
||||
if complete:
|
||||
assert base_group == util.DREAM3D_base_group(tmp_path/'base_group.dream3d')
|
||||
assert base_group == util.DREAM3D_base_group(fname)
|
||||
else:
|
||||
with pytest.raises(ValueError):
|
||||
util.DREAM3D_base_group(tmp_path/'base_group.dream3d')
|
||||
util.DREAM3D_base_group(fname)
|
||||
|
||||
@pytest.mark.parametrize('complete',[True,False])
|
||||
def test_D3D_cell_data_group(self,tmp_path,complete):
|
||||
@pytest.mark.parametrize('fhandle',[True,False])
|
||||
def test_D3D_cell_data_group(self,tmp_path,complete,fhandle):
|
||||
base_group = ''.join(random.choices('DAMASK', k=10))
|
||||
cell_data_group = ''.join(random.choices('KULeuven', k=10))
|
||||
cells = np.random.randint(1,50,3)
|
||||
|
@ -172,11 +176,13 @@ class TestUtil:
|
|||
if complete:
|
||||
f['/'.join((base_group,cell_data_group))].create_dataset('data',shape=np.append(cells,1))
|
||||
|
||||
fname = tmp_path/'cell_data_group.dream3d'
|
||||
if fhandle: fname = h5py.File(fname)
|
||||
if complete:
|
||||
assert cell_data_group == util.DREAM3D_cell_data_group(tmp_path/'cell_data_group.dream3d')
|
||||
assert cell_data_group == util.DREAM3D_cell_data_group(fname)
|
||||
else:
|
||||
with pytest.raises(ValueError):
|
||||
util.DREAM3D_cell_data_group(tmp_path/'cell_data_group.dream3d')
|
||||
util.DREAM3D_cell_data_group(fname)
|
||||
|
||||
|
||||
@pytest.mark.parametrize('full,reduced',[({}, {}),
|
||||
|
|
Loading…
Reference in New Issue