pingmapper 5.0.6__py3-none-any.whl → 5.0.7__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -244,82 +244,122 @@ def downloadSegmentationModelsv1_0(modelDir):
244
244
  return
245
245
 
246
246
 
247
- # =========================================================
248
- def saveDefaultParams(values):
249
-
250
- try:
251
- projDir = os.path.join(values['proj'], values['projName'])
252
- except:
253
- projDir = os.path.join(values['proj'], values['prefix'])
254
-
255
- try:
256
- inDir = values['inDir']
257
- except:
258
- inDir = ''
247
+ # # =========================================================
248
+ # def saveDefaultParams(values):
249
+
250
+ # try:
251
+ # projDir = os.path.join(values['proj'], values['projName'])
252
+ # except:
253
+ # projDir = os.path.join(values['proj'], values['prefix'])
254
+
255
+ # try:
256
+ # inDir = values['inDir']
257
+ # except:
258
+ # inDir = ''
259
+
260
+ # try:
261
+ # inFile = values['inFile']
262
+ # except:
263
+ # inFile = ''
264
+
265
+ # params = {
266
+ # 'inDir':inDir,
267
+ # 'inFile':inFile,
268
+ # 'projDir':projDir,
269
+ # 'project_mode':int(values['project_mode']),
270
+ # 'tempC':float(values['tempC']),
271
+ # 'nchunk':int(values['nchunk']),
272
+ # 'cropRange':float(values['cropRange']),
273
+ # 'exportUnknown':values['exportUnknown'],
274
+ # 'fixNoDat':values['fixNoDat'],
275
+ # 'threadCnt':float(values['threadCnt']),
276
+ # 'max_heading_deviation':float(values['max_heading_deviation']),
277
+ # 'max_heading_distance':float(values['max_heading_distance']),
278
+ # 'min_speed':float(values['min_speed']),
279
+ # 'max_speed':float(values['max_speed']),
280
+ # 'filter_table':bool(values['filter_table']),
281
+ # 'aoi':values['aoi'],
282
+ # 'pix_res_son':float(values['pix_res_son']),
283
+ # 'pix_res_map':float(values['pix_res_map']),
284
+ # 'x_offset':float(values['x_offset']),
285
+ # 'y_offset':float(values['y_offset']),
286
+ # 'egn':values['egn'],
287
+ # 'egn_stretch':values['egn_stretch'],
288
+ # 'egn_stretch_factor':float(values['egn_stretch_factor']),
289
+ # 'wcp':values['wcp'],
290
+ # 'wcr':values['wcr'],
291
+ # 'wco':values['wco'],
292
+ # 'wcm':values['wcm'],
293
+ # 'sonogram_colorMap':values['sonogram_colorMap'],
294
+ # 'tileFile':values['tileFile'],
295
+ # 'spdCor':bool(values['spdCor']),
296
+ # 'maxCrop':values['maxCrop'],
297
+ # 'mask_shdw':bool(values['mask_shdw']),
298
+ # 'remShadow':values['remShadow'],
299
+ # 'detectDep':values['detectDep'],
300
+ # 'smthDep':values['smthDep'],
301
+ # 'adjDep':float(values['adjDep']),
302
+ # 'pltBedPick':values['pltBedPick'],
303
+ # 'rect_wcp':values['rect_wcp'],
304
+ # 'rect_wcr':values['rect_wcr'],
305
+ # 'rubberSheeting':values['rubberSheeting'],
306
+ # 'rectMethod':values['rectMethod'],
307
+ # 'rectInterpDist':int(values['rectInterpDist']),
308
+ # 'son_colorMap':values['son_colorMap'],
309
+ # 'pltSubClass':values['pltSubClass'],
310
+ # 'map_sub':values['map_sub'],
311
+ # 'export_poly':values['export_poly'],
312
+ # 'mosaic':values['mosaic'],
313
+ # 'map_mosaic':values['map_mosaic'],
314
+ # 'banklines':values['banklines'],
315
+ # 'coverage':values['coverage'],
316
+ # }
317
+
318
+ # json_object = json.dumps(params, indent=4)
319
+
320
+ # user_params = os.path.join(SCRIPT_DIR, 'user_params.json')
321
+ # with open(user_params, "w") as f:
322
+ # f.write(json_object)
323
+
324
+ def saveDefaultParams(values, user_params=None):
325
+ """
326
+ Save provided values to user_params.json.
327
+ Merge with any existing file and convert common numpy types to plain Python.
328
+ """
329
+ if user_params is None:
330
+ user_params = os.path.join(SCRIPT_DIR, 'user_params.json')
259
331
 
332
+ # load existing params if present
260
333
  try:
261
- inFile = values['inFile']
262
- except:
263
- inFile = ''
264
-
265
- params = {
266
- 'inDir':inDir,
267
- 'inFile':inFile,
268
- 'projDir':projDir,
269
- 'project_mode':int(values['project_mode']),
270
- 'tempC':float(values['tempC']),
271
- 'nchunk':int(values['nchunk']),
272
- 'cropRange':float(values['cropRange']),
273
- 'exportUnknown':values['exportUnknown'],
274
- 'fixNoDat':values['fixNoDat'],
275
- 'threadCnt':float(values['threadCnt']),
276
- 'max_heading_deviation':float(values['max_heading_deviation']),
277
- 'max_heading_distance':float(values['max_heading_distance']),
278
- 'min_speed':float(values['min_speed']),
279
- 'max_speed':float(values['max_speed']),
280
- 'filter_table':bool(values['filter_table']),
281
- 'aoi':values['aoi'],
282
- 'pix_res_son':float(values['pix_res_son']),
283
- 'pix_res_map':float(values['pix_res_map']),
284
- 'x_offset':float(values['x_offset']),
285
- 'y_offset':float(values['y_offset']),
286
- 'egn':values['egn'],
287
- 'egn_stretch':values['egn_stretch'],
288
- 'egn_stretch_factor':float(values['egn_stretch_factor']),
289
- 'wcp':values['wcp'],
290
- 'wcr':values['wcr'],
291
- 'wco':values['wco'],
292
- 'wcm':values['wcm'],
293
- 'sonogram_colorMap':values['sonogram_colorMap'],
294
- 'tileFile':values['tileFile'],
295
- 'spdCor':bool(values['spdCor']),
296
- 'maxCrop':values['maxCrop'],
297
- 'mask_shdw':bool(values['mask_shdw']),
298
- 'remShadow':values['remShadow'],
299
- 'detectDep':values['detectDep'],
300
- 'smthDep':values['smthDep'],
301
- 'adjDep':float(values['adjDep']),
302
- 'pltBedPick':values['pltBedPick'],
303
- 'rect_wcp':values['rect_wcp'],
304
- 'rect_wcr':values['rect_wcr'],
305
- 'rubberSheeting':values['rubberSheeting'],
306
- 'rectMethod':values['rectMethod'],
307
- 'rectInterpDist':int(values['rectInterpDist']),
308
- 'son_colorMap':values['son_colorMap'],
309
- 'pltSubClass':values['pltSubClass'],
310
- 'map_sub':values['map_sub'],
311
- 'export_poly':values['export_poly'],
312
- 'mosaic':values['mosaic'],
313
- 'map_mosaic':values['map_mosaic'],
314
- 'banklines':values['banklines'],
315
- 'coverage':values['coverage'],
316
- }
317
-
318
- json_object = json.dumps(params, indent=4)
319
-
320
- user_params = os.path.join(SCRIPT_DIR, 'user_params.json')
321
- with open(user_params, "w") as f:
322
- f.write(json_object)
334
+ if os.path.exists(user_params):
335
+ with open(user_params, 'r', encoding='utf8') as f:
336
+ existing = json.load(f)
337
+ else:
338
+ existing = {}
339
+ except Exception:
340
+ existing = {}
341
+
342
+ def _sanitize(v):
343
+ if isinstance(v, dict):
344
+ return {k: _sanitize(val) for k, val in v.items()}
345
+ if isinstance(v, (np.integer, np.int_, np.int64)):
346
+ return int(v)
347
+ if isinstance(v, (np.floating, np.float64, np.float64)):
348
+ return float(v)
349
+ if isinstance(v, (np.ndarray, list, tuple)):
350
+ return [_sanitize(x) for x in v]
351
+ try:
352
+ json.dumps(v)
353
+ return v
354
+ except Exception:
355
+ return str(v)
356
+
357
+ sanitized = _sanitize(values)
358
+ merged = existing.copy()
359
+ merged.update(sanitized)
360
+
361
+ with open(user_params, 'w', encoding='utf8') as f:
362
+ json.dump(merged, f, indent=4, ensure_ascii=False)
323
363
 
324
364
  def clip_table(csv):
325
365
 
@@ -332,7 +372,16 @@ def clip_table(csv):
332
372
  elif sys.platform == "darwin":
333
373
  subprocess.run(['open', "{}".format(csv)], check=True)
334
374
  else:
335
- subprocess.run(['xdg-open', "{}".format(csv)], check=True)
375
+ try:
376
+ subprocess.run(['xdg-open', "{}".format(csv)], check=True)
377
+ except:
378
+ "WSL"
379
+ # Convert the WSL path to a Windows-style path
380
+ # Use -a for absolute path or -w for Windows path (can handle network shares)
381
+ windows_path = subprocess.check_output(["wslpath", "-w", csv]).decode().strip()
382
+
383
+ # Launch the file using the default Windows application
384
+ subprocess.run(["explorer.exe", windows_path])
336
385
 
337
386
  df = pd.read_csv(csv)
338
387
 
pingmapper/version.py CHANGED
@@ -1 +1 @@
1
- __version__ = '5.0.6'
1
+ __version__ = '5.0.7'
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pingmapper
3
- Version: 5.0.6
3
+ Version: 5.0.7
4
4
  Summary: Open-source interface for processing recreation-grade side scan sonar datasets and reproducibly mapping benthic habitat
5
5
  Author: Cameron Bodine, Daniel Buscombe
6
6
  Author-email: bodine.cs@gmail.email
@@ -5,7 +5,7 @@ pingmapper/class_portstarObj.py,sha256=eufSlCsjBLyMr_2_a_B0_OzG2O6qyMX4o_pfSGwH0
5
5
  pingmapper/class_rectObj.py,sha256=aJbM-q3UNBhvWutOJwnweGkWTrx6avslX2DCWdofW4Q,96182
6
6
  pingmapper/class_sonObj.py,sha256=7HVeCTDSUTwerkdB-hrRTITvh9q7kCfbL98QCTFp85Q,75683
7
7
  pingmapper/class_sonObj_nadirgaptest.py,sha256=DSFgjEgpwPgDZslw0vXGGBNFYlcoUa2Ufbr8i_Uqdhc,76915
8
- pingmapper/funcs_common.py,sha256=pCOIy83srtYKtKUnF4oXkd83_kimZI0NiSrO0TE0O4g,13414
8
+ pingmapper/funcs_common.py,sha256=0uZErbrWZ_jhOLOc-CT--8OX4eHF9qE_E5Wwy60aSvQ,15300
9
9
  pingmapper/funcs_model.py,sha256=dO9J4-0s1COggHkSUqHFC1qKTs20A6PSvkDqXWMUT6A,7916
10
10
  pingmapper/funcs_rectify.py,sha256=bAFWbNr4dyOuQzF1j4Je-K4zxfJZUjISc0nYrOot8Ng,12418
11
11
  pingmapper/gui_main.py,sha256=5JsOYqRu146T1xhRgYC9ag3vnpRWqa2PDuJky595YA0,34780
@@ -14,10 +14,10 @@ pingmapper/main_readFiles.py,sha256=lhL41W4UisY8ZgdRBgk5G47SeaLHMmB0Myk47Fhxtrc,
14
14
  pingmapper/main_rectify.py,sha256=uOKHHYrjVa3PVtU26G_fL9hTV7sZkvIzEgk3VJd3tVA,20217
15
15
  pingmapper/test_PINGMapper.py,sha256=-SYMsdK-tTodXp5dCFSWPn-KRN7-OjX6OwjQ2-8hQg0,14176
16
16
  pingmapper/test_time.py,sha256=uHT0mtLDP1J6w-snoELyk4UzZ2LrDeF6jGgJJVloalg,750
17
- pingmapper/version.py,sha256=Kp7sR4cODRPi7lBgDu-q0bdVhI9y2SJ5O0SyDpUJuXE,21
18
- pingmapper-5.0.6.data/data/pingmapper_config/default_params.json,sha256=YA9Rx1PSdUy4cTq-vtKORo3nNLisCYNOeUBxClldmHs,1285
19
- pingmapper-5.0.6.dist-info/licenses/LICENSE,sha256=lowDp_th1CGR0Z224a-jYRi-oNFe_0fdldL3USXhX-k,1095
20
- pingmapper-5.0.6.dist-info/METADATA,sha256=jgLZ_1zUPe7MrFOSBTYeF9HxSpuhXlfOuE3jygZCFow,9202
21
- pingmapper-5.0.6.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
22
- pingmapper-5.0.6.dist-info/top_level.txt,sha256=RlV4sDoE3uIIDzNMOjN2t012Ia_jsblNVojJvg4q84w,11
23
- pingmapper-5.0.6.dist-info/RECORD,,
17
+ pingmapper/version.py,sha256=oWnQcEE23SEA_ioIuiT7OYVZH5tddP4EGG6dO2yVfuU,21
18
+ pingmapper-5.0.7.data/data/pingmapper_config/default_params.json,sha256=YA9Rx1PSdUy4cTq-vtKORo3nNLisCYNOeUBxClldmHs,1285
19
+ pingmapper-5.0.7.dist-info/licenses/LICENSE,sha256=lowDp_th1CGR0Z224a-jYRi-oNFe_0fdldL3USXhX-k,1095
20
+ pingmapper-5.0.7.dist-info/METADATA,sha256=n4Ar8EKcgz0VgHI0bIV6Sz_qrWK1KE0ijtRcgXCMOTM,9202
21
+ pingmapper-5.0.7.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
22
+ pingmapper-5.0.7.dist-info/top_level.txt,sha256=RlV4sDoE3uIIDzNMOjN2t012Ia_jsblNVojJvg4q84w,11
23
+ pingmapper-5.0.7.dist-info/RECORD,,