Version 1.1#

Sigima Version 1.1.6#

🛠️ Bug Fixes since version 1.1.5#

  • Color image import (JPEG, PNG, BMP, TIFF): Fixed pixel values being rescaled to the [0, 1] range when opening a color (RGB/RGBA) image, which made the imported data unusable for quantitative analysis. Color images are now converted to grayscale while keeping their original value range (e.g. 0255 for 8-bit images), matching the behavior of tools such as ImageJ. Grayscale images stored as RGB are read back with their exact original values. This closes Issue #37.

Sigima Version 1.1.5 (23/06/2026)#

🛠️ Corrections de bugs depuis la version 1.1.4#

  • TypeError d’EllipseModel : Ajout d’un mécanisme de repli défensif pour EllipseModel levant TypeError dans les cas limites de scikit-image 0.26

  • collections.abc.ByteString déprécié : Remplacement de l’utilisation supprimée dans Python 3.14 par des vérifications bytes et bytearray

🔧 Autres changements depuis la version 1.1.4#

  • Infrastructure de test : Rendre le nettoyage de WorkdirRestoringTempDir robuste sous Windows (évite les PermissionError sur les répertoires temporaires)

Sigima Version 1.1.4 (31/01/2026)#

🛠️ Corrections de bugs depuis la version 1.1.3#

  • 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 #27.

    • La correction de signe appliquée dans la v1.1.3 pour la conversion (row, col)(x, y) a introduit une régression dans l’orientation des axes de l’ellipse, provoquant l’inversion des axes semi-majeur et semi-mineur

    • Ajout de tests unitaires de référence pour fit_circle_model et fit_ellipse_model vérifiant tous les paramètres de sortie (coordonnées du centre, rayon/demi-axes et angle de rotation)

Sigima Version 1.1.3 (31/01/2026)#

🛠️ Corrections de bugs depuis la version 1.1.2#

  • 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.

    • 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

    • Les longueurs des demi-axes étaient également inversées pour les ellipses, entraînant des rapports d’aspect incorrects

    • Ce bogue n’affectait que scikit-image ≥ 0.26.0 ; les versions plus anciennes étaient correctement gérées

  • Visualisation des ellipses : Correction de la direction incorrecte de l’axe mineur dans la conversion des coordonnées ellipse_to_diameters

    • 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

  • 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

    • 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

  • 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.

🔧 Autres changements depuis la version 1.1.2#

  • 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.

  • 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

🧪 Tests#

  • 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.

Sigima Version 1.1.2 (20/04/2026)#

💥 Changements incompatibles depuis la version 1.1.1#

  • Suppression du module déprécié sigima.tests.vistools : La couche de compatibilité ascendante introduite en version 1.1.0 a été supprimée

    • Remplacer les imports from sigima.tests import vistools par from sigima import viz

    • Tous les utilitaires de visualisation (view_curves, view_images, create_curve, create_image, etc.) restent disponibles dans leur nouvel emplacement sigima.viz

🛠️ Corrections de bugs depuis la version 1.1.1#

  • Parsing des en-têtes CSV : Correction des problèmes d’extraction des espaces et des unités lors de la lecture des en-têtes de colonnes CSV

    • Les espaces en début et fin de titre de colonne sont désormais correctement supprimés (par ex. "  Padded NoUnit  ""Padded NoUnit")

    • Les parenthèses imbriquées dans les unités sont désormais correctement gérées (par ex. "Signal (a.u. (norm))" → étiquette "Signal", unité "a.u.(norm)" au lieu de se séparer incorrectement à la dernière parenthèse)

    • Les caractères d’espacement exotiques (tabulations, espaces insécables) dans les en-têtes sont normalisés avant l’analyse

  • Compatibilité avec Pandas 3.0 : Correction du problème de parsing des dates dans les fichiers CSV avec pandas 3.0+

    • Remplacement de l’assignation iloc par une assignation par nom de colonne pour gérer correctement la conversion de type

    • Assure la compatibilité avec les versions pandas < 3.0 et pandas 3.0+

    • Fonctionnalité affectée : lecture de fichiers CSV avec des colonnes datetime et importation de données de signaux à partir de fichiers CSV

    • Tous les tests liés passent après la correction

    • Cela clôt Issue #12 - Correction du problème de compatibilité avec pandas 3.0 dans le parsing des dates des fichiers CSV

  • Sérialisation HDF5 de TableResult : Correction de l’échec de sauvegarde de l’espace de travail de DataLab lorsque les résultats de table contiennent des valeurs d’énumération ou des formatteurs appelables

    • Les sous-classes d’énumération (par ex. SignalShape) stockées dans les données de la table sont désormais converties en chaînes simples avant la sérialisation, évitant les erreurs dtype('<U4')

    • Les entrées non sérialisables (par ex. les formatteurs de colonnes appelables) dans TableResult.attrs sont désormais nettoyées avant l’exportation HDF5/JSON

  • Compatibilité des signaux datetime : Correction de la gestion des colonnes datetime pour la compatibilité avec diverses versions de NumPy et pandas

    • Autorisation de toute résolution datetime64 (pas seulement ns) pour prendre en charge les combinaisons plus récentes de NumPy/pandas

  • Incertitudes des signaux (dx/dy) : Correction de barres d’erreur fantômes affichées lorsque seul dx ou dy était défini sur un signal vierge

    • Lorsque dy était défini en premier (ou dx en premier), la ligne d’incertitude différée pour l’autre dimension était auparavant remplie de zéros, ce qui était interprété par les outils en aval comme un véritable tableau d’incertitudes nulles (par ex. PlotPy traçait des barres d’erreur de largeur nulle)

    • Les lignes différées sont désormais initialisées avec NaN, de sorte qu’une incertitude manquante est correctement signalée comme absente — plus de barres d’erreur parasites

  • Extraction de ROI avec incertitudes : Correction d”extract_roi et extract_rois qui perdaient les tableaux d’incertitudes dx / dy du signal d’entrée

    • Les échantillons d’incertitude sont désormais découpés et propagés au signal extrait exactement comme les données X/Y

    • Concerne les flux d’extraction mono-ROI et multi-ROI

  • Détection des passages à zéro : Correction de find_zero_crossings qui sur-comptait les passages sur les signaux contenant des échantillons exactement nuls

    • Les échantillons exactement nuls comptaient auparavant pour deux passages (par ex. [-1, 0, 1] signalait deux passages au lieu d’un) et les motifs « touche-et-rebondit » comme [1, 0, 1] étaient signalés à tort comme des passages

    • Les changements de signe sont désormais détectés entre échantillons non nuls consécutifs, les suites contiguës de zéros n’étant comptées comme un unique passage que lorsqu’elles relient effectivement des signes opposés

    • Les fonctionnalités en aval bénéficient de cette correction : find_x_axis_crossings, find_x_values_at_y, find_bandwidth_coordinates et les mesures FWHM / temps de montée / descente d’impulsions

  • Calcul du contraste : Correction de contrast qui émettait des avertissements inf / nan sur les signaux à valeurs négatives ou intégralement nulles

    • Le dénominateur utilise désormais les valeurs absolues ((max - min) / (|max| + |min|)), bornant le résultat dans [0, 1] pour les signaux à valeurs négatives tout en correspondant au contraste de Michelson standard pour les signaux positifs ou nuls

    • Retourne proprement nan (sans avertissement de division par zéro) lorsque max et min sont tous deux nuls

  • Précision de la conversion datetime : Correction de datetime64_to_seconds qui retournait des timestamps Unix erronés pour les résolutions datetime64 grossières

    • L’implémentation précédente ne reconnaissait que ns, us et ms et utilisait silencieusement un diviseur en nanosecondes pour toute autre résolution, produisant des timestamps erronés pour datetime64[s], datetime64[m], datetime64[h] ou datetime64[D]

    • Les entrées sont désormais normalisées en datetime64[ns] avant conversion, garantissant des résultats corrects pour toute résolution source et pour les objets pandas DatetimeIndex

  • Origine et pas pixel des images DICOM : Correction de ImageObj.dicom_template qui utilisait des coordonnées de repli incohérentes lorsque des tags DICOM étaient absents

    • Lorsque ImagePositionPatient ou PixelSpacing était absent du modèle DICOM, seuls l’origine Y et le pas pixel Y recevaient la valeur de repli, tandis que l’origine X et le pas pixel X restaient des scalaires bruts, en raison de la précédence des opérateurs

    • L’origine X et Y (x0, y0) et le pas pixel (dx, dy) sont désormais renseignés de manière cohérente avec les valeurs par défaut prévues (0.0, 0.0) et (1.0, 1.0)

✨ Améliorations depuis la version 1.1.1#

  • Formatage des valeurs dans les légendes : Amélioration du formatage numérique dans les légendes des résultats d’analyse

    • Les valeurs courtes sont affichées sous forme de nombres simples, tandis que les valeurs longues utilisent une notation scientifique adaptée pour s’adapter à la largeur d’affichage

    • La table des caractéristiques des impulsions utilise désormais une notation scientifique adaptative affichant uniquement les chiffres significatifs nécessaires pour une représentation exacte aller-retour

  • Formats d’affichage des colonnes de table : Ajout du contrôle du format par colonne pour TableResult

    • Nouvelles méthodes get_column_formats() / set_column_formats() sur TableResult

    • TableResultBuilder prend en charge set_column_formats() pour spécifier des chaînes de format (par ex. {"x0": ".2e"}) ou des formatteurs appelables

    • Prend en charge la clé générique "*" comme formatteur par défaut pour chaque table

📦 Changements de dépendances depuis la version 1.1.1#

  • Support de Pandas 3.0 : Prise en charge officielle de pandas 3.0.x après validation — la limite supérieure est passée de < 3.0 à < 3.1

    • Cela clôt Issue #13 - Support de pandas 3.0

  • Support de Python 3.14 : Ajout du classificateur Python 3.14

🔧 Autres changements depuis la version 1.1.1#

  • Client de contrôle à distance : Ajout de la méthode set_object à SimpleRemoteProxy et SimpleAbstractDLControl, permettant aux utilisateurs de renvoyer des objets signal/image modifiés à DataLab après les avoir récupérés avec get_object (voir DataLab Issue #305)

  • Serveur factice : Ajout de la prise en charge de set_object à DataLabStubServer avec une recherche d’objet basée sur UUID, et enregistrement de add_object/set_object en tant que fonctions XML-RPC

  • Serveur factice : Les objets signal et image portent désormais leur UUID dans les métadonnées, permettant des flux de travail aller-retour get_object → modifier → set_object

  • Amélioration de la configuration de l’environnement de développement : nouveau script run_with_env.py prenant en charge plusieurs contextes d’environnement Python (WinPython, venv, etc.)

  • CI : déploiement PyPI conditionné à la réussite de la suite de tests

  • Couverture de tests : Extension substantielle de la suite de tests unitaires pour couvrir des branches jusqu’alors non testées dans sigima.objects, sigima.io, sigima.tools, sigima.proc et sigima.viz (26 nouveaux modules de tests), et exclusion de la couche de visualisation GUI des rapports de couverture pour des métriques plus pertinentes

Sigima Version 1.1.1 (02/02/2026)#

🛠️ Corrections de bugs depuis la version 1.1.0#

  • Serveur factice : Ajout des méthodes de contrôle de l’API Web manquantes à DataLabStubServer pour tester l’intégration de l’API REST de DataLab

    • Ajout du stub start_webapi_server() (retourne une URL et un jeton factices)

    • Ajout du stub stop_webapi_server()

    • Ajout du stub get_webapi_status() (retourne un dictionnaire d’état du serveur)

🔧 Autres changements depuis la version 1.1.0#

  • Mise à jour du classificateur d’état de développement vers « Production/Stable »

  • Ajout de la section « Essayez en ligne » avec intégration de notebook.link dans la documentation

Sigima Version 1.1.0 (31/01/2026)#

✨ Nouvelles fonctionnalités et améliorations:

  • Serveur factice : Ajout de méthodes manquantes à DataLabStubServer pour prendre en charge les nouvelles fonctionnalités de DataLab

    • Ajout de la méthode remove_object() (supprime un objet de DataLab)

    • Ajout de la méthode call_method() (simule l’appel d’une méthode sur l’interface principale ou les panneaux de DataLab)

  • Infrastructure de test : Refactorisation du code de visualisation dans la suite de tests pour une meilleure maintenabilité

    • Centralisation des utilitaires de visualisation PlotPy dans le module sigima.viz

    • Ajout de fonctions d’aide standardisées : create_curve(), create_image(), create_circle(), create_segment(), create_cursor(), create_marker() et create_contour_shapes()

    • Mise à jour de toutes les fonctions de test interactives pour utiliser la nouvelle API unifiée au lieu des appels directs au constructeur PlotPy

    • Amélioration de la cohérence du code entre les modules de test de signaux et d’images

  • Flexibilité du backend de visualisation : Ajout de la prise en charge de Matplotlib comme alternative à PlotPy pour les visualisations de test

    • Nouvelle option de configuration viz_backend pour sélectionner la bibliothèque de visualisation (« auto », « plotpy » ou « matplotlib »)

    • La variable d’environnement SIGIMA_VIZ_BACKEND peut remplacer la configuration

    • Basculement automatique de PlotPy à Matplotlib lorsque PlotPy n’est pas disponible

    • Informations sur le backend exposées via sigima.viz.BACKEND_NAME et BACKEND_SOURCE

    • Le backend Matplotlib fournit des stubs pour les fonctions non prises en charge (lève NotImplementedError)

    • Test unitaire garantissant la compatibilité de l’API entre les backends

  • Représentation HTML pour les notebooks Jupyter : Ajout d’un affichage HTML enrichi pour les objets Sigima dans les notebooks Jupyter

    • SignalObj affiche la forme, le dtype, les plages X/Y, les labels des axes et le titre dans un tableau formaté

    • ImageObj affiche la forme, le dtype, la plage de valeurs, l’origine, l’espacement des pixels, l’étendue, les labels des axes et le titre

    • Les objets ROI (BaseSingleROI, BaseROI) affichent leurs propriétés géométriques

    • BaseCoordinates et les classes dérivées affichent les coordonnées des points

    • TableResult et GeometryResult affichent les données de résultat avec les informations de l’objet source

    • Centralisation du style CSS dans la constante HTML_TABLE_CSS pour une apparence cohérente