thyra 2.1.0__tar.gz → 2.2.1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {thyra-2.1.0 → thyra-2.2.1}/PKG-INFO +1 -1
- {thyra-2.1.0 → thyra-2.2.1}/pyproject.toml +1 -1
- {thyra-2.1.0 → thyra-2.2.1}/thyra/__init__.py +1 -1
- {thyra-2.1.0 → thyra-2.2.1}/thyra/readers/imzml/imzml_reader.py +18 -1
- {thyra-2.1.0 → thyra-2.2.1}/LICENSE +0 -0
- {thyra-2.1.0 → thyra-2.2.1}/README.md +0 -0
- {thyra-2.1.0 → thyra-2.2.1}/thyra/__main__.py +0 -0
- {thyra-2.1.0 → thyra-2.2.1}/thyra/alignment/__init__.py +0 -0
- {thyra-2.1.0 → thyra-2.2.1}/thyra/alignment/affine.py +0 -0
- {thyra-2.1.0 → thyra-2.2.1}/thyra/alignment/teaching_points.py +0 -0
- {thyra-2.1.0 → thyra-2.2.1}/thyra/config.py +0 -0
- {thyra-2.1.0 → thyra-2.2.1}/thyra/convert.py +0 -0
- {thyra-2.1.0 → thyra-2.2.1}/thyra/converters/__init__.py +0 -0
- {thyra-2.1.0 → thyra-2.2.1}/thyra/converters/spatialdata/__init__.py +0 -0
- {thyra-2.1.0 → thyra-2.2.1}/thyra/converters/spatialdata/_chunking.py +0 -0
- {thyra-2.1.0 → thyra-2.2.1}/thyra/converters/spatialdata/base_spatialdata_converter.py +0 -0
- {thyra-2.1.0 → thyra-2.2.1}/thyra/converters/spatialdata/converter.py +0 -0
- {thyra-2.1.0 → thyra-2.2.1}/thyra/converters/spatialdata/spatialdata_2d_converter.py +0 -0
- {thyra-2.1.0 → thyra-2.2.1}/thyra/converters/spatialdata/spatialdata_3d_converter.py +0 -0
- {thyra-2.1.0 → thyra-2.2.1}/thyra/converters/spatialdata/streaming_converter.py +0 -0
- {thyra-2.1.0 → thyra-2.2.1}/thyra/core/__init__.py +0 -0
- {thyra-2.1.0 → thyra-2.2.1}/thyra/core/base_converter.py +0 -0
- {thyra-2.1.0 → thyra-2.2.1}/thyra/core/base_extractor.py +0 -0
- {thyra-2.1.0 → thyra-2.2.1}/thyra/core/base_reader.py +0 -0
- {thyra-2.1.0 → thyra-2.2.1}/thyra/core/registry.py +0 -0
- {thyra-2.1.0 → thyra-2.2.1}/thyra/metadata/__init__.py +0 -0
- {thyra-2.1.0 → thyra-2.2.1}/thyra/metadata/extractors/__init__.py +0 -0
- {thyra-2.1.0 → thyra-2.2.1}/thyra/metadata/extractors/bruker_extractor.py +0 -0
- {thyra-2.1.0 → thyra-2.2.1}/thyra/metadata/extractors/imzml_extractor.py +0 -0
- {thyra-2.1.0 → thyra-2.2.1}/thyra/metadata/extractors/waters_extractor.py +0 -0
- {thyra-2.1.0 → thyra-2.2.1}/thyra/metadata/ontology/__init__.py +0 -0
- {thyra-2.1.0 → thyra-2.2.1}/thyra/metadata/ontology/_ims.py +0 -0
- {thyra-2.1.0 → thyra-2.2.1}/thyra/metadata/ontology/_ms.py +0 -0
- {thyra-2.1.0 → thyra-2.2.1}/thyra/metadata/ontology/_uo.py +0 -0
- {thyra-2.1.0 → thyra-2.2.1}/thyra/metadata/ontology/cache.py +0 -0
- {thyra-2.1.0 → thyra-2.2.1}/thyra/metadata/types.py +0 -0
- {thyra-2.1.0 → thyra-2.2.1}/thyra/metadata/validator.py +0 -0
- {thyra-2.1.0 → thyra-2.2.1}/thyra/preview.py +0 -0
- {thyra-2.1.0 → thyra-2.2.1}/thyra/readers/__init__.py +0 -0
- {thyra-2.1.0 → thyra-2.2.1}/thyra/readers/bruker/__init__.py +0 -0
- {thyra-2.1.0 → thyra-2.2.1}/thyra/readers/bruker/base_bruker_reader.py +0 -0
- {thyra-2.1.0 → thyra-2.2.1}/thyra/readers/bruker/folder_structure.py +0 -0
- {thyra-2.1.0 → thyra-2.2.1}/thyra/readers/bruker/mis_parser.py +0 -0
- {thyra-2.1.0 → thyra-2.2.1}/thyra/readers/bruker/rapiflex/__init__.py +0 -0
- {thyra-2.1.0 → thyra-2.2.1}/thyra/readers/bruker/rapiflex/rapiflex_reader.py +0 -0
- {thyra-2.1.0 → thyra-2.2.1}/thyra/readers/bruker/timstof/__init__.py +0 -0
- {thyra-2.1.0 → thyra-2.2.1}/thyra/readers/bruker/timstof/sdk/__init__.py +0 -0
- {thyra-2.1.0 → thyra-2.2.1}/thyra/readers/bruker/timstof/sdk/dll/LICENCE-BRUKER.txt +0 -0
- {thyra-2.1.0 → thyra-2.2.1}/thyra/readers/bruker/timstof/sdk/dll/README.md +0 -0
- {thyra-2.1.0 → thyra-2.2.1}/thyra/readers/bruker/timstof/sdk/dll/timsdata.dll +0 -0
- {thyra-2.1.0 → thyra-2.2.1}/thyra/readers/bruker/timstof/sdk/dll/timsdata.so +0 -0
- {thyra-2.1.0 → thyra-2.2.1}/thyra/readers/bruker/timstof/sdk/dll_manager.py +0 -0
- {thyra-2.1.0 → thyra-2.2.1}/thyra/readers/bruker/timstof/sdk/platform_detector.py +0 -0
- {thyra-2.1.0 → thyra-2.2.1}/thyra/readers/bruker/timstof/sdk/sdk_functions.py +0 -0
- {thyra-2.1.0 → thyra-2.2.1}/thyra/readers/bruker/timstof/timstof_reader.py +0 -0
- {thyra-2.1.0 → thyra-2.2.1}/thyra/readers/bruker/timstof/utils/__init__.py +0 -0
- {thyra-2.1.0 → thyra-2.2.1}/thyra/readers/bruker/timstof/utils/batch_processor.py +0 -0
- {thyra-2.1.0 → thyra-2.2.1}/thyra/readers/bruker/timstof/utils/coordinate_cache.py +0 -0
- {thyra-2.1.0 → thyra-2.2.1}/thyra/readers/bruker/timstof/utils/mass_axis_builder.py +0 -0
- {thyra-2.1.0 → thyra-2.2.1}/thyra/readers/bruker/timstof/utils/memory_manager.py +0 -0
- {thyra-2.1.0 → thyra-2.2.1}/thyra/readers/imzml/__init__.py +0 -0
- {thyra-2.1.0 → thyra-2.2.1}/thyra/readers/waters/__init__.py +0 -0
- {thyra-2.1.0 → thyra-2.2.1}/thyra/readers/waters/imaging_grid.py +0 -0
- {thyra-2.1.0 → thyra-2.2.1}/thyra/readers/waters/lib/MLReader.dll +0 -0
- {thyra-2.1.0 → thyra-2.2.1}/thyra/readers/waters/lib/MassLynxRaw.dll +0 -0
- {thyra-2.1.0 → thyra-2.2.1}/thyra/readers/waters/lib/libMLReader.so +0 -0
- {thyra-2.1.0 → thyra-2.2.1}/thyra/readers/waters/lib/libMassLynxRaw.so +0 -0
- {thyra-2.1.0 → thyra-2.2.1}/thyra/readers/waters/masslynx_lib.py +0 -0
- {thyra-2.1.0 → thyra-2.2.1}/thyra/readers/waters/waters_reader.py +0 -0
- {thyra-2.1.0 → thyra-2.2.1}/thyra/resampling/__init__.py +0 -0
- {thyra-2.1.0 → thyra-2.2.1}/thyra/resampling/common_axis.py +0 -0
- {thyra-2.1.0 → thyra-2.2.1}/thyra/resampling/constants.py +0 -0
- {thyra-2.1.0 → thyra-2.2.1}/thyra/resampling/data_characteristics.py +0 -0
- {thyra-2.1.0 → thyra-2.2.1}/thyra/resampling/decision_tree.py +0 -0
- {thyra-2.1.0 → thyra-2.2.1}/thyra/resampling/gaps.py +0 -0
- {thyra-2.1.0 → thyra-2.2.1}/thyra/resampling/instrument_detectors.py +0 -0
- {thyra-2.1.0 → thyra-2.2.1}/thyra/resampling/mass_axis/__init__.py +0 -0
- {thyra-2.1.0 → thyra-2.2.1}/thyra/resampling/mass_axis/base_generator.py +0 -0
- {thyra-2.1.0 → thyra-2.2.1}/thyra/resampling/mass_axis/fticr_generator.py +0 -0
- {thyra-2.1.0 → thyra-2.2.1}/thyra/resampling/mass_axis/linear_generator.py +0 -0
- {thyra-2.1.0 → thyra-2.2.1}/thyra/resampling/mass_axis/linear_tof_generator.py +0 -0
- {thyra-2.1.0 → thyra-2.2.1}/thyra/resampling/mass_axis/orbitrap_generator.py +0 -0
- {thyra-2.1.0 → thyra-2.2.1}/thyra/resampling/mass_axis/reflector_tof_generator.py +0 -0
- {thyra-2.1.0 → thyra-2.2.1}/thyra/resampling/strategies/__init__.py +0 -0
- {thyra-2.1.0 → thyra-2.2.1}/thyra/resampling/strategies/base.py +0 -0
- {thyra-2.1.0 → thyra-2.2.1}/thyra/resampling/strategies/nearest_neighbor.py +0 -0
- {thyra-2.1.0 → thyra-2.2.1}/thyra/resampling/strategies/tic_preserving.py +0 -0
- {thyra-2.1.0 → thyra-2.2.1}/thyra/resampling/tic.py +0 -0
- {thyra-2.1.0 → thyra-2.2.1}/thyra/resampling/types.py +0 -0
- {thyra-2.1.0 → thyra-2.2.1}/thyra/tools/__init__.py +0 -0
- {thyra-2.1.0 → thyra-2.2.1}/thyra/tools/check_ontology.py +0 -0
- {thyra-2.1.0 → thyra-2.2.1}/thyra/tools/make_example_data.py +0 -0
- {thyra-2.1.0 → thyra-2.2.1}/thyra/utils/__init__.py +0 -0
- {thyra-2.1.0 → thyra-2.2.1}/thyra/utils/bruker_exceptions.py +0 -0
- {thyra-2.1.0 → thyra-2.2.1}/thyra/utils/logging_config.py +0 -0
- {thyra-2.1.0 → thyra-2.2.1}/thyra/utils/windows_paths.py +0 -0
- {thyra-2.1.0 → thyra-2.2.1}/thyra/utils/zarr_atomic_write.py +0 -0
|
@@ -4,7 +4,7 @@ build-backend = "poetry.core.masonry.api"
|
|
|
4
4
|
|
|
5
5
|
[tool.poetry]
|
|
6
6
|
name = "thyra"
|
|
7
|
-
version = "2.1
|
|
7
|
+
version = "2.2.1"
|
|
8
8
|
description = "A modern Python library for converting Mass Spectrometry Imaging (MSI) data into SpatialData/Zarr format - your portal to spatial omics"
|
|
9
9
|
authors = ["Theodoros Visvikis <t.visvikis@maastrichtuniversity.nl>"]
|
|
10
10
|
maintainers = ["Theodoros Visvikis <t.visvikis@maastrichtuniversity.nl>"]
|
|
@@ -415,9 +415,26 @@ class ImzMLReader(BaseMSIReader):
|
|
|
415
415
|
# Initialize the parser
|
|
416
416
|
logger.info(f"Initializing ImzML parser for {imzml_path}")
|
|
417
417
|
try:
|
|
418
|
+
# ElementTree, NOT lxml. pyimzml prunes each <spectrum> out of the
|
|
419
|
+
# tree (`slist.remove(elem)`) while iterparse is still streaming the
|
|
420
|
+
# document, which invalidates libxml2's text-node coalescing
|
|
421
|
+
# accelerator: ctxt->nodelen/nodemem go on describing a text node
|
|
422
|
+
# inside the subtree that was just removed, so later character data
|
|
423
|
+
# is appended at a stale offset and the buffer is doubled on every
|
|
424
|
+
# miss until xmlRealloc fails. lxml surfaces libxml2's
|
|
425
|
+
# XML_ERR_NO_MEMORY as a *syntax* error, so it reads as a corrupt
|
|
426
|
+
# file when nothing is wrong with it:
|
|
427
|
+
# XMLSyntaxError: xmlSAX2Characters, line 212575, column 1
|
|
428
|
+
# It only bites when the text between </spectrum> and <spectrum> is
|
|
429
|
+
# exactly "\r\n" -- CRLF with no indentation, how IONTOF SurfaceLab
|
|
430
|
+
# writes imzML. Indented or LF-only files coalesce differently and
|
|
431
|
+
# survive, which is why most files never hit it. ElementTree builds
|
|
432
|
+
# the tree in Python, so there is no C parser state to invalidate;
|
|
433
|
+
# it is also pyimzml's own default, parses byte-identically, and is
|
|
434
|
+
# faster here -- 67s vs 118s on a 2.1 GB imzML at the same peak RSS.
|
|
418
435
|
self.parser = ImzMLParser(
|
|
419
436
|
filename=str(imzml_path),
|
|
420
|
-
parse_lib="
|
|
437
|
+
parse_lib="ElementTree",
|
|
421
438
|
ibd_file=self.ibd_file,
|
|
422
439
|
)
|
|
423
440
|
except Exception as e:
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|