toucan-plot 0.3.0__tar.gz → 0.4.1__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 (41) hide show
  1. {toucan_plot-0.3.0/src/toucan_plot.egg-info → toucan_plot-0.4.1}/PKG-INFO +19 -20
  2. {toucan_plot-0.3.0 → toucan_plot-0.4.1}/README.md +1 -1
  3. {toucan_plot-0.3.0 → toucan_plot-0.4.1}/pyproject.toml +9 -3
  4. toucan_plot-0.4.1/src/toucan_plot/__init__.py +0 -0
  5. toucan_plot-0.4.1/src/toucan_plot/assets/ico/toucan-plot.png +0 -0
  6. {toucan_plot-0.3.0 → toucan_plot-0.4.1}/src/toucan_plot/main.py +8 -8
  7. toucan_plot-0.3.0/LICENSE +0 -21
  8. toucan_plot-0.3.0/PKG-INFO +0 -131
  9. toucan_plot-0.3.0/setup.cfg +0 -4
  10. toucan_plot-0.3.0/src/toucan_plot.egg-info/SOURCES.txt +0 -37
  11. toucan_plot-0.3.0/src/toucan_plot.egg-info/dependency_links.txt +0 -1
  12. toucan_plot-0.3.0/src/toucan_plot.egg-info/entry_points.txt +0 -2
  13. toucan_plot-0.3.0/src/toucan_plot.egg-info/requires.txt +0 -9
  14. toucan_plot-0.3.0/src/toucan_plot.egg-info/top_level.txt +0 -1
  15. {toucan_plot-0.3.0 → toucan_plot-0.4.1}/src/toucan_plot/__main__.py +0 -0
  16. {toucan_plot-0.3.0 → toucan_plot-0.4.1}/src/toucan_plot/assets/adjustments-dark.svg +0 -0
  17. {toucan_plot-0.3.0 → toucan_plot-0.4.1}/src/toucan_plot/assets/adjustments-light.svg +0 -0
  18. {toucan_plot-0.3.0 → toucan_plot-0.4.1}/src/toucan_plot/assets/arrow-autofit-height-dark.svg +0 -0
  19. {toucan_plot-0.3.0 → toucan_plot-0.4.1}/src/toucan_plot/assets/arrow-autofit-height-light.svg +0 -0
  20. {toucan_plot-0.3.0 → toucan_plot-0.4.1}/src/toucan_plot/assets/arrow-narrow-left-dark.svg +0 -0
  21. {toucan_plot-0.3.0 → toucan_plot-0.4.1}/src/toucan_plot/assets/arrow-narrow-left-light.svg +0 -0
  22. {toucan_plot-0.3.0 → toucan_plot-0.4.1}/src/toucan_plot/assets/arrow-narrow-right-dark.svg +0 -0
  23. {toucan_plot-0.3.0 → toucan_plot-0.4.1}/src/toucan_plot/assets/arrow-narrow-right-light.svg +0 -0
  24. {toucan_plot-0.3.0 → toucan_plot-0.4.1}/src/toucan_plot/assets/device-floppy-dark.svg +0 -0
  25. {toucan_plot-0.3.0 → toucan_plot-0.4.1}/src/toucan_plot/assets/device-floppy-light.svg +0 -0
  26. {toucan_plot-0.3.0 → toucan_plot-0.4.1}/src/toucan_plot/assets/hand-stop-dark.svg +0 -0
  27. {toucan_plot-0.3.0 → toucan_plot-0.4.1}/src/toucan_plot/assets/hand-stop-light.svg +0 -0
  28. {toucan_plot-0.3.0 → toucan_plot-0.4.1}/src/toucan_plot/assets/home-dark.svg +0 -0
  29. {toucan_plot-0.3.0 → toucan_plot-0.4.1}/src/toucan_plot/assets/home-light.svg +0 -0
  30. {toucan_plot-0.3.0 → toucan_plot-0.4.1}/src/toucan_plot/assets/ico/toucan-plot.ico +0 -0
  31. {toucan_plot-0.3.0 → toucan_plot-0.4.1}/src/toucan_plot/assets/layout-grid-add-dark.svg +0 -0
  32. {toucan_plot-0.3.0 → toucan_plot-0.4.1}/src/toucan_plot/assets/layout-grid-add-light.svg +0 -0
  33. {toucan_plot-0.3.0 → toucan_plot-0.4.1}/src/toucan_plot/assets/math-function-dark.svg +0 -0
  34. {toucan_plot-0.3.0 → toucan_plot-0.4.1}/src/toucan_plot/assets/math-function-light.svg +0 -0
  35. {toucan_plot-0.3.0 → toucan_plot-0.4.1}/src/toucan_plot/assets/ruler-measure-dark.svg +0 -0
  36. {toucan_plot-0.3.0 → toucan_plot-0.4.1}/src/toucan_plot/assets/ruler-measure-light.svg +0 -0
  37. {toucan_plot-0.3.0 → toucan_plot-0.4.1}/src/toucan_plot/assets/zoom-dark.svg +0 -0
  38. {toucan_plot-0.3.0 → toucan_plot-0.4.1}/src/toucan_plot/assets/zoom-light.svg +0 -0
  39. {toucan_plot-0.3.0 → toucan_plot-0.4.1}/src/toucan_plot/utils/__init__.py +0 -0
  40. {toucan_plot-0.3.0 → toucan_plot-0.4.1}/src/toucan_plot/utils/loaders.py +0 -0
  41. {toucan_plot-0.3.0 → toucan_plot-0.4.1}/src/toucan_plot/utils/styles.py +0 -0
@@ -1,23 +1,22 @@
1
- Metadata-Version: 2.4
2
- Name: toucan-plot
3
- Version: 0.3.0
4
- Summary: A versatile PyQt6 and Matplotlib-based plotting tool for CSV and SMV data files.
5
- License-Expression: MIT
6
- Requires-Python: >=3.11
7
- Description-Content-Type: text/markdown
8
- License-File: LICENSE
9
- Requires-Dist: pyqt6>=6.0
10
- Requires-Dist: matplotlib>=3.0
11
- Requires-Dist: numpy>=1.20
12
- Requires-Dist: pyqtdarktheme>=2.1.0
13
- Requires-Dist: scienceplots>=2.2.1
14
- Requires-Dist: python-can>=4.0
15
- Requires-Dist: cantools>=39.0
16
- Requires-Dist: asammdf>=7.0
17
- Requires-Dist: pyarrow>=23.0.1
18
- Dynamic: license-file
19
-
20
- # Toucan-Plot
1
+ Metadata-Version: 2.4
2
+ Name: toucan-plot
3
+ Version: 0.4.1
4
+ Summary: A versatile PyQt6 and Matplotlib-based plotting tool for CSV and SMV data files.
5
+ License-Expression: MIT
6
+ Requires-Dist: pyqt6>=6.0
7
+ Requires-Dist: matplotlib>=3.0
8
+ Requires-Dist: numpy>=1.20
9
+ Requires-Dist: pyqtdarktheme>=2.1.0
10
+ Requires-Dist: scienceplots>=2.2.1
11
+ Requires-Dist: python-can>=4.0
12
+ Requires-Dist: cantools>=39.0
13
+ Requires-Dist: asammdf>=7.0
14
+ Requires-Dist: pyarrow>=23.0.1
15
+ Requires-Dist: chardet>=7.4.3
16
+ Requires-Python: >=3.13
17
+ Description-Content-Type: text/markdown
18
+
19
+ # TouCAN-Plot
21
20
 
22
21
  An interactive PyQt6 + Matplotlib plotting tool for CSV, SMV, and CAN bus log files.
23
22
 
@@ -1,4 +1,4 @@
1
- # Toucan-Plot
1
+ # TouCAN-Plot
2
2
 
3
3
  An interactive PyQt6 + Matplotlib plotting tool for CSV, SMV, and CAN bus log files.
4
4
 
@@ -1,10 +1,14 @@
1
+ [build-system]
2
+ build-backend = "uv_build"
3
+ requires = ["uv-build>=0.11.14,<0.12"]
4
+
1
5
  [project]
2
6
  name = "toucan-plot"
3
- version = "0.3.0"
7
+ version = "0.4.1"
8
+ requires-python = ">=3.13"
4
9
  description = "A versatile PyQt6 and Matplotlib-based plotting tool for CSV and SMV data files."
5
10
  license = "MIT"
6
11
  readme = { file = "README.md", content-type = "text/markdown" }
7
- requires-python = ">=3.11"
8
12
  dependencies = [
9
13
  "pyqt6>=6.0",
10
14
  "matplotlib>=3.0",
@@ -15,6 +19,7 @@ dependencies = [
15
19
  "cantools>=39.0",
16
20
  "asammdf>=7.0",
17
21
  "pyarrow>=23.0.1",
22
+ "chardet>=7.4.3",
18
23
  ]
19
24
 
20
25
  [project.scripts]
@@ -25,7 +30,8 @@ toucan_plot = ["assets/**/*.svg", "assets/**/*.ico"]
25
30
 
26
31
  [dependency-groups]
27
32
  dev = [
28
- "nuitka>=4.0.7",
33
+ "nuitka[all]>=4.1",
34
+ "uv-build>=0.11.14",
29
35
  "zstandard>=0.25.0",
30
36
  ]
31
37
  lint = [
File without changes
@@ -21,7 +21,7 @@ LEGEND_POSITIONS = [
21
21
  class MainWindow(QtWidgets.QMainWindow):
22
22
  def __init__(self):
23
23
  super().__init__()
24
- self.setWindowTitle('Toucan-Plot')
24
+ self.setWindowTitle('TouCAN-Plot')
25
25
  self.setWindowIcon(QtGui.QIcon(os.path.join(os.path.dirname(__file__), 'assets', 'ico', 'toucan-plot.ico')))
26
26
  self.resize(900, 600)
27
27
 
@@ -727,7 +727,7 @@ class MainWindow(QtWidgets.QMainWindow):
727
727
  if self._merged_mode and self.series_list:
728
728
  file_names = [f['name'] for f in self._loaded_files]
729
729
  self.update_plot()
730
- self.setWindowTitle(f'Toucan-Plot — Merged: {", ".join(file_names)}')
730
+ self.setWindowTitle(f'TouCAN-Plot — Merged: {", ".join(file_names)}')
731
731
 
732
732
  def open_file(self):
733
733
  file_filter = "All supported files (*.csv *.smv *.blf *.trc *.asc *.dbc *.mf4 *.mf4z *.feather);;CSV files (*.csv *.smv);;MF4 files (*.mf4 *.mf4z);;Feather files (*.feather);;CAN files (*.blf *.trc *.asc *.dbc);;All files (*)"
@@ -769,7 +769,7 @@ class MainWindow(QtWidgets.QMainWindow):
769
769
  if self.series_list:
770
770
  file_names = [f['name'] for f in self._loaded_files]
771
771
  self.update_plot()
772
- self.setWindowTitle(f'Toucan-Plot — Merged: {", ".join(file_names)}')
772
+ self.setWindowTitle(f'TouCAN-Plot — Merged: {", ".join(file_names)}')
773
773
  self.show_series_selector()
774
774
 
775
775
  def _merge_load_csv(self, path, prefix):
@@ -986,7 +986,7 @@ class MainWindow(QtWidgets.QMainWindow):
986
986
  self._merge_action.setEnabled(True)
987
987
 
988
988
  self.update_plot()
989
- self.setWindowTitle(f'Toucan-Plot — {basename}')
989
+ self.setWindowTitle(f'TouCAN-Plot — {basename}')
990
990
  self.show_series_selector()
991
991
 
992
992
  def _load_blf(self, blf_path, dbc_paths):
@@ -1067,7 +1067,7 @@ class MainWindow(QtWidgets.QMainWindow):
1067
1067
  self._merge_action.setEnabled(True)
1068
1068
 
1069
1069
  self.update_plot()
1070
- self.setWindowTitle(f'Toucan-Plot — {basename}')
1070
+ self.setWindowTitle(f'TouCAN-Plot — {basename}')
1071
1071
  self.show_series_selector()
1072
1072
 
1073
1073
  def _load_mf4(self, path):
@@ -1148,7 +1148,7 @@ class MainWindow(QtWidgets.QMainWindow):
1148
1148
  self._merge_action.setEnabled(True)
1149
1149
 
1150
1150
  self.update_plot()
1151
- self.setWindowTitle(f'Toucan-Plot — {basename}')
1151
+ self.setWindowTitle(f'TouCAN-Plot — {basename}')
1152
1152
  self.show_series_selector()
1153
1153
 
1154
1154
  def _merge_load_mf4(self, path, prefix):
@@ -1295,7 +1295,7 @@ class MainWindow(QtWidgets.QMainWindow):
1295
1295
  self._merge_action.setEnabled(True)
1296
1296
 
1297
1297
  self.update_plot()
1298
- self.setWindowTitle(f'Toucan-Plot — {basename}')
1298
+ self.setWindowTitle(f'TouCAN-Plot — {basename}')
1299
1299
  self.show_series_selector()
1300
1300
 
1301
1301
  def _merge_load_feather(self, path, prefix):
@@ -2177,7 +2177,7 @@ def main():
2177
2177
  import argparse
2178
2178
  parser = argparse.ArgumentParser(
2179
2179
  prog='toucan-plot',
2180
- description='Toucan-Plot — Interactive plotting tool for CSV, SMV, and CAN log (BLF/TRC/ASC) files.',
2180
+ description='TouCAN-Plot — Interactive plotting tool for CSV, SMV, and CAN log (BLF/TRC/ASC) files.',
2181
2181
  epilog='BLF, TRC, and ASC files require at least one DBC file for signal decoding.\n'
2182
2182
  'Example: toucan-plot log.blf signals.dbc',
2183
2183
  )
toucan_plot-0.3.0/LICENSE DELETED
@@ -1,21 +0,0 @@
1
- MIT License
2
-
3
- Copyright (c) 2025 Claudio Emanoel Barbosa Lima
4
-
5
- Permission is hereby granted, free of charge, to any person obtaining a copy
6
- of this software and associated documentation files (the "Software"), to deal
7
- in the Software without restriction, including without limitation the rights
8
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
- copies of the Software, and to permit persons to whom the Software is
10
- furnished to do so, subject to the following conditions:
11
-
12
- The above copyright notice and this permission notice shall be included in all
13
- copies or substantial portions of the Software.
14
-
15
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
- SOFTWARE.
@@ -1,131 +0,0 @@
1
- Metadata-Version: 2.4
2
- Name: toucan-plot
3
- Version: 0.3.0
4
- Summary: A versatile PyQt6 and Matplotlib-based plotting tool for CSV and SMV data files.
5
- License-Expression: MIT
6
- Requires-Python: >=3.11
7
- Description-Content-Type: text/markdown
8
- License-File: LICENSE
9
- Requires-Dist: pyqt6>=6.0
10
- Requires-Dist: matplotlib>=3.0
11
- Requires-Dist: numpy>=1.20
12
- Requires-Dist: pyqtdarktheme>=2.1.0
13
- Requires-Dist: scienceplots>=2.2.1
14
- Requires-Dist: python-can>=4.0
15
- Requires-Dist: cantools>=39.0
16
- Requires-Dist: asammdf>=7.0
17
- Requires-Dist: pyarrow>=23.0.1
18
- Dynamic: license-file
19
-
20
- # Toucan-Plot
21
-
22
- An interactive PyQt6 + Matplotlib plotting tool for CSV, SMV, and CAN bus log files.
23
-
24
- ![Python](https://img.shields.io/badge/python-3.11+-blue)
25
- ![License](https://img.shields.io/badge/license-MIT-green)
26
-
27
- ## Features
28
-
29
- ### Supported File Formats
30
-
31
- | Format | Description |
32
- |------------------|--------------------------------------------------------------|
33
- | `.csv` / `.smv` | Comma or semicolon delimited data (auto-detected) |
34
- | `.mf4` / `.mf4z` | ASAM MDF v4 measurement data (via asammdf) |
35
- | `.blf` | CAN bus binary log |
36
- | `.trc` | CAN bus trace log |
37
- | `.asc` | CAN bus ASCII log |
38
- | `.dbc` | CAN database for signal decoding (required with BLF/TRC/ASC) |
39
-
40
- - Auto-detects `Time` / `timestamp` columns as the default X axis
41
- - CAN signals are forward-fill interpolated and named as `Message.Signal`
42
-
43
- ### Plot Interaction
44
-
45
- - **Shared X axis** across all subplots with linked panning and zooming
46
- - **Secondary Y axis** support per series
47
- - **Double-click** a subplot to edit its series, or **right-click** for a context menu
48
- - **Measure cursors** — two draggable vertical cursors with a live delta table
49
- - **Expression evaluator** — create computed series from math expressions (e.g. `sin("series_A") + "series_B" * 2`)
50
- - **Multi-file merge** — overlay series from different files, each in its own tab
51
- - **X axis switching** — reassign the X column without losing subplot configuration
52
- - **Per-series properties** (label, color, linewidth, linestyle, marker) persisted across all redraws
53
- - Live mouse coordinates in the status bar
54
-
55
- ### Toolbar
56
-
57
- | Button | Action |
58
- |----------------|-----------------------------------------|
59
- | Home | Auto-fit all axes |
60
- | Back / Forward | Navigate view history |
61
- | Pan | Pan mode |
62
- | Zoom | Zoom rectangle mode |
63
- | Customize | Matplotlib per-curve property editor |
64
- | Save | Export figure to file |
65
- | Add subplot | Open the series selector |
66
- | Fit Y | Auto-fit Y axis keeping current X range |
67
- | Measure | Toggle measure cursors |
68
- | X axis | Select X axis column |
69
-
70
- ### Menus
71
-
72
- - **File → Open** (`Ctrl+O`) — open one or more files (multi-select)
73
- - **File → Merge** (`Ctrl+M`) — append files to the current session
74
- - **Style → Customize plot style** — preset, line mode, marker, text size, grid, legend
75
- - **Style → Theme** — Dark / Light (icons swap automatically)
76
-
77
- ### Right-Click Context Menu
78
-
79
- - Add subplot above / below
80
- - Delete subplot
81
- - Legend: show/hide, position (14 options), orientation, text size
82
- - Line style: plot / step
83
-
84
- ### Style Presets
85
-
86
- Four built-in presets: **Default**, **Style 1**, **IEEE**, **Other**.
87
-
88
- ## Installation
89
-
90
- ### From PyPI (recommended)
91
-
92
- Install the released package from PyPI:
93
-
94
- ```shell
95
- pip install toucan-plot
96
- ```
97
-
98
- ## Usage
99
-
100
- ```shell
101
- # Open a CSV file
102
- toucan-plot data.csv
103
-
104
- # Open an MF4 measurement file
105
- toucan-plot recording.mf4
106
-
107
- # Open a CAN log with DBC decoding
108
- toucan-plot recording.blf signals.dbc
109
-
110
- # Open multiple files (merge mode)
111
- toucan-plot file1.csv file2.csv
112
-
113
- # Launch without files
114
- toucan-plot
115
- ```
116
-
117
- ## Requirements
118
-
119
- - Python ≥ 3.11
120
- - PyQt6
121
- - Matplotlib
122
- - NumPy
123
- - pyqtdarktheme
124
- - SciencePlots
125
- - python-can (for CAN log files)
126
- - cantools (for DBC decoding)
127
- - asammdf (for MF4 files)
128
-
129
- ## License
130
-
131
- MIT
@@ -1,4 +0,0 @@
1
- [egg_info]
2
- tag_build =
3
- tag_date = 0
4
-
@@ -1,37 +0,0 @@
1
- LICENSE
2
- README.md
3
- pyproject.toml
4
- src/toucan_plot/__main__.py
5
- src/toucan_plot/main.py
6
- src/toucan_plot.egg-info/PKG-INFO
7
- src/toucan_plot.egg-info/SOURCES.txt
8
- src/toucan_plot.egg-info/dependency_links.txt
9
- src/toucan_plot.egg-info/entry_points.txt
10
- src/toucan_plot.egg-info/requires.txt
11
- src/toucan_plot.egg-info/top_level.txt
12
- src/toucan_plot/assets/adjustments-dark.svg
13
- src/toucan_plot/assets/adjustments-light.svg
14
- src/toucan_plot/assets/arrow-autofit-height-dark.svg
15
- src/toucan_plot/assets/arrow-autofit-height-light.svg
16
- src/toucan_plot/assets/arrow-narrow-left-dark.svg
17
- src/toucan_plot/assets/arrow-narrow-left-light.svg
18
- src/toucan_plot/assets/arrow-narrow-right-dark.svg
19
- src/toucan_plot/assets/arrow-narrow-right-light.svg
20
- src/toucan_plot/assets/device-floppy-dark.svg
21
- src/toucan_plot/assets/device-floppy-light.svg
22
- src/toucan_plot/assets/hand-stop-dark.svg
23
- src/toucan_plot/assets/hand-stop-light.svg
24
- src/toucan_plot/assets/home-dark.svg
25
- src/toucan_plot/assets/home-light.svg
26
- src/toucan_plot/assets/layout-grid-add-dark.svg
27
- src/toucan_plot/assets/layout-grid-add-light.svg
28
- src/toucan_plot/assets/math-function-dark.svg
29
- src/toucan_plot/assets/math-function-light.svg
30
- src/toucan_plot/assets/ruler-measure-dark.svg
31
- src/toucan_plot/assets/ruler-measure-light.svg
32
- src/toucan_plot/assets/zoom-dark.svg
33
- src/toucan_plot/assets/zoom-light.svg
34
- src/toucan_plot/assets/ico/toucan-plot.ico
35
- src/toucan_plot/utils/__init__.py
36
- src/toucan_plot/utils/loaders.py
37
- src/toucan_plot/utils/styles.py
@@ -1,2 +0,0 @@
1
- [console_scripts]
2
- toucan-plot = toucan_plot.main:main
@@ -1,9 +0,0 @@
1
- pyqt6>=6.0
2
- matplotlib>=3.0
3
- numpy>=1.20
4
- pyqtdarktheme>=2.1.0
5
- scienceplots>=2.2.1
6
- python-can>=4.0
7
- cantools>=39.0
8
- asammdf>=7.0
9
- pyarrow>=23.0.1
@@ -1 +0,0 @@
1
- toucan_plot