diff --git a/python/damask/_result.py b/python/damask/_result.py index 02812b79a..8109c0b1a 100644 --- a/python/damask/_result.py +++ b/python/damask/_result.py @@ -120,7 +120,7 @@ class Result: r = re.compile(rf'{prefix_inc}([0-9]+)') self._increments = sorted([i for i in f.keys() if r.match(i)],key=util.natural_sort) - self._times = np.around([f[i].attrs['t/s'] for i in self._increments],12) + self._times = {int(i.split('_')[1]):np.around(f[i].attrs['t/s'],12) for i in self._increments} if len(self._increments) == 0: raise ValueError('incomplete DADF5 file') @@ -226,7 +226,8 @@ class Result: self._increments[c] if isinstance(c,int) and c<0 else f'{prefix_inc}{c}' for c in choice] elif what == 'times': - atol = 1e-2 * np.min(np.diff(self._times)) + times = list(self._times.values()) + atol = 1e-2 * np.min(np.diff(times)) what = 'increments' if choice == ['*']: choice = self._increments @@ -234,10 +235,10 @@ class Result: iterator = np.array(choice).astype(float) choice = [] for c in iterator: - idx = np.searchsorted(self._times,c,side='left') - if idx0 and np.isclose(c,self._times[idx-1],rtol=0,atol=atol): + elif idx>0 and np.isclose(c,times[idx-1],rtol=0,atol=atol): choice.append(self._increments[idx-1]) valid = _match(choice,getattr(self,'_'+what)) @@ -296,9 +297,9 @@ class Result: Time of each increment within the given bounds. """ - s,e = (self._times[ 0] if start is None else start, - self._times[-1] if end is None else end) - return [t for t in self._times if s <= t <= e] + s,e = (self.times[ 0] if start is None else start, + self.times[-1] if end is None else end) + return [t for t in self.times if s <= t <= e] def view(self,*, @@ -533,7 +534,7 @@ class Result: msg = [] with h5py.File(self.fname,'r') as f: for inc in self.visible['increments']: - msg += [f'\n{inc} ({self._times[self._increments.index(inc)]} s)'] + msg += [f'\n{inc} ({self._times[int(inc.split("_")[1])]} s)'] for ty in ['phase','homogenization']: msg += [f' {ty}'] for label in self.visible[ty+'s']: @@ -575,19 +576,19 @@ class Result: @property def times(self): - return NotImplementedError + return [self._times[i] for i in self.increments] @property def phases(self): - return [copy.deepcopy(self.visible['phases'])] + return self.visible['phases'] @property def homogenizations(self): - return [copy.deepcopy(self.visible['homogenizations'])] + return self.visible['homogenizations'] @property def fields(self): - return [copy.deepcopy(self.visible['fields'])] + return self.visible['fields'] @property @@ -1769,11 +1770,10 @@ class Result: time.attrib = {'TimeType': 'List'} time_data = ET.SubElement(time, 'DataItem') - times = [self._times[self._increments.index(i)] for i in self.visible['increments']] time_data.attrib = {'Format': 'XML', 'NumberType': 'Float', - 'Dimensions': f'{len(times)}'} - time_data.text = ' '.join(map(str,times)) + 'Dimensions': f'{len(self.times)}'} + time_data.text = ' '.join(map(str,self.times)) attributes = [] data_items = [] diff --git a/python/tests/test_Result.py b/python/tests/test_Result.py index ac7a9f0a8..dc2daf461 100644 --- a/python/tests/test_Result.py +++ b/python/tests/test_Result.py @@ -126,7 +126,8 @@ class TestResult: @pytest.mark.parametrize('sign',[+1,-1]) def test_view_approxtimes(self,default,inc,sign): eps = sign*1e-3 - assert [default._increments[inc]] == default.view(times=default._times[inc]+eps).visible['increments'] + times = list(default._times.values()) + assert [default._increments[inc]] == default.view(times=times[inc]+eps).visible['increments'] def test_add_invalid(self,default): default.add_absolute('xxxx')