def test_deepcopy_with_positional_metadata(self): obj = self._positional_metadata_constructor_( 4, positional_metadata={'bar': [[], [], [], []], 'baz': [42, 42, 42, 42]}) obj_copy = copy.deepcopy(obj) self.assertEqual(obj, obj_copy) self.assertIsNot(obj, obj_copy) self.assertIsNot(obj._positional_metadata, obj_copy._positional_metadata) self.assertIsNot(obj._positional_metadata.values, obj_copy._positional_metadata.values) self.assertIsNot(obj._positional_metadata.loc[0, 'bar'], obj_copy._positional_metadata.loc[0, 'bar']) obj_copy.positional_metadata.loc[0, 'bar'].append(1) obj_copy.positional_metadata.loc[0, 'baz'] = 43 assert_data_frame_almost_equal( obj_copy.positional_metadata, pd.DataFrame({'bar': [[1], [], [], []], 'baz': [43, 42, 42, 42]})) assert_data_frame_almost_equal( obj.positional_metadata, pd.DataFrame({'bar': [[], [], [], []], 'baz': [42, 42, 42, 42]}))
def test_init_default_parameters(self): seq = ExampleGrammaredSequence('.-ABCXYZ') npt.assert_equal(seq.values, np.array('.-ABCXYZ', dtype='c')) self.assertEqual(seq.metadata, {}) assert_data_frame_almost_equal(seq.positional_metadata, pd.DataFrame(index=range(8)))
def test_deepcopy_with_positional_metadata(self): obj = self._positional_metadata_constructor_(4, positional_metadata={ 'bar': [[], [], [], []], 'baz': [42, 42, 42, 42] }) obj_copy = copy.deepcopy(obj) self.assertEqual(obj, obj_copy) self.assertIsNot(obj, obj_copy) self.assertIsNot(obj._positional_metadata, obj_copy._positional_metadata) self.assertIsNot(obj._positional_metadata.values, obj_copy._positional_metadata.values) self.assertIsNot(obj._positional_metadata.loc[0, 'bar'], obj_copy._positional_metadata.loc[0, 'bar']) obj_copy.positional_metadata.loc[0, 'bar'].append(1) obj_copy.positional_metadata.loc[0, 'baz'] = 43 assert_data_frame_almost_equal( obj_copy.positional_metadata, pd.DataFrame({ 'bar': [[1], [], [], []], 'baz': [43, 42, 42, 42] })) assert_data_frame_almost_equal( obj.positional_metadata, pd.DataFrame({ 'bar': [[], [], [], []], 'baz': [42, 42, 42, 42] }))
def test_positional_metadata_deleter(self): obj = self._positional_metadata_constructor_( 3, positional_metadata={'foo': [1, 2, 3]}) self.assertIsInstance(obj.positional_metadata.index, pd.RangeIndex) assert_data_frame_almost_equal(obj.positional_metadata, pd.DataFrame({'foo': [1, 2, 3]})) del obj.positional_metadata self.assertIsInstance(obj.positional_metadata.index, pd.RangeIndex) assert_data_frame_almost_equal(obj.positional_metadata, pd.DataFrame(index=range(3))) # Delete again. del obj.positional_metadata self.assertIsInstance(obj.positional_metadata.index, pd.RangeIndex) assert_data_frame_almost_equal(obj.positional_metadata, pd.DataFrame(index=range(3))) obj = self._positional_metadata_constructor_(3) self.assertIsInstance(obj.positional_metadata.index, pd.RangeIndex) assert_data_frame_almost_equal(obj.positional_metadata, pd.DataFrame(index=range(3))) del obj.positional_metadata self.assertIsInstance(obj.positional_metadata.index, pd.RangeIndex) assert_data_frame_almost_equal(obj.positional_metadata, pd.DataFrame(index=range(3)))
def test_positional_metadata_getter_no_positional_metadata(self): obj = self._positional_metadata_constructor_(4) self.assertIsInstance(obj.positional_metadata, pd.DataFrame) assert_data_frame_almost_equal( obj.positional_metadata, pd.DataFrame(index=np.arange(4)))
def test_positional_metadata_getter_no_positional_metadata(self): obj = self._positional_metadata_constructor_(4) self.assertIsInstance(obj.positional_metadata, pd.DataFrame) self.assertIsInstance(obj.positional_metadata.index, pd.RangeIndex) assert_data_frame_almost_equal( obj.positional_metadata, pd.DataFrame(index=range(4)))
def test_constructor_with_positional_metadata_len_zero(self): for data in [], (), np.array([]): obj = self._positional_metadata_constructor_( 0, positional_metadata={'foo': data}) assert_data_frame_almost_equal( obj.positional_metadata, pd.DataFrame({'foo': data}, index=np.arange(0)))
def test_constructor_with_positional_metadata_len_one(self): for data in [2], (2, ), np.array([2]): obj = self._positional_metadata_constructor_( 1, positional_metadata={'foo': data}) assert_data_frame_almost_equal( obj.positional_metadata, pd.DataFrame({'foo': data}, index=range(1)))
def test_constructor_with_positional_metadata_multiple_columns(self): obj = self._positional_metadata_constructor_( 5, positional_metadata={'foo': np.arange(5), 'bar': np.arange(5)[::-1]}) assert_data_frame_almost_equal( obj.positional_metadata, pd.DataFrame({'foo': np.arange(5), 'bar': np.arange(5)[::-1]}, index=range(5)))
def test_positional_metadata_setter_makes_shallow_copy(self): obj = self._positional_metadata_constructor_(3) df = pd.DataFrame({ 'foo': [22, 22, 0], 'bar': [[], [], []] }, index=['a', 'b', 'c']) obj.positional_metadata = df assert_data_frame_almost_equal( obj.positional_metadata, pd.DataFrame({ 'foo': [22, 22, 0], 'bar': [[], [], []] }, index=range(3))) self.assertIsNot(obj.positional_metadata, df) # Original df is not mutated. orig_df = pd.DataFrame({ 'foo': [22, 22, 0], 'bar': [[], [], []] }, index=['a', 'b', 'c']) assert_data_frame_almost_equal(df, orig_df) # Change values of column (using same dtype). df['foo'] = [42, 42, 42] assert_data_frame_almost_equal( obj.positional_metadata, pd.DataFrame({ 'foo': [22, 22, 0], 'bar': [[], [], []] }, index=range(3))) # Change single value of underlying data. df.values[0][0] = 10 assert_data_frame_almost_equal( obj.positional_metadata, pd.DataFrame({ 'foo': [22, 22, 0], 'bar': [[], [], []] }, index=range(3))) # Mutate list (not a deep copy). df['bar'][0].append(42) assert_data_frame_almost_equal( obj.positional_metadata, pd.DataFrame({ 'foo': [22, 22, 0], 'bar': [[42], [], []] }, index=range(3)))
def test_constructor_with_positional_metadata_len_greater_than_one(self): for data in ([0, 42, 42, 1, 0, 8, 100, 0, 0], (0, 42, 42, 1, 0, 8, 100, 0, 0), np.array([0, 42, 42, 1, 0, 8, 100, 0, 0])): obj = self._positional_metadata_constructor_( 9, positional_metadata={'foo': data}) assert_data_frame_almost_equal( obj.positional_metadata, pd.DataFrame({'foo': data}, index=range(9)))
def test_init_nondefault_parameters(self): seq = ExampleGrammaredSequence( '.-ABCXYZ', metadata={'id': 'foo'}, positional_metadata={'quality': range(8)}) npt.assert_equal(seq.values, np.array('.-ABCXYZ', dtype='c')) self.assertEqual(seq.metadata, {'id': 'foo'}) assert_data_frame_almost_equal(seq.positional_metadata, pd.DataFrame({'quality': range(8)}))
def test_constructor_with_positional_metadata_custom_index(self): df = pd.DataFrame({'foo': np.arange(5), 'bar': np.arange(5)[::-1]}, index=['a', 'b', 'c', 'd', 'e']) obj = self._positional_metadata_constructor_( 5, positional_metadata=df) assert_data_frame_almost_equal( obj.positional_metadata, pd.DataFrame({'foo': np.arange(5), 'bar': np.arange(5)[::-1]}, index=range(5)))
def test_positional_metadata_getter_no_positional_metadata(self): obj = self._positional_metadata_constructor_(4) self.assertIsNone(obj._positional_metadata) self.assertIsInstance(obj.positional_metadata, pd.DataFrame) self.assertIsInstance(obj.positional_metadata.index, pd.RangeIndex) assert_data_frame_almost_equal( obj.positional_metadata, pd.DataFrame(index=range(4))) self.assertIsNotNone(obj._positional_metadata)
def test_deepcopy_positional_metadata_empty(self): obj = self._positional_metadata_constructor_( 3, positional_metadata=pd.DataFrame(index=range(3))) obj_copy = copy.deepcopy(obj) self.assertEqual(obj, obj_copy) self.assertIsNot(obj, obj_copy) assert_data_frame_almost_equal(obj._positional_metadata, pd.DataFrame(index=range(3))) self.assertIsNone(obj_copy._positional_metadata)
def test_copy_positional_metadata_none(self): obj = self._positional_metadata_constructor_(3) obj_copy = copy.copy(obj) self.assertEqual(obj, obj_copy) self.assertIsNot(obj, obj_copy) assert_data_frame_almost_equal(obj.positional_metadata, pd.DataFrame(index=range(3))) assert_data_frame_almost_equal(obj_copy.positional_metadata, pd.DataFrame(index=range(3))) self.assertIsNot(obj.positional_metadata, obj_copy.positional_metadata)
def test_positional_metadata_setter_invalid_type(self): obj = self._positional_metadata_constructor_( 3, positional_metadata={'foo': [1, 2, 42]}) with self.assertRaisesRegex(TypeError, 'Invalid positional metadata. Must be ' 'consumable by `pd.DataFrame` constructor.' ' Original pandas error message: '): obj.positional_metadata = 2 assert_data_frame_almost_equal(obj.positional_metadata, pd.DataFrame({'foo': [1, 2, 42]}))
def test_positional_metadata_setter_none(self): obj = self._positional_metadata_constructor_( 0, positional_metadata={'foo': []}) assert_data_frame_almost_equal(obj.positional_metadata, pd.DataFrame({'foo': []})) # `None` behavior differs from constructor. obj.positional_metadata = None assert_data_frame_almost_equal(obj.positional_metadata, pd.DataFrame(index=range(0)))
def test_positional_metadata_setter_pandas_consumable(self): obj = self._positional_metadata_constructor_(3) self.assertFalse(obj.has_positional_metadata()) obj.positional_metadata = {'foo': [3, 2, 1]} self.assertTrue(obj.has_positional_metadata()) assert_data_frame_almost_equal(obj.positional_metadata, pd.DataFrame({'foo': [3, 2, 1]})) obj.positional_metadata = pd.DataFrame(index=np.arange(3)) self.assertFalse(obj.has_positional_metadata()) assert_data_frame_almost_equal(obj.positional_metadata, pd.DataFrame(index=range(3)))
def test_constructor_no_positional_metadata(self): # Length zero with missing/empty positional metadata. for empty in None, {}, pd.DataFrame(): obj = self._positional_metadata_constructor_( 0, positional_metadata=empty) assert_data_frame_almost_equal(obj.positional_metadata, pd.DataFrame(index=np.arange(0))) # Nonzero length with missing positional metadata. obj = self._positional_metadata_constructor_( 3, positional_metadata=None) assert_data_frame_almost_equal(obj.positional_metadata, pd.DataFrame(index=np.arange(3)))
def test_constructor_no_positional_metadata(self): # Length zero with missing/empty positional metadata. for empty in None, {}, pd.DataFrame(): obj = self._positional_metadata_constructor_( 0, positional_metadata=empty) assert_data_frame_almost_equal(obj.positional_metadata, pd.DataFrame(index=np.arange(0))) # Nonzero length with missing positional metadata. obj = self._positional_metadata_constructor_(3, positional_metadata=None) assert_data_frame_almost_equal(obj.positional_metadata, pd.DataFrame(index=np.arange(3)))
def test_constructor_with_positional_metadata_int64_index(self): # Test that memory-inefficient index is converted to memory-efficient # index. df = pd.DataFrame({'foo': np.arange(5), 'bar': np.arange(5)[::-1]}, index=np.arange(5)) self.assertIsInstance(df.index, pd.Int64Index) obj = self._positional_metadata_constructor_( 5, positional_metadata=df) assert_data_frame_almost_equal( obj.positional_metadata, pd.DataFrame({'foo': np.arange(5), 'bar': np.arange(5)[::-1]}, index=range(5))) self.assertIsInstance(obj.positional_metadata.index, pd.RangeIndex)
def test_positional_metadata_setter_len_mismatch(self): obj = self._positional_metadata_constructor_( 3, positional_metadata={'foo': [1, 2, 42]}) # `None` behavior differs from constructor. with self.assertRaisesRegex(ValueError, '\(0\).*\(3\)'): obj.positional_metadata = None assert_data_frame_almost_equal(obj.positional_metadata, pd.DataFrame({'foo': [1, 2, 42]})) with self.assertRaisesRegex(ValueError, '\(4\).*\(3\)'): obj.positional_metadata = [1, 2, 3, 4] assert_data_frame_almost_equal(obj.positional_metadata, pd.DataFrame({'foo': [1, 2, 42]}))
def test_positional_metadata_setter_data_frame(self): obj = self._positional_metadata_constructor_(3) self.assertFalse(obj.has_positional_metadata()) obj.positional_metadata = pd.DataFrame({'foo': [3, 2, 1]}, index=['a', 'b', 'c']) self.assertTrue(obj.has_positional_metadata()) self.assertIsInstance(obj.positional_metadata.index, pd.RangeIndex) assert_data_frame_almost_equal(obj.positional_metadata, pd.DataFrame({'foo': [3, 2, 1]})) obj.positional_metadata = pd.DataFrame(index=np.arange(3)) self.assertFalse(obj.has_positional_metadata()) assert_data_frame_almost_equal(obj.positional_metadata, pd.DataFrame(index=range(3)))
def test_constructor_no_positional_metadata(self): # Length zero with missing/empty positional metadata. for empty in None, {}, pd.DataFrame(): obj = self._positional_metadata_constructor_( 0, positional_metadata=empty) self.assertFalse(obj.has_positional_metadata()) self.assertIsInstance(obj.positional_metadata.index, pd.RangeIndex) assert_data_frame_almost_equal(obj.positional_metadata, pd.DataFrame(index=range(0))) # Nonzero length with missing positional metadata. obj = self._positional_metadata_constructor_( 3, positional_metadata=None) self.assertFalse(obj.has_positional_metadata()) self.assertIsInstance(obj.positional_metadata.index, pd.RangeIndex) assert_data_frame_almost_equal(obj.positional_metadata, pd.DataFrame(index=range(3)))
def test_constructor_no_positional_metadata(self): # Length zero with missing/empty positional metadata. for empty in None, {}, pd.DataFrame(): obj = self._positional_metadata_constructor_( 0, positional_metadata=empty) self.assertFalse(obj.has_positional_metadata()) self.assertIsInstance(obj.positional_metadata.index, pd.RangeIndex) assert_data_frame_almost_equal(obj.positional_metadata, pd.DataFrame(index=range(0))) # Nonzero length with missing positional metadata. obj = self._positional_metadata_constructor_(3, positional_metadata=None) self.assertFalse(obj.has_positional_metadata()) self.assertIsInstance(obj.positional_metadata.index, pd.RangeIndex) assert_data_frame_almost_equal(obj.positional_metadata, pd.DataFrame(index=range(3)))
def test_ttest_index(self): table = pd.DataFrame([[12, 11, 10, 10, 10, 10, 10], [9, 11, 12, 10, 10, 10, 10], [1, 11, 10, 11, 10, 5, 9], [22, 21, 9, 10, 10, 10, 10], [20, 22, 10, 10, 13, 10, 10], [23, 21, 14, 10, 10, 10, 10]], index=['s1', 's2', 's3', 's4', 's5', 's6'], columns=['b1', 'b2', 'b3', 'b4', 'b5', 'b6', 'b7']) grouping = pd.Series([0, 0, 0, 1, 1, 1], index=['s1', 's2', 's3', 's4', 's5', 's6']) results = permutative_ttest(table, grouping, permutations=100, random_state=0) exp = pd.DataFrame({'t': [4.21649691, 31., 0.2, 1., 1., 1., 1.], 'pvalue': [0.10891089, 0.10891089, 1., 1., 1., 1., 1.]}, index=['b1', 'b2', 'b3', 'b4', 'b5', 'b6', 'b7']) assert_data_frame_almost_equal(results, exp)
def test_fisher_index(self): table = pd.DataFrame([[12, 11, 10, 10, 10, 10, 10], [9, 11, 12, 10, 10, 10, 10], [1, 11, 10, 11, 10, 5, 9], [22, 21, 9, 10, 10, 10, 10], [20, 22, 10, 10, 13, 10, 10], [23, 21, 14, 10, 10, 10, 10]], index=['s1', 's2', 's3', 's4', 's5', 's6'], columns=['b1', 'b2', 'b3', 'b4', 'b5', 'b6', 'b7']) grouping = pd.Series([0, 0, 0, 1, 1, 1], index=['s1', 's2', 's3', 's4', 's5', 's6']) results = fisher_mean(table, grouping, permutations=100, random_state=0) exp = pd.DataFrame({'m': [14.333333, 10.333333, 0.333333, 0.333333, 1.000000, 1.666667, 0.333333], 'pvalue': [0.108910891089, 0.108910891089, 1.0, 1.0, 1.0, 0.108910891089, 1.0]}, index=['b1', 'b2', 'b3', 'b4', 'b5', 'b6', 'b7']) assert_data_frame_almost_equal(results, exp)
def test_positional_metadata_setter_makes_shallow_copy(self): obj = self._positional_metadata_constructor_(3) df = pd.DataFrame({'foo': [22, 22, 0], 'bar': [[], [], []]}, index=['a', 'b', 'c']) obj.positional_metadata = df assert_data_frame_almost_equal( obj.positional_metadata, pd.DataFrame({'foo': [22, 22, 0], 'bar': [[], [], []]}, index=range(3))) self.assertIsNot(obj.positional_metadata, df) # Original df is not mutated. orig_df = pd.DataFrame({'foo': [22, 22, 0], 'bar': [[], [], []]}, index=['a', 'b', 'c']) assert_data_frame_almost_equal(df, orig_df) # Change values of column (using same dtype). df['foo'] = [42, 42, 42] assert_data_frame_almost_equal( obj.positional_metadata, pd.DataFrame({'foo': [22, 22, 0], 'bar': [[], [], []]}, index=range(3))) # Change single value of underlying data. df.values[0][0] = 10 assert_data_frame_almost_equal( obj.positional_metadata, pd.DataFrame({'foo': [22, 22, 0], 'bar': [[], [], []]}, index=range(3))) # Mutate list (not a deep copy). df['bar'][0].append(42) assert_data_frame_almost_equal( obj.positional_metadata, pd.DataFrame({'foo': [22, 22, 0], 'bar': [[42], [], []]}, index=range(3)))
def test_permutation_mean_index(self): table = pd.DataFrame( [[12, 11, 10, 10, 10, 10, 10], [9, 11, 12, 10, 10, 10, 10], [1, 11, 10, 11, 10, 5, 9], [22, 21, 9, 10, 10, 10, 10], [20, 22, 10, 10, 13, 10, 10], [23, 21, 14, 10, 10, 10, 10]], index=['s1', 's2', 's3', 's4', 's5', 's6'], columns=['b1', 'b2', 'b3', 'b4', 'b5', 'b6', 'b7']) grouping = pd.Series([0, 0, 0, 1, 1, 1], index=['s1', 's2', 's3', 's4', 's5', 's6']) results = permutation_mean(table, grouping, permutations=100, random_state=0) exp = pd.DataFrame( { 'm': [ 14.333333, 10.333333, 0.333333, 0.333333, 1.000000, 1.666667, 0.333333 ], 'pvalue': [0.108910891089, 0.108910891089, 1.0, 1.0, 1.0, 1.0, 1.0] }, index=['b1', 'b2', 'b3', 'b4', 'b5', 'b6', 'b7']) assert_data_frame_almost_equal(results, exp)
def test_positional_metadata_setter_data_frame(self): obj = self._positional_metadata_constructor_(3) assert_data_frame_almost_equal(obj.positional_metadata, pd.DataFrame(index=range(3))) obj.positional_metadata = pd.DataFrame({'foo': [3, 2, 1]}, index=['a', 'b', 'c']) assert_data_frame_almost_equal(obj.positional_metadata, pd.DataFrame({'foo': [3, 2, 1]})) obj.positional_metadata = pd.DataFrame(index=np.arange(3)) assert_data_frame_almost_equal(obj.positional_metadata, pd.DataFrame(index=np.arange(3)))
def test_positional_metadata_getter(self): obj = self._positional_metadata_constructor_( 3, positional_metadata={'foo': [22, 22, 0]}) self.assertIsInstance(obj.positional_metadata, pd.DataFrame) assert_data_frame_almost_equal(obj.positional_metadata, pd.DataFrame({'foo': [22, 22, 0]})) # Update existing column. obj.positional_metadata['foo'] = [42, 42, 43] assert_data_frame_almost_equal(obj.positional_metadata, pd.DataFrame({'foo': [42, 42, 43]})) # Add new column. obj.positional_metadata['foo2'] = [True, False, True] assert_data_frame_almost_equal( obj.positional_metadata, pd.DataFrame({'foo': [42, 42, 43], 'foo2': [True, False, True]}))
def test_positional_metadata_getter(self): obj = self._positional_metadata_constructor_( 3, positional_metadata={'foo': [22, 22, 0]}) self.assertIsInstance(obj.positional_metadata, pd.DataFrame) self.assertIsInstance(obj.positional_metadata.index, pd.RangeIndex) assert_data_frame_almost_equal(obj.positional_metadata, pd.DataFrame({'foo': [22, 22, 0]})) # Update existing column. obj.positional_metadata['foo'] = [42, 42, 43] assert_data_frame_almost_equal(obj.positional_metadata, pd.DataFrame({'foo': [42, 42, 43]})) # Add new column. obj.positional_metadata['foo2'] = [True, False, True] assert_data_frame_almost_equal( obj.positional_metadata, pd.DataFrame({'foo': [42, 42, 43], 'foo2': [True, False, True]}))