Skip to content

Commit cb2912e

Browse files
authored
Add virtual tiff as an optional dependency (#810)
1 parent 13c262d commit cb2912e

File tree

6 files changed

+41
-8
lines changed

6 files changed

+41
-8
lines changed

docs/api/parsers/tiff.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
# TIFF
2+
3+
The [virtual-tiff](https://github.com/virtual-zarr/virtual-tiff) library provides a TIFF parser. See [their API documentation for details](https://virtual-tiff.readthedocs.io/en/latest/api/parser/).

docs/faq.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -128,7 +128,7 @@ Users of Kerchunk may find the following comparison table useful, which shows wh
128128
| **Generation of references from archival files (1)** | | |
129129
| From a netCDF4/HDF5 file | `kerchunk.hdf.SingleHdf5ToZarr` | `open_virtual_dataset(..., parser=HDFParser())` |
130130
| From a netCDF3 file | `kerchunk.netCDF3.NetCDF3ToZarr` | `open_virtual_dataset(..., parser=NetCDF3Parser())`, via `kerchunk.netCDF3.NetCDF3ToZarr` |
131-
| From a COG / tiff file | `kerchunk.tiff.tiff_to_zarr` | `open_virtual_dataset(..., parser=TIFFParser())`, via `kerchunk.tiff.tiff_to_zarr` or potentially `tifffile` (❌ Not yet implemented - see [issue #291](https://github.com/zarr-developers/VirtualiZarr/issues/291)) |
131+
| From a COG / tiff file | `kerchunk.tiff.tiff_to_zarr` | `open_virtual_dataset(..., parser=VirtualTIFF())`, via [virtual_tiff](https://github.com/virtual-zarr/virtual-tiff) |
132132
| From a Zarr v2 store | `kerchunk.zarr.ZarrToZarr` | `open_virtual_dataset(..., parser=ZarrParser())` (❌ Not yet implemented - see [issue #262](https://github.com/zarr-developers/VirtualiZarr/issues/262)) |
133133
| From a Zarr v3 store | | `open_virtual_dataset(..., parser=ZarrParser())` |
134134
| From a GRIB2 file | `kerchunk.grib2.scan_grib` | `open_virtual_datatree(..., parser=GribParser())` (❌ Not yet implemented - see [issue #11](https://github.com/zarr-developers/VirtualiZarr/issues/11)) |

mkdocs.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ nav:
3535
- api/parsers/netcdf3.md
3636
- api/parsers/zarr.md
3737
- api/parsers/dmrpp.md
38+
- api/parsers/tiff.md
3839
- api/serialization.md
3940
- api/developer.md
4041
- "migration_guide.md"

pyproject.toml

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,9 @@ fits = [
6060
"kerchunk>=0.2.8",
6161
"astropy",
6262
]
63+
tiff = [
64+
"virtual-tiff",
65+
]
6366
kerchunk_parquet = [
6467
"virtualizarr[remote]",
6568
"fastparquet",
@@ -71,6 +74,7 @@ all_parsers = [
7174
"virtualizarr[netcdf3]",
7275
"virtualizarr[fits]",
7376
"virtualizarr[kerchunk_parquet]",
77+
"virtualizarr[tiff]",
7478
]
7579

7680
# writers
@@ -193,14 +197,14 @@ run-tests-html-cov = { cmd = "pytest -n auto --run-network-tests --verbose --cov
193197
[tool.pixi.environments]
194198
min-deps = ["dev", "test", "hdf", "hdf5-lib"] # VirtualiZarr/conftest.py using h5py, so the minimum set of dependencies for testing still includes hdf libs
195199
# Inherit from min-deps to get all the test commands, along with optional dependencies
196-
test = ["dev", "test", "remote", "hdf", "netcdf3", "fits", "icechunk", "kerchunk", "kerchunk_parquet", "hdf5-lib", "py313"]
197-
test-py311 = ["dev", "test", "remote", "hdf", "netcdf3", "fits", "icechunk", "kerchunk", "kerchunk_parquet", "hdf5-lib", "py311"] # test against python 3.11
198-
test-py312 = ["dev", "test", "remote", "hdf", "netcdf3", "fits", "icechunk", "kerchunk", "kerchunk_parquet", "hdf5-lib", "py312"] # test against python 3.12
199-
minio = ["dev", "remote", "hdf", "netcdf3", "fits", "icechunk", "kerchunk", "hdf5-lib", "py312", "minio"]
200-
minimum-versions = ["dev", "test", "remote", "hdf", "netcdf3", "fits", "icechunk", "kerchunk", "kerchunk_parquet", "hdf5-lib", "minimum-versions"]
200+
test = ["dev", "test", "remote", "hdf", "netcdf3", "fits", "icechunk", "kerchunk", "kerchunk_parquet", "hdf5-lib", "tiff", "py313"]
201+
test-py311 = ["dev", "test", "remote", "hdf", "netcdf3", "fits", "icechunk", "kerchunk", "kerchunk_parquet", "hdf5-lib", "tiff", "py311"] # test against python 3.11
202+
test-py312 = ["dev", "test", "remote", "hdf", "netcdf3", "fits", "icechunk", "kerchunk", "kerchunk_parquet", "hdf5-lib", "tiff", "py312"] # test against python 3.12
203+
minio = ["dev", "remote", "hdf", "netcdf3", "fits", "icechunk", "kerchunk", "hdf5-lib", "tiff", "py312", "minio"]
204+
minimum-versions = ["dev", "test", "remote", "hdf", "netcdf3", "fits", "icechunk", "kerchunk", "kerchunk_parquet", "tiff", "hdf5-lib", "minimum-versions"]
201205
upstream = ["dev", "test", "hdf", "hdf5-lib", "netcdf3", "upstream", "icechunk-dev", "py313"]
202-
all = ["dev", "test", "remote", "hdf", "netcdf3", "fits", "icechunk", "kerchunk", "kerchunk_parquet", "hdf5-lib", "all_parsers", "all_writers", "py313"]
203-
docs = ["docs", "dev", "remote", "hdf", "netcdf3", "fits", "icechunk", "kerchunk", "kerchunk_parquet", "hdf5-lib", "py313"]
206+
all = ["dev", "test", "remote", "hdf", "netcdf3", "fits", "icechunk", "kerchunk", "kerchunk_parquet", "hdf5-lib", "tiff", "all_parsers", "all_writers", "py313"]
207+
docs = ["docs", "dev", "remote", "hdf", "netcdf3", "fits", "icechunk", "kerchunk", "kerchunk_parquet", "hdf5-lib", "tiff", "py313"]
204208

205209
# Define commands to run within the docs environment
206210
[tool.pixi.feature.docs.tasks]

virtualizarr/tests/__init__.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,3 +41,4 @@ def _importorskip(
4141
has_zarr_python, requires_zarr_python = _importorskip("zarr")
4242
has_dask, requires_dask = _importorskip("dask")
4343
has_obstore, requires_obstore = _importorskip("obstore")
44+
has_tiff, requires_tiff = _importorskip("virtual_tiff")
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
import pytest
2+
from obstore.store import S3Store
3+
from xarray import Dataset
4+
5+
from virtualizarr import open_virtual_dataset
6+
from virtualizarr.registry import ObjectStoreRegistry
7+
from virtualizarr.tests import requires_network, requires_tiff
8+
9+
virtual_tiff = pytest.importorskip("virtual_tiff")
10+
11+
12+
@requires_tiff
13+
@requires_network
14+
def test_virtual_tiff() -> None:
15+
store = S3Store("sentinel-cogs", region="us-west-2", skip_signature=True)
16+
registry = ObjectStoreRegistry({"s3://sentinel-cogs/": store})
17+
url = "s3://sentinel-cogs/sentinel-s2-l2a-cogs/12/S/UF/2022/6/S2B_12SUF_20220609_0_L2A/B04.tif"
18+
parser = virtual_tiff.VirtualTIFF(ifd=0)
19+
with open_virtual_dataset(url=url, parser=parser, registry=registry) as vds:
20+
assert isinstance(vds, Dataset)
21+
assert list(vds.variables) == ["0"]
22+
var = vds["0"].variable
23+
assert var.sizes == {"y": 10980, "x": 10980}
24+
assert var.dtype == "<u2"

0 commit comments

Comments
 (0)