Skip to content

Commit 596b898

Browse files
committed
NPI-4460 add baseline for SP3 offline sat removal and fix function to avoid modifying passed reference before returning
1 parent 2c8d31b commit 596b898

4 files changed

Lines changed: 25 additions & 7 deletions

File tree

gnssanalysis/gn_io/sp3.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -407,17 +407,17 @@ def remove_offline_sats(sp3_df: _pd.DataFrame, df_friendly_name: str = "") -> _p
407407
offline_sats = sp3_df[mask_either].index.get_level_values(1).unique()
408408

409409
# Using that list of offline / partially offline sats, remove all entries for those sats from the SP3 DataFrame:
410-
sp3_df = sp3_df.drop(offline_sats, level=1, errors="ignore")
410+
sp3_df_cleaned = sp3_df.drop(offline_sats, level=1, errors="ignore")
411411

412412
if len(offline_sats) > 0:
413413
# Update the internal representation of the SP3 header to match the change
414-
remove_svs_from_header(sp3_df, offline_sats.values)
414+
remove_svs_from_header(sp3_df_cleaned, offline_sats.values)
415415
logger.info(
416416
f"Dropped offline / nodata sats from {df_friendly_name} SP3 DataFrame (including header): {offline_sats.values}"
417417
)
418418
else:
419419
logger.info(f"No offline / nodata sats detected to be dropped from {df_friendly_name} SP3 DataFrame")
420-
return sp3_df
420+
return sp3_df_cleaned
421421

422422

423423
def filter_by_svs(

tests/test_sp3.py

Lines changed: 21 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
import numpy as np
66
import pandas as pd
7+
from pandas import DataFrame
78

89
from gnssanalysis.filenames import convert_nominal_span, determine_properties_from_filename
910
import gnssanalysis.gn_io.sp3 as sp3
@@ -1309,7 +1310,10 @@ def test_sp3_offline_sat_removal_standalone(self):
13091310
self.assertTrue(UnitTestBaseliner.verify(objects_to_verify), "Hash verification should pass")
13101311

13111312
def test_sp3_offline_sat_removal(self):
1313+
objects_to_verify: list = []
1314+
13121315
sp3_df = sp3.read_sp3(offline_sat_test_data, pOnly=False, strict_mode=STRICT_OFF)
1316+
objects_to_verify.append(sp3_df)
13131317

13141318
# Confirm starting state of content
13151319
self.assertEqual(
@@ -1328,26 +1332,39 @@ def test_sp3_offline_sat_removal(self):
13281332
sp3_df.attrs["HEADER"].HEAD.SV_COUNT_STATED, "3", "Header should have 2 SVs before removing offline"
13291333
)
13301334

1335+
df_snapshot = DataFrame(sp3_df)
13311336
# Now make the changes - this should also update the header
1332-
sp3_df = sp3.remove_offline_sats(sp3_df)
1337+
sp3_df_cleaned = sp3.remove_offline_sats(sp3_df)
1338+
objects_to_verify.append(sp3_df_cleaned)
1339+
# Ensure the source DF did NOT get modified...
1340+
df_snapshot_after = DataFrame(sp3_df)
1341+
self.assertTrue(
1342+
df_snapshot.equals(df_snapshot_after),
1343+
"Original DF should not be modified by function that returns a new copy",
1344+
)
13331345

13341346
# Check contents
13351347
self.assertEqual(
1336-
sp3_df.index.get_level_values(1).unique().array.tolist(),
1348+
sp3_df_cleaned.index.get_level_values(1).unique().array.tolist(),
13371349
["G02", "G03"],
13381350
"Should be two SVs after removing offline ones",
13391351
)
13401352

13411353
# Check header
13421354
self.assertEqual(
1343-
sp3_df.attrs["HEADER"].SV_INFO.index.array.tolist(),
1355+
sp3_df_cleaned.attrs["HEADER"].SV_INFO.index.array.tolist(),
13441356
["G02", "G03"],
13451357
"Should be two SVs in parsed header after removing offline ones",
13461358
)
13471359
self.assertEqual(
1348-
sp3_df.attrs["HEADER"].HEAD.SV_COUNT_STATED, "2", "Header should have 2 SVs after removing offline"
1360+
sp3_df_cleaned.attrs["HEADER"].HEAD.SV_COUNT_STATED, "2", "Header should have 2 SVs after removing offline"
13491361
)
13501362

1363+
# UnitTestBaseliner.mode = "baseline"
1364+
# UnitTestBaseliner.create_baseline(objects_to_verify) # DO NOT commit this line un-commented.
1365+
1366+
self.assertTrue(UnitTestBaseliner.verify(objects_to_verify), "Hash verification should pass")
1367+
13511368
# sp3_test_data_truncated_cod_final is input_data2
13521369
def test_filter_by_svs(self):
13531370
sp3_df = sp3.read_sp3(input_data2, pOnly=False)
Binary file not shown.
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
79d5e639e0f76f7d83825e43a862f907fecf7d28cb606ee25621aeb951e7ee5f

0 commit comments

Comments
 (0)