From 2b9d416734743e87f0b6414d625dd47352cbde4e Mon Sep 17 00:00:00 2001 From: Martin Diehl Date: Thu, 2 Sep 2021 08:04:09 +0200 Subject: [PATCH] fixes for old VTK and/or old numpy --- .github/workflows/.github-actions-demo.yml | 4 +++- python/damask/_vtk.py | 4 ++-- python/tests/test_Grid.py | 2 ++ python/tests/test_Result.py | 28 ++++++++++++---------- python/tests/test_VTK.py | 7 ++++-- 5 files changed, 27 insertions(+), 18 deletions(-) diff --git a/.github/workflows/.github-actions-demo.yml b/.github/workflows/.github-actions-demo.yml index 00f6565ff..427953f7b 100644 --- a/.github/workflows/.github-actions-demo.yml +++ b/.github/workflows/.github-actions-demo.yml @@ -42,4 +42,6 @@ jobs: python3-h5py python3-vtk7 python3-matplotlib python3-yaml -y - name: Run unit tests run: | - PYTHONPATH=${PWD}/python python -m pytest python + export PYTHONPATH=${PWD}/python + export COLUMNS=256 + python -m pytest python diff --git a/python/damask/_vtk.py b/python/damask/_vtk.py index 7ca794f70..cbf70c37a 100644 --- a/python/damask/_vtk.py +++ b/python/damask/_vtk.py @@ -121,7 +121,7 @@ class VTK: """ vtk_nodes = vtk.vtkPoints() - vtk_nodes.SetData(np_to_vtk(nodes)) + vtk_nodes.SetData(np_to_vtk(np.ascontiguousarray(nodes))) cells = vtk.vtkCellArray() cells.SetNumberOfCells(connectivity.shape[0]) T = np.concatenate((np.ones((connectivity.shape[0],1),dtype=np.int64)*connectivity.shape[1], @@ -157,7 +157,7 @@ class VTK: """ N = points.shape[0] vtk_points = vtk.vtkPoints() - vtk_points.SetData(np_to_vtk(points)) + vtk_points.SetData(np_to_vtk(np.ascontiguousarray(points))) vtk_cells = vtk.vtkCellArray() vtk_cells.SetNumberOfCells(N) diff --git a/python/tests/test_Grid.py b/python/tests/test_Grid.py index 36d489939..3538e3dd8 100644 --- a/python/tests/test_Grid.py +++ b/python/tests/test_Grid.py @@ -1,5 +1,6 @@ import pytest import numpy as np +import vtk from damask import VTK from damask import Grid @@ -410,6 +411,7 @@ class TestGrid: @pytest.mark.parametrize('periodic',[True,False]) @pytest.mark.parametrize('direction',['x','y','z',['x','y'],'zy','xz',['x','y','z']]) + @pytest.mark.xfail(int(vtk.vtkVersion.GetVTKVersion().split('.')[0])<8, reason='missing METADATA') def test_get_grain_boundaries(self,update,ref_path,periodic,direction): grid = Grid.load(ref_path/'get_grain_boundaries_8g12x15x20.vti') current = grid.get_grain_boundaries(periodic,direction) diff --git a/python/tests/test_Result.py b/python/tests/test_Result.py index 6c06e8636..197a839de 100644 --- a/python/tests/test_Result.py +++ b/python/tests/test_Result.py @@ -18,6 +18,12 @@ from damask import tensor from damask import mechanics from damask import grid_filters +def vtk_hasXdmfReader(): + if hasattr(vtk,'vtkXdmfReader'): + r = vtk.vtkXdmfReader() + if hasattr(r,'getOutput'): return True + return False + @pytest.fixture def default(tmp_path,ref_path): """Small Result file in temp location for modification.""" @@ -374,6 +380,7 @@ class TestResult: @pytest.mark.parametrize('output',['F','*',['P'],['P','F']],ids=range(4)) @pytest.mark.parametrize('fname',['12grains6x7x8_tensionY.hdf5'],ids=range(1)) @pytest.mark.parametrize('inc',[4,0],ids=range(2)) + @pytest.mark.xfail(int(vtk.vtkVersion.GetVTKVersion().split('.')[0])<9, reason='missing "Direction" attribute') def test_vtk(self,request,tmp_path,ref_path,update,patch_execution_stamp,patch_datetime_now,output,fname,inc): result = Result(ref_path/fname).view('increments',inc) os.chdir(tmp_path) @@ -425,7 +432,7 @@ class TestResult: assert sorted(open(tmp_path/fname).read()) == sorted(open(ref_path/fname).read()) # XML is not ordered - @pytest.mark.skipif(not hasattr(vtk,'vtkXdmfReader'),reason='https://discourse.vtk.org/t/2450') + @pytest.mark.skipif(not vtk_hasXdmfReader(),reason='https://discourse.vtk.org/t/2450') def test_XDMF_shape(self,tmp_path,single_phase): os.chdir(tmp_path) @@ -437,19 +444,14 @@ class TestResult: dim_xdmf = reader_xdmf.GetOutput().GetDimensions() bounds_xdmf = reader_xdmf.GetOutput().GetBounds() - single_phase.view('increments',0).export_VTK() + single_phase.view('increments',0).export_VTK(parallel=False) fname = os.path.splitext(os.path.basename(single_phase.fname))[0]+'_inc00.vti' - for i in range(10): # waiting for parallel IO - reader_vti = vtk.vtkXMLImageDataReader() - reader_vti.SetFileName(fname) - reader_vti.Update() - dim_vti = reader_vti.GetOutput().GetDimensions() - bounds_vti = reader_vti.GetOutput().GetBounds() - if dim_vti == dim_xdmf and bounds_vti == bounds_xdmf: - return - time.sleep(.5) - - assert False + reader_vti = vtk.vtkXMLImageDataReader() + reader_vti.SetFileName(fname) + reader_vti.Update() + dim_vti = reader_vti.GetOutput().GetDimensions() + bounds_vti = reader_vti.GetOutput().GetBounds() + assert dim_vti == dim_xdmf and bounds_vti == bounds_xdmf def test_XDMF_invalid(self,default): with pytest.raises(TypeError): diff --git a/python/tests/test_VTK.py b/python/tests/test_VTK.py index d4606d5c1..26d1c4a53 100644 --- a/python/tests/test_VTK.py +++ b/python/tests/test_VTK.py @@ -5,6 +5,7 @@ import time import pytest import numpy as np import numpy.ma as ma +import vtk from damask import VTK from damask import grid_filters @@ -162,6 +163,7 @@ class TestVTK: new = VTK.load(tmp_path/'with_comments.vtr') assert new.get_comments() == ['this is a comment'] + @pytest.mark.xfail(int(vtk.vtkVersion.GetVTKVersion().split('.')[0])<8, reason='missing METADATA') def test_compare_reference_polyData(self,update,ref_path,tmp_path): points=np.dstack((np.linspace(0.,1.,10),np.linspace(0.,2.,10),np.linspace(-1.,1.,10))).squeeze() polyData = VTK.from_poly_data(points) @@ -173,14 +175,15 @@ class TestVTK: assert polyData.__repr__() == reference.__repr__() and \ np.allclose(polyData.get('coordinates'),points) + @pytest.mark.xfail(int(vtk.vtkVersion.GetVTKVersion().split('.')[0])<8, reason='missing METADATA') def test_compare_reference_rectilinearGrid(self,update,ref_path,tmp_path): cells = np.array([5,6,7],int) size = np.array([.6,1.,.5]) rectilinearGrid = VTK.from_rectilinear_grid(cells,size) c = grid_filters.coordinates0_point(cells,size).reshape(-1,3,order='F') n = grid_filters.coordinates0_node(cells,size).reshape(-1,3,order='F') - rectilinearGrid.add(c,'cell') - rectilinearGrid.add(n,'node') + rectilinearGrid.add(np.ascontiguousarray(c),'cell') + rectilinearGrid.add(np.ascontiguousarray(n),'node') if update: rectilinearGrid.save(ref_path/'rectilinearGrid') else: