Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

changes for 0.34.2 #266

Merged
merged 3 commits into from
Oct 23, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 9 additions & 0 deletions doc/source/changes/version_0_34_2.rst.inc
Original file line number Diff line number Diff line change
Expand Up @@ -4,3 +4,12 @@ Fixes
^^^^^

* fixed the viewer being unusable after showing a matplotlib plot (closes :editor_issue:`261`).

* silence spurious debugger warning on Python 3.11 (closes :editor_issue:`263`).

* 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`).
20 changes: 14 additions & 6 deletions larray_editor/comparator.py
Original file line number Diff line number Diff line change
@@ -1,10 +1,7 @@
import ast

import numpy as np
import larray as la

from qtpy.QtCore import Qt
from qtpy.QtGui import QDoubleValidator
from qtpy.QtWidgets import (QWidget, QVBoxLayout, QListWidget, QSplitter, QHBoxLayout,
QLabel, QCheckBox, QLineEdit, QComboBox, QMessageBox)

Expand Down Expand Up @@ -53,8 +50,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 +117,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
15 changes: 13 additions & 2 deletions larray_editor/tests/test_api_larray.py
Original file line number Diff line number Diff line change
Expand Up @@ -100,7 +100,7 @@ def make_demo(width=20, ball_radius=5, path_radius=5, steps=30):
return la.maximum(ball_radius - la.sqrt((x - ball_center_x) ** 2 + (y - ball_center_y) ** 2), 0).transpose(x, y)


def test_matplotlib_show_interaction():
def test_edit_after_matplotlib_show():
import matplotlib.pyplot as plt

arr = la.ndtest((3, 4))
Expand All @@ -109,6 +109,17 @@ def test_matplotlib_show_interaction():
edit()


# this needs to be called in the interactive console and should open a single plot window,
# not two (see issue #265)
def test_plot_returning_ax_and_using_show():
import matplotlib.pyplot as plt

arr = la.ndtest(4)
ax = arr.plot()
plt.show()
return ax


demo = make_demo(9, 2.5, 1.5)
sphere = make_sphere(9, 4)
extreme_array = la.Array([-la.inf, -1, 0, la.nan, 1, la.inf])
Expand Down Expand Up @@ -218,4 +229,4 @@ def test_run_editor_on_exception(local_arr):

# test_run_editor_on_exception(arr2)

test_matplotlib_show_interaction()
test_edit_after_matplotlib_show()
14 changes: 10 additions & 4 deletions larray_editor/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -298,11 +298,17 @@ def __init__(self, canvas, parent=None):


def show_figure(parent, figure, title=None):
canvas = FigureCanvas(figure)
main = PlotDialog(canvas, parent)
if (figure.canvas is not None and figure.canvas.manager is not None and
figure.canvas.manager.window is not None):
figure.canvas.draw()
window = figure.canvas.manager.window
window.raise_()
else:
canvas = FigureCanvas(figure)
window = PlotDialog(canvas, parent)
if title is not None:
main.setWindowTitle(title)
main.show()
window.setWindowTitle(title)
window.show()


class Axis:
Expand Down