rio-tiler 6.4.1__tar.gz → 6.4.3__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 (241) hide show
  1. {rio_tiler-6.4.1 → rio_tiler-6.4.3}/PKG-INFO +2 -2
  2. {rio_tiler-6.4.1 → rio_tiler-6.4.3}/rio_tiler/__init__.py +1 -1
  3. {rio_tiler-6.4.1 → rio_tiler-6.4.3}/rio_tiler/io/rasterio.py +1 -1
  4. {rio_tiler-6.4.1 → rio_tiler-6.4.3}/rio_tiler/utils.py +74 -30
  5. {rio_tiler-6.4.1 → rio_tiler-6.4.3}/.gitignore +0 -0
  6. {rio_tiler-6.4.1 → rio_tiler-6.4.3}/AUTHORS.txt +0 -0
  7. {rio_tiler-6.4.1 → rio_tiler-6.4.3}/LICENSE +0 -0
  8. {rio_tiler-6.4.1 → rio_tiler-6.4.3}/README.md +0 -0
  9. {rio_tiler-6.4.1 → rio_tiler-6.4.3}/pyproject.toml +0 -0
  10. {rio_tiler-6.4.1 → rio_tiler-6.4.3}/rio_tiler/cmap_data/__init__.py +0 -0
  11. {rio_tiler-6.4.1 → rio_tiler-6.4.3}/rio_tiler/cmap_data/accent.npy +0 -0
  12. {rio_tiler-6.4.1 → rio_tiler-6.4.3}/rio_tiler/cmap_data/accent_r.npy +0 -0
  13. {rio_tiler-6.4.1 → rio_tiler-6.4.3}/rio_tiler/cmap_data/afmhot.npy +0 -0
  14. {rio_tiler-6.4.1 → rio_tiler-6.4.3}/rio_tiler/cmap_data/afmhot_r.npy +0 -0
  15. {rio_tiler-6.4.1 → rio_tiler-6.4.3}/rio_tiler/cmap_data/algae.npy +0 -0
  16. {rio_tiler-6.4.1 → rio_tiler-6.4.3}/rio_tiler/cmap_data/algae_r.npy +0 -0
  17. {rio_tiler-6.4.1 → rio_tiler-6.4.3}/rio_tiler/cmap_data/amp.npy +0 -0
  18. {rio_tiler-6.4.1 → rio_tiler-6.4.3}/rio_tiler/cmap_data/amp_r.npy +0 -0
  19. {rio_tiler-6.4.1 → rio_tiler-6.4.3}/rio_tiler/cmap_data/autumn.npy +0 -0
  20. {rio_tiler-6.4.1 → rio_tiler-6.4.3}/rio_tiler/cmap_data/autumn_r.npy +0 -0
  21. {rio_tiler-6.4.1 → rio_tiler-6.4.3}/rio_tiler/cmap_data/balance.npy +0 -0
  22. {rio_tiler-6.4.1 → rio_tiler-6.4.3}/rio_tiler/cmap_data/balance_r.npy +0 -0
  23. {rio_tiler-6.4.1 → rio_tiler-6.4.3}/rio_tiler/cmap_data/binary.npy +0 -0
  24. {rio_tiler-6.4.1 → rio_tiler-6.4.3}/rio_tiler/cmap_data/binary_r.npy +0 -0
  25. {rio_tiler-6.4.1 → rio_tiler-6.4.3}/rio_tiler/cmap_data/blues.npy +0 -0
  26. {rio_tiler-6.4.1 → rio_tiler-6.4.3}/rio_tiler/cmap_data/blues_r.npy +0 -0
  27. {rio_tiler-6.4.1 → rio_tiler-6.4.3}/rio_tiler/cmap_data/bone.npy +0 -0
  28. {rio_tiler-6.4.1 → rio_tiler-6.4.3}/rio_tiler/cmap_data/bone_r.npy +0 -0
  29. {rio_tiler-6.4.1 → rio_tiler-6.4.3}/rio_tiler/cmap_data/brbg.npy +0 -0
  30. {rio_tiler-6.4.1 → rio_tiler-6.4.3}/rio_tiler/cmap_data/brbg_r.npy +0 -0
  31. {rio_tiler-6.4.1 → rio_tiler-6.4.3}/rio_tiler/cmap_data/brg.npy +0 -0
  32. {rio_tiler-6.4.1 → rio_tiler-6.4.3}/rio_tiler/cmap_data/brg_r.npy +0 -0
  33. {rio_tiler-6.4.1 → rio_tiler-6.4.3}/rio_tiler/cmap_data/bugn.npy +0 -0
  34. {rio_tiler-6.4.1 → rio_tiler-6.4.3}/rio_tiler/cmap_data/bugn_r.npy +0 -0
  35. {rio_tiler-6.4.1 → rio_tiler-6.4.3}/rio_tiler/cmap_data/bupu.npy +0 -0
  36. {rio_tiler-6.4.1 → rio_tiler-6.4.3}/rio_tiler/cmap_data/bupu_r.npy +0 -0
  37. {rio_tiler-6.4.1 → rio_tiler-6.4.3}/rio_tiler/cmap_data/bwr.npy +0 -0
  38. {rio_tiler-6.4.1 → rio_tiler-6.4.3}/rio_tiler/cmap_data/bwr_r.npy +0 -0
  39. {rio_tiler-6.4.1 → rio_tiler-6.4.3}/rio_tiler/cmap_data/cfastie.npy +0 -0
  40. {rio_tiler-6.4.1 → rio_tiler-6.4.3}/rio_tiler/cmap_data/cividis.npy +0 -0
  41. {rio_tiler-6.4.1 → rio_tiler-6.4.3}/rio_tiler/cmap_data/cividis_r.npy +0 -0
  42. {rio_tiler-6.4.1 → rio_tiler-6.4.3}/rio_tiler/cmap_data/cmrmap.npy +0 -0
  43. {rio_tiler-6.4.1 → rio_tiler-6.4.3}/rio_tiler/cmap_data/cmrmap_r.npy +0 -0
  44. {rio_tiler-6.4.1 → rio_tiler-6.4.3}/rio_tiler/cmap_data/cool.npy +0 -0
  45. {rio_tiler-6.4.1 → rio_tiler-6.4.3}/rio_tiler/cmap_data/cool_r.npy +0 -0
  46. {rio_tiler-6.4.1 → rio_tiler-6.4.3}/rio_tiler/cmap_data/coolwarm.npy +0 -0
  47. {rio_tiler-6.4.1 → rio_tiler-6.4.3}/rio_tiler/cmap_data/coolwarm_r.npy +0 -0
  48. {rio_tiler-6.4.1 → rio_tiler-6.4.3}/rio_tiler/cmap_data/copper.npy +0 -0
  49. {rio_tiler-6.4.1 → rio_tiler-6.4.3}/rio_tiler/cmap_data/copper_r.npy +0 -0
  50. {rio_tiler-6.4.1 → rio_tiler-6.4.3}/rio_tiler/cmap_data/cubehelix.npy +0 -0
  51. {rio_tiler-6.4.1 → rio_tiler-6.4.3}/rio_tiler/cmap_data/cubehelix_r.npy +0 -0
  52. {rio_tiler-6.4.1 → rio_tiler-6.4.3}/rio_tiler/cmap_data/curl.npy +0 -0
  53. {rio_tiler-6.4.1 → rio_tiler-6.4.3}/rio_tiler/cmap_data/curl_r.npy +0 -0
  54. {rio_tiler-6.4.1 → rio_tiler-6.4.3}/rio_tiler/cmap_data/dark2.npy +0 -0
  55. {rio_tiler-6.4.1 → rio_tiler-6.4.3}/rio_tiler/cmap_data/dark2_r.npy +0 -0
  56. {rio_tiler-6.4.1 → rio_tiler-6.4.3}/rio_tiler/cmap_data/deep.npy +0 -0
  57. {rio_tiler-6.4.1 → rio_tiler-6.4.3}/rio_tiler/cmap_data/deep_r.npy +0 -0
  58. {rio_tiler-6.4.1 → rio_tiler-6.4.3}/rio_tiler/cmap_data/delta.npy +0 -0
  59. {rio_tiler-6.4.1 → rio_tiler-6.4.3}/rio_tiler/cmap_data/delta_r.npy +0 -0
  60. {rio_tiler-6.4.1 → rio_tiler-6.4.3}/rio_tiler/cmap_data/dense.npy +0 -0
  61. {rio_tiler-6.4.1 → rio_tiler-6.4.3}/rio_tiler/cmap_data/dense_r.npy +0 -0
  62. {rio_tiler-6.4.1 → rio_tiler-6.4.3}/rio_tiler/cmap_data/diff.npy +0 -0
  63. {rio_tiler-6.4.1 → rio_tiler-6.4.3}/rio_tiler/cmap_data/diff_r.npy +0 -0
  64. {rio_tiler-6.4.1 → rio_tiler-6.4.3}/rio_tiler/cmap_data/flag.npy +0 -0
  65. {rio_tiler-6.4.1 → rio_tiler-6.4.3}/rio_tiler/cmap_data/flag_r.npy +0 -0
  66. {rio_tiler-6.4.1 → rio_tiler-6.4.3}/rio_tiler/cmap_data/gist_earth.npy +0 -0
  67. {rio_tiler-6.4.1 → rio_tiler-6.4.3}/rio_tiler/cmap_data/gist_earth_r.npy +0 -0
  68. {rio_tiler-6.4.1 → rio_tiler-6.4.3}/rio_tiler/cmap_data/gist_gray.npy +0 -0
  69. {rio_tiler-6.4.1 → rio_tiler-6.4.3}/rio_tiler/cmap_data/gist_gray_r.npy +0 -0
  70. {rio_tiler-6.4.1 → rio_tiler-6.4.3}/rio_tiler/cmap_data/gist_heat.npy +0 -0
  71. {rio_tiler-6.4.1 → rio_tiler-6.4.3}/rio_tiler/cmap_data/gist_heat_r.npy +0 -0
  72. {rio_tiler-6.4.1 → rio_tiler-6.4.3}/rio_tiler/cmap_data/gist_ncar.npy +0 -0
  73. {rio_tiler-6.4.1 → rio_tiler-6.4.3}/rio_tiler/cmap_data/gist_ncar_r.npy +0 -0
  74. {rio_tiler-6.4.1 → rio_tiler-6.4.3}/rio_tiler/cmap_data/gist_rainbow.npy +0 -0
  75. {rio_tiler-6.4.1 → rio_tiler-6.4.3}/rio_tiler/cmap_data/gist_rainbow_r.npy +0 -0
  76. {rio_tiler-6.4.1 → rio_tiler-6.4.3}/rio_tiler/cmap_data/gist_stern.npy +0 -0
  77. {rio_tiler-6.4.1 → rio_tiler-6.4.3}/rio_tiler/cmap_data/gist_stern_r.npy +0 -0
  78. {rio_tiler-6.4.1 → rio_tiler-6.4.3}/rio_tiler/cmap_data/gist_yarg.npy +0 -0
  79. {rio_tiler-6.4.1 → rio_tiler-6.4.3}/rio_tiler/cmap_data/gist_yarg_r.npy +0 -0
  80. {rio_tiler-6.4.1 → rio_tiler-6.4.3}/rio_tiler/cmap_data/gnbu.npy +0 -0
  81. {rio_tiler-6.4.1 → rio_tiler-6.4.3}/rio_tiler/cmap_data/gnbu_r.npy +0 -0
  82. {rio_tiler-6.4.1 → rio_tiler-6.4.3}/rio_tiler/cmap_data/gnuplot.npy +0 -0
  83. {rio_tiler-6.4.1 → rio_tiler-6.4.3}/rio_tiler/cmap_data/gnuplot2.npy +0 -0
  84. {rio_tiler-6.4.1 → rio_tiler-6.4.3}/rio_tiler/cmap_data/gnuplot2_r.npy +0 -0
  85. {rio_tiler-6.4.1 → rio_tiler-6.4.3}/rio_tiler/cmap_data/gnuplot_r.npy +0 -0
  86. {rio_tiler-6.4.1 → rio_tiler-6.4.3}/rio_tiler/cmap_data/gray.npy +0 -0
  87. {rio_tiler-6.4.1 → rio_tiler-6.4.3}/rio_tiler/cmap_data/gray_r.npy +0 -0
  88. {rio_tiler-6.4.1 → rio_tiler-6.4.3}/rio_tiler/cmap_data/greens.npy +0 -0
  89. {rio_tiler-6.4.1 → rio_tiler-6.4.3}/rio_tiler/cmap_data/greens_r.npy +0 -0
  90. {rio_tiler-6.4.1 → rio_tiler-6.4.3}/rio_tiler/cmap_data/greys.npy +0 -0
  91. {rio_tiler-6.4.1 → rio_tiler-6.4.3}/rio_tiler/cmap_data/greys_r.npy +0 -0
  92. {rio_tiler-6.4.1 → rio_tiler-6.4.3}/rio_tiler/cmap_data/haline.npy +0 -0
  93. {rio_tiler-6.4.1 → rio_tiler-6.4.3}/rio_tiler/cmap_data/haline_r.npy +0 -0
  94. {rio_tiler-6.4.1 → rio_tiler-6.4.3}/rio_tiler/cmap_data/hot.npy +0 -0
  95. {rio_tiler-6.4.1 → rio_tiler-6.4.3}/rio_tiler/cmap_data/hot_r.npy +0 -0
  96. {rio_tiler-6.4.1 → rio_tiler-6.4.3}/rio_tiler/cmap_data/hsv.npy +0 -0
  97. {rio_tiler-6.4.1 → rio_tiler-6.4.3}/rio_tiler/cmap_data/hsv_r.npy +0 -0
  98. {rio_tiler-6.4.1 → rio_tiler-6.4.3}/rio_tiler/cmap_data/ice.npy +0 -0
  99. {rio_tiler-6.4.1 → rio_tiler-6.4.3}/rio_tiler/cmap_data/ice_r.npy +0 -0
  100. {rio_tiler-6.4.1 → rio_tiler-6.4.3}/rio_tiler/cmap_data/inferno.npy +0 -0
  101. {rio_tiler-6.4.1 → rio_tiler-6.4.3}/rio_tiler/cmap_data/inferno_r.npy +0 -0
  102. {rio_tiler-6.4.1 → rio_tiler-6.4.3}/rio_tiler/cmap_data/jet.npy +0 -0
  103. {rio_tiler-6.4.1 → rio_tiler-6.4.3}/rio_tiler/cmap_data/jet_r.npy +0 -0
  104. {rio_tiler-6.4.1 → rio_tiler-6.4.3}/rio_tiler/cmap_data/magma.npy +0 -0
  105. {rio_tiler-6.4.1 → rio_tiler-6.4.3}/rio_tiler/cmap_data/magma_r.npy +0 -0
  106. {rio_tiler-6.4.1 → rio_tiler-6.4.3}/rio_tiler/cmap_data/matter.npy +0 -0
  107. {rio_tiler-6.4.1 → rio_tiler-6.4.3}/rio_tiler/cmap_data/matter_r.npy +0 -0
  108. {rio_tiler-6.4.1 → rio_tiler-6.4.3}/rio_tiler/cmap_data/nipy_spectral.npy +0 -0
  109. {rio_tiler-6.4.1 → rio_tiler-6.4.3}/rio_tiler/cmap_data/nipy_spectral_r.npy +0 -0
  110. {rio_tiler-6.4.1 → rio_tiler-6.4.3}/rio_tiler/cmap_data/ocean.npy +0 -0
  111. {rio_tiler-6.4.1 → rio_tiler-6.4.3}/rio_tiler/cmap_data/ocean_r.npy +0 -0
  112. {rio_tiler-6.4.1 → rio_tiler-6.4.3}/rio_tiler/cmap_data/oranges.npy +0 -0
  113. {rio_tiler-6.4.1 → rio_tiler-6.4.3}/rio_tiler/cmap_data/oranges_r.npy +0 -0
  114. {rio_tiler-6.4.1 → rio_tiler-6.4.3}/rio_tiler/cmap_data/orrd.npy +0 -0
  115. {rio_tiler-6.4.1 → rio_tiler-6.4.3}/rio_tiler/cmap_data/orrd_r.npy +0 -0
  116. {rio_tiler-6.4.1 → rio_tiler-6.4.3}/rio_tiler/cmap_data/oxy.npy +0 -0
  117. {rio_tiler-6.4.1 → rio_tiler-6.4.3}/rio_tiler/cmap_data/oxy_r.npy +0 -0
  118. {rio_tiler-6.4.1 → rio_tiler-6.4.3}/rio_tiler/cmap_data/paired.npy +0 -0
  119. {rio_tiler-6.4.1 → rio_tiler-6.4.3}/rio_tiler/cmap_data/paired_r.npy +0 -0
  120. {rio_tiler-6.4.1 → rio_tiler-6.4.3}/rio_tiler/cmap_data/pastel1.npy +0 -0
  121. {rio_tiler-6.4.1 → rio_tiler-6.4.3}/rio_tiler/cmap_data/pastel1_r.npy +0 -0
  122. {rio_tiler-6.4.1 → rio_tiler-6.4.3}/rio_tiler/cmap_data/pastel2.npy +0 -0
  123. {rio_tiler-6.4.1 → rio_tiler-6.4.3}/rio_tiler/cmap_data/pastel2_r.npy +0 -0
  124. {rio_tiler-6.4.1 → rio_tiler-6.4.3}/rio_tiler/cmap_data/phase.npy +0 -0
  125. {rio_tiler-6.4.1 → rio_tiler-6.4.3}/rio_tiler/cmap_data/phase_r.npy +0 -0
  126. {rio_tiler-6.4.1 → rio_tiler-6.4.3}/rio_tiler/cmap_data/pink.npy +0 -0
  127. {rio_tiler-6.4.1 → rio_tiler-6.4.3}/rio_tiler/cmap_data/pink_r.npy +0 -0
  128. {rio_tiler-6.4.1 → rio_tiler-6.4.3}/rio_tiler/cmap_data/piyg.npy +0 -0
  129. {rio_tiler-6.4.1 → rio_tiler-6.4.3}/rio_tiler/cmap_data/piyg_r.npy +0 -0
  130. {rio_tiler-6.4.1 → rio_tiler-6.4.3}/rio_tiler/cmap_data/plasma.npy +0 -0
  131. {rio_tiler-6.4.1 → rio_tiler-6.4.3}/rio_tiler/cmap_data/plasma_r.npy +0 -0
  132. {rio_tiler-6.4.1 → rio_tiler-6.4.3}/rio_tiler/cmap_data/prgn.npy +0 -0
  133. {rio_tiler-6.4.1 → rio_tiler-6.4.3}/rio_tiler/cmap_data/prgn_r.npy +0 -0
  134. {rio_tiler-6.4.1 → rio_tiler-6.4.3}/rio_tiler/cmap_data/prism.npy +0 -0
  135. {rio_tiler-6.4.1 → rio_tiler-6.4.3}/rio_tiler/cmap_data/prism_r.npy +0 -0
  136. {rio_tiler-6.4.1 → rio_tiler-6.4.3}/rio_tiler/cmap_data/pubu.npy +0 -0
  137. {rio_tiler-6.4.1 → rio_tiler-6.4.3}/rio_tiler/cmap_data/pubu_r.npy +0 -0
  138. {rio_tiler-6.4.1 → rio_tiler-6.4.3}/rio_tiler/cmap_data/pubugn.npy +0 -0
  139. {rio_tiler-6.4.1 → rio_tiler-6.4.3}/rio_tiler/cmap_data/pubugn_r.npy +0 -0
  140. {rio_tiler-6.4.1 → rio_tiler-6.4.3}/rio_tiler/cmap_data/puor.npy +0 -0
  141. {rio_tiler-6.4.1 → rio_tiler-6.4.3}/rio_tiler/cmap_data/puor_r.npy +0 -0
  142. {rio_tiler-6.4.1 → rio_tiler-6.4.3}/rio_tiler/cmap_data/purd.npy +0 -0
  143. {rio_tiler-6.4.1 → rio_tiler-6.4.3}/rio_tiler/cmap_data/purd_r.npy +0 -0
  144. {rio_tiler-6.4.1 → rio_tiler-6.4.3}/rio_tiler/cmap_data/purples.npy +0 -0
  145. {rio_tiler-6.4.1 → rio_tiler-6.4.3}/rio_tiler/cmap_data/purples_r.npy +0 -0
  146. {rio_tiler-6.4.1 → rio_tiler-6.4.3}/rio_tiler/cmap_data/rain.npy +0 -0
  147. {rio_tiler-6.4.1 → rio_tiler-6.4.3}/rio_tiler/cmap_data/rain_r.npy +0 -0
  148. {rio_tiler-6.4.1 → rio_tiler-6.4.3}/rio_tiler/cmap_data/rainbow.npy +0 -0
  149. {rio_tiler-6.4.1 → rio_tiler-6.4.3}/rio_tiler/cmap_data/rainbow_r.npy +0 -0
  150. {rio_tiler-6.4.1 → rio_tiler-6.4.3}/rio_tiler/cmap_data/rdbu.npy +0 -0
  151. {rio_tiler-6.4.1 → rio_tiler-6.4.3}/rio_tiler/cmap_data/rdbu_r.npy +0 -0
  152. {rio_tiler-6.4.1 → rio_tiler-6.4.3}/rio_tiler/cmap_data/rdgy.npy +0 -0
  153. {rio_tiler-6.4.1 → rio_tiler-6.4.3}/rio_tiler/cmap_data/rdgy_r.npy +0 -0
  154. {rio_tiler-6.4.1 → rio_tiler-6.4.3}/rio_tiler/cmap_data/rdpu.npy +0 -0
  155. {rio_tiler-6.4.1 → rio_tiler-6.4.3}/rio_tiler/cmap_data/rdpu_r.npy +0 -0
  156. {rio_tiler-6.4.1 → rio_tiler-6.4.3}/rio_tiler/cmap_data/rdylbu.npy +0 -0
  157. {rio_tiler-6.4.1 → rio_tiler-6.4.3}/rio_tiler/cmap_data/rdylbu_r.npy +0 -0
  158. {rio_tiler-6.4.1 → rio_tiler-6.4.3}/rio_tiler/cmap_data/rdylgn.npy +0 -0
  159. {rio_tiler-6.4.1 → rio_tiler-6.4.3}/rio_tiler/cmap_data/rdylgn_r.npy +0 -0
  160. {rio_tiler-6.4.1 → rio_tiler-6.4.3}/rio_tiler/cmap_data/reds.npy +0 -0
  161. {rio_tiler-6.4.1 → rio_tiler-6.4.3}/rio_tiler/cmap_data/reds_r.npy +0 -0
  162. {rio_tiler-6.4.1 → rio_tiler-6.4.3}/rio_tiler/cmap_data/rplumbo.npy +0 -0
  163. {rio_tiler-6.4.1 → rio_tiler-6.4.3}/rio_tiler/cmap_data/schwarzwald.npy +0 -0
  164. {rio_tiler-6.4.1 → rio_tiler-6.4.3}/rio_tiler/cmap_data/seismic.npy +0 -0
  165. {rio_tiler-6.4.1 → rio_tiler-6.4.3}/rio_tiler/cmap_data/seismic_r.npy +0 -0
  166. {rio_tiler-6.4.1 → rio_tiler-6.4.3}/rio_tiler/cmap_data/set1.npy +0 -0
  167. {rio_tiler-6.4.1 → rio_tiler-6.4.3}/rio_tiler/cmap_data/set1_r.npy +0 -0
  168. {rio_tiler-6.4.1 → rio_tiler-6.4.3}/rio_tiler/cmap_data/set2.npy +0 -0
  169. {rio_tiler-6.4.1 → rio_tiler-6.4.3}/rio_tiler/cmap_data/set2_r.npy +0 -0
  170. {rio_tiler-6.4.1 → rio_tiler-6.4.3}/rio_tiler/cmap_data/set3.npy +0 -0
  171. {rio_tiler-6.4.1 → rio_tiler-6.4.3}/rio_tiler/cmap_data/set3_r.npy +0 -0
  172. {rio_tiler-6.4.1 → rio_tiler-6.4.3}/rio_tiler/cmap_data/solar.npy +0 -0
  173. {rio_tiler-6.4.1 → rio_tiler-6.4.3}/rio_tiler/cmap_data/solar_r.npy +0 -0
  174. {rio_tiler-6.4.1 → rio_tiler-6.4.3}/rio_tiler/cmap_data/spectral.npy +0 -0
  175. {rio_tiler-6.4.1 → rio_tiler-6.4.3}/rio_tiler/cmap_data/spectral_r.npy +0 -0
  176. {rio_tiler-6.4.1 → rio_tiler-6.4.3}/rio_tiler/cmap_data/speed.npy +0 -0
  177. {rio_tiler-6.4.1 → rio_tiler-6.4.3}/rio_tiler/cmap_data/speed_r.npy +0 -0
  178. {rio_tiler-6.4.1 → rio_tiler-6.4.3}/rio_tiler/cmap_data/spring.npy +0 -0
  179. {rio_tiler-6.4.1 → rio_tiler-6.4.3}/rio_tiler/cmap_data/spring_r.npy +0 -0
  180. {rio_tiler-6.4.1 → rio_tiler-6.4.3}/rio_tiler/cmap_data/summer.npy +0 -0
  181. {rio_tiler-6.4.1 → rio_tiler-6.4.3}/rio_tiler/cmap_data/summer_r.npy +0 -0
  182. {rio_tiler-6.4.1 → rio_tiler-6.4.3}/rio_tiler/cmap_data/tab10.npy +0 -0
  183. {rio_tiler-6.4.1 → rio_tiler-6.4.3}/rio_tiler/cmap_data/tab10_r.npy +0 -0
  184. {rio_tiler-6.4.1 → rio_tiler-6.4.3}/rio_tiler/cmap_data/tab20.npy +0 -0
  185. {rio_tiler-6.4.1 → rio_tiler-6.4.3}/rio_tiler/cmap_data/tab20_r.npy +0 -0
  186. {rio_tiler-6.4.1 → rio_tiler-6.4.3}/rio_tiler/cmap_data/tab20b.npy +0 -0
  187. {rio_tiler-6.4.1 → rio_tiler-6.4.3}/rio_tiler/cmap_data/tab20b_r.npy +0 -0
  188. {rio_tiler-6.4.1 → rio_tiler-6.4.3}/rio_tiler/cmap_data/tab20c.npy +0 -0
  189. {rio_tiler-6.4.1 → rio_tiler-6.4.3}/rio_tiler/cmap_data/tab20c_r.npy +0 -0
  190. {rio_tiler-6.4.1 → rio_tiler-6.4.3}/rio_tiler/cmap_data/tarn.npy +0 -0
  191. {rio_tiler-6.4.1 → rio_tiler-6.4.3}/rio_tiler/cmap_data/tarn_r.npy +0 -0
  192. {rio_tiler-6.4.1 → rio_tiler-6.4.3}/rio_tiler/cmap_data/tempo.npy +0 -0
  193. {rio_tiler-6.4.1 → rio_tiler-6.4.3}/rio_tiler/cmap_data/tempo_r.npy +0 -0
  194. {rio_tiler-6.4.1 → rio_tiler-6.4.3}/rio_tiler/cmap_data/terrain.npy +0 -0
  195. {rio_tiler-6.4.1 → rio_tiler-6.4.3}/rio_tiler/cmap_data/terrain_r.npy +0 -0
  196. {rio_tiler-6.4.1 → rio_tiler-6.4.3}/rio_tiler/cmap_data/thermal.npy +0 -0
  197. {rio_tiler-6.4.1 → rio_tiler-6.4.3}/rio_tiler/cmap_data/thermal_r.npy +0 -0
  198. {rio_tiler-6.4.1 → rio_tiler-6.4.3}/rio_tiler/cmap_data/topo.npy +0 -0
  199. {rio_tiler-6.4.1 → rio_tiler-6.4.3}/rio_tiler/cmap_data/topo_r.npy +0 -0
  200. {rio_tiler-6.4.1 → rio_tiler-6.4.3}/rio_tiler/cmap_data/turbid.npy +0 -0
  201. {rio_tiler-6.4.1 → rio_tiler-6.4.3}/rio_tiler/cmap_data/turbid_r.npy +0 -0
  202. {rio_tiler-6.4.1 → rio_tiler-6.4.3}/rio_tiler/cmap_data/turbo.npy +0 -0
  203. {rio_tiler-6.4.1 → rio_tiler-6.4.3}/rio_tiler/cmap_data/turbo_r.npy +0 -0
  204. {rio_tiler-6.4.1 → rio_tiler-6.4.3}/rio_tiler/cmap_data/twilight.npy +0 -0
  205. {rio_tiler-6.4.1 → rio_tiler-6.4.3}/rio_tiler/cmap_data/twilight_r.npy +0 -0
  206. {rio_tiler-6.4.1 → rio_tiler-6.4.3}/rio_tiler/cmap_data/twilight_shifted.npy +0 -0
  207. {rio_tiler-6.4.1 → rio_tiler-6.4.3}/rio_tiler/cmap_data/twilight_shifted_r.npy +0 -0
  208. {rio_tiler-6.4.1 → rio_tiler-6.4.3}/rio_tiler/cmap_data/viridis.npy +0 -0
  209. {rio_tiler-6.4.1 → rio_tiler-6.4.3}/rio_tiler/cmap_data/viridis_r.npy +0 -0
  210. {rio_tiler-6.4.1 → rio_tiler-6.4.3}/rio_tiler/cmap_data/winter.npy +0 -0
  211. {rio_tiler-6.4.1 → rio_tiler-6.4.3}/rio_tiler/cmap_data/winter_r.npy +0 -0
  212. {rio_tiler-6.4.1 → rio_tiler-6.4.3}/rio_tiler/cmap_data/wistia.npy +0 -0
  213. {rio_tiler-6.4.1 → rio_tiler-6.4.3}/rio_tiler/cmap_data/wistia_r.npy +0 -0
  214. {rio_tiler-6.4.1 → rio_tiler-6.4.3}/rio_tiler/cmap_data/ylgn.npy +0 -0
  215. {rio_tiler-6.4.1 → rio_tiler-6.4.3}/rio_tiler/cmap_data/ylgn_r.npy +0 -0
  216. {rio_tiler-6.4.1 → rio_tiler-6.4.3}/rio_tiler/cmap_data/ylgnbu.npy +0 -0
  217. {rio_tiler-6.4.1 → rio_tiler-6.4.3}/rio_tiler/cmap_data/ylgnbu_r.npy +0 -0
  218. {rio_tiler-6.4.1 → rio_tiler-6.4.3}/rio_tiler/cmap_data/ylorbr.npy +0 -0
  219. {rio_tiler-6.4.1 → rio_tiler-6.4.3}/rio_tiler/cmap_data/ylorbr_r.npy +0 -0
  220. {rio_tiler-6.4.1 → rio_tiler-6.4.3}/rio_tiler/cmap_data/ylorrd.npy +0 -0
  221. {rio_tiler-6.4.1 → rio_tiler-6.4.3}/rio_tiler/cmap_data/ylorrd_r.npy +0 -0
  222. {rio_tiler-6.4.1 → rio_tiler-6.4.3}/rio_tiler/colormap.py +0 -0
  223. {rio_tiler-6.4.1 → rio_tiler-6.4.3}/rio_tiler/constants.py +0 -0
  224. {rio_tiler-6.4.1 → rio_tiler-6.4.3}/rio_tiler/errors.py +0 -0
  225. {rio_tiler-6.4.1 → rio_tiler-6.4.3}/rio_tiler/expression.py +0 -0
  226. {rio_tiler-6.4.1 → rio_tiler-6.4.3}/rio_tiler/io/__init__.py +0 -0
  227. {rio_tiler-6.4.1 → rio_tiler-6.4.3}/rio_tiler/io/base.py +0 -0
  228. {rio_tiler-6.4.1 → rio_tiler-6.4.3}/rio_tiler/io/stac.py +0 -0
  229. {rio_tiler-6.4.1 → rio_tiler-6.4.3}/rio_tiler/io/xarray.py +0 -0
  230. {rio_tiler-6.4.1 → rio_tiler-6.4.3}/rio_tiler/logger.py +0 -0
  231. {rio_tiler-6.4.1 → rio_tiler-6.4.3}/rio_tiler/models.py +0 -0
  232. {rio_tiler-6.4.1 → rio_tiler-6.4.3}/rio_tiler/mosaic/__init__.py +0 -0
  233. {rio_tiler-6.4.1 → rio_tiler-6.4.3}/rio_tiler/mosaic/methods/__init__.py +0 -0
  234. {rio_tiler-6.4.1 → rio_tiler-6.4.3}/rio_tiler/mosaic/methods/base.py +0 -0
  235. {rio_tiler-6.4.1 → rio_tiler-6.4.3}/rio_tiler/mosaic/methods/defaults.py +0 -0
  236. {rio_tiler-6.4.1 → rio_tiler-6.4.3}/rio_tiler/mosaic/reader.py +0 -0
  237. {rio_tiler-6.4.1 → rio_tiler-6.4.3}/rio_tiler/profiles.py +0 -0
  238. {rio_tiler-6.4.1 → rio_tiler-6.4.3}/rio_tiler/py.typed +0 -0
  239. {rio_tiler-6.4.1 → rio_tiler-6.4.3}/rio_tiler/reader.py +0 -0
  240. {rio_tiler-6.4.1 → rio_tiler-6.4.3}/rio_tiler/tasks.py +0 -0
  241. {rio_tiler-6.4.1 → rio_tiler-6.4.3}/rio_tiler/types.py +0 -0
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.1
1
+ Metadata-Version: 2.3
2
2
  Name: rio-tiler
3
- Version: 6.4.1
3
+ Version: 6.4.3
4
4
  Summary: User friendly Rasterio plugin to read raster datasets.
5
5
  Project-URL: Homepage, https://cogeotiff.github.io/rio-tiler/
6
6
  Project-URL: Documentation, https://cogeotiff.github.io/rio-tiler/
@@ -1,6 +1,6 @@
1
1
  """rio-tiler."""
2
2
 
3
- __version__ = "6.4.1"
3
+ __version__ = "6.4.3"
4
4
 
5
5
  from . import ( # noqa
6
6
  colormap,
@@ -266,7 +266,7 @@ class Reader(BaseReader):
266
266
  "height": self.dataset.height,
267
267
  "overviews": self.dataset.overviews(1),
268
268
  }
269
- if self.dataset.scales[0] and self.dataset.offsets[0]:
269
+ if self.dataset.scales[0] != 1.0 or self.dataset.offsets[0] != 0.0:
270
270
  meta.update(
271
271
  {"scale": self.dataset.scales[0], "offset": self.dataset.offsets[0]}
272
272
  )
@@ -33,6 +33,27 @@ def _chunks(my_list: Sequence, chuck_size: int) -> Generator[Sequence, None, Non
33
33
  yield my_list[i : i + chuck_size]
34
34
 
35
35
 
36
+ # Ref: https://stackoverflow.com/posts/73905572
37
+ def _weighted_quantiles(
38
+ values: NDArray[numpy.floating],
39
+ weights: NDArray[numpy.floating],
40
+ quantiles: float = 0.5,
41
+ ) -> float:
42
+ i = numpy.argsort(values)
43
+ c = numpy.cumsum(weights[i])
44
+ return float(values[i[numpy.searchsorted(c, numpy.array(quantiles) * c[-1])]])
45
+
46
+
47
+ # Ref: https://stackoverflow.com/questions/2413522
48
+ def _weighted_stdev(
49
+ values: NDArray[numpy.floating],
50
+ weights: NDArray[numpy.floating],
51
+ ) -> float:
52
+ average = numpy.average(values, weights=weights)
53
+ variance = numpy.average((values - average) ** 2, weights=weights)
54
+ return float(math.sqrt(variance))
55
+
56
+
36
57
  def get_array_statistics(
37
58
  data: numpy.ma.MaskedArray,
38
59
  categorical: bool = False,
@@ -85,25 +106,31 @@ def get_array_statistics(
85
106
  percentiles = percentiles or [2, 98]
86
107
 
87
108
  if len(data.shape) < 3:
88
- data = numpy.expand_dims(data, axis=0)
109
+ data = numpy.ma.expand_dims(data, axis=0)
89
110
 
90
111
  output: List[Dict[Any, Any]] = []
91
112
  percentiles_names = [f"percentile_{int(p)}" for p in percentiles]
92
113
 
114
+ if coverage is not None:
115
+ assert coverage.shape == (
116
+ data.shape[1],
117
+ data.shape[2],
118
+ ), f"Invalid shape ({coverage.shape}) for Coverage, expected {(data.shape[1], data.shape[2])}"
119
+
120
+ else:
121
+ coverage = numpy.ones((data.shape[1], data.shape[2]))
122
+
93
123
  # Avoid non masked nan/inf values
94
124
  numpy.ma.fix_invalid(data, copy=False)
95
125
 
96
126
  for b in range(data.shape[0]):
97
- keys, counts = numpy.unique(data[b].compressed(), return_counts=True)
127
+ data_comp = data[b].compressed()
128
+
129
+ keys, counts = numpy.unique(data_comp, return_counts=True)
98
130
 
99
131
  valid_pixels = float(numpy.ma.count(data[b]))
100
132
  masked_pixels = float(numpy.ma.count_masked(data[b]))
101
133
  valid_percent = round((valid_pixels / data[b].size) * 100, 2)
102
- info_px = {
103
- "valid_pixels": valid_pixels,
104
- "masked_pixels": masked_pixels,
105
- "valid_percent": valid_percent,
106
- }
107
134
 
108
135
  if categorical:
109
136
  out_dict = dict(zip(keys.tolist(), counts.tolist()))
@@ -115,28 +142,26 @@ def get_array_statistics(
115
142
  h_keys,
116
143
  ]
117
144
  else:
118
- h_counts, h_keys = numpy.histogram(data[b].compressed(), **kwargs)
145
+ h_counts, h_keys = numpy.histogram(data_comp, **kwargs)
119
146
  histogram = [h_counts.tolist(), h_keys.tolist()]
120
147
 
121
- if valid_pixels:
122
- percentiles_values = numpy.percentile(
123
- data[b].compressed(), percentiles
124
- ).tolist()
125
- else:
126
- percentiles_values = (numpy.nan,) * len(percentiles_names)
127
-
128
- if coverage is not None:
129
- assert coverage.shape == (
130
- data.shape[1],
131
- data.shape[2],
132
- ), f"Invalid shape ({coverage.shape}) for Coverage, expected {(data.shape[1], data.shape[2])}"
133
-
134
- array = data[b] * coverage
148
+ # Data coverage fractions
149
+ data_cov = data[b] * coverage
150
+ # Coverage Array + data mask
151
+ masked_coverage = numpy.ma.MaskedArray(coverage, mask=data_cov.mask)
135
152
 
153
+ if valid_pixels:
154
+ # TODO: when switching to numpy~=2.0
155
+ # percentiles_values = numpy.percentile(
156
+ # data_comp, percentiles, weights=coverage.flatten()
157
+ # ).tolist()
158
+ percentiles_values = [
159
+ _weighted_quantiles(data_comp, masked_coverage.compressed(), pp / 100.0)
160
+ for pp in percentiles
161
+ ]
136
162
  else:
137
- array = data[b]
163
+ percentiles_values = [numpy.nan] * len(percentiles_names)
138
164
 
139
- count = array.count() if coverage is None else coverage.sum()
140
165
  if valid_pixels:
141
166
  majority = float(keys[counts.tolist().index(counts.max())].tolist())
142
167
  minority = float(keys[counts.tolist().index(counts.min())].tolist())
@@ -144,21 +169,40 @@ def get_array_statistics(
144
169
  majority = numpy.nan
145
170
  minority = numpy.nan
146
171
 
172
+ _count = masked_coverage.sum()
173
+ _sum = data_cov.sum()
174
+
147
175
  output.append(
148
176
  {
177
+ # Minimum value, not taking coverage fractions into account.
149
178
  "min": float(data[b].min()),
179
+ # Maximum value, not taking coverage fractions into account.
150
180
  "max": float(data[b].max()),
151
- "mean": float(array.mean()),
152
- "count": float(count),
153
- "sum": float(array.sum()),
154
- "std": float(array.std()),
155
- "median": float(numpy.ma.median(array)),
181
+ # Mean value, weighted by the percent of each cell that is covered.
182
+ "mean": float(_sum / _count),
183
+ # Sum of all non-masked cell coverage fractions.
184
+ "count": float(_count),
185
+ # Sum of values, weighted by their coverage fractions.
186
+ "sum": float(_sum),
187
+ # Population standard deviation of cell values, taking into account coverage fraction.
188
+ "std": _weighted_stdev(data_comp, masked_coverage.compressed()),
189
+ # Median value of cells, weighted by the percent of each cell that is covered.
190
+ "median": _weighted_quantiles(data_comp, masked_coverage.compressed()),
191
+ # The value occupying the greatest number of cells.
156
192
  "majority": majority,
193
+ # The value occupying the least number of cells.
157
194
  "minority": minority,
195
+ # Unique values.
158
196
  "unique": float(counts.size),
197
+ # quantiles
159
198
  **dict(zip(percentiles_names, percentiles_values)),
160
199
  "histogram": histogram,
161
- **info_px,
200
+ # Number of non-masked cells, not taking coverage fractions into account.
201
+ "valid_pixels": valid_pixels,
202
+ # Number of masked cells, not taking coverage fractions into account.
203
+ "masked_pixels": masked_pixels,
204
+ # Percent of valid cells
205
+ "valid_percent": valid_percent,
162
206
  }
163
207
  )
164
208
 
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes