rio-tiler 6.6.1__tar.gz → 6.8.0__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.
- {rio_tiler-6.6.1 → rio_tiler-6.8.0}/PKG-INFO +2 -1
- {rio_tiler-6.6.1 → rio_tiler-6.8.0}/pyproject.toml +15 -0
- {rio_tiler-6.6.1 → rio_tiler-6.8.0}/rio_tiler/__init__.py +1 -1
- {rio_tiler-6.6.1 → rio_tiler-6.8.0}/rio_tiler/errors.py +8 -0
- {rio_tiler-6.6.1 → rio_tiler-6.8.0}/rio_tiler/io/base.py +2 -2
- {rio_tiler-6.6.1 → rio_tiler-6.8.0}/rio_tiler/io/rasterio.py +1 -1
- {rio_tiler-6.6.1 → rio_tiler-6.8.0}/rio_tiler/io/stac.py +34 -5
- {rio_tiler-6.6.1 → rio_tiler-6.8.0}/rio_tiler/io/xarray.py +24 -2
- {rio_tiler-6.6.1 → rio_tiler-6.8.0}/rio_tiler/reader.py +19 -3
- {rio_tiler-6.6.1 → rio_tiler-6.8.0}/.gitignore +0 -0
- {rio_tiler-6.6.1 → rio_tiler-6.8.0}/AUTHORS.txt +0 -0
- {rio_tiler-6.6.1 → rio_tiler-6.8.0}/LICENSE +0 -0
- {rio_tiler-6.6.1 → rio_tiler-6.8.0}/README.md +0 -0
- {rio_tiler-6.6.1 → rio_tiler-6.8.0}/rio_tiler/cmap_data/__init__.py +0 -0
- {rio_tiler-6.6.1 → rio_tiler-6.8.0}/rio_tiler/cmap_data/accent.npy +0 -0
- {rio_tiler-6.6.1 → rio_tiler-6.8.0}/rio_tiler/cmap_data/accent_r.npy +0 -0
- {rio_tiler-6.6.1 → rio_tiler-6.8.0}/rio_tiler/cmap_data/afmhot.npy +0 -0
- {rio_tiler-6.6.1 → rio_tiler-6.8.0}/rio_tiler/cmap_data/afmhot_r.npy +0 -0
- {rio_tiler-6.6.1 → rio_tiler-6.8.0}/rio_tiler/cmap_data/algae.npy +0 -0
- {rio_tiler-6.6.1 → rio_tiler-6.8.0}/rio_tiler/cmap_data/algae_r.npy +0 -0
- {rio_tiler-6.6.1 → rio_tiler-6.8.0}/rio_tiler/cmap_data/amp.npy +0 -0
- {rio_tiler-6.6.1 → rio_tiler-6.8.0}/rio_tiler/cmap_data/amp_r.npy +0 -0
- {rio_tiler-6.6.1 → rio_tiler-6.8.0}/rio_tiler/cmap_data/autumn.npy +0 -0
- {rio_tiler-6.6.1 → rio_tiler-6.8.0}/rio_tiler/cmap_data/autumn_r.npy +0 -0
- {rio_tiler-6.6.1 → rio_tiler-6.8.0}/rio_tiler/cmap_data/balance.npy +0 -0
- {rio_tiler-6.6.1 → rio_tiler-6.8.0}/rio_tiler/cmap_data/balance_r.npy +0 -0
- {rio_tiler-6.6.1 → rio_tiler-6.8.0}/rio_tiler/cmap_data/binary.npy +0 -0
- {rio_tiler-6.6.1 → rio_tiler-6.8.0}/rio_tiler/cmap_data/binary_r.npy +0 -0
- {rio_tiler-6.6.1 → rio_tiler-6.8.0}/rio_tiler/cmap_data/blues.npy +0 -0
- {rio_tiler-6.6.1 → rio_tiler-6.8.0}/rio_tiler/cmap_data/blues_r.npy +0 -0
- {rio_tiler-6.6.1 → rio_tiler-6.8.0}/rio_tiler/cmap_data/bone.npy +0 -0
- {rio_tiler-6.6.1 → rio_tiler-6.8.0}/rio_tiler/cmap_data/bone_r.npy +0 -0
- {rio_tiler-6.6.1 → rio_tiler-6.8.0}/rio_tiler/cmap_data/brbg.npy +0 -0
- {rio_tiler-6.6.1 → rio_tiler-6.8.0}/rio_tiler/cmap_data/brbg_r.npy +0 -0
- {rio_tiler-6.6.1 → rio_tiler-6.8.0}/rio_tiler/cmap_data/brg.npy +0 -0
- {rio_tiler-6.6.1 → rio_tiler-6.8.0}/rio_tiler/cmap_data/brg_r.npy +0 -0
- {rio_tiler-6.6.1 → rio_tiler-6.8.0}/rio_tiler/cmap_data/bugn.npy +0 -0
- {rio_tiler-6.6.1 → rio_tiler-6.8.0}/rio_tiler/cmap_data/bugn_r.npy +0 -0
- {rio_tiler-6.6.1 → rio_tiler-6.8.0}/rio_tiler/cmap_data/bupu.npy +0 -0
- {rio_tiler-6.6.1 → rio_tiler-6.8.0}/rio_tiler/cmap_data/bupu_r.npy +0 -0
- {rio_tiler-6.6.1 → rio_tiler-6.8.0}/rio_tiler/cmap_data/bwr.npy +0 -0
- {rio_tiler-6.6.1 → rio_tiler-6.8.0}/rio_tiler/cmap_data/bwr_r.npy +0 -0
- {rio_tiler-6.6.1 → rio_tiler-6.8.0}/rio_tiler/cmap_data/cfastie.npy +0 -0
- {rio_tiler-6.6.1 → rio_tiler-6.8.0}/rio_tiler/cmap_data/cividis.npy +0 -0
- {rio_tiler-6.6.1 → rio_tiler-6.8.0}/rio_tiler/cmap_data/cividis_r.npy +0 -0
- {rio_tiler-6.6.1 → rio_tiler-6.8.0}/rio_tiler/cmap_data/cmrmap.npy +0 -0
- {rio_tiler-6.6.1 → rio_tiler-6.8.0}/rio_tiler/cmap_data/cmrmap_r.npy +0 -0
- {rio_tiler-6.6.1 → rio_tiler-6.8.0}/rio_tiler/cmap_data/cool.npy +0 -0
- {rio_tiler-6.6.1 → rio_tiler-6.8.0}/rio_tiler/cmap_data/cool_r.npy +0 -0
- {rio_tiler-6.6.1 → rio_tiler-6.8.0}/rio_tiler/cmap_data/coolwarm.npy +0 -0
- {rio_tiler-6.6.1 → rio_tiler-6.8.0}/rio_tiler/cmap_data/coolwarm_r.npy +0 -0
- {rio_tiler-6.6.1 → rio_tiler-6.8.0}/rio_tiler/cmap_data/copper.npy +0 -0
- {rio_tiler-6.6.1 → rio_tiler-6.8.0}/rio_tiler/cmap_data/copper_r.npy +0 -0
- {rio_tiler-6.6.1 → rio_tiler-6.8.0}/rio_tiler/cmap_data/cubehelix.npy +0 -0
- {rio_tiler-6.6.1 → rio_tiler-6.8.0}/rio_tiler/cmap_data/cubehelix_r.npy +0 -0
- {rio_tiler-6.6.1 → rio_tiler-6.8.0}/rio_tiler/cmap_data/curl.npy +0 -0
- {rio_tiler-6.6.1 → rio_tiler-6.8.0}/rio_tiler/cmap_data/curl_r.npy +0 -0
- {rio_tiler-6.6.1 → rio_tiler-6.8.0}/rio_tiler/cmap_data/dark2.npy +0 -0
- {rio_tiler-6.6.1 → rio_tiler-6.8.0}/rio_tiler/cmap_data/dark2_r.npy +0 -0
- {rio_tiler-6.6.1 → rio_tiler-6.8.0}/rio_tiler/cmap_data/deep.npy +0 -0
- {rio_tiler-6.6.1 → rio_tiler-6.8.0}/rio_tiler/cmap_data/deep_r.npy +0 -0
- {rio_tiler-6.6.1 → rio_tiler-6.8.0}/rio_tiler/cmap_data/delta.npy +0 -0
- {rio_tiler-6.6.1 → rio_tiler-6.8.0}/rio_tiler/cmap_data/delta_r.npy +0 -0
- {rio_tiler-6.6.1 → rio_tiler-6.8.0}/rio_tiler/cmap_data/dense.npy +0 -0
- {rio_tiler-6.6.1 → rio_tiler-6.8.0}/rio_tiler/cmap_data/dense_r.npy +0 -0
- {rio_tiler-6.6.1 → rio_tiler-6.8.0}/rio_tiler/cmap_data/diff.npy +0 -0
- {rio_tiler-6.6.1 → rio_tiler-6.8.0}/rio_tiler/cmap_data/diff_r.npy +0 -0
- {rio_tiler-6.6.1 → rio_tiler-6.8.0}/rio_tiler/cmap_data/flag.npy +0 -0
- {rio_tiler-6.6.1 → rio_tiler-6.8.0}/rio_tiler/cmap_data/flag_r.npy +0 -0
- {rio_tiler-6.6.1 → rio_tiler-6.8.0}/rio_tiler/cmap_data/gist_earth.npy +0 -0
- {rio_tiler-6.6.1 → rio_tiler-6.8.0}/rio_tiler/cmap_data/gist_earth_r.npy +0 -0
- {rio_tiler-6.6.1 → rio_tiler-6.8.0}/rio_tiler/cmap_data/gist_gray.npy +0 -0
- {rio_tiler-6.6.1 → rio_tiler-6.8.0}/rio_tiler/cmap_data/gist_gray_r.npy +0 -0
- {rio_tiler-6.6.1 → rio_tiler-6.8.0}/rio_tiler/cmap_data/gist_heat.npy +0 -0
- {rio_tiler-6.6.1 → rio_tiler-6.8.0}/rio_tiler/cmap_data/gist_heat_r.npy +0 -0
- {rio_tiler-6.6.1 → rio_tiler-6.8.0}/rio_tiler/cmap_data/gist_ncar.npy +0 -0
- {rio_tiler-6.6.1 → rio_tiler-6.8.0}/rio_tiler/cmap_data/gist_ncar_r.npy +0 -0
- {rio_tiler-6.6.1 → rio_tiler-6.8.0}/rio_tiler/cmap_data/gist_rainbow.npy +0 -0
- {rio_tiler-6.6.1 → rio_tiler-6.8.0}/rio_tiler/cmap_data/gist_rainbow_r.npy +0 -0
- {rio_tiler-6.6.1 → rio_tiler-6.8.0}/rio_tiler/cmap_data/gist_stern.npy +0 -0
- {rio_tiler-6.6.1 → rio_tiler-6.8.0}/rio_tiler/cmap_data/gist_stern_r.npy +0 -0
- {rio_tiler-6.6.1 → rio_tiler-6.8.0}/rio_tiler/cmap_data/gist_yarg.npy +0 -0
- {rio_tiler-6.6.1 → rio_tiler-6.8.0}/rio_tiler/cmap_data/gist_yarg_r.npy +0 -0
- {rio_tiler-6.6.1 → rio_tiler-6.8.0}/rio_tiler/cmap_data/gnbu.npy +0 -0
- {rio_tiler-6.6.1 → rio_tiler-6.8.0}/rio_tiler/cmap_data/gnbu_r.npy +0 -0
- {rio_tiler-6.6.1 → rio_tiler-6.8.0}/rio_tiler/cmap_data/gnuplot.npy +0 -0
- {rio_tiler-6.6.1 → rio_tiler-6.8.0}/rio_tiler/cmap_data/gnuplot2.npy +0 -0
- {rio_tiler-6.6.1 → rio_tiler-6.8.0}/rio_tiler/cmap_data/gnuplot2_r.npy +0 -0
- {rio_tiler-6.6.1 → rio_tiler-6.8.0}/rio_tiler/cmap_data/gnuplot_r.npy +0 -0
- {rio_tiler-6.6.1 → rio_tiler-6.8.0}/rio_tiler/cmap_data/gray.npy +0 -0
- {rio_tiler-6.6.1 → rio_tiler-6.8.0}/rio_tiler/cmap_data/gray_r.npy +0 -0
- {rio_tiler-6.6.1 → rio_tiler-6.8.0}/rio_tiler/cmap_data/greens.npy +0 -0
- {rio_tiler-6.6.1 → rio_tiler-6.8.0}/rio_tiler/cmap_data/greens_r.npy +0 -0
- {rio_tiler-6.6.1 → rio_tiler-6.8.0}/rio_tiler/cmap_data/greys.npy +0 -0
- {rio_tiler-6.6.1 → rio_tiler-6.8.0}/rio_tiler/cmap_data/greys_r.npy +0 -0
- {rio_tiler-6.6.1 → rio_tiler-6.8.0}/rio_tiler/cmap_data/haline.npy +0 -0
- {rio_tiler-6.6.1 → rio_tiler-6.8.0}/rio_tiler/cmap_data/haline_r.npy +0 -0
- {rio_tiler-6.6.1 → rio_tiler-6.8.0}/rio_tiler/cmap_data/hot.npy +0 -0
- {rio_tiler-6.6.1 → rio_tiler-6.8.0}/rio_tiler/cmap_data/hot_r.npy +0 -0
- {rio_tiler-6.6.1 → rio_tiler-6.8.0}/rio_tiler/cmap_data/hsv.npy +0 -0
- {rio_tiler-6.6.1 → rio_tiler-6.8.0}/rio_tiler/cmap_data/hsv_r.npy +0 -0
- {rio_tiler-6.6.1 → rio_tiler-6.8.0}/rio_tiler/cmap_data/ice.npy +0 -0
- {rio_tiler-6.6.1 → rio_tiler-6.8.0}/rio_tiler/cmap_data/ice_r.npy +0 -0
- {rio_tiler-6.6.1 → rio_tiler-6.8.0}/rio_tiler/cmap_data/inferno.npy +0 -0
- {rio_tiler-6.6.1 → rio_tiler-6.8.0}/rio_tiler/cmap_data/inferno_r.npy +0 -0
- {rio_tiler-6.6.1 → rio_tiler-6.8.0}/rio_tiler/cmap_data/jet.npy +0 -0
- {rio_tiler-6.6.1 → rio_tiler-6.8.0}/rio_tiler/cmap_data/jet_r.npy +0 -0
- {rio_tiler-6.6.1 → rio_tiler-6.8.0}/rio_tiler/cmap_data/magma.npy +0 -0
- {rio_tiler-6.6.1 → rio_tiler-6.8.0}/rio_tiler/cmap_data/magma_r.npy +0 -0
- {rio_tiler-6.6.1 → rio_tiler-6.8.0}/rio_tiler/cmap_data/matter.npy +0 -0
- {rio_tiler-6.6.1 → rio_tiler-6.8.0}/rio_tiler/cmap_data/matter_r.npy +0 -0
- {rio_tiler-6.6.1 → rio_tiler-6.8.0}/rio_tiler/cmap_data/nipy_spectral.npy +0 -0
- {rio_tiler-6.6.1 → rio_tiler-6.8.0}/rio_tiler/cmap_data/nipy_spectral_r.npy +0 -0
- {rio_tiler-6.6.1 → rio_tiler-6.8.0}/rio_tiler/cmap_data/ocean.npy +0 -0
- {rio_tiler-6.6.1 → rio_tiler-6.8.0}/rio_tiler/cmap_data/ocean_r.npy +0 -0
- {rio_tiler-6.6.1 → rio_tiler-6.8.0}/rio_tiler/cmap_data/oranges.npy +0 -0
- {rio_tiler-6.6.1 → rio_tiler-6.8.0}/rio_tiler/cmap_data/oranges_r.npy +0 -0
- {rio_tiler-6.6.1 → rio_tiler-6.8.0}/rio_tiler/cmap_data/orrd.npy +0 -0
- {rio_tiler-6.6.1 → rio_tiler-6.8.0}/rio_tiler/cmap_data/orrd_r.npy +0 -0
- {rio_tiler-6.6.1 → rio_tiler-6.8.0}/rio_tiler/cmap_data/oxy.npy +0 -0
- {rio_tiler-6.6.1 → rio_tiler-6.8.0}/rio_tiler/cmap_data/oxy_r.npy +0 -0
- {rio_tiler-6.6.1 → rio_tiler-6.8.0}/rio_tiler/cmap_data/paired.npy +0 -0
- {rio_tiler-6.6.1 → rio_tiler-6.8.0}/rio_tiler/cmap_data/paired_r.npy +0 -0
- {rio_tiler-6.6.1 → rio_tiler-6.8.0}/rio_tiler/cmap_data/pastel1.npy +0 -0
- {rio_tiler-6.6.1 → rio_tiler-6.8.0}/rio_tiler/cmap_data/pastel1_r.npy +0 -0
- {rio_tiler-6.6.1 → rio_tiler-6.8.0}/rio_tiler/cmap_data/pastel2.npy +0 -0
- {rio_tiler-6.6.1 → rio_tiler-6.8.0}/rio_tiler/cmap_data/pastel2_r.npy +0 -0
- {rio_tiler-6.6.1 → rio_tiler-6.8.0}/rio_tiler/cmap_data/phase.npy +0 -0
- {rio_tiler-6.6.1 → rio_tiler-6.8.0}/rio_tiler/cmap_data/phase_r.npy +0 -0
- {rio_tiler-6.6.1 → rio_tiler-6.8.0}/rio_tiler/cmap_data/pink.npy +0 -0
- {rio_tiler-6.6.1 → rio_tiler-6.8.0}/rio_tiler/cmap_data/pink_r.npy +0 -0
- {rio_tiler-6.6.1 → rio_tiler-6.8.0}/rio_tiler/cmap_data/piyg.npy +0 -0
- {rio_tiler-6.6.1 → rio_tiler-6.8.0}/rio_tiler/cmap_data/piyg_r.npy +0 -0
- {rio_tiler-6.6.1 → rio_tiler-6.8.0}/rio_tiler/cmap_data/plasma.npy +0 -0
- {rio_tiler-6.6.1 → rio_tiler-6.8.0}/rio_tiler/cmap_data/plasma_r.npy +0 -0
- {rio_tiler-6.6.1 → rio_tiler-6.8.0}/rio_tiler/cmap_data/prgn.npy +0 -0
- {rio_tiler-6.6.1 → rio_tiler-6.8.0}/rio_tiler/cmap_data/prgn_r.npy +0 -0
- {rio_tiler-6.6.1 → rio_tiler-6.8.0}/rio_tiler/cmap_data/prism.npy +0 -0
- {rio_tiler-6.6.1 → rio_tiler-6.8.0}/rio_tiler/cmap_data/prism_r.npy +0 -0
- {rio_tiler-6.6.1 → rio_tiler-6.8.0}/rio_tiler/cmap_data/pubu.npy +0 -0
- {rio_tiler-6.6.1 → rio_tiler-6.8.0}/rio_tiler/cmap_data/pubu_r.npy +0 -0
- {rio_tiler-6.6.1 → rio_tiler-6.8.0}/rio_tiler/cmap_data/pubugn.npy +0 -0
- {rio_tiler-6.6.1 → rio_tiler-6.8.0}/rio_tiler/cmap_data/pubugn_r.npy +0 -0
- {rio_tiler-6.6.1 → rio_tiler-6.8.0}/rio_tiler/cmap_data/puor.npy +0 -0
- {rio_tiler-6.6.1 → rio_tiler-6.8.0}/rio_tiler/cmap_data/puor_r.npy +0 -0
- {rio_tiler-6.6.1 → rio_tiler-6.8.0}/rio_tiler/cmap_data/purd.npy +0 -0
- {rio_tiler-6.6.1 → rio_tiler-6.8.0}/rio_tiler/cmap_data/purd_r.npy +0 -0
- {rio_tiler-6.6.1 → rio_tiler-6.8.0}/rio_tiler/cmap_data/purples.npy +0 -0
- {rio_tiler-6.6.1 → rio_tiler-6.8.0}/rio_tiler/cmap_data/purples_r.npy +0 -0
- {rio_tiler-6.6.1 → rio_tiler-6.8.0}/rio_tiler/cmap_data/rain.npy +0 -0
- {rio_tiler-6.6.1 → rio_tiler-6.8.0}/rio_tiler/cmap_data/rain_r.npy +0 -0
- {rio_tiler-6.6.1 → rio_tiler-6.8.0}/rio_tiler/cmap_data/rainbow.npy +0 -0
- {rio_tiler-6.6.1 → rio_tiler-6.8.0}/rio_tiler/cmap_data/rainbow_r.npy +0 -0
- {rio_tiler-6.6.1 → rio_tiler-6.8.0}/rio_tiler/cmap_data/rdbu.npy +0 -0
- {rio_tiler-6.6.1 → rio_tiler-6.8.0}/rio_tiler/cmap_data/rdbu_r.npy +0 -0
- {rio_tiler-6.6.1 → rio_tiler-6.8.0}/rio_tiler/cmap_data/rdgy.npy +0 -0
- {rio_tiler-6.6.1 → rio_tiler-6.8.0}/rio_tiler/cmap_data/rdgy_r.npy +0 -0
- {rio_tiler-6.6.1 → rio_tiler-6.8.0}/rio_tiler/cmap_data/rdpu.npy +0 -0
- {rio_tiler-6.6.1 → rio_tiler-6.8.0}/rio_tiler/cmap_data/rdpu_r.npy +0 -0
- {rio_tiler-6.6.1 → rio_tiler-6.8.0}/rio_tiler/cmap_data/rdylbu.npy +0 -0
- {rio_tiler-6.6.1 → rio_tiler-6.8.0}/rio_tiler/cmap_data/rdylbu_r.npy +0 -0
- {rio_tiler-6.6.1 → rio_tiler-6.8.0}/rio_tiler/cmap_data/rdylgn.npy +0 -0
- {rio_tiler-6.6.1 → rio_tiler-6.8.0}/rio_tiler/cmap_data/rdylgn_r.npy +0 -0
- {rio_tiler-6.6.1 → rio_tiler-6.8.0}/rio_tiler/cmap_data/reds.npy +0 -0
- {rio_tiler-6.6.1 → rio_tiler-6.8.0}/rio_tiler/cmap_data/reds_r.npy +0 -0
- {rio_tiler-6.6.1 → rio_tiler-6.8.0}/rio_tiler/cmap_data/rplumbo.npy +0 -0
- {rio_tiler-6.6.1 → rio_tiler-6.8.0}/rio_tiler/cmap_data/schwarzwald.npy +0 -0
- {rio_tiler-6.6.1 → rio_tiler-6.8.0}/rio_tiler/cmap_data/seismic.npy +0 -0
- {rio_tiler-6.6.1 → rio_tiler-6.8.0}/rio_tiler/cmap_data/seismic_r.npy +0 -0
- {rio_tiler-6.6.1 → rio_tiler-6.8.0}/rio_tiler/cmap_data/set1.npy +0 -0
- {rio_tiler-6.6.1 → rio_tiler-6.8.0}/rio_tiler/cmap_data/set1_r.npy +0 -0
- {rio_tiler-6.6.1 → rio_tiler-6.8.0}/rio_tiler/cmap_data/set2.npy +0 -0
- {rio_tiler-6.6.1 → rio_tiler-6.8.0}/rio_tiler/cmap_data/set2_r.npy +0 -0
- {rio_tiler-6.6.1 → rio_tiler-6.8.0}/rio_tiler/cmap_data/set3.npy +0 -0
- {rio_tiler-6.6.1 → rio_tiler-6.8.0}/rio_tiler/cmap_data/set3_r.npy +0 -0
- {rio_tiler-6.6.1 → rio_tiler-6.8.0}/rio_tiler/cmap_data/solar.npy +0 -0
- {rio_tiler-6.6.1 → rio_tiler-6.8.0}/rio_tiler/cmap_data/solar_r.npy +0 -0
- {rio_tiler-6.6.1 → rio_tiler-6.8.0}/rio_tiler/cmap_data/spectral.npy +0 -0
- {rio_tiler-6.6.1 → rio_tiler-6.8.0}/rio_tiler/cmap_data/spectral_r.npy +0 -0
- {rio_tiler-6.6.1 → rio_tiler-6.8.0}/rio_tiler/cmap_data/speed.npy +0 -0
- {rio_tiler-6.6.1 → rio_tiler-6.8.0}/rio_tiler/cmap_data/speed_r.npy +0 -0
- {rio_tiler-6.6.1 → rio_tiler-6.8.0}/rio_tiler/cmap_data/spring.npy +0 -0
- {rio_tiler-6.6.1 → rio_tiler-6.8.0}/rio_tiler/cmap_data/spring_r.npy +0 -0
- {rio_tiler-6.6.1 → rio_tiler-6.8.0}/rio_tiler/cmap_data/summer.npy +0 -0
- {rio_tiler-6.6.1 → rio_tiler-6.8.0}/rio_tiler/cmap_data/summer_r.npy +0 -0
- {rio_tiler-6.6.1 → rio_tiler-6.8.0}/rio_tiler/cmap_data/tab10.npy +0 -0
- {rio_tiler-6.6.1 → rio_tiler-6.8.0}/rio_tiler/cmap_data/tab10_r.npy +0 -0
- {rio_tiler-6.6.1 → rio_tiler-6.8.0}/rio_tiler/cmap_data/tab20.npy +0 -0
- {rio_tiler-6.6.1 → rio_tiler-6.8.0}/rio_tiler/cmap_data/tab20_r.npy +0 -0
- {rio_tiler-6.6.1 → rio_tiler-6.8.0}/rio_tiler/cmap_data/tab20b.npy +0 -0
- {rio_tiler-6.6.1 → rio_tiler-6.8.0}/rio_tiler/cmap_data/tab20b_r.npy +0 -0
- {rio_tiler-6.6.1 → rio_tiler-6.8.0}/rio_tiler/cmap_data/tab20c.npy +0 -0
- {rio_tiler-6.6.1 → rio_tiler-6.8.0}/rio_tiler/cmap_data/tab20c_r.npy +0 -0
- {rio_tiler-6.6.1 → rio_tiler-6.8.0}/rio_tiler/cmap_data/tarn.npy +0 -0
- {rio_tiler-6.6.1 → rio_tiler-6.8.0}/rio_tiler/cmap_data/tarn_r.npy +0 -0
- {rio_tiler-6.6.1 → rio_tiler-6.8.0}/rio_tiler/cmap_data/tempo.npy +0 -0
- {rio_tiler-6.6.1 → rio_tiler-6.8.0}/rio_tiler/cmap_data/tempo_r.npy +0 -0
- {rio_tiler-6.6.1 → rio_tiler-6.8.0}/rio_tiler/cmap_data/terrain.npy +0 -0
- {rio_tiler-6.6.1 → rio_tiler-6.8.0}/rio_tiler/cmap_data/terrain_r.npy +0 -0
- {rio_tiler-6.6.1 → rio_tiler-6.8.0}/rio_tiler/cmap_data/thermal.npy +0 -0
- {rio_tiler-6.6.1 → rio_tiler-6.8.0}/rio_tiler/cmap_data/thermal_r.npy +0 -0
- {rio_tiler-6.6.1 → rio_tiler-6.8.0}/rio_tiler/cmap_data/topo.npy +0 -0
- {rio_tiler-6.6.1 → rio_tiler-6.8.0}/rio_tiler/cmap_data/topo_r.npy +0 -0
- {rio_tiler-6.6.1 → rio_tiler-6.8.0}/rio_tiler/cmap_data/turbid.npy +0 -0
- {rio_tiler-6.6.1 → rio_tiler-6.8.0}/rio_tiler/cmap_data/turbid_r.npy +0 -0
- {rio_tiler-6.6.1 → rio_tiler-6.8.0}/rio_tiler/cmap_data/turbo.npy +0 -0
- {rio_tiler-6.6.1 → rio_tiler-6.8.0}/rio_tiler/cmap_data/turbo_r.npy +0 -0
- {rio_tiler-6.6.1 → rio_tiler-6.8.0}/rio_tiler/cmap_data/twilight.npy +0 -0
- {rio_tiler-6.6.1 → rio_tiler-6.8.0}/rio_tiler/cmap_data/twilight_r.npy +0 -0
- {rio_tiler-6.6.1 → rio_tiler-6.8.0}/rio_tiler/cmap_data/twilight_shifted.npy +0 -0
- {rio_tiler-6.6.1 → rio_tiler-6.8.0}/rio_tiler/cmap_data/twilight_shifted_r.npy +0 -0
- {rio_tiler-6.6.1 → rio_tiler-6.8.0}/rio_tiler/cmap_data/viridis.npy +0 -0
- {rio_tiler-6.6.1 → rio_tiler-6.8.0}/rio_tiler/cmap_data/viridis_r.npy +0 -0
- {rio_tiler-6.6.1 → rio_tiler-6.8.0}/rio_tiler/cmap_data/winter.npy +0 -0
- {rio_tiler-6.6.1 → rio_tiler-6.8.0}/rio_tiler/cmap_data/winter_r.npy +0 -0
- {rio_tiler-6.6.1 → rio_tiler-6.8.0}/rio_tiler/cmap_data/wistia.npy +0 -0
- {rio_tiler-6.6.1 → rio_tiler-6.8.0}/rio_tiler/cmap_data/wistia_r.npy +0 -0
- {rio_tiler-6.6.1 → rio_tiler-6.8.0}/rio_tiler/cmap_data/ylgn.npy +0 -0
- {rio_tiler-6.6.1 → rio_tiler-6.8.0}/rio_tiler/cmap_data/ylgn_r.npy +0 -0
- {rio_tiler-6.6.1 → rio_tiler-6.8.0}/rio_tiler/cmap_data/ylgnbu.npy +0 -0
- {rio_tiler-6.6.1 → rio_tiler-6.8.0}/rio_tiler/cmap_data/ylgnbu_r.npy +0 -0
- {rio_tiler-6.6.1 → rio_tiler-6.8.0}/rio_tiler/cmap_data/ylorbr.npy +0 -0
- {rio_tiler-6.6.1 → rio_tiler-6.8.0}/rio_tiler/cmap_data/ylorbr_r.npy +0 -0
- {rio_tiler-6.6.1 → rio_tiler-6.8.0}/rio_tiler/cmap_data/ylorrd.npy +0 -0
- {rio_tiler-6.6.1 → rio_tiler-6.8.0}/rio_tiler/cmap_data/ylorrd_r.npy +0 -0
- {rio_tiler-6.6.1 → rio_tiler-6.8.0}/rio_tiler/colormap.py +0 -0
- {rio_tiler-6.6.1 → rio_tiler-6.8.0}/rio_tiler/constants.py +0 -0
- {rio_tiler-6.6.1 → rio_tiler-6.8.0}/rio_tiler/expression.py +0 -0
- {rio_tiler-6.6.1 → rio_tiler-6.8.0}/rio_tiler/io/__init__.py +0 -0
- {rio_tiler-6.6.1 → rio_tiler-6.8.0}/rio_tiler/logger.py +0 -0
- {rio_tiler-6.6.1 → rio_tiler-6.8.0}/rio_tiler/models.py +0 -0
- {rio_tiler-6.6.1 → rio_tiler-6.8.0}/rio_tiler/mosaic/__init__.py +0 -0
- {rio_tiler-6.6.1 → rio_tiler-6.8.0}/rio_tiler/mosaic/methods/__init__.py +0 -0
- {rio_tiler-6.6.1 → rio_tiler-6.8.0}/rio_tiler/mosaic/methods/base.py +0 -0
- {rio_tiler-6.6.1 → rio_tiler-6.8.0}/rio_tiler/mosaic/methods/defaults.py +0 -0
- {rio_tiler-6.6.1 → rio_tiler-6.8.0}/rio_tiler/mosaic/reader.py +0 -0
- {rio_tiler-6.6.1 → rio_tiler-6.8.0}/rio_tiler/profiles.py +0 -0
- {rio_tiler-6.6.1 → rio_tiler-6.8.0}/rio_tiler/py.typed +0 -0
- {rio_tiler-6.6.1 → rio_tiler-6.8.0}/rio_tiler/tasks.py +0 -0
- {rio_tiler-6.6.1 → rio_tiler-6.8.0}/rio_tiler/types.py +0 -0
- {rio_tiler-6.6.1 → rio_tiler-6.8.0}/rio_tiler/utils.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.3
|
|
2
2
|
Name: rio-tiler
|
|
3
|
-
Version: 6.
|
|
3
|
+
Version: 6.8.0
|
|
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/
|
|
@@ -65,6 +65,7 @@ Provides-Extra: benchmark
|
|
|
65
65
|
Requires-Dist: pytest; extra == 'benchmark'
|
|
66
66
|
Requires-Dist: pytest-benchmark; extra == 'benchmark'
|
|
67
67
|
Provides-Extra: dev
|
|
68
|
+
Requires-Dist: bump-my-version; extra == 'dev'
|
|
68
69
|
Requires-Dist: pre-commit; extra == 'dev'
|
|
69
70
|
Provides-Extra: docs
|
|
70
71
|
Requires-Dist: mkdocs; extra == 'docs'
|
|
@@ -58,6 +58,7 @@ tilebench = [
|
|
|
58
58
|
|
|
59
59
|
dev = [
|
|
60
60
|
"pre-commit",
|
|
61
|
+
"bump-my-version",
|
|
61
62
|
]
|
|
62
63
|
s3 = [
|
|
63
64
|
"boto3",
|
|
@@ -150,3 +151,17 @@ ignore = [
|
|
|
150
151
|
|
|
151
152
|
[tool.ruff.lint.mccabe]
|
|
152
153
|
max-complexity = 14
|
|
154
|
+
|
|
155
|
+
[tool.bumpversion]
|
|
156
|
+
current_version = "6.8.0"
|
|
157
|
+
search = "{current_version}"
|
|
158
|
+
replace = "{new_version}"
|
|
159
|
+
regex = false
|
|
160
|
+
tag = true
|
|
161
|
+
commit = true
|
|
162
|
+
tag_name = "{new_version}"
|
|
163
|
+
|
|
164
|
+
[[tool.bumpversion.files]]
|
|
165
|
+
filename = "rio_tiler/__init__.py"
|
|
166
|
+
search = '__version__ = "{current_version}"'
|
|
167
|
+
replace = '__version__ = "{new_version}"'
|
|
@@ -83,3 +83,11 @@ class AssetAsBandError(RioTilerError):
|
|
|
83
83
|
|
|
84
84
|
class InvalidPointDataError(RioTilerError):
|
|
85
85
|
"""Invalid PointData."""
|
|
86
|
+
|
|
87
|
+
|
|
88
|
+
class MissingCRS(RioTilerError):
|
|
89
|
+
"""Dataset doesn't have CRS information."""
|
|
90
|
+
|
|
91
|
+
|
|
92
|
+
class InvalidGeographicBounds(RioTilerError):
|
|
93
|
+
"""Invalid Geographic bounds."""
|
|
@@ -480,7 +480,7 @@ class MultiBaseReader(SpatialMixin, metaclass=abc.ABCMeta):
|
|
|
480
480
|
"""
|
|
481
481
|
if not self.tile_exists(tile_x, tile_y, tile_z):
|
|
482
482
|
raise TileOutsideBounds(
|
|
483
|
-
f"Tile
|
|
483
|
+
f"Tile(x={tile_x}, y={tile_y}, z={tile_z}) is outside bounds"
|
|
484
484
|
)
|
|
485
485
|
|
|
486
486
|
if isinstance(assets, str):
|
|
@@ -1036,7 +1036,7 @@ class MultiBandReader(SpatialMixin, metaclass=abc.ABCMeta):
|
|
|
1036
1036
|
"""
|
|
1037
1037
|
if not self.tile_exists(tile_x, tile_y, tile_z):
|
|
1038
1038
|
raise TileOutsideBounds(
|
|
1039
|
-
f"Tile
|
|
1039
|
+
f"Tile(x={tile_x}, y={tile_y}, z={tile_z}) is outside bounds"
|
|
1040
1040
|
)
|
|
1041
1041
|
|
|
1042
1042
|
if isinstance(bands, str):
|
|
@@ -343,7 +343,7 @@ class Reader(BaseReader):
|
|
|
343
343
|
"""
|
|
344
344
|
if not self.tile_exists(tile_x, tile_y, tile_z):
|
|
345
345
|
raise TileOutsideBounds(
|
|
346
|
-
f"Tile
|
|
346
|
+
f"Tile(x={tile_x}, y={tile_y}, z={tile_z}) is outside bounds"
|
|
347
347
|
)
|
|
348
348
|
|
|
349
349
|
tile_bounds = self.tms.xy_bounds(Tile(x=tile_x, y=tile_y, z=tile_z))
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
import json
|
|
4
4
|
import os
|
|
5
5
|
import warnings
|
|
6
|
-
from typing import Any, Dict, Iterator, Optional, Set, Type, Union
|
|
6
|
+
from typing import Any, Dict, Iterator, Optional, Set, Tuple, Type, Union
|
|
7
7
|
from urllib.parse import urlparse
|
|
8
8
|
|
|
9
9
|
import attr
|
|
@@ -41,6 +41,8 @@ DEFAULT_VALID_TYPE = {
|
|
|
41
41
|
"application/x-hdf",
|
|
42
42
|
}
|
|
43
43
|
|
|
44
|
+
STAC_ALTERNATE_KEY = os.environ.get("RIO_TILER_STAC_ALTERNATE_KEY", None)
|
|
45
|
+
|
|
44
46
|
|
|
45
47
|
def aws_get_object(
|
|
46
48
|
bucket: str,
|
|
@@ -275,16 +277,34 @@ class STACReader(MultiBaseReader):
|
|
|
275
277
|
def _maxzoom(self):
|
|
276
278
|
return self.tms.maxzoom
|
|
277
279
|
|
|
280
|
+
def _parse_vrt_asset(self, asset: str) -> Tuple[str, Optional[str]]:
|
|
281
|
+
if asset.startswith("vrt://") and asset not in self.assets:
|
|
282
|
+
parsed = urlparse(asset)
|
|
283
|
+
if not parsed.netloc:
|
|
284
|
+
raise InvalidAssetName(
|
|
285
|
+
f"'{asset}' is not valid, couldn't find valid asset"
|
|
286
|
+
)
|
|
287
|
+
|
|
288
|
+
if parsed.netloc not in self.assets:
|
|
289
|
+
raise InvalidAssetName(
|
|
290
|
+
f"'{parsed.netloc}' is not valid, should be one of {self.assets}"
|
|
291
|
+
)
|
|
292
|
+
|
|
293
|
+
return parsed.netloc, parsed.query
|
|
294
|
+
|
|
295
|
+
return asset, None
|
|
296
|
+
|
|
278
297
|
def _get_asset_info(self, asset: str) -> AssetInfo:
|
|
279
|
-
"""Validate asset names and return asset's
|
|
298
|
+
"""Validate asset names and return asset's info.
|
|
280
299
|
|
|
281
300
|
Args:
|
|
282
301
|
asset (str): STAC asset name.
|
|
283
302
|
|
|
284
303
|
Returns:
|
|
285
|
-
|
|
304
|
+
AssetInfo: STAC asset info.
|
|
286
305
|
|
|
287
306
|
"""
|
|
307
|
+
asset, vrt_options = self._parse_vrt_asset(asset)
|
|
288
308
|
if asset not in self.assets:
|
|
289
309
|
raise InvalidAssetName(
|
|
290
310
|
f"'{asset}' is not valid, should be one of {self.assets}"
|
|
@@ -295,13 +315,19 @@ class STACReader(MultiBaseReader):
|
|
|
295
315
|
|
|
296
316
|
info = AssetInfo(
|
|
297
317
|
url=asset_info.get_absolute_href() or asset_info.href,
|
|
298
|
-
metadata=extras,
|
|
318
|
+
metadata=extras if not vrt_options else None,
|
|
299
319
|
)
|
|
300
320
|
|
|
321
|
+
if STAC_ALTERNATE_KEY and extras.get("alternate"):
|
|
322
|
+
if alternate := extras["alternate"].get(STAC_ALTERNATE_KEY):
|
|
323
|
+
info["url"] = alternate["href"]
|
|
324
|
+
|
|
325
|
+
# https://github.com/stac-extensions/file
|
|
301
326
|
if head := extras.get("file:header_size"):
|
|
302
327
|
info["env"] = {"GDAL_INGESTED_BYTES_AT_OPEN": head}
|
|
303
328
|
|
|
304
|
-
|
|
329
|
+
# https://github.com/stac-extensions/raster
|
|
330
|
+
if (bands := extras.get("raster:bands")) and not vrt_options:
|
|
305
331
|
stats = [
|
|
306
332
|
(b["statistics"]["minimum"], b["statistics"]["maximum"])
|
|
307
333
|
for b in bands
|
|
@@ -319,4 +345,7 @@ class STACReader(MultiBaseReader):
|
|
|
319
345
|
"Some statistics data in STAC are invalid, they will be ignored."
|
|
320
346
|
)
|
|
321
347
|
|
|
348
|
+
if vrt_options:
|
|
349
|
+
info["url"] = f"vrt://{info['url']}?{vrt_options}"
|
|
350
|
+
|
|
322
351
|
return info
|
|
@@ -15,7 +15,12 @@ from rasterio.warp import calculate_default_transform
|
|
|
15
15
|
from rasterio.warp import transform as transform_coords
|
|
16
16
|
|
|
17
17
|
from rio_tiler.constants import WEB_MERCATOR_TMS, WGS84_CRS
|
|
18
|
-
from rio_tiler.errors import
|
|
18
|
+
from rio_tiler.errors import (
|
|
19
|
+
InvalidGeographicBounds,
|
|
20
|
+
MissingCRS,
|
|
21
|
+
PointOutsideBounds,
|
|
22
|
+
TileOutsideBounds,
|
|
23
|
+
)
|
|
19
24
|
from rio_tiler.io.base import BaseReader
|
|
20
25
|
from rio_tiler.models import BandStatistics, ImageData, Info, PointData
|
|
21
26
|
from rio_tiler.types import BBox, NoData, WarpResampling
|
|
@@ -70,8 +75,23 @@ class XarrayReader(BaseReader):
|
|
|
70
75
|
assert xarray is not None, "xarray must be installed to use XarrayReader"
|
|
71
76
|
assert rioxarray is not None, "rioxarray must be installed to use XarrayReader"
|
|
72
77
|
|
|
78
|
+
# NOTE: rioxarray returns **ordered** bounds in form of (minx, miny, maxx, maxx)
|
|
73
79
|
self.bounds = tuple(self.input.rio.bounds())
|
|
74
80
|
self.crs = self.input.rio.crs
|
|
81
|
+
if not self.crs:
|
|
82
|
+
raise MissingCRS(
|
|
83
|
+
"Dataset doesn't have CRS information, please add it before using rio-tiler (e.g. `ds.rio.write_crs('epsg:4326', inplace=True)`)"
|
|
84
|
+
)
|
|
85
|
+
|
|
86
|
+
if self.crs == WGS84_CRS and (
|
|
87
|
+
self.bounds[0] < -180
|
|
88
|
+
or self.bounds[1] < -90
|
|
89
|
+
or self.bounds[2] > 180
|
|
90
|
+
or self.bounds[3] > 90
|
|
91
|
+
):
|
|
92
|
+
raise InvalidGeographicBounds(
|
|
93
|
+
f"Invalid geographic bounds: {self.bounds}. Must be within (-180, -90, 180, 90)."
|
|
94
|
+
)
|
|
75
95
|
|
|
76
96
|
self._dims = [
|
|
77
97
|
d
|
|
@@ -232,7 +252,9 @@ class XarrayReader(BaseReader):
|
|
|
232
252
|
reproject_method = resampling_method
|
|
233
253
|
|
|
234
254
|
if not self.tile_exists(tile_x, tile_y, tile_z):
|
|
235
|
-
raise TileOutsideBounds(
|
|
255
|
+
raise TileOutsideBounds(
|
|
256
|
+
f"Tile(x={tile_x}, y={tile_y}, z={tile_z}) is outside bounds"
|
|
257
|
+
)
|
|
236
258
|
|
|
237
259
|
ds = self.input
|
|
238
260
|
if nodata is not None:
|
|
@@ -199,7 +199,9 @@ def read(
|
|
|
199
199
|
values = dataset.read(
|
|
200
200
|
indexes=indexes,
|
|
201
201
|
window=window,
|
|
202
|
-
out_shape=(
|
|
202
|
+
out_shape=(
|
|
203
|
+
(len(indexes), height, width) if height and width else None
|
|
204
|
+
),
|
|
203
205
|
resampling=io_resampling,
|
|
204
206
|
boundless=boundless,
|
|
205
207
|
)
|
|
@@ -559,9 +561,23 @@ def point(
|
|
|
559
561
|
xs, ys = transform_coords(coord_crs, dataset.crs, [lon], [lat])
|
|
560
562
|
lon, lat = xs[0], ys[0]
|
|
561
563
|
|
|
564
|
+
dataset_min_lon, dataset_min_lat, dataset_max_lon, dataset_max_lat = (
|
|
565
|
+
dataset.bounds
|
|
566
|
+
)
|
|
567
|
+
# check if latitude is inverted
|
|
568
|
+
if dataset_min_lat > dataset_max_lat:
|
|
569
|
+
warnings.warn(
|
|
570
|
+
"BoundingBox of the dataset is inverted (minLat > maxLat).",
|
|
571
|
+
UserWarning,
|
|
572
|
+
)
|
|
573
|
+
|
|
574
|
+
dataset_min_lat, dataset_max_lat = (
|
|
575
|
+
min(dataset_min_lat, dataset_max_lat),
|
|
576
|
+
max(dataset_min_lat, dataset_max_lat),
|
|
577
|
+
)
|
|
562
578
|
if not (
|
|
563
|
-
(
|
|
564
|
-
and (
|
|
579
|
+
(dataset_min_lon < lon < dataset_max_lon)
|
|
580
|
+
and (dataset_min_lat < lat < dataset_max_lat)
|
|
565
581
|
):
|
|
566
582
|
raise PointOutsideBounds("Point is outside dataset bounds")
|
|
567
583
|
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|