Releases: PlotPyStack/PythonQwt
Releases · PlotPyStack/PythonQwt
v0.16.0
Immutable
release. Only release title and notes can be modified.
Performance
- Major performance optimizations addressing Issue #93 (rendering performance degradation with Qt 6, also benefitting Qt 5):
QwtText: removed unnecessaryQObjectinheritance and added a font key cache to avoid expensiveQFonthashing on every text rendering operationQwtText: cached Qt alignment and text format flags as plain integers to bypassPyQt6enum overhead in hot pathsQwtText: enabled font key caching fast path for Qt 6, kept disabled for Qt 5 to preserve consistent text renderingQwtGraphicandQwtPainterCommand: cached Qt flags as integers to reduce per-command overhead, especially under PyQt6QwtScaleDraw,QwtScaleEngine,QwtScaleMapandQwtScaleDiv: micro-optimizations on the tick computation and coordinate transform code paths
- Added benchmarking and visual regression scripts under
scripts/(bench_qt.ps1,bench_plotpy_loadtest.py,profile_loadtest.py,lineprofile_loadtest.py,capture_screenshots.py,diff_screenshots.py) to measure and validate rendering performance and correctness
Bug fixes
- Merged PR #105: fixed legend icon being rendered incorrectly - thanks to @Adrian-B-Moreira
- Fixed
QPaintDevicewarnings onDevicePixelRatioandDevicePixelRatioScaledmetrics inQwtNullPaintDevice - Fixed integer division in
QwtScaleEngineso that medium ticks are actually produced (previously, the medium tick step was truncated to zero in some configurations) - Fixed
QwtScaleMaprectangle transform and degenerate scale handling (when source or destination interval has zero width)
Other changes
- Internal refactor: removed unnecessary
QObjectinheritance fromQwtText(QwtTextinstances are no longerQObjectsubclasses; this is an internal change with no impact on the public plotting API, but downstream code relying on Qt signals/slots onQwtTextinstances should be adapted) - Development workflow: replaced legacy
.batscripts with a unifiedscripts/run_with_env.pyenvironment loader, refactored VS Code tasks, added coverage tasks and CI gating of PyPI deployment on the test suite passing - Documentation: updated README, Sphinx documentation, dependencies and added AI coding agent instructions
v0.15.0
Immutable
release. Only release title and notes can be modified.
Version 0.15.0
- Added support for
QwtDateTimeScaleDrawandQwtDateTimeScaleEnginefor datetime axis support (seeQwtDateTimeScaleDrawandQwtDateTimeScaleEngineclasses in theqwtmodule) - Improved font rendering for rotated text in
QwtPlainTextEngine.drawmethod: disabled font hinting to avoid character misalignment in rotated text
v0.14.6
Version 0.14.6
- Fixed Issue #100 - TypeError in
QwtSymbol.drawSymbolmethod due to outdatedrenderSymbolscall - Fixed Issue #101 -
RuntimeWarning: overflow encountered in castwhen plottingnumpy.float32curve data - Merged PR #103: [FIX] wrong handling of
border.rectListwith PySide6 backend - thanks to @martinschwinzerl
v0.14.5
v0.14.4
Version 0.14.4
- Fixed canvas rectangle type in
drawItemsmethod call inQwtPlot.drawCanvas(was causing a hard crash when printing to PDF a canvas with upstreamPlotPyproject)
v0.14.3
Version 0.14.3
- Fixed Issue #94 - Different logarithmic scale behavior when compared to Qwt
- Merged PR #91: Fix: legend now showing up when enabled later - thanks to @nicoddemus
- Removed
QwtPlotItem.setIconandQwtPlotItem.iconmethods (introduced in 0.9.0 but not used in PythonQwt)
v0.14.2
Version 0.14.2
- Merged PR #89: fixed call to
ScaleEngine.autoScaleinQwtPlot.updateAxes(returned values were not used) - thanks to @nicoddemus - Merged PR #90: updated
QwtLinearScaleEngine.autoScalemethod implementation to the latest Qwt version - thanks to @nicoddemus
v0.14.1
Version 0.14.1
- Handled
RuntimeErrorwhen runningtest_eventfilter.pyon Ubuntu 22.04 (Python 3.12, PyQt5) - Fixed
ResourceWarning: unclosed fileintest_cpudemo.py(purely test issue) - Fixed segmentation fault in
test_multidemo.py(purely test issue, related to test utility moduleqwt.tests.utils) - Update GitHub actions to use the latest versions of actions/checkout, actions/setup-python, ...
v0.14.0
Dropped support for Python 3.8
v0.12.7
- Fixed random crashes (segfaults) on Linux related to conflicts between Qt and Python reference counting mechanisms:
- 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
PlotPyproject. - The solution was to derive all private classes containing Qt objects from
QObjectinstead ofobject, in order to let Qt manage the reference counting of its objects. - This change was applied to the following classes:
QwtLinearColorMap_PrivateDataQwtColumnSymbol_PrivateDataQwtDynGridLayout_PrivateDataQwtGraphic_PrivateDataQwtLegendLabel_PrivateDataQwtNullPaintDevice_PrivateDataQwtPlotCanvas_PrivateDataQwtPlotDirectPainter_PrivateDataQwtPlotGrid_PrivateDataQwtPlotLayout_PrivateDataQwtPlotMarker_PrivateDataQwtPlotRenderer_PrivateDataQwtPlot_PrivateDataQwtAbstractScaleDraw_PrivateDataQwtScaleDraw_PrivateDataQwtScaleWidget_PrivateDataQwtSymbol_PrivateDataQwtText_PrivateData
- 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
- Removed deprecated code regarding PyQt4 compatibility