source: anuga_core/source/anuga/coordinate_transforms/test_geo_reference.py @ 4391

Last change on this file since 4391 was 4391, checked in by duncan, 17 years ago

nit noy (small change)

File size: 13.9 KB
Line 
1#!/usr/bin/env python
2#
3
4import unittest
5import tempfile
6import os
7
8from geo_reference import *
9from Numeric import allclose,array
10
11# Ignore these warnings, since we still want to test .xya code.
12import warnings
13warnings.filterwarnings(action = 'ignore',
14                        message='.xya format is deprecated.  Please use .txt.',
15                        category=DeprecationWarning)
16
17warnings.filterwarnings(action = 'ignore',
18                        message='Text file format is moving to comma se',
19                        category=DeprecationWarning)
20
21
22class geo_referenceTestCase(unittest.TestCase):
23    def setUp(self):
24        pass
25       
26    def tearDown(self):
27        pass
28
29   
30   
31    def test_get_origin(self):
32        g = Geo_reference(56,1.9,1.9)
33        (z,x,y) = g.get_origin()
34
35        self.failUnless(z == g.get_zone(), ' failed')
36        self.failUnless(x == g.get_xllcorner(), ' failed')
37        self.failUnless(y == g.get_yllcorner(), ' failed') 
38       
39    def test_read_write_NetCDF(self):
40        from Scientific.IO.NetCDF import NetCDFFile
41        g = Geo_reference(56,1.9,1.9)
42        file_name = tempfile.mktemp(".geo_referenceTest")
43       
44        out_file = NetCDFFile(file_name, 'w')
45        g.write_NetCDF(out_file)
46        out_file.close()
47       
48        in_file = NetCDFFile(file_name, 'r')
49        new_g = Geo_reference(NetCDFObject=in_file)
50        in_file.close()
51        os.remove(file_name)
52
53        self.failUnless(g == new_g, 'test_read_write_NetCDF failed') 
54       
55    def test_read_NetCDFI(self):
56        # test if read_NetCDF
57        from Scientific.IO.NetCDF import NetCDFFile
58        g = Geo_reference(56,1.9,1.9)
59        file_name = tempfile.mktemp(".geo_referenceTest")
60       
61        outfile = NetCDFFile(file_name, 'w')
62        outfile.xllcorner = g.get_xllcorner() 
63        outfile.yllcorner =  g.get_yllcorner() 
64        outfile.zone = g.get_zone()
65        outfile.close()
66       
67        in_file = NetCDFFile(file_name, 'r')
68        new_g = Geo_reference(NetCDFObject=in_file)
69        in_file.close()
70        os.remove(file_name)
71
72        self.failUnless(g == new_g, ' failed')
73       
74    def test_read_write_ASCII(self):
75        from Scientific.IO.NetCDF import NetCDFFile
76        g = Geo_reference(56,1.9,1.9)
77        file_name = tempfile.mktemp(".geo_referenceTest")
78        fd = open(file_name,'w')
79        g.write_ASCII(fd)
80        fd.close()
81       
82        fd = open(file_name,'r')
83        new_g = Geo_reference(ASCIIFile=fd)
84        fd.close()
85        os.remove(file_name)
86
87        self.failUnless(g == new_g, 'test_read_write_ASCII failed') 
88   
89    def test_read_write_ASCII2(self):
90        from Scientific.IO.NetCDF import NetCDFFile
91        g = Geo_reference(56,1.9,1.9)
92        file_name = tempfile.mktemp(".geo_referenceTest")
93        fd = open(file_name,'w')
94        g.write_ASCII(fd)
95        fd.close()       
96        fd = open(file_name,'r')
97        line = fd.readline()
98        new_g = Geo_reference(ASCIIFile=fd, read_title=line)
99        fd.close()
100        os.remove(file_name)
101
102        self.failUnless(g == new_g, 'test_read_write_ASCII failed')
103       
104    def test_read_write_ASCII3(self):
105        from Scientific.IO.NetCDF import NetCDFFile
106        g = Geo_reference(56,1.9,1.9)
107        file_name = tempfile.mktemp(".geo_referenceTest")
108        fd = open(file_name,'w')
109        g.write_ASCII(fd)
110        fd.close()       
111        fd = open(file_name,'r')
112        line = fd.readline()
113        line = "fail !!"
114        try:
115            new_g = Geo_reference(ASCIIFile=fd, read_title=line)
116            fd.close()
117            os.remove(file_name)
118        except TitleError:
119            fd.close()
120            os.remove(file_name)
121        else:
122            self.failUnless(0 ==1,
123                        'bad text file did not raise error!')
124           
125    def test_change_points_geo_ref(self):
126        x = 433.0
127        y = 3.0
128        g = Geo_reference(56,x,y)
129        lofl = [[3.0,311.0], [677.0,6.0]]
130        new_lofl = g.change_points_geo_ref(lofl)
131        #print "lofl",lofl
132        #print "new_lofl",new_lofl
133
134        self.failUnless(type(new_lofl) == types.ListType, ' failed')
135        self.failUnless(type(new_lofl) == type(lofl), ' failed')
136        for point,new_point in map(None,lofl,new_lofl):
137            self.failUnless(point[0]-x==new_point[0], ' failed')
138            self.failUnless(point[1]-y==new_point[1], ' failed')
139         
140       
141    def test_change_points_geo_ref2(self):
142        x = 3.0
143        y = 543.0
144        g = Geo_reference(56,x,y)
145        lofl = [[3.0,388.0]]
146        new_lofl = g.change_points_geo_ref(lofl)
147        #print "lofl",lofl
148        #print "new_lofl",new_lofl
149
150        self.failUnless(type(new_lofl) == types.ListType, ' failed')
151        self.failUnless(type(new_lofl) == type(lofl), ' failed')
152        for point,new_point in map(None,lofl,new_lofl):
153            self.failUnless(point[0]-x==new_point[0], ' failed')
154            self.failUnless(point[1]-y==new_point[1], ' failed')
155       
156    def test_change_points_geo_ref3(self):
157        x = 3.0
158        y = 443.0
159        g = Geo_reference(56,x,y)
160        lofl = [3.0,345.0]
161        new_lofl = g.change_points_geo_ref(lofl)
162        #print "lofl",lofl
163        #print "new_lofl",new_lofl
164
165        self.failUnless(type(new_lofl) == types.ListType, ' failed')
166        self.failUnless(type(new_lofl) == type(lofl), ' failed')
167        for point,new_point in map(None,[lofl],new_lofl):
168            self.failUnless(point[0]-x==new_point[0], ' failed')
169            self.failUnless(point[1]-y==new_point[1], ' failed')
170       
171   
172    def test_change_points_geo_ref4(self):
173        x = 3.0
174        y = 443.0
175        g = Geo_reference(56,x,y)
176        lofl = array([[3.0,323.0], [6.0,645.0]])
177        new_lofl = g.change_points_geo_ref(lofl)
178        #print "4 lofl",lofl
179        #print "4 new_lofl",new_lofl
180
181        self.failUnless(type(new_lofl) == ArrayType, ' failed')
182        self.failUnless(type(new_lofl) == type(lofl), ' failed')
183        lofl[:,0] -= x
184        lofl[:,1] -= y
185        assert allclose(lofl,new_lofl)
186       
187    def test_change_points_geo_ref5(self):
188        x = 103.0
189        y = 3.0
190        g = Geo_reference(56,x,y)
191        lofl = array([[3.0,323.0]])
192
193       
194        #print "5 lofl before",lofl         
195        new_lofl = g.change_points_geo_ref(lofl.copy())
196        #print "5 lofl",lofl
197        #print "5 new_lofl",new_lofl
198
199        self.failUnless(type(new_lofl) == ArrayType, ' failed')
200        self.failUnless(type(new_lofl) == type(lofl), ' failed')
201
202
203        for point,new_point in map(None,lofl,new_lofl):
204            self.failUnless(point[0]-x==new_point[0], ' failed')
205            self.failUnless(point[1]-y==new_point[1], ' failed')
206       
207    def test_change_points_geo_ref6(self):
208        x = 53.0
209        y = 3.0
210        g = Geo_reference(56,x,y)
211        lofl = array([355.0,3.0])
212        new_lofl = g.change_points_geo_ref(lofl.copy())       
213        #print "lofl",lofl
214        #print "new_lofl",new_lofl
215
216        self.failUnless(type(new_lofl) == ArrayType, ' failed')
217        self.failUnless(type(new_lofl) == type(lofl), ' failed')
218        for point,new_point in map(None,[lofl],new_lofl):
219            self.failUnless(point[0]-x==new_point[0], ' failed')
220            self.failUnless(point[1]-y==new_point[1], ' failed')
221     
222    def test_change_points_geo_ref7(self):
223        x = 23.0
224        y = 3.0
225        point_x = 9.0
226        point_y = -60.0
227        g = Geo_reference(56,x,y)
228        points_geo_ref = Geo_reference(56,point_x,point_y)
229        lofl = [[3.0,30.0], [67.0,6.0]]
230        new_lofl = g.change_points_geo_ref(lofl,points_geo_ref=points_geo_ref)
231        #print "lofl",lofl
232        #print "new_lofl",new_lofl
233
234        self.failUnless(type(new_lofl) == types.ListType, ' failed')
235        self.failUnless(type(new_lofl) == type(lofl), ' failed')
236        for point,new_point in map(None,lofl,new_lofl):
237            self.failUnless(point[0]+point_x-x==new_point[0], ' failed')
238            self.failUnless(point[1]+point_y-y==new_point[1], ' failed')
239     
240
241    def test_get_absolute(self):
242        x = 7.0
243        y = 3.0
244       
245        g = Geo_reference(56,x,y)
246        lofl = [[3.0,34.0], [64.0,6.0]]
247        new_lofl = g.get_absolute(lofl)
248        #print "lofl",lofl
249        #print "new_lofl",new_lofl
250
251        self.failUnless(type(new_lofl) == types.ListType, ' failed')
252        self.failUnless(type(new_lofl) == type(lofl), ' failed')
253        for point,new_point in map(None,lofl,new_lofl):
254            self.failUnless(point[0]+x==new_point[0], ' failed')
255            self.failUnless(point[1]+y==new_point[1], ' failed')
256
257           
258        g = Geo_reference()
259        lofl = [[3.0,34.0], [64.0,6.0]]
260        new_lofl = g.get_absolute(lofl)
261        #print "lofl",lofl
262        #print "new_lofl",new_lofl
263
264        self.failUnless(type(new_lofl) == types.ListType, ' failed')
265        self.failUnless(type(new_lofl) == type(lofl), ' failed')
266        for point,new_point in map(None,lofl,new_lofl):
267            self.failUnless(point[0]==new_point[0], ' failed')
268            self.failUnless(point[1]==new_point[1], ' failed')
269           
270    def test_is_absolute(self):
271       
272        g = Geo_reference(34,0,0)
273        points = [[3.0,34.0], [64.0,6.0]]
274
275        assert g.is_absolute()
276
277        g = Geo_reference(34,7,-6)
278        assert not g.is_absolute()       
279
280                       
281    def test___cmp__(self):
282        g = Geo_reference(56,1.9,1.9,)
283        new_g = Geo_reference(56,1.9,1.9)
284     
285        self.failUnless(g == new_g, 'test___cmp__ failed')   
286
287
288    def test_reconcile(self):
289        g1 = Geo_reference(56,2,5)
290        g2 = Geo_reference(50,4,5)
291        g3 = Geo_reference(50,66,6)       
292        g_default = Geo_reference()               
293
294
295        g2.reconcile_zones(g3)
296        assert g2.get_zone() == g3.get_zone()
297
298        g_default.reconcile_zones(g3)
299        assert g_default.get_zone() == g3.get_zone()
300
301        g_default = Geo_reference()               
302        g3.reconcile_zones(g_default)
303        assert g_default.get_zone() == g3.get_zone()               
304
305        try:
306            g1.reconcile_zones(g2)
307        except:
308            pass
309        else:
310            msg = 'Should have raised an exception'
311            raise msg
312 
313    def test_bad_ASCII_title(self):     
314 # create an .xya file
315        point_file = tempfile.mktemp(".xya")
316        fd = open(point_file,'w')
317        fd.write("# hey! \n")
318        fd.close()
319       
320        fd = open(point_file,'r')
321        #
322        #new_g = Geo_reference(ASCIIFile=fd)
323        try:
324            new_g = Geo_reference(ASCIIFile=fd)
325            fd.close()
326            os.remove(point_file)
327        except TitleError:
328            fd.close()
329            os.remove(point_file)
330        else:
331            self.failUnless(0 ==1,
332                        'bad text file did not raise error!')
333            os.remove(point_file)
334
335    def test_read_write_ASCII_test_and_fail(self):
336        from Scientific.IO.NetCDF import NetCDFFile
337
338        # This is to test a fail
339        g = Geo_reference(56,1.9,1.9)
340        file_name = tempfile.mktemp(".geo_referenceTest")
341        fd = open(file_name,'w')
342        g.write_ASCII(fd)
343        fd.close()       
344        fd = open(file_name,'r')
345        line = fd.readline()
346        line = " #Geo"
347        try:
348            new_g = Geo_reference(ASCIIFile=fd, read_title=line)
349            fd.close()
350            os.remove(file_name)
351        except TitleError:
352            fd.close()
353            os.remove(file_name)
354        else:
355            self.failUnless(0 ==1,
356                        'bad text file did not raise error!')
357
358        # this tests a pass
359        g = Geo_reference(56,1.9,1.9)
360        file_name = tempfile.mktemp(".geo_referenceTest")
361        fd = open(file_name,'w')
362        g.write_ASCII(fd)
363        fd.close()
364       
365        fd = open(file_name,'r')
366        line = fd.readline()
367        line = "#geo_yeah"
368        new_g = Geo_reference(ASCIIFile=fd, read_title=line)
369        fd.close()
370        os.remove(file_name)
371
372        self.failUnless(g == new_g, 'test_read_write_ASCII failed')
373       
374        # this tests a pass
375        g = Geo_reference(56,1.9,1.9)
376        file_name = tempfile.mktemp(".geo_referenceTest")
377        fd = open(file_name,'w')
378        g.write_ASCII(fd)
379        fd.close()
380       
381        fd = open(file_name,'r')
382        line = fd.readline()
383        line = "#geo crap"
384        new_g = Geo_reference(ASCIIFile=fd, read_title=line)
385        fd.close()
386        os.remove(file_name)
387
388        self.failUnless(g == new_g, 'test_read_write_ASCII failed')
389       
390    def xxtest_good_title(self):     
391 # create an .xya file
392        point_file = tempfile.mktemp(".xya")
393        fd = open(point_file,'w')
394        fd.write("#Geo crap \n 56\n ")
395        fd.close()
396       
397        fd = open(point_file,'r')
398        #
399        #new_g = Geo_reference(ASCIIFile=fd)
400        try:
401            new_g = Geo_reference(ASCIIFile=fd)
402            fd.close()
403            os.remove(point_file)
404        except TitleError:
405            fd.close()
406            os.remove(point_file)
407        else:
408            self.failUnless(0 ==1,
409                        'bad text file did not raise error!')
410            os.remove(point_file)
411
412    def test_error_message_ShapeError(self):
413       
414        new_g = Geo_reference()
415        try:
416            new_g.get_absolute((8.9, 7.8, 9.0)) 
417        except ShapeError:
418            pass
419        else:
420            self.failUnless(0 ==1,
421                        'bad shape did not raise error!')
422            os.remove(point_file)
423           
424        new_g = Geo_reference()
425        try:
426            new_g.get_absolute(((8.9, 7.8, 9.0))) 
427        except ShapeError:
428            pass
429        else:
430            self.failUnless(0 ==1,
431                        'bad shape did not raise error!')
432            os.remove(point_file)
433       
434#-------------------------------------------------------------
435if __name__ == "__main__":
436
437    suite = unittest.makeSuite(geo_referenceTestCase,'test')
438    runner = unittest.TextTestRunner() #verbosity=2)
439    runner.run(suite)
440   
Note: See TracBrowser for help on using the repository browser.