better readable
- more explicit reporting - always relative import for DAMASK
This commit is contained in:
parent
b393da4955
commit
9d505c8518
|
@ -10,7 +10,7 @@ import matplotlib.pyplot as plt
|
||||||
from matplotlib import cm
|
from matplotlib import cm
|
||||||
from PIL import Image
|
from PIL import Image
|
||||||
|
|
||||||
import damask
|
from . import util
|
||||||
from . import Table
|
from . import Table
|
||||||
|
|
||||||
_eps = 216./24389.
|
_eps = 216./24389.
|
||||||
|
@ -280,7 +280,7 @@ class Colormap(mpl.colors.ListedColormap):
|
||||||
colors+=[i]+c
|
colors+=[i]+c
|
||||||
|
|
||||||
out = [{
|
out = [{
|
||||||
'Creator':f'damask.Colormap v{damask.version}',
|
'Creator':util.version_date('Colormap'),
|
||||||
'ColorSpace':'RGB',
|
'ColorSpace':'RGB',
|
||||||
'Name':colormap.name,
|
'Name':colormap.name,
|
||||||
'DefaultMap':True,
|
'DefaultMap':True,
|
||||||
|
@ -296,7 +296,7 @@ class Colormap(mpl.colors.ListedColormap):
|
||||||
def _export_ASCII(colormap,fhandle=None):
|
def _export_ASCII(colormap,fhandle=None):
|
||||||
"""Write colormap to ASCII table."""
|
"""Write colormap to ASCII table."""
|
||||||
labels = {'RGBA':4} if colormap.colors.shape[1] == 4 else {'RGB': 3}
|
labels = {'RGBA':4} if colormap.colors.shape[1] == 4 else {'RGB': 3}
|
||||||
t = Table(colormap.colors,labels,f'Creator: damask.Colormap v{damask.version}')
|
t = Table(colormap.colors,labels,f'Creator: {util.version_date("Colormap")}')
|
||||||
|
|
||||||
if fhandle is None:
|
if fhandle is None:
|
||||||
with open(colormap.name.replace(' ','_')+'.txt', 'w') as f:
|
with open(colormap.name.replace(' ','_')+'.txt', 'w') as f:
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
import sys
|
import sys
|
||||||
import copy
|
import copy
|
||||||
import inspect
|
|
||||||
import multiprocessing
|
import multiprocessing
|
||||||
from io import StringIO
|
from io import StringIO
|
||||||
from functools import partial
|
from functools import partial
|
||||||
|
@ -399,7 +398,7 @@ class Geom:
|
||||||
else:
|
else:
|
||||||
microstructure = microstructure.reshape(grid)
|
microstructure = microstructure.reshape(grid)
|
||||||
|
|
||||||
creator = util.edit_info('damask.Geom.'+inspect.stack()[0][3])
|
creator = util.version_date('Geom','from_Laguerre_tessellation')
|
||||||
return Geom(microstructure+1,size,homogenization=1,comments=creator)
|
return Geom(microstructure+1,size,homogenization=1,comments=creator)
|
||||||
|
|
||||||
|
|
||||||
|
@ -424,7 +423,7 @@ class Geom:
|
||||||
KDTree = spatial.cKDTree(seeds,boxsize=size) if periodic else spatial.cKDTree(seeds)
|
KDTree = spatial.cKDTree(seeds,boxsize=size) if periodic else spatial.cKDTree(seeds)
|
||||||
devNull,microstructure = KDTree.query(coords)
|
devNull,microstructure = KDTree.query(coords)
|
||||||
|
|
||||||
creator = util.edit_info('damask.Geom.'+inspect.stack()[0][3])
|
creator = util.version_date('Geom','from_Voronoi_tessellation')
|
||||||
return Geom(microstructure.reshape(grid)+1,size,homogenization=1,comments=creator)
|
return Geom(microstructure.reshape(grid)+1,size,homogenization=1,comments=creator)
|
||||||
|
|
||||||
|
|
||||||
|
@ -576,7 +575,7 @@ class Geom:
|
||||||
fill_ = np.full_like(self.microstructure,np.nanmax(self.microstructure)+1 if fill is None else fill)
|
fill_ = np.full_like(self.microstructure,np.nanmax(self.microstructure)+1 if fill is None else fill)
|
||||||
ms = np.ma.MaskedArray(fill_,np.logical_not(mask) if inverse else mask)
|
ms = np.ma.MaskedArray(fill_,np.logical_not(mask) if inverse else mask)
|
||||||
|
|
||||||
self.add_comments(util.edit_info('damask.Geom.'+inspect.stack()[0][3]))
|
self.add_comments(util.version_date('Geom','add_primitive'))
|
||||||
return self.update(ms)
|
return self.update(ms)
|
||||||
|
|
||||||
|
|
||||||
|
@ -607,7 +606,7 @@ class Geom:
|
||||||
if 'x' in directions:
|
if 'x' in directions:
|
||||||
ms = np.concatenate([ms,ms[limits[0]:limits[1]:-1,:,:]],0)
|
ms = np.concatenate([ms,ms[limits[0]:limits[1]:-1,:,:]],0)
|
||||||
|
|
||||||
self.add_comments(util.edit_info('damask.Geom.'+inspect.stack()[0][3]))
|
self.add_comments(util.version_date('Geom','mirror'))
|
||||||
return self.update(ms,rescale=True)
|
return self.update(ms,rescale=True)
|
||||||
|
|
||||||
|
|
||||||
|
@ -623,7 +622,7 @@ class Geom:
|
||||||
Assume geometry to be periodic. Defaults to True.
|
Assume geometry to be periodic. Defaults to True.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
self.add_comments(util.edit_info('damask.Geom.'+inspect.stack()[0][3]))
|
self.add_comments(util.version_date('Geom','scale'))
|
||||||
return self.update(
|
return self.update(
|
||||||
ndimage.interpolation.zoom(
|
ndimage.interpolation.zoom(
|
||||||
self.microstructure,
|
self.microstructure,
|
||||||
|
@ -658,7 +657,7 @@ class Geom:
|
||||||
else:
|
else:
|
||||||
return me
|
return me
|
||||||
|
|
||||||
self.add_comments(util.edit_info('damask.Geom.'+inspect.stack()[0][3]))
|
self.add_comments(util.version_date('Geom','clean'))
|
||||||
return self.update(ndimage.filters.generic_filter(
|
return self.update(ndimage.filters.generic_filter(
|
||||||
self.microstructure,
|
self.microstructure,
|
||||||
mostFrequent,
|
mostFrequent,
|
||||||
|
@ -675,7 +674,7 @@ class Geom:
|
||||||
for i, oldID in enumerate(np.unique(self.microstructure)):
|
for i, oldID in enumerate(np.unique(self.microstructure)):
|
||||||
renumbered = np.where(self.microstructure == oldID, i+1, renumbered)
|
renumbered = np.where(self.microstructure == oldID, i+1, renumbered)
|
||||||
|
|
||||||
self.add_comments(util.edit_info('damask.Geom.'+inspect.stack()[0][3]))
|
self.add_comments(util.version_date('Geom','renumber'))
|
||||||
return self.update(renumbered)
|
return self.update(renumbered)
|
||||||
|
|
||||||
|
|
||||||
|
@ -710,7 +709,7 @@ class Geom:
|
||||||
|
|
||||||
origin = self.origin-(np.asarray(microstructure_in.shape)-self.grid)*.5 * self.size/self.grid
|
origin = self.origin-(np.asarray(microstructure_in.shape)-self.grid)*.5 * self.size/self.grid
|
||||||
|
|
||||||
self.add_comments(util.edit_info('damask.Geom.'+inspect.stack()[0][3]))
|
self.add_comments(util.version_date('Geom','rotate'))
|
||||||
return self.update(microstructure_in,origin=origin,rescale=True)
|
return self.update(microstructure_in,origin=origin,rescale=True)
|
||||||
|
|
||||||
|
|
||||||
|
@ -743,7 +742,7 @@ class Geom:
|
||||||
|
|
||||||
canvas[ll[0]:ur[0],ll[1]:ur[1],ll[2]:ur[2]] = self.microstructure[LL[0]:UR[0],LL[1]:UR[1],LL[2]:UR[2]]
|
canvas[ll[0]:ur[0],ll[1]:ur[1],ll[2]:ur[2]] = self.microstructure[LL[0]:UR[0],LL[1]:UR[1],LL[2]:UR[2]]
|
||||||
|
|
||||||
self.add_comments(util.edit_info('damask.Geom.'+inspect.stack()[0][3]))
|
self.add_comments(util.version_date('Geom','canvas'))
|
||||||
return self.update(canvas,origin=self.origin+offset*self.size/self.grid,rescale=True)
|
return self.update(canvas,origin=self.origin+offset*self.size/self.grid,rescale=True)
|
||||||
|
|
||||||
|
|
||||||
|
@ -763,7 +762,7 @@ class Geom:
|
||||||
for from_ms,to_ms in zip(from_microstructure,to_microstructure):
|
for from_ms,to_ms in zip(from_microstructure,to_microstructure):
|
||||||
substituted[self.microstructure==from_ms] = to_ms
|
substituted[self.microstructure==from_ms] = to_ms
|
||||||
|
|
||||||
self.add_comments(util.edit_info('damask.Geom.'+inspect.stack()[0][3]))
|
self.add_comments(util.version_date('Geom','substitute'))
|
||||||
return self.update(substituted)
|
return self.update(substituted)
|
||||||
|
|
||||||
|
|
||||||
|
@ -809,5 +808,5 @@ class Geom:
|
||||||
extra_keywords={'trigger':trigger})
|
extra_keywords={'trigger':trigger})
|
||||||
microstructure = np.ma.MaskedArray(self.microstructure + offset_, np.logical_not(mask))
|
microstructure = np.ma.MaskedArray(self.microstructure + offset_, np.logical_not(mask))
|
||||||
|
|
||||||
self.add_comments(util.edit_info('damask.Geom.'+inspect.stack()[0][3]))
|
self.add_comments(util.version_date('Geom','vicinity_offset'))
|
||||||
return self.update(microstructure)
|
return self.update(microstructure)
|
||||||
|
|
|
@ -8,7 +8,8 @@ from vtk.util.numpy_support import numpy_to_vtk as np_to_vtk
|
||||||
from vtk.util.numpy_support import numpy_to_vtkIdTypeArray as np_to_vtkIdTypeArray
|
from vtk.util.numpy_support import numpy_to_vtkIdTypeArray as np_to_vtkIdTypeArray
|
||||||
from vtk.util.numpy_support import vtk_to_numpy as vtk_to_np
|
from vtk.util.numpy_support import vtk_to_numpy as vtk_to_np
|
||||||
|
|
||||||
import damask
|
from . import util
|
||||||
|
from . import environment
|
||||||
from . import Table
|
from . import Table
|
||||||
|
|
||||||
|
|
||||||
|
@ -314,7 +315,7 @@ class VTK:
|
||||||
def __repr__(self):
|
def __repr__(self):
|
||||||
"""ASCII representation of the VTK data."""
|
"""ASCII representation of the VTK data."""
|
||||||
writer = vtk.vtkDataSetWriter()
|
writer = vtk.vtkDataSetWriter()
|
||||||
writer.SetHeader(f'# damask.VTK v{damask.version}')
|
writer.SetHeader(f'# {util.version_date("VTK")}')
|
||||||
writer.WriteToOutputStringOn()
|
writer.WriteToOutputStringOn()
|
||||||
writer.SetInputData(self.geom)
|
writer.SetInputData(self.geom)
|
||||||
writer.Write()
|
writer.Write()
|
||||||
|
@ -340,7 +341,7 @@ class VTK:
|
||||||
ren.AddActor(actor)
|
ren.AddActor(actor)
|
||||||
ren.SetBackground(0.2,0.2,0.2)
|
ren.SetBackground(0.2,0.2,0.2)
|
||||||
|
|
||||||
window.SetSize(damask.environment.screen_size[0],damask.environment.screen_size[1])
|
window.SetSize(environment.screen_size[0],environment.screen_size[1])
|
||||||
|
|
||||||
iren = vtk.vtkRenderWindowInteractor()
|
iren = vtk.vtkRenderWindowInteractor()
|
||||||
iren.SetRenderWindow(window)
|
iren.SetRenderWindow(window)
|
||||||
|
|
|
@ -3,12 +3,12 @@ import shlex
|
||||||
import string
|
import string
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
|
|
||||||
import damask
|
from .. import environment
|
||||||
|
|
||||||
class Marc:
|
class Marc:
|
||||||
"""Wrapper to run DAMASK with MSCMarc."""
|
"""Wrapper to run DAMASK with MSCMarc."""
|
||||||
|
|
||||||
def __init__(self,version=damask.environment.options['MARC_VERSION']):
|
def __init__(self,version=environment.options['MARC_VERSION']):
|
||||||
"""
|
"""
|
||||||
Create a Marc solver object.
|
Create a Marc solver object.
|
||||||
|
|
||||||
|
@ -24,7 +24,7 @@ class Marc:
|
||||||
@property
|
@property
|
||||||
def library_path(self):
|
def library_path(self):
|
||||||
|
|
||||||
path_MSC = damask.environment.options['MSC_ROOT']
|
path_MSC = environment.options['MSC_ROOT']
|
||||||
path_lib = Path(f'{path_MSC}/mentat{self.version}/shlib/linux64')
|
path_lib = Path(f'{path_MSC}/mentat{self.version}/shlib/linux64')
|
||||||
|
|
||||||
return path_lib if path_lib.is_dir() else None
|
return path_lib if path_lib.is_dir() else None
|
||||||
|
@ -33,7 +33,7 @@ class Marc:
|
||||||
@property
|
@property
|
||||||
def tools_path(self):
|
def tools_path(self):
|
||||||
|
|
||||||
path_MSC = damask.environment.options['MSC_ROOT']
|
path_MSC = environment.options['MSC_ROOT']
|
||||||
path_tools = Path(f'{path_MSC}/marc{self.version}/tools')
|
path_tools = Path(f'{path_MSC}/marc{self.version}/tools')
|
||||||
|
|
||||||
return path_tools if path_tools.is_dir() else None
|
return path_tools if path_tools.is_dir() else None
|
||||||
|
@ -49,7 +49,7 @@ class Marc:
|
||||||
):
|
):
|
||||||
|
|
||||||
|
|
||||||
usersub = damask.environment.root_dir/'src/DAMASK_marc'
|
usersub = environment.root_dir/'src/DAMASK_marc'
|
||||||
usersub = usersub.parent/(usersub.name + ('.f90' if compile else '.marc'))
|
usersub = usersub.parent/(usersub.name + ('.f90' if compile else '.marc'))
|
||||||
if not usersub.is_file():
|
if not usersub.is_file():
|
||||||
raise FileNotFoundError("DAMASK4Marc ({}) '{}' not found".format(('source' if compile else 'binary'),usersub))
|
raise FileNotFoundError("DAMASK4Marc ({}) '{}' not found".format(('source' if compile else 'binary'),usersub))
|
||||||
|
|
|
@ -9,7 +9,7 @@ from optparse import Option
|
||||||
|
|
||||||
import numpy as np
|
import numpy as np
|
||||||
|
|
||||||
import damask
|
from . import version
|
||||||
|
|
||||||
# limit visibility
|
# limit visibility
|
||||||
__all__=[
|
__all__=[
|
||||||
|
@ -22,7 +22,7 @@ __all__=[
|
||||||
'scale_to_coprime',
|
'scale_to_coprime',
|
||||||
'return_message',
|
'return_message',
|
||||||
'extendableOption',
|
'extendableOption',
|
||||||
'edit_info'
|
'version_date'
|
||||||
]
|
]
|
||||||
|
|
||||||
####################################################################################################
|
####################################################################################################
|
||||||
|
@ -178,9 +178,11 @@ def scale_to_coprime(v):
|
||||||
return m
|
return m
|
||||||
|
|
||||||
|
|
||||||
def edit_info(who):
|
def version_date(class_name,function_name=None):
|
||||||
|
"""tbd."""
|
||||||
|
_function_name = '' if function_name is None else f'.{function_name}'
|
||||||
now = datetime.datetime.now().astimezone().strftime('%Y-%m-%d %H:%M:%S%z')
|
now = datetime.datetime.now().astimezone().strftime('%Y-%m-%d %H:%M:%S%z')
|
||||||
return f'{who} v{damask.version} ({now})'
|
return f'damask.{class_name}{_function_name} v{version} ({now})'
|
||||||
|
|
||||||
|
|
||||||
####################################################################################################
|
####################################################################################################
|
||||||
|
|
|
@ -25,6 +25,15 @@ def patch_datetime_now(monkeypatch):
|
||||||
|
|
||||||
monkeypatch.setattr(datetime, 'datetime', mydatetime)
|
monkeypatch.setattr(datetime, 'datetime', mydatetime)
|
||||||
|
|
||||||
|
@pytest.fixture
|
||||||
|
def version_date(monkeypatch):
|
||||||
|
"""Set damask.util.version_date for reproducible tests results."""
|
||||||
|
def version_date(class_name,function_name=None):
|
||||||
|
_function_name = '' if function_name is None else f'.{function_name}'
|
||||||
|
return f'damask.{class_name}{_function_name} v{patched_version} ({patched_date})'
|
||||||
|
|
||||||
|
monkeypatch.setattr(damask.util, 'version_date', version_date)
|
||||||
|
|
||||||
|
|
||||||
def pytest_addoption(parser):
|
def pytest_addoption(parser):
|
||||||
parser.addoption("--update",
|
parser.addoption("--update",
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
[
|
[
|
||||||
{
|
{
|
||||||
"Creator": "damask.Colormap v99.99.99-9999-pytest",
|
"Creator": "damask.Colormap v99.99.99-9999-pytest (2019-11-02 11:58:00)",
|
||||||
"ColorSpace": "RGB",
|
"ColorSpace": "RGB",
|
||||||
"Name": "binary",
|
"Name": "binary",
|
||||||
"DefaultMap": true,
|
"DefaultMap": true,
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
# Creator: damask.Colormap v99.99.99-9999-pytest
|
# Creator: damask.Colormap v99.99.99-9999-pytest (2019-11-02 11:58:00)
|
||||||
1_RGBA 2_RGBA 3_RGBA 4_RGBA
|
1_RGBA 2_RGBA 3_RGBA 4_RGBA
|
||||||
1.0 1.0 1.0 1.0
|
1.0 1.0 1.0 1.0
|
||||||
0.996078431372549 0.996078431372549 0.996078431372549 1.0
|
0.996078431372549 0.996078431372549 0.996078431372549 1.0
|
||||||
|
|
|
@ -17,8 +17,8 @@ def reference_dir(reference_dir_base):
|
||||||
class TestColormap:
|
class TestColormap:
|
||||||
|
|
||||||
@pytest.fixture(autouse=True)
|
@pytest.fixture(autouse=True)
|
||||||
def _patch_damask_version(self, patch_damask_version):
|
def _version_date(self, version_date):
|
||||||
print('patched damask.version')
|
print('patched damask.util.version_date')
|
||||||
|
|
||||||
def test_conversion(self):
|
def test_conversion(self):
|
||||||
specials = np.array([[0.,0.,0.],
|
specials = np.array([[0.,0.,0.],
|
||||||
|
|
|
@ -4,6 +4,7 @@ from itertools import permutations
|
||||||
import pytest
|
import pytest
|
||||||
import numpy as np
|
import numpy as np
|
||||||
|
|
||||||
|
from damask import Table
|
||||||
from damask import Rotation
|
from damask import Rotation
|
||||||
from damask import Orientation
|
from damask import Orientation
|
||||||
from damask import Lattice
|
from damask import Lattice
|
||||||
|
@ -103,10 +104,10 @@ class TestOrientation:
|
||||||
eu = np.array([o.rotation.as_Eulers(degrees=True) for o in ori.related(model)])
|
eu = np.array([o.rotation.as_Eulers(degrees=True) for o in ori.related(model)])
|
||||||
if update:
|
if update:
|
||||||
coords = np.array([(1,i+1) for i,x in enumerate(eu)])
|
coords = np.array([(1,i+1) for i,x in enumerate(eu)])
|
||||||
table = damask.Table(eu,{'Eulers':(3,)})
|
table = Table(eu,{'Eulers':(3,)})
|
||||||
table.add('pos',coords)
|
table.add('pos',coords)
|
||||||
table.to_ASCII(reference)
|
table.to_ASCII(reference)
|
||||||
assert np.allclose(eu,damask.Table.from_ASCII(reference).get('Eulers'))
|
assert np.allclose(eu,Table.from_ASCII(reference).get('Eulers'))
|
||||||
|
|
||||||
@pytest.mark.parametrize('lattice',Lattice.lattices)
|
@pytest.mark.parametrize('lattice',Lattice.lattices)
|
||||||
def test_disorientation360(self,lattice):
|
def test_disorientation360(self,lattice):
|
||||||
|
|
Loading…
Reference in New Issue