Skip to content

Commit 897c0b5

Browse files
committed
added documentation and tests requested by review of #76
1 parent d17d9bf commit 897c0b5

3 files changed

Lines changed: 66 additions & 16 deletions

File tree

gnss_lib_py/parsers/navdata.py

Lines changed: 29 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,25 @@
1515

1616
class NavData():
1717
"""gnss_lib_py specific class for handling data.
18-
Uses numpy for speed combined with pandas like intuitive indexing
18+
19+
Uses numpy for speed combined with pandas like intuitive indexing.
20+
21+
Can either be initialized empty, with a csv file by setting
22+
``csv_path``, a Pandas DataFrame by setting ``pandas_df`` or by a
23+
Numpy array by setting ``numpy_array``.
24+
25+
Parameters
26+
----------
27+
csv_path : string
28+
Path to csv file containing data
29+
pandas_df : pd.DataFrame
30+
Data used to initialize NavData instance.
31+
numpy_array : np.ndarray
32+
Numpy array containing data used to initialize NavData
33+
instance.
34+
**kwargs : args
35+
Additional arguments (e.g. ``sep`` or ``header``) passed into
36+
``pd.read_csv`` if csv_path is not None.
1937
2038
Attributes
2139
----------
@@ -89,7 +107,8 @@ def from_pandas_df(self, pandas_df):
89107
90108
Parameters
91109
----------
92-
pandas_df : pd.DataFrame of data
110+
pandas_df : pd.DataFrame
111+
Data used to initialize NavData instance.
93112
"""
94113

95114
if not isinstance(pandas_df, pd.DataFrame):
@@ -112,7 +131,8 @@ def from_numpy_array(self, numpy_array):
112131
Parameters
113132
----------
114133
numpy_array : np.ndarray
115-
Numpy array containing data
134+
Numpy array containing data used to initialize NavData
135+
instance.
116136
117137
"""
118138

@@ -128,7 +148,10 @@ def from_numpy_array(self, numpy_array):
128148
self[str(row_num)] = numpy_array[row_num,:]
129149

130150
def concat(self, navdata=None, axis=1, inplace=False):
131-
"""Concatenates new rows or new columns to existing NavData.
151+
"""Concatenates second NavData instance by row or column.
152+
153+
Concatenates a second NavData instance to the existing NavData
154+
instance by either row or column.
132155
133156
Each type of data is included in a row, so adding new rows with
134157
``axis=0``, means adding new types of data. Concat requires that
@@ -164,11 +187,11 @@ def concat(self, navdata=None, axis=1, inplace=False):
164187
"""
165188

166189
if not isinstance(navdata,NavData):
167-
raise TypeError("new concat data must be a NavData instance.")
190+
raise TypeError("concat input data must be a NavData instance.")
168191

169192
if axis == 0: # concatenate new rows
170193
if len(self) != len(navdata):
171-
raise RuntimeError("new concat data must be same " \
194+
raise RuntimeError("concat input data must be same " \
172195
+ "length to concatenate new rows.")
173196
if not inplace:
174197
new_navdata = self.copy()

tests/parsers/test_android.py

Lines changed: 15 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -308,20 +308,25 @@ def test_android_concat(derived, pd_df):
308308
# extract and combine gps and glonass data
309309
gps_data = derived.where("gnss_id","gps")
310310
glonass_data = derived.where("gnss_id","glonass")
311-
combined_navdata = gps_data.concat(glonass_data)
311+
gps_glonass_navdata = gps_data.concat(glonass_data)
312+
glonass_gps_navdata = glonass_data.concat(gps_data)
312313

313314
# combine using pandas
314315
gps_df = pd_df[pd_df["constellationType"]==1]
315316
glonass_df = pd_df[pd_df["constellationType"]==3]
316-
combined_df = pd.concat((gps_df,glonass_df))
317-
318-
# check a few rows to make sure they're equal
319-
np.testing.assert_array_equal(combined_navdata["raw_pr_m"],
320-
combined_df["rawPrM"])
321-
np.testing.assert_array_equal(combined_navdata["raw_pr_sigma_m"],
322-
combined_df["rawPrUncM"])
323-
np.testing.assert_array_equal(combined_navdata["intersignal_bias_m"],
324-
combined_df["isrbM"])
317+
gps_glonass_df = pd.concat((gps_df,glonass_df))
318+
glonass_gps_df = pd.concat((glonass_df,gps_df))
319+
320+
for combined_navdata, combined_df in [(gps_glonass_navdata, gps_glonass_df),
321+
(glonass_gps_navdata, glonass_gps_df)]:
322+
323+
# check a few rows to make sure they're equal
324+
np.testing.assert_array_equal(combined_navdata["raw_pr_m"],
325+
combined_df["rawPrM"])
326+
np.testing.assert_array_equal(combined_navdata["raw_pr_sigma_m"],
327+
combined_df["rawPrUncM"])
328+
np.testing.assert_array_equal(combined_navdata["intersignal_bias_m"],
329+
combined_df["isrbM"])
325330

326331
def test_imu_raw(android_raw_path):
327332
"""Test that AndroidRawImu initialization

tests/parsers/test_navdata.py

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1345,6 +1345,18 @@ def test_concat(df_simple):
13451345
check_index_type=False,
13461346
check_dtype=False)
13471347

1348+
# concatenate empty NavData
1349+
navdata = NavData().concat(navdata_1,axis=1)
1350+
pd.testing.assert_frame_equal(df_simple.sort_index(axis=1),
1351+
navdata.pandas_df().sort_index(axis=1),
1352+
check_index_type=False,
1353+
check_dtype=False)
1354+
navdata = navdata_1.concat(NavData(),axis=1)
1355+
pd.testing.assert_frame_equal(df_simple.sort_index(axis=1),
1356+
navdata.pandas_df().sort_index(axis=1),
1357+
check_index_type=False,
1358+
check_dtype=False)
1359+
13481360
# test multiple rows with the same name
13491361
navdata_long = navdata_1.copy()
13501362
for count in range(13):
@@ -1407,6 +1419,16 @@ def test_concat_fails(df_simple):
14071419
assert "same length" in str(excinfo.value)
14081420
assert "concat" in str(excinfo.value)
14091421

1422+
with pytest.raises(RuntimeError) as excinfo:
1423+
navdata_1.concat(NavData(),axis=0)
1424+
assert "same length" in str(excinfo.value)
1425+
assert "concat" in str(excinfo.value)
1426+
1427+
with pytest.raises(RuntimeError) as excinfo:
1428+
NavData().concat(navdata_1,axis=0)
1429+
assert "same length" in str(excinfo.value)
1430+
assert "concat" in str(excinfo.value)
1431+
14101432
@pytest.mark.parametrize("rows",
14111433
[None,
14121434
['names', 'integers', 'floats', 'strings'],

0 commit comments

Comments
 (0)