Skip to content

Commit 1679a27

Browse files
committed
Various code cleanups
1 parent 7867a0a commit 1679a27

File tree

10 files changed

+89
-81
lines changed

10 files changed

+89
-81
lines changed

Stoner/Analysis.py

+15-17
Original file line numberDiff line numberDiff line change
@@ -384,23 +384,21 @@ def stitch(self, other, xcol=None, ycol=None, overlap=None, min_overlap=0.0, mod
384384
otherpoints = other.column([_.xcol, _.ycol])
385385
otherpoints = otherpoints[otherpoints[:, 0].argsort(), :]
386386
self_second = np.max(points[:, 0]) > np.max(otherpoints[:, 0])
387-
if overlap is None: # Calculate the overlap
388-
lower = max(np.min(points[:, 0]), np.min(otherpoints[:, 0]))
389-
upper = min(np.max(points[:, 0]), np.max(otherpoints[:, 0]))
390-
elif isinstance(overlap, int) and overlap > 0:
391-
if self_second:
392-
lower = points[0, 0]
393-
upper = points[overlap, 0]
394-
else:
395-
lower = points[-overlap - 1, 0]
396-
upper = points[-1, 0]
397-
elif (
398-
isinstance(overlap, tuple)
399-
and len(overlap) == 2
400-
and isinstance(overlap[0], float and isinstance(overlap[1], float))
401-
):
402-
lower = min(overlap)
403-
upper = max(overlap)
387+
match overlap:
388+
case int() if overlap > 0:
389+
if self_second:
390+
lower = points[0, 0]
391+
upper = points[overlap, 0]
392+
else:
393+
lower = points[-overlap - 1, 0]
394+
upper = points[-1, 0]
395+
case (float(), float()):
396+
lower = min(overlap)
397+
upper = max(overlap)
398+
case _:
399+
lower = max(np.min(points[:, 0]), np.min(otherpoints[:, 0]))
400+
upper = min(np.max(points[:, 0]), np.max(otherpoints[:, 0]))
401+
404402
inrange = np.logical_and(points[:, 0] >= lower, points[:, 0] <= upper)
405403
points = points[inrange]
406404
num_pts = points.shape[0]

Stoner/Core.py

+1
Original file line numberDiff line numberDiff line change
@@ -658,6 +658,7 @@ def _load(self, filename, *args, **kargs):
658658
datafile.seek(0)
659659
reader = csv.reader(datafile, dialect=tab_delimited())
660660
cols = 0
661+
max_rows = 0
661662
for ix, metadata in enumerate(reader):
662663
if ix == 0:
663664
row = metadata

Stoner/HDF5.py

+1-62
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
from .folders import DataFolder
2525
from .Image.core import ImageFile, ImageArray
2626
from .core.utils import copy_into
27+
from .tools.file import HDFFileManager
2728

2829

2930
def get_hdf_loader(f, default_loader=lambda *args, **kargs: None):
@@ -52,68 +53,6 @@ def get_hdf_loader(f, default_loader=lambda *args, **kargs: None):
5253
return getattr(globals()[typ], "read_hdf5", default_loader)
5354

5455

55-
class HDFFileManager:
56-
"""Context manager for HDF5 files."""
57-
58-
def __init__(self, filename, mode="r"):
59-
"""Initialise context handler.
60-
61-
Works out the filename and group in cases the input flename includes a path to a sub group.
62-
63-
Checks the file is actually an h4py file that is openable with the given mode.
64-
"""
65-
self.mode = mode
66-
self.handle = None
67-
self.file = None
68-
self.close = True
69-
self.group = ""
70-
# Handle the case we're passed an already open h5py object
71-
if not isinstance(filename, path_types) or mode == "w": # passed an already open h5py object
72-
self.filename = filename
73-
return
74-
# Here we deal with a string or path filename
75-
parts = str(filename).split(os.path.sep)
76-
bits = len(parts)
77-
for ix in range(bits):
78-
testname = "/".join(parts[: bits - ix])
79-
if path.exists(testname):
80-
filename = testname
81-
break
82-
83-
try:
84-
if not mode.startswith("w"):
85-
with h5py.File(filename, "r"):
86-
pass
87-
except (IOError, OSError) as err:
88-
raise StonerLoadError(f"{filename} not at HDF5 File") from err
89-
self.filename = filename
90-
91-
def __enter__(self):
92-
"""Open the hdf file with given mode and navigate to the group."""
93-
if isinstance(self.filename, (h5py.File, h5py.Group)): # passed an already open h5py object
94-
self.handle = self.filename
95-
if isinstance(self.filename, h5py.Group):
96-
self.file = self.filename.file
97-
else:
98-
self.file = self.filename
99-
self.close = False
100-
elif isinstance(self.filename, path_types): # Passed something to open
101-
handle = h5py.File(self.filename, self.mode)
102-
self.file = handle
103-
for grp in self.group.split("/"):
104-
if grp.strip() != "":
105-
handle = handle[grp]
106-
self.handle = handle
107-
else:
108-
raise StonerLoadError("Note a resource that can be handled with HDF")
109-
return self.handle
110-
111-
def __exit__(self, _type, _value, _traceback):
112-
"""Ensure we close the hdf file no matter what."""
113-
if self.file is not None and self.close:
114-
self.file.close()
115-
116-
11756
class HDF5File(DataFile):
11857
"""A sub class of DataFile that sores itself in a HDF5File or group.
11958

Stoner/Zip.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -282,7 +282,7 @@ def _dialog(self, mode="r"):
282282

283283
if mode == "r":
284284
what = "file"
285-
elif mode == "w":
285+
else:
286286
what = "save"
287287

288288
dlg = get_filedialog(what=what, filetypes=file_wildcard)

Stoner/analysis/fitting/mixins.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -1451,7 +1451,7 @@ def lmfit(self, model, xcol=None, ycol=None, p0=None, sigma=None, **kargs):
14511451
ret.column_headers = []
14521452
ret.setas = ""
14531453
prefix = ret["lmfit.prefix"][-1]
1454-
ix = 0
1454+
ix = fixed = 0
14551455
for ix, p in enumerate(model.param_names):
14561456
label = self.metadata.get(f"{prefix}{p} label", p)
14571457
units = self.metadata.get(f"{prefix}{p} units", "")

Stoner/formats/data/generic.py

+1
Original file line numberDiff line numberDiff line change
@@ -121,6 +121,7 @@ def load_tdi_format(new_data, filename, *args, **kargs):
121121
datafile.seek(0)
122122
reader = csv.reader(datafile, dialect=tab_delimited())
123123
cols = 0
124+
max_rows = 0
124125
for ix, metadata in enumerate(reader):
125126
if ix == 0:
126127
row = metadata

Stoner/formats/data/rigs.py

+2
Original file line numberDiff line numberDiff line change
@@ -191,6 +191,7 @@ def _sa_cmd(new_data, parts):
191191
def load_easyplot(new_data, filename, *args, **kargs):
192192
"""Private loader method."""
193193
new_data.filename = filename
194+
delimiter = kargs.pop("delimiter")
194195

195196
datastart = -1
196197
dataend = -1
@@ -257,6 +258,7 @@ def load_pinklib(new_data, filename=None, *args, **kargs):
257258
new_data.get_filename("r")
258259
else:
259260
new_data.filename = filename
261+
header_line = 0
260262
with FileManager(new_data.filename, "r", errors="ignore", encoding="utf-8") as f: # Read filename linewise
261263
if "PINKlibrary" not in f.readline():
262264
raise StonerLoadError("Not a PINK file")

Stoner/formats/rigs.py

+1
Original file line numberDiff line numberDiff line change
@@ -214,6 +214,7 @@ def _load(self, filename, *args, **kargs):
214214

215215
datastart = -1
216216
dataend = -1
217+
delimiter = kargs.pop("delimiter", None)
217218

218219
i = 0
219220
with FileManager(self.filename, "r", errors="ignore", encoding="utf-8") as data:

Stoner/plot/core.py

+2
Original file line numberDiff line numberDiff line change
@@ -1003,6 +1003,8 @@ def image_plot(self, xcol=None, ycol=None, zcol=None, shape=None, xlim=None, yli
10031003
cmap = colormaps[kargs["cmap"]]
10041004
elif "cmap" in nonkargs and isinstance(kargs["cmap"], str):
10051005
cmap = colormaps(nonkargs["cmap"])
1006+
else:
1007+
cmap = colormaps["viridis"]
10061008
if Z.ndim == 2:
10071009
Z = cmap(Z)
10081010
elif Z.ndim != 3:

Stoner/tools/file.py

+64
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@
88
from traceback import format_exc
99
from typing import Union, Sequence, Dict, Type, Tuple, Optional
1010

11+
import h5py
12+
1113
from ..compat import string_types, path_types, bytes2str, str2bytes
1214
from .widgets import fileDialog
1315
from .classes import subclasses
@@ -284,3 +286,65 @@ def __enter__(self):
284286
else:
285287
length = len(self.file)
286288
return self.file, length
289+
290+
291+
class HDFFileManager:
292+
"""Context manager for HDF5 files."""
293+
294+
def __init__(self, filename, mode="r"):
295+
"""Initialise context handler.
296+
297+
Works out the filename and group in cases the input flename includes a path to a sub group.
298+
299+
Checks the file is actually an h4py file that is openable with the given mode.
300+
"""
301+
self.mode = mode
302+
self.handle = None
303+
self.file = None
304+
self.close = True
305+
self.group = ""
306+
# Handle the case we're passed an already open h5py object
307+
if not isinstance(filename, path_types) or mode == "w": # passed an already open h5py object
308+
self.filename = filename
309+
return
310+
# Here we deal with a string or path filename
311+
parts = str(filename).split(os.path.sep)
312+
bits = len(parts)
313+
for ix in range(bits):
314+
testname = "/".join(parts[: bits - ix])
315+
if os.path.exists(testname):
316+
filename = testname
317+
break
318+
319+
try:
320+
if not mode.startswith("w"):
321+
with h5py.File(filename, "r"):
322+
pass
323+
except (IOError, OSError) as err:
324+
raise StonerLoadError(f"{filename} not at HDF5 File") from err
325+
self.filename = filename
326+
327+
def __enter__(self):
328+
"""Open the hdf file with given mode and navigate to the group."""
329+
if isinstance(self.filename, (h5py.File, h5py.Group)): # passed an already open h5py object
330+
self.handle = self.filename
331+
if isinstance(self.filename, h5py.Group):
332+
self.file = self.filename.file
333+
else:
334+
self.file = self.filename
335+
self.close = False
336+
elif isinstance(self.filename, path_types): # Passed something to open
337+
handle = h5py.File(self.filename, self.mode)
338+
self.file = handle
339+
for grp in self.group.split("/"):
340+
if grp.strip() != "":
341+
handle = handle[grp]
342+
self.handle = handle
343+
else:
344+
raise StonerLoadError("Note a resource that can be handled with HDF")
345+
return self.handle
346+
347+
def __exit__(self, _type, _value, _traceback):
348+
"""Ensure we close the hdf file no matter what."""
349+
if self.file is not None and self.close:
350+
self.file.close()

0 commit comments

Comments
 (0)