Skip to content

Commit a9fe76a

Browse files
committed
scratch work for quak
1 parent 87e4846 commit a9fe76a

File tree

4 files changed

+84
-1
lines changed

4 files changed

+84
-1
lines changed

lonboard/_layer.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@
4747

4848
if TYPE_CHECKING:
4949
import geopandas as gpd
50+
import quak
5051

5152
from lonboard.types.layer import (
5253
BaseLayerKwargs,
@@ -390,6 +391,12 @@ def from_duckdb(
390391

391392
return cls(table=table, **kwargs)
392393

394+
def quak(self) -> quak.Widget:
395+
import quak
396+
import sqlglot
397+
398+
pass
399+
393400

394401
class BitmapLayer(BaseLayer):
395402
"""

poetry.lock

Lines changed: 16 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

pyproject.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,7 @@ pyarrow = ">=14.0.1"
6464
pyogrio = "^0.8"
6565
pytest = "^7.4.2"
6666
quak = "^0.1.8"
67+
sqlglot = "^25.16.0"
6768

6869
[tool.poetry.group.docs.dependencies]
6970
# We use ruff format ourselves, but mkdocstrings requires black to be installed

tmp4.py

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
from datetime import datetime
2+
3+
import geodatasets
4+
import geopandas as gpd
5+
import numpy as np
6+
import quak
7+
import sqlglot
8+
from arro3.core import Array, ChunkedArray, DataType, Table
9+
10+
from lonboard import PolygonLayer, viz
11+
12+
gdf = gpd.read_file(geodatasets.get_path("nybb"))
13+
layer = PolygonLayer.from_geopandas(gdf)
14+
self = layer
15+
self.extensions
16+
17+
18+
def quak_fn(self: PolygonLayer) -> quak.Widget:
19+
table: Table = self.table
20+
num_rows = table.num_rows
21+
if num_rows <= np.iinfo(np.uint8).max:
22+
row_index = Array.from_numpy(np.arange(num_rows, dtype=np.uint8))
23+
filter_arr = np.zeros(num_rows, dtype=np.uint8)
24+
elif num_rows <= np.iinfo(np.uint16).max:
25+
row_index = Array.from_numpy(np.arange(num_rows, dtype=np.uint16))
26+
filter_arr = np.zeros(num_rows, dtype=np.uint16)
27+
elif num_rows <= np.iinfo(np.uint32).max:
28+
row_index = Array.from_numpy(np.arange(num_rows, dtype=np.uint32))
29+
filter_arr = np.zeros(num_rows, dtype=np.uint32)
30+
else:
31+
row_index = Array.from_numpy(np.arange(num_rows, dtype=np.uint64))
32+
filter_arr = np.zeros(num_rows, dtype=np.uint64)
33+
34+
table_with_row_index = table.append_column("_row_index", ChunkedArray(row_index))
35+
quak_widget = quak.Widget(table_with_row_index)
36+
37+
test = None
38+
39+
def row_index_callback(change):
40+
global test
41+
test = change
42+
43+
sql = sqlglot.parse_one(quak_widget.sql, dialect="duckdb")
44+
sql.set("expressions", [sqlglot.column("_row_index")])
45+
row_index_table = quak_widget._conn.query(sql.sql(dialect="duckdb")).arrow()
46+
47+
# Reset all to zero
48+
filter_arr[:] = 0
49+
50+
# Set the desired _row_index to 1
51+
filter_arr[row_index_table["_row_index"]] = 1
52+
53+
quak_widget.observe(row_index_callback, names="sql")
54+
55+
test
56+
57+
58+
m = viz(gdf)
59+
m
60+
table = m.layers[0].table

0 commit comments

Comments
 (0)