large-image-source-openslide 1.32.7.dev6__tar.gz → 1.33.5.dev6__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.
Potentially problematic release.
This version of large-image-source-openslide might be problematic. Click here for more details.
- {large_image_source_openslide-1.32.7.dev6 → large_image_source_openslide-1.33.5.dev6}/PKG-INFO +4 -5
- {large_image_source_openslide-1.32.7.dev6 → large_image_source_openslide-1.33.5.dev6}/large_image_source_openslide/__init__.py +34 -5
- {large_image_source_openslide-1.32.7.dev6 → large_image_source_openslide-1.33.5.dev6}/large_image_source_openslide/girder_source.py +2 -2
- {large_image_source_openslide-1.32.7.dev6 → large_image_source_openslide-1.33.5.dev6}/large_image_source_openslide.egg-info/PKG-INFO +4 -5
- {large_image_source_openslide-1.32.7.dev6 → large_image_source_openslide-1.33.5.dev6}/large_image_source_openslide.egg-info/requires.txt +2 -2
- {large_image_source_openslide-1.32.7.dev6 → large_image_source_openslide-1.33.5.dev6}/setup.py +1 -2
- {large_image_source_openslide-1.32.7.dev6 → large_image_source_openslide-1.33.5.dev6}/LICENSE +0 -0
- {large_image_source_openslide-1.32.7.dev6 → large_image_source_openslide-1.33.5.dev6}/README.rst +0 -0
- {large_image_source_openslide-1.32.7.dev6 → large_image_source_openslide-1.33.5.dev6}/large_image_source_openslide.egg-info/SOURCES.txt +0 -0
- {large_image_source_openslide-1.32.7.dev6 → large_image_source_openslide-1.33.5.dev6}/large_image_source_openslide.egg-info/dependency_links.txt +0 -0
- {large_image_source_openslide-1.32.7.dev6 → large_image_source_openslide-1.33.5.dev6}/large_image_source_openslide.egg-info/entry_points.txt +0 -0
- {large_image_source_openslide-1.32.7.dev6 → large_image_source_openslide-1.33.5.dev6}/large_image_source_openslide.egg-info/top_level.txt +0 -0
- {large_image_source_openslide-1.32.7.dev6 → large_image_source_openslide-1.33.5.dev6}/pyproject.toml +0 -0
- {large_image_source_openslide-1.32.7.dev6 → large_image_source_openslide-1.33.5.dev6}/setup.cfg +0 -0
{large_image_source_openslide-1.32.7.dev6 → large_image_source_openslide-1.33.5.dev6}/PKG-INFO
RENAMED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: large-image-source-openslide
|
|
3
|
-
Version: 1.
|
|
3
|
+
Version: 1.33.5.dev6
|
|
4
4
|
Summary: An Openslide tilesource for large_image.
|
|
5
5
|
Home-page: https://github.com/girder/large_image
|
|
6
6
|
Author: Kitware, Inc.
|
|
@@ -9,16 +9,15 @@ License: Apache-2.0
|
|
|
9
9
|
Keywords: large_image,tile source
|
|
10
10
|
Classifier: Development Status :: 5 - Production/Stable
|
|
11
11
|
Classifier: Programming Language :: Python :: 3
|
|
12
|
-
Classifier: Programming Language :: Python :: 3.8
|
|
13
12
|
Classifier: Programming Language :: Python :: 3.9
|
|
14
13
|
Classifier: Programming Language :: Python :: 3.10
|
|
15
14
|
Classifier: Programming Language :: Python :: 3.11
|
|
16
15
|
Classifier: Programming Language :: Python :: 3.12
|
|
17
16
|
Classifier: Programming Language :: Python :: 3.13
|
|
18
|
-
Requires-Python: >=3.
|
|
17
|
+
Requires-Python: >=3.9
|
|
19
18
|
Description-Content-Type: text/x-rst
|
|
20
19
|
License-File: LICENSE
|
|
21
|
-
Requires-Dist: large-image>=1.
|
|
20
|
+
Requires-Dist: large-image>=1.33.5.dev6
|
|
22
21
|
Requires-Dist: openslide-python>=1.4.1
|
|
23
22
|
Requires-Dist: openslide-bin; platform_system == "Linux" and platform_machine == "x86_64"
|
|
24
23
|
Requires-Dist: openslide-bin; platform_system == "Linux" and platform_machine == "aarch64"
|
|
@@ -27,7 +26,7 @@ Requires-Dist: openslide-bin; platform_system == "Darwin" and platform_machine =
|
|
|
27
26
|
Requires-Dist: openslide-bin; platform_system == "Darwin" and platform_machine == "x86_64"
|
|
28
27
|
Requires-Dist: tifftools>=1.2.0
|
|
29
28
|
Provides-Extra: girder
|
|
30
|
-
Requires-Dist: girder-large-image>=1.
|
|
29
|
+
Requires-Dist: girder-large-image>=1.33.5.dev6; extra == "girder"
|
|
31
30
|
Dynamic: author
|
|
32
31
|
Dynamic: author-email
|
|
33
32
|
Dynamic: classifier
|
|
@@ -49,7 +49,7 @@ class OpenslideFileTileSource(FileTileSource, metaclass=LruCacheMetaclass):
|
|
|
49
49
|
None: SourcePriority.MEDIUM,
|
|
50
50
|
'bif': SourcePriority.LOW, # Ventana
|
|
51
51
|
'czi': SourcePriority.PREFERRED,
|
|
52
|
-
'dcm': SourcePriority.
|
|
52
|
+
'dcm': SourcePriority.MEDIUM, # DICOM
|
|
53
53
|
'ini': SourcePriority.LOW, # Part of mrxs
|
|
54
54
|
'mrxs': SourcePriority.PREFERRED, # MIRAX
|
|
55
55
|
'ndpi': SourcePriority.PREFERRED, # Hamamatsu
|
|
@@ -64,6 +64,7 @@ class OpenslideFileTileSource(FileTileSource, metaclass=LruCacheMetaclass):
|
|
|
64
64
|
mimeTypes = {
|
|
65
65
|
None: SourcePriority.FALLBACK,
|
|
66
66
|
'image/czi': SourcePriority.PREFERRED,
|
|
67
|
+
'application/dicom': SourcePriority.MEDIUM,
|
|
67
68
|
'image/mirax': SourcePriority.PREFERRED, # MIRAX
|
|
68
69
|
'image/tiff': SourcePriority.MEDIUM,
|
|
69
70
|
'image/x-tiff': SourcePriority.MEDIUM,
|
|
@@ -138,19 +139,22 @@ class OpenslideFileTileSource(FileTileSource, metaclass=LruCacheMetaclass):
|
|
|
138
139
|
# load an appropriate area and scale it to the tile size later.
|
|
139
140
|
maxSize = 16384 # This should probably be based on available memory
|
|
140
141
|
for level in range(self.levels):
|
|
141
|
-
|
|
142
|
-
|
|
142
|
+
levelpow = 2 ** (self.levels - 1 - level)
|
|
143
|
+
levelW = max(1, self.sizeX / levelpow)
|
|
144
|
+
levelH = max(1, self.sizeY / levelpow)
|
|
143
145
|
# bestlevel and scale will be the picked svs level and the scale
|
|
144
146
|
# between that level and what we really wanted. We expect scale to
|
|
145
147
|
# always be a positive integer power of two.
|
|
146
148
|
bestlevel = svsAvailableLevels[0]['level']
|
|
147
149
|
scale = 1
|
|
150
|
+
svsscale = 0
|
|
148
151
|
for svslevel in range(len(svsAvailableLevels)):
|
|
149
152
|
if (svsAvailableLevels[svslevel]['width'] < levelW - 1 or
|
|
150
153
|
svsAvailableLevels[svslevel]['height'] < levelH - 1):
|
|
151
154
|
break
|
|
152
155
|
bestlevel = svsAvailableLevels[svslevel]['level']
|
|
153
156
|
scale = int(round(svsAvailableLevels[svslevel]['width'] / levelW))
|
|
157
|
+
svsscale = svsAvailableLevels[svslevel].get('downsample', 0)
|
|
154
158
|
# If there are no tiles at a particular level, we have to read a
|
|
155
159
|
# larger area of a higher resolution level. If such an area would
|
|
156
160
|
# be excessively large, we could have memory issues, so raise an
|
|
@@ -164,6 +168,7 @@ class OpenslideFileTileSource(FileTileSource, metaclass=LruCacheMetaclass):
|
|
|
164
168
|
self._svslevels.append({
|
|
165
169
|
'svslevel': bestlevel,
|
|
166
170
|
'scale': scale,
|
|
171
|
+
'svsscale': ((svsscale / levelpow) if svsscale else 1) * scale,
|
|
167
172
|
})
|
|
168
173
|
self._bounds = None
|
|
169
174
|
try:
|
|
@@ -244,6 +249,7 @@ class OpenslideFileTileSource(FileTileSource, metaclass=LruCacheMetaclass):
|
|
|
244
249
|
"""
|
|
245
250
|
levels = []
|
|
246
251
|
svsLevelDimensions = self._openslide.level_dimensions
|
|
252
|
+
|
|
247
253
|
for svslevel in range(len(svsLevelDimensions)):
|
|
248
254
|
try:
|
|
249
255
|
self._openslide.read_region((0, 0), svslevel, (1, 1))
|
|
@@ -252,6 +258,10 @@ class OpenslideFileTileSource(FileTileSource, metaclass=LruCacheMetaclass):
|
|
|
252
258
|
'width': svsLevelDimensions[svslevel][0],
|
|
253
259
|
'height': svsLevelDimensions[svslevel][1],
|
|
254
260
|
}
|
|
261
|
+
try:
|
|
262
|
+
level['downsample'] = self._openslide.level_downsamples[svslevel]
|
|
263
|
+
except Exception:
|
|
264
|
+
pass
|
|
255
265
|
if level['width'] > 0 and level['height'] > 0:
|
|
256
266
|
# add to the list so that we can sort by resolution and
|
|
257
267
|
# then by earlier entries
|
|
@@ -343,12 +353,31 @@ class OpenslideFileTileSource(FileTileSource, metaclass=LruCacheMetaclass):
|
|
|
343
353
|
tile, format = self._getTileFromEmptyLevel(x, y, z, **kwargs)
|
|
344
354
|
else:
|
|
345
355
|
retries = 3
|
|
356
|
+
svsTileWidth = self.tileWidth * svslevel['scale']
|
|
357
|
+
svsTileHeight = self.tileHeight * svslevel['scale']
|
|
358
|
+
# Peculiarly, openslide has a "downsample" factor which isn't the
|
|
359
|
+
# power of 2 one would expect. This is computed based on the
|
|
360
|
+
# actual dimensions of levels, but since higher-resolution levels
|
|
361
|
+
# are not fully populated at the right and bottom, this ends up
|
|
362
|
+
# with not the actual downsampling, but some slightly higher number
|
|
363
|
+
# (e.g., 16.0018 rather than 16). Internally, when asking for a
|
|
364
|
+
# region for anything other than the maximum resolution lever, the
|
|
365
|
+
# openslide library is passed coordinates in what _seems_ to be
|
|
366
|
+
# base image coordinates, but is actually inflated by the ratio of
|
|
367
|
+
# their downsample value and the actual downsample value (e.g.,
|
|
368
|
+
# 16.0018 / 16). We multiple our values by this ratio so when
|
|
369
|
+
# openslide misapplies its downsampling we get the region we
|
|
370
|
+
# actually want
|
|
371
|
+
if svslevel['svsscale'] != 1:
|
|
372
|
+
offsetx = int(round(offsetx * svslevel['svsscale']))
|
|
373
|
+
offsety = int(round(offsety * svslevel['svsscale']))
|
|
374
|
+
svsTileWidth = int(round(svsTileWidth * svslevel['svsscale']))
|
|
375
|
+
svsTileHeight = int(round(svsTileHeight * svslevel['svsscale']))
|
|
346
376
|
while retries > 0:
|
|
347
377
|
try:
|
|
348
378
|
tile = self._openslide.read_region(
|
|
349
379
|
(offsetx, offsety), svslevel['svslevel'],
|
|
350
|
-
(
|
|
351
|
-
self.tileHeight * svslevel['scale']))
|
|
380
|
+
(svsTileWidth, svsTileHeight))
|
|
352
381
|
format = TILE_FORMAT_PIL
|
|
353
382
|
break
|
|
354
383
|
except openslide.lowlevel.OpenSlideError as exc:
|
|
@@ -28,5 +28,5 @@ class OpenslideGirderTileSource(OpenslideFileTileSource, GirderTileSource):
|
|
|
28
28
|
cacheName = 'tilesource'
|
|
29
29
|
name = 'openslide'
|
|
30
30
|
|
|
31
|
-
extensionsWithAdjacentFiles = {'mrxs'}
|
|
32
|
-
mimeTypesWithAdjacentFiles = {'image/mirax'}
|
|
31
|
+
extensionsWithAdjacentFiles = {'mrxs', 'dcm', 'dicom'}
|
|
32
|
+
mimeTypesWithAdjacentFiles = {'image/mirax', 'application/dicom'}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: large-image-source-openslide
|
|
3
|
-
Version: 1.
|
|
3
|
+
Version: 1.33.5.dev6
|
|
4
4
|
Summary: An Openslide tilesource for large_image.
|
|
5
5
|
Home-page: https://github.com/girder/large_image
|
|
6
6
|
Author: Kitware, Inc.
|
|
@@ -9,16 +9,15 @@ License: Apache-2.0
|
|
|
9
9
|
Keywords: large_image,tile source
|
|
10
10
|
Classifier: Development Status :: 5 - Production/Stable
|
|
11
11
|
Classifier: Programming Language :: Python :: 3
|
|
12
|
-
Classifier: Programming Language :: Python :: 3.8
|
|
13
12
|
Classifier: Programming Language :: Python :: 3.9
|
|
14
13
|
Classifier: Programming Language :: Python :: 3.10
|
|
15
14
|
Classifier: Programming Language :: Python :: 3.11
|
|
16
15
|
Classifier: Programming Language :: Python :: 3.12
|
|
17
16
|
Classifier: Programming Language :: Python :: 3.13
|
|
18
|
-
Requires-Python: >=3.
|
|
17
|
+
Requires-Python: >=3.9
|
|
19
18
|
Description-Content-Type: text/x-rst
|
|
20
19
|
License-File: LICENSE
|
|
21
|
-
Requires-Dist: large-image>=1.
|
|
20
|
+
Requires-Dist: large-image>=1.33.5.dev6
|
|
22
21
|
Requires-Dist: openslide-python>=1.4.1
|
|
23
22
|
Requires-Dist: openslide-bin; platform_system == "Linux" and platform_machine == "x86_64"
|
|
24
23
|
Requires-Dist: openslide-bin; platform_system == "Linux" and platform_machine == "aarch64"
|
|
@@ -27,7 +26,7 @@ Requires-Dist: openslide-bin; platform_system == "Darwin" and platform_machine =
|
|
|
27
26
|
Requires-Dist: openslide-bin; platform_system == "Darwin" and platform_machine == "x86_64"
|
|
28
27
|
Requires-Dist: tifftools>=1.2.0
|
|
29
28
|
Provides-Extra: girder
|
|
30
|
-
Requires-Dist: girder-large-image>=1.
|
|
29
|
+
Requires-Dist: girder-large-image>=1.33.5.dev6; extra == "girder"
|
|
31
30
|
Dynamic: author
|
|
32
31
|
Dynamic: author-email
|
|
33
32
|
Dynamic: classifier
|
{large_image_source_openslide-1.32.7.dev6 → large_image_source_openslide-1.33.5.dev6}/setup.py
RENAMED
|
@@ -25,13 +25,13 @@ setup(
|
|
|
25
25
|
classifiers=[
|
|
26
26
|
'Development Status :: 5 - Production/Stable',
|
|
27
27
|
'Programming Language :: Python :: 3',
|
|
28
|
-
'Programming Language :: Python :: 3.8',
|
|
29
28
|
'Programming Language :: Python :: 3.9',
|
|
30
29
|
'Programming Language :: Python :: 3.10',
|
|
31
30
|
'Programming Language :: Python :: 3.11',
|
|
32
31
|
'Programming Language :: Python :: 3.12',
|
|
33
32
|
'Programming Language :: Python :: 3.13',
|
|
34
33
|
],
|
|
34
|
+
python_requires='>=3.9',
|
|
35
35
|
install_requires=[
|
|
36
36
|
f'large-image{limit_version}',
|
|
37
37
|
'openslide-python>=1.4.1',
|
|
@@ -48,7 +48,6 @@ setup(
|
|
|
48
48
|
keywords='large_image, tile source',
|
|
49
49
|
packages=find_packages(exclude=['test', 'test.*']),
|
|
50
50
|
url='https://github.com/girder/large_image',
|
|
51
|
-
python_requires='>=3.8',
|
|
52
51
|
entry_points={
|
|
53
52
|
'large_image.source': [
|
|
54
53
|
'openslide = large_image_source_openslide:OpenslideFileTileSource',
|
{large_image_source_openslide-1.32.7.dev6 → large_image_source_openslide-1.33.5.dev6}/LICENSE
RENAMED
|
File without changes
|
{large_image_source_openslide-1.32.7.dev6 → large_image_source_openslide-1.33.5.dev6}/README.rst
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{large_image_source_openslide-1.32.7.dev6 → large_image_source_openslide-1.33.5.dev6}/pyproject.toml
RENAMED
|
File without changes
|
{large_image_source_openslide-1.32.7.dev6 → large_image_source_openslide-1.33.5.dev6}/setup.cfg
RENAMED
|
File without changes
|