Beispiel #1
0
class TestLRManager(unittest.TestCase):
    def setUp(self):
        self.output = Raster('../../examples/multifact.tif')
        #~ [1,1,3]
        #~ [3,2,1]
        #~ [0,3,1]
        self.output.resetMask([0])
        self.state = self.output
        self.factors = [
            Raster('../../examples/sites.tif'),
            Raster('../../examples/sites.tif')
        ]
        #~ [1,2,1],
        #~ [1,2,1],
        #~ [0,1,2]

        self.output1 = Raster('../../examples/data.tif')
        self.state1 = self.output1
        self.factors1 = [Raster('../../examples/fact16.tif')]

    def test_LR(self):
        #~ data = [
        #~ [3.0, 1.0, 3.0],
        #~ [3.0, 1.0, 3.0],
        #~ [0,   3.0, 1.0]
        #~ ]
        #~ result = np.ma.array(data = data, mask = (data==0))

        lr = LR(ns=0)  # 3-class problem
        lr.setState(self.state)
        lr.setFactors(self.factors)
        lr.setOutput(self.output)
        lr.setTrainingData()
        lr.train()
        predict = lr.getPrediction(self.state, self.factors)
        predict = predict.getBand(1)
        assert_array_equal(predict, self.output.getBand(1))

        lr = LR(ns=1)  # Two-class problem (it's because of boundary effect)
        lr.setState(self.state1)
        lr.setFactors(self.factors1)
        lr.setOutput(self.output1)
        lr.setTrainingData()
        lr.train()
        predict = lr.getPrediction(self.state1,
                                   self.factors1,
                                   calcTransitions=True)
        predict = predict.getBand(1)
        self.assertEquals(predict.dtype, np.uint8)
        data = [
            [0.0, 0.0, 0.0, 0.0],
            [0.0, 1.0, 2.0, 0.0],
            [0.0, 2.0, 2.0, 0.0],
            [0.0, 0.0, 0.0, 0.0],
        ]
        result = np.ma.array(data=data, mask=(data == 0))
        assert_array_equal(predict, result)

        # Confidence is zero
        confid = lr.getConfidence()
        self.assertEquals(confid.getBand(1).dtype, np.uint8)

        # Transition Potentials
        potentials = lr.getTransitionPotentials()
        cats = self.output.getBandGradation(1)
        for cat in [1.0, 2.0]:
            map = potentials[cat]
            self.assertEquals(map.getBand(1).dtype, np.uint8)
Beispiel #2
0
class TestMlpManager (unittest.TestCase):
    def setUp(self):
        self.factors = [Raster('../../examples/multifact.tif')]
        self.output = Raster('../../examples/sites.tif')
        #~ sites.tif is 1-band 3x3 raster:
            #~ [1,2,1],
            #~ [1,2,1],
            #~ [0,1,2]

        self.factors2 = [Raster('../../examples/multifact.tif'), Raster('../../examples/multifact.tif')]
        self.factors3 = [Raster('../../examples/two_band.tif')]
        self.factors4 = [Raster('../../examples/two_band.tif'), Raster('../../examples/multifact.tif')]

        self.output1  = Raster('../../examples/data.tif')
        self.state1   = self.output1
        self.factors1 = [Raster('../../examples/fact16.tif')]

    def test_MlpManager(self):
        mng = MlpManager(ns=1)
        mng.createMlp(self.output, self.factors2, self.output, [10])
        assert_array_equal(mng.getMlpTopology(), [2*9 + 2*9, 10, 3])

        mng = MlpManager()
        mng.createMlp(self.output, self.factors, self.output, [10])
        assert_array_equal(mng.getMlpTopology(), [2*1 + 1*1, 10, 3])

    def test_setTrainingData(self):
        mng = MlpManager()
        mng.createMlp(self.output, self.factors, self.output, [10])
        stat = self.factors[0].getBandStat(1) # mean & std
        m,s = stat['mean'], stat['std']
        mng.setTrainingData(self.output, self.factors, self.output, shuffle=False)

        min, max = mng.sigmin, mng.sigmax
        data = np.array(
            [
                ((0,3), [0, 1], (1.0-m)/s, [min,  max, min]),
                ((1,3), [0, 0], (1.0-m)/s, [min,  min, max]),
                ((2,3), [0, 1], (3.0-m)/s, [min,  max, min]),
                ((0,2), [0, 1], (3.0-m)/s, [min,  max, min]),
                ((1,2), [0, 0], (2.0-m)/s, [min,  min, max]),
                ((2,2), [0, 1], (1.0-m)/s, [min,  max, min]),
                ((0,1), [1, 0], (0.0-m)/s, [max,  min, min]),
                ((1,1), [0, 1], (3.0-m)/s, [min,  max, min]),
                ((2,1), [0, 0], (1.0-m)/s, [min,  min, max]),
            ],
            dtype=[('coords', float, 2),('state', float, (2,)), ('factors', float, (1,)), ('output', float, 3)]
        )
        self.assertEqual(mng.data.shape, (9,))
        for i in range(len(data)):
            assert_array_equal(data[i]['coords'], mng.data[i]['coords'])
            assert_array_equal(data[i]['factors'], mng.data[i]['factors'])
            assert_array_equal(data[i]['output'], mng.data[i]['output'])

        # two input rasters
        mng = MlpManager(ns=1)
        mng.createMlp(self.output, self.factors2, self.output, [10])
        mng.setTrainingData(self.output, self.factors2, self.output)
        data = [
            {
            'factors': (np.array([ 1.,  1.,  3.,  3.,  2.,  1.,  0.,  3.,  1.,
                                1.,  1.,  3.,  3.,  2.,  1.,  0.,  3.,  1.]) - stat['mean'])/stat['std'],
            'output': np.array([min, min,  max]),
            'state': np.array([0,1,  0,0,  0,1,   0,1,  0,0,  0,1,   1,0,  0,1,  0,0])
            }
        ]
        self.assertEqual(mng.data.shape, (1,))
        assert_array_equal(data[0]['factors'], mng.data[0]['factors'])
        assert_array_equal(data[0]['output'], mng.data[0]['output'])
        assert_array_equal(data[0]['state'], mng.data[0]['state'])

        # Multiband input
        mng = MlpManager(ns=1)
        mng.createMlp(self.output, self.factors3, self.output, [10])
        stat1 = self.factors3[0].getBandStat(1) # mean & std
        m1,s1 = stat1['mean'], stat1['std']
        stat2 = self.factors3[0].getBandStat(2) # mean & std
        m2,s2 = stat2['mean'], stat2['std']
        mng.setTrainingData(self.output, self.factors3, self.output)

        data = [
            {
            'factors': np.array([ (1.-m1)/s1,  (2.-m1)/s1,  (1.-m1)/s1,  (1.-m1)/s1,  (2.-m1)/s1,  (1.-m1)/s1,  (0.-m1)/s1,  (1.-m1)/s1,  (2.-m1)/s1,
                                (1.-m2)/s2,  (1.-m2)/s2,  (3.-m2)/s2,  (3.-m2)/s2,  (2.-m2)/s2,  (1.-m2)/s2,  (0.-m2)/s2,  (3.-m2)/s2,  (1.-m2)/s2]),
            'output': np.array([min, min,  max]),
            'state': np.array([0,1,  0,0,  0,1,   0,1,  0,0,  0,1,   1,0,  0,1,  0,0])
            }
        ]
        self.assertEqual(mng.data.shape, (1,))
        assert_array_equal(data[0]['factors'], mng.data[0]['factors'])
        assert_array_equal(data[0]['output'], mng.data[0]['output'])
        assert_array_equal(data[0]['state'], mng.data[0]['state'])

        # Complex case:
        mng = MlpManager(ns=1)
        mng.createMlp(self.output, self.factors4, self.output, [10])
        stat1 = self.factors4[0].getBandStat(1) # mean & std
        m1,s1 = stat1['mean'], stat1['std']
        stat2 = self.factors4[0].getBandStat(2) # mean & std
        m2,s2 = stat2['mean'], stat2['std']
        stat3 = self.factors4[1].getBandStat(1)
        m3,s3 = stat3['mean'], stat2['std']

        mng.setTrainingData(self.output, self.factors4, self.output)

        data = [
            {
            'factors': np.array([ (1.-m1)/s1,  (2.-m1)/s1,  (1.-m1)/s1,  (1.-m1)/s1,  (2.-m1)/s1,  (1.-m1)/s1,  (0.-m1)/s1,  (1.-m1)/s1,  (2.-m1)/s1,
                                (1.-m2)/s2,  (1.-m2)/s2,  (3.-m2)/s2,  (3.-m2)/s2,  (2.-m2)/s2,  (1.-m2)/s2,  (0.-m2)/s2,  (3.-m2)/s2,  (1.-m2)/s2,
                                (1.-m3)/s3,  (1.-m3)/s3,  (3.-m3)/s3,  (3.-m3)/s3,  (2.-m3)/s3,  (1.-m3)/s3,  (0.-m3)/s3,  (3.-m3)/s3,  (1.-m3)/s3]),
            'output': np.array([min, min,  max]),
            'state': np.array([0,1,  0,0,  0,1,   0,1,  0,0,  0,1,   1,0,  0,1,  0,0])
            }
        ]
        self.assertEqual(mng.data.shape, (1,))
        assert_array_equal(data[0]['factors'], mng.data[0]['factors'])
        assert_array_equal(data[0]['output'], mng.data[0]['output'])
        assert_array_equal(data[0]['state'], mng.data[0]['state'])

    def test_train(self):
        mng = MlpManager()
        mng.createMlp(self.output, self.factors, self.output, [10])
        mng.setTrainingData(self.output, self.factors, self.output)

        mng.train(1, valPercent=50)
        val = mng.getMinValError()
        tr  = mng.getTrainError()
        mng.train(20, valPercent=50, continue_train=True)
        self.assertGreaterEqual(val, mng.getMinValError())

        mng = MlpManager(ns=1)
        mng.createMlp(self.state1, self.factors1, self.output1, [10])
        mng.setTrainingData(self.state1, self.factors1, self.output1)
        mng.train(1, valPercent=20)
        predict = mng.getPrediction(self.state1, self.factors1)
        mask = predict.getBand(1).mask

        self.assertTrue(not all(mask.flatten()))

    def test_predict(self):
        mng = MlpManager()
        mng.createMlp(self.output, self.factors, self.output, [10])
        weights = mng.copyWeights()

        # Set weights=0
        # then the output must be sigmoid(0)
        layers = []
        for layer in weights:
            shape = layer.shape
            layers.append(np.zeros(shape))
        mng.setMlpWeights(layers)
        mng._predict(self.output, self.factors)


        # Prediction ( the output must be sigmoid(0) )
        raster = mng.getPrediction(self.output, self.factors, calcTransitions=True)
        assert_array_equal(raster.getBand(1), sigmoid(0)*np.ones((3,3)))
        # Confidence is zero
        confid = mng.getConfidence()
        self.assertEquals(confid.getBand(1).dtype, np.uint8)
        assert_array_equal(confid.getBand(1), np.zeros((3,3)))
        # Transition Potentials (is (sigmoid(0) - sigmin)/sigrange )
        potentials = mng.getTransitionPotentials()
        cats = self.output.getBandGradation(1)
        for cat in cats:
            map = potentials[cat]
            self.assertEquals(map.getBand(1).dtype, np.uint8)
            assert_array_equal(map.getBand(1), 50*np.ones((3,3)))
Beispiel #3
0
 def test_create(self):
     raster = Raster()
     raster.create([self.data1], geodata=self.r1.getGeodata())
     self.assertTrue(raster.geoDataMatch(self.r1))
     self.assertEqual(raster.getBandsCount(), 1)
     self.assertEqual(set(raster.getBandGradation(1)), set([0, 1, 2, 3]))
Beispiel #4
0
class TestRaster(unittest.TestCase):
    def setUp(self):
        self.r1 = Raster('examples/multifact.tif')
        self.r2 = Raster('examples/sites.tif')
        self.r3 = Raster('examples/two_band.tif')

        # r1
        data1 = np.array([[1, 1, 3], [3, 2, 1], [0, 3, 1]])
        # r2
        data2 = np.array([[1, 2, 1], [1, 2, 1], [0, 1, 2]])
        mask = [[False, False, False], [False, False, False],
                [False, False, False]]
        self.data1 = ma.array(data=data1, mask=mask)
        self.data2 = ma.array(data=data2, mask=mask)

    def test_RasterInit(self):
        self.assertEqual(self.r1.getBandsCount(), 1)
        band = self.r1.getBand(1)
        shape = band.shape
        x = self.r1.getXSize()
        y = self.r1.getYSize()
        self.assertEqual(shape, (x, y))

        self.assertEqual(self.r2.getBandsCount(), 1)
        band = self.r2.getBand(1)
        assert_array_equal(band, self.data2)

        self.assertTrue(self.r1.geoDataMatch(self.r2))

        self.assertTrue(self.r1.isMetricProj())

    def test_create(self):
        raster = Raster()
        raster.create([self.data1], geodata=self.r1.getGeodata())
        self.assertTrue(raster.geoDataMatch(self.r1))
        self.assertEqual(raster.getBandsCount(), 1)
        self.assertEqual(set(raster.getBandGradation(1)), set([0, 1, 2, 3]))

    def test_roundBands(self):
        rast = Raster('examples/multifact.tif')
        rast.bands = rast.bands * 0.1
        rast.roundBands()
        answer = [[[
            0,
            0,
            0,
        ], [0, 0, 0], [0, 0, 0]]]
        assert_array_equal(answer, rast.bands)

        rast = Raster('examples/multifact.tif')
        rast.bands = rast.bands * 1.1
        rast.roundBands(decimals=1)
        answer = np.array([[[1.1, 1.1, 3.3], [3.3, 2.2, 1.1], [0.0, 3.3,
                                                               1.1]]])
        assert_array_equal(answer, rast.bands)

    def test_isContinues(self):
        rast = Raster('examples/multifact.tif')
        self.assertFalse(rast.isCountinues(bandNo=1))
        rast = Raster('examples/dist_roads.tif')
        self.assertTrue(rast.isCountinues(bandNo=1))

    def test_getBandStat(self):
        stat = self.r1.getBandStat(1)
        self.assertAlmostEqual(stat['mean'], 15.0 / 9)
        self.assertAlmostEqual(stat['std'], np.sqrt(10.0 / 9))

    def test_normalize(self):
        multifact = [
            [1, 1, 3],
            [3, 2, 1],
            [0, 3, 1],
        ]

        # Normalize using std and mean
        r1 = Raster('examples/multifact.tif')
        r1.normalize()
        r1.denormalize()
        assert_array_equal(r1.getBand(1), multifact)

        # Normalize using min and max
        r1 = Raster('examples/multifact.tif')
        r1.normalize(mode='maxmin')
        r1.denormalize()
        assert_array_equal(r1.getBand(1), multifact)

        # Two normalization procedures
        r1 = Raster('examples/multifact.tif')
        r1.normalize()
        r1.normalize(mode='maxmin')
        r1.denormalize()
        assert_array_equal(r1.getBand(1), multifact)
        r1 = Raster('examples/multifact.tif')
        r1.normalize(mode='maxmin')
        r1.normalize()
        r1.denormalize()
        assert_array_equal(r1.getBand(1), multifact)

    def test_getNeighbours(self):
        neighbours = self.r2.getNeighbours(row=1, col=0, size=0)
        self.assertEqual(neighbours, [[1]])

        neighbours = self.r2.getNeighbours(row=1, col=1, size=1)
        assert_array_equal(neighbours, [self.data2])

        neighbours = self.r3.getNeighbours(row=1, col=1, size=1)
        assert_array_equal(neighbours, [self.data2, self.data1])

        # Check pixel on the raster bound and nonzero neighbour size
        self.assertRaises(ProviderError,
                          self.r2.getNeighbours,
                          col=1,
                          row=0,
                          size=1)
        self.assertRaises(ProviderError,
                          self.r2.getNeighbours,
                          col=1,
                          row=1,
                          size=2)

    def test_geodata(self):
        geodata = self.r1.getGeodata()
        self.r1.setGeoData(geodata)
        geodata['xSize'] = geodata['xSize'] + 10
        self.assertRaises(ProviderError, self.r1.setGeoData, geodata=geodata)

        self.assertTrue(self.r1.geoDataMatch(self.r1))
        self.assertTrue(
            self.r1.geoDataMatch(raster=None, geodata=self.r1.getGeodata()))

        self.assertTrue(self.r1.geoTransformMatch(self.r1))
        self.assertTrue(
            self.r1.geoTransformMatch(raster=None,
                                      geodata=self.r1.getGeodata()))

    def test_save(self):
        try:
            filename = 'temp.tiff'
            self.r1.save(filename)
            r2 = Raster(filename)
            self.assertEqual(r2.get_dtype(), self.r1.get_dtype())
            self.assertEqual(r2.getBandsCount(), self.r1.getBandsCount())
            for i in range(r2.getBandsCount()):
                assert_array_equal(r2.getBand(i + 1), self.r1.getBand(i + 1))
        finally:
            os.remove(filename)

    def test_getBandGradation(self):
        self.assertEqual(set(self.r1.getBandGradation(1)), set([0, 1, 2, 3]))
Beispiel #5
0
class TestLRManager (unittest.TestCase):
    def setUp(self):
        self.output  = Raster('../../examples/multifact.tif')
            #~ [1,1,3]
            #~ [3,2,1]
            #~ [0,3,1]
        self.output.resetMask([0])
        self.state   = self.output
        self.factors = [Raster('../../examples/sites.tif'), Raster('../../examples/sites.tif')]
            #~ [1,2,1],
            #~ [1,2,1],
            #~ [0,1,2]


        self.output1  = Raster('../../examples/data.tif')
        self.state1   = self.output1
        self.factors1 = [Raster('../../examples/fact16.tif')]

    def test_LR(self):
        #~ data = [
            #~ [3.0, 1.0, 3.0],
            #~ [3.0, 1.0, 3.0],
            #~ [0,   3.0, 1.0]
        #~ ]
        #~ result = np.ma.array(data = data, mask = (data==0))

        lr = LR(ns=0)   # 3-class problem
        lr.setState(self.state)
        lr.setFactors(self.factors)
        lr.setOutput(self.output)
        lr.setTrainingData()
        lr.train()
        predict = lr.getPrediction(self.state, self.factors)
        predict = predict.getBand(1)
        assert_array_equal(predict, self.output.getBand(1))

        lr = LR(ns=1) # Two-class problem (it's because of boundary effect)
        lr.setState(self.state1)
        lr.setFactors(self.factors1)
        lr.setOutput(self.output1)
        lr.setTrainingData()
        lr.train()
        predict = lr.getPrediction(self.state1, self.factors1, calcTransitions=True)
        predict = predict.getBand(1)
        self.assertEquals(predict.dtype, np.uint8)
        data = [
            [0.0, 0.0, 0.0, 0.0],
            [0.0, 1.0, 2.0, 0.0],
            [0.0, 2.0, 2.0, 0.0],
            [0.0, 0.0, 0.0, 0.0],
        ]
        result = np.ma.array(data = data, mask = (data==0))
        assert_array_equal(predict, result)

        # Confidence is zero
        confid = lr.getConfidence()
        self.assertEquals(confid.getBand(1).dtype, np.uint8)

        # Transition Potentials
        potentials = lr.getTransitionPotentials()
        cats = self.output.getBandGradation(1)
        for cat in [1.0, 2.0]:
            map = potentials[cat]
            self.assertEquals(map.getBand(1).dtype, np.uint8)
Beispiel #6
0
 def test_create(self):
     raster = Raster()
     raster.create([self.data1], geodata=self.r1.getGeodata())
     self.assertTrue(raster.geoDataMatch(self.r1))
     self.assertEqual(raster.getBandsCount(), 1)
     self.assertEqual(set(raster.getBandGradation(1)), set([0, 1, 2, 3]))
Beispiel #7
0
class TestRaster (unittest.TestCase):
    def setUp(self):
        self.r1 = Raster('examples/multifact.tif')
        self.r2 = Raster('examples/sites.tif')
        self.r3 = Raster('examples/two_band.tif')

        # r1
        data1 = np.array(
            [
                [1,1,3],
                [3,2,1],
                [0,3,1]
            ])
        # r2
        data2 = np.array(
            [
                [1,2,1],
                [1,2,1],
                [0,1,2]
            ])
        mask = [
            [False, False, False],
            [False, False, False],
            [False, False, False]
        ]
        self.data1 = ma.array(data=data1, mask=mask)
        self.data2 = ma.array(data=data2, mask=mask)

    def test_RasterInit(self):
        self.assertEqual(self.r1.getBandsCount(), 1)
        band = self.r1.getBand(1)
        shape = band.shape
        x = self.r1.getXSize()
        y = self.r1.getYSize()
        self.assertEqual(shape, (x,y))

        self.assertEqual(self.r2.getBandsCount(), 1)
        band = self.r2.getBand(1)
        assert_array_equal(band, self.data2)

        self.assertTrue(self.r1.geoDataMatch(self.r2))

        self.assertTrue(self.r1.isMetricProj())

    def test_create(self):
        raster = Raster()
        raster.create([self.data1], geodata=self.r1.getGeodata())
        self.assertTrue(raster.geoDataMatch(self.r1))
        self.assertEqual(raster.getBandsCount(), 1)
        self.assertEqual(set(raster.getBandGradation(1)), set([0, 1, 2, 3]))


    def test_roundBands(self):
        rast = Raster('examples/multifact.tif')
        rast.bands = rast.bands*0.1
        rast.roundBands()
        answer = [[[ 0,  0,  0,],
          [ 0,  0,  0],
          [ 0, 0,  0]]]
        assert_array_equal(answer, rast.bands)

        rast = Raster('examples/multifact.tif')
        rast.bands = rast.bands*1.1
        rast.roundBands(decimals=1)
        answer = np.array(
            [[
                [1.1,1.1,3.3],
                [3.3,2.2,1.1],
                [0.0,3.3,1.1]
            ]])
        assert_array_equal(answer, rast.bands)

    def test_isContinues(self):
        rast = Raster('examples/multifact.tif')
        self.assertFalse(rast.isCountinues(bandNo=1))
        rast = Raster('examples/dist_roads.tif')
        self.assertTrue(rast.isCountinues(bandNo=1))


    def test_getBandStat(self):
        stat = self.r1.getBandStat(1)
        self.assertAlmostEqual(stat['mean'], 15.0/9)
        self.assertAlmostEqual(stat['std'], np.sqrt(10.0/9))

    def test_normalize(self):
        multifact = [
            [1,1,3],
            [3,2,1],
            [0,3,1],
        ]

        # Normalize using std and mean
        r1 = Raster('examples/multifact.tif')
        r1.normalize()
        r1.denormalize()
        assert_array_equal(r1.getBand(1), multifact)

        # Normalize using min and max
        r1 = Raster('examples/multifact.tif')
        r1.normalize(mode='maxmin')
        r1.denormalize()
        assert_array_equal(r1.getBand(1), multifact)

        # Two normalization procedures
        r1 = Raster('examples/multifact.tif')
        r1.normalize()
        r1.normalize(mode='maxmin')
        r1.denormalize()
        assert_array_equal(r1.getBand(1), multifact)
        r1 = Raster('examples/multifact.tif')
        r1.normalize(mode='maxmin')
        r1.normalize()
        r1.denormalize()
        assert_array_equal(r1.getBand(1), multifact)


    def test_getNeighbours(self):
        neighbours = self.r2.getNeighbours(row=1,col=0, size=0)
        self.assertEqual(neighbours, [[1]])

        neighbours = self.r2.getNeighbours(row=1,col=1, size=1)
        assert_array_equal(neighbours, [self.data2])

        neighbours = self.r3.getNeighbours(row=1,col=1, size=1)
        assert_array_equal(neighbours, [self.data2, self.data1])

        # Check pixel on the raster bound and nonzero neighbour size
        self.assertRaises(ProviderError, self.r2.getNeighbours, col=1, row=0, size=1)
        self.assertRaises(ProviderError, self.r2.getNeighbours, col=1, row=1, size=2)

    def test_geodata(self):
        geodata = self.r1.getGeodata()
        self.r1.setGeoData(geodata)
        geodata['xSize'] = geodata['xSize'] + 10
        self.assertRaises(ProviderError, self.r1.setGeoData, geodata=geodata)

        self.assertTrue(self.r1.geoDataMatch(self.r1))
        self.assertTrue(self.r1.geoDataMatch(raster=None, geodata=self.r1.getGeodata()))

        self.assertTrue(self.r1.geoTransformMatch(self.r1))
        self.assertTrue(self.r1.geoTransformMatch(raster=None, geodata=self.r1.getGeodata()))

    def test_save(self):
        try:
            filename = 'temp.tiff'
            self.r1.save(filename)
            r2 = Raster(filename)
            self.assertEqual(r2.get_dtype(), self.r1.get_dtype())
            self.assertEqual(r2.getBandsCount(), self.r1.getBandsCount())
            for i in range(r2.getBandsCount()):
                assert_array_equal(r2.getBand(i+1), self.r1.getBand(i+1))
        finally:
            os.remove(filename)

    def test_getBandGradation(self):
        self.assertEqual(set(self.r1.getBandGradation(1)), set([0, 1, 2, 3]))