Skip to content

Commit 962a796

Browse files
authored
Merge pull request #98 from Stanford-NavLab/derek/smartloc
Derek/smartloc
2 parents 3c19500 + 0488b52 commit 962a796

19 files changed

Lines changed: 383 additions & 147 deletions

data/unit_test/tu_chemnitz_berlin_1_raw.csv

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ GPSWeek [weeks];GPSSecondsOfWeek [s];Longitude (GT Lon) [deg];Longitude Cov (GT
1515
1900;126641.499999971;13.3736577411555;7.76122581087713E-06;52.504560220676;6.07869197881139E-05;76.0045786043629;6.29563927005569E-06;1.24862086922803;1.26814020681675E-07;0.926577670979896;0.033529381550356;5.70623813848943;0.000242438557332;0.001159096629777;4.83289530290242E-06;126641.499999971;1900;17;19;1;21265103.5823198;111748873.136693;-2225.042;GPS;24;0;20;46;5.12;0.02;2.048;1;0
1616
1900;126641.499999971;13.3736577411555;7.76122581087713E-06;52.504560220676;6.07869197881139E-05;76.0045786043629;6.29563927005569E-06;1.24862086922803;1.26814020681675E-07;0.926577670979896;0.033529381550356;5.70623813848943;0.000242438557332;0.001159096629777;4.83289530290242E-06;126641.499999971;1900;17;19;1;25078409.3557325;131787929.664155;-3107.812;GPS;17;0;0;34;20.48;0.06;8.192;1;1
1717
1900;126641.499999971;13.3736577411555;7.76122581087713E-06;52.504560220676;6.07869197881139E-05;76.0045786043629;6.29563927005569E-06;1.24862086922803;1.26814020681675E-07;0.926577670979896;0.033529381550356;5.70623813848943;0.000242438557332;0.001159096629777;4.83289530290242E-06;126641.499999971;1900;17;19;1;23477506.8316879;123375127.134657;2838.583;GPS;2;0;620;40;5.12;0.028;2.048;3;1
18-
1900;126641.499999971;13.3736577411555;7.76122581087713E-06;52.504560220676;6.07869197881139E-05;76.0045786043629;6.29563927005569E-06;1.24862086922803;1.26814020681675E-07;0.926577670979896;0.033529381550356;5.70623813848943;0.000242438557332;0.001159096629777;4.83289530290242E-06;126641.499999971;1900;17;19;1;21244265.3088298;111639366.963273;2518.071;GPS;25;0;0;29;10.24;0.06;4.096;1;1
18+
1900;126641.499999971;13.3736577411555;7.76122581087713E-06;52.504560220676;6.07869197881139E-05;76.0045786043629;6.29563927005569E-06;1.24862086922803;1.26814020681675E-07;0.926577670979896;0.033529381550356;5.70623813848943;0.000242438557332;0.001159096629777;4.83289530290242E-06;126641.499999971;1900;17;19;1;21244265.3088298;111639366.963273;2518.071;GPS;25;0;0;29;10.24;0.06;4.096;1;#
1919
1900;126641.499999971;13.3736577411555;7.76122581087713E-06;52.504560220676;6.07869197881139E-05;76.0045786043629;6.29563927005569E-06;1.24862086922803;1.26814020681675E-07;0.926577670979896;0.033529381550356;5.70623813848943;0.000242438557332;0.001159096629777;4.83289530290242E-06;126641.499999971;1900;17;19;1;23856563.6330063;125367091.970488;4087.463;GPS;29;0;18020;45;0.64;0.004;0.256;7;0
2020
1900;126641.499999971;13.3736577411555;7.76122581087713E-06;52.504560220676;6.07869197881139E-05;76.0045786043629;6.29563927005569E-06;1.24862086922803;1.26814020681675E-07;0.926577670979896;0.033529381550356;5.70623813848943;0.000242438557332;0.001159096629777;4.83289530290242E-06;126641.499999971;1900;17;19;1;39064567.9338026;205285685.12458;297.7017;SBAS;120;0;22400;38;0.64;0.004;0.256;7;1
2121
1900;126641.699999971;13.3736627708313;8.48649139289577E-06;52.5045700667812;2.14841165195449E-05;76.0109336772002;6.49893806177743E-06;1.24850033690745;1.24206077549312E-07;0.817891964201408;0.033520597472269;5.87869895162294;0.000244062630444;-0.006097359125874;4.83221090156567E-06;126641.699999971;1900;17;19;1;19834589.6522187;104231461.634255;221.9409;GPS;12;0;64500;49;0.32;0.004;0.128;15;0
@@ -55,7 +55,7 @@ GPSWeek [weeks];GPSSecondsOfWeek [s];Longitude (GT Lon) [deg];Longitude Cov (GT
5555
1900;126641.999999971;13.3736706368836;9.55423586761847E-06;52.5045852766343;5.68575971200413E-05;76.0209010224789;6.83321907497391E-06;1.2438438454119;1.2082266905476E-07;0.655158207700879;0.033528542665454;6.09507477277657;0.000242434675261;-0.017921329576893;4.83145653325631E-06;126641.999999971;1900;17;18;1;21244025.1022201;111638104.929202;2511.509;GPS;25;0;0;21;20.48;0.06;8.192;1;1
5656
1900;126641.999999971;13.3736706368836;9.55423586761847E-06;52.5045852766343;5.68575971200413E-05;76.0209010224789;6.83321907497391E-06;1.2438438454119;1.2082266905476E-07;0.655158207700879;0.033528542665454;6.09507477277657;0.000242434675261;-0.017921329576893;4.83145653325631E-06;126641.999999971;1900;17;18;1;23856174.754904;125365048.485882;4085.602;GPS;29;0;18520;46;0.64;0.004;0.256;7;0
5757
1900;126641.999999971;13.3736706368836;9.55423586761847E-06;52.5045852766343;5.68575971200413E-05;76.0209010224789;6.83321907497391E-06;1.2438438454119;1.2082266905476E-07;0.655158207700879;0.033528542665454;6.09507477277657;0.000242434675261;-0.017921329576893;4.83145653325631E-06;126641.999999971;1900;17;18;1;39064539.712438;205285536.588225;297.1433;SBAS;120;0;22900;40;0.64;0.004;0.256;7;1
58-
1900;126642.199999971;13.3736761025676;1.0266827129563E-05;52.5045954316559;6.12486413088635E-06;76.0277935978957;7.07500490845495E-06;1.24040398927173;1.18895715983536E-07;0.57562925809907;0.033474318069298;6.2159202832845;0.000241475888126;-0.016862766152372;4.83106492094534E-06;126642.199999971;1900;17;18;1;19834568.3585905;104231350.751478;221.7419;GPS;12;0;64500;49;0.32;0.004;0.128;15;0
58+
1900;126642.199999971;13.3736761025676;1.0266827129563E-05;52.5045954316559;6.12486413088635E-06;76.0277935978957;7.07500490845495E-06;1.24040398927173;1.18895715983536E-07;0.57562925809907;0.033474318069298;6.2159202832845;0.000241475888126;-0.016862766152372;4.83106492094534E-06;126642.199999971;1900;17;18;1;19834568.3585905;104231350.751478;221.7419;GPS;12;0;64500;49;0.32;0.004;0.128;15;#
5959
1900;126642.199999971;13.3736761025676;1.0266827129563E-05;52.5045954316559;6.12486413088635E-06;76.0277935978957;7.07500490845495E-06;1.24040398927173;1.18895715983536E-07;0.57562925809907;0.033474318069298;6.2159202832845;0.000241475888126;-0.016862766152372;4.83106492094534E-06;126642.199999971;1900;17;18;1;19784425.1288151;105796223.038639;2215.248;Glonass;20;9;21100;47;1.28;0.012;0.512;7;0
6060
1900;126642.199999971;13.3736761025676;1.0266827129563E-05;52.5045954316559;6.12486413088635E-06;76.0277935978957;7.07500490845495E-06;1.24040398927173;1.18895715983536E-07;0.57562925809907;0.033474318069298;6.2159202832845;0.000241475888126;-0.016862766152372;4.83106492094534E-06;126642.199999971;1900;17;18;1;22692778.5713973;121093013.883917;1262.786;Glonass;2;3;140;28;10.24;0.028;4.096;3;1
6161
1900;126642.199999971;13.3736761025676;1.0266827129563E-05;52.5045954316559;6.12486413088635E-06;76.0277935978957;7.07500490845495E-06;1.24040398927173;1.18895715983536E-07;0.57562925809907;0.033474318069298;6.2159202832845;0.000241475888126;-0.016862766152372;4.83106492094534E-06;126642.199999971;1900;17;18;1;22636156.3142782;118953803.474665;-2781.141;GPS;19;0;120;48;2.56;0.016;1.024;3;0
@@ -276,7 +276,7 @@ GPSWeek [weeks];GPSSecondsOfWeek [s];Longitude (GT Lon) [deg];Longitude Cov (GT
276276
1900;126644.699999971;13.3737528739026;1.72540386355625E-05;52.5047361165634;3.72494489267877E-05;76.1002339315601;1.27300932889936E-05;1.23059283207112;1.09200528507944E-07;0.004401746290284;0.033647816244823;6.79675773729105;0.000260777877192;0.003043568318105;4.83024382731984E-06;126644.699999971;1900;17;17;1;25080305.6490815;131797895.372687;-3103.288;GPS;17;0;40;34;10.24;0.028;4.096;1;1
277277
1900;126644.699999971;13.3737528739026;1.72540386355625E-05;52.5047361165634;3.72494489267877E-05;76.1002339315601;1.27300932889936E-05;1.23059283207112;1.09200528507944E-07;0.004401746290284;0.033647816244823;6.79675773729105;0.000260777877192;0.003043568318105;4.83024382731984E-06;126644.699999971;1900;17;17;1;23475770.4128713;123366020.315251;2838.054;GPS;2;0;220;40;5.12;0.024;2.048;3;1
278278
1900;126644.699999971;13.3737528739026;1.72540386355625E-05;52.5047361165634;3.72494489267877E-05;76.1002339315601;1.27300932889936E-05;1.23059283207112;1.09200528507944E-07;0.004401746290284;0.033647816244823;6.79675773729105;0.000260777877192;0.003043568318105;4.83024382731984E-06;126644.699999971;1900;17;17;1;21242772.4514273;111631522.460852;2514.472;GPS;25;0;0;22;20.48;0.06;8.192;1;1
279-
1900;126644.699999971;13.3737528739026;1.72540386355625E-05;52.5047361165634;3.72494489267877E-05;76.1002339315601;1.27300932889936E-05;1.23059283207112;1.09200528507944E-07;0.004401746290284;0.033647816244823;6.79675773729105;0.000260777877192;0.003043568318105;4.83024382731984E-06;126644.699999971;1900;17;17;1;23854076.9202652;125354024.770602;4082.52;GPS;29;0;21220;46;0.64;0.004;0.256;7;0
279+
1900;126644.699999971;13.3737528739026;1.72540386355625E-05;52.5047361165634;3.72494489267877E-05;76.1002339315601;1.27300932889936E-05;1.23059283207112;1.09200528507944E-07;0.004401746290284;0.033647816244823;6.79675773729105;0.000260777877192;0.003043568318105;4.83024382731984E-06;126644.699999971;1900;17;17;1;23854076.9202652;125354024.770602;4082.52;GPS;29;0;21220;46;0.64;0.004;0.256;7;#
280280
1900;126644.699999971;13.3737528739026;1.72540386355625E-05;52.5047361165634;3.72494489267877E-05;76.1002339315601;1.27300932889936E-05;1.23059283207112;1.09200528507944E-07;0.004401746290284;0.033647816244823;6.79675773729105;0.000260777877192;0.003043568318105;4.83024382731984E-06;126644.699999971;1900;17;17;1;39064388.9163814;205284744.111719;294.311;SBAS;120;0;25600;42;0.64;0.004;0.256;7;1
281281
1900;126644.899999971;13.373759111502;1.70330304243928E-05;52.5047474900436;3.00829323688218E-05;76.1027358006686;1.35879955988611E-05;1.231377550037;1.094744829659E-07;0.054022141182031;0.033659582420191;6.80412263056496;0.000263056312665;0.005455440172796;4.83037386163492E-06;126644.899999971;1900;17;18;1;19834455.0805021;104230753.810774;220.7175;GPS;12;0;64500;51;0.32;0.004;0.128;15;0
282282
1900;126644.899999971;13.373759111502;1.70330304243928E-05;52.5047474900436;3.00829323688218E-05;76.1027358006686;1.35879955988611E-05;1.231377550037;1.094744829659E-07;0.054022141182031;0.033659582420191;6.80412263056496;0.000263056312665;0.005455440172796;4.83037386163492E-06;126644.899999971;1900;17;18;1;19783308.0662142;105790245.956939;2210.978;Glonass;20;9;23800;44;1.28;0.008;0.512;7;0

docs/source/conf.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@
6868
"undoc-members": True,
6969
"private-members": True,
7070
# "special-members": True,
71-
"inherited-members": True,
71+
"inherited-members": False,
7272
"show-inheritance": True,
7373
}
7474

docs/source/reference/reference.rst

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -175,6 +175,8 @@ State estimate naming conventions are as follows:
175175
* :code:`x_rx_m` : (float) receiver ECEF x position estimate in meters.
176176
* :code:`y_rx_m` : (float) receiver ECEF y position estimate in meters.
177177
* :code:`z_rx_m` : (float) receiver ECEF z position estimate in meters.
178+
* :code:`v_rx_mps` : (float) receiver total velocity estimate in
179+
meters per second.
178180
* :code:`vx_rx_mps` : (float) receiver ECEF x velocity estimate in
179181
meters per second.
180182
* :code:`vy_rx_mps` : (float) receiver ECEF y velocity estimate in
@@ -183,6 +185,8 @@ State estimate naming conventions are as follows:
183185
meters per second.
184186
* :code:`ax_rx_mps2` : (float) receiver ECEF x acceleration estimate in
185187
meters per second squared.
188+
* :code:`a_rx_mps2` : (float) receiver total acceleration estimate in
189+
meters per second squared.
186190
* :code:`ay_rx_mps2` : (float) receiver ECEF y acceleration estimate in
187191
meters per second squared.
188192
* :code:`az_rx_mps2` : (float) receiver ECEF z acceleration estimate in
@@ -196,6 +200,10 @@ State estimate naming conventions are as follows:
196200
degrees.
197201
* :code:`alt_rx_m` : (float) receiver altitude position estimate in
198202
meters. Referenced to the WGS-84 ellipsoid.
203+
* :code:`heading_rx_rad` : (float) receiver heading estimate in radians,
204+
clockwise from North, where to 0 radians is North, pi/2
205+
radians is East and so on.
206+
Assumed to be radians in the range between 0 and 2pi.
199207

200208
Receiver ground truth naming conventions are as follows:
201209

@@ -209,19 +217,32 @@ Receiver ground truth naming conventions are as follows:
209217
meters.
210218
* :code:`z_rx_gt_m` : (float) receiver ECEF z ground truth position in
211219
meters.
220+
* :code:`v_rx_gt_mps` : (float) receiver total velocity ground truth in
221+
meters per second.
212222
* :code:`vx_rx_gt_mps` : (float) receiver ECEF x velocity ground truth
213223
in meters per second.
214224
* :code:`vy_rx_gt_mps` : (float) receiver ECEF y velocity ground truth
215225
in meters per second.
216226
* :code:`vz_rx_gt_mps` : (float) receiver ECEF z velocity ground truth
217227
in meters per second.
228+
* :code:`a_rx_gt_mps2` : (float) receiver total acceleration estimate in
229+
meters per second squared.
230+
* :code:`ax_rx_gt_mps2` : (float) receiver ECEF x acceleration ground truth
231+
in meters per second squared.
232+
* :code:`ay_rx_gt_mps2` : (float) receiver ECEF y acceleration ground truth
233+
in meters per second squared.
234+
* :code:`az_rx_gt_mps2` : (float) receiver ECEF z acceleration ground truth
235+
in meters per second squared.
218236
* :code:`lat_rx_gt_deg` : (float) receiver ground truth latitude in
219237
degrees.
220238
* :code:`lon_rx_gt_deg` : (float) receiver ground truth longitude in
221239
degrees.
222240
* :code:`alt_rx_gt_m` : (float) receiver ground truth altitude in meters.
223241
Referenced to the WGS-84 ellipsoid.
224-
242+
* :code:`heading_rx_gt_rad` : (float) receiver heading ground truth in
243+
radians, clockwise from North, where to 0 radians is North, pi/2
244+
radians is East and so on.
245+
Assumed to be radians in the range between 0 and 2pi.
225246

226247
Module Level Function References
227248
--------------------------------

gnss_lib_py/algorithms/snapshot.py

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,7 @@ def solve_wls(measurements, weight_type = None, only_bias = False,
8484
rx_rows_to_find,
8585
max_allow=1)
8686
states = []
87+
runtime_error_idxs = {}
8788

8889
position = np.zeros((4,1))
8990
for timestamp, _, measurement_subset in measurements.loop_time("gps_millis", delta_t_decimals=delta_t_decimals):
@@ -120,9 +121,10 @@ def solve_wls(measurements, weight_type = None, only_bias = False,
120121
only_bias, tol, max_count)
121122
states.append([timestamp] + np.squeeze(position).tolist())
122123
except RuntimeError as error:
123-
warnings.warn("RuntimeError encountered at gps_millis: " \
124-
+ str(int(timestamp)) + " RuntimeError: " \
125-
+ str(error), RuntimeWarning)
124+
if str(error) not in runtime_error_idxs:
125+
runtime_error_idxs[str(error)] = [str(int(timestamp))]
126+
else:
127+
runtime_error_idxs[str(error)].append(str(int(timestamp)))
126128
states.append([timestamp, np.nan, np.nan, np.nan, np.nan])
127129

128130
states = np.array(states)
@@ -134,6 +136,11 @@ def solve_wls(measurements, weight_type = None, only_bias = False,
134136
state_estimate["z_rx_wls_m"] = states[:,3]
135137
state_estimate["b_rx_wls_m"] = states[:,4]
136138

139+
for error,timestamps in runtime_error_idxs.items():
140+
warnings.warn(error + " Encountered at " + str(len(timestamps))\
141+
+ " gps_millis of: " \
142+
+ ", ".join(timestamps), RuntimeWarning)
143+
137144
if np.isnan(states[:,1:]).all():
138145
warnings.warn("No valid state estimate computed in WLS, "\
139146
+ "returning NaNs.", RuntimeWarning)

gnss_lib_py/parsers/android.py

Lines changed: 37 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
import pandas as pd
1515

1616
from gnss_lib_py.parsers.navdata import NavData
17+
from gnss_lib_py.utils.coordinates import wrap_0_to_2pi
1718
from gnss_lib_py.utils.coordinates import geodetic_to_ecef
1819
from gnss_lib_py.utils.coordinates import ecef_to_geodetic
1920
from gnss_lib_py.utils.time_conversions import unix_to_gps_millis
@@ -271,14 +272,18 @@ def postprocess(self):
271272
https://www.kaggle.com/code/gymf123/tips-notes-from-the-competition-hosts
272273
"""
273274
# Correcting reported altitude
274-
self['alt_gt_m'] = self['alt_gt_m'] - 61.
275-
gt_lla = np.transpose(np.vstack([self['lat_gt_deg'],
276-
self['lon_gt_deg'],
277-
self['alt_gt_m']]))
275+
self['alt_rx_gt_m'] = self['alt_rx_gt_m'] - 61.
276+
gt_lla = np.transpose(np.vstack([self['lat_rx_gt_deg'],
277+
self['lon_rx_gt_deg'],
278+
self['alt_rx_gt_m']]))
278279
gt_ecef = geodetic_to_ecef(gt_lla)
279-
self["x_gt_m"] = gt_ecef[:,0]
280-
self["y_gt_m"] = gt_ecef[:,1]
281-
self["z_gt_m"] = gt_ecef[:,2]
280+
self["x_rx_gt_m"] = gt_ecef[:,0]
281+
self["y_rx_gt_m"] = gt_ecef[:,1]
282+
self["z_rx_gt_m"] = gt_ecef[:,2]
283+
284+
# convert bearing degrees to heading in radians
285+
self["heading_rx_gt_rad"] = np.deg2rad(self["heading_rx_gt_rad"])
286+
self["heading_rx_gt_rad"] = wrap_0_to_2pi(self["heading_rx_gt_rad"])
282287

283288
@staticmethod
284289
def _row_map():
@@ -289,10 +294,12 @@ def _row_map():
289294
row_map : Dict
290295
Dictionary of the form {old_name : new_name}
291296
"""
292-
row_map = {'latDeg' : 'lat_gt_deg',
293-
'lngDeg' : 'lon_gt_deg',
294-
'heightAboveWgs84EllipsoidM' : 'alt_gt_m',
295-
'millisSinceGpsEpoch' : 'gps_millis'
297+
row_map = {'latDeg' : 'lat_rx_gt_deg',
298+
'lngDeg' : 'lon_rx_gt_deg',
299+
'heightAboveWgs84EllipsoidM' : 'alt_rx_gt_m',
300+
'millisSinceGpsEpoch' : 'gps_millis',
301+
'speedMps' : 'v_rx_gt_mps',
302+
'courseDegree' : 'heading_rx_gt_rad',
296303
}
297304
return row_map
298305

@@ -309,20 +316,24 @@ def postprocess(self):
309316
Notes
310317
-----
311318
"""
312-
if np.any(np.isnan(self['alt_gt_m'])):
319+
if np.any(np.isnan(self['alt_rx_gt_m'])):
313320
warnings.warn("Some altitude values were missing, using 0m ", RuntimeWarning)
314-
self['alt_gt_m'] = np.nan_to_num(self['alt_gt_m'])
315-
gt_lla = np.transpose(np.vstack([self['lat_gt_deg'],
316-
self['lon_gt_deg'],
317-
self['alt_gt_m']]))
321+
self['alt_rx_gt_m'] = np.nan_to_num(self['alt_rx_gt_m'])
322+
gt_lla = np.transpose(np.vstack([self['lat_rx_gt_deg'],
323+
self['lon_rx_gt_deg'],
324+
self['alt_rx_gt_m']]))
318325
gt_ecef = geodetic_to_ecef(gt_lla)
319-
self["x_gt_m"] = gt_ecef[:,0]
320-
self["y_gt_m"] = gt_ecef[:,1]
321-
self["z_gt_m"] = gt_ecef[:,2]
326+
self["x_rx_gt_m"] = gt_ecef[:,0]
327+
self["y_rx_gt_m"] = gt_ecef[:,1]
328+
self["z_rx_gt_m"] = gt_ecef[:,2]
322329

323330
# add gps milliseconds
324331
self["gps_millis"] = unix_to_gps_millis(self['unix_millis'])
325332

333+
# convert bearing degrees to heading in radians
334+
self["heading_rx_gt_rad"] = np.deg2rad(self["heading_rx_gt_rad"])
335+
self["heading_rx_gt_rad"] = wrap_0_to_2pi(self["heading_rx_gt_rad"])
336+
326337
@staticmethod
327338
def _row_map():
328339
"""Map row names from loaded data to gnss_lib_py standard
@@ -332,10 +343,13 @@ def _row_map():
332343
row_map : Dict
333344
Dictionary of the form {old_name : new_name}
334345
"""
335-
row_map = {'LatitudeDegrees' : 'lat_gt_deg',
336-
'LongitudeDegrees' : 'lon_gt_deg',
337-
'AltitudeMeters' : 'alt_gt_m',
338-
'UnixTimeMillis' : 'unix_millis'
346+
row_map = {'LatitudeDegrees' : 'lat_rx_gt_deg',
347+
'LongitudeDegrees' : 'lon_rx_gt_deg',
348+
'AltitudeMeters' : 'alt_rx_gt_m',
349+
'SpeedMps' : 'v_rx_gt_mps',
350+
'BearingDegrees' : 'heading_rx_gt_rad',
351+
'UnixTimeMillis' : 'unix_millis',
352+
339353
}
340354
return row_map
341355

gnss_lib_py/parsers/ephemeris.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,8 @@ class EphemerisManager():
5353
Ephemeris parameters
5454
leapseconds : int
5555
Leap seconds to add to UTC time to get GPS time
56+
verbose : bool
57+
If true, prints debugging statements.
5658
5759
Notes
5860
-----

0 commit comments

Comments
 (0)