Spaces:
Running
Running
from dataclasses import dataclass | |
from typing import List, Dict, Any, NewType, Optional | |
# Type representing the "{selection}_store" dataset that corresponds to a | |
# Vega-Lite selection | |
Store = NewType("Store", List[Dict[str, Any]]) | |
class IndexSelection: | |
""" | |
An IndexSelection represents the state of an Altair | |
point selection (as constructed by alt.selection_point()) | |
when neither the fields nor encodings arguments are specified. | |
The value field is a list of zero-based indices into the | |
selected dataset. | |
Note: These indices only apply to the input DataFrame | |
for charts that do not include aggregations (e.g. a scatter chart). | |
""" | |
name: str | |
value: List[int] | |
store: Store | |
def from_vega(name: str, signal: Optional[Dict[str, dict]], store: Store): | |
""" | |
Construct an IndexSelection from the raw Vega signal and dataset values. | |
Parameters | |
---------- | |
name: str | |
The selection's name | |
signal: dict or None | |
The value of the Vega signal corresponding to the selection | |
store: list | |
The value of the Vega dataset corresponding to the selection. | |
This dataset is named "{name}_store" in the Vega view. | |
Returns | |
------- | |
IndexSelection | |
""" | |
if signal is None: | |
indices = [] | |
else: | |
points = signal.get("vlPoint", {}).get("or", []) | |
indices = [p["_vgsid_"] - 1 for p in points] | |
return IndexSelection(name=name, value=indices, store=store) | |
class PointSelection: | |
""" | |
A PointSelection represents the state of an Altair | |
point selection (as constructed by alt.selection_point()) | |
when the fields or encodings arguments are specified. | |
The value field is a list of dicts of the form: | |
[{"dim1": 1, "dim2": "A"}, {"dim1": 2, "dim2": "BB"}] | |
where "dim1" and "dim2" are dataset columns and the dict values | |
correspond to the specific selected values. | |
""" | |
name: str | |
value: List[Dict[str, Any]] | |
store: Store | |
def from_vega(name: str, signal: Optional[Dict[str, dict]], store: Store): | |
""" | |
Construct a PointSelection from the raw Vega signal and dataset values. | |
Parameters | |
---------- | |
name: str | |
The selection's name | |
signal: dict or None | |
The value of the Vega signal corresponding to the selection | |
store: list | |
The value of the Vega dataset corresponding to the selection. | |
This dataset is named "{name}_store" in the Vega view. | |
Returns | |
------- | |
PointSelection | |
""" | |
if signal is None: | |
points = [] | |
else: | |
points = signal.get("vlPoint", {}).get("or", []) | |
return PointSelection(name=name, value=points, store=store) | |
class IntervalSelection: | |
""" | |
An IntervalSelection represents the state of an Altair | |
interval selection (as constructed by alt.selection_interval()). | |
The value field is a dict of the form: | |
{"dim1": [0, 10], "dim2": ["A", "BB", "CCC"]} | |
where "dim1" and "dim2" are dataset columns and the dict values | |
correspond to the selected range. | |
""" | |
name: str | |
value: Dict[str, list] | |
store: Store | |
def from_vega(name: str, signal: Optional[Dict[str, list]], store: Store): | |
""" | |
Construct an IntervalSelection from the raw Vega signal and dataset values. | |
Parameters | |
---------- | |
name: str | |
The selection's name | |
signal: dict or None | |
The value of the Vega signal corresponding to the selection | |
store: list | |
The value of the Vega dataset corresponding to the selection. | |
This dataset is named "{name}_store" in the Vega view. | |
Returns | |
------- | |
PointSelection | |
""" | |
if signal is None: | |
signal = {} | |
return IntervalSelection(name=name, value=signal, store=store) | |