Skip to content

Commit 6a62b0c

Browse files
committed
Updated CHANGELOG
1 parent d763d87 commit 6a62b0c

File tree

1 file changed

+59
-86
lines changed

1 file changed

+59
-86
lines changed

CHANGELOG.md

+59-86
Original file line numberDiff line numberDiff line change
@@ -2,17 +2,35 @@
22

33
## Version 0.12.7
44

5-
- Fixed other random crashes (segfaults) on Linux related to Qt objects stored in
6-
private data structures (`QwtGraphic_PrivateData`, `QwtLegendLabel_PrivateData`)
5+
- Fixed random crashes (segfaults) on Linux related to conflicts between Qt and Python reference counting mechanisms:
6+
- This issue was only happening on Linux, and only with Python 3.12, probably due to changes in Python garbage collector behavior introduced in Python 3.12. Moreover, it was only triggered with an extensive test suite, such as the one provided by the `PlotPy` project.
7+
- The solution was to derive all private classes containing Qt objects from `QObject` instead of `object`, in order to let Qt manage the reference counting of its objects.
8+
- This change was applied to the following classes:
9+
- `QwtLinearColorMap_PrivateData`
10+
- `QwtColumnSymbol_PrivateData`
11+
- `QwtDynGridLayout_PrivateData`
12+
- `QwtGraphic_PrivateData`
13+
- `QwtLegendLabel_PrivateData`
14+
- `QwtNullPaintDevice_PrivateData`
15+
- `QwtPlotCanvas_PrivateData`
16+
- `QwtPlotDirectPainter_PrivateData`
17+
- `QwtPlotGrid_PrivateData`
18+
- `QwtPlotLayout_PrivateData`
19+
- `QwtPlotMarker_PrivateData`
20+
- `QwtPlotRenderer_PrivateData`
21+
- `QwtPlot_PrivateData`
22+
- `QwtAbstractScaleDraw_PrivateData`
23+
- `QwtScaleDraw_PrivateData`
24+
- `QwtScaleWidget_PrivateData`
25+
- `QwtSymbol_PrivateData`
26+
- `QwtText_PrivateData`
27+
- Removed deprecated code regarding PyQt4 compatibility
728

829
## Version 0.12.6
930

10-
- Fixed random crashes (segfaults) on Linux related to Qt objects stored in cache data
11-
structures (`QwtText` and `QwtSymbol`)
31+
- Fixed random crashes (segfaults) on Linux related to Qt objects stored in cache data structures (`QwtText` and `QwtSymbol`)
1232

13-
- Test suite can simply be run with `pytest` and specific configuration (`conftest.py`)
14-
will be taken into account (previously, the test suite has to be run with
15-
`pytest qwt` in order to be successfully configured)
33+
- Test suite can simply be run with `pytest` and specific configuration (`conftest.py`) will be taken into account (previously, the test suite has to be run with `pytest qwt` in order to be successfully configured)
1634

1735
## Version 0.12.5
1836

@@ -23,56 +41,41 @@
2341
## Version 0.12.4
2442

2543
- Fixed segmentation fault issue reported in the `PlotPy` project:
26-
- See [PlotPy's Issue #13](https://github.com/PlotPyStack/PlotPy/issues/13) for the
27-
original issue.
28-
- The issue was caused by the `QwtSymbol` class constructor, and more specifically
29-
by its private data object, which instanciated an empty `QtPainterPath` object,
30-
causing a segmentation fault on Linux, Python 3.12 and PyQt5.
44+
- See [PlotPy's Issue #13](https://github.com/PlotPyStack/PlotPy/issues/13) for the original issue.
45+
- The issue was caused by the `QwtSymbol` class constructor, and more specifically by its private data object, which instanciated an empty `QtPainterPath` object, causing a segmentation fault on Linux, Python 3.12 and PyQt5.
3146

3247
## Version 0.12.3
3348

3449
- Fixed `Fatal Python error` issue reported in the `PlotPy` project:
35-
- See [PlotPy's Issue #11](https://github.com/PlotPyStack/PlotPy/issues/11) for the
36-
original issue, even if the problem is not directly pointed out in the issue
37-
comments.
38-
- The issue was caused by the `QwtAbstractScaleDraw` cache mechanism, which was
39-
keeping references to `QSizeF` objects that were deleted by the garbage collector
40-
at some point. This was causing a segmentation fault, but only on Linux, and
41-
only when executing the `PlotPy` test suite in a specific order.
42-
- Thanks to @yuzibo for helping to reproduce the issue and providing a test case,
43-
that is the `PlotPy` Debian package build process.
50+
- See [PlotPy's Issue #11](https://github.com/PlotPyStack/PlotPy/issues/11) for the original issue, even if the problem is not directly pointed out in the issue comments.
51+
- The issue was caused by the `QwtAbstractScaleDraw` cache mechanism, which was keeping references to `QSizeF` objects that were deleted by the garbage collector at some point. This was causing a segmentation fault, but only on Linux, and only when executing the `PlotPy` test suite in a specific order.
52+
- Thanks to @yuzibo for helping to reproduce the issue and providing a test case, that is the `PlotPy` Debian package build process.
4453

4554
## Version 0.12.2
4655

4756
For this release, test coverage is 72%.
4857

49-
- Preparing for NumPy V2 compatibility: this is a work in progress, as NumPy V2 is not
50-
yet released. In the meantime, requirements have been updated to exclude NumPy V2.
58+
- Preparing for NumPy V2 compatibility: this is a work in progress, as NumPy V2 is not yet released. In the meantime, requirements have been updated to exclude NumPy V2.
5159
- Fix `QwtPlot.axisInterval` (was raising `AttributeError`)
5260
- Removed unnecessary dependencies (pytest-qt, pytest-cov)
5361
- Moved `conftest.py` to project root
5462
- Project code formatting: using `ruff` instead of `black` and `isort`
5563

5664
## Version 0.12.1
5765

58-
- Fixed `ColorStops.stops` method (was returning a copy of the list of stops instead
59-
of the list itself)
66+
- Fixed `ColorStops.stops` method (was returning a copy of the list of stops instead of the list itself)
6067

6168
## Version 0.12.0
6269

63-
- 30% performance improvement (measured by `qwt.tests.test_loadtest`) by optimizing
64-
the `QwtAbstractScaleDraw.tickLabel` method:
70+
- 30% performance improvement (measured by `qwt.tests.test_loadtest`) by optimizing the `QwtAbstractScaleDraw.tickLabel` method:
6571
- Suppressed an unnecessary call to `QFont.textSize` (which can be quite slow)
6672
- Cached the text size with the label `QwtText` object
6773
- Added support for margins in `QwtPlot` (see Issue #82):
6874
- Default margins are set to 0.05 (5% of the plot area) at each side of the plot
69-
- Margins are adjustable for each plot axis using `QwtPlot.setAxisMargin` (and
70-
`QwtPlot.axisMargin` to get the current value)
71-
- Added an additional margin to the left of ticks labels: this margin is set to one
72-
character width, to avoid the labels to be truncated while keeping a tight layout
75+
- Margins are adjustable for each plot axis using `QwtPlot.setAxisMargin` (and `QwtPlot.axisMargin` to get the current value)
76+
- Added an additional margin to the left of ticks labels: this margin is set to one character width, to avoid the labels to be truncated while keeping a tight layout
7377
- Slighly improved the new flat style (see V0.7.0) by selecting default fonts
74-
- API breaking change: `QwtLinearColorMap.colorStops` now returns a list of `ColorStop`
75-
objects instead of the list of stop values
78+
- API breaking change: `QwtLinearColorMap.colorStops` now returns a list of `ColorStop` objects instead of the list of stop values
7679

7780
## Version 0.11.2
7881

@@ -153,52 +156,40 @@ For this release, test coverage is 72%.
153156
## Version 0.9.1
154157

155158
- Added load test showing a large number of plots (eventually highlights performance issues).
156-
- Fixed event management in `QwtPlot` and removed unnecessary `QEvent.LayoutRequest`
157-
emission in `QwtScaleWidget` (caused high CPU usage with `guiqwt.ImageWidget`).
159+
- Fixed event management in `QwtPlot` and removed unnecessary `QEvent.LayoutRequest` emission in `QwtScaleWidget` (caused high CPU usage with `guiqwt.ImageWidget`).
158160
- `QwtScaleDiv`: fixed ticks initialization when passing all arguments to constructor.
159161
- tests/image.py: fixed overriden `updateLegend` signature.
160162

161163
## Version 0.9.0
162164

163-
- `QwtPlot`: set the `autoReplot` option at False by default, to avoid time consuming
164-
implicit plot updates.
165-
- Added `QwtPlotItem.setIcon` and `QwtPlotItem.icon` method for setting and getting the
166-
icon associated to the plot item (as of today, this feature is not strictly needed in
167-
PythonQwt: this has been implemented for several use cases in higher level libraries
168-
(see PR #61).
165+
- `QwtPlot`: set the `autoReplot` option at False by default, to avoid time consuming implicit plot updates.
166+
- Added `QwtPlotItem.setIcon` and `QwtPlotItem.icon` method for setting and getting the icon associated to the plot item (as of today, this feature is not strictly needed in PythonQwt: this has been implemented for several use cases in higher level libraries (see PR #61).
169167
- Removed unused `QwtPlotItem.defaultIcon` method.
170168
- Added various minor optimizations for axes/ticks drawing features.
171169
- Fixed `QwtPlot.canvasMap` when `axisScaleDiv` returns None.
172170
- Fixed alias `np.float` which is deprecated in NumPy 1.20.
173171

174172
## Version 0.8.3
175173

176-
- Fixed simple plot examples (setup.py & plot.py's doc page) following the introduction
177-
of the new QtPy dependency (Qt compatibility layer) since V0.8.0.
174+
- Fixed simple plot examples (setup.py & plot.py's doc page) following the introduction of the new QtPy dependency (Qt compatibility layer) since V0.8.0.
178175

179176
## Version 0.8.2
180177

181178
- Added new GUI-based test script `PythonQwt-py3` to run the test launcher.
182-
- Added command-line options to the `PythonQwt-tests-py3` script to run all the tests
183-
simultenously in unattended mode (`--mode unattended`) or to update all the
184-
screenshots (`--mode screenshots`).
185-
- Added internal scripts for automated test in virtual environments with both PyQt5 and
186-
PySide2.
179+
- Added command-line options to the `PythonQwt-tests-py3` script to run all the tests simultenously in unattended mode (`--mode unattended`) or to update all the screenshots (`--mode screenshots`).
180+
- Added internal scripts for automated test in virtual environments with both PyQt5 and PySide2.
187181

188182
## Version 0.8.1
189183

190-
- PySide2 support was significatively improved betwen PythonQwt V0.8.0 and
191-
V0.8.1 thanks to the new `qwt.qwt_curve.array2d_to_qpolygonf` function.
184+
- PySide2 support was significatively improved betwen PythonQwt V0.8.0 and V0.8.1 thanks to the new `qwt.qwt_curve.array2d_to_qpolygonf` function.
192185

193186
## Version 0.8.0
194187

195-
- Added PySide2 support: PythonQwt is now compatible with Python 2.7, Python 3.4+,
196-
PyQt4, PyQt5 and PySide2!
188+
- Added PySide2 support: PythonQwt is now compatible with Python 2.7, Python 3.4+, PyQt4, PyQt5 and PySide2!
197189

198190
## Version 0.7.1
199191

200-
- Changed QwtPlotItem.detachItems signature: removed unnecessary "autoDelete" argument,
201-
initialiazing "rtti" argument to None (remove all items)
192+
- Changed QwtPlotItem.detachItems signature: removed unnecessary "autoDelete" argument, initialiazing "rtti" argument to None (remove all items)
202193
- Improved Qt universal support (PyQt5, ...)
203194

204195
## Version 0.7.0
@@ -214,12 +205,8 @@ For this release, test coverage is 72%.
214205
- Added new test launcher with screenshots (automatically generated)
215206
- Removed `guidata` dependency thanks to the new specific GUI-based test launcher
216207
- Updated documentation (added more examples, using automatically generated screenshots)
217-
- QwtPlot: added "flatStyle" option, a PythonQwt-exclusive feature improving
218-
default plot style (without margin, more compact and flat look) -- option is
219-
enabled by default
220-
- QwtAbstractScaleDraw: added option to set the tick color lighter factor for
221-
each tick type (minor, medium, major) -- this feature is used with the new
222-
flatStyle option
208+
- QwtPlot: added "flatStyle" option, a PythonQwt-exclusive feature improving default plot style (without margin, more compact and flat look) -- option is enabled by default
209+
- QwtAbstractScaleDraw: added option to set the tick color lighter factor for each tick type (minor, medium, major) -- this feature is used with the new flatStyle option
223210
- Fixed obvious errors (+ poor implementations) in untested code parts
224211
- Major code cleaning and formatting
225212

@@ -241,8 +228,7 @@ For this release, test coverage is 72%.
241228

242229
## Version 0.6.1
243230

244-
- Fixed rounding issue with PythonQwt scale engine (0...1000 is now divided
245-
in 200-size steps, as in both Qwt and PyQwt)
231+
- Fixed rounding issue with PythonQwt scale engine (0...1000 is now divided in 200-size steps, as in both Qwt and PyQwt)
246232
- Removed unnecessary mask on scaleWidget (this closes #35)
247233
- CurveBenchmark.py: fixed TypeError with numpy.linspace (NumPy=1.18)
248234

@@ -264,18 +250,13 @@ For this release, test coverage is 72%.
264250

265251
## Version 0.5.4
266252

267-
Fixed an annoying bug which caused scale widget (axis ticks in particular)
268-
to be misaligned with canvas grid: the user was forced to resize the plot
269-
widget as a workaround
253+
Fixed an annoying bug which caused scale widget (axis ticks in particular) to be misaligned with canvas grid: the user was forced to resize the plot widget as a workaround
270254

271255
## Version 0.5.3
272256

273-
- Better handling of infinity and `NaN` values in scales (removed `NumPy`
274-
warnings)
275-
- Now handling infinity and `NaN` values in series data: removing points that
276-
can't be drawn
277-
- Fixed logarithmic scale engine: presence of values <= 0 was slowing down
278-
series data plotting
257+
- Better handling of infinity and `NaN` values in scales (removed `NumPy` warnings)
258+
- Now handling infinity and `NaN` values in series data: removing points that can't be drawn
259+
- Fixed logarithmic scale engine: presence of values <= 0 was slowing down series data plotting
279260

280261
## Version 0.5.2
281262

@@ -286,23 +267,19 @@ series data plotting
286267

287268
## Version 0.5.1
288269

289-
- Fixed Issue #22: fixed scale issues in [CurveDemo2.py](qwt/tests/CurveDemo2.py)
290-
and [ImagePlotDemo.py](qwt/tests/ImagePlotDemo.py)
270+
- Fixed Issue #22: fixed scale issues in [CurveDemo2.py](qwt/tests/CurveDemo2.py) and [ImagePlotDemo.py](qwt/tests/ImagePlotDemo.py)
291271
- `QwtPlotCurve`: sticks were not drawn correctly depending on orientation
292272
- `QwtInterval`: avoid overflows with `NumPy` scalars
293273
- Fixed Issue #28: curve shading was broken since v0.5.0
294274
- setup.py: using setuptools "entry_points" instead of distutils "scripts"
295-
- Showing curves/plots number in benchmarks to avoid any misinterpretation
296-
(see Issue #26)
275+
- Showing curves/plots number in benchmarks to avoid any misinterpretation (see Issue #26)
297276
- Added Python2/Python3 scripts for running tests
298277

299278
## Version 0.5.0
300279

301280
- Various optimizations
302-
- Major API simplification, taking into account the feature that won't be
303-
implemented (fitting, rounding, weeding out points, clipping, etc.)
304-
- Added `QwtScaleDraw.setLabelAutoSize`/`labelAutoSize` methods to set the new
305-
auto size option (see [documentation](http://pythonhosted.org/PythonQwt/))
281+
- Major API simplification, taking into account the feature that won't be implemented (fitting, rounding, weeding out points, clipping, etc.)
282+
- Added `QwtScaleDraw.setLabelAutoSize`/`labelAutoSize` methods to set the new auto size option (see [documentation](http://pythonhosted.org/PythonQwt/))
306283
- `QwtPainter`: removed unused methods `drawRoundFrame`, `drawImage` and `drawPixmap`
307284

308285
## Version 0.4.0
@@ -317,19 +294,15 @@ Renamed the project (python-qwt --> PythonQwt), for various reasons.
317294

318295
## Version 0.2.1
319296

320-
Fixed Issue #23: "argument numPoints is not implemented" error was showing
321-
up when calling `QwtSymbol.drawSymbol(symbol, QPoint(x, y))`.
297+
Fixed Issue #23: "argument numPoints is not implemented" error was showing up when calling `QwtSymbol.drawSymbol(symbol, QPoint(x, y))`.
322298

323299
## Version 0.2.0
324300

325-
Added docstrings in all Python modules and a complete documentation based on
326-
Sphinx. See the Overview section for API limitations when comparing to Qwt.
301+
Added docstrings in all Python modules and a complete documentation based on Sphinx. See the Overview section for API limitations when comparing to Qwt.
327302

328303
## Version 0.1.1
329304

330-
Fixed Issue #21 (blocking issue *only* on non-Windows platforms when
331-
building the package): typo in "PythonQwt-tests" script name
332-
(in [setup script](setup.py))
305+
Fixed Issue #21 (blocking issue *only* on non-Windows platforms when building the package): typo in "PythonQwt-tests" script name (in [setup script](setup.py))
333306

334307
## Version 0.1.0
335308

0 commit comments

Comments
 (0)