untangling

This commit is contained in:
Martin Diehl 2021-04-04 19:44:06 +02:00
parent e1d57f176d
commit 0e5f693fea
1 changed files with 16 additions and 35 deletions

View File

@ -1,6 +1,6 @@
import multiprocessing as mp import multiprocessing as mp
import re import re
import glob import fnmatch
import os import os
import datetime import datetime
import xml.etree.ElementTree as ET import xml.etree.ElementTree as ET
@ -43,7 +43,7 @@ def _match(requested,existing):
requested_ = requested if hasattr(requested,'__iter__') and not isinstance(requested,str) else \ requested_ = requested if hasattr(requested,'__iter__') and not isinstance(requested,str) else \
[requested] [requested]
return sorted(set(flatten_list([glob.fnmatch.filter(existing,r) for r in requested_])), return sorted(set(flatten_list([fnmatch.filter(existing,r) for r in requested_])),
key=util.natural_sort) key=util.natural_sort)
def _empty(dataset,N_materialpoints,fill_float,fill_int): def _empty(dataset,N_materialpoints,fill_float,fill_int):
@ -196,30 +196,6 @@ class Result:
self.visible[what] = sorted(diff, key=util.natural_sort) self.visible[what] = sorted(diff, key=util.natural_sort)
def _get_attribute(self,path,attr):
"""
Get the attribute of a dataset.
Parameters
----------
Path : str
Path to the dataset.
attr : str
Name of the attribute to get.
Returns
-------
attr at path, str or None.
The requested attribute, None if not found.
"""
with h5py.File(self.fname,'r') as f:
try:
return f[path].attrs[attr] if h5py3 else f[path].attrs[attr].decode()
except KeyError:
return None
def allow_modification(self): def allow_modification(self):
"""Allow to overwrite existing data.""" """Allow to overwrite existing data."""
print(util.warn('Warning: Modification of existing datasets allowed!')) print(util.warn('Warning: Modification of existing datasets allowed!'))
@ -353,17 +329,22 @@ class Result:
New name of the dataset. New name of the dataset.
""" """
if self._allow_modification: if not self._allow_modification:
with h5py.File(self.fname,'a') as f:
for path_old in self.get_dataset_location(name_old):
path_new = '/'.join([os.path.dirname(path_old),name_new])
f[path_new] = f[path_old]
f[path_new].attrs['Renamed'] = f'Original name: {name_old}' if h5py3 else \
f'Original name: {name_old}'.encode()
del f[path_old]
else:
raise PermissionError('Rename operation not permitted') raise PermissionError('Rename operation not permitted')
with h5py.File(self.fname,'a') as f:
for inc in self.visible['increments']:
for ty in ['phases','homogenizations']:
for label in self.visible[ty]:
for field in self.visible['fields']:
path_old = '/'.join([inc,ty[:-1],label,field,name_old])
path_new = '/'.join([inc,ty[:-1],label,field,name_new])
if path_old in f.keys():
f[path_new] = f[path_old]
f[path_new].attrs['renamed'] = f'original name: {name_old}' if h5py3 else \
f'original name: {name_old}'.encode()
del f[path_old]
def list_data(self): def list_data(self):
"""Return information on all active datasets in the file.""" """Return information on all active datasets in the file."""