pingmapper 5.0.5__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.5'
1
+ __version__ = '5.0.7'
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pingmapper
3
- Version: 5.0.5
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
@@ -17,7 +17,7 @@ Classifier: Topic :: Scientific/Engineering :: Visualization
17
17
  Classifier: Topic :: Scientific/Engineering :: Oceanography
18
18
  Classifier: Topic :: Scientific/Engineering :: GIS
19
19
  Classifier: Topic :: Scientific/Engineering :: Hydrology
20
- Requires-Python: <3.13
20
+ Requires-Python: >=3.6
21
21
  Description-Content-Type: text/markdown
22
22
  License-File: LICENSE
23
23
  Requires-Dist: pinginstaller
@@ -1,10 +1,11 @@
1
1
  pingmapper/__init__.py,sha256=8zLGg-DfQhnDl2Ky0n-zXpN-8e-g7iR0AcaI4l4Vvpk,32
2
- pingmapper/__main__.py,sha256=6qBbTK3eg_Er2SlUgBUaR0CBrJCKB9P2dpJaq2y5y3g,1421
2
+ pingmapper/__main__.py,sha256=AFopb_XqSU4ZWnmmNICLmtEP7XI_7D-9ng5mnvWNePc,1431
3
3
  pingmapper/class_mapSubstrateObj.py,sha256=txB9YqXfVgDFi628jo2F1RtEw1lCNR8wYpkhy94bn0U,37036
4
4
  pingmapper/class_portstarObj.py,sha256=eufSlCsjBLyMr_2_a_B0_OzG2O6qyMX4o_pfSGwH04Y,106729
5
5
  pingmapper/class_rectObj.py,sha256=aJbM-q3UNBhvWutOJwnweGkWTrx6avslX2DCWdofW4Q,96182
6
6
  pingmapper/class_sonObj.py,sha256=7HVeCTDSUTwerkdB-hrRTITvh9q7kCfbL98QCTFp85Q,75683
7
- pingmapper/funcs_common.py,sha256=pCOIy83srtYKtKUnF4oXkd83_kimZI0NiSrO0TE0O4g,13414
7
+ pingmapper/class_sonObj_nadirgaptest.py,sha256=DSFgjEgpwPgDZslw0vXGGBNFYlcoUa2Ufbr8i_Uqdhc,76915
8
+ pingmapper/funcs_common.py,sha256=0uZErbrWZ_jhOLOc-CT--8OX4eHF9qE_E5Wwy60aSvQ,15300
8
9
  pingmapper/funcs_model.py,sha256=dO9J4-0s1COggHkSUqHFC1qKTs20A6PSvkDqXWMUT6A,7916
9
10
  pingmapper/funcs_rectify.py,sha256=bAFWbNr4dyOuQzF1j4Je-K4zxfJZUjISc0nYrOot8Ng,12418
10
11
  pingmapper/gui_main.py,sha256=5JsOYqRu146T1xhRgYC9ag3vnpRWqa2PDuJky595YA0,34780
@@ -13,10 +14,10 @@ pingmapper/main_readFiles.py,sha256=lhL41W4UisY8ZgdRBgk5G47SeaLHMmB0Myk47Fhxtrc,
13
14
  pingmapper/main_rectify.py,sha256=uOKHHYrjVa3PVtU26G_fL9hTV7sZkvIzEgk3VJd3tVA,20217
14
15
  pingmapper/test_PINGMapper.py,sha256=-SYMsdK-tTodXp5dCFSWPn-KRN7-OjX6OwjQ2-8hQg0,14176
15
16
  pingmapper/test_time.py,sha256=uHT0mtLDP1J6w-snoELyk4UzZ2LrDeF6jGgJJVloalg,750
16
- pingmapper/version.py,sha256=CGqqFoM6pwEtisATYun-G7Urkb6aiPjdJeiEbTubKms,21
17
- pingmapper-5.0.5.data/data/pingmapper_config/default_params.json,sha256=YA9Rx1PSdUy4cTq-vtKORo3nNLisCYNOeUBxClldmHs,1285
18
- pingmapper-5.0.5.dist-info/licenses/LICENSE,sha256=lowDp_th1CGR0Z224a-jYRi-oNFe_0fdldL3USXhX-k,1095
19
- pingmapper-5.0.5.dist-info/METADATA,sha256=midhvVBKnMGT2AHHNSzAnvJ5s6R9gHwtvI1m56Zykn4,9202
20
- pingmapper-5.0.5.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
21
- pingmapper-5.0.5.dist-info/top_level.txt,sha256=RlV4sDoE3uIIDzNMOjN2t012Ia_jsblNVojJvg4q84w,11
22
- pingmapper-5.0.5.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,,