Esempio n. 1
0
 def test_setattr(self):
     dat = AttrArray(np.random.rand(10),name='randvals')
     # add a custom attribute:
     dat.custom = 'attribute'
     self.assertEquals(dat.custom,'attribute')
     # _required_attrs is read only:
     self.assertRaises(AttributeError,dat.__setattr__,'_required_attrs','test')
Esempio n. 2
0
 def test_setattr(self):
     dat = AttrArray(np.random.rand(10), name='randvals')
     # add a custom attribute:
     dat.custom = 'attribute'
     self.assertEquals(dat.custom, 'attribute')
     # _required_attrs is read only:
     self.assertRaises(AttributeError, dat.__setattr__, '_required_attrs',
                       'test')
Esempio n. 3
0
    def test_pickle(self):
        # make sure we can pickle this thing
        dat = AttrArray(np.random.rand(10), name='randvals')
        # dump to string
        pstr = pickle.dumps(dat)

        # load to new variable
        dat2 = pickle.loads(pstr)

        # make sure data same
        assert_array_equal(dat, dat2)

        # make sure has attr and it's correct
        self.assertTrue(hasattr(dat2, '_attrs'))
        self.assertTrue(hasattr(dat2, 'name'))
        self.assertEquals(dat2.name, 'randvals')

        # make sure has required attr
        self.assertTrue(hasattr(dat2, '_required_attrs'))
Esempio n. 4
0
 def test_nanmean(self):
     arr = np.random.rand(10,10,10)
     dat = AttrArray(arr,name='randvals')
     # if there are no NaN's, mean and nanmean should give equal
     # results:
     self.assertEquals(dat.mean(),dat.nanmean())
     assert_array_almost_equal(dat.mean(0),dat.nanmean(0))
     self.assertEquals(dat.nanmean(0).name, 'randvals')
     assert_array_almost_equal(dat.mean(1),dat.nanmean(1))
     self.assertEquals(dat.nanmean(1).name, 'randvals')
     assert_array_almost_equal(dat.mean(2),dat.nanmean(2))
     self.assertEquals(dat.nanmean(2).name, 'randvals')
     # Now, make sure results are as expected with NaN present:
     arr[0,0,0] = np.nan
     dat = AttrArray(arr,name='randvals')
     self.assertEquals(dat[~np.isnan(dat)].mean(),dat.nanmean())
     for i in range(len(arr.shape)):
         tmp1 = dat.mean(i)
         tmp1[0,0] = 0
         tmp2 = dat.nanmean(i)
         tmp2[0,0] = 0
         assert_array_almost_equal(tmp1,tmp2)
         self.assertEquals(tmp2.name, 'randvals')
     arr[3,6,2] = np.nan
     dat = AttrArray(arr,name='randvals')
     self.assertEquals(dat[~np.isnan(dat)].mean(),dat.nanmean())
     tmp1 = dat.mean(0)
     tmp1[0,0] = 0
     tmp1[6,2] = 0
     tmp2 = dat.nanmean(0)
     tmp2[0,0] = 0
     tmp2[6,2] = 0
     assert_array_almost_equal(tmp1,tmp2)
     self.assertEquals(tmp2.name, 'randvals')
     tmp1 = dat.mean(1)
     tmp1[0,0] = 0
     tmp1[3,2] = 0
     tmp2 = dat.nanmean(1)
     tmp2[0,0] = 0
     tmp2[3,2] = 0
     assert_array_almost_equal(tmp1,tmp2)
     self.assertEquals(tmp2.name, 'randvals')
     tmp1 = dat.mean(2)
     tmp1[0,0] = 0
     tmp1[3,6] = 0
     tmp2 = dat.nanmean(2)
     tmp2[0,0] = 0
     tmp2[3,6] = 0
     assert_array_almost_equal(tmp1,tmp2)
     self.assertEquals(tmp2.name, 'randvals')
Esempio n. 5
0
 def test_nanmean(self):
     arr = np.random.rand(10, 10, 10)
     dat = AttrArray(arr, name='randvals')
     # if there are no NaN's, mean and nanmean should give equal
     # results:
     self.assertEquals(dat.mean(), dat.nanmean())
     assert_array_almost_equal(dat.mean(0), dat.nanmean(0))
     self.assertEquals(dat.nanmean(0).name, 'randvals')
     assert_array_almost_equal(dat.mean(1), dat.nanmean(1))
     self.assertEquals(dat.nanmean(1).name, 'randvals')
     assert_array_almost_equal(dat.mean(2), dat.nanmean(2))
     self.assertEquals(dat.nanmean(2).name, 'randvals')
     # Now, make sure results are as expected with NaN present:
     arr[0, 0, 0] = np.nan
     dat = AttrArray(arr, name='randvals')
     self.assertEquals(dat[~np.isnan(dat)].mean(), dat.nanmean())
     for i in range(len(arr.shape)):
         tmp1 = dat.mean(i)
         tmp1[0, 0] = 0
         tmp2 = dat.nanmean(i)
         tmp2[0, 0] = 0
         assert_array_almost_equal(tmp1, tmp2)
         self.assertEquals(tmp2.name, 'randvals')
     arr[3, 6, 2] = np.nan
     dat = AttrArray(arr, name='randvals')
     self.assertEquals(dat[~np.isnan(dat)].mean(), dat.nanmean())
     tmp1 = dat.mean(0)
     tmp1[0, 0] = 0
     tmp1[6, 2] = 0
     tmp2 = dat.nanmean(0)
     tmp2[0, 0] = 0
     tmp2[6, 2] = 0
     assert_array_almost_equal(tmp1, tmp2)
     self.assertEquals(tmp2.name, 'randvals')
     tmp1 = dat.mean(1)
     tmp1[0, 0] = 0
     tmp1[3, 2] = 0
     tmp2 = dat.nanmean(1)
     tmp2[0, 0] = 0
     tmp2[3, 2] = 0
     assert_array_almost_equal(tmp1, tmp2)
     self.assertEquals(tmp2.name, 'randvals')
     tmp1 = dat.mean(2)
     tmp1[0, 0] = 0
     tmp1[3, 6] = 0
     tmp2 = dat.nanmean(2)
     tmp2[0, 0] = 0
     tmp2[3, 6] = 0
     assert_array_almost_equal(tmp1, tmp2)
     self.assertEquals(tmp2.name, 'randvals')
Esempio n. 6
0
    def test_new(self):
        # test new instantiation (attributes are defined by kwargs)

        # instatiation with a numpy ndarray:
        shape = (10, )
        arr = np.random.random_sample(shape)
        dat_array = AttrArray(arr, name='randvals')
        self.assertTrue(dat_array.name == 'randvals')
        self.assertEquals(shape, dat_array.shape)
        self.assertTrue((dat_array == arr).all())
        # another instatioation with an ndarray, but this time with
        # dtype set:
        shape = (1, 2, 3, 4)
        arr = np.random.random_sample(shape)
        dat_array = AttrArray(arr, name='randvals', dtype=np.float32)
        self.assertTrue(dat_array.name == 'randvals')
        self.assertEquals(shape, dat_array.shape)
        # "almost" equal because of the casting to np.float32:
        assert_array_almost_equal(dat_array, arr)
        self.assertTrue(dat_array.dtype == np.float32)

        # # another ndarray, with copy = True vs. copy = False
        shape = (10, 9, 8, 7, 6, 1, 8)
        arr = np.random.random_sample(shape)
        dat_array = AttrArray(arr,
                              name='randvals',
                              test1=33,
                              test2='test',
                              copy=True)
        self.assertTrue(dat_array.name == 'randvals')
        self.assertTrue(dat_array.test1 == 33)
        self.assertTrue(dat_array.test2 == 'test')
        self.assertEquals(shape, dat_array.shape)
        assert_array_equal(dat_array, arr)
        dat_array[0] += 5
        # # "almost" equal because of slight inaccuracies in the the
        # # representation of floats:
        assert_array_almost_equal((dat_array[0] - 5), arr[0])
        dat_array = AttrArray(arr,
                              name='randvals',
                              test1=33,
                              test2='test',
                              copy=False)
        self.assertTrue(dat_array.name == 'randvals')
        self.assertTrue(dat_array.test1 == 33)
        self.assertTrue(dat_array.test2 == 'test')
        self.assertEquals(shape, dat_array.shape)
        self.assertTrue((dat_array == arr).all())
        dat_array[0] += 5
        assert_array_equal(dat_array[0], arr[0])

        # instantiation with a list:
        lst = range(10)
        dat_list = AttrArray(lst, name='range')
        self.assertTrue(dat_list.name == 'range')
        self.assertTrue((lst == dat_list).all())
        lst = [['a', 'b', 'c']]
        dat_list = AttrArray(lst, name='list')
        self.assertTrue(dat_list.name == 'list')
        self.assertTrue((lst == dat_list).all())
        lst = [[1, 2, 3], [4.5, 6, 7]]
        dat_list = AttrArray(lst, name='list')
        self.assertTrue(dat_list.name == 'list')
        self.assertTrue((lst == dat_list).all())

        # instantiation with a AttrArray:
        dat_attrarray = AttrArray(dat_array, name='attrarray')
        self.assertTrue(dat_attrarray.name == 'attrarray')
        dat_attrarray = AttrArray(dat_list, newname='attrarray', test=44)
        self.assertTrue(dat_attrarray.newname == 'attrarray')
        self.assertTrue(dat_attrarray.test == 44)
Esempio n. 7
0
 def test_method(self):
     # make sure ndarray methods work and return a new AttrArray
     # instance with the attributes intact
     dat = AttrArray(np.random.rand(10), name='randvals')
     sdat = np.sqrt(dat)
     self.assertEquals(sdat.name, 'randvals')
Esempio n. 8
0
 def test_getattr(self):
     dat = AttrArray(np.random.rand(10), name='randvals')
     self.assertEquals(dat.name, 'randvals')
Esempio n. 9
0
    def test_new(self):
        # should raise Error if dims contains non-Dim instances:
        self.assertRaises(AttributeError,DimArray,np.random.rand(5,10),
                          dims = np.arange(4))
        self.assertRaises(AttributeError,DimArray,np.random.rand(5,10),
                          dims=[Dim(range(5),name='freqs',unit='Hz'),
                                AttrArray(range(10),name='time',unit='sec')])
        self.assertRaises(AttributeError,DimArray,np.random.rand(5,10),
                          dims=[AttrArray(range(5),name='freqs',unit='Hz'),
                                Dim(range(10),name='time',unit='sec')])
 
        # should throw Error if dims do not match data shape:
        self.assertRaises(AttributeError,DimArray,np.random.rand(5,10),
                          dims=[Dim(range(10),name='freqs',unit='Hz'),
                                Dim(range(5),name='time',unit='sec')])
        self.assertRaises(AttributeError,DimArray,np.random.rand(5,10),
                          dims=[Dim(range(5),name='freqs',unit='Hz')])

        # should throw Error if 2 dims have the same name:
        self.assertRaises(AttributeError,DimArray,np.random.rand(10,5),
                          dims=[Dim(range(10),name='dim1',unit='Hz'),
                                Dim(range(5),name='dim1',unit='sec')])
        self.assertRaises(AttributeError,DimArray,np.random.rand(10,3,5),
                          dims=[Dim(range(10),name='dim1',unit='Hz'),
                                Dim(range(3),name='dim2',unit='Hz'),
                                Dim(range(5),name='dim1',unit='sec')])
        self.assertRaises(AttributeError,DimArray,np.random.rand(10,3,5),
                          dims=[Dim(range(10),name='dim1',unit='Hz'),
                                Dim(range(3),name='dim1',unit='Hz'),
                                Dim(range(5),name='dim1',unit='sec')])

        # should throw Error if a dim name is not a valid identifier:
        self.assertRaises(AttributeError,DimArray,np.random.rand(10,5),
                          dims=[Dim(range(10),name='dim1',unit='Hz'),
                                Dim(range(5),name='dim 2',unit='sec')])
        self.assertRaises(AttributeError,DimArray,np.random.rand(10,5),
                          dims=[Dim(range(10),name='dim 1',unit='Hz'),
                                Dim(range(5),name='dim2',unit='sec')])
        self.assertRaises(AttributeError,DimArray,np.random.rand(10,5),
                          dims=[Dim(range(10),name='dim 1',unit='Hz'),
                                Dim(range(5),name='dim 2',unit='sec')])
        self.assertRaises(AttributeError,DimArray,np.random.rand(10,5),
                          dims=[Dim(range(10),name='dim1',unit='Hz'),
                                Dim(range(5),name='dim$2',unit='sec')])
        self.assertRaises(AttributeError,DimArray,np.random.rand(10,5),
                          dims=[Dim(range(10),name='$dim1',unit='Hz'),
                                Dim(range(5),name='dim2',unit='sec')])
        self.assertRaises(AttributeError,DimArray,np.random.rand(10,5),
                          dims=[Dim(range(10),name='1dim1',unit='Hz'),
                                Dim(range(5),name='dim:2',unit='sec')])
        self.assertRaises(AttributeError,DimArray,np.random.rand(10,5),
                          dims=[Dim(range(10),name='dim1',unit='Hz'),
                                Dim(range(5),name='',unit='sec')])
        self.assertRaises(AttributeError,DimArray,np.random.rand(10,5),
                          dims=[Dim(range(10),name='',unit='Hz'),
                                Dim(range(5),name='dim2',unit='sec')])
        self.assertRaises(AttributeError,DimArray,np.random.rand(10,5),
                          dims=[Dim(range(10),name='',unit='Hz'),
                                Dim(range(5),name='',unit='sec')])
        
        # this is a proper initialization:
        dat = DimArray(np.random.rand(5,10),
                       dims=[Dim(range(5),name='freqs',unit='Hz'),
                             Dim(range(10),name='time',unit='sec')])
        # should raise Attribute Error if dims is removed:
        self.assertRaises(AttributeError,dat.__setattr__,'dims',None)
        # ensure dim_names attribute is set properly:
        self.assertEquals(dat.dim_names,['freqs','time'])
        # ensure proper shape
        self.assertEquals(dat.shape,(5,10))
        # ensure dims have proper lengths:
        self.assertEquals(len(dat.dims[0]),5)
        self.assertEquals(len(dat.dims[1]),10)
        # ensure that dims attributes are copied properly:
        self.assertEquals(dat.dims[0].unit,'Hz')
        self.assertEquals(dat.dims[1].unit,'sec')
        # check that dims values are preserved:
        self.assertEquals(dat.dims[0][-1],4)
        self.assertEquals(dat.dims[1][-1],9)
        
        dat = DimArray(np.random.rand(2,4,5),
                       dims=[Dim(range(2),name='dim1',unit='Hz'),
                             Dim(range(4),name='dim2',bla='bla'),
                             Dim(range(5),name='dim3',attr1='attr1',
                                 attr2='attr2')])
        # ensure dim_names attribute is set properly:
        self.assertEquals(dat.dim_names,['dim1','dim2','dim3'])
        # ensure proper shape
        self.assertEquals(dat.shape,(2,4,5))
        # ensure dims have proper lengths:
        self.assertEquals(len(dat.dims[0]),2)
        self.assertEquals(len(dat.dims[1]),4)
        self.assertEquals(len(dat.dims[2]),5)
        # ensure that dims attributes are copied properly:
        self.assertEquals(dat.dims[0].unit,'Hz')
        self.assertEquals(dat.dims[1].bla,'bla')
        self.assertEquals(dat.dims[2].attr1,'attr1')
        self.assertEquals(dat.dims[2].attr2,'attr2')
        # check that dims values are preserved:
        self.assertEquals(dat.dims[0][-1],1)
        self.assertEquals(dat.dims[1][-1],3)
        self.assertEquals(dat.dims[2][-1],4)

        # check filling in of default dims if left out
        dat = DimArray(np.random.rand(4,3))
        self.assertEquals(dat.dim_names, ['dim1','dim2'])
        assert_array_equal(dat['dim1'],np.arange(dat.shape[0]))
        assert_array_equal(dat['dim2'],np.arange(dat.shape[1]))