def test_parse_expression(): """test parsing rio-tiler expression.""" assert sorted(parse_expression("b1*b11+b3,b1*b2+B4")) == [1, 2, 3, 4, 11] assert sorted(parse_expression("b1*b11+b3,b1*b2+B4", cast=False)) == [ "1", "11", "2", "3", "4", ]
def tile( self, tile_x: int, tile_y: int, tile_z: int, tilesize: int = 256, indexes: Optional[Sequence] = None, expression: Optional[str] = "", **kwargs: Any, ) -> Tuple[numpy.ndarray, numpy.ndarray]: """Read a TMS map tile from a COG.""" kwargs = {**self._kwargs, **kwargs} if isinstance(indexes, int): indexes = (indexes, ) if expression: indexes = parse_expression(expression) tile = morecantile.Tile(x=tile_x, y=tile_y, z=tile_z) if not self._tile_exists(tile): raise TileOutsideBounds( "Tile {}/{}/{} is outside image bounds".format( tile_z, tile_x, tile_y)) tile_bounds = self.tms.xy_bounds(*tile) tile, mask = reader.part( self.dataset, tile_bounds, tilesize, tilesize, dst_crs=self.tms.crs, indexes=indexes, **kwargs, ) if expression: blocks = expression.lower().split(",") bands = [f"b{bidx}" for bidx in indexes] tile = apply_expression(blocks, bands, tile) return tile, mask