test __eq__; polish help strings
This commit is contained in:
parent
3bf10127b8
commit
bd908dc425
|
@ -80,7 +80,7 @@ class Colormap(mpl.colors.ListedColormap):
|
||||||
"""
|
"""
|
||||||
Create a perceptually uniform colormap between given (inclusive) bounds.
|
Create a perceptually uniform colormap between given (inclusive) bounds.
|
||||||
|
|
||||||
Colors are internally stored as R(ed) G(green) B(lue) values.
|
Colors are internally stored as RGB (Red Green Blue) values.
|
||||||
The colormap can be used in matplotlib/seaborn or exported to
|
The colormap can be used in matplotlib/seaborn or exported to
|
||||||
file for external use.
|
file for external use.
|
||||||
|
|
||||||
|
@ -154,8 +154,8 @@ class Colormap(mpl.colors.ListedColormap):
|
||||||
"""
|
"""
|
||||||
Select from a set of predefined colormaps.
|
Select from a set of predefined colormaps.
|
||||||
|
|
||||||
Predefined colormaps include native matplotlib colormaps
|
Predefined colormaps (Colormap.predefined) include
|
||||||
and common DAMASK colormaps.
|
native matplotlib colormaps and common DAMASK colormaps.
|
||||||
|
|
||||||
Parameters
|
Parameters
|
||||||
----------
|
----------
|
||||||
|
@ -202,7 +202,7 @@ class Colormap(mpl.colors.ListedColormap):
|
||||||
field : numpy.array of shape (:,:)
|
field : numpy.array of shape (:,:)
|
||||||
Data to be shaded.
|
Data to be shaded.
|
||||||
bounds : iterable of float (2), optional
|
bounds : iterable of float (2), optional
|
||||||
Value range (low,high) to shade with colormap.
|
Value range (low,high) spanned by colormap.
|
||||||
gap : field.dtype, optional
|
gap : field.dtype, optional
|
||||||
Transparent value. NaN will always be rendered transparent.
|
Transparent value. NaN will always be rendered transparent.
|
||||||
|
|
||||||
|
@ -241,8 +241,8 @@ class Colormap(mpl.colors.ListedColormap):
|
||||||
Parameters
|
Parameters
|
||||||
----------
|
----------
|
||||||
name : str, optional
|
name : str, optional
|
||||||
Name for the reversed colormap.
|
Name of the reversed colormap.
|
||||||
A name of None will be replaced by the name of the parent colormap + "_r".
|
If None, parent colormap name + "_r".
|
||||||
|
|
||||||
Returns
|
Returns
|
||||||
-------
|
-------
|
||||||
|
@ -259,26 +259,28 @@ class Colormap(mpl.colors.ListedColormap):
|
||||||
return Colormap(np.array(rev.colors),rev.name[:-4] if rev.name.endswith('_r_r') else rev.name)
|
return Colormap(np.array(rev.colors),rev.name[:-4] if rev.name.endswith('_r_r') else rev.name)
|
||||||
|
|
||||||
|
|
||||||
def _get_file_handle(self, fname: Union[TextIO, str, Path, None], ext: str) -> TextIO:
|
def _get_file_handle(self,
|
||||||
|
fname: Union[TextIO, str, Path, None] = None,
|
||||||
|
suffix: str = None) -> TextIO:
|
||||||
"""
|
"""
|
||||||
Provide file handle.
|
Provide filehandle.
|
||||||
|
|
||||||
Parameters
|
Parameters
|
||||||
----------
|
----------
|
||||||
fname : file, str, pathlib.Path, or None
|
fname : file, str, pathlib.Path, or None
|
||||||
Filename or filehandle.
|
Filename or filehandle.
|
||||||
If None, built from colormap name and ext.
|
If None, colormap name + suffix.
|
||||||
ext: str
|
suffix: str, optional
|
||||||
Extension of the filename.
|
Extension to use for colormap filename.
|
||||||
|
|
||||||
Returns
|
Returns
|
||||||
-------
|
-------
|
||||||
f : file object
|
f : file object
|
||||||
File handle with write access.
|
Filehandle with write access.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
if fname is None:
|
if fname is None:
|
||||||
return open(self.name.replace(' ','_')+(ext if ext.startswith('.') else '.'+ext), 'w', newline='\n')
|
return open(self.name.replace(' ','_')+suffix, 'w', newline='\n')
|
||||||
elif isinstance(fname, (str, Path)):
|
elif isinstance(fname, (str, Path)):
|
||||||
return open(fname, 'w', newline='\n')
|
return open(fname, 'w', newline='\n')
|
||||||
else:
|
else:
|
||||||
|
@ -308,7 +310,7 @@ class Colormap(mpl.colors.ListedColormap):
|
||||||
'RGBPoints':colors
|
'RGBPoints':colors
|
||||||
}]
|
}]
|
||||||
|
|
||||||
json.dump(out,self._get_file_handle(fname,'json'),indent=4)
|
json.dump(out,self._get_file_handle(fname,'.json'),indent=4)
|
||||||
|
|
||||||
|
|
||||||
def save_ASCII(self, fname: Union[TextIO, str, Path] = None):
|
def save_ASCII(self, fname: Union[TextIO, str, Path] = None):
|
||||||
|
@ -324,7 +326,7 @@ class Colormap(mpl.colors.ListedColormap):
|
||||||
"""
|
"""
|
||||||
labels = {'RGBA':4} if self.colors.shape[1] == 4 else {'RGB': 3}
|
labels = {'RGBA':4} if self.colors.shape[1] == 4 else {'RGB': 3}
|
||||||
t = Table(self.colors,labels,f'Creator: {util.execution_stamp("Colormap")}')
|
t = Table(self.colors,labels,f'Creator: {util.execution_stamp("Colormap")}')
|
||||||
t.save(self._get_file_handle(fname,'txt'))
|
t.save(self._get_file_handle(fname,'.txt'))
|
||||||
|
|
||||||
|
|
||||||
def save_GOM(self, fname: Union[TextIO, str, Path] = None):
|
def save_GOM(self, fname: Union[TextIO, str, Path] = None):
|
||||||
|
@ -345,7 +347,7 @@ class Colormap(mpl.colors.ListedColormap):
|
||||||
+ ' '.join([f' 0 {c[0]} {c[1]} {c[2]} 255 1' for c in reversed((self.colors*255).astype(int))]) \
|
+ ' '.join([f' 0 {c[0]} {c[1]} {c[2]} 255 1' for c in reversed((self.colors*255).astype(int))]) \
|
||||||
+ '\n'
|
+ '\n'
|
||||||
|
|
||||||
self._get_file_handle(fname,'legend').write(GOM_str)
|
self._get_file_handle(fname,'.legend').write(GOM_str)
|
||||||
|
|
||||||
|
|
||||||
def save_gmsh(self, fname: Union[TextIO, str, Path] = None):
|
def save_gmsh(self, fname: Union[TextIO, str, Path] = None):
|
||||||
|
@ -363,7 +365,7 @@ class Colormap(mpl.colors.ListedColormap):
|
||||||
gmsh_str = 'View.ColorTable = {\n' \
|
gmsh_str = 'View.ColorTable = {\n' \
|
||||||
+'\n'.join([f'{c[0]},{c[1]},{c[2]},' for c in self.colors[:,:3]*255]) \
|
+'\n'.join([f'{c[0]},{c[1]},{c[2]},' for c in self.colors[:,:3]*255]) \
|
||||||
+'\n}\n'
|
+'\n}\n'
|
||||||
self._get_file_handle(fname,'msh').write(gmsh_str)
|
self._get_file_handle(fname,'.msh').write(gmsh_str)
|
||||||
|
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
|
|
|
@ -77,12 +77,15 @@ class TestColormap:
|
||||||
# xyz2msh
|
# xyz2msh
|
||||||
assert np.allclose(Colormap._xyz2msh(xyz),msh,atol=1.e-6,rtol=0)
|
assert np.allclose(Colormap._xyz2msh(xyz),msh,atol=1.e-6,rtol=0)
|
||||||
|
|
||||||
|
def test_eq(self):
|
||||||
|
assert Colormap.from_predefined('strain') == Colormap.from_predefined('strain')
|
||||||
|
assert Colormap.from_predefined('strain') != Colormap.from_predefined('stress')
|
||||||
|
assert Colormap.from_predefined('strain',N=128) != Colormap.from_predefined('strain',N=64)
|
||||||
|
|
||||||
@pytest.mark.parametrize('low,high',[((0,0,0),(1,1,1)),
|
@pytest.mark.parametrize('low,high',[((0,0,0),(1,1,1)),
|
||||||
([0,0,0],[1,1,1])])
|
([0,0,0],[1,1,1])])
|
||||||
def test_from_range_types(self,low,high):
|
def test_from_range_types(self,low,high):
|
||||||
a = Colormap.from_range(low,high)
|
assert Colormap.from_range(low,high) == Colormap.from_range(np.array(low),np.array(high))
|
||||||
b = Colormap.from_range(np.array(low),np.array(high))
|
|
||||||
assert np.all(a.colors == b.colors)
|
|
||||||
|
|
||||||
@pytest.mark.parametrize('format',['ASCII','paraview','GOM','gmsh'])
|
@pytest.mark.parametrize('format',['ASCII','paraview','GOM','gmsh'])
|
||||||
@pytest.mark.parametrize('model',['rgb','hsv','hsl','xyz','lab','msh'])
|
@pytest.mark.parametrize('model',['rgb','hsv','hsl','xyz','lab','msh'])
|
||||||
|
|
Loading…
Reference in New Issue