large-image 1.30.6.dev35__tar.gz → 1.30.6.dev38__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.
- {large_image-1.30.6.dev35/large_image.egg-info → large_image-1.30.6.dev38}/PKG-INFO +78 -78
- {large_image-1.30.6.dev35 → large_image-1.30.6.dev38}/docs/generate_format_table.py +2 -3
- {large_image-1.30.6.dev35 → large_image-1.30.6.dev38}/large_image/cache_util/base.py +1 -1
- {large_image-1.30.6.dev35 → large_image-1.30.6.dev38}/large_image/cache_util/cache.py +2 -2
- {large_image-1.30.6.dev35 → large_image-1.30.6.dev38}/large_image/cache_util/rediscache.py +1 -2
- {large_image-1.30.6.dev35 → large_image-1.30.6.dev38}/large_image/config.py +2 -6
- {large_image-1.30.6.dev35 → large_image-1.30.6.dev38}/large_image/tilesource/__init__.py +1 -1
- {large_image-1.30.6.dev35 → large_image-1.30.6.dev38}/large_image/tilesource/base.py +4 -5
- {large_image-1.30.6.dev35 → large_image-1.30.6.dev38}/large_image/tilesource/jupyter.py +1 -1
- large_image-1.30.6.dev38/large_image/tilesource/resample.py +125 -0
- {large_image-1.30.6.dev35 → large_image-1.30.6.dev38}/large_image/tilesource/tiledict.py +1 -2
- {large_image-1.30.6.dev35 → large_image-1.30.6.dev38}/large_image/tilesource/tileiterator.py +3 -6
- {large_image-1.30.6.dev35 → large_image-1.30.6.dev38}/large_image/tilesource/utilities.py +5 -5
- {large_image-1.30.6.dev35 → large_image-1.30.6.dev38/large_image.egg-info}/PKG-INFO +78 -78
- large_image-1.30.6.dev38/large_image.egg-info/requires.txt +155 -0
- {large_image-1.30.6.dev35 → large_image-1.30.6.dev38}/setup.py +1 -2
- large_image-1.30.6.dev35/large_image/tilesource/resample.py +0 -129
- large_image-1.30.6.dev35/large_image.egg-info/requires.txt +0 -155
- {large_image-1.30.6.dev35 → large_image-1.30.6.dev38}/LICENSE +0 -0
- {large_image-1.30.6.dev35 → large_image-1.30.6.dev38}/NOTICE +0 -0
- {large_image-1.30.6.dev35 → large_image-1.30.6.dev38}/README.rst +0 -0
- {large_image-1.30.6.dev35 → large_image-1.30.6.dev38}/docs/annotations.rst +0 -0
- {large_image-1.30.6.dev35 → large_image-1.30.6.dev38}/docs/api_index.rst +0 -0
- {large_image-1.30.6.dev35 → large_image-1.30.6.dev38}/docs/caching.rst +0 -0
- {large_image-1.30.6.dev35 → large_image-1.30.6.dev38}/docs/conf.py +0 -0
- {large_image-1.30.6.dev35 → large_image-1.30.6.dev38}/docs/config_options.rst +0 -0
- {large_image-1.30.6.dev35 → large_image-1.30.6.dev38}/docs/development.rst +0 -0
- {large_image-1.30.6.dev35 → large_image-1.30.6.dev38}/docs/dicomweb_assetstore.rst +0 -0
- {large_image-1.30.6.dev35 → large_image-1.30.6.dev38}/docs/format_examples_datastore.py +0 -0
- {large_image-1.30.6.dev35 → large_image-1.30.6.dev38}/docs/formats.rst +0 -0
- {large_image-1.30.6.dev35 → large_image-1.30.6.dev38}/docs/getting_started.rst +0 -0
- {large_image-1.30.6.dev35 → large_image-1.30.6.dev38}/docs/girder_annotation_config_options.rst +0 -0
- {large_image-1.30.6.dev35 → large_image-1.30.6.dev38}/docs/girder_caching.rst +0 -0
- {large_image-1.30.6.dev35 → large_image-1.30.6.dev38}/docs/girder_config_options.rst +0 -0
- {large_image-1.30.6.dev35 → large_image-1.30.6.dev38}/docs/girder_index.rst +0 -0
- {large_image-1.30.6.dev35 → large_image-1.30.6.dev38}/docs/image_conversion.rst +0 -0
- {large_image-1.30.6.dev35 → large_image-1.30.6.dev38}/docs/index.rst +0 -0
- {large_image-1.30.6.dev35 → large_image-1.30.6.dev38}/docs/make_docs.sh +0 -0
- {large_image-1.30.6.dev35 → large_image-1.30.6.dev38}/docs/multi_source_specification.rst +0 -0
- {large_image-1.30.6.dev35 → large_image-1.30.6.dev38}/docs/notebooks/large_image_examples.ipynb +0 -0
- {large_image-1.30.6.dev35 → large_image-1.30.6.dev38}/docs/notebooks/zarr_sink_example.ipynb +0 -0
- {large_image-1.30.6.dev35 → large_image-1.30.6.dev38}/docs/notebooks.rst +0 -0
- {large_image-1.30.6.dev35 → large_image-1.30.6.dev38}/docs/plottable.rst +0 -0
- {large_image-1.30.6.dev35 → large_image-1.30.6.dev38}/docs/static/K.png +0 -0
- {large_image-1.30.6.dev35 → large_image-1.30.6.dev38}/docs/static/custom.css +0 -0
- {large_image-1.30.6.dev35 → large_image-1.30.6.dev38}/docs/tilesource_options.rst +0 -0
- {large_image-1.30.6.dev35 → large_image-1.30.6.dev38}/docs/upgrade.rst +0 -0
- {large_image-1.30.6.dev35 → large_image-1.30.6.dev38}/large_image/__init__.py +0 -0
- {large_image-1.30.6.dev35 → large_image-1.30.6.dev38}/large_image/cache_util/__init__.py +0 -0
- {large_image-1.30.6.dev35 → large_image-1.30.6.dev38}/large_image/cache_util/cachefactory.py +0 -0
- {large_image-1.30.6.dev35 → large_image-1.30.6.dev38}/large_image/cache_util/memcache.py +0 -0
- {large_image-1.30.6.dev35 → large_image-1.30.6.dev38}/large_image/constants.py +0 -0
- {large_image-1.30.6.dev35 → large_image-1.30.6.dev38}/large_image/exceptions.py +0 -0
- {large_image-1.30.6.dev35 → large_image-1.30.6.dev38}/large_image/tilesource/geo.py +0 -0
- {large_image-1.30.6.dev35 → large_image-1.30.6.dev38}/large_image/tilesource/stylefuncs.py +0 -0
- {large_image-1.30.6.dev35 → large_image-1.30.6.dev38}/large_image.egg-info/SOURCES.txt +0 -0
- {large_image-1.30.6.dev35 → large_image-1.30.6.dev38}/large_image.egg-info/dependency_links.txt +0 -0
- {large_image-1.30.6.dev35 → large_image-1.30.6.dev38}/large_image.egg-info/not-zip-safe +0 -0
- {large_image-1.30.6.dev35 → large_image-1.30.6.dev38}/large_image.egg-info/top_level.txt +0 -0
- {large_image-1.30.6.dev35 → large_image-1.30.6.dev38}/setup.cfg +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: large-image
|
|
3
|
-
Version: 1.30.6.
|
|
3
|
+
Version: 1.30.6.dev38
|
|
4
4
|
Summary: Python modules to work with large, multiresolution images.
|
|
5
5
|
Home-page: https://github.com/girder/large_image
|
|
6
6
|
Author: Kitware, Inc.
|
|
@@ -30,7 +30,7 @@ Requires-Dist: pylibmc>=1.5.1; platform_system != "Windows" and extra == "memcac
|
|
|
30
30
|
Provides-Extra: redis
|
|
31
31
|
Requires-Dist: redis>=4.5.5; extra == "redis"
|
|
32
32
|
Provides-Extra: converter
|
|
33
|
-
Requires-Dist: large-image-converter>=1.30.6.
|
|
33
|
+
Requires-Dist: large-image-converter>=1.30.6.dev38; extra == "converter"
|
|
34
34
|
Provides-Extra: colormaps
|
|
35
35
|
Requires-Dist: matplotlib; extra == "colormaps"
|
|
36
36
|
Requires-Dist: tol_colors; extra == "colormaps"
|
|
@@ -40,108 +40,108 @@ Provides-Extra: performance
|
|
|
40
40
|
Requires-Dist: psutil>=4.2.0; extra == "performance"
|
|
41
41
|
Requires-Dist: simplejpeg; extra == "performance"
|
|
42
42
|
Provides-Extra: bioformats
|
|
43
|
-
Requires-Dist: large-image-source-bioformats>=1.30.6.
|
|
43
|
+
Requires-Dist: large-image-source-bioformats>=1.30.6.dev38; extra == "bioformats"
|
|
44
44
|
Provides-Extra: deepzoom
|
|
45
|
-
Requires-Dist: large-image-source-deepzoom>=1.30.6.
|
|
45
|
+
Requires-Dist: large-image-source-deepzoom>=1.30.6.dev38; extra == "deepzoom"
|
|
46
46
|
Provides-Extra: dicom
|
|
47
|
-
Requires-Dist: large-image-source-dicom>=1.30.6.
|
|
47
|
+
Requires-Dist: large-image-source-dicom>=1.30.6.dev38; extra == "dicom"
|
|
48
48
|
Provides-Extra: dummy
|
|
49
|
-
Requires-Dist: large-image-source-dummy>=1.30.6.
|
|
49
|
+
Requires-Dist: large-image-source-dummy>=1.30.6.dev38; extra == "dummy"
|
|
50
50
|
Provides-Extra: gdal
|
|
51
|
-
Requires-Dist: large-image-source-gdal>=1.30.6.
|
|
51
|
+
Requires-Dist: large-image-source-gdal>=1.30.6.dev38; extra == "gdal"
|
|
52
52
|
Provides-Extra: mapnik
|
|
53
|
-
Requires-Dist: large-image-source-mapnik>=1.30.6.
|
|
53
|
+
Requires-Dist: large-image-source-mapnik>=1.30.6.dev38; extra == "mapnik"
|
|
54
54
|
Provides-Extra: multi
|
|
55
|
-
Requires-Dist: large-image-source-multi>=1.30.6.
|
|
55
|
+
Requires-Dist: large-image-source-multi>=1.30.6.dev38; extra == "multi"
|
|
56
56
|
Provides-Extra: nd2
|
|
57
|
-
Requires-Dist: large-image-source-nd2>=1.30.6.
|
|
57
|
+
Requires-Dist: large-image-source-nd2>=1.30.6.dev38; extra == "nd2"
|
|
58
58
|
Provides-Extra: ometiff
|
|
59
|
-
Requires-Dist: large-image-source-ometiff>=1.30.6.
|
|
59
|
+
Requires-Dist: large-image-source-ometiff>=1.30.6.dev38; extra == "ometiff"
|
|
60
60
|
Provides-Extra: openjpeg
|
|
61
|
-
Requires-Dist: large-image-source-openjpeg>=1.30.6.
|
|
61
|
+
Requires-Dist: large-image-source-openjpeg>=1.30.6.dev38; extra == "openjpeg"
|
|
62
62
|
Provides-Extra: openslide
|
|
63
|
-
Requires-Dist: large-image-source-openslide>=1.30.6.
|
|
63
|
+
Requires-Dist: large-image-source-openslide>=1.30.6.dev38; extra == "openslide"
|
|
64
64
|
Provides-Extra: pil
|
|
65
|
-
Requires-Dist: large-image-source-pil>=1.30.6.
|
|
65
|
+
Requires-Dist: large-image-source-pil>=1.30.6.dev38; extra == "pil"
|
|
66
66
|
Provides-Extra: rasterio
|
|
67
|
-
Requires-Dist: large-image-source-rasterio>=1.30.6.
|
|
67
|
+
Requires-Dist: large-image-source-rasterio>=1.30.6.dev38; extra == "rasterio"
|
|
68
68
|
Provides-Extra: test
|
|
69
|
-
Requires-Dist: large-image-source-test>=1.30.6.
|
|
69
|
+
Requires-Dist: large-image-source-test>=1.30.6.dev38; extra == "test"
|
|
70
70
|
Provides-Extra: tiff
|
|
71
|
-
Requires-Dist: large-image-source-tiff>=1.30.6.
|
|
71
|
+
Requires-Dist: large-image-source-tiff>=1.30.6.dev38; extra == "tiff"
|
|
72
72
|
Provides-Extra: tifffile
|
|
73
|
-
Requires-Dist: large-image-source-tifffile>=1.30.6.
|
|
73
|
+
Requires-Dist: large-image-source-tifffile>=1.30.6.dev38; extra == "tifffile"
|
|
74
74
|
Provides-Extra: vips
|
|
75
|
-
Requires-Dist: large-image-source-vips>=1.30.6.
|
|
75
|
+
Requires-Dist: large-image-source-vips>=1.30.6.dev38; extra == "vips"
|
|
76
76
|
Provides-Extra: zarr
|
|
77
|
-
Requires-Dist: large-image-source-zarr>=1.30.6.
|
|
77
|
+
Requires-Dist: large-image-source-zarr>=1.30.6.dev38; extra == "zarr"
|
|
78
78
|
Provides-Extra: sources
|
|
79
|
-
Requires-Dist: large-image-source-
|
|
80
|
-
Requires-Dist: large-image-source-
|
|
81
|
-
Requires-Dist: large-image-source-
|
|
82
|
-
Requires-Dist: large-image-source-
|
|
83
|
-
Requires-Dist: large-image-source-
|
|
84
|
-
Requires-Dist: large-image-source-
|
|
85
|
-
Requires-Dist: large-image-source-
|
|
86
|
-
Requires-Dist: large-image-source-
|
|
87
|
-
Requires-Dist: large-image-source-
|
|
88
|
-
Requires-Dist: large-image-source-
|
|
89
|
-
Requires-Dist: large-image-source-
|
|
90
|
-
Requires-Dist: large-image-source-
|
|
91
|
-
Requires-Dist: large-image-source-
|
|
92
|
-
Requires-Dist: large-image-source-
|
|
93
|
-
Requires-Dist: large-image-source-
|
|
94
|
-
Requires-Dist: large-image-source-
|
|
95
|
-
Requires-Dist: large-image-source-
|
|
96
|
-
Requires-Dist: large-image-source-
|
|
79
|
+
Requires-Dist: large-image-source-bioformats>=1.30.6.dev38; extra == "sources"
|
|
80
|
+
Requires-Dist: large-image-source-dicom>=1.30.6.dev38; extra == "sources"
|
|
81
|
+
Requires-Dist: large-image-source-mapnik>=1.30.6.dev38; extra == "sources"
|
|
82
|
+
Requires-Dist: large-image-source-rasterio>=1.30.6.dev38; extra == "sources"
|
|
83
|
+
Requires-Dist: large-image-source-test>=1.30.6.dev38; extra == "sources"
|
|
84
|
+
Requires-Dist: large-image-source-tiff>=1.30.6.dev38; extra == "sources"
|
|
85
|
+
Requires-Dist: large-image-source-pil>=1.30.6.dev38; extra == "sources"
|
|
86
|
+
Requires-Dist: large-image-source-ometiff>=1.30.6.dev38; extra == "sources"
|
|
87
|
+
Requires-Dist: large-image-source-multi>=1.30.6.dev38; extra == "sources"
|
|
88
|
+
Requires-Dist: large-image-source-deepzoom>=1.30.6.dev38; extra == "sources"
|
|
89
|
+
Requires-Dist: large-image-source-gdal>=1.30.6.dev38; extra == "sources"
|
|
90
|
+
Requires-Dist: large-image-source-tifffile>=1.30.6.dev38; extra == "sources"
|
|
91
|
+
Requires-Dist: large-image-source-openslide>=1.30.6.dev38; extra == "sources"
|
|
92
|
+
Requires-Dist: large-image-source-nd2>=1.30.6.dev38; extra == "sources"
|
|
93
|
+
Requires-Dist: large-image-source-openjpeg>=1.30.6.dev38; extra == "sources"
|
|
94
|
+
Requires-Dist: large-image-source-dummy>=1.30.6.dev38; extra == "sources"
|
|
95
|
+
Requires-Dist: large-image-source-vips>=1.30.6.dev38; extra == "sources"
|
|
96
|
+
Requires-Dist: large-image-source-zarr>=1.30.6.dev38; extra == "sources"
|
|
97
97
|
Provides-Extra: all
|
|
98
|
-
Requires-Dist: large-image-source-
|
|
99
|
-
Requires-Dist: large-image-source-openslide>=1.30.6.dev35; extra == "all"
|
|
100
|
-
Requires-Dist: large-image-source-tiff[all]>=1.30.6.dev35; extra == "all"
|
|
101
|
-
Requires-Dist: large-image-source-gdal>=1.30.6.dev35; extra == "all"
|
|
102
|
-
Requires-Dist: large-image-source-pil>=1.30.6.dev35; extra == "all"
|
|
103
|
-
Requires-Dist: psutil>=4.2.0; extra == "all"
|
|
104
|
-
Requires-Dist: large-image-source-multi>=1.30.6.dev35; extra == "all"
|
|
98
|
+
Requires-Dist: large-image-source-bioformats>=1.30.6.dev38; extra == "all"
|
|
105
99
|
Requires-Dist: matplotlib; extra == "all"
|
|
106
|
-
Requires-Dist:
|
|
107
|
-
Requires-Dist: large-image-source-
|
|
108
|
-
Requires-Dist: large-image-source-
|
|
109
|
-
Requires-Dist: large-image-source-
|
|
110
|
-
Requires-Dist: large-image-source-
|
|
111
|
-
Requires-Dist: large-image-
|
|
112
|
-
Requires-Dist:
|
|
113
|
-
Requires-Dist: large-image-source-
|
|
114
|
-
Requires-Dist: large-image-source-
|
|
115
|
-
Requires-Dist: large-image-source-
|
|
116
|
-
Requires-Dist: large-image-source-
|
|
117
|
-
Requires-Dist:
|
|
118
|
-
Requires-Dist: tol_colors; extra == "all"
|
|
100
|
+
Requires-Dist: large-image-source-dicom>=1.30.6.dev38; extra == "all"
|
|
101
|
+
Requires-Dist: large-image-source-mapnik>=1.30.6.dev38; extra == "all"
|
|
102
|
+
Requires-Dist: large-image-source-pil[all]>=1.30.6.dev38; extra == "all"
|
|
103
|
+
Requires-Dist: large-image-source-test>=1.30.6.dev38; extra == "all"
|
|
104
|
+
Requires-Dist: large-image-source-multi>=1.30.6.dev38; extra == "all"
|
|
105
|
+
Requires-Dist: large-image-source-rasterio[all]>=1.30.6.dev38; extra == "all"
|
|
106
|
+
Requires-Dist: psutil>=4.2.0; extra == "all"
|
|
107
|
+
Requires-Dist: large-image-source-tifffile>=1.30.6.dev38; extra == "all"
|
|
108
|
+
Requires-Dist: large-image-source-gdal>=1.30.6.dev38; extra == "all"
|
|
109
|
+
Requires-Dist: large-image-source-openjpeg>=1.30.6.dev38; extra == "all"
|
|
110
|
+
Requires-Dist: large-image-source-nd2>=1.30.6.dev38; extra == "all"
|
|
111
|
+
Requires-Dist: pylibmc>=1.5.1; platform_system != "Windows" and extra == "all"
|
|
119
112
|
Requires-Dist: pyvips; extra == "all"
|
|
120
|
-
Requires-Dist: large-image-source-
|
|
113
|
+
Requires-Dist: large-image-source-multi[all]>=1.30.6.dev38; extra == "all"
|
|
114
|
+
Requires-Dist: large-image-source-vips>=1.30.6.dev38; extra == "all"
|
|
115
|
+
Requires-Dist: tol_colors; extra == "all"
|
|
116
|
+
Requires-Dist: large-image-converter>=1.30.6.dev38; extra == "all"
|
|
117
|
+
Requires-Dist: large-image-source-zarr>=1.30.6.dev38; extra == "all"
|
|
118
|
+
Requires-Dist: large-image-source-tiff>=1.30.6.dev38; extra == "all"
|
|
119
|
+
Requires-Dist: large-image-source-rasterio>=1.30.6.dev38; extra == "all"
|
|
120
|
+
Requires-Dist: large-image-source-pil>=1.30.6.dev38; extra == "all"
|
|
121
|
+
Requires-Dist: large-image-source-ometiff>=1.30.6.dev38; extra == "all"
|
|
122
|
+
Requires-Dist: large-image-source-tiff[all]>=1.30.6.dev38; extra == "all"
|
|
123
|
+
Requires-Dist: large-image-source-deepzoom>=1.30.6.dev38; extra == "all"
|
|
124
|
+
Requires-Dist: simplejpeg; extra == "all"
|
|
125
|
+
Requires-Dist: large-image-source-openslide>=1.30.6.dev38; extra == "all"
|
|
121
126
|
Requires-Dist: redis>=4.5.5; extra == "all"
|
|
122
|
-
Requires-Dist: large-image-source-
|
|
123
|
-
Requires-Dist: large-image-source-nd2>=1.30.6.dev35; extra == "all"
|
|
124
|
-
Requires-Dist: large-image-source-mapnik>=1.30.6.dev35; extra == "all"
|
|
125
|
-
Requires-Dist: large-image-source-openjpeg>=1.30.6.dev35; extra == "all"
|
|
126
|
-
Requires-Dist: large-image-source-test>=1.30.6.dev35; extra == "all"
|
|
127
|
-
Requires-Dist: pylibmc>=1.5.1; platform_system != "Windows" and extra == "all"
|
|
127
|
+
Requires-Dist: large-image-source-dummy>=1.30.6.dev38; extra == "all"
|
|
128
128
|
Provides-Extra: common
|
|
129
|
-
Requires-Dist: large-image-source-deepzoom>=1.30.6.dev35; extra == "common"
|
|
130
|
-
Requires-Dist: large-image-source-openslide>=1.30.6.dev35; extra == "common"
|
|
131
|
-
Requires-Dist: tol_colors; extra == "common"
|
|
132
|
-
Requires-Dist: large-image-source-zarr>=1.30.6.dev35; extra == "common"
|
|
133
|
-
Requires-Dist: large-image-source-test>=1.30.6.dev35; extra == "common"
|
|
134
|
-
Requires-Dist: large-image-source-multi>=1.30.6.dev35; extra == "common"
|
|
135
|
-
Requires-Dist: redis>=4.5.5; extra == "common"
|
|
136
129
|
Requires-Dist: matplotlib; extra == "common"
|
|
137
|
-
Requires-Dist:
|
|
138
|
-
Requires-Dist:
|
|
139
|
-
Requires-Dist: large-image-source-
|
|
140
|
-
Requires-Dist: large-image-source-
|
|
141
|
-
Requires-Dist: large-image-source-
|
|
142
|
-
Requires-Dist: large-image-source-
|
|
130
|
+
Requires-Dist: large-image-source-dicom>=1.30.6.dev38; extra == "common"
|
|
131
|
+
Requires-Dist: redis>=4.5.5; extra == "common"
|
|
132
|
+
Requires-Dist: large-image-source-test>=1.30.6.dev38; extra == "common"
|
|
133
|
+
Requires-Dist: large-image-source-pil[all]>=1.30.6.dev38; extra == "common"
|
|
134
|
+
Requires-Dist: large-image-source-multi>=1.30.6.dev38; extra == "common"
|
|
135
|
+
Requires-Dist: large-image-source-deepzoom>=1.30.6.dev38; extra == "common"
|
|
136
|
+
Requires-Dist: large-image-source-rasterio[all]>=1.30.6.dev38; extra == "common"
|
|
143
137
|
Requires-Dist: psutil>=4.2.0; extra == "common"
|
|
138
|
+
Requires-Dist: large-image-source-tifffile>=1.30.6.dev38; extra == "common"
|
|
139
|
+
Requires-Dist: simplejpeg; extra == "common"
|
|
140
|
+
Requires-Dist: large-image-source-openslide>=1.30.6.dev38; extra == "common"
|
|
141
|
+
Requires-Dist: large-image-source-nd2>=1.30.6.dev38; extra == "common"
|
|
144
142
|
Requires-Dist: pylibmc>=1.5.1; platform_system != "Windows" and extra == "common"
|
|
143
|
+
Requires-Dist: tol_colors; extra == "common"
|
|
144
|
+
Requires-Dist: large-image-source-zarr>=1.30.6.dev38; extra == "common"
|
|
145
145
|
|
|
146
146
|
Large Image
|
|
147
147
|
===========
|
|
@@ -89,9 +89,8 @@ def combine_rows(results):
|
|
|
89
89
|
result['tilesource'],
|
|
90
90
|
]
|
|
91
91
|
break
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
row_key = f'{row_base_key}_{row_key_index}'
|
|
92
|
+
row_key_index += 1
|
|
93
|
+
row_key = f'{row_base_key}_{row_key_index}'
|
|
95
94
|
if row_key not in table_rows:
|
|
96
95
|
table_rows[row_key] = result
|
|
97
96
|
return table_rows
|
|
@@ -30,7 +30,7 @@ class BaseCache(cachetools.Cache):
|
|
|
30
30
|
"""
|
|
31
31
|
curtime = time.time()
|
|
32
32
|
key = (err, func)
|
|
33
|
-
if
|
|
33
|
+
if curtime - self.lastError.get(key, {}).get('time', 0) > self.throttleErrors:
|
|
34
34
|
skipped = self.lastError.get(key, {}).get('skipped', 0)
|
|
35
35
|
if skipped:
|
|
36
36
|
msg += ' (%d similar messages)' % skipped
|
|
@@ -125,7 +125,7 @@ class LruCacheMetaclass(type):
|
|
|
125
125
|
namedCaches: Dict[str, Any] = {}
|
|
126
126
|
classCaches: Dict[type, Any] = {}
|
|
127
127
|
|
|
128
|
-
def __new__(
|
|
128
|
+
def __new__(mcs, name, bases, namespace, **kwargs):
|
|
129
129
|
# Get metaclass parameters by finding and removing them from the class
|
|
130
130
|
# namespace (necessary for Python 2), or preferentially as metaclass
|
|
131
131
|
# arguments (only in Python 3).
|
|
@@ -151,7 +151,7 @@ class LruCacheMetaclass(type):
|
|
|
151
151
|
timeout = kwargs.get('cacheTimeout', timeout)
|
|
152
152
|
|
|
153
153
|
cls = super().__new__(
|
|
154
|
-
|
|
154
|
+
mcs, name, bases, namespace)
|
|
155
155
|
if not cacheName:
|
|
156
156
|
cacheName = cls
|
|
157
157
|
|
|
@@ -125,8 +125,7 @@ class RedisCache(BaseCache):
|
|
|
125
125
|
maxmemory = self._getStat('maxmemory')
|
|
126
126
|
if maxmemory:
|
|
127
127
|
return maxmemory
|
|
128
|
-
|
|
129
|
-
return self._getStat('total_system_memory')
|
|
128
|
+
return self._getStat('total_system_memory')
|
|
130
129
|
|
|
131
130
|
def _reconnect(self) -> None:
|
|
132
131
|
try:
|
|
@@ -135,7 +135,7 @@ def _ignoreSourceNames(
|
|
|
135
135
|
"""
|
|
136
136
|
ignored_names = getConfig('source_%s_ignored_names' % configKey) or default
|
|
137
137
|
if not ignored_names or not os.path.isfile(path):
|
|
138
|
-
return
|
|
138
|
+
return
|
|
139
139
|
if re.search(ignored_names, os.path.basename(path), flags=re.IGNORECASE):
|
|
140
140
|
raise exceptions.TileSourceError('File will not be opened by %s reader' % configKey)
|
|
141
141
|
|
|
@@ -157,12 +157,8 @@ def cpu_count(logical: bool = True) -> int:
|
|
|
157
157
|
count = min(count, len(os.sched_getaffinity(0)))
|
|
158
158
|
except AttributeError:
|
|
159
159
|
pass
|
|
160
|
-
|
|
161
|
-
import psutil
|
|
162
|
-
|
|
160
|
+
if HAS_PSUTIL:
|
|
163
161
|
count = min(count, psutil.cpu_count(logical) or count)
|
|
164
|
-
except ImportError:
|
|
165
|
-
pass
|
|
166
162
|
return max(1, count)
|
|
167
163
|
|
|
168
164
|
|
|
@@ -321,7 +321,7 @@ def listMimeTypes(
|
|
|
321
321
|
|
|
322
322
|
__all__ = [
|
|
323
323
|
'TileSource', 'FileTileSource',
|
|
324
|
-
'
|
|
324
|
+
'TileGeneralError', 'TileSourceError',
|
|
325
325
|
'TileSourceAssetstoreError', 'TileSourceFileNotFoundError',
|
|
326
326
|
'TileGeneralException', 'TileSourceException', 'TileSourceAssetstoreException',
|
|
327
327
|
'TileOutputMimeTypes', 'TILE_FORMAT_IMAGE', 'TILE_FORMAT_PIL', 'TILE_FORMAT_NUMPY',
|
|
@@ -183,7 +183,7 @@ class TileSource(IPyLeafletMixin):
|
|
|
183
183
|
We reconstruct our state via the creation caused by the inverse of
|
|
184
184
|
reduce, so we don't report state here.
|
|
185
185
|
"""
|
|
186
|
-
return
|
|
186
|
+
return
|
|
187
187
|
|
|
188
188
|
def __reduce__(self) -> Tuple[functools.partial, Tuple[str]]:
|
|
189
189
|
"""
|
|
@@ -192,7 +192,6 @@ class TileSource(IPyLeafletMixin):
|
|
|
192
192
|
Reduce can pass the args but not the kwargs, so use a partial class
|
|
193
193
|
call to reconstruct kwargs.
|
|
194
194
|
"""
|
|
195
|
-
import functools
|
|
196
195
|
import pickle
|
|
197
196
|
|
|
198
197
|
if not hasattr(self, '_initValues') or hasattr(self, '_unpickleable'):
|
|
@@ -316,7 +315,7 @@ class TileSource(IPyLeafletMixin):
|
|
|
316
315
|
kwargs.get('encoding', 'JPEG'), kwargs.get('jpegQuality', 95),
|
|
317
316
|
kwargs.get('jpegSubsampling', 0), kwargs.get('tiffCompression', 'raw'),
|
|
318
317
|
kwargs.get('edge', False),
|
|
319
|
-
'__STYLESTART__', kwargs.get('style'
|
|
318
|
+
'__STYLESTART__', kwargs.get('style'), '__STYLEEND__')
|
|
320
319
|
|
|
321
320
|
def getState(self) -> str:
|
|
322
321
|
"""
|
|
@@ -2481,7 +2480,7 @@ class TileSource(IPyLeafletMixin):
|
|
|
2481
2480
|
width = kwargs.get('width')
|
|
2482
2481
|
height = kwargs.get('height')
|
|
2483
2482
|
if width or height:
|
|
2484
|
-
width, height,
|
|
2483
|
+
width, height, _ = utilities._calculateWidthHeight(
|
|
2485
2484
|
width, height, imageWidth, imageHeight)
|
|
2486
2485
|
image = image.resize(
|
|
2487
2486
|
(width, height),
|
|
@@ -2561,7 +2560,7 @@ class FileTileSource(TileSource):
|
|
|
2561
2560
|
args[0], kwargs.get('encoding', 'JPEG'), kwargs.get('jpegQuality', 95),
|
|
2562
2561
|
kwargs.get('jpegSubsampling', 0), kwargs.get('tiffCompression', 'raw'),
|
|
2563
2562
|
kwargs.get('edge', False),
|
|
2564
|
-
'__STYLESTART__', kwargs.get('style'
|
|
2563
|
+
'__STYLESTART__', kwargs.get('style'), '__STYLEEND__')
|
|
2565
2564
|
|
|
2566
2565
|
def getState(self) -> str:
|
|
2567
2566
|
if hasattr(self, '_classkey'):
|
|
@@ -112,7 +112,7 @@ class IPyLeafletMixin:
|
|
|
112
112
|
base_url = f'http://{self.JUPYTER_HOST}:{port}'
|
|
113
113
|
|
|
114
114
|
# Use repr in URL params to prevent caching across sources/styles
|
|
115
|
-
endpoint = f'tile?z={{z}}&x={{x}}&y={{y}}&encoding=png&repr={self
|
|
115
|
+
endpoint = f'tile?z={{z}}&x={{x}}&y={{y}}&encoding=png&repr={self!r}'
|
|
116
116
|
return self._map.make_layer(
|
|
117
117
|
self.metadata, # type: ignore[attr-defined]
|
|
118
118
|
f'{base_url}/{endpoint}')
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
from enum import Enum
|
|
2
|
+
from typing import Dict
|
|
3
|
+
|
|
4
|
+
import numpy as np
|
|
5
|
+
from PIL import Image
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
class ResampleMethod(Enum):
|
|
9
|
+
PIL_NEAREST = Image.Resampling.NEAREST # 0
|
|
10
|
+
PIL_LANCZOS = Image.Resampling.LANCZOS # 1
|
|
11
|
+
PIL_BILINEAR = Image.Resampling.BILINEAR # 2
|
|
12
|
+
PIL_BICUBIC = Image.Resampling.BICUBIC # 3
|
|
13
|
+
PIL_BOX = Image.Resampling.BOX # 4
|
|
14
|
+
PIL_HAMMING = Image.Resampling.HAMMING # 5
|
|
15
|
+
PIL_MAX_ENUM = 5
|
|
16
|
+
NP_MEAN = 6
|
|
17
|
+
NP_MEDIAN = 7
|
|
18
|
+
NP_MODE = 8
|
|
19
|
+
NP_MAX = 9
|
|
20
|
+
NP_MIN = 10
|
|
21
|
+
NP_NEAREST = 11
|
|
22
|
+
NP_MAX_COLOR = 12
|
|
23
|
+
NP_MIN_COLOR = 13
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
def pilResize(
|
|
27
|
+
tile: np.ndarray,
|
|
28
|
+
new_shape: Dict,
|
|
29
|
+
resample_method: ResampleMethod,
|
|
30
|
+
) -> np.ndarray:
|
|
31
|
+
# Only NEAREST works for 16 bit images
|
|
32
|
+
img = Image.fromarray(tile)
|
|
33
|
+
resized_img = img.resize(
|
|
34
|
+
(new_shape['width'], new_shape['height']),
|
|
35
|
+
resample=resample_method.value,
|
|
36
|
+
)
|
|
37
|
+
result = np.array(resized_img).astype(tile.dtype)
|
|
38
|
+
return result
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
def numpyResize(
|
|
42
|
+
tile: np.ndarray,
|
|
43
|
+
new_shape: Dict,
|
|
44
|
+
resample_method: ResampleMethod,
|
|
45
|
+
) -> np.ndarray:
|
|
46
|
+
if resample_method == ResampleMethod.NP_NEAREST:
|
|
47
|
+
return tile[::2, ::2]
|
|
48
|
+
if tile.shape[0] % 2 != 0:
|
|
49
|
+
tile = np.append(tile, np.expand_dims(tile[-1], axis=0), axis=0)
|
|
50
|
+
if tile.shape[1] % 2 != 0:
|
|
51
|
+
tile = np.append(tile, np.expand_dims(tile[:, -1], axis=1), axis=1)
|
|
52
|
+
|
|
53
|
+
pixel_selection = None
|
|
54
|
+
subarrays = np.asarray(
|
|
55
|
+
[
|
|
56
|
+
tile[0::2, 0::2],
|
|
57
|
+
tile[1::2, 0::2],
|
|
58
|
+
tile[0::2, 1::2],
|
|
59
|
+
tile[1::2, 1::2],
|
|
60
|
+
],
|
|
61
|
+
)
|
|
62
|
+
|
|
63
|
+
if resample_method == ResampleMethod.NP_MEAN:
|
|
64
|
+
return np.mean(subarrays, axis=0).astype(tile.dtype)
|
|
65
|
+
if resample_method == ResampleMethod.NP_MEDIAN:
|
|
66
|
+
return np.median(subarrays, axis=0).astype(tile.dtype)
|
|
67
|
+
if resample_method == ResampleMethod.NP_MAX:
|
|
68
|
+
return np.max(subarrays, axis=0).astype(tile.dtype)
|
|
69
|
+
if resample_method == ResampleMethod.NP_MIN:
|
|
70
|
+
return np.min(subarrays, axis=0).astype(tile.dtype)
|
|
71
|
+
if resample_method == ResampleMethod.NP_MAX_COLOR:
|
|
72
|
+
summed = np.sum(subarrays, axis=3)
|
|
73
|
+
pixel_selection = np.argmax(summed, axis=0)
|
|
74
|
+
elif resample_method == ResampleMethod.NP_MIN_COLOR:
|
|
75
|
+
summed = np.sum(subarrays, axis=3)
|
|
76
|
+
pixel_selection = np.argmin(summed, axis=0)
|
|
77
|
+
elif resample_method == ResampleMethod.NP_MODE:
|
|
78
|
+
# if a pixel occurs twice in a set of four, it is a mode
|
|
79
|
+
# if no mode, default to pixel 0. check for minimal matches 1=2, 1=3, 2=3
|
|
80
|
+
pixel_selection = np.where(
|
|
81
|
+
(
|
|
82
|
+
(subarrays[1] == subarrays[2]).all(axis=2) |
|
|
83
|
+
(subarrays[1] == subarrays[3]).all(axis=2)
|
|
84
|
+
),
|
|
85
|
+
1, np.where(
|
|
86
|
+
(subarrays[2] == subarrays[3]).all(axis=2),
|
|
87
|
+
2, 0,
|
|
88
|
+
),
|
|
89
|
+
)
|
|
90
|
+
|
|
91
|
+
if pixel_selection is not None:
|
|
92
|
+
if len(tile.shape) > 2:
|
|
93
|
+
pixel_selection = np.expand_dims(pixel_selection, axis=2)
|
|
94
|
+
pixel_selection = np.repeat(pixel_selection, tile.shape[2], axis=2)
|
|
95
|
+
return np.choose(pixel_selection, subarrays).astype(tile.dtype)
|
|
96
|
+
msg = f'Unknown resample method {resample_method}.'
|
|
97
|
+
raise ValueError(msg)
|
|
98
|
+
|
|
99
|
+
|
|
100
|
+
def downsampleTileHalfRes(
|
|
101
|
+
tile: np.ndarray,
|
|
102
|
+
resample_method: ResampleMethod,
|
|
103
|
+
) -> np.ndarray:
|
|
104
|
+
new_shape = {
|
|
105
|
+
'height': (tile.shape[0] + 1) // 2,
|
|
106
|
+
'width': (tile.shape[1] + 1) // 2,
|
|
107
|
+
'bands': 1,
|
|
108
|
+
}
|
|
109
|
+
if len(tile.shape) > 2:
|
|
110
|
+
new_shape['bands'] = tile.shape[-1]
|
|
111
|
+
if resample_method.value <= ResampleMethod.PIL_MAX_ENUM.value:
|
|
112
|
+
if new_shape['bands'] > 4:
|
|
113
|
+
result = np.empty(
|
|
114
|
+
(new_shape['height'], new_shape['width'], new_shape['bands']),
|
|
115
|
+
dtype=tile.dtype,
|
|
116
|
+
)
|
|
117
|
+
for band_index in range(new_shape['bands']):
|
|
118
|
+
result[(..., band_index)] = pilResize(
|
|
119
|
+
tile[(..., band_index)],
|
|
120
|
+
new_shape,
|
|
121
|
+
resample_method,
|
|
122
|
+
)
|
|
123
|
+
return result
|
|
124
|
+
return pilResize(tile, new_shape, resample_method)
|
|
125
|
+
return numpyResize(tile, new_shape, resample_method)
|
|
@@ -254,8 +254,7 @@ class LazyTileDict(dict):
|
|
|
254
254
|
tileData = pilData if pilData is not None else _imageToPIL(tileData)
|
|
255
255
|
tileFormat = TILE_FORMAT_PIL
|
|
256
256
|
elif TILE_FORMAT_IMAGE in self.format:
|
|
257
|
-
tileData,
|
|
258
|
-
tileData, **self.imageKwargs)
|
|
257
|
+
tileData, _ = _encodeImage(tileData, **self.imageKwargs)
|
|
259
258
|
tileFormat = TILE_FORMAT_IMAGE
|
|
260
259
|
if tileFormat not in self.format:
|
|
261
260
|
raise exceptions.TileSourceError(
|
{large_image-1.30.6.dev35 → large_image-1.30.6.dev38}/large_image/tilesource/tileiterator.py
RENAMED
|
@@ -44,12 +44,9 @@ class TileIterator:
|
|
|
44
44
|
def __next__(self) -> LazyTileDict:
|
|
45
45
|
if self._iter is None:
|
|
46
46
|
raise StopIteration
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
return tile
|
|
51
|
-
except StopIteration:
|
|
52
|
-
raise
|
|
47
|
+
tile = next(self._iter)
|
|
48
|
+
tile.setFormat(self.format, bool(self.resample), self._kwargs)
|
|
49
|
+
return tile
|
|
53
50
|
|
|
54
51
|
def __repr__(self) -> str:
|
|
55
52
|
repr = f'TileIterator<{self.source}'
|
|
@@ -276,8 +276,7 @@ def _imageToNumpy(
|
|
|
276
276
|
if len(image.shape) == 3:
|
|
277
277
|
mode = modesBySize[(image.shape[2] - 1) if image.shape[2] <= 4 else 3]
|
|
278
278
|
return image, mode
|
|
279
|
-
|
|
280
|
-
mode = 'L'
|
|
279
|
+
mode = 'L'
|
|
281
280
|
if len(image.shape) == 2:
|
|
282
281
|
image = np.resize(image, (image.shape[0], image.shape[1], 1))
|
|
283
282
|
return image, mode
|
|
@@ -335,7 +334,7 @@ def _vipsCast(image: Any, mustBe8Bit: bool = False) -> Any:
|
|
|
335
334
|
if image.format not in formats or (image.format == pyvips.BandFormat.USHORT and not mustBe8Bit):
|
|
336
335
|
return image
|
|
337
336
|
target, offset, multiplier = formats[image.format]
|
|
338
|
-
if image.format
|
|
337
|
+
if image.format in {pyvips.BandFormat.DOUBLE, pyvips.BandFormat.FLOAT}:
|
|
339
338
|
maxVal = image.max()
|
|
340
339
|
# These thresholds are higher than 256 and 65536 because bicubic and
|
|
341
340
|
# other interpolations can cause value spikes
|
|
@@ -388,7 +387,8 @@ def _rasterioParameters(
|
|
|
388
387
|
|
|
389
388
|
# add the remaining options
|
|
390
389
|
options.update(tiled=True, bigtiff='IF_SAFER')
|
|
391
|
-
'predictor'
|
|
390
|
+
if 'predictor' in options:
|
|
391
|
+
options.update(predictor=predictor[str(options['predictor'])])
|
|
392
392
|
|
|
393
393
|
return options
|
|
394
394
|
|
|
@@ -997,7 +997,7 @@ def _calculateWidthHeight(
|
|
|
997
997
|
scaledHeight = max(1, int(regionHeight * cast(float, width) / regionWidth))
|
|
998
998
|
if scaledWidth == width or (
|
|
999
999
|
cast(float, width) * regionHeight > cast(float, height) * regionWidth and
|
|
1000
|
-
|
|
1000
|
+
scaledHeight != height):
|
|
1001
1001
|
scale = float(regionHeight) / cast(float, height)
|
|
1002
1002
|
width = scaledWidth
|
|
1003
1003
|
else:
|