Skip to content

Commit

Permalink
FIX: allow fractional digits in comparator tolerance (closes #260)
Browse files Browse the repository at this point in the history
  • Loading branch information
gdementen committed Oct 23, 2023
1 parent 4ea4d61 commit a1dce50
Show file tree
Hide file tree
Showing 2 changed files with 18 additions and 3 deletions.
4 changes: 4 additions & 0 deletions doc/source/changes/version_0_34_2.rst.inc
Original file line number Diff line number Diff line change
Expand Up @@ -9,3 +9,7 @@ Fixes

* when code in the interactive console creates *and shows* a plot window, avoid showing it
a second time (closes :editor_issue:`265`).

* depending on the system regional settings, comparator tolerance sometimes did not allow simple
fractional numbers (e.g. 0.1). The only way to specify the tolerance was the scientific notation
(closes :editor_issue:`260`).
17 changes: 14 additions & 3 deletions larray_editor/comparator.py
Original file line number Diff line number Diff line change
Expand Up @@ -53,8 +53,10 @@ def __init__(self, parent=None, bg_gradient='red-white-blue', rtol=0, atol=0, na
tolerance_layout.addWidget(tolerance_combobox)
self.tolerance_combobox = tolerance_combobox

# We do not use a QDoubleValidator because, by default, it uses the
# system locale (so we would need to parse the string using that
# locale too) and does not provide any feedback to users on failure
tolerance_line_edit = QLineEdit()
tolerance_line_edit.setValidator(QDoubleValidator())
tolerance_line_edit.setPlaceholderText("1e-8")
tolerance_line_edit.setMaximumWidth(80)
tolerance_line_edit.setToolTip("Press Enter to activate the new tolerance value")
Expand Down Expand Up @@ -118,8 +120,17 @@ def update_isequal(self):

try:
tol_str = self.tolerance_line_edit.text()
tol = ast.literal_eval(tol_str) if tol_str else 0
atol, rtol = (tol, 0) if self.tolerance_combobox.currentText() == "absolute" else (0, tol)
tol = float(tol_str) if tol_str else 0
except ValueError as e:
# this is necessary to avoid having the error message twice, because we
# first show it here, which makes the tolerance_line_edit lose focus,
# which triggers its editingFinished signal, which calls update_isequal,
# which ends up here again if tol_str did not change in-between.
self.tolerance_line_edit.setText('')
tol = 0
QMessageBox.critical(self, "Error", str(e))
atol, rtol = (tol, 0) if self.tolerance_combobox.currentText() == "absolute" else (0, tol)
try:
self.isequal = self.array.eq(self.array0, rtol=rtol, atol=atol, nans_equal=self.nans_equal)
except TypeError:
self.isequal = self.array == self.array0
Expand Down

0 comments on commit a1dce50

Please sign in to comment.