PythonQwt 0.14.6__tar.gz → 0.16.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (132) hide show
  1. {pythonqwt-0.14.6/PythonQwt.egg-info → pythonqwt-0.16.0}/PKG-INFO +24 -12
  2. {pythonqwt-0.14.6 → pythonqwt-0.16.0/PythonQwt.egg-info}/PKG-INFO +24 -12
  3. {pythonqwt-0.14.6 → pythonqwt-0.16.0}/PythonQwt.egg-info/SOURCES.txt +1 -1
  4. {pythonqwt-0.14.6 → pythonqwt-0.16.0}/PythonQwt.egg-info/requires.txt +3 -1
  5. {pythonqwt-0.14.6 → pythonqwt-0.16.0}/README.md +18 -8
  6. {pythonqwt-0.14.6 → pythonqwt-0.16.0}/doc/conf.py +6 -1
  7. {pythonqwt-0.14.6 → pythonqwt-0.16.0}/doc/examples/index.rst +7 -7
  8. {pythonqwt-0.14.6 → pythonqwt-0.16.0}/doc/installation.rst +4 -0
  9. pythonqwt-0.16.0/doc/issue93_optimization_summary.md +284 -0
  10. {pythonqwt-0.14.6 → pythonqwt-0.16.0}/doc/overview.rst +6 -6
  11. {pythonqwt-0.14.6 → pythonqwt-0.16.0}/doc/plot_example.py +2 -2
  12. {pythonqwt-0.14.6 → pythonqwt-0.16.0}/pyproject.toml +4 -4
  13. {pythonqwt-0.14.6 → pythonqwt-0.16.0}/qwt/__init__.py +13 -5
  14. {pythonqwt-0.14.6 → pythonqwt-0.16.0}/qwt/graphic.py +30 -13
  15. {pythonqwt-0.14.6 → pythonqwt-0.16.0}/qwt/null_paintdevice.py +5 -1
  16. {pythonqwt-0.14.6 → pythonqwt-0.16.0}/qwt/painter_command.py +49 -12
  17. {pythonqwt-0.14.6 → pythonqwt-0.16.0}/qwt/plot.py +3 -3
  18. {pythonqwt-0.14.6 → pythonqwt-0.16.0}/qwt/plot_canvas.py +1 -1
  19. {pythonqwt-0.14.6 → pythonqwt-0.16.0}/qwt/scale_div.py +5 -3
  20. {pythonqwt-0.14.6 → pythonqwt-0.16.0}/qwt/scale_draw.py +163 -41
  21. {pythonqwt-0.14.6 → pythonqwt-0.16.0}/qwt/scale_engine.py +189 -10
  22. {pythonqwt-0.14.6 → pythonqwt-0.16.0}/qwt/scale_map.py +19 -10
  23. {pythonqwt-0.14.6 → pythonqwt-0.16.0}/qwt/tests/conftest.py +22 -8
  24. {pythonqwt-0.14.6 → pythonqwt-0.16.0}/qwt/tests/test_bodedemo.py +1 -2
  25. {pythonqwt-0.14.6 → pythonqwt-0.16.0}/qwt/tests/test_cpudemo.py +1 -1
  26. {pythonqwt-0.14.6 → pythonqwt-0.16.0}/qwt/tests/test_relativemargin.py +2 -2
  27. {pythonqwt-0.14.6 → pythonqwt-0.16.0}/qwt/text.py +177 -39
  28. pythonqwt-0.14.6/doc/requirements.txt +0 -4
  29. {pythonqwt-0.14.6 → pythonqwt-0.16.0}/LICENSE +0 -0
  30. {pythonqwt-0.14.6 → pythonqwt-0.16.0}/MANIFEST.in +0 -0
  31. {pythonqwt-0.14.6 → pythonqwt-0.16.0}/PythonQwt-tests.desktop +0 -0
  32. {pythonqwt-0.14.6 → pythonqwt-0.16.0}/PythonQwt.egg-info/dependency_links.txt +0 -0
  33. {pythonqwt-0.14.6 → pythonqwt-0.16.0}/PythonQwt.egg-info/entry_points.txt +0 -0
  34. {pythonqwt-0.14.6 → pythonqwt-0.16.0}/PythonQwt.egg-info/top_level.txt +0 -0
  35. {pythonqwt-0.14.6 → pythonqwt-0.16.0}/doc/_static/PythonQwt_logo.png +0 -0
  36. {pythonqwt-0.14.6 → pythonqwt-0.16.0}/doc/_static/QwtPlot_example.png +0 -0
  37. {pythonqwt-0.14.6 → pythonqwt-0.16.0}/doc/_static/panorama.png +0 -0
  38. {pythonqwt-0.14.6 → pythonqwt-0.16.0}/doc/_static/symbol_path_example.png +0 -0
  39. {pythonqwt-0.14.6 → pythonqwt-0.16.0}/doc/examples/bodedemo.rst +0 -0
  40. {pythonqwt-0.14.6 → pythonqwt-0.16.0}/doc/examples/cartesian.rst +0 -0
  41. {pythonqwt-0.14.6 → pythonqwt-0.16.0}/doc/examples/cpudemo.rst +0 -0
  42. {pythonqwt-0.14.6 → pythonqwt-0.16.0}/doc/examples/curvebenchmark1.rst +0 -0
  43. {pythonqwt-0.14.6 → pythonqwt-0.16.0}/doc/examples/curvebenchmark2.rst +0 -0
  44. {pythonqwt-0.14.6 → pythonqwt-0.16.0}/doc/examples/curvedemo1.rst +0 -0
  45. {pythonqwt-0.14.6 → pythonqwt-0.16.0}/doc/examples/curvedemo2.rst +0 -0
  46. {pythonqwt-0.14.6 → pythonqwt-0.16.0}/doc/examples/data.rst +0 -0
  47. {pythonqwt-0.14.6 → pythonqwt-0.16.0}/doc/examples/errorbar.rst +0 -0
  48. {pythonqwt-0.14.6 → pythonqwt-0.16.0}/doc/examples/eventfilter.rst +0 -0
  49. {pythonqwt-0.14.6 → pythonqwt-0.16.0}/doc/examples/image.rst +0 -0
  50. {pythonqwt-0.14.6 → pythonqwt-0.16.0}/doc/examples/logcurve.rst +0 -0
  51. {pythonqwt-0.14.6 → pythonqwt-0.16.0}/doc/examples/mapdemo.rst +0 -0
  52. {pythonqwt-0.14.6 → pythonqwt-0.16.0}/doc/examples/multidemo.rst +0 -0
  53. {pythonqwt-0.14.6 → pythonqwt-0.16.0}/doc/examples/simple.rst +0 -0
  54. {pythonqwt-0.14.6 → pythonqwt-0.16.0}/doc/examples/vertical.rst +0 -0
  55. {pythonqwt-0.14.6 → pythonqwt-0.16.0}/doc/index.rst +0 -0
  56. {pythonqwt-0.14.6 → pythonqwt-0.16.0}/doc/reference/graphic.rst +0 -0
  57. {pythonqwt-0.14.6 → pythonqwt-0.16.0}/doc/reference/index.rst +0 -0
  58. {pythonqwt-0.14.6 → pythonqwt-0.16.0}/doc/reference/interval.rst +0 -0
  59. {pythonqwt-0.14.6 → pythonqwt-0.16.0}/doc/reference/plot.rst +0 -0
  60. {pythonqwt-0.14.6 → pythonqwt-0.16.0}/doc/reference/plot_directpainter.rst +0 -0
  61. {pythonqwt-0.14.6 → pythonqwt-0.16.0}/doc/reference/plot_layout.rst +0 -0
  62. {pythonqwt-0.14.6 → pythonqwt-0.16.0}/doc/reference/plot_series.rst +0 -0
  63. {pythonqwt-0.14.6 → pythonqwt-0.16.0}/doc/reference/scale.rst +0 -0
  64. {pythonqwt-0.14.6 → pythonqwt-0.16.0}/doc/reference/symbol.rst +0 -0
  65. {pythonqwt-0.14.6 → pythonqwt-0.16.0}/doc/reference/text.rst +0 -0
  66. {pythonqwt-0.14.6 → pythonqwt-0.16.0}/doc/reference/toqimage.rst +0 -0
  67. {pythonqwt-0.14.6 → pythonqwt-0.16.0}/doc/reference/transform.rst +0 -0
  68. {pythonqwt-0.14.6 → pythonqwt-0.16.0}/doc/symbol_path_example.py +0 -0
  69. {pythonqwt-0.14.6 → pythonqwt-0.16.0}/qwt/_math.py +0 -0
  70. {pythonqwt-0.14.6 → pythonqwt-0.16.0}/qwt/color_map.py +0 -0
  71. {pythonqwt-0.14.6 → pythonqwt-0.16.0}/qwt/column_symbol.py +0 -0
  72. {pythonqwt-0.14.6 → pythonqwt-0.16.0}/qwt/dyngrid_layout.py +0 -0
  73. {pythonqwt-0.14.6 → pythonqwt-0.16.0}/qwt/interval.py +0 -0
  74. {pythonqwt-0.14.6 → pythonqwt-0.16.0}/qwt/legend.py +0 -0
  75. {pythonqwt-0.14.6 → pythonqwt-0.16.0}/qwt/painter.py +0 -0
  76. {pythonqwt-0.14.6 → pythonqwt-0.16.0}/qwt/plot_curve.py +0 -0
  77. {pythonqwt-0.14.6 → pythonqwt-0.16.0}/qwt/plot_directpainter.py +0 -0
  78. {pythonqwt-0.14.6 → pythonqwt-0.16.0}/qwt/plot_grid.py +0 -0
  79. {pythonqwt-0.14.6 → pythonqwt-0.16.0}/qwt/plot_layout.py +0 -0
  80. {pythonqwt-0.14.6 → pythonqwt-0.16.0}/qwt/plot_marker.py +0 -0
  81. {pythonqwt-0.14.6 → pythonqwt-0.16.0}/qwt/plot_renderer.py +0 -0
  82. {pythonqwt-0.14.6 → pythonqwt-0.16.0}/qwt/plot_series.py +0 -0
  83. {pythonqwt-0.14.6 → pythonqwt-0.16.0}/qwt/qthelpers.py +0 -0
  84. {pythonqwt-0.14.6 → pythonqwt-0.16.0}/qwt/scale_widget.py +0 -0
  85. {pythonqwt-0.14.6 → pythonqwt-0.16.0}/qwt/symbol.py +0 -0
  86. {pythonqwt-0.14.6 → pythonqwt-0.16.0}/qwt/tests/__init__.py +0 -0
  87. {pythonqwt-0.14.6 → pythonqwt-0.16.0}/qwt/tests/comparative_benchmarks.py +0 -0
  88. {pythonqwt-0.14.6 → pythonqwt-0.16.0}/qwt/tests/data/PythonQwt.svg +0 -0
  89. {pythonqwt-0.14.6 → pythonqwt-0.16.0}/qwt/tests/data/bodedemo.png +0 -0
  90. {pythonqwt-0.14.6 → pythonqwt-0.16.0}/qwt/tests/data/cartesian.png +0 -0
  91. {pythonqwt-0.14.6 → pythonqwt-0.16.0}/qwt/tests/data/cpudemo.png +0 -0
  92. {pythonqwt-0.14.6 → pythonqwt-0.16.0}/qwt/tests/data/curvebenchmark1.png +0 -0
  93. {pythonqwt-0.14.6 → pythonqwt-0.16.0}/qwt/tests/data/curvebenchmark2.png +0 -0
  94. {pythonqwt-0.14.6 → pythonqwt-0.16.0}/qwt/tests/data/curvedemo1.png +0 -0
  95. {pythonqwt-0.14.6 → pythonqwt-0.16.0}/qwt/tests/data/curvedemo2.png +0 -0
  96. {pythonqwt-0.14.6 → pythonqwt-0.16.0}/qwt/tests/data/data.png +0 -0
  97. {pythonqwt-0.14.6 → pythonqwt-0.16.0}/qwt/tests/data/errorbar.png +0 -0
  98. {pythonqwt-0.14.6 → pythonqwt-0.16.0}/qwt/tests/data/eventfilter.png +0 -0
  99. {pythonqwt-0.14.6 → pythonqwt-0.16.0}/qwt/tests/data/image.png +0 -0
  100. {pythonqwt-0.14.6 → pythonqwt-0.16.0}/qwt/tests/data/loadtest.png +0 -0
  101. {pythonqwt-0.14.6 → pythonqwt-0.16.0}/qwt/tests/data/logcurve.png +0 -0
  102. {pythonqwt-0.14.6 → pythonqwt-0.16.0}/qwt/tests/data/mapdemo.png +0 -0
  103. {pythonqwt-0.14.6 → pythonqwt-0.16.0}/qwt/tests/data/multidemo.png +0 -0
  104. {pythonqwt-0.14.6 → pythonqwt-0.16.0}/qwt/tests/data/simple.png +0 -0
  105. {pythonqwt-0.14.6 → pythonqwt-0.16.0}/qwt/tests/data/stylesheet.png +0 -0
  106. {pythonqwt-0.14.6 → pythonqwt-0.16.0}/qwt/tests/data/symbol.svg +0 -0
  107. {pythonqwt-0.14.6 → pythonqwt-0.16.0}/qwt/tests/data/symbols.png +0 -0
  108. {pythonqwt-0.14.6 → pythonqwt-0.16.0}/qwt/tests/data/testlauncher.png +0 -0
  109. {pythonqwt-0.14.6 → pythonqwt-0.16.0}/qwt/tests/data/vertical.png +0 -0
  110. {pythonqwt-0.14.6 → pythonqwt-0.16.0}/qwt/tests/test_backingstore.py +0 -0
  111. {pythonqwt-0.14.6 → pythonqwt-0.16.0}/qwt/tests/test_cartesian.py +0 -0
  112. {pythonqwt-0.14.6 → pythonqwt-0.16.0}/qwt/tests/test_curvebenchmark1.py +0 -0
  113. {pythonqwt-0.14.6 → pythonqwt-0.16.0}/qwt/tests/test_curvebenchmark2.py +0 -0
  114. {pythonqwt-0.14.6 → pythonqwt-0.16.0}/qwt/tests/test_curvedemo1.py +0 -0
  115. {pythonqwt-0.14.6 → pythonqwt-0.16.0}/qwt/tests/test_curvedemo2.py +0 -0
  116. {pythonqwt-0.14.6 → pythonqwt-0.16.0}/qwt/tests/test_data.py +0 -0
  117. {pythonqwt-0.14.6 → pythonqwt-0.16.0}/qwt/tests/test_errorbar.py +0 -0
  118. {pythonqwt-0.14.6 → pythonqwt-0.16.0}/qwt/tests/test_eventfilter.py +0 -0
  119. {pythonqwt-0.14.6 → pythonqwt-0.16.0}/qwt/tests/test_highdpi.py +0 -0
  120. {pythonqwt-0.14.6 → pythonqwt-0.16.0}/qwt/tests/test_image.py +0 -0
  121. {pythonqwt-0.14.6 → pythonqwt-0.16.0}/qwt/tests/test_loadtest.py +0 -0
  122. {pythonqwt-0.14.6 → pythonqwt-0.16.0}/qwt/tests/test_logcurve.py +0 -0
  123. {pythonqwt-0.14.6 → pythonqwt-0.16.0}/qwt/tests/test_mapdemo.py +0 -0
  124. {pythonqwt-0.14.6 → pythonqwt-0.16.0}/qwt/tests/test_multidemo.py +0 -0
  125. {pythonqwt-0.14.6 → pythonqwt-0.16.0}/qwt/tests/test_simple.py +0 -0
  126. {pythonqwt-0.14.6 → pythonqwt-0.16.0}/qwt/tests/test_stylesheet.py +0 -0
  127. {pythonqwt-0.14.6 → pythonqwt-0.16.0}/qwt/tests/test_symbols.py +0 -0
  128. {pythonqwt-0.14.6 → pythonqwt-0.16.0}/qwt/tests/test_vertical.py +0 -0
  129. {pythonqwt-0.14.6 → pythonqwt-0.16.0}/qwt/tests/utils.py +0 -0
  130. {pythonqwt-0.14.6 → pythonqwt-0.16.0}/qwt/toqimage.py +0 -0
  131. {pythonqwt-0.14.6 → pythonqwt-0.16.0}/qwt/transform.py +0 -0
  132. {pythonqwt-0.14.6 → pythonqwt-0.16.0}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: PythonQwt
3
- Version: 0.14.6
3
+ Version: 0.16.0
4
4
  Summary: Qt plotting widgets for Python
5
5
  Author-email: Pierre Raybaut <pierre.raybaut@gmail.com>
6
6
  License: PythonQwt License Agreement
@@ -666,12 +666,11 @@ License: PythonQwt License Agreement
666
666
  Project-URL: Homepage, https://github.com/PlotPyStack/PythonQwt/
667
667
  Project-URL: Documentation, https://PythonQwt.readthedocs.io/en/latest/
668
668
  Classifier: Topic :: Scientific/Engineering
669
+ Classifier: Topic :: Scientific/Engineering :: Human Machine Interfaces
669
670
  Classifier: Topic :: Scientific/Engineering :: Visualization
670
671
  Classifier: Topic :: Software Development :: Widget Sets
671
672
  Classifier: Topic :: Software Development :: Libraries :: Python Modules
672
673
  Classifier: Topic :: Utilities
673
- Classifier: Topic :: Scientific/Engineering
674
- Classifier: Topic :: Scientific/Engineering :: Human Machine Interfaces
675
674
  Classifier: Topic :: Software Development :: User Interfaces
676
675
  Classifier: Operating System :: MacOS
677
676
  Classifier: Operating System :: Microsoft :: Windows
@@ -683,15 +682,18 @@ Classifier: Programming Language :: Python :: 3.10
683
682
  Classifier: Programming Language :: Python :: 3.11
684
683
  Classifier: Programming Language :: Python :: 3.12
685
684
  Classifier: Programming Language :: Python :: 3.13
685
+ Classifier: Programming Language :: Python :: 3.14
686
686
  Requires-Python: <4,>=3.9
687
687
  Description-Content-Type: text/markdown
688
688
  License-File: LICENSE
689
- Requires-Dist: NumPy>=1.19
689
+ Requires-Dist: NumPy>=1.21
690
690
  Requires-Dist: QtPy>=1.9
691
691
  Provides-Extra: dev
692
+ Requires-Dist: build; extra == "dev"
692
693
  Requires-Dist: ruff; extra == "dev"
693
694
  Requires-Dist: pylint; extra == "dev"
694
695
  Requires-Dist: Coverage; extra == "dev"
696
+ Requires-Dist: pre-commit; extra == "dev"
695
697
  Provides-Extra: doc
696
698
  Requires-Dist: PyQt5; extra == "doc"
697
699
  Requires-Dist: sphinx>6; extra == "doc"
@@ -736,8 +738,8 @@ plot.insertLegend(qwt.QwtLegend(), qwt.QwtPlot.BottomLegend)
736
738
 
737
739
  # Create two curves and attach them to plot
738
740
  x = np.linspace(-10, 10, 500)
739
- qwt.QwtPlotCurve.make(x, np.cos(x), "Cosinus", plot, linecolor="red", antialiased=True)
740
- qwt.QwtPlotCurve.make(x, np.sin(x), "Sinus", plot, linecolor="blue", antialiased=True)
741
+ qwt.QwtPlotCurve.make(x, np.cos(x), "Cosine", plot, linecolor="red", antialiased=True)
742
+ qwt.QwtPlotCurve.make(x, np.sin(x), "Sine", plot, linecolor="blue", antialiased=True)
741
743
 
742
744
  # Resize and show plot
743
745
  plot.resize(600, 300)
@@ -760,7 +762,7 @@ tests.run()
760
762
  or from the command line:
761
763
 
762
764
  ```bash
763
- PythonQwt
765
+ PythonQwt-tests
764
766
  ```
765
767
 
766
768
  Tests may also be executed in unattended mode:
@@ -773,9 +775,9 @@ PythonQwt-tests --mode unattended
773
775
 
774
776
  The `qwt` package is a pure Python implementation of `Qwt` C++ library with the following limitations.
775
777
 
776
- The following `Qwt` classes won't be reimplemented in `qwt` because more powerful features already exist in `guiqwt`: `QwtPlotZoomer`, `QwtCounter`, `QwtEventPattern`, `QwtPicker`, `QwtPlotPicker`.
778
+ The following `Qwt` classes won't be reimplemented in `qwt` because more powerful features already exist in `PlotPy`: `QwtPlotZoomer`, `QwtCounter`, `QwtEventPattern`, `QwtPicker`, `QwtPlotPicker`.
777
779
 
778
- Only the following plot items are currently implemented in `qwt` (the only plot items needed by `guiqwt`): `QwtPlotItem` (base class), `QwtPlotItem`, `QwtPlotMarker`, `QwtPlotSeriesItem` and `QwtPlotCurve`.
780
+ Only the following plot items are currently implemented in `qwt` (the only plot items needed by `PlotPy`): `QwtPlotItem` (base class), `QwtPlotGrid`, `QwtPlotMarker`, `QwtPlotSeriesItem` and `QwtPlotCurve`.
779
781
 
780
782
  See "Overview" section in [documentation](https://pythonqwt.readthedocs.io/en/latest/) for more details on API limitations when comparing to Qwt.
781
783
 
@@ -798,14 +800,14 @@ Compatibility table:
798
800
 
799
801
  | PythonQwt version | PyQt5 | PyQt6 | PySide2 | PySide6 |
800
802
  |-------------------|-------|-------|---------|---------|
801
- | 0.16 and earlier | ✅ | ⚠️ | ❌ | ⚠️ |
803
+ | 0.15 and earlier | ✅ | ⚠️ | ❌ | ⚠️ |
802
804
  | Latest | ✅ | ✅ | ❌ | ✅ |
803
805
 
804
806
  ### Requirements
805
807
 
806
808
  - Python >=3.9
807
- - QtPy >= 1.3 (and a Python-to-Qt binding library, see above)
808
- - NumPy >= 1.5
809
+ - QtPy >= 1.9 (and a Python-to-Qt binding library, see above)
810
+ - NumPy >= 1.21
809
811
 
810
812
  ### Optional dependencies
811
813
 
@@ -814,12 +816,22 @@ Compatibility table:
814
816
 
815
817
  ### Installation
816
818
 
819
+ From PyPI:
820
+
821
+ ```bash
822
+ pip install PythonQwt
823
+ ```
824
+
817
825
  From the source package:
818
826
 
819
827
  ```bash
820
828
  python -m build
821
829
  ```
822
830
 
831
+ ## Performance investigation
832
+
833
+ Tooling for performance benchmarks, profiling and visual-regression checks across PyQt5/PyQt6/PySide6 lives in [`scripts/`](scripts/README.md). See [`doc/issue93_optimization_summary.md`](doc/issue93_optimization_summary.md) for a worked example.
834
+
823
835
  ## Copyrights
824
836
 
825
837
  ### Main code base
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: PythonQwt
3
- Version: 0.14.6
3
+ Version: 0.16.0
4
4
  Summary: Qt plotting widgets for Python
5
5
  Author-email: Pierre Raybaut <pierre.raybaut@gmail.com>
6
6
  License: PythonQwt License Agreement
@@ -666,12 +666,11 @@ License: PythonQwt License Agreement
666
666
  Project-URL: Homepage, https://github.com/PlotPyStack/PythonQwt/
667
667
  Project-URL: Documentation, https://PythonQwt.readthedocs.io/en/latest/
668
668
  Classifier: Topic :: Scientific/Engineering
669
+ Classifier: Topic :: Scientific/Engineering :: Human Machine Interfaces
669
670
  Classifier: Topic :: Scientific/Engineering :: Visualization
670
671
  Classifier: Topic :: Software Development :: Widget Sets
671
672
  Classifier: Topic :: Software Development :: Libraries :: Python Modules
672
673
  Classifier: Topic :: Utilities
673
- Classifier: Topic :: Scientific/Engineering
674
- Classifier: Topic :: Scientific/Engineering :: Human Machine Interfaces
675
674
  Classifier: Topic :: Software Development :: User Interfaces
676
675
  Classifier: Operating System :: MacOS
677
676
  Classifier: Operating System :: Microsoft :: Windows
@@ -683,15 +682,18 @@ Classifier: Programming Language :: Python :: 3.10
683
682
  Classifier: Programming Language :: Python :: 3.11
684
683
  Classifier: Programming Language :: Python :: 3.12
685
684
  Classifier: Programming Language :: Python :: 3.13
685
+ Classifier: Programming Language :: Python :: 3.14
686
686
  Requires-Python: <4,>=3.9
687
687
  Description-Content-Type: text/markdown
688
688
  License-File: LICENSE
689
- Requires-Dist: NumPy>=1.19
689
+ Requires-Dist: NumPy>=1.21
690
690
  Requires-Dist: QtPy>=1.9
691
691
  Provides-Extra: dev
692
+ Requires-Dist: build; extra == "dev"
692
693
  Requires-Dist: ruff; extra == "dev"
693
694
  Requires-Dist: pylint; extra == "dev"
694
695
  Requires-Dist: Coverage; extra == "dev"
696
+ Requires-Dist: pre-commit; extra == "dev"
695
697
  Provides-Extra: doc
696
698
  Requires-Dist: PyQt5; extra == "doc"
697
699
  Requires-Dist: sphinx>6; extra == "doc"
@@ -736,8 +738,8 @@ plot.insertLegend(qwt.QwtLegend(), qwt.QwtPlot.BottomLegend)
736
738
 
737
739
  # Create two curves and attach them to plot
738
740
  x = np.linspace(-10, 10, 500)
739
- qwt.QwtPlotCurve.make(x, np.cos(x), "Cosinus", plot, linecolor="red", antialiased=True)
740
- qwt.QwtPlotCurve.make(x, np.sin(x), "Sinus", plot, linecolor="blue", antialiased=True)
741
+ qwt.QwtPlotCurve.make(x, np.cos(x), "Cosine", plot, linecolor="red", antialiased=True)
742
+ qwt.QwtPlotCurve.make(x, np.sin(x), "Sine", plot, linecolor="blue", antialiased=True)
741
743
 
742
744
  # Resize and show plot
743
745
  plot.resize(600, 300)
@@ -760,7 +762,7 @@ tests.run()
760
762
  or from the command line:
761
763
 
762
764
  ```bash
763
- PythonQwt
765
+ PythonQwt-tests
764
766
  ```
765
767
 
766
768
  Tests may also be executed in unattended mode:
@@ -773,9 +775,9 @@ PythonQwt-tests --mode unattended
773
775
 
774
776
  The `qwt` package is a pure Python implementation of `Qwt` C++ library with the following limitations.
775
777
 
776
- The following `Qwt` classes won't be reimplemented in `qwt` because more powerful features already exist in `guiqwt`: `QwtPlotZoomer`, `QwtCounter`, `QwtEventPattern`, `QwtPicker`, `QwtPlotPicker`.
778
+ The following `Qwt` classes won't be reimplemented in `qwt` because more powerful features already exist in `PlotPy`: `QwtPlotZoomer`, `QwtCounter`, `QwtEventPattern`, `QwtPicker`, `QwtPlotPicker`.
777
779
 
778
- Only the following plot items are currently implemented in `qwt` (the only plot items needed by `guiqwt`): `QwtPlotItem` (base class), `QwtPlotItem`, `QwtPlotMarker`, `QwtPlotSeriesItem` and `QwtPlotCurve`.
780
+ Only the following plot items are currently implemented in `qwt` (the only plot items needed by `PlotPy`): `QwtPlotItem` (base class), `QwtPlotGrid`, `QwtPlotMarker`, `QwtPlotSeriesItem` and `QwtPlotCurve`.
779
781
 
780
782
  See "Overview" section in [documentation](https://pythonqwt.readthedocs.io/en/latest/) for more details on API limitations when comparing to Qwt.
781
783
 
@@ -798,14 +800,14 @@ Compatibility table:
798
800
 
799
801
  | PythonQwt version | PyQt5 | PyQt6 | PySide2 | PySide6 |
800
802
  |-------------------|-------|-------|---------|---------|
801
- | 0.16 and earlier | ✅ | ⚠️ | ❌ | ⚠️ |
803
+ | 0.15 and earlier | ✅ | ⚠️ | ❌ | ⚠️ |
802
804
  | Latest | ✅ | ✅ | ❌ | ✅ |
803
805
 
804
806
  ### Requirements
805
807
 
806
808
  - Python >=3.9
807
- - QtPy >= 1.3 (and a Python-to-Qt binding library, see above)
808
- - NumPy >= 1.5
809
+ - QtPy >= 1.9 (and a Python-to-Qt binding library, see above)
810
+ - NumPy >= 1.21
809
811
 
810
812
  ### Optional dependencies
811
813
 
@@ -814,12 +816,22 @@ Compatibility table:
814
816
 
815
817
  ### Installation
816
818
 
819
+ From PyPI:
820
+
821
+ ```bash
822
+ pip install PythonQwt
823
+ ```
824
+
817
825
  From the source package:
818
826
 
819
827
  ```bash
820
828
  python -m build
821
829
  ```
822
830
 
831
+ ## Performance investigation
832
+
833
+ Tooling for performance benchmarks, profiling and visual-regression checks across PyQt5/PyQt6/PySide6 lives in [`scripts/`](scripts/README.md). See [`doc/issue93_optimization_summary.md`](doc/issue93_optimization_summary.md) for a worked example.
834
+
823
835
  ## Copyrights
824
836
 
825
837
  ### Main code base
@@ -12,9 +12,9 @@ PythonQwt.egg-info/top_level.txt
12
12
  doc/conf.py
13
13
  doc/index.rst
14
14
  doc/installation.rst
15
+ doc/issue93_optimization_summary.md
15
16
  doc/overview.rst
16
17
  doc/plot_example.py
17
- doc/requirements.txt
18
18
  doc/symbol_path_example.py
19
19
  doc/_static/PythonQwt_logo.png
20
20
  doc/_static/QwtPlot_example.png
@@ -1,10 +1,12 @@
1
- NumPy>=1.19
1
+ NumPy>=1.21
2
2
  QtPy>=1.9
3
3
 
4
4
  [dev]
5
+ build
5
6
  ruff
6
7
  pylint
7
8
  Coverage
9
+ pre-commit
8
10
 
9
11
  [doc]
10
12
  PyQt5
@@ -33,8 +33,8 @@ plot.insertLegend(qwt.QwtLegend(), qwt.QwtPlot.BottomLegend)
33
33
 
34
34
  # Create two curves and attach them to plot
35
35
  x = np.linspace(-10, 10, 500)
36
- qwt.QwtPlotCurve.make(x, np.cos(x), "Cosinus", plot, linecolor="red", antialiased=True)
37
- qwt.QwtPlotCurve.make(x, np.sin(x), "Sinus", plot, linecolor="blue", antialiased=True)
36
+ qwt.QwtPlotCurve.make(x, np.cos(x), "Cosine", plot, linecolor="red", antialiased=True)
37
+ qwt.QwtPlotCurve.make(x, np.sin(x), "Sine", plot, linecolor="blue", antialiased=True)
38
38
 
39
39
  # Resize and show plot
40
40
  plot.resize(600, 300)
@@ -57,7 +57,7 @@ tests.run()
57
57
  or from the command line:
58
58
 
59
59
  ```bash
60
- PythonQwt
60
+ PythonQwt-tests
61
61
  ```
62
62
 
63
63
  Tests may also be executed in unattended mode:
@@ -70,9 +70,9 @@ PythonQwt-tests --mode unattended
70
70
 
71
71
  The `qwt` package is a pure Python implementation of `Qwt` C++ library with the following limitations.
72
72
 
73
- The following `Qwt` classes won't be reimplemented in `qwt` because more powerful features already exist in `guiqwt`: `QwtPlotZoomer`, `QwtCounter`, `QwtEventPattern`, `QwtPicker`, `QwtPlotPicker`.
73
+ The following `Qwt` classes won't be reimplemented in `qwt` because more powerful features already exist in `PlotPy`: `QwtPlotZoomer`, `QwtCounter`, `QwtEventPattern`, `QwtPicker`, `QwtPlotPicker`.
74
74
 
75
- Only the following plot items are currently implemented in `qwt` (the only plot items needed by `guiqwt`): `QwtPlotItem` (base class), `QwtPlotItem`, `QwtPlotMarker`, `QwtPlotSeriesItem` and `QwtPlotCurve`.
75
+ Only the following plot items are currently implemented in `qwt` (the only plot items needed by `PlotPy`): `QwtPlotItem` (base class), `QwtPlotGrid`, `QwtPlotMarker`, `QwtPlotSeriesItem` and `QwtPlotCurve`.
76
76
 
77
77
  See "Overview" section in [documentation](https://pythonqwt.readthedocs.io/en/latest/) for more details on API limitations when comparing to Qwt.
78
78
 
@@ -95,14 +95,14 @@ Compatibility table:
95
95
 
96
96
  | PythonQwt version | PyQt5 | PyQt6 | PySide2 | PySide6 |
97
97
  |-------------------|-------|-------|---------|---------|
98
- | 0.16 and earlier | ✅ | ⚠️ | ❌ | ⚠️ |
98
+ | 0.15 and earlier | ✅ | ⚠️ | ❌ | ⚠️ |
99
99
  | Latest | ✅ | ✅ | ❌ | ✅ |
100
100
 
101
101
  ### Requirements
102
102
 
103
103
  - Python >=3.9
104
- - QtPy >= 1.3 (and a Python-to-Qt binding library, see above)
105
- - NumPy >= 1.5
104
+ - QtPy >= 1.9 (and a Python-to-Qt binding library, see above)
105
+ - NumPy >= 1.21
106
106
 
107
107
  ### Optional dependencies
108
108
 
@@ -111,12 +111,22 @@ Compatibility table:
111
111
 
112
112
  ### Installation
113
113
 
114
+ From PyPI:
115
+
116
+ ```bash
117
+ pip install PythonQwt
118
+ ```
119
+
114
120
  From the source package:
115
121
 
116
122
  ```bash
117
123
  python -m build
118
124
  ```
119
125
 
126
+ ## Performance investigation
127
+
128
+ Tooling for performance benchmarks, profiling and visual-regression checks across PyQt5/PyQt6/PySide6 lives in [`scripts/`](scripts/README.md). See [`doc/issue93_optimization_summary.md`](doc/issue93_optimization_summary.md) for a worked example.
129
+
120
130
  ## Copyrights
121
131
 
122
132
  ### Main code base
@@ -101,7 +101,12 @@ autodoc_member_order = "bysource"
101
101
 
102
102
  # The theme to use for HTML and HTML Help pages. Major themes that come with
103
103
  # Sphinx are currently 'default' and 'sphinxdoc'.
104
- html_theme = "default"
104
+ try:
105
+ import python_docs_theme # noqa: F401
106
+
107
+ html_theme = "python_docs_theme"
108
+ except ImportError:
109
+ html_theme = "default"
105
110
 
106
111
  # Theme options are theme-specific and customize the look and feel of a theme
107
112
  # further. For a list of options available for each theme, see the
@@ -6,19 +6,19 @@ Examples
6
6
  The test launcher
7
7
  -----------------
8
8
 
9
- A lot of examples are available in the ``qwt.test`` module ::
9
+ A lot of examples are available in the ``qwt.tests`` module ::
10
10
 
11
11
  from qwt import tests
12
12
  tests.run()
13
13
 
14
- The two lines above execute the ``PythonQwt`` test launcher:
14
+ The two lines above execute the ``PythonQwt-tests`` test launcher:
15
15
 
16
16
  .. image:: /../qwt/tests/data/testlauncher.png
17
17
 
18
- GUI-based test launcher can be executed from the command line thanks to the
19
- ``PythonQwt`` test script.
18
+ GUI-based test launcher can be executed from the command line thanks to the
19
+ ``PythonQwt-tests`` test script.
20
20
 
21
- Unit tests may be executed from the commande line thanks to the console-based script
21
+ Unit tests may be executed from the command line thanks to the console-based script
22
22
  ``PythonQwt-tests``: ``PythonQwt-tests --mode unattended``.
23
23
 
24
24
  Tests
@@ -26,11 +26,11 @@ Tests
26
26
 
27
27
 
28
28
 
29
- Here are some examples from the `qwt.test` module:
29
+ Here are some examples from the `qwt.tests` module:
30
30
 
31
31
  .. toctree::
32
32
  :maxdepth: 2
33
-
33
+
34
34
  bodedemo
35
35
  cartesian
36
36
  cpudemo
@@ -15,6 +15,10 @@ Requirements:
15
15
  Installation
16
16
  ------------
17
17
 
18
+ From PyPI:
19
+
20
+ `pip install PythonQwt`
21
+
18
22
  From the source package:
19
23
 
20
24
  `python -m build`