From 5882a8560c234ff92797dfedd56205639ea9bd61 Mon Sep 17 00:00:00 2001 From: Philip Eisenlohr Date: Wed, 23 Feb 2022 08:37:23 -0500 Subject: [PATCH] shortened __repr__ code --- python/damask/_orientation.py | 7 +- python/damask/_rotation.py | 2 +- python/damask/_vtk.py | 149 ++++++++++++++++------------------ 3 files changed, 76 insertions(+), 82 deletions(-) diff --git a/python/damask/_orientation.py b/python/damask/_orientation.py index ea3bbba8b..f3d3f84b7 100644 --- a/python/damask/_orientation.py +++ b/python/damask/_orientation.py @@ -120,9 +120,10 @@ class Orientation(Rotation,Crystal): def __repr__(self) -> str: - """Give short human readable summary.""" - return '\n'.join([Crystal.__repr__(self), - Rotation.__repr__(self)]) + """Give short human-readable summary.""" + return util.srepr([Crystal.__repr__(self), + Rotation.__repr__(self)]) + def __copy__(self: MyType, rotation: Union[FloatSequence, Rotation] = None) -> MyType: diff --git a/python/damask/_rotation.py b/python/damask/_rotation.py index 71d7a837c..64393737b 100644 --- a/python/damask/_rotation.py +++ b/python/damask/_rotation.py @@ -88,7 +88,7 @@ class Rotation: def __repr__(self) -> str: - """Give short human readable summary.""" + """Give short human-readable summary.""" return f'Quaternion{" " if self.quaternion.shape == (4,) else "s of shape "+str(self.quaternion.shape[:-1])+chr(10)}'\ + str(self.quaternion) diff --git a/python/damask/_vtk.py b/python/damask/_vtk.py index 3a2355640..9f73633d5 100644 --- a/python/damask/_vtk.py +++ b/python/damask/_vtk.py @@ -38,6 +38,33 @@ class VTK: self.vtk_data = vtk_data + def __repr__(self) -> str: + """Give short human-readable summary.""" + info = [self.vtk_data.__vtkname__] + + for data in ['Cell Data', 'Point Data']: + if data == 'Cell Data': info.append(f'\n# cells: {self.N_cells}') + if data == 'Point Data': info.append(f'\n# points: {self.N_points}') + if data in self.labels: + info += [f' - {l}' for l in self.labels[data]] + + return util.srepr(info) + + + def __eq__(self, + other: object) -> bool: + """ + Equal to other. + + Parameters + ---------- + other : damask.VTK + VTK to compare self against. + + """ + return self.as_ASCII() == other.as_ASCII() if isinstance(other, VTK) else NotImplemented + + def copy(self): if isinstance(self.vtk_data,vtk.vtkImageData): dup = vtk.vtkImageData() @@ -55,16 +82,47 @@ class VTK: return VTK(dup) + @property + def comments(self) -> List[str]: + """Return the comments.""" + fielddata = self.vtk_data.GetFieldData() + for a in range(fielddata.GetNumberOfArrays()): + if fielddata.GetArrayName(a) == 'comments': + comments = fielddata.GetAbstractArray(a) + return [comments.GetValue(i) for i in range(comments.GetNumberOfValues())] + return [] + + @comments.setter + def comments(self, + comments: Union[str, Sequence[str]]): + """ + Set comments. + + Parameters + ---------- + comments : str or list of str + Comments. + + """ + s = vtk.vtkStringArray() + s.SetName('comments') + for c in util.tail_repack(comments,self.comments): + s.InsertNextValue(c) + self.vtk_data.GetFieldData().AddArray(s) + + @property def N_points(self) -> int: """Number of points in vtkdata.""" return self.vtk_data.GetNumberOfPoints() + @property def N_cells(self) -> int: """Number of cells in vtkdata.""" return self.vtk_data.GetNumberOfCells() + @property def labels(self): """Labels of datasets.""" @@ -80,6 +138,7 @@ class VTK: return labels + @staticmethod def from_image_data(cells: IntSequence, size: FloatSequence, @@ -280,6 +339,17 @@ class VTK: """Wrapper for parallel writing.""" writer.Write() + + def as_ASCII(self) -> str: + """ASCII representation of the VTK data.""" + writer = vtk.vtkDataSetWriter() + writer.SetHeader(f'# {util.execution_stamp("VTK")}') + writer.WriteToOutputStringOn() + writer.SetInputData(self.vtk_data) + writer.Write() + return writer.GetOutputString() + + def save(self, fname: Union[str, Path], parallel: bool = True, @@ -350,7 +420,7 @@ class VTK: N_data = data.shape[0] - data_ = data.reshape(N_data,-1)\ + data_ = data.reshape(N_data,-1) \ .astype(np.single if data.dtype in [np.double,np.longdouble] else data.dtype) if data.dtype.type is np.str_: @@ -429,83 +499,6 @@ class VTK: raise ValueError(f'array "{label}" not found') - @property - def comments(self) -> List[str]: - """Return the comments.""" - fielddata = self.vtk_data.GetFieldData() - for a in range(fielddata.GetNumberOfArrays()): - if fielddata.GetArrayName(a) == 'comments': - comments = fielddata.GetAbstractArray(a) - return [comments.GetValue(i) for i in range(comments.GetNumberOfValues())] - return [] - - @comments.setter - def comments(self, - comments: Union[str, Sequence[str]]): - """ - Set comments. - - Parameters - ---------- - comments : str or list of str - Comments. - - """ - s = vtk.vtkStringArray() - s.SetName('comments') - for c in util.tail_repack(comments,self.comments): - s.InsertNextValue(c) - self.vtk_data.GetFieldData().AddArray(s) - - - def __repr__(self) -> str: - """Give short human-readable summary.""" - info = [] - if isinstance(self.vtk_data,vtk.vtkImageData): - info.append('vtkImageData') - elif isinstance(self.vtk_data,vtk.vtkUnstructuredGrid): - info.append('vtkUnstructuredGrid') - elif isinstance(self.vtk_data,vtk.vtkPolyData): - info.append('vtkPolyData') - elif isinstance(self.vtk_data,vtk.vtkRectilinearGrid): - info.append('vtkRectilinearGrid') - - for data in ['Cell Data', 'Point Data']: - if data == 'Cell Data': info.append(f'\n# cells: {self.N_cells}') - if data == 'Point Data': info.append(f'\n# points: {self.N_points}') - if data in self.labels: - info.append(f'with {data}:') - info += self.labels[data] - - return util.srepr(info) - - - def __eq__(self, - other: object) -> bool: - """ - Test equality of other. - - Parameters - ---------- - other : damask.VTK - VTK to compare self against. - - """ - if not isinstance(other, VTK): - return NotImplemented - return self.as_ASCII() == other.as_ASCII() - - - def as_ASCII(self) -> str: - """ASCII representation of the VTK data.""" - writer = vtk.vtkDataSetWriter() - writer.SetHeader(f'# {util.execution_stamp("VTK")}') - writer.WriteToOutputStringOn() - writer.SetInputData(self.vtk_data) - writer.Write() - return writer.GetOutputString() - - def show(self, label: str = None, colormap: Colormap = Colormap.from_predefined('cividis')):