def test_columns_without_local_data_and_without_key_argument( self, repo_20_filled_samples): repo = repo_20_filled_samples co = repo.checkout() from hangar.backends import backend_decoder # perform a mock for nonlocal data for k in co._columns._columns['writtenaset']._samples: co._columns._columns['writtenaset']._samples[k] = backend_decoder( b'50:daeaaeeaebv') col = co.columns['writtenaset'] with pytest.raises(RuntimeError): HangarDataset((col, )) # perform a mock for nonlocal data co = repo.checkout() template = backend_decoder(b'50:daeaaeeaebv') co._columns._columns['writtenaset']._samples['4'] = template col = co.columns['writtenaset'] dataset = HangarDataset((col, )) dataset_available_keys = dataset._keys assert len(dataset_available_keys) == 19 assert '4' not in dataset_available_keys column_reported_local_keys = list(col.keys(local=True)) for dset_avail_key in dataset_available_keys: assert dset_avail_key in column_reported_local_keys assert len(dataset_available_keys) == len(column_reported_local_keys) co.close()
def test_keys_not_valid(self, repo_20_filled_samples): co = repo_20_filled_samples.checkout() first_col = co.columns['writtenaset'] keys = ['w', 'r', 'o', 'n', 'g'] dataset = HangarDataset((first_col, ), keys=keys) with pytest.raises(KeyError): dataset.index_get(1) co.close()
def test_keys_multiple_column_success(self, repo_20_filled_samples): co = repo_20_filled_samples.checkout() first_col = co.columns['writtenaset'] second_col = co.columns['second_aset'] keys = [('1', '2'), ('2', '3'), ('3', '4')] dataset = HangarDataset((first_col, second_col), keys=keys) for i, key in enumerate(keys): data = dataset.index_get(i) assert np.allclose(data[0], first_col[key[0]]) assert np.allclose(data[1], second_col[key[1]]) co.close()
def test_column_without_wrapping_list(self, repo_20_filled_samples, array5by7): co = repo_20_filled_samples.checkout() first_col = co.columns['writtenaset'] second_col = co.columns['second_aset'] dataset = HangarDataset((first_col, second_col)) key1, key2 = dataset._keys[0] assert key1 == key2 target = array5by7[:] = int(key1) assert np.allclose(dataset.index_get(0), target) co.close()
def test_keys_single_column_success(self, repo_20_filled_samples): co = repo_20_filled_samples.checkout() first_col = co.columns['writtenaset'] keys = ['1', '2', '3'] dataset = HangarDataset((first_col, ), keys=keys) assert dataset._keys == keys co.close()
def test_fails_on_write_enabled_columns(self, repo_20_filled_samples): repo = repo_20_filled_samples co = repo.checkout(write=True) first_aset = co.columns['writtenaset'] with pytest.raises(PermissionError): HangarDataset((first_aset, )) co.close()
def test_keys_non_local(self, repo_20_filled_samples): repo = repo_20_filled_samples co = repo.checkout() # perform a mock for nonlocal data from hangar.backends import backend_decoder template = backend_decoder(b'50:daeaaeeaebv') co._columns._columns['writtenaset']._samples['4'] = template col = co.columns['writtenaset'] col_reported_remote_keys = col.remote_reference_keys assert col_reported_remote_keys == ('4', ) assert len(col_reported_remote_keys) == 1 dataset = HangarDataset((col, ), keys=('0', *col_reported_remote_keys)) with pytest.raises(KeyError): # TODO: hangar internal should raise FileNotFoundError? dataset.index_get(1) co.close()
def test_columns_without_common_keys_and_without_key_argument( self, repo_20_filled_samples): co = repo_20_filled_samples.checkout(write=True) first_col = co.columns['writtenaset'] first_col['AnExtraKey'] = first_col['0'] co.commit('added an extra key') co.close() co = repo_20_filled_samples.checkout() first_col = co.columns['writtenaset'] second_col = co.columns['second_aset'] with pytest.raises(KeyError): HangarDataset((first_col, second_col)) co.close()
def test_keys_nested_column_success(self, repo_20_filled_subsamples): co = repo_20_filled_subsamples.checkout() col1 = co['writtenaset'] col2 = co['second_aset'] dataset = HangarDataset([col1, col2]) data = dataset.index_get(1) assert tuple(data[0].keys()) == tuple(data[1].keys()) == (4, 5, 6) assert isinstance(data[0], dict) assert isinstance(data[1], dict) keys = (((0, ...), (0, 1)), ((1, ...), (1, 4))) dataset = HangarDataset([col1, col2], keys=keys) data = dataset.index_get(1) assert tuple(data[0].keys()) == (4, 5, 6) assert np.allclose(data[1], col2[1][4]) co.close()
def test_no_column(self): with pytest.raises(TypeError): HangarDataset([])