Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
20 commits
Select commit Hold shift + click to select a range
196c742
feat(h5): browse HDF5 files without reading whole datasets
PierreRaybaut Oct 21, 2026
fad037f
docs: release notes for HDF5 browsing and import
PierreRaybaut Oct 21, 2026
3caf121
feat(h5): bounded previews and views of N-dimensional datasets
PierreRaybaut Oct 21, 2026
df0fd88
feat(h5): import NeXus NXdata groups as signals or images
PierreRaybaut Oct 21, 2026
24c520b
docs: release notes for HDF5 previews, views and NeXus import
PierreRaybaut Oct 21, 2026
222c63b
feat(h5): declarative data mappings for HDF5 files
PierreRaybaut Oct 21, 2026
f0d198c
docs: release notes for HDF5 data mappings
PierreRaybaut Oct 21, 2026
d14e0cf
docs: document NeXus mappings and multidimensional selections
PierreRaybaut Oct 22, 2026
96ebfc1
fix(h5): record dimensions without axis as '.' in experimental_source
PierreRaybaut Oct 23, 2026
9e17765
fix(h5): report invalid NeXus axes and uncertainties instead of faili…
PierreRaybaut Oct 23, 2026
589aafa
fix(h5): detect uniform float32 axes and import decreasing image axes
PierreRaybaut Oct 23, 2026
6fd3103
fix(h5): keep complex64 signals and large-integer warnings on HDF5 im…
PierreRaybaut Oct 23, 2026
0549ac2
fix(h5browser): discard stale previews and wait for them before import
PierreRaybaut Oct 23, 2026
d2da190
feat(h5): decimated previews for NeXus and mapped objects
PierreRaybaut Oct 23, 2026
a854d67
fix(h5): skip broken links when opening HDF5 files
PierreRaybaut Oct 23, 2026
5b720f6
perf(h5): bisect the decimated preview step
PierreRaybaut Oct 23, 2026
8f1e8fd
fix(h5browser): clear the preview when an unsupported node is selected
PierreRaybaut Oct 23, 2026
f39fd67
refactor(h5): address Pylint messages of the HDF5 import modules
PierreRaybaut Oct 23, 2026
bc5ff14
docs: document broken links and preview clearing, complete French cat…
PierreRaybaut Oct 23, 2026
974811d
fix(h5): fall back to the dataset name for blank NeXus labels
PierreRaybaut Oct 23, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions .pylintrc
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@
max-line-length=88

[TYPECHECK]
# NumPy's floating-point limits are populated dynamically.
ignored-classes=finfo
ignored-modules=qtpy.QtWidgets,qtpy.QtCore,qtpy.QtGui,plotpy._scaler

[MESSAGES CONTROL]
Expand Down
50 changes: 43 additions & 7 deletions doc/locale/fr/LC_MESSAGES/release_notes/release_1.01.po
Original file line number Diff line number Diff line change
Expand Up @@ -31,22 +31,22 @@ msgid "Canonical annotation identifiers, metadata, extensions, and persistent lo
msgstr "Les identifiants d'annotation canoniques, les métadonnées, les extensions et l'état de verrouillage persistant sont conservés lors des allers-retours d'édition PlotPy. Les entrées d'annotation opaques spécifiques à l'application continuent de coexister avec les annotations graphiques."

msgid "Main window"
msgstr ""
msgstr "Fenêtre principale"

msgid "With Qt 5, the dock widget sizes saved on exit are now restored at startup: the window is sized and laid out before its state is restored, so tabified docks no longer shrink to the default window size and leave the extra width to the central widget."
msgstr ""
msgstr "Avec Qt 5, les tailles des panneaux ancrables enregistrées à la fermeture sont désormais restaurées au démarrage : la fenêtre est dimensionnée et mise en page avant la restauration de son état, si bien que les panneaux regroupés en onglets ne se réduisent plus à la taille par défaut de la fenêtre en laissant la largeur supplémentaire au widget central."

msgid "Closing the main window (unless it is only hidden, see `hide_on_close`) now releases it as the instance returned by `get_instance`, which creates a new window afterwards: the closed window, with its widgets and data, is no longer kept in memory until another main window is created."
msgstr "La fermeture de la fenêtre principale (sauf si elle est seulement masquée, voir `hide_on_close`) la libère désormais en tant qu'instance renvoyée par `get_instance`, qui crée ensuite une nouvelle fenêtre : la fenêtre fermée, avec ses widgets et ses données, n'est plus conservée en mémoire jusqu'à la création d'une autre fenêtre principale."

msgid "Qt helpers"
msgstr ""
msgstr "Utilitaires Qt"

msgid "`block_signals` now restores the previous signal-blocking state of the widget and of its children instead of unblocking them unconditionally: nested blocking contexts and widgets already blocked by the caller keep their state."
msgstr ""
msgstr "`block_signals` restaure désormais l'état précédent de blocage des signaux du widget et de ses enfants au lieu de les débloquer systématiquement : les contextes de blocage imbriqués et les widgets déjà bloqués par l'appelant conservent leur état."

msgid "`sigimax_app_context` no longer schedules the unattended/screenshot close timer when the Qt event loop is not executed (`exec_loop=False`): the pending timer previously closed unrelated top-level widgets created later, such as the window of a subsequent test."
msgstr ""
msgstr "`sigimax_app_context` ne programme plus le minuteur de fermeture des modes sans surveillance et capture d'écran lorsque la boucle d'événements Qt n'est pas exécutée (`exec_loop=False`) : ce minuteur en attente fermait auparavant des widgets de premier niveau sans rapport créés ensuite, comme la fenêtre d'un test suivant."

msgid "Curve fitting dialogs"
msgstr "Fenêtres d'ajustement de courbes"
Expand All @@ -63,9 +63,45 @@ msgstr "La fenêtre d'ajustement planckien part d'une courbe correspondant au pi
msgid "The exponential fit dialog now evaluates the same model as Sigima, and its rate slider covers short time constants whatever the X unit (e.g. 1 ms with X in seconds)."
msgstr "La fenêtre d'ajustement exponentiel évalue désormais le même modèle que Sigima, et son curseur de taux couvre les constantes de temps courtes quelle que soit l'unité de X (par exemple 1 ms avec X en secondes)."

msgid "HDF5 import"
msgstr "Import HDF5"

msgid "Browsing an HDF5 file no longer reads its numeric datasets entirely just to classify them: generic nodes are classified and described from the dataset shape and data type, and value previews read only the first elements (`TEXT_PREVIEW_MAX_ITEMS`). Compound datasets mixing numeric and string fields are checked on their first records only. Full data is read when creating an imported object or an undecimated graphical preview."
msgstr "Parcourir un fichier HDF5 ne lit plus ses jeux de données numériques en entier simplement pour les classifier : les nœuds génériques sont classifiés et décrits à partir de la forme et du type des jeux de données, et les aperçus de valeurs ne lisent que les premiers éléments (`TEXT_PREVIEW_MAX_ITEMS`). Les jeux de données composites mêlant champs numériques et textuels ne sont vérifiés que sur leurs premiers enregistrements. Les données complètes sont lues lors de la création d'un objet importé ou d'un aperçu graphique non sous-échantillonné."

msgid "The HDF5 browser reads previews in a worker thread, so that it stays responsive while a large dataset is read: only the last selected node is shown, the previews of nodes selected meanwhile are not read, selecting a node that cannot be previewed (a group, for example) clears the preview, and closing a file or the browser dialog waits for the preview being read (imported objects are then read without concurrent access to the file). Ordinary 1D arrays and 2D images, NeXus and mapped objects with more than `PlotPreview.MAX_ITEMS` (2²⁴) elements are previewed with a step along each axis. Compound datasets and signals stored in 2D tables still use complete objects for graphical previews; this is not a universal memory bound."
msgstr "L'explorateur HDF5 lit les aperçus dans un fil d'exécution de travail pour rester réactif pendant la lecture d'un grand jeu de données : seul le dernier nœud sélectionné est affiché, les aperçus des nœuds sélectionnés entre-temps ne sont pas lus, la sélection d'un nœud qui ne peut pas être prévisualisé (un groupe, par exemple) efface l'aperçu, et la fermeture d'un fichier ou du dialogue de l'explorateur attend la fin de la lecture de l'aperçu (les objets importés sont ensuite lus sans accès concurrent au fichier). Les tableaux 1D ordinaires et les images 2D, les objets NeXus et décrits par un profil de plus de `PlotPreview.MAX_ITEMS` (2²⁴) éléments sont prévisualisés avec un pas le long de chaque axe. Les jeux de données composites et les signaux stockés dans des tableaux 2D utilisent encore des objets complets pour leurs aperçus graphiques ; ce n'est pas une borne mémoire universelle."

msgid "Numeric datasets with three dimensions or more (image stacks, spectral cubes...) are now listed in the HDF5 browser, with their shape and type. They are not imported as a whole, and there is no graphical slice selector: developers can read their 1D or 2D views with `sigimax.h5.selection.read_selection`, which reads only the selected elements (`NDSelection`: displayed axes, possibly transposed, and an index along each other axis)."
msgstr "Les jeux de données numériques à trois dimensions ou plus (piles d'images, cubes spectraux...) sont désormais listés dans l'explorateur HDF5 avec leur forme et leur type. Ils ne sont pas importés en entier, et il n'existe pas de sélecteur graphique de coupes : les développeurs peuvent lire leurs vues 1D ou 2D avec `sigimax.h5.selection.read_selection`, qui ne lit que les éléments sélectionnés (`NDSelection` : axes affichés, éventuellement transposés, et un indice sur chaque autre axe)."

msgid "NeXus `NXdata` groups are shown as single nodes, imported as a signal (1D) or an image (2D) with their axes, units, labels and, for signals, uncertainties: `@signal`/`@axes` attributes with `@<axis>_indices`, legacy `signal`/`axes` dataset attributes, bin edges converted to bin centers, non-uniform image axes. Uniform axes are detected within the precision of their data type (e.g. `float32` axes), and decreasing image axes are reversed with the image. Invalid axes (axis count differing from the signal rank, axes designating a missing or already described dimension, axes not holding real numbers, image axes not strictly monotonic) are reported instead of being guessed. Imported objects record their origin in the `experimental_source` metadata entry (file, group, signal and axes, `\".\"` for a dimension without axis, conversions). `.nxs` and `.nx5` files are proposed in HDF5 file dialogs."
msgstr "Les groupes NeXus `NXdata` sont présentés comme des nœuds uniques, importés comme signal (1D) ou image (2D) avec leurs axes, unités, libellés et, pour les signaux, incertitudes : attributs `@signal`/`@axes` avec `@<axis>_indices`, anciens attributs de jeux de données `signal`/`axes`, conversion des bords de classes en centres, axes d'image non uniformes. Les axes uniformes sont détectés à la précision de leur type de données (par exemple des axes `float32`), et les axes d'image décroissants sont inversés avec l'image. Les axes invalides (nombre d'axes différent du rang du signal, axes désignant une dimension absente ou déjà décrite, axes ne contenant pas de nombres réels, axes d'image non strictement monotones) sont signalés au lieu d'être devinés. Les objets importés enregistrent leur origine dans la métadonnée `experimental_source` (fichier, groupe, signal et axes, `\".\"` pour une dimension sans axe, conversions). Les fichiers `.nxs` et `.nx5` sont proposés dans les dialogues de fichiers HDF5."

msgid "Files that do not designate their data with suitable `NXdata` groups (no axes, several counters...) can be described by declarative data mappings (`sigimax.h5.mapping`): JSON-compatible descriptions of the signals and images of the groups having given attributes and paths, with their axes, uncertainties, labels and units, and a name pattern to repeat an object for each counter of a scan. Mapped objects are shown as extra nodes of the HDF5 browser and record the mapping in their `experimental_source`. Applications and plugins register mappings with `register_mapping` (and `unregister_mapping`); `NodeFactory.add_children_provider` lets them add such extra nodes. Blank units and labels are now ignored."
msgstr "Les fichiers qui ne désignent pas leurs données par des groupes `NXdata` adaptés (sans axes, plusieurs compteurs...) peuvent être décrits par des profils de correspondance déclaratifs (`sigimax.h5.mapping`) : descriptions compatibles JSON des signaux et images des groupes ayant les attributs et chemins donnés, avec leurs axes, incertitudes, libellés et unités, et un motif de nom pour répéter un objet pour chaque compteur d'un scan. Les objets décrits apparaissent comme des nœuds supplémentaires de l'explorateur HDF5 et enregistrent le profil dans leur `experimental_source`. Les applications et plugins enregistrent les profils avec `register_mapping` (et `unregister_mapping`) ; `NodeFactory.add_children_provider` leur permet d'ajouter ces nœuds supplémentaires. Les unités et libellés vides sont désormais ignorés."

msgid "Dataset attributes with more than `MAX_ATTRIBUTE_ITEMS` (10 000) values are no longer copied to object metadata."
msgstr "Les attributs de jeux de données contenant plus de `MAX_ATTRIBUTE_ITEMS` (10 000) valeurs ne sont plus copiés dans les métadonnées des objets."

msgid "Images with unsigned 32-bit values above 2 147 483 647 are no longer clipped to `int32`: they are converted with Sigima's converter, which keeps every value exactly with Sigima ≥ 1.4.0. `BaseNode.uint32_wng` is kept for compatibility and is always `False`."
msgstr "Les images contenant des valeurs entières non signées sur 32 bits supérieures à 2 147 483 647 ne sont plus écrêtées en `int32` : elles sont converties avec le convertisseur de Sigima, qui conserve chaque valeur exactement avec Sigima ≥ 1.4.0. `BaseNode.uint32_wng` est conservé pour compatibilité et vaut toujours `False`."

msgid "1D datasets of single-precision complex numbers (`complex64`) are now imported as complex signals: only their real part was kept (with a `ComplexWarning`). Integer signals beyond 2⁵³ now emit Sigima's precision warning instead of being rounded silently, and 2D tables with complex X values or uncertainties are reported as unsupported instead of being truncated."
msgstr "Les jeux de données 1D de nombres complexes en simple précision (`complex64`) sont désormais importés comme des signaux complexes : seule leur partie réelle était conservée (avec un `ComplexWarning`). Les signaux entiers au-delà de 2⁵³ émettent désormais l'avertissement de précision de Sigima au lieu d'être arrondis silencieusement, et les tableaux 2D dont les valeurs X ou les incertitudes sont complexes sont signalés comme non pris en charge au lieu d'être tronqués."

msgid "`NodeFactory.unregister` removes a node class and its post triggers, so that an application plugin can remove the node classes it registered when it is unloaded."
msgstr "`NodeFactory.unregister` retire une classe de nœud et ses déclencheurs de post-traitement, afin qu'un plugin applicatif puisse retirer les classes de nœuds qu'il a enregistrées lors de son déchargement."

msgid "Files containing broken links (soft links to a missing object, or external links to a missing file, as in synchrotron master files whose detector files are not available) can now be opened: the broken links are skipped with a warning in the console, instead of preventing the whole file from being browsed or imported."
msgstr "Les fichiers contenant des liens rompus (liens symboliques vers un objet absent, ou liens externes vers un fichier absent, comme dans les fichiers maîtres de synchrotron dont les fichiers de détecteur ne sont pas disponibles) peuvent désormais être ouverts : les liens rompus sont ignorés avec un avertissement dans la console, au lieu d'empêcher l'exploration ou l'import de tout le fichier."

msgid "See the [HDF5 guide](../user_guide/hdf5_workspace.rst) for a complete JSON mapping and registration example, NeXus import limits and multidimensional selection examples."
msgstr "Le [guide HDF5](../user_guide/hdf5_workspace.rst) fournit un exemple complet de profil JSON et d'enregistrement, les limites de l'import NeXus et des exemples de sélections multidimensionnelles."

msgid "Requirements"
msgstr "Exigences"

msgid "Sigima 1.3.0 or later is required for the portable annotation model, PlotPy conversion helpers and curve fitting model formulas."
msgstr "Sigima 1.3.0 ou une version ultérieure est requise pour le modèle d'annotation portable, les helpers de conversion PlotPy et les formules des modèles d'ajustement de courbes."
msgid "Sigima 1.4.0 or later is required: the HDF5 import modules use its experimental-source API, and integer conversions use its precision-preserving converter."
msgstr "Sigima 1.4.0 ou ultérieur est requis : les modules d'import HDF5 utilisent son API d'origine expérimentale, et les conversions d'entiers utilisent son convertisseur préservant la précision."

4 changes: 2 additions & 2 deletions doc/locale/fr/LC_MESSAGES/requirements.po
Original file line number Diff line number Diff line change
Expand Up @@ -63,8 +63,8 @@ msgstr "Bibliothèque multiplateforme pour la surveillance des processus et du s
msgid "Sigima"
msgstr "Sigima"

msgid ">= 1.2.0"
msgstr ">= 1.2.0"
msgid ">= 1.4.0"
msgstr ">= 1.4.0"

msgid "Scientific computing engine for 1D signals and 2D images, part of the DataLab open-source platform."
msgstr "Moteur de calcul scientifique pour les signaux 1D et les images 2D, faisant partie de la plateforme open-source DataLab."
Expand Down
Loading
Loading