From 84e117c6b36089f6e0a18b9aa46b05d8f81c96d7 Mon Sep 17 00:00:00 2001 From: Martin Diehl Date: Thu, 1 Apr 2021 15:52:43 +0200 Subject: [PATCH] polished and added tests --- python/damask/_result.py | 97 ++++++++++----------- python/tests/reference/Result/place_0.pbz2 | Bin 0 -> 40927 bytes python/tests/reference/Result/place_1.pbz2 | Bin 0 -> 48 bytes python/tests/reference/Result/place_2.pbz2 | Bin 0 -> 10851 bytes python/tests/reference/Result/place_3.pbz2 | Bin 0 -> 17373 bytes python/tests/reference/Result/place_4.pbz2 | Bin 0 -> 8573 bytes python/tests/reference/Result/place_5.pbz2 | Bin 0 -> 48 bytes python/tests/reference/Result/place_6.pbz2 | Bin 0 -> 1269 bytes python/tests/reference/Result/place_7.pbz2 | Bin 0 -> 7687 bytes python/tests/test_Result.py | 37 ++++++-- 10 files changed, 77 insertions(+), 57 deletions(-) create mode 100644 python/tests/reference/Result/place_0.pbz2 create mode 100644 python/tests/reference/Result/place_1.pbz2 create mode 100644 python/tests/reference/Result/place_2.pbz2 create mode 100644 python/tests/reference/Result/place_3.pbz2 create mode 100644 python/tests/reference/Result/place_4.pbz2 create mode 100644 python/tests/reference/Result/place_5.pbz2 create mode 100644 python/tests/reference/Result/place_6.pbz2 create mode 100644 python/tests/reference/Result/place_7.pbz2 diff --git a/python/damask/_result.py b/python/damask/_result.py index 35bb63989..e49c672be 100644 --- a/python/damask/_result.py +++ b/python/damask/_result.py @@ -1326,7 +1326,7 @@ class Result: v.save(f'{self.fname.stem}_inc{inc[ln:].zfill(N_digits)}') - def read(self,labels,compress=True,strip=True): + def read(self,output,compress=True,strip=True): """ Export data from file per phase/homogenization. @@ -1335,8 +1335,8 @@ class Result: Parameters ---------- - labels : str or list of, optional - Labels of the datasets to be read. + output : str or list of, optional + Name of the datasets to include. compress : bool Squeeze out dictionaries that are not needed for a unique structure. This might be beneficial in the case of single @@ -1348,22 +1348,22 @@ class Result: """ r = {} - labels_ = set([labels] if isinstance(labels,str) else labels) + output_ = set([output] if isinstance(output,str) else output) with h5py.File(self.fname,'r') as f: for inc in util.show_progress(self.visible['increments']): r[inc] = {'phase':{},'homogenization':{},'geometry':{}} - for la in labels_.intersection(f['/'.join((inc,'geometry'))].keys()): - r[inc]['geometry'][la] = _read(f,'/'.join((inc,'geometry',la))) + for out in output_.intersection(f['/'.join((inc,'geometry'))].keys()): + r[inc]['geometry'][out] = _read(f,'/'.join((inc,'geometry',out))) for ty in ['phase','homogenization']: - for na in self.visible[ty+'s']: - r[inc][ty][na] = {} - for field in f['/'.join((inc,ty,na))].keys(): - r[inc][ty][na][field] = {} - for la in labels_.intersection(f['/'.join((inc,ty,na,field))].keys()): - r[inc][ty][na][field][la] = _read(f,'/'.join((inc,ty,na,field,la))) + for label in self.visible[ty+'s']: + r[inc][ty][label] = {} + for field in f['/'.join((inc,ty,label))].keys(): + r[inc][ty][label][field] = {} + for out in output_.intersection(f['/'.join((inc,ty,label,field))].keys()): + r[inc][ty][label][field][out] = _read(f,'/'.join((inc,ty,label,field,out))) if strip: r = util.dict_strip(r) if compress: r = util.dict_compress(r) @@ -1371,7 +1371,7 @@ class Result: return r - def place(self,labels,compress=True,strip=True,constituents=None,fill_float=0.0,fill_int=0): + def place(self,output,compress=True,strip=True,constituents=None,fill_float=0.0,fill_int=0): """ Export data from file suitable sorted for spatial operations. @@ -1384,7 +1384,7 @@ class Result: Parameters ---------- - labels : str or list of, optional + output : str or list of, optional Labels of the datasets to be read. compress : bool Squeeze out dictionaries that are not needed for a unique @@ -1403,16 +1403,17 @@ class Result: fill_int : int Fill value for non existent entries of integer type. Defaults to 0. + """ r = {} - labels_ = set([labels] if isinstance(labels,str) else labels) + output_ = set([output] if isinstance(output,str) else output) if constituents is None: constituents_ = range(self.N_constituents) else: constituents_ = constituents if isinstance(constituents,Iterable) else [constituents] - suffixes = [''] if self.N_constituents == 1 or len(constituents_) == 1 else \ + suffixes = [''] if self.N_constituents == 1 or isinstance(constituents,int) else \ [f'#{c}' for c in constituents_] grp = 'mapping' if self.version_minor < 12 else 'cell_to' @@ -1423,10 +1424,10 @@ class Result: at_cell_ph = [] in_data_ph = [] - for c in constituents_: + for c in range(self.N_constituents): at_cell_ph.append({label: np.where(f[os.path.join(grp,'phase')][:,c][name] == label.encode())[0] \ for label in self.visible['phases']}) - in_data_ph.append({label: f[os.path.join(grp,'phase')][member][at_cell_ph[c][label]][...,0] \ + in_data_ph.append({label: f[os.path.join(grp,'phase')][member][at_cell_ph[c][label]][...,c] \ for label in self.visible['phases']}) at_cell_ho = {label: np.where(f[os.path.join(grp,'homogenization')][:][name] == label.encode())[0] \ @@ -1437,45 +1438,41 @@ class Result: for inc in util.show_progress(self.visible['increments']): r[inc] = {'phase':{},'homogenization':{},'geometry':{}} - for la in labels_.intersection(f[os.path.join(inc,'geometry')].keys()): - r[inc]['geometry'][la] = _read(f,os.path.join(inc,'geometry',la)) + for out in output_.intersection(f[os.path.join(inc,'geometry')].keys()): + r[inc]['geometry'][out] = _read(f,os.path.join(inc,'geometry',out)) - for ph in self.visible['phases']: - for field in f[os.path.join(inc,'phase',ph)].keys(): - if field not in r[inc]['phase'].keys(): - r[inc]['phase'][field] = {} + for ty in ['phase','homogenization']: + for label in self.visible[ty+'s']: + for field in f[os.path.join(inc,ty,label)].keys(): + if field not in r[inc][ty].keys(): + r[inc][ty][field] = {} - for la in labels_.intersection(f[os.path.join(inc,'phase',ph,field)].keys()): - data = ma.array(_read(f,os.path.join(inc,'phase',ph,field,la))) + for out in output_.intersection(f[os.path.join(inc,ty,label,field)].keys()): + data = ma.array(_read(f,os.path.join(inc,ty,label,field,out))) - if la+suffixes[0] not in r[inc]['phase'][field].keys(): - container = np.empty((self.N_materialpoints,)+data.shape[1:],dtype=data.dtype) - fill_value = fill_float if data.dtype in np.sctypes['float'] else \ - fill_int - for c,suffix in zip(constituents_, suffixes): - r[inc]['phase'][field][la+suffix] = \ - ma.array(container,fill_value=fill_value,mask=True) + if ty == 'phase': + if out+suffixes[0] not in r[inc][ty][field].keys(): + container = np.empty((self.N_materialpoints,)+data.shape[1:],dtype=data.dtype) + fill_value = fill_float if data.dtype in np.sctypes['float'] else \ + fill_int + for c,suffix in zip(constituents_, suffixes): + r[inc][ty][field][out+suffix] = \ + ma.array(container,fill_value=fill_value,mask=True) - for c,suffix in zip(constituents_, suffixes): - r[inc]['phase'][field][la+suffix][at_cell_ph[c][ph]] = data[in_data_ph[c][ph]] + for c,suffix in zip(constituents_, suffixes): + r[inc][ty][field][out+suffix][at_cell_ph[c][label]] = data[in_data_ph[c][label]] - for ho in self.visible['homogenizations']: - for field in f[os.path.join(inc,'homogenization',ho)].keys(): - if field not in r[inc]['homogenization'].keys(): - r[inc]['homogenization'][field] = {} + if ty == 'homogenization': + if out not in r[inc][ty][field].keys(): + container = np.empty((self.N_materialpoints,)+data.shape[1:],dtype=data.dtype) + fill_value = fill_float if data.dtype in np.sctypes['float'] else \ + fill_int + r[inc][ty][field][out] = \ + ma.array(container,fill_value=fill_value,mask=True) - for la in labels_.intersection(f[os.path.join(inc,'homogenization',ho,field)].keys()): - data = ma.array(_read(f,os.path.join(inc,'homogenization',ho,field,la))) - - if la not in r[inc]['homogenization'][field].keys(): - container = np.empty((self.N_materialpoints,)+data.shape[1:],dtype=data.dtype) - fill_value = fill_float if data.dtype in np.sctypes['float'] else \ - fill_int - r[inc]['homogenization'][field][la] = \ - ma.array(container,fill_value=fill_value,mask=True) - - r[inc]['homogenization'][field][la][at_cell_ho[ho]] = data[in_data_ho[ho]] + r[inc][ty][field][out][at_cell_ho[label]] = data[in_data_ho[label]] if strip: r = util.dict_strip(r) if compress: r = util.dict_compress(r) + return r diff --git a/python/tests/reference/Result/place_0.pbz2 b/python/tests/reference/Result/place_0.pbz2 new file mode 100644 index 0000000000000000000000000000000000000000..e8a7d1399d3fd9d44c753476660ea67d32fe869b GIT binary patch literal 40927 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 w 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 literal 0 HcmV?d00001 diff --git a/python/tests/reference/Result/place_1.pbz2 b/python/tests/reference/Result/place_1.pbz2 new file mode 100644 index 0000000000000000000000000000000000000000..c1963d4eaf5b3c808081454a4553c95097f00396 GIT binary patch literal 48 zcmZ>Y%CIzaj8qGbd?Z-;kb!~m!UGl{$-v~mz`~%wpxD+pi#fQkTqU@blTT56o&W$p C8Vo%E literal 0 HcmV?d00001 diff --git a/python/tests/reference/Result/place_2.pbz2 b/python/tests/reference/Result/place_2.pbz2 new file mode 100644 index 0000000000000000000000000000000000000000..399aaaa7960d0a61c664cf1649078f8420abdb77 GIT binary patch literal 10851 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 literal 0 HcmV?d00001 diff --git a/python/tests/reference/Result/place_3.pbz2 b/python/tests/reference/Result/place_3.pbz2 new file mode 100644 index 0000000000000000000000000000000000000000..a5fcd416861391c84cabd1e6c5841acb3c7897cb GIT binary patch literal 17373 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 C8Vo%E literal 0 HcmV?d00001 diff --git a/python/tests/reference/Result/place_6.pbz2 b/python/tests/reference/Result/place_6.pbz2 new file mode 100644 index 0000000000000000000000000000000000000000..2844addcb207a77069e18f247a76d5a4c4a849d8 GIT binary patch literal 1269 zcmV~;-}isz{z(7-|4&zT zd*{#H72VJS*gYB9#FtveAx$++q)#IznwdQ&o|6d4rf8WB8feC*36lXbVg?D5A)v{j zpv?j?p`twqey6B30Gm;!1j(MFZ8RM{MnDZ32dE5zhz5*CLq>oAX`@CE(WXWS02n|9 zfB?|QXwU!v10VnqDMLb;rm5mJF_e0Z29HsunjWA%O{mb>Bh&x@4F-S!Gy@<9s2-z0 z4FCYp0004^05sE0G8q~)8Usxl13{2zWCKB?Kn6jPpawt~hC@v<01W^DFq&v-lR(G- zNhp!(o~N}>Q%9+z)b%uGhz$Xd9-sgRs5EE*00000&^!pwTO**;sc<)(5VxRGq~UrpnmWSOZ^R8YOBLWhZIhSWCQ3nug7RWSn9M zoD<@vdOua|tz(z*F`yI?Iisa~P{cneAkrjVz<9iTti4%GtXMb$lsQ8N4MW-MW*1>| z2-M)ySPkIo2P|kb8@E>I>tNU$@vVAQp}!mvv^rsfR=90lyyJTjtECthZH){$ZfLAr z909+*8v|t3*v{TeLxz1TunJPpD-P0w6$s9e&Fvs7J&FH&v$l$|8K3c*1wfp*MUe_H z@7-|y?q5U5dU(z?wh10mCN+WbmMYe;e%w+Fl3*t-xrk?yVpO>ZFz*L29JheshOYo& zMdBI4!YT#q#4rIHu;tqbg=G)61Dh}bf=5(EIyEZSF`HH4;&AGCL*kBhqtdYR*P{oU zpzH>|T$9w-Wa5o*dm+zv;ueQaJAc!UcHU_9_PcGJ@HaLIn{G~b$gm;nSNU!Z7Io(v z69ek}S8D~doppWNCqOMYrHR|^wvPM?N~RQH1ag#9nZZ13$v~xwNG+J)qFi2fj8?Hq zi!>`3qB~nvCIFUZd`=1BFrx{lq>F+ozH|2o!jVKNk||8o7-L(>9C5ZfjryUyEe^{&QCxCr z zV;~a%TEFP+#I4E@Py&=FfLzEAjx8>!)~zqhprnYG4%b8I{<>Qq zHI(@TDt!rMJBatdt<{Qd?#Ou#CDU-5S&Q-ui!0lna`7%ezR literal 0 HcmV?d00001 diff --git a/python/tests/reference/Result/place_7.pbz2 b/python/tests/reference/Result/place_7.pbz2 new file mode 100644 index 0000000000000000000000000000000000000000..cab7a373946dd213f9e46d72826bbc4be968d16b GIT binary patch literal 7687 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 Bkput$ literal 0 HcmV?d00001 diff --git a/python/tests/test_Result.py b/python/tests/test_Result.py index 38c2cb4ee..a175e5a94 100644 --- a/python/tests/test_Result.py +++ b/python/tests/test_Result.py @@ -401,7 +401,7 @@ class TestResult: with pytest.raises(TypeError): default.save_XDMF() - @pytest.mark.parametrize('view,labels,compress,strip', + @pytest.mark.parametrize('view,output,compress,strip', [({},['F','P','F','L_p','F_e','F_p'],True,True), ({'increments':3},'F',True,True), ({'increments':[1,8,3,4,5,6,7]},['F','P'],True,True), @@ -411,18 +411,41 @@ class TestResult: ({'phases':False},['Delta_V'],True,True), ({},['u_p','u_n'],False,False)], ids=list(range(8))) - def test_read(self,update,request,ref_path,view,labels,compress,strip): + def test_read(self,update,request,ref_path,view,output,compress,strip): result = Result(ref_path/'4grains2x4x3_compressionY.hdf5') for key,value in view.items(): result.view(key,value) N = request.node.name[8:].split('[')[1].split(']')[0] - cur = result.read(labels,compress,strip) + cur = result.read(output,compress,strip) if update: with bz2.BZ2File(ref_path/f'read_{N}.pbz2','w') as f: pickle.dump(cur,f) - + with bz2.BZ2File(ref_path/f'read_{N}.pbz2') as f: - ref = pickle.load(f) - - assert dict_equal(cur,ref) + assert dict_equal(cur,pickle.load(f)) + + + @pytest.mark.parametrize('view,output,compress,constituents,strip', + [({},['F','P','F','L_p','F_e','F_p'],True,True,None), + ({'increments':3},'F',True,True,[0,1,2,3,4,5,6,7]), + ({'increments':[1,8,3,4,5,6,7]},['F','P'],True,True,1), + ({'phases':['A','B']},['F','P'],True,True,[1,2]), + ({'phases':['A','C'],'homogenizations':False},['F','P','O'],True,True,[0,7]), + ({'phases':False,'homogenizations':False},['F','P','O'],True,True,[1,2,3,4]), + ({'phases':False},['Delta_V'],True,True,[1,2,4]), + ({},['u_p','u_n'],False,False,None)], + ids=list(range(8))) + def test_place(self,update,request,ref_path,view,output,compress,strip,constituents): + result = Result(ref_path/'4grains2x4x3_compressionY.hdf5') + for key,value in view.items(): + result.view(key,value) + + N = request.node.name[8:].split('[')[1].split(']')[0] + cur = result.place(output,compress,strip,constituents) + if update: + with bz2.BZ2File(ref_path/f'place_{N}.pbz2','w') as f: + pickle.dump(cur,f) + + with bz2.BZ2File(ref_path/f'place_{N}.pbz2') as f: + assert dict_equal(cur,pickle.load(f))