From e01a5e0fc9cb79de29af878a6569764a70be5b77 Mon Sep 17 00:00:00 2001 From: Pierre Raybaut <1311787+PierreRaybaut@users.noreply.github.com> Date: Fri, 22 May 2026 09:20:43 +0200 Subject: [PATCH 01/12] fix(control): expose get_current_object_uuid() on proxy API --- sigima/client/base.py | 16 ++++++++++++++++ sigima/client/stub.py | 7 +++++++ 2 files changed, 23 insertions(+) diff --git a/sigima/client/base.py b/sigima/client/base.py index 3695006..0d46e37 100644 --- a/sigima/client/base.py +++ b/sigima/client/base.py @@ -322,6 +322,14 @@ def get_sel_object_uuids(self, include_groups: bool = False) -> list[str]: List of selected objects uuids. """ + @abc.abstractmethod + def get_current_object_uuid(self) -> str | None: + """Return current object uuid in current panel. + + Returns: + UUID of the current object, or None if no object is current. + """ + @abc.abstractmethod def select_objects( self, @@ -733,6 +741,14 @@ def get_sel_object_uuids(self, include_groups: bool = False) -> list[str]: """ return self._datalab.get_sel_object_uuids(include_groups) + def get_current_object_uuid(self) -> str | None: + """Return current object uuid in current panel. + + Returns: + UUID of the current object, or None if no object is current. + """ + return self._datalab.get_current_object_uuid() + def select_objects( self, selection: list[int | str], diff --git a/sigima/client/stub.py b/sigima/client/stub.py index dc5c722..c156cac 100644 --- a/sigima/client/stub.py +++ b/sigima/client/stub.py @@ -170,6 +170,9 @@ def _register_functions(self) -> None: self.server.register_function(self.select_objects, "select_objects") self.server.register_function(self.select_groups, "select_groups") self.server.register_function(self.get_sel_object_uuids, "get_sel_object_uuids") + self.server.register_function( + self.get_current_object_uuid, "get_current_object_uuid" + ) # Group operations self.server.register_function(self.add_group, "add_group") @@ -622,6 +625,10 @@ def get_sel_object_uuids(self, include_groups: bool = False) -> list[str]: """Return selected objects uuids.""" return self.selected_objects.copy() + def get_current_object_uuid(self) -> str | None: + """Return current object uuid (first selected, or None).""" + return self.selected_objects[0] if self.selected_objects else None + def select_groups(self, selection: list[int], panel: str | None = None) -> None: """Select groups by indices.""" panel = panel or self.current_panel From 83887b65cd3f80bbd80ba950531b38ba33c0b92c Mon Sep 17 00:00:00 2001 From: Thomas MALLET Date: Thu, 28 May 2026 09:35:53 +0200 Subject: [PATCH 02/12] Renames test debug env var to avoid collisions --- .env.template | 4 +++- sigima/tests/env.py | 2 +- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/.env.template b/.env.template index b06759e..0ab4037 100644 --- a/.env.template +++ b/.env.template @@ -7,4 +7,6 @@ VENV_DIR= # Python path for development (sibling packages) PYTHONPATH=. # Locale (e.g. fr) -LANG= \ No newline at end of file +LANG= +# Debug mode (0 or 1) +SIGIMA_DEBUG=0 \ No newline at end of file diff --git a/sigima/tests/env.py b/sigima/tests/env.py index 9a66719..55c9858 100644 --- a/sigima/tests/env.py +++ b/sigima/tests/env.py @@ -30,7 +30,7 @@ from guidata.env import ExecEnv as GuiDataExecEnv # We could import DEBUG from sigima.config, but is it really worth it? -DEBUG = os.environ.get("DEBUG", "").lower() in ("1", "true") +DEBUG = os.environ.get("SIGIMA_DEBUG", "").lower() in ("1", "true") class VerbosityLevels(enum.Enum): From 5febd95399ab859f5a4f1a6ee174d1339d30b786 Mon Sep 17 00:00:00 2001 From: Stefano Pierini Date: Thu, 28 May 2026 12:02:33 +0200 Subject: [PATCH 03/12] fix(preprocessing): correct coordinate order in circle and ellipse model fitting --- sigima/tools/image/preprocessing.py | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/sigima/tools/image/preprocessing.py b/sigima/tools/image/preprocessing.py index 8ce3fd6..5c5d8da 100644 --- a/sigima/tools/image/preprocessing.py +++ b/sigima/tools/image/preprocessing.py @@ -48,7 +48,8 @@ def fit_circle_model(contour: np.ndarray) -> tuple[float, float, float] | None: if _USE_NEW_SHAPE_API: model = measure.CircleModel.from_estimate(contour) if model: - return model.center[0], model.center[1], model.radius + # model.center is (row, col) = (y, x), swap to (x, y) + return model.center[1], model.center[0], model.radius else: model = measure.CircleModel() if model.estimate(contour): @@ -73,8 +74,10 @@ def fit_ellipse_model( if _USE_NEW_SHAPE_API: model = measure.EllipseModel.from_estimate(contour) if model: - xc, yc = model.center[0], model.center[1] - a, b = model.axis_lengths[0], model.axis_lengths[1] + # model.center is (row, col) = (y, x), swap to (x, y) + # model.axis_lengths is (semi_row, semi_col), swap to (semi_x, semi_y) + xc, yc = model.center[1], model.center[0] + a, b = model.axis_lengths[1], model.axis_lengths[0] return xc, yc, a, b, model.theta else: model = measure.EllipseModel() From d47c6e4076f0b1df6783d9b289df3984346b7332 Mon Sep 17 00:00:00 2001 From: Stefano Pierini Date: Thu, 28 May 2026 14:44:45 +0200 Subject: [PATCH 04/12] fix(ellipse): correct sign for ellipse minor axis diameter calculation --- sigima/tools/coordinates.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/sigima/tools/coordinates.py b/sigima/tools/coordinates.py index 17886e1..1e1d160 100644 --- a/sigima/tools/coordinates.py +++ b/sigima/tools/coordinates.py @@ -98,7 +98,7 @@ def ellipse_to_diameters( Ellipse X/Y diameters (major/minor axes) coordinates """ dxa, dya = a * np.cos(theta), a * np.sin(theta) - dxb, dyb = b * np.sin(theta), b * np.cos(theta) + dxb, dyb = -b * np.sin(theta), b * np.cos(theta) x0, y0, x1, y1 = xc - dxa, yc - dya, xc + dxa, yc + dya x2, y2, x3, y3 = xc - dxb, yc - dyb, xc + dxb, yc + dyb return x0, y0, x1, y1, x2, y2, x3, y3 @@ -117,7 +117,7 @@ def array_ellipse_to_diameters(data: np.ndarray) -> np.ndarray: """ xc, yc, a, b, theta = data[:, 0], data[:, 1], data[:, 2], data[:, 3], data[:, 4] dxa, dya = a * np.cos(theta), a * np.sin(theta) - dxb, dyb = b * np.sin(theta), b * np.cos(theta) + dxb, dyb = -b * np.sin(theta), b * np.cos(theta) x0, y0, x1, y1 = xc - dxa, yc - dya, xc + dxa, yc + dya x2, y2, x3, y3 = xc - dxb, yc - dyb, xc + dxb, yc + dyb result = np.column_stack((x0, y0, x1, y1, x2, y2, x3, y3)).astype(float) From 57422e55fd2e54012b285b743eb8a6a27ce4f72e Mon Sep 17 00:00:00 2001 From: Stefano Pierini Date: Thu, 28 May 2026 14:45:26 +0200 Subject: [PATCH 05/12] fix(geometry): scale radius and semi-axes from pixel to physical units in compute_geometry_from_obj --- sigima/proc/image/base.py | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/sigima/proc/image/base.py b/sigima/proc/image/base.py index 36b97b8..0528cf7 100644 --- a/sigima/proc/image/base.py +++ b/sigima/proc/image/base.py @@ -308,6 +308,17 @@ def compute_geometry_from_obj( colx, coly = 0, 1 coords[:, colx] = obj.dx * coords[:, colx] + obj.x0 coords[:, coly] = obj.dy * coords[:, coly] + obj.y0 + if coords.shape[1] % 2 != 0: + # Scale distance-like values (radius, semi-axes) from pixel to + # physical units. Use average pixel size for isotropic scaling. + pixel_scale = (obj.dx + obj.dy) / 2 + if coords.shape[1] >= 3: + # Column 2: radius (circle) or semi-axis a (ellipse) + coords[:, 2] *= pixel_scale + if coords.shape[1] >= 4: + # Column 3: semi-axis b (ellipse) + coords[:, 3] *= pixel_scale + # Column 4 (theta) is an angle: no scaling needed if obj.roi is not None: x0, y0, _x1, _y1 = obj.roi.get_single_roi(i_roi).get_bounding_box(obj) coords[:, colx] += x0 - obj.x0 From 7b4ce7caa2c8923b1e52e4760bd265b3f302ba1d Mon Sep 17 00:00:00 2001 From: Stefano Pierini Date: Thu, 28 May 2026 15:03:16 +0200 Subject: [PATCH 06/12] Update release notes for version 1.1.3 with bug fixes in contour detection and visualization --- doc/release_notes/release_1.01.md | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/doc/release_notes/release_1.01.md b/doc/release_notes/release_1.01.md index 82e6523..eb1bda2 100644 --- a/doc/release_notes/release_1.01.md +++ b/doc/release_notes/release_1.01.md @@ -1,5 +1,20 @@ # Version 1.1 # +## Sigima Version 1.1.3 (unreleased) ## + +### 🛠️ Bug Fixes since version 1.1.2 ### + +* **Ellipse/circle contour detection**: Fixed swapped X/Y coordinates when using scikit-image ≥ 0.26.0 + * The new `EllipseModel`/`CircleModel` API returns center coordinates as `(row, col)` but the code was treating them as `(x, y)`, causing detected ellipses and circles to appear at wrong positions on the image + * Semi-axis lengths were also swapped for ellipses, resulting in incorrect aspect ratios + * This bug only affected scikit-image ≥ 0.26.0; older versions were handled correctly +* **Ellipse visualization**: Fixed incorrect minor axis direction in `ellipse_to_diameters` coordinate conversion + * The minor axis endpoints were computed with a wrong sign, making the minor axis non-perpendicular to the major axis for rotated ellipses (e.g., at θ=45° both axes pointed in the same direction). This caused distorted ellipse overlays in DataLab when displaying detected or annotated ellipses at non-trivial rotation angles +* **Circle/ellipse detection with calibrated images**: Fixed radius and semi-axes not being converted from pixel units to physical units + * When an image had non-default pixel calibration (e.g., dx=2 mm/pixel), center coordinates were correctly converted to physical units but the radius and semi-axes remained in pixels, causing values to be wrong by a factor equal to the pixel size + + + ## Sigima Version 1.1.2 (2026-04-20) ## ### 💥 Breaking changes since version 1.1.1 ### From f216c742db2bb03f27d4fe791130ad54ac34a551 Mon Sep 17 00:00:00 2001 From: Pierre Raybaut <1311787+PierreRaybaut@users.noreply.github.com> Date: Sat, 30 May 2026 15:00:25 +0200 Subject: [PATCH 07/12] feat(tests): add tests for non-uniform coordinate handling in geometry operations --- .../coordinated_text/image_nonuniform.txt | 21 +++++++++++ sigima/tests/image/geometry_unit_test.py | 31 ++++++++++++++++ sigima/tests/image/imageobj_unit_test.py | 35 +++++++++++++++++++ .../io/coordinated_text_format_unit_test.py | 21 +++++++++++ 4 files changed, 108 insertions(+) create mode 100644 sigima/data/tests/image_formats/coordinated_text/image_nonuniform.txt diff --git a/sigima/data/tests/image_formats/coordinated_text/image_nonuniform.txt b/sigima/data/tests/image_formats/coordinated_text/image_nonuniform.txt new file mode 100644 index 0000000..421fed7 --- /dev/null +++ b/sigima/data/tests/image_formats/coordinated_text/image_nonuniform.txt @@ -0,0 +1,21 @@ +############################## +# Created on 2024-10-10 12:00:00.000000 +# By Test Script +# nx : 4 +# ny : 3 +# X : X-axis (mm) +# Y : Y-axis (mm) +# Z : Z-value (lsb) +############################## +0.000000 0.000000 1.000000 +1.500000 0.000000 2.000000 +4.000000 0.000000 3.000000 +9.000000 0.000000 4.000000 +0.000000 2.000000 5.000000 +1.500000 2.000000 6.000000 +4.000000 2.000000 7.000000 +9.000000 2.000000 8.000000 +0.000000 5.000000 9.000000 +1.500000 5.000000 10.000000 +4.000000 5.000000 11.000000 +9.000000 5.000000 12.000000 diff --git a/sigima/tests/image/geometry_unit_test.py b/sigima/tests/image/geometry_unit_test.py index 62e1e30..fb9c170 100644 --- a/sigima/tests/image/geometry_unit_test.py +++ b/sigima/tests/image/geometry_unit_test.py @@ -182,6 +182,37 @@ def test_image_transpose() -> None: check_array_result("Transpose", dst.data, exp) +@pytest.mark.validation +def test_image_geometry_nonuniform_coords() -> None: + """Check that geometry operations propagate non-uniform coordinates. + + ``translate`` and ``transpose`` keep the coordinate arrays in sync with the + transformed data when the source image uses non-uniform coordinates. + """ + execenv.print("*** Testing non-uniform coordinate propagation") + + src = get_test_image("flower.npy") + ny, nx = src.data.shape + xcoords = np.linspace(0.0, 10.0, nx) ** 1.5 # non-uniform spacing + ycoords = np.linspace(0.0, 8.0, ny) ** 2 # non-uniform spacing + src.set_coords(xcoords, ycoords) + + # translate must offset the coordinate arrays (not x0/y0) + dst_t = sigima.proc.image.translate( + src, sigima.params.TranslateParam.create(dx=3.0, dy=-2.0) + ) + assert not dst_t.is_uniform_coords, "translate must keep non-uniform coords" + check_array_result("Translate non-uniform xcoords", dst_t.xcoords, xcoords + 3.0) + check_array_result("Translate non-uniform ycoords", dst_t.ycoords, ycoords - 2.0) + + # transpose must swap the coordinate arrays + dst_tr = sigima.proc.image.transpose(src) + assert not dst_tr.is_uniform_coords, "transpose must keep non-uniform coords" + check_array_result("Transpose non-uniform xcoords", dst_tr.xcoords, ycoords) + check_array_result("Transpose non-uniform ycoords", dst_tr.ycoords, xcoords) + check_array_result("Transpose non-uniform data", dst_tr.data, src.data.T) + + @pytest.mark.validation def test_image_resampling() -> None: """Image resampling test.""" diff --git a/sigima/tests/image/imageobj_unit_test.py b/sigima/tests/image/imageobj_unit_test.py index dbe4114..a0baa5e 100644 --- a/sigima/tests/image/imageobj_unit_test.py +++ b/sigima/tests/image/imageobj_unit_test.py @@ -753,6 +753,40 @@ def test_coordinate_conversion() -> None: execenv.print(f"{test_coordinate_conversion.__doc__}: OK") +def test_switch_coords_errors() -> None: + """Test switch_coords_to error handling with insufficient coordinates""" + execenv.print(f"{test_switch_coords_errors.__doc__}:") + + # A single-column image only has one X coordinate, so switching its + # non-uniform coordinates back to a uniform grid is impossible. + data = np.random.rand(4, 1) + image = sigima.objects.create_image(title="Single column", data=data) + image.set_coords(xcoords=np.array([2.0]), ycoords=np.array([0.0, 1.0, 2.0, 3.0])) + assert not image.is_uniform_coords + + try: + image.switch_coords_to("uniform") + assert False, "Should have raised ValueError for insufficient coordinates" + except ValueError as exc: + assert "not enough non-uniform coordinates" in str(exc) + execenv.print(" ✓ ValueError raised when switching to uniform fails") + + # Switching a uniform image to non-uniform and back must round-trip exactly. + image2 = sigima.objects.create_image( + title="Round-trip", data=np.random.rand(10, 12) + ) + image2.set_uniform_coords(dx=0.5, dy=0.8, x0=10.0, y0=20.0) + image2.switch_coords_to("non-uniform") + assert not image2.is_uniform_coords + image2.switch_coords_to("uniform") + assert image2.is_uniform_coords + np.testing.assert_allclose([image2.x0, image2.y0], [10.0, 20.0], rtol=1e-10) + np.testing.assert_allclose([image2.dx, image2.dy], [0.5, 0.8], rtol=1e-10) + execenv.print(" ✓ Uniform → non-uniform → uniform round-trip preserved") + + execenv.print(f"{test_switch_coords_errors.__doc__}: OK") + + if __name__ == "__main__": guiutils.enable_gui() test_create_image() @@ -762,3 +796,4 @@ def test_coordinate_conversion() -> None: test_create_image_from_param() test_image_copy() test_coordinate_conversion() + test_switch_coords_errors() diff --git a/sigima/tests/io/coordinated_text_format_unit_test.py b/sigima/tests/io/coordinated_text_format_unit_test.py index f3c6582..656758a 100644 --- a/sigima/tests/io/coordinated_text_format_unit_test.py +++ b/sigima/tests/io/coordinated_text_format_unit_test.py @@ -160,6 +160,27 @@ def test_read_nonuniform_coordinates(): os.unlink(temp_filename) +def test_read_nonuniform_coordinates_fixture() -> None: + """Read the permanent non-uniform fixture file and check coordinates. + + Unlike ``test_read_nonuniform_coordinates`` (which builds the file in a + temporary directory), this exercises the bundled test artifact so the + non-uniform read path is covered by a real, version-controlled file. + """ + path = get_test_fnames("coordinated_text/image_nonuniform.txt")[0] + imgs = CoordinatedTextFileReader.read_images(path) + assert len(imgs) == 1, f"Expected 1 image, got {len(imgs)}" + + img = imgs[0] + assert not img.is_uniform_coords, "Fixture should be detected as non-uniform" + + np.testing.assert_allclose(img.xcoords, [0.0, 1.5, 4.0, 9.0], rtol=1e-10) + np.testing.assert_allclose(img.ycoords, [0.0, 2.0, 5.0], rtol=1e-10) + assert img.data.shape == (3, 4), f"Expected shape (3, 4), got {img.data.shape}" + expected = np.arange(1.0, 13.0).reshape(3, 4) + np.testing.assert_allclose(img.data, expected) + + def test_nonuniform_coordinates_io() -> None: """Test I/O (read and write) for coordinated text format with non-uniform coordinates From fa45cceb6b8403d27f46d2d8988abd1310c75b51 Mon Sep 17 00:00:00 2001 From: Pierre Raybaut <1311787+PierreRaybaut@users.noreply.github.com> Date: Sat, 30 May 2026 15:04:28 +0200 Subject: [PATCH 08/12] update release-notes: enhance test coverage for non-uniform image coordinates Closes #24 --- doc/locale/fr/LC_MESSAGES/release_notes/release_1.01.po | 6 ++++++ doc/release_notes/release_1.01.md | 2 ++ 2 files changed, 8 insertions(+) diff --git a/doc/locale/fr/LC_MESSAGES/release_notes/release_1.01.po b/doc/locale/fr/LC_MESSAGES/release_notes/release_1.01.po index 55f8384..143e225 100644 --- a/doc/locale/fr/LC_MESSAGES/release_notes/release_1.01.po +++ b/doc/locale/fr/LC_MESSAGES/release_notes/release_1.01.po @@ -250,6 +250,12 @@ msgstr "Mise à jour de toutes les fonctions de test interactives pour utiliser msgid "Improved code consistency across signal and image test modules" msgstr "Amélioration de la cohérence du code entre les modules de test de signaux et d'images" +msgid "🧪 Tests" +msgstr "🧪 Tests" + +msgid "**Non-uniform image coordinates**: Strengthened test coverage for images with non-uniform (irregularly spaced) X/Y coordinates, closing the remaining gaps in coordinate-mode switching, geometry operations and coordinated-text reading. This closes [Issue #24](https://github.com/DataLab-Platform/Sigima/issues/24)." +msgstr "**Coordonnées d'image non uniformes** : Renforcement de la couverture de tests pour les images à coordonnées X/Y non uniformes (espacement irrégulier), comblant les dernières lacunes concernant le changement de mode de coordonnées, les opérations géométriques et la lecture du format texte coordonné. Ceci clôt l'[Issue #24](https://github.com/DataLab-Platform/Sigima/issues/24)." + msgid "**Visualization backend flexibility**: Added support for Matplotlib as an alternative to PlotPy for test visualizations" msgstr "**Flexibilité du backend de visualisation** : Ajout de la prise en charge de Matplotlib comme alternative à PlotPy pour les visualisations de test" diff --git a/doc/release_notes/release_1.01.md b/doc/release_notes/release_1.01.md index eb1bda2..4b9f961 100644 --- a/doc/release_notes/release_1.01.md +++ b/doc/release_notes/release_1.01.md @@ -13,7 +13,9 @@ * **Circle/ellipse detection with calibrated images**: Fixed radius and semi-axes not being converted from pixel units to physical units * When an image had non-default pixel calibration (e.g., dx=2 mm/pixel), center coordinates were correctly converted to physical units but the radius and semi-axes remained in pixels, causing values to be wrong by a factor equal to the pixel size +### 🧪 Tests ### +* **Non-uniform image coordinates**: Strengthened test coverage for images with non-uniform (irregularly spaced) X/Y coordinates, closing the remaining gaps in coordinate-mode switching, geometry operations and coordinated-text reading. This closes [Issue #24](https://github.com/DataLab-Platform/Sigima/issues/24). ## Sigima Version 1.1.2 (2026-04-20) ## From e75d12b3f7d3597de3dc895b51a121f6651c8176 Mon Sep 17 00:00:00 2001 From: Pierre Raybaut <1311787+PierreRaybaut@users.noreply.github.com> Date: Sat, 30 May 2026 15:09:45 +0200 Subject: [PATCH 09/12] refactor(tests): remove redundant validation marker from non-uniform geometry test --- sigima/tests/image/geometry_unit_test.py | 1 - 1 file changed, 1 deletion(-) diff --git a/sigima/tests/image/geometry_unit_test.py b/sigima/tests/image/geometry_unit_test.py index fb9c170..b285734 100644 --- a/sigima/tests/image/geometry_unit_test.py +++ b/sigima/tests/image/geometry_unit_test.py @@ -182,7 +182,6 @@ def test_image_transpose() -> None: check_array_result("Transpose", dst.data, exp) -@pytest.mark.validation def test_image_geometry_nonuniform_coords() -> None: """Check that geometry operations propagate non-uniform coordinates. From 04d37b893eb9d4075f0a6c68c241ee417a42c1a8 Mon Sep 17 00:00:00 2001 From: Pierre Raybaut <1311787+PierreRaybaut@users.noreply.github.com> Date: Sun, 31 May 2026 10:17:47 +0200 Subject: [PATCH 10/12] fix: preserve user-edited XY values when regenerating custom signals Fixes #25 --- sigima/objects/signal/creation.py | 6 +++++- sigima/tests/signal/signalobj_unit_test.py | 23 ++++++++++++++++++++++ 2 files changed, 28 insertions(+), 1 deletion(-) diff --git a/sigima/objects/signal/creation.py b/sigima/objects/signal/creation.py index dec86c8..c06b4cf 100644 --- a/sigima/objects/signal/creation.py +++ b/sigima/objects/signal/creation.py @@ -1389,7 +1389,11 @@ def generate_1d_data(self) -> tuple[np.ndarray, np.ndarray]: Returns: Tuple of (x, y) arrays """ - self.setup_array(size=self.size, xmin=self.xmin, xmax=self.xmax) + if self.xyarray is None: + # Initialize the array on first use (no user-defined values yet). + # When the user has already edited ``xyarray``, its contents must be + # preserved here instead of being regenerated from size/xmin/xmax. + self.setup_array(size=self.size, xmin=self.xmin, xmax=self.xmax) x, y = self.xyarray.T return x, y diff --git a/sigima/tests/signal/signalobj_unit_test.py b/sigima/tests/signal/signalobj_unit_test.py index 043e878..ab466ed 100644 --- a/sigima/tests/signal/signalobj_unit_test.py +++ b/sigima/tests/signal/signalobj_unit_test.py @@ -306,6 +306,29 @@ def test_create_signal_from_param() -> None: execenv.print(f"{test_create_signal_from_param.__doc__}: OK") +def test_custom_signal_preserves_edited_array() -> None: + """Test that editing CustomSignalParam.xyarray is preserved on regeneration""" + execenv.print(f"{test_custom_signal_preserves_edited_array.__doc__}:") + + param = sigima.objects.CustomSignalParam.create(size=5, xmin=0.0, xmax=1.0) + + # First generation initializes the array from size/xmin/xmax. + x0, y0 = param.generate_1d_data() + assert np.allclose(x0, np.linspace(0.0, 1.0, 5)) + assert np.allclose(y0, x0) + + # Simulate a user editing the XY values in the array editor. + edited = np.array([[0.0, 10.0], [0.25, 20.0], [0.5, 30.0], [0.75, 40.0]]) + param.xyarray = edited + + # Regenerating must keep the edited values instead of clobbering them. + x1, y1 = param.generate_1d_data() + assert np.allclose(x1, edited[:, 0]), "Edited X values were not preserved" + assert np.allclose(y1, edited[:, 1]), "Edited Y values were not preserved" + + execenv.print(f"{test_custom_signal_preserves_edited_array.__doc__}: OK") + + def test_signal_copy() -> None: """Test copying signal objects with all attributes""" execenv.print(f"{test_signal_copy.__doc__}:") From 7a4145289767665b20a60e9967f36fb143c14486 Mon Sep 17 00:00:00 2001 From: Thomas MALLET Date: Tue, 2 Jun 2026 18:07:29 +0200 Subject: [PATCH 11/12] bump version to 1.1.3 and update changelog --- requirements.txt | 2 ++ sigima/__init__.py | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index c35284d..0b46956 100644 --- a/requirements.txt +++ b/requirements.txt @@ -22,9 +22,11 @@ pytest-xvfb qtpy ruff scikit-image >= 0.19.2, < 0.27 +setuptools sphinx sphinx-copybutton sphinx-gallery sphinx_design sphinx_intl typing-extensions >= 4.0 +wheel diff --git a/sigima/__init__.py b/sigima/__init__.py index d54dcff..0c466b4 100644 --- a/sigima/__init__.py +++ b/sigima/__init__.py @@ -144,7 +144,7 @@ # Set validation mode to ENABLED by default (issue warnings for invalid inputs) set_validation_mode(ValidationMode.ENABLED) -__version__ = "1.1.2" +__version__ = "1.1.3" __docurl__ = "https://sigima.readthedocs.io/" __homeurl__ = "https://github.com/DataLab-Platform/Sigima" __supporturl__ = "https://github.com/DataLab-Platform/sigima/issues/new/choose" From 5d3a22982de3cd57905b6d8c9e479388bae673fa Mon Sep 17 00:00:00 2001 From: Thomas MALLET Date: Tue, 2 Jun 2026 18:07:43 +0200 Subject: [PATCH 12/12] update translations --- doc/locale/fr/LC_MESSAGES/api/index.po | 14 +-- .../auto_examples/features/convolution.po | 4 +- .../features/coordinate_systems.po | 4 +- .../auto_examples/features/datalab_client.po | 8 +- .../features/datetime_signals.po | 10 +- .../auto_examples/features/index.po | 25 ++--- .../auto_examples/features/roi_grid.po | 2 +- .../auto_examples/features/zero_padding.po | 10 +- .../getting_started/image_creation.po | 4 +- .../auto_examples/getting_started/index.po | 8 +- .../getting_started/signal_creation.po | 4 +- .../fr/LC_MESSAGES/auto_examples/index.po | 48 ++++---- .../auto_examples/use_cases/blob_detection.po | 2 +- .../auto_examples/use_cases/convolution.po | 67 ++++++----- .../auto_examples/use_cases/fabry_perot.po | 4 +- .../auto_examples/use_cases/index.po | 17 ++- .../auto_examples/use_cases/laser_beam.po | 3 +- .../use_cases/spectrum_analysis.po | 2 +- .../LC_MESSAGES/contributing/environment.po | 28 ++--- .../LC_MESSAGES/release_notes/release_0.01.po | 2 +- .../LC_MESSAGES/release_notes/release_0.02.po | 2 +- .../LC_MESSAGES/release_notes/release_1.00.po | 22 ++-- .../LC_MESSAGES/release_notes/release_1.01.po | 56 +++++++++- doc/locale/fr/LC_MESSAGES/requirements.po | 92 ++++++++-------- .../fr/LC_MESSAGES/user_guide/features.po | 94 ++++++++-------- .../LC_MESSAGES/user_guide/getting_started.po | 4 +- .../fr/LC_MESSAGES/user_guide/installation.po | 104 +++++++++--------- doc/release_notes/release_1.01.md | 10 +- doc/requirements.rst | 8 +- sigima/locale/fr/LC_MESSAGES/sigima.po | 65 +++++++---- 30 files changed, 396 insertions(+), 327 deletions(-) diff --git a/doc/locale/fr/LC_MESSAGES/api/index.po b/doc/locale/fr/LC_MESSAGES/api/index.po index e4b94f5..b5effb5 100644 --- a/doc/locale/fr/LC_MESSAGES/api/index.po +++ b/doc/locale/fr/LC_MESSAGES/api/index.po @@ -28,43 +28,43 @@ msgid "Purpose" msgstr "Objectif" msgid ":mod:`sigima.tools`" -msgstr "" +msgstr ":mod:`sigima.tools`" msgid "Algorithms for data analysis (operating on NumPy arrays) which purpose is to fill in the gaps of common scientific libraries (NumPy, SciPy, scikit-image, etc.), offering consistent tools for computation functions (see :mod:`sigima.proc`)" msgstr "Algorithmes d'analyse de données (fonctionnant sur des tableaux NumPy) dont le but est de combler les lacunes des bibliothèques scientifiques courantes (NumPy, SciPy, scikit-image, etc.), offrant des outils cohérents pour les fonctions de calcul (voir :mod:`sigima.proc`)" msgid ":mod:`sigima.params`" -msgstr "" +msgstr ":mod:`sigima.params`" msgid "Sets of parameters for configuring computation functions (these parameters are instances of :class:`guidata.dataset.DataSet` objects)" msgstr "Ensembles de paramètres pour configurer les fonctions de calcul (ces paramètres sont des instances d'objets :class:`guidata.dataset.DataSet`)" msgid ":mod:`sigima.objects`" -msgstr "" +msgstr ":mod:`sigima.objects`" msgid "Object model for signals and images (:class:`sigima.objects.SignalObj` and :class:`sigima.objects.ImageObj`), scalar results (:class:`sigima.objects.GeometryResult` and :class:`sigima.objects.TableResult`), and related functions" msgstr "Modèle d'objet pour les signaux et les images (:class:`sigima.objects.SignalObj` et :class:`sigima.objects.ImageObj`), résultats scalaires (:class:`sigima.objects.GeometryResult` et :class:`sigima.objects.TableResult`), et fonctions associées" msgid ":mod:`sigima.proc`" -msgstr "" +msgstr ":mod:`sigima.proc`" msgid "Computation functions, which operate on signal and image objects (:class:`sigima.objects.SignalObj` or :class:`sigima.objects.ImageObj`) and return signal or image objects, or scalar results (:class:`sigima.objects.GeometryResult` or :class:`sigima.objects.TableResult`)." msgstr "Fonctions de calcul, qui opèrent sur des objets signal et image (:class:`sigima.objects.SignalObj` ou :class:`sigima.objects.ImageObj`) et retournent des objets signal ou image, ou des résultats scalaires (:class:`sigima.objects.GeometryResult` ou :class:`sigima.objects.TableResult`)." msgid ":mod:`sigima.config`" -msgstr "" +msgstr ":mod:`sigima.config`" msgid "Configuration management for the Sigima library, including options for data paths, translations, and other settings." msgstr "Gestion de la configuration pour la bibliothèque Sigima, y compris les options pour les chemins de données, les traductions et d'autres paramètres." msgid ":mod:`sigima.client`" -msgstr "" +msgstr ":mod:`sigima.client`" msgid "Client interface for connecting to DataLab application through XML-RPC protocol, providing remote control capabilities for signal and image processing workflows." msgstr "Interface client pour se connecter à l'application DataLab via le protocole XML-RPC, offrant des capacités de contrôle à distance pour les flux de travail de traitement de signaux et d'images." msgid ":mod:`sigima.viz`" -msgstr "" +msgstr ":mod:`sigima.viz`" msgid "Visualization tools for interactive display of signal and image objects, supporting PlotPy and Matplotlib backends for testing, debugging, and Jupyter notebook analysis." msgstr "Outils de visualisation pour l'affichage interactif des objets signal et image, prenant en charge les backends PlotPy et Matplotlib pour les tests, le débogage et l'analyse dans les notebooks Jupyter." diff --git a/doc/locale/fr/LC_MESSAGES/auto_examples/features/convolution.po b/doc/locale/fr/LC_MESSAGES/auto_examples/features/convolution.po index 9a7d141..64394cd 100644 --- a/doc/locale/fr/LC_MESSAGES/auto_examples/features/convolution.po +++ b/doc/locale/fr/LC_MESSAGES/auto_examples/features/convolution.po @@ -55,7 +55,7 @@ msgid "We start by creating a test image and various convolution kernels." msgstr "Nous commençons par créer une image de test et divers noyaux de convolution." msgid "Qt widget 1" -msgstr "" +msgstr "Qt widget 1" msgid "Now we'll perform convolution with the Gaussian kernel and compare the result with scipy's implementation to verify correctness." msgstr "Nous allons maintenant effectuer une convolution avec le noyau gaussien et comparer le résultat avec l'implémentation de scipy pour vérifier la justesse." @@ -85,7 +85,7 @@ msgid "Different sigma values in Gaussian kernels produce different blurring eff msgstr "Différentes valeurs de sigma dans les noyaux gaussiens produisent différents effets de flou. Comparons plusieurs valeurs de sigma côte à côte." msgid "Qt widget 2" -msgstr "" +msgstr "Qt widget 2" msgid "Custom convolution kernels" msgstr "Kernels de convolution personnalisés" diff --git a/doc/locale/fr/LC_MESSAGES/auto_examples/features/coordinate_systems.po b/doc/locale/fr/LC_MESSAGES/auto_examples/features/coordinate_systems.po index 0c45966..e14e240 100644 --- a/doc/locale/fr/LC_MESSAGES/auto_examples/features/coordinate_systems.po +++ b/doc/locale/fr/LC_MESSAGES/auto_examples/features/coordinate_systems.po @@ -70,10 +70,10 @@ msgid "Let's create coordinate grid visualizations to highlight the differences msgstr "Créons des visualisations de grilles de coordonnées pour mettre en évidence les différences entre les systèmes de coordonnées uniformes et non uniformes." msgid "Qt widget 1" -msgstr "" +msgstr "Qt widget 1" msgid "Qt widget 2" -msgstr "" +msgstr "Qt widget 2" msgid "Creating specialized non-uniform coordinate examples" msgstr "Création d'exemples spécialisés de coordonnées non uniformes" diff --git a/doc/locale/fr/LC_MESSAGES/auto_examples/features/datalab_client.po b/doc/locale/fr/LC_MESSAGES/auto_examples/features/datalab_client.po index 53faf1e..7bdfe53 100644 --- a/doc/locale/fr/LC_MESSAGES/auto_examples/features/datalab_client.po +++ b/doc/locale/fr/LC_MESSAGES/auto_examples/features/datalab_client.po @@ -28,13 +28,13 @@ msgid "This example is not executed during documentation build as it requires an msgstr "Cet exemple n'est pas exécuté lors de la construction de la documentation car il nécessite une session DataLab active à laquelle se connecter. Il est inclus dans la galerie à titre de référence et peut être exécuté manuellement lorsque DataLab est en cours d'exécution." msgid ":download:`Download Jupyter notebook: datalab_client.ipynb `" -msgstr "" +msgstr ":download:`Télécharger le notebook Jupyter : datalab_client.ipynb `" msgid ":download:`Download Python source code: datalab_client.py `" -msgstr "" +msgstr ":download:`Télécharger le code source Python : datalab_client.py `" msgid ":download:`Download zipped: datalab_client.zip `" -msgstr "" +msgstr ":download:`Télécharger l'archive zip : datalab_client.zip `" msgid "`Gallery generated by Sphinx-Gallery `_" -msgstr "" +msgstr "`Galerie générée par Sphinx-Gallery `_" diff --git a/doc/locale/fr/LC_MESSAGES/auto_examples/features/datetime_signals.po b/doc/locale/fr/LC_MESSAGES/auto_examples/features/datetime_signals.po index 07eb61a..ce1a69f 100644 --- a/doc/locale/fr/LC_MESSAGES/auto_examples/features/datetime_signals.po +++ b/doc/locale/fr/LC_MESSAGES/auto_examples/features/datetime_signals.po @@ -55,7 +55,7 @@ msgid "The most common way to create datetime signals is from Python datetime ob msgstr "La façon la plus courante de créer des signaux datetime est à partir d'objets datetime Python. Cela est utile lorsque vous avez des horodatages provenant de capteurs, de journaux ou d'autres données de séries temporelles." msgid "Qt widget 1" -msgstr "" +msgstr "Qt widget 1" msgid "Creating datetime signals from string timestamps" msgstr "Création de signaux datetime à partir d'horodatages sous forme de chaînes" @@ -100,13 +100,13 @@ msgid "The time unit is stored in the signal's `xunit` attribute, making it easy msgstr "L'unité de temps est stockée dans l'attribut `xunit` du signal, ce qui facilite l'accès et assure la cohérence avec les autres métadonnées du signal. La prise en charge des datetime fait de Sigima un outil idéal pour l'analyse des séries temporelles, le traitement des données de capteurs et toute application nécessitant des informations temporelles lisibles par l'homme." msgid ":download:`Download Jupyter notebook: datetime_signals.ipynb `" -msgstr "" +msgstr ":download:`Télécharger le notebook Jupyter : datetime_signals.ipynb `" msgid ":download:`Download Python source code: datetime_signals.py `" -msgstr "" +msgstr ":download:`Télécharger le code source Python : datetime_signals.py `" msgid ":download:`Download zipped: datetime_signals.zip `" -msgstr "" +msgstr ":download:`Télécharger l'archive zip : datetime_signals.zip `" msgid "`Gallery generated by Sphinx-Gallery `_" -msgstr "" +msgstr "`Galerie générée par Sphinx-Gallery `_" diff --git a/doc/locale/fr/LC_MESSAGES/auto_examples/features/index.po b/doc/locale/fr/LC_MESSAGES/auto_examples/features/index.po index e700fe3..7d2c0f0 100644 --- a/doc/locale/fr/LC_MESSAGES/auto_examples/features/index.po +++ b/doc/locale/fr/LC_MESSAGES/auto_examples/features/index.po @@ -15,21 +15,20 @@ msgstr "" msgid "Various Features" msgstr "Fonctionnalités diverses" -msgid ":ref:`sphx_glr_auto_examples_features_convolution.py`" -msgstr "" +msgid ":doc:`/auto_examples/features/convolution`" +msgstr ":doc:`/auto_examples/features/convolution`" -msgid ":ref:`sphx_glr_auto_examples_features_datalab_client.py`" -msgstr "" +msgid ":doc:`/auto_examples/features/datalab_client`" +msgstr ":doc:`/auto_examples/features/datalab_client`" -msgid ":ref:`sphx_glr_auto_examples_features_datetime_signals.py`" -msgstr "" +msgid ":doc:`/auto_examples/features/datetime_signals`" +msgstr ":doc:`/auto_examples/features/datetime_signals`" -msgid ":ref:`sphx_glr_auto_examples_features_roi_grid.py`" -msgstr "" +msgid ":doc:`/auto_examples/features/roi_grid`" +msgstr ":doc:`/auto_examples/features/roi_grid`" -msgid ":ref:`sphx_glr_auto_examples_features_coordinate_systems.py`" -msgstr "" - -msgid ":ref:`sphx_glr_auto_examples_features_zero_padding.py`" -msgstr "" +msgid ":doc:`/auto_examples/features/coordinate_systems`" +msgstr ":doc:`/auto_examples/features/coordinate_systems`" +msgid ":doc:`/auto_examples/features/zero_padding`" +msgstr ":doc:`/auto_examples/features/zero_padding`" diff --git a/doc/locale/fr/LC_MESSAGES/auto_examples/features/roi_grid.po b/doc/locale/fr/LC_MESSAGES/auto_examples/features/roi_grid.po index 7d34aaf..c4b56d5 100644 --- a/doc/locale/fr/LC_MESSAGES/auto_examples/features/roi_grid.po +++ b/doc/locale/fr/LC_MESSAGES/auto_examples/features/roi_grid.po @@ -66,7 +66,7 @@ msgid "For clearer visualization of the ROI grid feature, we'll extract a 2×2 s msgstr "Pour une visualisation plus claire de la fonctionnalité de grille de ROI, nous extrairons une sous-région 2×2 du centre de la matrice complète 6×6 de spots." msgid "Qt widget 1" -msgstr "" +msgstr "Qt widget 1" msgid "Creating a basic grid of ROIs" msgstr "Création d'une grille de base de ROI" diff --git a/doc/locale/fr/LC_MESSAGES/auto_examples/features/zero_padding.po b/doc/locale/fr/LC_MESSAGES/auto_examples/features/zero_padding.po index 78e403a..13e1bfa 100644 --- a/doc/locale/fr/LC_MESSAGES/auto_examples/features/zero_padding.po +++ b/doc/locale/fr/LC_MESSAGES/auto_examples/features/zero_padding.po @@ -13,7 +13,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" msgid ":ref:`Go to the end ` to download the full example code." -msgstr "" +msgstr ":ref:`Aller à la fin ` pour télécharger le code complet de l'exemple." msgid "Zero Padding for FFT Enhancement" msgstr "Remplissage par zéro pour l'amélioration de la FFT" @@ -43,7 +43,7 @@ msgid "We create a simple cosine signal with a specific frequency." msgstr "Nous créons un simple signal cosinus avec une fréquence spécifique." msgid "Qt widget 1" -msgstr "" +msgstr "Qt widget 1" msgid "Zero-padding with \"next_pow2\" strategy" msgstr "Remplissage par zéro avec la stratégie \"next_pow2\"" @@ -106,13 +106,13 @@ msgid "``\"both\"``: Split zeros between beginning and end" msgstr "``\"both\"`` : Répartir les zéros entre le début et la fin" msgid ":download:`Download Jupyter notebook: zero_padding.ipynb `" -msgstr "" +msgstr ":download:`Télécharger le notebook Jupyter : zero_padding.ipynb `" msgid ":download:`Download Python source code: zero_padding.py `" -msgstr "" +msgstr ":download:`Télécharger le code source Python : zero_padding.py `" msgid ":download:`Download zipped: zero_padding.zip `" -msgstr "" +msgstr ":download:`Télécharger l'archive : zero_padding.zip `" msgid "`Gallery generated by Sphinx-Gallery `_" msgstr "`Galerie générée par Sphinx-Gallery `_" diff --git a/doc/locale/fr/LC_MESSAGES/auto_examples/getting_started/image_creation.po b/doc/locale/fr/LC_MESSAGES/auto_examples/getting_started/image_creation.po index a15e808..fcafc84 100644 --- a/doc/locale/fr/LC_MESSAGES/auto_examples/getting_started/image_creation.po +++ b/doc/locale/fr/LC_MESSAGES/auto_examples/getting_started/image_creation.po @@ -67,7 +67,7 @@ msgid "Blank images: Zeros" msgstr "Images vierges : zéros" msgid "Qt widget 1" -msgstr "" +msgstr "Qt widget 1" msgid "Method 2: Loading images from files" msgstr "Méthode 2 : Chargement d'images depuis des fichiers" @@ -91,7 +91,7 @@ msgid "Text formats: CSV, TXT, ASC (with coordinate support)" msgstr "Formats texte : CSV, TXT, ASC (avec prise en charge des coordonnées)" msgid "Method 3: Creating images from NumPy arrays" -msgstr "" +msgstr "Méthode 3 : Création d'images à partir de tableaux NumPy" msgid "Convert existing NumPy arrays into Sigima image objects to add metadata, coordinate systems, and enable advanced processing." msgstr "Convertir les tableaux NumPy existants en objets image Sigima pour ajouter des métadonnées, des systèmes de coordonnées et activer le traitement avancé." diff --git a/doc/locale/fr/LC_MESSAGES/auto_examples/getting_started/index.po b/doc/locale/fr/LC_MESSAGES/auto_examples/getting_started/index.po index 516b65e..e4afcc6 100644 --- a/doc/locale/fr/LC_MESSAGES/auto_examples/getting_started/index.po +++ b/doc/locale/fr/LC_MESSAGES/auto_examples/getting_started/index.po @@ -15,8 +15,8 @@ msgstr "" msgid "Getting Started" msgstr "Premiers pas" -msgid ":ref:`sphx_glr_auto_examples_getting_started_image_creation.py`" -msgstr "" +msgid ":doc:`/auto_examples/getting_started/image_creation`" +msgstr ":doc:`/auto_examples/getting_started/image_creation`" -msgid ":ref:`sphx_glr_auto_examples_getting_started_signal_creation.py`" -msgstr "" +msgid ":doc:`/auto_examples/getting_started/signal_creation`" +msgstr ":doc:`/auto_examples/getting_started/signal_creation`" diff --git a/doc/locale/fr/LC_MESSAGES/auto_examples/getting_started/signal_creation.po b/doc/locale/fr/LC_MESSAGES/auto_examples/getting_started/signal_creation.po index fa66db1..e0cf4de 100644 --- a/doc/locale/fr/LC_MESSAGES/auto_examples/getting_started/signal_creation.po +++ b/doc/locale/fr/LC_MESSAGES/auto_examples/getting_started/signal_creation.po @@ -70,7 +70,7 @@ msgid "Special functions: Planck (blackbody), Linear chirp, Step, Exponential" msgstr "Fonctions spéciales : Planck (corps noir), chirp linéaire, échelon, exponentielle" msgid "Qt widget 1" -msgstr "" +msgstr "Qt widget 1" msgid "Method 2: Loading signals from files" msgstr "Méthode 2 : Chargement de signaux depuis des fichiers" @@ -91,7 +91,7 @@ msgid "Specialized: MCA spectrum files (.mca), FT-Lab (.sig)" msgstr "Spécialisés : fichiers de spectre MCA (.mca), FT-Lab (.sig)" msgid "Qt widget 2" -msgstr "" +msgstr "Qt widget 2" msgid "It is interesting to remark here that when importing data from files, Sigima automatically extracts and preserves metadata when possible. This includes:" msgstr "Il est intéressant de noter ici que lors de l'importation de données depuis des fichiers, Sigima extrait et préserve automatiquement les métadonnées lorsque c'est possible. Cela inclut :" diff --git a/doc/locale/fr/LC_MESSAGES/auto_examples/index.po b/doc/locale/fr/LC_MESSAGES/auto_examples/index.po index 0602800..1973130 100644 --- a/doc/locale/fr/LC_MESSAGES/auto_examples/index.po +++ b/doc/locale/fr/LC_MESSAGES/auto_examples/index.po @@ -27,47 +27,47 @@ msgstr "Ces exemples sont générés automatiquement lors de la construction de msgid "Getting Started" msgstr "Premiers pas" -msgid ":ref:`sphx_glr_auto_examples_getting_started_image_creation.py`" -msgstr "" +msgid ":doc:`/auto_examples/getting_started/image_creation`" +msgstr ":doc:`/auto_examples/getting_started/image_creation`" -msgid ":ref:`sphx_glr_auto_examples_getting_started_signal_creation.py`" -msgstr "" +msgid ":doc:`/auto_examples/getting_started/signal_creation`" +msgstr ":doc:`/auto_examples/getting_started/signal_creation`" msgid "Use Cases" msgstr "Cas d'usage" -msgid ":ref:`sphx_glr_auto_examples_use_cases_blob_detection.py`" -msgstr "" +msgid ":doc:`/auto_examples/use_cases/blob_detection`" +msgstr ":doc:`/auto_examples/use_cases/blob_detection`" -msgid ":ref:`sphx_glr_auto_examples_use_cases_fabry_perot.py`" -msgstr "" +msgid ":doc:`/auto_examples/use_cases/fabry_perot`" +msgstr ":doc:`/auto_examples/use_cases/fabry_perot`" -msgid ":ref:`sphx_glr_auto_examples_use_cases_laser_beam.py`" -msgstr "" +msgid ":doc:`/auto_examples/use_cases/laser_beam`" +msgstr ":doc:`/auto_examples/use_cases/laser_beam`" -msgid ":ref:`sphx_glr_auto_examples_use_cases_spectrum_analysis.py`" -msgstr "" +msgid ":doc:`/auto_examples/use_cases/spectrum_analysis`" +msgstr ":doc:`/auto_examples/use_cases/spectrum_analysis`" msgid "Various Features" msgstr "Fonctionnalités diverses" -msgid ":ref:`sphx_glr_auto_examples_features_convolution.py`" -msgstr "" +msgid ":doc:`/auto_examples/features/convolution`" +msgstr ":doc:`/auto_examples/features/convolution`" -msgid ":ref:`sphx_glr_auto_examples_features_datalab_client.py`" -msgstr "" +msgid ":doc:`/auto_examples/features/datalab_client`" +msgstr ":doc:`/auto_examples/features/datalab_client`" -msgid ":ref:`sphx_glr_auto_examples_features_datetime_signals.py`" -msgstr "" +msgid ":doc:`/auto_examples/features/datetime_signals`" +msgstr ":doc:`/auto_examples/features/datetime_signals`" -msgid ":ref:`sphx_glr_auto_examples_features_roi_grid.py`" -msgstr "" +msgid ":doc:`/auto_examples/features/roi_grid`" +msgstr ":doc:`/auto_examples/features/roi_grid`" -msgid ":ref:`sphx_glr_auto_examples_features_coordinate_systems.py`" -msgstr "" +msgid ":doc:`/auto_examples/features/coordinate_systems`" +msgstr ":doc:`/auto_examples/features/coordinate_systems`" -msgid ":ref:`sphx_glr_auto_examples_features_zero_padding.py`" -msgstr "" +msgid ":doc:`/auto_examples/features/zero_padding`" +msgstr ":doc:`/auto_examples/features/zero_padding`" msgid "`Gallery generated by Sphinx-Gallery `_" msgstr "`Galerie générée par Sphinx-Gallery `_" diff --git a/doc/locale/fr/LC_MESSAGES/auto_examples/use_cases/blob_detection.po b/doc/locale/fr/LC_MESSAGES/auto_examples/use_cases/blob_detection.po index 8ef4ba8..6f5cd3a 100644 --- a/doc/locale/fr/LC_MESSAGES/auto_examples/use_cases/blob_detection.po +++ b/doc/locale/fr/LC_MESSAGES/auto_examples/use_cases/blob_detection.po @@ -45,7 +45,7 @@ msgid "We wrapped a simple function to do perform visualizations tasks required msgstr "On a encapsulé une fonction simple pour réaliser les visualisations nécessaires à ce tutoriel et aux autres, afin de limiter l'impact du code lié à l'interface graphique dans la documentation et de vous laisser vous concentrer sur l'analyse." msgid "Qt widget 1" -msgstr "" +msgstr "Qt widget 1" msgid "Image preprocessing - Binning" msgstr "Prétraitement d'image - binning" diff --git a/doc/locale/fr/LC_MESSAGES/auto_examples/use_cases/convolution.po b/doc/locale/fr/LC_MESSAGES/auto_examples/use_cases/convolution.po index f71971c..5bef0d2 100644 --- a/doc/locale/fr/LC_MESSAGES/auto_examples/use_cases/convolution.po +++ b/doc/locale/fr/LC_MESSAGES/auto_examples/use_cases/convolution.po @@ -13,101 +13,100 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" msgid ":ref:`Go to the end ` to download the full example code." -msgstr "" +msgstr ":ref:`Aller à la fin ` pour télécharger le code complet de l'exemple." msgid "Image Blurring and Sharpening with Convolution" -msgstr "" +msgstr "Flou et netteté d'image avec convolution" msgid "This example demonstrates the image convolution and deconvolution features available in Sigima, showing various kernels and their effects on images. Each section builds upon the previous one to create a comprehensive understanding of convolution operations." -msgstr "" +msgstr "Cet exemple illustre les fonctionnalités de convolution et de déconvolution d'images disponibles dans Sigima, en montrant divers noyaux et leurs effets sur les images. Chaque section s'appuie sur la précédente pour créer une compréhension complète des opérations de convolution." msgid "The example shows:" -msgstr "" +msgstr "L'exemple montre :" msgid "Creating test images and kernels" -msgstr "" +msgstr "Création d'images de test et de noyaux" msgid "Basic convolution with Gaussian kernel" -msgstr "" +msgstr "Convolution de base avec un noyau gaussien" msgid "Identity convolution (preserving original image)" -msgstr "" +msgstr "Convolution identité (préservation de l'image originale)" msgid "Deconvolution operations" -msgstr "" +msgstr "Opérations de déconvolution" msgid "Effects of different kernel parameters" -msgstr "" +msgstr "Effets de différents paramètres de noyau" msgid "Custom edge detection and sharpening kernels" -msgstr "" +msgstr "Noyaux personnalisés pour la détection de contours et le renforcement" msgid "This tutorial uses PlotPy for visualization, providing interactive plots that allow you to explore the convolution results in detail." -msgstr "" +msgstr "Ce tutoriel utilise PlotPy pour la visualisation, offrant des graphiques interactifs qui permettent d'explorer en détail les résultats de la convolution." msgid "Importing necessary modules" -msgstr "" +msgstr "Importation des modules nécessaires" msgid "We'll start by importing all the required modules for image processing and visualization." -msgstr "" +msgstr "Nous commençons par importer tous les modules nécessaires au traitement d'image et à la visualisation." msgid "We start by creating a test image and various convolution kernels." -msgstr "" +msgstr "Nous commençons par créer une image de test et divers noyaux de convolution." msgid "Qt widget 1" -msgstr "" +msgstr "Qt widget 1" msgid "Now we'll perform convolution with the Gaussian kernel and compare the result with scipy's implementation to verify correctness." -msgstr "" +msgstr "Nous allons maintenant effectuer une convolution avec le noyau gaussien et comparer le résultat avec l'implémentation de scipy pour vérifier la précision." msgid "Identity convolution" -msgstr "" +msgstr "Convolution identité" msgid "Identity convolution should preserve the original image exactly. This demonstrates that our convolution implementation is working correctly." -msgstr "" +msgstr "La convolution identité doit préserver exactement l'image originale. Cela démontre que notre implémentation de la convolution fonctionne correctement." msgid "Deconvolution with identity kernel" -msgstr "" +msgstr "Déconvolution avec noyau identité" msgid "Deconvolution is the inverse operation of convolution. We'll start with a simple case using the identity kernel." -msgstr "" +msgstr "La déconvolution est l'opération inverse de la convolution. Nous commençons par un cas simple utilisant le noyau identité." msgid "Advanced deconvolution with Gaussian kernel" -msgstr "" +msgstr "Déconvolution avancée avec noyau gaussien" msgid "Now we'll try deconvolution with a Gaussian kernel, which is more challenging and demonstrates the limitations of deconvolution." -msgstr "" +msgstr "Nous allons maintenant essayer la déconvolution avec un noyau gaussien, ce qui est plus complexe et montre les limites de la déconvolution." msgid "Exploring different kernel parameters" -msgstr "" +msgstr "Exploration de différents paramètres de noyau" msgid "Different sigma values in Gaussian kernels produce different blurring effects. Let's compare several sigma values side by side." -msgstr "" +msgstr "Différentes valeurs de sigma dans les noyaux gaussiens produisent différents effets de flou. Comparons plusieurs valeurs de sigma côte à côte." msgid "Qt widget 2" -msgstr "" +msgstr "Qt widget 2" msgid "Custom convolution kernels" -msgstr "" +msgstr "Noyaux de convolution personnalisés " msgid "Besides Gaussian kernels, we can create custom kernels for specific image processing tasks like edge detection and sharpening." -msgstr "" +msgstr "En plus des noyaux gaussiens, nous pouvons créer des noyaux personnalisés pour des tâches spécifiques de traitement d'image telles que la détection de contours et le renforcement." msgid "Summary and conclusions" -msgstr "" +msgstr "Résumé et conclusions" msgid "This tutorial demonstrated the key concepts of convolution and deconvolution in image processing using Sigima." -msgstr "" +msgstr "Ce tutoriel a démontré les concepts clés de la convolution et de la déconvolution dans le traitement d'image en utilisant Sigima." msgid ":download:`Download Jupyter notebook: convolution.ipynb `" -msgstr "" +msgstr ":download:`Télécharger le notebook Jupyter : convolution.ipynb `" msgid ":download:`Download Python source code: convolution.py `" -msgstr "" +msgstr ":download:`Télécharger le code source Python : convolution.py `" msgid ":download:`Download zipped: convolution.zip `" -msgstr "" +msgstr ":download:`Télécharger le fichier compressé : convolution.zip `" msgid "`Gallery generated by Sphinx-Gallery `_" -msgstr "" - +msgstr "`Galerie générée par Sphinx-Gallery `_" diff --git a/doc/locale/fr/LC_MESSAGES/auto_examples/use_cases/fabry_perot.po b/doc/locale/fr/LC_MESSAGES/auto_examples/use_cases/fabry_perot.po index 0113239..c609d90 100644 --- a/doc/locale/fr/LC_MESSAGES/auto_examples/use_cases/fabry_perot.po +++ b/doc/locale/fr/LC_MESSAGES/auto_examples/use_cases/fabry_perot.po @@ -25,7 +25,7 @@ msgid "Usage:" msgstr "Utilisation :" msgid "python fabry_perot_example.py" -msgstr "" +msgstr "python fabry_perot_example.py" msgid "The script demonstrates optical analysis workflows commonly used in interferometry, optical metrology, and precision measurements." msgstr "Ce script illustre des flux d'analyse optique couramment utilisés en interférométrie, en métrologie optique et en mesures de précision." @@ -43,7 +43,7 @@ msgid "We load two sample image of Fabry-Perot interference patterns. These imag msgstr "On charge deux images d'exemple de franges d'interférence de Fabry-Perot. Elles sont fournies avec les données de test de Sigima. On analysera les franges d'interférence présentes dans ces images." msgid "Qt widget 1" -msgstr "" +msgstr "Qt widget 1" msgid "Define circular ROI for fringe analysis" msgstr "Définir une ROI circulaire pour l'analyse des franges" diff --git a/doc/locale/fr/LC_MESSAGES/auto_examples/use_cases/index.po b/doc/locale/fr/LC_MESSAGES/auto_examples/use_cases/index.po index 4c39986..a18a4d9 100644 --- a/doc/locale/fr/LC_MESSAGES/auto_examples/use_cases/index.po +++ b/doc/locale/fr/LC_MESSAGES/auto_examples/use_cases/index.po @@ -15,15 +15,14 @@ msgstr "" msgid "Use Cases" msgstr "Cas d'usage" -msgid ":ref:`sphx_glr_auto_examples_use_cases_blob_detection.py`" -msgstr "" +msgid ":doc:`/auto_examples/use_cases/blob_detection`" +msgstr ":doc:`/auto_examples/use_cases/blob_detection`" -msgid ":ref:`sphx_glr_auto_examples_use_cases_fabry_perot.py`" -msgstr "" +msgid ":doc:`/auto_examples/use_cases/fabry_perot`" +msgstr ":doc:`/auto_examples/use_cases/fabry_perot`" -msgid ":ref:`sphx_glr_auto_examples_use_cases_laser_beam.py`" -msgstr "" - -msgid ":ref:`sphx_glr_auto_examples_use_cases_spectrum_analysis.py`" -msgstr "" +msgid ":doc:`/auto_examples/use_cases/laser_beam`" +msgstr ":doc:`/auto_examples/use_cases/laser_beam`" +msgid ":doc:`/auto_examples/use_cases/spectrum_analysis`" +msgstr ":doc:`/auto_examples/use_cases/spectrum_analysis`" diff --git a/doc/locale/fr/LC_MESSAGES/auto_examples/use_cases/laser_beam.po b/doc/locale/fr/LC_MESSAGES/auto_examples/use_cases/laser_beam.po index 30a22fd..e64ccc7 100644 --- a/doc/locale/fr/LC_MESSAGES/auto_examples/use_cases/laser_beam.po +++ b/doc/locale/fr/LC_MESSAGES/auto_examples/use_cases/laser_beam.po @@ -40,7 +40,7 @@ msgid "Visualize the first few images" msgstr "Visualiser les premières images" msgid "Qt widget 1" -msgstr "" +msgstr "Qt widget 1" msgid "Background noise analysis with histogram" msgstr "Analyser le bruit de fond avec un histogramme" @@ -122,4 +122,3 @@ msgstr ":download:`Télécharger l'archive zip : laser_beam.zip `_" msgstr "`Galerie générée par Sphinx-Gallery `_" - diff --git a/doc/locale/fr/LC_MESSAGES/auto_examples/use_cases/spectrum_analysis.po b/doc/locale/fr/LC_MESSAGES/auto_examples/use_cases/spectrum_analysis.po index 512620d..e51dd2e 100644 --- a/doc/locale/fr/LC_MESSAGES/auto_examples/use_cases/spectrum_analysis.po +++ b/doc/locale/fr/LC_MESSAGES/auto_examples/use_cases/spectrum_analysis.po @@ -36,7 +36,7 @@ msgid "We load a sample paracetamol spectrum included in the Sigima test data. T msgstr "On charge un spectre de paracétamol fourni dans les données de test de Sigima. Ce spectre contient des pics d'absorption caractéristiques que l'on analyse à l'aide de différentes techniques de traitement du signal." msgid "Qt widget 1" -msgstr "" +msgstr "Qt widget 1" msgid "Apply Wiener filter for noise reduction" msgstr "Appliquer un filtre de Wiener pour réduire le bruit" diff --git a/doc/locale/fr/LC_MESSAGES/contributing/environment.po b/doc/locale/fr/LC_MESSAGES/contributing/environment.po index 28520e0..3ae32be 100644 --- a/doc/locale/fr/LC_MESSAGES/contributing/environment.po +++ b/doc/locale/fr/LC_MESSAGES/contributing/environment.po @@ -133,37 +133,37 @@ msgid "WinPython version" msgstr "Version de WinPython" msgid "3.9" -msgstr "" +msgstr "3.9" msgid "OK" -msgstr "" +msgstr "OK" msgid "3.9.10.0" -msgstr "" +msgstr "3.9.10.0" msgid "3.10" -msgstr "" +msgstr "3.10" msgid "3.10.11.1" -msgstr "" +msgstr "3.10.11.1" msgid "3.11" -msgstr "" +msgstr "3.11" msgid "3.11.5.0" -msgstr "" +msgstr "3.11.5.0" msgid "3.12" -msgstr "" +msgstr "3.12" msgid "3.12.3.0" -msgstr "" +msgstr "3.12.3.0" msgid "3.13" -msgstr "" +msgstr "3.13" msgid "3.13.2.0" -msgstr "" +msgstr "3.13.2.0" msgid "⚠ We strongly recommend using the `.dot` versions of WinPython which are lightweight and can be customized to your needs (using `pip install -r requirements.txt`)." msgstr "⚠ Nous recommandons fortement d'utiliser les versions `.dot` de WinPython qui sont légères et peuvent être personnalisées selon vos besoins (en utilisant `pip install -r requirements.txt`)." @@ -214,19 +214,19 @@ msgid "Software" msgstr "Logiciel" msgid "[gettext](https://mlocati.github.io/articles/gettext-iconv-windows.html)" -msgstr "" +msgstr "[gettext](https://mlocati.github.io/articles/gettext-iconv-windows.html)" msgid "Translations" msgstr "Traductions" msgid "[Git](https://git-scm.com/)" -msgstr "" +msgstr "[Git](https://git-scm.com/)" msgid "Version control system" msgstr "Système de contrôle de version" msgid "[ImageMagick](https://imagemagick.org/)" -msgstr "" +msgstr "[ImageMagick](https://imagemagick.org/)" msgid "Image manipulation utilities" msgstr "Utilitaires de manipulation d'images" diff --git a/doc/locale/fr/LC_MESSAGES/release_notes/release_0.01.po b/doc/locale/fr/LC_MESSAGES/release_notes/release_0.01.po index 5a0680a..6beb897 100644 --- a/doc/locale/fr/LC_MESSAGES/release_notes/release_0.01.po +++ b/doc/locale/fr/LC_MESSAGES/release_notes/release_0.01.po @@ -13,7 +13,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" msgid "Version 0.1" -msgstr "" +msgstr "Version 0.1" msgid "Sigima Version 0.1.0 (2025-07-06)" msgstr "Sigima Version 0.1.0 (06/07/2025)" diff --git a/doc/locale/fr/LC_MESSAGES/release_notes/release_0.02.po b/doc/locale/fr/LC_MESSAGES/release_notes/release_0.02.po index 35502b2..096a979 100644 --- a/doc/locale/fr/LC_MESSAGES/release_notes/release_0.02.po +++ b/doc/locale/fr/LC_MESSAGES/release_notes/release_0.02.po @@ -13,7 +13,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" msgid "Version 0.2" -msgstr "" +msgstr "Version 0.2" msgid "Sigima Version 0.2.0 (2025-07-07)" msgstr "Sigima Version 0.2.0 (07/07/2025)" diff --git a/doc/locale/fr/LC_MESSAGES/release_notes/release_1.00.po b/doc/locale/fr/LC_MESSAGES/release_notes/release_1.00.po index b6d7af1..47bcde1 100644 --- a/doc/locale/fr/LC_MESSAGES/release_notes/release_1.00.po +++ b/doc/locale/fr/LC_MESSAGES/release_notes/release_1.00.po @@ -13,10 +13,10 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" msgid "Version 1.0" -msgstr "" +msgstr "Version 1.0" msgid "Sigima Version 1.0.6" -msgstr "" +msgstr "Sigima Version 1.0.6" msgid "🛠️ Bug fixes:" msgstr "🛠️ Correctifs :" @@ -91,7 +91,7 @@ msgid "Enhanced workflow dispatch with configurable job selection for flexible t msgstr "Amélioration du workflow de déclenchement avec une sélection de jobs configurable pour des scénarios de test flexibles" msgid "Sigima Version 1.0.5 (2025-12-19)" -msgstr "" +msgstr "Sigima Version 1.0.5 (19/12/2025)" msgid "ℹ️ This is a hotfix release addressing a packaging issue where French translations were missing from the previous release package. This release contains no functional changes compared to version 1.0.4 - it only ensures that the compiled translation files (.mo) are properly included in the distribution package." msgstr "ℹ️ Ceci est une version corrective qui résout un problème d'emballage où les traductions françaises manquaient dans le package de la version précédente. Cette version ne contient aucun changement fonctionnel par rapport à la version 1.0.4 - elle garantit uniquement que les fichiers de traduction compilés (.mo) sont correctement inclus dans le package de distribution." @@ -109,7 +109,7 @@ msgid "No functional code changes - this is purely a packaging fix to restore in msgstr "Aucun changement de code fonctionnel - il s'agit purement d'une correction d'emballage pour restaurer la prise en charge de l'internationalisation" msgid "Sigima Version 1.0.4 (2025-12-18)" -msgstr "" +msgstr "Sigima Version 1.0.4 (18/12/2025)" msgid "**Image processing: LUT range incorrectly copied to result**: Fixed processed images showing incorrect contrast because LUT range was copied from original" msgstr "**Traitement d'image : plage LUT copiée incorrectement dans le résultat** : Correction des images traitées affichant un contraste incorrect car la plage LUT a été copiée de l'original" @@ -250,19 +250,19 @@ msgid "Created new example `doc/examples/features/zero_padding.py` demonstrating msgstr "Création d'un nouvel exemple `doc/examples/features/zero_padding.py` démontrant l'initialisation correcte des paramètres" msgid "**New ROI grid example**: Added example demonstrating the grid ROI feature" -msgstr "" +msgstr "**Nouvel exemple de grille ROI** : Ajout d'un exemple démontrant la fonctionnalité de grille ROI" msgid "Introduced `laser_spot_array.png` test image (6×6 laser spot array) to help debug an issue reported in DataLab" -msgstr "" +msgstr "Introduction de l'image de test `laser_spot_array.png` (grille de points laser 6×6) pour aider à déboguer un problème signalé dans DataLab" msgid "Created new example `doc/examples/features/roi_grid.py` showcasing the `generate_image_grid_roi()` function" msgstr "Création d'un nouvel exemple `doc/examples/features/roi_grid.py` démontrant la fonction `generate_image_grid_roi()`" msgid "Example covers: loading images, extracting sub-regions, generating ROI grids, configuring size/translation/step parameters, understanding direction labels, and extracting individual spots" -msgstr "" +msgstr "L'exemple couvre : le chargement des images, l'extraction des sous-régions, la génération de grilles ROI, la configuration des paramètres de taille/traduction/pas, la compréhension des étiquettes de direction et l'extraction des points individuels" msgid "Sigima Version 1.0.3 (2025-12-03)" -msgstr "" +msgstr "Sigima Version 1.0.3 (03/12/2025)" msgid "**Signal data type validation**: Fixed integer arrays not being automatically converted to float64" msgstr "**Validation du type de données du signal** : Correction des tableaux entiers qui n'étaient pas automatiquement convertis en float64" @@ -346,7 +346,7 @@ msgid "This closes [Issue #1](https://github.com/DataLab-Platform/Sigima/issues/ msgstr "Ceci clôture [Issue #1](https://github.com/DataLab-Platform/Sigima/issues/1) - `ValueError` lors du calcul des statistiques sur ROI s'étendant au-delà des limites de l'image" msgid "Sigima Version 1.0.2 (2025-11-12)" -msgstr "" +msgstr "Sigima Version 1.0.2 (12/11/2025)" msgid "✨ New features and enhancements:" msgstr "✨ Nouvelles fonctionnalités et améliorations:" @@ -442,7 +442,7 @@ msgid "Made `BaseObj.roi_has_changed` method private (by renaming to `BaseObj.__ msgstr "La méthode `BaseObj.roi_has_changed` a été rendue privée (en la renommant en `BaseObj.__roi_has_changed`) pour éviter une utilisation externe accidentelle. Cela interférerait avec le mécanisme interne de rafraîchissement des masques qui repose sur un accès contrôlé à cette méthode. La méthode ne fait pas partie de l'API publique et ne doit pas être appelée directement par les applications." msgid "Sigima Version 1.0.1 (2025-11-05)" -msgstr "" +msgstr "Sigima Version 1.0.1 (05/11/2025)" msgid "**Detection ROI creation**: Generic mechanism for ROI creation across all detection functions" msgstr "**Création de ROI de détection** : Mécanisme générique de création de ROI pour toutes les fonctions de détection" @@ -682,7 +682,7 @@ msgid "Added comprehensive unit tests covering all ROI types (rectangular, circu msgstr "Ajout de tests unitaires complets couvrant tous les types de ROI (rectangulaire, circulaire, polygonal) et les cas limites" msgid "Sigima Version 1.0.0 (2025-10-28)" -msgstr "" +msgstr "Sigima Version 1.0.0 (28/10/2025)" msgid "**Signals to image conversion**: New feature to combine multiple signals into a 2D image" msgstr "**Conversion de signaux en image** : Nouvelle fonctionnalité pour combiner plusieurs signaux en une image 2D" diff --git a/doc/locale/fr/LC_MESSAGES/release_notes/release_1.01.po b/doc/locale/fr/LC_MESSAGES/release_notes/release_1.01.po index 143e225..08e8ea6 100644 --- a/doc/locale/fr/LC_MESSAGES/release_notes/release_1.01.po +++ b/doc/locale/fr/LC_MESSAGES/release_notes/release_1.01.po @@ -15,6 +15,56 @@ msgstr "" msgid "Version 1.1" msgstr "Version 1.1" +#, fuzzy +msgid "Sigima Version 1.1.3" +msgstr "Sigima Version 1.1.0 (31/01/2026)" + +#, fuzzy +msgid "🛠️ Bug Fixes since version 1.1.2" +msgstr "🛠️ Corrections de bugs depuis la version 1.1.1" + +msgid "**Ellipse/circle contour detection**: Fixed swapped X/Y coordinates when using scikit-image ≥ 0.26.0. This closes [Issue #21](https://github.com/DataLab-Platform/Sigima/issues/21)." +msgstr "**Détection de contours d'ellipse/cercle** : Correction des coordonnées X/Y inversées lors de l'utilisation de scikit-image ≥ 0.26.0. Cela clôt [Issue #21](https://github.com/DataLab-Platform/Sigima/issues/21)." + +msgid "The new `EllipseModel`/`CircleModel` API returns center coordinates as `(row, col)` but the code was treating them as `(x, y)`, causing detected ellipses and circles to appear at wrong positions on the image" +msgstr "La nouvelle API `EllipseModel`/`CircleModel` renvoie les coordonnées du centre sous forme de `(row, col)`, mais le code les traitait comme `(x, y)`, ce qui faisait apparaître les ellipses et les cercles détectés à des positions incorrectes sur l'image" + +msgid "Semi-axis lengths were also swapped for ellipses, resulting in incorrect aspect ratios" +msgstr "Les longueurs des demi-axes étaient également inversées pour les ellipses, entraînant des rapports d'aspect incorrects" + +msgid "This bug only affected scikit-image ≥ 0.26.0; older versions were handled correctly" +msgstr "Ce bogue n'affectait que scikit-image ≥ 0.26.0 ; les versions plus anciennes étaient correctement gérées" + +msgid "**Ellipse visualization**: Fixed incorrect minor axis direction in `ellipse_to_diameters` coordinate conversion" +msgstr "**Visualisation des ellipses** : Correction de la direction incorrecte de l'axe mineur dans la conversion des coordonnées `ellipse_to_diameters`" + +msgid "The minor axis endpoints were computed with a wrong sign, making the minor axis non-perpendicular to the major axis for rotated ellipses (e.g., at θ=45° both axes pointed in the same direction). This caused distorted ellipse overlays in DataLab when displaying detected or annotated ellipses at non-trivial rotation angles" +msgstr "Les extrémités de l'axe mineur étaient calculées avec un signe incorrect, rendant l'axe mineur non perpendiculaire à l'axe majeur pour les ellipses tournées (par exemple, à θ=45° les deux axes pointaient dans la même direction). Cela provoquait des superpositions d'ellipses déformées dans DataLab lors de l'affichage d'ellipses détectées ou annotées à des angles de rotation non triviaux" + +msgid "**Circle/ellipse detection with calibrated images**: Fixed radius and semi-axes not being converted from pixel units to physical units" +msgstr "**Détection de cercles/ellipses avec des images calibrées** : Correction du rayon et des demi-axes qui n'étaient pas convertis des unités de pixels aux unités physiques" + +msgid "When an image had non-default pixel calibration (e.g., dx=2 mm/pixel), center coordinates were correctly converted to physical units but the radius and semi-axes remained in pixels, causing values to be wrong by a factor equal to the pixel size" +msgstr "Lorsque une image avait une calibration de pixels non par défaut (par exemple, dx=2 mm/pixel), les coordonnées du centre étaient correctement converties en unités physiques, mais le rayon et les demi-axes restaient en pixels, ce qui entraînait des valeurs incorrectes par un facteur égal à la taille du pixel" + +msgid "**Custom signal XY preservation**: Fixed user-edited XY values being silently discarded when regenerating a custom signal from its creation parameters. `generate_1d_data()` now initializes the XY array only on first use and preserves user-edited contents on subsequent calls. This closes [Issue #25](https://github.com/DataLab-Platform/Sigima/issues/25)." +msgstr "Signaux personnalisés : Correction de la suppression silencieuse des valeurs XY modifiées par l'utilisateur lors de la régénération d'un signal personnalisé à partir de ses paramètres de création. `generate_1d_data()` initialise désormais le tableau XY uniquement lors de la première utilisation et préserve les contenus modifiés par l'utilisateur lors des appels suivants. Cela clôt [Issue #25](https://github.com/DataLab-Platform/Sigima/issues/25)." + +msgid "🔧 Other changes since version 1.1.2" +msgstr "🔧 Autres changements depuis la version 1.1.2" + +msgid "**Debug environment variable**: Renamed the test debug environment variable from `DEBUG` to `SIGIMA_DEBUG` to avoid collisions with unrelated tools and frameworks that commonly export a bare `DEBUG` variable. This closes [Issue #19](https://github.com/DataLab-Platform/Sigima/issues/19)." +msgstr "**Variable d'environnement de débogage** : Renommage de la variable d'environnement de débogage de test de `DEBUG` à `SIGIMA_DEBUG` pour éviter les collisions avec des outils et frameworks non liés qui exportent couramment une variable `DEBUG` seule. Cela clôt [Issue #19](https://github.com/DataLab-Platform/Sigima/issues/19)." + +msgid "**Remote control client**: Added `get_current_object_uuid()` method to `SimpleRemoteProxy` and `SimpleAbstractDLControl`, allowing users to retrieve the UUID of the currently selected object in DataLab" +msgstr "**Client de contrôle à distance** : Ajout de la méthode `get_current_object_uuid()` à `SimpleRemoteProxy` et `SimpleAbstractDLControl`, permettant aux utilisateurs de récupérer l'UUID de l'objet actuellement sélectionné dans DataLab" + +msgid "🧪 Tests" +msgstr "🧪 Tests" + +msgid "**Non-uniform image coordinates**: Strengthened test coverage for images with non-uniform (irregularly spaced) X/Y coordinates, closing the remaining gaps in coordinate-mode switching, geometry operations and coordinated-text reading. This closes [Issue #24](https://github.com/DataLab-Platform/Sigima/issues/24)." +msgstr "**Coordonnées d'image non uniformes** : Renforcement de la couverture de tests pour les images à coordonnées X/Y non uniformes (espacement irrégulier), comblant les dernières lacunes concernant le changement de mode de coordonnées, les opérations géométriques et la lecture du format texte coordonné. Ceci clôt l'[Issue #24](https://github.com/DataLab-Platform/Sigima/issues/24)." + msgid "Sigima Version 1.1.2 (2026-04-20)" msgstr "Sigima Version 1.1.2 (20/04/2026)" @@ -250,12 +300,6 @@ msgstr "Mise à jour de toutes les fonctions de test interactives pour utiliser msgid "Improved code consistency across signal and image test modules" msgstr "Amélioration de la cohérence du code entre les modules de test de signaux et d'images" -msgid "🧪 Tests" -msgstr "🧪 Tests" - -msgid "**Non-uniform image coordinates**: Strengthened test coverage for images with non-uniform (irregularly spaced) X/Y coordinates, closing the remaining gaps in coordinate-mode switching, geometry operations and coordinated-text reading. This closes [Issue #24](https://github.com/DataLab-Platform/Sigima/issues/24)." -msgstr "**Coordonnées d'image non uniformes** : Renforcement de la couverture de tests pour les images à coordonnées X/Y non uniformes (espacement irrégulier), comblant les dernières lacunes concernant le changement de mode de coordonnées, les opérations géométriques et la lecture du format texte coordonné. Ceci clôt l'[Issue #24](https://github.com/DataLab-Platform/Sigima/issues/24)." - msgid "**Visualization backend flexibility**: Added support for Matplotlib as an alternative to PlotPy for test visualizations" msgstr "**Flexibilité du backend de visualisation** : Ajout de la prise en charge de Matplotlib comme alternative à PlotPy pour les visualisations de test" diff --git a/doc/locale/fr/LC_MESSAGES/requirements.po b/doc/locale/fr/LC_MESSAGES/requirements.po index a7be2e7..d468de2 100644 --- a/doc/locale/fr/LC_MESSAGES/requirements.po +++ b/doc/locale/fr/LC_MESSAGES/requirements.po @@ -28,7 +28,7 @@ msgid "Python" msgstr "Python" msgid ">=3.9, <4" -msgstr "" +msgstr ">=3.9, <4" msgid "Python programming language" msgstr "Langage de programmation Python" @@ -37,100 +37,100 @@ msgid "guidata" msgstr "guidata" msgid ">= 3.13" -msgstr "" +msgstr ">= 3.13" msgid "Automatic GUI generation for easy dataset editing and display" msgstr "Génération automatique d'interface graphique pour une édition et un affichage faciles des ensembles de données" msgid "NumPy" -msgstr "" +msgstr "NumPy" msgid ">= 1.22, < 2.5" -msgstr "" +msgstr ">= 1.22, < 2.5" msgid "Fundamental package for array computing in Python" msgstr "Paquet fondamental pour le calcul sur tableaux en Python" msgid "SciPy" -msgstr "" +msgstr "SciPy" msgid ">= 1.10.1, < 1.17" -msgstr "" +msgstr ">= 1.10.1, < 1.17" msgid "Fundamental algorithms for scientific computing in Python" msgstr "Algorithmes fondamentaux pour le calcul scientifique en Python" msgid "scikit-image" -msgstr "" +msgstr "scikit-image" msgid ">= 0.19.2, < 0.27" -msgstr "" +msgstr ">= 0.19.2, < 0.27" msgid "Image processing in Python" msgstr "Traitement d'image en Python" msgid "pandas" -msgstr "" +msgstr "pandas" msgid ">= 1.4, < 3.0" -msgstr "" +msgstr ">= 1.4, < 3.0" msgid "Powerful data structures for data analysis, time series, and statistics" -msgstr "" +msgstr "Structures de données puissantes pour l'analyse de données, les séries temporelles et les statistiques" msgid "PyWavelets" -msgstr "" +msgstr "PyWavelets" msgid ">= 1.2, < 2.0" -msgstr "" +msgstr ">= 1.2, < 2.0" msgid "PyWavelets, wavelet transform module" msgstr "PyWavelets, module de transformation en ondelettes" msgid "packaging" -msgstr "" +msgstr "packaging" msgid ">= 21.3" -msgstr "" +msgstr ">= 21.3" msgid "Core utilities for Python packages" msgstr "Utilitaires de base pour les paquets Python" msgid "typing-extensions" -msgstr "" +msgstr "typing-extensions" msgid ">= 4.0" -msgstr "" +msgstr ">= 4.0" msgid "Backported and Experimental Type Hints for Python 3.9+" msgstr "Extensions de typage rétroportées et expérimentales pour Python 3.9+" msgid "makefun" -msgstr "" +msgstr "makefun" msgid ">= 1.13.1" -msgstr "" +msgstr ">= 1.13.1" msgid "Small library to dynamically create python functions." -msgstr "" +msgstr "Petite bibliothèque pour créer dynamiquement des fonctions Python." msgid "Optional modules for GUI support (Qt):" -msgstr "" +msgstr "Modules facultatifs pour le support GUI (Qt) :" msgid "qtpy" -msgstr "" +msgstr "qtpy" msgid "Provides an abstraction layer on top of the various Qt bindings (PyQt5/6 and PySide2/6)." msgstr "Fournit une couche d'abstraction au-dessus des différentes liaisons Qt (PyQt5/6 et PySide2/6)." msgid "PyQt5" -msgstr "" +msgstr "PyQt5" msgid "Python bindings for the Qt cross platform application toolkit" msgstr "Liaisons Python pour l'outil de développement d'applications multiplateforme Qt" msgid "plotpy" -msgstr "" +msgstr "plotpy" msgid "Curve and image plotting tools for Python/Qt applications" msgstr "Outils de traçage de courbes et d'images pour les applications Python/Qt" @@ -139,37 +139,37 @@ msgid "Optional modules for development:" msgstr "Modules facultatifs pour le développement :" msgid "build" -msgstr "" +msgstr "build" msgid "A simple, correct Python build frontend" msgstr "Un frontend de construction Python simple et correct" msgid "babel" -msgstr "" +msgstr "babel" msgid "Internationalization utilities" msgstr "Utilitaires d'internationalisation" msgid "ruff" -msgstr "" +msgstr "ruff" msgid "An extremely fast Python linter and code formatter, written in Rust." msgstr "Un linter Python extrêmement rapide et un formateur de code, écrit en Rust." msgid "pylint" -msgstr "" +msgstr "pylint" msgid "python code static checker" msgstr "Analyseur statique de code Python" msgid "Coverage" -msgstr "" +msgstr "Coverage" msgid "Code coverage measurement for Python" msgstr "Mesure de la couverture du code pour Python" msgid "pre-commit" -msgstr "" +msgstr "pre-commit" msgid "A framework for managing and maintaining multi-language pre-commit hooks." msgstr "Un framework pour gérer et maintenir des hooks de pré-commit multi-langages." @@ -178,65 +178,64 @@ msgid "Optional modules for building the documentation:" msgstr "Modules facultatifs pour la construction de la documentation :" msgid "sphinx" -msgstr "" +msgstr "sphinx" msgid "Python documentation generator" msgstr "Générateur de documentation Python" msgid "sphinx-gallery" -msgstr "" +msgstr "sphinx-gallery" msgid "A Sphinx extension that builds an HTML gallery of examples from any set of Python scripts." msgstr "Une extension Sphinx qui crée une galerie HTML d'exemples à partir de n'importe quel ensemble de scripts Python." msgid "sphinx_intl" -msgstr "" +msgstr "sphinx_intl" msgid "Sphinx utility that make it easy to translate and to apply translation." msgstr "Utilitaire Sphinx qui facilite la traduction et l'application de la traduction." msgid "myst_parser" -msgstr "" +msgstr "myst_parser" msgid "An extended [CommonMark](https://spec.commonmark.org/) compliant parser," msgstr "Un analyseur conforme à [CommonMark](https://spec.commonmark.org/) étendu," msgid "myst-nb" -msgstr "" +msgstr "myst-nb" msgid "A Jupyter Notebook Sphinx reader built on top of the MyST markdown parser." -msgstr "" +msgstr "Un lecteur de notebooks Jupyter pour Sphinx construit sur le parseur Markdown MyST." msgid "sphinx_design" -msgstr "" +msgstr "sphinx_design" msgid "A sphinx extension for designing beautiful, view size responsive web components." msgstr "Une extension Sphinx pour concevoir de beaux composants web réactifs à la taille de la vue." msgid "sphinx-copybutton" -msgstr "" +msgstr "sphinx-copybutton" msgid "Add a copy button to each of your code cells." msgstr "Ajoute un bouton de copie à chacune de vos cellules de code." msgid "pydata-sphinx-theme" -msgstr "" +msgstr "pydata-sphinx-theme" msgid "Bootstrap-based Sphinx theme from the PyData community" msgstr "Thème Sphinx basé sur Bootstrap de la communauté PyData" msgid "matplotlib" -msgstr "" +msgstr "matplotlib" -#, fuzzy msgid "Python plotting package" -msgstr "Langage de programmation Python" +msgstr "Bibliothèque de tracé pour Python" msgid "opencv-python-headless" -msgstr "" +msgstr "opencv-python-headless" msgid ">= 4.8.1.78" -msgstr "" +msgstr ">= 4.8.1.78" msgid "Wrapper package for OpenCV python bindings." msgstr "Bibliothèque d'interfaces Python pour OpenCV." @@ -245,14 +244,13 @@ msgid "Optional modules for running test suite:" msgstr "Modules facultatifs pour exécuter la suite de tests :" msgid "pytest" -msgstr "" +msgstr "pytest" msgid "pytest: simple powerful testing with Python" msgstr "pytest : tests simples et puissants avec Python" msgid "pytest-xvfb" -msgstr "" +msgstr "pytest-xvfb" msgid "A pytest plugin to run Xvfb (or Xephyr/Xvnc) for tests." msgstr "Un plugin pytest pour exécuter Xvfb (ou Xephyr/Xvnc) pour les tests." - diff --git a/doc/locale/fr/LC_MESSAGES/user_guide/features.po b/doc/locale/fr/LC_MESSAGES/user_guide/features.po index 3299680..f6aa27c 100644 --- a/doc/locale/fr/LC_MESSAGES/user_guide/features.po +++ b/doc/locale/fr/LC_MESSAGES/user_guide/features.po @@ -40,73 +40,73 @@ msgid "Description" msgstr "Description" msgid ":func:`addition `" -msgstr "" +msgstr ":func:`addition `" msgid ":func:`addition `" -msgstr "" +msgstr ":func:`addition `" msgid "Add two signals/images" msgstr "Ajouter deux signaux/images" msgid ":func:`difference `" -msgstr "" +msgstr ":func:`difference `" msgid ":func:`difference `" -msgstr "" +msgstr ":func:`difference `" msgid "Subtract one signal/image from another" msgstr "Soustraire un signal/image d'un autre" msgid ":func:`product `" -msgstr "" +msgstr ":func:`product `" msgid ":func:`product `" -msgstr "" +msgstr ":func:`product `" msgid "Multiply two signals/images" msgstr "Multiplier deux signaux/images" msgid ":func:`division `" -msgstr "" +msgstr ":func:`division `" msgid ":func:`division `" -msgstr "" +msgstr ":func:`division `" msgid "Divide one signal/image by another" msgstr "Diviser un signal/image par un autre" msgid ":func:`average `" -msgstr "" +msgstr ":func:`average `" msgid ":func:`average `" -msgstr "" +msgstr ":func:`average `" msgid "Compute average of multiple signals/images" msgstr "Calculer la moyenne de plusieurs signaux/images" msgid ":func:`standard_deviation `" -msgstr "" +msgstr ":func:`standard_deviation `" msgid ":func:`standard_deviation `" -msgstr "" +msgstr ":func:`standard_deviation `" msgid "Compute standard deviation of multiple signals/images" msgstr "Calculer l'écart-type de plusieurs signaux/images" msgid ":func:`quadratic_difference `" -msgstr "" +msgstr ":func:`quadratic_difference `" msgid ":func:`quadratic_difference `" -msgstr "" +msgstr ":func:`quadratic_difference `" msgid "Compute quadratic difference between signals/images" msgstr "Calculer la différence quadratique entre signaux/images" msgid ":func:`arithmetic `" -msgstr "" +msgstr ":func:`arithmetic `" msgid ":func:`arithmetic `" -msgstr "" +msgstr ":func:`arithmetic `" msgid "Generic arithmetic operations with parameters" msgstr "Opérations arithmétiques génériques avec paramètres" @@ -115,37 +115,37 @@ msgid "Constant Operations" msgstr "Opérations avec constantes" msgid ":func:`addition_constant `" -msgstr "" +msgstr ":func:`addition_constant `" msgid ":func:`addition_constant `" -msgstr "" +msgstr ":func:`addition_constant `" msgid "Add a constant value to signal/image" msgstr "Ajouter une constante au signal/image" msgid ":func:`difference_constant `" -msgstr "" +msgstr ":func:`difference_constant `" msgid ":func:`difference_constant `" -msgstr "" +msgstr ":func:`difference_constant `" msgid "Subtract a constant from signal/image" msgstr "Soustraire une constante du signal/image" msgid ":func:`product_constant `" -msgstr "" +msgstr ":func:`product_constant `" msgid ":func:`product_constant `" -msgstr "" +msgstr ":func:`product_constant `" msgid "Multiply signal/image by a constant" msgstr "Multiplier le signal/image par une constante" msgid ":func:`division_constant `" -msgstr "" +msgstr ":func:`division_constant `" msgid ":func:`division_constant `" -msgstr "" +msgstr ":func:`division_constant `" msgid "Divide signal/image by a constant" msgstr "Diviser le signal/image par une constante" @@ -154,82 +154,82 @@ msgid "Mathematical Operations" msgstr "Opérations mathématiques" msgid ":func:`absolute `" -msgstr "" +msgstr ":func:`absolute `" msgid ":func:`absolute `" -msgstr "" +msgstr ":func:`absolute `" msgid "Compute absolute value" msgstr "Calculer la valeur absolue" msgid ":func:`exp `" -msgstr "" +msgstr ":func:`exp `" msgid ":func:`exp `" -msgstr "" +msgstr ":func:`exp `" msgid "Exponential function" msgstr "Fonction exponentielle" msgid ":func:`log10 `" -msgstr "" +msgstr ":func:`log10 `" msgid ":func:`log10 `" -msgstr "" +msgstr ":func:`log10 `" msgid "Base-10 logarithm" msgstr "Logarithme en base 10" msgid ":func:`inverse `" -msgstr "" +msgstr ":func:`inverse `" msgid ":func:`inverse `" -msgstr "" +msgstr ":func:`inverse `" msgid "Compute reciprocal" msgstr "Calculer l'inverse" msgid ":func:`real `" -msgstr "" +msgstr ":func:`real `" msgid ":func:`real `" -msgstr "" +msgstr ":func:`real `" msgid "Extract real part of complex data" msgstr "Extraire la partie réelle des données complexes" msgid ":func:`imag `" -msgstr "" +msgstr ":func:`imag `" msgid ":func:`imag `" -msgstr "" +msgstr ":func:`imag `" msgid "Extract imaginary part of complex data" msgstr "Extraire la partie imaginaire des données complexes" msgid ":func:`phase `" -msgstr "" +msgstr ":func:`phase `" msgid ":func:`phase `" -msgstr "" +msgstr ":func:`phase `" msgid "Extract phase of complex data" msgstr "Extraire la phase des données complexes" msgid ":func:`astype `" -msgstr "" +msgstr ":func:`astype `" msgid ":func:`astype `" -msgstr "" +msgstr ":func:`astype `" msgid "Convert data type" msgstr "Convertir le type de données" msgid ":func:`transpose `" -msgstr "" +msgstr ":func:`transpose `" msgid ":func:`transpose `" -msgstr "" +msgstr ":func:`transpose `" msgid "Transpose coordinates/axes" msgstr "Transposer les coordonnées/axes" @@ -238,7 +238,7 @@ msgid "N/A" msgstr "N/A" msgid ":func:`log10_z_plus_n `" -msgstr "" +msgstr ":func:`log10_z_plus_n `" msgid "Log10 with offset for zero handling" msgstr "Log10 avec décalage pour la gestion des zéros" @@ -250,25 +250,25 @@ msgid "Function" msgstr "Fonction" msgid ":func:`sqrt `" -msgstr "" +msgstr ":func:`sqrt `" msgid "Square root" msgstr "Racine carrée" msgid ":func:`power `" -msgstr "" +msgstr ":func:`power `" msgid "Raise to power" msgstr "Élever à une puissance" msgid ":func:`to_cartesian `" -msgstr "" +msgstr ":func:`to_cartesian `" msgid "Convert to Cartesian coordinates" msgstr "Convertir en coordonnées cartésiennes" msgid ":func:`to_polar `" -msgstr "" +msgstr ":func:`to_polar `" msgid "Convert to polar coordinates" msgstr "Convertir en coordonnées polaires" diff --git a/doc/locale/fr/LC_MESSAGES/user_guide/getting_started.po b/doc/locale/fr/LC_MESSAGES/user_guide/getting_started.po index ce574b8..157f14a 100644 --- a/doc/locale/fr/LC_MESSAGES/user_guide/getting_started.po +++ b/doc/locale/fr/LC_MESSAGES/user_guide/getting_started.po @@ -25,7 +25,7 @@ msgid "The best way to start learning Sigima is through an interactive Jupyter n msgstr "La meilleure façon de commencer à apprendre Sigima est à travers un notebook Jupyter interactif. Cet exemple démontre le traitement d'images avec des régions d'intérêt (ROI) et utilise le backend matplotlib pour une visualisation adaptée au web." msgid ":download:`Download simple_example.ipynb <../simple_example.ipynb>`" -msgstr "" +msgstr ":download:`Télécharger simple_example.ipynb <../simple_example.ipynb>`" msgid "What This Example Shows" msgstr "Ce que cet exemple montre" @@ -76,7 +76,7 @@ msgid "Sigima also enables remote control of DataLab sessions from external scri msgstr "Sigima permet également le contrôle à distance des sessions DataLab à partir de scripts ou de notebooks externes. Cela est utile pour l'automatisation, le traitement par lots ou l'intégration de DataLab dans des flux de travail plus larges." msgid ":download:`Download remote_example.ipynb <../remote_example.ipynb>`" -msgstr "" +msgstr ":download:`Télécharger remote_example.ipynb <../remote_example.ipynb>`" msgid "This notebook demonstrates:" msgstr "Ce notebook démontre :" diff --git a/doc/locale/fr/LC_MESSAGES/user_guide/installation.po b/doc/locale/fr/LC_MESSAGES/user_guide/installation.po index a076bfa..860d292 100644 --- a/doc/locale/fr/LC_MESSAGES/user_guide/installation.po +++ b/doc/locale/fr/LC_MESSAGES/user_guide/installation.po @@ -43,7 +43,7 @@ msgid "Conda package" msgstr "Paquet Conda" msgid ":octicon:`info;1em;sd-text-info` :bdg-info-line:`GNU/Linux` :bdg-info-line:`Windows` :bdg-info-line:`macOS`" -msgstr "" +msgstr ":octicon:`info;1em;sd-text-info` :bdg-info-line:`GNU/Linux` :bdg-info-line:`Windows` :bdg-info-line:`macOS`" msgid "To install ``sigima`` package from the `conda-forge` channel (https://anaconda.org/conda-forge/sigima), run the following command:" msgstr "Pour installer le paquet ``sigima`` depuis le canal ``conda-forge`` (https://anaconda.org/conda-forge/sigima), exécutez la commande suivante :" @@ -112,109 +112,109 @@ msgid "Python" msgstr "Python" msgid ">=3.9, <4" -msgstr "" +msgstr ">=3.9, <4" msgid "Python programming language" msgstr "Langage de programmation Python" msgid "guidata" -msgstr "" +msgstr "guidata" msgid ">= 3.13" -msgstr "" +msgstr ">= 3.13" msgid "Automatic GUI generation for easy dataset editing and display" msgstr "Génération automatique d'interfaces graphiques pour l'édition et l'affichage de jeux de données" msgid "NumPy" -msgstr "" +msgstr "NumPy" msgid ">= 1.22, < 2.5" -msgstr "" +msgstr ">= 1.22, < 2.5" msgid "Fundamental package for array computing in Python" msgstr "Paquet fondamental pour le calcul sur tableaux en Python" msgid "SciPy" -msgstr "" +msgstr "SciPy" msgid ">= 1.10.1, < 1.17" -msgstr "" +msgstr ">= 1.10.1, < 1.17" msgid "Fundamental algorithms for scientific computing in Python" msgstr "Algorithmes fondamentaux pour le calcul scientifique en Python" msgid "scikit-image" -msgstr "" +msgstr "scikit-image" msgid ">= 0.19.2, < 0.27" -msgstr "" +msgstr ">= 0.19.2, < 0.27" msgid "Image processing in Python" msgstr "Traitement d'images en Python" msgid "pandas" -msgstr "" +msgstr "pandas" msgid ">= 1.4, < 3.0" -msgstr "" +msgstr ">= 1.4, < 3.0" msgid "Powerful data structures for data analysis, time series, and statistics" -msgstr "" +msgstr "Structures de données puissantes pour l'analyse de données, les séries temporelles et les statistiques" msgid "PyWavelets" -msgstr "" +msgstr "PyWavelets" msgid ">= 1.2, < 2.0" -msgstr "" +msgstr ">= 1.2, < 2.0" msgid "PyWavelets, wavelet transform module" msgstr "PyWavelets, module de transformation en ondelettes" msgid "packaging" -msgstr "" +msgstr "packaging" msgid ">= 21.3" -msgstr "" +msgstr ">= 21.3" msgid "Core utilities for Python packages" -msgstr "" +msgstr "Utilitaires de base pour les paquets Python" msgid "typing-extensions" -msgstr "" +msgstr "typing-extensions" msgid ">= 4.0" -msgstr "" +msgstr ">= 4.0" msgid "Backported and Experimental Type Hints for Python 3.9+" -msgstr "" +msgstr "Indications de type rétroportées et expérimentales pour Python 3.9+" msgid "makefun" -msgstr "" +msgstr "makefun" msgid ">= 1.13.1" -msgstr "" +msgstr ">= 1.13.1" msgid "Small library to dynamically create python functions." -msgstr "" +msgstr "Petite bibliothèque pour créer dynamiquement des fonctions Python." msgid "Optional modules for GUI support (Qt):" msgstr "Modules optionnels pour le support de l'interface graphique (Qt) :" msgid "qtpy" -msgstr "" +msgstr "qtpy" msgid "Provides an abstraction layer on top of the various Qt bindings (PyQt5/6 and PySide2/6)." -msgstr "" +msgstr "Fournit une couche d'abstraction au-dessus des différentes liaisons Qt (PyQt5/6 et PySide2/6)." msgid "PyQt5" -msgstr "" +msgstr "PyQt5" msgid "Python bindings for the Qt cross platform application toolkit" msgstr "Bibliothèque d'interfaces graphiques Qt pour Python" msgid "plotpy" -msgstr "" +msgstr "plotpy" msgid "Curve and image plotting tools for Python/Qt applications" msgstr "Outils de tracé de courbes et d'images pour les applications Python/Qt" @@ -223,104 +223,103 @@ msgid "Optional modules for development:" msgstr "Modules optionnels pour le développement :" msgid "build" -msgstr "" +msgstr "build" msgid "A simple, correct Python build frontend" -msgstr "" +msgstr "Une interface de construction Python simple et correcte" msgid "babel" -msgstr "" +msgstr "babel" msgid "Internationalization utilities" -msgstr "" +msgstr "Utilitaires d'internationalisation" msgid "ruff" -msgstr "" +msgstr "ruff" msgid "An extremely fast Python linter and code formatter, written in Rust." msgstr "Analyseur de code et formateur Python extrêmement rapide, écrit en Rust." msgid "pylint" -msgstr "" +msgstr "pylint" msgid "python code static checker" msgstr "Analyseur statique de code Python" msgid "Coverage" -msgstr "" +msgstr "Coverage" msgid "Code coverage measurement for Python" msgstr "Mesure de la couverture de code pour Python" msgid "pre-commit" -msgstr "" +msgstr "pre-commit" msgid "A framework for managing and maintaining multi-language pre-commit hooks." -msgstr "" +msgstr "Un cadre pour gérer et maintenir des hooks pre-commit multilingues." msgid "Optional modules for building the documentation:" msgstr "Modules optionnels pour la génération de la documentation :" msgid "sphinx" -msgstr "" +msgstr "sphinx" msgid "Python documentation generator" msgstr "Générateur de documentation Python" msgid "sphinx-gallery" -msgstr "" +msgstr "sphinx-gallery" msgid "A Sphinx extension that builds an HTML gallery of examples from any set of Python scripts." msgstr "Une extension Sphinx qui crée une galerie HTML d'exemples à partir de n'importe quel ensemble de scripts Python." msgid "sphinx_intl" -msgstr "" +msgstr "sphinx_intl" msgid "Sphinx utility that make it easy to translate and to apply translation." msgstr "Utilitaire pour la traduction de la documentation générée par Sphinx." msgid "myst_parser" -msgstr "" +msgstr "myst_parser" msgid "An extended [CommonMark](https://spec.commonmark.org/) compliant parser," msgstr "Un parseur étendu compatible avec [CommonMark](https://spec.commonmark.org/)" msgid "myst-nb" -msgstr "" +msgstr "myst-nb" msgid "A Jupyter Notebook Sphinx reader built on top of the MyST markdown parser." -msgstr "" +msgstr "Un lecteur Jupyter Notebook pour Sphinx basé sur le parseur MyST." msgid "sphinx_design" -msgstr "" +msgstr "sphinx_design" msgid "A sphinx extension for designing beautiful, view size responsive web components." msgstr "Extension sphinx pour la conception de composants web réactifs." msgid "sphinx-copybutton" -msgstr "" +msgstr "sphinx-copybutton" msgid "Add a copy button to each of your code cells." msgstr "Extension sphinx ajoutant un bouton de copie à chaque cellule de code." msgid "pydata-sphinx-theme" -msgstr "" +msgstr "pydata-sphinx-theme" msgid "Bootstrap-based Sphinx theme from the PyData community" msgstr "Thème Bootstrap pour Sphinx de la communauté PyData" msgid "matplotlib" -msgstr "" +msgstr "matplotlib" -#, fuzzy msgid "Python plotting package" msgstr "Langage de programmation Python" msgid "opencv-python-headless" -msgstr "" +msgstr "opencv-python-headless" msgid ">= 4.8.1.78" -msgstr "" +msgstr ">= 4.8.1.78" msgid "Wrapper package for OpenCV python bindings." msgstr "Bibliothèque d'interfaces Python pour OpenCV." @@ -329,14 +328,13 @@ msgid "Optional modules for running test suite:" msgstr "Modules optionnels pour l'exécution de la suite de tests :" msgid "pytest" -msgstr "" +msgstr "pytest" msgid "pytest: simple powerful testing with Python" msgstr "pytest : tests simples et puissants avec Python" msgid "pytest-xvfb" -msgstr "" +msgstr "pytest-xvfb" msgid "A pytest plugin to run Xvfb (or Xephyr/Xvnc) for tests." msgstr "Plugin pytest pour exécuter Xvfb (ou Xephyr/Xvnc) pour les tests." - diff --git a/doc/release_notes/release_1.01.md b/doc/release_notes/release_1.01.md index 4b9f961..6cda14e 100644 --- a/doc/release_notes/release_1.01.md +++ b/doc/release_notes/release_1.01.md @@ -1,10 +1,10 @@ # Version 1.1 # -## Sigima Version 1.1.3 (unreleased) ## +## Sigima Version 1.1.3 ## ### 🛠️ Bug Fixes since version 1.1.2 ### -* **Ellipse/circle contour detection**: Fixed swapped X/Y coordinates when using scikit-image ≥ 0.26.0 +* **Ellipse/circle contour detection**: Fixed swapped X/Y coordinates when using scikit-image ≥ 0.26.0. This closes [Issue #21](https://github.com/DataLab-Platform/Sigima/issues/21). * The new `EllipseModel`/`CircleModel` API returns center coordinates as `(row, col)` but the code was treating them as `(x, y)`, causing detected ellipses and circles to appear at wrong positions on the image * Semi-axis lengths were also swapped for ellipses, resulting in incorrect aspect ratios * This bug only affected scikit-image ≥ 0.26.0; older versions were handled correctly @@ -12,6 +12,12 @@ * The minor axis endpoints were computed with a wrong sign, making the minor axis non-perpendicular to the major axis for rotated ellipses (e.g., at θ=45° both axes pointed in the same direction). This caused distorted ellipse overlays in DataLab when displaying detected or annotated ellipses at non-trivial rotation angles * **Circle/ellipse detection with calibrated images**: Fixed radius and semi-axes not being converted from pixel units to physical units * When an image had non-default pixel calibration (e.g., dx=2 mm/pixel), center coordinates were correctly converted to physical units but the radius and semi-axes remained in pixels, causing values to be wrong by a factor equal to the pixel size +* **Custom signal XY preservation**: Fixed user-edited XY values being silently discarded when regenerating a custom signal from its creation parameters. `generate_1d_data()` now initializes the XY array only on first use and preserves user-edited contents on subsequent calls. This closes [Issue #25](https://github.com/DataLab-Platform/Sigima/issues/25). + +### 🔧 Other changes since version 1.1.2 ### + +* **Debug environment variable**: Renamed the test debug environment variable from `DEBUG` to `SIGIMA_DEBUG` to avoid collisions with unrelated tools and frameworks that commonly export a bare `DEBUG` variable. This closes [Issue #19](https://github.com/DataLab-Platform/Sigima/issues/19). +* **Remote control client**: Added `get_current_object_uuid()` method to `SimpleRemoteProxy` and `SimpleAbstractDLControl`, allowing users to retrieve the UUID of the currently selected object in DataLab ### 🧪 Tests ### diff --git a/doc/requirements.rst b/doc/requirements.rst index 01336a2..4de0088 100644 --- a/doc/requirements.rst +++ b/doc/requirements.rst @@ -23,7 +23,7 @@ The `sigima` package requires the following Python modules: - >= 0.19.2, < 0.27 - Image processing in Python * - pandas - - >= 1.4, < 3.0 + - >= 1.4, < 3.1 - Powerful data structures for data analysis, time series, and statistics * - PyWavelets - >= 1.2, < 2.0 @@ -84,6 +84,12 @@ Optional modules for development: * - pre-commit - - A framework for managing and maintaining multi-language pre-commit hooks. + * - setuptools + - + - Most extensible Python build backend with support for C/C++ extension modules + * - wheel + - + - Command line tool for manipulating wheel files Optional modules for building the documentation: diff --git a/sigima/locale/fr/LC_MESSAGES/sigima.po b/sigima/locale/fr/LC_MESSAGES/sigima.po index d858bf1..32adb74 100644 --- a/sigima/locale/fr/LC_MESSAGES/sigima.po +++ b/sigima/locale/fr/LC_MESSAGES/sigima.po @@ -258,18 +258,18 @@ msgstr "Image sans titre" msgid "Title" msgstr "Titre" -msgid "Image height: number of rows" -msgstr "Hauteur de l'image : nombre de lignes" - msgid "Height" msgstr "Hauteur" -msgid "Image width: number of columns" -msgstr "Largeur de l'image : nombre de colonnes" +msgid "Image height: number of rows" +msgstr "Hauteur de l'image : nombre de lignes" msgid "Width" msgstr "Largeur" +msgid "Image width: number of columns" +msgstr "Largeur de l'image : nombre de colonnes" + msgid "Type" msgstr "Type" @@ -315,18 +315,18 @@ msgstr "Décalage X" msgid "Y offset" msgstr "Décalage Y" -msgid "Value for dark squares" -msgstr "Valeur des carrés foncés" - msgid "Minimum value" msgstr "Minimum" -msgid "Value for light squares" -msgstr "Valeur des carrés clairs" +msgid "Value for dark squares" +msgstr "Valeur des carrés foncés" msgid "Maximum value" msgstr "Maximum" +msgid "Value for light squares" +msgstr "Valeur des carrés clairs" + msgid "Amplitude and offset" msgstr "Amplitude et décalage" @@ -408,15 +408,15 @@ msgstr "Métadonnées" msgid "Annotations" msgstr "Annotations" -msgid "Uniform coordinates" -msgstr "Coordonnées uniformes" - msgid "Origin" msgstr "Origine" msgid "Pixel spacing" msgstr "Taille des pixels" +msgid "Uniform coordinates" +msgstr "Coordonnées uniformes" + msgid "Extent" msgstr "Bornes" @@ -432,12 +432,12 @@ msgstr "Coordonnées Y" msgid "Titles / Units" msgstr "Titres / Unités" -msgid "Image title" -msgstr "Titre de l'image" - msgid "Untitled" msgstr "Sans titre" +msgid "Image title" +msgstr "Titre de l'image" + msgid "X-axis" msgstr "Axe des X" @@ -757,12 +757,12 @@ msgstr "Méthode de normalisation" msgid "Method used for normalization" msgstr "Méthode utilisée pour la normalisation" -msgid "columns" -msgstr "colonnes" - msgid "rows" msgstr "lignes" +msgid "columns" +msgstr "colonnes" + msgid "Distribute over" msgstr "Distribuer selon les" @@ -1043,9 +1043,25 @@ msgstr "Translation en X" msgid "Y translation" msgstr "Translation en Y" +#, fuzzy +msgid "column size" +msgstr "Colonnes" + +#, fuzzy +msgid "row size" +msgstr "Taille" + +#, fuzzy +msgid "column spacing" +msgstr "Espace entre chaque colonne" + msgid "Horizontal spacing between ROI centers, as a percentage of the automatically computed cell width (100% = evenly distributed grid)" msgstr "Espacement horizontal entre les centres des ROI, en pourcentage de la largeur de cellule automatiquement calculée (100% = grille uniformément distribuée)" +#, fuzzy +msgid "row spacing" +msgstr "Espace entre chaque ligne" + msgid "Vertical spacing between ROI centers, as a percentage of the automatically computed cell height (100% = evenly distributed grid)" msgstr "Espacement vertical entre les centres des ROI, en pourcentage de la hauteur de cellule automatiquement calculée (100% = grille uniformément distribuée)" @@ -1157,6 +1173,9 @@ msgstr "Comment retourner le résultat de la FFT inverse" msgid "Frequency" msgstr "Fréquence" +msgid "Angle" +msgstr "Angle" + msgid "cval" msgstr "cval" @@ -1503,9 +1522,6 @@ msgstr "Convertir le type de données" msgid "Power" msgstr "Puissance" -msgid "Angle" -msgstr "Angle" - msgid "x" msgstr "x" @@ -1599,3 +1615,8 @@ msgstr "Nombre de colonnes" msgid "Centroid" msgstr "Barycentre" +msgid "Test dialog" +msgstr "" + +msgid "Plot dialog" +msgstr ""