source: anuga_core/source_numpy_conversion/anuga/load_mesh/test_loadASCII.py @ 5951

Last change on this file since 5951 was 5951, checked in by rwilson, 15 years ago

More NumPy? changes.

File size: 23.0 KB
Line 
1#!/usr/bin/env python
2#
3
4import tempfile
5import unittest
6
7import os
8import tempfile
9
10from os.path import splitext
11
12import numpy
13
14from anuga.load_mesh.loadASCII import *
15from anuga.coordinate_transforms.geo_reference import Geo_reference
16import loadASCII
17
18class loadASCIITestCase(unittest.TestCase):
19    def setUp(self):
20        self.dict ={}
21        self.dict['outline_segments'] = [(0, 1), (1, 2), (0, 2), (0, 3)]
22        self.dict['outline_segment_tags'] = ['50', '40', '30', '20']
23        self.dict['holes'] = [(0.2, 0.6)]
24        self.dict['point_attributes'] = [[5, 2], [4, 2], [3, 2], [2,2]]
25        self.dict['regions'] = [(0.3, 0.3),(0.3, 0.4)]
26        self.dict['region_tags'] = ['1.3', 'yeah']
27        self.dict['region_max_areas'] = [36.0,-7.1]
28        self.dict['points'] = [(0.0, 0.0), (0.0, 4.0), (4.0, 0.0), (1.0, 1.0)]
29        self.dict['vertices'] = [(0.0, 0.0), (0.0, 4.0),
30                                 (4.0, 0.0), (1.0, 1.0), (2.0, 2.0)]
31        self.dict['triangles'] = [(3, 2, 4), (1, 0, 3),
32                                             (3, 4,1), (2, 3, 0)]
33        self.dict['segments'] = [(0, 1), (1, 4), (2, 0),
34                                            (0, 3), (4, 2)]
35        self.dict['triangle_tags'] = ['1.3', '1.3',
36                                      '1.3', '1.3']
37        self.dict['vertex_attributes'] = [[1.2,2.], [1.2,2.],
38                                          [1.2,2.], [1.2,2.], [1.2,3.]]
39        self.dict['triangle_neighbors'] = [[-1, 2, 3], [3, 2, -1],
40                                           [-1, 1, 0], [1, -1, 0]]
41        self.dict['segment_tags'] = ['50', '40', '30', '20', '40']
42        self.dict['vertex_attribute_titles'] = ['bed elevation', 'height']
43        self.dict['geo_reference'] = Geo_reference(56,1.9,1.9)
44       
45        self.sparse_dict ={}
46        self.sparse_dict['outline_segments'] = []
47        self.sparse_dict['outline_segment_tags'] = []
48        self.sparse_dict['holes'] = []
49        self.sparse_dict['points'] = [(0.0, 0.0),(9,8)]
50        self.sparse_dict['point_attributes'] = [[],[]] # points don't have to have
51                                                    # attributes
52        self.sparse_dict['regions'] = []
53        self.sparse_dict['region_tags'] = []
54        self.sparse_dict['region_max_areas'] = []
55
56        self.sparse_dict['vertices'] = []
57        self.sparse_dict['triangles'] = []
58        self.sparse_dict['segments'] = []
59        self.sparse_dict['triangle_tags'] = []
60        self.sparse_dict['vertex_attributes'] = []
61        self.sparse_dict['triangle_neighbors'] = []
62        self.sparse_dict['segment_tags'] = []
63        self.sparse_dict['vertex_attribute_titles'] = []
64       
65        self.blank_dict ={}
66        self.blank_dict['outline_segments'] = []
67        self.blank_dict['outline_segment_tags'] = []
68        self.blank_dict['holes'] = []
69        self.blank_dict['points'] = []
70        self.blank_dict['point_attributes'] = [] 
71        self.blank_dict['regions'] = []
72        self.blank_dict['region_tags'] = []
73        self.blank_dict['region_max_areas'] = []
74        self.blank_dict['vertices'] = []
75        self.blank_dict['triangles'] = []
76        self.blank_dict['segments'] = []
77        self.blank_dict['triangle_tags'] = []
78        self.blank_dict['vertex_attributes'] = []
79        self.blank_dict['triangle_neighbors'] = []
80        self.blank_dict['segment_tags'] = []
81        self.blank_dict['vertex_attribute_titles'] = []
82       
83        self.tri_dict ={}
84        self.tri_dict['outline_segments'] = [[0,1]]
85        self.tri_dict['outline_segment_tags'] = ['']
86        self.tri_dict['holes'] = []
87        self.tri_dict['points'] = [(9,8),(7,8)]
88        self.tri_dict['point_attributes'] = [[],[]] 
89        self.tri_dict['regions'] = []
90        self.tri_dict['region_tags'] = []
91        self.tri_dict['region_max_areas'] = []
92        self.tri_dict['vertices'] = [[9,8],[7,8], [4,5]]
93        self.tri_dict['triangles'] = [[0,1,2]]
94        self.tri_dict['segments'] = [[0,1]]
95        self.tri_dict['triangle_tags'] = ['']
96        self.tri_dict['vertex_attributes'] = None
97        self.tri_dict['triangle_neighbors'] = [[0,0,0]]
98        self.tri_dict['segment_tags'] = ['']
99        self.tri_dict['vertex_attribute_titles'] = []
100       
101        self.seg_dict ={}
102        self.seg_dict['outline_segments'] = [[0,1]]
103        self.seg_dict['outline_segment_tags'] = ['']
104        self.seg_dict['holes'] = []
105        self.seg_dict['points'] = [(9,8),(7,8)]
106        self.seg_dict['point_attributes'] = [[],[]] 
107        self.seg_dict['regions'] = [(5,4)]
108        self.seg_dict['region_tags'] = [''] 
109        self.seg_dict['region_max_areas'] = [-999]
110        self.seg_dict['vertices'] = [(9,8),(7,8)]
111        self.seg_dict['triangles'] = []
112        self.seg_dict['segments'] = [[0,1]]
113        self.seg_dict['triangle_tags'] = []
114        self.seg_dict['vertex_attributes'] = None
115        self.seg_dict['triangle_neighbors'] = []
116        self.seg_dict['segment_tags'] = ['']
117        self.seg_dict['vertex_attribute_titles'] = []
118       
119        self.reg_dict ={}
120        self.reg_dict['outline_segments'] = [[0,1]]
121        self.reg_dict['outline_segment_tags'] = ['']
122        self.reg_dict['holes'] = []
123        self.reg_dict['points'] = [(9,8),(7,8)]
124        self.reg_dict['point_attributes'] = [[],[]] 
125        self.reg_dict['regions'] = [(5,4)]
126        self.reg_dict['region_tags'] = ['']
127        self.reg_dict['region_max_areas'] = []
128        self.reg_dict['vertices'] = [(9,8),(7,8)]
129        self.reg_dict['triangles'] = []
130        self.reg_dict['segments'] = [[0,1]]
131        self.reg_dict['triangle_tags'] = []
132        self.reg_dict['vertex_attributes'] = [[],[]]
133        self.reg_dict['triangle_neighbors'] = []
134        self.reg_dict['segment_tags'] = ['']
135        self.reg_dict['vertex_attribute_titles'] = []
136       
137        self.triangle_tags_dict ={}
138        self.triangle_tags_dict['outline_segments'] = [(0, 1), (1, 2), (0, 2), (0, 3)]
139        self.triangle_tags_dict['outline_segment_tags'] = ['50', '40', '30', '20']
140        self.triangle_tags_dict['holes'] = [(0.2, 0.6)]
141        self.triangle_tags_dict['point_attributes'] = [[5, 2], [4, 2], [3, 2], [2,2]]
142        self.triangle_tags_dict['regions'] = [(0.3, 0.3),(0.3, 0.4)]
143        self.triangle_tags_dict['region_tags'] = ['1.3', 'yeah']
144        self.triangle_tags_dict['region_max_areas'] = [36.0,-7.1]
145        self.triangle_tags_dict['points'] = [(0.0, 0.0), (0.0, 4.0), (4.0, 0.0), (1.0, 1.0)]
146        self.triangle_tags_dict['vertices'] = [(0.0, 0.0), (0.0, 4.0),
147                                 (4.0, 0.0), (1.0, 1.0), (2.0, 2.0)]
148        self.triangle_tags_dict['triangles'] = [(3, 2, 4), (1, 0, 3),
149                                             (3, 4,1), (2, 3, 0)]
150        self.triangle_tags_dict['segments'] = [(0, 1), (1, 4), (2, 0),
151                                            (0, 3), (4, 2)]
152        self.triangle_tags_dict['triangle_tags'] = ['yeah', '1.3',
153                                      '1.3', '']
154        self.triangle_tags_dict['vertex_attributes'] = [[1.2,2.], [1.2,2.],
155                                          [1.2,2.], [1.2,2.], [1.2,3.]]
156        self.triangle_tags_dict['triangle_neighbors'] = [[-1, 2, 3], [3, 2, -1],
157                                           [-1, 1, 0], [1, -1, 0]]
158        self.triangle_tags_dict['segment_tags'] = ['50', '40', '30', '20', '40']
159        self.triangle_tags_dict['vertex_attribute_titles'] = ['bed elevation', 'height']
160        self.triangle_tags_dict['geo_reference'] = Geo_reference(56,1.9,1.9)
161       
162    def tearDown(self):
163        pass
164
165  ############### .TSH ##########     
166    def test_export_mesh_file(self):
167        import os
168        import tempfile
169       
170        meshDict = self.dict
171        fileName = tempfile.mktemp(".tsh")
172        export_mesh_file(fileName, meshDict)
173        loadedDict = import_mesh_file(fileName)
174       
175        #print "*(*( meshDict"
176        #print meshDict
177        #print "*(*(  loadedDcit"
178        #print loadedDict
179        #print "*(*("
180       
181        self.failUnless(numpy.alltrue(numpy.array(meshDict['vertices'])  ==
182                                      numpy.array(loadedDict['vertices'])
183                                     ),
184                        'test_export_mesh_file failed. Test 1')
185        self.failUnless(numpy.alltrue(numpy.array(meshDict['triangles'])  ==
186                                      numpy.array(loadedDict['triangles'])),
187                        'test_export_mesh_file failed. Test 2')
188        self.failUnless(numpy.alltrue(numpy.array(meshDict['segments'])  ==
189                                      numpy.array(loadedDict['segments'])
190                                     ),
191                        'test_export_mesh_file failed. Test 3')
192        self.failUnless(numpy.alltrue(numpy.array(meshDict['triangle_tags'])  ==
193                                      numpy.array(loadedDict['triangle_tags'])
194                                     ),
195                         'test_export_mesh_file failed. Test 4')
196       
197        self.failUnless(meshDict['vertex_attributes']  ==
198                        loadedDict['vertex_attributes'],
199                        'test_export_mesh_file failed. Test 5')
200        self.failUnless(numpy.alltrue(numpy.array(meshDict['triangle_neighbors'])  ==
201                                      numpy.array(loadedDict['triangle_neighbors'])
202                                     ),
203                        'test_export_mesh_file failed. Test 6')
204        self.failUnless(numpy.alltrue(numpy.array(meshDict['segment_tags'])  ==
205                                      numpy.array(loadedDict['segment_tags'])
206                                     ),
207                        'test_export_mesh_file failed. Test 7')
208        self.failUnless(numpy.alltrue(numpy.array(meshDict['vertex_attribute_titles'])  ==
209                                      numpy.array(loadedDict['vertex_attribute_titles'])
210                                     ),
211                        'test_export_mesh_file failed. Test 8')
212        self.failUnless(numpy.alltrue(numpy.array(meshDict['geo_reference'])  ==
213                                      numpy.array(loadedDict['geo_reference'])
214                                     ),
215                        'test_export_mesh_file failed. Test 9')
216           
217        os.remove(fileName)
218 
219    def test_read_write_tsh_file(self):
220        dict = self.dict.copy()
221        fileName = tempfile.mktemp(".tsh")
222        export_mesh_file(fileName,dict)
223        loaded_dict = import_mesh_file(fileName)
224        os.remove(fileName)
225        dict = self.dict
226        #print "*********************"
227        #print dict
228        #print "**loaded_dict*******************"
229        #print loaded_dict
230        #print "*********************"       
231        self.check_mesh_dicts(loaded_dict,dict, 'test_read_write_msh_file')
232       
233    def test_read_write_tsh_fileII(self):
234        dict = self.sparse_dict.copy()
235        fileName = tempfile.mktemp(".tsh")
236        export_mesh_file(fileName,dict)
237        loaded_dict = import_mesh_file(fileName)
238        dict = self.sparse_dict   
239        self.check_mesh_dicts(loaded_dict,dict, 'test_read_write_msh_file')
240        os.remove(fileName)
241       
242    def test_read_write_tsh_fileIII(self):
243        dict = self.blank_dict.copy()
244        fileName = tempfile.mktemp(".tsh")
245        export_mesh_file(fileName,dict)
246        loaded_dict = import_mesh_file(fileName)
247        os.remove(fileName)
248        dict = self.blank_dict
249        #print "*********************"
250        #print dict
251        #print "**loaded_dict*******************"
252        #print loaded_dict
253        #print "*********************"       
254        self.check_mesh_dicts(loaded_dict,dict, 'test_read_write_msh_fileIII')
255
256    def test_read_write_tsh_file4(self):
257        dict = self.seg_dict.copy()
258        fileName = tempfile.mktemp(".tsh")
259        export_mesh_file(fileName,dict)
260        loaded_dict = import_mesh_file(fileName)
261        os.remove(fileName)
262        dict = self.seg_dict   
263        self.check_mesh_dicts(loaded_dict,dict, 'test_read_write_msh_file4')
264
265    def test_read_write_tsh_file5(self):
266        dict = self.triangle_tags_dict.copy()
267        fileName = tempfile.mktemp(".tsh")
268        export_mesh_file(fileName,dict)
269        loaded_dict = import_mesh_file(fileName)
270        dict = self.triangle_tags_dict
271        #print "*********************"
272        #print dict
273        #print "**loaded_dict*******************"
274        #print loaded_dict
275        #print "*********************"       
276        self.check_mesh_dicts(loaded_dict,dict, 'test_read_write_msh_file5') 
277        os.remove(fileName)
278
279    def test_read_write_tsh_file6(self):
280        dict = self.tri_dict.copy()
281        fileName = tempfile.mktemp(".tsh")
282        export_mesh_file(fileName,dict)
283        loaded_dict = import_mesh_file(fileName)
284        dict = self.tri_dict
285        self.check_mesh_dicts(loaded_dict,dict, 'test_read_write_msh_file6') 
286        os.remove(fileName)
287       
288########################## BAD .TSH ##########################
289
290    def test_load_bad_no_file_tsh(self):
291        import os
292        import tempfile
293       
294        fileName = tempfile.mktemp(".tsh")
295        #print fileName
296        try:
297            dict = import_mesh_file(fileName)
298        except IOError:
299            pass
300        else:
301            self.failUnless(0 ==1,
302                        'imaginary file did not raise error!')
303         
304    def test_read_write_tsh_file_bad(self):
305        dict = self.tri_dict.copy()
306        fileName = tempfile.mktemp(".xxx")
307        try:
308            export_mesh_file(fileName,dict)
309        except IOError:
310            pass
311        else:
312            self.failUnless(0 ==1,
313                        'bad tsh file did not raise error!')       
314       
315    def test_import_tsh_bad(self):
316        import os
317        import tempfile
318       
319        fileName = tempfile.mktemp(".tsh")
320        file = open(fileName,"w")
321        #   this is  a bad tsh file
322        file.write("elevn\n\
3231.0 what \n\
3240.0 the \n\
3251.0 !!! \n")
326        file.close()
327        #print fileName
328        try:
329            dict = import_mesh_file(fileName)
330        except IOError:
331            pass
332        else:
333            self.failUnless(0 ==1,
334                        'bad tsh file did not raise error!')       
335        os.remove(fileName)
336
337    def test_import_tsh3(self):
338        import os
339        import tempfile
340       
341        fileName = tempfile.mktemp(".tsh")
342        file = open(fileName,"w")
343        file.write("1.0 \n\
344showme1.0 0.0 10.0 \n\
3450.0 1.0\n\
34613.0 \n")
347        file.close()
348        #print fileName
349        try:
350            dict = import_mesh_file(fileName)
351        except IOError:
352            pass
353        else:
354            self.failUnless(0 ==1,
355                        'bad tsh file did not raise error!')
356       
357        os.remove(fileName)         
358
359           
360  ############### .MSH ##########
361       
362    def test_read_write_msh_file(self):
363        dict = self.dict.copy()
364        fileName = tempfile.mktemp(".msh")
365        export_mesh_file(fileName,dict)
366        loaded_dict = loadASCII._read_msh_file(fileName)
367        os.remove(fileName)
368        dict = self.dict
369        #print "*********************"
370        #print dict
371        #print "**loaded_dict*******************"
372        #print loaded_dict
373        #print "*********************"
374        self.check_mesh_dicts(loaded_dict,dict,'test_read_write_msh_file') 
375
376    def test_read_write_msh_fileII(self):
377        dict = self.sparse_dict.copy()
378        fileName = tempfile.mktemp(".msh")
379        export_mesh_file(fileName,dict)
380        loaded_dict = loadASCII._read_msh_file(fileName)
381        os.remove(fileName)
382        dict = self.sparse_dict
383        #print "*********************"
384        #print dict
385        #print "**loaded_dict*******************"
386        #print loaded_dict
387        #print "*********************"       
388        self.check_mesh_dicts(loaded_dict,dict, 'test_read_write_msh_fileII')
389             
390    def test_read_write_msh_fileIII(self):
391        dict = self.blank_dict.copy()
392        fileName = tempfile.mktemp(".msh")
393        export_mesh_file(fileName,dict)
394        loaded_dict = loadASCII._read_msh_file(fileName)
395        os.remove(fileName)
396        dict = self.blank_dict
397        #print "*********************"
398        #print dict
399        #print "**loaded_dict*******************"
400        #print loaded_dict
401        #print "*********************"       
402        self.check_mesh_dicts(loaded_dict,dict, 'test_read_write_msh_fileIII')
403       
404    def test_read_write_msh_file4(self):
405        dict = self.seg_dict.copy()
406        fileName = tempfile.mktemp(".msh")
407        export_mesh_file(fileName,dict)
408        loaded_dict = loadASCII._read_msh_file(fileName)
409        os.remove(fileName)
410        dict = self.seg_dict
411        #print "*********************"
412        #print dict
413        #print "**loaded_dict*******************"
414        #print loaded_dict
415        #print "*********************"
416        self.check_mesh_dicts(loaded_dict,dict, 'test_read_write_msh_fileIII')
417       
418    def test_read_write_msh_file5(self):
419        dict = self.triangle_tags_dict.copy()
420        fileName = tempfile.mktemp(".msh")
421        export_mesh_file(fileName,dict)
422        loaded_dict = loadASCII._read_msh_file(fileName)
423        os.remove(fileName)
424        dict = self.triangle_tags_dict
425        #print "msh_file5*********************"
426        #print dict
427        #print "**loaded_dict*******************"
428        #print loaded_dict
429        #print "*********************"
430        self.check_mesh_dicts(loaded_dict,dict, 'test_read_write_msh_fileIII')
431                                       
432       
433    def test_read_write_msh_file6(self):
434        dict = self.tri_dict.copy()
435        fileName = tempfile.mktemp(".msh")
436        export_mesh_file(fileName,dict)
437        loaded_dict = loadASCII._read_msh_file(fileName)
438        os.remove(fileName)
439        dict = self.tri_dict
440        #print "*********************"
441        #print dict
442        #print "**loaded_dict*******************"
443        #print loaded_dict
444        #print "*********************"
445        self.check_mesh_dicts(loaded_dict,dict, 'test_read_write_msh_fileIII')
446                         
447    def check_mesh_dicts(self, loaded_dict, dict, fail_string ):
448        assert numpy.allclose(numpy.array(loaded_dict['points']),
449                        numpy.array(dict['points']))
450                       
451        assert numpy.allclose(numpy.array(loaded_dict['point_attributes']),
452                        numpy.array(dict['point_attributes']))
453        assert numpy.allclose(numpy.array(loaded_dict['outline_segments']),
454                        numpy.array(dict['outline_segments']))
455       
456        self.failUnless(loaded_dict['outline_segment_tags']  ==
457                        dict['outline_segment_tags'],
458                        fail_string + ' failed!! Test 4')
459       
460           
461        assert numpy.allclose(numpy.array(loaded_dict['regions']),
462                        numpy.array(dict['regions']))
463        self.failUnless(loaded_dict['region_tags']  ==
464                        dict['region_tags'],
465                        fail_string + ' failed!! Test 5')
466       
467        assert numpy.allclose(numpy.array(loaded_dict['region_max_areas']),
468                        numpy.array(dict['region_max_areas']))
469 
470        assert numpy.allclose(numpy.array(loaded_dict['holes']),
471                        numpy.array(dict['holes']))
472 
473        assert numpy.allclose(numpy.array(dict['vertices']),
474                        numpy.array(loaded_dict['vertices']))
475 
476        assert numpy.allclose(numpy.array(dict['triangles']),
477                        numpy.array(loaded_dict['triangles']))
478 
479        assert numpy.allclose(numpy.array(dict['segments']),
480                        numpy.array(loaded_dict['segments']))
481        for ob, ldob in map(None,dict['triangle_tags'],
482                              loaded_dict['triangle_tags']):
483            self.failUnless(ob  == ldob,
484                        fail_string + ' failed!! Test triangle_tags')
485        # A bit hacky
486        self.failUnless((loaded_dict['vertex_attributes']  ==
487                        dict['vertex_attributes']) or \
488                        (loaded_dict['vertex_attributes']  == None and \
489                         dict['vertex_attributes'] == []),
490                        fail_string + ' failed!! Test vertex_attributes')
491 
492        assert numpy.allclose(numpy.array(dict['triangle_neighbors']),
493                        numpy.array(loaded_dict['triangle_neighbors']))
494
495        for seg, ldseg in map(None,dict['segment_tags'],
496                              loaded_dict['segment_tags']):
497            self.failUnless(seg  == ldseg,
498                        fail_string + ' failed!! Test 8')
499        try:
500            assert numpy.allclose(numpy.array(dict['vertex_attribute_titles']),
501                            numpy.array(loaded_dict['vertex_attribute_titles']))
502        except TypeError:
503            self.failUnless(numpy.array(loaded_dict['vertex_attribute_titles'])  ==
504                        numpy.array(dict['vertex_attribute_titles']),
505                        fail_string + ' failed!! Test 8')
506        try:   
507            self.failUnless(loaded_dict['geo_reference']  ==
508                        dict['geo_reference'] ,
509                        fail_string + ' failed!! Test geo_reference')
510        except KeyError:         
511            self.failUnless(not dict.has_key('geo_reference' and
512                         loaded_dict['geo_reference'] == None)   ,
513                        fail_string + ' failed!! Test geo_reference')
514 
515########################## BAD .MSH ##########################         
516
517    def test_load_bad_no_file_msh(self):
518        import os
519        import tempfile
520       
521        fileName = tempfile.mktemp(".msh")
522        #print fileName
523        try:
524            dict = import_mesh_file(fileName)
525        except IOError:
526            pass
527        else:
528            self.failUnless(0 ==1,
529                        'imaginary file did not raise error!')
530           
531    def throws_error_2_screen_test_import_mesh_bad(self):
532        import os
533        import tempfile
534       
535        fileName = tempfile.mktemp(".msh")
536        file = open(fileName,"w")
537        #   this is  a bad tsh file
538        file.write("elevn\n\
5391.0 what \n\
5400.0 the \n\
5411.0 !!! \n")
542        file.close()
543        #print fileName
544        try:
545            dict = import_mesh_file(fileName)
546        except IOError:
547            pass
548        else:
549            self.failUnless(0 ==1,
550                        'bad msh file did not raise error!')       
551        os.remove(fileName)         
552             
553#-------------------------------------------------------------
554if __name__ == "__main__":
555
556    suite = unittest.makeSuite(loadASCIITestCase,'test')
557    #suite = unittest.makeSuite(loadASCIITestCase,'test_read_write_tsh_file4')
558    runner = unittest.TextTestRunner() #verbosity=2)
559    runner.run(suite)
560   
Note: See TracBrowser for help on using the repository browser.