large-image-source-openslide 1.32.11__py3-none-any.whl → 1.32.11.dev2__py3-none-any.whl

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.
@@ -139,22 +139,19 @@ class OpenslideFileTileSource(FileTileSource, metaclass=LruCacheMetaclass):
139
139
  # load an appropriate area and scale it to the tile size later.
140
140
  maxSize = 16384 # This should probably be based on available memory
141
141
  for level in range(self.levels):
142
- levelpow = 2 ** (self.levels - 1 - level)
143
- levelW = max(1, self.sizeX / levelpow)
144
- levelH = max(1, self.sizeY / levelpow)
142
+ levelW = max(1, self.sizeX / 2 ** (self.levels - 1 - level))
143
+ levelH = max(1, self.sizeY / 2 ** (self.levels - 1 - level))
145
144
  # bestlevel and scale will be the picked svs level and the scale
146
145
  # between that level and what we really wanted. We expect scale to
147
146
  # always be a positive integer power of two.
148
147
  bestlevel = svsAvailableLevels[0]['level']
149
148
  scale = 1
150
- svsscale = 0
151
149
  for svslevel in range(len(svsAvailableLevels)):
152
150
  if (svsAvailableLevels[svslevel]['width'] < levelW - 1 or
153
151
  svsAvailableLevels[svslevel]['height'] < levelH - 1):
154
152
  break
155
153
  bestlevel = svsAvailableLevels[svslevel]['level']
156
154
  scale = int(round(svsAvailableLevels[svslevel]['width'] / levelW))
157
- svsscale = svsAvailableLevels[svslevel].get('downsample', 0)
158
155
  # If there are no tiles at a particular level, we have to read a
159
156
  # larger area of a higher resolution level. If such an area would
160
157
  # be excessively large, we could have memory issues, so raise an
@@ -168,7 +165,6 @@ class OpenslideFileTileSource(FileTileSource, metaclass=LruCacheMetaclass):
168
165
  self._svslevels.append({
169
166
  'svslevel': bestlevel,
170
167
  'scale': scale,
171
- 'svsscale': ((svsscale / levelpow) if svsscale else 1) * scale,
172
168
  })
173
169
  self._bounds = None
174
170
  try:
@@ -249,7 +245,6 @@ class OpenslideFileTileSource(FileTileSource, metaclass=LruCacheMetaclass):
249
245
  """
250
246
  levels = []
251
247
  svsLevelDimensions = self._openslide.level_dimensions
252
-
253
248
  for svslevel in range(len(svsLevelDimensions)):
254
249
  try:
255
250
  self._openslide.read_region((0, 0), svslevel, (1, 1))
@@ -258,10 +253,6 @@ class OpenslideFileTileSource(FileTileSource, metaclass=LruCacheMetaclass):
258
253
  'width': svsLevelDimensions[svslevel][0],
259
254
  'height': svsLevelDimensions[svslevel][1],
260
255
  }
261
- try:
262
- level['downsample'] = self._openslide.level_downsamples[svslevel]
263
- except Exception:
264
- pass
265
256
  if level['width'] > 0 and level['height'] > 0:
266
257
  # add to the list so that we can sort by resolution and
267
258
  # then by earlier entries
@@ -353,31 +344,12 @@ class OpenslideFileTileSource(FileTileSource, metaclass=LruCacheMetaclass):
353
344
  tile, format = self._getTileFromEmptyLevel(x, y, z, **kwargs)
354
345
  else:
355
346
  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']))
376
347
  while retries > 0:
377
348
  try:
378
349
  tile = self._openslide.read_region(
379
350
  (offsetx, offsety), svslevel['svslevel'],
380
- (svsTileWidth, svsTileHeight))
351
+ (self.tileWidth * svslevel['scale'],
352
+ self.tileHeight * svslevel['scale']))
381
353
  format = TILE_FORMAT_PIL
382
354
  break
383
355
  except openslide.lowlevel.OpenSlideError as exc:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: large-image-source-openslide
3
- Version: 1.32.11
3
+ Version: 1.32.11.dev2
4
4
  Summary: An Openslide tilesource for large_image.
5
5
  Home-page: https://github.com/girder/large_image
6
6
  Author: Kitware, Inc.
@@ -18,7 +18,7 @@ Classifier: Programming Language :: Python :: 3.13
18
18
  Requires-Python: >=3.8
19
19
  Description-Content-Type: text/x-rst
20
20
  License-File: LICENSE
21
- Requires-Dist: large-image>=1.32.11
21
+ Requires-Dist: large-image>=1.32.11.dev2
22
22
  Requires-Dist: openslide-python>=1.4.1
23
23
  Requires-Dist: openslide-bin; platform_system == "Linux" and platform_machine == "x86_64"
24
24
  Requires-Dist: openslide-bin; platform_system == "Linux" and platform_machine == "aarch64"
@@ -27,7 +27,7 @@ Requires-Dist: openslide-bin; platform_system == "Darwin" and platform_machine =
27
27
  Requires-Dist: openslide-bin; platform_system == "Darwin" and platform_machine == "x86_64"
28
28
  Requires-Dist: tifftools>=1.2.0
29
29
  Provides-Extra: girder
30
- Requires-Dist: girder-large-image>=1.32.11; extra == "girder"
30
+ Requires-Dist: girder-large-image>=1.32.11.dev2; extra == "girder"
31
31
  Dynamic: author
32
32
  Dynamic: author-email
33
33
  Dynamic: classifier
@@ -0,0 +1,8 @@
1
+ large_image_source_openslide/__init__.py,sha256=hkBSua9o9HbGu_vvGfZfA3PZyJlfmHcJVALhofqr7Do,21117
2
+ large_image_source_openslide/girder_source.py,sha256=wPa7xBoJ5-PKHMVy9joUNSUHTN6HCZKyR45lhR0SsRc,1236
3
+ large_image_source_openslide-1.32.11.dev2.dist-info/licenses/LICENSE,sha256=psuoW8kuDP96RQsdhzwOqi6fyWv0ct8CR6Jr7He_P_k,10173
4
+ large_image_source_openslide-1.32.11.dev2.dist-info/METADATA,sha256=-rOlXWS-cWndRKe2at4AzBKYNvII3yGxm1mn1zCHUb8,1800
5
+ large_image_source_openslide-1.32.11.dev2.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
6
+ large_image_source_openslide-1.32.11.dev2.dist-info/entry_points.txt,sha256=4Z5cf63yeesvHxiR9W1dY3rfz5_V4Ck2xYhPUp4A1qA,196
7
+ large_image_source_openslide-1.32.11.dev2.dist-info/top_level.txt,sha256=wqaQQDWQl9a_l9s6n07tTxfjeEXePtHBhz1np6aUwQE,29
8
+ large_image_source_openslide-1.32.11.dev2.dist-info/RECORD,,
@@ -1,8 +0,0 @@
1
- large_image_source_openslide/__init__.py,sha256=CEfTufsAco3V87GHdRtJz7KbIuLrgu1vGyc5-dtOXd4,22822
2
- large_image_source_openslide/girder_source.py,sha256=wPa7xBoJ5-PKHMVy9joUNSUHTN6HCZKyR45lhR0SsRc,1236
3
- large_image_source_openslide-1.32.11.dist-info/licenses/LICENSE,sha256=psuoW8kuDP96RQsdhzwOqi6fyWv0ct8CR6Jr7He_P_k,10173
4
- large_image_source_openslide-1.32.11.dist-info/METADATA,sha256=XdxTllpENmmCeRXTivVzXCqwk6RmMp00LCq9UHvGV_M,1785
5
- large_image_source_openslide-1.32.11.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
6
- large_image_source_openslide-1.32.11.dist-info/entry_points.txt,sha256=4Z5cf63yeesvHxiR9W1dY3rfz5_V4Ck2xYhPUp4A1qA,196
7
- large_image_source_openslide-1.32.11.dist-info/top_level.txt,sha256=wqaQQDWQl9a_l9s6n07tTxfjeEXePtHBhz1np6aUwQE,29
8
- large_image_source_openslide-1.32.11.dist-info/RECORD,,