Skip to content

Commit 26936b0

Browse files
committed
Merge
2 parents 75923b3 + 03f8e60 commit 26936b0

File tree

5 files changed

+56
-6
lines changed

5 files changed

+56
-6
lines changed

docs/notebooks/spatial_data_blobs.ipynb

Lines changed: 34 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,21 @@
6060
"sdata.write(spatialdata_filepath, overwrite=True)"
6161
]
6262
},
63+
{
64+
"cell_type": "code",
65+
"execution_count": null,
66+
"metadata": {},
67+
"outputs": [],
68+
"source": [
69+
"# Change data type of x and y columns from int64 to int32\n",
70+
"# Temporary workaround, will be resolved by https://github.com/vitessce/vitessce/issues/2292\n",
71+
"ddf = sdata[\"blobs_points\"]\n",
72+
"ddf[\"x\"] = ddf[\"x\"].astype('int32')\n",
73+
"ddf[\"y\"] = ddf[\"y\"].astype('int32')\n",
74+
"sdata[\"blobs_points_2\"] = ddf\n",
75+
"sdata.write_element(\"blobs_points_2\")"
76+
]
77+
},
6378
{
6479
"cell_type": "code",
6580
"execution_count": null,
@@ -107,7 +122,17 @@
107122
" \"fileUid\": \"my_unique_id\"\n",
108123
" }\n",
109124
")\n",
110-
"dataset = vc.add_dataset(name='Blobs').add_object(wrapper)\n",
125+
"points_wrapper = SpatialDataWrapper(\n",
126+
" sdata_store=spatialdata_filepath,\n",
127+
" # The following paths are relative to the root of the SpatialData zarr store on-disk.\n",
128+
" obs_points_path=\"points/blobs_points_2\",\n",
129+
" coordinate_system=\"global\",\n",
130+
" coordination_values={\n",
131+
" \"obsType\": \"point\",\n",
132+
" \"fileUid\": \"other_unique_id\"\n",
133+
" }\n",
134+
")\n",
135+
"dataset = vc.add_dataset(name='Blobs').add_object(wrapper).add_object(points_wrapper)\n",
111136
"\n",
112137
"# Add views (visualizations) to the configuration:\n",
113138
"spatial = vc.add_view(\"spatialBeta\", dataset=dataset)\n",
@@ -148,6 +173,14 @@
148173
" }]),\n",
149174
"}, scope_prefix=get_initial_coordination_scope_prefix(\"A\", \"obsSegmentations\"))\n",
150175
"\n",
176+
"vc.link_views_by_dict([spatial, layer_controller], {\n",
177+
" 'pointLayer': CL([{\n",
178+
" \"fileUid\": \"other_unique_id\",\n",
179+
" \"obsType\": \"point\",\n",
180+
" \"obsHighlight\": None,\n",
181+
" }]),\n",
182+
"}, scope_prefix=get_initial_coordination_scope_prefix(\"A\", \"obsPoints\"))\n",
183+
"\n",
151184
"# Layout the views\n",
152185
"vc.layout(spatial | layer_controller);"
153186
]

pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
44

55
[project]
66
name = "vitessce"
7-
version = "3.7.4"
7+
version = "3.7.5"
88
authors = [
99
{ name="Mark Keller", email="[email protected]" },
1010
]

src/vitessce/file_def_utils.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -147,6 +147,18 @@ def gen_sdata_obs_segmentations_schema(options, path: str, table_path: str = "ta
147147
return options
148148

149149

150+
def gen_sdata_obs_points_schema(options, path: str, table_path: str = "tables/table", coordinate_system: Optional[str] = None) -> dict:
151+
if path is not None:
152+
options["obsPoints"] = {
153+
"path": path
154+
}
155+
if table_path is not None:
156+
options["obsPoints"]['tablePath'] = table_path
157+
if coordinate_system is not None:
158+
options["obsPoints"]['coordinateSystem'] = coordinate_system
159+
return options
160+
161+
150162
def gen_sdata_obs_spots_schema(options: dict, shapes_path: str, table_path: str = "tables/table", region: Optional[str] = None, coordinate_system: Optional[str] = None) -> dict:
151163
if shapes_path is not None:
152164
options['obsSpots'] = {

src/vitessce/widget.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -651,7 +651,7 @@ class VitessceWidget(anywidget.AnyWidget):
651651

652652
next_port = DEFAULT_PORT
653653

654-
js_package_version = Unicode('3.6.18').tag(sync=True)
654+
js_package_version = Unicode('3.8.3').tag(sync=True)
655655
js_dev_mode = Bool(False).tag(sync=True)
656656
custom_js_url = Unicode('').tag(sync=True)
657657
plugin_esm = List(trait=Unicode(''), default_value=[]).tag(sync=True)
@@ -664,7 +664,7 @@ class VitessceWidget(anywidget.AnyWidget):
664664

665665
store_urls = List(trait=Unicode(''), default_value=[]).tag(sync=True)
666666

667-
def __init__(self, config, height=600, theme='auto', uid=None, port=None, proxy=False, js_package_version='3.6.18', js_dev_mode=False, custom_js_url='', plugins=None, remount_on_uid_change=True, prefer_local=True, invoke_timeout=300000, invoke_batched=True, page_mode=False, page_esm=None, prevent_scroll=True, server_host=None):
667+
def __init__(self, config, height=600, theme='auto', uid=None, port=None, proxy=False, js_package_version='3.8.3', js_dev_mode=False, custom_js_url='', plugins=None, remount_on_uid_change=True, prefer_local=True, invoke_timeout=300000, invoke_batched=True, page_mode=False, page_esm=None, prevent_scroll=True, server_host=None):
668668
"""
669669
Construct a new Vitessce widget. Not intended to be instantiated directly; instead, use ``VitessceConfig.widget``.
670670
@@ -798,7 +798,7 @@ def _plugin_command(self, params, buffers):
798798
# Launch Vitessce using plain HTML representation (no ipywidgets)
799799

800800

801-
def ipython_display(config, height=600, theme='auto', base_url=None, host_name=None, uid=None, port=None, proxy=False, js_package_version='3.6.18', js_dev_mode=False, custom_js_url='', plugins=None, remount_on_uid_change=True, page_mode=False, page_esm=None, server_host=None):
801+
def ipython_display(config, height=600, theme='auto', base_url=None, host_name=None, uid=None, port=None, proxy=False, js_package_version='3.8.3', js_dev_mode=False, custom_js_url='', plugins=None, remount_on_uid_change=True, page_mode=False, page_esm=None, server_host=None):
802802
from IPython.display import display, HTML
803803
uid_str = "vitessce" + get_uid_str(uid)
804804

src/vitessce/wrappers.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
gen_obs_sets_schema,
2929
gen_sdata_image_schema,
3030
gen_sdata_obs_segmentations_schema,
31+
gen_sdata_obs_points_schema,
3132
gen_sdata_obs_spots_schema,
3233
gen_sdata_obs_sets_schema,
3334
gen_sdata_obs_feature_matrix_schema,
@@ -1406,7 +1407,7 @@ def auto_view_config(self, vc):
14061407

14071408
class SpatialDataWrapper(AnnDataWrapper):
14081409

1409-
def __init__(self, sdata_path: Optional[str] = None, sdata_url: Optional[str] = None, sdata_store: Optional[Union[str, zarr.storage.StoreLike]] = None, sdata_artifact: Optional[ln.Artifact] = None, image_path: Optional[str] = None, region: Optional[str] = None, coordinate_system: Optional[str] = None, obs_spots_path: Optional[str] = None, obs_segmentations_path: Optional[str] = None, table_path: str = "tables/table", is_zip=None, coordination_values=None, **kwargs):
1410+
def __init__(self, sdata_path: Optional[str] = None, sdata_url: Optional[str] = None, sdata_store: Optional[Union[str, zarr.storage.StoreLike]] = None, sdata_artifact: Optional[ln.Artifact] = None, image_path: Optional[str] = None, region: Optional[str] = None, coordinate_system: Optional[str] = None, obs_spots_path: Optional[str] = None, obs_segmentations_path: Optional[str] = None, obs_points_path: Optional[str] = None, table_path: str = "tables/table", is_zip=None, coordination_values=None, **kwargs):
14101411
"""
14111412
Wrap a SpatialData object.
14121413
@@ -1429,6 +1430,8 @@ def __init__(self, sdata_path: Optional[str] = None, sdata_url: Optional[str] =
14291430
:type obs_spots_path: Optional[str]
14301431
:param obs_segmentations_path: Path to a labels or shapes element (segmentation bitmask label image or segmentation polygon shapes), by default None
14311432
:type obs_segmentations_path: Optional[str]
1433+
:param obs_points_path: Path to a points element, by default None
1434+
:type obs_points_path: Optional[str]
14321435
"""
14331436
raise_error_if_zero_or_more_than_one([
14341437
sdata_path,
@@ -1458,6 +1461,7 @@ def __init__(self, sdata_path: Optional[str] = None, sdata_url: Optional[str] =
14581461
self._kwargs = kwargs
14591462
self._obs_spots_path = obs_spots_path
14601463
self._obs_segmentations_path = obs_segmentations_path
1464+
self._obs_points_path = obs_points_path
14611465
if self._adata_path is not None:
14621466
self.zarr_folder = 'spatialdata.zarr'
14631467
self.obs_type_label = None
@@ -1545,6 +1549,7 @@ def generator(base_url):
15451549
options = gen_sdata_obs_spots_schema(options, self._obs_spots_path, self._table_path, self._region, self._coordinate_system)
15461550
options = gen_sdata_image_schema(options, self._image_path, self._coordinate_system)
15471551
options = gen_sdata_obs_segmentations_schema(options, self._obs_segmentations_path, self._table_path, self._coordinate_system)
1552+
options = gen_sdata_obs_points_schema(options, self._obs_points_path, self._table_path, self._coordinate_system)
15481553
options = gen_feature_labels_schema(self._feature_labels, options)
15491554
if len(options.keys()) > 0:
15501555
obj_file_def = {

0 commit comments

Comments
 (0)