Version 1.1#
Sigima Version 1.1.4#
🛠️ Bug Fixes since version 1.1.3#
Ellipse/circle contour detection: Fixed regression in axis orientation after the v1.1.3 coordinate swap fix. This closes Issue #27.
The sign correction applied in v1.1.3 for the
(row, col)→(x, y)conversion introduced a regression in ellipse axis orientation, causing the semi-major and semi-minor axes to be transposedAdded ground-truth unit tests for
fit_circle_modelandfit_ellipse_modelverifying all output parameters (center coordinates, radius/semi-axes, and rotation angle)
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. This closes Issue #21.
The new
EllipseModel/CircleModelAPI 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 imageSemi-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_diameterscoordinate conversionThe 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.
🔧 Other changes since version 1.1.2#
Debug environment variable: Renamed the test debug environment variable from
DEBUGtoSIGIMA_DEBUGto avoid collisions with unrelated tools and frameworks that commonly export a bareDEBUGvariable. This closes Issue #19.Remote control client: Added
get_current_object_uuid()method toSimpleRemoteProxyandSimpleAbstractDLControl, allowing users to retrieve the UUID of the currently selected object in DataLab
🧪 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.
Sigima Version 1.1.2 (2026-04-20)#
💥 Breaking changes since version 1.1.1#
Removed deprecated
sigima.tests.vistoolsmodule: The backward-compatibility shim introduced in version 1.1.0 has been removedUpdate imports from
from sigima.tests import vistoolstofrom sigima import vizAll visualization helpers (
view_curves,view_images,create_curve,create_image, etc.) remain available under their new home insigima.viz
🛠️ Bug Fixes since version 1.1.1#
CSV header parsing: Fixed whitespace and unit extraction issues when reading CSV column headers
Leading and trailing whitespace in column titles is now properly trimmed (e.g.
" Padded NoUnit "→"Padded NoUnit")Nested parentheses in units are now correctly handled (e.g.
"Signal (a.u. (norm))"→ label"Signal", unit"a.u.(norm)"instead of incorrectly splitting at the last parenthesis)Exotic whitespace characters (tabs, non-breaking spaces) in headers are normalized before parsing
Pandas 3.0 compatibility: Fixed datetime CSV parsing issue with pandas 3.0+
Replaced
ilocassignment with column name assignment to handle dtype conversion correctlyEnsures compatibility with both pandas < 3.0 and pandas 3.0+ versions
Affected functionality: CSV file reading with datetime columns and signal data import from CSV files
All related tests pass after the fix
This closes Issue #12 - Fix pandas 3.0 compatibility issue in datetime CSV parsing
HDF5 serialization of TableResult: Fixed DataLab workspace save failure when table results contain enum values or callable formatters
Enum subclasses (e.g.
SignalShape) stored in table data are now converted to plain strings before serialization, preventingdtype('<U4')errorsNon-serializable entries (e.g. callable column formatters) in
TableResult.attrsare now sanitized before HDF5/JSON export
Datetime signal compatibility: Fixed datetime column handling for compatibility with various NumPy and pandas versions
Allowed any
datetime64resolution (not justns) to support newer NumPy/pandas combinations
Signal uncertainty (dx/dy): Fixed phantom error bars displayed when only one of
dxordywas set on a fresh signalWhen
dywas set first (ordxfirst), the deferred uncertainty row for the other dimension was previously filled with zeros, which downstream tools interpreted as a real all-zero uncertainty array (e.g. PlotPy drew zero-width error bars)Deferred rows are now initialized with NaN, so a missing uncertainty is properly reported as absent — no more spurious error bars
ROI extraction with uncertainty data: Fixed
extract_roiandextract_roislosing the input signal’sdx/dyuncertainty arraysUncertainty samples are now sliced and propagated to the extracted signal exactly like the X/Y data
Affects both single-ROI and multi-ROI extraction workflows
Zero-crossing detection: Fixed
find_zero_crossingsover-reporting on signals containing exact-zero samplesSamples exactly equal to zero used to count as two crossings (e.g.
[-1, 0, 1]reported two crossings instead of one) and “touch-and-bounce” patterns like[1, 0, 1]were wrongly flagged as crossingsSign changes are now detected between consecutive non-zero samples, with contiguous zero runs collapsed to a single crossing only when they actually bridge opposite signs
Downstream features benefit from the fix:
find_x_axis_crossings,find_x_values_at_y,find_bandwidth_coordinates, and pulse FWHM / rise / fall measurements
Contrast computation: Fixed
contrastreturninginf/nanwarnings on signals with negative or all-zero valuesDenominator now uses absolute values (
(max - min) / (|max| + |min|)), keeping the result bounded in[0, 1]for signals with negative samples while matching the standard Michelson contrast for non-negative signalsReturns
nancleanly (without a division-by-zero warning) when bothmaxandminare zero
Datetime conversion accuracy: Fixed
datetime64_to_secondsreturning wrong Unix timestamps for coarsedatetime64resolutionsThe previous implementation only recognized
ns,usandmsand silently used a nanosecond divisor for any other resolution, producing incorrect timestamps fordatetime64[s],datetime64[m],datetime64[h]ordatetime64[D]Inputs are now normalized to
datetime64[ns]before conversion, ensuring correct results for any source resolution and for pandasDatetimeIndexobjects
DICOM image origin and spacing: Fixed
ImageObj.dicom_templatefalling back to inconsistent default coordinates when DICOM tags were missingWhen
ImagePositionPatientorPixelSpacingwas absent from the DICOM template, only the Y origin and Y pixel spacing received the fallback while the X origin and X pixel spacing were left as bare scalars, due to operator precedenceBoth X and Y origin (
x0,y0) and pixel spacing (dx,dy) are now consistently filled with the intended(0.0, 0.0)and(1.0, 1.0)defaults
✨ Enhancements since version 1.1.1#
Legend value formatting: Improved numeric formatting in analysis result legends
Short values are displayed as plain numbers, while long values use scientific notation adapted to fit within the display width
Pulse features table now uses adaptive scientific notation showing only the significant digits needed for exact round-trip representation
Table column display formats: Added per-column format control for
TableResultNew
get_column_formats()/set_column_formats()methods onTableResultTableResultBuildersupportsset_column_formats()for specifying format strings (e.g.{"x0": ".2e"}) or callable formattersSupports
"*"wildcard key as a per-table default formatter
📦 Dependencies changes since version 1.1.1#
Pandas 3.0 support: Officially support pandas 3.0.x after validation — upper bound raised from
< 3.0to< 3.1This closes Issue #13 - Support pandas 3.0
Python 3.14 support: Added Python 3.14 classifier
🔧 Other changes since version 1.1.1#
Remote control client: Added
set_objectmethod toSimpleRemoteProxyandSimpleAbstractDLControl, allowing users to push modified signal/image objects back to DataLab after retrieving them withget_object(see DataLab Issue #305)Stub server: Added
set_objectsupport toDataLabStubServerwith proper UUID-based object lookup, and registeredadd_object/set_objectas XML-RPC functionsStub server: Signal and image objects now carry their UUID in metadata, enabling round-trip
get_object→ modify →set_objectworkflowsImproved development environment setup: new
run_with_env.pyscript supporting multiple Python environment contexts (WinPython, venv, etc.)CI: gated PyPI deployment on test suite passing
Test coverage: Substantially expanded the unit-test suite to exercise previously untested branches across
sigima.objects,sigima.io,sigima.tools,sigima.procandsigima.viz(26 new test modules), and excluded the GUI visualization layer from coverage reports for more meaningful metrics
Sigima Version 1.1.1 (2026-02-02)#
🛠️ Bug Fixes since version 1.1.0#
Stub server: Added missing Web API control methods to
DataLabStubServerfor testing DataLab’s REST API integrationAdded
start_webapi_server()stub (returns dummy URL and token)Added
stop_webapi_server()stubAdded
get_webapi_status()stub (returns server status dictionary)
🔧 Other changes since version 1.1.0#
Updated development status classifier to “Production/Stable”
Added “Try it Online” section with notebook.link integration in documentation
Sigima Version 1.1.0 (2026-01-31)#
✨ New features and enhancements:
Stub server: Added missing methods to
DataLabStubServerto support new DataLab featuresAdded
remove_object()method (removes an object from DataLab)Added
call_method()method (simulates calling a method on DataLab’s main interface or panels)
Test infrastructure: Refactored visualization code in test suite for better maintainability
Centralized PlotPy visualization utilities in
sigima.vizmoduleAdded standardized helper functions:
create_curve(),create_image(),create_circle(),create_segment(),create_cursor(),create_marker(), andcreate_contour_shapes()Updated all interactive test functions to use the new unified API instead of direct PlotPy builder calls
Improved code consistency across signal and image test modules
Visualization backend flexibility: Added support for Matplotlib as an alternative to PlotPy for test visualizations
New configuration option
viz_backendto select visualization library (“auto”, “plotpy”, or “matplotlib”)Environment variable
SIGIMA_VIZ_BACKENDcan override configurationAutomatic fallback from PlotPy to Matplotlib when PlotPy is not available
Backend information exposed via
sigima.viz.BACKEND_NAMEandBACKEND_SOURCEMatplotlib backend provides stubs for unsupported functions (raises
NotImplementedError)Unit test ensures API compatibility between backends
Jupyter notebook HTML representation: Added rich HTML display for Sigima objects in Jupyter notebooks
SignalObjdisplays shape, dtype, X/Y ranges, axis labels, and title in a formatted tableImageObjdisplays shape, dtype, value range, origin, pixel spacing, extent, axis labels, and titleROI objects (
BaseSingleROI,BaseROI) display their geometric propertiesBaseCoordinatesand derived classes display point coordinatesTableResultandGeometryResultdisplay result data with source object informationCentralized CSS styling in
HTML_TABLE_CSSconstant for consistent appearance