babelplot 2025.9__tar.gz → 2025.11__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.
- {babelplot-2025.9 → babelplot-2025.11}/PKG-INFO +2 -3
- {babelplot-2025.9 → babelplot-2025.11}/README.rst +1 -1
- babelplot-2025.9/package/babelplot/api/definition.py → babelplot-2025.11/package/babelplot/api/type.py +3 -2
- {babelplot-2025.9 → babelplot-2025.11}/package/babelplot/backend/catalog/bokeh_.py +10 -5
- {babelplot-2025.9 → babelplot-2025.11}/package/babelplot/backend/catalog/matplotlib_.py +5 -6
- {babelplot-2025.9 → babelplot-2025.11}/package/babelplot/backend/catalog/plotly_.py +10 -6
- {babelplot-2025.9 → babelplot-2025.11}/package/babelplot/backend/catalog/vedo_.py +9 -1
- {babelplot-2025.9 → babelplot-2025.11}/package/babelplot/backend/helper/creation.py +5 -0
- {babelplot-2025.9 → babelplot-2025.11}/package/babelplot/backend/helper/validation.py +5 -0
- babelplot-2025.9/package/babelplot/api/help.py → babelplot-2025.11/package/babelplot/constant/backend.py +6 -2
- {babelplot-2025.9 → babelplot-2025.11}/package/babelplot/task/help.py +5 -0
- {babelplot-2025.9 → babelplot-2025.11}/package/babelplot/task/showing.py +68 -12
- {babelplot-2025.9 → babelplot-2025.11}/package/babelplot/type/backend.py +1 -1
- {babelplot-2025.9 → babelplot-2025.11}/package/babelplot/type/ffp_base.py +2 -3
- {babelplot-2025.9 → babelplot-2025.11}/package/babelplot/type/figure.py +1 -17
- {babelplot-2025.9 → babelplot-2025.11}/package/babelplot/version.py +1 -1
- {babelplot-2025.9 → babelplot-2025.11}/package/babelplot.egg-info/PKG-INFO +2 -3
- {babelplot-2025.9 → babelplot-2025.11}/package/babelplot.egg-info/SOURCES.txt +1 -4
- {babelplot-2025.9 → babelplot-2025.11}/package/babelplot.egg-info/requires.txt +0 -1
- {babelplot-2025.9 → babelplot-2025.11}/requirements.txt +0 -1
- babelplot-2025.9/package/babelplot/api/backend.py +0 -54
- babelplot-2025.9/package/babelplot/constant/backend.py +0 -65
- babelplot-2025.9/package/babelplot/runtime/application.py +0 -60
- {babelplot-2025.9 → babelplot-2025.11}/MANIFEST.in +0 -0
- {babelplot-2025.9 → babelplot-2025.11}/README-COPYRIGHT-utf8.txt +0 -0
- {babelplot-2025.9 → babelplot-2025.11}/README-LICENCE-utf8.txt +0 -0
- {babelplot-2025.9 → babelplot-2025.11}/documentation/wiki/description.asciidoc +0 -0
- {babelplot-2025.9 → babelplot-2025.11}/package/babelplot/__init__.py +0 -0
- {babelplot-2025.9 → babelplot-2025.11}/package/babelplot/constant/path.py +0 -0
- {babelplot-2025.9 → babelplot-2025.11}/package/babelplot/constant/project.py +0 -0
- {babelplot-2025.9 → babelplot-2025.11}/package/babelplot/extension/enum_.py +0 -0
- {babelplot-2025.9 → babelplot-2025.11}/package/babelplot/extension/function.py +0 -0
- {babelplot-2025.9 → babelplot-2025.11}/package/babelplot/runtime/backends.py +0 -0
- {babelplot-2025.9 → babelplot-2025.11}/package/babelplot/task/color.py +0 -0
- {babelplot-2025.9 → babelplot-2025.11}/package/babelplot/task/instantiation.py +0 -0
- {babelplot-2025.9 → babelplot-2025.11}/package/babelplot/task/plotting.py +0 -0
- {babelplot-2025.9 → babelplot-2025.11}/package/babelplot/type/dimension.py +0 -0
- {babelplot-2025.9 → babelplot-2025.11}/package/babelplot/type/frame.py +0 -0
- {babelplot-2025.9 → babelplot-2025.11}/package/babelplot/type/plot.py +0 -0
- {babelplot-2025.9 → babelplot-2025.11}/package/babelplot/type/plot_function.py +0 -0
- {babelplot-2025.9 → babelplot-2025.11}/package/babelplot/type/plot_type.py +0 -0
- {babelplot-2025.9 → babelplot-2025.11}/package/babelplot/type/translator.py +0 -0
- {babelplot-2025.9 → babelplot-2025.11}/package/babelplot.egg-info/dependency_links.txt +0 -0
- {babelplot-2025.9 → babelplot-2025.11}/package/babelplot.egg-info/top_level.txt +0 -0
- {babelplot-2025.9 → babelplot-2025.11}/pyproject.toml +0 -0
- {babelplot-2025.9 → babelplot-2025.11}/setup.cfg +0 -0
- {babelplot-2025.9 → babelplot-2025.11}/setup.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: babelplot
|
|
3
|
-
Version: 2025.
|
|
3
|
+
Version: 2025.11
|
|
4
4
|
Summary: A Meta Plotting Library That Speaks Several Backends
|
|
5
5
|
Home-page: https://src.koda.cnrs.fr/eric.debreuve/babelplot/
|
|
6
6
|
Author: Eric Debreuve
|
|
@@ -17,7 +17,6 @@ Classifier: Development Status :: 3 - Alpha
|
|
|
17
17
|
Requires-Python: >=3.11
|
|
18
18
|
Description-Content-Type: text/x-rst
|
|
19
19
|
Requires-Dist: numpy
|
|
20
|
-
Requires-Dist: PyQt6
|
|
21
20
|
Requires-Dist: scikit-image
|
|
22
21
|
Dynamic: author
|
|
23
22
|
Dynamic: author-email
|
|
@@ -47,7 +46,7 @@ Dynamic: summary
|
|
|
47
46
|
.. |DOCUMENTATION_URL| replace:: https://src.koda.cnrs.fr/eric.debreuve/babelplot/-/wikis/home
|
|
48
47
|
.. _DOCUMENTATION_URL: https://src.koda.cnrs.fr/eric.debreuve/babelplot/-/wikis/home
|
|
49
48
|
|
|
50
|
-
.. |DEPENDENCIES_MANDATORY| replace:: numpy,
|
|
49
|
+
.. |DEPENDENCIES_MANDATORY| replace:: numpy, scikit-image
|
|
51
50
|
.. |DEPENDENCIES_OPTIONAL| replace:: bokeh, matplotlib, plotly, vedo
|
|
52
51
|
|
|
53
52
|
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
.. |DOCUMENTATION_URL| replace:: https://src.koda.cnrs.fr/eric.debreuve/babelplot/-/wikis/home
|
|
14
14
|
.. _DOCUMENTATION_URL: https://src.koda.cnrs.fr/eric.debreuve/babelplot/-/wikis/home
|
|
15
15
|
|
|
16
|
-
.. |DEPENDENCIES_MANDATORY| replace:: numpy,
|
|
16
|
+
.. |DEPENDENCIES_MANDATORY| replace:: numpy, scikit-image
|
|
17
17
|
.. |DEPENDENCIES_OPTIONAL| replace:: bokeh, matplotlib, plotly, vedo
|
|
18
18
|
|
|
19
19
|
|
|
@@ -4,8 +4,9 @@ Contributor(s): Eric Debreuve (eric.debreuve@cnrs.fr) since 2022
|
|
|
4
4
|
SEE COPYRIGHT NOTICE BELOW
|
|
5
5
|
"""
|
|
6
6
|
|
|
7
|
-
from babelplot.type.
|
|
8
|
-
from babelplot.type.
|
|
7
|
+
from babelplot.type.figure import figure_t # noqa
|
|
8
|
+
from babelplot.type.frame import frame_t # noqa
|
|
9
|
+
from babelplot.type.plot import plot_t # noqa
|
|
9
10
|
|
|
10
11
|
"""
|
|
11
12
|
COPYRIGHT NOTICE
|
|
@@ -5,11 +5,12 @@ SEE COPYRIGHT NOTICE BELOW
|
|
|
5
5
|
"""
|
|
6
6
|
|
|
7
7
|
import dataclasses as d
|
|
8
|
+
import gzip
|
|
8
9
|
import typing as h
|
|
10
|
+
from multiprocessing import Process as process_t
|
|
9
11
|
|
|
10
|
-
from babelplot.runtime.application import QT_APPLICATION
|
|
11
12
|
from babelplot.task.plotting import NewPlotFunctionsTemplate, SetDefaultPlotFunction
|
|
12
|
-
from babelplot.task.showing import
|
|
13
|
+
from babelplot.task.showing import ShowHTMLPlotWithPyQt
|
|
13
14
|
from babelplot.type.dimension import dim_e
|
|
14
15
|
from babelplot.type.figure import figure_t as base_figure_t
|
|
15
16
|
from babelplot.type.frame import frame_t as base_frame_t
|
|
@@ -56,7 +57,6 @@ class frame_t(base_frame_t):
|
|
|
56
57
|
@d.dataclass(slots=True, repr=False, eq=False)
|
|
57
58
|
class figure_t(base_figure_t):
|
|
58
59
|
|
|
59
|
-
widget: widget_t | None = d.field(init=False, default=None)
|
|
60
60
|
layout: h.Any = d.field(init=False, default=None)
|
|
61
61
|
|
|
62
62
|
def _NewBackendFigure(self, *args, **kwargs) -> backend_figure_t:
|
|
@@ -128,6 +128,7 @@ class figure_t(base_figure_t):
|
|
|
128
128
|
""""""
|
|
129
129
|
try:
|
|
130
130
|
html = HTMLofBackendContent(self.layout, INLINE)
|
|
131
|
+
html = gzip.compress(html.encode())
|
|
131
132
|
except ValueError as exception:
|
|
132
133
|
html = f"""
|
|
133
134
|
<!DOCTYPE html>
|
|
@@ -138,10 +139,14 @@ class figure_t(base_figure_t):
|
|
|
138
139
|
</body>
|
|
139
140
|
</html>
|
|
140
141
|
"""
|
|
141
|
-
|
|
142
|
+
|
|
143
|
+
process = process_t(target=ShowHTMLPlotWithPyQt, args=(html,))
|
|
144
|
+
process.start()
|
|
142
145
|
|
|
143
146
|
if modal:
|
|
144
|
-
|
|
147
|
+
process.join()
|
|
148
|
+
else:
|
|
149
|
+
self.showing_process = process
|
|
145
150
|
|
|
146
151
|
|
|
147
152
|
def _DefaultFunction(type_: plot_e, frame_dim: int, /) -> plot_function_h:
|
|
@@ -5,13 +5,11 @@ SEE COPYRIGHT NOTICE BELOW
|
|
|
5
5
|
"""
|
|
6
6
|
|
|
7
7
|
import dataclasses as d
|
|
8
|
-
import importlib as mprt
|
|
9
8
|
import typing as h
|
|
10
9
|
|
|
11
10
|
import matplotlib.pyplot as pypl # noqa
|
|
12
11
|
import numpy as nmpy
|
|
13
12
|
import skimage.measure as msre
|
|
14
|
-
from babelplot.constant.path import QT_RUNTIME_PY_PATH
|
|
15
13
|
from babelplot.task.color import NewConvertedColor
|
|
16
14
|
from babelplot.task.plotting import NewPlotFunctionsTemplate
|
|
17
15
|
from babelplot.type.dimension import dim_e
|
|
@@ -33,7 +31,6 @@ from matplotlib.pyplot import figure as NewBackendFigure # noqa
|
|
|
33
31
|
from mpl_toolkits.mplot3d import Axes3D as backend_frame_3d_t # noqa
|
|
34
32
|
|
|
35
33
|
import matplotlib as mtpl # noqa
|
|
36
|
-
import matplotlib as mlpl # noqa
|
|
37
34
|
|
|
38
35
|
NAME = "matplotlib"
|
|
39
36
|
|
|
@@ -45,7 +42,7 @@ backend_frame_h = backend_frame_2d_t | backend_frame_3d_t
|
|
|
45
42
|
def _DefaultProperties(type_: type[plot_type_h], /) -> dict[str, h.Any]:
|
|
46
43
|
""""""
|
|
47
44
|
name = type_.__name__
|
|
48
|
-
properties =
|
|
45
|
+
properties = mtpl.rcParams.find_all(f"^{name}\\.")
|
|
49
46
|
|
|
50
47
|
return {_key.replace(f"{name}.", ""): _vle for _key, _vle in properties.items()}
|
|
51
48
|
|
|
@@ -207,8 +204,10 @@ class figure_t(base_figure_t):
|
|
|
207
204
|
|
|
208
205
|
if modal:
|
|
209
206
|
if "qt" in mtpl.get_backend().lower():
|
|
210
|
-
|
|
211
|
-
|
|
207
|
+
from matplotlib.backends.qt_compat import QtWidgets # noqa
|
|
208
|
+
|
|
209
|
+
application = QtWidgets.QApplication.instance()
|
|
210
|
+
application.exec()
|
|
212
211
|
else:
|
|
213
212
|
event_manager = self.raw.canvas
|
|
214
213
|
event_manager.mpl_connect("close_event", _OnCloseEvent)
|
|
@@ -5,15 +5,16 @@ SEE COPYRIGHT NOTICE BELOW
|
|
|
5
5
|
"""
|
|
6
6
|
|
|
7
7
|
import dataclasses as d
|
|
8
|
+
import gzip
|
|
8
9
|
import typing as h
|
|
10
|
+
from multiprocessing import Process as process_t
|
|
9
11
|
from pathlib import Path as path_t
|
|
10
12
|
|
|
11
13
|
import numpy as nmpy
|
|
12
14
|
import plotly.figure_factory as fcry # noqa
|
|
13
15
|
import plotly.graph_objects as plly # noqa
|
|
14
|
-
from babelplot.runtime.application import QT_APPLICATION
|
|
15
16
|
from babelplot.task.plotting import NewPlotFunctionsTemplate
|
|
16
|
-
from babelplot.task.showing import
|
|
17
|
+
from babelplot.task.showing import ShowHTMLPlotWithPyQt
|
|
17
18
|
from babelplot.type.dimension import dim_e
|
|
18
19
|
from babelplot.type.figure import figure_t as base_figure_t
|
|
19
20
|
from babelplot.type.frame import frame_t as base_frame_t
|
|
@@ -66,8 +67,6 @@ class frame_t(base_frame_t):
|
|
|
66
67
|
@d.dataclass(slots=True, repr=False, eq=False)
|
|
67
68
|
class figure_t(base_figure_t):
|
|
68
69
|
|
|
69
|
-
widget: widget_t | None = d.field(init=False, default=None)
|
|
70
|
-
|
|
71
70
|
def _NewBackendFigure(self, *args, **kwargs) -> backend_figure_t:
|
|
72
71
|
""""""
|
|
73
72
|
return backend_figure_t(*args, **kwargs)
|
|
@@ -143,10 +142,15 @@ class figure_t(base_figure_t):
|
|
|
143
142
|
See note in babelplot.task.html.Show.
|
|
144
143
|
"""
|
|
145
144
|
html = self.raw.to_html(include_plotlyjs=True, config=_FIGURE_CONFIG)
|
|
146
|
-
|
|
145
|
+
html = gzip.compress(html.encode())
|
|
146
|
+
|
|
147
|
+
process = process_t(target=ShowHTMLPlotWithPyQt, args=(html,))
|
|
148
|
+
process.start()
|
|
147
149
|
|
|
148
150
|
if modal:
|
|
149
|
-
|
|
151
|
+
process.join()
|
|
152
|
+
else:
|
|
153
|
+
self.showing_process = process
|
|
150
154
|
|
|
151
155
|
|
|
152
156
|
def _Arrows2(*args, **kwargs) -> backend_plot_t:
|
|
@@ -5,6 +5,7 @@ SEE COPYRIGHT NOTICE BELOW
|
|
|
5
5
|
"""
|
|
6
6
|
|
|
7
7
|
import dataclasses as d
|
|
8
|
+
from multiprocessing import Process as process_t
|
|
8
9
|
|
|
9
10
|
from babelplot.task.color import NewConvertedColor
|
|
10
11
|
from babelplot.task.plotting import NewPlotFunctionsTemplate
|
|
@@ -81,7 +82,14 @@ class figure_t(base_figure_t):
|
|
|
81
82
|
""""""
|
|
82
83
|
# Passing self.raw.show().close shows the figures one by one.
|
|
83
84
|
BackendShow = lambda: self.raw.show().close()
|
|
84
|
-
|
|
85
|
+
|
|
86
|
+
process = process_t(target=BackendShow)
|
|
87
|
+
process.start()
|
|
88
|
+
|
|
89
|
+
if modal:
|
|
90
|
+
process.join()
|
|
91
|
+
else:
|
|
92
|
+
self.showing_process = process
|
|
85
93
|
|
|
86
94
|
|
|
87
95
|
def _IsoSurface(volume: array_t, iso_value: float, *_, **kwargs) -> backend_plot_t:
|
|
@@ -4,8 +4,12 @@ Contributor(s): Eric Debreuve (eric.debreuve@cnrs.fr) since 2022
|
|
|
4
4
|
SEE COPYRIGHT NOTICE BELOW
|
|
5
5
|
"""
|
|
6
6
|
|
|
7
|
-
|
|
8
|
-
|
|
7
|
+
DEFAULT_BACKEND = "matplotlib"
|
|
8
|
+
|
|
9
|
+
BACKEND_FROM_ALIAS = {
|
|
10
|
+
"mpl": "matplotlib",
|
|
11
|
+
"v3do": "vedo",
|
|
12
|
+
}
|
|
9
13
|
|
|
10
14
|
"""
|
|
11
15
|
COPYRIGHT NOTICE
|
|
@@ -4,31 +4,71 @@ Contributor(s): Eric Debreuve (eric.debreuve@cnrs.fr) since 2022
|
|
|
4
4
|
SEE COPYRIGHT NOTICE BELOW
|
|
5
5
|
"""
|
|
6
6
|
|
|
7
|
+
import gzip
|
|
7
8
|
import os as ostm
|
|
9
|
+
import sys as s
|
|
8
10
|
import tempfile as tmpf
|
|
9
11
|
import time
|
|
10
12
|
import typing as h
|
|
11
13
|
|
|
14
|
+
from babelplot.constant.project import NAME
|
|
12
15
|
from babelplot.type.figure import figure_t
|
|
13
|
-
from PyQt6.QtCore import QUrl as url_t
|
|
14
|
-
from PyQt6.QtWebEngineWidgets import QWebEngineView as
|
|
16
|
+
from PyQt6.QtCore import QUrl as url_t # noqa
|
|
17
|
+
from PyQt6.QtWebEngineWidgets import QWebEngineView as web_view_t # noqa
|
|
18
|
+
from PyQt6.QtWidgets import QApplication as application_t # noqa
|
|
19
|
+
from PyQt6.QtWidgets import QStackedWidget as stack_t # noqa
|
|
20
|
+
|
|
21
|
+
TOO_BIG_OF_AN_HTML = 5_000_000
|
|
22
|
+
PATIENCE = """
|
|
23
|
+
<!DOCTYPE html>
|
|
24
|
+
<html>
|
|
25
|
+
<head>
|
|
26
|
+
<style>
|
|
27
|
+
html, body {
|
|
28
|
+
height: 100%;
|
|
29
|
+
}
|
|
30
|
+
div {
|
|
31
|
+
width: 100%;
|
|
32
|
+
height: 100%;
|
|
33
|
+
display: table;
|
|
34
|
+
text-align: center;
|
|
35
|
+
}
|
|
36
|
+
p {
|
|
37
|
+
display: table-cell;
|
|
38
|
+
vertical-align: middle;
|
|
39
|
+
font-size: 4vw;
|
|
40
|
+
font-weight: bold;
|
|
41
|
+
font-family: monospace;
|
|
42
|
+
color: darkgrey;
|
|
43
|
+
}
|
|
44
|
+
</style>
|
|
45
|
+
</head>
|
|
46
|
+
<body>
|
|
47
|
+
<div>
|
|
48
|
+
<p>Preparing Plot...</p>
|
|
49
|
+
<div/>
|
|
50
|
+
</body>
|
|
51
|
+
</html>
|
|
52
|
+
"""
|
|
15
53
|
|
|
16
54
|
|
|
17
|
-
def
|
|
55
|
+
def ShowHTMLPlotWithPyQt(html: str | bytes, /) -> None:
|
|
18
56
|
""""""
|
|
19
57
|
|
|
20
58
|
def _SetURLIfNeeded(success: bool, /) -> None:
|
|
21
59
|
"""
|
|
22
60
|
From: https://doc.qt.io/qtforpython-6/PySide6/QtWebEngineWidgets/QWebEngineView.html
|
|
23
61
|
#PySide6.QtWebEngineWidgets.PySide6.QtWebEngineWidgets.QWebEngineView.setHtml
|
|
24
|
-
Content larger than 2 MB cannot be displayed...
|
|
25
|
-
...
|
|
62
|
+
Content larger than 2 MB cannot be displayed[...]
|
|
63
|
+
[...]
|
|
26
64
|
Thereby, the provided code becomes a URL that exceeds the 2 MB limit set by
|
|
27
65
|
Chromium. If the content is too large, the loadFinished() signal is
|
|
28
66
|
triggered with success=False.
|
|
29
67
|
Solution: Use a temporary file (with html extension) and setUrl.
|
|
30
68
|
"""
|
|
31
69
|
if success:
|
|
70
|
+
if main is not web_view:
|
|
71
|
+
main.setCurrentWidget(web_view)
|
|
32
72
|
return
|
|
33
73
|
|
|
34
74
|
transfer = tmpf.NamedTemporaryFile(mode="w", suffix=".html", delete=False)
|
|
@@ -36,16 +76,32 @@ def NewPyQtWidgetWithHTML(html: str, /) -> widget_t:
|
|
|
36
76
|
accessor.write(html)
|
|
37
77
|
url = url_t.fromLocalFile(transfer.name)
|
|
38
78
|
|
|
39
|
-
|
|
40
|
-
|
|
79
|
+
web_view.setUrl(url)
|
|
80
|
+
web_view.closeEvent = lambda _: ostm.remove(transfer.name)
|
|
81
|
+
|
|
82
|
+
if isinstance(html, bytes):
|
|
83
|
+
html = gzip.decompress(html).decode()
|
|
84
|
+
|
|
85
|
+
application = application_t(s.argv)
|
|
86
|
+
application.setApplicationName(NAME) # Useful for window manager.
|
|
87
|
+
|
|
88
|
+
web_view = web_view_t()
|
|
89
|
+
web_view.loadFinished.connect(_SetURLIfNeeded)
|
|
90
|
+
web_view.setHtml(html) # Now attempt to set HTML; If failure, then _SetURLIfNeeded.
|
|
41
91
|
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
92
|
+
if html.__len__() > TOO_BIG_OF_AN_HTML:
|
|
93
|
+
patience = web_view_t()
|
|
94
|
+
patience.setHtml(PATIENCE)
|
|
45
95
|
|
|
46
|
-
|
|
96
|
+
main = stack_t()
|
|
97
|
+
main.addWidget(web_view)
|
|
98
|
+
main.addWidget(patience)
|
|
99
|
+
main.setCurrentWidget(patience)
|
|
100
|
+
else:
|
|
101
|
+
main = web_view
|
|
47
102
|
|
|
48
|
-
|
|
103
|
+
main.show()
|
|
104
|
+
application.exec()
|
|
49
105
|
|
|
50
106
|
|
|
51
107
|
def ShowFigures(figures: h.Sequence[figure_t], /) -> None:
|
|
@@ -23,13 +23,12 @@ backend_element_h = backend_figure_h | backend_frame_h | backend_plot_h
|
|
|
23
23
|
@d.dataclass(slots=True, repr=False, eq=False)
|
|
24
24
|
class base_t:
|
|
25
25
|
"""
|
|
26
|
-
|
|
26
|
+
raw: Certain plots of certain libraries might be composed of a list of plots,
|
|
27
|
+
not just a unique plot, or even richer outputs (e.g., with Matplotlib).
|
|
27
28
|
property: In case the backend does not make it easy to retrieve some properties,
|
|
28
29
|
they are stored here. E.g., how to retrieve the marker of a scatter plot in
|
|
29
30
|
Matplotlib?
|
|
30
31
|
/!\\ Do not forget to initialize it with kwargs during element instantiation.
|
|
31
|
-
raw: Certain plots of certain libraries might be composed of a list of plots,
|
|
32
|
-
not just a unique plot, or even richer outputs (e.g., with Matplotlib).
|
|
33
32
|
"""
|
|
34
33
|
|
|
35
34
|
backend_name: str | None = None
|
|
@@ -199,24 +199,8 @@ class figure_t(base_t):
|
|
|
199
199
|
self._BackendShow(modal)
|
|
200
200
|
|
|
201
201
|
def _BackendShow(self, modal: bool, /) -> None:
|
|
202
|
-
"""
|
|
203
|
-
Normally, should show the figure and manage the event loop, depending on the
|
|
204
|
-
value of modal. But, can decide to defer the task to self by calling
|
|
205
|
-
self._LaunchBackendShow. This allows to factorize code for backends supporting
|
|
206
|
-
multiprocessing.
|
|
207
|
-
"""
|
|
208
|
-
raise NotImplementedError
|
|
209
|
-
|
|
210
|
-
def _LaunchBackendShow(
|
|
211
|
-
self, modal: bool, BackendShow: h.Callable[..., None], /, *args
|
|
212
|
-
) -> None:
|
|
213
202
|
""""""
|
|
214
|
-
|
|
215
|
-
BackendShow(*args)
|
|
216
|
-
else:
|
|
217
|
-
process = process_t(target=BackendShow, args=args)
|
|
218
|
-
process.start()
|
|
219
|
-
self.showing_process = process
|
|
203
|
+
raise NotImplementedError
|
|
220
204
|
|
|
221
205
|
|
|
222
206
|
"""
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: babelplot
|
|
3
|
-
Version: 2025.
|
|
3
|
+
Version: 2025.11
|
|
4
4
|
Summary: A Meta Plotting Library That Speaks Several Backends
|
|
5
5
|
Home-page: https://src.koda.cnrs.fr/eric.debreuve/babelplot/
|
|
6
6
|
Author: Eric Debreuve
|
|
@@ -17,7 +17,6 @@ Classifier: Development Status :: 3 - Alpha
|
|
|
17
17
|
Requires-Python: >=3.11
|
|
18
18
|
Description-Content-Type: text/x-rst
|
|
19
19
|
Requires-Dist: numpy
|
|
20
|
-
Requires-Dist: PyQt6
|
|
21
20
|
Requires-Dist: scikit-image
|
|
22
21
|
Dynamic: author
|
|
23
22
|
Dynamic: author-email
|
|
@@ -47,7 +46,7 @@ Dynamic: summary
|
|
|
47
46
|
.. |DOCUMENTATION_URL| replace:: https://src.koda.cnrs.fr/eric.debreuve/babelplot/-/wikis/home
|
|
48
47
|
.. _DOCUMENTATION_URL: https://src.koda.cnrs.fr/eric.debreuve/babelplot/-/wikis/home
|
|
49
48
|
|
|
50
|
-
.. |DEPENDENCIES_MANDATORY| replace:: numpy,
|
|
49
|
+
.. |DEPENDENCIES_MANDATORY| replace:: numpy, scikit-image
|
|
51
50
|
.. |DEPENDENCIES_OPTIONAL| replace:: bokeh, matplotlib, plotly, vedo
|
|
52
51
|
|
|
53
52
|
|
|
@@ -13,9 +13,7 @@ package/babelplot.egg-info/SOURCES.txt
|
|
|
13
13
|
package/babelplot.egg-info/dependency_links.txt
|
|
14
14
|
package/babelplot.egg-info/requires.txt
|
|
15
15
|
package/babelplot.egg-info/top_level.txt
|
|
16
|
-
package/babelplot/api/
|
|
17
|
-
package/babelplot/api/definition.py
|
|
18
|
-
package/babelplot/api/help.py
|
|
16
|
+
package/babelplot/api/type.py
|
|
19
17
|
package/babelplot/backend/catalog/bokeh_.py
|
|
20
18
|
package/babelplot/backend/catalog/matplotlib_.py
|
|
21
19
|
package/babelplot/backend/catalog/plotly_.py
|
|
@@ -27,7 +25,6 @@ package/babelplot/constant/path.py
|
|
|
27
25
|
package/babelplot/constant/project.py
|
|
28
26
|
package/babelplot/extension/enum_.py
|
|
29
27
|
package/babelplot/extension/function.py
|
|
30
|
-
package/babelplot/runtime/application.py
|
|
31
28
|
package/babelplot/runtime/backends.py
|
|
32
29
|
package/babelplot/task/color.py
|
|
33
30
|
package/babelplot/task/help.py
|
|
@@ -1,54 +0,0 @@
|
|
|
1
|
-
"""
|
|
2
|
-
Copyright CNRS/Inria/UniCA
|
|
3
|
-
Contributor(s): Eric Debreuve (eric.debreuve@cnrs.fr) since 2022
|
|
4
|
-
SEE COPYRIGHT NOTICE BELOW
|
|
5
|
-
"""
|
|
6
|
-
|
|
7
|
-
from babelplot.backend.helper.creation import PrintBackendDraft # noqa
|
|
8
|
-
from babelplot.backend.helper.validation import CheckBackend # noqa
|
|
9
|
-
|
|
10
|
-
"""
|
|
11
|
-
COPYRIGHT NOTICE
|
|
12
|
-
|
|
13
|
-
This software is governed by the CeCILL license under French law and
|
|
14
|
-
abiding by the rules of distribution of free software. You can use,
|
|
15
|
-
modify and/ or redistribute the software under the terms of the CeCILL
|
|
16
|
-
license as circulated by CEA, CNRS and INRIA at the following URL
|
|
17
|
-
"http://www.cecill.info".
|
|
18
|
-
|
|
19
|
-
As a counterpart to the access to the source code and rights to copy,
|
|
20
|
-
modify and redistribute granted by the license, users are provided only
|
|
21
|
-
with a limited warranty and the software's author, the holder of the
|
|
22
|
-
economic rights, and the successive licensors have only limited
|
|
23
|
-
liability.
|
|
24
|
-
|
|
25
|
-
In this respect, the user's attention is drawn to the risks associated
|
|
26
|
-
with loading, using, modifying and/or developing or reproducing the
|
|
27
|
-
software by the user in light of its specific status of free software,
|
|
28
|
-
that may mean that it is complicated to manipulate, and that also
|
|
29
|
-
therefore means that it is reserved for developers and experienced
|
|
30
|
-
professionals having in-depth computer knowledge. Users are therefore
|
|
31
|
-
encouraged to load and test the software's suitability as regards their
|
|
32
|
-
requirements in conditions enabling the security of their systems and/or
|
|
33
|
-
data to be ensured and, more generally, to use and operate it in the
|
|
34
|
-
same conditions as regards security.
|
|
35
|
-
|
|
36
|
-
The fact that you are presently reading this means that you have had
|
|
37
|
-
knowledge of the CeCILL license and that you accept its terms.
|
|
38
|
-
|
|
39
|
-
SEE LICENCE NOTICE: file README-LICENCE-utf8.txt at project source root.
|
|
40
|
-
|
|
41
|
-
This software is being developed by Eric Debreuve, a CNRS employee and
|
|
42
|
-
member of team Morpheme.
|
|
43
|
-
Team Morpheme is a joint team between Inria, CNRS, and UniCA.
|
|
44
|
-
It is hosted by the Centre Inria d'Université Côte d'Azur, Laboratory
|
|
45
|
-
I3S, and Laboratory iBV.
|
|
46
|
-
|
|
47
|
-
CNRS: https://www.cnrs.fr/index.php/en
|
|
48
|
-
Inria: https://www.inria.fr/en/
|
|
49
|
-
UniCA: https://univ-cotedazur.eu/
|
|
50
|
-
Centre Inria d'Université Côte d'Azur: https://www.inria.fr/en/centre/sophia/
|
|
51
|
-
I3S: https://www.i3s.unice.fr/en/
|
|
52
|
-
iBV: http://ibv.unice.fr/
|
|
53
|
-
Team Morpheme: https://team.inria.fr/morpheme/
|
|
54
|
-
"""
|
|
@@ -1,65 +0,0 @@
|
|
|
1
|
-
"""
|
|
2
|
-
Copyright CNRS/Inria/UniCA
|
|
3
|
-
Contributor(s): Eric Debreuve (eric.debreuve@cnrs.fr) since 2022
|
|
4
|
-
SEE COPYRIGHT NOTICE BELOW
|
|
5
|
-
"""
|
|
6
|
-
|
|
7
|
-
DEFAULT_BACKEND = "matplotlib"
|
|
8
|
-
|
|
9
|
-
BACKEND_FROM_ALIAS = {
|
|
10
|
-
"mpl": "matplotlib",
|
|
11
|
-
"v3do": "vedo",
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
NEW_THREAD_ACCEPTED_BY = {
|
|
15
|
-
"bokeh": True,
|
|
16
|
-
"matplotlib": False,
|
|
17
|
-
"plotly": True,
|
|
18
|
-
"vedo": True,
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
"""
|
|
22
|
-
COPYRIGHT NOTICE
|
|
23
|
-
|
|
24
|
-
This software is governed by the CeCILL license under French law and
|
|
25
|
-
abiding by the rules of distribution of free software. You can use,
|
|
26
|
-
modify and/ or redistribute the software under the terms of the CeCILL
|
|
27
|
-
license as circulated by CEA, CNRS and INRIA at the following URL
|
|
28
|
-
"http://www.cecill.info".
|
|
29
|
-
|
|
30
|
-
As a counterpart to the access to the source code and rights to copy,
|
|
31
|
-
modify and redistribute granted by the license, users are provided only
|
|
32
|
-
with a limited warranty and the software's author, the holder of the
|
|
33
|
-
economic rights, and the successive licensors have only limited
|
|
34
|
-
liability.
|
|
35
|
-
|
|
36
|
-
In this respect, the user's attention is drawn to the risks associated
|
|
37
|
-
with loading, using, modifying and/or developing or reproducing the
|
|
38
|
-
software by the user in light of its specific status of free software,
|
|
39
|
-
that may mean that it is complicated to manipulate, and that also
|
|
40
|
-
therefore means that it is reserved for developers and experienced
|
|
41
|
-
professionals having in-depth computer knowledge. Users are therefore
|
|
42
|
-
encouraged to load and test the software's suitability as regards their
|
|
43
|
-
requirements in conditions enabling the security of their systems and/or
|
|
44
|
-
data to be ensured and, more generally, to use and operate it in the
|
|
45
|
-
same conditions as regards security.
|
|
46
|
-
|
|
47
|
-
The fact that you are presently reading this means that you have had
|
|
48
|
-
knowledge of the CeCILL license and that you accept its terms.
|
|
49
|
-
|
|
50
|
-
SEE LICENCE NOTICE: file README-LICENCE-utf8.txt at project source root.
|
|
51
|
-
|
|
52
|
-
This software is being developed by Eric Debreuve, a CNRS employee and
|
|
53
|
-
member of team Morpheme.
|
|
54
|
-
Team Morpheme is a joint team between Inria, CNRS, and UniCA.
|
|
55
|
-
It is hosted by the Centre Inria d'Université Côte d'Azur, Laboratory
|
|
56
|
-
I3S, and Laboratory iBV.
|
|
57
|
-
|
|
58
|
-
CNRS: https://www.cnrs.fr/index.php/en
|
|
59
|
-
Inria: https://www.inria.fr/en/
|
|
60
|
-
UniCA: https://univ-cotedazur.eu/
|
|
61
|
-
Centre Inria d'Université Côte d'Azur: https://www.inria.fr/en/centre/sophia/
|
|
62
|
-
I3S: https://www.i3s.unice.fr/en/
|
|
63
|
-
iBV: http://ibv.unice.fr/
|
|
64
|
-
Team Morpheme: https://team.inria.fr/morpheme/
|
|
65
|
-
"""
|
|
@@ -1,60 +0,0 @@
|
|
|
1
|
-
"""
|
|
2
|
-
Copyright CNRS/Inria/UniCA
|
|
3
|
-
Contributor(s): Eric Debreuve (eric.debreuve@cnrs.fr) since 2022
|
|
4
|
-
SEE COPYRIGHT NOTICE BELOW
|
|
5
|
-
"""
|
|
6
|
-
|
|
7
|
-
import sys as s
|
|
8
|
-
|
|
9
|
-
from babelplot.constant.project import NAME
|
|
10
|
-
from PyQt6.QtWidgets import QApplication as application_t # noqa
|
|
11
|
-
|
|
12
|
-
if (QT_APPLICATION := application_t.instance()) is None:
|
|
13
|
-
QT_APPLICATION = application_t(s.argv)
|
|
14
|
-
QT_APPLICATION.setApplicationName(NAME) # Useful for window manager.
|
|
15
|
-
|
|
16
|
-
"""
|
|
17
|
-
COPYRIGHT NOTICE
|
|
18
|
-
|
|
19
|
-
This software is governed by the CeCILL license under French law and
|
|
20
|
-
abiding by the rules of distribution of free software. You can use,
|
|
21
|
-
modify and/ or redistribute the software under the terms of the CeCILL
|
|
22
|
-
license as circulated by CEA, CNRS and INRIA at the following URL
|
|
23
|
-
"http://www.cecill.info".
|
|
24
|
-
|
|
25
|
-
As a counterpart to the access to the source code and rights to copy,
|
|
26
|
-
modify and redistribute granted by the license, users are provided only
|
|
27
|
-
with a limited warranty and the software's author, the holder of the
|
|
28
|
-
economic rights, and the successive licensors have only limited
|
|
29
|
-
liability.
|
|
30
|
-
|
|
31
|
-
In this respect, the user's attention is drawn to the risks associated
|
|
32
|
-
with loading, using, modifying and/or developing or reproducing the
|
|
33
|
-
software by the user in light of its specific status of free software,
|
|
34
|
-
that may mean that it is complicated to manipulate, and that also
|
|
35
|
-
therefore means that it is reserved for developers and experienced
|
|
36
|
-
professionals having in-depth computer knowledge. Users are therefore
|
|
37
|
-
encouraged to load and test the software's suitability as regards their
|
|
38
|
-
requirements in conditions enabling the security of their systems and/or
|
|
39
|
-
data to be ensured and, more generally, to use and operate it in the
|
|
40
|
-
same conditions as regards security.
|
|
41
|
-
|
|
42
|
-
The fact that you are presently reading this means that you have had
|
|
43
|
-
knowledge of the CeCILL license and that you accept its terms.
|
|
44
|
-
|
|
45
|
-
SEE LICENCE NOTICE: file README-LICENCE-utf8.txt at project source root.
|
|
46
|
-
|
|
47
|
-
This software is being developed by Eric Debreuve, a CNRS employee and
|
|
48
|
-
member of team Morpheme.
|
|
49
|
-
Team Morpheme is a joint team between Inria, CNRS, and UniCA.
|
|
50
|
-
It is hosted by the Centre Inria d'Université Côte d'Azur, Laboratory
|
|
51
|
-
I3S, and Laboratory iBV.
|
|
52
|
-
|
|
53
|
-
CNRS: https://www.cnrs.fr/index.php/en
|
|
54
|
-
Inria: https://www.inria.fr/en/
|
|
55
|
-
UniCA: https://univ-cotedazur.eu/
|
|
56
|
-
Centre Inria d'Université Côte d'Azur: https://www.inria.fr/en/centre/sophia/
|
|
57
|
-
I3S: https://www.i3s.unice.fr/en/
|
|
58
|
-
iBV: http://ibv.unice.fr/
|
|
59
|
-
Team Morpheme: https://team.inria.fr/morpheme/
|
|
60
|
-
"""
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|