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.0–255for 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
EllipseModellevantTypeErrordans les cas limites de scikit-image 0.26collections.abc.ByteStringdéprécié : Remplacement de l’utilisation supprimée dans Python 3.14 par des vérificationsbytesetbytearray
🔧 Autres changements depuis la version 1.1.4#
Infrastructure de test : Rendre le nettoyage de
WorkdirRestoringTempDirrobuste sous Windows (évite lesPermissionErrorsur 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-mineurAjout de tests unitaires de référence pour
fit_circle_modeletfit_ellipse_modelvé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/CircleModelrenvoie 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’imageLes 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_diametersLes 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_DEBUGpour éviter les collisions avec des outils et frameworks non liés qui exportent couramment une variableDEBUGseule. Cela clôt Issue #19.Client de contrôle à distance : Ajout de la méthode
get_current_object_uuid()àSimpleRemoteProxyetSimpleAbstractDLControl, 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éeRemplacer les imports
from sigima.tests import vistoolsparfrom sigima import vizTous les utilitaires de visualisation (
view_curves,view_images,create_curve,create_image, etc.) restent disponibles dans leur nouvel emplacementsigima.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
ilocpar une assignation par nom de colonne pour gérer correctement la conversion de typeAssure 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 erreursdtype('<U4')Les entrées non sérialisables (par ex. les formatteurs de colonnes appelables) dans
TableResult.attrssont 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 seulementns) 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
dxoudyétait défini sur un signal viergeLorsque
dyétait défini en premier (oudxen 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_roietextract_roisqui perdaient les tableaux d’incertitudesdx/dydu signal d’entréeLes é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_crossingsqui sur-comptait les passages sur les signaux contenant des échantillons exactement nulsLes é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 passagesLes 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_coordinateset les mesures FWHM / temps de montée / descente d’impulsions
Calcul du contraste : Correction de
contrastqui émettait des avertissementsinf/nansur les signaux à valeurs négatives ou intégralement nullesLe 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 nulsRetourne proprement
nan(sans avertissement de division par zéro) lorsquemaxetminsont tous deux nuls
Précision de la conversion datetime : Correction de
datetime64_to_secondsqui retournait des timestamps Unix erronés pour les résolutionsdatetime64grossièresL’implémentation précédente ne reconnaissait que
ns,usetmset utilisait silencieusement un diviseur en nanosecondes pour toute autre résolution, produisant des timestamps erronés pourdatetime64[s],datetime64[m],datetime64[h]oudatetime64[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 pandasDatetimeIndex
Origine et pas pixel des images DICOM : Correction de
ImageObj.dicom_templatequi utilisait des coordonnées de repli incohérentes lorsque des tags DICOM étaient absentsLorsque
ImagePositionPatientouPixelSpacingé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érateursL’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
TableResultNouvelles méthodes
get_column_formats()/set_column_formats()surTableResultTableResultBuilderprend en chargeset_column_formats()pour spécifier des chaînes de format (par ex.{"x0": ".2e"}) ou des formatteurs appelablesPrend 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.1Cela 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àSimpleRemoteProxyetSimpleAbstractDLControl, permettant aux utilisateurs de renvoyer des objets signal/image modifiés à DataLab après les avoir récupérés avecget_object(voir DataLab Issue #305)Serveur factice : Ajout de la prise en charge de
set_objectàDataLabStubServeravec une recherche d’objet basée sur UUID, et enregistrement deadd_object/set_objecten tant que fonctions XML-RPCServeur 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_objectAmélioration de la configuration de l’environnement de développement : nouveau script
run_with_env.pyprenant 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.procetsigima.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 à
DataLabStubServerpour tester l’intégration de l’API REST de DataLabAjout 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 à
DataLabStubServerpour prendre en charge les nouvelles fonctionnalités de DataLabAjout 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.vizAjout de fonctions d’aide standardisées :
create_curve(),create_image(),create_circle(),create_segment(),create_cursor(),create_marker()etcreate_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_backendpour sélectionner la bibliothèque de visualisation (« auto », « plotpy » ou « matplotlib »)La variable d’environnement
SIGIMA_VIZ_BACKENDpeut remplacer la configurationBasculement automatique de PlotPy à Matplotlib lorsque PlotPy n’est pas disponible
Informations sur le backend exposées via
sigima.viz.BACKEND_NAMEetBACKEND_SOURCELe 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
SignalObjaffiche la forme, le dtype, les plages X/Y, les labels des axes et le titre dans un tableau formatéImageObjaffiche la forme, le dtype, la plage de valeurs, l’origine, l’espacement des pixels, l’étendue, les labels des axes et le titreLes objets ROI (
BaseSingleROI,BaseROI) affichent leurs propriétés géométriquesBaseCoordinateset les classes dérivées affichent les coordonnées des pointsTableResultetGeometryResultaffichent les données de résultat avec les informations de l’objet sourceCentralisation du style CSS dans la constante
HTML_TABLE_CSSpour une apparence cohérente