source: branches/numpy/anuga/load_mesh/test_loadASCII.py @ 6304

Last change on this file since 6304 was 6304, checked in by rwilson, 16 years ago

Initial commit of numpy changes. Still a long way to go.

File size: 21.9 KB
Line 
1#!/usr/bin/env python
2
3import tempfile
4import unittest
5
6import os
7import tempfile
8
9from os.path import splitext
10
11import numpy as num
12   
13from anuga.load_mesh.loadASCII import *
14from anuga.coordinate_transforms.geo_reference import Geo_reference
15import loadASCII
16
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
51                                                        # have 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),
139                                                       (0, 2), (0, 3)]
140        self.triangle_tags_dict['outline_segment_tags'] = ['50', '40',
141                                                           '30', '20']
142        self.triangle_tags_dict['holes'] = [(0.2, 0.6)]
143        self.triangle_tags_dict['point_attributes'] = [[5, 2], [4, 2],
144                                                       [3, 2], [2,2]]
145        self.triangle_tags_dict['regions'] = [(0.3, 0.3),(0.3, 0.4)]
146        self.triangle_tags_dict['region_tags'] = ['1.3', 'yeah']
147        self.triangle_tags_dict['region_max_areas'] = [36.0, -7.1]
148        self.triangle_tags_dict['points'] = [(0.0, 0.0), (0.0, 4.0),
149                                             (4.0, 0.0), (1.0, 1.0)]
150        self.triangle_tags_dict['vertices'] = [(0.0, 0.0), (0.0, 4.0),
151                                               (4.0, 0.0), (1.0, 1.0),
152                                               (2.0, 2.0)]
153        self.triangle_tags_dict['triangles'] = [(3, 2, 4), (1, 0, 3),
154                                                (3, 4,1), (2, 3, 0)]
155        self.triangle_tags_dict['segments'] = [(0, 1), (1, 4), (2, 0),
156                                               (0, 3), (4, 2)]
157        self.triangle_tags_dict['triangle_tags'] = ['yeah', '1.3', '1.3', '']
158        self.triangle_tags_dict['vertex_attributes'] = [[1.2,2.], [1.2,2.],
159                                                        [1.2,2.], [1.2,2.],
160                                                        [1.2,3.]]
161        self.triangle_tags_dict['triangle_neighbors'] = [[-1, 2, 3], [3, 2, -1],
162                                                         [-1, 1, 0], [1, -1, 0]]
163        self.triangle_tags_dict['segment_tags'] = ['50', '40', '30', '20', '40']
164        self.triangle_tags_dict['vertex_attribute_titles'] = ['bed elevation',
165                                                              'height']
166        self.triangle_tags_dict['geo_reference'] = Geo_reference(56, 1.9, 1.9)
167       
168    def tearDown(self):
169        pass
170
171  ############### .TSH ##########     
172    def test_export_mesh_file(self):
173        import os
174        import tempfile
175       
176        meshDict = self.dict
177        fileName = tempfile.mktemp('.tsh')
178        export_mesh_file(fileName, meshDict)
179        loadedDict = import_mesh_file(fileName)
180       
181        self.failUnless(num.alltrue(num.array(meshDict['vertices']) ==
182                                    num.array(loadedDict['vertices'])),
183                        'test_export_mesh_file failed. Test 1')
184        self.failUnless(num.alltrue(num.array(meshDict['triangles']) ==
185                                    num.array(loadedDict['triangles'])),
186                        'test_export_mesh_file failed. Test 2')
187        self.failUnless(num.alltrue(num.array(meshDict['segments']) ==
188                                    num.array(loadedDict['segments'])),
189                        'test_export_mesh_file failed. Test 3')
190        self.failUnless(num.alltrue(num.array(meshDict['triangle_tags']) ==
191                                    num.array(loadedDict['triangle_tags'])),
192                        'test_export_mesh_file failed. Test 4')
193
194        self.failUnless(meshDict['vertex_attributes'] ==
195                        loadedDict['vertex_attributes'],
196                        'test_export_mesh_file failed. Test 5')
197        self.failUnless(num.alltrue(num.array(meshDict['triangle_neighbors']) ==
198                                    num.array(loadedDict['triangle_neighbors'])),
199                        'test_export_mesh_file failed. Test 6')
200        self.failUnless(num.alltrue(num.array(meshDict['segment_tags']) ==
201                                    num.array(loadedDict['segment_tags'])),
202                        'test_export_mesh_file failed. Test 7')
203        self.failUnless(num.alltrue(num.array(meshDict['vertex_attribute_titles']) ==
204                                    num.array(loadedDict['vertex_attribute_titles'])),
205                        'test_export_mesh_file failed. Test 8')
206        self.failUnless(num.alltrue(num.array(meshDict['geo_reference']) ==
207                                    num.array(loadedDict['geo_reference'])),
208                        'test_export_mesh_file failed. Test 9')
209           
210        os.remove(fileName)
211 
212    def test_read_write_tsh_file(self):
213        dict = self.dict.copy()
214        fileName = tempfile.mktemp('.tsh')
215        export_mesh_file(fileName, dict)
216        loaded_dict = import_mesh_file(fileName)
217        os.remove(fileName)
218        dict = self.dict
219        self.check_mesh_dicts(loaded_dict, dict, 'test_read_write_msh_file')
220       
221    def test_read_write_tsh_fileII(self):
222        dict = self.sparse_dict.copy()
223        fileName = tempfile.mktemp('.tsh')
224        export_mesh_file(fileName, dict)
225        loaded_dict = import_mesh_file(fileName)
226        dict = self.sparse_dict   
227        self.check_mesh_dicts(loaded_dict, dict, 'test_read_write_msh_file')
228        os.remove(fileName)
229       
230    def test_read_write_tsh_fileIII(self):
231        dict = self.blank_dict.copy()
232        fileName = tempfile.mktemp('.tsh')
233        export_mesh_file(fileName, dict)
234        loaded_dict = import_mesh_file(fileName)
235        os.remove(fileName)
236        dict = self.blank_dict
237        #print "*********************"
238        #print dict
239        #print "**loaded_dict*******************"
240        #print loaded_dict
241        #print "*********************"       
242        self.check_mesh_dicts(loaded_dict, dict, 'test_read_write_msh_fileIII')
243
244    def test_read_write_tsh_file4(self):
245        dict = self.seg_dict.copy()
246        fileName = tempfile.mktemp('.tsh')
247        export_mesh_file(fileName, dict)
248        loaded_dict = import_mesh_file(fileName)
249        os.remove(fileName)
250        dict = self.seg_dict   
251        self.check_mesh_dicts(loaded_dict, dict, 'test_read_write_msh_file4')
252
253    def test_read_write_tsh_file5(self):
254        dict = self.triangle_tags_dict.copy()
255        fileName = tempfile.mktemp('.tsh')
256        export_mesh_file(fileName, dict)
257        loaded_dict = import_mesh_file(fileName)
258        dict = self.triangle_tags_dict
259        #print "*********************"
260        #print dict
261        #print "**loaded_dict*******************"
262        #print loaded_dict
263        #print "*********************"       
264        self.check_mesh_dicts(loaded_dict, dict, 'test_read_write_msh_file5') 
265        os.remove(fileName)
266
267    def test_read_write_tsh_file6(self):
268        dict = self.tri_dict.copy()
269        fileName = tempfile.mktemp('.tsh')
270        export_mesh_file(fileName, dict)
271        loaded_dict = import_mesh_file(fileName)
272        dict = self.tri_dict
273        self.check_mesh_dicts(loaded_dict, dict, 'test_read_write_msh_file6') 
274        os.remove(fileName)
275       
276########################## BAD .TSH ##########################
277
278    def test_load_bad_no_file_tsh(self):
279        import os
280        import tempfile
281       
282        fileName = tempfile.mktemp('.tsh')
283        try:
284            dict = import_mesh_file(fileName)
285        except IOError:
286            pass
287        else:
288            self.failUnless(0 == 1, 'imaginary file did not raise error!')
289         
290    def test_read_write_tsh_file_bad(self):
291        dict = self.tri_dict.copy()
292        fileName = tempfile.mktemp('.xxx')
293        try:
294            export_mesh_file(fileName, dict)
295        except IOError:
296            pass
297        else:
298            self.failUnless(0 == 1, 'bad tsh file did not raise error!')       
299       
300    def test_import_tsh_bad(self):
301        import os
302        import tempfile
303       
304        fileName = tempfile.mktemp('.tsh')
305        file = open(fileName, 'w')
306        #   this is  a bad tsh file
307        file.write('elevn\n\
3081.0 what \n\
3090.0 the \n\
3101.0 !!! \n')
311        file.close()
312        #print fileName
313        try:
314            dict = import_mesh_file(fileName)
315        except IOError:
316            pass
317        else:
318            self.failUnless(0 == 1, 'bad tsh file did not raise error!')
319        os.remove(fileName)
320
321    def test_import_tsh3(self):
322        import os
323        import tempfile
324       
325        fileName = tempfile.mktemp('.tsh')
326        file = open(fileName, 'w')
327        file.write('1.0 \n\
328showme1.0 0.0 10.0 \n\
3290.0 1.0\n\
33013.0 \n')
331        file.close()
332        try:
333            dict = import_mesh_file(fileName)
334        except IOError:
335            pass
336        else:
337            self.failUnless(0 == 1, 'bad tsh file did not raise error!')
338       
339        os.remove(fileName)         
340
341           
342  ############### .MSH ##########
343       
344    def test_read_write_msh_file(self):
345        dict = self.dict.copy()
346        fileName = tempfile.mktemp('.msh')
347        export_mesh_file(fileName, dict)
348        loaded_dict = loadASCII._read_msh_file(fileName)
349        os.remove(fileName)
350        dict = self.dict
351        #print "*********************"
352        #print dict
353        #print "**loaded_dict*******************"
354        #print loaded_dict
355        #print "*********************"
356        self.check_mesh_dicts(loaded_dict, dict, 'test_read_write_msh_file')
357
358    def test_read_write_msh_fileII(self):
359        dict = self.sparse_dict.copy()
360        fileName = tempfile.mktemp('.msh')
361        export_mesh_file(fileName, dict)
362        loaded_dict = loadASCII._read_msh_file(fileName)
363        os.remove(fileName)
364        dict = self.sparse_dict
365        #print "*********************"
366        #print dict
367        #print "**loaded_dict*******************"
368        #print loaded_dict
369        #print "*********************"       
370        self.check_mesh_dicts(loaded_dict, dict, 'test_read_write_msh_fileII')
371             
372    def test_read_write_msh_fileIII(self):
373        dict = self.blank_dict.copy()
374        fileName = tempfile.mktemp('.msh')
375        export_mesh_file(fileName, dict)
376        loaded_dict = loadASCII._read_msh_file(fileName)
377        os.remove(fileName)
378        dict = self.blank_dict
379        #print "*********************"
380        #print dict
381        #print "**loaded_dict*******************"
382        #print loaded_dict
383        #print "*********************"       
384        self.check_mesh_dicts(loaded_dict, dict, 'test_read_write_msh_fileIII')
385       
386    def test_read_write_msh_file4(self):
387        dict = self.seg_dict.copy()
388        fileName = tempfile.mktemp('.msh')
389        export_mesh_file(fileName, dict)
390        loaded_dict = loadASCII._read_msh_file(fileName)
391        os.remove(fileName)
392        dict = self.seg_dict
393        #print "*********************"
394        #print dict
395        #print "**loaded_dict*******************"
396        #print loaded_dict
397        #print "*********************"
398        self.check_mesh_dicts(loaded_dict, dict, 'test_read_write_msh_file4')
399       
400    def test_read_write_msh_file5(self):
401        dict = self.triangle_tags_dict.copy()
402        fileName = tempfile.mktemp('.msh')
403        export_mesh_file(fileName, dict)
404        loaded_dict = loadASCII._read_msh_file(fileName)
405        os.remove(fileName)
406        dict = self.triangle_tags_dict
407        #print "msh_file5*********************"
408        #print dict
409        #print "**loaded_dict*******************"
410        #print loaded_dict
411        #print "*********************"
412        self.check_mesh_dicts(loaded_dict, dict, 'test_read_write_msh_file5')
413       
414    def test_read_write_msh_file6(self):
415        dict = self.tri_dict.copy()
416        fileName = tempfile.mktemp('.msh')
417        export_mesh_file(fileName, dict)
418        loaded_dict = loadASCII._read_msh_file(fileName)
419        os.remove(fileName)
420        dict = self.tri_dict
421        print "*********************"
422        print dict
423        print "**loaded_dict*******************"
424        print loaded_dict
425        print "*********************" 
426        self.check_mesh_dicts(loaded_dict, dict, 'test_read_write_msh_file6')
427                         
428    def check_mesh_dicts(self, loaded_dict, dict, fail_string):
429        assert num.allclose(num.array(loaded_dict['points']),
430                            num.array(dict['points']))
431        assert num.allclose(num.array(loaded_dict['point_attributes']),
432                            num.array(dict['point_attributes']))
433        assert num.allclose(num.array(loaded_dict['outline_segments']),
434                            num.array(dict['outline_segments']))
435       
436        self.failUnless(loaded_dict['outline_segment_tags'] ==
437                        dict['outline_segment_tags'],
438                        fail_string + ' failed!! Test 4')
439           
440        assert num.allclose(num.array(loaded_dict['regions']),
441                            num.array(dict['regions']))
442                       
443        self.failUnless(loaded_dict['region_tags'] == dict['region_tags'],
444                        fail_string + ' failed!! Test 5')
445       
446        assert num.allclose(num.array(loaded_dict['region_max_areas']),
447                            num.array(dict['region_max_areas']))
448 
449        assert num.allclose(num.array(loaded_dict['holes']),
450                            num.array(dict['holes']))
451 
452        assert num.allclose(num.array(dict['vertices']),
453                            num.array(loaded_dict['vertices']))
454 
455        assert num.allclose(num.array(dict['triangles']),
456                            num.array(loaded_dict['triangles']))
457 
458        assert num.allclose(num.array(dict['segments']),
459                            num.array(loaded_dict['segments']))
460
461        for ob, ldob in map(None,dict['triangle_tags'],
462                              loaded_dict['triangle_tags']):
463            self.failUnless(ob == ldob,
464                            fail_string + ' failed!! Test triangle_tags')
465
466        # A bit hacky
467        self.failUnless((loaded_dict['vertex_attributes'] ==
468                         dict['vertex_attributes']) or \
469                        (loaded_dict['vertex_attributes'] == None and \
470                         dict['vertex_attributes'] == []),
471                        fail_string + ' failed!! Test vertex_attributes')
472 
473        assert num.allclose(num.array(dict['triangle_neighbors']),
474                            num.array(loaded_dict['triangle_neighbors']))
475
476        for seg, ldseg in map(None,dict['segment_tags'],
477                              loaded_dict['segment_tags']):
478            self.failUnless(seg == ldseg,
479                            fail_string + ' failed!! Test 8')
480        try:
481            assert num.allclose(num.array(dict['vertex_attribute_titles']),
482                                num.array(loaded_dict['vertex_attribute_titles']))
483        except TypeError:
484            self.failUnless(num.alltrue(num.array(loaded_dict['vertex_attribute_titles']) ==
485                                        num.array(dict['vertex_attribute_titles'])),
486                            fail_string + ' failed!! Test 8')
487        try:   
488            self.failUnless(loaded_dict['geo_reference'] ==
489                            dict['geo_reference'],
490                            fail_string + ' failed!! Test geo_reference')
491        except KeyError:         
492            self.failUnless(not dict.has_key('geo_reference' and
493                                loaded_dict['geo_reference'] == None),
494                            fail_string + ' failed!! Test geo_reference')
495 
496########################## BAD .MSH ##########################         
497
498    def test_load_bad_no_file_msh(self):
499        import os
500        import tempfile
501       
502        fileName = tempfile.mktemp('.msh')
503        try:
504            dict = import_mesh_file(fileName)
505        except IOError:
506            pass
507        else:
508            self.failUnless(0 == 1, 'imaginary file did not raise error!')
509           
510    def throws_error_2_screen_test_import_mesh_bad(self):
511        import os
512        import tempfile
513       
514        fileName = tempfile.mktemp('.msh')
515        file = open(fileName, 'w')
516        # this is  a bad tsh file
517        file.write('elevn\n\
5181.0 what \n\
5190.0 the \n\
5201.0 !!! \n')
521        file.close()
522        try:
523            dict = import_mesh_file(fileName)
524        except IOError:
525            pass
526        else:
527            self.failUnless(0 == 1, 'bad msh file did not raise error!')
528        os.remove(fileName)         
529
530#-------------------------------------------------------------
531if __name__ == '__main__':
532
533    suite = unittest.makeSuite(loadASCIITestCase,'test')
534    runner = unittest.TextTestRunner() #verbosity=2)
535    runner.run(suite)
536   
Note: See TracBrowser for help on using the repository browser.