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.
Files changed (60) hide show
  1. {large_image-1.30.6.dev35/large_image.egg-info → large_image-1.30.6.dev38}/PKG-INFO +78 -78
  2. {large_image-1.30.6.dev35 → large_image-1.30.6.dev38}/docs/generate_format_table.py +2 -3
  3. {large_image-1.30.6.dev35 → large_image-1.30.6.dev38}/large_image/cache_util/base.py +1 -1
  4. {large_image-1.30.6.dev35 → large_image-1.30.6.dev38}/large_image/cache_util/cache.py +2 -2
  5. {large_image-1.30.6.dev35 → large_image-1.30.6.dev38}/large_image/cache_util/rediscache.py +1 -2
  6. {large_image-1.30.6.dev35 → large_image-1.30.6.dev38}/large_image/config.py +2 -6
  7. {large_image-1.30.6.dev35 → large_image-1.30.6.dev38}/large_image/tilesource/__init__.py +1 -1
  8. {large_image-1.30.6.dev35 → large_image-1.30.6.dev38}/large_image/tilesource/base.py +4 -5
  9. {large_image-1.30.6.dev35 → large_image-1.30.6.dev38}/large_image/tilesource/jupyter.py +1 -1
  10. large_image-1.30.6.dev38/large_image/tilesource/resample.py +125 -0
  11. {large_image-1.30.6.dev35 → large_image-1.30.6.dev38}/large_image/tilesource/tiledict.py +1 -2
  12. {large_image-1.30.6.dev35 → large_image-1.30.6.dev38}/large_image/tilesource/tileiterator.py +3 -6
  13. {large_image-1.30.6.dev35 → large_image-1.30.6.dev38}/large_image/tilesource/utilities.py +5 -5
  14. {large_image-1.30.6.dev35 → large_image-1.30.6.dev38/large_image.egg-info}/PKG-INFO +78 -78
  15. large_image-1.30.6.dev38/large_image.egg-info/requires.txt +155 -0
  16. {large_image-1.30.6.dev35 → large_image-1.30.6.dev38}/setup.py +1 -2
  17. large_image-1.30.6.dev35/large_image/tilesource/resample.py +0 -129
  18. large_image-1.30.6.dev35/large_image.egg-info/requires.txt +0 -155
  19. {large_image-1.30.6.dev35 → large_image-1.30.6.dev38}/LICENSE +0 -0
  20. {large_image-1.30.6.dev35 → large_image-1.30.6.dev38}/NOTICE +0 -0
  21. {large_image-1.30.6.dev35 → large_image-1.30.6.dev38}/README.rst +0 -0
  22. {large_image-1.30.6.dev35 → large_image-1.30.6.dev38}/docs/annotations.rst +0 -0
  23. {large_image-1.30.6.dev35 → large_image-1.30.6.dev38}/docs/api_index.rst +0 -0
  24. {large_image-1.30.6.dev35 → large_image-1.30.6.dev38}/docs/caching.rst +0 -0
  25. {large_image-1.30.6.dev35 → large_image-1.30.6.dev38}/docs/conf.py +0 -0
  26. {large_image-1.30.6.dev35 → large_image-1.30.6.dev38}/docs/config_options.rst +0 -0
  27. {large_image-1.30.6.dev35 → large_image-1.30.6.dev38}/docs/development.rst +0 -0
  28. {large_image-1.30.6.dev35 → large_image-1.30.6.dev38}/docs/dicomweb_assetstore.rst +0 -0
  29. {large_image-1.30.6.dev35 → large_image-1.30.6.dev38}/docs/format_examples_datastore.py +0 -0
  30. {large_image-1.30.6.dev35 → large_image-1.30.6.dev38}/docs/formats.rst +0 -0
  31. {large_image-1.30.6.dev35 → large_image-1.30.6.dev38}/docs/getting_started.rst +0 -0
  32. {large_image-1.30.6.dev35 → large_image-1.30.6.dev38}/docs/girder_annotation_config_options.rst +0 -0
  33. {large_image-1.30.6.dev35 → large_image-1.30.6.dev38}/docs/girder_caching.rst +0 -0
  34. {large_image-1.30.6.dev35 → large_image-1.30.6.dev38}/docs/girder_config_options.rst +0 -0
  35. {large_image-1.30.6.dev35 → large_image-1.30.6.dev38}/docs/girder_index.rst +0 -0
  36. {large_image-1.30.6.dev35 → large_image-1.30.6.dev38}/docs/image_conversion.rst +0 -0
  37. {large_image-1.30.6.dev35 → large_image-1.30.6.dev38}/docs/index.rst +0 -0
  38. {large_image-1.30.6.dev35 → large_image-1.30.6.dev38}/docs/make_docs.sh +0 -0
  39. {large_image-1.30.6.dev35 → large_image-1.30.6.dev38}/docs/multi_source_specification.rst +0 -0
  40. {large_image-1.30.6.dev35 → large_image-1.30.6.dev38}/docs/notebooks/large_image_examples.ipynb +0 -0
  41. {large_image-1.30.6.dev35 → large_image-1.30.6.dev38}/docs/notebooks/zarr_sink_example.ipynb +0 -0
  42. {large_image-1.30.6.dev35 → large_image-1.30.6.dev38}/docs/notebooks.rst +0 -0
  43. {large_image-1.30.6.dev35 → large_image-1.30.6.dev38}/docs/plottable.rst +0 -0
  44. {large_image-1.30.6.dev35 → large_image-1.30.6.dev38}/docs/static/K.png +0 -0
  45. {large_image-1.30.6.dev35 → large_image-1.30.6.dev38}/docs/static/custom.css +0 -0
  46. {large_image-1.30.6.dev35 → large_image-1.30.6.dev38}/docs/tilesource_options.rst +0 -0
  47. {large_image-1.30.6.dev35 → large_image-1.30.6.dev38}/docs/upgrade.rst +0 -0
  48. {large_image-1.30.6.dev35 → large_image-1.30.6.dev38}/large_image/__init__.py +0 -0
  49. {large_image-1.30.6.dev35 → large_image-1.30.6.dev38}/large_image/cache_util/__init__.py +0 -0
  50. {large_image-1.30.6.dev35 → large_image-1.30.6.dev38}/large_image/cache_util/cachefactory.py +0 -0
  51. {large_image-1.30.6.dev35 → large_image-1.30.6.dev38}/large_image/cache_util/memcache.py +0 -0
  52. {large_image-1.30.6.dev35 → large_image-1.30.6.dev38}/large_image/constants.py +0 -0
  53. {large_image-1.30.6.dev35 → large_image-1.30.6.dev38}/large_image/exceptions.py +0 -0
  54. {large_image-1.30.6.dev35 → large_image-1.30.6.dev38}/large_image/tilesource/geo.py +0 -0
  55. {large_image-1.30.6.dev35 → large_image-1.30.6.dev38}/large_image/tilesource/stylefuncs.py +0 -0
  56. {large_image-1.30.6.dev35 → large_image-1.30.6.dev38}/large_image.egg-info/SOURCES.txt +0 -0
  57. {large_image-1.30.6.dev35 → large_image-1.30.6.dev38}/large_image.egg-info/dependency_links.txt +0 -0
  58. {large_image-1.30.6.dev35 → large_image-1.30.6.dev38}/large_image.egg-info/not-zip-safe +0 -0
  59. {large_image-1.30.6.dev35 → large_image-1.30.6.dev38}/large_image.egg-info/top_level.txt +0 -0
  60. {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.dev35
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.dev35; extra == "converter"
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.dev35; extra == "bioformats"
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.dev35; extra == "deepzoom"
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.dev35; extra == "dicom"
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.dev35; extra == "dummy"
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.dev35; extra == "gdal"
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.dev35; extra == "mapnik"
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.dev35; extra == "multi"
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.dev35; extra == "nd2"
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.dev35; extra == "ometiff"
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.dev35; extra == "openjpeg"
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.dev35; extra == "openslide"
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.dev35; extra == "pil"
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.dev35; extra == "rasterio"
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.dev35; extra == "test"
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.dev35; extra == "tiff"
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.dev35; extra == "tifffile"
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.dev35; extra == "vips"
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.dev35; extra == "zarr"
77
+ Requires-Dist: large-image-source-zarr>=1.30.6.dev38; extra == "zarr"
78
78
  Provides-Extra: sources
79
- Requires-Dist: large-image-source-deepzoom>=1.30.6.dev35; extra == "sources"
80
- Requires-Dist: large-image-source-openslide>=1.30.6.dev35; extra == "sources"
81
- Requires-Dist: large-image-source-rasterio>=1.30.6.dev35; extra == "sources"
82
- Requires-Dist: large-image-source-vips>=1.30.6.dev35; extra == "sources"
83
- Requires-Dist: large-image-source-gdal>=1.30.6.dev35; extra == "sources"
84
- Requires-Dist: large-image-source-pil>=1.30.6.dev35; extra == "sources"
85
- Requires-Dist: large-image-source-multi>=1.30.6.dev35; extra == "sources"
86
- Requires-Dist: large-image-source-openjpeg>=1.30.6.dev35; extra == "sources"
87
- Requires-Dist: large-image-source-test>=1.30.6.dev35; extra == "sources"
88
- Requires-Dist: large-image-source-zarr>=1.30.6.dev35; extra == "sources"
89
- Requires-Dist: large-image-source-tifffile>=1.30.6.dev35; extra == "sources"
90
- Requires-Dist: large-image-source-dicom>=1.30.6.dev35; extra == "sources"
91
- Requires-Dist: large-image-source-nd2>=1.30.6.dev35; extra == "sources"
92
- Requires-Dist: large-image-source-tiff>=1.30.6.dev35; extra == "sources"
93
- Requires-Dist: large-image-source-dummy>=1.30.6.dev35; extra == "sources"
94
- Requires-Dist: large-image-source-ometiff>=1.30.6.dev35; extra == "sources"
95
- Requires-Dist: large-image-source-bioformats>=1.30.6.dev35; extra == "sources"
96
- Requires-Dist: large-image-source-mapnik>=1.30.6.dev35; extra == "sources"
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-deepzoom>=1.30.6.dev35; extra == "all"
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: simplejpeg; extra == "all"
107
- Requires-Dist: large-image-source-tifffile>=1.30.6.dev35; extra == "all"
108
- Requires-Dist: large-image-source-multi[all]>=1.30.6.dev35; extra == "all"
109
- Requires-Dist: large-image-source-dicom>=1.30.6.dev35; extra == "all"
110
- Requires-Dist: large-image-source-pil[all]>=1.30.6.dev35; extra == "all"
111
- Requires-Dist: large-image-converter>=1.30.6.dev35; extra == "all"
112
- Requires-Dist: large-image-source-dummy>=1.30.6.dev35; extra == "all"
113
- Requires-Dist: large-image-source-ometiff>=1.30.6.dev35; extra == "all"
114
- Requires-Dist: large-image-source-bioformats>=1.30.6.dev35; extra == "all"
115
- Requires-Dist: large-image-source-tiff>=1.30.6.dev35; extra == "all"
116
- Requires-Dist: large-image-source-rasterio>=1.30.6.dev35; extra == "all"
117
- Requires-Dist: large-image-source-vips>=1.30.6.dev35; extra == "all"
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-zarr>=1.30.6.dev35; extra == "all"
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-rasterio[all]>=1.30.6.dev35; extra == "all"
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: simplejpeg; extra == "common"
138
- Requires-Dist: large-image-source-tifffile>=1.30.6.dev35; extra == "common"
139
- Requires-Dist: large-image-source-rasterio[all]>=1.30.6.dev35; extra == "common"
140
- Requires-Dist: large-image-source-dicom>=1.30.6.dev35; extra == "common"
141
- Requires-Dist: large-image-source-nd2>=1.30.6.dev35; extra == "common"
142
- Requires-Dist: large-image-source-pil[all]>=1.30.6.dev35; extra == "common"
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
- else:
93
- row_key_index += 1
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 (curtime - self.lastError.get(key, {}).get('time', 0) > self.throttleErrors):
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__(metacls, name, bases, namespace, **kwargs):
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
- metacls, name, bases, namespace)
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
- else:
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 None
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
- try:
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
- 'exceptions', 'TileGeneralError', 'TileSourceError',
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 None
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', None), '__STYLEEND__')
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, calcScale = utilities._calculateWidthHeight(
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', None), '__STYLEEND__')
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.__repr__()}'
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, mimeType = _encodeImage(
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(
@@ -44,12 +44,9 @@ class TileIterator:
44
44
  def __next__(self) -> LazyTileDict:
45
45
  if self._iter is None:
46
46
  raise StopIteration
47
- try:
48
- tile = next(self._iter)
49
- tile.setFormat(self.format, bool(self.resample), self._kwargs)
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
- else:
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 == pyvips.BandFormat.DOUBLE or image.format == pyvips.BandFormat.FLOAT:
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' not in options or options.update(predictor=predictor[str(options['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
- not scaledHeight == height):
1000
+ scaledHeight != height):
1001
1001
  scale = float(regionHeight) / cast(float, height)
1002
1002
  width = scaledWidth
1003
1003
  else: