shorter but still descriptive names

This commit is contained in:
Martin Diehl 2019-12-05 06:10:27 +01:00
parent e7a67262f8
commit ee8e3386f4
9 changed files with 79 additions and 74 deletions

View File

@ -41,9 +41,9 @@ for name in filenames:
damask.util.report(scriptName,name) damask.util.report(scriptName,name)
table = damask.Table.from_ASCII(StringIO(''.join(sys.stdin.read())) if name is None else name) table = damask.Table.from_ASCII(StringIO(''.join(sys.stdin.read())) if name is None else name)
table.add_array('Cauchy', table.add('Cauchy',
damask.mechanics.Cauchy(table.get_array(options.defgrad).reshape(-1,3,3), damask.mechanics.Cauchy(table.get(options.defgrad).reshape(-1,3,3),
table.get_array(options.stress).reshape(-1,3,3)).reshape(-1,9), table.get(options.stress ).reshape(-1,3,3)).reshape(-1,9),
scriptID+' '+' '.join(sys.argv[1:])) scriptID+' '+' '.join(sys.argv[1:]))
table.to_ASCII(sys.stdout if name is None else name) table.to_ASCII(sys.stdout if name is None else name)

View File

@ -38,8 +38,8 @@ for name in filenames:
table = damask.Table.from_ASCII(StringIO(''.join(sys.stdin.read())) if name is None else name) table = damask.Table.from_ASCII(StringIO(''.join(sys.stdin.read())) if name is None else name)
for tensor in options.tensor: for tensor in options.tensor:
table.add_array('det({})'.format(tensor), table.add('det({})'.format(tensor),
np.linalg.det(table.get_array(tensor).reshape(-1,3,3)), np.linalg.det(table.get(tensor).reshape(-1,3,3)),
scriptID+' '+' '.join(sys.argv[1:])) scriptID+' '+' '.join(sys.argv[1:]))
table.to_ASCII(sys.stdout if name is None else name) table.to_ASCII(sys.stdout if name is None else name)

View File

@ -40,12 +40,12 @@ for name in filenames:
table = damask.Table.from_ASCII(StringIO(''.join(sys.stdin.read())) if name is None else name) table = damask.Table.from_ASCII(StringIO(''.join(sys.stdin.read())) if name is None else name)
for tensor in options.tensor: for tensor in options.tensor:
table.add_array('dev({})'.format(tensor), table.add('dev({})'.format(tensor),
damask.mechanics.deviatoric_part(table.get_array(tensor).reshape(-1,3,3)).reshape((-1,9)), damask.mechanics.deviatoric_part(table.get(tensor).reshape(-1,3,3)).reshape((-1,9)),
scriptID+' '+' '.join(sys.argv[1:])) scriptID+' '+' '.join(sys.argv[1:]))
if options.spherical: if options.spherical:
table.add_array('sph({})'.format(tensor), table.add('sph({})'.format(tensor),
damask.mechanics.spherical_part(table.get_array(tensor).reshape(-1,3,3)), damask.mechanics.spherical_part(table.get(tensor).reshape(-1,3,3)),
scriptID+' '+' '.join(sys.argv[1:])) scriptID+' '+' '.join(sys.argv[1:]))
table.to_ASCII(sys.stdout if name is None else name) table.to_ASCII(sys.stdout if name is None else name)

View File

@ -45,12 +45,12 @@ for name in filenames:
table = damask.Table.from_ASCII(StringIO(''.join(sys.stdin.read())) if name is None else name) table = damask.Table.from_ASCII(StringIO(''.join(sys.stdin.read())) if name is None else name)
for strain in options.strain: for strain in options.strain:
table.add_array('Mises({})'.format(strain), table.add('Mises({})'.format(strain),
damask.mechanics.Mises_strain(damask.mechanics.symmetric(table.get_array(strain).reshape(-1,3,3))), damask.mechanics.Mises_strain(damask.mechanics.symmetric(table.get(strain).reshape(-1,3,3))),
scriptID+' '+' '.join(sys.argv[1:])) scriptID+' '+' '.join(sys.argv[1:]))
for stress in options.stress: for stress in options.stress:
table.add_array('Mises({})'.format(stress), table.add('Mises({})'.format(stress),
damask.mechanics.Mises_stress(damask.mechanics.symmetric(table.get_array(stress).reshape(-1,3,3))), damask.mechanics.Mises_stress(damask.mechanics.symmetric(table.get(stress).reshape(-1,3,3))),
scriptID+' '+' '.join(sys.argv[1:])) scriptID+' '+' '.join(sys.argv[1:]))
table.to_ASCII(sys.stdout if name is None else name) table.to_ASCII(sys.stdout if name is None else name)

View File

@ -42,9 +42,9 @@ for name in filenames:
table = damask.Table.from_ASCII(StringIO(''.join(sys.stdin.read())) if name is None else name) table = damask.Table.from_ASCII(StringIO(''.join(sys.stdin.read())) if name is None else name)
table.add_array('S', table.add('S',
damask.mechanics.PK2(table.get_array(options.defgrad).reshape(-1,3,3), damask.mechanics.PK2(table.get(options.defgrad).reshape(-1,3,3),
table.get_array(options.stress).reshape(-1,3,3)).reshape(-1,9), table.get(options.stress ).reshape(-1,3,3)).reshape(-1,9),
scriptID+' '+' '.join(sys.argv[1:])) scriptID+' '+' '.join(sys.argv[1:]))
table.to_ASCII(sys.stdout if name is None else name) table.to_ASCII(sys.stdout if name is None else name)

View File

@ -44,7 +44,8 @@ for name in filenames:
table = damask.Table.from_ASCII(StringIO(''.join(sys.stdin.read())) if name is None else name) table = damask.Table.from_ASCII(StringIO(''.join(sys.stdin.read())) if name is None else name)
for i,label in enumerate(options.label): for i,label in enumerate(options.label):
table.set_array(label,table.get_array(label)*float(options.factor[i]), table.set(label,
table.get(label)*float(options.factor[i]),
scriptID+' '+' '.join(sys.argv[1:])) scriptID+' '+' '.join(sys.argv[1:]))
table.to_ASCII(sys.stdout if name is None else name) table.to_ASCII(sys.stdout if name is None else name)

View File

@ -44,7 +44,8 @@ for name in filenames:
table = damask.Table.from_ASCII(StringIO(''.join(sys.stdin.read())) if name is None else name) table = damask.Table.from_ASCII(StringIO(''.join(sys.stdin.read())) if name is None else name)
for i,label in enumerate(options.label): for i,label in enumerate(options.label):
table.set_array(label,table.get_array(label)+float(options.offset[i]), table.set(label,
table.get(label)+float(options.offset[i]),
scriptID+' '+' '.join(sys.argv[1:])) scriptID+' '+' '.join(sys.argv[1:]))
table.to_ASCII(sys.stdout if name is None else name) table.to_ASCII(sys.stdout if name is None else name)

View File

@ -87,14 +87,19 @@ class Table():
return Table(data,shapes,comments) return Table(data,shapes,comments)
def get_array(self,label): def labels(self):
"""Return the labels of all columns."""
return list(self.shapes.keys())
def get(self,label):
""" """
Return data as array. Get column data.
Parameters Parameters
---------- ----------
label : str label : str
Label of the array. Column label.
""" """
if re.match(r'[0-9]*?_',label): if re.match(r'[0-9]*?_',label):
@ -103,62 +108,60 @@ class Table():
else: else:
return self.data[label].to_numpy().reshape((-1,)+self.shapes[label]) return self.data[label].to_numpy().reshape((-1,)+self.shapes[label])
def set_array(self,label,array,info): def set(self,label,data,info=None):
""" """
Modify data in the spreadsheet. Set column data.
Parameters Parameters
---------- ----------
label : str label : str
Label for the new data. Column label.
array : np.ndarray data : np.ndarray
New data. New data.
info : str info : str, optional
Human-readable information about the new data. Human-readable information about the new data.
""" """
if np.prod(array.shape[1:],dtype=int) == 1: if info is not None:
if np.prod(data.shape[1:],dtype=int) == 1:
self.comments.append('{}: {}'.format(label,info)) self.comments.append('{}: {}'.format(label,info))
else: else:
self.comments.append('{} {}: {}'.format(label,array.shape[1:],info)) self.comments.append('{} {}: {}'.format(label,data.shape[1:],info))
if re.match(r'[0-9]*?_',label): if re.match(r'[0-9]*?_',label):
idx,key = label.split('_',1) idx,key = label.split('_',1)
iloc = self.data.columns.get_loc(key).tolist().index(True) + int(idx) -1 iloc = self.data.columns.get_loc(key).tolist().index(True) + int(idx) -1
self.data.iloc[:,iloc] = array self.data.iloc[:,iloc] = data
else: else:
self.data[label] = array.reshape(self.data[label].shape) self.data[label] = data.reshape(self.data[label].shape)
def add(self,label,data,info=None):
def labels(self):
"""Return the labels of all columns."""
return list(self.shapes.keys())
def add_array(self,label,array,info):
""" """
Add data to the spreadsheet. Add column data.
Parameters Parameters
---------- ----------
label : str label : str
Label for the new data. Column label.
array : np.ndarray data : np.ndarray
New data. Modified data.
info : str info : str, optional
Human-readable information about the new data. Human-readable information about the modified data.
""" """
if np.prod(array.shape[1:],dtype=int) == 1: if info is not None:
if np.prod(data.shape[1:],dtype=int) == 1:
self.comments.append('{}: {}'.format(label,info)) self.comments.append('{}: {}'.format(label,info))
else: else:
self.comments.append('{} {}: {}'.format(label,array.shape[1:],info)) self.comments.append('{} {}: {}'.format(label,data.shape[1:],info))
self.shapes[label] = array.shape[1:] if len(array.shape) > 1 else (1,) self.shapes[label] = data.shape[1:] if len(data.shape) > 1 else (1,)
size = np.prod(array.shape[1:],dtype=int) size = np.prod(data.shape[1:],dtype=int)
new_data = pd.DataFrame(data=array.reshape(-1,size), new_data = pd.DataFrame(data=data.reshape(-1,size),
columns=[label for l in range(size)]) columns=[label for l in range(size)])
self.data = pd.concat([self.data,new_data],axis=1) self.data = pd.concat([self.data,new_data],axis=1)
def to_ASCII(self,fname): def to_ASCII(self,fname):
""" """
Store as plain text file. Store as plain text file.

View File

@ -20,11 +20,11 @@ def reference_dir(reference_dir_base):
class TestTable: class TestTable:
def test_get_tensor(self,default): def test_get_tensor(self,default):
d = default.get_array('F') d = default.get('F')
assert np.allclose(d,1.0) and d.shape[1:] == (3,3) assert np.allclose(d,1.0) and d.shape[1:] == (3,3)
def test_get_vector(self,default): def test_get_vector(self,default):
d = default.get_array('v') d = default.get('v')
assert np.allclose(d,1.0) and d.shape[1:] == (3,) assert np.allclose(d,1.0) and d.shape[1:] == (3,)
def test_write_read_str(self,default,tmpdir): def test_write_read_str(self,default,tmpdir):
@ -44,30 +44,30 @@ class TestTable:
with open(os.path.join(reference_dir,fname)) as f: with open(os.path.join(reference_dir,fname)) as f:
new = Table.from_ASCII(f) new = Table.from_ASCII(f)
def test_set_array(self,default): def test_set(self,default):
default.set_array('F',np.zeros((5,3,3)),'set to zero') default.set('F',np.zeros((5,3,3)),'set to zero')
d=default.get_array('F') d=default.get('F')
assert np.allclose(d,0.0) and d.shape[1:] == (3,3) assert np.allclose(d,0.0) and d.shape[1:] == (3,3)
def test_labels(self,default): def test_labels(self,default):
assert default.labels() == ['F','v','s'] assert default.labels() == ['F','v','s']
def test_add_array(self,default): def test_add(self,default):
d = np.random.random((5,9)) d = np.random.random((5,9))
default.add_array('nine',d,'random data') default.add('nine',d,'random data')
assert np.allclose(d,default.get_array('nine')) assert np.allclose(d,default.get('nine'))
def test_invalid_initialization(self,default): def test_invalid_initialization(self,default):
x = default.get_array('v') x = default.get('v')
with pytest.raises(IndexError): with pytest.raises(IndexError):
Table(x,{'F':(3,3)}) Table(x,{'F':(3,3)})
def test_invalid_set(self,default): def test_invalid_set(self,default):
x = default.get_array('v') x = default.get('v')
with pytest.raises(ValueError): with pytest.raises(ValueError):
default.set_array('F',x,'does not work') default.set('F',x,'does not work')
def test_invalid_get_array(self,default): def test_invalid_get(self,default):
with pytest.raises(KeyError): with pytest.raises(KeyError):
default.get_array('n') default.get('n')