source: inundation-numpy-branch/load_mesh/test_loadASCII.py @ 2608

Last change on this file since 2608 was 2608, checked in by ole, 18 years ago

Played with custom exceptions for ANUGA

File size: 37.7 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
12from numpy import array, allclose
13   
14from loadASCII import *
15from 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'] = [[],[],[]]
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'] = [[],[]]
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(array(meshDict['vertices'])  ==
182                        array(loadedDict['vertices']),
183                         'test_export_mesh_file failed. Test 1')
184        self.failUnless(array(meshDict['triangles'])  ==
185                        array(loadedDict['triangles']),
186                         'test_export_mesh_file failed. Test 2')
187        self.failUnless(array(meshDict['segments'])  ==
188                        array(loadedDict['segments']),
189                         'test_export_mesh_file failed. Test 3')
190        self.failUnless(array(meshDict['triangle_tags'])  ==
191                        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(array(meshDict['triangle_neighbors'])  ==
198                        array(loadedDict['triangle_neighbors']),
199                         'test_export_mesh_file failed. Test 6')
200        self.failUnless(array(meshDict['segment_tags'])  ==
201                        array(loadedDict['segment_tags']),
202                         'test_export_mesh_file failed. Test 7')
203        self.failUnless(array(meshDict['vertex_attribute_titles'])  ==
204                        array(loadedDict['vertex_attribute_titles']),
205                         'test_export_mesh_file failed. Test 8')
206        self.failUnless(array(meshDict['geo_reference'])  ==
207                        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        #print "*********************"
220        #print dict
221        #print "**loaded_dict*******************"
222        #print loaded_dict
223        #print "*********************"       
224        self.check_mesh_dicts(loaded_dict,dict, 'test_read_write_msh_file')
225       
226    def test_read_write_tsh_fileII(self):
227        dict = self.sparse_dict.copy()
228        fileName = tempfile.mktemp(".tsh")
229        export_mesh_file(fileName,dict)
230        loaded_dict = import_mesh_file(fileName)
231        dict = self.sparse_dict   
232        self.check_mesh_dicts(loaded_dict,dict, 'test_read_write_msh_file')
233        os.remove(fileName)
234       
235    def test_read_write_tsh_fileIII(self):
236        dict = self.blank_dict.copy()
237        fileName = tempfile.mktemp(".tsh")
238        export_mesh_file(fileName,dict)
239        loaded_dict = import_mesh_file(fileName)
240        os.remove(fileName)
241        dict = self.blank_dict
242        #print "*********************"
243        #print dict
244        #print "**loaded_dict*******************"
245        #print loaded_dict
246        #print "*********************"       
247        self.check_mesh_dicts(loaded_dict,dict, 'test_read_write_msh_fileIII')
248
249    def test_read_write_tsh_file4(self):
250        dict = self.seg_dict.copy()
251        fileName = tempfile.mktemp(".tsh")
252        export_mesh_file(fileName,dict)
253        loaded_dict = import_mesh_file(fileName)
254        os.remove(fileName)
255        dict = self.seg_dict   
256        self.check_mesh_dicts(loaded_dict,dict, 'test_read_write_msh_file4')
257
258    def test_read_write_tsh_file5(self):
259        dict = self.triangle_tags_dict.copy()
260        fileName = tempfile.mktemp(".tsh")
261        export_mesh_file(fileName,dict)
262        loaded_dict = import_mesh_file(fileName)
263        dict = self.triangle_tags_dict
264        #print "*********************"
265        #print dict
266        #print "**loaded_dict*******************"
267        #print loaded_dict
268        #print "*********************"       
269        self.check_mesh_dicts(loaded_dict,dict, 'test_read_write_msh_file5') 
270        os.remove(fileName)
271
272    def test_read_write_tsh_file6(self):
273        dict = self.tri_dict.copy()
274        fileName = tempfile.mktemp(".tsh")
275        export_mesh_file(fileName,dict)
276        loaded_dict = import_mesh_file(fileName)
277        dict = self.tri_dict   
278        self.check_mesh_dicts(loaded_dict,dict, 'test_read_write_msh_file6') 
279        os.remove(fileName)
280       
281########################## BAD .TSH ##########################
282
283    def test_load_bad_no_file_tsh(self):
284        import os
285        import tempfile
286       
287        fileName = tempfile.mktemp(".tsh")
288        #print fileName
289        try:
290            dict = import_mesh_file(fileName)
291        except IOError:
292            pass
293        else:
294            self.failUnless(0 ==1,
295                        'imaginary file did not raise error!')
296         
297    def test_read_write_tsh_file_bad(self):
298        dict = self.tri_dict.copy()
299        fileName = tempfile.mktemp(".xxx")
300        try:
301            export_mesh_file(fileName,dict)
302        except IOError:
303            pass
304        else:
305            self.failUnless(0 ==1,
306                        'bad tsh file did not raise error!')       
307       
308    def test_import_tsh_bad(self):
309        import os
310        import tempfile
311       
312        fileName = tempfile.mktemp(".tsh")
313        file = open(fileName,"w")
314        #   this is  a bad tsh file
315        file.write("elevn\n\
3161.0 what \n\
3170.0 the \n\
3181.0 !!! \n")
319        file.close()
320        #print fileName
321        try:
322            dict = import_points_file(fileName,delimiter = ' ')
323        except IOError:
324            pass
325        else:
326            self.failUnless(0 ==1,
327                        'bad tsh file did not raise error!')       
328        os.remove(fileName)
329
330    def test_import_tsh3(self):
331        import os
332        import tempfile
333       
334        fileName = tempfile.mktemp(".tsh")
335        file = open(fileName,"w")
336        file.write("1.0 \n\
337showme1.0 0.0 10.0 \n\
3380.0 1.0\n\
33913.0 \n")
340        file.close()
341        #print fileName
342        try:
343            dict = import_points_file(fileName,delimiter = ' ')
344        except IOError:
345            pass
346        else:
347            self.failUnless(0 ==1,
348                        'bad tsh file did not raise error!')
349       
350        os.remove(fileName)         
351
352           
353  ############### .MSH ##########
354       
355    def test_read_write_msh_file(self):
356        dict = self.dict.copy()
357        fileName = tempfile.mktemp(".msh")
358        export_mesh_file(fileName,dict)
359        loaded_dict = loadASCII._read_msh_file(fileName)
360        os.remove(fileName)
361        dict = self.dict
362        #print "*********************"
363        #print dict
364        #print "**loaded_dict*******************"
365        #print loaded_dict
366        #print "*********************"
367        self.check_mesh_dicts(loaded_dict,dict,'test_read_write_msh_file') 
368
369    def test_read_write_msh_fileII(self):
370        dict = self.sparse_dict.copy()
371        fileName = tempfile.mktemp(".msh")
372        export_mesh_file(fileName,dict)
373        loaded_dict = loadASCII._read_msh_file(fileName)
374        os.remove(fileName)
375        dict = self.sparse_dict
376        #print "*********************"
377        #print dict
378        #print "**loaded_dict*******************"
379        #print loaded_dict
380        #print "*********************"       
381        self.check_mesh_dicts(loaded_dict,dict, 'test_read_write_msh_fileII')
382             
383    def test_read_write_msh_fileIII(self):
384        dict = self.blank_dict.copy()
385        fileName = tempfile.mktemp(".msh")
386        export_mesh_file(fileName,dict)
387        loaded_dict = loadASCII._read_msh_file(fileName)
388        os.remove(fileName)
389        dict = self.blank_dict
390        #print "*********************"
391        #print dict
392        #print "**loaded_dict*******************"
393        #print loaded_dict
394        #print "*********************"       
395        self.check_mesh_dicts(loaded_dict,dict, 'test_read_write_msh_fileIII')
396       
397    def test_read_write_msh_file4(self):
398        dict = self.seg_dict.copy()
399        fileName = tempfile.mktemp(".msh")
400        export_mesh_file(fileName,dict)
401        loaded_dict = loadASCII._read_msh_file(fileName)
402        os.remove(fileName)
403        dict = self.seg_dict
404        #print "*********************"
405        #print dict
406        #print "**loaded_dict*******************"
407        #print loaded_dict
408        #print "*********************"
409        self.check_mesh_dicts(loaded_dict,dict, 'test_read_write_msh_fileIII')
410       
411    def test_read_write_msh_file5(self):
412        dict = self.triangle_tags_dict.copy()
413        fileName = tempfile.mktemp(".msh")
414        export_mesh_file(fileName,dict)
415        loaded_dict = loadASCII._read_msh_file(fileName)
416        os.remove(fileName)
417        dict = self.triangle_tags_dict
418        #print "msh_file5*********************"
419        #print dict
420        #print "**loaded_dict*******************"
421        #print loaded_dict
422        #print "*********************"
423        self.check_mesh_dicts(loaded_dict,dict, 'test_read_write_msh_fileIII')
424                                       
425       
426    def test_read_write_msh_file6(self):
427        dict = self.tri_dict.copy()
428        fileName = tempfile.mktemp(".msh")
429        export_mesh_file(fileName,dict)
430        loaded_dict = loadASCII._read_msh_file(fileName)
431        os.remove(fileName)
432        dict = self.tri_dict
433        #print "*********************"
434        #print dict
435        #print "**loaded_dict*******************"
436        #print loaded_dict
437        #print "*********************"
438        self.check_mesh_dicts(loaded_dict,dict, 'test_read_write_msh_fileIII')
439                         
440    def check_mesh_dicts(self, loaded_dict, dict, fail_string ):
441        assert allclose(array(loaded_dict['points']),
442                        array(dict['points']))
443                       
444        assert allclose(array(loaded_dict['point_attributes']),
445                        array(dict['point_attributes']))
446        assert allclose(array(loaded_dict['outline_segments']),
447                        array(dict['outline_segments']))
448       
449        self.failUnless(loaded_dict['outline_segment_tags']  ==
450                        dict['outline_segment_tags'],
451                        fail_string + ' failed!! Test 4')
452       
453           
454        assert allclose(array(loaded_dict['regions']),
455                        array(dict['regions']))
456        self.failUnless(loaded_dict['region_tags']  ==
457                        dict['region_tags'],
458                        fail_string + ' failed!! Test 5')
459       
460        assert allclose(array(loaded_dict['region_max_areas']),
461                        array(dict['region_max_areas']))
462 
463        assert allclose(array(loaded_dict['holes']),
464                        array(dict['holes']))
465 
466        assert allclose(array(dict['vertices']),
467                        array(loaded_dict['vertices']))
468 
469        assert allclose(array(dict['triangles']),
470                        array(loaded_dict['triangles']))
471 
472        assert allclose(array(dict['segments']),
473                        array(loaded_dict['segments']))
474        for ob, ldob in map(None,dict['triangle_tags'],
475                              loaded_dict['triangle_tags']):
476            self.failUnless(ob  == ldob,
477                        fail_string + ' failed!! Test triangle_tags')
478        self.failUnless(loaded_dict['vertex_attributes']  ==
479                        dict['vertex_attributes'],
480                        fail_string + ' failed!! Test vertex_attributes')
481 
482        assert allclose(array(dict['triangle_neighbors']),
483                        array(loaded_dict['triangle_neighbors']))
484
485        for seg, ldseg in map(None,dict['segment_tags'],
486                              loaded_dict['segment_tags']):
487            self.failUnless(seg  == ldseg,
488                        fail_string + ' failed!! Test 8')
489        try:
490            assert allclose(array(dict['vertex_attribute_titles']),
491                            array(loaded_dict['vertex_attribute_titles']))
492        except TypeError:
493            self.failUnless(array(loaded_dict['vertex_attribute_titles'])  ==
494                        array(dict['vertex_attribute_titles']),
495                        fail_string + ' failed!! Test 8')
496        try:   
497            self.failUnless(loaded_dict['geo_reference']  ==
498                        dict['geo_reference'] ,
499                        fail_string + ' failed!! Test geo_reference')
500        except KeyError:         
501            self.failUnless(not dict.has_key('geo_reference' and
502                         loaded_dict['geo_reference'] == None)   ,
503                        fail_string + ' failed!! Test geo_reference')
504 
505########################## BAD .MSH ##########################         
506
507    def test_load_bad_no_file_msh(self):
508        import os
509        import tempfile
510       
511        fileName = tempfile.mktemp(".msh")
512        #print fileName
513        try:
514            dict = import_mesh_file(fileName)
515        except IOError:
516            pass
517        else:
518            self.failUnless(0 ==1,
519                        'imaginary file did not raise error!')
520           
521    def test_import_msh_bad(self):
522        import os
523        import tempfile
524       
525        fileName = tempfile.mktemp(".msh")
526        file = open(fileName,"w")
527        #   this is  a bad tsh file
528        file.write("elevn\n\
5291.0 what \n\
5300.0 the \n\
5311.0 !!! \n")
532        file.close()
533        #print fileName
534        try:
535            dict = import_points_file(fileName,delimiter = ' ')
536        except IOError:
537            pass
538        else:
539            self.failUnless(0 ==1,
540                        'bad msh file did not raise error!')       
541        os.remove(fileName)         
542   
543  ###################### .XYA ##############################
544       
545    def test_export_xya_file(self):
546        dict = {}
547        att_dict = {}
548        dict['pointlist'] = array([[1.0, 0.0],[0.0, 1.0],[1.0, 0.0]])
549        att_dict['elevation'] = array([10.0, 0.0, 10.4])
550        att_dict['brightness'] = array([10.0, 0.0, 10.4])
551        dict['attributelist'] = att_dict
552        dict['geo_reference'] = Geo_reference(56,1.9,1.9)
553       
554       
555        fileName = tempfile.mktemp(".xya")
556        export_points_file(fileName, dict)
557        dict2 = import_points_file(fileName)
558        #print "fileName",fileName
559        os.remove(fileName)
560        #print "dict2",dict2
561       
562        assert allclose(dict2['pointlist'],[[1.0, 0.0],[0.0, 1.0],[1.0, 0.0]])
563        assert allclose(dict2['attributelist']['elevation'], [10.0, 0.0, 10.4])
564        answer = [10.0, 0.0, 10.4]
565        assert allclose(dict2['attributelist']['brightness'], answer)
566        #print "dict2['geo_reference']",dict2['geo_reference']
567        self.failUnless(dict['geo_reference'] == dict2['geo_reference'],
568                         'test_writepts failed. Test geo_reference')
569
570    def test_export_xya_file2(self):
571        dict = {}
572        att_dict = {}
573        dict['pointlist'] = array([[1.0, 0.0],[0.0, 1.0],[1.0, 0.0]])
574        att_dict['elevation'] = array([10.0, 0.0, 10.4])
575        att_dict['brightness'] = array([10.0, 0.0, 10.4])
576        dict['attributelist'] = att_dict
577       
578       
579        fileName = tempfile.mktemp(".xya")
580        export_points_file(fileName, dict)
581        dict2 = import_points_file(fileName)
582        #print "fileName",fileName
583        os.remove(fileName)
584        #print "dict2",dict2
585       
586        assert allclose(dict2['pointlist'],[[1.0, 0.0],[0.0, 1.0],[1.0, 0.0]])
587        assert allclose(dict2['attributelist']['elevation'], [10.0, 0.0, 10.4])
588        answer = [10.0, 0.0, 10.4]
589        assert allclose(dict2['attributelist']['brightness'], answer)
590
591       
592    def test_loadxya(self):
593        """
594        comma delimited
595        """
596       
597        fileName = tempfile.mktemp(".xya")
598        file = open(fileName,"w")
599        file.write("elevation  , speed \n\
6001.0, 0.0, 10.0, 0.0\n\
6010.0, 1.0, 0.0, 10.0\n\
6021.0, 0.0, 10.4, 40.0\n")
603        file.close()
604        #print fileName
605        dict = import_points_file(fileName,delimiter = ',')
606        os.remove(fileName)
607        assert allclose(dict['pointlist'], [[1.0, 0.0],[0.0, 1.0],[1.0, 0.0]])
608        assert allclose(dict['attributelist']['elevation'], [10.0, 0.0, 10.4])
609        assert allclose(dict['attributelist']['speed'], [0.0, 10.0, 40.0])
610
611    #FIXME - redundant test?
612    def test_loadxy(self):
613        """
614        To test the mesh side of loading xya files.
615        Not the loading of xya files
616        """
617        import os
618        import tempfile
619       
620        fileName = tempfile.mktemp(".xya")
621        file = open(fileName,"w")
622        file.write("elevation speed \n\
6231.0 0.0 10.0 0.0\n\
6240.0 1.0 0.0 10.0\n\
6251.0 0.0 10.4 40.0\n")
626        file.close()
627        #print fileName
628        dict = import_points_file(fileName)
629        os.remove(fileName)
630        assert allclose(dict['pointlist'], [[1.0, 0.0],[0.0, 1.0],[1.0, 0.0]])
631        assert allclose(dict['attributelist']['elevation'], [10.0, 0.0, 10.4])
632        assert allclose(dict['attributelist']['speed'], [0.0, 10.0, 40.0])
633
634               
635    def test_loadxya2(self):
636        """
637        space delimited
638        """
639        import os
640        import tempfile
641       
642        fileName = tempfile.mktemp(".xya")
643        file = open(fileName,"w")
644        file.write("  elevation   speed \n\
6451.0 0.0 10.0 0.0\n\
6460.0 1.0 0.0 10.0\n\
6471.0 0.0 10.4 40.0\n")
648        file.close()
649        #print fileName
650        dict = import_points_file(fileName,delimiter = ' ')
651        os.remove(fileName)
652        assert allclose(dict['pointlist'], [[1.0, 0.0],[0.0, 1.0],[1.0, 0.0]])
653        assert allclose(dict['attributelist']['elevation'], [10.0, 0.0, 10.4])
654        assert allclose(dict['attributelist']['speed'], [0.0, 10.0, 40.0])
655     
656    def test_loadxya3(self):
657        """
658        space delimited
659        """
660        import os
661        import tempfile
662       
663        fileName = tempfile.mktemp(".xya")
664        file = open(fileName,"w")
665        file.write("  elevation   speed \n\
6661.0 0.0 10.0 0.0\n\
6670.0 1.0 0.0 10.0\n\
6681.0 0.0 10.4 40.0\n\
669#geocrap\n\
67056\n\
67156.6\n\
6723\n")
673        file.close()
674        #print fileName
675        dict = import_points_file(fileName,delimiter = ' ')
676        os.remove(fileName)
677        assert allclose(dict['pointlist'], [[1.0, 0.0],[0.0, 1.0],[1.0, 0.0]])
678        assert allclose(dict['attributelist']['elevation'], [10.0, 0.0, 10.4])
679        assert allclose(dict['attributelist']['speed'], [0.0, 10.0, 40.0])
680     
681        geo_reference = Geo_reference(56, 56.6, 3.0)
682       
683        self.failUnless(geo_reference == dict['geo_reference'],
684                         'test_writepts failed. Test geo_reference')
685       
686########################## BAD .XYA ##########################
687 
688    def test_loadxy_bad_no_file_xya(self):
689        import os
690        import tempfile
691       
692        fileName = tempfile.mktemp(".xya")
693        #print fileName
694        try:
695            dict = import_points_file(fileName,delimiter = ' ')
696        except IOError:
697            pass
698        else:
699            self.failUnless(0 ==1,
700                        'imaginary file did not raise error!')
701 
702    def test_read_write_points_file_bad(self):
703        dict = self.tri_dict.copy()
704        fileName = tempfile.mktemp(".xxx")
705        try:
706            export_points_file(fileName,dict)
707        except IOError:
708            pass
709        else:
710            self.failUnless(0 ==1,
711                        'bad points file extension did not raise error!')
712     
713    def test_read_write_points_file_bad2(self):
714        dict = {}
715        att_dict = {}
716        dict['pointlist'] = array([[1.0, 0.0],[0.0, 1.0],[1.0, 0.0]])
717        att_dict['elevation'] = array([10.0, 0.0, 10.4])
718        att_dict['brightness'] = array([10.0, 0.0, 10.4])
719        dict['attributelist'] = att_dict
720        dict['geo_reference'] = Geo_reference(56,1.9,1.9)
721        try:
722            export_points_file("_???/yeah.xya",dict)
723        except IOError:
724            pass
725        else:
726            self.failUnless(0 ==1,
727                        'bad points file extension did not raise error!')
728                   
729    def test_loadxy_bad(self):
730        import os
731        import tempfile
732       
733        fileName = tempfile.mktemp(".xya")
734        file = open(fileName,"w")
735        file.write("  elevation   \n\
7361.0 0.0 10.0 0.0\n\
7370.0 1.0 0.0 10.0\n\
7381.0 0.0 10.4 40.0\n")
739        file.close()
740        #print fileName
741        try:
742            dict = import_points_file(fileName,delimiter = ' ')
743        except IOError:
744            pass
745        else:
746            self.failUnless(0 ==1,
747                        'bad xya file did not raise error!')
748        os.remove(fileName)
749       
750    def test_loadxy_bad2(self):
751        import os
752        import tempfile
753       
754        fileName = tempfile.mktemp(".xya")
755        file = open(fileName,"w")
756        file.write("elevation\n\
7571.0 0.0 10.0 \n\
7580.0 1.0\n\
7591.0 \n")
760        file.close()
761        #print fileName
762        try:
763            dict = import_points_file(fileName,delimiter = ' ')
764        except IOError:
765            pass
766        else:
767            self.failUnless(0 ==1,
768                        'bad xya file did not raise error!')   
769        os.remove(fileName)
770   
771    def test_loadxy_bad3(self):
772        """
773        specifying wrong delimiter
774        """
775        import os
776        import tempfile
777       
778        fileName = tempfile.mktemp(".xya")
779        file = open(fileName,"w")
780        file.write("  elevation  , speed \n\
7811.0, 0.0, 10.0, 0.0\n\
7820.0, 1.0, 0.0, 10.0\n\
7831.0, 0.0, 10.4, 40.0\n")
784        file.close()
785        try:
786            dict = import_points_file(fileName,delimiter = ' ')
787        except IOError:
788            pass
789        else:
790            self.failUnless(0 ==1,
791                        'bad xya file did not raise error!')   
792        os.remove(fileName)
793     
794    def test_loadxy_bad4(self):
795        """
796        specifying wrong delimiter
797        """
798        import os
799        import tempfile
800       
801        fileName = tempfile.mktemp(".xya")
802        file = open(fileName,"w")
803        file.write("  elevation   speed \n\
8041.0 0.0 10.0 0.0\n\
8050.0 1.0 0.0 10.0\n\
8061.0 0.0 10.4 40.0\n\
807yeah")
808        file.close()
809        try:
810            dict = import_points_file(fileName,delimiter = ' ')
811        except IOError:
812            pass
813        else:
814            self.failUnless(0 ==1,
815                        'bad xya file did not raise error!')   
816        os.remove(fileName)
817 
818    def test_loadxy_bad4(self):
819        """
820        specifying wrong delimiter
821        """
822        import os
823        import tempfile
824       
825        fileName = tempfile.mktemp(".xya")
826        file = open(fileName,"w")
827        file.write("  elevation   speed \n\
8281.0 0.0 10.0 0.0\n\
8290.0 1.0 0.0 10.0\n\
8301.0 0.0 10.4 40.0\n\
831#geocrap")
832        file.close()
833        try:
834            dict = import_points_file(fileName,delimiter = ' ')
835        except IOError:
836            pass
837        else:
838            self.failUnless(0 ==1,
839                        'bad xya file did not raise error!')   
840        os.remove(fileName)
841
842    def test_loadxy_bad5(self):
843        """
844        specifying wrong delimiter
845        """
846        import os
847        import tempfile
848       
849        fileName = tempfile.mktemp(".xya")
850        file = open(fileName,"w")
851        file.write("  elevation   speed \n\
8521.0 0.0 10.0 0.0\n\
8530.0 1.0 0.0 10.0\n\
8541.0 0.0 10.4 40.0\n\
855#geocrap\n\
856crap")
857        file.close()
858        try:
859            dict = import_points_file(fileName,delimiter = ' ')
860        except IOError:
861            pass
862        else:
863            self.failUnless(0 ==1,
864                        'bad xya file did not raise error!')   
865        os.remove(fileName)       
866  ############### .PTS ##########
867           
868    def test_loadpts(self):
869       
870        from Scientific.IO.NetCDF import NetCDFFile
871
872        fileName = tempfile.mktemp(".pts")
873        # NetCDF file definition
874        outfile = NetCDFFile(fileName, 'w')
875       
876        # dimension definitions
877        outfile.createDimension('number_of_points', 3)   
878        outfile.createDimension('number_of_dimensions', 2) #This is 2d data
879   
880        # variable definitions
881        outfile.createVariable('points', Float, ('number_of_points',
882                                                 'number_of_dimensions'))
883        outfile.createVariable('elevation', Float, ('number_of_points',))
884   
885        # Get handles to the variables
886        points = outfile.variables['points']
887        elevation = outfile.variables['elevation']
888 
889        points[0, :] = [1.0,0.0]
890        elevation[0] = 10.0 
891        points[1, :] = [0.0,1.0]
892        elevation[1] = 0.0 
893        points[2, :] = [1.0,0.0]
894        elevation[2] = 10.4   
895
896        outfile.close()
897       
898        dict = import_points_file(fileName)
899        os.remove(fileName)
900        answer =  [[1.0, 0.0],[0.0, 1.0],[1.0, 0.0]]
901        #print "dict['pointlist']",dict['pointlist']
902        #print "answer",answer
903        assert allclose(dict['pointlist'], [[1.0, 0.0],[0.0, 1.0],[1.0, 0.0]])
904        assert allclose(dict['attributelist']['elevation'], [10.0, 0.0, 10.4])
905 
906    def test_writepts(self):
907        dict = {}
908        att_dict = {}
909        dict['pointlist'] = array([[1.0, 0.0],[0.0, 1.0],[1.0, 0.0]])
910        att_dict['elevation'] = array([10.0, 0.0, 10.4])
911        att_dict['brightness'] = array([10.0, 0.0, 10.4])
912        dict['attributelist'] = att_dict
913        dict['geo_reference'] = Geo_reference(56,1.9,1.9)
914       
915       
916        fileName = tempfile.mktemp(".pts")
917        export_points_file(fileName, dict)
918        dict2 = import_points_file(fileName)
919        #print "fileName",fileName
920        os.remove(fileName)
921        #print "dict2",dict2
922       
923        assert allclose(dict2['pointlist'],[[1.0, 0.0],[0.0, 1.0],[1.0, 0.0]])
924        assert allclose(dict2['attributelist']['elevation'], [10.0, 0.0, 10.4])
925        answer = [10.0, 0.0, 10.4]
926        assert allclose(dict2['attributelist']['brightness'], answer)
927
928        #print "dict['geo_reference'] ",dict['geo_reference']
929        #print "dict2['geo_reference']",dict2['geo_reference']
930       
931        self.failUnless(dict['geo_reference'] == dict2['geo_reference'],
932                         'test_writepts failed. Test geo_reference')
933       
934 ########################## BAD .PTS ##########################         
935
936    def test_load_bad_no_file_pts(self):
937        import os
938        import tempfile
939       
940        fileName = tempfile.mktemp(".pts")
941        #print fileName
942        try:
943            dict = import_points_file(fileName)
944        except IOError:
945            pass
946        else:
947            self.failUnless(0 ==1,
948                        'imaginary file did not raise error!')
949           
950  ############### .PTS OTHER ##########
951
952    def test_concatinate_attributelist(self):
953        dic = {}
954        dic['one'] = array([1,2])
955        dic['2'] = array([2,7])
956        dic['three'] = array([3,79])
957        dic['4'] = array([4,47])
958        dic['five'] = array([5,17])
959        titles, block = concatinate_attributelist(dic)
960        #print "titles", titles
961        #print "array", block
962        self.failUnless(titles  == ['4', '2', 'five', 'three', 'one'],
963                         'test_concatinate_attributelist failed.')
964        assert allclose(block, [[4,2,5,3,1],[47,7,17,79,2]])
965
966    def test_half_pts(self):
967        dict = {}
968        att_dict = {}
969        dict['pointlist'] = array([[1.0, 0.0],[0.0, 1.0],[1.0, 0.0]])
970        att_dict['elevation'] = array([10.0, 0.0, 10.4])
971        att_dict['brightness'] = array([10.0, 0.0, 10.4])
972        dict['attributelist'] = att_dict
973        out_dict = half_pts(dict)
974        assert allclose(out_dict['pointlist'],[[1.0, 0.0],[1.0, 0.0]])
975        assert allclose(out_dict['attributelist']['elevation'], [10.0, 10.4])
976        assert allclose(out_dict['attributelist']['brightness'], [10.0, 10.4])
977 
978    def test_extent_point_atts(self):
979       
980        dict = {}
981        att_dict = {}
982        dict['pointlist'] = array([[1.0, 10.0],[0.0, 1.0],[10.0, -10.0]])
983        att_dict['elevation'] = array([30.0, 0.0, 10.4])
984        att_dict['brightness'] = array([10.0, 0.0, 10.4])
985        dict['attributelist'] = att_dict
986        out_dict = extent_point_atts(dict)
987       
988        #print "out_dict['pointlist']",out_dict #['pointlist']
989        assert allclose(out_dict['pointlist'],[[0.0, -10.0],[10.0, -10.0],
990                                               [10.0,10.0],[0.0, 10.0]])
991
992        self.failUnless(dict['attributelist']  == {},
993                         'test_extent_point_atts failed. Test 1')
994       
995    def test_reduce_pts(self):
996        dict = {}
997        att_dict = {}
998        dict['pointlist'] = array([[1.0, 0.0],[0.0, 1.0],[1.0, 0.0]])
999        att_dict['elevation'] = array([10.0, 0.0, 10.4])
1000        att_dict['brightness'] = array([10.0, 0.0, 10.4])
1001        dict['attributelist'] = att_dict
1002       
1003        inFileName = tempfile.mktemp(".pts")
1004        export_points_file(inFileName, dict)
1005       
1006        outFileName = tempfile.mktemp(".pts")
1007       
1008        dict2 = reduce_pts(inFileName,outFileName, 1 )
1009        os.remove(inFileName)
1010
1011        dict2 = import_points_file(outFileName)
1012        os.remove(outFileName)
1013        #print "dict2",dict2
1014       
1015        assert allclose(dict2['pointlist'],[[1.0, 0.0]])
1016        assert allclose(dict2['attributelist']['elevation'], [10.0])
1017        assert allclose(dict2['attributelist']['brightness'], [10.0])
1018       
1019    def test_produce_half_point_files(self):
1020        dict = {}
1021        att_dict = {}
1022        dict['pointlist'] = array([[1.0, 0.0],[0.0, 1.0],[1.0, 0.0]])
1023        att_dict['elevation'] = array([10.0, 0.0, 10.4])
1024        att_dict['brightness'] = array([10.0, 0.0, 10.4])
1025        dict['attributelist'] = att_dict
1026       
1027        inFileName = tempfile.mktemp(".pts")
1028        export_points_file(inFileName, dict)
1029       
1030        outFileName = tempfile.mktemp(".pts")
1031        delimiter = '_p'
1032        outfiles = produce_half_point_files(inFileName, 1,
1033                                            delimiter, verbose = False )
1034        os.remove(inFileName)
1035        root, ext = splitext(inFileName)
1036        outFileName = root + delimiter + ext
1037        #print "outFileName",outfiles 
1038        dict2 = import_points_file(outfiles[1])
1039        for file in outfiles:
1040            #print "del file",file
1041            os.remove(file)
1042       
1043        assert allclose(dict2['pointlist'],[[1.0, 0.0]])
1044        assert allclose(dict2['attributelist']['elevation'], [10.0])
1045        assert allclose(dict2['attributelist']['brightness'], [10.0])
1046                     
1047#-------------------------------------------------------------
1048if __name__ == "__main__":
1049
1050    #suite = unittest.makeSuite(loadASCIITestCase,'test')
1051    suite = unittest.makeSuite(loadASCIITestCase,'test_writepts')
1052    runner = unittest.TextTestRunner(verbosity=0)
1053    runner.run(suite)
1054   
Note: See TracBrowser for help on using the repository browser.