uedgetools 1.3.2__tar.gz → 1.3.3__tar.gz

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.
Files changed (82) hide show
  1. {uedgetools-1.3.2/src/uedgetools.egg-info → uedgetools-1.3.3}/PKG-INFO +3 -2
  2. {uedgetools-1.3.2 → uedgetools-1.3.3}/pyproject.toml +2 -1
  3. {uedgetools-1.3.2 → uedgetools-1.3.3/src/uedgetools.egg-info}/PKG-INFO +3 -2
  4. {uedgetools-1.3.2 → uedgetools-1.3.3}/src/uedgetools.egg-info/requires.txt +2 -1
  5. {uedgetools-1.3.2 → uedgetools-1.3.3}/src/uetools/UeCase/Input.py +38 -32
  6. {uedgetools-1.3.2 → uedgetools-1.3.3}/src/uetools/UeDashboard/Dashboard.py +78 -24
  7. {uedgetools-1.3.2 → uedgetools-1.3.3}/src/uetools/UeDiagnostics/Diagnostics.py +14 -4
  8. {uedgetools-1.3.2 → uedgetools-1.3.3}/src/uetools/UePlot/CasePlot.py +6 -4
  9. {uedgetools-1.3.2 → uedgetools-1.3.3}/src/uetools/UeUtils/AboutSetup.py +1 -1
  10. uedgetools-1.3.3/src/uetools/VERSION +1 -0
  11. uedgetools-1.3.2/src/uetools/VERSION +0 -1
  12. {uedgetools-1.3.2 → uedgetools-1.3.3}/LICENSE +0 -0
  13. {uedgetools-1.3.2 → uedgetools-1.3.3}/NOTICE.md +0 -0
  14. {uedgetools-1.3.2 → uedgetools-1.3.3}/README.md +0 -0
  15. {uedgetools-1.3.2 → uedgetools-1.3.3}/setup.cfg +0 -0
  16. {uedgetools-1.3.2 → uedgetools-1.3.3}/src/uedgetools.egg-info/SOURCES.txt +0 -0
  17. {uedgetools-1.3.2 → uedgetools-1.3.3}/src/uedgetools.egg-info/dependency_links.txt +0 -0
  18. {uedgetools-1.3.2 → uedgetools-1.3.3}/src/uedgetools.egg-info/entry_points.txt +0 -0
  19. {uedgetools-1.3.2 → uedgetools-1.3.3}/src/uedgetools.egg-info/top_level.txt +0 -0
  20. {uedgetools-1.3.2 → uedgetools-1.3.3}/src/uetools/UeBayesian/BayesDemo.py +0 -0
  21. {uedgetools-1.3.2 → uedgetools-1.3.3}/src/uetools/UeBayesian/BayesUtility.py +0 -0
  22. {uedgetools-1.3.2 → uedgetools-1.3.3}/src/uetools/UeBayesian/Bayesian.py +0 -0
  23. {uedgetools-1.3.2 → uedgetools-1.3.3}/src/uetools/UeBayesian/__init__.py +0 -0
  24. {uedgetools-1.3.2 → uedgetools-1.3.3}/src/uetools/UeCampaign/Campaign.py +0 -0
  25. {uedgetools-1.3.2 → uedgetools-1.3.3}/src/uetools/UeCampaign/__init__.py +0 -0
  26. {uedgetools-1.3.2 → uedgetools-1.3.3}/src/uetools/UeCase/Case.py +0 -0
  27. {uedgetools-1.3.2 → uedgetools-1.3.3}/src/uetools/UeCase/Config.py +0 -0
  28. {uedgetools-1.3.2 → uedgetools-1.3.3}/src/uetools/UeCase/Parallel.py +0 -0
  29. {uedgetools-1.3.2 → uedgetools-1.3.3}/src/uetools/UeCase/Save.py +0 -0
  30. {uedgetools-1.3.2 → uedgetools-1.3.3}/src/uetools/UeCase/__init__.py +0 -0
  31. {uedgetools-1.3.2 → uedgetools-1.3.3}/src/uetools/UeCherab/Cherab.py +0 -0
  32. {uedgetools-1.3.2 → uedgetools-1.3.3}/src/uetools/UeCherab/README.md +0 -0
  33. {uedgetools-1.3.2 → uedgetools-1.3.3}/src/uetools/UeCherab/__init__.py +0 -0
  34. {uedgetools-1.3.2 → uedgetools-1.3.3}/src/uetools/UeCherab/bolometer_sensitivity.py +0 -0
  35. {uedgetools-1.3.2 → uedgetools-1.3.3}/src/uetools/UeCherab/d3d/__init__.py +0 -0
  36. {uedgetools-1.3.2 → uedgetools-1.3.3}/src/uetools/UeCherab/d3d/bolometer.py +0 -0
  37. {uedgetools-1.3.2 → uedgetools-1.3.3}/src/uetools/UeCherab/d3d/wall.py +0 -0
  38. {uedgetools-1.3.2 → uedgetools-1.3.3}/src/uetools/UeCherab/triangulate.py +0 -0
  39. {uedgetools-1.3.2 → uedgetools-1.3.3}/src/uetools/UeDEGAS/Coupling.py +0 -0
  40. {uedgetools-1.3.2 → uedgetools-1.3.3}/src/uetools/UeDEGAS/__init__.py +0 -0
  41. {uedgetools-1.3.2 → uedgetools-1.3.3}/src/uetools/UeDashboard/__init__.py +0 -0
  42. {uedgetools-1.3.2 → uedgetools-1.3.3}/src/uetools/UeDashboard/range_slider.py +0 -0
  43. {uedgetools-1.3.2 → uedgetools-1.3.3}/src/uetools/UeDatabase/DB_1Dplots.py +0 -0
  44. {uedgetools-1.3.2 → uedgetools-1.3.3}/src/uetools/UeDatabase/DB_2Dplots.py +0 -0
  45. {uedgetools-1.3.2 → uedgetools-1.3.3}/src/uetools/UeDatabase/Database.py +0 -0
  46. {uedgetools-1.3.2 → uedgetools-1.3.3}/src/uetools/UeDatabase/__init__.py +0 -0
  47. {uedgetools-1.3.2 → uedgetools-1.3.3}/src/uetools/UeDiagnostics/__init__.py +0 -0
  48. {uedgetools-1.3.2 → uedgetools-1.3.3}/src/uetools/UeDiagnostics/d3d_bolometer_projection.hdf5 +0 -0
  49. {uedgetools-1.3.2 → uedgetools-1.3.3}/src/uetools/UeGrid/Grid.py +0 -0
  50. {uedgetools-1.3.2 → uedgetools-1.3.3}/src/uetools/UeGrid/__init__.py +0 -0
  51. {uedgetools-1.3.2 → uedgetools-1.3.3}/src/uetools/UePlot/Plot.py +0 -0
  52. {uedgetools-1.3.2 → uedgetools-1.3.3}/src/uetools/UePlot/__init__.py +0 -0
  53. {uedgetools-1.3.2 → uedgetools-1.3.3}/src/uetools/UePostproc/Postproc.py +0 -0
  54. {uedgetools-1.3.2 → uedgetools-1.3.3}/src/uetools/UeSolver/Solver.py +0 -0
  55. {uedgetools-1.3.2 → uedgetools-1.3.3}/src/uetools/UeSolver/SolverStrategy.py +0 -0
  56. {uedgetools-1.3.2 → uedgetools-1.3.3}/src/uetools/UeSolver/__init__.py +0 -0
  57. {uedgetools-1.3.2 → uedgetools-1.3.3}/src/uetools/UeUtils/ADASclass.py +0 -0
  58. {uedgetools-1.3.2 → uedgetools-1.3.3}/src/uetools/UeUtils/Convert.py +0 -0
  59. {uedgetools-1.3.2 → uedgetools-1.3.3}/src/uetools/UeUtils/Interpolate.py +0 -0
  60. {uedgetools-1.3.2 → uedgetools-1.3.3}/src/uetools/UeUtils/Lookup.py +0 -0
  61. {uedgetools-1.3.2 → uedgetools-1.3.3}/src/uetools/UeUtils/RadTransp.py +0 -0
  62. {uedgetools-1.3.2 → uedgetools-1.3.3}/src/uetools/UeUtils/Tools.py +0 -0
  63. {uedgetools-1.3.2 → uedgetools-1.3.3}/src/uetools/UeUtils/Tracker.py +0 -0
  64. {uedgetools-1.3.2 → uedgetools-1.3.3}/src/uetools/UeUtils/Utilities.py +0 -0
  65. {uedgetools-1.3.2 → uedgetools-1.3.3}/src/uetools/UeUtils/__init__.py +0 -0
  66. {uedgetools-1.3.2 → uedgetools-1.3.3}/src/uetools/__init__.py +0 -0
  67. {uedgetools-1.3.2 → uedgetools-1.3.3}/src/uetools/geometryTest.py +0 -0
  68. {uedgetools-1.3.2 → uedgetools-1.3.3}/src/uetools/ignore/Track.py +0 -0
  69. {uedgetools-1.3.2 → uedgetools-1.3.3}/src/uetools/ignore/UeGui/Commands.py +0 -0
  70. {uedgetools-1.3.2 → uedgetools-1.3.3}/src/uetools/ignore/UeGui/ScrollableNotebook.py +0 -0
  71. {uedgetools-1.3.2 → uedgetools-1.3.3}/src/uetools/ignore/UeGui/__init__.py +0 -0
  72. {uedgetools-1.3.2 → uedgetools-1.3.3}/src/uetools/ignore/UeGui/example/README.md +0 -0
  73. {uedgetools-1.3.2 → uedgetools-1.3.3}/src/uetools/ignore/UeGui/example/d3dHsm.h5 +0 -0
  74. {uedgetools-1.3.2 → uedgetools-1.3.3}/src/uetools/ignore/UeGui/example/ehr2.dat +0 -0
  75. {uedgetools-1.3.2 → uedgetools-1.3.3}/src/uetools/ignore/UeGui/example/rd_d3dHsm_in.py +0 -0
  76. {uedgetools-1.3.2 → uedgetools-1.3.3}/src/uetools/ignore/UeGui/example/run.py +0 -0
  77. {uedgetools-1.3.2 → uedgetools-1.3.3}/src/uetools/ignore/watch.py +0 -0
  78. {uedgetools-1.3.2 → uedgetools-1.3.3}/src/uetools/yamls/__init__.py +0 -0
  79. {uedgetools-1.3.2 → uedgetools-1.3.3}/src/uetools/yamls/plots.yaml +0 -0
  80. {uedgetools-1.3.2 → uedgetools-1.3.3}/src/uetools/yamls/requiredvariables.yaml +0 -0
  81. {uedgetools-1.3.2 → uedgetools-1.3.3}/src/uetools/yamls/setup_example.yaml +0 -0
  82. {uedgetools-1.3.2 → uedgetools-1.3.3}/src/uetools/yamls/standardvariables.yaml +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: uedgetools
3
- Version: 1.3.2
3
+ Version: 1.3.3
4
4
  Summary: A utility tool for the UEDGE multi-fluid plasma-edge code
5
5
  Author-email: Andreas Holm <holm10@llnl.gov>
6
6
  License: GNU LESSER GENERAL PUBLIC LICENSE
@@ -524,9 +524,10 @@ Requires-Dist: h5py
524
524
  Requires-Dist: pyaml
525
525
  Requires-Dist: Forthon
526
526
  Requires-Dist: matplotlib
527
+ Requires-Dist: shapely
527
528
  Requires-Dist: h5pickle
528
529
  Requires-Dist: PyQt5
529
- Requires-Dist: bayesian-optimization
530
+ Requires-Dist: bayesian-optimization>=3
530
531
  Provides-Extra: parallel
531
532
  Requires-Dist: inspect; extra == "parallel"
532
533
  Requires-Dist: uuid; extra == "parallel"
@@ -25,9 +25,10 @@ dependencies = [
25
25
  "pyaml",
26
26
  "Forthon",
27
27
  "matplotlib",
28
+ "shapely",
28
29
  "h5pickle",
29
30
  "PyQt5",
30
- "bayesian-optimization",
31
+ "bayesian-optimization >= 3",
31
32
  ]
32
33
 
33
34
  [project.optional-dependencies]
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: uedgetools
3
- Version: 1.3.2
3
+ Version: 1.3.3
4
4
  Summary: A utility tool for the UEDGE multi-fluid plasma-edge code
5
5
  Author-email: Andreas Holm <holm10@llnl.gov>
6
6
  License: GNU LESSER GENERAL PUBLIC LICENSE
@@ -524,9 +524,10 @@ Requires-Dist: h5py
524
524
  Requires-Dist: pyaml
525
525
  Requires-Dist: Forthon
526
526
  Requires-Dist: matplotlib
527
+ Requires-Dist: shapely
527
528
  Requires-Dist: h5pickle
528
529
  Requires-Dist: PyQt5
529
- Requires-Dist: bayesian-optimization
530
+ Requires-Dist: bayesian-optimization>=3
530
531
  Provides-Extra: parallel
531
532
  Requires-Dist: inspect; extra == "parallel"
532
533
  Requires-Dist: uuid; extra == "parallel"
@@ -4,9 +4,10 @@ h5py
4
4
  pyaml
5
5
  Forthon
6
6
  matplotlib
7
+ shapely
7
8
  h5pickle
8
9
  PyQt5
9
- bayesian-optimization
10
+ bayesian-optimization>=3
10
11
 
11
12
  [parallel]
12
13
  inspect
@@ -60,11 +60,9 @@ class Input:
60
60
 
61
61
  def recursive_readhdf5(ret, setup, group=[], root=None):
62
62
  if len(group) > 0:
63
- lastgroup=group[0]
63
+ lastgroup = group[0]
64
64
  # Conditional to avoid unnecessary nesting
65
- if ((len(group) > 1) and \
66
- (group[-1] == group[-2]) \
67
- ):
65
+ if (len(group) > 1) and (group[-1] == group[-2]):
68
66
  group.pop(-1)
69
67
  else:
70
68
  for subgroup in group:
@@ -256,7 +254,9 @@ class Input:
256
254
  try:
257
255
  self.setue(group[-1], dictobj)
258
256
  except KeyError as e:
259
- print(f"WARNING Could not set '{group[-1]}' to '{dictobj}'. Reason: {e}")
257
+ print(
258
+ f"WARNING Could not set '{group[-1]}' to '{dictobj}'. Reason: {e}"
259
+ )
260
260
 
261
261
  else: # Set calls to restore diffusivities
262
262
  if (group[-1] == "savefile") and (
@@ -264,28 +264,32 @@ class Input:
264
264
  ):
265
265
  pass
266
266
  elif group[-1] in ["casename", "commands", "chgstate_format"]:
267
- if group[-1]=="casename":
267
+ if group[-1] == "casename":
268
268
  self.casename_set = True
269
269
  self.info[group[-1]] = dictobj
270
270
  elif group[-1] in [
271
- "userdifffname",
272
- "radialdifffname",
273
- "diff_file",
274
- "savefile",
271
+ "userdifffname",
272
+ "radialdifffname",
273
+ "diff_file",
274
+ "savefile",
275
275
  ]:
276
276
  if isinstance(dictobj, (bytes, bytearray)):
277
277
  dictobj = dictobj.decode("UTF-8")
278
- if dictobj is not False:
279
- self.info[group[-1]] = "/".join(
280
- [self.info["location"], dictobj]
281
- )
282
- elif group[-1] in self.variables["omit"]:# ["lynix", "lyphix", "lytex", "lytix"]:
278
+ if dictobj != False:
279
+ self.info[group[-1]] = os.path.join(
280
+ self.info["location"], dictobj
281
+ )
282
+ elif (
283
+ group[-1] in self.variables["omit"]
284
+ ): # ["lynix", "lyphix", "lytex", "lytix"]:
283
285
  pass
284
286
  else:
285
287
  if isinstance(dictobj, (bytes, bytearray)):
286
288
  dictobj = dictobj.decode("UTF-8")
287
289
  try:
288
- self.info[group[-1]] = os.path.join(self.info["location"], dictobj)
290
+ self.info[group[-1]] = os.path.join(
291
+ self.info["location"], dictobj
292
+ )
289
293
  except TypeError:
290
294
  # dictobj may be e.g. bool that can't be joined with path
291
295
  self.info[group[-1]] = self.info["location"]
@@ -347,19 +351,22 @@ class Input:
347
351
  if isinstance(self.info["savefile"], bytes):
348
352
  self.info["savefile"] = self.info["savefile"].decode("UTF-8")
349
353
  if self.info["restored_from_hdf5"] is True:
350
-
351
354
  prfile = setupfile
352
- if len(prfile.split('/'))>3:
353
- prfile = ".../{}".format('/'.join(prfile.split('/')[-3:]))
355
+ if len(prfile.split("/")) > 3:
356
+ prfile = ".../{}".format("/".join(prfile.split("/")[-3:]))
354
357
  print("=================================================")
355
358
  print("Restoring case from HDF5 file:")
356
359
  print(" Rate dirs read from .uedgerc")
357
360
  print(" Grid read from {}".format(prfile))
358
- self.info["diffusivity_file"] = os.path.join(self.info["location"], setupfile)
361
+ self.info["diffusivity_file"] = os.path.join(
362
+ self.info["location"], setupfile
363
+ )
359
364
 
360
365
  # Override with diff_file maually defined diff_file upon
361
366
  if diff_file is not None:
362
- self.info["diffusivity_file"] = os.path.join(self.info["location"], diff_file)
367
+ self.info["diffusivity_file"] = os.path.join(
368
+ self.info["location"], diff_file
369
+ )
363
370
  # Otherwise, try setting accoridng to input
364
371
  else:
365
372
  # diff_file takes precedence
@@ -371,15 +378,13 @@ class Input:
371
378
  if (self.info["radialdifffname"] is not None) and (
372
379
  self.info["radialdifffname"] is not False
373
380
  ):
374
- self.info["diffusivity_file"] = \
375
- self.info['radialdifffname']
381
+ self.info["diffusivity_file"] = self.info["radialdifffname"]
376
382
  del self.info["radialdifffname"]
377
383
  if "userdifffname" in self.info:
378
384
  if (self.info["userdifffname"] is not None) and (
379
385
  self.info["userdifffname"] is not False
380
386
  ):
381
- self.info["diffusivity_file"] = \
382
- self.info["userdifffname"]
387
+ self.info["diffusivity_file"] = self.info["userdifffname"]
383
388
  del self.info["userdifffname"]
384
389
  if (self.info["diffusivity_file"] is None) and (
385
390
  self.getue("isbohmcalc") in [0, 2]
@@ -387,8 +392,8 @@ class Input:
387
392
  self.info["diffusivity_file"] = self.info["savefile"]
388
393
 
389
394
  prfile = self.info["diffusivity_file"]
390
- if len(prfile.split('/'))>3:
391
- prfile = ".../{}".format('/'.join(prfile.split('/')[-3:]))
395
+ if len(prfile.split("/")) > 3:
396
+ prfile = ".../{}".format("/".join(prfile.split("/")[-3:]))
392
397
  print(
393
398
  "No diffusivity-file supplied: reading from "
394
399
  + 'save-file "{}"'.format(prfile)
@@ -396,8 +401,8 @@ class Input:
396
401
  # Set diffusivities based on file if model requires profiles
397
402
  if self.getue("isbohmcalc") == 0:
398
403
  prfile = self.info["diffusivity_file"]
399
- if len(prfile.split('/'))>3:
400
- prfile = ".../{}".format('/'.join(prfile.split('/')[-3:]))
404
+ if len(prfile.split("/")) > 3:
405
+ prfile = ".../{}".format("/".join(prfile.split("/")[-3:]))
401
406
  print(
402
407
  " User-specified diffusivities read from HDF5 "
403
408
  + 'file "{}"'.format(prfile)
@@ -433,7 +438,7 @@ class Input:
433
438
  if restoresave is True:
434
439
  if (self.info["savefile"] is None) and (self.get("restart") == 1):
435
440
  if self.info["casename"] is not None:
436
- for suffix in ["h5","hdf5"]:
441
+ for suffix in ["h5", "hdf5"]:
437
442
  savefile = ".".join([self.info["casename"], suffix])
438
443
  if exists(savefile):
439
444
  self.info["savefile"] = savefile
@@ -442,8 +447,9 @@ class Input:
442
447
  if exists(self.info["savefile"]):
443
448
  self.savefuncs.load_state(self.info["savefile"], **kwargs)
444
449
  else:
445
- raise ValueError("Could not open save-file '{}'".format(\
446
- self.info["savefile"]))
450
+ raise ValueError(
451
+ "Could not open save-file '{}'".format(self.info["savefile"])
452
+ )
447
453
  if uedge_is_installed and not self.info["inplace"]:
448
454
  self.tracker.get_uevars()
449
455
  # NOTE: Get the hashes before running any commands. This way,
@@ -500,6 +500,7 @@ class CaseDashboard(QWidget):
500
500
  ==========================="""
501
501
  def _createVarButtons(self):
502
502
  from numpy import sum, ndarray
503
+ self.buttonsetup = True
503
504
  self.buttons = {
504
505
  'layout': QGridLayout(),
505
506
  'title': QLabel(self.title("Plots")),
@@ -537,8 +538,8 @@ class CaseDashboard(QWidget):
537
538
  cols[int(i/maxbuttons)].addWidget(
538
539
  self.buttons['items'][key],
539
540
  )
540
- # TODO: Implement smarter check to deactivat buttons
541
- buttonvar = self.get(key)
541
+ test = True
542
+ buttonvar = self.__getattribute__(f'plot_{key}')()
542
543
  if buttonvar is not None:
543
544
  vis = True
544
545
  if len(buttonvar.shape) == 3:
@@ -548,11 +549,12 @@ class CaseDashboard(QWidget):
548
549
  if varsum == 0:
549
550
  self.buttons['items'][key].setEnabled(False)
550
551
  else:
551
- if sum(self.get(key)) == 0:
552
+ if sum(buttonvar) == 0:
552
553
  self.buttons['items'][key].setEnabled(False)
553
554
  i += 1
554
555
  self.checkedButton = self.buttongroup.button(0)
555
556
  self.checkedButton.setChecked(True)
557
+ test = False
556
558
 
557
559
  # Add drop-down
558
560
  self.buttons['items']['dropdown'] = QComboBox()
@@ -592,6 +594,7 @@ class CaseDashboard(QWidget):
592
594
  for i in range(len(cols)):
593
595
  self.buttons['layout'].addLayout(cols[i], 1, i, 1, 1)
594
596
  self.buttons['layout'].addLayout(custom, 2,0,1,len(cols))
597
+ self.buttonsetup = False
595
598
 
596
599
 
597
600
 
@@ -1010,114 +1013,162 @@ class CaseDashboard(QWidget):
1010
1013
  self.enable_ionradio(False)
1011
1014
  self.uncheck_buttons()
1012
1015
 
1013
- def plot_te(self):
1016
+ def plot_te(self):
1017
+ var = self.get('te')/1.602e-19
1018
+ if self.buttonsetup:
1019
+ return var
1014
1020
  self.plot_driver(
1015
- self.get('te')/1.602e-19,
1021
+ var,
1016
1022
  'Electron temperature [eV]',
1017
1023
  )
1018
1024
  self.lastfunc = self.plot_te
1019
1025
 
1020
1026
  def plot_ti(self):
1027
+ var = self.get('ti')/1.602e-19
1028
+ if self.buttonsetup:
1029
+ return var
1021
1030
  self.plot_driver(
1022
- self.get('ti')/1.602e-19,
1031
+ var,
1023
1032
  'Ion temperature [eV]',
1024
1033
  )
1025
1034
  self.lastfunc = self.plot_ti
1026
1035
 
1027
1036
  def plot_tg(self):
1037
+ var = self.get('tg')/1.602e-19
1038
+ if self.buttonsetup:
1039
+ return var
1028
1040
  self.plot_driver(
1029
- self.get('tg')/1.602e-19,
1041
+ var,
1030
1042
  'Gas temperature [eV]',
1031
1043
  'gas'
1032
1044
  )
1033
1045
  self.lastfunc = self.plot_tg
1034
1046
 
1035
1047
  def plot_ne(self):
1048
+ var = self.get('ne')
1049
+ if self.buttonsetup:
1050
+ return var
1036
1051
  self.plot_driver(
1037
- self.get('ne'),
1052
+ var,
1038
1053
  r'Electron density [m$\mathrm{{}^{-3}}$]',
1039
1054
  )
1040
1055
  self.lastfunc = self.plot_ne
1041
1056
 
1042
1057
  def plot_ni(self):
1058
+ var = self.get('ni')
1059
+ if self.buttonsetup:
1060
+ return var
1043
1061
  self.plot_driver(
1044
- self.get('ni'),
1062
+ var,
1045
1063
  r'Ion density [m$\mathrm{{}^{-3}}$]',
1046
1064
  'ion'
1047
1065
  )
1048
1066
  self.lastfunc = self.plot_ni
1049
1067
 
1050
1068
  def plot_ng(self):
1069
+ var = self.get('ng')
1070
+ if self.buttonsetup:
1071
+ return var
1051
1072
  self.plot_driver(
1052
- self.get('ng'),
1073
+ var,
1053
1074
  r'Gas density [m$\mathrm{{}^{-3}}$]',
1054
1075
  'gas'
1055
1076
  )
1056
1077
  self.lastfunc = self.plot_ng
1057
1078
 
1058
1079
  def plot_phi(self):
1080
+ var = self.get('phi')
1081
+ if self.buttonsetup:
1082
+ return var
1059
1083
  self.plot_driver(
1060
- self.get('phi'),
1084
+ var,
1061
1085
  'Electrical potential [V]',
1062
1086
  )
1063
1087
  self.lastfunc = self.plot_phi
1064
1088
 
1065
1089
  def plot_prad(self):
1090
+ if self.get('prad').shape == self.get('pradhyd').shape:
1091
+ var = self.get('prad')+self.get('pradhyd')
1092
+ else:
1093
+ var = self.get('pradhyd')
1094
+ if self.buttonsetup:
1095
+ return var
1066
1096
  self.plot_driver(
1067
- self.get('prad')+self.get('pradhyd'),
1097
+ var,
1068
1098
  r'Total radiated power [W/m$\mathrm{{}^{-3}}$]',
1069
1099
  )
1070
1100
  self.lastfunc = self.plot_prad
1071
1101
 
1072
1102
  def plot_pradhyd(self):
1103
+ var = self.get('pradhyd')
1104
+ if self.buttonsetup:
1105
+ return var
1073
1106
  self.plot_driver(
1074
- self.get('pradhyd'),
1107
+ var,
1075
1108
  r'Hydrogenic radiated power [W/m$\mathrm{{}^{-3}}$]',
1076
1109
  )
1077
1110
  self.lastfunc = self.plot_pradhyd
1078
1111
 
1079
1112
  def plot_pradimp(self):
1113
+ var = self.get('prad')
1114
+ if self.buttonsetup:
1115
+ return var
1080
1116
  self.plot_driver(
1081
- self.get('prad'),
1117
+ var,
1082
1118
  r'Impurity radiated power [W/m$\mathrm{{}^{-3}}$]',
1083
1119
  )
1084
1120
  self.lastfunc = self.plot_pradimp
1085
1121
 
1086
1122
  def plot_psorc(self):
1123
+ var = self.get('psorc')
1124
+ if self.buttonsetup:
1125
+ return var
1087
1126
  self.plot_driver(
1088
- self.get('psorc'),
1127
+ var,
1089
1128
  'Ion ionization source [parts/s]',
1090
1129
  'ion'
1091
1130
  )
1092
1131
  self.lastfunc = self.plot_psorc
1093
1132
 
1094
1133
  def plot_psorgc(self):
1134
+ var = self.get('psorgc')
1135
+ if self.buttonsetup:
1136
+ return var
1095
1137
  self.plot_driver(
1096
- self.get('psorgc'),
1138
+ var,
1097
1139
  'Gas ionization sink [parts/s]',
1098
1140
  'gas'
1099
1141
  )
1100
1142
  self.lastfunc = self.plot_psorgc
1101
1143
 
1102
1144
  def plot_psorxrc(self):
1145
+ var = self.get('psorxrc')
1146
+ if self.buttonsetup:
1147
+ return var
1103
1148
  self.plot_driver(
1104
- self.get('psorxrc'),
1149
+ var,
1105
1150
  'Ion recombination + CX sink [parts/s]',
1106
1151
  'ion'
1107
1152
  )
1108
1153
  self.lastfunc = self.plot_psorxrc
1109
1154
 
1110
1155
  def plot_psorrgc(self):
1156
+ var = self.get('psorrgc')
1157
+ if self.buttonsetup:
1158
+ return var
1111
1159
  self.plot_driver(
1112
- self.get('psorrgc'),
1160
+ var,
1113
1161
  'Gas recombination source [parts/s]',
1114
1162
  'gas'
1115
1163
  )
1116
1164
  self.lastfunc = self.plot_psorrgc
1117
1165
 
1118
1166
  def plot_psorcxg(self):
1167
+ var = self.get('psorcxg')
1168
+ if self.buttonsetup:
1169
+ return var
1119
1170
  self.plot_driver(
1120
- self.get('psorcxg'),
1171
+ var,
1121
1172
  'Gas CX source [parts/s]',
1122
1173
  'gas'
1123
1174
  )
@@ -1656,10 +1707,11 @@ class MainMenu(QMainWindow):
1656
1707
  def openHDF5(self):#, caseobj=None):
1657
1708
  from uetools import Case
1658
1709
  # Logic for opening an existing file goes here...
1659
- if 1==0:
1710
+ if 1==1:
1660
1711
  file = QFileDialog.getOpenFileName(self, 'Open UETOOLS save',
1661
- self.lastpath, "All files (*.*)")[0]
1662
- self.lastpath = "/".join(file.split("/")[:-1])
1712
+ self.lastpath, "All files (*.*)", options=QFileDialog.DontUseNativeDialog)[0]
1713
+ self.lastpath = "/".join(file.split("/")[:-1],
1714
+ )
1663
1715
  else:
1664
1716
  file = "/Users/holm10/Documents/fusion/uedge/src/"+\
1665
1717
  "UETOOLS/dashboard_test/testcase_hires/nc20.hdf5"
@@ -1691,7 +1743,9 @@ class MainMenu(QMainWindow):
1691
1743
  )
1692
1744
  print("USING TEST DATABASE")
1693
1745
  else:
1694
- path = str(QFileDialog.getExistingDirectory(self, "Select Directory"))
1746
+ path = str(QFileDialog.getExistingDirectory(self, "Select Directory",
1747
+ options=QFileDialog.DontUseNativeDialog
1748
+ ))
1695
1749
  if len(path) == 0:
1696
1750
  return
1697
1751
  name = path.split('/')[-1]
@@ -1856,7 +1910,7 @@ if __name__ == "__main__":
1856
1910
  matplotlib.use('Qt5Agg')
1857
1911
  app = QApplication(sys.argv)
1858
1912
  win = MainMenu()
1859
- win.openHDF5()
1913
+ # win.openHDF5()
1860
1914
  win.show()
1861
1915
  sys.exit(app.exec_())
1862
1916
  #else:
@@ -760,6 +760,13 @@ class Spectrometer:
760
760
  # Associate list to dict key
761
761
  self.emission[l] = emission_chord
762
762
 
763
+ def chord_integral_field(self, field):
764
+ integrals = []
765
+ for chord in self.chords:
766
+ integrals.append(chord.integrate_field(field))
767
+ return integrals
768
+
769
+
763
770
  def plot_chord_integral(
764
771
  self, field, ax=None, linestyle="-", marker="o", color="k", x=None
765
772
  ):
@@ -798,10 +805,8 @@ class Spectrometer:
798
805
  if x is None:
799
806
  x = range(1, len(self.chords) + 1)
800
807
  # TODO: Figure out what to use as X-axis
801
- integrals = []
802
- for chord in self.chords:
803
- integrals.append(chord.integrate_field(field))
804
808
 
809
+ integrals = self.chord_integral_field(field)
805
810
  ax.plot(x, integrals, linestyle=linestyle, marker=marker, color=color)
806
811
 
807
812
  return ax.get_figure()
@@ -1209,7 +1214,12 @@ class Grid:
1209
1214
  self.area = coverage_union_all(geometries)
1210
1215
  # Create and store Polygon for core
1211
1216
  corepts = []
1212
- for nxpt in range(case.get("nxpt")):
1217
+ nnxpt = case.get('nxpt', verbose=False)
1218
+ if nnxpt is None:
1219
+ nnxpt = 1
1220
+ if case.plot.dnull:
1221
+ nnxpt = 2
1222
+ for nxpt in range(nnxpt):
1213
1223
  for ix in range(case.get("ixpt1")[nxpt] + 1, case.get("ixpt2")[nxpt] + 1):
1214
1224
  corepts.append(
1215
1225
  [
@@ -603,19 +603,21 @@ class Caseplot(Plot):
603
603
  ax.plot((ixpt1[ixpt]+0.5,ixpt1[ixpt]+0.5), (-0.5,iysptrx1[ixpt]+.5), 'k-', linewidth=1.5)
604
604
  ax.plot((ixpt2[ixpt]+0.5,ixpt2[ixpt]+0.5), (-0.5,iysptrx2[ixpt]+.5), 'k-', linewidth=1.5)
605
605
 
606
+ for xpatch in self.get('rangechunk'):
607
+ ax.add_patch(Polygon( [(xpatch[0]-.5,xpatch[2]-.5),(xpatch[0]-.5,xpatch[3]+.5),(xpatch[1]+.5, xpatch[3]+.5),(xpatch[1]+.5, xpatch[2]-0.5)],
608
+ closed=True, edgecolor='k', alpha=0.3, linestyle='--', linewidth=2, color=next(colors)))
609
+
606
610
  for ixpt in range(nxpt):
607
611
  for icut in range(self.get('Nxptchunks')[ixpt]):
608
612
  for ii in range(2):
609
613
  xpatch = rangexptchunk[ixpt, ii, icut]
610
614
  ax.add_patch(Polygon( [(xpatch[0]-.5,xpatch[2]-.5),(xpatch[0]-.5,xpatch[3]+.5),(xpatch[1]+.5, xpatch[3]+.5),(xpatch[1]+.5, xpatch[2]-0.5)],
611
- closed=True, edgecolor='k', facecolor='red'))
615
+ closed=True, edgecolor='k', facecolor='red', linestyle='-', linewidth=1))
612
616
 
613
- for xpatch in self.get('rangechunk'):
614
- ax.add_patch(Polygon( [(xpatch[0]-.5,xpatch[2]-.5),(xpatch[0]-.5,xpatch[3]+.5),(xpatch[1]+.5, xpatch[3]+.5),(xpatch[1]+.5, xpatch[2]-0.5)],
615
- closed=True, edgecolor='k', alpha=0.3, linestyle='--', linewidth=2, color=next(colors)))
616
617
 
617
618
 
618
619
  f.show()
620
+ return f
619
621
 
620
622
 
621
623
  def variablemesh(self, z=None, **kwargs):
@@ -111,7 +111,7 @@ class AboutSetup:
111
111
  ionarray = []
112
112
  for i in range(nisp):
113
113
  charge = "{}".format(
114
- ("+" + str(int(zi[i]))) * (zi[i] > 0) + "0" * (zi[i] == 0)
114
+ ("+" + str(int(zi[i]))) * bool(zi[i] > 0) + "0" * bool(zi[i] == 0)
115
115
  )
116
116
  sign = "".join(
117
117
  (x for x in elements[znuclin[i]][minu[i]] if not x.isdigit())
@@ -0,0 +1 @@
1
+ 1.3.3
@@ -1 +0,0 @@
1
- 1.3.2
File without changes
File without changes
File without changes
File without changes