diff --git a/navipy/database/__init__.py b/navipy/database/__init__.py index 1ba96971e5f845c3eb248624b0f6e9d8a05e2242..7d4f71e311b8266441e6ca54fd94ed574f9e68bd 100644 --- a/navipy/database/__init__.py +++ b/navipy/database/__init__.py @@ -10,6 +10,7 @@ import io from navipy.scene import is_numeric_array, check_scene from navipy.maths import constants as mconst from navipy.trajectories import Trajectory +from navipy.trajectories import posorient_columns import logging import numbers @@ -552,7 +553,7 @@ class DataBase(): if self.rotation_convention is not None: posorients = Trajectory() posorients.from_dataframe(posorient, rotconv=self.__convention) - return posorients + return posorients.astype(float) @property def normalisations(self): @@ -612,40 +613,27 @@ class DataBase(): # toreturn = toreturn.astype(float) posorient = None convention = toreturn.rotconv_id + + tuples = posorient_columns(convention) + index = pd.MultiIndex.from_tuples(tuples) + posorient = pd.Series(index=index) + posorient['location']['x'] = toreturn.loc['x'] + posorient['location']['y'] = toreturn.loc['y'] + posorient['location']['z'] = toreturn.loc['z'] + if convention != 'quaternion': - tuples = [('location', 'x'), ('location', 'y'), - ('location', 'z'), ('xyz', 'alpha_0'), - ('xyz', 'alpha_1'), ('xyz', 'alpha_2')] - index = pd.MultiIndex.from_tuples(tuples, - names=['position', - 'orientation']) - posorient = pd.Series(index=index) - posorient['location']['x'] = toreturn.loc['x'] - posorient['location']['y'] = toreturn.loc['y'] - posorient['location']['z'] = toreturn.loc['z'] posorient[convention]['alpha_0'] = toreturn.loc['q_0'] posorient[convention]['alpha_1'] = toreturn.loc['q_1'] posorient[convention]['alpha_2'] = toreturn.loc['q_2'] posorient.name = toreturn.name else: - tuples = [('location', 'x'), ('location', 'y'), - ('location', 'z'), (convention, 'q_0'), - (convention, 'q_1'), (convention, 'q_2'), - (convention, 'q_3')] - index = pd.MultiIndex.from_tuples(tuples, - names=['position', - 'orientation']) - posorient = pd.Series(index=index) - posorient['location']['x'] = toreturn.loc['x'] - posorient['location']['y'] = toreturn.loc['y'] - posorient['location']['z'] = toreturn.loc['z'] posorient[convention]['q_0'] = toreturn.loc['q_0'] posorient[convention]['q_1'] = toreturn.loc['q_1'] posorient[convention]['q_2'] = toreturn.loc['q_2'] posorient[convention]['q_3'] = toreturn.loc['q_3'] posorient.name = toreturn.name - return posorient + return posorient.astype(float) def scene(self, posorient=None, rowid=None): """Read an image at a given position-orientation or given id of row in the \ diff --git a/navipy/database/test.py b/navipy/database/test.py index 17fbc1cc4a2e1717c7b8a16213f854462d239d9e..416765f0094d484ddfce21bfbcd39fe1e31e9c18 100644 --- a/navipy/database/test.py +++ b/navipy/database/test.py @@ -146,27 +146,9 @@ class TestCase(unittest.TestCase): and checks if the returned entry for rowid 1 is correct - that it all columns and correct values """ - conn = sqlite3.connect(self.mydb_filename) - c = conn.cursor() - c.execute(""" SELECT * FROM position_orientation WHERE (rowid=1) """) - rows = c.fetchall()[0] - # working case - tuples = [('location', 'x'), ('location', 'y'), - ('location', 'z'), ('xyz', 'alpha_0'), - ('xyz', 'alpha_1'), ('xyz', 'alpha_2')] - index = pd.MultiIndex.from_tuples(tuples, - names=['position', 'orientation']) - - posorient = pd.Series(index=index) - posorient['location']['x'] = rows[6] - posorient['location']['y'] = rows[7] - posorient['location']['z'] = rows[8] - posorient['xyz']['alpha_0'] = rows[3] - posorient['xyz']['alpha_1'] = rows[5] - posorient['xyz']['alpha_2'] = rows[4] + posorient = self.mydb.posorients.iloc[0, :] for rowid in [0, -2]: with self.assertRaises(ValueError): - # print("rowid",rowid) self.mydb.read_posorient(rowid=rowid) with self.assertRaises(TypeError): self.mydb.read_posorient(rowid='T') @@ -179,15 +161,7 @@ class TestCase(unittest.TestCase): for rowid in [1]: posoriend2 = self.mydb.read_posorient(rowid=rowid) - assert posoriend2['location']['x'] == posorient['location']['x'] - assert posoriend2['location']['y'] == posorient['location']['y'] - assert posoriend2['location']['z'] == posorient['location']['z'] - assert (posoriend2['xyz']['alpha_0'] == - posorient['xyz']['alpha_0']) - assert (posoriend2['xyz']['alpha_1'] == - posorient['xyz']['alpha_1']) - assert (posoriend2['xyz']['alpha_2'] == - posorient['xyz']['alpha_2']) + pd.testing.assert_series_equal(posoriend2, posorient) def test_scene_id(self): """ @@ -247,7 +221,7 @@ class TestCase(unittest.TestCase): # incorrect case missing column posorient2 = posorient.copy() - posorient2.drop(('location', 'x')) + posorient2 = posorient2.drop(('location', 'x')) with self.assertRaises(Exception): image = self.mydb.scene(posorient=posorient2) @@ -270,7 +244,6 @@ class TestCase(unittest.TestCase): # not working case empty posorient2 = pd.Series(index=posorient.index) - with self.assertRaises(Exception): image = self.mydb.scene(posorient=posorient2)