large-image-source-multi 1.29.7.dev8__tar.gz → 1.29.7.dev12__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.
Files changed (16) hide show
  1. {large-image-source-multi-1.29.7.dev8/large_image_source_multi.egg-info → large-image-source-multi-1.29.7.dev12}/PKG-INFO +3 -3
  2. {large-image-source-multi-1.29.7.dev8 → large-image-source-multi-1.29.7.dev12}/large_image_source_multi/__init__.py +41 -4
  3. {large-image-source-multi-1.29.7.dev8 → large-image-source-multi-1.29.7.dev12/large_image_source_multi.egg-info}/PKG-INFO +3 -3
  4. large-image-source-multi-1.29.7.dev12/large_image_source_multi.egg-info/requires.txt +9 -0
  5. large-image-source-multi-1.29.7.dev8/large_image_source_multi.egg-info/requires.txt +0 -9
  6. {large-image-source-multi-1.29.7.dev8 → large-image-source-multi-1.29.7.dev12}/LICENSE +0 -0
  7. {large-image-source-multi-1.29.7.dev8 → large-image-source-multi-1.29.7.dev12}/README.rst +0 -0
  8. {large-image-source-multi-1.29.7.dev8 → large-image-source-multi-1.29.7.dev12}/docs/specification.rst +0 -0
  9. {large-image-source-multi-1.29.7.dev8 → large-image-source-multi-1.29.7.dev12}/large_image_source_multi/girder_source.py +0 -0
  10. {large-image-source-multi-1.29.7.dev8 → large-image-source-multi-1.29.7.dev12}/large_image_source_multi.egg-info/SOURCES.txt +0 -0
  11. {large-image-source-multi-1.29.7.dev8 → large-image-source-multi-1.29.7.dev12}/large_image_source_multi.egg-info/dependency_links.txt +0 -0
  12. {large-image-source-multi-1.29.7.dev8 → large-image-source-multi-1.29.7.dev12}/large_image_source_multi.egg-info/entry_points.txt +0 -0
  13. {large-image-source-multi-1.29.7.dev8 → large-image-source-multi-1.29.7.dev12}/large_image_source_multi.egg-info/top_level.txt +0 -0
  14. {large-image-source-multi-1.29.7.dev8 → large-image-source-multi-1.29.7.dev12}/pyproject.toml +0 -0
  15. {large-image-source-multi-1.29.7.dev8 → large-image-source-multi-1.29.7.dev12}/setup.cfg +0 -0
  16. {large-image-source-multi-1.29.7.dev8 → large-image-source-multi-1.29.7.dev12}/setup.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: large-image-source-multi
3
- Version: 1.29.7.dev8
3
+ Version: 1.29.7.dev12
4
4
  Summary: A tilesource for large_image to composite other tile sources
5
5
  Home-page: https://github.com/girder/large_image
6
6
  Author: Kitware, Inc.
@@ -19,12 +19,12 @@ Requires-Python: >=3.6
19
19
  Description-Content-Type: text/x-rst
20
20
  License-File: LICENSE
21
21
  Requires-Dist: jsonschema
22
- Requires-Dist: large-image>=1.29.7.dev8
22
+ Requires-Dist: large-image>=1.29.7.dev12
23
23
  Requires-Dist: pyyaml
24
24
  Provides-Extra: all
25
25
  Requires-Dist: scikit-image; extra == "all"
26
26
  Provides-Extra: girder
27
- Requires-Dist: girder-large-image>=1.29.7.dev8; extra == "girder"
27
+ Requires-Dist: girder-large-image>=1.29.7.dev12; extra == "girder"
28
28
 
29
29
  A tilesource for large_image to composite other tile sources
30
30
 
@@ -288,6 +288,18 @@ SourceEntrySchema = {
288
288
  'type': 'array',
289
289
  'items': {'type': 'integer'},
290
290
  },
291
+ 'sampleScale': {
292
+ 'description':
293
+ 'Each pixel sample values is divided by this scale after any '
294
+ 'sampleOffset has been applied',
295
+ 'type': 'number',
296
+ },
297
+ 'sampleOffset': {
298
+ 'description':
299
+ 'This is added to each pixel sample value before any '
300
+ 'sampleScale is applied',
301
+ 'type': 'number',
302
+ },
291
303
  'style': {'type': 'object'},
292
304
  'params': {
293
305
  'description':
@@ -806,7 +818,7 @@ class MultiFileTileSource(FileTileSource, metaclass=LruCacheMetaclass):
806
818
  self._bands = {}
807
819
  self._bands.update(tsMeta['bands'])
808
820
  lastSource = source
809
- self._bandcount = 1 if self._info.get('singleBand') else (
821
+ self._bandCount = 1 if self._info.get('singleBand') else (
810
822
  len(self._bands) if hasattr(self, '_bands') else (bandCount or None))
811
823
  bbox = self._sourceBoundingBox(source, tsMeta['sizeX'], tsMeta['sizeY'])
812
824
  computedWidth = max(computedWidth, int(math.ceil(bbox['right'])))
@@ -875,6 +887,20 @@ class MultiFileTileSource(FileTileSource, metaclass=LruCacheMetaclass):
875
887
  if params is None:
876
888
  params = source.get('params', {})
877
889
  ts = openFunc(source['path'], **params)
890
+ if (self._dtype and np.dtype(ts.dtype).kind == 'f' and self._dtype.kind != 'f' and
891
+ 'sampleScale' not in source and 'sampleOffset' not in source):
892
+ minval = maxval = 0
893
+ for f in range(ts.frames):
894
+ ftile = ts.getTile(x=0, y=0, z=0, frame=f, numpyAllowed='always')
895
+ minval = min(minval, np.amin(ftile))
896
+ maxval = max(maxval, np.amax(ftile))
897
+ if minval >= 0 and maxval <= 1:
898
+ source['sampleScale'] = None
899
+ elif minval >= 0:
900
+ source['sampleScale'] = 2 ** math.ceil(math.log2(maxval))
901
+ else:
902
+ source['sampleScale'] = 2 ** math.ceil(math.log2(max(-minval, maxval)) + 1)
903
+ source['sampleOffset'] = source['sampleScale'] / 2
878
904
  source['sourceName'] = ts.name
879
905
  with self._lastOpenSourceLock:
880
906
  self._lastOpenSource = {
@@ -1190,9 +1216,20 @@ class MultiFileTileSource(FileTileSource, metaclass=LruCacheMetaclass):
1190
1216
  ts, transform, corners, scale, sourceEntry.get('frame', 0),
1191
1217
  source.get('position', {}).get('crop'))
1192
1218
  if sourceTile is not None and all(dim > 0 for dim in sourceTile.shape):
1193
- sourceTile = sourceTile.astype(
1194
- ts.dtype if not self._info.get('dtype') else
1195
- np.dtype(self._info['dtype']))
1219
+ targetDtype = np.dtype(self._info.get('dtype', ts.dtype))
1220
+ changeDtype = sourceTile.dtype != targetDtype
1221
+ if source.get('sampleScale') or source.get('sampleOffset'):
1222
+ sourceTile = sourceTile.astype(float)
1223
+ if source.get('sampleOffset'):
1224
+ sourceTile[:, :, :-1] += source['sampleOffset']
1225
+ if source.get('sampleScale') and source.get('sampleScale') != 1:
1226
+ sourceTile[:, :, :-1] /= source['sampleScale']
1227
+ if sourceTile.dtype != targetDtype:
1228
+ if changeDtype:
1229
+ sourceTile = (
1230
+ sourceTile.astype(float) * fullAlphaValue(targetDtype) /
1231
+ fullAlphaValue(sourceTile))
1232
+ sourceTile = sourceTile.astype(targetDtype)
1196
1233
  tile = self._mergeTiles(tile, sourceTile, x, y)
1197
1234
  return tile
1198
1235
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: large-image-source-multi
3
- Version: 1.29.7.dev8
3
+ Version: 1.29.7.dev12
4
4
  Summary: A tilesource for large_image to composite other tile sources
5
5
  Home-page: https://github.com/girder/large_image
6
6
  Author: Kitware, Inc.
@@ -19,12 +19,12 @@ Requires-Python: >=3.6
19
19
  Description-Content-Type: text/x-rst
20
20
  License-File: LICENSE
21
21
  Requires-Dist: jsonschema
22
- Requires-Dist: large-image>=1.29.7.dev8
22
+ Requires-Dist: large-image>=1.29.7.dev12
23
23
  Requires-Dist: pyyaml
24
24
  Provides-Extra: all
25
25
  Requires-Dist: scikit-image; extra == "all"
26
26
  Provides-Extra: girder
27
- Requires-Dist: girder-large-image>=1.29.7.dev8; extra == "girder"
27
+ Requires-Dist: girder-large-image>=1.29.7.dev12; extra == "girder"
28
28
 
29
29
  A tilesource for large_image to composite other tile sources
30
30
 
@@ -0,0 +1,9 @@
1
+ jsonschema
2
+ large-image>=1.29.7.dev12
3
+ pyyaml
4
+
5
+ [all]
6
+ scikit-image
7
+
8
+ [girder]
9
+ girder-large-image>=1.29.7.dev12
@@ -1,9 +0,0 @@
1
- jsonschema
2
- large-image>=1.29.7.dev8
3
- pyyaml
4
-
5
- [all]
6
- scikit-image
7
-
8
- [girder]
9
- girder-large-image>=1.29.7.dev8