From 78f50e521f3e326490769eb202340d30e073b3cc Mon Sep 17 00:00:00 2001
From: Dan Redding <125183946+dangotbanned@users.noreply.github.com>
Date: Mon, 4 Nov 2024 21:16:55 +0000
Subject: [PATCH 01/42] ci: Support Python 3.13 (#3591)
* ci: Support Python 3.13
Minimal/fallback support for `3.13`.
Ideally I'd like to minimise hard dependencies we have on `typing_extensions` before October 2024.
However, this would be the simpler option if it passes CI
Resolves https://github.com/vega/altair/issues/3587
* ci: Bump `hatch>=1.13.0`
Adds `python=3.13.*` support
https://github.com/pypa/hatch/releases/tag/hatch-v1.13.0
* ci: Disable `allow-prereleases`
Basising this off of https://github.com/narwhals-dev/narwhals/pull/1094/commits/97ebe2c74d529b6c8fb74bc45dfa17a752268e17
* ci: Bump `pyarrow`, remove `pillow` upper bound
Seems to be able to build (sometimes) with these changes.
Still fails a good chunk of the tests
* revert: (7f11fafe33c1bf483401cc7c903dec67e4b077cf)
---
.github/workflows/build.yml | 2 +-
pyproject.toml | 5 +++--
2 files changed, 4 insertions(+), 3 deletions(-)
diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
index e22134769..4b72165af 100644
--- a/.github/workflows/build.yml
+++ b/.github/workflows/build.yml
@@ -7,7 +7,7 @@ jobs:
runs-on: ubuntu-latest
strategy:
matrix:
- python-version: ["3.9", "3.10", "3.11", "3.12"]
+ python-version: ["3.9", "3.10", "3.11", "3.12", "3.13"]
jsonschema-version: ["3.0", "latest"]
name: py ${{ matrix.python-version }} js ${{ matrix.jsonschema-version }}
steps:
diff --git a/pyproject.toml b/pyproject.toml
index 5b5da88f9..a9fe93f8e 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -45,6 +45,7 @@ classifiers = [
"Programming Language :: Python :: 3.10",
"Programming Language :: Python :: 3.11",
"Programming Language :: Python :: 3.12",
+ "Programming Language :: Python :: 3.13",
"Typing :: Typed",
]
@@ -67,7 +68,7 @@ all = [
"altair_tiles>=0.3.0"
]
dev = [
- "hatch",
+ "hatch>=1.13.0",
"ruff>=0.6.0",
"duckdb>=1.0",
"ipython[kernel]",
@@ -147,7 +148,7 @@ features = ["all", "dev", "doc"]
default-args = ["--numprocesses=logical","--doctest-modules", "tests", "altair", "tools"]
parallel = true
[[tool.hatch.envs.hatch-test.matrix]]
-python = ["3.9", "3.10", "3.11", "3.12"]
+python = ["3.9", "3.10", "3.11", "3.12", "3.13"]
[tool.hatch.envs.hatch-test.scripts]
run = [
"ruff check .",
From 085a6b637e9baf37baf62dac760a069cf09abe95 Mon Sep 17 00:00:00 2001
From: Dan Redding <125183946+dangotbanned@users.noreply.github.com>
Date: Tue, 5 Nov 2024 16:03:33 +0000
Subject: [PATCH 02/42] chore(typing): Resolve or ignore `pyright`-only
warnings (#3676)
---
altair/_magics.py | 35 ++++----
altair/utils/_dfi_types.py | 6 ++
altair/utils/core.py | 10 +--
altair/vegalite/v5/display.py | 8 +-
pyproject.toml | 18 ++--
sphinxext/altairgallery.py | 6 +-
sphinxext/code_ref.py | 22 ++---
sphinxext/schematable.py | 15 ++--
sphinxext/utils.py | 12 +--
tests/__init__.py | 11 +++
tests/test_magics.py | 114 +++++++++++++-----------
tests/utils/test_compiler.py | 4 +-
tests/utils/test_core.py | 2 +-
tests/utils/test_data.py | 16 +++-
tests/utils/test_html.py | 4 +-
tests/utils/test_mimebundle.py | 13 ++-
tests/utils/test_plugin_registry.py | 16 +++-
tests/utils/test_schemapi.py | 30 +++----
tests/utils/test_utils.py | 2 +-
tests/vegalite/v5/test_geo_interface.py | 31 ++++---
20 files changed, 212 insertions(+), 163 deletions(-)
diff --git a/altair/_magics.py b/altair/_magics.py
index 05186367e..8f40080db 100644
--- a/altair/_magics.py
+++ b/altair/_magics.py
@@ -1,23 +1,18 @@
"""Magic functions for rendering vega-lite specifications."""
-__all__ = ["vegalite"]
+from __future__ import annotations
import json
import warnings
+from importlib.util import find_spec
+from typing import Any
-import IPython
from IPython.core import magic_arguments
from narwhals.dependencies import is_pandas_dataframe as _is_pandas_dataframe
from altair.vegalite import v5 as vegalite_v5
-try:
- import yaml
-
- YAML_AVAILABLE = True
-except ImportError:
- YAML_AVAILABLE = False
-
+__all__ = ["vegalite"]
RENDERERS = {
"vega-lite": {
@@ -48,19 +43,21 @@ def _prepare_data(data, data_transformers):
return data
-def _get_variable(name):
+def _get_variable(name: str) -> Any:
"""Get a variable from the notebook namespace."""
- ip = IPython.get_ipython()
- if ip is None:
+ from IPython.core.getipython import get_ipython
+
+ if ip := get_ipython():
+ if name not in ip.user_ns:
+ msg = f"argument '{name}' does not match the name of any defined variable"
+ raise NameError(msg)
+ return ip.user_ns[name]
+ else:
msg = (
"Magic command must be run within an IPython "
"environment, in which get_ipython() is defined."
)
raise ValueError(msg)
- if name not in ip.user_ns:
- msg = f"argument '{name}' does not match the name of any defined variable"
- raise NameError(msg)
- return ip.user_ns[name]
@magic_arguments.magic_arguments()
@@ -71,7 +68,7 @@ def _get_variable(name):
)
@magic_arguments.argument("-v", "--version", dest="version", default="v5")
@magic_arguments.argument("-j", "--json", dest="json", action="store_true")
-def vegalite(line, cell):
+def vegalite(line, cell) -> vegalite_v5.VegaLite:
"""
Cell magic for displaying vega-lite visualizations in CoLab.
@@ -91,7 +88,7 @@ def vegalite(line, cell):
if args.json:
spec = json.loads(cell)
- elif not YAML_AVAILABLE:
+ elif not find_spec("yaml"):
try:
spec = json.loads(cell)
except json.JSONDecodeError as err:
@@ -101,6 +98,8 @@ def vegalite(line, cell):
)
raise ValueError(msg) from err
else:
+ import yaml
+
spec = yaml.load(cell, Loader=yaml.SafeLoader)
if args.data is not None:
diff --git a/altair/utils/_dfi_types.py b/altair/utils/_dfi_types.py
index 086db6800..1b47ddd08 100644
--- a/altair/utils/_dfi_types.py
+++ b/altair/utils/_dfi_types.py
@@ -79,6 +79,7 @@ def dtype(self) -> tuple[Any, int, str, str]:
- Data types not included: complex, Arrow-style null, binary, decimal,
and nested (list, struct, map, union) dtypes.
"""
+ ...
# Have to use a generic Any return type as not all libraries who implement
# the dataframe interchange protocol implement the TypedDict that is usually
@@ -106,6 +107,7 @@ def describe_categorical(self) -> Any:
TBD: are there any other in-memory representations that are needed?
"""
+ ...
class DataFrame(Protocol):
@@ -137,12 +139,15 @@ def __dataframe__(
necessary if a library supports strided buffers, given that this protocol
specifies contiguous buffers.
"""
+ ...
def column_names(self) -> Iterable[str]:
"""Return an iterator yielding the column names."""
+ ...
def get_column_by_name(self, name: str) -> Column:
"""Return the column whose name is the indicated name."""
+ ...
def get_chunks(self, n_chunks: int | None = None) -> Iterable[DataFrame]:
"""
@@ -156,3 +161,4 @@ def get_chunks(self, n_chunks: int | None = None) -> Iterable[DataFrame]:
Note that the producer must ensure that all columns are chunked the
same way.
"""
+ ...
diff --git a/altair/utils/core.py b/altair/utils/core.py
index 9143a1ec5..669b81a06 100644
--- a/altair/utils/core.py
+++ b/altair/utils/core.py
@@ -222,7 +222,7 @@ def __dataframe__(
def infer_vegalite_type_for_pandas(
- data: object,
+ data: Any,
) -> InferredVegaLiteType | tuple[InferredVegaLiteType, list[Any]]:
"""
From an array-like input, infer the correct vega typecode.
@@ -231,7 +231,7 @@ def infer_vegalite_type_for_pandas(
Parameters
----------
- data: object
+ data: Any
"""
# This is safe to import here, as this function is only called on pandas input.
from pandas.api.types import infer_dtype
@@ -738,10 +738,10 @@ def use_signature(tp: Callable[P, Any], /):
"""
@overload
- def decorate(cb: WrapsMethod[T, R], /) -> WrappedMethod[T, P, R]: ...
+ def decorate(cb: WrapsMethod[T, R], /) -> WrappedMethod[T, P, R]: ... # pyright: ignore[reportOverlappingOverload]
@overload
- def decorate(cb: WrapsFunc[R], /) -> WrappedFunc[P, R]: ...
+ def decorate(cb: WrapsFunc[R], /) -> WrappedFunc[P, R]: ... # pyright: ignore[reportOverlappingOverload]
def decorate(cb: WrapsFunc[R], /) -> WrappedMethod[T, P, R] | WrappedFunc[P, R]:
"""
@@ -857,7 +857,7 @@ def from_cache(cls) -> _ChannelCache:
cached = _CHANNEL_CACHE
except NameError:
cached = cls.__new__(cls)
- cached.channel_to_name = _init_channel_to_name()
+ cached.channel_to_name = _init_channel_to_name() # pyright: ignore[reportAttributeAccessIssue]
cached.name_to_channel = _invert_group_channels(cached.channel_to_name)
_CHANNEL_CACHE = cached
return _CHANNEL_CACHE
diff --git a/altair/vegalite/v5/display.py b/altair/vegalite/v5/display.py
index 5d71a2934..dcc506958 100644
--- a/altair/vegalite/v5/display.py
+++ b/altair/vegalite/v5/display.py
@@ -125,10 +125,6 @@ def browser_renderer(
vegalite_version=VEGALITE_VERSION,
**metadata,
)
-
- if isinstance(mimebundle, tuple):
- mimebundle = mimebundle[0]
-
html = mimebundle["text/html"]
open_html_in_browser(html, using=using, port=port)
return {}
@@ -162,7 +158,9 @@ def browser_renderer(
renderers.register("json", json_renderer)
renderers.register("png", png_renderer)
renderers.register("svg", svg_renderer)
-renderers.register("jupyter", jupyter_renderer)
+# FIXME: Caused by upstream # type: ignore[unreachable]
+# https://github.com/manzt/anywidget/blob/b7961305a7304f4d3def1fafef0df65db56cf41e/anywidget/widget.py#L80-L81
+renderers.register("jupyter", jupyter_renderer) # pyright: ignore[reportArgumentType]
renderers.register("browser", browser_renderer)
renderers.register("olli", olli_renderer)
renderers.enable("default")
diff --git a/pyproject.toml b/pyproject.toml
index a9fe93f8e..ae15a8a4b 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -457,18 +457,12 @@ include=[
"./doc/*.py",
"./tests/**/*.py",
"./tools/**/*.py",
+ "./sphinxext/**/*.py",
]
ignore=[
- "./altair/vegalite/v5/display.py",
- "./altair/vegalite/v5/schema/",
- "./altair/utils/core.py",
- "./altair/utils/_dfi_types.py",
- "./altair/_magics.py",
- "./altair/jupyter/",
- "./sphinxext/",
- "./tests/test_jupyter_chart.py",
- "./tests/utils/",
- "./tests/test_magics.py",
- "./tests/vegalite/v5/test_geo_interface.py",
- "../../../**/Lib", # stdlib
+ "./altair/vegalite/v5/schema/channels.py", # 716 warns
+ "./altair/vegalite/v5/schema/mixins.py", # 1001 warns
+ "./altair/jupyter/", # Mostly untyped
+ "./tests/test_jupyter_chart.py", # Based on untyped module
+ "../../../**/Lib", # stdlib
]
diff --git a/sphinxext/altairgallery.py b/sphinxext/altairgallery.py
index 062807d61..ea3a17837 100644
--- a/sphinxext/altairgallery.py
+++ b/sphinxext/altairgallery.py
@@ -14,7 +14,7 @@
from docutils import nodes
from docutils.parsers.rst import Directive
from docutils.parsers.rst.directives import flag
-from docutils.statemachine import ViewList
+from docutils.statemachine import StringList
from sphinx.util.nodes import nested_parse_with_titles
from altair.utils.execeval import eval_block
@@ -184,7 +184,7 @@ def save_example_pngs(
else:
# the file changed or the image file does not exist. Generate it.
print(f"-> saving {image_file!s}")
- chart = eval_block(code)
+ chart = eval_block(code, strict=True)
try:
chart.save(image_file)
hashes[filename] = example_hash
@@ -303,7 +303,7 @@ def run(self) -> list[Node]:
)
# parse and return documentation
- result = ViewList()
+ result = StringList()
for line in include.split("\n"):
result.append(line, "")
node = nodes.paragraph()
diff --git a/sphinxext/code_ref.py b/sphinxext/code_ref.py
index 8f5f4da0e..2eba68a6a 100644
--- a/sphinxext/code_ref.py
+++ b/sphinxext/code_ref.py
@@ -108,7 +108,7 @@ def gen() -> Iterator[nodes.Node]:
def theme_names() -> tuple[Sequence[str], Sequence[str]]:
- names: set[VegaThemes] = set(get_args(VegaThemes))
+ names: set[str] = set(get_args(VegaThemes))
carbon = {nm for nm in names if nm.startswith("carbon")}
return ["default", *sorted(names - carbon)], sorted(carbon)
@@ -180,8 +180,8 @@ class ThemeDirective(SphinxDirective):
https://pyscript.net/
"""
- has_content: ClassVar[Literal[False]] = False
- required_arguments: ClassVar[Literal[1]] = 1
+ has_content: ClassVar[bool] = False
+ required_arguments: ClassVar[int] = 1
option_spec = {
"packages": validate_packages,
"dropdown-label": directives.unchanged,
@@ -226,14 +226,16 @@ def run(self) -> Sequence[nodes.Node]:
)
results.append(raw_html("
\n"))
return maybe_details(
- results, self.options, default_summary="Show Vega-Altair Theme Test"
+ results,
+ self.options, # pyright: ignore[reportArgumentType]
+ default_summary="Show Vega-Altair Theme Test",
)
class PyScriptDirective(SphinxDirective):
"""Placeholder for non-theme related directive."""
- has_content: ClassVar[Literal[False]] = False
+ has_content: ClassVar[bool] = False
option_spec = {"packages": directives.unchanged}
def run(self) -> Sequence[nodes.Node]:
@@ -282,9 +284,9 @@ class CodeRefDirective(SphinxDirective):
https://github.com/vega/sphinxext-altair
"""
- has_content: ClassVar[Literal[False]] = False
- required_arguments: ClassVar[Literal[1]] = 1
- option_spec: ClassVar[dict[_Option, Callable[[str], Any]]] = {
+ has_content: ClassVar[bool] = False
+ required_arguments: ClassVar[int] = 1
+ option_spec: ClassVar[dict[_Option, Callable[[str], Any]]] = { # pyright: ignore[reportIncompatibleVariableOverride]
"output": validate_output,
"fold": directives.flag,
"summary": directives.unchanged_required,
@@ -302,8 +304,8 @@ def __init__(
state: RSTState,
state_machine: RSTStateMachine,
) -> None:
- super().__init__(name, arguments, options, content, lineno, content_offset, block_text, state, state_machine) # fmt: skip
- self.options: dict[_Option, Any]
+ super().__init__(name, arguments, options, content, lineno, content_offset, block_text, state, state_machine) # fmt: skip # pyright: ignore[reportArgumentType]
+ self.options: dict[_Option, Any] # pyright: ignore[reportIncompatibleVariableOverride]
def run(self) -> Sequence[nodes.Node]:
qual_name = self.arguments[0]
diff --git a/sphinxext/schematable.py b/sphinxext/schematable.py
index 5daaba4c5..323f8dfe7 100644
--- a/sphinxext/schematable.py
+++ b/sphinxext/schematable.py
@@ -8,7 +8,7 @@
from docutils import frontend, nodes, utils
from docutils.parsers.rst import Directive
from docutils.parsers.rst.directives import flag
-from myst_parser.docutils_ import Parser
+from myst_parser.parsers.docutils_ import Parser
from sphinx import addnodes
from tools.schemapi.utils import SchemaInfo, fix_docstring_issues
@@ -95,7 +95,7 @@ def add_text(node: nodes.paragraph, text: str) -> nodes.paragraph:
for part in reCode.split(text):
if part:
if is_text:
- node += nodes.Text(part, part)
+ node += nodes.Text(part, part) # pyright: ignore[reportCallIssue]
else:
node += nodes.literal(part, part)
@@ -108,7 +108,7 @@ def build_row(
item: tuple[str, dict[str, Any]], rootschema: dict[str, Any] | None
) -> nodes.row:
"""Return nodes.row with property description."""
- prop, propschema, _ = item
+ prop, propschema = item
row = nodes.row()
# Property
@@ -165,17 +165,16 @@ def build_schema_table(
def select_items_from_schema(
schema: dict[str, Any], props: list[str] | None = None
-) -> Iterator[tuple[Any, Any, bool] | tuple[str, Any, bool]]:
- """Return iterator (prop, schema.item, required) on prop, return all in None."""
+) -> Iterator[tuple[Any, Any] | tuple[str, Any]]:
+ """Return iterator (prop, schema.item) on prop, return all in None."""
properties = schema.get("properties", {})
- required = schema.get("required", [])
if not props:
for prop, item in properties.items():
- yield prop, item, prop in required
+ yield prop, item
else:
for prop in props:
try:
- yield prop, properties[prop], prop in required
+ yield prop, properties[prop]
except KeyError as err:
msg = f"Can't find property: {prop}"
raise Exception(msg) from err
diff --git a/sphinxext/utils.py b/sphinxext/utils.py
index a27e4d340..743cf0913 100644
--- a/sphinxext/utils.py
+++ b/sphinxext/utils.py
@@ -46,7 +46,7 @@ def create_generic_image(
arr = np.zeros((shape[0], shape[1], 3))
if gradient:
# gradient from gray to white
- arr += np.linspace(128, 255, shape[1])[:, None]
+ arr += np.linspace(128, 255, shape[1])[:, None] # pyright: ignore[reportCallIssue,reportArgumentType]
im = Image.fromarray(arr.astype("uint8"))
im.save(filename)
@@ -138,12 +138,12 @@ def get_docstring_and_rest(filename: str) -> tuple[str, str | None, str, int]:
try:
# In python 3.7 module knows its docstring.
# Everything else will raise an attribute error
- docstring = node.docstring
+ docstring = node.docstring # pyright: ignore[reportAttributeAccessIssue]
import tokenize
from io import BytesIO
- ts = tokenize.tokenize(BytesIO(content).readline)
+ ts = tokenize.tokenize(BytesIO(content).readline) # pyright: ignore[reportArgumentType]
ds_lines = 0
# find the first string according to the tokenizer and get
# it's end row
@@ -163,7 +163,7 @@ def get_docstring_and_rest(filename: str) -> tuple[str, str | None, str, int]:
and isinstance(node.body[0].value, (ast.Str, ast.Constant))
):
docstring_node = node.body[0]
- docstring = docstring_node.value.s
+ docstring = docstring_node.value.s # pyright: ignore[reportAttributeAccessIssue]
# python2.7: Code was read in bytes needs decoding to utf-8
# unless future unicode_literals is imported in source which
# make ast output unicode strings
@@ -203,8 +203,8 @@ def dict_hash(dct: dict[Any, Any]) -> Any:
serialized = json.dumps(dct, sort_keys=True)
try:
- m = hashlib.sha256(serialized)[:32]
+ m = hashlib.sha256(serialized)[:32] # pyright: ignore[reportArgumentType,reportIndexIssue]
except TypeError:
- m = hashlib.sha256(serialized.encode())[:32]
+ m = hashlib.sha256(serialized.encode())[:32] # pyright: ignore[reportIndexIssue]
return m.hexdigest()
diff --git a/tests/__init__.py b/tests/__init__.py
index 1cda56438..617cfca80 100644
--- a/tests/__init__.py
+++ b/tests/__init__.py
@@ -59,6 +59,17 @@ def windows_has_tzdata() -> bool:
>>> hatch run test-slow --durations=25 # doctest: +SKIP
"""
+skip_requires_ipython: pytest.MarkDecorator = pytest.mark.skipif(
+ find_spec("IPython") is None, reason="`IPython` not installed."
+)
+"""
+``pytest.mark.skipif`` decorator.
+
+Applies when `IPython`_ import would fail.
+
+.. _IPython:
+ https://github.com/ipython/ipython
+"""
skip_requires_vl_convert: pytest.MarkDecorator = pytest.mark.skipif(
find_spec("vl_convert") is None, reason="`vl_convert` not installed."
diff --git a/tests/test_magics.py b/tests/test_magics.py
index e1775aaf5..f88c83dbb 100644
--- a/tests/test_magics.py
+++ b/tests/test_magics.py
@@ -1,68 +1,76 @@
+from __future__ import annotations
+
import json
+from typing import TYPE_CHECKING, Any
import pytest
-try:
- from IPython import InteractiveShell
-
- IPYTHON_AVAILABLE = True
-except ImportError:
- IPYTHON_AVAILABLE = False
-
-from altair.vegalite.v5 import VegaLite
-
-DATA_RECORDS = [
- {"amount": 28, "category": "A"},
- {"amount": 55, "category": "B"},
- {"amount": 43, "category": "C"},
- {"amount": 91, "category": "D"},
- {"amount": 81, "category": "E"},
- {"amount": 53, "category": "F"},
- {"amount": 19, "category": "G"},
- {"amount": 87, "category": "H"},
-]
-
-if IPYTHON_AVAILABLE:
- _ipshell = InteractiveShell.instance()
- _ipshell.run_cell("%load_ext altair")
- _ipshell.run_cell(
- f"""
-import pandas as pd
-table = pd.DataFrame.from_records({DATA_RECORDS})
-the_data = table
-"""
- )
+from altair.vegalite.v5.display import VegaLite
+from tests import skip_requires_ipython
+
+if TYPE_CHECKING:
+ from IPython.core.interactiveshell import InteractiveShell
+
+
+@pytest.fixture
+def records() -> list[dict[str, Any]]:
+ return [
+ {"amount": 28, "category": "A"},
+ {"amount": 55, "category": "B"},
+ {"amount": 43, "category": "C"},
+ {"amount": 91, "category": "D"},
+ {"amount": 81, "category": "E"},
+ {"amount": 53, "category": "F"},
+ {"amount": 19, "category": "G"},
+ {"amount": 87, "category": "H"},
+ ]
-VEGALITE_SPEC = {
- "$schema": "https://vega.github.io/schema/vega-lite/v5.json",
- "data": {"values": DATA_RECORDS},
- "description": "A simple bar chart with embedded data.",
- "encoding": {
- "x": {"field": "category", "type": "ordinal"},
- "y": {"field": "amount", "type": "quantitative"},
- },
- "mark": {"type": "bar"},
-}
+@pytest.fixture
+def vl_spec(records) -> dict[str, Any]:
+ return {
+ "$schema": "https://vega.github.io/schema/vega-lite/v5.json",
+ "data": {"values": records},
+ "description": "A simple bar chart with embedded data.",
+ "encoding": {
+ "x": {"field": "category", "type": "ordinal"},
+ "y": {"field": "amount", "type": "quantitative"},
+ },
+ "mark": {"type": "bar"},
+ }
+
+
+@pytest.fixture
+def ipshell(records) -> InteractiveShell:
+ from IPython.core.interactiveshell import InteractiveShell
+
+ shell = InteractiveShell.instance()
+ shell.run_cell("%load_ext altair")
+ shell.run_cell(
+ f"import pandas as pd\n"
+ f"table = pd.DataFrame.from_records({records})\n"
+ f"the_data = table"
+ )
+ return shell
-@pytest.mark.skipif(not IPYTHON_AVAILABLE, reason="requires ipython")
-def test_vegalite_magic_data_included():
- result = _ipshell.run_cell("%%vegalite\n" + json.dumps(VEGALITE_SPEC))
+@skip_requires_ipython
+def test_vegalite_magic_data_included(ipshell, vl_spec) -> None:
+ result = ipshell.run_cell("%%vegalite\n" + json.dumps(vl_spec))
assert isinstance(result.result, VegaLite)
- assert result.result.spec == VEGALITE_SPEC
+ assert result.result.spec == vl_spec
-@pytest.mark.skipif(not IPYTHON_AVAILABLE, reason="requires ipython")
-def test_vegalite_magic_json_flag():
- result = _ipshell.run_cell("%%vegalite --json\n" + json.dumps(VEGALITE_SPEC))
+@skip_requires_ipython
+def test_vegalite_magic_json_flag(ipshell, vl_spec) -> None:
+ result = ipshell.run_cell("%%vegalite --json\n" + json.dumps(vl_spec))
assert isinstance(result.result, VegaLite)
- assert result.result.spec == VEGALITE_SPEC
+ assert result.result.spec == vl_spec
-@pytest.mark.skipif(not IPYTHON_AVAILABLE, reason="requires ipython")
-def test_vegalite_magic_pandas_data():
- spec = {key: val for key, val in VEGALITE_SPEC.items() if key != "data"}
- result = _ipshell.run_cell("%%vegalite table\n" + json.dumps(spec))
+@skip_requires_ipython
+def test_vegalite_magic_pandas_data(ipshell, vl_spec) -> None:
+ spec = {key: val for key, val in vl_spec.items() if key != "data"}
+ result = ipshell.run_cell("%%vegalite table\n" + json.dumps(spec))
assert isinstance(result.result, VegaLite)
- assert result.result.spec == VEGALITE_SPEC
+ assert result.result.spec == vl_spec
diff --git a/tests/utils/test_compiler.py b/tests/utils/test_compiler.py
index fb5521175..49ee31506 100644
--- a/tests/utils/test_compiler.py
+++ b/tests/utils/test_compiler.py
@@ -29,7 +29,9 @@ def assert_is_vega_spec(vega_spec):
@skip_requires_vl_convert
def test_vegalite_compiler(chart):
vegalite_spec = chart.to_dict()
- vega_spec = vegalite_compilers.get()(vegalite_spec)
+ fn = vegalite_compilers.get()
+ assert fn is not None
+ vega_spec = fn(vegalite_spec)
assert_is_vega_spec(vega_spec)
diff --git a/tests/utils/test_core.py b/tests/utils/test_core.py
index d43f88dd8..95bed54c1 100644
--- a/tests/utils/test_core.py
+++ b/tests/utils/test_core.py
@@ -279,7 +279,7 @@ def channels_cached(channels) -> core._ChannelCache:
"""Previously ``_ChannelCache.from_channels``."""
cached = core._ChannelCache.__new__(core._ChannelCache)
cached.channel_to_name = {
- c: c._encoding_name
+ c: c._encoding_name # pyright: ignore[reportAttributeAccessIssue]
for c in channels.__dict__.values()
if isinstance(c, type)
and issubclass(c, alt.SchemaBase)
diff --git a/tests/utils/test_data.py b/tests/utils/test_data.py
index 30b5b7f8e..b4d16d3dd 100644
--- a/tests/utils/test_data.py
+++ b/tests/utils/test_data.py
@@ -100,6 +100,7 @@ def test_dataframe_to_json():
- make certain the filename is deterministic
- make certain the file contents match the data.
"""
+ filename = ""
data = _create_dataframe(10)
try:
result1 = _pipe(data, to_json)
@@ -107,7 +108,8 @@ def test_dataframe_to_json():
filename = result1["url"]
output = pd.read_json(filename)
finally:
- Path(filename).unlink()
+ if filename:
+ Path(filename).unlink()
assert result1 == result2
assert output.equals(data)
@@ -120,6 +122,7 @@ def test_dict_to_json():
- make certain the filename is deterministic
- make certain the file contents match the data.
"""
+ filename = ""
data = _create_data_with_values(10)
try:
result1 = _pipe(data, to_json)
@@ -127,7 +130,8 @@ def test_dict_to_json():
filename = result1["url"]
output = pd.read_json(filename).to_dict(orient="records")
finally:
- Path(filename).unlink()
+ if filename:
+ Path(filename).unlink()
assert result1 == result2
assert data == {"values": output}
@@ -141,6 +145,7 @@ def test_dataframe_to_csv(tp: type[Any]) -> None:
- make certain the filename is deterministic
- make certain the file contents match the data.
"""
+ filename: str = ""
data = _create_dataframe(10, tp=tp)
try:
result1 = _pipe(data, to_csv)
@@ -148,7 +153,8 @@ def test_dataframe_to_csv(tp: type[Any]) -> None:
filename = result1["url"]
output = tp(pd.read_csv(filename))
finally:
- Path(filename).unlink()
+ if filename:
+ Path(filename).unlink()
assert result1 == result2
assert output.equals(data)
@@ -161,6 +167,7 @@ def test_dict_to_csv():
- make certain the filename is deterministic
- make certain the file contents match the data.
"""
+ filename = ""
data = _create_data_with_values(10)
try:
result1 = _pipe(data, to_csv)
@@ -168,7 +175,8 @@ def test_dict_to_csv():
filename = result1["url"]
output = pd.read_csv(filename).to_dict(orient="records")
finally:
- Path(filename).unlink()
+ if filename:
+ Path(filename).unlink()
assert result1 == result2
assert data == {"values": output}
diff --git a/tests/utils/test_html.py b/tests/utils/test_html.py
index 1ce63445f..121215145 100644
--- a/tests/utils/test_html.py
+++ b/tests/utils/test_html.py
@@ -20,8 +20,8 @@ def spec():
def test_spec_to_html(requirejs, fullhtml, spec):
# We can't test that the html actually renders, but we'll test aspects of
# it to make certain that the keywords are respected.
- vegaembed_version = ("3.12",)
- vegalite_version = ("3.0",)
+ vegaembed_version = "3.12"
+ vegalite_version = "3.0"
vega_version = "4.0"
html = spec_to_html(
diff --git a/tests/utils/test_mimebundle.py b/tests/utils/test_mimebundle.py
index 2688ff79c..bdb0b3cea 100644
--- a/tests/utils/test_mimebundle.py
+++ b/tests/utils/test_mimebundle.py
@@ -1,3 +1,7 @@
+from __future__ import annotations
+
+from typing import Any
+
import pytest
import altair as alt
@@ -7,7 +11,7 @@
@pytest.fixture
-def vegalite_spec():
+def vegalite_spec() -> dict[str, Any]:
return {
"$schema": "https://vega.github.io/schema/vega-lite/v5.json",
"description": "A simple bar chart with embedded data.",
@@ -187,15 +191,15 @@ def test_spec_to_vegalite_mimebundle(vegalite_spec):
def test_spec_to_vega_mimebundle(vega_spec):
# ValueError: mode must be 'vega-lite'
with pytest.raises(ValueError): # noqa: PT011
- spec_to_mimebundle(
+ spec_to_mimebundle( # pyright: ignore[reportCallIssue]
spec=vega_spec,
- mode="vega",
+ mode="vega", # pyright: ignore[reportArgumentType]
format="vega",
vega_version=alt.VEGA_VERSION,
)
-def test_spec_to_json_mimebundle():
+def test_spec_to_json_mimebundle(vegalite_spec):
bundle = spec_to_mimebundle(
spec=vegalite_spec,
mode="vega-lite",
@@ -240,5 +244,6 @@ def test_vegafusion_chart_to_vega_mime_bundle(vegalite_spec):
chart = alt.Chart.from_dict(vegalite_spec)
with alt.data_transformers.enable("vegafusion"), alt.renderers.enable("json"):
bundle = chart._repr_mimebundle_()
+ assert isinstance(bundle, tuple)
vega_spec = bundle[0]["application/json"]
check_pre_transformed_vega_spec(vega_spec)
diff --git a/tests/utils/test_plugin_registry.py b/tests/utils/test_plugin_registry.py
index bd741d2eb..051d2cdcf 100644
--- a/tests/utils/test_plugin_registry.py
+++ b/tests/utils/test_plugin_registry.py
@@ -38,7 +38,9 @@ def test_plugin_registry():
plugins.enable("new_plugin")
assert plugins.names() == ["new_plugin"]
assert plugins.active == "new_plugin"
- assert plugins.get()(3) == 9
+ fn = plugins.get()
+ assert fn is not None
+ assert fn(3) == 9
assert repr(plugins) == (
"TypedCallableRegistry(active='new_plugin', " "registered=['new_plugin'])"
)
@@ -49,16 +51,22 @@ def test_plugin_registry_extra_options():
plugins.register("metadata_plugin", lambda x, p=2: x**p)
plugins.enable("metadata_plugin")
- assert plugins.get()(3) == 9
+ fn = plugins.get()
+ assert fn is not None
+ assert fn(3) == 9
plugins.enable("metadata_plugin", p=3)
assert plugins.active == "metadata_plugin"
- assert plugins.get()(3) == 27
+ fn = plugins.get()
+ assert fn is not None
+ assert fn(3) == 27
# enabling without changing name
plugins.enable(p=2)
assert plugins.active == "metadata_plugin"
- assert plugins.get()(3) == 9
+ fn = plugins.get()
+ assert fn is not None
+ assert fn(3) == 9
def test_plugin_registry_global_settings():
diff --git a/tests/utils/test_schemapi.py b/tests/utils/test_schemapi.py
index fa5e83aff..8772f8196 100644
--- a/tests/utils/test_schemapi.py
+++ b/tests/utils/test_schemapi.py
@@ -251,15 +251,15 @@ def test_simple_type():
def test_simple_array():
assert SimpleArray([4, 5, "six"]).to_dict() == [4, 5, "six"]
- assert SimpleArray.from_dict(list("abc")).to_dict() == list("abc")
+ assert SimpleArray.from_dict(list("abc")).to_dict() == list("abc") # pyright: ignore[reportArgumentType]
def test_definition_union():
- obj = DefinitionUnion.from_dict("A")
+ obj = DefinitionUnion.from_dict("A") # pyright: ignore[reportArgumentType]
assert isinstance(obj, Bar)
assert obj.to_dict() == "A"
- obj = DefinitionUnion.from_dict("B")
+ obj = DefinitionUnion.from_dict("B") # pyright: ignore[reportArgumentType]
assert isinstance(obj, Bar)
assert obj.to_dict() == "B"
@@ -445,7 +445,7 @@ def chart_error_example__hconcat():
alt.Chart(source)
.mark_text()
.encode(
- alt.Text("Horsepower:N", title={"text": "Horsepower", "align": "right"})
+ alt.Text("Horsepower:N", title={"text": "Horsepower", "align": "right"}) # pyright: ignore[reportArgumentType]
)
)
@@ -460,7 +460,7 @@ def chart_error_example__invalid_y_option_value_unknown_x_option():
.mark_bar()
.encode(
x=alt.X("variety", unknown=2),
- y=alt.Y("sum(yield)", stack="asdf"),
+ y=alt.Y("sum(yield)", stack="asdf"), # pyright: ignore[reportArgumentType]
)
)
@@ -472,7 +472,7 @@ def chart_error_example__invalid_y_option_value():
.mark_bar()
.encode(
x=alt.X("variety"),
- y=alt.Y("sum(yield)", stack="asdf"),
+ y=alt.Y("sum(yield)", stack="asdf"), # pyright: ignore[reportArgumentType]
)
)
@@ -486,7 +486,7 @@ def chart_error_example__invalid_y_option_value_with_condition():
.mark_bar()
.encode(
x="variety",
- y=alt.Y("sum(yield)", stack="asdf"),
+ y=alt.Y("sum(yield)", stack="asdf"), # pyright: ignore[reportArgumentType]
opacity=alt.condition("datum.yield > 0", alt.value(1), alt.value(0.2)),
)
)
@@ -494,7 +494,7 @@ def chart_error_example__invalid_y_option_value_with_condition():
def chart_error_example__invalid_timeunit_value():
# Error: Invalid value for Angle.timeUnit
- return alt.Chart().encode(alt.Angle().timeUnit("invalid_value"))
+ return alt.Chart().encode(alt.Angle().timeUnit("invalid_value")) # pyright: ignore[reportArgumentType]
def chart_error_example__invalid_sort_value():
@@ -507,13 +507,13 @@ def chart_error_example__invalid_bandposition_value():
return (
alt.Chart(data.cars())
.mark_text(align="right")
- .encode(alt.Text("Horsepower:N", bandPosition="4"))
+ .encode(alt.Text("Horsepower:N", bandPosition="4")) # pyright: ignore[reportArgumentType]
)
def chart_error_example__invalid_type():
# Error: Invalid value for type
- return alt.Chart().encode(alt.X(type="unknown"))
+ return alt.Chart().encode(alt.X(type="unknown")) # pyright: ignore[reportArgumentType]
def chart_error_example__additional_datum_argument():
@@ -539,21 +539,21 @@ def chart_error_example__wrong_tooltip_type_in_faceted_chart():
return (
alt.Chart(pd.DataFrame({"a": [1]}))
.mark_point()
- .encode(tooltip=[{"wrong"}])
+ .encode(tooltip=[{"wrong"}]) # pyright: ignore[reportArgumentType]
.facet()
)
def chart_error_example__wrong_tooltip_type_in_layered_chart():
# Error: Wrong data type to pass to tooltip
- return alt.layer(alt.Chart().mark_point().encode(tooltip=[{"wrong"}]))
+ return alt.layer(alt.Chart().mark_point().encode(tooltip=[{"wrong"}])) # pyright: ignore[reportArgumentType]
def chart_error_example__two_errors_in_layered_chart():
# Error 1: Wrong data type to pass to tooltip
# Error 2: `Color` has no parameter named 'invalidArgument'
return alt.layer(
- alt.Chart().mark_point().encode(tooltip=[{"wrong"}]),
+ alt.Chart().mark_point().encode(tooltip=[{"wrong"}]), # pyright: ignore[reportArgumentType]
alt.Chart().mark_line().encode(alt.Color(invalidArgument="unknown")),
)
@@ -595,7 +595,7 @@ def chart_error_example__two_errors_with_one_in_nested_layered_chart():
blue_bars = (
alt.Chart(source)
- .encode(alt.X("Day:O").scale(invalidOption=10), alt.Y("Value:Q"))
+ .encode(alt.X("Day:O").scale(invalidOption=10), alt.Y("Value:Q")) # pyright: ignore[reportCallIssue]
.mark_bar()
)
red_bars = (
@@ -635,7 +635,7 @@ def chart_error_example__four_errors_hide_fourth():
.mark_bar()
.encode(
x=alt.X("variety", unknown=2),
- y=alt.Y("sum(yield)", stack="asdf"),
+ y=alt.Y("sum(yield)", stack="asdf"), # pyright: ignore[reportArgumentType]
color=alt.Color("variety", another_unknown=2),
opacity=alt.Opacity("variety", fourth_error=1),
)
diff --git a/tests/utils/test_utils.py b/tests/utils/test_utils.py
index bb2d049c3..c3b329cf0 100644
--- a/tests/utils/test_utils.py
+++ b/tests/utils/test_utils.py
@@ -75,7 +75,7 @@ def test_sanitize_dataframe():
if str(df[col].dtype).startswith("datetime"):
# astype(datetime) introduces time-zone issues:
# to_datetime() does not.
- utc = isinstance(df[col].dtype, pd.core.dtypes.dtypes.DatetimeTZDtype)
+ utc = isinstance(df[col].dtype, pd.DatetimeTZDtype)
df2[col] = pd.to_datetime(df2[col], utc=utc)
else:
df2[col] = df2[col].astype(df[col].dtype)
diff --git a/tests/vegalite/v5/test_geo_interface.py b/tests/vegalite/v5/test_geo_interface.py
index 6a689a5d5..eca901e26 100644
--- a/tests/vegalite/v5/test_geo_interface.py
+++ b/tests/vegalite/v5/test_geo_interface.py
@@ -1,11 +1,20 @@
+from __future__ import annotations
+
+from typing import TYPE_CHECKING, Any
+
import pytest
import altair.vegalite.v5 as alt
+if TYPE_CHECKING:
+ from collections.abc import MutableMapping
+
+ from altair.utils.data import SupportsGeoInterface
-def geom_obj(geom):
+
+def geom_obj(geom: dict[str, Any]) -> SupportsGeoInterface:
class Geom:
- pass
+ __geo_interface__: MutableMapping[str, Any]
geom_obj = Geom()
geom_obj.__geo_interface__ = geom
@@ -13,8 +22,8 @@ class Geom:
# correct translation of Polygon geometry to Feature type
-def test_geo_interface_polygon_feature():
- geom = {
+def test_geo_interface_polygon_feature() -> None:
+ geom: dict[str, Any] = {
"coordinates": [[(0, 0), (0, 2), (2, 2), (2, 0), (0, 0)]],
"type": "Polygon",
}
@@ -26,7 +35,7 @@ def test_geo_interface_polygon_feature():
# merge geometry with empty properties dictionary
-def test_geo_interface_removal_empty_properties():
+def test_geo_interface_removal_empty_properties() -> None:
geom = {
"geometry": {
"coordinates": [
@@ -46,7 +55,7 @@ def test_geo_interface_removal_empty_properties():
# only register metadata in the properties member
-def test_geo_interface_register_foreign_member():
+def test_geo_interface_register_foreign_member() -> None:
geom = {
"geometry": {
"coordinates": [
@@ -68,7 +77,7 @@ def test_geo_interface_register_foreign_member():
# correct serializing of arrays and nested tuples
-def test_geo_interface_serializing_arrays_tuples():
+def test_geo_interface_serializing_arrays_tuples() -> None:
import array as arr
geom = {
@@ -96,7 +105,7 @@ def test_geo_interface_serializing_arrays_tuples():
# overwrite existing 'type' value in properties with `Feature`
-def test_geo_interface_reserved_members():
+def test_geo_interface_reserved_members() -> None:
geom = {
"geometry": {
"coordinates": [
@@ -116,7 +125,7 @@ def test_geo_interface_reserved_members():
# an empty FeatureCollection is valid
-def test_geo_interface_empty_feature_collection():
+def test_geo_interface_empty_feature_collection() -> None:
geom = {"type": "FeatureCollection", "features": []}
feat = geom_obj(geom)
@@ -126,7 +135,7 @@ def test_geo_interface_empty_feature_collection():
# Features in a FeatureCollection only keep properties and geometry
-def test_geo_interface_feature_collection():
+def test_geo_interface_feature_collection() -> None:
geom = {
"type": "FeatureCollection",
"features": [
@@ -170,7 +179,7 @@ def test_geo_interface_feature_collection():
# notic that the index value is registerd as a commonly used identifier
# with the name "id" (in this case 49). Similar to serialization of a
# pandas DataFrame is the index not included in the output
-def test_geo_interface_feature_collection_gdf():
+def test_geo_interface_feature_collection_gdf() -> None:
geom = {
"bbox": (19.89, -26.82, 29.43, -17.66),
"features": [
From 7b3d47975dfb0af5c935780bebdb6455eba9c09e Mon Sep 17 00:00:00 2001
From: Dan Redding <125183946+dangotbanned@users.noreply.github.com>
Date: Wed, 6 Nov 2024 05:59:33 +0000
Subject: [PATCH 03/42] feat: Generate docstrings for `mark_` methods (#3675)
---
altair/vegalite/v5/schema/mixins.py | 3611 +++++++--------------------
tools/generate_schema_wrapper.py | 44 +-
tools/schemapi/codegen.py | 17 +-
3 files changed, 888 insertions(+), 2784 deletions(-)
diff --git a/altair/vegalite/v5/schema/mixins.py b/altair/vegalite/v5/schema/mixins.py
index 990e193d5..f156a2aae 100644
--- a/altair/vegalite/v5/schema/mixins.py
+++ b/altair/vegalite/v5/schema/mixins.py
@@ -3,9 +3,9 @@
from __future__ import annotations
-from typing import TYPE_CHECKING, Literal
+from typing import TYPE_CHECKING, Any, Literal
-from altair.utils import Undefined, use_signature
+from altair.utils import SchemaBase, Undefined, use_signature
from . import core
@@ -20,2733 +20,479 @@
from typing import Self
else:
from typing_extensions import Self
- from altair import Parameter, SchemaBase
+ from altair import Parameter
from altair.typing import Optional
from ._typing import * # noqa: F403
-class MarkMethodMixin:
- """A mixin class that defines mark methods."""
-
- def mark_arc(
- self,
- align: Optional[Parameter | SchemaBase | Map | Align_T] = Undefined,
- angle: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- aria: Optional[bool | Parameter | SchemaBase | Map] = Undefined,
- ariaRole: Optional[str | Parameter | SchemaBase | Map] = Undefined,
- ariaRoleDescription: Optional[str | Parameter | SchemaBase | Map] = Undefined,
- aspect: Optional[bool | Parameter | SchemaBase | Map] = Undefined,
- bandSize: Optional[float] = Undefined,
- baseline: Optional[Parameter | SchemaBase | Map | TextBaseline_T] = Undefined,
- binSpacing: Optional[float] = Undefined,
- blend: Optional[Parameter | SchemaBase | Map | Blend_T] = Undefined,
- clip: Optional[bool | Parameter | SchemaBase | Map] = Undefined,
- color: Optional[str | Parameter | SchemaBase | Map | ColorName_T] = Undefined,
- continuousBandSize: Optional[float] = Undefined,
- cornerRadius: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- cornerRadiusBottomLeft: Optional[
- float | Parameter | SchemaBase | Map
- ] = Undefined,
- cornerRadiusBottomRight: Optional[
- float | Parameter | SchemaBase | Map
- ] = Undefined,
- cornerRadiusEnd: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- cornerRadiusTopLeft: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- cornerRadiusTopRight: Optional[
- float | Parameter | SchemaBase | Map
- ] = Undefined,
- cursor: Optional[Parameter | SchemaBase | Map | Cursor_T] = Undefined,
- description: Optional[str | Parameter | SchemaBase | Map] = Undefined,
- dir: Optional[Parameter | SchemaBase | Map | TextDirection_T] = Undefined,
- discreteBandSize: Optional[float | SchemaBase | Map] = Undefined,
- dx: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- dy: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- ellipsis: Optional[str | Parameter | SchemaBase | Map] = Undefined,
- fill: Optional[
- str | Parameter | SchemaBase | Map | ColorName_T | None
- ] = Undefined,
- fillOpacity: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- filled: Optional[bool] = Undefined,
- font: Optional[str | Parameter | SchemaBase | Map] = Undefined,
- fontSize: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- fontStyle: Optional[str | Parameter | SchemaBase | Map] = Undefined,
- fontWeight: Optional[Parameter | SchemaBase | Map | FontWeight_T] = Undefined,
- height: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- href: Optional[str | Parameter | SchemaBase | Map] = Undefined,
- innerRadius: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- interpolate: Optional[Parameter | SchemaBase | Map | Interpolate_T] = Undefined,
- invalid: Optional[SchemaBase | MarkInvalidDataMode_T | None] = Undefined,
- limit: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- line: Optional[bool | SchemaBase | Map] = Undefined,
- lineBreak: Optional[str | Parameter | SchemaBase | Map] = Undefined,
- lineHeight: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- minBandSize: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- opacity: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- order: Optional[bool | None] = Undefined,
- orient: Optional[SchemaBase | Orientation_T] = Undefined,
- outerRadius: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- padAngle: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- point: Optional[bool | SchemaBase | Literal["transparent"] | Map] = Undefined,
- radius: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- radius2: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- radius2Offset: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- radiusOffset: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- shape: Optional[str | Parameter | SchemaBase | Map] = Undefined,
- size: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- smooth: Optional[bool | Parameter | SchemaBase | Map] = Undefined,
- stroke: Optional[
- str | Parameter | SchemaBase | Map | ColorName_T | None
- ] = Undefined,
- strokeCap: Optional[Parameter | SchemaBase | Map | StrokeCap_T] = Undefined,
- strokeDash: Optional[
- Parameter | SchemaBase | Sequence[float] | Map
- ] = Undefined,
- strokeDashOffset: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- strokeJoin: Optional[Parameter | SchemaBase | Map | StrokeJoin_T] = Undefined,
- strokeMiterLimit: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- strokeOffset: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- strokeOpacity: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- strokeWidth: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- style: Optional[str | Sequence[str]] = Undefined,
- tension: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- text: Optional[str | Parameter | SchemaBase | Sequence[str] | Map] = Undefined,
- theta: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- theta2: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- theta2Offset: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- thetaOffset: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- thickness: Optional[float] = Undefined,
- timeUnitBandPosition: Optional[float] = Undefined,
- timeUnitBandSize: Optional[float] = Undefined,
- tooltip: Optional[
- str | bool | float | Parameter | SchemaBase | Map | None
- ] = Undefined,
- url: Optional[str | Parameter | SchemaBase | Map] = Undefined,
- width: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- x: Optional[
- float | Parameter | SchemaBase | Literal["width"] | Map
- ] = Undefined,
- x2: Optional[
- float | Parameter | SchemaBase | Literal["width"] | Map
- ] = Undefined,
- x2Offset: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- xOffset: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- y: Optional[
- float | Parameter | SchemaBase | Literal["height"] | Map
- ] = Undefined,
- y2: Optional[
- float | Parameter | SchemaBase | Literal["height"] | Map
- ] = Undefined,
- y2Offset: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- yOffset: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- **kwds,
- ) -> Self:
- """Set the chart's mark to 'arc' (see :class:`MarkDef`)."""
- kwds = dict(
- align=align,
- angle=angle,
- aria=aria,
- ariaRole=ariaRole,
- ariaRoleDescription=ariaRoleDescription,
- aspect=aspect,
- bandSize=bandSize,
- baseline=baseline,
- binSpacing=binSpacing,
- blend=blend,
- clip=clip,
- color=color,
- continuousBandSize=continuousBandSize,
- cornerRadius=cornerRadius,
- cornerRadiusBottomLeft=cornerRadiusBottomLeft,
- cornerRadiusBottomRight=cornerRadiusBottomRight,
- cornerRadiusEnd=cornerRadiusEnd,
- cornerRadiusTopLeft=cornerRadiusTopLeft,
- cornerRadiusTopRight=cornerRadiusTopRight,
- cursor=cursor,
- description=description,
- dir=dir,
- discreteBandSize=discreteBandSize,
- dx=dx,
- dy=dy,
- ellipsis=ellipsis,
- fill=fill,
- fillOpacity=fillOpacity,
- filled=filled,
- font=font,
- fontSize=fontSize,
- fontStyle=fontStyle,
- fontWeight=fontWeight,
- height=height,
- href=href,
- innerRadius=innerRadius,
- interpolate=interpolate,
- invalid=invalid,
- limit=limit,
- line=line,
- lineBreak=lineBreak,
- lineHeight=lineHeight,
- minBandSize=minBandSize,
- opacity=opacity,
- order=order,
- orient=orient,
- outerRadius=outerRadius,
- padAngle=padAngle,
- point=point,
- radius=radius,
- radius2=radius2,
- radius2Offset=radius2Offset,
- radiusOffset=radiusOffset,
- shape=shape,
- size=size,
- smooth=smooth,
- stroke=stroke,
- strokeCap=strokeCap,
- strokeDash=strokeDash,
- strokeDashOffset=strokeDashOffset,
- strokeJoin=strokeJoin,
- strokeMiterLimit=strokeMiterLimit,
- strokeOffset=strokeOffset,
- strokeOpacity=strokeOpacity,
- strokeWidth=strokeWidth,
- style=style,
- tension=tension,
- text=text,
- theta=theta,
- theta2=theta2,
- theta2Offset=theta2Offset,
- thetaOffset=thetaOffset,
- thickness=thickness,
- timeUnitBandPosition=timeUnitBandPosition,
- timeUnitBandSize=timeUnitBandSize,
- tooltip=tooltip,
- url=url,
- width=width,
- x=x,
- x2=x2,
- x2Offset=x2Offset,
- xOffset=xOffset,
- y=y,
- y2=y2,
- y2Offset=y2Offset,
- yOffset=yOffset,
- **kwds,
- )
- copy = self.copy(deep=False) # type: ignore[attr-defined]
- if any(val is not Undefined for val in kwds.values()):
- copy.mark = core.MarkDef(type="arc", **kwds)
- else:
- copy.mark = "arc"
- return copy
-
- def mark_area(
- self,
- align: Optional[Parameter | SchemaBase | Map | Align_T] = Undefined,
- angle: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- aria: Optional[bool | Parameter | SchemaBase | Map] = Undefined,
- ariaRole: Optional[str | Parameter | SchemaBase | Map] = Undefined,
- ariaRoleDescription: Optional[str | Parameter | SchemaBase | Map] = Undefined,
- aspect: Optional[bool | Parameter | SchemaBase | Map] = Undefined,
- bandSize: Optional[float] = Undefined,
- baseline: Optional[Parameter | SchemaBase | Map | TextBaseline_T] = Undefined,
- binSpacing: Optional[float] = Undefined,
- blend: Optional[Parameter | SchemaBase | Map | Blend_T] = Undefined,
- clip: Optional[bool | Parameter | SchemaBase | Map] = Undefined,
- color: Optional[str | Parameter | SchemaBase | Map | ColorName_T] = Undefined,
- continuousBandSize: Optional[float] = Undefined,
- cornerRadius: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- cornerRadiusBottomLeft: Optional[
- float | Parameter | SchemaBase | Map
- ] = Undefined,
- cornerRadiusBottomRight: Optional[
- float | Parameter | SchemaBase | Map
- ] = Undefined,
- cornerRadiusEnd: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- cornerRadiusTopLeft: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- cornerRadiusTopRight: Optional[
- float | Parameter | SchemaBase | Map
- ] = Undefined,
- cursor: Optional[Parameter | SchemaBase | Map | Cursor_T] = Undefined,
- description: Optional[str | Parameter | SchemaBase | Map] = Undefined,
- dir: Optional[Parameter | SchemaBase | Map | TextDirection_T] = Undefined,
- discreteBandSize: Optional[float | SchemaBase | Map] = Undefined,
- dx: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- dy: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- ellipsis: Optional[str | Parameter | SchemaBase | Map] = Undefined,
- fill: Optional[
- str | Parameter | SchemaBase | Map | ColorName_T | None
- ] = Undefined,
- fillOpacity: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- filled: Optional[bool] = Undefined,
- font: Optional[str | Parameter | SchemaBase | Map] = Undefined,
- fontSize: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- fontStyle: Optional[str | Parameter | SchemaBase | Map] = Undefined,
- fontWeight: Optional[Parameter | SchemaBase | Map | FontWeight_T] = Undefined,
- height: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- href: Optional[str | Parameter | SchemaBase | Map] = Undefined,
- innerRadius: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- interpolate: Optional[Parameter | SchemaBase | Map | Interpolate_T] = Undefined,
- invalid: Optional[SchemaBase | MarkInvalidDataMode_T | None] = Undefined,
- limit: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- line: Optional[bool | SchemaBase | Map] = Undefined,
- lineBreak: Optional[str | Parameter | SchemaBase | Map] = Undefined,
- lineHeight: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- minBandSize: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- opacity: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- order: Optional[bool | None] = Undefined,
- orient: Optional[SchemaBase | Orientation_T] = Undefined,
- outerRadius: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- padAngle: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- point: Optional[bool | SchemaBase | Literal["transparent"] | Map] = Undefined,
- radius: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- radius2: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- radius2Offset: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- radiusOffset: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- shape: Optional[str | Parameter | SchemaBase | Map] = Undefined,
- size: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- smooth: Optional[bool | Parameter | SchemaBase | Map] = Undefined,
- stroke: Optional[
- str | Parameter | SchemaBase | Map | ColorName_T | None
- ] = Undefined,
- strokeCap: Optional[Parameter | SchemaBase | Map | StrokeCap_T] = Undefined,
- strokeDash: Optional[
- Parameter | SchemaBase | Sequence[float] | Map
- ] = Undefined,
- strokeDashOffset: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- strokeJoin: Optional[Parameter | SchemaBase | Map | StrokeJoin_T] = Undefined,
- strokeMiterLimit: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- strokeOffset: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- strokeOpacity: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- strokeWidth: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- style: Optional[str | Sequence[str]] = Undefined,
- tension: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- text: Optional[str | Parameter | SchemaBase | Sequence[str] | Map] = Undefined,
- theta: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- theta2: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- theta2Offset: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- thetaOffset: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- thickness: Optional[float] = Undefined,
- timeUnitBandPosition: Optional[float] = Undefined,
- timeUnitBandSize: Optional[float] = Undefined,
- tooltip: Optional[
- str | bool | float | Parameter | SchemaBase | Map | None
- ] = Undefined,
- url: Optional[str | Parameter | SchemaBase | Map] = Undefined,
- width: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- x: Optional[
- float | Parameter | SchemaBase | Literal["width"] | Map
- ] = Undefined,
- x2: Optional[
- float | Parameter | SchemaBase | Literal["width"] | Map
- ] = Undefined,
- x2Offset: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- xOffset: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- y: Optional[
- float | Parameter | SchemaBase | Literal["height"] | Map
- ] = Undefined,
- y2: Optional[
- float | Parameter | SchemaBase | Literal["height"] | Map
- ] = Undefined,
- y2Offset: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- yOffset: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- **kwds,
- ) -> Self:
- """Set the chart's mark to 'area' (see :class:`MarkDef`)."""
- kwds = dict(
- align=align,
- angle=angle,
- aria=aria,
- ariaRole=ariaRole,
- ariaRoleDescription=ariaRoleDescription,
- aspect=aspect,
- bandSize=bandSize,
- baseline=baseline,
- binSpacing=binSpacing,
- blend=blend,
- clip=clip,
- color=color,
- continuousBandSize=continuousBandSize,
- cornerRadius=cornerRadius,
- cornerRadiusBottomLeft=cornerRadiusBottomLeft,
- cornerRadiusBottomRight=cornerRadiusBottomRight,
- cornerRadiusEnd=cornerRadiusEnd,
- cornerRadiusTopLeft=cornerRadiusTopLeft,
- cornerRadiusTopRight=cornerRadiusTopRight,
- cursor=cursor,
- description=description,
- dir=dir,
- discreteBandSize=discreteBandSize,
- dx=dx,
- dy=dy,
- ellipsis=ellipsis,
- fill=fill,
- fillOpacity=fillOpacity,
- filled=filled,
- font=font,
- fontSize=fontSize,
- fontStyle=fontStyle,
- fontWeight=fontWeight,
- height=height,
- href=href,
- innerRadius=innerRadius,
- interpolate=interpolate,
- invalid=invalid,
- limit=limit,
- line=line,
- lineBreak=lineBreak,
- lineHeight=lineHeight,
- minBandSize=minBandSize,
- opacity=opacity,
- order=order,
- orient=orient,
- outerRadius=outerRadius,
- padAngle=padAngle,
- point=point,
- radius=radius,
- radius2=radius2,
- radius2Offset=radius2Offset,
- radiusOffset=radiusOffset,
- shape=shape,
- size=size,
- smooth=smooth,
- stroke=stroke,
- strokeCap=strokeCap,
- strokeDash=strokeDash,
- strokeDashOffset=strokeDashOffset,
- strokeJoin=strokeJoin,
- strokeMiterLimit=strokeMiterLimit,
- strokeOffset=strokeOffset,
- strokeOpacity=strokeOpacity,
- strokeWidth=strokeWidth,
- style=style,
- tension=tension,
- text=text,
- theta=theta,
- theta2=theta2,
- theta2Offset=theta2Offset,
- thetaOffset=thetaOffset,
- thickness=thickness,
- timeUnitBandPosition=timeUnitBandPosition,
- timeUnitBandSize=timeUnitBandSize,
- tooltip=tooltip,
- url=url,
- width=width,
- x=x,
- x2=x2,
- x2Offset=x2Offset,
- xOffset=xOffset,
- y=y,
- y2=y2,
- y2Offset=y2Offset,
- yOffset=yOffset,
- **kwds,
- )
- copy = self.copy(deep=False) # type: ignore[attr-defined]
- if any(val is not Undefined for val in kwds.values()):
- copy.mark = core.MarkDef(type="area", **kwds)
- else:
- copy.mark = "area"
- return copy
-
- def mark_bar(
- self,
- align: Optional[Parameter | SchemaBase | Map | Align_T] = Undefined,
- angle: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- aria: Optional[bool | Parameter | SchemaBase | Map] = Undefined,
- ariaRole: Optional[str | Parameter | SchemaBase | Map] = Undefined,
- ariaRoleDescription: Optional[str | Parameter | SchemaBase | Map] = Undefined,
- aspect: Optional[bool | Parameter | SchemaBase | Map] = Undefined,
- bandSize: Optional[float] = Undefined,
- baseline: Optional[Parameter | SchemaBase | Map | TextBaseline_T] = Undefined,
- binSpacing: Optional[float] = Undefined,
- blend: Optional[Parameter | SchemaBase | Map | Blend_T] = Undefined,
- clip: Optional[bool | Parameter | SchemaBase | Map] = Undefined,
- color: Optional[str | Parameter | SchemaBase | Map | ColorName_T] = Undefined,
- continuousBandSize: Optional[float] = Undefined,
- cornerRadius: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- cornerRadiusBottomLeft: Optional[
- float | Parameter | SchemaBase | Map
- ] = Undefined,
- cornerRadiusBottomRight: Optional[
- float | Parameter | SchemaBase | Map
- ] = Undefined,
- cornerRadiusEnd: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- cornerRadiusTopLeft: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- cornerRadiusTopRight: Optional[
- float | Parameter | SchemaBase | Map
- ] = Undefined,
- cursor: Optional[Parameter | SchemaBase | Map | Cursor_T] = Undefined,
- description: Optional[str | Parameter | SchemaBase | Map] = Undefined,
- dir: Optional[Parameter | SchemaBase | Map | TextDirection_T] = Undefined,
- discreteBandSize: Optional[float | SchemaBase | Map] = Undefined,
- dx: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- dy: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- ellipsis: Optional[str | Parameter | SchemaBase | Map] = Undefined,
- fill: Optional[
- str | Parameter | SchemaBase | Map | ColorName_T | None
- ] = Undefined,
- fillOpacity: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- filled: Optional[bool] = Undefined,
- font: Optional[str | Parameter | SchemaBase | Map] = Undefined,
- fontSize: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- fontStyle: Optional[str | Parameter | SchemaBase | Map] = Undefined,
- fontWeight: Optional[Parameter | SchemaBase | Map | FontWeight_T] = Undefined,
- height: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- href: Optional[str | Parameter | SchemaBase | Map] = Undefined,
- innerRadius: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- interpolate: Optional[Parameter | SchemaBase | Map | Interpolate_T] = Undefined,
- invalid: Optional[SchemaBase | MarkInvalidDataMode_T | None] = Undefined,
- limit: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- line: Optional[bool | SchemaBase | Map] = Undefined,
- lineBreak: Optional[str | Parameter | SchemaBase | Map] = Undefined,
- lineHeight: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- minBandSize: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- opacity: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- order: Optional[bool | None] = Undefined,
- orient: Optional[SchemaBase | Orientation_T] = Undefined,
- outerRadius: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- padAngle: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- point: Optional[bool | SchemaBase | Literal["transparent"] | Map] = Undefined,
- radius: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- radius2: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- radius2Offset: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- radiusOffset: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- shape: Optional[str | Parameter | SchemaBase | Map] = Undefined,
- size: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- smooth: Optional[bool | Parameter | SchemaBase | Map] = Undefined,
- stroke: Optional[
- str | Parameter | SchemaBase | Map | ColorName_T | None
- ] = Undefined,
- strokeCap: Optional[Parameter | SchemaBase | Map | StrokeCap_T] = Undefined,
- strokeDash: Optional[
- Parameter | SchemaBase | Sequence[float] | Map
- ] = Undefined,
- strokeDashOffset: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- strokeJoin: Optional[Parameter | SchemaBase | Map | StrokeJoin_T] = Undefined,
- strokeMiterLimit: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- strokeOffset: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- strokeOpacity: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- strokeWidth: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- style: Optional[str | Sequence[str]] = Undefined,
- tension: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- text: Optional[str | Parameter | SchemaBase | Sequence[str] | Map] = Undefined,
- theta: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- theta2: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- theta2Offset: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- thetaOffset: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- thickness: Optional[float] = Undefined,
- timeUnitBandPosition: Optional[float] = Undefined,
- timeUnitBandSize: Optional[float] = Undefined,
- tooltip: Optional[
- str | bool | float | Parameter | SchemaBase | Map | None
- ] = Undefined,
- url: Optional[str | Parameter | SchemaBase | Map] = Undefined,
- width: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- x: Optional[
- float | Parameter | SchemaBase | Literal["width"] | Map
- ] = Undefined,
- x2: Optional[
- float | Parameter | SchemaBase | Literal["width"] | Map
- ] = Undefined,
- x2Offset: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- xOffset: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- y: Optional[
- float | Parameter | SchemaBase | Literal["height"] | Map
- ] = Undefined,
- y2: Optional[
- float | Parameter | SchemaBase | Literal["height"] | Map
- ] = Undefined,
- y2Offset: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- yOffset: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- **kwds,
- ) -> Self:
- """Set the chart's mark to 'bar' (see :class:`MarkDef`)."""
- kwds = dict(
- align=align,
- angle=angle,
- aria=aria,
- ariaRole=ariaRole,
- ariaRoleDescription=ariaRoleDescription,
- aspect=aspect,
- bandSize=bandSize,
- baseline=baseline,
- binSpacing=binSpacing,
- blend=blend,
- clip=clip,
- color=color,
- continuousBandSize=continuousBandSize,
- cornerRadius=cornerRadius,
- cornerRadiusBottomLeft=cornerRadiusBottomLeft,
- cornerRadiusBottomRight=cornerRadiusBottomRight,
- cornerRadiusEnd=cornerRadiusEnd,
- cornerRadiusTopLeft=cornerRadiusTopLeft,
- cornerRadiusTopRight=cornerRadiusTopRight,
- cursor=cursor,
- description=description,
- dir=dir,
- discreteBandSize=discreteBandSize,
- dx=dx,
- dy=dy,
- ellipsis=ellipsis,
- fill=fill,
- fillOpacity=fillOpacity,
- filled=filled,
- font=font,
- fontSize=fontSize,
- fontStyle=fontStyle,
- fontWeight=fontWeight,
- height=height,
- href=href,
- innerRadius=innerRadius,
- interpolate=interpolate,
- invalid=invalid,
- limit=limit,
- line=line,
- lineBreak=lineBreak,
- lineHeight=lineHeight,
- minBandSize=minBandSize,
- opacity=opacity,
- order=order,
- orient=orient,
- outerRadius=outerRadius,
- padAngle=padAngle,
- point=point,
- radius=radius,
- radius2=radius2,
- radius2Offset=radius2Offset,
- radiusOffset=radiusOffset,
- shape=shape,
- size=size,
- smooth=smooth,
- stroke=stroke,
- strokeCap=strokeCap,
- strokeDash=strokeDash,
- strokeDashOffset=strokeDashOffset,
- strokeJoin=strokeJoin,
- strokeMiterLimit=strokeMiterLimit,
- strokeOffset=strokeOffset,
- strokeOpacity=strokeOpacity,
- strokeWidth=strokeWidth,
- style=style,
- tension=tension,
- text=text,
- theta=theta,
- theta2=theta2,
- theta2Offset=theta2Offset,
- thetaOffset=thetaOffset,
- thickness=thickness,
- timeUnitBandPosition=timeUnitBandPosition,
- timeUnitBandSize=timeUnitBandSize,
- tooltip=tooltip,
- url=url,
- width=width,
- x=x,
- x2=x2,
- x2Offset=x2Offset,
- xOffset=xOffset,
- y=y,
- y2=y2,
- y2Offset=y2Offset,
- yOffset=yOffset,
- **kwds,
- )
- copy = self.copy(deep=False) # type: ignore[attr-defined]
- if any(val is not Undefined for val in kwds.values()):
- copy.mark = core.MarkDef(type="bar", **kwds)
- else:
- copy.mark = "bar"
- return copy
-
- def mark_image(
- self,
- align: Optional[Parameter | SchemaBase | Map | Align_T] = Undefined,
- angle: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- aria: Optional[bool | Parameter | SchemaBase | Map] = Undefined,
- ariaRole: Optional[str | Parameter | SchemaBase | Map] = Undefined,
- ariaRoleDescription: Optional[str | Parameter | SchemaBase | Map] = Undefined,
- aspect: Optional[bool | Parameter | SchemaBase | Map] = Undefined,
- bandSize: Optional[float] = Undefined,
- baseline: Optional[Parameter | SchemaBase | Map | TextBaseline_T] = Undefined,
- binSpacing: Optional[float] = Undefined,
- blend: Optional[Parameter | SchemaBase | Map | Blend_T] = Undefined,
- clip: Optional[bool | Parameter | SchemaBase | Map] = Undefined,
- color: Optional[str | Parameter | SchemaBase | Map | ColorName_T] = Undefined,
- continuousBandSize: Optional[float] = Undefined,
- cornerRadius: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- cornerRadiusBottomLeft: Optional[
- float | Parameter | SchemaBase | Map
- ] = Undefined,
- cornerRadiusBottomRight: Optional[
- float | Parameter | SchemaBase | Map
- ] = Undefined,
- cornerRadiusEnd: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- cornerRadiusTopLeft: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- cornerRadiusTopRight: Optional[
- float | Parameter | SchemaBase | Map
- ] = Undefined,
- cursor: Optional[Parameter | SchemaBase | Map | Cursor_T] = Undefined,
- description: Optional[str | Parameter | SchemaBase | Map] = Undefined,
- dir: Optional[Parameter | SchemaBase | Map | TextDirection_T] = Undefined,
- discreteBandSize: Optional[float | SchemaBase | Map] = Undefined,
- dx: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- dy: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- ellipsis: Optional[str | Parameter | SchemaBase | Map] = Undefined,
- fill: Optional[
- str | Parameter | SchemaBase | Map | ColorName_T | None
- ] = Undefined,
- fillOpacity: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- filled: Optional[bool] = Undefined,
- font: Optional[str | Parameter | SchemaBase | Map] = Undefined,
- fontSize: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- fontStyle: Optional[str | Parameter | SchemaBase | Map] = Undefined,
- fontWeight: Optional[Parameter | SchemaBase | Map | FontWeight_T] = Undefined,
- height: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- href: Optional[str | Parameter | SchemaBase | Map] = Undefined,
- innerRadius: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- interpolate: Optional[Parameter | SchemaBase | Map | Interpolate_T] = Undefined,
- invalid: Optional[SchemaBase | MarkInvalidDataMode_T | None] = Undefined,
- limit: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- line: Optional[bool | SchemaBase | Map] = Undefined,
- lineBreak: Optional[str | Parameter | SchemaBase | Map] = Undefined,
- lineHeight: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- minBandSize: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- opacity: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- order: Optional[bool | None] = Undefined,
- orient: Optional[SchemaBase | Orientation_T] = Undefined,
- outerRadius: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- padAngle: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- point: Optional[bool | SchemaBase | Literal["transparent"] | Map] = Undefined,
- radius: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- radius2: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- radius2Offset: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- radiusOffset: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- shape: Optional[str | Parameter | SchemaBase | Map] = Undefined,
- size: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- smooth: Optional[bool | Parameter | SchemaBase | Map] = Undefined,
- stroke: Optional[
- str | Parameter | SchemaBase | Map | ColorName_T | None
- ] = Undefined,
- strokeCap: Optional[Parameter | SchemaBase | Map | StrokeCap_T] = Undefined,
- strokeDash: Optional[
- Parameter | SchemaBase | Sequence[float] | Map
- ] = Undefined,
- strokeDashOffset: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- strokeJoin: Optional[Parameter | SchemaBase | Map | StrokeJoin_T] = Undefined,
- strokeMiterLimit: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- strokeOffset: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- strokeOpacity: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- strokeWidth: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- style: Optional[str | Sequence[str]] = Undefined,
- tension: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- text: Optional[str | Parameter | SchemaBase | Sequence[str] | Map] = Undefined,
- theta: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- theta2: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- theta2Offset: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- thetaOffset: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- thickness: Optional[float] = Undefined,
- timeUnitBandPosition: Optional[float] = Undefined,
- timeUnitBandSize: Optional[float] = Undefined,
- tooltip: Optional[
- str | bool | float | Parameter | SchemaBase | Map | None
- ] = Undefined,
- url: Optional[str | Parameter | SchemaBase | Map] = Undefined,
- width: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- x: Optional[
- float | Parameter | SchemaBase | Literal["width"] | Map
- ] = Undefined,
- x2: Optional[
- float | Parameter | SchemaBase | Literal["width"] | Map
- ] = Undefined,
- x2Offset: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- xOffset: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- y: Optional[
- float | Parameter | SchemaBase | Literal["height"] | Map
- ] = Undefined,
- y2: Optional[
- float | Parameter | SchemaBase | Literal["height"] | Map
- ] = Undefined,
- y2Offset: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- yOffset: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- **kwds,
- ) -> Self:
- """Set the chart's mark to 'image' (see :class:`MarkDef`)."""
- kwds = dict(
- align=align,
- angle=angle,
- aria=aria,
- ariaRole=ariaRole,
- ariaRoleDescription=ariaRoleDescription,
- aspect=aspect,
- bandSize=bandSize,
- baseline=baseline,
- binSpacing=binSpacing,
- blend=blend,
- clip=clip,
- color=color,
- continuousBandSize=continuousBandSize,
- cornerRadius=cornerRadius,
- cornerRadiusBottomLeft=cornerRadiusBottomLeft,
- cornerRadiusBottomRight=cornerRadiusBottomRight,
- cornerRadiusEnd=cornerRadiusEnd,
- cornerRadiusTopLeft=cornerRadiusTopLeft,
- cornerRadiusTopRight=cornerRadiusTopRight,
- cursor=cursor,
- description=description,
- dir=dir,
- discreteBandSize=discreteBandSize,
- dx=dx,
- dy=dy,
- ellipsis=ellipsis,
- fill=fill,
- fillOpacity=fillOpacity,
- filled=filled,
- font=font,
- fontSize=fontSize,
- fontStyle=fontStyle,
- fontWeight=fontWeight,
- height=height,
- href=href,
- innerRadius=innerRadius,
- interpolate=interpolate,
- invalid=invalid,
- limit=limit,
- line=line,
- lineBreak=lineBreak,
- lineHeight=lineHeight,
- minBandSize=minBandSize,
- opacity=opacity,
- order=order,
- orient=orient,
- outerRadius=outerRadius,
- padAngle=padAngle,
- point=point,
- radius=radius,
- radius2=radius2,
- radius2Offset=radius2Offset,
- radiusOffset=radiusOffset,
- shape=shape,
- size=size,
- smooth=smooth,
- stroke=stroke,
- strokeCap=strokeCap,
- strokeDash=strokeDash,
- strokeDashOffset=strokeDashOffset,
- strokeJoin=strokeJoin,
- strokeMiterLimit=strokeMiterLimit,
- strokeOffset=strokeOffset,
- strokeOpacity=strokeOpacity,
- strokeWidth=strokeWidth,
- style=style,
- tension=tension,
- text=text,
- theta=theta,
- theta2=theta2,
- theta2Offset=theta2Offset,
- thetaOffset=thetaOffset,
- thickness=thickness,
- timeUnitBandPosition=timeUnitBandPosition,
- timeUnitBandSize=timeUnitBandSize,
- tooltip=tooltip,
- url=url,
- width=width,
- x=x,
- x2=x2,
- x2Offset=x2Offset,
- xOffset=xOffset,
- y=y,
- y2=y2,
- y2Offset=y2Offset,
- yOffset=yOffset,
- **kwds,
- )
- copy = self.copy(deep=False) # type: ignore[attr-defined]
- if any(val is not Undefined for val in kwds.values()):
- copy.mark = core.MarkDef(type="image", **kwds)
- else:
- copy.mark = "image"
- return copy
-
- def mark_line(
- self,
- align: Optional[Parameter | SchemaBase | Map | Align_T] = Undefined,
- angle: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- aria: Optional[bool | Parameter | SchemaBase | Map] = Undefined,
- ariaRole: Optional[str | Parameter | SchemaBase | Map] = Undefined,
- ariaRoleDescription: Optional[str | Parameter | SchemaBase | Map] = Undefined,
- aspect: Optional[bool | Parameter | SchemaBase | Map] = Undefined,
- bandSize: Optional[float] = Undefined,
- baseline: Optional[Parameter | SchemaBase | Map | TextBaseline_T] = Undefined,
- binSpacing: Optional[float] = Undefined,
- blend: Optional[Parameter | SchemaBase | Map | Blend_T] = Undefined,
- clip: Optional[bool | Parameter | SchemaBase | Map] = Undefined,
- color: Optional[str | Parameter | SchemaBase | Map | ColorName_T] = Undefined,
- continuousBandSize: Optional[float] = Undefined,
- cornerRadius: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- cornerRadiusBottomLeft: Optional[
- float | Parameter | SchemaBase | Map
- ] = Undefined,
- cornerRadiusBottomRight: Optional[
- float | Parameter | SchemaBase | Map
- ] = Undefined,
- cornerRadiusEnd: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- cornerRadiusTopLeft: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- cornerRadiusTopRight: Optional[
- float | Parameter | SchemaBase | Map
- ] = Undefined,
- cursor: Optional[Parameter | SchemaBase | Map | Cursor_T] = Undefined,
- description: Optional[str | Parameter | SchemaBase | Map] = Undefined,
- dir: Optional[Parameter | SchemaBase | Map | TextDirection_T] = Undefined,
- discreteBandSize: Optional[float | SchemaBase | Map] = Undefined,
- dx: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- dy: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- ellipsis: Optional[str | Parameter | SchemaBase | Map] = Undefined,
- fill: Optional[
- str | Parameter | SchemaBase | Map | ColorName_T | None
- ] = Undefined,
- fillOpacity: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- filled: Optional[bool] = Undefined,
- font: Optional[str | Parameter | SchemaBase | Map] = Undefined,
- fontSize: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- fontStyle: Optional[str | Parameter | SchemaBase | Map] = Undefined,
- fontWeight: Optional[Parameter | SchemaBase | Map | FontWeight_T] = Undefined,
- height: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- href: Optional[str | Parameter | SchemaBase | Map] = Undefined,
- innerRadius: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- interpolate: Optional[Parameter | SchemaBase | Map | Interpolate_T] = Undefined,
- invalid: Optional[SchemaBase | MarkInvalidDataMode_T | None] = Undefined,
- limit: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- line: Optional[bool | SchemaBase | Map] = Undefined,
- lineBreak: Optional[str | Parameter | SchemaBase | Map] = Undefined,
- lineHeight: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- minBandSize: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- opacity: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- order: Optional[bool | None] = Undefined,
- orient: Optional[SchemaBase | Orientation_T] = Undefined,
- outerRadius: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- padAngle: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- point: Optional[bool | SchemaBase | Literal["transparent"] | Map] = Undefined,
- radius: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- radius2: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- radius2Offset: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- radiusOffset: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- shape: Optional[str | Parameter | SchemaBase | Map] = Undefined,
- size: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- smooth: Optional[bool | Parameter | SchemaBase | Map] = Undefined,
- stroke: Optional[
- str | Parameter | SchemaBase | Map | ColorName_T | None
- ] = Undefined,
- strokeCap: Optional[Parameter | SchemaBase | Map | StrokeCap_T] = Undefined,
- strokeDash: Optional[
- Parameter | SchemaBase | Sequence[float] | Map
- ] = Undefined,
- strokeDashOffset: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- strokeJoin: Optional[Parameter | SchemaBase | Map | StrokeJoin_T] = Undefined,
- strokeMiterLimit: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- strokeOffset: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- strokeOpacity: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- strokeWidth: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- style: Optional[str | Sequence[str]] = Undefined,
- tension: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- text: Optional[str | Parameter | SchemaBase | Sequence[str] | Map] = Undefined,
- theta: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- theta2: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- theta2Offset: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- thetaOffset: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- thickness: Optional[float] = Undefined,
- timeUnitBandPosition: Optional[float] = Undefined,
- timeUnitBandSize: Optional[float] = Undefined,
- tooltip: Optional[
- str | bool | float | Parameter | SchemaBase | Map | None
- ] = Undefined,
- url: Optional[str | Parameter | SchemaBase | Map] = Undefined,
- width: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- x: Optional[
- float | Parameter | SchemaBase | Literal["width"] | Map
- ] = Undefined,
- x2: Optional[
- float | Parameter | SchemaBase | Literal["width"] | Map
- ] = Undefined,
- x2Offset: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- xOffset: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- y: Optional[
- float | Parameter | SchemaBase | Literal["height"] | Map
- ] = Undefined,
- y2: Optional[
- float | Parameter | SchemaBase | Literal["height"] | Map
- ] = Undefined,
- y2Offset: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- yOffset: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- **kwds,
- ) -> Self:
- """Set the chart's mark to 'line' (see :class:`MarkDef`)."""
- kwds = dict(
- align=align,
- angle=angle,
- aria=aria,
- ariaRole=ariaRole,
- ariaRoleDescription=ariaRoleDescription,
- aspect=aspect,
- bandSize=bandSize,
- baseline=baseline,
- binSpacing=binSpacing,
- blend=blend,
- clip=clip,
- color=color,
- continuousBandSize=continuousBandSize,
- cornerRadius=cornerRadius,
- cornerRadiusBottomLeft=cornerRadiusBottomLeft,
- cornerRadiusBottomRight=cornerRadiusBottomRight,
- cornerRadiusEnd=cornerRadiusEnd,
- cornerRadiusTopLeft=cornerRadiusTopLeft,
- cornerRadiusTopRight=cornerRadiusTopRight,
- cursor=cursor,
- description=description,
- dir=dir,
- discreteBandSize=discreteBandSize,
- dx=dx,
- dy=dy,
- ellipsis=ellipsis,
- fill=fill,
- fillOpacity=fillOpacity,
- filled=filled,
- font=font,
- fontSize=fontSize,
- fontStyle=fontStyle,
- fontWeight=fontWeight,
- height=height,
- href=href,
- innerRadius=innerRadius,
- interpolate=interpolate,
- invalid=invalid,
- limit=limit,
- line=line,
- lineBreak=lineBreak,
- lineHeight=lineHeight,
- minBandSize=minBandSize,
- opacity=opacity,
- order=order,
- orient=orient,
- outerRadius=outerRadius,
- padAngle=padAngle,
- point=point,
- radius=radius,
- radius2=radius2,
- radius2Offset=radius2Offset,
- radiusOffset=radiusOffset,
- shape=shape,
- size=size,
- smooth=smooth,
- stroke=stroke,
- strokeCap=strokeCap,
- strokeDash=strokeDash,
- strokeDashOffset=strokeDashOffset,
- strokeJoin=strokeJoin,
- strokeMiterLimit=strokeMiterLimit,
- strokeOffset=strokeOffset,
- strokeOpacity=strokeOpacity,
- strokeWidth=strokeWidth,
- style=style,
- tension=tension,
- text=text,
- theta=theta,
- theta2=theta2,
- theta2Offset=theta2Offset,
- thetaOffset=thetaOffset,
- thickness=thickness,
- timeUnitBandPosition=timeUnitBandPosition,
- timeUnitBandSize=timeUnitBandSize,
- tooltip=tooltip,
- url=url,
- width=width,
- x=x,
- x2=x2,
- x2Offset=x2Offset,
- xOffset=xOffset,
- y=y,
- y2=y2,
- y2Offset=y2Offset,
- yOffset=yOffset,
- **kwds,
- )
- copy = self.copy(deep=False) # type: ignore[attr-defined]
- if any(val is not Undefined for val in kwds.values()):
- copy.mark = core.MarkDef(type="line", **kwds)
- else:
- copy.mark = "line"
- return copy
-
- def mark_point(
- self,
- align: Optional[Parameter | SchemaBase | Map | Align_T] = Undefined,
- angle: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- aria: Optional[bool | Parameter | SchemaBase | Map] = Undefined,
- ariaRole: Optional[str | Parameter | SchemaBase | Map] = Undefined,
- ariaRoleDescription: Optional[str | Parameter | SchemaBase | Map] = Undefined,
- aspect: Optional[bool | Parameter | SchemaBase | Map] = Undefined,
- bandSize: Optional[float] = Undefined,
- baseline: Optional[Parameter | SchemaBase | Map | TextBaseline_T] = Undefined,
- binSpacing: Optional[float] = Undefined,
- blend: Optional[Parameter | SchemaBase | Map | Blend_T] = Undefined,
- clip: Optional[bool | Parameter | SchemaBase | Map] = Undefined,
- color: Optional[str | Parameter | SchemaBase | Map | ColorName_T] = Undefined,
- continuousBandSize: Optional[float] = Undefined,
- cornerRadius: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- cornerRadiusBottomLeft: Optional[
- float | Parameter | SchemaBase | Map
- ] = Undefined,
- cornerRadiusBottomRight: Optional[
- float | Parameter | SchemaBase | Map
- ] = Undefined,
- cornerRadiusEnd: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- cornerRadiusTopLeft: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- cornerRadiusTopRight: Optional[
- float | Parameter | SchemaBase | Map
- ] = Undefined,
- cursor: Optional[Parameter | SchemaBase | Map | Cursor_T] = Undefined,
- description: Optional[str | Parameter | SchemaBase | Map] = Undefined,
- dir: Optional[Parameter | SchemaBase | Map | TextDirection_T] = Undefined,
- discreteBandSize: Optional[float | SchemaBase | Map] = Undefined,
- dx: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- dy: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- ellipsis: Optional[str | Parameter | SchemaBase | Map] = Undefined,
- fill: Optional[
- str | Parameter | SchemaBase | Map | ColorName_T | None
- ] = Undefined,
- fillOpacity: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- filled: Optional[bool] = Undefined,
- font: Optional[str | Parameter | SchemaBase | Map] = Undefined,
- fontSize: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- fontStyle: Optional[str | Parameter | SchemaBase | Map] = Undefined,
- fontWeight: Optional[Parameter | SchemaBase | Map | FontWeight_T] = Undefined,
- height: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- href: Optional[str | Parameter | SchemaBase | Map] = Undefined,
- innerRadius: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- interpolate: Optional[Parameter | SchemaBase | Map | Interpolate_T] = Undefined,
- invalid: Optional[SchemaBase | MarkInvalidDataMode_T | None] = Undefined,
- limit: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- line: Optional[bool | SchemaBase | Map] = Undefined,
- lineBreak: Optional[str | Parameter | SchemaBase | Map] = Undefined,
- lineHeight: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- minBandSize: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- opacity: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- order: Optional[bool | None] = Undefined,
- orient: Optional[SchemaBase | Orientation_T] = Undefined,
- outerRadius: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- padAngle: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- point: Optional[bool | SchemaBase | Literal["transparent"] | Map] = Undefined,
- radius: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- radius2: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- radius2Offset: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- radiusOffset: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- shape: Optional[str | Parameter | SchemaBase | Map] = Undefined,
- size: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- smooth: Optional[bool | Parameter | SchemaBase | Map] = Undefined,
- stroke: Optional[
- str | Parameter | SchemaBase | Map | ColorName_T | None
- ] = Undefined,
- strokeCap: Optional[Parameter | SchemaBase | Map | StrokeCap_T] = Undefined,
- strokeDash: Optional[
- Parameter | SchemaBase | Sequence[float] | Map
- ] = Undefined,
- strokeDashOffset: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- strokeJoin: Optional[Parameter | SchemaBase | Map | StrokeJoin_T] = Undefined,
- strokeMiterLimit: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- strokeOffset: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- strokeOpacity: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- strokeWidth: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- style: Optional[str | Sequence[str]] = Undefined,
- tension: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- text: Optional[str | Parameter | SchemaBase | Sequence[str] | Map] = Undefined,
- theta: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- theta2: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- theta2Offset: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- thetaOffset: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- thickness: Optional[float] = Undefined,
- timeUnitBandPosition: Optional[float] = Undefined,
- timeUnitBandSize: Optional[float] = Undefined,
- tooltip: Optional[
- str | bool | float | Parameter | SchemaBase | Map | None
- ] = Undefined,
- url: Optional[str | Parameter | SchemaBase | Map] = Undefined,
- width: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- x: Optional[
- float | Parameter | SchemaBase | Literal["width"] | Map
- ] = Undefined,
- x2: Optional[
- float | Parameter | SchemaBase | Literal["width"] | Map
- ] = Undefined,
- x2Offset: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- xOffset: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- y: Optional[
- float | Parameter | SchemaBase | Literal["height"] | Map
- ] = Undefined,
- y2: Optional[
- float | Parameter | SchemaBase | Literal["height"] | Map
- ] = Undefined,
- y2Offset: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- yOffset: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- **kwds,
- ) -> Self:
- """Set the chart's mark to 'point' (see :class:`MarkDef`)."""
- kwds = dict(
- align=align,
- angle=angle,
- aria=aria,
- ariaRole=ariaRole,
- ariaRoleDescription=ariaRoleDescription,
- aspect=aspect,
- bandSize=bandSize,
- baseline=baseline,
- binSpacing=binSpacing,
- blend=blend,
- clip=clip,
- color=color,
- continuousBandSize=continuousBandSize,
- cornerRadius=cornerRadius,
- cornerRadiusBottomLeft=cornerRadiusBottomLeft,
- cornerRadiusBottomRight=cornerRadiusBottomRight,
- cornerRadiusEnd=cornerRadiusEnd,
- cornerRadiusTopLeft=cornerRadiusTopLeft,
- cornerRadiusTopRight=cornerRadiusTopRight,
- cursor=cursor,
- description=description,
- dir=dir,
- discreteBandSize=discreteBandSize,
- dx=dx,
- dy=dy,
- ellipsis=ellipsis,
- fill=fill,
- fillOpacity=fillOpacity,
- filled=filled,
- font=font,
- fontSize=fontSize,
- fontStyle=fontStyle,
- fontWeight=fontWeight,
- height=height,
- href=href,
- innerRadius=innerRadius,
- interpolate=interpolate,
- invalid=invalid,
- limit=limit,
- line=line,
- lineBreak=lineBreak,
- lineHeight=lineHeight,
- minBandSize=minBandSize,
- opacity=opacity,
- order=order,
- orient=orient,
- outerRadius=outerRadius,
- padAngle=padAngle,
- point=point,
- radius=radius,
- radius2=radius2,
- radius2Offset=radius2Offset,
- radiusOffset=radiusOffset,
- shape=shape,
- size=size,
- smooth=smooth,
- stroke=stroke,
- strokeCap=strokeCap,
- strokeDash=strokeDash,
- strokeDashOffset=strokeDashOffset,
- strokeJoin=strokeJoin,
- strokeMiterLimit=strokeMiterLimit,
- strokeOffset=strokeOffset,
- strokeOpacity=strokeOpacity,
- strokeWidth=strokeWidth,
- style=style,
- tension=tension,
- text=text,
- theta=theta,
- theta2=theta2,
- theta2Offset=theta2Offset,
- thetaOffset=thetaOffset,
- thickness=thickness,
- timeUnitBandPosition=timeUnitBandPosition,
- timeUnitBandSize=timeUnitBandSize,
- tooltip=tooltip,
- url=url,
- width=width,
- x=x,
- x2=x2,
- x2Offset=x2Offset,
- xOffset=xOffset,
- y=y,
- y2=y2,
- y2Offset=y2Offset,
- yOffset=yOffset,
- **kwds,
- )
- copy = self.copy(deep=False) # type: ignore[attr-defined]
- if any(val is not Undefined for val in kwds.values()):
- copy.mark = core.MarkDef(type="point", **kwds)
- else:
- copy.mark = "point"
- return copy
-
- def mark_rect(
- self,
- align: Optional[Parameter | SchemaBase | Map | Align_T] = Undefined,
- angle: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- aria: Optional[bool | Parameter | SchemaBase | Map] = Undefined,
- ariaRole: Optional[str | Parameter | SchemaBase | Map] = Undefined,
- ariaRoleDescription: Optional[str | Parameter | SchemaBase | Map] = Undefined,
- aspect: Optional[bool | Parameter | SchemaBase | Map] = Undefined,
- bandSize: Optional[float] = Undefined,
- baseline: Optional[Parameter | SchemaBase | Map | TextBaseline_T] = Undefined,
- binSpacing: Optional[float] = Undefined,
- blend: Optional[Parameter | SchemaBase | Map | Blend_T] = Undefined,
- clip: Optional[bool | Parameter | SchemaBase | Map] = Undefined,
- color: Optional[str | Parameter | SchemaBase | Map | ColorName_T] = Undefined,
- continuousBandSize: Optional[float] = Undefined,
- cornerRadius: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- cornerRadiusBottomLeft: Optional[
- float | Parameter | SchemaBase | Map
- ] = Undefined,
- cornerRadiusBottomRight: Optional[
- float | Parameter | SchemaBase | Map
- ] = Undefined,
- cornerRadiusEnd: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- cornerRadiusTopLeft: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- cornerRadiusTopRight: Optional[
- float | Parameter | SchemaBase | Map
- ] = Undefined,
- cursor: Optional[Parameter | SchemaBase | Map | Cursor_T] = Undefined,
- description: Optional[str | Parameter | SchemaBase | Map] = Undefined,
- dir: Optional[Parameter | SchemaBase | Map | TextDirection_T] = Undefined,
- discreteBandSize: Optional[float | SchemaBase | Map] = Undefined,
- dx: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- dy: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- ellipsis: Optional[str | Parameter | SchemaBase | Map] = Undefined,
- fill: Optional[
- str | Parameter | SchemaBase | Map | ColorName_T | None
- ] = Undefined,
- fillOpacity: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- filled: Optional[bool] = Undefined,
- font: Optional[str | Parameter | SchemaBase | Map] = Undefined,
- fontSize: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- fontStyle: Optional[str | Parameter | SchemaBase | Map] = Undefined,
- fontWeight: Optional[Parameter | SchemaBase | Map | FontWeight_T] = Undefined,
- height: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- href: Optional[str | Parameter | SchemaBase | Map] = Undefined,
- innerRadius: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- interpolate: Optional[Parameter | SchemaBase | Map | Interpolate_T] = Undefined,
- invalid: Optional[SchemaBase | MarkInvalidDataMode_T | None] = Undefined,
- limit: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- line: Optional[bool | SchemaBase | Map] = Undefined,
- lineBreak: Optional[str | Parameter | SchemaBase | Map] = Undefined,
- lineHeight: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- minBandSize: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- opacity: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- order: Optional[bool | None] = Undefined,
- orient: Optional[SchemaBase | Orientation_T] = Undefined,
- outerRadius: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- padAngle: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- point: Optional[bool | SchemaBase | Literal["transparent"] | Map] = Undefined,
- radius: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- radius2: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- radius2Offset: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- radiusOffset: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- shape: Optional[str | Parameter | SchemaBase | Map] = Undefined,
- size: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- smooth: Optional[bool | Parameter | SchemaBase | Map] = Undefined,
- stroke: Optional[
- str | Parameter | SchemaBase | Map | ColorName_T | None
- ] = Undefined,
- strokeCap: Optional[Parameter | SchemaBase | Map | StrokeCap_T] = Undefined,
- strokeDash: Optional[
- Parameter | SchemaBase | Sequence[float] | Map
- ] = Undefined,
- strokeDashOffset: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- strokeJoin: Optional[Parameter | SchemaBase | Map | StrokeJoin_T] = Undefined,
- strokeMiterLimit: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- strokeOffset: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- strokeOpacity: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- strokeWidth: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- style: Optional[str | Sequence[str]] = Undefined,
- tension: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- text: Optional[str | Parameter | SchemaBase | Sequence[str] | Map] = Undefined,
- theta: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- theta2: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- theta2Offset: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- thetaOffset: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- thickness: Optional[float] = Undefined,
- timeUnitBandPosition: Optional[float] = Undefined,
- timeUnitBandSize: Optional[float] = Undefined,
- tooltip: Optional[
- str | bool | float | Parameter | SchemaBase | Map | None
- ] = Undefined,
- url: Optional[str | Parameter | SchemaBase | Map] = Undefined,
- width: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- x: Optional[
- float | Parameter | SchemaBase | Literal["width"] | Map
- ] = Undefined,
- x2: Optional[
- float | Parameter | SchemaBase | Literal["width"] | Map
- ] = Undefined,
- x2Offset: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- xOffset: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- y: Optional[
- float | Parameter | SchemaBase | Literal["height"] | Map
- ] = Undefined,
- y2: Optional[
- float | Parameter | SchemaBase | Literal["height"] | Map
- ] = Undefined,
- y2Offset: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- yOffset: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- **kwds,
- ) -> Self:
- """Set the chart's mark to 'rect' (see :class:`MarkDef`)."""
- kwds = dict(
- align=align,
- angle=angle,
- aria=aria,
- ariaRole=ariaRole,
- ariaRoleDescription=ariaRoleDescription,
- aspect=aspect,
- bandSize=bandSize,
- baseline=baseline,
- binSpacing=binSpacing,
- blend=blend,
- clip=clip,
- color=color,
- continuousBandSize=continuousBandSize,
- cornerRadius=cornerRadius,
- cornerRadiusBottomLeft=cornerRadiusBottomLeft,
- cornerRadiusBottomRight=cornerRadiusBottomRight,
- cornerRadiusEnd=cornerRadiusEnd,
- cornerRadiusTopLeft=cornerRadiusTopLeft,
- cornerRadiusTopRight=cornerRadiusTopRight,
- cursor=cursor,
- description=description,
- dir=dir,
- discreteBandSize=discreteBandSize,
- dx=dx,
- dy=dy,
- ellipsis=ellipsis,
- fill=fill,
- fillOpacity=fillOpacity,
- filled=filled,
- font=font,
- fontSize=fontSize,
- fontStyle=fontStyle,
- fontWeight=fontWeight,
- height=height,
- href=href,
- innerRadius=innerRadius,
- interpolate=interpolate,
- invalid=invalid,
- limit=limit,
- line=line,
- lineBreak=lineBreak,
- lineHeight=lineHeight,
- minBandSize=minBandSize,
- opacity=opacity,
- order=order,
- orient=orient,
- outerRadius=outerRadius,
- padAngle=padAngle,
- point=point,
- radius=radius,
- radius2=radius2,
- radius2Offset=radius2Offset,
- radiusOffset=radiusOffset,
- shape=shape,
- size=size,
- smooth=smooth,
- stroke=stroke,
- strokeCap=strokeCap,
- strokeDash=strokeDash,
- strokeDashOffset=strokeDashOffset,
- strokeJoin=strokeJoin,
- strokeMiterLimit=strokeMiterLimit,
- strokeOffset=strokeOffset,
- strokeOpacity=strokeOpacity,
- strokeWidth=strokeWidth,
- style=style,
- tension=tension,
- text=text,
- theta=theta,
- theta2=theta2,
- theta2Offset=theta2Offset,
- thetaOffset=thetaOffset,
- thickness=thickness,
- timeUnitBandPosition=timeUnitBandPosition,
- timeUnitBandSize=timeUnitBandSize,
- tooltip=tooltip,
- url=url,
- width=width,
- x=x,
- x2=x2,
- x2Offset=x2Offset,
- xOffset=xOffset,
- y=y,
- y2=y2,
- y2Offset=y2Offset,
- yOffset=yOffset,
- **kwds,
- )
- copy = self.copy(deep=False) # type: ignore[attr-defined]
- if any(val is not Undefined for val in kwds.values()):
- copy.mark = core.MarkDef(type="rect", **kwds)
- else:
- copy.mark = "rect"
- return copy
-
- def mark_rule(
- self,
- align: Optional[Parameter | SchemaBase | Map | Align_T] = Undefined,
- angle: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- aria: Optional[bool | Parameter | SchemaBase | Map] = Undefined,
- ariaRole: Optional[str | Parameter | SchemaBase | Map] = Undefined,
- ariaRoleDescription: Optional[str | Parameter | SchemaBase | Map] = Undefined,
- aspect: Optional[bool | Parameter | SchemaBase | Map] = Undefined,
- bandSize: Optional[float] = Undefined,
- baseline: Optional[Parameter | SchemaBase | Map | TextBaseline_T] = Undefined,
- binSpacing: Optional[float] = Undefined,
- blend: Optional[Parameter | SchemaBase | Map | Blend_T] = Undefined,
- clip: Optional[bool | Parameter | SchemaBase | Map] = Undefined,
- color: Optional[str | Parameter | SchemaBase | Map | ColorName_T] = Undefined,
- continuousBandSize: Optional[float] = Undefined,
- cornerRadius: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- cornerRadiusBottomLeft: Optional[
- float | Parameter | SchemaBase | Map
- ] = Undefined,
- cornerRadiusBottomRight: Optional[
- float | Parameter | SchemaBase | Map
- ] = Undefined,
- cornerRadiusEnd: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- cornerRadiusTopLeft: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- cornerRadiusTopRight: Optional[
- float | Parameter | SchemaBase | Map
- ] = Undefined,
- cursor: Optional[Parameter | SchemaBase | Map | Cursor_T] = Undefined,
- description: Optional[str | Parameter | SchemaBase | Map] = Undefined,
- dir: Optional[Parameter | SchemaBase | Map | TextDirection_T] = Undefined,
- discreteBandSize: Optional[float | SchemaBase | Map] = Undefined,
- dx: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- dy: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- ellipsis: Optional[str | Parameter | SchemaBase | Map] = Undefined,
- fill: Optional[
- str | Parameter | SchemaBase | Map | ColorName_T | None
- ] = Undefined,
- fillOpacity: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- filled: Optional[bool] = Undefined,
- font: Optional[str | Parameter | SchemaBase | Map] = Undefined,
- fontSize: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- fontStyle: Optional[str | Parameter | SchemaBase | Map] = Undefined,
- fontWeight: Optional[Parameter | SchemaBase | Map | FontWeight_T] = Undefined,
- height: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- href: Optional[str | Parameter | SchemaBase | Map] = Undefined,
- innerRadius: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- interpolate: Optional[Parameter | SchemaBase | Map | Interpolate_T] = Undefined,
- invalid: Optional[SchemaBase | MarkInvalidDataMode_T | None] = Undefined,
- limit: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- line: Optional[bool | SchemaBase | Map] = Undefined,
- lineBreak: Optional[str | Parameter | SchemaBase | Map] = Undefined,
- lineHeight: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- minBandSize: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- opacity: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- order: Optional[bool | None] = Undefined,
- orient: Optional[SchemaBase | Orientation_T] = Undefined,
- outerRadius: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- padAngle: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- point: Optional[bool | SchemaBase | Literal["transparent"] | Map] = Undefined,
- radius: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- radius2: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- radius2Offset: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- radiusOffset: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- shape: Optional[str | Parameter | SchemaBase | Map] = Undefined,
- size: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- smooth: Optional[bool | Parameter | SchemaBase | Map] = Undefined,
- stroke: Optional[
- str | Parameter | SchemaBase | Map | ColorName_T | None
- ] = Undefined,
- strokeCap: Optional[Parameter | SchemaBase | Map | StrokeCap_T] = Undefined,
- strokeDash: Optional[
- Parameter | SchemaBase | Sequence[float] | Map
- ] = Undefined,
- strokeDashOffset: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- strokeJoin: Optional[Parameter | SchemaBase | Map | StrokeJoin_T] = Undefined,
- strokeMiterLimit: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- strokeOffset: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- strokeOpacity: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- strokeWidth: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- style: Optional[str | Sequence[str]] = Undefined,
- tension: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- text: Optional[str | Parameter | SchemaBase | Sequence[str] | Map] = Undefined,
- theta: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- theta2: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- theta2Offset: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- thetaOffset: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- thickness: Optional[float] = Undefined,
- timeUnitBandPosition: Optional[float] = Undefined,
- timeUnitBandSize: Optional[float] = Undefined,
- tooltip: Optional[
- str | bool | float | Parameter | SchemaBase | Map | None
- ] = Undefined,
- url: Optional[str | Parameter | SchemaBase | Map] = Undefined,
- width: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- x: Optional[
- float | Parameter | SchemaBase | Literal["width"] | Map
- ] = Undefined,
- x2: Optional[
- float | Parameter | SchemaBase | Literal["width"] | Map
- ] = Undefined,
- x2Offset: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- xOffset: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- y: Optional[
- float | Parameter | SchemaBase | Literal["height"] | Map
- ] = Undefined,
- y2: Optional[
- float | Parameter | SchemaBase | Literal["height"] | Map
- ] = Undefined,
- y2Offset: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- yOffset: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- **kwds,
- ) -> Self:
- """Set the chart's mark to 'rule' (see :class:`MarkDef`)."""
- kwds = dict(
- align=align,
- angle=angle,
- aria=aria,
- ariaRole=ariaRole,
- ariaRoleDescription=ariaRoleDescription,
- aspect=aspect,
- bandSize=bandSize,
- baseline=baseline,
- binSpacing=binSpacing,
- blend=blend,
- clip=clip,
- color=color,
- continuousBandSize=continuousBandSize,
- cornerRadius=cornerRadius,
- cornerRadiusBottomLeft=cornerRadiusBottomLeft,
- cornerRadiusBottomRight=cornerRadiusBottomRight,
- cornerRadiusEnd=cornerRadiusEnd,
- cornerRadiusTopLeft=cornerRadiusTopLeft,
- cornerRadiusTopRight=cornerRadiusTopRight,
- cursor=cursor,
- description=description,
- dir=dir,
- discreteBandSize=discreteBandSize,
- dx=dx,
- dy=dy,
- ellipsis=ellipsis,
- fill=fill,
- fillOpacity=fillOpacity,
- filled=filled,
- font=font,
- fontSize=fontSize,
- fontStyle=fontStyle,
- fontWeight=fontWeight,
- height=height,
- href=href,
- innerRadius=innerRadius,
- interpolate=interpolate,
- invalid=invalid,
- limit=limit,
- line=line,
- lineBreak=lineBreak,
- lineHeight=lineHeight,
- minBandSize=minBandSize,
- opacity=opacity,
- order=order,
- orient=orient,
- outerRadius=outerRadius,
- padAngle=padAngle,
- point=point,
- radius=radius,
- radius2=radius2,
- radius2Offset=radius2Offset,
- radiusOffset=radiusOffset,
- shape=shape,
- size=size,
- smooth=smooth,
- stroke=stroke,
- strokeCap=strokeCap,
- strokeDash=strokeDash,
- strokeDashOffset=strokeDashOffset,
- strokeJoin=strokeJoin,
- strokeMiterLimit=strokeMiterLimit,
- strokeOffset=strokeOffset,
- strokeOpacity=strokeOpacity,
- strokeWidth=strokeWidth,
- style=style,
- tension=tension,
- text=text,
- theta=theta,
- theta2=theta2,
- theta2Offset=theta2Offset,
- thetaOffset=thetaOffset,
- thickness=thickness,
- timeUnitBandPosition=timeUnitBandPosition,
- timeUnitBandSize=timeUnitBandSize,
- tooltip=tooltip,
- url=url,
- width=width,
- x=x,
- x2=x2,
- x2Offset=x2Offset,
- xOffset=xOffset,
- y=y,
- y2=y2,
- y2Offset=y2Offset,
- yOffset=yOffset,
- **kwds,
- )
- copy = self.copy(deep=False) # type: ignore[attr-defined]
- if any(val is not Undefined for val in kwds.values()):
- copy.mark = core.MarkDef(type="rule", **kwds)
- else:
- copy.mark = "rule"
- return copy
-
- def mark_text(
- self,
- align: Optional[Parameter | SchemaBase | Map | Align_T] = Undefined,
- angle: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- aria: Optional[bool | Parameter | SchemaBase | Map] = Undefined,
- ariaRole: Optional[str | Parameter | SchemaBase | Map] = Undefined,
- ariaRoleDescription: Optional[str | Parameter | SchemaBase | Map] = Undefined,
- aspect: Optional[bool | Parameter | SchemaBase | Map] = Undefined,
- bandSize: Optional[float] = Undefined,
- baseline: Optional[Parameter | SchemaBase | Map | TextBaseline_T] = Undefined,
- binSpacing: Optional[float] = Undefined,
- blend: Optional[Parameter | SchemaBase | Map | Blend_T] = Undefined,
- clip: Optional[bool | Parameter | SchemaBase | Map] = Undefined,
- color: Optional[str | Parameter | SchemaBase | Map | ColorName_T] = Undefined,
- continuousBandSize: Optional[float] = Undefined,
- cornerRadius: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- cornerRadiusBottomLeft: Optional[
- float | Parameter | SchemaBase | Map
- ] = Undefined,
- cornerRadiusBottomRight: Optional[
- float | Parameter | SchemaBase | Map
- ] = Undefined,
- cornerRadiusEnd: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- cornerRadiusTopLeft: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- cornerRadiusTopRight: Optional[
- float | Parameter | SchemaBase | Map
- ] = Undefined,
- cursor: Optional[Parameter | SchemaBase | Map | Cursor_T] = Undefined,
- description: Optional[str | Parameter | SchemaBase | Map] = Undefined,
- dir: Optional[Parameter | SchemaBase | Map | TextDirection_T] = Undefined,
- discreteBandSize: Optional[float | SchemaBase | Map] = Undefined,
- dx: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- dy: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- ellipsis: Optional[str | Parameter | SchemaBase | Map] = Undefined,
- fill: Optional[
- str | Parameter | SchemaBase | Map | ColorName_T | None
- ] = Undefined,
- fillOpacity: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- filled: Optional[bool] = Undefined,
- font: Optional[str | Parameter | SchemaBase | Map] = Undefined,
- fontSize: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- fontStyle: Optional[str | Parameter | SchemaBase | Map] = Undefined,
- fontWeight: Optional[Parameter | SchemaBase | Map | FontWeight_T] = Undefined,
- height: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- href: Optional[str | Parameter | SchemaBase | Map] = Undefined,
- innerRadius: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- interpolate: Optional[Parameter | SchemaBase | Map | Interpolate_T] = Undefined,
- invalid: Optional[SchemaBase | MarkInvalidDataMode_T | None] = Undefined,
- limit: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- line: Optional[bool | SchemaBase | Map] = Undefined,
- lineBreak: Optional[str | Parameter | SchemaBase | Map] = Undefined,
- lineHeight: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- minBandSize: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- opacity: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- order: Optional[bool | None] = Undefined,
- orient: Optional[SchemaBase | Orientation_T] = Undefined,
- outerRadius: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- padAngle: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- point: Optional[bool | SchemaBase | Literal["transparent"] | Map] = Undefined,
- radius: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- radius2: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- radius2Offset: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- radiusOffset: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- shape: Optional[str | Parameter | SchemaBase | Map] = Undefined,
- size: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- smooth: Optional[bool | Parameter | SchemaBase | Map] = Undefined,
- stroke: Optional[
- str | Parameter | SchemaBase | Map | ColorName_T | None
- ] = Undefined,
- strokeCap: Optional[Parameter | SchemaBase | Map | StrokeCap_T] = Undefined,
- strokeDash: Optional[
- Parameter | SchemaBase | Sequence[float] | Map
- ] = Undefined,
- strokeDashOffset: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- strokeJoin: Optional[Parameter | SchemaBase | Map | StrokeJoin_T] = Undefined,
- strokeMiterLimit: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- strokeOffset: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- strokeOpacity: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- strokeWidth: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- style: Optional[str | Sequence[str]] = Undefined,
- tension: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- text: Optional[str | Parameter | SchemaBase | Sequence[str] | Map] = Undefined,
- theta: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- theta2: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- theta2Offset: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- thetaOffset: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- thickness: Optional[float] = Undefined,
- timeUnitBandPosition: Optional[float] = Undefined,
- timeUnitBandSize: Optional[float] = Undefined,
- tooltip: Optional[
- str | bool | float | Parameter | SchemaBase | Map | None
- ] = Undefined,
- url: Optional[str | Parameter | SchemaBase | Map] = Undefined,
- width: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- x: Optional[
- float | Parameter | SchemaBase | Literal["width"] | Map
- ] = Undefined,
- x2: Optional[
- float | Parameter | SchemaBase | Literal["width"] | Map
- ] = Undefined,
- x2Offset: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- xOffset: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- y: Optional[
- float | Parameter | SchemaBase | Literal["height"] | Map
- ] = Undefined,
- y2: Optional[
- float | Parameter | SchemaBase | Literal["height"] | Map
- ] = Undefined,
- y2Offset: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- yOffset: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- **kwds,
- ) -> Self:
- """Set the chart's mark to 'text' (see :class:`MarkDef`)."""
- kwds = dict(
- align=align,
- angle=angle,
- aria=aria,
- ariaRole=ariaRole,
- ariaRoleDescription=ariaRoleDescription,
- aspect=aspect,
- bandSize=bandSize,
- baseline=baseline,
- binSpacing=binSpacing,
- blend=blend,
- clip=clip,
- color=color,
- continuousBandSize=continuousBandSize,
- cornerRadius=cornerRadius,
- cornerRadiusBottomLeft=cornerRadiusBottomLeft,
- cornerRadiusBottomRight=cornerRadiusBottomRight,
- cornerRadiusEnd=cornerRadiusEnd,
- cornerRadiusTopLeft=cornerRadiusTopLeft,
- cornerRadiusTopRight=cornerRadiusTopRight,
- cursor=cursor,
- description=description,
- dir=dir,
- discreteBandSize=discreteBandSize,
- dx=dx,
- dy=dy,
- ellipsis=ellipsis,
- fill=fill,
- fillOpacity=fillOpacity,
- filled=filled,
- font=font,
- fontSize=fontSize,
- fontStyle=fontStyle,
- fontWeight=fontWeight,
- height=height,
- href=href,
- innerRadius=innerRadius,
- interpolate=interpolate,
- invalid=invalid,
- limit=limit,
- line=line,
- lineBreak=lineBreak,
- lineHeight=lineHeight,
- minBandSize=minBandSize,
- opacity=opacity,
- order=order,
- orient=orient,
- outerRadius=outerRadius,
- padAngle=padAngle,
- point=point,
- radius=radius,
- radius2=radius2,
- radius2Offset=radius2Offset,
- radiusOffset=radiusOffset,
- shape=shape,
- size=size,
- smooth=smooth,
- stroke=stroke,
- strokeCap=strokeCap,
- strokeDash=strokeDash,
- strokeDashOffset=strokeDashOffset,
- strokeJoin=strokeJoin,
- strokeMiterLimit=strokeMiterLimit,
- strokeOffset=strokeOffset,
- strokeOpacity=strokeOpacity,
- strokeWidth=strokeWidth,
- style=style,
- tension=tension,
- text=text,
- theta=theta,
- theta2=theta2,
- theta2Offset=theta2Offset,
- thetaOffset=thetaOffset,
- thickness=thickness,
- timeUnitBandPosition=timeUnitBandPosition,
- timeUnitBandSize=timeUnitBandSize,
- tooltip=tooltip,
- url=url,
- width=width,
- x=x,
- x2=x2,
- x2Offset=x2Offset,
- xOffset=xOffset,
- y=y,
- y2=y2,
- y2Offset=y2Offset,
- yOffset=yOffset,
- **kwds,
- )
- copy = self.copy(deep=False) # type: ignore[attr-defined]
- if any(val is not Undefined for val in kwds.values()):
- copy.mark = core.MarkDef(type="text", **kwds)
- else:
- copy.mark = "text"
- return copy
-
- def mark_tick(
- self,
- align: Optional[Parameter | SchemaBase | Map | Align_T] = Undefined,
- angle: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- aria: Optional[bool | Parameter | SchemaBase | Map] = Undefined,
- ariaRole: Optional[str | Parameter | SchemaBase | Map] = Undefined,
- ariaRoleDescription: Optional[str | Parameter | SchemaBase | Map] = Undefined,
- aspect: Optional[bool | Parameter | SchemaBase | Map] = Undefined,
- bandSize: Optional[float] = Undefined,
- baseline: Optional[Parameter | SchemaBase | Map | TextBaseline_T] = Undefined,
- binSpacing: Optional[float] = Undefined,
- blend: Optional[Parameter | SchemaBase | Map | Blend_T] = Undefined,
- clip: Optional[bool | Parameter | SchemaBase | Map] = Undefined,
- color: Optional[str | Parameter | SchemaBase | Map | ColorName_T] = Undefined,
- continuousBandSize: Optional[float] = Undefined,
- cornerRadius: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- cornerRadiusBottomLeft: Optional[
- float | Parameter | SchemaBase | Map
- ] = Undefined,
- cornerRadiusBottomRight: Optional[
- float | Parameter | SchemaBase | Map
- ] = Undefined,
- cornerRadiusEnd: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- cornerRadiusTopLeft: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- cornerRadiusTopRight: Optional[
- float | Parameter | SchemaBase | Map
- ] = Undefined,
- cursor: Optional[Parameter | SchemaBase | Map | Cursor_T] = Undefined,
- description: Optional[str | Parameter | SchemaBase | Map] = Undefined,
- dir: Optional[Parameter | SchemaBase | Map | TextDirection_T] = Undefined,
- discreteBandSize: Optional[float | SchemaBase | Map] = Undefined,
- dx: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- dy: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- ellipsis: Optional[str | Parameter | SchemaBase | Map] = Undefined,
- fill: Optional[
- str | Parameter | SchemaBase | Map | ColorName_T | None
- ] = Undefined,
- fillOpacity: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- filled: Optional[bool] = Undefined,
- font: Optional[str | Parameter | SchemaBase | Map] = Undefined,
- fontSize: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- fontStyle: Optional[str | Parameter | SchemaBase | Map] = Undefined,
- fontWeight: Optional[Parameter | SchemaBase | Map | FontWeight_T] = Undefined,
- height: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- href: Optional[str | Parameter | SchemaBase | Map] = Undefined,
- innerRadius: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- interpolate: Optional[Parameter | SchemaBase | Map | Interpolate_T] = Undefined,
- invalid: Optional[SchemaBase | MarkInvalidDataMode_T | None] = Undefined,
- limit: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- line: Optional[bool | SchemaBase | Map] = Undefined,
- lineBreak: Optional[str | Parameter | SchemaBase | Map] = Undefined,
- lineHeight: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- minBandSize: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- opacity: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- order: Optional[bool | None] = Undefined,
- orient: Optional[SchemaBase | Orientation_T] = Undefined,
- outerRadius: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- padAngle: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- point: Optional[bool | SchemaBase | Literal["transparent"] | Map] = Undefined,
- radius: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- radius2: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- radius2Offset: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- radiusOffset: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- shape: Optional[str | Parameter | SchemaBase | Map] = Undefined,
- size: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- smooth: Optional[bool | Parameter | SchemaBase | Map] = Undefined,
- stroke: Optional[
- str | Parameter | SchemaBase | Map | ColorName_T | None
- ] = Undefined,
- strokeCap: Optional[Parameter | SchemaBase | Map | StrokeCap_T] = Undefined,
- strokeDash: Optional[
- Parameter | SchemaBase | Sequence[float] | Map
- ] = Undefined,
- strokeDashOffset: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- strokeJoin: Optional[Parameter | SchemaBase | Map | StrokeJoin_T] = Undefined,
- strokeMiterLimit: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- strokeOffset: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- strokeOpacity: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- strokeWidth: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- style: Optional[str | Sequence[str]] = Undefined,
- tension: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- text: Optional[str | Parameter | SchemaBase | Sequence[str] | Map] = Undefined,
- theta: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- theta2: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- theta2Offset: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- thetaOffset: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- thickness: Optional[float] = Undefined,
- timeUnitBandPosition: Optional[float] = Undefined,
- timeUnitBandSize: Optional[float] = Undefined,
- tooltip: Optional[
- str | bool | float | Parameter | SchemaBase | Map | None
- ] = Undefined,
- url: Optional[str | Parameter | SchemaBase | Map] = Undefined,
- width: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- x: Optional[
- float | Parameter | SchemaBase | Literal["width"] | Map
- ] = Undefined,
- x2: Optional[
- float | Parameter | SchemaBase | Literal["width"] | Map
- ] = Undefined,
- x2Offset: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- xOffset: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- y: Optional[
- float | Parameter | SchemaBase | Literal["height"] | Map
- ] = Undefined,
- y2: Optional[
- float | Parameter | SchemaBase | Literal["height"] | Map
- ] = Undefined,
- y2Offset: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- yOffset: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- **kwds,
- ) -> Self:
- """Set the chart's mark to 'tick' (see :class:`MarkDef`)."""
- kwds = dict(
- align=align,
- angle=angle,
- aria=aria,
- ariaRole=ariaRole,
- ariaRoleDescription=ariaRoleDescription,
- aspect=aspect,
- bandSize=bandSize,
- baseline=baseline,
- binSpacing=binSpacing,
- blend=blend,
- clip=clip,
- color=color,
- continuousBandSize=continuousBandSize,
- cornerRadius=cornerRadius,
- cornerRadiusBottomLeft=cornerRadiusBottomLeft,
- cornerRadiusBottomRight=cornerRadiusBottomRight,
- cornerRadiusEnd=cornerRadiusEnd,
- cornerRadiusTopLeft=cornerRadiusTopLeft,
- cornerRadiusTopRight=cornerRadiusTopRight,
- cursor=cursor,
- description=description,
- dir=dir,
- discreteBandSize=discreteBandSize,
- dx=dx,
- dy=dy,
- ellipsis=ellipsis,
- fill=fill,
- fillOpacity=fillOpacity,
- filled=filled,
- font=font,
- fontSize=fontSize,
- fontStyle=fontStyle,
- fontWeight=fontWeight,
- height=height,
- href=href,
- innerRadius=innerRadius,
- interpolate=interpolate,
- invalid=invalid,
- limit=limit,
- line=line,
- lineBreak=lineBreak,
- lineHeight=lineHeight,
- minBandSize=minBandSize,
- opacity=opacity,
- order=order,
- orient=orient,
- outerRadius=outerRadius,
- padAngle=padAngle,
- point=point,
- radius=radius,
- radius2=radius2,
- radius2Offset=radius2Offset,
- radiusOffset=radiusOffset,
- shape=shape,
- size=size,
- smooth=smooth,
- stroke=stroke,
- strokeCap=strokeCap,
- strokeDash=strokeDash,
- strokeDashOffset=strokeDashOffset,
- strokeJoin=strokeJoin,
- strokeMiterLimit=strokeMiterLimit,
- strokeOffset=strokeOffset,
- strokeOpacity=strokeOpacity,
- strokeWidth=strokeWidth,
- style=style,
- tension=tension,
- text=text,
- theta=theta,
- theta2=theta2,
- theta2Offset=theta2Offset,
- thetaOffset=thetaOffset,
- thickness=thickness,
- timeUnitBandPosition=timeUnitBandPosition,
- timeUnitBandSize=timeUnitBandSize,
- tooltip=tooltip,
- url=url,
- width=width,
- x=x,
- x2=x2,
- x2Offset=x2Offset,
- xOffset=xOffset,
- y=y,
- y2=y2,
- y2Offset=y2Offset,
- yOffset=yOffset,
- **kwds,
- )
- copy = self.copy(deep=False) # type: ignore[attr-defined]
- if any(val is not Undefined for val in kwds.values()):
- copy.mark = core.MarkDef(type="tick", **kwds)
- else:
- copy.mark = "tick"
- return copy
-
- def mark_trail(
- self,
- align: Optional[Parameter | SchemaBase | Map | Align_T] = Undefined,
- angle: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- aria: Optional[bool | Parameter | SchemaBase | Map] = Undefined,
- ariaRole: Optional[str | Parameter | SchemaBase | Map] = Undefined,
- ariaRoleDescription: Optional[str | Parameter | SchemaBase | Map] = Undefined,
- aspect: Optional[bool | Parameter | SchemaBase | Map] = Undefined,
- bandSize: Optional[float] = Undefined,
- baseline: Optional[Parameter | SchemaBase | Map | TextBaseline_T] = Undefined,
- binSpacing: Optional[float] = Undefined,
- blend: Optional[Parameter | SchemaBase | Map | Blend_T] = Undefined,
- clip: Optional[bool | Parameter | SchemaBase | Map] = Undefined,
- color: Optional[str | Parameter | SchemaBase | Map | ColorName_T] = Undefined,
- continuousBandSize: Optional[float] = Undefined,
- cornerRadius: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- cornerRadiusBottomLeft: Optional[
- float | Parameter | SchemaBase | Map
- ] = Undefined,
- cornerRadiusBottomRight: Optional[
- float | Parameter | SchemaBase | Map
- ] = Undefined,
- cornerRadiusEnd: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- cornerRadiusTopLeft: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- cornerRadiusTopRight: Optional[
- float | Parameter | SchemaBase | Map
- ] = Undefined,
- cursor: Optional[Parameter | SchemaBase | Map | Cursor_T] = Undefined,
- description: Optional[str | Parameter | SchemaBase | Map] = Undefined,
- dir: Optional[Parameter | SchemaBase | Map | TextDirection_T] = Undefined,
- discreteBandSize: Optional[float | SchemaBase | Map] = Undefined,
- dx: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- dy: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- ellipsis: Optional[str | Parameter | SchemaBase | Map] = Undefined,
- fill: Optional[
- str | Parameter | SchemaBase | Map | ColorName_T | None
- ] = Undefined,
- fillOpacity: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- filled: Optional[bool] = Undefined,
- font: Optional[str | Parameter | SchemaBase | Map] = Undefined,
- fontSize: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- fontStyle: Optional[str | Parameter | SchemaBase | Map] = Undefined,
- fontWeight: Optional[Parameter | SchemaBase | Map | FontWeight_T] = Undefined,
- height: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- href: Optional[str | Parameter | SchemaBase | Map] = Undefined,
- innerRadius: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- interpolate: Optional[Parameter | SchemaBase | Map | Interpolate_T] = Undefined,
- invalid: Optional[SchemaBase | MarkInvalidDataMode_T | None] = Undefined,
- limit: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- line: Optional[bool | SchemaBase | Map] = Undefined,
- lineBreak: Optional[str | Parameter | SchemaBase | Map] = Undefined,
- lineHeight: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- minBandSize: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- opacity: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- order: Optional[bool | None] = Undefined,
- orient: Optional[SchemaBase | Orientation_T] = Undefined,
- outerRadius: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- padAngle: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- point: Optional[bool | SchemaBase | Literal["transparent"] | Map] = Undefined,
- radius: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- radius2: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- radius2Offset: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- radiusOffset: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- shape: Optional[str | Parameter | SchemaBase | Map] = Undefined,
- size: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- smooth: Optional[bool | Parameter | SchemaBase | Map] = Undefined,
- stroke: Optional[
- str | Parameter | SchemaBase | Map | ColorName_T | None
- ] = Undefined,
- strokeCap: Optional[Parameter | SchemaBase | Map | StrokeCap_T] = Undefined,
- strokeDash: Optional[
- Parameter | SchemaBase | Sequence[float] | Map
- ] = Undefined,
- strokeDashOffset: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- strokeJoin: Optional[Parameter | SchemaBase | Map | StrokeJoin_T] = Undefined,
- strokeMiterLimit: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- strokeOffset: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- strokeOpacity: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- strokeWidth: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- style: Optional[str | Sequence[str]] = Undefined,
- tension: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- text: Optional[str | Parameter | SchemaBase | Sequence[str] | Map] = Undefined,
- theta: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- theta2: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- theta2Offset: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- thetaOffset: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- thickness: Optional[float] = Undefined,
- timeUnitBandPosition: Optional[float] = Undefined,
- timeUnitBandSize: Optional[float] = Undefined,
- tooltip: Optional[
- str | bool | float | Parameter | SchemaBase | Map | None
- ] = Undefined,
- url: Optional[str | Parameter | SchemaBase | Map] = Undefined,
- width: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- x: Optional[
- float | Parameter | SchemaBase | Literal["width"] | Map
- ] = Undefined,
- x2: Optional[
- float | Parameter | SchemaBase | Literal["width"] | Map
- ] = Undefined,
- x2Offset: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- xOffset: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- y: Optional[
- float | Parameter | SchemaBase | Literal["height"] | Map
- ] = Undefined,
- y2: Optional[
- float | Parameter | SchemaBase | Literal["height"] | Map
- ] = Undefined,
- y2Offset: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- yOffset: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- **kwds,
- ) -> Self:
- """Set the chart's mark to 'trail' (see :class:`MarkDef`)."""
- kwds = dict(
- align=align,
- angle=angle,
- aria=aria,
- ariaRole=ariaRole,
- ariaRoleDescription=ariaRoleDescription,
- aspect=aspect,
- bandSize=bandSize,
- baseline=baseline,
- binSpacing=binSpacing,
- blend=blend,
- clip=clip,
- color=color,
- continuousBandSize=continuousBandSize,
- cornerRadius=cornerRadius,
- cornerRadiusBottomLeft=cornerRadiusBottomLeft,
- cornerRadiusBottomRight=cornerRadiusBottomRight,
- cornerRadiusEnd=cornerRadiusEnd,
- cornerRadiusTopLeft=cornerRadiusTopLeft,
- cornerRadiusTopRight=cornerRadiusTopRight,
- cursor=cursor,
- description=description,
- dir=dir,
- discreteBandSize=discreteBandSize,
- dx=dx,
- dy=dy,
- ellipsis=ellipsis,
- fill=fill,
- fillOpacity=fillOpacity,
- filled=filled,
- font=font,
- fontSize=fontSize,
- fontStyle=fontStyle,
- fontWeight=fontWeight,
- height=height,
- href=href,
- innerRadius=innerRadius,
- interpolate=interpolate,
- invalid=invalid,
- limit=limit,
- line=line,
- lineBreak=lineBreak,
- lineHeight=lineHeight,
- minBandSize=minBandSize,
- opacity=opacity,
- order=order,
- orient=orient,
- outerRadius=outerRadius,
- padAngle=padAngle,
- point=point,
- radius=radius,
- radius2=radius2,
- radius2Offset=radius2Offset,
- radiusOffset=radiusOffset,
- shape=shape,
- size=size,
- smooth=smooth,
- stroke=stroke,
- strokeCap=strokeCap,
- strokeDash=strokeDash,
- strokeDashOffset=strokeDashOffset,
- strokeJoin=strokeJoin,
- strokeMiterLimit=strokeMiterLimit,
- strokeOffset=strokeOffset,
- strokeOpacity=strokeOpacity,
- strokeWidth=strokeWidth,
- style=style,
- tension=tension,
- text=text,
- theta=theta,
- theta2=theta2,
- theta2Offset=theta2Offset,
- thetaOffset=thetaOffset,
- thickness=thickness,
- timeUnitBandPosition=timeUnitBandPosition,
- timeUnitBandSize=timeUnitBandSize,
- tooltip=tooltip,
- url=url,
- width=width,
- x=x,
- x2=x2,
- x2Offset=x2Offset,
- xOffset=xOffset,
- y=y,
- y2=y2,
- y2Offset=y2Offset,
- yOffset=yOffset,
- **kwds,
- )
- copy = self.copy(deep=False) # type: ignore[attr-defined]
- if any(val is not Undefined for val in kwds.values()):
- copy.mark = core.MarkDef(type="trail", **kwds)
- else:
- copy.mark = "trail"
- return copy
-
- def mark_circle(
- self,
- align: Optional[Parameter | SchemaBase | Map | Align_T] = Undefined,
- angle: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- aria: Optional[bool | Parameter | SchemaBase | Map] = Undefined,
- ariaRole: Optional[str | Parameter | SchemaBase | Map] = Undefined,
- ariaRoleDescription: Optional[str | Parameter | SchemaBase | Map] = Undefined,
- aspect: Optional[bool | Parameter | SchemaBase | Map] = Undefined,
- bandSize: Optional[float] = Undefined,
- baseline: Optional[Parameter | SchemaBase | Map | TextBaseline_T] = Undefined,
- binSpacing: Optional[float] = Undefined,
- blend: Optional[Parameter | SchemaBase | Map | Blend_T] = Undefined,
- clip: Optional[bool | Parameter | SchemaBase | Map] = Undefined,
- color: Optional[str | Parameter | SchemaBase | Map | ColorName_T] = Undefined,
- continuousBandSize: Optional[float] = Undefined,
- cornerRadius: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- cornerRadiusBottomLeft: Optional[
- float | Parameter | SchemaBase | Map
- ] = Undefined,
- cornerRadiusBottomRight: Optional[
- float | Parameter | SchemaBase | Map
- ] = Undefined,
- cornerRadiusEnd: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- cornerRadiusTopLeft: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- cornerRadiusTopRight: Optional[
- float | Parameter | SchemaBase | Map
- ] = Undefined,
- cursor: Optional[Parameter | SchemaBase | Map | Cursor_T] = Undefined,
- description: Optional[str | Parameter | SchemaBase | Map] = Undefined,
- dir: Optional[Parameter | SchemaBase | Map | TextDirection_T] = Undefined,
- discreteBandSize: Optional[float | SchemaBase | Map] = Undefined,
- dx: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- dy: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- ellipsis: Optional[str | Parameter | SchemaBase | Map] = Undefined,
- fill: Optional[
- str | Parameter | SchemaBase | Map | ColorName_T | None
- ] = Undefined,
- fillOpacity: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- filled: Optional[bool] = Undefined,
- font: Optional[str | Parameter | SchemaBase | Map] = Undefined,
- fontSize: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- fontStyle: Optional[str | Parameter | SchemaBase | Map] = Undefined,
- fontWeight: Optional[Parameter | SchemaBase | Map | FontWeight_T] = Undefined,
- height: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- href: Optional[str | Parameter | SchemaBase | Map] = Undefined,
- innerRadius: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- interpolate: Optional[Parameter | SchemaBase | Map | Interpolate_T] = Undefined,
- invalid: Optional[SchemaBase | MarkInvalidDataMode_T | None] = Undefined,
- limit: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- line: Optional[bool | SchemaBase | Map] = Undefined,
- lineBreak: Optional[str | Parameter | SchemaBase | Map] = Undefined,
- lineHeight: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- minBandSize: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- opacity: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- order: Optional[bool | None] = Undefined,
- orient: Optional[SchemaBase | Orientation_T] = Undefined,
- outerRadius: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- padAngle: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- point: Optional[bool | SchemaBase | Literal["transparent"] | Map] = Undefined,
- radius: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- radius2: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- radius2Offset: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- radiusOffset: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- shape: Optional[str | Parameter | SchemaBase | Map] = Undefined,
- size: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- smooth: Optional[bool | Parameter | SchemaBase | Map] = Undefined,
- stroke: Optional[
- str | Parameter | SchemaBase | Map | ColorName_T | None
- ] = Undefined,
- strokeCap: Optional[Parameter | SchemaBase | Map | StrokeCap_T] = Undefined,
- strokeDash: Optional[
- Parameter | SchemaBase | Sequence[float] | Map
- ] = Undefined,
- strokeDashOffset: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- strokeJoin: Optional[Parameter | SchemaBase | Map | StrokeJoin_T] = Undefined,
- strokeMiterLimit: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- strokeOffset: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- strokeOpacity: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- strokeWidth: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- style: Optional[str | Sequence[str]] = Undefined,
- tension: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- text: Optional[str | Parameter | SchemaBase | Sequence[str] | Map] = Undefined,
- theta: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- theta2: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- theta2Offset: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- thetaOffset: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- thickness: Optional[float] = Undefined,
- timeUnitBandPosition: Optional[float] = Undefined,
- timeUnitBandSize: Optional[float] = Undefined,
- tooltip: Optional[
- str | bool | float | Parameter | SchemaBase | Map | None
- ] = Undefined,
- url: Optional[str | Parameter | SchemaBase | Map] = Undefined,
- width: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- x: Optional[
- float | Parameter | SchemaBase | Literal["width"] | Map
- ] = Undefined,
- x2: Optional[
- float | Parameter | SchemaBase | Literal["width"] | Map
- ] = Undefined,
- x2Offset: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- xOffset: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- y: Optional[
- float | Parameter | SchemaBase | Literal["height"] | Map
- ] = Undefined,
- y2: Optional[
- float | Parameter | SchemaBase | Literal["height"] | Map
- ] = Undefined,
- y2Offset: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- yOffset: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- **kwds,
- ) -> Self:
- """Set the chart's mark to 'circle' (see :class:`MarkDef`)."""
- kwds = dict(
- align=align,
- angle=angle,
- aria=aria,
- ariaRole=ariaRole,
- ariaRoleDescription=ariaRoleDescription,
- aspect=aspect,
- bandSize=bandSize,
- baseline=baseline,
- binSpacing=binSpacing,
- blend=blend,
- clip=clip,
- color=color,
- continuousBandSize=continuousBandSize,
- cornerRadius=cornerRadius,
- cornerRadiusBottomLeft=cornerRadiusBottomLeft,
- cornerRadiusBottomRight=cornerRadiusBottomRight,
- cornerRadiusEnd=cornerRadiusEnd,
- cornerRadiusTopLeft=cornerRadiusTopLeft,
- cornerRadiusTopRight=cornerRadiusTopRight,
- cursor=cursor,
- description=description,
- dir=dir,
- discreteBandSize=discreteBandSize,
- dx=dx,
- dy=dy,
- ellipsis=ellipsis,
- fill=fill,
- fillOpacity=fillOpacity,
- filled=filled,
- font=font,
- fontSize=fontSize,
- fontStyle=fontStyle,
- fontWeight=fontWeight,
- height=height,
- href=href,
- innerRadius=innerRadius,
- interpolate=interpolate,
- invalid=invalid,
- limit=limit,
- line=line,
- lineBreak=lineBreak,
- lineHeight=lineHeight,
- minBandSize=minBandSize,
- opacity=opacity,
- order=order,
- orient=orient,
- outerRadius=outerRadius,
- padAngle=padAngle,
- point=point,
- radius=radius,
- radius2=radius2,
- radius2Offset=radius2Offset,
- radiusOffset=radiusOffset,
- shape=shape,
- size=size,
- smooth=smooth,
- stroke=stroke,
- strokeCap=strokeCap,
- strokeDash=strokeDash,
- strokeDashOffset=strokeDashOffset,
- strokeJoin=strokeJoin,
- strokeMiterLimit=strokeMiterLimit,
- strokeOffset=strokeOffset,
- strokeOpacity=strokeOpacity,
- strokeWidth=strokeWidth,
- style=style,
- tension=tension,
- text=text,
- theta=theta,
- theta2=theta2,
- theta2Offset=theta2Offset,
- thetaOffset=thetaOffset,
- thickness=thickness,
- timeUnitBandPosition=timeUnitBandPosition,
- timeUnitBandSize=timeUnitBandSize,
- tooltip=tooltip,
- url=url,
- width=width,
- x=x,
- x2=x2,
- x2Offset=x2Offset,
- xOffset=xOffset,
- y=y,
- y2=y2,
- y2Offset=y2Offset,
- yOffset=yOffset,
- **kwds,
- )
- copy = self.copy(deep=False) # type: ignore[attr-defined]
- if any(val is not Undefined for val in kwds.values()):
- copy.mark = core.MarkDef(type="circle", **kwds)
- else:
- copy.mark = "circle"
- return copy
-
- def mark_square(
- self,
- align: Optional[Parameter | SchemaBase | Map | Align_T] = Undefined,
- angle: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- aria: Optional[bool | Parameter | SchemaBase | Map] = Undefined,
- ariaRole: Optional[str | Parameter | SchemaBase | Map] = Undefined,
- ariaRoleDescription: Optional[str | Parameter | SchemaBase | Map] = Undefined,
- aspect: Optional[bool | Parameter | SchemaBase | Map] = Undefined,
- bandSize: Optional[float] = Undefined,
- baseline: Optional[Parameter | SchemaBase | Map | TextBaseline_T] = Undefined,
- binSpacing: Optional[float] = Undefined,
- blend: Optional[Parameter | SchemaBase | Map | Blend_T] = Undefined,
- clip: Optional[bool | Parameter | SchemaBase | Map] = Undefined,
- color: Optional[str | Parameter | SchemaBase | Map | ColorName_T] = Undefined,
- continuousBandSize: Optional[float] = Undefined,
- cornerRadius: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- cornerRadiusBottomLeft: Optional[
- float | Parameter | SchemaBase | Map
- ] = Undefined,
- cornerRadiusBottomRight: Optional[
- float | Parameter | SchemaBase | Map
- ] = Undefined,
- cornerRadiusEnd: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- cornerRadiusTopLeft: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- cornerRadiusTopRight: Optional[
- float | Parameter | SchemaBase | Map
- ] = Undefined,
- cursor: Optional[Parameter | SchemaBase | Map | Cursor_T] = Undefined,
- description: Optional[str | Parameter | SchemaBase | Map] = Undefined,
- dir: Optional[Parameter | SchemaBase | Map | TextDirection_T] = Undefined,
- discreteBandSize: Optional[float | SchemaBase | Map] = Undefined,
- dx: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- dy: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- ellipsis: Optional[str | Parameter | SchemaBase | Map] = Undefined,
- fill: Optional[
- str | Parameter | SchemaBase | Map | ColorName_T | None
- ] = Undefined,
- fillOpacity: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- filled: Optional[bool] = Undefined,
- font: Optional[str | Parameter | SchemaBase | Map] = Undefined,
- fontSize: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- fontStyle: Optional[str | Parameter | SchemaBase | Map] = Undefined,
- fontWeight: Optional[Parameter | SchemaBase | Map | FontWeight_T] = Undefined,
- height: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- href: Optional[str | Parameter | SchemaBase | Map] = Undefined,
- innerRadius: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- interpolate: Optional[Parameter | SchemaBase | Map | Interpolate_T] = Undefined,
- invalid: Optional[SchemaBase | MarkInvalidDataMode_T | None] = Undefined,
- limit: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- line: Optional[bool | SchemaBase | Map] = Undefined,
- lineBreak: Optional[str | Parameter | SchemaBase | Map] = Undefined,
- lineHeight: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- minBandSize: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- opacity: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- order: Optional[bool | None] = Undefined,
- orient: Optional[SchemaBase | Orientation_T] = Undefined,
- outerRadius: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- padAngle: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- point: Optional[bool | SchemaBase | Literal["transparent"] | Map] = Undefined,
- radius: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- radius2: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- radius2Offset: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- radiusOffset: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- shape: Optional[str | Parameter | SchemaBase | Map] = Undefined,
- size: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- smooth: Optional[bool | Parameter | SchemaBase | Map] = Undefined,
- stroke: Optional[
- str | Parameter | SchemaBase | Map | ColorName_T | None
- ] = Undefined,
- strokeCap: Optional[Parameter | SchemaBase | Map | StrokeCap_T] = Undefined,
- strokeDash: Optional[
- Parameter | SchemaBase | Sequence[float] | Map
- ] = Undefined,
- strokeDashOffset: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- strokeJoin: Optional[Parameter | SchemaBase | Map | StrokeJoin_T] = Undefined,
- strokeMiterLimit: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- strokeOffset: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- strokeOpacity: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- strokeWidth: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- style: Optional[str | Sequence[str]] = Undefined,
- tension: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- text: Optional[str | Parameter | SchemaBase | Sequence[str] | Map] = Undefined,
- theta: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- theta2: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- theta2Offset: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- thetaOffset: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- thickness: Optional[float] = Undefined,
- timeUnitBandPosition: Optional[float] = Undefined,
- timeUnitBandSize: Optional[float] = Undefined,
- tooltip: Optional[
- str | bool | float | Parameter | SchemaBase | Map | None
- ] = Undefined,
- url: Optional[str | Parameter | SchemaBase | Map] = Undefined,
- width: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- x: Optional[
- float | Parameter | SchemaBase | Literal["width"] | Map
- ] = Undefined,
- x2: Optional[
- float | Parameter | SchemaBase | Literal["width"] | Map
- ] = Undefined,
- x2Offset: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- xOffset: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- y: Optional[
- float | Parameter | SchemaBase | Literal["height"] | Map
- ] = Undefined,
- y2: Optional[
- float | Parameter | SchemaBase | Literal["height"] | Map
- ] = Undefined,
- y2Offset: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- yOffset: Optional[float | Parameter | SchemaBase | Map] = Undefined,
- **kwds,
- ) -> Self:
- """Set the chart's mark to 'square' (see :class:`MarkDef`)."""
- kwds = dict(
- align=align,
- angle=angle,
- aria=aria,
- ariaRole=ariaRole,
- ariaRoleDescription=ariaRoleDescription,
- aspect=aspect,
- bandSize=bandSize,
- baseline=baseline,
- binSpacing=binSpacing,
- blend=blend,
- clip=clip,
- color=color,
- continuousBandSize=continuousBandSize,
- cornerRadius=cornerRadius,
- cornerRadiusBottomLeft=cornerRadiusBottomLeft,
- cornerRadiusBottomRight=cornerRadiusBottomRight,
- cornerRadiusEnd=cornerRadiusEnd,
- cornerRadiusTopLeft=cornerRadiusTopLeft,
- cornerRadiusTopRight=cornerRadiusTopRight,
- cursor=cursor,
- description=description,
- dir=dir,
- discreteBandSize=discreteBandSize,
- dx=dx,
- dy=dy,
- ellipsis=ellipsis,
- fill=fill,
- fillOpacity=fillOpacity,
- filled=filled,
- font=font,
- fontSize=fontSize,
- fontStyle=fontStyle,
- fontWeight=fontWeight,
- height=height,
- href=href,
- innerRadius=innerRadius,
- interpolate=interpolate,
- invalid=invalid,
- limit=limit,
- line=line,
- lineBreak=lineBreak,
- lineHeight=lineHeight,
- minBandSize=minBandSize,
- opacity=opacity,
- order=order,
- orient=orient,
- outerRadius=outerRadius,
- padAngle=padAngle,
- point=point,
- radius=radius,
- radius2=radius2,
- radius2Offset=radius2Offset,
- radiusOffset=radiusOffset,
- shape=shape,
- size=size,
- smooth=smooth,
- stroke=stroke,
- strokeCap=strokeCap,
- strokeDash=strokeDash,
- strokeDashOffset=strokeDashOffset,
- strokeJoin=strokeJoin,
- strokeMiterLimit=strokeMiterLimit,
- strokeOffset=strokeOffset,
- strokeOpacity=strokeOpacity,
- strokeWidth=strokeWidth,
- style=style,
- tension=tension,
- text=text,
- theta=theta,
- theta2=theta2,
- theta2Offset=theta2Offset,
- thetaOffset=thetaOffset,
- thickness=thickness,
- timeUnitBandPosition=timeUnitBandPosition,
- timeUnitBandSize=timeUnitBandSize,
- tooltip=tooltip,
- url=url,
- width=width,
- x=x,
- x2=x2,
- x2Offset=x2Offset,
- xOffset=xOffset,
- y=y,
- y2=y2,
- y2Offset=y2Offset,
- yOffset=yOffset,
- **kwds,
- )
- copy = self.copy(deep=False) # type: ignore[attr-defined]
- if any(val is not Undefined for val in kwds.values()):
- copy.mark = core.MarkDef(type="square", **kwds)
- else:
- copy.mark = "square"
- return copy
-
- def mark_geoshape(
+class _MarkDef(SchemaBase):
+ """
+ MarkDef schema wrapper.
+
+ Parameters
+ ----------
+ align : dict, :class:`Align`, :class:`ExprRef`, Literal['left', 'center', 'right']
+ The horizontal alignment of the text or ranged marks (area, bar, image, rect, rule).
+ One of ``"left"``, ``"right"``, ``"center"``.
+
+ **Note:** Expression reference is *not* supported for range marks.
+ angle : dict, float, :class:`ExprRef`
+ The rotation angle of the text, in degrees.
+ aria : bool, dict, :class:`ExprRef`
+ A boolean flag indicating if `ARIA attributes
+ `__ should be
+ included (SVG output only). If ``false``, the "aria-hidden" attribute will be set on
+ the output SVG element, removing the mark item from the ARIA accessibility tree.
+ ariaRole : str, dict, :class:`ExprRef`
+ Sets the type of user interface element of the mark item for `ARIA accessibility
+ `__ (SVG output
+ only). If specified, this property determines the "role" attribute. Warning: this
+ property is experimental and may be changed in the future.
+ ariaRoleDescription : str, dict, :class:`ExprRef`
+ A human-readable, author-localized description for the role of the mark item for
+ `ARIA accessibility
+ `__ (SVG output
+ only). If specified, this property determines the "aria-roledescription" attribute.
+ Warning: this property is experimental and may be changed in the future.
+ aspect : bool, dict, :class:`ExprRef`
+ Whether to keep aspect ratio of image marks.
+ bandSize : float
+ The width of the ticks.
+
+ **Default value:** 3/4 of step (width step for horizontal ticks and height step for
+ vertical ticks).
+ baseline : dict, :class:`ExprRef`, :class:`Baseline`, :class:`TextBaseline`, Literal['alphabetic', 'line-bottom', 'line-top', 'top', 'middle', 'bottom']
+ For text marks, the vertical text baseline. One of ``"alphabetic"`` (default),
+ ``"top"``, ``"middle"``, ``"bottom"``, ``"line-top"``, ``"line-bottom"``, or an
+ expression reference that provides one of the valid values. The ``"line-top"`` and
+ ``"line-bottom"`` values operate similarly to ``"top"`` and ``"bottom"``, but are
+ calculated relative to the ``lineHeight`` rather than ``fontSize`` alone.
+
+ For range marks, the vertical alignment of the marks. One of ``"top"``,
+ ``"middle"``, ``"bottom"``.
+
+ **Note:** Expression reference is *not* supported for range marks.
+ binSpacing : float
+ Offset between bars for binned field. The ideal value for this is either 0
+ (preferred by statisticians) or 1 (Vega-Lite default, D3 example style).
+
+ **Default value:** ``1``
+ blend : dict, :class:`Blend`, :class:`ExprRef`, Literal[None, 'multiply', 'screen', 'overlay', 'darken', 'lighten', 'color-dodge', 'color-burn', 'hard-light', 'soft-light', 'difference', 'exclusion', 'hue', 'saturation', 'color', 'luminosity']
+ The color blend mode for drawing an item on its current background. Any valid `CSS
+ mix-blend-mode `__
+ value can be used.
+
+ __Default value:__ ``"source-over"``
+ clip : bool, dict, :class:`ExprRef`
+ Whether a mark be clipped to the enclosing group's width and height.
+ color : str, dict, :class:`Color`, :class:`ExprRef`, :class:`Gradient`, :class:`HexColor`, :class:`ColorName`, :class:`LinearGradient`, :class:`RadialGradient`, Literal['black', 'silver', 'gray', 'white', 'maroon', 'red', 'purple', 'fuchsia', 'green', 'lime', 'olive', 'yellow', 'navy', 'blue', 'teal', 'aqua', 'orange', 'aliceblue', 'antiquewhite', 'aquamarine', 'azure', 'beige', 'bisque', 'blanchedalmond', 'blueviolet', 'brown', 'burlywood', 'cadetblue', 'chartreuse', 'chocolate', 'coral', 'cornflowerblue', 'cornsilk', 'crimson', 'cyan', 'darkblue', 'darkcyan', 'darkgoldenrod', 'darkgray', 'darkgreen', 'darkgrey', 'darkkhaki', 'darkmagenta', 'darkolivegreen', 'darkorange', 'darkorchid', 'darkred', 'darksalmon', 'darkseagreen', 'darkslateblue', 'darkslategray', 'darkslategrey', 'darkturquoise', 'darkviolet', 'deeppink', 'deepskyblue', 'dimgray', 'dimgrey', 'dodgerblue', 'firebrick', 'floralwhite', 'forestgreen', 'gainsboro', 'ghostwhite', 'gold', 'goldenrod', 'greenyellow', 'grey', 'honeydew', 'hotpink', 'indianred', 'indigo', 'ivory', 'khaki', 'lavender', 'lavenderblush', 'lawngreen', 'lemonchiffon', 'lightblue', 'lightcoral', 'lightcyan', 'lightgoldenrodyellow', 'lightgray', 'lightgreen', 'lightgrey', 'lightpink', 'lightsalmon', 'lightseagreen', 'lightskyblue', 'lightslategray', 'lightslategrey', 'lightsteelblue', 'lightyellow', 'limegreen', 'linen', 'magenta', 'mediumaquamarine', 'mediumblue', 'mediumorchid', 'mediumpurple', 'mediumseagreen', 'mediumslateblue', 'mediumspringgreen', 'mediumturquoise', 'mediumvioletred', 'midnightblue', 'mintcream', 'mistyrose', 'moccasin', 'navajowhite', 'oldlace', 'olivedrab', 'orangered', 'orchid', 'palegoldenrod', 'palegreen', 'paleturquoise', 'palevioletred', 'papayawhip', 'peachpuff', 'peru', 'pink', 'plum', 'powderblue', 'rosybrown', 'royalblue', 'saddlebrown', 'salmon', 'sandybrown', 'seagreen', 'seashell', 'sienna', 'skyblue', 'slateblue', 'slategray', 'slategrey', 'snow', 'springgreen', 'steelblue', 'tan', 'thistle', 'tomato', 'turquoise', 'violet', 'wheat', 'whitesmoke', 'yellowgreen', 'rebeccapurple']
+ Default color.
+
+ **Default value:** :raw-html:`` ■ :raw-html:``
+ ``"#4682b4"``
+
+ **Note:**
+
+ * This property cannot be used in a `style config
+ `__.
+ * The ``fill`` and ``stroke`` properties have higher precedence than ``color`` and
+ will override ``color``.
+ continuousBandSize : float
+ The default size of the bars on continuous scales.
+
+ **Default value:** ``5``
+ cornerRadius : dict, float, :class:`ExprRef`
+ The radius in pixels of rounded rectangles or arcs' corners.
+
+ **Default value:** ``0``
+ cornerRadiusBottomLeft : dict, float, :class:`ExprRef`
+ The radius in pixels of rounded rectangles' bottom left corner.
+
+ **Default value:** ``0``
+ cornerRadiusBottomRight : dict, float, :class:`ExprRef`
+ The radius in pixels of rounded rectangles' bottom right corner.
+
+ **Default value:** ``0``
+ cornerRadiusEnd : dict, float, :class:`ExprRef`
+ * For vertical bars, top-left and top-right corner radius.
+
+ * For horizontal bars, top-right and bottom-right corner radius.
+ cornerRadiusTopLeft : dict, float, :class:`ExprRef`
+ The radius in pixels of rounded rectangles' top right corner.
+
+ **Default value:** ``0``
+ cornerRadiusTopRight : dict, float, :class:`ExprRef`
+ The radius in pixels of rounded rectangles' top left corner.
+
+ **Default value:** ``0``
+ cursor : dict, :class:`Cursor`, :class:`ExprRef`, Literal['auto', 'default', 'none', 'context-menu', 'help', 'pointer', 'progress', 'wait', 'cell', 'crosshair', 'text', 'vertical-text', 'alias', 'copy', 'move', 'no-drop', 'not-allowed', 'e-resize', 'n-resize', 'ne-resize', 'nw-resize', 's-resize', 'se-resize', 'sw-resize', 'w-resize', 'ew-resize', 'ns-resize', 'nesw-resize', 'nwse-resize', 'col-resize', 'row-resize', 'all-scroll', 'zoom-in', 'zoom-out', 'grab', 'grabbing']
+ The mouse cursor used over the mark. Any valid `CSS cursor type
+ `__ can be used.
+ description : str, dict, :class:`ExprRef`
+ A text description of the mark item for `ARIA accessibility
+ `__ (SVG output
+ only). If specified, this property determines the `"aria-label" attribute
+ `__.
+ dir : dict, :class:`ExprRef`, :class:`TextDirection`, Literal['ltr', 'rtl']
+ The direction of the text. One of ``"ltr"`` (left-to-right) or ``"rtl"``
+ (right-to-left). This property determines on which side is truncated in response to
+ the limit parameter.
+
+ **Default value:** ``"ltr"``
+ discreteBandSize : dict, float, :class:`RelativeBandSize`
+ The default size of the bars with discrete dimensions. If unspecified, the default
+ size is ``step-2``, which provides 2 pixel offset between bars.
+ dx : dict, float, :class:`ExprRef`
+ The horizontal offset, in pixels, between the text label and its anchor point. The
+ offset is applied after rotation by the *angle* property.
+ dy : dict, float, :class:`ExprRef`
+ The vertical offset, in pixels, between the text label and its anchor point. The
+ offset is applied after rotation by the *angle* property.
+ ellipsis : str, dict, :class:`ExprRef`
+ The ellipsis string for text truncated in response to the limit parameter.
+
+ **Default value:** ``"…"``
+ fill : str, dict, :class:`Color`, :class:`ExprRef`, :class:`Gradient`, :class:`HexColor`, :class:`ColorName`, :class:`LinearGradient`, :class:`RadialGradient`, Literal['black', 'silver', 'gray', 'white', 'maroon', 'red', 'purple', 'fuchsia', 'green', 'lime', 'olive', 'yellow', 'navy', 'blue', 'teal', 'aqua', 'orange', 'aliceblue', 'antiquewhite', 'aquamarine', 'azure', 'beige', 'bisque', 'blanchedalmond', 'blueviolet', 'brown', 'burlywood', 'cadetblue', 'chartreuse', 'chocolate', 'coral', 'cornflowerblue', 'cornsilk', 'crimson', 'cyan', 'darkblue', 'darkcyan', 'darkgoldenrod', 'darkgray', 'darkgreen', 'darkgrey', 'darkkhaki', 'darkmagenta', 'darkolivegreen', 'darkorange', 'darkorchid', 'darkred', 'darksalmon', 'darkseagreen', 'darkslateblue', 'darkslategray', 'darkslategrey', 'darkturquoise', 'darkviolet', 'deeppink', 'deepskyblue', 'dimgray', 'dimgrey', 'dodgerblue', 'firebrick', 'floralwhite', 'forestgreen', 'gainsboro', 'ghostwhite', 'gold', 'goldenrod', 'greenyellow', 'grey', 'honeydew', 'hotpink', 'indianred', 'indigo', 'ivory', 'khaki', 'lavender', 'lavenderblush', 'lawngreen', 'lemonchiffon', 'lightblue', 'lightcoral', 'lightcyan', 'lightgoldenrodyellow', 'lightgray', 'lightgreen', 'lightgrey', 'lightpink', 'lightsalmon', 'lightseagreen', 'lightskyblue', 'lightslategray', 'lightslategrey', 'lightsteelblue', 'lightyellow', 'limegreen', 'linen', 'magenta', 'mediumaquamarine', 'mediumblue', 'mediumorchid', 'mediumpurple', 'mediumseagreen', 'mediumslateblue', 'mediumspringgreen', 'mediumturquoise', 'mediumvioletred', 'midnightblue', 'mintcream', 'mistyrose', 'moccasin', 'navajowhite', 'oldlace', 'olivedrab', 'orangered', 'orchid', 'palegoldenrod', 'palegreen', 'paleturquoise', 'palevioletred', 'papayawhip', 'peachpuff', 'peru', 'pink', 'plum', 'powderblue', 'rosybrown', 'royalblue', 'saddlebrown', 'salmon', 'sandybrown', 'seagreen', 'seashell', 'sienna', 'skyblue', 'slateblue', 'slategray', 'slategrey', 'snow', 'springgreen', 'steelblue', 'tan', 'thistle', 'tomato', 'turquoise', 'violet', 'wheat', 'whitesmoke', 'yellowgreen', 'rebeccapurple'], None
+ Default fill color. This property has higher precedence than ``config.color``. Set
+ to ``null`` to remove fill.
+
+ **Default value:** (None)
+ fillOpacity : dict, float, :class:`ExprRef`
+ The fill opacity (value between [0,1]).
+
+ **Default value:** ``1``
+ filled : bool
+ Whether the mark's color should be used as fill color instead of stroke color.
+
+ **Default value:** ``false`` for all ``point``, ``line``, and ``rule`` marks as well
+ as ``geoshape`` marks for `graticule
+ `__ data sources;
+ otherwise, ``true``.
+
+ **Note:** This property cannot be used in a `style config
+ `__.
+ font : str, dict, :class:`ExprRef`
+ The typeface to set the text in (e.g., ``"Helvetica Neue"``).
+ fontSize : dict, float, :class:`ExprRef`
+ The font size, in pixels.
+
+ **Default value:** ``11``
+ fontStyle : str, dict, :class:`ExprRef`, :class:`FontStyle`
+ The font style (e.g., ``"italic"``).
+ fontWeight : dict, :class:`ExprRef`, :class:`FontWeight`, Literal['normal', 'bold', 'lighter', 'bolder', 100, 200, 300, 400, 500, 600, 700, 800, 900]
+ The font weight. This can be either a string (e.g ``"bold"``, ``"normal"``) or a
+ number (``100``, ``200``, ``300``, ..., ``900`` where ``"normal"`` = ``400`` and
+ ``"bold"`` = ``700``).
+ height : dict, float, :class:`ExprRef`, :class:`RelativeBandSize`
+ Height of the marks. One of:
+
+ * A number representing a fixed pixel height.
+
+ * A relative band size definition. For example, ``{band: 0.5}`` represents half of
+ the band
+ href : str, dict, :class:`URI`, :class:`ExprRef`
+ A URL to load upon mouse click. If defined, the mark acts as a hyperlink.
+ innerRadius : dict, float, :class:`ExprRef`
+ The inner radius in pixels of arc marks. ``innerRadius`` is an alias for
+ ``radius2``.
+
+ **Default value:** ``0``
+ interpolate : dict, :class:`ExprRef`, :class:`Interpolate`, Literal['basis', 'basis-open', 'basis-closed', 'bundle', 'cardinal', 'cardinal-open', 'cardinal-closed', 'catmull-rom', 'linear', 'linear-closed', 'monotone', 'natural', 'step', 'step-before', 'step-after']
+ The line interpolation method to use for line and area marks. One of the following:
+
+ * ``"linear"``: piecewise linear segments, as in a polyline.
+ * ``"linear-closed"``: close the linear segments to form a polygon.
+ * ``"step"``: alternate between horizontal and vertical segments, as in a step
+ function.
+ * ``"step-before"``: alternate between vertical and horizontal segments, as in a
+ step function.
+ * ``"step-after"``: alternate between horizontal and vertical segments, as in a step
+ function.
+ * ``"basis"``: a B-spline, with control point duplication on the ends.
+ * ``"basis-open"``: an open B-spline; may not intersect the start or end.
+ * ``"basis-closed"``: a closed B-spline, as in a loop.
+ * ``"cardinal"``: a Cardinal spline, with control point duplication on the ends.
+ * ``"cardinal-open"``: an open Cardinal spline; may not intersect the start or end,
+ but will intersect other control points.
+ * ``"cardinal-closed"``: a closed Cardinal spline, as in a loop.
+ * ``"bundle"``: equivalent to basis, except the tension parameter is used to
+ straighten the spline.
+ * ``"monotone"``: cubic interpolation that preserves monotonicity in y.
+ invalid : :class:`MarkInvalidDataMode`, Literal['filter', 'break-paths-filter-domains', 'break-paths-show-domains', 'break-paths-show-path-domains', 'show'], None
+ Invalid data mode, which defines how the marks and corresponding scales should
+ represent invalid values (``null`` and ``NaN`` in continuous scales *without*
+ defined output for invalid values).
+
+ * ``"filter"`` — *Exclude* all invalid values from the visualization's *marks* and
+ *scales*. For path marks (for line, area, trail), this option will create paths
+ that connect valid points, as if the data rows with invalid values do not exist.
+
+ * ``"break-paths-filter-domains"`` — Break path marks (for line, area, trail) at
+ invalid values. For non-path marks, this is equivalent to ``"filter"``. All
+ *scale* domains will *exclude* these filtered data points.
+
+ * ``"break-paths-show-domains"`` — Break paths (for line, area, trail) at invalid
+ values. Hide invalid values for non-path marks. All *scale* domains will
+ *include* these filtered data points (for both path and non-path marks).
+
+ * ``"show"`` or ``null`` — Show all data points in the marks and scale domains. Each
+ scale will use the output for invalid values defined in ``config.scale.invalid``
+ or, if unspecified, by default invalid values will produce the same visual values
+ as zero (if the scale includes zero) or the minimum value (if the scale does not
+ include zero).
+
+ * ``"break-paths-show-path-domains"`` (default) — This is equivalent to
+ ``"break-paths-show-domains"`` for path-based marks (line/area/trail) and
+ ``"filter"`` for non-path marks.
+
+ **Note**: If any channel's scale has an output for invalid values defined in
+ ``config.scale.invalid``, all values for the scales will be considered "valid" since
+ they can produce a reasonable output for the scales. Thus, fields for such channels
+ will not be filtered and will not cause path breaks.
+ limit : dict, float, :class:`ExprRef`
+ The maximum length of the text mark in pixels. The text value will be automatically
+ truncated if the rendered size exceeds the limit.
+
+ **Default value:** ``0`` -- indicating no limit
+ line : bool, dict, :class:`OverlayMarkDef`
+ A flag for overlaying line on top of area marks, or an object defining the
+ properties of the overlayed lines.
+
+ * If this value is an empty object (``{}``) or ``true``, lines with default
+ properties will be used.
+
+ * If this value is ``false``, no lines would be automatically added to area marks.
+
+ **Default value:** ``false``.
+ lineBreak : str, dict, :class:`ExprRef`
+ A delimiter, such as a newline character, upon which to break text strings into
+ multiple lines. This property is ignored if the text is array-valued.
+ lineHeight : dict, float, :class:`ExprRef`
+ The line height in pixels (the spacing between subsequent lines of text) for
+ multi-line text marks.
+ minBandSize : dict, float, :class:`ExprRef`
+ The minimum band size for bar and rectangle marks. **Default value:** ``0.25``
+ opacity : dict, float, :class:`ExprRef`
+ The overall opacity (value between [0,1]).
+
+ **Default value:** ``0.7`` for non-aggregate plots with ``point``, ``tick``,
+ ``circle``, or ``square`` marks or layered ``bar`` charts and ``1`` otherwise.
+ order : bool, None
+ For line and trail marks, this ``order`` property can be set to ``null`` or
+ ``false`` to make the lines use the original order in the data sources.
+ orient : :class:`Orientation`, Literal['horizontal', 'vertical']
+ The orientation of a non-stacked bar, tick, area, and line charts. The value is
+ either horizontal (default) or vertical.
+
+ * For bar, rule and tick, this determines whether the size of the bar and tick
+ should be applied to x or y dimension.
+ * For area, this property determines the orient property of the Vega output.
+ * For line and trail marks, this property determines the sort order of the points in
+ the line if ``config.sortLineBy`` is not specified. For stacked charts, this is
+ always determined by the orientation of the stack; therefore explicitly specified
+ value will be ignored.
+ outerRadius : dict, float, :class:`ExprRef`
+ The outer radius in pixels of arc marks. ``outerRadius`` is an alias for ``radius``.
+
+ **Default value:** ``0``
+ padAngle : dict, float, :class:`ExprRef`
+ The angular padding applied to sides of the arc, in radians.
+ point : bool, dict, Literal['transparent'], :class:`OverlayMarkDef`
+ A flag for overlaying points on top of line or area marks, or an object defining the
+ properties of the overlayed points.
+
+ * If this property is ``"transparent"``, transparent points will be used (for
+ enhancing tooltips and selections).
+
+ * If this property is an empty object (``{}``) or ``true``, filled points with
+ default properties will be used.
+
+ * If this property is ``false``, no points would be automatically added to line or
+ area marks.
+
+ **Default value:** ``false``.
+ radius : dict, float, :class:`ExprRef`
+ For arc mark, the primary (outer) radius in pixels.
+
+ For text marks, polar coordinate radial offset, in pixels, of the text from the
+ origin determined by the ``x`` and ``y`` properties.
+
+ **Default value:** ``min(plot_width, plot_height)/2``
+ radius2 : dict, float, :class:`ExprRef`
+ The secondary (inner) radius in pixels of arc marks.
+
+ **Default value:** ``0``
+ radius2Offset : dict, float, :class:`ExprRef`
+ Offset for radius2.
+ radiusOffset : dict, float, :class:`ExprRef`
+ Offset for radius.
+ shape : str, dict, :class:`ExprRef`, :class:`SymbolShape`
+ Shape of the point marks. Supported values include:
+
+ * plotting shapes: ``"circle"``, ``"square"``, ``"cross"``, ``"diamond"``,
+ ``"triangle-up"``, ``"triangle-down"``, ``"triangle-right"``, or
+ ``"triangle-left"``.
+ * the line symbol ``"stroke"``
+ * centered directional shapes ``"arrow"``, ``"wedge"``, or ``"triangle"``
+ * a custom `SVG path string
+ `__ (For correct
+ sizing, custom shape paths should be defined within a square bounding box with
+ coordinates ranging from -1 to 1 along both the x and y dimensions.)
+
+ **Default value:** ``"circle"``
+ size : dict, float, :class:`ExprRef`
+ Default size for marks.
+
+ * For ``point``/``circle``/``square``, this represents the pixel area of the marks.
+ Note that this value sets the area of the symbol; the side lengths will increase
+ with the square root of this value.
+ * For ``bar``, this represents the band size of the bar, in pixels.
+ * For ``text``, this represents the font size, in pixels.
+
+ **Default value:**
+
+ * ``30`` for point, circle, square marks; width/height's ``step``
+ * ``2`` for bar marks with discrete dimensions;
+ * ``5`` for bar marks with continuous dimensions;
+ * ``11`` for text marks.
+ smooth : bool, dict, :class:`ExprRef`
+ A boolean flag (default true) indicating if the image should be smoothed when
+ resized. If false, individual pixels should be scaled directly rather than
+ interpolated with smoothing. For SVG rendering, this option may not work in some
+ browsers due to lack of standardization.
+ stroke : str, dict, :class:`Color`, :class:`ExprRef`, :class:`Gradient`, :class:`HexColor`, :class:`ColorName`, :class:`LinearGradient`, :class:`RadialGradient`, Literal['black', 'silver', 'gray', 'white', 'maroon', 'red', 'purple', 'fuchsia', 'green', 'lime', 'olive', 'yellow', 'navy', 'blue', 'teal', 'aqua', 'orange', 'aliceblue', 'antiquewhite', 'aquamarine', 'azure', 'beige', 'bisque', 'blanchedalmond', 'blueviolet', 'brown', 'burlywood', 'cadetblue', 'chartreuse', 'chocolate', 'coral', 'cornflowerblue', 'cornsilk', 'crimson', 'cyan', 'darkblue', 'darkcyan', 'darkgoldenrod', 'darkgray', 'darkgreen', 'darkgrey', 'darkkhaki', 'darkmagenta', 'darkolivegreen', 'darkorange', 'darkorchid', 'darkred', 'darksalmon', 'darkseagreen', 'darkslateblue', 'darkslategray', 'darkslategrey', 'darkturquoise', 'darkviolet', 'deeppink', 'deepskyblue', 'dimgray', 'dimgrey', 'dodgerblue', 'firebrick', 'floralwhite', 'forestgreen', 'gainsboro', 'ghostwhite', 'gold', 'goldenrod', 'greenyellow', 'grey', 'honeydew', 'hotpink', 'indianred', 'indigo', 'ivory', 'khaki', 'lavender', 'lavenderblush', 'lawngreen', 'lemonchiffon', 'lightblue', 'lightcoral', 'lightcyan', 'lightgoldenrodyellow', 'lightgray', 'lightgreen', 'lightgrey', 'lightpink', 'lightsalmon', 'lightseagreen', 'lightskyblue', 'lightslategray', 'lightslategrey', 'lightsteelblue', 'lightyellow', 'limegreen', 'linen', 'magenta', 'mediumaquamarine', 'mediumblue', 'mediumorchid', 'mediumpurple', 'mediumseagreen', 'mediumslateblue', 'mediumspringgreen', 'mediumturquoise', 'mediumvioletred', 'midnightblue', 'mintcream', 'mistyrose', 'moccasin', 'navajowhite', 'oldlace', 'olivedrab', 'orangered', 'orchid', 'palegoldenrod', 'palegreen', 'paleturquoise', 'palevioletred', 'papayawhip', 'peachpuff', 'peru', 'pink', 'plum', 'powderblue', 'rosybrown', 'royalblue', 'saddlebrown', 'salmon', 'sandybrown', 'seagreen', 'seashell', 'sienna', 'skyblue', 'slateblue', 'slategray', 'slategrey', 'snow', 'springgreen', 'steelblue', 'tan', 'thistle', 'tomato', 'turquoise', 'violet', 'wheat', 'whitesmoke', 'yellowgreen', 'rebeccapurple'], None
+ Default stroke color. This property has higher precedence than ``config.color``. Set
+ to ``null`` to remove stroke.
+
+ **Default value:** (None)
+ strokeCap : dict, :class:`ExprRef`, :class:`StrokeCap`, Literal['butt', 'round', 'square']
+ The stroke cap for line ending style. One of ``"butt"``, ``"round"``, or
+ ``"square"``.
+
+ **Default value:** ``"butt"``
+ strokeDash : dict, Sequence[float], :class:`ExprRef`
+ An array of alternating stroke, space lengths for creating dashed or dotted lines.
+ strokeDashOffset : dict, float, :class:`ExprRef`
+ The offset (in pixels) into which to begin drawing with the stroke dash array.
+ strokeJoin : dict, :class:`ExprRef`, :class:`StrokeJoin`, Literal['miter', 'round', 'bevel']
+ The stroke line join method. One of ``"miter"``, ``"round"`` or ``"bevel"``.
+
+ **Default value:** ``"miter"``
+ strokeMiterLimit : dict, float, :class:`ExprRef`
+ The miter limit at which to bevel a line join.
+ strokeOffset : dict, float, :class:`ExprRef`
+ The offset in pixels at which to draw the group stroke and fill. If unspecified, the
+ default behavior is to dynamically offset stroked groups such that 1 pixel stroke
+ widths align with the pixel grid.
+ strokeOpacity : dict, float, :class:`ExprRef`
+ The stroke opacity (value between [0,1]).
+
+ **Default value:** ``1``
+ strokeWidth : dict, float, :class:`ExprRef`
+ The stroke width, in pixels.
+ style : str, Sequence[str]
+ A string or array of strings indicating the name of custom styles to apply to the
+ mark. A style is a named collection of mark property defaults defined within the
+ `style configuration
+ `__. If style is an
+ array, later styles will override earlier styles. Any `mark properties
+ `__ explicitly
+ defined within the ``encoding`` will override a style default.
+
+ **Default value:** The mark's name. For example, a bar mark will have style
+ ``"bar"`` by default. **Note:** Any specified style will augment the default style.
+ For example, a bar mark with ``"style": "foo"`` will receive from
+ ``config.style.bar`` and ``config.style.foo`` (the specified style ``"foo"`` has
+ higher precedence).
+ tension : dict, float, :class:`ExprRef`
+ Depending on the interpolation type, sets the tension parameter (for line and area
+ marks).
+ text : str, dict, :class:`Text`, Sequence[str], :class:`ExprRef`
+ Placeholder text if the ``text`` channel is not specified
+ theta : dict, float, :class:`ExprRef`
+ * For arc marks, the arc length in radians if theta2 is not specified, otherwise the
+ start arc angle. (A value of 0 indicates up or “north”, increasing values proceed
+ clockwise.)
+
+ * For text marks, polar coordinate angle in radians.
+ theta2 : dict, float, :class:`ExprRef`
+ The end angle of arc marks in radians. A value of 0 indicates up or “north”,
+ increasing values proceed clockwise.
+ theta2Offset : dict, float, :class:`ExprRef`
+ Offset for theta2.
+ thetaOffset : dict, float, :class:`ExprRef`
+ Offset for theta.
+ thickness : float
+ Thickness of the tick mark.
+
+ **Default value:** ``1``
+ timeUnitBandPosition : float
+ Default relative band position for a time unit. If set to ``0``, the marks will be
+ positioned at the beginning of the time unit band step. If set to ``0.5``, the marks
+ will be positioned in the middle of the time unit band step.
+ timeUnitBandSize : float
+ Default relative band size for a time unit. If set to ``1``, the bandwidth of the
+ marks will be equal to the time unit band step. If set to ``0.5``, bandwidth of the
+ marks will be half of the time unit band step.
+ tooltip : str, bool, dict, float, :class:`ExprRef`, :class:`TooltipContent`, None
+ The tooltip text string to show upon mouse hover or an object defining which fields
+ should the tooltip be derived from.
+
+ * If ``tooltip`` is ``true`` or ``{"content": "encoding"}``, then all fields from
+ ``encoding`` will be used.
+ * If ``tooltip`` is ``{"content": "data"}``, then all fields that appear in the
+ highlighted data point will be used.
+ * If set to ``null`` or ``false``, then no tooltip will be used.
+
+ See the `tooltip `__
+ documentation for a detailed discussion about tooltip in Vega-Lite.
+
+ **Default value:** ``null``
+ url : str, dict, :class:`URI`, :class:`ExprRef`
+ The URL of the image file for image marks.
+ width : dict, float, :class:`ExprRef`, :class:`RelativeBandSize`
+ Width of the marks. One of:
+
+ * A number representing a fixed pixel width.
+
+ * A relative band size definition. For example, ``{band: 0.5}`` represents half of
+ the band.
+ x : dict, float, :class:`ExprRef`, Literal['width']
+ X coordinates of the marks, or width of horizontal ``"bar"`` and ``"area"`` without
+ specified ``x2`` or ``width``.
+
+ The ``value`` of this channel can be a number or a string ``"width"`` for the width
+ of the plot.
+ x2 : dict, float, :class:`ExprRef`, Literal['width']
+ X2 coordinates for ranged ``"area"``, ``"bar"``, ``"rect"``, and ``"rule"``.
+
+ The ``value`` of this channel can be a number or a string ``"width"`` for the width
+ of the plot.
+ x2Offset : dict, float, :class:`ExprRef`
+ Offset for x2-position.
+ xOffset : dict, float, :class:`ExprRef`
+ Offset for x-position.
+ y : dict, float, :class:`ExprRef`, Literal['height']
+ Y coordinates of the marks, or height of vertical ``"bar"`` and ``"area"`` without
+ specified ``y2`` or ``height``.
+
+ The ``value`` of this channel can be a number or a string ``"height"`` for the
+ height of the plot.
+ y2 : dict, float, :class:`ExprRef`, Literal['height']
+ Y2 coordinates for ranged ``"area"``, ``"bar"``, ``"rect"``, and ``"rule"``.
+
+ The ``value`` of this channel can be a number or a string ``"height"`` for the
+ height of the plot.
+ y2Offset : dict, float, :class:`ExprRef`
+ Offset for y2-position.
+ yOffset : dict, float, :class:`ExprRef`
+ Offset for y-position.
+ """
+
+ _schema = {"$ref": "#/definitions/MarkDef"}
+
+ def __init__(
self,
align: Optional[Parameter | SchemaBase | Map | Align_T] = Undefined,
angle: Optional[float | Parameter | SchemaBase | Map] = Undefined,
@@ -2857,9 +603,8 @@ def mark_geoshape(
y2Offset: Optional[float | Parameter | SchemaBase | Map] = Undefined,
yOffset: Optional[float | Parameter | SchemaBase | Map] = Undefined,
**kwds,
- ) -> Self:
- """Set the chart's mark to 'geoshape' (see :class:`MarkDef`)."""
- kwds = dict(
+ ):
+ super().__init__(
align=align,
angle=angle,
aria=aria,
@@ -2948,14 +693,95 @@ def mark_geoshape(
yOffset=yOffset,
**kwds,
)
- copy = self.copy(deep=False) # type: ignore[attr-defined]
- if any(val is not Undefined for val in kwds.values()):
- copy.mark = core.MarkDef(type="geoshape", **kwds)
- else:
- copy.mark = "geoshape"
- return copy
- def mark_boxplot(
+
+class _BoxPlotDef(SchemaBase):
+ """
+ BoxPlotDef schema wrapper.
+
+ Parameters
+ ----------
+ box : bool, dict, :class:`BarConfig`, :class:`AreaConfig`, :class:`LineConfig`, :class:`MarkConfig`, :class:`RectConfig`, :class:`TickConfig`, :class:`AnyMarkConfig`
+
+ clip : bool
+ Whether a composite mark be clipped to the enclosing group's width and height.
+ color : str, dict, :class:`Color`, :class:`ExprRef`, :class:`Gradient`, :class:`HexColor`, :class:`ColorName`, :class:`LinearGradient`, :class:`RadialGradient`, Literal['black', 'silver', 'gray', 'white', 'maroon', 'red', 'purple', 'fuchsia', 'green', 'lime', 'olive', 'yellow', 'navy', 'blue', 'teal', 'aqua', 'orange', 'aliceblue', 'antiquewhite', 'aquamarine', 'azure', 'beige', 'bisque', 'blanchedalmond', 'blueviolet', 'brown', 'burlywood', 'cadetblue', 'chartreuse', 'chocolate', 'coral', 'cornflowerblue', 'cornsilk', 'crimson', 'cyan', 'darkblue', 'darkcyan', 'darkgoldenrod', 'darkgray', 'darkgreen', 'darkgrey', 'darkkhaki', 'darkmagenta', 'darkolivegreen', 'darkorange', 'darkorchid', 'darkred', 'darksalmon', 'darkseagreen', 'darkslateblue', 'darkslategray', 'darkslategrey', 'darkturquoise', 'darkviolet', 'deeppink', 'deepskyblue', 'dimgray', 'dimgrey', 'dodgerblue', 'firebrick', 'floralwhite', 'forestgreen', 'gainsboro', 'ghostwhite', 'gold', 'goldenrod', 'greenyellow', 'grey', 'honeydew', 'hotpink', 'indianred', 'indigo', 'ivory', 'khaki', 'lavender', 'lavenderblush', 'lawngreen', 'lemonchiffon', 'lightblue', 'lightcoral', 'lightcyan', 'lightgoldenrodyellow', 'lightgray', 'lightgreen', 'lightgrey', 'lightpink', 'lightsalmon', 'lightseagreen', 'lightskyblue', 'lightslategray', 'lightslategrey', 'lightsteelblue', 'lightyellow', 'limegreen', 'linen', 'magenta', 'mediumaquamarine', 'mediumblue', 'mediumorchid', 'mediumpurple', 'mediumseagreen', 'mediumslateblue', 'mediumspringgreen', 'mediumturquoise', 'mediumvioletred', 'midnightblue', 'mintcream', 'mistyrose', 'moccasin', 'navajowhite', 'oldlace', 'olivedrab', 'orangered', 'orchid', 'palegoldenrod', 'palegreen', 'paleturquoise', 'palevioletred', 'papayawhip', 'peachpuff', 'peru', 'pink', 'plum', 'powderblue', 'rosybrown', 'royalblue', 'saddlebrown', 'salmon', 'sandybrown', 'seagreen', 'seashell', 'sienna', 'skyblue', 'slateblue', 'slategray', 'slategrey', 'snow', 'springgreen', 'steelblue', 'tan', 'thistle', 'tomato', 'turquoise', 'violet', 'wheat', 'whitesmoke', 'yellowgreen', 'rebeccapurple']
+ Default color.
+
+ **Default value:** :raw-html:`` ■ :raw-html:``
+ ``"#4682b4"``
+
+ **Note:**
+
+ * This property cannot be used in a `style config
+ `__.
+ * The ``fill`` and ``stroke`` properties have higher precedence than ``color`` and
+ will override ``color``.
+ extent : float, Literal['min-max']
+ The extent of the whiskers. Available options include:
+
+ * ``"min-max"``: min and max are the lower and upper whiskers respectively.
+ * A number representing multiple of the interquartile range. This number will be
+ multiplied by the IQR to determine whisker boundary, which spans from the smallest
+ data to the largest data within the range *[Q1 - k * IQR, Q3 + k * IQR]* where
+ *Q1* and *Q3* are the first and third quartiles while *IQR* is the interquartile
+ range (*Q3-Q1*).
+
+ **Default value:** ``1.5``.
+ invalid : :class:`MarkInvalidDataMode`, Literal['filter', 'break-paths-filter-domains', 'break-paths-show-domains', 'break-paths-show-path-domains', 'show'], None
+ Invalid data mode, which defines how the marks and corresponding scales should
+ represent invalid values (``null`` and ``NaN`` in continuous scales *without*
+ defined output for invalid values).
+
+ * ``"filter"`` — *Exclude* all invalid values from the visualization's *marks* and
+ *scales*. For path marks (for line, area, trail), this option will create paths
+ that connect valid points, as if the data rows with invalid values do not exist.
+
+ * ``"break-paths-filter-domains"`` — Break path marks (for line, area, trail) at
+ invalid values. For non-path marks, this is equivalent to ``"filter"``. All
+ *scale* domains will *exclude* these filtered data points.
+
+ * ``"break-paths-show-domains"`` — Break paths (for line, area, trail) at invalid
+ values. Hide invalid values for non-path marks. All *scale* domains will
+ *include* these filtered data points (for both path and non-path marks).
+
+ * ``"show"`` or ``null`` — Show all data points in the marks and scale domains. Each
+ scale will use the output for invalid values defined in ``config.scale.invalid``
+ or, if unspecified, by default invalid values will produce the same visual values
+ as zero (if the scale includes zero) or the minimum value (if the scale does not
+ include zero).
+
+ * ``"break-paths-show-path-domains"`` (default) — This is equivalent to
+ ``"break-paths-show-domains"`` for path-based marks (line/area/trail) and
+ ``"filter"`` for non-path marks.
+
+ **Note**: If any channel's scale has an output for invalid values defined in
+ ``config.scale.invalid``, all values for the scales will be considered "valid" since
+ they can produce a reasonable output for the scales. Thus, fields for such channels
+ will not be filtered and will not cause path breaks.
+ median : bool, dict, :class:`BarConfig`, :class:`AreaConfig`, :class:`LineConfig`, :class:`MarkConfig`, :class:`RectConfig`, :class:`TickConfig`, :class:`AnyMarkConfig`
+
+ opacity : float
+ The opacity (value between [0,1]) of the mark.
+ orient : :class:`Orientation`, Literal['horizontal', 'vertical']
+ Orientation of the box plot. This is normally automatically determined based on
+ types of fields on x and y channels. However, an explicit ``orient`` be specified
+ when the orientation is ambiguous.
+
+ **Default value:** ``"vertical"``.
+ outliers : bool, dict, :class:`BarConfig`, :class:`AreaConfig`, :class:`LineConfig`, :class:`MarkConfig`, :class:`RectConfig`, :class:`TickConfig`, :class:`AnyMarkConfig`
+
+ rule : bool, dict, :class:`BarConfig`, :class:`AreaConfig`, :class:`LineConfig`, :class:`MarkConfig`, :class:`RectConfig`, :class:`TickConfig`, :class:`AnyMarkConfig`
+
+ size : float
+ Size of the box and median tick of a box plot
+ ticks : bool, dict, :class:`BarConfig`, :class:`AreaConfig`, :class:`LineConfig`, :class:`MarkConfig`, :class:`RectConfig`, :class:`TickConfig`, :class:`AnyMarkConfig`
+
+ """
+
+ _schema = {"$ref": "#/definitions/BoxPlotDef"}
+
+ def __init__(
self,
box: Optional[bool | SchemaBase | Map] = Undefined,
clip: Optional[bool] = Undefined,
@@ -2970,9 +796,8 @@ def mark_boxplot(
size: Optional[float] = Undefined,
ticks: Optional[bool | SchemaBase | Map] = Undefined,
**kwds,
- ) -> Self:
- """Set the chart's mark to 'boxplot' (see :class:`BoxPlotDef`)."""
- kwds = dict(
+ ):
+ super().__init__(
box=box,
clip=clip,
color=color,
@@ -2987,14 +812,57 @@ def mark_boxplot(
ticks=ticks,
**kwds,
)
- copy = self.copy(deep=False) # type: ignore[attr-defined]
- if any(val is not Undefined for val in kwds.values()):
- copy.mark = core.BoxPlotDef(type="boxplot", **kwds)
- else:
- copy.mark = "boxplot"
- return copy
- def mark_errorbar(
+
+class _ErrorBarDef(SchemaBase):
+ """
+ ErrorBarDef schema wrapper.
+
+ Parameters
+ ----------
+ clip : bool
+ Whether a composite mark be clipped to the enclosing group's width and height.
+ color : str, dict, :class:`Color`, :class:`ExprRef`, :class:`Gradient`, :class:`HexColor`, :class:`ColorName`, :class:`LinearGradient`, :class:`RadialGradient`, Literal['black', 'silver', 'gray', 'white', 'maroon', 'red', 'purple', 'fuchsia', 'green', 'lime', 'olive', 'yellow', 'navy', 'blue', 'teal', 'aqua', 'orange', 'aliceblue', 'antiquewhite', 'aquamarine', 'azure', 'beige', 'bisque', 'blanchedalmond', 'blueviolet', 'brown', 'burlywood', 'cadetblue', 'chartreuse', 'chocolate', 'coral', 'cornflowerblue', 'cornsilk', 'crimson', 'cyan', 'darkblue', 'darkcyan', 'darkgoldenrod', 'darkgray', 'darkgreen', 'darkgrey', 'darkkhaki', 'darkmagenta', 'darkolivegreen', 'darkorange', 'darkorchid', 'darkred', 'darksalmon', 'darkseagreen', 'darkslateblue', 'darkslategray', 'darkslategrey', 'darkturquoise', 'darkviolet', 'deeppink', 'deepskyblue', 'dimgray', 'dimgrey', 'dodgerblue', 'firebrick', 'floralwhite', 'forestgreen', 'gainsboro', 'ghostwhite', 'gold', 'goldenrod', 'greenyellow', 'grey', 'honeydew', 'hotpink', 'indianred', 'indigo', 'ivory', 'khaki', 'lavender', 'lavenderblush', 'lawngreen', 'lemonchiffon', 'lightblue', 'lightcoral', 'lightcyan', 'lightgoldenrodyellow', 'lightgray', 'lightgreen', 'lightgrey', 'lightpink', 'lightsalmon', 'lightseagreen', 'lightskyblue', 'lightslategray', 'lightslategrey', 'lightsteelblue', 'lightyellow', 'limegreen', 'linen', 'magenta', 'mediumaquamarine', 'mediumblue', 'mediumorchid', 'mediumpurple', 'mediumseagreen', 'mediumslateblue', 'mediumspringgreen', 'mediumturquoise', 'mediumvioletred', 'midnightblue', 'mintcream', 'mistyrose', 'moccasin', 'navajowhite', 'oldlace', 'olivedrab', 'orangered', 'orchid', 'palegoldenrod', 'palegreen', 'paleturquoise', 'palevioletred', 'papayawhip', 'peachpuff', 'peru', 'pink', 'plum', 'powderblue', 'rosybrown', 'royalblue', 'saddlebrown', 'salmon', 'sandybrown', 'seagreen', 'seashell', 'sienna', 'skyblue', 'slateblue', 'slategray', 'slategrey', 'snow', 'springgreen', 'steelblue', 'tan', 'thistle', 'tomato', 'turquoise', 'violet', 'wheat', 'whitesmoke', 'yellowgreen', 'rebeccapurple']
+ Default color.
+
+ **Default value:** :raw-html:`` ■ :raw-html:``
+ ``"#4682b4"``
+
+ **Note:**
+
+ * This property cannot be used in a `style config
+ `__.
+ * The ``fill`` and ``stroke`` properties have higher precedence than ``color`` and
+ will override ``color``.
+ extent : :class:`ErrorBarExtent`, Literal['ci', 'iqr', 'stderr', 'stdev']
+ The extent of the rule. Available options include:
+
+ * ``"ci"``: Extend the rule to the confidence interval of the mean.
+ * ``"stderr"``: The size of rule are set to the value of standard error, extending
+ from the mean.
+ * ``"stdev"``: The size of rule are set to the value of standard deviation,
+ extending from the mean.
+ * ``"iqr"``: Extend the rule to the q1 and q3.
+
+ **Default value:** ``"stderr"``.
+ opacity : float
+ The opacity (value between [0,1]) of the mark.
+ orient : :class:`Orientation`, Literal['horizontal', 'vertical']
+ Orientation of the error bar. This is normally automatically determined, but can be
+ specified when the orientation is ambiguous and cannot be automatically determined.
+ rule : bool, dict, :class:`BarConfig`, :class:`AreaConfig`, :class:`LineConfig`, :class:`MarkConfig`, :class:`RectConfig`, :class:`TickConfig`, :class:`AnyMarkConfig`
+
+ size : float
+ Size of the ticks of an error bar
+ thickness : float
+ Thickness of the ticks and the bar of an error bar
+ ticks : bool, dict, :class:`BarConfig`, :class:`AreaConfig`, :class:`LineConfig`, :class:`MarkConfig`, :class:`RectConfig`, :class:`TickConfig`, :class:`AnyMarkConfig`
+
+ """
+
+ _schema = {"$ref": "#/definitions/ErrorBarDef"}
+
+ def __init__(
self,
clip: Optional[bool] = Undefined,
color: Optional[str | Parameter | SchemaBase | Map | ColorName_T] = Undefined,
@@ -3006,9 +874,8 @@ def mark_errorbar(
thickness: Optional[float] = Undefined,
ticks: Optional[bool | SchemaBase | Map] = Undefined,
**kwds,
- ) -> Self:
- """Set the chart's mark to 'errorbar' (see :class:`ErrorBarDef`)."""
- kwds = dict(
+ ):
+ super().__init__(
clip=clip,
color=color,
extent=extent,
@@ -3020,14 +887,77 @@ def mark_errorbar(
ticks=ticks,
**kwds,
)
- copy = self.copy(deep=False) # type: ignore[attr-defined]
- if any(val is not Undefined for val in kwds.values()):
- copy.mark = core.ErrorBarDef(type="errorbar", **kwds)
- else:
- copy.mark = "errorbar"
- return copy
- def mark_errorband(
+
+class _ErrorBandDef(SchemaBase):
+ """
+ ErrorBandDef schema wrapper.
+
+ Parameters
+ ----------
+ band : bool, dict, :class:`BarConfig`, :class:`AreaConfig`, :class:`LineConfig`, :class:`MarkConfig`, :class:`RectConfig`, :class:`TickConfig`, :class:`AnyMarkConfig`
+
+ borders : bool, dict, :class:`BarConfig`, :class:`AreaConfig`, :class:`LineConfig`, :class:`MarkConfig`, :class:`RectConfig`, :class:`TickConfig`, :class:`AnyMarkConfig`
+
+ clip : bool
+ Whether a composite mark be clipped to the enclosing group's width and height.
+ color : str, dict, :class:`Color`, :class:`ExprRef`, :class:`Gradient`, :class:`HexColor`, :class:`ColorName`, :class:`LinearGradient`, :class:`RadialGradient`, Literal['black', 'silver', 'gray', 'white', 'maroon', 'red', 'purple', 'fuchsia', 'green', 'lime', 'olive', 'yellow', 'navy', 'blue', 'teal', 'aqua', 'orange', 'aliceblue', 'antiquewhite', 'aquamarine', 'azure', 'beige', 'bisque', 'blanchedalmond', 'blueviolet', 'brown', 'burlywood', 'cadetblue', 'chartreuse', 'chocolate', 'coral', 'cornflowerblue', 'cornsilk', 'crimson', 'cyan', 'darkblue', 'darkcyan', 'darkgoldenrod', 'darkgray', 'darkgreen', 'darkgrey', 'darkkhaki', 'darkmagenta', 'darkolivegreen', 'darkorange', 'darkorchid', 'darkred', 'darksalmon', 'darkseagreen', 'darkslateblue', 'darkslategray', 'darkslategrey', 'darkturquoise', 'darkviolet', 'deeppink', 'deepskyblue', 'dimgray', 'dimgrey', 'dodgerblue', 'firebrick', 'floralwhite', 'forestgreen', 'gainsboro', 'ghostwhite', 'gold', 'goldenrod', 'greenyellow', 'grey', 'honeydew', 'hotpink', 'indianred', 'indigo', 'ivory', 'khaki', 'lavender', 'lavenderblush', 'lawngreen', 'lemonchiffon', 'lightblue', 'lightcoral', 'lightcyan', 'lightgoldenrodyellow', 'lightgray', 'lightgreen', 'lightgrey', 'lightpink', 'lightsalmon', 'lightseagreen', 'lightskyblue', 'lightslategray', 'lightslategrey', 'lightsteelblue', 'lightyellow', 'limegreen', 'linen', 'magenta', 'mediumaquamarine', 'mediumblue', 'mediumorchid', 'mediumpurple', 'mediumseagreen', 'mediumslateblue', 'mediumspringgreen', 'mediumturquoise', 'mediumvioletred', 'midnightblue', 'mintcream', 'mistyrose', 'moccasin', 'navajowhite', 'oldlace', 'olivedrab', 'orangered', 'orchid', 'palegoldenrod', 'palegreen', 'paleturquoise', 'palevioletred', 'papayawhip', 'peachpuff', 'peru', 'pink', 'plum', 'powderblue', 'rosybrown', 'royalblue', 'saddlebrown', 'salmon', 'sandybrown', 'seagreen', 'seashell', 'sienna', 'skyblue', 'slateblue', 'slategray', 'slategrey', 'snow', 'springgreen', 'steelblue', 'tan', 'thistle', 'tomato', 'turquoise', 'violet', 'wheat', 'whitesmoke', 'yellowgreen', 'rebeccapurple']
+ Default color.
+
+ **Default value:** :raw-html:`` ■ :raw-html:``
+ ``"#4682b4"``
+
+ **Note:**
+
+ * This property cannot be used in a `style config
+ `__.
+ * The ``fill`` and ``stroke`` properties have higher precedence than ``color`` and
+ will override ``color``.
+ extent : :class:`ErrorBarExtent`, Literal['ci', 'iqr', 'stderr', 'stdev']
+ The extent of the band. Available options include:
+
+ * ``"ci"``: Extend the band to the confidence interval of the mean.
+ * ``"stderr"``: The size of band are set to the value of standard error, extending
+ from the mean.
+ * ``"stdev"``: The size of band are set to the value of standard deviation,
+ extending from the mean.
+ * ``"iqr"``: Extend the band to the q1 and q3.
+
+ **Default value:** ``"stderr"``.
+ interpolate : :class:`Interpolate`, Literal['basis', 'basis-open', 'basis-closed', 'bundle', 'cardinal', 'cardinal-open', 'cardinal-closed', 'catmull-rom', 'linear', 'linear-closed', 'monotone', 'natural', 'step', 'step-before', 'step-after']
+ The line interpolation method for the error band. One of the following:
+
+ * ``"linear"``: piecewise linear segments, as in a polyline.
+ * ``"linear-closed"``: close the linear segments to form a polygon.
+ * ``"step"``: a piecewise constant function (a step function) consisting of
+ alternating horizontal and vertical lines. The y-value changes at the midpoint of
+ each pair of adjacent x-values.
+ * ``"step-before"``: a piecewise constant function (a step function) consisting of
+ alternating horizontal and vertical lines. The y-value changes before the x-value.
+ * ``"step-after"``: a piecewise constant function (a step function) consisting of
+ alternating horizontal and vertical lines. The y-value changes after the x-value.
+ * ``"basis"``: a B-spline, with control point duplication on the ends.
+ * ``"basis-open"``: an open B-spline; may not intersect the start or end.
+ * ``"basis-closed"``: a closed B-spline, as in a loop.
+ * ``"cardinal"``: a Cardinal spline, with control point duplication on the ends.
+ * ``"cardinal-open"``: an open Cardinal spline; may not intersect the start or end,
+ but will intersect other control points.
+ * ``"cardinal-closed"``: a closed Cardinal spline, as in a loop.
+ * ``"bundle"``: equivalent to basis, except the tension parameter is used to
+ straighten the spline.
+ * ``"monotone"``: cubic interpolation that preserves monotonicity in y.
+ opacity : float
+ The opacity (value between [0,1]) of the mark.
+ orient : :class:`Orientation`, Literal['horizontal', 'vertical']
+ Orientation of the error band. This is normally automatically determined, but can be
+ specified when the orientation is ambiguous and cannot be automatically determined.
+ tension : float
+ The tension parameter for the interpolation type of the error band.
+ """
+
+ _schema = {"$ref": "#/definitions/ErrorBandDef"}
+
+ def __init__(
self,
band: Optional[bool | SchemaBase | Map] = Undefined,
borders: Optional[bool | SchemaBase | Map] = Undefined,
@@ -3039,9 +969,8 @@ def mark_errorband(
orient: Optional[SchemaBase | Orientation_T] = Undefined,
tension: Optional[float] = Undefined,
**kwds,
- ) -> Self:
- """Set the chart's mark to 'errorband' (see :class:`ErrorBandDef`)."""
- kwds = dict(
+ ):
+ super().__init__(
band=band,
borders=borders,
clip=clip,
@@ -3053,6 +982,174 @@ def mark_errorband(
tension=tension,
**kwds,
)
+
+
+class MarkMethodMixin:
+ """A mixin class that defines mark methods."""
+
+ @use_signature(_MarkDef)
+ def mark_arc(self, **kwds: Any) -> Self:
+ """Set the chart's mark to 'arc' (see :class:`MarkDef`)."""
+ copy = self.copy(deep=False) # type: ignore[attr-defined]
+ if any(val is not Undefined for val in kwds.values()):
+ copy.mark = core.MarkDef(type="arc", **kwds)
+ else:
+ copy.mark = "arc"
+ return copy
+
+ @use_signature(_MarkDef)
+ def mark_area(self, **kwds: Any) -> Self:
+ """Set the chart's mark to 'area' (see :class:`MarkDef`)."""
+ copy = self.copy(deep=False) # type: ignore[attr-defined]
+ if any(val is not Undefined for val in kwds.values()):
+ copy.mark = core.MarkDef(type="area", **kwds)
+ else:
+ copy.mark = "area"
+ return copy
+
+ @use_signature(_MarkDef)
+ def mark_bar(self, **kwds: Any) -> Self:
+ """Set the chart's mark to 'bar' (see :class:`MarkDef`)."""
+ copy = self.copy(deep=False) # type: ignore[attr-defined]
+ if any(val is not Undefined for val in kwds.values()):
+ copy.mark = core.MarkDef(type="bar", **kwds)
+ else:
+ copy.mark = "bar"
+ return copy
+
+ @use_signature(_MarkDef)
+ def mark_image(self, **kwds: Any) -> Self:
+ """Set the chart's mark to 'image' (see :class:`MarkDef`)."""
+ copy = self.copy(deep=False) # type: ignore[attr-defined]
+ if any(val is not Undefined for val in kwds.values()):
+ copy.mark = core.MarkDef(type="image", **kwds)
+ else:
+ copy.mark = "image"
+ return copy
+
+ @use_signature(_MarkDef)
+ def mark_line(self, **kwds: Any) -> Self:
+ """Set the chart's mark to 'line' (see :class:`MarkDef`)."""
+ copy = self.copy(deep=False) # type: ignore[attr-defined]
+ if any(val is not Undefined for val in kwds.values()):
+ copy.mark = core.MarkDef(type="line", **kwds)
+ else:
+ copy.mark = "line"
+ return copy
+
+ @use_signature(_MarkDef)
+ def mark_point(self, **kwds: Any) -> Self:
+ """Set the chart's mark to 'point' (see :class:`MarkDef`)."""
+ copy = self.copy(deep=False) # type: ignore[attr-defined]
+ if any(val is not Undefined for val in kwds.values()):
+ copy.mark = core.MarkDef(type="point", **kwds)
+ else:
+ copy.mark = "point"
+ return copy
+
+ @use_signature(_MarkDef)
+ def mark_rect(self, **kwds: Any) -> Self:
+ """Set the chart's mark to 'rect' (see :class:`MarkDef`)."""
+ copy = self.copy(deep=False) # type: ignore[attr-defined]
+ if any(val is not Undefined for val in kwds.values()):
+ copy.mark = core.MarkDef(type="rect", **kwds)
+ else:
+ copy.mark = "rect"
+ return copy
+
+ @use_signature(_MarkDef)
+ def mark_rule(self, **kwds: Any) -> Self:
+ """Set the chart's mark to 'rule' (see :class:`MarkDef`)."""
+ copy = self.copy(deep=False) # type: ignore[attr-defined]
+ if any(val is not Undefined for val in kwds.values()):
+ copy.mark = core.MarkDef(type="rule", **kwds)
+ else:
+ copy.mark = "rule"
+ return copy
+
+ @use_signature(_MarkDef)
+ def mark_text(self, **kwds: Any) -> Self:
+ """Set the chart's mark to 'text' (see :class:`MarkDef`)."""
+ copy = self.copy(deep=False) # type: ignore[attr-defined]
+ if any(val is not Undefined for val in kwds.values()):
+ copy.mark = core.MarkDef(type="text", **kwds)
+ else:
+ copy.mark = "text"
+ return copy
+
+ @use_signature(_MarkDef)
+ def mark_tick(self, **kwds: Any) -> Self:
+ """Set the chart's mark to 'tick' (see :class:`MarkDef`)."""
+ copy = self.copy(deep=False) # type: ignore[attr-defined]
+ if any(val is not Undefined for val in kwds.values()):
+ copy.mark = core.MarkDef(type="tick", **kwds)
+ else:
+ copy.mark = "tick"
+ return copy
+
+ @use_signature(_MarkDef)
+ def mark_trail(self, **kwds: Any) -> Self:
+ """Set the chart's mark to 'trail' (see :class:`MarkDef`)."""
+ copy = self.copy(deep=False) # type: ignore[attr-defined]
+ if any(val is not Undefined for val in kwds.values()):
+ copy.mark = core.MarkDef(type="trail", **kwds)
+ else:
+ copy.mark = "trail"
+ return copy
+
+ @use_signature(_MarkDef)
+ def mark_circle(self, **kwds: Any) -> Self:
+ """Set the chart's mark to 'circle' (see :class:`MarkDef`)."""
+ copy = self.copy(deep=False) # type: ignore[attr-defined]
+ if any(val is not Undefined for val in kwds.values()):
+ copy.mark = core.MarkDef(type="circle", **kwds)
+ else:
+ copy.mark = "circle"
+ return copy
+
+ @use_signature(_MarkDef)
+ def mark_square(self, **kwds: Any) -> Self:
+ """Set the chart's mark to 'square' (see :class:`MarkDef`)."""
+ copy = self.copy(deep=False) # type: ignore[attr-defined]
+ if any(val is not Undefined for val in kwds.values()):
+ copy.mark = core.MarkDef(type="square", **kwds)
+ else:
+ copy.mark = "square"
+ return copy
+
+ @use_signature(_MarkDef)
+ def mark_geoshape(self, **kwds: Any) -> Self:
+ """Set the chart's mark to 'geoshape' (see :class:`MarkDef`)."""
+ copy = self.copy(deep=False) # type: ignore[attr-defined]
+ if any(val is not Undefined for val in kwds.values()):
+ copy.mark = core.MarkDef(type="geoshape", **kwds)
+ else:
+ copy.mark = "geoshape"
+ return copy
+
+ @use_signature(_BoxPlotDef)
+ def mark_boxplot(self, **kwds: Any) -> Self:
+ """Set the chart's mark to 'boxplot' (see :class:`BoxPlotDef`)."""
+ copy = self.copy(deep=False) # type: ignore[attr-defined]
+ if any(val is not Undefined for val in kwds.values()):
+ copy.mark = core.BoxPlotDef(type="boxplot", **kwds)
+ else:
+ copy.mark = "boxplot"
+ return copy
+
+ @use_signature(_ErrorBarDef)
+ def mark_errorbar(self, **kwds: Any) -> Self:
+ """Set the chart's mark to 'errorbar' (see :class:`ErrorBarDef`)."""
+ copy = self.copy(deep=False) # type: ignore[attr-defined]
+ if any(val is not Undefined for val in kwds.values()):
+ copy.mark = core.ErrorBarDef(type="errorbar", **kwds)
+ else:
+ copy.mark = "errorbar"
+ return copy
+
+ @use_signature(_ErrorBandDef)
+ def mark_errorband(self, **kwds: Any) -> Self:
+ """Set the chart's mark to 'errorband' (see :class:`ErrorBandDef`)."""
copy = self.copy(deep=False) # type: ignore[attr-defined]
if any(val is not Undefined for val in kwds.values()):
copy.mark = core.ErrorBandDef(type="errorband", **kwds)
diff --git a/tools/generate_schema_wrapper.py b/tools/generate_schema_wrapper.py
index 70c3980e4..278606551 100644
--- a/tools/generate_schema_wrapper.py
+++ b/tools/generate_schema_wrapper.py
@@ -7,7 +7,6 @@
import json
import sys
import textwrap
-from collections import deque
from dataclasses import dataclass
from itertools import chain
from operator import attrgetter
@@ -218,9 +217,10 @@ class MarkMethodMixin:
'''
MARK_METHOD: Final = '''
-def mark_{mark}(self, {method_args}, **kwds) -> Self:
+@use_signature({decorator})
+def mark_{mark}(self, **kwds: Any) -> Self:
"""Set the chart's mark to '{mark}' (see :class:`{mark_def}`)."""
- kwds = dict({dict_args}, **kwds)
+
copy = self.copy(deep=False) # type: ignore[attr-defined]
if any(val is not Undefined for val in kwds.values()):
copy.mark = core.{mark_def}(type="{mark}", **kwds)
@@ -903,32 +903,30 @@ def generate_vegalite_mark_mixin(fp: Path, /, markdefs: dict[str, str]) -> str:
schema = load_schema(fp)
code: list[str] = []
+ it_dummy = (
+ SchemaGenerator(
+ classname=f"_{mark_def}",
+ schema={"$ref": "#/definitions/" + mark_def},
+ rootschema=schema,
+ schemarepr={"$ref": "#/definitions/" + mark_def},
+ exclude_properties={"type"},
+ summary=f"{mark_def} schema wrapper.",
+ ).schema_class()
+ for mark_def in markdefs.values()
+ )
+
for mark_enum, mark_def in markdefs.items():
_def = schema["definitions"][mark_enum]
marks: list[Any] = _def["enum"] if "enum" in _def else [_def["const"]]
- info = SchemaInfo.from_refname(mark_def, rootschema=schema)
- mark_args = generate_mark_args(info)
for mark in marks:
# TODO: only include args relevant to given type?
- mark_method = MARK_METHOD.format(mark=mark, mark_def=mark_def, **mark_args)
+ mark_method = MARK_METHOD.format(
+ decorator=f"_{mark_def}", mark=mark, mark_def=mark_def
+ )
code.append("\n ".join(mark_method.splitlines()))
- return MARK_MIXIN.format(methods="\n".join(code))
-
-
-def generate_mark_args(
- info: SchemaInfo, /
-) -> dict[Literal["method_args", "dict_args"], str]:
- args = codegen.get_args(info)
- method_args: deque[str] = deque()
- dict_args: deque[str] = deque()
- for p, p_info in args.iter_args(arg_required_kwds, exclude="type"):
- dict_args.append(f"{p}={p}")
- method_args.append(
- f"{p}: {p_info.to_type_repr(target='annotation', use_undefined=True)} = Undefined"
- )
- return {"method_args": ", ".join(method_args), "dict_args": ", ".join(dict_args)}
+ return "\n".join(chain(it_dummy, [MARK_MIXIN.format(methods="\n".join(code))]))
def generate_typed_dict(
@@ -1143,7 +1141,7 @@ def vegalite_main(skip_download: bool = False) -> None:
print(f"Generating\n {schemafile!s}\n ->{fp_mixins!s}")
mixins_imports = (
"from typing import Any, Sequence, List, Literal, Union",
- "from altair.utils import use_signature, Undefined",
+ "from altair.utils import use_signature, Undefined, SchemaBase",
"from . import core",
)
@@ -1159,7 +1157,7 @@ def vegalite_main(skip_download: bool = False) -> None:
textwrap.indent(import_typing_extensions((3, 11), "Self"), " "),
"from altair.typing import Optional",
"from ._typing import * # noqa: F403",
- "from altair import Parameter, SchemaBase",
+ "from altair import Parameter",
),
"\n\n\n",
mark_mixin,
diff --git a/tools/schemapi/codegen.py b/tools/schemapi/codegen.py
index 37d512087..dbb3f5974 100644
--- a/tools/schemapi/codegen.py
+++ b/tools/schemapi/codegen.py
@@ -221,6 +221,9 @@ def __init__(
schemarepr: object | None = None,
rootschemarepr: object | None = None,
nodefault: list[str] | None = None,
+ *,
+ exclude_properties: Iterable[str] = (),
+ summary: str | None = None,
**kwargs,
) -> None:
self.classname = classname
@@ -230,6 +233,8 @@ def __init__(
self.schemarepr = schemarepr
self.rootschemarepr = rootschemarepr
self.nodefault = nodefault or ()
+ self.exclude_properties: set[str] = set(exclude_properties)
+ self.summary: str = summary or f"{self.classname} schema wrapper"
self.kwargs = kwargs
def subclasses(self) -> Iterator[str]:
@@ -288,7 +293,7 @@ def arg_info(self) -> ArgInfo:
def docstring(self, indent: int = 0) -> str:
info = self.info
# https://numpydoc.readthedocs.io/en/latest/format.html#short-summary
- doc = [f"{self.classname} schema wrapper"]
+ doc = [self.summary]
if info.description:
# https://numpydoc.readthedocs.io/en/latest/format.html#extended-summary
# Remove condition from description
@@ -309,7 +314,10 @@ def docstring(self, indent: int = 0) -> str:
it = chain.from_iterable(
(f"{p} : {p_info.to_type_repr()}", f" {p_info.deep_description}")
for p, p_info in arg_info.iter_args(
- arg_info.required, arg_kwds, arg_invalid_kwds
+ arg_info.required,
+ arg_kwds,
+ arg_invalid_kwds,
+ exclude=self.exclude_properties,
)
)
doc.extend(chain(["", "Parameters", "----------", ""], it))
@@ -331,10 +339,11 @@ def init_code(self, indent: int = 0) -> str:
def init_args(self) -> tuple[list[str], list[str]]:
info = self.info
arg_info = self.arg_info
+ exclude = self.exclude_properties
nodefault = set(self.nodefault)
- arg_info.required -= nodefault
- arg_info.kwds -= nodefault
+ arg_info.required.difference_update(nodefault, exclude)
+ arg_info.kwds.difference_update(nodefault, exclude)
args: list[str] = ["self"]
super_args: list[str] = []
From 255f7361cac4c88f395b83504a7cbbf5b91d80f2 Mon Sep 17 00:00:00 2001
From: Dan Redding <125183946+dangotbanned@users.noreply.github.com>
Date: Mon, 11 Nov 2024 17:13:14 +0000
Subject: [PATCH 04/42] refactor: `alt.themes` -> `alt.theme` (#3618)
---
altair/__init__.py | 38 +-
altair/theme.py | 321 +++++++++++++
altair/typing/__init__.py | 4 -
altair/typing/theme.py | 1 -
altair/utils/deprecation.py | 87 +++-
altair/utils/plugin_registry.py | 16 +-
altair/utils/theme.py | 52 ---
altair/vegalite/v5/__init__.py | 644 +++++++++++++++++++++++++-
altair/vegalite/v5/api.py | 8 +-
altair/vegalite/v5/schema/__init__.py | 569 ++++++++++++++++++++++-
altair/vegalite/v5/schema/_config.py | 134 +++---
altair/vegalite/v5/theme.py | 145 +++---
doc/user_guide/api.rst | 102 +++-
doc/user_guide/customization.rst | 54 +--
tests/utils/test_deprecation.py | 24 +
tests/vegalite/test_common.py | 13 +-
tests/vegalite/v5/test_api.py | 8 +-
tests/vegalite/v5/test_theme.py | 81 +++-
tools/generate_api_docs.py | 43 +-
tools/generate_schema_wrapper.py | 116 ++++-
tools/update_init_file.py | 119 ++++-
21 files changed, 2268 insertions(+), 311 deletions(-)
create mode 100644 altair/theme.py
delete mode 100644 altair/typing/theme.py
delete mode 100644 altair/utils/theme.py
diff --git a/altair/__init__.py b/altair/__init__.py
index d4e20f02f..cbc2c3b52 100644
--- a/altair/__init__.py
+++ b/altair/__init__.py
@@ -617,7 +617,6 @@
"mixins",
"param",
"parse_shorthand",
- "register_theme",
"renderers",
"repeat",
"sample",
@@ -627,7 +626,6 @@
"sequence",
"sphere",
"theme",
- "themes",
"to_csv",
"to_json",
"to_values",
@@ -653,10 +651,44 @@ def __dir__():
from altair.jupyter import JupyterChart
from altair.expr import expr
from altair.utils import AltairDeprecationWarning, parse_shorthand, Undefined
-from altair import typing
+from altair import typing, theme
def load_ipython_extension(ipython):
from altair._magics import vegalite
ipython.register_magic_function(vegalite, "cell")
+
+
+def __getattr__(name: str):
+ from altair.utils.deprecation import deprecated_warn
+
+ if name == "themes":
+ deprecated_warn(
+ "Most cases require only the following change:\n\n"
+ " # Deprecated\n"
+ " alt.themes.enable('quartz')\n\n"
+ " # Updated\n"
+ " alt.theme.enable('quartz')\n\n"
+ "If your code registers a theme, make the following change:\n\n"
+ " # Deprecated\n"
+ " def custom_theme():\n"
+ " return {'height': 400, 'width': 700}\n"
+ " alt.themes.register('theme_name', custom_theme)\n"
+ " alt.themes.enable('theme_name')\n\n"
+ " # Updated\n"
+ " @alt.theme.register('theme_name', enable=True)\n"
+ " def custom_theme() -> alt.theme.ThemeConfig:\n"
+ " return {'height': 400, 'width': 700}\n\n"
+ "See the updated User Guide for further details:\n"
+ " https://altair-viz.github.io/user_guide/api.html#theme\n"
+ " https://altair-viz.github.io/user_guide/customization.html#chart-themes",
+ version="5.5.0",
+ alternative="altair.theme",
+ stacklevel=3,
+ action="once",
+ )
+ return theme._themes
+ else:
+ msg = f"module {__name__!r} has no attribute {name!r}"
+ raise AttributeError(msg)
diff --git a/altair/theme.py b/altair/theme.py
new file mode 100644
index 000000000..e77a95eb8
--- /dev/null
+++ b/altair/theme.py
@@ -0,0 +1,321 @@
+"""Customizing chart configuration defaults."""
+
+from __future__ import annotations
+
+from functools import wraps as _wraps
+from typing import TYPE_CHECKING, Any
+from typing import overload as _overload
+
+from altair.vegalite.v5.schema._config import (
+ AreaConfigKwds,
+ AutoSizeParamsKwds,
+ AxisConfigKwds,
+ AxisResolveMapKwds,
+ BarConfigKwds,
+ BindCheckboxKwds,
+ BindDirectKwds,
+ BindInputKwds,
+ BindRadioSelectKwds,
+ BindRangeKwds,
+ BoxPlotConfigKwds,
+ BrushConfigKwds,
+ CompositionConfigKwds,
+ ConfigKwds,
+ DateTimeKwds,
+ DerivedStreamKwds,
+ ErrorBandConfigKwds,
+ ErrorBarConfigKwds,
+ FeatureGeometryGeoJsonPropertiesKwds,
+ FormatConfigKwds,
+ GeoJsonFeatureCollectionKwds,
+ GeoJsonFeatureKwds,
+ GeometryCollectionKwds,
+ GradientStopKwds,
+ HeaderConfigKwds,
+ IntervalSelectionConfigKwds,
+ IntervalSelectionConfigWithoutTypeKwds,
+ LegendConfigKwds,
+ LegendResolveMapKwds,
+ LegendStreamBindingKwds,
+ LinearGradientKwds,
+ LineConfigKwds,
+ LineStringKwds,
+ LocaleKwds,
+ MarkConfigKwds,
+ MergedStreamKwds,
+ MultiLineStringKwds,
+ MultiPointKwds,
+ MultiPolygonKwds,
+ NumberLocaleKwds,
+ OverlayMarkDefKwds,
+ PaddingKwds,
+ PointKwds,
+ PointSelectionConfigKwds,
+ PointSelectionConfigWithoutTypeKwds,
+ PolygonKwds,
+ ProjectionConfigKwds,
+ ProjectionKwds,
+ RadialGradientKwds,
+ RangeConfigKwds,
+ RectConfigKwds,
+ ResolveKwds,
+ RowColKwds,
+ ScaleConfigKwds,
+ ScaleInvalidDataConfigKwds,
+ ScaleResolveMapKwds,
+ SelectionConfigKwds,
+ StepKwds,
+ StyleConfigIndexKwds,
+ ThemeConfig,
+ TickConfigKwds,
+ TimeIntervalStepKwds,
+ TimeLocaleKwds,
+ TitleConfigKwds,
+ TitleParamsKwds,
+ TooltipContentKwds,
+ TopLevelSelectionParameterKwds,
+ VariableParameterKwds,
+ ViewBackgroundKwds,
+ ViewConfigKwds,
+)
+from altair.vegalite.v5.theme import themes as _themes
+
+if TYPE_CHECKING:
+ import sys
+ from typing import Any, Callable, Literal
+
+ if sys.version_info >= (3, 11):
+ from typing import LiteralString
+ else:
+ from typing_extensions import LiteralString
+ if sys.version_info >= (3, 10):
+ from typing import ParamSpec
+ else:
+ from typing_extensions import ParamSpec
+
+ from altair.utils.plugin_registry import Plugin
+
+ P = ParamSpec("P")
+
+__all__ = [
+ "AreaConfigKwds",
+ "AutoSizeParamsKwds",
+ "AxisConfigKwds",
+ "AxisResolveMapKwds",
+ "BarConfigKwds",
+ "BindCheckboxKwds",
+ "BindDirectKwds",
+ "BindInputKwds",
+ "BindRadioSelectKwds",
+ "BindRangeKwds",
+ "BoxPlotConfigKwds",
+ "BrushConfigKwds",
+ "CompositionConfigKwds",
+ "ConfigKwds",
+ "DateTimeKwds",
+ "DerivedStreamKwds",
+ "ErrorBandConfigKwds",
+ "ErrorBarConfigKwds",
+ "FeatureGeometryGeoJsonPropertiesKwds",
+ "FormatConfigKwds",
+ "GeoJsonFeatureCollectionKwds",
+ "GeoJsonFeatureKwds",
+ "GeometryCollectionKwds",
+ "GradientStopKwds",
+ "HeaderConfigKwds",
+ "IntervalSelectionConfigKwds",
+ "IntervalSelectionConfigWithoutTypeKwds",
+ "LegendConfigKwds",
+ "LegendResolveMapKwds",
+ "LegendStreamBindingKwds",
+ "LineConfigKwds",
+ "LineStringKwds",
+ "LinearGradientKwds",
+ "LocaleKwds",
+ "MarkConfigKwds",
+ "MergedStreamKwds",
+ "MultiLineStringKwds",
+ "MultiPointKwds",
+ "MultiPolygonKwds",
+ "NumberLocaleKwds",
+ "OverlayMarkDefKwds",
+ "PaddingKwds",
+ "PointKwds",
+ "PointSelectionConfigKwds",
+ "PointSelectionConfigWithoutTypeKwds",
+ "PolygonKwds",
+ "ProjectionConfigKwds",
+ "ProjectionKwds",
+ "RadialGradientKwds",
+ "RangeConfigKwds",
+ "RectConfigKwds",
+ "ResolveKwds",
+ "RowColKwds",
+ "ScaleConfigKwds",
+ "ScaleInvalidDataConfigKwds",
+ "ScaleResolveMapKwds",
+ "SelectionConfigKwds",
+ "StepKwds",
+ "StyleConfigIndexKwds",
+ "ThemeConfig",
+ "TickConfigKwds",
+ "TimeIntervalStepKwds",
+ "TimeLocaleKwds",
+ "TitleConfigKwds",
+ "TitleParamsKwds",
+ "TooltipContentKwds",
+ "TopLevelSelectionParameterKwds",
+ "VariableParameterKwds",
+ "ViewBackgroundKwds",
+ "ViewConfigKwds",
+ "active",
+ "enable",
+ "get",
+ "names",
+ "options",
+ "register",
+ "unregister",
+]
+
+
+def register(
+ name: LiteralString, *, enable: bool
+) -> Callable[[Plugin[ThemeConfig]], Plugin[ThemeConfig]]:
+ """
+ Decorator for registering a theme function.
+
+ Parameters
+ ----------
+ name
+ Unique name assigned in registry.
+ enable
+ Auto-enable the wrapped theme.
+
+ Examples
+ --------
+ Register and enable a theme::
+
+ import altair as alt
+ from altair import theme
+
+
+ @theme.register("param_font_size", enable=True)
+ def custom_theme() -> theme.ThemeConfig:
+ sizes = 12, 14, 16, 18, 20
+ return {
+ "autosize": {"contains": "content", "resize": True},
+ "background": "#F3F2F1",
+ "config": {
+ "axisX": {"labelFontSize": sizes[1], "titleFontSize": sizes[1]},
+ "axisY": {"labelFontSize": sizes[1], "titleFontSize": sizes[1]},
+ "font": "'Lato', 'Segoe UI', Tahoma, Verdana, sans-serif",
+ "headerColumn": {"labelFontSize": sizes[1]},
+ "headerFacet": {"labelFontSize": sizes[1]},
+ "headerRow": {"labelFontSize": sizes[1]},
+ "legend": {"labelFontSize": sizes[0], "titleFontSize": sizes[1]},
+ "text": {"fontSize": sizes[0]},
+ "title": {"fontSize": sizes[-1]},
+ },
+ "height": {"step": 28},
+ "width": 350,
+ }
+
+ We can then see the ``name`` parameter displayed when checking::
+
+ theme.active
+ "param_font_size"
+
+ Until another theme has been enabled, all charts will use defaults set in ``custom_theme()``::
+
+ from vega_datasets import data
+
+ source = data.stocks()
+ lines = (
+ alt.Chart(source, title=alt.Title("Stocks"))
+ .mark_line()
+ .encode(x="date:T", y="price:Q", color="symbol:N")
+ )
+ lines.interactive(bind_y=False)
+
+ """
+
+ # HACK: See for `LiteralString` requirement in `name`
+ # https://github.com/vega/altair/pull/3526#discussion_r1743350127
+ def decorate(func: Plugin[ThemeConfig], /) -> Plugin[ThemeConfig]:
+ _register(name, func)
+ if enable:
+ _themes.enable(name)
+
+ @_wraps(func)
+ def wrapper(*args: P.args, **kwargs: P.kwargs) -> ThemeConfig:
+ return func(*args, **kwargs)
+
+ return wrapper
+
+ return decorate
+
+
+def unregister(name: LiteralString) -> Plugin[ThemeConfig]:
+ """
+ Remove and return a previously registered theme.
+
+ Parameters
+ ----------
+ name
+ Unique name assigned during ``alt.theme.register``.
+
+ Raises
+ ------
+ TypeError
+ When ``name`` has not been registered.
+ """
+ plugin = _register(name, None)
+ if plugin is None:
+ msg = (
+ f"Found no theme named {name!r} in registry.\n"
+ f"Registered themes:\n"
+ f"{names()!r}"
+ )
+ raise TypeError(msg)
+ else:
+ return plugin
+
+
+enable = _themes.enable
+get = _themes.get
+names = _themes.names
+active: str
+"""Return the name of the currently active theme."""
+options: dict[str, Any]
+"""Return the current themes options dictionary."""
+
+
+def __dir__() -> list[str]:
+ return __all__
+
+
+@_overload
+def __getattr__(name: Literal["active"]) -> str: ... # type: ignore[misc]
+@_overload
+def __getattr__(name: Literal["options"]) -> dict[str, Any]: ... # type: ignore[misc]
+def __getattr__(name: str) -> Any:
+ if name == "active":
+ return _themes.active
+ elif name == "options":
+ return _themes.options
+ else:
+ msg = f"module {__name__!r} has no attribute {name!r}"
+ raise AttributeError(msg)
+
+
+def _register(
+ name: LiteralString, fn: Plugin[ThemeConfig] | None, /
+) -> Plugin[ThemeConfig] | None:
+ if fn is None:
+ return _themes._plugins.pop(name, None)
+ elif _themes.plugin_type(fn):
+ _themes._plugins[name] = fn
+ return fn
+ else:
+ msg = f"{type(fn).__name__!r} is not a callable theme\n\n{fn!r}"
+ raise TypeError(msg)
diff --git a/altair/typing/__init__.py b/altair/typing/__init__.py
index d80469f35..cd8cb1489 100644
--- a/altair/typing/__init__.py
+++ b/altair/typing/__init__.py
@@ -46,13 +46,9 @@
"ChartType",
"EncodeKwds",
"Optional",
- "ThemeConfig",
"is_chart_type",
- "theme",
]
-from altair.typing import theme
-from altair.typing.theme import ThemeConfig
from altair.utils.schemapi import Optional
from altair.vegalite.v5.api import ChartType, is_chart_type
from altair.vegalite.v5.schema.channels import (
diff --git a/altair/typing/theme.py b/altair/typing/theme.py
deleted file mode 100644
index 17f9a7fd2..000000000
--- a/altair/typing/theme.py
+++ /dev/null
@@ -1 +0,0 @@
-from altair.vegalite.v5.schema._config import * # noqa: F403
diff --git a/altair/utils/deprecation.py b/altair/utils/deprecation.py
index f11dd1a41..2b07a229e 100644
--- a/altair/utils/deprecation.py
+++ b/altair/utils/deprecation.py
@@ -1,8 +1,9 @@
from __future__ import annotations
import sys
+import threading
import warnings
-from typing import TYPE_CHECKING
+from typing import TYPE_CHECKING, Literal
if sys.version_info >= (3, 13):
from warnings import deprecated as _deprecated
@@ -16,6 +17,13 @@
else:
from typing_extensions import LiteralString
+__all__ = [
+ "AltairDeprecationWarning",
+ "deprecated",
+ "deprecated_static_only",
+ "deprecated_warn",
+]
+
class AltairDeprecationWarning(DeprecationWarning): ...
@@ -26,7 +34,7 @@ def _format_message(
message: LiteralString | None,
/,
) -> LiteralString:
- output = f"Deprecated in `altair={version}`."
+ output = f"\nDeprecated since `altair={version}`."
if alternative:
output = f"{output} Use {alternative} instead."
return f"{output}\n{message}" if message else output
@@ -81,6 +89,7 @@ def deprecated_warn(
alternative: LiteralString | None = None,
category: type[AltairDeprecationWarning] = AltairDeprecationWarning,
stacklevel: int = 2,
+ action: Literal["once"] | None = None,
) -> None:
"""
Indicate that the current code path is deprecated.
@@ -112,4 +121,76 @@ def deprecated_warn(
[warnings.warn](https://docs.python.org/3/library/warnings.html#warnings.warn)
"""
msg = _format_message(version, alternative, message)
- warnings.warn(msg, category=category, stacklevel=stacklevel)
+ if action is None:
+ warnings.warn(msg, category=category, stacklevel=stacklevel)
+ elif action == "once":
+ _warn_once(msg, category=category, stacklevel=stacklevel)
+ else:
+ raise NotImplementedError(action)
+
+
+deprecated_static_only = _deprecated
+"""
+Using this decorator **exactly as described**, ensures ``message`` is displayed to a static type checker.
+
+**BE CAREFUL USING THIS**.
+
+See screenshots in `comment`_ for motivation.
+
+Every use should look like::
+
+ @deprecated_static_only(
+ "Deprecated since `altair=5.5.0`. Use altair.other instead.",
+ category=None,
+ )
+ def old_function(*args): ...
+
+If a runtime warning is desired, use `@alt.utils.deprecated` instead.
+
+Parameters
+----------
+message : LiteralString
+ - **Not** a variable
+ - **Not** use placeholders
+ - **Not** use concatenation
+ - **Do not use anything that could be considered dynamic**
+
+category : None
+ You **need** to explicitly pass ``None``
+
+.. _comment:
+ https://github.com/vega/altair/pull/3618#issuecomment-2423991968
+---
+"""
+
+
+class _WarningsMonitor:
+ def __init__(self) -> None:
+ self._warned: dict[LiteralString, Literal[True]] = {}
+ self._lock = threading.Lock()
+
+ def __contains__(self, key: LiteralString, /) -> bool:
+ with self._lock:
+ return key in self._warned
+
+ def hit(self, key: LiteralString, /) -> None:
+ with self._lock:
+ self._warned[key] = True
+
+ def clear(self) -> None:
+ with self._lock:
+ self._warned.clear()
+
+
+_warnings_monitor = _WarningsMonitor()
+
+
+def _warn_once(
+ msg: LiteralString, /, *, category: type[AltairDeprecationWarning], stacklevel: int
+) -> None:
+ global _warnings_monitor
+ if msg in _warnings_monitor:
+ return
+ else:
+ _warnings_monitor.hit(msg)
+ warnings.warn(msg, category=category, stacklevel=stacklevel + 1)
diff --git a/altair/utils/plugin_registry.py b/altair/utils/plugin_registry.py
index b2723396a..b4505fd9f 100644
--- a/altair/utils/plugin_registry.py
+++ b/altair/utils/plugin_registry.py
@@ -39,7 +39,7 @@ def __str__(self):
return f"No {self.name!r} entry point found in group {self.group!r}"
-class PluginEnabler:
+class PluginEnabler(Generic[PluginT, R]):
"""
Context manager for enabling plugins.
@@ -51,21 +51,23 @@ class PluginEnabler:
# plugins back to original state
"""
- def __init__(self, registry: PluginRegistry, name: str, **options):
- self.registry: PluginRegistry = registry
+ def __init__(
+ self, registry: PluginRegistry[PluginT, R], name: str, **options: Any
+ ) -> None:
+ self.registry: PluginRegistry[PluginT, R] = registry
self.name: str = name
self.options: dict[str, Any] = options
self.original_state: dict[str, Any] = registry._get_state()
self.registry._enable(name, **options)
- def __enter__(self) -> PluginEnabler:
+ def __enter__(self) -> PluginEnabler[PluginT, R]:
return self
def __exit__(self, typ: type, value: Exception, traceback: TracebackType) -> None:
self.registry._set_state(self.original_state)
def __repr__(self) -> str:
- return f"{self.registry.__class__.__name__}.enable({self.name!r})"
+ return f"{type(self.registry).__name__}.enable({self.name!r})"
class PluginRegistry(Generic[PluginT, R]):
@@ -211,7 +213,9 @@ def _enable(self, name: str, **options) -> None:
self._global_settings[key] = options.pop(key)
self._options = options
- def enable(self, name: str | None = None, **options) -> PluginEnabler:
+ def enable(
+ self, name: str | None = None, **options: Any
+ ) -> PluginEnabler[PluginT, R]:
"""
Enable a plugin by name.
diff --git a/altair/utils/theme.py b/altair/utils/theme.py
deleted file mode 100644
index bbb7247bc..000000000
--- a/altair/utils/theme.py
+++ /dev/null
@@ -1,52 +0,0 @@
-"""Utilities for registering and working with themes."""
-
-from __future__ import annotations
-
-import sys
-from typing import TYPE_CHECKING
-
-from altair.utils.plugin_registry import Plugin, PluginRegistry
-from altair.vegalite.v5.schema._config import ThemeConfig
-
-if sys.version_info >= (3, 11):
- from typing import LiteralString
-else:
- from typing_extensions import LiteralString
-
-if TYPE_CHECKING:
- from altair.utils.plugin_registry import PluginEnabler
- from altair.vegalite.v5.theme import AltairThemes, VegaThemes
-
-ThemeType = Plugin[ThemeConfig]
-
-
-# HACK: See for `LiteralString` requirement in `name`
-# https://github.com/vega/altair/pull/3526#discussion_r1743350127
-class ThemeRegistry(PluginRegistry[ThemeType, ThemeConfig]):
- def enable(
- self, name: LiteralString | AltairThemes | VegaThemes | None = None, **options
- ) -> PluginEnabler:
- """
- Enable a theme by name.
-
- This can be either called directly, or used as a context manager.
-
- Parameters
- ----------
- name : string (optional)
- The name of the theme to enable. If not specified, then use the
- current active name.
- **options :
- Any additional parameters will be passed to the theme as keyword
- arguments
-
- Returns
- -------
- PluginEnabler:
- An object that allows enable() to be used as a context manager
-
- Notes
- -----
- Default `vega` themes can be previewed at https://vega.github.io/vega-themes/
- """
- return super().enable(name, **options)
diff --git a/altair/vegalite/v5/__init__.py b/altair/vegalite/v5/__init__.py
index a18be6e11..d8d794b2a 100644
--- a/altair/vegalite/v5/__init__.py
+++ b/altair/vegalite/v5/__init__.py
@@ -1,9 +1,9 @@
-# ruff: noqa: F401, F403
+# ruff: noqa: F401, F403, F405
from altair.expr.core import datum
-
-from .api import *
-from .compiler import vegalite_compilers
-from .data import (
+from altair.vegalite.v5 import api, compiler, schema
+from altair.vegalite.v5.api import *
+from altair.vegalite.v5.compiler import vegalite_compilers
+from altair.vegalite.v5.data import (
MaxRowsError,
data_transformers,
default_data_transformer,
@@ -13,12 +13,640 @@
to_json,
to_values,
)
-from .display import (
+from altair.vegalite.v5.display import (
VEGA_VERSION,
VEGAEMBED_VERSION,
VEGALITE_VERSION,
VegaLite,
renderers,
)
-from .schema import *
-from .theme import register_theme, themes
+from altair.vegalite.v5.schema import *
+
+# The content of __all__ is automatically written by
+# tools/update_init_file.py. Do not modify directly.
+
+__all__ = [
+ "SCHEMA_URL",
+ "SCHEMA_VERSION",
+ "TOPLEVEL_ONLY_KEYS",
+ "URI",
+ "VEGAEMBED_VERSION",
+ "VEGALITE_VERSION",
+ "VEGA_VERSION",
+ "X2",
+ "Y2",
+ "Aggregate",
+ "AggregateOp",
+ "AggregateTransform",
+ "AggregatedFieldDef",
+ "Align",
+ "AllSortString",
+ "Angle",
+ "AngleDatum",
+ "AngleValue",
+ "AnyMark",
+ "AnyMarkConfig",
+ "AreaConfig",
+ "ArgmaxDef",
+ "ArgminDef",
+ "AutoSizeParams",
+ "AutosizeType",
+ "Axis",
+ "AxisConfig",
+ "AxisOrient",
+ "AxisResolveMap",
+ "BBox",
+ "BarConfig",
+ "BaseTitleNoValueRefs",
+ "Baseline",
+ "Bin",
+ "BinExtent",
+ "BinParams",
+ "BinTransform",
+ "BindCheckbox",
+ "BindDirect",
+ "BindInput",
+ "BindRadioSelect",
+ "BindRange",
+ "Binding",
+ "BinnedTimeUnit",
+ "Blend",
+ "BoxPlot",
+ "BoxPlotConfig",
+ "BoxPlotDef",
+ "BrushConfig",
+ "CalculateTransform",
+ "Categorical",
+ "ChainedWhen",
+ "Chart",
+ "ChartDataType",
+ "Color",
+ "ColorDatum",
+ "ColorDef",
+ "ColorName",
+ "ColorScheme",
+ "ColorValue",
+ "Column",
+ "CompositeMark",
+ "CompositeMarkDef",
+ "CompositionConfig",
+ "ConcatChart",
+ "ConcatSpecGenericSpec",
+ "ConditionalAxisColor",
+ "ConditionalAxisLabelAlign",
+ "ConditionalAxisLabelBaseline",
+ "ConditionalAxisLabelFontStyle",
+ "ConditionalAxisLabelFontWeight",
+ "ConditionalAxisNumber",
+ "ConditionalAxisNumberArray",
+ "ConditionalAxisPropertyAlignnull",
+ "ConditionalAxisPropertyColornull",
+ "ConditionalAxisPropertyFontStylenull",
+ "ConditionalAxisPropertyFontWeightnull",
+ "ConditionalAxisPropertyTextBaselinenull",
+ "ConditionalAxisPropertynumberArraynull",
+ "ConditionalAxisPropertynumbernull",
+ "ConditionalAxisPropertystringnull",
+ "ConditionalAxisString",
+ "ConditionalMarkPropFieldOrDatumDef",
+ "ConditionalMarkPropFieldOrDatumDefTypeForShape",
+ "ConditionalParameterMarkPropFieldOrDatumDef",
+ "ConditionalParameterMarkPropFieldOrDatumDefTypeForShape",
+ "ConditionalParameterStringFieldDef",
+ "ConditionalParameterValueDefGradientstringnullExprRef",
+ "ConditionalParameterValueDefTextExprRef",
+ "ConditionalParameterValueDefnumber",
+ "ConditionalParameterValueDefnumberArrayExprRef",
+ "ConditionalParameterValueDefnumberExprRef",
+ "ConditionalParameterValueDefstringExprRef",
+ "ConditionalParameterValueDefstringnullExprRef",
+ "ConditionalPredicateMarkPropFieldOrDatumDef",
+ "ConditionalPredicateMarkPropFieldOrDatumDefTypeForShape",
+ "ConditionalPredicateStringFieldDef",
+ "ConditionalPredicateValueDefAlignnullExprRef",
+ "ConditionalPredicateValueDefColornullExprRef",
+ "ConditionalPredicateValueDefFontStylenullExprRef",
+ "ConditionalPredicateValueDefFontWeightnullExprRef",
+ "ConditionalPredicateValueDefGradientstringnullExprRef",
+ "ConditionalPredicateValueDefTextBaselinenullExprRef",
+ "ConditionalPredicateValueDefTextExprRef",
+ "ConditionalPredicateValueDefnumber",
+ "ConditionalPredicateValueDefnumberArrayExprRef",
+ "ConditionalPredicateValueDefnumberArraynullExprRef",
+ "ConditionalPredicateValueDefnumberExprRef",
+ "ConditionalPredicateValueDefnumbernullExprRef",
+ "ConditionalPredicateValueDefstringExprRef",
+ "ConditionalPredicateValueDefstringnullExprRef",
+ "ConditionalStringFieldDef",
+ "ConditionalValueDefGradientstringnullExprRef",
+ "ConditionalValueDefTextExprRef",
+ "ConditionalValueDefnumber",
+ "ConditionalValueDefnumberArrayExprRef",
+ "ConditionalValueDefnumberExprRef",
+ "ConditionalValueDefstringExprRef",
+ "ConditionalValueDefstringnullExprRef",
+ "Config",
+ "CsvDataFormat",
+ "Cursor",
+ "Cyclical",
+ "Data",
+ "DataFormat",
+ "DataSource",
+ "DataType",
+ "Datasets",
+ "DateTime",
+ "DatumChannelMixin",
+ "DatumDef",
+ "Day",
+ "DensityTransform",
+ "DerivedStream",
+ "Description",
+ "DescriptionValue",
+ "Detail",
+ "DictInlineDataset",
+ "DictSelectionInit",
+ "DictSelectionInitInterval",
+ "Diverging",
+ "DomainUnionWith",
+ "DsvDataFormat",
+ "Element",
+ "Encoding",
+ "EncodingSortField",
+ "ErrorBand",
+ "ErrorBandConfig",
+ "ErrorBandDef",
+ "ErrorBar",
+ "ErrorBarConfig",
+ "ErrorBarDef",
+ "ErrorBarExtent",
+ "EventStream",
+ "EventType",
+ "Expr",
+ "ExprRef",
+ "ExtentTransform",
+ "Facet",
+ "FacetChart",
+ "FacetEncodingFieldDef",
+ "FacetFieldDef",
+ "FacetMapping",
+ "FacetSpec",
+ "FacetedEncoding",
+ "FacetedUnitSpec",
+ "Feature",
+ "FeatureCollection",
+ "FeatureGeometryGeoJsonProperties",
+ "Field",
+ "FieldChannelMixin",
+ "FieldDefWithoutScale",
+ "FieldEqualPredicate",
+ "FieldGTEPredicate",
+ "FieldGTPredicate",
+ "FieldLTEPredicate",
+ "FieldLTPredicate",
+ "FieldName",
+ "FieldOneOfPredicate",
+ "FieldOrDatumDefWithConditionDatumDefGradientstringnull",
+ "FieldOrDatumDefWithConditionDatumDefnumber",
+ "FieldOrDatumDefWithConditionDatumDefnumberArray",
+ "FieldOrDatumDefWithConditionDatumDefstringnull",
+ "FieldOrDatumDefWithConditionMarkPropFieldDefGradientstringnull",
+ "FieldOrDatumDefWithConditionMarkPropFieldDefTypeForShapestringnull",
+ "FieldOrDatumDefWithConditionMarkPropFieldDefnumber",
+ "FieldOrDatumDefWithConditionMarkPropFieldDefnumberArray",
+ "FieldOrDatumDefWithConditionStringDatumDefText",
+ "FieldOrDatumDefWithConditionStringFieldDefText",
+ "FieldOrDatumDefWithConditionStringFieldDefstring",
+ "FieldRange",
+ "FieldRangePredicate",
+ "FieldValidPredicate",
+ "Fill",
+ "FillDatum",
+ "FillOpacity",
+ "FillOpacityDatum",
+ "FillOpacityValue",
+ "FillValue",
+ "FilterTransform",
+ "Fit",
+ "FlattenTransform",
+ "FoldTransform",
+ "FontStyle",
+ "FontWeight",
+ "FormatConfig",
+ "Generator",
+ "GenericUnitSpecEncodingAnyMark",
+ "GeoJsonFeature",
+ "GeoJsonFeatureCollection",
+ "GeoJsonProperties",
+ "Geometry",
+ "GeometryCollection",
+ "Gradient",
+ "GradientStop",
+ "GraticuleGenerator",
+ "GraticuleParams",
+ "HConcatChart",
+ "HConcatSpecGenericSpec",
+ "Header",
+ "HeaderConfig",
+ "HexColor",
+ "Href",
+ "HrefValue",
+ "Impute",
+ "ImputeMethod",
+ "ImputeParams",
+ "ImputeSequence",
+ "ImputeTransform",
+ "InlineData",
+ "InlineDataset",
+ "Interpolate",
+ "IntervalSelectionConfig",
+ "IntervalSelectionConfigWithoutType",
+ "JoinAggregateFieldDef",
+ "JoinAggregateTransform",
+ "JsonDataFormat",
+ "Key",
+ "LabelOverlap",
+ "LatLongDef",
+ "LatLongFieldDef",
+ "Latitude",
+ "Latitude2",
+ "Latitude2Datum",
+ "Latitude2Value",
+ "LatitudeDatum",
+ "LayerChart",
+ "LayerRepeatMapping",
+ "LayerRepeatSpec",
+ "LayerSpec",
+ "LayoutAlign",
+ "Legend",
+ "LegendBinding",
+ "LegendConfig",
+ "LegendOrient",
+ "LegendResolveMap",
+ "LegendStreamBinding",
+ "LineConfig",
+ "LineString",
+ "LinearGradient",
+ "LocalMultiTimeUnit",
+ "LocalSingleTimeUnit",
+ "Locale",
+ "LoessTransform",
+ "LogicalAndPredicate",
+ "LogicalNotPredicate",
+ "LogicalOrPredicate",
+ "Longitude",
+ "Longitude2",
+ "Longitude2Datum",
+ "Longitude2Value",
+ "LongitudeDatum",
+ "LookupData",
+ "LookupSelection",
+ "LookupTransform",
+ "Mark",
+ "MarkConfig",
+ "MarkDef",
+ "MarkInvalidDataMode",
+ "MarkPropDefGradientstringnull",
+ "MarkPropDefnumber",
+ "MarkPropDefnumberArray",
+ "MarkPropDefstringnullTypeForShape",
+ "MarkType",
+ "MaxRowsError",
+ "MergedStream",
+ "Month",
+ "MultiLineString",
+ "MultiPoint",
+ "MultiPolygon",
+ "MultiTimeUnit",
+ "NamedData",
+ "NonArgAggregateOp",
+ "NonLayerRepeatSpec",
+ "NonNormalizedSpec",
+ "NumberLocale",
+ "NumericArrayMarkPropDef",
+ "NumericMarkPropDef",
+ "OffsetDef",
+ "Opacity",
+ "OpacityDatum",
+ "OpacityValue",
+ "Order",
+ "OrderFieldDef",
+ "OrderOnlyDef",
+ "OrderValue",
+ "OrderValueDef",
+ "Orient",
+ "Orientation",
+ "OverlayMarkDef",
+ "Padding",
+ "Parameter",
+ "ParameterExpression",
+ "ParameterExtent",
+ "ParameterName",
+ "ParameterPredicate",
+ "Parse",
+ "ParseValue",
+ "PivotTransform",
+ "Point",
+ "PointSelectionConfig",
+ "PointSelectionConfigWithoutType",
+ "PolarDef",
+ "Polygon",
+ "Position",
+ "Position2Def",
+ "PositionDatumDef",
+ "PositionDatumDefBase",
+ "PositionDef",
+ "PositionFieldDef",
+ "PositionFieldDefBase",
+ "PositionValueDef",
+ "Predicate",
+ "PredicateComposition",
+ "PrimitiveValue",
+ "Projection",
+ "ProjectionConfig",
+ "ProjectionType",
+ "QuantileTransform",
+ "RadialGradient",
+ "Radius",
+ "Radius2",
+ "Radius2Datum",
+ "Radius2Value",
+ "RadiusDatum",
+ "RadiusValue",
+ "RangeConfig",
+ "RangeEnum",
+ "RangeRaw",
+ "RangeRawArray",
+ "RangeScheme",
+ "RectConfig",
+ "RegressionTransform",
+ "RelativeBandSize",
+ "RepeatChart",
+ "RepeatMapping",
+ "RepeatRef",
+ "RepeatSpec",
+ "Resolve",
+ "ResolveMode",
+ "Root",
+ "Row",
+ "RowColLayoutAlign",
+ "RowColboolean",
+ "RowColnumber",
+ "RowColumnEncodingFieldDef",
+ "SampleTransform",
+ "Scale",
+ "ScaleBinParams",
+ "ScaleBins",
+ "ScaleConfig",
+ "ScaleDatumDef",
+ "ScaleFieldDef",
+ "ScaleInterpolateEnum",
+ "ScaleInterpolateParams",
+ "ScaleInvalidDataConfig",
+ "ScaleInvalidDataShowAsValueangle",
+ "ScaleInvalidDataShowAsValuecolor",
+ "ScaleInvalidDataShowAsValuefill",
+ "ScaleInvalidDataShowAsValuefillOpacity",
+ "ScaleInvalidDataShowAsValueopacity",
+ "ScaleInvalidDataShowAsValueradius",
+ "ScaleInvalidDataShowAsValueshape",
+ "ScaleInvalidDataShowAsValuesize",
+ "ScaleInvalidDataShowAsValuestroke",
+ "ScaleInvalidDataShowAsValuestrokeDash",
+ "ScaleInvalidDataShowAsValuestrokeOpacity",
+ "ScaleInvalidDataShowAsValuestrokeWidth",
+ "ScaleInvalidDataShowAsValuetheta",
+ "ScaleInvalidDataShowAsValuex",
+ "ScaleInvalidDataShowAsValuexOffset",
+ "ScaleInvalidDataShowAsValuey",
+ "ScaleInvalidDataShowAsValueyOffset",
+ "ScaleInvalidDataShowAsangle",
+ "ScaleInvalidDataShowAscolor",
+ "ScaleInvalidDataShowAsfill",
+ "ScaleInvalidDataShowAsfillOpacity",
+ "ScaleInvalidDataShowAsopacity",
+ "ScaleInvalidDataShowAsradius",
+ "ScaleInvalidDataShowAsshape",
+ "ScaleInvalidDataShowAssize",
+ "ScaleInvalidDataShowAsstroke",
+ "ScaleInvalidDataShowAsstrokeDash",
+ "ScaleInvalidDataShowAsstrokeOpacity",
+ "ScaleInvalidDataShowAsstrokeWidth",
+ "ScaleInvalidDataShowAstheta",
+ "ScaleInvalidDataShowAsx",
+ "ScaleInvalidDataShowAsxOffset",
+ "ScaleInvalidDataShowAsy",
+ "ScaleInvalidDataShowAsyOffset",
+ "ScaleResolveMap",
+ "ScaleType",
+ "SchemaBase",
+ "SchemeParams",
+ "SecondaryFieldDef",
+ "SelectionConfig",
+ "SelectionExpression",
+ "SelectionInit",
+ "SelectionInitInterval",
+ "SelectionInitIntervalMapping",
+ "SelectionInitMapping",
+ "SelectionParameter",
+ "SelectionPredicateComposition",
+ "SelectionResolution",
+ "SelectionType",
+ "SequenceGenerator",
+ "SequenceParams",
+ "SequentialMultiHue",
+ "SequentialSingleHue",
+ "Shape",
+ "ShapeDatum",
+ "ShapeDef",
+ "ShapeValue",
+ "SharedEncoding",
+ "SingleDefUnitChannel",
+ "SingleTimeUnit",
+ "Size",
+ "SizeDatum",
+ "SizeValue",
+ "Sort",
+ "SortArray",
+ "SortByChannel",
+ "SortByChannelDesc",
+ "SortByEncoding",
+ "SortField",
+ "SortOrder",
+ "Spec",
+ "SphereGenerator",
+ "StackOffset",
+ "StackTransform",
+ "StandardType",
+ "Step",
+ "StepFor",
+ "Stream",
+ "StringFieldDef",
+ "StringFieldDefWithCondition",
+ "StringValueDefWithCondition",
+ "Stroke",
+ "StrokeCap",
+ "StrokeDash",
+ "StrokeDashDatum",
+ "StrokeDashValue",
+ "StrokeDatum",
+ "StrokeJoin",
+ "StrokeOpacity",
+ "StrokeOpacityDatum",
+ "StrokeOpacityValue",
+ "StrokeValue",
+ "StrokeWidth",
+ "StrokeWidthDatum",
+ "StrokeWidthValue",
+ "StyleConfigIndex",
+ "SymbolShape",
+ "Text",
+ "TextBaseline",
+ "TextDatum",
+ "TextDef",
+ "TextDirection",
+ "TextValue",
+ "Then",
+ "Theta",
+ "Theta2",
+ "Theta2Datum",
+ "Theta2Value",
+ "ThetaDatum",
+ "ThetaValue",
+ "TickConfig",
+ "TickCount",
+ "TimeInterval",
+ "TimeIntervalStep",
+ "TimeLocale",
+ "TimeUnit",
+ "TimeUnitParams",
+ "TimeUnitTransform",
+ "TimeUnitTransformParams",
+ "Title",
+ "TitleAnchor",
+ "TitleConfig",
+ "TitleFrame",
+ "TitleOrient",
+ "TitleParams",
+ "Tooltip",
+ "TooltipContent",
+ "TooltipValue",
+ "TopLevelConcatSpec",
+ "TopLevelFacetSpec",
+ "TopLevelHConcatSpec",
+ "TopLevelLayerSpec",
+ "TopLevelMixin",
+ "TopLevelParameter",
+ "TopLevelRepeatSpec",
+ "TopLevelSelectionParameter",
+ "TopLevelSpec",
+ "TopLevelUnitSpec",
+ "TopLevelVConcatSpec",
+ "TopoDataFormat",
+ "Transform",
+ "Type",
+ "TypeForShape",
+ "TypedFieldDef",
+ "UnitSpec",
+ "UnitSpecWithFrame",
+ "Url",
+ "UrlData",
+ "UrlValue",
+ "UtcMultiTimeUnit",
+ "UtcSingleTimeUnit",
+ "VConcatChart",
+ "VConcatSpecGenericSpec",
+ "ValueChannelMixin",
+ "ValueDefWithConditionMarkPropFieldOrDatumDefGradientstringnull",
+ "ValueDefWithConditionMarkPropFieldOrDatumDefTypeForShapestringnull",
+ "ValueDefWithConditionMarkPropFieldOrDatumDefnumber",
+ "ValueDefWithConditionMarkPropFieldOrDatumDefnumberArray",
+ "ValueDefWithConditionMarkPropFieldOrDatumDefstringnull",
+ "ValueDefWithConditionStringFieldDefText",
+ "ValueDefnumber",
+ "ValueDefnumberwidthheightExprRef",
+ "VariableParameter",
+ "Vector2DateTime",
+ "Vector2Vector2number",
+ "Vector2boolean",
+ "Vector2number",
+ "Vector2string",
+ "Vector3number",
+ "Vector7string",
+ "Vector10string",
+ "Vector12string",
+ "VegaLite",
+ "VegaLiteSchema",
+ "ViewBackground",
+ "ViewConfig",
+ "When",
+ "WindowEventType",
+ "WindowFieldDef",
+ "WindowOnlyOp",
+ "WindowTransform",
+ "X",
+ "X2Datum",
+ "X2Value",
+ "XDatum",
+ "XError",
+ "XError2",
+ "XError2Value",
+ "XErrorValue",
+ "XOffset",
+ "XOffsetDatum",
+ "XOffsetValue",
+ "XValue",
+ "Y",
+ "Y2Datum",
+ "Y2Value",
+ "YDatum",
+ "YError",
+ "YError2",
+ "YError2Value",
+ "YErrorValue",
+ "YOffset",
+ "YOffsetDatum",
+ "YOffsetValue",
+ "YValue",
+ "api",
+ "binding",
+ "binding_checkbox",
+ "binding_radio",
+ "binding_range",
+ "binding_select",
+ "channels",
+ "check_fields_and_encodings",
+ "compiler",
+ "concat",
+ "condition",
+ "core",
+ "data_transformers",
+ "datum",
+ "default_data_transformer",
+ "graticule",
+ "hconcat",
+ "layer",
+ "limit_rows",
+ "load_schema",
+ "mixins",
+ "param",
+ "renderers",
+ "repeat",
+ "sample",
+ "schema",
+ "selection",
+ "selection_interval",
+ "selection_multi",
+ "selection_point",
+ "selection_single",
+ "sequence",
+ "sphere",
+ "to_csv",
+ "to_json",
+ "to_values",
+ "topo_feature",
+ "value",
+ "vconcat",
+ "vegalite_compilers",
+ "when",
+ "with_property_setters",
+]
diff --git a/altair/vegalite/v5/api.py b/altair/vegalite/v5/api.py
index 14d47064c..c99e556be 100644
--- a/altair/vegalite/v5/api.py
+++ b/altair/vegalite/v5/api.py
@@ -16,7 +16,7 @@
import jsonschema
import narwhals.stable.v1 as nw
-from altair import utils
+from altair import theme, utils
from altair.expr import core as _expr_core
from altair.utils import Optional, SchemaBase, Undefined
from altair.utils._vegafusion_data import (
@@ -32,7 +32,6 @@
from .display import VEGA_VERSION, VEGAEMBED_VERSION, VEGALITE_VERSION, renderers
from .schema import SCHEMA_URL, channels, core, mixins
from .schema._typing import Map, PrimitiveValue_T, SingleDefUnitChannel_T, Temporal
-from .theme import themes
if sys.version_info >= (3, 14):
from typing import TypedDict
@@ -2006,9 +2005,8 @@ def to_dict( # noqa: C901
if "$schema" not in vegalite_spec:
vegalite_spec["$schema"] = SCHEMA_URL
- # apply theme from theme registry
- if theme := themes.get():
- vegalite_spec = utils.update_nested(theme(), vegalite_spec, copy=True)
+ if func := theme.get():
+ vegalite_spec = utils.update_nested(func(), vegalite_spec, copy=True)
else:
msg = (
f"Expected a theme to be set but got {None!r}.\n"
diff --git a/altair/vegalite/v5/schema/__init__.py b/altair/vegalite/v5/schema/__init__.py
index 1f099eaca..3be8148db 100644
--- a/altair/vegalite/v5/schema/__init__.py
+++ b/altair/vegalite/v5/schema/__init__.py
@@ -1,8 +1,571 @@
-# ruff: noqa
+# ruff: noqa: F403, F405
+# The contents of this file are automatically written by
+# tools/generate_schema_wrapper.py. Do not modify directly.
-from .core import *
-from .channels import *
+from altair.vegalite.v5.schema import channels, core
+from altair.vegalite.v5.schema.channels import *
+from altair.vegalite.v5.schema.core import *
SCHEMA_VERSION = "v5.20.1"
SCHEMA_URL = "https://vega.github.io/schema/vega-lite/v5.20.1.json"
+
+__all__ = [
+ "SCHEMA_URL",
+ "SCHEMA_VERSION",
+ "URI",
+ "X2",
+ "Y2",
+ "Aggregate",
+ "AggregateOp",
+ "AggregateTransform",
+ "AggregatedFieldDef",
+ "Align",
+ "AllSortString",
+ "Angle",
+ "AngleDatum",
+ "AngleValue",
+ "AnyMark",
+ "AnyMarkConfig",
+ "AreaConfig",
+ "ArgmaxDef",
+ "ArgminDef",
+ "AutoSizeParams",
+ "AutosizeType",
+ "Axis",
+ "AxisConfig",
+ "AxisOrient",
+ "AxisResolveMap",
+ "BBox",
+ "BarConfig",
+ "BaseTitleNoValueRefs",
+ "Baseline",
+ "BinExtent",
+ "BinParams",
+ "BinTransform",
+ "BindCheckbox",
+ "BindDirect",
+ "BindInput",
+ "BindRadioSelect",
+ "BindRange",
+ "Binding",
+ "BinnedTimeUnit",
+ "Blend",
+ "BoxPlot",
+ "BoxPlotConfig",
+ "BoxPlotDef",
+ "BrushConfig",
+ "CalculateTransform",
+ "Categorical",
+ "Color",
+ "ColorDatum",
+ "ColorDef",
+ "ColorName",
+ "ColorScheme",
+ "ColorValue",
+ "Column",
+ "CompositeMark",
+ "CompositeMarkDef",
+ "CompositionConfig",
+ "ConcatSpecGenericSpec",
+ "ConditionalAxisColor",
+ "ConditionalAxisLabelAlign",
+ "ConditionalAxisLabelBaseline",
+ "ConditionalAxisLabelFontStyle",
+ "ConditionalAxisLabelFontWeight",
+ "ConditionalAxisNumber",
+ "ConditionalAxisNumberArray",
+ "ConditionalAxisPropertyAlignnull",
+ "ConditionalAxisPropertyColornull",
+ "ConditionalAxisPropertyFontStylenull",
+ "ConditionalAxisPropertyFontWeightnull",
+ "ConditionalAxisPropertyTextBaselinenull",
+ "ConditionalAxisPropertynumberArraynull",
+ "ConditionalAxisPropertynumbernull",
+ "ConditionalAxisPropertystringnull",
+ "ConditionalAxisString",
+ "ConditionalMarkPropFieldOrDatumDef",
+ "ConditionalMarkPropFieldOrDatumDefTypeForShape",
+ "ConditionalParameterMarkPropFieldOrDatumDef",
+ "ConditionalParameterMarkPropFieldOrDatumDefTypeForShape",
+ "ConditionalParameterStringFieldDef",
+ "ConditionalParameterValueDefGradientstringnullExprRef",
+ "ConditionalParameterValueDefTextExprRef",
+ "ConditionalParameterValueDefnumber",
+ "ConditionalParameterValueDefnumberArrayExprRef",
+ "ConditionalParameterValueDefnumberExprRef",
+ "ConditionalParameterValueDefstringExprRef",
+ "ConditionalParameterValueDefstringnullExprRef",
+ "ConditionalPredicateMarkPropFieldOrDatumDef",
+ "ConditionalPredicateMarkPropFieldOrDatumDefTypeForShape",
+ "ConditionalPredicateStringFieldDef",
+ "ConditionalPredicateValueDefAlignnullExprRef",
+ "ConditionalPredicateValueDefColornullExprRef",
+ "ConditionalPredicateValueDefFontStylenullExprRef",
+ "ConditionalPredicateValueDefFontWeightnullExprRef",
+ "ConditionalPredicateValueDefGradientstringnullExprRef",
+ "ConditionalPredicateValueDefTextBaselinenullExprRef",
+ "ConditionalPredicateValueDefTextExprRef",
+ "ConditionalPredicateValueDefnumber",
+ "ConditionalPredicateValueDefnumberArrayExprRef",
+ "ConditionalPredicateValueDefnumberArraynullExprRef",
+ "ConditionalPredicateValueDefnumberExprRef",
+ "ConditionalPredicateValueDefnumbernullExprRef",
+ "ConditionalPredicateValueDefstringExprRef",
+ "ConditionalPredicateValueDefstringnullExprRef",
+ "ConditionalStringFieldDef",
+ "ConditionalValueDefGradientstringnullExprRef",
+ "ConditionalValueDefTextExprRef",
+ "ConditionalValueDefnumber",
+ "ConditionalValueDefnumberArrayExprRef",
+ "ConditionalValueDefnumberExprRef",
+ "ConditionalValueDefstringExprRef",
+ "ConditionalValueDefstringnullExprRef",
+ "Config",
+ "CsvDataFormat",
+ "Cursor",
+ "Cyclical",
+ "Data",
+ "DataFormat",
+ "DataSource",
+ "Datasets",
+ "DateTime",
+ "DatumChannelMixin",
+ "DatumDef",
+ "Day",
+ "DensityTransform",
+ "DerivedStream",
+ "Description",
+ "DescriptionValue",
+ "Detail",
+ "DictInlineDataset",
+ "DictSelectionInit",
+ "DictSelectionInitInterval",
+ "Diverging",
+ "DomainUnionWith",
+ "DsvDataFormat",
+ "Element",
+ "Encoding",
+ "EncodingSortField",
+ "ErrorBand",
+ "ErrorBandConfig",
+ "ErrorBandDef",
+ "ErrorBar",
+ "ErrorBarConfig",
+ "ErrorBarDef",
+ "ErrorBarExtent",
+ "EventStream",
+ "EventType",
+ "Expr",
+ "ExprRef",
+ "ExtentTransform",
+ "Facet",
+ "FacetEncodingFieldDef",
+ "FacetFieldDef",
+ "FacetSpec",
+ "FacetedEncoding",
+ "FacetedUnitSpec",
+ "Feature",
+ "FeatureCollection",
+ "FeatureGeometryGeoJsonProperties",
+ "Field",
+ "FieldChannelMixin",
+ "FieldDefWithoutScale",
+ "FieldEqualPredicate",
+ "FieldGTEPredicate",
+ "FieldGTPredicate",
+ "FieldLTEPredicate",
+ "FieldLTPredicate",
+ "FieldName",
+ "FieldOneOfPredicate",
+ "FieldOrDatumDefWithConditionDatumDefGradientstringnull",
+ "FieldOrDatumDefWithConditionDatumDefnumber",
+ "FieldOrDatumDefWithConditionDatumDefnumberArray",
+ "FieldOrDatumDefWithConditionDatumDefstringnull",
+ "FieldOrDatumDefWithConditionMarkPropFieldDefGradientstringnull",
+ "FieldOrDatumDefWithConditionMarkPropFieldDefTypeForShapestringnull",
+ "FieldOrDatumDefWithConditionMarkPropFieldDefnumber",
+ "FieldOrDatumDefWithConditionMarkPropFieldDefnumberArray",
+ "FieldOrDatumDefWithConditionStringDatumDefText",
+ "FieldOrDatumDefWithConditionStringFieldDefText",
+ "FieldOrDatumDefWithConditionStringFieldDefstring",
+ "FieldRange",
+ "FieldRangePredicate",
+ "FieldValidPredicate",
+ "Fill",
+ "FillDatum",
+ "FillOpacity",
+ "FillOpacityDatum",
+ "FillOpacityValue",
+ "FillValue",
+ "FilterTransform",
+ "Fit",
+ "FlattenTransform",
+ "FoldTransform",
+ "FontStyle",
+ "FontWeight",
+ "FormatConfig",
+ "Generator",
+ "GenericUnitSpecEncodingAnyMark",
+ "GeoJsonFeature",
+ "GeoJsonFeatureCollection",
+ "GeoJsonProperties",
+ "Geometry",
+ "GeometryCollection",
+ "Gradient",
+ "GradientStop",
+ "GraticuleGenerator",
+ "GraticuleParams",
+ "HConcatSpecGenericSpec",
+ "Header",
+ "HeaderConfig",
+ "HexColor",
+ "Href",
+ "HrefValue",
+ "ImputeMethod",
+ "ImputeParams",
+ "ImputeSequence",
+ "ImputeTransform",
+ "InlineData",
+ "InlineDataset",
+ "Interpolate",
+ "IntervalSelectionConfig",
+ "IntervalSelectionConfigWithoutType",
+ "JoinAggregateFieldDef",
+ "JoinAggregateTransform",
+ "JsonDataFormat",
+ "Key",
+ "LabelOverlap",
+ "LatLongDef",
+ "LatLongFieldDef",
+ "Latitude",
+ "Latitude2",
+ "Latitude2Datum",
+ "Latitude2Value",
+ "LatitudeDatum",
+ "LayerRepeatMapping",
+ "LayerRepeatSpec",
+ "LayerSpec",
+ "LayoutAlign",
+ "Legend",
+ "LegendBinding",
+ "LegendConfig",
+ "LegendOrient",
+ "LegendResolveMap",
+ "LegendStreamBinding",
+ "LineConfig",
+ "LineString",
+ "LinearGradient",
+ "LocalMultiTimeUnit",
+ "LocalSingleTimeUnit",
+ "Locale",
+ "LoessTransform",
+ "LogicalAndPredicate",
+ "LogicalNotPredicate",
+ "LogicalOrPredicate",
+ "Longitude",
+ "Longitude2",
+ "Longitude2Datum",
+ "Longitude2Value",
+ "LongitudeDatum",
+ "LookupSelection",
+ "LookupTransform",
+ "Mark",
+ "MarkConfig",
+ "MarkDef",
+ "MarkInvalidDataMode",
+ "MarkPropDefGradientstringnull",
+ "MarkPropDefnumber",
+ "MarkPropDefnumberArray",
+ "MarkPropDefstringnullTypeForShape",
+ "MarkType",
+ "MergedStream",
+ "Month",
+ "MultiLineString",
+ "MultiPoint",
+ "MultiPolygon",
+ "MultiTimeUnit",
+ "NamedData",
+ "NonArgAggregateOp",
+ "NonLayerRepeatSpec",
+ "NonNormalizedSpec",
+ "NumberLocale",
+ "NumericArrayMarkPropDef",
+ "NumericMarkPropDef",
+ "OffsetDef",
+ "Opacity",
+ "OpacityDatum",
+ "OpacityValue",
+ "Order",
+ "OrderFieldDef",
+ "OrderOnlyDef",
+ "OrderValue",
+ "OrderValueDef",
+ "Orient",
+ "Orientation",
+ "OverlayMarkDef",
+ "Padding",
+ "ParameterExtent",
+ "ParameterName",
+ "ParameterPredicate",
+ "Parse",
+ "ParseValue",
+ "PivotTransform",
+ "Point",
+ "PointSelectionConfig",
+ "PointSelectionConfigWithoutType",
+ "PolarDef",
+ "Polygon",
+ "Position",
+ "Position2Def",
+ "PositionDatumDef",
+ "PositionDatumDefBase",
+ "PositionDef",
+ "PositionFieldDef",
+ "PositionFieldDefBase",
+ "PositionValueDef",
+ "Predicate",
+ "PredicateComposition",
+ "PrimitiveValue",
+ "Projection",
+ "ProjectionConfig",
+ "ProjectionType",
+ "QuantileTransform",
+ "RadialGradient",
+ "Radius",
+ "Radius2",
+ "Radius2Datum",
+ "Radius2Value",
+ "RadiusDatum",
+ "RadiusValue",
+ "RangeConfig",
+ "RangeEnum",
+ "RangeRaw",
+ "RangeRawArray",
+ "RangeScheme",
+ "RectConfig",
+ "RegressionTransform",
+ "RelativeBandSize",
+ "RepeatMapping",
+ "RepeatRef",
+ "RepeatSpec",
+ "Resolve",
+ "ResolveMode",
+ "Root",
+ "Row",
+ "RowColLayoutAlign",
+ "RowColboolean",
+ "RowColnumber",
+ "RowColumnEncodingFieldDef",
+ "SampleTransform",
+ "Scale",
+ "ScaleBinParams",
+ "ScaleBins",
+ "ScaleConfig",
+ "ScaleDatumDef",
+ "ScaleFieldDef",
+ "ScaleInterpolateEnum",
+ "ScaleInterpolateParams",
+ "ScaleInvalidDataConfig",
+ "ScaleInvalidDataShowAsValueangle",
+ "ScaleInvalidDataShowAsValuecolor",
+ "ScaleInvalidDataShowAsValuefill",
+ "ScaleInvalidDataShowAsValuefillOpacity",
+ "ScaleInvalidDataShowAsValueopacity",
+ "ScaleInvalidDataShowAsValueradius",
+ "ScaleInvalidDataShowAsValueshape",
+ "ScaleInvalidDataShowAsValuesize",
+ "ScaleInvalidDataShowAsValuestroke",
+ "ScaleInvalidDataShowAsValuestrokeDash",
+ "ScaleInvalidDataShowAsValuestrokeOpacity",
+ "ScaleInvalidDataShowAsValuestrokeWidth",
+ "ScaleInvalidDataShowAsValuetheta",
+ "ScaleInvalidDataShowAsValuex",
+ "ScaleInvalidDataShowAsValuexOffset",
+ "ScaleInvalidDataShowAsValuey",
+ "ScaleInvalidDataShowAsValueyOffset",
+ "ScaleInvalidDataShowAsangle",
+ "ScaleInvalidDataShowAscolor",
+ "ScaleInvalidDataShowAsfill",
+ "ScaleInvalidDataShowAsfillOpacity",
+ "ScaleInvalidDataShowAsopacity",
+ "ScaleInvalidDataShowAsradius",
+ "ScaleInvalidDataShowAsshape",
+ "ScaleInvalidDataShowAssize",
+ "ScaleInvalidDataShowAsstroke",
+ "ScaleInvalidDataShowAsstrokeDash",
+ "ScaleInvalidDataShowAsstrokeOpacity",
+ "ScaleInvalidDataShowAsstrokeWidth",
+ "ScaleInvalidDataShowAstheta",
+ "ScaleInvalidDataShowAsx",
+ "ScaleInvalidDataShowAsxOffset",
+ "ScaleInvalidDataShowAsy",
+ "ScaleInvalidDataShowAsyOffset",
+ "ScaleResolveMap",
+ "ScaleType",
+ "SchemaBase",
+ "SchemeParams",
+ "SecondaryFieldDef",
+ "SelectionConfig",
+ "SelectionInit",
+ "SelectionInitInterval",
+ "SelectionInitIntervalMapping",
+ "SelectionInitMapping",
+ "SelectionParameter",
+ "SelectionResolution",
+ "SelectionType",
+ "SequenceGenerator",
+ "SequenceParams",
+ "SequentialMultiHue",
+ "SequentialSingleHue",
+ "Shape",
+ "ShapeDatum",
+ "ShapeDef",
+ "ShapeValue",
+ "SharedEncoding",
+ "SingleDefUnitChannel",
+ "SingleTimeUnit",
+ "Size",
+ "SizeDatum",
+ "SizeValue",
+ "Sort",
+ "SortArray",
+ "SortByChannel",
+ "SortByChannelDesc",
+ "SortByEncoding",
+ "SortField",
+ "SortOrder",
+ "Spec",
+ "SphereGenerator",
+ "StackOffset",
+ "StackTransform",
+ "StandardType",
+ "Step",
+ "StepFor",
+ "Stream",
+ "StringFieldDef",
+ "StringFieldDefWithCondition",
+ "StringValueDefWithCondition",
+ "Stroke",
+ "StrokeCap",
+ "StrokeDash",
+ "StrokeDashDatum",
+ "StrokeDashValue",
+ "StrokeDatum",
+ "StrokeJoin",
+ "StrokeOpacity",
+ "StrokeOpacityDatum",
+ "StrokeOpacityValue",
+ "StrokeValue",
+ "StrokeWidth",
+ "StrokeWidthDatum",
+ "StrokeWidthValue",
+ "StyleConfigIndex",
+ "SymbolShape",
+ "Text",
+ "TextBaseline",
+ "TextDatum",
+ "TextDef",
+ "TextDirection",
+ "TextValue",
+ "Theta",
+ "Theta2",
+ "Theta2Datum",
+ "Theta2Value",
+ "ThetaDatum",
+ "ThetaValue",
+ "TickConfig",
+ "TickCount",
+ "TimeInterval",
+ "TimeIntervalStep",
+ "TimeLocale",
+ "TimeUnit",
+ "TimeUnitParams",
+ "TimeUnitTransform",
+ "TimeUnitTransformParams",
+ "TitleAnchor",
+ "TitleConfig",
+ "TitleFrame",
+ "TitleOrient",
+ "TitleParams",
+ "Tooltip",
+ "TooltipContent",
+ "TooltipValue",
+ "TopLevelConcatSpec",
+ "TopLevelFacetSpec",
+ "TopLevelHConcatSpec",
+ "TopLevelLayerSpec",
+ "TopLevelParameter",
+ "TopLevelRepeatSpec",
+ "TopLevelSelectionParameter",
+ "TopLevelSpec",
+ "TopLevelUnitSpec",
+ "TopLevelVConcatSpec",
+ "TopoDataFormat",
+ "Transform",
+ "Type",
+ "TypeForShape",
+ "TypedFieldDef",
+ "UnitSpec",
+ "UnitSpecWithFrame",
+ "Url",
+ "UrlData",
+ "UrlValue",
+ "UtcMultiTimeUnit",
+ "UtcSingleTimeUnit",
+ "VConcatSpecGenericSpec",
+ "ValueChannelMixin",
+ "ValueDefWithConditionMarkPropFieldOrDatumDefGradientstringnull",
+ "ValueDefWithConditionMarkPropFieldOrDatumDefTypeForShapestringnull",
+ "ValueDefWithConditionMarkPropFieldOrDatumDefnumber",
+ "ValueDefWithConditionMarkPropFieldOrDatumDefnumberArray",
+ "ValueDefWithConditionMarkPropFieldOrDatumDefstringnull",
+ "ValueDefWithConditionStringFieldDefText",
+ "ValueDefnumber",
+ "ValueDefnumberwidthheightExprRef",
+ "VariableParameter",
+ "Vector2DateTime",
+ "Vector2Vector2number",
+ "Vector2boolean",
+ "Vector2number",
+ "Vector2string",
+ "Vector3number",
+ "Vector7string",
+ "Vector10string",
+ "Vector12string",
+ "VegaLiteSchema",
+ "ViewBackground",
+ "ViewConfig",
+ "WindowEventType",
+ "WindowFieldDef",
+ "WindowOnlyOp",
+ "WindowTransform",
+ "X",
+ "X2Datum",
+ "X2Value",
+ "XDatum",
+ "XError",
+ "XError2",
+ "XError2Value",
+ "XErrorValue",
+ "XOffset",
+ "XOffsetDatum",
+ "XOffsetValue",
+ "XValue",
+ "Y",
+ "Y2Datum",
+ "Y2Value",
+ "YDatum",
+ "YError",
+ "YError2",
+ "YError2Value",
+ "YErrorValue",
+ "YOffset",
+ "YOffsetDatum",
+ "YOffsetValue",
+ "YValue",
+ "channels",
+ "core",
+ "load_schema",
+ "with_property_setters",
+]
diff --git a/altair/vegalite/v5/schema/_config.py b/altair/vegalite/v5/schema/_config.py
index 96da254c2..b5d4020ff 100644
--- a/altair/vegalite/v5/schema/_config.py
+++ b/altair/vegalite/v5/schema/_config.py
@@ -95,7 +95,7 @@
class AreaConfigKwds(TypedDict, total=False):
"""
- :class:`AreaConfig` ``TypedDict`` wrapper.
+ :class:`altair.AreaConfig` ``TypedDict`` wrapper.
Parameters
----------
@@ -569,7 +569,7 @@ class AreaConfigKwds(TypedDict, total=False):
class AutoSizeParamsKwds(TypedDict, total=False):
"""
- :class:`AutoSizeParams` ``TypedDict`` wrapper.
+ :class:`altair.AutoSizeParams` ``TypedDict`` wrapper.
Parameters
----------
@@ -603,7 +603,7 @@ class AutoSizeParamsKwds(TypedDict, total=False):
class AxisConfigKwds(TypedDict, total=False):
"""
- :class:`AxisConfig` ``TypedDict`` wrapper.
+ :class:`altair.AxisConfig` ``TypedDict`` wrapper.
Parameters
----------
@@ -1059,7 +1059,7 @@ class AxisConfigKwds(TypedDict, total=False):
class AxisResolveMapKwds(TypedDict, total=False):
"""
- :class:`AxisResolveMap` ``TypedDict`` wrapper.
+ :class:`altair.AxisResolveMap` ``TypedDict`` wrapper.
Parameters
----------
@@ -1075,7 +1075,7 @@ class AxisResolveMapKwds(TypedDict, total=False):
class BarConfigKwds(TypedDict, total=False):
"""
- :class:`BarConfig` ``TypedDict`` wrapper.
+ :class:`altair.BarConfig` ``TypedDict`` wrapper.
Parameters
----------
@@ -1546,7 +1546,7 @@ class BarConfigKwds(TypedDict, total=False):
class BindCheckboxKwds(TypedDict, total=False):
"""
- :class:`BindCheckbox` ``TypedDict`` wrapper.
+ :class:`altair.BindCheckbox` ``TypedDict`` wrapper.
Parameters
----------
@@ -1572,7 +1572,7 @@ class BindCheckboxKwds(TypedDict, total=False):
class BindDirectKwds(TypedDict, total=False):
"""
- :class:`BindDirect` ``TypedDict`` wrapper.
+ :class:`altair.BindDirect` ``TypedDict`` wrapper.
Parameters
----------
@@ -1598,7 +1598,7 @@ class BindDirectKwds(TypedDict, total=False):
class BindInputKwds(TypedDict, total=False):
"""
- :class:`BindInput` ``TypedDict`` wrapper.
+ :class:`altair.BindInput` ``TypedDict`` wrapper.
Parameters
----------
@@ -1634,7 +1634,7 @@ class BindInputKwds(TypedDict, total=False):
class BindRadioSelectKwds(TypedDict, total=False):
"""
- :class:`BindRadioSelect` ``TypedDict`` wrapper.
+ :class:`altair.BindRadioSelect` ``TypedDict`` wrapper.
Parameters
----------
@@ -1667,7 +1667,7 @@ class BindRadioSelectKwds(TypedDict, total=False):
class BindRangeKwds(TypedDict, total=False):
"""
- :class:`BindRange` ``TypedDict`` wrapper.
+ :class:`altair.BindRange` ``TypedDict`` wrapper.
Parameters
----------
@@ -1705,7 +1705,7 @@ class BindRangeKwds(TypedDict, total=False):
class BoxPlotConfigKwds(TypedDict, total=False):
"""
- :class:`BoxPlotConfig` ``TypedDict`` wrapper.
+ :class:`altair.BoxPlotConfig` ``TypedDict`` wrapper.
Parameters
----------
@@ -1785,7 +1785,7 @@ class BoxPlotConfigKwds(TypedDict, total=False):
class BrushConfigKwds(TypedDict, total=False):
"""
- :class:`BrushConfig` ``TypedDict`` wrapper.
+ :class:`altair.BrushConfig` ``TypedDict`` wrapper.
Parameters
----------
@@ -1827,7 +1827,7 @@ class BrushConfigKwds(TypedDict, total=False):
class CompositionConfigKwds(TypedDict, total=False):
"""
- :class:`CompositionConfig` ``TypedDict`` wrapper.
+ :class:`altair.CompositionConfig` ``TypedDict`` wrapper.
Parameters
----------
@@ -1860,7 +1860,7 @@ class CompositionConfigKwds(TypedDict, total=False):
class ConfigKwds(TypedDict, total=False):
"""
- :class:`Config` ``TypedDict`` wrapper.
+ :class:`altair.Config` ``TypedDict`` wrapper.
Parameters
----------
@@ -2209,7 +2209,7 @@ class ConfigKwds(TypedDict, total=False):
class DateTimeKwds(TypedDict, total=False):
"""
- :class:`DateTime` ``TypedDict`` wrapper.
+ :class:`altair.DateTime` ``TypedDict`` wrapper.
Parameters
----------
@@ -2257,7 +2257,7 @@ class DateTimeKwds(TypedDict, total=False):
class DerivedStreamKwds(TypedDict, total=False):
"""
- :class:`DerivedStream` ``TypedDict`` wrapper.
+ :class:`altair.DerivedStream` ``TypedDict`` wrapper.
Parameters
----------
@@ -2291,7 +2291,7 @@ class DerivedStreamKwds(TypedDict, total=False):
class ErrorBandConfigKwds(TypedDict, total=False):
"""
- :class:`ErrorBandConfig` ``TypedDict`` wrapper.
+ :class:`altair.ErrorBandConfig` ``TypedDict`` wrapper.
Parameters
----------
@@ -2361,7 +2361,7 @@ class ErrorBandConfigKwds(TypedDict, total=False):
class ErrorBarConfigKwds(TypedDict, total=False):
"""
- :class:`ErrorBarConfig` ``TypedDict`` wrapper.
+ :class:`altair.ErrorBarConfig` ``TypedDict`` wrapper.
Parameters
----------
@@ -2411,7 +2411,7 @@ class ErrorBarConfigKwds(TypedDict, total=False):
class FeatureGeometryGeoJsonPropertiesKwds(TypedDict, total=False):
"""
- :class:`FeatureGeometryGeoJsonProperties` ``TypedDict`` wrapper.
+ :class:`altair.FeatureGeometryGeoJsonProperties` ``TypedDict`` wrapper.
Parameters
----------
@@ -2446,7 +2446,7 @@ class FeatureGeometryGeoJsonPropertiesKwds(TypedDict, total=False):
class FormatConfigKwds(TypedDict, total=False):
"""
- :class:`FormatConfig` ``TypedDict`` wrapper.
+ :class:`altair.FormatConfig` ``TypedDict`` wrapper.
Parameters
----------
@@ -2515,7 +2515,7 @@ class FormatConfigKwds(TypedDict, total=False):
class GeoJsonFeatureKwds(TypedDict, total=False):
"""
- :class:`GeoJsonFeature` ``TypedDict`` wrapper.
+ :class:`altair.GeoJsonFeature` ``TypedDict`` wrapper.
Parameters
----------
@@ -2550,7 +2550,7 @@ class GeoJsonFeatureKwds(TypedDict, total=False):
class GeoJsonFeatureCollectionKwds(TypedDict, total=False):
"""
- :class:`GeoJsonFeatureCollection` ``TypedDict`` wrapper.
+ :class:`altair.GeoJsonFeatureCollection` ``TypedDict`` wrapper.
Parameters
----------
@@ -2570,7 +2570,7 @@ class GeoJsonFeatureCollectionKwds(TypedDict, total=False):
class GeometryCollectionKwds(TypedDict, total=False):
"""
- :class:`GeometryCollection` ``TypedDict`` wrapper.
+ :class:`altair.GeometryCollection` ``TypedDict`` wrapper.
Parameters
----------
@@ -2598,7 +2598,7 @@ class GeometryCollectionKwds(TypedDict, total=False):
class GradientStopKwds(TypedDict, total=False):
"""
- :class:`GradientStop` ``TypedDict`` wrapper.
+ :class:`altair.GradientStop` ``TypedDict`` wrapper.
Parameters
----------
@@ -2614,7 +2614,7 @@ class GradientStopKwds(TypedDict, total=False):
class HeaderConfigKwds(TypedDict, total=False):
"""
- :class:`HeaderConfig` ``TypedDict`` wrapper.
+ :class:`altair.HeaderConfig` ``TypedDict`` wrapper.
Parameters
----------
@@ -2789,7 +2789,7 @@ class HeaderConfigKwds(TypedDict, total=False):
class IntervalSelectionConfigKwds(TypedDict, total=False):
"""
- :class:`IntervalSelectionConfig` ``TypedDict`` wrapper.
+ :class:`altair.IntervalSelectionConfig` ``TypedDict`` wrapper.
Parameters
----------
@@ -2899,7 +2899,7 @@ class IntervalSelectionConfigKwds(TypedDict, total=False):
class IntervalSelectionConfigWithoutTypeKwds(TypedDict, total=False):
"""
- :class:`IntervalSelectionConfigWithoutType` ``TypedDict`` wrapper.
+ :class:`altair.IntervalSelectionConfigWithoutType` ``TypedDict`` wrapper.
Parameters
----------
@@ -3001,7 +3001,7 @@ class IntervalSelectionConfigWithoutTypeKwds(TypedDict, total=False):
class LegendConfigKwds(TypedDict, total=False):
"""
- :class:`LegendConfig` ``TypedDict`` wrapper.
+ :class:`altair.LegendConfig` ``TypedDict`` wrapper.
Parameters
----------
@@ -3356,7 +3356,7 @@ class LegendConfigKwds(TypedDict, total=False):
class LegendResolveMapKwds(TypedDict, total=False):
"""
- :class:`LegendResolveMap` ``TypedDict`` wrapper.
+ :class:`altair.LegendResolveMap` ``TypedDict`` wrapper.
Parameters
----------
@@ -3399,7 +3399,7 @@ class LegendResolveMapKwds(TypedDict, total=False):
class LegendStreamBindingKwds(TypedDict, total=False):
"""
- :class:`LegendStreamBinding` ``TypedDict`` wrapper.
+ :class:`altair.LegendStreamBinding` ``TypedDict`` wrapper.
Parameters
----------
@@ -3412,7 +3412,7 @@ class LegendStreamBindingKwds(TypedDict, total=False):
class LineConfigKwds(TypedDict, total=False):
"""
- :class:`LineConfig` ``TypedDict`` wrapper.
+ :class:`altair.LineConfig` ``TypedDict`` wrapper.
Parameters
----------
@@ -3875,7 +3875,7 @@ class LineConfigKwds(TypedDict, total=False):
class LineStringKwds(TypedDict, total=False):
"""
- :class:`LineString` ``TypedDict`` wrapper.
+ :class:`altair.LineString` ``TypedDict`` wrapper.
Parameters
----------
@@ -3895,7 +3895,7 @@ class LineStringKwds(TypedDict, total=False):
class LinearGradientKwds(TypedDict, total=False):
"""
- :class:`LinearGradient` ``TypedDict`` wrapper.
+ :class:`altair.LinearGradient` ``TypedDict`` wrapper.
Parameters
----------
@@ -3934,7 +3934,7 @@ class LinearGradientKwds(TypedDict, total=False):
class LocaleKwds(TypedDict, total=False):
"""
- :class:`Locale` ``TypedDict`` wrapper.
+ :class:`altair.Locale` ``TypedDict`` wrapper.
Parameters
----------
@@ -3950,7 +3950,7 @@ class LocaleKwds(TypedDict, total=False):
class MarkConfigKwds(TypedDict, total=False):
"""
- :class:`MarkConfig` ``TypedDict`` wrapper.
+ :class:`altair.MarkConfig` ``TypedDict`` wrapper.
Parameters
----------
@@ -4398,7 +4398,7 @@ class MarkConfigKwds(TypedDict, total=False):
class MergedStreamKwds(TypedDict, total=False):
"""
- :class:`MergedStream` ``TypedDict`` wrapper.
+ :class:`altair.MergedStream` ``TypedDict`` wrapper.
Parameters
----------
@@ -4432,7 +4432,7 @@ class MergedStreamKwds(TypedDict, total=False):
class MultiLineStringKwds(TypedDict, total=False):
"""
- :class:`MultiLineString` ``TypedDict`` wrapper.
+ :class:`altair.MultiLineString` ``TypedDict`` wrapper.
Parameters
----------
@@ -4452,7 +4452,7 @@ class MultiLineStringKwds(TypedDict, total=False):
class MultiPointKwds(TypedDict, total=False):
"""
- :class:`MultiPoint` ``TypedDict`` wrapper.
+ :class:`altair.MultiPoint` ``TypedDict`` wrapper.
Parameters
----------
@@ -4472,7 +4472,7 @@ class MultiPointKwds(TypedDict, total=False):
class MultiPolygonKwds(TypedDict, total=False):
"""
- :class:`MultiPolygon` ``TypedDict`` wrapper.
+ :class:`altair.MultiPolygon` ``TypedDict`` wrapper.
Parameters
----------
@@ -4492,7 +4492,7 @@ class MultiPolygonKwds(TypedDict, total=False):
class NumberLocaleKwds(TypedDict, total=False):
"""
- :class:`NumberLocale` ``TypedDict`` wrapper.
+ :class:`altair.NumberLocale` ``TypedDict`` wrapper.
Parameters
----------
@@ -4526,7 +4526,7 @@ class NumberLocaleKwds(TypedDict, total=False):
class OverlayMarkDefKwds(TypedDict, total=False):
"""
- :class:`OverlayMarkDef` ``TypedDict`` wrapper.
+ :class:`altair.OverlayMarkDef` ``TypedDict`` wrapper.
Parameters
----------
@@ -5016,7 +5016,7 @@ class OverlayMarkDefKwds(TypedDict, total=False):
class PointKwds(TypedDict, total=False):
"""
- :class:`Point` ``TypedDict`` wrapper.
+ :class:`altair.Point` ``TypedDict`` wrapper.
Parameters
----------
@@ -5040,7 +5040,7 @@ class PointKwds(TypedDict, total=False):
class PointSelectionConfigKwds(TypedDict, total=False):
"""
- :class:`PointSelectionConfig` ``TypedDict`` wrapper.
+ :class:`altair.PointSelectionConfig` ``TypedDict`` wrapper.
Parameters
----------
@@ -5148,7 +5148,7 @@ class PointSelectionConfigKwds(TypedDict, total=False):
class PointSelectionConfigWithoutTypeKwds(TypedDict, total=False):
"""
- :class:`PointSelectionConfigWithoutType` ``TypedDict`` wrapper.
+ :class:`altair.PointSelectionConfigWithoutType` ``TypedDict`` wrapper.
Parameters
----------
@@ -5248,7 +5248,7 @@ class PointSelectionConfigWithoutTypeKwds(TypedDict, total=False):
class PolygonKwds(TypedDict, total=False):
"""
- :class:`Polygon` ``TypedDict`` wrapper.
+ :class:`altair.Polygon` ``TypedDict`` wrapper.
Parameters
----------
@@ -5268,7 +5268,7 @@ class PolygonKwds(TypedDict, total=False):
class ProjectionKwds(TypedDict, total=False):
"""
- :class:`Projection` ``TypedDict`` wrapper.
+ :class:`altair.Projection` ``TypedDict`` wrapper.
Parameters
----------
@@ -5411,7 +5411,7 @@ class ProjectionKwds(TypedDict, total=False):
class ProjectionConfigKwds(TypedDict, total=False):
"""
- :class:`ProjectionConfig` ``TypedDict`` wrapper.
+ :class:`altair.ProjectionConfig` ``TypedDict`` wrapper.
Parameters
----------
@@ -5554,7 +5554,7 @@ class ProjectionConfigKwds(TypedDict, total=False):
class RadialGradientKwds(TypedDict, total=False):
"""
- :class:`RadialGradient` ``TypedDict`` wrapper.
+ :class:`altair.RadialGradient` ``TypedDict`` wrapper.
Parameters
----------
@@ -5609,7 +5609,7 @@ class RadialGradientKwds(TypedDict, total=False):
class RangeConfigKwds(TypedDict, total=False):
"""
- :class:`RangeConfig` ``TypedDict`` wrapper.
+ :class:`altair.RangeConfig` ``TypedDict`` wrapper.
Parameters
----------
@@ -5663,7 +5663,7 @@ class RangeConfigKwds(TypedDict, total=False):
class RectConfigKwds(TypedDict, total=False):
"""
- :class:`RectConfig` ``TypedDict`` wrapper.
+ :class:`altair.RectConfig` ``TypedDict`` wrapper.
Parameters
----------
@@ -6129,7 +6129,7 @@ class RectConfigKwds(TypedDict, total=False):
class ResolveKwds(TypedDict, total=False):
"""
- :class:`Resolve` ``TypedDict`` wrapper.
+ :class:`altair.Resolve` ``TypedDict`` wrapper.
Parameters
----------
@@ -6148,7 +6148,7 @@ class ResolveKwds(TypedDict, total=False):
class ScaleConfigKwds(TypedDict, total=False):
"""
- :class:`ScaleConfig` ``TypedDict`` wrapper.
+ :class:`altair.ScaleConfig` ``TypedDict`` wrapper.
Parameters
----------
@@ -6331,7 +6331,7 @@ class ScaleConfigKwds(TypedDict, total=False):
class ScaleInvalidDataConfigKwds(TypedDict, total=False):
"""
- :class:`ScaleInvalidDataConfig` ``TypedDict`` wrapper.
+ :class:`altair.ScaleInvalidDataConfig` ``TypedDict`` wrapper.
Parameters
----------
@@ -6401,7 +6401,7 @@ class ScaleInvalidDataConfigKwds(TypedDict, total=False):
class ScaleResolveMapKwds(TypedDict, total=False):
"""
- :class:`ScaleResolveMap` ``TypedDict`` wrapper.
+ :class:`altair.ScaleResolveMap` ``TypedDict`` wrapper.
Parameters
----------
@@ -6462,7 +6462,7 @@ class ScaleResolveMapKwds(TypedDict, total=False):
class SelectionConfigKwds(TypedDict, total=False):
"""
- :class:`SelectionConfig` ``TypedDict`` wrapper.
+ :class:`altair.SelectionConfig` ``TypedDict`` wrapper.
Parameters
----------
@@ -6490,7 +6490,7 @@ class SelectionConfigKwds(TypedDict, total=False):
class StepKwds(TypedDict, closed=True, total=False): # type: ignore[call-arg]
"""
- :class:`Step` ``TypedDict`` wrapper.
+ :class:`altair.Step` ``TypedDict`` wrapper.
Parameters
----------
@@ -6515,7 +6515,7 @@ class StepKwds(TypedDict, closed=True, total=False): # type: ignore[call-arg]
class StyleConfigIndexKwds(TypedDict, closed=True, total=False): # type: ignore[call-arg]
"""
- :class:`StyleConfigIndex` ``TypedDict`` wrapper.
+ :class:`altair.StyleConfigIndex` ``TypedDict`` wrapper.
Parameters
----------
@@ -6582,7 +6582,7 @@ class StyleConfigIndexKwds(TypedDict, closed=True, total=False): # type: ignore
class TickConfigKwds(TypedDict, total=False):
"""
- :class:`TickConfig` ``TypedDict`` wrapper.
+ :class:`altair.TickConfig` ``TypedDict`` wrapper.
Parameters
----------
@@ -7041,7 +7041,7 @@ class TickConfigKwds(TypedDict, total=False):
class TimeIntervalStepKwds(TypedDict, total=False):
"""
- :class:`TimeIntervalStep` ``TypedDict`` wrapper.
+ :class:`altair.TimeIntervalStep` ``TypedDict`` wrapper.
Parameters
----------
@@ -7057,7 +7057,7 @@ class TimeIntervalStepKwds(TypedDict, total=False):
class TimeLocaleKwds(TypedDict, total=False):
"""
- :class:`TimeLocale` ``TypedDict`` wrapper.
+ :class:`altair.TimeLocale` ``TypedDict`` wrapper.
Parameters
----------
@@ -7091,7 +7091,7 @@ class TimeLocaleKwds(TypedDict, total=False):
class TitleConfigKwds(TypedDict, total=False):
"""
- :class:`TitleConfig` ``TypedDict`` wrapper.
+ :class:`altair.TitleConfig` ``TypedDict`` wrapper.
Parameters
----------
@@ -7199,7 +7199,7 @@ class TitleConfigKwds(TypedDict, total=False):
class TitleParamsKwds(TypedDict, total=False):
"""
- :class:`TitleParams` ``TypedDict`` wrapper.
+ :class:`altair.TitleParams` ``TypedDict`` wrapper.
Parameters
----------
@@ -7330,7 +7330,7 @@ class TitleParamsKwds(TypedDict, total=False):
class TooltipContentKwds(TypedDict, total=False):
"""
- :class:`TooltipContent` ``TypedDict`` wrapper.
+ :class:`altair.TooltipContent` ``TypedDict`` wrapper.
Parameters
----------
@@ -7343,7 +7343,7 @@ class TooltipContentKwds(TypedDict, total=False):
class TopLevelSelectionParameterKwds(TypedDict, total=False):
"""
- :class:`TopLevelSelectionParameter` ``TypedDict`` wrapper.
+ :class:`altair.TopLevelSelectionParameter` ``TypedDict`` wrapper.
Parameters
----------
@@ -7405,7 +7405,7 @@ class TopLevelSelectionParameterKwds(TypedDict, total=False):
class VariableParameterKwds(TypedDict, total=False):
"""
- :class:`VariableParameter` ``TypedDict`` wrapper.
+ :class:`altair.VariableParameter` ``TypedDict`` wrapper.
Parameters
----------
@@ -7450,7 +7450,7 @@ class VariableParameterKwds(TypedDict, total=False):
class ViewBackgroundKwds(TypedDict, total=False):
"""
- :class:`ViewBackground` ``TypedDict`` wrapper.
+ :class:`altair.ViewBackground` ``TypedDict`` wrapper.
Parameters
----------
@@ -7528,7 +7528,7 @@ class ViewBackgroundKwds(TypedDict, total=False):
class ViewConfigKwds(TypedDict, total=False):
"""
- :class:`ViewConfig` ``TypedDict`` wrapper.
+ :class:`altair.ViewConfig` ``TypedDict`` wrapper.
Parameters
----------
diff --git a/altair/vegalite/v5/theme.py b/altair/vegalite/v5/theme.py
index ba5a5ab9a..77f480829 100644
--- a/altair/vegalite/v5/theme.py
+++ b/altair/vegalite/v5/theme.py
@@ -2,22 +2,16 @@
from __future__ import annotations
-import sys
-from functools import wraps
-from typing import TYPE_CHECKING, Callable, Final, Literal, get_args
+from typing import TYPE_CHECKING, Any, Final, Literal, get_args
-from altair.utils.theme import ThemeRegistry
+from altair.utils.deprecation import deprecated_static_only
+from altair.utils.plugin_registry import Plugin, PluginRegistry
from altair.vegalite.v5.schema._config import ThemeConfig
from altair.vegalite.v5.schema._typing import VegaThemes
-if sys.version_info >= (3, 10):
- from typing import ParamSpec
-else:
- from typing_extensions import ParamSpec
-
-
if TYPE_CHECKING:
- from altair.utils.plugin_registry import Plugin
+ import sys
+ from functools import partial
if sys.version_info >= (3, 11):
from typing import LiteralString
@@ -28,11 +22,64 @@
else:
from typing_extensions import TypeAlias
-P = ParamSpec("P")
+ from altair.utils.plugin_registry import PluginEnabler
+
+
AltairThemes: TypeAlias = Literal["default", "opaque"]
VEGA_THEMES: list[LiteralString] = list(get_args(VegaThemes))
+# HACK: See for `LiteralString` requirement in `name`
+# https://github.com/vega/altair/pull/3526#discussion_r1743350127
+class ThemeRegistry(PluginRegistry[Plugin[ThemeConfig], ThemeConfig]):
+ def enable(
+ self,
+ name: LiteralString | AltairThemes | VegaThemes | None = None,
+ **options: Any,
+ ) -> PluginEnabler[Plugin[ThemeConfig], ThemeConfig]:
+ """
+ Enable a theme by name.
+
+ This can be either called directly, or used as a context manager.
+
+ Parameters
+ ----------
+ name : string (optional)
+ The name of the theme to enable. If not specified, then use the
+ current active name.
+ **options :
+ Any additional parameters will be passed to the theme as keyword
+ arguments
+
+ Returns
+ -------
+ PluginEnabler:
+ An object that allows enable() to be used as a context manager
+
+ Notes
+ -----
+ Default `vega` themes can be previewed at https://vega.github.io/vega-themes/
+ """
+ return super().enable(name, **options)
+
+ def get(self) -> partial[ThemeConfig] | Plugin[ThemeConfig] | None:
+ """Return the currently active theme."""
+ return super().get()
+
+ def names(self) -> list[str]:
+ """Return the names of the registered and entry points themes."""
+ return super().names()
+
+ @deprecated_static_only(
+ "Deprecated since `altair=5.5.0`. Use @altair.theme.register instead.",
+ category=None,
+ )
+ def register(
+ self, name: str, value: Plugin[ThemeConfig] | None
+ ) -> Plugin[ThemeConfig] | None:
+ return super().register(name, value)
+
+
class VegaTheme:
"""Implementation of a builtin vega theme."""
@@ -53,6 +100,8 @@ def __repr__(self) -> str:
# themes that will be auto-detected. Explicit registration is also
# allowed by the PluginRegistry API.
ENTRY_POINT_GROUP: Final = "altair.vegalite.v5.theme"
+
+# NOTE: `themes` def has an entry point group
themes = ThemeRegistry(entry_point_group=ENTRY_POINT_GROUP)
themes.register(
@@ -74,75 +123,3 @@ def __repr__(self) -> str:
themes.register(theme, VegaTheme(theme))
themes.enable("default")
-
-
-# HACK: See for `LiteralString` requirement in `name`
-# https://github.com/vega/altair/pull/3526#discussion_r1743350127
-def register_theme(
- name: LiteralString, *, enable: bool
-) -> Callable[[Plugin[ThemeConfig]], Plugin[ThemeConfig]]:
- """
- Decorator for registering a theme function.
-
- Parameters
- ----------
- name
- Unique name assigned in ``alt.themes``.
- enable
- Auto-enable the wrapped theme.
-
- Examples
- --------
- Register and enable a theme::
-
- import altair as alt
- from altair.typing import ThemeConfig
-
-
- @alt.register_theme("param_font_size", enable=True)
- def custom_theme() -> ThemeConfig:
- sizes = 12, 14, 16, 18, 20
- return {
- "autosize": {"contains": "content", "resize": True},
- "background": "#F3F2F1",
- "config": {
- "axisX": {"labelFontSize": sizes[1], "titleFontSize": sizes[1]},
- "axisY": {"labelFontSize": sizes[1], "titleFontSize": sizes[1]},
- "font": "'Lato', 'Segoe UI', Tahoma, Verdana, sans-serif",
- "headerColumn": {"labelFontSize": sizes[1]},
- "headerFacet": {"labelFontSize": sizes[1]},
- "headerRow": {"labelFontSize": sizes[1]},
- "legend": {"labelFontSize": sizes[0], "titleFontSize": sizes[1]},
- "text": {"fontSize": sizes[0]},
- "title": {"fontSize": sizes[-1]},
- },
- "height": {"step": 28},
- "width": 350,
- }
-
- Until another theme has been enabled, all charts will use defaults set in ``custom_theme``::
-
- from vega_datasets import data
-
- source = data.stocks()
- lines = (
- alt.Chart(source, title=alt.Title("Stocks"))
- .mark_line()
- .encode(x="date:T", y="price:Q", color="symbol:N")
- )
- lines.interactive(bind_y=False)
-
- """
-
- def decorate(func: Plugin[ThemeConfig], /) -> Plugin[ThemeConfig]:
- themes.register(name, func)
- if enable:
- themes.enable(name)
-
- @wraps(func)
- def wrapper(*args: P.args, **kwargs: P.kwargs) -> ThemeConfig:
- return func(*args, **kwargs)
-
- return wrapper
-
- return decorate
diff --git a/doc/user_guide/api.rst b/doc/user_guide/api.rst
index 9000bce99..d3c08f547 100644
--- a/doc/user_guide/api.rst
+++ b/doc/user_guide/api.rst
@@ -9,6 +9,8 @@ Please refer to the `full user guide `_ for
further details, as this low-level documentation may not be enough to give
full guidelines on their use.
+.. _api-toplevel:
+
Top-Level Objects
-----------------
.. currentmodule:: altair
@@ -26,6 +28,8 @@ Top-Level Objects
TopLevelMixin
VConcatChart
+.. _api-channels:
+
Encoding Channels
-----------------
.. currentmodule:: altair
@@ -134,6 +138,8 @@ Encoding Channels
YOffsetValue
YValue
+.. _api-functions:
+
API Functions
-------------
.. currentmodule:: altair
@@ -164,6 +170,96 @@ API Functions
vconcat
when
+.. _api-theme:
+
+Theme
+-----
+.. currentmodule:: altair.theme
+
+.. autosummary::
+ :toctree: generated/theme/
+ :nosignatures:
+
+ active
+ enable
+ get
+ names
+ options
+ register
+ unregister
+ ThemeConfig
+ AreaConfigKwds
+ AutoSizeParamsKwds
+ AxisConfigKwds
+ AxisResolveMapKwds
+ BarConfigKwds
+ BindCheckboxKwds
+ BindDirectKwds
+ BindInputKwds
+ BindRadioSelectKwds
+ BindRangeKwds
+ BoxPlotConfigKwds
+ BrushConfigKwds
+ CompositionConfigKwds
+ ConfigKwds
+ DateTimeKwds
+ DerivedStreamKwds
+ ErrorBandConfigKwds
+ ErrorBarConfigKwds
+ FeatureGeometryGeoJsonPropertiesKwds
+ FormatConfigKwds
+ GeoJsonFeatureCollectionKwds
+ GeoJsonFeatureKwds
+ GeometryCollectionKwds
+ GradientStopKwds
+ HeaderConfigKwds
+ IntervalSelectionConfigKwds
+ IntervalSelectionConfigWithoutTypeKwds
+ LegendConfigKwds
+ LegendResolveMapKwds
+ LegendStreamBindingKwds
+ LineConfigKwds
+ LineStringKwds
+ LinearGradientKwds
+ LocaleKwds
+ MarkConfigKwds
+ MergedStreamKwds
+ MultiLineStringKwds
+ MultiPointKwds
+ MultiPolygonKwds
+ NumberLocaleKwds
+ OverlayMarkDefKwds
+ PaddingKwds
+ PointKwds
+ PointSelectionConfigKwds
+ PointSelectionConfigWithoutTypeKwds
+ PolygonKwds
+ ProjectionConfigKwds
+ ProjectionKwds
+ RadialGradientKwds
+ RangeConfigKwds
+ RectConfigKwds
+ ResolveKwds
+ RowColKwds
+ ScaleConfigKwds
+ ScaleInvalidDataConfigKwds
+ ScaleResolveMapKwds
+ SelectionConfigKwds
+ StepKwds
+ StyleConfigIndexKwds
+ TickConfigKwds
+ TimeIntervalStepKwds
+ TimeLocaleKwds
+ TitleConfigKwds
+ TitleParamsKwds
+ TooltipContentKwds
+ TopLevelSelectionParameterKwds
+ VariableParameterKwds
+ ViewBackgroundKwds
+ ViewConfigKwds
+
+.. _api-core:
+
Low-Level Schema Wrappers
-------------------------
.. currentmodule:: altair
@@ -625,6 +721,8 @@ Low-Level Schema Wrappers
WindowOnlyOp
WindowTransform
+.. _api-cls:
+
API Utility Classes
-------------------
.. currentmodule:: altair
@@ -638,6 +736,8 @@ API Utility Classes
Then
ChainedWhen
+.. _api-typing:
+
Typing
------
.. currentmodule:: altair.typing
@@ -689,7 +789,5 @@ Typing
ChartType
EncodeKwds
Optional
- ThemeConfig
is_chart_type
- theme
diff --git a/doc/user_guide/customization.rst b/doc/user_guide/customization.rst
index b95ac1c35..8c3781865 100644
--- a/doc/user_guide/customization.rst
+++ b/doc/user_guide/customization.rst
@@ -703,15 +703,20 @@ outside the chart itself; For example, the container may be a ```` element
Chart Themes
------------
+.. note::
+
+ This material was changed considerably with the release of Altair ``5.5.0``.
+
Altair makes available a theme registry that lets users apply chart configurations
-globally within any Python session. This is done via the ``alt.themes`` object.
+globally within any Python session.
+The :mod:`altair.theme` module provides :ref:`helper functions
` to interact with the registry.
-The themes registry consists of functions which define a specification dictionary
+Each theme in the registry is a function which define a specification dictionary
that will be added to every created chart.
For example, the default theme configures the default size of a single chart:
>>> import altair as alt
- >>> default = alt.themes.get()
+ >>> default = alt.theme.get()
>>> default()
{'config': {'view': {'continuousWidth': 300, 'continuousHeight': 300}}}
@@ -740,14 +745,14 @@ The rendered chart will then reflect these configurations:
Changing the Theme
~~~~~~~~~~~~~~~~~~
If you would like to enable any other theme for the length of your Python session,
-you can call ``alt.themes.enable(theme_name)``.
+you can call :func:`altair.theme.enable`.
For example, Altair includes a theme in which the chart background is opaque
rather than transparent:
.. altair-plot::
:output: repr
- alt.themes.enable('opaque')
+ alt.theme.enable('opaque')
chart.to_dict()
.. altair-plot::
@@ -761,7 +766,7 @@ theme named ``'none'``:
.. altair-plot::
:output: repr
- alt.themes.enable('none')
+ alt.theme.enable('none')
chart.to_dict()
.. altair-plot::
@@ -777,9 +782,14 @@ If you would like to use any theme just for a single chart, you can use the
.. altair-plot::
:output: none
- with alt.themes.enable('default'):
+ with alt.theme.enable('default'):
spec = chart.to_json()
+.. note::
+ The above requires that a conversion/saving operation occurs during the ``with`` block,
+ such as :meth:`~Chart.to_dict`, :meth:`~Chart.to_json`, :meth:`~Chart.save`.
+ See https://github.com/vega/altair/issues/3586
+
Built-in Themes
~~~~~~~~~~~~~~~
Currently Altair does not offer many built-in themes, but we plan to add
@@ -793,10 +803,11 @@ You can get a feel for the themes inherited from `Vega Themes`_ via *Vega-Altair
Defining a Custom Theme
~~~~~~~~~~~~~~~~~~~~~~~
-The theme registry also allows defining and registering custom themes.
A theme is simply a function that returns a dictionary of default values
-to be added to the chart specification at rendering time, which is then
-registered and activated.
+to be added to the chart specification at rendering time.
+
+Using :func:`altair.theme.register`, we can both register and enable a theme
+at the site of the function definition.
For example, here we define a theme in which all marks are drawn with black
fill unless otherwise specified:
@@ -806,26 +817,17 @@ fill unless otherwise specified:
import altair as alt
from vega_datasets import data
- # define the theme by returning the dictionary of configurations
- def black_marks():
+ # define, register and enable theme
+
+ @alt.theme.register("black_marks", enable=True)
+ def black_marks() -> alt.theme.ThemeConfig:
return {
- 'config': {
- 'view': {
- 'height': 300,
- 'width': 300,
- },
- 'mark': {
- 'color': 'black',
- 'fill': 'black'
- }
+ "config": {
+ "view": {"continuousWidth": 300, "continuousHeight": 300},
+ "mark": {"color": "black", "fill": "black"},
}
}
- # register the custom theme under a chosen name
- alt.themes.register('black_marks', black_marks)
-
- # enable the newly registered theme
- alt.themes.enable('black_marks')
# draw the chart
cars = data.cars.url
diff --git a/tests/utils/test_deprecation.py b/tests/utils/test_deprecation.py
index 3970f4794..3449142aa 100644
--- a/tests/utils/test_deprecation.py
+++ b/tests/utils/test_deprecation.py
@@ -1,9 +1,11 @@
+# ruff: noqa: B018
import re
import pytest
from altair.utils.deprecation import (
AltairDeprecationWarning,
+ _warnings_monitor,
deprecated,
deprecated_warn,
)
@@ -38,3 +40,25 @@ def test_deprecation_warn():
match=re.compile(r"altair=3321.+this code path is a noop", flags=re.DOTALL),
):
deprecated_warn("this code path is a noop", version="3321", stacklevel=1)
+
+
+def test_deprecated_import():
+ import altair as alt
+
+ pattern = re.compile(
+ r"altair=5\.5\.0.+\.theme instead.+user.guide",
+ flags=re.DOTALL | re.IGNORECASE,
+ )
+ with pytest.warns(AltairDeprecationWarning, match=pattern):
+ alt.themes
+
+ # NOTE: Tests that second access does not trigger a warning
+ assert alt.themes
+ # Then reset cache
+ _warnings_monitor.clear()
+
+ with pytest.warns(AltairDeprecationWarning, match=pattern):
+ from altair import themes # noqa: F401
+
+ assert alt.themes == alt.theme._themes
+ _warnings_monitor.clear()
diff --git a/tests/vegalite/test_common.py b/tests/vegalite/test_common.py
index 3e8760ad7..404328886 100644
--- a/tests/vegalite/test_common.py
+++ b/tests/vegalite/test_common.py
@@ -20,7 +20,10 @@ def basic_spec():
def make_final_spec(alt, basic_spec):
- theme = alt.themes.get()
+ from altair.theme import _themes
+
+ theme = _themes.get()
+ assert theme
spec = theme()
spec.update(basic_spec)
return spec
@@ -67,10 +70,12 @@ def test_basic_chart_from_dict(alt, basic_spec):
@pytest.mark.parametrize("alt", [v5])
def test_theme_enable(alt, basic_spec):
- active_theme = alt.themes.active
+ from altair.theme import _themes
+
+ active_theme = _themes.active
try:
- alt.themes.enable("none")
+ _themes.enable("none")
chart = alt.Chart.from_dict(basic_spec)
dct = chart.to_dict()
@@ -83,7 +88,7 @@ def test_theme_enable(alt, basic_spec):
assert dct == basic_spec
finally:
# reset the theme to its initial value
- alt.themes.enable(active_theme)
+ _themes.enable(active_theme) # pyright: ignore[reportArgumentType]
@pytest.mark.parametrize("alt", [v5])
diff --git a/tests/vegalite/v5/test_api.py b/tests/vegalite/v5/test_api.py
index 98b30a9b6..0f60d185a 100644
--- a/tests/vegalite/v5/test_api.py
+++ b/tests/vegalite/v5/test_api.py
@@ -1347,20 +1347,22 @@ def test_LookupData():
def test_themes():
+ from altair import theme
+
chart = alt.Chart("foo.txt").mark_point()
- with alt.themes.enable("default"):
+ with theme.enable("default"):
assert chart.to_dict()["config"] == {
"view": {"continuousWidth": 300, "continuousHeight": 300}
}
- with alt.themes.enable("opaque"):
+ with theme.enable("opaque"):
assert chart.to_dict()["config"] == {
"background": "white",
"view": {"continuousWidth": 300, "continuousHeight": 300},
}
- with alt.themes.enable("none"):
+ with theme.enable("none"):
assert "config" not in chart.to_dict()
diff --git a/tests/vegalite/v5/test_theme.py b/tests/vegalite/v5/test_theme.py
index 97d2fb42e..da7c134ba 100644
--- a/tests/vegalite/v5/test_theme.py
+++ b/tests/vegalite/v5/test_theme.py
@@ -5,10 +5,11 @@
import pytest
import altair.vegalite.v5 as alt
-from altair.typing import ThemeConfig
-from altair.vegalite.v5.schema._config import ConfigKwds
+from altair import theme
+from altair.theme import ConfigKwds, ThemeConfig
from altair.vegalite.v5.schema._typing import is_color_hex
-from altair.vegalite.v5.theme import VEGA_THEMES, register_theme, themes
+from altair.vegalite.v5.theme import VEGA_THEMES
+from tests import slow
if TYPE_CHECKING:
import sys
@@ -25,26 +26,83 @@ def chart() -> alt.Chart:
def test_vega_themes(chart) -> None:
- for theme in VEGA_THEMES:
- with alt.themes.enable(theme):
+ for theme_name in VEGA_THEMES:
+ with theme.enable(theme_name):
dct = chart.to_dict()
- assert dct["usermeta"] == {"embedOptions": {"theme": theme}}
+ assert dct["usermeta"] == {"embedOptions": {"theme": theme_name}}
assert dct["config"] == {
"view": {"continuousWidth": 300, "continuousHeight": 300}
}
-def test_register_theme_decorator() -> None:
- @register_theme("unique name", enable=True)
+@slow
+def test_theme_remote_lambda() -> None:
+ """
+ Compatibility test for ``lambda`` usage in `dash-vega-components`_.
+
+ A ``lambda`` here is to fetch the remote resource **once**, wrapping the result in a function.
+
+ .. _dash-vega-components:
+ https://github.com/vega/dash-vega-components/blob/c3e8cae873580bc7a52bc01daea1f27a7df02b8b/example_app.py#L13-L17
+ """
+ import altair as alt # noqa: I001
+ from urllib.request import urlopen
+ import json
+
+ URL = "https://gist.githubusercontent.com/binste/b4042fa76a89d72d45cbbb9355ec6906/raw/e36f79d722bcd9dd954389b1753a2d4a18113227/altair_theme.json"
+ with urlopen(URL) as response:
+ custom_theme = json.load(response)
+
+ alt.theme.register("remote_binste", enable=True)(lambda: custom_theme)
+ assert alt.theme.active == "remote_binste"
+
+ # NOTE: A decorator-compatible way to define an "anonymous" function
+ @alt.theme.register("remote_binste_2", enable=True)
+ def _():
+ return custom_theme
+
+ assert alt.theme.active == "remote_binste_2"
+
+ decorated_theme = alt.theme.get()
+ alt.theme.enable("remote_binste")
+ assert alt.theme.active == "remote_binste"
+ lambda_theme = alt.theme.get()
+
+ assert decorated_theme
+ assert lambda_theme
+ assert decorated_theme() == lambda_theme()
+
+
+def test_theme_register_decorator() -> None:
+ @theme.register("unique name", enable=True)
def custom_theme() -> ThemeConfig:
return {"height": 400, "width": 700}
- assert themes.active == "unique name"
- registered = themes.get()
+ assert theme._themes.active == "unique name" == theme.active
+ registered = theme._themes.get()
assert registered is not None
+ assert registered == theme.get()
assert registered() == {"height": 400, "width": 700} == custom_theme()
+def test_theme_unregister() -> None:
+ @theme.register("big square", enable=True)
+ def custom_theme() -> ThemeConfig:
+ return {"height": 1000, "width": 1000}
+
+ assert theme.active == "big square"
+ fn = theme.unregister("big square")
+ assert fn() == custom_theme()
+ assert theme.active == theme._themes.active
+ # BUG: https://github.com/vega/altair/issues/3619
+ # assert theme.active != "big square"
+
+ with pytest.raises(
+ TypeError, match=r"Found no theme named 'big square' in registry."
+ ):
+ theme.unregister("big square")
+
+
@pytest.mark.parametrize(
("color_code", "valid"),
[
@@ -982,5 +1040,6 @@ def test_theme_config(theme_func: Callable[[], ThemeConfig], chart) -> None:
See ``(test_vega_themes|test_register_theme_decorator)`` for comprehensive suite.
"""
name = cast("LiteralString", theme_func.__qualname__)
- register_theme(name, enable=True)
+ theme.register(name, enable=True)(theme_func)
assert chart.to_dict(validate=True)
+ assert theme.get() == theme_func
diff --git a/tools/generate_api_docs.py b/tools/generate_api_docs.py
index 489375786..b9c2a1a2a 100644
--- a/tools/generate_api_docs.py
+++ b/tools/generate_api_docs.py
@@ -26,6 +26,8 @@
further details, as this low-level documentation may not be enough to give
full guidelines on their use.
+.. _api-toplevel:
+
Top-Level Objects
-----------------
.. currentmodule:: altair
@@ -36,6 +38,8 @@
{toplevel_charts}
+.. _api-channels:
+
Encoding Channels
-----------------
.. currentmodule:: altair
@@ -46,6 +50,8 @@
{encoding_wrappers}
+.. _api-functions:
+
API Functions
-------------
.. currentmodule:: altair
@@ -56,6 +62,20 @@
{api_functions}
+.. _api-theme:
+
+Theme
+-----
+.. currentmodule:: altair.theme
+
+.. autosummary::
+ :toctree: generated/theme/
+ :nosignatures:
+
+ {theme_objects}
+
+.. _api-core:
+
Low-Level Schema Wrappers
-------------------------
.. currentmodule:: altair
@@ -66,6 +86,8 @@
{lowlevel_wrappers}
+.. _api-cls:
+
API Utility Classes
-------------------
.. currentmodule:: altair
@@ -76,6 +98,8 @@
{api_classes}
+.. _api-typing:
+
Typing
------
.. currentmodule:: altair.typing
@@ -111,19 +135,19 @@ def iter_objects(
def toplevel_charts() -> list[str]:
- return sorted(iter_objects(alt.api, restrict_to_subclass=alt.TopLevelMixin)) # type: ignore[attr-defined]
+ return sorted(iter_objects(alt.api, restrict_to_subclass=alt.TopLevelMixin))
def encoding_wrappers() -> list[str]:
- return sorted(iter_objects(alt.channels, restrict_to_subclass=alt.SchemaBase)) # type: ignore[attr-defined]
+ return sorted(iter_objects(alt.channels, restrict_to_subclass=alt.SchemaBase))
def api_functions() -> list[str]:
# Exclude `typing` functions/SpecialForm(s)
- KEEP = set(alt.api.__all__) - set(alt.typing.__all__) # type: ignore[attr-defined]
+ KEEP = set(alt.api.__all__) - set(alt.typing.__all__)
return sorted(
name
- for name in iter_objects(alt.api, restrict_to_type=types.FunctionType) # type: ignore[attr-defined]
+ for name in iter_objects(alt.api, restrict_to_type=types.FunctionType)
if name in KEEP
)
@@ -137,8 +161,16 @@ def type_hints() -> list[str]:
return sorted(s for s in iter_objects(alt.typing) if s in alt.typing.__all__)
+def theme() -> list[str]:
+ sort_1 = sorted(s for s in iter_objects(alt.theme) if s in alt.theme.__all__)
+ # Display functions before `TypedDict`, but show `ThemeConfig` before `Kwds`
+ sort_2 = sorted(sort_1, key=lambda s: s.endswith("Kwds"))
+ sort_3 = sorted(sort_2, key=lambda s: not s.islower())
+ return sort_3
+
+
def lowlevel_wrappers() -> list[str]:
- objects = sorted(iter_objects(alt.schema.core, restrict_to_subclass=alt.SchemaBase)) # type: ignore[attr-defined]
+ objects = sorted(iter_objects(alt.schema.core, restrict_to_subclass=alt.SchemaBase))
# The names of these two classes are also used for classes in alt.channels. Due to
# how imports are set up, these channel classes overwrite the two low-level classes
# in the top-level Altair namespace. Therefore, they cannot be imported as e.g.
@@ -159,6 +191,7 @@ def write_api_file() -> None:
lowlevel_wrappers=sep.join(lowlevel_wrappers()),
api_classes=sep.join(api_classes()),
typing_objects=sep.join(type_hints()),
+ theme_objects=sep.join(theme()),
),
encoding="utf-8",
)
diff --git a/tools/generate_schema_wrapper.py b/tools/generate_schema_wrapper.py
index 278606551..e024c2ca1 100644
--- a/tools/generate_schema_wrapper.py
+++ b/tools/generate_schema_wrapper.py
@@ -7,11 +7,12 @@
import json
import sys
import textwrap
+from collections.abc import Iterable, Iterator
from dataclasses import dataclass
from itertools import chain
from operator import attrgetter
from pathlib import Path
-from typing import TYPE_CHECKING, Any, Final, Generic, Literal, TypedDict, TypeVar
+from typing import TYPE_CHECKING, Any, Final, Generic, Literal, TypeVar
from urllib import request
if sys.version_info >= (3, 14):
@@ -47,6 +48,7 @@
from tools.schemapi.codegen import ArgInfo, AttrGetter
from vl_convert import VegaThemes
+T = TypeVar("T", bound="str | Iterable[str]")
SCHEMA_VERSION: Final = "v5.20.1"
@@ -530,6 +532,12 @@ class {classname}(DatumChannelMixin, core.{basename}):
haspropsetters = True
+class ModuleDef(Generic[T]):
+ def __init__(self, contents: T, all: Iterable[str], /) -> None:
+ self.contents: T = contents
+ self.all: list[str] = list(all)
+
+
def schema_class(*args, **kwargs) -> str:
return SchemaGenerator(*args, **kwargs).schema_class()
@@ -692,7 +700,7 @@ def visit(nodes):
return stack
-def generate_vegalite_schema_wrapper(fp: Path, /) -> str:
+def generate_vegalite_schema_wrapper(fp: Path, /) -> ModuleDef[str]:
"""Generate a schema wrapper at the given path."""
# TODO: generate simple tests for each wrapper
basename = "VegaLiteSchema"
@@ -766,7 +774,7 @@ def generate_vegalite_schema_wrapper(fp: Path, /) -> str:
contents.append(definitions[name].schema_class())
contents.append("") # end with newline
- return "\n".join(contents)
+ return ModuleDef("\n".join(contents), all_)
@dataclass
@@ -798,7 +806,7 @@ def non_field_names(self) -> Iterator[str]:
yield self.value_class_name
-def generate_vegalite_channel_wrappers(fp: Path, /) -> str:
+def generate_vegalite_channel_wrappers(fp: Path, /) -> ModuleDef[list[str]]:
schema = load_schema_with_shorthand_properties(fp)
encoding_def = "FacetedEncoding"
encoding = SchemaInfo(schema["definitions"][encoding_def], rootschema=schema)
@@ -854,7 +862,7 @@ def generate_vegalite_channel_wrappers(fp: Path, /) -> str:
"with_property_setters",
)
it = chain.from_iterable(info.all_names for info in channel_infos.values())
- all_ = list(chain(it, COMPAT_EXPORTS))
+ all_ = sorted(chain(it, COMPAT_EXPORTS))
imports = [
"import sys",
"from typing import Any, overload, Sequence, List, Literal, Union, TYPE_CHECKING, TypedDict",
@@ -877,7 +885,7 @@ def generate_vegalite_channel_wrappers(fp: Path, /) -> str:
ENCODING_SORT_FIELD,
)
TYPING_API = INTO_CONDITION, BIN, IMPUTE
- contents = [
+ contents: list[str] = [
HEADER,
CHANNEL_MYPY_IGNORE_STATEMENTS,
*imports,
@@ -889,14 +897,14 @@ def generate_vegalite_channel_wrappers(fp: Path, /) -> str:
f"from altair.vegalite.v5.api import {', '.join(TYPING_API)}",
textwrap.indent(import_typing_extensions((3, 11), "Self"), " "),
),
- "\n" f"__all__ = {sorted(all_)}\n",
+ "\n" f"__all__ = {all_}\n",
CHANNEL_MIXINS,
*class_defs,
*generate_encoding_artifacts(
channel_infos, ENCODE_METHOD, facet_encoding=encoding
),
]
- return "\n".join(contents)
+ return ModuleDef(contents, all_)
def generate_vegalite_mark_mixin(fp: Path, /, markdefs: dict[str, str]) -> str:
@@ -1008,7 +1016,7 @@ def generate_typed_dict(
name=name,
metaclass_kwds=metaclass_kwds,
comment=comment,
- summary=summary or f"{rst_syntax_for_class(info.title)} ``TypedDict`` wrapper.",
+ summary=(summary or f":class:`altair.{info.title}` ``TypedDict`` wrapper."),
doc=doc,
td_args=args,
)
@@ -1092,6 +1100,72 @@ def generate_vegalite_config_mixin(fp: Path, /) -> str:
return "\n".join(code)
+def generate_schema__init__(
+ *modules: str,
+ package: str,
+ expand: dict[Path, ModuleDef[Any]] | None = None,
+) -> Iterator[str]:
+ """
+ Generate schema subpackage init contents.
+
+ Parameters
+ ----------
+ *modules
+ Module names to expose, in addition to their members::
+
+ ...schema.__init__.__all__ = [
+ ...,
+ module_1.__name__,
+ module_1.__all__,
+ module_2.__name__,
+ module_2.__all__,
+ ...,
+ ]
+ package
+ Absolute, dotted path for `schema`, e.g::
+
+ "altair.vegalite.v5.schema"
+ expand
+ Required for 2nd-pass, which explicitly defines the new ``__all__``, using newly generated names.
+
+ .. note::
+ The default `import idiom`_ works at runtime, and for ``pyright`` - but not ``mypy``.
+ See `issue`_.
+
+ .. _import idiom:
+ https://typing.readthedocs.io/en/latest/spec/distributing.html#library-interface-public-and-private-symbols
+ .. _issue:
+ https://github.com/python/mypy/issues/15300
+ """
+ yield f"# ruff: noqa: F403, F405\n{HEADER_COMMENT}"
+ yield f"from {package} import {', '.join(modules)}"
+ yield from (f"from {package}.{mod} import *" for mod in modules)
+ yield f"SCHEMA_VERSION = {SCHEMA_VERSION!r}\n"
+ yield f"SCHEMA_URL = {schema_url()!r}\n"
+ base_all: list[str] = ["SCHEMA_URL", "SCHEMA_VERSION", *modules]
+ if expand:
+ base_all.extend(
+ chain.from_iterable(v.all for k, v in expand.items() if k.stem in modules)
+ )
+ yield f"__all__ = {base_all}"
+ else:
+ yield f"__all__ = {base_all}"
+ yield from (f"__all__ += {mod}.__all__" for mod in modules)
+
+
+def path_to_module_str(
+ fp: Path,
+ /,
+ root: Literal["altair", "doc", "sphinxext", "tests", "tools"] = "altair",
+) -> str:
+ # NOTE: GH runner has 3x altair, local is 2x
+ # - Needs to be the last occurence
+ idx = fp.parts.index(root)
+ start = idx + fp.parts.count(root) - 1 if root == "altair" else idx
+ parents = fp.parts[start:-1]
+ return ".".join(parents if fp.stem == "__init__" else (*parents, fp.stem))
+
+
def vegalite_main(skip_download: bool = False) -> None:
version = SCHEMA_VERSION
vn = version.split(".")[0]
@@ -1109,23 +1183,22 @@ def vegalite_main(skip_download: bool = False) -> None:
# Generate __init__.py file
outfile = schemapath / "__init__.py"
+ pkg_schema = path_to_module_str(outfile)
print(f"Writing {outfile!s}")
- content = [
- "# ruff: noqa\n",
- "from .core import *\nfrom .channels import *\n",
- f"SCHEMA_VERSION = '{version}'\n",
- f"SCHEMA_URL = {schema_url(version)!r}\n",
- ]
- ruff.write_lint_format(outfile, content)
+ ruff.write_lint_format(
+ outfile, generate_schema__init__("channels", "core", package=pkg_schema)
+ )
TypeAliasTracer.update_aliases(("Map", "Mapping[str, Any]"))
files: dict[Path, str | Iterable[str]] = {}
+ modules: dict[Path, ModuleDef[Any]] = {}
# Generate the core schema wrappers
fp_core = schemapath / "core.py"
print(f"Generating\n {schemafile!s}\n ->{fp_core!s}")
- files[fp_core] = generate_vegalite_schema_wrapper(schemafile)
+ modules[fp_core] = generate_vegalite_schema_wrapper(schemafile)
+ files[fp_core] = modules[fp_core].contents
# Generate the channel wrappers
fp_channels = schemapath / "channels.py"
@@ -1133,7 +1206,14 @@ def vegalite_main(skip_download: bool = False) -> None:
with RemapContext(
{DATETIME: (TEMPORAL, DATETIME), BIN_PARAMS: (BIN,), IMPUTE_PARAMS: (IMPUTE,)}
):
- files[fp_channels] = generate_vegalite_channel_wrappers(schemafile)
+ modules[fp_channels] = generate_vegalite_channel_wrappers(schemafile)
+ files[fp_channels] = modules[fp_channels].contents
+
+ # Expand `schema.__init__.__all__` with new classes
+ ruff.write_lint_format(
+ outfile,
+ generate_schema__init__("channels", "core", package=pkg_schema, expand=modules),
+ )
# generate the mark mixin
markdefs = {k: f"{k}Def" for k in ["Mark", "BoxPlot", "ErrorBar", "ErrorBand"]}
diff --git a/tools/update_init_file.py b/tools/update_init_file.py
index f795667b7..5ac9c7cb4 100644
--- a/tools/update_init_file.py
+++ b/tools/update_init_file.py
@@ -4,13 +4,18 @@
import typing as t
import typing_extensions as te
+from importlib import import_module as _import_module
+from importlib.util import find_spec as _find_spec
from inspect import getattr_static, ismodule
from pathlib import Path
from typing import TYPE_CHECKING
from tools.codemod import ruff
-_TYPING_CONSTRUCTS = {
+if TYPE_CHECKING:
+ from collections.abc import Iterable, Iterator
+
+_TYPING_CONSTRUCTS: set[t.Any] = {
te.TypeAlias,
t.TypeVar,
t.cast,
@@ -36,6 +41,8 @@
te.TypeAliasType,
}
+DYNAMIC_ALL: tuple[te.LiteralString, ...] = ("altair.vegalite.v5",)
+
def update__all__variable() -> None:
"""
@@ -47,11 +54,8 @@ def update__all__variable() -> None:
# Read existing file content
import altair as alt
- encoding = "utf-8"
- init_path = Path(alt.__file__)
- with init_path.open(encoding=encoding) as f:
- lines = f.readlines()
- lines = [line.strip("\n") for line in lines]
+ init_path = normalize_source("altair")
+ lines = extract_lines(init_path, strip_chars="\n")
# Find first and last line of the definition of __all__
first_definition_line = None
@@ -76,6 +80,10 @@ def update__all__variable() -> None:
# Format file content with ruff
ruff.write_lint_format(init_path, new_lines)
+ for source in DYNAMIC_ALL:
+ print(f"Updating `__all__`\n " f"{source!r}\n ->{normalize_source(source)!s}")
+ update_dynamic__all__(source)
+
def relevant_attributes(namespace: dict[str, t.Any], /) -> list[str]:
"""
@@ -134,5 +142,104 @@ def _is_relevant(attr: t.Any, name: str, /) -> bool:
return True
+def _retrieve_all(name: str, /) -> list[str]:
+ """Import `name` and return a defined ``__all__``."""
+ found = _import_module(name).__all__
+ if not found:
+ msg = (
+ f"Expected to find a populated `__all__` for {name!r},\n"
+ f"but got: {found!r}"
+ )
+ raise AttributeError(msg)
+ return found
+
+
+def normalize_source(src: str | Path, /) -> Path:
+ """
+ Return the ``Path`` representation of a module/package.
+
+ Returned unchanged if already a ``Path``.
+ """
+ if isinstance(src, str):
+ if src == "altair" or src.startswith("altair."):
+ if (spec := _find_spec(src)) and (origin := spec.origin):
+ src = origin
+ else:
+ raise ModuleNotFoundError(src, spec)
+ return Path(src)
+ else:
+ return src
+
+
+def extract_lines(fp: Path, /, strip_chars: str | None = None) -> list[str]:
+ """Return all lines in ``fp`` with whitespace stripped."""
+ with Path(fp).open(encoding="utf-8") as f:
+ lines = f.readlines()
+ if not lines:
+ msg = f"Found no content when reading lines for:\n{lines!r}"
+ raise NotImplementedError(msg)
+ return [line.strip(strip_chars) for line in lines]
+
+
+def _normalize_import_lines(lines: Iterable[str]) -> Iterator[str]:
+ """
+ Collapses file content to contain one line per import source.
+
+ Preserves only lines **before** an existing ``__all__``.
+ """
+ it: Iterator[str] = iter(lines)
+ for line in it:
+ if line.endswith("("):
+ line = line.rstrip("( ")
+ for s_line in it:
+ if s_line.endswith(","):
+ line = f"{line} {s_line}"
+ elif s_line.endswith(")"):
+ break
+ else:
+ NotImplementedError(f"Unexpected line:\n{s_line!r}")
+ yield line.rstrip(",")
+ elif line.startswith("__all__"):
+ break
+ else:
+ yield line
+
+
+def process_lines(lines: Iterable[str], /) -> Iterator[str]:
+ """Normalize imports, follow ``*``(s), reconstruct `__all__``."""
+ _all: set[str] = set()
+ for line in _normalize_import_lines(lines):
+ if line.startswith("#") or line == "":
+ yield line
+ elif "import" in line:
+ origin_stmt, members = line.split(" import ", maxsplit=1)
+ if members == "*":
+ _, origin = origin_stmt.split("from ")
+ targets = _retrieve_all(origin)
+ else:
+ targets = members.split(", ")
+ _all.update(targets)
+ yield line
+ else:
+ msg = f"Unexpected line:\n{line!r}"
+ raise NotImplementedError(msg)
+ yield f"__all__ = {sorted(_all)}"
+
+
+def update_dynamic__all__(source: str | Path, /) -> None:
+ """
+ ## Relies on all `*` imports leading to an `__all__`.
+
+ Acceptable `source`:
+
+ "altair.package.subpackage.etc"
+ Path(...)
+
+ """
+ fp = normalize_source(source)
+ content = process_lines(extract_lines(fp))
+ ruff.write_lint_format(fp, content)
+
+
if __name__ == "__main__":
update__all__variable()
From b4816e9b33d97e8c0c6fb8434323ed800fdf7b47 Mon Sep 17 00:00:00 2001
From: Dan Redding <125183946+dangotbanned@users.noreply.github.com>
Date: Tue, 12 Nov 2024 19:59:56 +0000
Subject: [PATCH 05/42] ci(typing): Add `pyarrow-stubs` to `dev` dependencies
(#3679)
---
pyproject.toml | 1 +
tests/utils/test_utils.py | 4 ++--
2 files changed, 3 insertions(+), 2 deletions(-)
diff --git a/pyproject.toml b/pyproject.toml
index ae15a8a4b..4132f0a25 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -73,6 +73,7 @@ dev = [
"duckdb>=1.0",
"ipython[kernel]",
"pandas>=1.1.3",
+ "pyarrow-stubs",
"pytest",
"pytest-cov",
"pytest-xdist[psutil]~=3.5",
diff --git a/tests/utils/test_utils.py b/tests/utils/test_utils.py
index c3b329cf0..2e8ae1214 100644
--- a/tests/utils/test_utils.py
+++ b/tests/utils/test_utils.py
@@ -140,7 +140,7 @@ def test_sanitize_pyarrow_table_columns() -> None:
pa_table = pa.Table.from_pandas(
df,
pa.schema(
- [
+ (
pa.field("s", pa.string()),
pa.field("f", pa.float64()),
pa.field("i", pa.int64()),
@@ -148,7 +148,7 @@ def test_sanitize_pyarrow_table_columns() -> None:
pa.field("d", pa.date32()),
pa.field("c", pa.dictionary(pa.int8(), pa.string())),
pa.field("p", pa.timestamp("ns", tz="UTC")),
- ]
+ )
),
)
sanitized = sanitize_narwhals_dataframe(nw.from_native(pa_table, eager_only=True))
From b292ccfb88ac84cf716cc0116ef2047633ab2654 Mon Sep 17 00:00:00 2001
From: Jon Mease
Date: Wed, 13 Nov 2024 07:53:31 -0500
Subject: [PATCH 06/42] chore: Prep for VegaFusion 2.0 (#3680)
---
altair/utils/_importers.py | 27 +++++++++++++++------------
pyproject.toml | 2 +-
2 files changed, 16 insertions(+), 13 deletions(-)
diff --git a/altair/utils/_importers.py b/altair/utils/_importers.py
index c02cc7011..efe48df8b 100644
--- a/altair/utils/_importers.py
+++ b/altair/utils/_importers.py
@@ -15,18 +15,21 @@ def import_vegafusion() -> ModuleType:
import vegafusion as vf
version = importlib_version("vegafusion")
- embed_version = importlib_version("vegafusion-python-embed")
- if version != embed_version or Version(version) < Version(min_version):
- msg = (
- "The versions of the vegafusion and vegafusion-python-embed packages must match\n"
- f"and must be version {min_version} or greater.\n"
- f"Found:\n"
- f" - vegafusion=={version}\n"
- f" - vegafusion-python-embed=={embed_version}\n"
- )
- raise RuntimeError(msg)
-
- return vf
+ if Version(version) >= Version("2.0.0a0"):
+ # In VegaFusion 2.0 there is no vegafusion-python-embed package
+ return vf
+ else:
+ embed_version = importlib_version("vegafusion-python-embed")
+ if version != embed_version or Version(version) < Version(min_version):
+ msg = (
+ "The versions of the vegafusion and vegafusion-python-embed packages must match\n"
+ f"and must be version {min_version} or greater.\n"
+ f"Found:\n"
+ f" - vegafusion=={version}\n"
+ f" - vegafusion-python-embed=={embed_version}\n"
+ )
+ raise RuntimeError(msg)
+ return vf
except ImportError as err:
msg = (
'The "vegafusion" data transformer and chart.transformed_data feature requires\n'
diff --git a/pyproject.toml b/pyproject.toml
index 4132f0a25..bcac9e098 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -63,7 +63,7 @@ all = [
"pandas>=1.1.3",
"numpy",
"pyarrow>=11",
- "vegafusion[embed]>=1.6.6,<2",
+ "vegafusion[embed]>=1.6.6",
"anywidget>=0.9.0",
"altair_tiles>=0.3.0"
]
From 1d576a8e3b8b47bdeae92f09d1733a93afd49fbd Mon Sep 17 00:00:00 2001
From: Dan Redding <125183946+dangotbanned@users.noreply.github.com>
Date: Wed, 13 Nov 2024 21:30:24 +0000
Subject: [PATCH 07/42] feat: Support `Chart.transform_filter(*predicates,
**constraints)` (#3664)
---
altair/vegalite/v5/api.py | 146 +++++++++++++-----
doc/user_guide/transform/filter.rst | 20 ++-
.../line_chart_with_cumsum_faceted.py | 6 +-
.../line_chart_with_cumsum_faceted.py | 6 +-
tests/vegalite/v5/test_api.py | 61 +++++++-
5 files changed, 192 insertions(+), 47 deletions(-)
diff --git a/altair/vegalite/v5/api.py b/altair/vegalite/v5/api.py
index c99e556be..e67308004 100644
--- a/altair/vegalite/v5/api.py
+++ b/altair/vegalite/v5/api.py
@@ -127,7 +127,6 @@
NamedData,
ParameterName,
PointSelectionConfig,
- Predicate,
PredicateComposition,
ProjectionType,
RepeatMapping,
@@ -542,12 +541,19 @@ def check_fields_and_encodings(parameter: Parameter, field_name: str) -> bool:
"""
-_FieldEqualType: TypeAlias = Union[PrimitiveValue_T, Map, Parameter, SchemaBase]
-"""Permitted types for equality checks on field values:
+_FieldEqualType: TypeAlias = Union["IntoExpression", Parameter, SchemaBase]
+"""
+Permitted types for equality checks on field values.
+
+Applies to the following context(s):
+
+ import altair as alt
-- `datum.field == ...`
-- `FieldEqualPredicate(equal=...)`
-- `when(**constraints=...)`
+ alt.datum.field == ...
+ alt.FieldEqualPredicate(field="field", equal=...)
+ alt.when(field=...)
+ alt.when().then().when(field=...)
+ alt.Chart.transform_filter(field=...)
"""
@@ -2986,45 +2992,113 @@ def transform_extent(
"""
return self._add_transform(core.ExtentTransform(extent=extent, param=param))
- # TODO: Update docstring
- # # E.g. {'not': alt.FieldRangePredicate(field='year', range=[1950, 1960])}
def transform_filter(
self,
- filter: str
- | Expr
- | Expression
- | Predicate
- | Parameter
- | PredicateComposition
- | dict[str, Predicate | str | list | bool],
- **kwargs: Any,
+ predicate: Optional[_PredicateType] = Undefined,
+ *more_predicates: _ComposablePredicateType,
+ empty: Optional[bool] = Undefined,
+ **constraints: _FieldEqualType,
) -> Self:
"""
- Add a :class:`FilterTransform` to the schema.
+ Add a :class:`FilterTransform` to the spec.
+
+ The resulting predicate is an ``&`` reduction over ``predicate`` and optional ``*``, ``**``, arguments.
Parameters
----------
- filter : a filter expression or :class:`PredicateComposition`
- The `filter` property must be one of the predicate definitions:
- (1) a string or alt.expr expression
- (2) a range predicate
- (3) a selection predicate
- (4) a logical operand combining (1)-(3)
- (5) a Selection object
+ predicate
+ A selection or test predicate. ``str`` input will be treated as a test operand.
+ *more_predicates
+ Additional predicates, restricted to types supporting ``&``.
+ empty
+ For selection parameters, the predicate of empty selections returns ``True`` by default.
+ Override this behavior, with ``empty=False``.
- Returns
- -------
- self : Chart object
- returns chart to allow for chaining
+ .. note::
+ When ``predicate`` is a ``Parameter`` that is used more than once,
+ ``self.transform_filter(..., empty=...)`` provides granular control for each occurrence.
+ **constraints
+ Specify `Field Equal Predicate`_'s.
+ Shortcut for ``alt.datum.field_name == value``, see examples for usage.
+
+ Warns
+ -----
+ AltairDeprecationWarning
+ If called using ``filter`` as a keyword argument.
+
+ See Also
+ --------
+ alt.when : Uses a similar syntax for defining conditional values.
+
+ Notes
+ -----
+ - Directly inspired by the syntax used in `polars.DataFrame.filter`_.
+
+ .. _Field Equal Predicate:
+ https://vega.github.io/vega-lite/docs/predicate.html#equal-predicate
+ .. _polars.DataFrame.filter:
+ https://docs.pola.rs/api/python/stable/reference/dataframe/api/polars.DataFrame.filter.html
+
+ Examples
+ --------
+ Setting up a common chart::
+
+ import altair as alt
+ from altair import datum
+ from vega_datasets import data
+
+ source = data.population.url
+ chart = (
+ alt.Chart(source)
+ .mark_line()
+ .encode(
+ x="age:O",
+ y="sum(people):Q",
+ color=alt.Color("year:O").legend(symbolType="square"),
+ )
+ )
+ chart
+
+ Singular predicates can be expressed via ``datum``::
+
+ chart.transform_filter(datum.year <= 1980)
+
+ We can also use selection parameters directly::
+
+ selection = alt.selection_point(encodings=["color"], bind="legend")
+ chart.transform_filter(selection).add_params(selection)
+
+ Or a field predicate::
+
+ between_1950_60 = alt.FieldRangePredicate(field="year", range=[1950, 1960])
+ chart.transform_filter(between_1950_60) | chart.transform_filter(~between_1950_60)
+
+ Predicates can be composed together using logical operands::
+
+ chart.transform_filter(between_1950_60 | (datum.year == 1850))
+
+ Predicates passed as positional arguments will be reduced with ``&``::
+
+ chart.transform_filter(datum.year > 1980, datum.age != 90)
+
+ Using keyword-argument ``constraints`` can simplify compositions like::
+
+ verbose_composition = chart.transform_filter((datum.year == 2000) & (datum.sex == 1))
+ chart.transform_filter(year=2000, sex=1)
"""
- if isinstance(filter, Parameter):
- new_filter: dict[str, Any] = {"param": filter.name}
- if "empty" in kwargs:
- new_filter["empty"] = kwargs.pop("empty")
- elif isinstance(filter.empty, bool):
- new_filter["empty"] = filter.empty
- filter = new_filter
- return self._add_transform(core.FilterTransform(filter=filter, **kwargs))
+ if depr_filter := t.cast(Any, constraints.pop("filter", None)):
+ utils.deprecated_warn(
+ "Passing `filter` as a keyword is ambiguous.\n\n"
+ "Use a positional argument for `<5.5.0` behavior.\n"
+ "Or, `alt.datum['filter'] == ...` if referring to a column named 'filter'.",
+ version="5.5.0",
+ )
+ if utils.is_undefined(predicate):
+ predicate = depr_filter
+ else:
+ more_predicates = *more_predicates, depr_filter
+ cond = _parse_when(predicate, *more_predicates, empty=empty, **constraints)
+ return self._add_transform(core.FilterTransform(filter=cond.get("test", cond)))
def transform_flatten(
self,
diff --git a/doc/user_guide/transform/filter.rst b/doc/user_guide/transform/filter.rst
index 39c268210..62ee6e334 100644
--- a/doc/user_guide/transform/filter.rst
+++ b/doc/user_guide/transform/filter.rst
@@ -20,6 +20,8 @@ expressions and objects:
We'll show a brief example of each of these in the following sections
+.. _filter-expression:
+
Filter Expression
^^^^^^^^^^^^^^^^^
A filter expression uses the `Vega expression`_ language, either specified
@@ -189,12 +191,26 @@ Then, we can *invert* this selection using ``~``:
chart.transform_filter(~between_1950_60)
We can further refine our filter by *composing* multiple predicates together.
-In this case, using ``alt.datum``:
+In this case, using ``datum``:
+
+.. altair-plot::
+
+ chart.transform_filter(~between_1950_60 & (datum.age <= 70))
+
+When passing multiple predicates they will be reduced with ``&``:
.. altair-plot::
- chart.transform_filter(~between_1950_60 & (alt.datum.age <= 70))
+ chart.transform_filter(datum.year > 1980, datum.age != 90)
+Using keyword-argument ``constraints`` can simplify our first example in :ref:`filter-expression`:
+
+.. altair-plot::
+
+ alt.Chart(source).mark_area().encode(
+ x="age:O",
+ y="people:Q",
+ ).transform_filter(year=2000, sex=1)
Transform Options
^^^^^^^^^^^^^^^^^
diff --git a/tests/examples_arguments_syntax/line_chart_with_cumsum_faceted.py b/tests/examples_arguments_syntax/line_chart_with_cumsum_faceted.py
index 5a0fdb743..d33df06ad 100644
--- a/tests/examples_arguments_syntax/line_chart_with_cumsum_faceted.py
+++ b/tests/examples_arguments_syntax/line_chart_with_cumsum_faceted.py
@@ -12,10 +12,8 @@
columns_sorted = ['Drought', 'Epidemic', 'Earthquake', 'Flood']
alt.Chart(source).transform_filter(
- {'and': [
- alt.FieldOneOfPredicate(field='Entity', oneOf=columns_sorted), # Filter data to show only disasters in columns_sorted
- alt.FieldRangePredicate(field='Year', range=[1900, 2000]) # Filter data to show only 20th century
- ]}
+ alt.FieldOneOfPredicate(field='Entity', oneOf=columns_sorted),
+ alt.FieldRangePredicate(field='Year', range=[1900, 2000])
).transform_window(
cumulative_deaths='sum(Deaths)', groupby=['Entity'] # Calculate cumulative sum of Deaths by Entity
).mark_line().encode(
diff --git a/tests/examples_methods_syntax/line_chart_with_cumsum_faceted.py b/tests/examples_methods_syntax/line_chart_with_cumsum_faceted.py
index d9d887ba5..56dcdb931 100644
--- a/tests/examples_methods_syntax/line_chart_with_cumsum_faceted.py
+++ b/tests/examples_methods_syntax/line_chart_with_cumsum_faceted.py
@@ -12,10 +12,8 @@
columns_sorted = ['Drought', 'Epidemic', 'Earthquake', 'Flood']
alt.Chart(source).transform_filter(
- {'and': [
- alt.FieldOneOfPredicate(field='Entity', oneOf=columns_sorted), # Filter data to show only disasters in columns_sorted
- alt.FieldRangePredicate(field='Year', range=[1900, 2000]) # Filter data to show only 20th century
- ]}
+ alt.FieldOneOfPredicate(field='Entity', oneOf=columns_sorted),
+ alt.FieldRangePredicate(field='Year', range=[1900, 2000])
).transform_window(
cumulative_deaths='sum(Deaths)', groupby=['Entity'] # Calculate cumulative sum of Deaths by Entity
).mark_line().encode(
diff --git a/tests/vegalite/v5/test_api.py b/tests/vegalite/v5/test_api.py
index 0f60d185a..6bb4ac9ef 100644
--- a/tests/vegalite/v5/test_api.py
+++ b/tests/vegalite/v5/test_api.py
@@ -10,6 +10,7 @@
import re
import sys
import tempfile
+import warnings
from collections.abc import Mapping
from datetime import date, datetime
from importlib.metadata import version as importlib_version
@@ -85,7 +86,7 @@ def _make_chart_type(chart_type):
@pytest.fixture
-def basic_chart():
+def basic_chart() -> alt.Chart:
data = pd.DataFrame(
{
"a": ["A", "B", "C", "D", "E", "F", "G", "H", "I"],
@@ -1247,6 +1248,64 @@ def test_predicate_composition() -> None:
assert actual_multi == expected_multi
+def test_filter_transform_predicates(basic_chart) -> None:
+ lhs, rhs = alt.datum["b"] >= 30, alt.datum["b"] < 60
+ expected = [{"filter": lhs & rhs}]
+ actual = basic_chart.transform_filter(lhs, rhs).to_dict()["transform"]
+ assert actual == expected
+
+
+def test_filter_transform_constraints(basic_chart) -> None:
+ lhs, rhs = alt.datum["a"] == "A", alt.datum["b"] == 30
+ expected = [{"filter": lhs & rhs}]
+ actual = basic_chart.transform_filter(a="A", b=30).to_dict()["transform"]
+ assert actual == expected
+
+
+def test_filter_transform_predicates_constraints(basic_chart) -> None:
+ from functools import reduce
+ from operator import and_
+
+ predicates = (
+ alt.datum["a"] != "A",
+ alt.datum["a"] != "B",
+ alt.datum["a"] != "C",
+ alt.datum["b"] > 1,
+ alt.datum["b"] < 99,
+ )
+ constraints = {"b": 30, "a": "D"}
+ pred_constraints = *predicates, alt.datum["b"] == 30, alt.datum["a"] != "D"
+ expected = [{"filter": reduce(and_, pred_constraints)}]
+ actual = basic_chart.transform_filter(*predicates, **constraints).to_dict()[
+ "transform"
+ ]
+ assert actual == expected
+
+
+def test_filter_transform_errors(basic_chart) -> None:
+ NO_ARGS = r"At least one.+Undefined"
+ FILTER_KWARGS = r"ambiguous"
+
+ depr_filter = {"field": "year", "oneOf": [1955, 2000]}
+ expected = [{"filter": depr_filter}]
+
+ with pytest.raises(TypeError, match=NO_ARGS):
+ basic_chart.transform_filter()
+ with pytest.raises(TypeError, match=NO_ARGS):
+ basic_chart.transform_filter(empty=True)
+ with pytest.raises(TypeError, match=NO_ARGS):
+ basic_chart.transform_filter(empty=False)
+
+ with pytest.warns(alt.AltairDeprecationWarning, match=FILTER_KWARGS):
+ basic_chart.transform_filter(filter=depr_filter)
+
+ with warnings.catch_warnings():
+ warnings.filterwarnings("ignore", category=alt.AltairDeprecationWarning)
+ actual = basic_chart.transform_filter(filter=depr_filter).to_dict()["transform"]
+
+ assert actual == expected
+
+
def test_resolve_methods():
chart = alt.LayerChart().resolve_axis(x="shared", y="independent")
assert chart.resolve == alt.Resolve(
From ab3e250cf6679f22cc8f84b87721d1af0764d395 Mon Sep 17 00:00:00 2001
From: Dan Redding <125183946+dangotbanned@users.noreply.github.com>
Date: Fri, 15 Nov 2024 14:29:12 +0000
Subject: [PATCH 08/42] refactor: Replace unconditional `typing_extensions`
imports (#3683)
---
altair/utils/_transformed_data.py | 7 ++++++-
altair/utils/data.py | 20 +++++++++++++++-----
altair/utils/display.py | 11 +++++++++--
altair/utils/mimebundle.py | 11 +++++++++--
altair/utils/plugin_registry.py | 13 +++++++++++--
5 files changed, 50 insertions(+), 12 deletions(-)
diff --git a/altair/utils/_transformed_data.py b/altair/utils/_transformed_data.py
index a1460f2c4..06c3dfe94 100644
--- a/altair/utils/_transformed_data.py
+++ b/altair/utils/_transformed_data.py
@@ -1,7 +1,6 @@
from __future__ import annotations
from typing import TYPE_CHECKING, Any, overload
-from typing_extensions import TypeAlias
from altair import (
Chart,
@@ -31,8 +30,14 @@
from altair.utils.schemapi import Undefined
if TYPE_CHECKING:
+ import sys
from collections.abc import Iterable
+ if sys.version_info >= (3, 10):
+ from typing import TypeAlias
+ else:
+ from typing_extensions import TypeAlias
+
from altair.typing import ChartType
from altair.utils.core import DataFrameLike
diff --git a/altair/utils/data.py b/altair/utils/data.py
index 89ec31f1f..bb6868b07 100644
--- a/altair/utils/data.py
+++ b/altair/utils/data.py
@@ -12,14 +12,11 @@
Any,
Callable,
Literal,
- Protocol,
TypedDict,
TypeVar,
Union,
overload,
- runtime_checkable,
)
-from typing_extensions import Concatenate, ParamSpec, TypeAlias
import narwhals.stable.v1 as nw
from narwhals.dependencies import is_pandas_dataframe as _is_pandas_dataframe
@@ -36,11 +33,24 @@
from .plugin_registry import PluginRegistry
if sys.version_info >= (3, 13):
- from typing import TypeIs
+ from typing import Protocol, runtime_checkable
else:
- from typing_extensions import TypeIs
+ from typing_extensions import Protocol, runtime_checkable
+if sys.version_info >= (3, 10):
+ from typing import Concatenate, ParamSpec
+else:
+ from typing_extensions import Concatenate, ParamSpec
if TYPE_CHECKING:
+ if sys.version_info >= (3, 13):
+ from typing import TypeIs
+ else:
+ from typing_extensions import TypeIs
+
+ if sys.version_info >= (3, 10):
+ from typing import TypeAlias
+ else:
+ from typing_extensions import TypeAlias
import pandas as pd
import pyarrow as pa
diff --git a/altair/utils/display.py b/altair/utils/display.py
index b6d6d39f5..223417a11 100644
--- a/altair/utils/display.py
+++ b/altair/utils/display.py
@@ -4,14 +4,21 @@
import pkgutil
import textwrap
import uuid
-from typing import Any, Callable, Union
-from typing_extensions import TypeAlias
+from typing import TYPE_CHECKING, Any, Callable, Union
from ._vegafusion_data import compile_with_vegafusion, using_vegafusion
from .mimebundle import spec_to_mimebundle
from .plugin_registry import PluginEnabler, PluginRegistry
from .schemapi import validate_jsonschema
+if TYPE_CHECKING:
+ import sys
+
+ if sys.version_info >= (3, 10):
+ from typing import TypeAlias
+ else:
+ from typing_extensions import TypeAlias
+
# ==============================================================================
# Renderer registry
# ==============================================================================
diff --git a/altair/utils/mimebundle.py b/altair/utils/mimebundle.py
index 029388025..575b3f71c 100644
--- a/altair/utils/mimebundle.py
+++ b/altair/utils/mimebundle.py
@@ -1,12 +1,19 @@
from __future__ import annotations
import struct
-from typing import Any, Literal, cast, overload
-from typing_extensions import TypeAlias
+from typing import TYPE_CHECKING, Any, Literal, cast, overload
from ._importers import import_vl_convert, vl_version_for_vl_convert
from .html import spec_to_html
+if TYPE_CHECKING:
+ import sys
+
+ if sys.version_info >= (3, 10):
+ from typing import TypeAlias
+ else:
+ from typing_extensions import TypeAlias
+
MimeBundleFormat: TypeAlias = Literal[
"html", "json", "png", "svg", "pdf", "vega", "vega-lite"
]
diff --git a/altair/utils/plugin_registry.py b/altair/utils/plugin_registry.py
index b4505fd9f..81e34cb8d 100644
--- a/altair/utils/plugin_registry.py
+++ b/altair/utils/plugin_registry.py
@@ -1,12 +1,21 @@
from __future__ import annotations
+import sys
from functools import partial
from importlib.metadata import entry_points
-from typing import TYPE_CHECKING, Any, Callable, Generic, cast
-from typing_extensions import TypeAliasType, TypeIs, TypeVar
+from typing import TYPE_CHECKING, Any, Callable, Generic, TypeVar, cast
from altair.utils.deprecation import deprecated_warn
+if sys.version_info >= (3, 13):
+ from typing import TypeIs
+else:
+ from typing_extensions import TypeIs
+if sys.version_info >= (3, 12):
+ from typing import TypeAliasType
+else:
+ from typing_extensions import TypeAliasType
+
if TYPE_CHECKING:
from types import TracebackType
From a0c091eca897e1b9eaa6bb70d8ae8dc1deff9e60 Mon Sep 17 00:00:00 2001
From: Jon Mease
Date: Fri, 15 Nov 2024 11:08:35 -0500
Subject: [PATCH 09/42] feat: VegaFusion 2 will support narwhals (#3682)
---
altair/utils/_vegafusion_data.py | 32 +++++++++++++++++++++++++++++++-
1 file changed, 31 insertions(+), 1 deletion(-)
diff --git a/altair/utils/_vegafusion_data.py b/altair/utils/_vegafusion_data.py
index 66e3d99fb..21ca6833f 100644
--- a/altair/utils/_vegafusion_data.py
+++ b/altair/utils/_vegafusion_data.py
@@ -1,9 +1,13 @@
from __future__ import annotations
import uuid
+from importlib.metadata import version as importlib_version
from typing import TYPE_CHECKING, Any, Callable, Final, TypedDict, Union, overload
from weakref import WeakValueDictionary
+from narwhals.dependencies import is_into_dataframe
+from packaging.version import Version
+
from altair.utils._importers import import_vegafusion
from altair.utils.core import DataFrameLike
from altair.utils.data import (
@@ -15,12 +19,18 @@
from altair.vegalite.data import default_data_transformer
if TYPE_CHECKING:
+ import sys
from collections.abc import MutableMapping
from narwhals.typing import IntoDataFrame
from vegafusion.runtime import ChartState
+ if sys.version_info >= (3, 13):
+ from typing import TypeIs
+ else:
+ from typing_extensions import TypeIs
+
# Temporary storage for dataframes that have been extracted
# from charts by the vegafusion data transformer. Use a WeakValueDictionary
# rather than a dict so that the Python interpreter is free to garbage
@@ -33,6 +43,25 @@
VEGAFUSION_PREFIX: Final = "vegafusion+dataset://"
+try:
+ VEGAFUSION_VERSION: Version | None = Version(importlib_version("vegafusion"))
+except ImportError:
+ VEGAFUSION_VERSION = None
+
+
+if VEGAFUSION_VERSION and Version("2.0.0a0") <= VEGAFUSION_VERSION:
+
+ def is_supported_by_vf(data: Any) -> TypeIs[DataFrameLike]:
+ # Test whether VegaFusion supports the data type
+ # VegaFusion v2 support narwhals-compatible DataFrames
+ return isinstance(data, DataFrameLike) or is_into_dataframe(data)
+
+else:
+
+ def is_supported_by_vf(data: Any) -> TypeIs[DataFrameLike]:
+ return isinstance(data, DataFrameLike)
+
+
class _ToVegaFusionReturnUrlDict(TypedDict):
url: str
@@ -64,7 +93,8 @@ def vegafusion_data_transformer(
"""VegaFusion Data Transformer."""
if data is None:
return vegafusion_data_transformer
- elif isinstance(data, DataFrameLike) and not isinstance(data, SupportsGeoInterface):
+
+ if is_supported_by_vf(data) and not isinstance(data, SupportsGeoInterface):
table_name = f"table_{uuid.uuid4()}".replace("-", "_")
extracted_inline_tables[table_name] = data
return {"url": VEGAFUSION_PREFIX + table_name}
From 9b224f60dd45ff46be5986327030bc66d13afdc4 Mon Sep 17 00:00:00 2001
From: Mattijn van Hoek
Date: Thu, 21 Nov 2024 22:21:37 +0100
Subject: [PATCH 10/42] bump narwhals to v1.13.1 (#3690)
---
pyproject.toml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/pyproject.toml b/pyproject.toml
index bcac9e098..4890bfd13 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -20,7 +20,7 @@ dependencies = [
# If you update the minimum required jsonschema version, also update it in build.yml
"jsonschema>=3.0",
"packaging",
- "narwhals>=1.5.2"
+ "narwhals>=1.13.1"
]
description = "Vega-Altair: A declarative statistical visualization library for Python."
readme = "README.md"
From 1f4489611f01f16468a5e79672eb821432a4f80b Mon Sep 17 00:00:00 2001
From: Mattijn van Hoek
Date: Thu, 21 Nov 2024 22:35:14 +0100
Subject: [PATCH 11/42] refactor: distinct Olli renderer template (#3689)
* unique olli renderer
* reduce render_kwargs option for olli
---
altair/utils/html.py | 124 +++++++++++++++++++++++++++++++------------
1 file changed, 90 insertions(+), 34 deletions(-)
diff --git a/altair/utils/html.py b/altair/utils/html.py
index 48c79af9d..9dbd4807d 100644
--- a/altair/utils/html.py
+++ b/altair/utils/html.py
@@ -117,22 +117,12 @@
if (outputDiv.id !== "{{ output_div }}") {
outputDiv = document.getElementById("{{ output_div }}");
}
- {%- if use_olli %}
- const olliDiv = document.createElement("div");
- const vegaDiv = document.createElement("div");
- outputDiv.appendChild(vegaDiv);
- outputDiv.appendChild(olliDiv);
- outputDiv = vegaDiv;
- {%- endif %}
+
const paths = {
"vega": "{{ base_url }}/vega@{{ vega_version }}?noext",
"vega-lib": "{{ base_url }}/vega-lib?noext",
"vega-lite": "{{ base_url }}/vega-lite@{{ vegalite_version }}?noext",
"vega-embed": "{{ base_url }}/vega-embed@{{ vegaembed_version }}?noext",
- {%- if use_olli %}
- "olli": "{{ base_url }}/olli@{{ olli_version }}?noext",
- "olli-adapters": "{{ base_url }}/olli-adapters@{{ olli_adapters_version }}?noext",
- {%- endif %}
};
function maybeLoadScript(lib, version) {
@@ -157,41 +147,21 @@
throw err;
}
- function displayChart(vegaEmbed, olli, olliAdapters) {
+ function displayChart(vegaEmbed) {
vegaEmbed(outputDiv, spec, embedOpt)
.catch(err => showError(`Javascript Error: ${err.message}
This usually means there's a typo in your chart specification. See the javascript console for the full traceback.`));
- {%- if use_olli %}
- olliAdapters.VegaLiteAdapter(spec).then(olliVisSpec => {
- // It's a function if it was loaded via maybeLoadScript below.
- // If it comes from require, it's a module and we access olli.olli
- const olliFunc = typeof olli === 'function' ? olli : olli.olli;
- const olliRender = olliFunc(olliVisSpec);
- olliDiv.append(olliRender);
- });
- {%- endif %}
}
if(typeof define === "function" && define.amd) {
requirejs.config({paths});
let deps = ["vega-embed"];
- {%- if use_olli %}
- deps.push("olli", "olli-adapters");
- {%- endif %}
require(deps, displayChart, err => showError(`Error loading script: ${err.message}`));
} else {
maybeLoadScript("vega", "{{vega_version}}")
.then(() => maybeLoadScript("vega-lite", "{{vegalite_version}}"))
.then(() => maybeLoadScript("vega-embed", "{{vegaembed_version}}"))
- {%- if use_olli %}
- .then(() => maybeLoadScript("olli", "{{olli_version}}"))
- .then(() => maybeLoadScript("olli-adapters", "{{olli_adapters_version}}"))
- {%- endif %}
.catch(showError)
- {%- if use_olli %}
- .then(() => displayChart(vegaEmbed, olli, OlliAdapters));
- {%- else %}
.then(() => displayChart(vegaEmbed));
- {%- endif %}
}
})({{ spec }}, {{ embed_options }});
@@ -239,11 +209,98 @@
)
+HTML_TEMPLATE_OLLI = jinja2.Template(
+ """
+
+
+
+"""
+)
+
+
TEMPLATES: dict[TemplateName, jinja2.Template] = {
"standard": HTML_TEMPLATE,
"universal": HTML_TEMPLATE_UNIVERSAL,
"inline": INLINE_HTML_TEMPLATE,
- "olli": HTML_TEMPLATE_UNIVERSAL,
+ "olli": HTML_TEMPLATE_OLLI,
}
@@ -333,7 +390,6 @@ def spec_to_html(
OLLI_ADAPTERS_VERSION = "2"
render_kwargs["olli_version"] = OLLI_VERSION
render_kwargs["olli_adapters_version"] = OLLI_ADAPTERS_VERSION
- render_kwargs["use_olli"] = True
jinja_template = TEMPLATES.get(template, template) # type: ignore[arg-type]
if not hasattr(jinja_template, "render"):
From 936c0af6f473bea113fbf162c444a8a99a571447 Mon Sep 17 00:00:00 2001
From: Mattijn van Hoek
Date: Thu, 21 Nov 2024 22:57:22 +0100
Subject: [PATCH 12/42] fix ci warning (#3691)
---
doc/user_guide/transform/pivot.rst | 22 +++++++++++-----------
1 file changed, 11 insertions(+), 11 deletions(-)
diff --git a/doc/user_guide/transform/pivot.rst b/doc/user_guide/transform/pivot.rst
index eb280d1e5..80f38030f 100644
--- a/doc/user_guide/transform/pivot.rst
+++ b/doc/user_guide/transform/pivot.rst
@@ -43,18 +43,18 @@ values on multiple lines:
.. altair-plot::
- import altair as alt
- from vega_datasets import data
+ import altair as alt
+ from vega_datasets import data
- source = data.stocks()
- base = alt.Chart(source).encode(x='date:T')
- columns = sorted(source.symbol.unique())
- selection = alt.selection_point(
- fields=['date'], nearest=True, on='pointerover', empty=False, clear='pointerout'
- )
+ source = data.stocks()
+ base = alt.Chart(source).encode(x='date:T')
+ columns = sorted(source.symbol.unique())
+ selection = alt.selection_point(
+ fields=['date'], nearest=True, on='pointerover', empty=False, clear='pointerout'
+ )
- lines = base.mark_line().encode(y='price:Q', color='symbol:N')
- points = lines.mark_point().transform_filter(selection)
+ lines = base.mark_line().encode(y='price:Q', color='symbol:N')
+ points = lines.mark_point().transform_filter(selection)
rule = base.transform_pivot(
'symbol', value='price', groupby=['date']
@@ -63,7 +63,7 @@ values on multiple lines:
tooltip=[alt.Tooltip(c, type='quantitative') for c in columns]
).add_params(selection)
- lines + points + rule
+ lines + points + rule
Transform Options
From c41e29e0bfa9e34d942635e574b2accfd9f2de0d Mon Sep 17 00:00:00 2001
From: Marco Edward Gorelli
Date: Fri, 22 Nov 2024 19:14:03 +0000
Subject: [PATCH 13/42] chore: Use `pass_through` instead of `strict` in
`narwhals.from_native`, use stable.v1 API more (#3693)
* chore: use `pass_through` instead of `strict` in `narwhals.from_native`, use stable.v1 API more
* unrelated(?) ruff fixes
* fixup, increase coverage
* use to_native method
* add flake8-tidy-imports rule
* take check out of loop
---
altair/_magics.py | 4 ++--
altair/utils/_vegafusion_data.py | 8 +++++---
altair/utils/core.py | 12 ++++++------
altair/utils/data.py | 21 ++++++++++-----------
altair/vegalite/v5/api.py | 2 +-
pyproject.toml | 11 ++++++++++-
tests/utils/test_schemapi.py | 2 +-
tests/vegalite/v5/test_api.py | 12 ++++++++++++
tests/vegalite/v5/test_params.py | 2 +-
tools/generate_schema_wrapper.py | 2 +-
10 files changed, 49 insertions(+), 27 deletions(-)
diff --git a/altair/_magics.py b/altair/_magics.py
index 8f40080db..61abf51e2 100644
--- a/altair/_magics.py
+++ b/altair/_magics.py
@@ -7,8 +7,8 @@
from importlib.util import find_spec
from typing import Any
+import narwhals.stable.v1 as nw
from IPython.core import magic_arguments
-from narwhals.dependencies import is_pandas_dataframe as _is_pandas_dataframe
from altair.vegalite import v5 as vegalite_v5
@@ -32,7 +32,7 @@ def _prepare_data(data, data_transformers):
"""Convert input data to data for use within schema."""
if data is None or isinstance(data, dict):
return data
- elif _is_pandas_dataframe(data):
+ elif nw.dependencies.is_pandas_dataframe(data):
if func := data_transformers.get():
data = func(data)
return data
diff --git a/altair/utils/_vegafusion_data.py b/altair/utils/_vegafusion_data.py
index 21ca6833f..401258e8c 100644
--- a/altair/utils/_vegafusion_data.py
+++ b/altair/utils/_vegafusion_data.py
@@ -5,7 +5,7 @@
from typing import TYPE_CHECKING, Any, Callable, Final, TypedDict, Union, overload
from weakref import WeakValueDictionary
-from narwhals.dependencies import is_into_dataframe
+import narwhals.stable.v1 as nw
from packaging.version import Version
from altair.utils._importers import import_vegafusion
@@ -22,7 +22,7 @@
import sys
from collections.abc import MutableMapping
- from narwhals.typing import IntoDataFrame
+ from narwhals.stable.v1.typing import IntoDataFrame
from vegafusion.runtime import ChartState
@@ -54,7 +54,9 @@
def is_supported_by_vf(data: Any) -> TypeIs[DataFrameLike]:
# Test whether VegaFusion supports the data type
# VegaFusion v2 support narwhals-compatible DataFrames
- return isinstance(data, DataFrameLike) or is_into_dataframe(data)
+ return isinstance(data, DataFrameLike) or nw.dependencies.is_into_dataframe(
+ data
+ )
else:
diff --git a/altair/utils/core.py b/altair/utils/core.py
index 669b81a06..c675f98dc 100644
--- a/altair/utils/core.py
+++ b/altair/utils/core.py
@@ -16,8 +16,7 @@
import jsonschema
import narwhals.stable.v1 as nw
-from narwhals.dependencies import get_polars, is_pandas_dataframe
-from narwhals.typing import IntoDataFrame
+from narwhals.stable.v1.typing import IntoDataFrame
from altair.utils.schemapi import SchemaBase, SchemaLike, Undefined
@@ -35,7 +34,7 @@
import typing as t
import pandas as pd
- from narwhals.typing import IntoExpr
+ from narwhals.stable.v1.typing import IntoExpr
from altair.utils._dfi_types import DataFrame as DfiDataFrame
from altair.vegalite.v5.schema._typing import StandardType_T as InferredVegaLiteType
@@ -470,8 +469,9 @@ def sanitize_narwhals_dataframe(
columns: list[IntoExpr] = []
# See https://github.com/vega/altair/issues/1027 for why this is necessary.
local_iso_fmt_string = "%Y-%m-%dT%H:%M:%S"
+ is_polars_dataframe = nw.dependencies.is_polars_dataframe(data.to_native())
for name, dtype in schema.items():
- if dtype == nw.Date and nw.get_native_namespace(data) is get_polars():
+ if dtype == nw.Date and is_polars_dataframe:
# Polars doesn't allow formatting `Date` with time directives.
# The date -> datetime cast is extremely fast compared with `to_string`
columns.append(
@@ -673,8 +673,8 @@ def parse_shorthand( # noqa: C901
if schema[unescaped_field] in {
nw.Object,
nw.Unknown,
- } and is_pandas_dataframe(nw.to_native(data_nw)):
- attrs["type"] = infer_vegalite_type_for_pandas(nw.to_native(column))
+ } and nw.dependencies.is_pandas_dataframe(data_nw.to_native()):
+ attrs["type"] = infer_vegalite_type_for_pandas(column.to_native())
else:
attrs["type"] = infer_vegalite_type_for_narwhals(column)
if isinstance(attrs["type"], tuple):
diff --git a/altair/utils/data.py b/altair/utils/data.py
index bb6868b07..ca48abb79 100644
--- a/altair/utils/data.py
+++ b/altair/utils/data.py
@@ -19,8 +19,7 @@
)
import narwhals.stable.v1 as nw
-from narwhals.dependencies import is_pandas_dataframe as _is_pandas_dataframe
-from narwhals.typing import IntoDataFrame
+from narwhals.stable.v1.typing import IntoDataFrame
from ._importers import import_pyarrow_interchange
from .core import (
@@ -76,7 +75,7 @@ class SupportsGeoInterface(Protocol):
def is_data_type(obj: Any) -> TypeIs[DataType]:
return isinstance(obj, (dict, SupportsGeoInterface)) or isinstance(
- nw.from_native(obj, eager_or_interchange_only=True, strict=False),
+ nw.from_native(obj, eager_or_interchange_only=True, pass_through=True),
nw.DataFrame,
)
@@ -188,7 +187,7 @@ def sample(
if data is None:
return partial(sample, n=n, frac=frac)
check_data_type(data)
- if _is_pandas_dataframe(data):
+ if nw.dependencies.is_pandas_dataframe(data):
return data.sample(n=n, frac=frac)
elif isinstance(data, dict):
if "values" in data:
@@ -210,7 +209,7 @@ def sample(
raise ValueError(msg)
n = int(frac * len(data))
indices = random.sample(range(len(data)), n)
- return nw.to_native(data[indices])
+ return data[indices].to_native()
_FormatType = Literal["csv", "json"]
@@ -319,11 +318,11 @@ def _to_text_kwds(prefix: str, extension: str, filename: str, urlpath: str, /) -
def to_values(data: DataType) -> ToValuesReturnType:
"""Replace a DataFrame by a data model with values."""
check_data_type(data)
- # `strict=False` passes `data` through as-is if it is not a Narwhals object.
- data_native = nw.to_native(data, strict=False)
+ # `pass_through=True` passes `data` through as-is if it is not a Narwhals object.
+ data_native = nw.to_native(data, pass_through=True)
if isinstance(data_native, SupportsGeoInterface):
return {"values": _from_geo_interface(data_native)}
- elif _is_pandas_dataframe(data_native):
+ elif nw.dependencies.is_pandas_dataframe(data_native):
data_native = sanitize_pandas_dataframe(data_native)
return {"values": data_native.to_dict(orient="records")}
elif isinstance(data_native, dict):
@@ -364,7 +363,7 @@ def _from_geo_interface(data: SupportsGeoInterface | Any) -> dict[str, Any]:
- ``typing.TypeGuard``
- ``pd.DataFrame.__getattr__``
"""
- if _is_pandas_dataframe(data):
+ if nw.dependencies.is_pandas_dataframe(data):
data = sanitize_pandas_dataframe(data)
return sanitize_geo_interface(data.__geo_interface__)
@@ -374,7 +373,7 @@ def _data_to_json_string(data: DataType) -> str:
check_data_type(data)
if isinstance(data, SupportsGeoInterface):
return json.dumps(_from_geo_interface(data))
- elif _is_pandas_dataframe(data):
+ elif nw.dependencies.is_pandas_dataframe(data):
data = sanitize_pandas_dataframe(data)
return data.to_json(orient="records", double_precision=15)
elif isinstance(data, dict):
@@ -401,7 +400,7 @@ def _data_to_csv_string(data: DataType) -> str:
f"See https://github.com/vega/altair/issues/3441"
)
raise NotImplementedError(msg)
- elif _is_pandas_dataframe(data):
+ elif nw.dependencies.is_pandas_dataframe(data):
data = sanitize_pandas_dataframe(data)
return data.to_csv(index=False)
elif isinstance(data, dict):
diff --git a/altair/vegalite/v5/api.py b/altair/vegalite/v5/api.py
index e67308004..909ed621e 100644
--- a/altair/vegalite/v5/api.py
+++ b/altair/vegalite/v5/api.py
@@ -280,7 +280,7 @@ def _prepare_data(
# convert dataframes or objects with __geo_interface__ to dict
elif not isinstance(data, dict) and _is_data_type(data):
if func := data_transformers.get():
- data = func(nw.to_native(data, strict=False))
+ data = func(nw.to_native(data, pass_through=True))
# convert string input to a URLData
elif isinstance(data, str):
diff --git a/pyproject.toml b/pyproject.toml
index 4890bfd13..8871a0bf9 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -34,7 +34,7 @@ keywords = [
]
requires-python = ">=3.9"
dynamic = ["version"]
-license-files = { paths = ["LICENSE"] }
+license = {file = "LICENSE"}
classifiers = [
"Development Status :: 5 - Production/Stable",
"Environment :: Console",
@@ -398,6 +398,15 @@ Use `Union[T, None]` instead.
which have a similar but different semantic meaning.
See https://github.com/vega/altair/pull/3449
"""
+"narwhals.dependencies".msg = """
+Import `dependencies` from `narwhals.stable.v1` instead.
+"""
+"narwhals.typing".msg = """
+Import `typing` from `narwhals.stable.v1` instead.
+"""
+"narwhals.dtypes".msg = """
+Import `dtypes` from `narwhals.stable.v1` instead.
+"""
[tool.ruff.lint.per-file-ignores]
# Only enforce type annotation rules on public api
diff --git a/tests/utils/test_schemapi.py b/tests/utils/test_schemapi.py
index 8772f8196..72d01c0fb 100644
--- a/tests/utils/test_schemapi.py
+++ b/tests/utils/test_schemapi.py
@@ -37,7 +37,7 @@
if TYPE_CHECKING:
from collections.abc import Iterable, Sequence
- from narwhals.typing import IntoDataFrame
+ from narwhals.stable.v1.typing import IntoDataFrame
_JSON_SCHEMA_DRAFT_URL = load_schema()["$schema"]
# Make tests inherit from _TestSchema, so that when we test from_dict it won't
diff --git a/tests/vegalite/v5/test_api.py b/tests/vegalite/v5/test_api.py
index 6bb4ac9ef..390a7217f 100644
--- a/tests/vegalite/v5/test_api.py
+++ b/tests/vegalite/v5/test_api.py
@@ -1723,6 +1723,18 @@ def test_polars_with_pandas_nor_pyarrow(monkeypatch: pytest.MonkeyPatch):
assert "numpy" not in sys.modules
+def test_polars_date_32():
+ df = pl.DataFrame(
+ {"a": [1, 2, 3], "b": [date(2020, 1, 1), date(2020, 1, 2), date(2020, 1, 3)]}
+ )
+ result = alt.Chart(df).mark_line().encode(x="a", y="b").to_dict()
+ assert next(iter(result["datasets"].values())) == [
+ {"a": 1, "b": "2020-01-01T00:00:00"},
+ {"a": 2, "b": "2020-01-02T00:00:00"},
+ {"a": 3, "b": "2020-01-03T00:00:00"},
+ ]
+
+
@skip_requires_pyarrow(requires_tzdata=True)
def test_interchange_with_date_32():
# Test that objects which Narwhals only supports at the interchange
diff --git a/tests/vegalite/v5/test_params.py b/tests/vegalite/v5/test_params.py
index d380586a8..dd79e9ce5 100644
--- a/tests/vegalite/v5/test_params.py
+++ b/tests/vegalite/v5/test_params.py
@@ -107,7 +107,7 @@ def test_parameter_naming():
# test automatic naming which has the form such as param_5
prm0, prm1, prm2 = (alt.param() for _ in range(3))
- res = re.match("param_([0-9]+)", prm0.param.name)
+ res = re.match(r"param_([0-9]+)", prm0.param.name)
assert res
diff --git a/tools/generate_schema_wrapper.py b/tools/generate_schema_wrapper.py
index e024c2ca1..e0e7a4d54 100644
--- a/tools/generate_schema_wrapper.py
+++ b/tools/generate_schema_wrapper.py
@@ -751,7 +751,7 @@ def generate_vegalite_schema_wrapper(fp: Path, /) -> ModuleDef[str]:
"from typing import Any, Literal, Union, Protocol, Sequence, List, Iterator, TYPE_CHECKING",
"import pkgutil",
"import json\n",
- "from narwhals.dependencies import is_pandas_dataframe as _is_pandas_dataframe",
+ "import narwhals.stable.v1 as nw\n",
"from altair.utils.schemapi import SchemaBase, Undefined, UndefinedType, _subclasses # noqa: F401\n",
import_type_checking(
"from datetime import date, datetime",
From c6920cc3e23ce79e019a71e4a5eec922aae01aa2 Mon Sep 17 00:00:00 2001
From: Mattijn van Hoek
Date: Sat, 23 Nov 2024 13:41:13 +0100
Subject: [PATCH 14/42] simplify deprecation message (#3695)
---
altair/__init__.py | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
diff --git a/altair/__init__.py b/altair/__init__.py
index cbc2c3b52..279cfec67 100644
--- a/altair/__init__.py
+++ b/altair/__init__.py
@@ -678,8 +678,10 @@ def __getattr__(name: str):
" alt.themes.enable('theme_name')\n\n"
" # Updated\n"
" @alt.theme.register('theme_name', enable=True)\n"
- " def custom_theme() -> alt.theme.ThemeConfig:\n"
- " return {'height': 400, 'width': 700}\n\n"
+ " def custom_theme():\n"
+ " return alt.theme.ThemeConfig(\n"
+ " {'height': 400, 'width': 700}\n"
+ " )\n\n"
"See the updated User Guide for further details:\n"
" https://altair-viz.github.io/user_guide/api.html#theme\n"
" https://altair-viz.github.io/user_guide/customization.html#chart-themes",
From 17aeb2c837717b04563d06e2c326276ef6e7746d Mon Sep 17 00:00:00 2001
From: Dan Redding <125183946+dangotbanned@users.noreply.github.com>
Date: Sat, 23 Nov 2024 15:16:25 +0000
Subject: [PATCH 15/42] fix: Add missing top-level `"config"` keys in
`vega-themes.json` (#3696)
---
altair/vegalite/v5/schema/vega-themes.json | 2220 ++++++++++----------
tests/vegalite/v5/test_theme.py | 86 +-
tools/generate_schema_wrapper.py | 8 +-
3 files changed, 1214 insertions(+), 1100 deletions(-)
diff --git a/altair/vegalite/v5/schema/vega-themes.json b/altair/vegalite/v5/schema/vega-themes.json
index 10ad14d5d..188a86f8b 100644
--- a/altair/vegalite/v5/schema/vega-themes.json
+++ b/altair/vegalite/v5/schema/vega-themes.json
@@ -1,1159 +1,1187 @@
{
"carbong10": {
- "arc": {
- "fill": "#6929c4"
- },
- "area": {
- "fill": "#6929c4"
- },
- "axis": {
- "grid": true,
- "gridColor": "#e0e0e0",
- "labelAngle": 0,
- "labelColor": "#525252",
- "labelFont": "IBM Plex Sans Condensed, system-ui, -apple-system, BlinkMacSystemFont, \".SFNSText-Regular\", sans-serif",
- "labelFontSize": 12,
- "labelFontWeight": 400,
- "titleColor": "#161616",
- "titleFontSize": 12,
- "titleFontWeight": 600
- },
- "axisX": {
- "titlePadding": 10
- },
- "axisY": {
- "titlePadding": 2.5
- },
- "background": "#f4f4f4",
- "circle": {
- "fill": "#6929c4"
- },
- "range": {
- "category": [
- "#6929c4",
- "#1192e8",
- "#005d5d",
- "#9f1853",
- "#fa4d56",
- "#570408",
- "#198038",
- "#002d9c",
- "#ee538b",
- "#b28600",
- "#009d9a",
- "#012749",
- "#8a3800",
- "#a56eff"
- ],
- "diverging": [
- "#750e13",
- "#a2191f",
- "#da1e28",
- "#fa4d56",
- "#ff8389",
- "#ffb3b8",
- "#ffd7d9",
- "#fff1f1",
- "#e5f6ff",
- "#bae6ff",
- "#82cfff",
- "#33b1ff",
- "#1192e8",
- "#0072c3",
- "#00539a",
- "#003a6d"
- ],
- "heatmap": [
- "#f6f2ff",
- "#e8daff",
- "#d4bbff",
- "#be95ff",
- "#a56eff",
- "#8a3ffc",
- "#6929c4",
- "#491d8b",
- "#31135e",
- "#1c0f30"
- ]
- },
- "rect": {
- "fill": "#6929c4"
- },
- "style": {
- "guide-label": {
- "fill": "#525252",
- "font": "IBM Plex Sans,system-ui,-apple-system,BlinkMacSystemFont,\".sfnstext-regular\",sans-serif",
- "fontWeight": 400
+ "config": {
+ "arc": {
+ "fill": "#6929c4"
+ },
+ "area": {
+ "fill": "#6929c4"
+ },
+ "axis": {
+ "grid": true,
+ "gridColor": "#e0e0e0",
+ "labelAngle": 0,
+ "labelColor": "#525252",
+ "labelFont": "IBM Plex Sans Condensed, system-ui, -apple-system, BlinkMacSystemFont, \".SFNSText-Regular\", sans-serif",
+ "labelFontSize": 12,
+ "labelFontWeight": 400,
+ "titleColor": "#161616",
+ "titleFontSize": 12,
+ "titleFontWeight": 600
+ },
+ "axisX": {
+ "titlePadding": 10
+ },
+ "axisY": {
+ "titlePadding": 2.5
},
- "guide-title": {
- "fill": "#525252",
+ "background": "#f4f4f4",
+ "circle": {
+ "fill": "#6929c4"
+ },
+ "range": {
+ "category": [
+ "#6929c4",
+ "#1192e8",
+ "#005d5d",
+ "#9f1853",
+ "#fa4d56",
+ "#570408",
+ "#198038",
+ "#002d9c",
+ "#ee538b",
+ "#b28600",
+ "#009d9a",
+ "#012749",
+ "#8a3800",
+ "#a56eff"
+ ],
+ "diverging": [
+ "#750e13",
+ "#a2191f",
+ "#da1e28",
+ "#fa4d56",
+ "#ff8389",
+ "#ffb3b8",
+ "#ffd7d9",
+ "#fff1f1",
+ "#e5f6ff",
+ "#bae6ff",
+ "#82cfff",
+ "#33b1ff",
+ "#1192e8",
+ "#0072c3",
+ "#00539a",
+ "#003a6d"
+ ],
+ "heatmap": [
+ "#f6f2ff",
+ "#e8daff",
+ "#d4bbff",
+ "#be95ff",
+ "#a56eff",
+ "#8a3ffc",
+ "#6929c4",
+ "#491d8b",
+ "#31135e",
+ "#1c0f30"
+ ]
+ },
+ "rect": {
+ "fill": "#6929c4"
+ },
+ "style": {
+ "guide-label": {
+ "fill": "#525252",
+ "font": "IBM Plex Sans,system-ui,-apple-system,BlinkMacSystemFont,\".sfnstext-regular\",sans-serif",
+ "fontWeight": 400
+ },
+ "guide-title": {
+ "fill": "#525252",
+ "font": "IBM Plex Sans,system-ui,-apple-system,BlinkMacSystemFont,\".sfnstext-regular\",sans-serif",
+ "fontWeight": 400
+ }
+ },
+ "title": {
+ "anchor": "start",
+ "color": "#161616",
+ "dy": -15,
"font": "IBM Plex Sans,system-ui,-apple-system,BlinkMacSystemFont,\".sfnstext-regular\",sans-serif",
- "fontWeight": 400
+ "fontSize": 16,
+ "fontWeight": 600
+ },
+ "view": {
+ "fill": "#ffffff",
+ "stroke": "#ffffff"
}
- },
- "title": {
- "anchor": "start",
- "color": "#161616",
- "dy": -15,
- "font": "IBM Plex Sans,system-ui,-apple-system,BlinkMacSystemFont,\".sfnstext-regular\",sans-serif",
- "fontSize": 16,
- "fontWeight": 600
- },
- "view": {
- "fill": "#ffffff",
- "stroke": "#ffffff"
}
},
"carbong100": {
- "arc": {
- "fill": "#d4bbff"
- },
- "area": {
- "fill": "#d4bbff"
- },
- "axis": {
- "grid": true,
- "gridColor": "#393939",
- "labelAngle": 0,
- "labelColor": "#c6c6c6",
- "labelFont": "IBM Plex Sans Condensed, system-ui, -apple-system, BlinkMacSystemFont, \".SFNSText-Regular\", sans-serif",
- "labelFontSize": 12,
- "labelFontWeight": 400,
- "titleColor": "#f4f4f4",
- "titleFontSize": 12,
- "titleFontWeight": 600
- },
- "axisX": {
- "titlePadding": 10
- },
- "axisY": {
- "titlePadding": 2.5
- },
- "background": "#161616",
- "circle": {
- "fill": "#d4bbff"
- },
- "range": {
- "category": [
- "#8a3ffc",
- "#33b1ff",
- "#007d79",
- "#ff7eb6",
- "#fa4d56",
- "#fff1f1",
- "#6fdc8c",
- "#4589ff",
- "#d12771",
- "#d2a106",
- "#08bdba",
- "#bae6ff",
- "#ba4e00",
- "#d4bbff"
- ],
- "diverging": [
- "#750e13",
- "#a2191f",
- "#da1e28",
- "#fa4d56",
- "#ff8389",
- "#ffb3b8",
- "#ffd7d9",
- "#fff1f1",
- "#e5f6ff",
- "#bae6ff",
- "#82cfff",
- "#33b1ff",
- "#1192e8",
- "#0072c3",
- "#00539a",
- "#003a6d"
- ],
- "heatmap": [
- "#f6f2ff",
- "#e8daff",
- "#d4bbff",
- "#be95ff",
- "#a56eff",
- "#8a3ffc",
- "#6929c4",
- "#491d8b",
- "#31135e",
- "#1c0f30"
- ]
- },
- "rect": {
- "fill": "#d4bbff"
- },
- "style": {
- "guide-label": {
- "fill": "#c6c6c6",
- "font": "IBM Plex Sans,system-ui,-apple-system,BlinkMacSystemFont,\".sfnstext-regular\",sans-serif",
- "fontWeight": 400
+ "config": {
+ "arc": {
+ "fill": "#d4bbff"
+ },
+ "area": {
+ "fill": "#d4bbff"
+ },
+ "axis": {
+ "grid": true,
+ "gridColor": "#393939",
+ "labelAngle": 0,
+ "labelColor": "#c6c6c6",
+ "labelFont": "IBM Plex Sans Condensed, system-ui, -apple-system, BlinkMacSystemFont, \".SFNSText-Regular\", sans-serif",
+ "labelFontSize": 12,
+ "labelFontWeight": 400,
+ "titleColor": "#f4f4f4",
+ "titleFontSize": 12,
+ "titleFontWeight": 600
+ },
+ "axisX": {
+ "titlePadding": 10
+ },
+ "axisY": {
+ "titlePadding": 2.5
+ },
+ "background": "#161616",
+ "circle": {
+ "fill": "#d4bbff"
+ },
+ "range": {
+ "category": [
+ "#8a3ffc",
+ "#33b1ff",
+ "#007d79",
+ "#ff7eb6",
+ "#fa4d56",
+ "#fff1f1",
+ "#6fdc8c",
+ "#4589ff",
+ "#d12771",
+ "#d2a106",
+ "#08bdba",
+ "#bae6ff",
+ "#ba4e00",
+ "#d4bbff"
+ ],
+ "diverging": [
+ "#750e13",
+ "#a2191f",
+ "#da1e28",
+ "#fa4d56",
+ "#ff8389",
+ "#ffb3b8",
+ "#ffd7d9",
+ "#fff1f1",
+ "#e5f6ff",
+ "#bae6ff",
+ "#82cfff",
+ "#33b1ff",
+ "#1192e8",
+ "#0072c3",
+ "#00539a",
+ "#003a6d"
+ ],
+ "heatmap": [
+ "#f6f2ff",
+ "#e8daff",
+ "#d4bbff",
+ "#be95ff",
+ "#a56eff",
+ "#8a3ffc",
+ "#6929c4",
+ "#491d8b",
+ "#31135e",
+ "#1c0f30"
+ ]
+ },
+ "rect": {
+ "fill": "#d4bbff"
+ },
+ "style": {
+ "guide-label": {
+ "fill": "#c6c6c6",
+ "font": "IBM Plex Sans,system-ui,-apple-system,BlinkMacSystemFont,\".sfnstext-regular\",sans-serif",
+ "fontWeight": 400
+ },
+ "guide-title": {
+ "fill": "#c6c6c6",
+ "font": "IBM Plex Sans,system-ui,-apple-system,BlinkMacSystemFont,\".sfnstext-regular\",sans-serif",
+ "fontWeight": 400
+ }
},
- "guide-title": {
- "fill": "#c6c6c6",
+ "title": {
+ "anchor": "start",
+ "color": "#f4f4f4",
+ "dy": -15,
"font": "IBM Plex Sans,system-ui,-apple-system,BlinkMacSystemFont,\".sfnstext-regular\",sans-serif",
- "fontWeight": 400
+ "fontSize": 16,
+ "fontWeight": 600
+ },
+ "view": {
+ "fill": "#161616",
+ "stroke": "#161616"
}
- },
- "title": {
- "anchor": "start",
- "color": "#f4f4f4",
- "dy": -15,
- "font": "IBM Plex Sans,system-ui,-apple-system,BlinkMacSystemFont,\".sfnstext-regular\",sans-serif",
- "fontSize": 16,
- "fontWeight": 600
- },
- "view": {
- "fill": "#161616",
- "stroke": "#161616"
}
},
"carbong90": {
- "arc": {
- "fill": "#d4bbff"
- },
- "area": {
- "fill": "#d4bbff"
- },
- "axis": {
- "grid": true,
- "gridColor": "#525252",
- "labelAngle": 0,
- "labelColor": "#c6c6c6",
- "labelFont": "IBM Plex Sans Condensed, system-ui, -apple-system, BlinkMacSystemFont, \".SFNSText-Regular\", sans-serif",
- "labelFontSize": 12,
- "labelFontWeight": 400,
- "titleColor": "#f4f4f4",
- "titleFontSize": 12,
- "titleFontWeight": 600
- },
- "axisX": {
- "titlePadding": 10
- },
- "axisY": {
- "titlePadding": 2.5
- },
- "background": "#262626",
- "circle": {
- "fill": "#d4bbff"
- },
- "range": {
- "category": [
- "#8a3ffc",
- "#33b1ff",
- "#007d79",
- "#ff7eb6",
- "#fa4d56",
- "#fff1f1",
- "#6fdc8c",
- "#4589ff",
- "#d12771",
- "#d2a106",
- "#08bdba",
- "#bae6ff",
- "#ba4e00",
- "#d4bbff"
- ],
- "diverging": [
- "#750e13",
- "#a2191f",
- "#da1e28",
- "#fa4d56",
- "#ff8389",
- "#ffb3b8",
- "#ffd7d9",
- "#fff1f1",
- "#e5f6ff",
- "#bae6ff",
- "#82cfff",
- "#33b1ff",
- "#1192e8",
- "#0072c3",
- "#00539a",
- "#003a6d"
- ],
- "heatmap": [
- "#f6f2ff",
- "#e8daff",
- "#d4bbff",
- "#be95ff",
- "#a56eff",
- "#8a3ffc",
- "#6929c4",
- "#491d8b",
- "#31135e",
- "#1c0f30"
- ]
- },
- "rect": {
- "fill": "#d4bbff"
- },
- "style": {
- "guide-label": {
- "fill": "#c6c6c6",
- "font": "IBM Plex Sans,system-ui,-apple-system,BlinkMacSystemFont,\".sfnstext-regular\",sans-serif",
- "fontWeight": 400
+ "config": {
+ "arc": {
+ "fill": "#d4bbff"
+ },
+ "area": {
+ "fill": "#d4bbff"
+ },
+ "axis": {
+ "grid": true,
+ "gridColor": "#525252",
+ "labelAngle": 0,
+ "labelColor": "#c6c6c6",
+ "labelFont": "IBM Plex Sans Condensed, system-ui, -apple-system, BlinkMacSystemFont, \".SFNSText-Regular\", sans-serif",
+ "labelFontSize": 12,
+ "labelFontWeight": 400,
+ "titleColor": "#f4f4f4",
+ "titleFontSize": 12,
+ "titleFontWeight": 600
+ },
+ "axisX": {
+ "titlePadding": 10
+ },
+ "axisY": {
+ "titlePadding": 2.5
+ },
+ "background": "#262626",
+ "circle": {
+ "fill": "#d4bbff"
+ },
+ "range": {
+ "category": [
+ "#8a3ffc",
+ "#33b1ff",
+ "#007d79",
+ "#ff7eb6",
+ "#fa4d56",
+ "#fff1f1",
+ "#6fdc8c",
+ "#4589ff",
+ "#d12771",
+ "#d2a106",
+ "#08bdba",
+ "#bae6ff",
+ "#ba4e00",
+ "#d4bbff"
+ ],
+ "diverging": [
+ "#750e13",
+ "#a2191f",
+ "#da1e28",
+ "#fa4d56",
+ "#ff8389",
+ "#ffb3b8",
+ "#ffd7d9",
+ "#fff1f1",
+ "#e5f6ff",
+ "#bae6ff",
+ "#82cfff",
+ "#33b1ff",
+ "#1192e8",
+ "#0072c3",
+ "#00539a",
+ "#003a6d"
+ ],
+ "heatmap": [
+ "#f6f2ff",
+ "#e8daff",
+ "#d4bbff",
+ "#be95ff",
+ "#a56eff",
+ "#8a3ffc",
+ "#6929c4",
+ "#491d8b",
+ "#31135e",
+ "#1c0f30"
+ ]
+ },
+ "rect": {
+ "fill": "#d4bbff"
},
- "guide-title": {
- "fill": "#c6c6c6",
+ "style": {
+ "guide-label": {
+ "fill": "#c6c6c6",
+ "font": "IBM Plex Sans,system-ui,-apple-system,BlinkMacSystemFont,\".sfnstext-regular\",sans-serif",
+ "fontWeight": 400
+ },
+ "guide-title": {
+ "fill": "#c6c6c6",
+ "font": "IBM Plex Sans,system-ui,-apple-system,BlinkMacSystemFont,\".sfnstext-regular\",sans-serif",
+ "fontWeight": 400
+ }
+ },
+ "title": {
+ "anchor": "start",
+ "color": "#f4f4f4",
+ "dy": -15,
"font": "IBM Plex Sans,system-ui,-apple-system,BlinkMacSystemFont,\".sfnstext-regular\",sans-serif",
- "fontWeight": 400
+ "fontSize": 16,
+ "fontWeight": 600
+ },
+ "view": {
+ "fill": "#161616",
+ "stroke": "#161616"
}
- },
- "title": {
- "anchor": "start",
- "color": "#f4f4f4",
- "dy": -15,
- "font": "IBM Plex Sans,system-ui,-apple-system,BlinkMacSystemFont,\".sfnstext-regular\",sans-serif",
- "fontSize": 16,
- "fontWeight": 600
- },
- "view": {
- "fill": "#161616",
- "stroke": "#161616"
}
},
"carbonwhite": {
- "arc": {
- "fill": "#6929c4"
- },
- "area": {
- "fill": "#6929c4"
- },
- "axis": {
- "grid": true,
- "gridColor": "#e0e0e0",
- "labelAngle": 0,
- "labelColor": "#525252",
- "labelFont": "IBM Plex Sans Condensed, system-ui, -apple-system, BlinkMacSystemFont, \".SFNSText-Regular\", sans-serif",
- "labelFontSize": 12,
- "labelFontWeight": 400,
- "titleColor": "#161616",
- "titleFontSize": 12,
- "titleFontWeight": 600
- },
- "axisX": {
- "titlePadding": 10
- },
- "axisY": {
- "titlePadding": 2.5
- },
- "background": "#ffffff",
- "circle": {
- "fill": "#6929c4"
- },
- "range": {
- "category": [
- "#6929c4",
- "#1192e8",
- "#005d5d",
- "#9f1853",
- "#fa4d56",
- "#570408",
- "#198038",
- "#002d9c",
- "#ee538b",
- "#b28600",
- "#009d9a",
- "#012749",
- "#8a3800",
- "#a56eff"
- ],
- "diverging": [
- "#750e13",
- "#a2191f",
- "#da1e28",
- "#fa4d56",
- "#ff8389",
- "#ffb3b8",
- "#ffd7d9",
- "#fff1f1",
- "#e5f6ff",
- "#bae6ff",
- "#82cfff",
- "#33b1ff",
- "#1192e8",
- "#0072c3",
- "#00539a",
- "#003a6d"
- ],
- "heatmap": [
- "#f6f2ff",
- "#e8daff",
- "#d4bbff",
- "#be95ff",
- "#a56eff",
- "#8a3ffc",
- "#6929c4",
- "#491d8b",
- "#31135e",
- "#1c0f30"
- ]
- },
- "rect": {
- "fill": "#6929c4"
- },
- "style": {
- "guide-label": {
- "fill": "#525252",
- "font": "IBM Plex Sans,system-ui,-apple-system,BlinkMacSystemFont,\".sfnstext-regular\",sans-serif",
- "fontWeight": 400
+ "config": {
+ "arc": {
+ "fill": "#6929c4"
+ },
+ "area": {
+ "fill": "#6929c4"
+ },
+ "axis": {
+ "grid": true,
+ "gridColor": "#e0e0e0",
+ "labelAngle": 0,
+ "labelColor": "#525252",
+ "labelFont": "IBM Plex Sans Condensed, system-ui, -apple-system, BlinkMacSystemFont, \".SFNSText-Regular\", sans-serif",
+ "labelFontSize": 12,
+ "labelFontWeight": 400,
+ "titleColor": "#161616",
+ "titleFontSize": 12,
+ "titleFontWeight": 600
+ },
+ "axisX": {
+ "titlePadding": 10
+ },
+ "axisY": {
+ "titlePadding": 2.5
+ },
+ "background": "#ffffff",
+ "circle": {
+ "fill": "#6929c4"
+ },
+ "range": {
+ "category": [
+ "#6929c4",
+ "#1192e8",
+ "#005d5d",
+ "#9f1853",
+ "#fa4d56",
+ "#570408",
+ "#198038",
+ "#002d9c",
+ "#ee538b",
+ "#b28600",
+ "#009d9a",
+ "#012749",
+ "#8a3800",
+ "#a56eff"
+ ],
+ "diverging": [
+ "#750e13",
+ "#a2191f",
+ "#da1e28",
+ "#fa4d56",
+ "#ff8389",
+ "#ffb3b8",
+ "#ffd7d9",
+ "#fff1f1",
+ "#e5f6ff",
+ "#bae6ff",
+ "#82cfff",
+ "#33b1ff",
+ "#1192e8",
+ "#0072c3",
+ "#00539a",
+ "#003a6d"
+ ],
+ "heatmap": [
+ "#f6f2ff",
+ "#e8daff",
+ "#d4bbff",
+ "#be95ff",
+ "#a56eff",
+ "#8a3ffc",
+ "#6929c4",
+ "#491d8b",
+ "#31135e",
+ "#1c0f30"
+ ]
},
- "guide-title": {
- "fill": "#525252",
+ "rect": {
+ "fill": "#6929c4"
+ },
+ "style": {
+ "guide-label": {
+ "fill": "#525252",
+ "font": "IBM Plex Sans,system-ui,-apple-system,BlinkMacSystemFont,\".sfnstext-regular\",sans-serif",
+ "fontWeight": 400
+ },
+ "guide-title": {
+ "fill": "#525252",
+ "font": "IBM Plex Sans,system-ui,-apple-system,BlinkMacSystemFont,\".sfnstext-regular\",sans-serif",
+ "fontWeight": 400
+ }
+ },
+ "title": {
+ "anchor": "start",
+ "color": "#161616",
+ "dy": -15,
"font": "IBM Plex Sans,system-ui,-apple-system,BlinkMacSystemFont,\".sfnstext-regular\",sans-serif",
- "fontWeight": 400
+ "fontSize": 16,
+ "fontWeight": 600
+ },
+ "view": {
+ "fill": "#ffffff",
+ "stroke": "#ffffff"
}
- },
- "title": {
- "anchor": "start",
- "color": "#161616",
- "dy": -15,
- "font": "IBM Plex Sans,system-ui,-apple-system,BlinkMacSystemFont,\".sfnstext-regular\",sans-serif",
- "fontSize": 16,
- "fontWeight": 600
- },
- "view": {
- "fill": "#ffffff",
- "stroke": "#ffffff"
}
},
"dark": {
- "axis": {
- "domainColor": "#fff",
- "gridColor": "#888",
- "tickColor": "#fff"
- },
- "background": "#333",
- "style": {
- "guide-label": {
- "fill": "#fff"
- },
- "guide-title": {
- "fill": "#fff"
+ "config": {
+ "axis": {
+ "domainColor": "#fff",
+ "gridColor": "#888",
+ "tickColor": "#fff"
+ },
+ "background": "#333",
+ "style": {
+ "guide-label": {
+ "fill": "#fff"
+ },
+ "guide-title": {
+ "fill": "#fff"
+ }
+ },
+ "title": {
+ "color": "#fff",
+ "subtitleColor": "#fff"
+ },
+ "view": {
+ "stroke": "#888"
}
- },
- "title": {
- "color": "#fff",
- "subtitleColor": "#fff"
- },
- "view": {
- "stroke": "#888"
}
},
"excel": {
- "arc": {
- "fill": "#4572a7"
- },
- "area": {
- "fill": "#4572a7"
- },
- "axis": {
- "bandPosition": 0.5,
- "grid": true,
- "gridColor": "#000000",
- "gridOpacity": 1,
- "gridWidth": 0.5,
- "labelPadding": 10,
- "tickSize": 5,
- "tickWidth": 0.5
- },
- "axisBand": {
- "grid": false,
- "tickExtra": true
- },
- "background": "#fff",
- "legend": {
- "labelBaseline": "middle",
- "labelFontSize": 11,
- "symbolSize": 50,
- "symbolType": "square"
- },
- "line": {
- "stroke": "#4572a7",
- "strokeWidth": 2
- },
- "range": {
- "category": [
- "#4572a7",
- "#aa4643",
- "#8aa453",
- "#71598e",
- "#4598ae",
- "#d98445",
- "#94aace",
- "#d09393",
- "#b9cc98",
- "#a99cbc"
- ]
- },
- "rect": {
- "fill": "#4572a7"
+ "config": {
+ "arc": {
+ "fill": "#4572a7"
+ },
+ "area": {
+ "fill": "#4572a7"
+ },
+ "axis": {
+ "bandPosition": 0.5,
+ "grid": true,
+ "gridColor": "#000000",
+ "gridOpacity": 1,
+ "gridWidth": 0.5,
+ "labelPadding": 10,
+ "tickSize": 5,
+ "tickWidth": 0.5
+ },
+ "axisBand": {
+ "grid": false,
+ "tickExtra": true
+ },
+ "background": "#fff",
+ "legend": {
+ "labelBaseline": "middle",
+ "labelFontSize": 11,
+ "symbolSize": 50,
+ "symbolType": "square"
+ },
+ "line": {
+ "stroke": "#4572a7",
+ "strokeWidth": 2
+ },
+ "range": {
+ "category": [
+ "#4572a7",
+ "#aa4643",
+ "#8aa453",
+ "#71598e",
+ "#4598ae",
+ "#d98445",
+ "#94aace",
+ "#d09393",
+ "#b9cc98",
+ "#a99cbc"
+ ]
+ },
+ "rect": {
+ "fill": "#4572a7"
+ }
}
},
"fivethirtyeight": {
- "arc": {
- "fill": "#30a2da"
- },
- "area": {
- "fill": "#30a2da"
- },
- "axis": {
- "domainColor": "#cbcbcb",
- "grid": true,
- "gridColor": "#cbcbcb",
- "gridWidth": 1,
- "labelColor": "#999",
- "labelFontSize": 10,
- "labelPadding": 4,
- "tickColor": "#cbcbcb",
- "tickSize": 10,
- "titleColor": "#333",
- "titleFontSize": 14,
- "titlePadding": 10
- },
- "axisBand": {
- "grid": false
- },
- "background": "#f0f0f0",
- "bar": {
- "binSpacing": 2,
- "fill": "#30a2da",
- "stroke": null
- },
- "legend": {
- "labelColor": "#333",
- "labelFontSize": 11,
- "padding": 1,
- "symbolSize": 30,
- "symbolType": "square",
- "titleColor": "#333",
- "titleFontSize": 14,
- "titlePadding": 10
- },
- "line": {
- "stroke": "#30a2da",
- "strokeWidth": 2
- },
- "point": {
- "filled": true,
- "shape": "circle"
- },
- "range": {
- "category": [
- "#30a2da",
- "#fc4f30",
- "#e5ae38",
- "#6d904f",
- "#8b8b8b",
- "#b96db8",
- "#ff9e27",
- "#56cc60",
- "#52d2ca",
- "#52689e",
- "#545454",
- "#9fe4f8"
- ],
- "diverging": [
- "#cc0020",
- "#e77866",
- "#f6e7e1",
- "#d6e8ed",
- "#91bfd9",
- "#1d78b5"
- ],
- "heatmap": [
- "#d6e8ed",
- "#cee0e5",
- "#91bfd9",
- "#549cc6",
- "#1d78b5"
- ]
- },
- "rect": {
- "fill": "#30a2da"
- },
- "title": {
- "anchor": "start",
- "fontSize": 24,
- "fontWeight": 600,
- "offset": 20
+ "config": {
+ "arc": {
+ "fill": "#30a2da"
+ },
+ "area": {
+ "fill": "#30a2da"
+ },
+ "axis": {
+ "domainColor": "#cbcbcb",
+ "grid": true,
+ "gridColor": "#cbcbcb",
+ "gridWidth": 1,
+ "labelColor": "#999",
+ "labelFontSize": 10,
+ "labelPadding": 4,
+ "tickColor": "#cbcbcb",
+ "tickSize": 10,
+ "titleColor": "#333",
+ "titleFontSize": 14,
+ "titlePadding": 10
+ },
+ "axisBand": {
+ "grid": false
+ },
+ "background": "#f0f0f0",
+ "bar": {
+ "binSpacing": 2,
+ "fill": "#30a2da",
+ "stroke": null
+ },
+ "legend": {
+ "labelColor": "#333",
+ "labelFontSize": 11,
+ "padding": 1,
+ "symbolSize": 30,
+ "symbolType": "square",
+ "titleColor": "#333",
+ "titleFontSize": 14,
+ "titlePadding": 10
+ },
+ "line": {
+ "stroke": "#30a2da",
+ "strokeWidth": 2
+ },
+ "point": {
+ "filled": true,
+ "shape": "circle"
+ },
+ "range": {
+ "category": [
+ "#30a2da",
+ "#fc4f30",
+ "#e5ae38",
+ "#6d904f",
+ "#8b8b8b",
+ "#b96db8",
+ "#ff9e27",
+ "#56cc60",
+ "#52d2ca",
+ "#52689e",
+ "#545454",
+ "#9fe4f8"
+ ],
+ "diverging": [
+ "#cc0020",
+ "#e77866",
+ "#f6e7e1",
+ "#d6e8ed",
+ "#91bfd9",
+ "#1d78b5"
+ ],
+ "heatmap": [
+ "#d6e8ed",
+ "#cee0e5",
+ "#91bfd9",
+ "#549cc6",
+ "#1d78b5"
+ ]
+ },
+ "rect": {
+ "fill": "#30a2da"
+ },
+ "title": {
+ "anchor": "start",
+ "fontSize": 24,
+ "fontWeight": 600,
+ "offset": 20
+ }
}
},
"ggplot2": {
- "arc": {
- "fill": "#000"
- },
- "area": {
- "fill": "#000"
- },
- "axis": {
- "domain": false,
- "grid": true,
- "gridColor": "#FFFFFF",
- "gridOpacity": 1,
- "labelColor": "#7F7F7F",
- "labelPadding": 4,
- "tickColor": "#7F7F7F",
- "tickSize": 5.67,
- "titleFontSize": 16,
- "titleFontWeight": "normal"
- },
- "legend": {
- "labelBaseline": "middle",
- "labelFontSize": 11,
- "symbolSize": 40
- },
- "line": {
- "stroke": "#000"
- },
- "range": {
- "category": [
- "#000000",
- "#7F7F7F",
- "#1A1A1A",
- "#999999",
- "#333333",
- "#B0B0B0",
- "#4D4D4D",
- "#C9C9C9",
- "#666666",
- "#DCDCDC"
- ]
- },
- "rect": {
- "fill": "#000"
+ "config": {
+ "arc": {
+ "fill": "#000"
+ },
+ "area": {
+ "fill": "#000"
+ },
+ "axis": {
+ "domain": false,
+ "grid": true,
+ "gridColor": "#FFFFFF",
+ "gridOpacity": 1,
+ "labelColor": "#7F7F7F",
+ "labelPadding": 4,
+ "tickColor": "#7F7F7F",
+ "tickSize": 5.67,
+ "titleFontSize": 16,
+ "titleFontWeight": "normal"
+ },
+ "legend": {
+ "labelBaseline": "middle",
+ "labelFontSize": 11,
+ "symbolSize": 40
+ },
+ "line": {
+ "stroke": "#000"
+ },
+ "range": {
+ "category": [
+ "#000000",
+ "#7F7F7F",
+ "#1A1A1A",
+ "#999999",
+ "#333333",
+ "#B0B0B0",
+ "#4D4D4D",
+ "#C9C9C9",
+ "#666666",
+ "#DCDCDC"
+ ]
+ },
+ "rect": {
+ "fill": "#000"
+ }
}
},
"googlecharts": {
- "arc": {
- "fill": "#3366CC"
- },
- "area": {
- "fill": "#3366CC"
- },
- "axis": {
- "domain": false,
- "grid": true,
- "gridColor": "#ccc",
- "tickColor": "#ccc"
- },
- "background": "#fff",
- "circle": {
- "fill": "#3366CC"
- },
- "padding": {
- "bottom": 10,
- "left": 10,
- "right": 10,
- "top": 10
- },
- "range": {
- "category": [
- "#4285F4",
- "#DB4437",
- "#F4B400",
- "#0F9D58",
- "#AB47BC",
- "#00ACC1",
- "#FF7043",
- "#9E9D24",
- "#5C6BC0",
- "#F06292",
- "#00796B",
- "#C2185B"
- ],
- "heatmap": [
- "#c6dafc",
- "#5e97f6",
- "#2a56c6"
- ]
- },
- "rect": {
- "fill": "#3366CC"
- },
- "style": {
- "group-title": {
- "font": "Arial, sans-serif",
- "fontSize": 12
+ "config": {
+ "arc": {
+ "fill": "#3366CC"
},
- "guide-label": {
- "font": "Arial, sans-serif",
- "fontSize": 12
+ "area": {
+ "fill": "#3366CC"
+ },
+ "axis": {
+ "domain": false,
+ "grid": true,
+ "gridColor": "#ccc",
+ "tickColor": "#ccc"
+ },
+ "background": "#fff",
+ "circle": {
+ "fill": "#3366CC"
+ },
+ "padding": {
+ "bottom": 10,
+ "left": 10,
+ "right": 10,
+ "top": 10
},
- "guide-title": {
+ "range": {
+ "category": [
+ "#4285F4",
+ "#DB4437",
+ "#F4B400",
+ "#0F9D58",
+ "#AB47BC",
+ "#00ACC1",
+ "#FF7043",
+ "#9E9D24",
+ "#5C6BC0",
+ "#F06292",
+ "#00796B",
+ "#C2185B"
+ ],
+ "heatmap": [
+ "#c6dafc",
+ "#5e97f6",
+ "#2a56c6"
+ ]
+ },
+ "rect": {
+ "fill": "#3366CC"
+ },
+ "style": {
+ "group-title": {
+ "font": "Arial, sans-serif",
+ "fontSize": 12
+ },
+ "guide-label": {
+ "font": "Arial, sans-serif",
+ "fontSize": 12
+ },
+ "guide-title": {
+ "font": "Arial, sans-serif",
+ "fontSize": 12
+ }
+ },
+ "title": {
+ "anchor": "start",
+ "dy": -3,
"font": "Arial, sans-serif",
- "fontSize": 12
+ "fontSize": 14,
+ "fontWeight": "bold"
}
- },
- "title": {
- "anchor": "start",
- "dy": -3,
- "font": "Arial, sans-serif",
- "fontSize": 14,
- "fontWeight": "bold"
}
},
"latimes": {
- "arc": {
- "fill": "#82c6df"
- },
- "area": {
- "fill": "#82c6df"
- },
- "axis": {
- "labelFont": "Benton Gothic, sans-serif",
- "labelFontSize": 11.5,
- "labelFontWeight": "normal",
- "titleFont": "Benton Gothic Bold, sans-serif",
- "titleFontSize": 13,
- "titleFontWeight": "normal"
- },
- "axisX": {
- "labelAngle": 0,
- "labelPadding": 4,
- "tickSize": 3
- },
- "axisY": {
- "labelBaseline": "middle",
- "maxExtent": 45,
- "minExtent": 45,
- "tickSize": 2,
- "titleAlign": "left",
- "titleAngle": 0,
- "titleX": -45,
- "titleY": -11
- },
- "background": "#ffffff",
- "legend": {
- "labelFont": "Benton Gothic, sans-serif",
- "labelFontSize": 11.5,
- "symbolType": "square",
- "titleFont": "Benton Gothic Bold, sans-serif",
- "titleFontSize": 13,
- "titleFontWeight": "normal"
- },
- "line": {
- "stroke": "#82c6df",
- "strokeWidth": 2
- },
- "range": {
- "category": [
- "#ec8431",
- "#829eb1",
- "#c89d29",
- "#3580b1",
- "#adc839",
- "#ab7fb4"
- ],
- "diverging": [
- "#e68a4f",
- "#f4bb6a",
- "#f9e39c",
- "#dadfe2",
- "#a6b7c6",
- "#849eae"
- ],
- "heatmap": [
- "#fbf2c7",
- "#f9e39c",
- "#f8d36e",
- "#f4bb6a",
- "#e68a4f",
- "#d15a40",
- "#ab4232"
- ],
- "ordinal": [
- "#fbf2c7",
- "#f9e39c",
- "#f8d36e",
- "#f4bb6a",
- "#e68a4f",
- "#d15a40",
- "#ab4232"
- ],
- "ramp": [
- "#fbf2c7",
- "#f9e39c",
- "#f8d36e",
- "#f4bb6a",
- "#e68a4f",
- "#d15a40",
- "#ab4232"
- ]
- },
- "rect": {
- "fill": "#82c6df"
- },
- "title": {
- "anchor": "start",
- "color": "#000000",
- "font": "Benton Gothic Bold, sans-serif",
- "fontSize": 22,
- "fontWeight": "normal"
+ "config": {
+ "arc": {
+ "fill": "#82c6df"
+ },
+ "area": {
+ "fill": "#82c6df"
+ },
+ "axis": {
+ "labelFont": "Benton Gothic, sans-serif",
+ "labelFontSize": 11.5,
+ "labelFontWeight": "normal",
+ "titleFont": "Benton Gothic Bold, sans-serif",
+ "titleFontSize": 13,
+ "titleFontWeight": "normal"
+ },
+ "axisX": {
+ "labelAngle": 0,
+ "labelPadding": 4,
+ "tickSize": 3
+ },
+ "axisY": {
+ "labelBaseline": "middle",
+ "maxExtent": 45,
+ "minExtent": 45,
+ "tickSize": 2,
+ "titleAlign": "left",
+ "titleAngle": 0,
+ "titleX": -45,
+ "titleY": -11
+ },
+ "background": "#ffffff",
+ "legend": {
+ "labelFont": "Benton Gothic, sans-serif",
+ "labelFontSize": 11.5,
+ "symbolType": "square",
+ "titleFont": "Benton Gothic Bold, sans-serif",
+ "titleFontSize": 13,
+ "titleFontWeight": "normal"
+ },
+ "line": {
+ "stroke": "#82c6df",
+ "strokeWidth": 2
+ },
+ "range": {
+ "category": [
+ "#ec8431",
+ "#829eb1",
+ "#c89d29",
+ "#3580b1",
+ "#adc839",
+ "#ab7fb4"
+ ],
+ "diverging": [
+ "#e68a4f",
+ "#f4bb6a",
+ "#f9e39c",
+ "#dadfe2",
+ "#a6b7c6",
+ "#849eae"
+ ],
+ "heatmap": [
+ "#fbf2c7",
+ "#f9e39c",
+ "#f8d36e",
+ "#f4bb6a",
+ "#e68a4f",
+ "#d15a40",
+ "#ab4232"
+ ],
+ "ordinal": [
+ "#fbf2c7",
+ "#f9e39c",
+ "#f8d36e",
+ "#f4bb6a",
+ "#e68a4f",
+ "#d15a40",
+ "#ab4232"
+ ],
+ "ramp": [
+ "#fbf2c7",
+ "#f9e39c",
+ "#f8d36e",
+ "#f4bb6a",
+ "#e68a4f",
+ "#d15a40",
+ "#ab4232"
+ ]
+ },
+ "rect": {
+ "fill": "#82c6df"
+ },
+ "title": {
+ "anchor": "start",
+ "color": "#000000",
+ "font": "Benton Gothic Bold, sans-serif",
+ "fontSize": 22,
+ "fontWeight": "normal"
+ }
}
},
"powerbi": {
- "arc": {
- "fill": "#118DFF"
- },
- "area": {
- "fill": "#118DFF",
- "line": true,
- "opacity": 0.6
- },
- "axis": {
- "domain": false,
- "grid": false,
- "labelColor": "#605E5C",
- "labelFontSize": 12,
- "ticks": false,
- "titleColor": "#252423",
- "titleFont": "wf_standard-font, helvetica, arial, sans-serif",
- "titleFontSize": 16,
- "titleFontWeight": "normal"
- },
- "axisBand": {
- "tickExtra": true
- },
- "axisQuantitative": {
- "grid": true,
- "gridColor": "#C8C6C4",
- "gridDash": [
- 1,
- 5
- ],
- "labelFlush": false,
- "tickCount": 3
- },
- "axisX": {
- "labelPadding": 5
- },
- "axisY": {
- "labelPadding": 10
- },
- "background": "transparent",
- "bar": {
- "fill": "#118DFF"
- },
- "font": "Segoe UI",
- "header": {
- "labelColor": "#605E5C",
- "labelFont": "Segoe UI",
- "labelFontSize": 13.333333333333332,
- "titleColor": "#252423",
- "titleFont": "wf_standard-font, helvetica, arial, sans-serif",
- "titleFontSize": 16
- },
- "legend": {
- "labelColor": "#605E5C",
- "labelFont": "Segoe UI",
- "labelFontSize": 13.333333333333332,
- "symbolSize": 75,
- "symbolType": "circle",
- "titleColor": "#605E5C",
- "titleFont": "Segoe UI",
- "titleFontWeight": "bold"
- },
- "line": {
- "stroke": "#118DFF",
- "strokeCap": "round",
- "strokeJoin": "round",
- "strokeWidth": 3
- },
- "point": {
- "fill": "#118DFF",
- "filled": true,
- "size": 75
- },
- "range": {
- "category": [
- "#118DFF",
- "#12239E",
- "#E66C37",
- "#6B007B",
- "#E044A7",
- "#744EC2",
- "#D9B300",
- "#D64550"
- ],
- "diverging": [
- "#DEEFFF",
- "#118DFF"
- ],
- "heatmap": [
- "#DEEFFF",
- "#118DFF"
- ],
- "ordinal": [
- "#DEEFFF",
- "#c7e4ff",
- "#b0d9ff",
- "#9aceff",
- "#83c3ff",
- "#6cb9ff",
- "#55aeff",
- "#3fa3ff",
- "#2898ff",
- "#118DFF"
- ]
- },
- "rect": {
- "fill": "#118DFF"
- },
- "text": {
- "fill": "#605E5C",
+ "config": {
+ "arc": {
+ "fill": "#118DFF"
+ },
+ "area": {
+ "fill": "#118DFF",
+ "line": true,
+ "opacity": 0.6
+ },
+ "axis": {
+ "domain": false,
+ "grid": false,
+ "labelColor": "#605E5C",
+ "labelFontSize": 12,
+ "ticks": false,
+ "titleColor": "#252423",
+ "titleFont": "wf_standard-font, helvetica, arial, sans-serif",
+ "titleFontSize": 16,
+ "titleFontWeight": "normal"
+ },
+ "axisBand": {
+ "tickExtra": true
+ },
+ "axisQuantitative": {
+ "grid": true,
+ "gridColor": "#C8C6C4",
+ "gridDash": [
+ 1,
+ 5
+ ],
+ "labelFlush": false,
+ "tickCount": 3
+ },
+ "axisX": {
+ "labelPadding": 5
+ },
+ "axisY": {
+ "labelPadding": 10
+ },
+ "background": "transparent",
+ "bar": {
+ "fill": "#118DFF"
+ },
"font": "Segoe UI",
- "fontSize": 12
- },
- "view": {
- "stroke": "transparent"
+ "header": {
+ "labelColor": "#605E5C",
+ "labelFont": "Segoe UI",
+ "labelFontSize": 13.333333333333332,
+ "titleColor": "#252423",
+ "titleFont": "wf_standard-font, helvetica, arial, sans-serif",
+ "titleFontSize": 16
+ },
+ "legend": {
+ "labelColor": "#605E5C",
+ "labelFont": "Segoe UI",
+ "labelFontSize": 13.333333333333332,
+ "symbolSize": 75,
+ "symbolType": "circle",
+ "titleColor": "#605E5C",
+ "titleFont": "Segoe UI",
+ "titleFontWeight": "bold"
+ },
+ "line": {
+ "stroke": "#118DFF",
+ "strokeCap": "round",
+ "strokeJoin": "round",
+ "strokeWidth": 3
+ },
+ "point": {
+ "fill": "#118DFF",
+ "filled": true,
+ "size": 75
+ },
+ "range": {
+ "category": [
+ "#118DFF",
+ "#12239E",
+ "#E66C37",
+ "#6B007B",
+ "#E044A7",
+ "#744EC2",
+ "#D9B300",
+ "#D64550"
+ ],
+ "diverging": [
+ "#DEEFFF",
+ "#118DFF"
+ ],
+ "heatmap": [
+ "#DEEFFF",
+ "#118DFF"
+ ],
+ "ordinal": [
+ "#DEEFFF",
+ "#c7e4ff",
+ "#b0d9ff",
+ "#9aceff",
+ "#83c3ff",
+ "#6cb9ff",
+ "#55aeff",
+ "#3fa3ff",
+ "#2898ff",
+ "#118DFF"
+ ]
+ },
+ "rect": {
+ "fill": "#118DFF"
+ },
+ "text": {
+ "fill": "#605E5C",
+ "font": "Segoe UI",
+ "fontSize": 12
+ },
+ "view": {
+ "stroke": "transparent"
+ }
}
},
"quartz": {
- "arc": {
- "fill": "#ab5787"
- },
- "area": {
- "fill": "#ab5787"
- },
- "axis": {
- "domainColor": "#979797",
- "domainWidth": 0.5,
- "gridWidth": 0.2,
- "labelColor": "#979797",
- "tickColor": "#979797",
- "tickWidth": 0.2,
- "titleColor": "#979797"
- },
- "axisBand": {
- "grid": false
- },
- "axisX": {
- "grid": true,
- "tickSize": 10
- },
- "axisY": {
- "domain": false,
- "grid": true,
- "tickSize": 0
- },
- "background": "#f9f9f9",
- "legend": {
- "labelFontSize": 11,
- "padding": 1,
- "symbolSize": 30,
- "symbolType": "square"
- },
- "line": {
- "stroke": "#ab5787"
- },
- "range": {
- "category": [
- "#ab5787",
- "#51b2e5",
- "#703c5c",
- "#168dd9",
- "#d190b6",
- "#00609f",
- "#d365ba",
- "#154866",
- "#666666",
- "#c4c4c4"
- ]
- },
- "rect": {
- "fill": "#ab5787"
+ "config": {
+ "arc": {
+ "fill": "#ab5787"
+ },
+ "area": {
+ "fill": "#ab5787"
+ },
+ "axis": {
+ "domainColor": "#979797",
+ "domainWidth": 0.5,
+ "gridWidth": 0.2,
+ "labelColor": "#979797",
+ "tickColor": "#979797",
+ "tickWidth": 0.2,
+ "titleColor": "#979797"
+ },
+ "axisBand": {
+ "grid": false
+ },
+ "axisX": {
+ "grid": true,
+ "tickSize": 10
+ },
+ "axisY": {
+ "domain": false,
+ "grid": true,
+ "tickSize": 0
+ },
+ "background": "#f9f9f9",
+ "legend": {
+ "labelFontSize": 11,
+ "padding": 1,
+ "symbolSize": 30,
+ "symbolType": "square"
+ },
+ "line": {
+ "stroke": "#ab5787"
+ },
+ "range": {
+ "category": [
+ "#ab5787",
+ "#51b2e5",
+ "#703c5c",
+ "#168dd9",
+ "#d190b6",
+ "#00609f",
+ "#d365ba",
+ "#154866",
+ "#666666",
+ "#c4c4c4"
+ ]
+ },
+ "rect": {
+ "fill": "#ab5787"
+ }
}
},
"urbaninstitute": {
- "arc": {
- "fill": "#1696d2"
- },
- "area": {
- "fill": "#1696d2"
- },
- "axisX": {
- "domain": true,
- "domainColor": "#000000",
- "domainWidth": 1,
- "grid": false,
- "labelAngle": 0,
- "labelFont": "Lato",
- "labelFontSize": 12,
- "tickColor": "#000000",
- "tickSize": 5,
- "titleFont": "Lato",
- "titleFontSize": 12,
- "titlePadding": 10
- },
- "axisY": {
- "domain": false,
- "domainWidth": 1,
- "grid": true,
- "gridColor": "#DEDDDD",
- "gridWidth": 1,
- "labelFont": "Lato",
- "labelFontSize": 12,
- "labelPadding": 8,
- "ticks": false,
- "titleAngle": 0,
- "titleFont": "Lato",
- "titleFontSize": 12,
- "titlePadding": 10,
- "titleX": 18,
- "titleY": -10
- },
- "background": "#FFFFFF",
- "legend": {
- "labelFont": "Lato",
- "labelFontSize": 12,
- "offset": 10,
- "orient": "right",
- "symbolSize": 100,
- "titleFont": "Lato",
- "titleFontSize": 12,
- "titlePadding": 10
- },
- "line": {
- "color": "#1696d2",
- "stroke": "#1696d2",
- "strokeWidth": 5
- },
- "point": {
- "filled": true
- },
- "range": {
- "category": [
- "#1696d2",
- "#ec008b",
- "#fdbf11",
- "#000000",
- "#d2d2d2",
- "#55b748"
- ],
- "diverging": [
- "#ca5800",
- "#fdbf11",
- "#fdd870",
- "#fff2cf",
- "#cfe8f3",
- "#73bfe2",
- "#1696d2",
- "#0a4c6a"
- ],
- "heatmap": [
- "#ca5800",
- "#fdbf11",
- "#fdd870",
- "#fff2cf",
- "#cfe8f3",
- "#73bfe2",
- "#1696d2",
- "#0a4c6a"
- ],
- "ordinal": [
- "#cfe8f3",
- "#a2d4ec",
- "#73bfe2",
- "#46abdb",
- "#1696d2",
- "#12719e"
- ],
- "ramp": [
- "#CFE8F3",
- "#A2D4EC",
- "#73BFE2",
- "#46ABDB",
- "#1696D2",
- "#12719E",
- "#0A4C6A",
- "#062635"
- ]
- },
- "rect": {
- "fill": "#1696d2"
- },
- "style": {
- "bar": {
- "fill": "#1696d2",
- "stroke": null
+ "config": {
+ "arc": {
+ "fill": "#1696d2"
+ },
+ "area": {
+ "fill": "#1696d2"
+ },
+ "axisX": {
+ "domain": true,
+ "domainColor": "#000000",
+ "domainWidth": 1,
+ "grid": false,
+ "labelAngle": 0,
+ "labelFont": "Lato",
+ "labelFontSize": 12,
+ "tickColor": "#000000",
+ "tickSize": 5,
+ "titleFont": "Lato",
+ "titleFontSize": 12,
+ "titlePadding": 10
+ },
+ "axisY": {
+ "domain": false,
+ "domainWidth": 1,
+ "grid": true,
+ "gridColor": "#DEDDDD",
+ "gridWidth": 1,
+ "labelFont": "Lato",
+ "labelFontSize": 12,
+ "labelPadding": 8,
+ "ticks": false,
+ "titleAngle": 0,
+ "titleFont": "Lato",
+ "titleFontSize": 12,
+ "titlePadding": 10,
+ "titleX": 18,
+ "titleY": -10
+ },
+ "background": "#FFFFFF",
+ "legend": {
+ "labelFont": "Lato",
+ "labelFontSize": 12,
+ "offset": 10,
+ "orient": "right",
+ "symbolSize": 100,
+ "titleFont": "Lato",
+ "titleFontSize": 12,
+ "titlePadding": 10
+ },
+ "line": {
+ "color": "#1696d2",
+ "stroke": "#1696d2",
+ "strokeWidth": 5
+ },
+ "point": {
+ "filled": true
+ },
+ "range": {
+ "category": [
+ "#1696d2",
+ "#ec008b",
+ "#fdbf11",
+ "#000000",
+ "#d2d2d2",
+ "#55b748"
+ ],
+ "diverging": [
+ "#ca5800",
+ "#fdbf11",
+ "#fdd870",
+ "#fff2cf",
+ "#cfe8f3",
+ "#73bfe2",
+ "#1696d2",
+ "#0a4c6a"
+ ],
+ "heatmap": [
+ "#ca5800",
+ "#fdbf11",
+ "#fdd870",
+ "#fff2cf",
+ "#cfe8f3",
+ "#73bfe2",
+ "#1696d2",
+ "#0a4c6a"
+ ],
+ "ordinal": [
+ "#cfe8f3",
+ "#a2d4ec",
+ "#73bfe2",
+ "#46abdb",
+ "#1696d2",
+ "#12719e"
+ ],
+ "ramp": [
+ "#CFE8F3",
+ "#A2D4EC",
+ "#73BFE2",
+ "#46ABDB",
+ "#1696D2",
+ "#12719E",
+ "#0A4C6A",
+ "#062635"
+ ]
+ },
+ "rect": {
+ "fill": "#1696d2"
+ },
+ "style": {
+ "bar": {
+ "fill": "#1696d2",
+ "stroke": null
+ }
+ },
+ "text": {
+ "align": "center",
+ "color": "#1696d2",
+ "font": "Lato",
+ "fontSize": 11,
+ "fontWeight": 400,
+ "size": 11
+ },
+ "title": {
+ "anchor": "start",
+ "font": "Lato",
+ "fontSize": 18
+ },
+ "trail": {
+ "color": "#1696d2",
+ "size": 1,
+ "stroke": "#1696d2",
+ "strokeWidth": 0
+ },
+ "view": {
+ "stroke": "transparent"
}
- },
- "text": {
- "align": "center",
- "color": "#1696d2",
- "font": "Lato",
- "fontSize": 11,
- "fontWeight": 400,
- "size": 11
- },
- "title": {
- "anchor": "start",
- "font": "Lato",
- "fontSize": 18
- },
- "trail": {
- "color": "#1696d2",
- "size": 1,
- "stroke": "#1696d2",
- "strokeWidth": 0
- },
- "view": {
- "stroke": "transparent"
}
},
"vox": {
- "arc": {
- "fill": "#3e5c69"
- },
- "area": {
- "fill": "#3e5c69"
- },
- "axis": {
- "domainWidth": 0.5,
- "grid": true,
- "labelPadding": 2,
- "tickSize": 5,
- "tickWidth": 0.5,
- "titleFontWeight": "normal"
- },
- "axisBand": {
- "grid": false
- },
- "axisX": {
- "gridWidth": 0.2
- },
- "axisY": {
- "gridDash": [
- 3
- ],
- "gridWidth": 0.4
- },
- "background": "#fff",
- "legend": {
- "labelFontSize": 11,
- "padding": 1,
- "symbolType": "square"
- },
- "line": {
- "stroke": "#3e5c69"
- },
- "range": {
- "category": [
- "#3e5c69",
- "#6793a6",
- "#182429",
- "#0570b0",
- "#3690c0",
- "#74a9cf",
- "#a6bddb",
- "#e2ddf2"
- ]
- },
- "rect": {
- "fill": "#3e5c69"
+ "config": {
+ "arc": {
+ "fill": "#3e5c69"
+ },
+ "area": {
+ "fill": "#3e5c69"
+ },
+ "axis": {
+ "domainWidth": 0.5,
+ "grid": true,
+ "labelPadding": 2,
+ "tickSize": 5,
+ "tickWidth": 0.5,
+ "titleFontWeight": "normal"
+ },
+ "axisBand": {
+ "grid": false
+ },
+ "axisX": {
+ "gridWidth": 0.2
+ },
+ "axisY": {
+ "gridDash": [
+ 3
+ ],
+ "gridWidth": 0.4
+ },
+ "background": "#fff",
+ "legend": {
+ "labelFontSize": 11,
+ "padding": 1,
+ "symbolType": "square"
+ },
+ "line": {
+ "stroke": "#3e5c69"
+ },
+ "range": {
+ "category": [
+ "#3e5c69",
+ "#6793a6",
+ "#182429",
+ "#0570b0",
+ "#3690c0",
+ "#74a9cf",
+ "#a6bddb",
+ "#e2ddf2"
+ ]
+ },
+ "rect": {
+ "fill": "#3e5c69"
+ }
}
}
}
\ No newline at end of file
diff --git a/tests/vegalite/v5/test_theme.py b/tests/vegalite/v5/test_theme.py
index da7c134ba..45eda9637 100644
--- a/tests/vegalite/v5/test_theme.py
+++ b/tests/vegalite/v5/test_theme.py
@@ -1,23 +1,41 @@
from __future__ import annotations
-from typing import TYPE_CHECKING, Any, Callable, cast
+import json
+from collections.abc import Mapping, Set
+from pathlib import Path
+from typing import TYPE_CHECKING, Any, Callable, Literal, TypeVar, cast, get_args
import pytest
import altair.vegalite.v5 as alt
from altair import theme
from altair.theme import ConfigKwds, ThemeConfig
-from altair.vegalite.v5.schema._typing import is_color_hex
+from altair.vegalite.v5 import schema
+from altair.vegalite.v5.schema._typing import VegaThemes, is_color_hex
from altair.vegalite.v5.theme import VEGA_THEMES
from tests import slow
if TYPE_CHECKING:
import sys
+ if sys.version_info >= (3, 13):
+ from typing import TypeIs
+ else:
+ from typing_extensions import TypeIs
if sys.version_info >= (3, 11):
from typing import LiteralString
else:
from typing_extensions import LiteralString
+ if sys.version_info >= (3, 10):
+ from typing import TypeAlias
+ else:
+ from typing_extensions import TypeAlias
+
+T = TypeVar("T")
+
+_Config: TypeAlias = Literal["config"]
+_PartialThemeConfig: TypeAlias = Mapping[_Config, ConfigKwds]
+"""Represents ``ThemeConfig``, but **only** using the ``"config"`` key."""
@pytest.fixture
@@ -1043,3 +1061,67 @@ def test_theme_config(theme_func: Callable[[], ThemeConfig], chart) -> None:
theme.register(name, enable=True)(theme_func)
assert chart.to_dict(validate=True)
assert theme.get() == theme_func
+
+
+# NOTE: There are roughly 70 keys
+# - not really reasonable to create a literal that long for testing only
+# - therefore, using `frozenset[str]`
+@pytest.fixture(scope="session")
+def config_keys() -> frozenset[str]:
+ return ConfigKwds.__required_keys__.union(
+ ConfigKwds.__optional_keys__,
+ ConfigKwds.__readonly_keys__, # type: ignore[attr-defined]
+ ConfigKwds.__mutable_keys__, # type: ignore[attr-defined]
+ )
+
+
+@pytest.fixture(scope="session")
+def theme_name_keys() -> frozenset[VegaThemes]:
+ return frozenset(get_args(VegaThemes))
+
+
+@pytest.fixture(scope="session")
+def themes_path() -> Path:
+ return Path(schema.__file__).parent / "vega-themes.json"
+
+
+def is_keyed_exact(obj: Any, other: Set[T]) -> TypeIs[Mapping[T, Any]]:
+ return isinstance(obj, Mapping) and obj.keys() == other
+
+
+def is_config_kwds(obj: Any, other: Any) -> TypeIs[ConfigKwds]:
+ return isinstance(obj, Mapping) and obj.keys() <= other
+
+
+def is_vega_theme(obj: Any, config_keys: Any) -> TypeIs[_PartialThemeConfig]:
+ if is_keyed_exact(obj, frozenset[_Config]({"config"})):
+ inner = obj["config"]
+ return is_config_kwds(inner, config_keys)
+ else:
+ return False
+
+
+def is_vega_theme_all(
+ obj: Any, theme_name_keys: frozenset[VegaThemes], config_keys: frozenset[str]
+) -> TypeIs[Mapping[VegaThemes, _PartialThemeConfig]]:
+ return is_keyed_exact(obj, theme_name_keys) and all(
+ is_vega_theme(definition, config_keys) for definition in obj.values()
+ )
+
+
+def test_vendored_vega_themes_json(
+ themes_path: Path,
+ theme_name_keys: frozenset[VegaThemes],
+ config_keys: frozenset[str],
+) -> None:
+ """
+ Ensure every vendored theme can be represented as a ``ThemeConfig`` type.
+
+ Related
+ -------
+ - https://github.com/vega/altair/issues/3666#issuecomment-2450057530
+ """
+ with themes_path.open(encoding="utf-8") as f:
+ content = json.load(f)
+
+ assert is_vega_theme_all(content, theme_name_keys, config_keys)
diff --git a/tools/generate_schema_wrapper.py b/tools/generate_schema_wrapper.py
index e0e7a4d54..f68771e52 100644
--- a/tools/generate_schema_wrapper.py
+++ b/tools/generate_schema_wrapper.py
@@ -564,10 +564,14 @@ def download_schemafile(
def _vega_lite_props_only(
themes: dict[VegaThemes, dict[str, Any]], props: SchemaProperties, /
) -> Iterator[tuple[VegaThemes, dict[str, Any]]]:
- """Removes properties that are allowed in `Vega` but not `Vega-Lite` from theme definitions."""
+ """
+ Removes properties that are allowed in `Vega` but not `Vega-Lite` from theme definitions.
+
+ Each theme is then nested as ``ThemeConfig["config"] = ...``
+ """
keep = props.keys()
for name, theme_spec in themes.items():
- yield name, {k: v for k, v in theme_spec.items() if k in keep}
+ yield name, {"config": {k: v for k, v in theme_spec.items() if k in keep}}
def update_vega_themes(fp: Path, /, indent: str | int | None = 2) -> None:
From 6c79fa9030b400bfd19a427e3a37458e591b8305 Mon Sep 17 00:00:00 2001
From: Mattijn van Hoek
Date: Sat, 23 Nov 2024 20:01:03 +0100
Subject: [PATCH 16/42] include PR title type in `pull_request_template`
(#3698)
---
.github/pull_request_template.md | 31 ++++++++++++++++++++++++-------
1 file changed, 24 insertions(+), 7 deletions(-)
diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md
index c7b2a77c8..45100e2d7 100644
--- a/.github/pull_request_template.md
+++ b/.github/pull_request_template.md
@@ -1,11 +1,28 @@
-Thanks for contributing to Altair!
+## Thanks for contributing to Altair! 🎉
-Please follow these guidelines when submitting your PR:
+Please follow these guidelines:
-- Describe the purpose of the changes in PR, so that it is easy to understand the implication of the suggested changes.
- - Here is a [helpful article about writing effective PR descriptions](https://medium.com/@greenberg/writing-pull-requests-your-coworkers-might-enjoy-reading-9d0307e93da3).
-- Include unit tests and documentation for new features
-- Ensure that the title is a concise [semantic commit message](https://www.conventionalcommits.org/) (e.g. "feat: Add `embed_options` to charts").
- - Append `!` if the change is breaking (e.g. "fix!: Raise error when `embed_options` is `None`")
+### 1. **PR Description**
+ - Briefly describe the changes and their purpose. For help, check this [guide](https://medium.com/@greenberg/writing-pull-requests-your-coworkers-might-enjoy-reading-9d0307e93da3).
+
+### 2. **Tests & Docs**
+ - Include unit tests and update documentation for new features.
+
+### 3. **Commit Message**
+ - Use [semantic commit messages](https://www.conventionalcommits.org/), e.g., `"feat: Add embed_options to charts"`.
+ - Add `!` for breaking changes (e.g., `"fix!: Raise error when embed_options is None"`).
+
+### 4. **PR Title Types**
+ - **feat**: New feature
+ - **fix**: Bug fix
+ - **docs**: Documentation changes
+ - **style**: Code style changes (no functionality change)
+ - **refactor**: Code restructuring
+ - **perf**: Performance improvements
+ - **test**: Add or fix tests
+ - **build**: Changes to build system or dependencies
+ - **ci**: CI configuration changes
+ - **chore**: Miscellaneous tasks
+ - **revert**: Reverts a commit
From b6481d2b580b8c3b90df835a26da35d73991fe08 Mon Sep 17 00:00:00 2001
From: Mattijn van Hoek
Date: Sat, 23 Nov 2024 20:19:45 +0100
Subject: [PATCH 17/42] chore: bump narwhals to v1.14.2 (#3697)
Co-authored-by: dangotbanned <125183946+dangotbanned@users.noreply.github.com>
---
altair/_magics.py | 4 ++--
altair/utils/_vegafusion_data.py | 6 ++----
altair/utils/core.py | 7 ++++---
altair/utils/data.py | 11 ++++++-----
pyproject.toml | 2 +-
5 files changed, 15 insertions(+), 15 deletions(-)
diff --git a/altair/_magics.py b/altair/_magics.py
index 61abf51e2..9c5b9537f 100644
--- a/altair/_magics.py
+++ b/altair/_magics.py
@@ -7,8 +7,8 @@
from importlib.util import find_spec
from typing import Any
-import narwhals.stable.v1 as nw
from IPython.core import magic_arguments
+from narwhals.stable.v1.dependencies import is_pandas_dataframe
from altair.vegalite import v5 as vegalite_v5
@@ -32,7 +32,7 @@ def _prepare_data(data, data_transformers):
"""Convert input data to data for use within schema."""
if data is None or isinstance(data, dict):
return data
- elif nw.dependencies.is_pandas_dataframe(data):
+ elif is_pandas_dataframe(data):
if func := data_transformers.get():
data = func(data)
return data
diff --git a/altair/utils/_vegafusion_data.py b/altair/utils/_vegafusion_data.py
index 401258e8c..e36fb3455 100644
--- a/altair/utils/_vegafusion_data.py
+++ b/altair/utils/_vegafusion_data.py
@@ -5,7 +5,7 @@
from typing import TYPE_CHECKING, Any, Callable, Final, TypedDict, Union, overload
from weakref import WeakValueDictionary
-import narwhals.stable.v1 as nw
+from narwhals.stable.v1.dependencies import is_into_dataframe
from packaging.version import Version
from altair.utils._importers import import_vegafusion
@@ -54,9 +54,7 @@
def is_supported_by_vf(data: Any) -> TypeIs[DataFrameLike]:
# Test whether VegaFusion supports the data type
# VegaFusion v2 support narwhals-compatible DataFrames
- return isinstance(data, DataFrameLike) or nw.dependencies.is_into_dataframe(
- data
- )
+ return isinstance(data, DataFrameLike) or is_into_dataframe(data)
else:
diff --git a/altair/utils/core.py b/altair/utils/core.py
index c675f98dc..1cac486b6 100644
--- a/altair/utils/core.py
+++ b/altair/utils/core.py
@@ -16,6 +16,7 @@
import jsonschema
import narwhals.stable.v1 as nw
+from narwhals.stable.v1.dependencies import is_pandas_dataframe, is_polars_dataframe
from narwhals.stable.v1.typing import IntoDataFrame
from altair.utils.schemapi import SchemaBase, SchemaLike, Undefined
@@ -469,9 +470,9 @@ def sanitize_narwhals_dataframe(
columns: list[IntoExpr] = []
# See https://github.com/vega/altair/issues/1027 for why this is necessary.
local_iso_fmt_string = "%Y-%m-%dT%H:%M:%S"
- is_polars_dataframe = nw.dependencies.is_polars_dataframe(data.to_native())
+ is_polars = is_polars_dataframe(data.to_native())
for name, dtype in schema.items():
- if dtype == nw.Date and is_polars_dataframe:
+ if dtype == nw.Date and is_polars:
# Polars doesn't allow formatting `Date` with time directives.
# The date -> datetime cast is extremely fast compared with `to_string`
columns.append(
@@ -673,7 +674,7 @@ def parse_shorthand( # noqa: C901
if schema[unescaped_field] in {
nw.Object,
nw.Unknown,
- } and nw.dependencies.is_pandas_dataframe(data_nw.to_native()):
+ } and is_pandas_dataframe(data_nw.to_native()):
attrs["type"] = infer_vegalite_type_for_pandas(column.to_native())
else:
attrs["type"] = infer_vegalite_type_for_narwhals(column)
diff --git a/altair/utils/data.py b/altair/utils/data.py
index ca48abb79..7964d15a0 100644
--- a/altair/utils/data.py
+++ b/altair/utils/data.py
@@ -19,6 +19,7 @@
)
import narwhals.stable.v1 as nw
+from narwhals.stable.v1.dependencies import is_pandas_dataframe
from narwhals.stable.v1.typing import IntoDataFrame
from ._importers import import_pyarrow_interchange
@@ -187,7 +188,7 @@ def sample(
if data is None:
return partial(sample, n=n, frac=frac)
check_data_type(data)
- if nw.dependencies.is_pandas_dataframe(data):
+ if is_pandas_dataframe(data):
return data.sample(n=n, frac=frac)
elif isinstance(data, dict):
if "values" in data:
@@ -322,7 +323,7 @@ def to_values(data: DataType) -> ToValuesReturnType:
data_native = nw.to_native(data, pass_through=True)
if isinstance(data_native, SupportsGeoInterface):
return {"values": _from_geo_interface(data_native)}
- elif nw.dependencies.is_pandas_dataframe(data_native):
+ elif is_pandas_dataframe(data_native):
data_native = sanitize_pandas_dataframe(data_native)
return {"values": data_native.to_dict(orient="records")}
elif isinstance(data_native, dict):
@@ -363,7 +364,7 @@ def _from_geo_interface(data: SupportsGeoInterface | Any) -> dict[str, Any]:
- ``typing.TypeGuard``
- ``pd.DataFrame.__getattr__``
"""
- if nw.dependencies.is_pandas_dataframe(data):
+ if is_pandas_dataframe(data):
data = sanitize_pandas_dataframe(data)
return sanitize_geo_interface(data.__geo_interface__)
@@ -373,7 +374,7 @@ def _data_to_json_string(data: DataType) -> str:
check_data_type(data)
if isinstance(data, SupportsGeoInterface):
return json.dumps(_from_geo_interface(data))
- elif nw.dependencies.is_pandas_dataframe(data):
+ elif is_pandas_dataframe(data):
data = sanitize_pandas_dataframe(data)
return data.to_json(orient="records", double_precision=15)
elif isinstance(data, dict):
@@ -400,7 +401,7 @@ def _data_to_csv_string(data: DataType) -> str:
f"See https://github.com/vega/altair/issues/3441"
)
raise NotImplementedError(msg)
- elif nw.dependencies.is_pandas_dataframe(data):
+ elif is_pandas_dataframe(data):
data = sanitize_pandas_dataframe(data)
return data.to_csv(index=False)
elif isinstance(data, dict):
diff --git a/pyproject.toml b/pyproject.toml
index 8871a0bf9..0887116c0 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -20,7 +20,7 @@ dependencies = [
# If you update the minimum required jsonschema version, also update it in build.yml
"jsonschema>=3.0",
"packaging",
- "narwhals>=1.13.1"
+ "narwhals>=1.14.2"
]
description = "Vega-Altair: A declarative statistical visualization library for Python."
readme = "README.md"
From b2ff8ce53b35e1f85ef02644d926ba1e39673fb9 Mon Sep 17 00:00:00 2001
From: Jon Mease
Date: Sat, 23 Nov 2024 18:32:30 -0500
Subject: [PATCH 18/42] chore: Release 5.5.0 (#3699)
* update RELEASING.md:
- Remove redundant tag step
- Explicitly checkout main and check working tree
- Normalize indentation of CLI commands
* Add expression docstring links to expr class docstring so sphinx finds them
* Add raw_enabled for :raw-html: directive
* Add Generic link
* format
* update user guide with link
* fix raw-html render
* bump version to 5.5.0
* expand urls
* Fix _continuous uniform probability distribution URL
---
RELEASING.md | 59 +++++++-------
altair/__init__.py | 2 +-
altair/expr/__init__.py | 113 +++++++++++++++++++++++++-
altair/vegalite/v5/schema/channels.py | 32 ++++----
altair/vegalite/v5/schema/core.py | 16 ++--
doc/conf.py | 2 +-
doc/user_guide/api.rst | 2 +
tools/generate_api_docs.py | 2 +
tools/markup.py | 21 +++--
tools/vega_expr.py | 51 +++++++++++-
10 files changed, 232 insertions(+), 68 deletions(-)
diff --git a/RELEASING.md b/RELEASING.md
index a3de236e4..6582af76a 100644
--- a/RELEASING.md
+++ b/RELEASING.md
@@ -2,24 +2,26 @@
Remove any existing environments managed by `hatch` so that it will create new ones
with the latest dependencies when executing the commands further below:
- hatch env prune
+ hatch env prune
-2. Make certain your branch is in sync with head. If you work on a fork, replace `origin` with `upstream`:
+2. Make certain your branch is in sync with head, and that you have no uncommitted modifications. If you work on a fork, replace `origin` with `upstream`:
- git pull origin main
+ git checkout main
+ git pull origin main
+ git status # Should show "nothing to commit, working tree clean"
3. Do a clean doc build:
- hatch run doc:clean-all
- hatch run doc:build-html
- hatch run doc:serve
+ hatch run doc:clean-all
+ hatch run doc:build-html
+ hatch run doc:serve
Navigate to http://localhost:8000 and ensure it looks OK (particularly
do a visual scan of the gallery thumbnails).
4. Create a new release branch:
- git switch -c version_5.0.0
+ git switch -c version_5.0.0
5. Update version to, e.g. 5.0.0:
@@ -28,56 +30,51 @@
6. Commit changes and push:
- git add . -u
- git commit -m "chore: Bump version to 5.0.0"
- git push
+ git add . -u
+ git commit -m "chore: Bump version to 5.0.0"
+ git push
7. Merge release branch into main, make sure that all required checks pass
-8. Tag the release:
-
- git tag -a v5.0.0 -m "version 5.0.0 release"
- git push origin v5.0.0
-
-9. On main, build source & wheel distributions. If you work on a fork, replace `origin` with `upstream`:
+8. On main, build source & wheel distributions. If you work on a fork, replace `origin` with `upstream`:
- git switch main
- git pull origin main
- hatch clean # clean old builds & distributions
- hatch build # create a source distribution and universal wheel
+ git switch main
+ git pull origin main
+ hatch clean # clean old builds & distributions
+ hatch build # create a source distribution and universal wheel
-10. publish to PyPI (Requires correct PyPI owner permissions):
+9. publish to PyPI (Requires correct PyPI owner permissions):
hatch publish
-11. build and publish docs (Requires write-access to altair-viz/altair-viz.github.io):
+10. build and publish docs (Requires write-access to altair-viz/altair-viz.github.io):
hatch run doc:publish-clean-build
-12. On main, tag the release. If you work on a fork, replace `origin` with `upstream`:
+11. On main, tag the release. If you work on a fork, replace `origin` with `upstream`:
- git tag -a v5.0.0 -m "Version 5.0.0 release"
- git push origin v5.0.0
+ git tag -a v5.0.0 -m "Version 5.0.0 release"
+ git push origin v5.0.0
-13. Create a new branch:
+12. Create a new branch:
git switch -c maint_5.1.0dev
-14. Update version and add 'dev' suffix, e.g. 5.1.0dev:
+13. Update version and add 'dev' suffix, e.g. 5.1.0dev:
- in ``altair/__init__.py``
- in ``doc/conf.py``
-15. Commit changes and push:
+14. Commit changes and push:
git add . -u
git commit -m "chore: Bump version to 5.1.0dev"
git push
-16. Merge maintenance branch into main
+15. Merge maintenance branch into main
-17. Double-check that a conda-forge pull request is generated from the updated
+16. Double-check that a conda-forge pull request is generated from the updated
pip package by the conda-forge bot (may take up to several hours):
https://github.com/conda-forge/altair-feedstock/pulls
-18. Publish a new release in https://github.com/vega/altair/releases/
+17. Publish a new release in https://github.com/vega/altair/releases/
diff --git a/altair/__init__.py b/altair/__init__.py
index 279cfec67..2c0904647 100644
--- a/altair/__init__.py
+++ b/altair/__init__.py
@@ -1,5 +1,5 @@
# ruff: noqa
-__version__ = "5.5.0dev"
+__version__ = "5.5.0"
# The content of __all__ is automatically written by
# tools/update_init_file.py. Do not modify directly.
diff --git a/altair/expr/__init__.py b/altair/expr/__init__.py
index 38d87f4c5..17e69357b 100644
--- a/altair/expr/__init__.py
+++ b/altair/expr/__init__.py
@@ -117,6 +117,115 @@ class expr(_ExprRef, metaclass=_ExprMeta):
}))},
shorthand: 'yval'
})
+
+ .. _Number.isNaN:
+ https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/isNan
+ .. _Number.isFinite:
+ https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/isFinite
+ .. _Math.abs:
+ https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/abs
+ .. _Math.acos:
+ https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/acos
+ .. _Math.asin:
+ https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/asin
+ .. _Math.atan:
+ https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/atan
+ .. _Math.atan2:
+ https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/atan2
+ .. _Math.ceil:
+ https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/ceil
+ .. _Math.cos:
+ https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/cos
+ .. _Math.exp:
+ https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/exp
+ .. _Math.floor:
+ https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/floor
+ .. _Math.hypot:
+ https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/hypot
+ .. _Math.log:
+ https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/log
+ .. _Math.max:
+ https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/max
+ .. _Math.min:
+ https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/min
+ .. _Math.pow:
+ https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/pow
+ .. _Math.random:
+ https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/random
+ .. _Math.round:
+ https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/round
+ .. _Math.sin:
+ https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/sin
+ .. _Math.sqrt:
+ https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/sqrt
+ .. _Math.tan:
+ https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/tan
+ .. _normal (Gaussian) probability distribution:
+ https://en.wikipedia.org/wiki/Normal_distribution
+ .. _cumulative distribution function:
+ https://en.wikipedia.org/wiki/Cumulative_distribution_function
+ .. _probability density function:
+ https://en.wikipedia.org/wiki/Probability_density_function
+ .. _log-normal probability distribution:
+ https://en.wikipedia.org/wiki/Log-normal_distribution
+ .. _continuous uniform probability distribution:
+ https://en.wikipedia.org/wiki/Continuous_uniform_distribution
+ .. _*unit*:
+ https://vega.github.io/vega/docs/api/time/#time-units
+ .. _JavaScript's String.replace:
+ https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/replace
+ .. _d3-format specifier:
+ https://github.com/d3/d3-format/
+ .. _*units*:
+ https://vega.github.io/vega/docs/api/time/#time-units
+ .. _timeUnitSpecifier API documentation:
+ https://vega.github.io/vega/docs/api/time/#timeUnitSpecifier
+ .. _timeFormat:
+ https://vega.github.io/vega/docs/expressions/#timeFormat
+ .. _utcFormat:
+ https://vega.github.io/vega/docs/expressions/#utcFormat
+ .. _d3-time-format specifier:
+ https://github.com/d3/d3-time-format/
+ .. _TimeMultiFormat object:
+ https://vega.github.io/vega/docs/types/#TimeMultiFormat
+ .. _UTC:
+ https://en.wikipedia.org/wiki/Coordinated_Universal_Time
+ .. _JavaScript's RegExp:
+ https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp
+ .. _RGB:
+ https://en.wikipedia.org/wiki/RGB_color_model
+ .. _d3-color's rgb function:
+ https://github.com/d3/d3-color#rgb
+ .. _HSL:
+ https://en.wikipedia.org/wiki/HSL_and_HSV
+ .. _d3-color's hsl function:
+ https://github.com/d3/d3-color#hsl
+ .. _CIE LAB:
+ https://en.wikipedia.org/wiki/Lab_color_space#CIELAB
+ .. _d3-color's lab function:
+ https://github.com/d3/d3-color#lab
+ .. _HCL:
+ https://en.wikipedia.org/wiki/Lab_color_space#CIELAB
+ .. _d3-color's hcl function:
+ https://github.com/d3/d3-color#hcl
+ .. _W3C Web Content Accessibility Guidelines:
+ https://www.w3.org/TR/2008/REC-WCAG20-20081211/#contrast-ratiodef
+ .. _continuous color scheme:
+ https://vega.github.io/vega/docs/schemes
+ .. _geoArea:
+ https://github.com/d3/d3-geo#geoArea
+ .. _path.area:
+ https://github.com/d3/d3-geo#path_area
+ .. _geoBounds:
+ https://github.com/d3/d3-geo#geoBounds
+ .. _path.bounds:
+ https://github.com/d3/d3-geo#path_bounds
+ .. _geoCentroid:
+ https://github.com/d3/d3-geo#geoCentroid
+ .. _path.centroid:
+ https://github.com/d3/d3-geo#path_centroid
+ .. _window.screen:
+ https://developer.mozilla.org/en-US/docs/Web/API/Window/screen
"""
@override
@@ -643,13 +752,13 @@ def sampleUniform(
cls, min: IntoExpression = None, max: IntoExpression = None, /
) -> Expression:
"""
- Returns a sample from a univariate `continuous uniform probability distribution`_) over the interval [``min``, ``max``).
+ Returns a sample from a univariate `continuous uniform probability distribution`_ over the interval [``min``, ``max``).
If unspecified, ``min`` defaults to ``0`` and ``max`` defaults to ``1``. If only one
argument is provided, it is interpreted as the ``max`` value.
.. _continuous uniform probability distribution:
- https://en.wikipedia.org/wiki/Uniform_distribution_(continuous
+ https://en.wikipedia.org/wiki/Continuous_uniform_distribution
"""
return FunctionExpression("sampleUniform", (min, max))
diff --git a/altair/vegalite/v5/schema/channels.py b/altair/vegalite/v5/schema/channels.py
index 3562bc83e..a4a676c23 100644
--- a/altair/vegalite/v5/schema/channels.py
+++ b/altair/vegalite/v5/schema/channels.py
@@ -8308,8 +8308,8 @@ class Radius(FieldChannelMixin, core.PositionFieldDefBase):
stacked bar and area charts
`__ and pie charts
`with percentage tooltip
- `__). :raw-html:`
`
- -``"center"`` - stacking with center baseline (for `streamgraph
+ `__).
+ * ``"center"`` - stacking with center baseline (for `streamgraph
`__).
* ``null`` or ``false`` - No-stacking. This will produce layered `bar
`__ and area
@@ -8644,8 +8644,8 @@ class RadiusDatum(DatumChannelMixin, core.PositionDatumDefBase):
stacked bar and area charts
`__ and pie charts
`with percentage tooltip
- `__). :raw-html:`
`
- -``"center"`` - stacking with center baseline (for `streamgraph
+ `__).
+ * ``"center"`` - stacking with center baseline (for `streamgraph
`__).
* ``null`` or ``false`` - No-stacking. This will produce layered `bar
`__ and area
@@ -15197,8 +15197,8 @@ class Theta(FieldChannelMixin, core.PositionFieldDefBase):
stacked bar and area charts
`__ and pie charts
`with percentage tooltip
- `__). :raw-html:`
`
- -``"center"`` - stacking with center baseline (for `streamgraph
+ `__).
+ * ``"center"`` - stacking with center baseline (for `streamgraph
`__).
* ``null`` or ``false`` - No-stacking. This will produce layered `bar
`__ and area
@@ -15529,8 +15529,8 @@ class ThetaDatum(DatumChannelMixin, core.PositionDatumDefBase):
stacked bar and area charts
`__ and pie charts
`with percentage tooltip
- `__). :raw-html:`
`
- -``"center"`` - stacking with center baseline (for `streamgraph
+ `__).
+ * ``"center"`` - stacking with center baseline (for `streamgraph
`__).
* ``null`` or ``false`` - No-stacking. This will produce layered `bar
`__ and area
@@ -17067,8 +17067,8 @@ class X(FieldChannelMixin, core.PositionFieldDef):
stacked bar and area charts
`__ and pie charts
`with percentage tooltip
- `__). :raw-html:`
`
- -``"center"`` - stacking with center baseline (for `streamgraph
+ `__).
+ * ``"center"`` - stacking with center baseline (for `streamgraph
`__).
* ``null`` or ``false`` - No-stacking. This will produce layered `bar
`__ and area
@@ -17550,8 +17550,8 @@ class XDatum(DatumChannelMixin, core.PositionDatumDef):
stacked bar and area charts
`__ and pie charts
`with percentage tooltip
- `__). :raw-html:`
`
- -``"center"`` - stacking with center baseline (for `streamgraph
+ `__).
+ * ``"center"`` - stacking with center baseline (for `streamgraph
`__).
* ``null`` or ``false`` - No-stacking. This will produce layered `bar
`__ and area
@@ -19306,8 +19306,8 @@ class Y(FieldChannelMixin, core.PositionFieldDef):
stacked bar and area charts
`__ and pie charts
`with percentage tooltip
- `__). :raw-html:`
`
- -``"center"`` - stacking with center baseline (for `streamgraph
+ `__).
+ * ``"center"`` - stacking with center baseline (for `streamgraph
`__).
* ``null`` or ``false`` - No-stacking. This will produce layered `bar
`__ and area
@@ -19789,8 +19789,8 @@ class YDatum(DatumChannelMixin, core.PositionDatumDef):
stacked bar and area charts
`__ and pie charts
`with percentage tooltip
- `__). :raw-html:`
`
- -``"center"`` - stacking with center baseline (for `streamgraph
+ `__).
+ * ``"center"`` - stacking with center baseline (for `streamgraph
`__).
* ``null`` or ``false`` - No-stacking. This will produce layered `bar
`__ and area
diff --git a/altair/vegalite/v5/schema/core.py b/altair/vegalite/v5/schema/core.py
index 51ae8ab5d..fa2df587a 100644
--- a/altair/vegalite/v5/schema/core.py
+++ b/altair/vegalite/v5/schema/core.py
@@ -15216,8 +15216,8 @@ class PositionDatumDefBase(PolarDef):
stacked bar and area charts
`__ and pie charts
`with percentage tooltip
- `__). :raw-html:`
`
- -``"center"`` - stacking with center baseline (for `streamgraph
+ `__).
+ * ``"center"`` - stacking with center baseline (for `streamgraph
`__).
* ``null`` or ``false`` - No-stacking. This will produce layered `bar
`__ and area
@@ -15410,8 +15410,8 @@ class PositionDatumDef(PositionDef):
stacked bar and area charts
`__ and pie charts
`with percentage tooltip
- `__). :raw-html:`
`
- -``"center"`` - stacking with center baseline (for `streamgraph
+ `__).
+ * ``"center"`` - stacking with center baseline (for `streamgraph
`__).
* ``null`` or ``false`` - No-stacking. This will produce layered `bar
`__ and area
@@ -15681,8 +15681,8 @@ class PositionFieldDef(PositionDef):
stacked bar and area charts
`__ and pie charts
`with percentage tooltip
- `__). :raw-html:`
`
- -``"center"`` - stacking with center baseline (for `streamgraph
+ `__).
+ * ``"center"`` - stacking with center baseline (for `streamgraph
`__).
* ``null`` or ``false`` - No-stacking. This will produce layered `bar
`__ and area
@@ -15963,8 +15963,8 @@ class PositionFieldDefBase(PolarDef):
stacked bar and area charts
`__ and pie charts
`with percentage tooltip
- `__). :raw-html:`
`
- -``"center"`` - stacking with center baseline (for `streamgraph
+ `__).
+ * ``"center"`` - stacking with center baseline (for `streamgraph
`__).
* ``null`` or ``false`` - No-stacking. This will produce layered `bar
`__ and area
diff --git a/doc/conf.py b/doc/conf.py
index a01b6b85d..b4bd6a7c0 100644
--- a/doc/conf.py
+++ b/doc/conf.py
@@ -79,7 +79,7 @@
# built documents.
#
# The short X.Y version.
-version = "5.5.0dev"
+version = "5.5.0"
# The full version, including alpha/beta/rc tags.
release = f"{version}"
diff --git a/doc/user_guide/api.rst b/doc/user_guide/api.rst
index d3c08f547..5793f0ae8 100644
--- a/doc/user_guide/api.rst
+++ b/doc/user_guide/api.rst
@@ -791,3 +791,5 @@ Typing
Optional
is_chart_type
+.. _Generic:
+ https://typing.readthedocs.io/en/latest/spec/generics.html#generics
diff --git a/tools/generate_api_docs.py b/tools/generate_api_docs.py
index b9c2a1a2a..55c68729e 100644
--- a/tools/generate_api_docs.py
+++ b/tools/generate_api_docs.py
@@ -110,6 +110,8 @@
{typing_objects}
+.. _Generic:
+ https://typing.readthedocs.io/en/latest/spec/generics.html#generics
"""
diff --git a/tools/markup.py b/tools/markup.py
index 440efe629..88239299c 100644
--- a/tools/markup.py
+++ b/tools/markup.py
@@ -40,7 +40,10 @@ def __init__(self) -> None:
def inline_html(self, token: Token, state: BlockState) -> str:
html = token["raw"]
- return rf"\ :raw-html:`{html}`\ "
+ if html == "
":
+ return "\n"
+ else:
+ return rf" :raw-html:`{html}` "
class RSTParse(_Markdown):
@@ -131,7 +134,9 @@ def process_text(self, text: str, state: InlineState) -> None:
state.append_token({"type": "text", "raw": _RE_LIQUID_INCLUDE.sub(r"", text)})
-def read_ast_tokens(source: Url | Path, /) -> list[Token]:
+def read_ast_tokens(
+ source: Url | Path, /, replacements: list[tuple[str, str]] | None = None
+) -> list[Token]:
"""
Read from ``source``, drop ``BlockState``.
@@ -139,11 +144,17 @@ def read_ast_tokens(source: Url | Path, /) -> list[Token]:
"""
markdown = _Markdown(renderer=None, inline=InlineParser())
if isinstance(source, Path):
- tokens = markdown.read(source)
+ token_text = source.read_text()
else:
with request.urlopen(source) as response:
- s = response.read().decode("utf-8")
- tokens = markdown.parse(s, markdown.block.state_cls())
+ token_text = response.read().decode("utf-8")
+
+ # Apply replacements
+ if replacements:
+ for replacement in replacements:
+ token_text = token_text.replace(replacement[0], replacement[1])
+
+ tokens = markdown.parse(token_text, markdown.block.state_cls())
return tokens[0]
diff --git a/tools/vega_expr.py b/tools/vega_expr.py
index 1941f64fd..aa42e5ed6 100644
--- a/tools/vega_expr.py
+++ b/tools/vega_expr.py
@@ -47,6 +47,14 @@
EXPRESSIONS_DOCS_URL: LiteralString = f"{VEGA_DOCS_URL}expressions/"
EXPRESSIONS_URL_TEMPLATE = "https://raw.githubusercontent.com/vega/vega/refs/tags/{version}/docs/docs/expressions.md"
+# Replacements to apply prior to parsing as markdown
+PRE_PARSE_REPLACEMENTS = [
+ # Closing paren messes up markdown parsing, replace with equivalent wikipedia URL
+ (
+ "https://en.wikipedia.org/wiki/Uniform_distribution_(continuous)",
+ "https://en.wikipedia.org/wiki/Continuous_uniform_distribution",
+ )
+]
# NOTE: Regex patterns
FUNCTION_DEF_LINE: Pattern[str] = re.compile(
@@ -219,7 +227,7 @@ def PI(cls) -> {return_ann}:
CLS_TEMPLATE = '''\
class expr({base}, metaclass={metaclass}):
- """{doc}"""
+ """{doc}\n{links}"""
@override
def __new__(cls: type[{base}], expr: str) -> {base}: {type_ignore}
@@ -443,6 +451,20 @@ def __init__(self, name: str, children: Sequence[Token], /) -> None:
self.signature: str = ""
self._special: set[Special] = set()
+ def get_links(self, rst_renderer: RSTRenderer) -> dict[str, str]:
+ """Retrieve dict of link text to link url."""
+ from mistune import BlockState
+
+ links = {}
+ state = BlockState()
+ for t in self._children:
+ if t.get("type") == "link" and (url := t.get("attrs", {}).get("url")):
+ text = rst_renderer.render_children(t, state)
+ text = text.replace("`", "")
+ links[text] = expand_urls(url)
+
+ return links
+
def with_doc(self) -> Self:
"""
Parses docstring content in full.
@@ -917,13 +939,15 @@ def italics_to_backticks(s: str, names: Iterable[str], /) -> str:
return re.sub(pattern, r"\g``\g``\g", s)
-def parse_expressions(source: Url | Path, /) -> Iterator[VegaExprDef]:
+def parse_expressions(
+ source: Url | Path, /, replacements: list[tuple[str, str]] | None = None
+) -> Iterator[VegaExprDef]:
"""
Download remote or read local `.md` resource and eagerly parse signatures of relevant definitions.
Yields with docs to ensure each can use all remapped names, regardless of the order they appear.
"""
- tokens = read_ast_tokens(source)
+ tokens = read_ast_tokens(source, replacements=replacements)
expr_defs = tuple(VegaExprDef.from_tokens(tokens))
VegaExprDef.remap_title.refresh()
for expr_def in expr_defs:
@@ -943,6 +967,21 @@ def write_expr_module(version: str, output: Path, *, header: str) -> None:
"""
version = version if version.startswith("v") else f"v{version}"
url = EXPRESSIONS_URL_TEMPLATE.format(version=version)
+
+ # Retrieve all of the links used in expr method docstrings,
+ # so we can include them in the class docstrings, so that sphinx
+ # will find them.
+ expr_defs = parse_expressions(url, replacements=PRE_PARSE_REPLACEMENTS)
+
+ links = {}
+ rst_renderer = RSTRenderer()
+ for expr_def in expr_defs:
+ links.update(expr_def.get_links(rst_renderer))
+
+ links_rst = []
+ for anchor, link_target in links.items():
+ links_rst.append(f" .. _{anchor}:\n {link_target}")
+
content = (
MODULE_PRE.format(
header=header,
@@ -956,12 +995,16 @@ def write_expr_module(version: str, output: Path, *, header: str) -> None:
base="_ExprRef",
metaclass=CLS_META,
doc=CLS_DOC,
+ links="\n".join(links_rst),
type_ignore=IGNORE_MISC,
),
)
contents = chain(
content,
- (expr_def.render() for expr_def in parse_expressions(url)),
+ (
+ expr_def.render()
+ for expr_def in parse_expressions(url, replacements=PRE_PARSE_REPLACEMENTS)
+ ),
[MODULE_POST],
)
print(f"Generating\n {url!s}\n ->{output!s}")
From 3bda0ac5682693691e69cc0affc02dec1ae41ce9 Mon Sep 17 00:00:00 2001
From: Jon Mease
Date: Sat, 23 Nov 2024 19:12:34 -0500
Subject: [PATCH 19/42] chore: Bump version to 5.6.0dev (#3700)
---
altair/__init__.py | 2 +-
doc/conf.py | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/altair/__init__.py b/altair/__init__.py
index 2c0904647..c2d05e464 100644
--- a/altair/__init__.py
+++ b/altair/__init__.py
@@ -1,5 +1,5 @@
# ruff: noqa
-__version__ = "5.5.0"
+__version__ = "5.6.0dev"
# The content of __all__ is automatically written by
# tools/update_init_file.py. Do not modify directly.
diff --git a/doc/conf.py b/doc/conf.py
index b4bd6a7c0..be3cb95f3 100644
--- a/doc/conf.py
+++ b/doc/conf.py
@@ -79,7 +79,7 @@
# built documents.
#
# The short X.Y version.
-version = "5.5.0"
+version = "5.6.0dev"
# The full version, including alpha/beta/rc tags.
release = f"{version}"
From 922eac35da764d3faae928b870a2c70d0cf1435b Mon Sep 17 00:00:00 2001
From: Dan Redding <125183946+dangotbanned@users.noreply.github.com>
Date: Sun, 24 Nov 2024 13:32:14 +0000
Subject: [PATCH 20/42] ci: Temporal examples in `vegafusion` (#3702)
---
pyproject.toml | 1 -
tests/test_transformed_data.py | 57 ++++++++++++++++++++--------------
2 files changed, 34 insertions(+), 24 deletions(-)
diff --git a/pyproject.toml b/pyproject.toml
index 0887116c0..db733c9c4 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -205,7 +205,6 @@ exclude = [
"__pycache__",
"tests/examples_arguments_syntax",
"tests/examples_methods_syntax",
- "tests/test_transformed_data.py",
]
[tool.ruff.lint]
diff --git a/tests/test_transformed_data.py b/tests/test_transformed_data.py
index 1196c7b07..47667b52f 100644
--- a/tests/test_transformed_data.py
+++ b/tests/test_transformed_data.py
@@ -1,26 +1,37 @@
import pkgutil
import sys
+from importlib.metadata import version
+from importlib.util import find_spec
+import narwhals.stable.v1 as nw
import pytest
-from vega_datasets import data
+from packaging.version import Version
import altair as alt
from altair.utils.execeval import eval_block
-from tests import examples_methods_syntax, slow, ignore_DataFrameGroupBy
-import narwhals.stable.v1 as nw
-
-try:
- import vegafusion as vf
-except ImportError:
- vf = None
+from tests import (
+ examples_methods_syntax,
+ ignore_DataFrameGroupBy,
+ skip_requires_vegafusion,
+ slow,
+)
+from vega_datasets import data
XDIST_ENABLED: bool = "xdist" in sys.modules
"""Use as an `xfail` condition, if running in parallel may cause the test to fail."""
-@ignore_DataFrameGroupBy
-@pytest.mark.skipif(vf is None, reason="vegafusion not installed")
+xfail_vegafusion_2: pytest.MarkDecorator = pytest.mark.xfail(
+ bool(find_spec("vegafusion"))
+ and Version(version("vegafusion")) >= Version("2.0.0a0"),
+ raises=ValueError,
+ reason="https://github.com/vega/altair/issues/3701",
+)
+
+
# fmt: off
-@pytest.mark.parametrize("filename,rows,cols", [
+@ignore_DataFrameGroupBy
+@skip_requires_vegafusion
+@pytest.mark.parametrize(("filename", "rows", "cols"), [
("annual_weather_heatmap.py", 366, ["monthdate_date_end", "max_temp_max"]),
("anscombe_plot.py", 44, ["Series", "X", "Y"]),
("bar_chart_sorted.py", 6, ["site", "sum_yield"]),
@@ -49,7 +60,7 @@
pytest.param("line_percent.py", 30, ["sex", "perc"], marks=slow),
("line_with_log_scale.py", 15, ["year", "sum_people"]),
("multifeature_scatter_plot.py", 150, ["petalWidth", "species"]),
- ("natural_disasters.py", 686, ["Deaths", "Year"]),
+ pytest.param("natural_disasters.py", 686, ["Deaths", "Year"], marks=xfail_vegafusion_2),
("normalized_stacked_area_chart.py", 51, ["source", "net_generation_start"]),
("normalized_stacked_bar_chart.py", 60, ["site", "sum_yield_start"]),
("parallel_coordinates.py", 600, ["key", "value"]),
@@ -69,9 +80,9 @@
("wilkinson-dot-plot.py", 21, ["data", "id"]),
("window_rank.py", 12, ["team", "diff"]),
])
-# fmt: on
@pytest.mark.parametrize("to_reconstruct", [True, False])
def test_primitive_chart_examples(filename, rows, cols, to_reconstruct):
+ # fmt: on
source = pkgutil.get_data(examples_methods_syntax.__name__, filename)
chart = eval_block(source, strict=True)
if to_reconstruct:
@@ -83,17 +94,17 @@ def test_primitive_chart_examples(filename, rows, cols, to_reconstruct):
assert df is not None
nw_df = nw.from_native(df, eager_only=True, strict=True)
- assert len(nw_df) == rows
+ assert len(nw_df) == rows
assert set(cols).issubset(set(nw_df.columns))
-@pytest.mark.skipif(vf is None, reason="vegafusion not installed")
# fmt: off
-@pytest.mark.parametrize("filename,all_rows,all_cols", [
+@skip_requires_vegafusion
+@pytest.mark.parametrize(("filename", "all_rows", "all_cols"), [
("errorbars_with_std.py", [10, 10], [["upper_yield"], ["extent_yield"]]),
("candlestick_chart.py", [44, 44], [["low"], ["close"]]),
("co2_concentration.py", [713, 7, 7], [["first_date"], ["scaled_date"], ["end"]]),
- ("falkensee.py", [2, 38, 38], [["event"], ["population"], ["population"]]),
+ pytest.param("falkensee.py", [2, 38, 38], [["event"], ["population"], ["population"]], marks=xfail_vegafusion_2),
("heat_lane.py", [10, 10], [["bin_count_start"], ["y2"]]),
("histogram_responsive.py", [20, 20], [["__count"], ["__count"]]),
("histogram_with_a_global_mean_overlay.py", [9, 1], [["__count"], ["mean_IMDB_Rating"]]),
@@ -127,9 +138,9 @@ def test_primitive_chart_examples(filename, rows, cols, to_reconstruct):
("us_employment.py", [120, 1, 2], [["month"], ["president"], ["president"]]),
("us_population_pyramid_over_time.py", [19, 38, 19], [["gender"], ["year"], ["gender"]]),
])
-# fmt: on
@pytest.mark.parametrize("to_reconstruct", [True, False])
def test_compound_chart_examples(filename, all_rows, all_cols, to_reconstruct):
+ # fmt: on
source = pkgutil.get_data(examples_methods_syntax.__name__, filename)
chart = eval_block(source, strict=True)
if to_reconstruct:
@@ -137,7 +148,7 @@ def test_compound_chart_examples(filename, all_rows, all_cols, to_reconstruct):
# then what might have been originally used. See
# https://github.com/hex-inc/vegafusion/issues/354 for more info.
chart = alt.Chart.from_dict(chart.to_dict())
-
+
assert isinstance(chart, (alt.LayerChart, alt.ConcatChart, alt.HConcatChart, alt.VConcatChart))
dfs = chart.transformed_data()
@@ -145,7 +156,7 @@ def test_compound_chart_examples(filename, all_rows, all_cols, to_reconstruct):
# Only run assert statements if the chart is not reconstructed. Reason
# is that for some charts, the original chart contained duplicated datasets
# which disappear when reconstructing the chart.
-
+
nw_dfs = (nw.from_native(d, eager_only=True, strict=True) for d in dfs)
assert len(dfs) == len(all_rows)
for df, rows, cols in zip(nw_dfs, all_rows, all_cols):
@@ -153,7 +164,7 @@ def test_compound_chart_examples(filename, all_rows, all_cols, to_reconstruct):
assert set(cols).issubset(set(df.columns))
-@pytest.mark.skipif(vf is None, reason="vegafusion not installed")
+@skip_requires_vegafusion
@pytest.mark.parametrize("to_reconstruct", [True, False])
def test_transformed_data_exclude(to_reconstruct):
source = data.wheat()
@@ -179,5 +190,5 @@ def test_transformed_data_exclude(to_reconstruct):
assert len(_datasets) == 2
assert len(_datasets[0]) == 52
assert "wheat_start" in _datasets[0]
- assert len(_datasets[1]) == 1
- assert "mean_wheat" in _datasets[1]
+ assert len(_datasets[1]) == 1
+ assert "mean_wheat" in _datasets[1]
From 9002472d65875a8486de920e4cc585420efdd276 Mon Sep 17 00:00:00 2001
From: Dan Redding <125183946+dangotbanned@users.noreply.github.com>
Date: Mon, 2 Dec 2024 16:01:53 +0000
Subject: [PATCH 21/42] refactor(ruff): Apply `TC006` fixes (#3706)
Related
- https://github.com/astral-sh/ruff/issues/14676
- https://github.com/astral-sh/ruff/releases/tag/0.8.1
---
altair/utils/core.py | 2 +-
altair/utils/mimebundle.py | 2 +-
altair/utils/plugin_registry.py | 4 ++--
altair/vegalite/v5/api.py | 10 +++++-----
4 files changed, 9 insertions(+), 9 deletions(-)
diff --git a/altair/utils/core.py b/altair/utils/core.py
index 1cac486b6..66a559fad 100644
--- a/altair/utils/core.py
+++ b/altair/utils/core.py
@@ -383,7 +383,7 @@ def to_list_if_array(val):
# We know that the column names are strings from the isinstance check
# further above but mypy thinks it is of type Hashable and therefore does not
# let us assign it to the col_name variable which is already of type str.
- col_name = cast(str, dtype_item[0])
+ col_name = cast("str", dtype_item[0])
dtype = dtype_item[1]
dtype_name = str(dtype)
if dtype_name == "category":
diff --git a/altair/utils/mimebundle.py b/altair/utils/mimebundle.py
index 575b3f71c..56cd05a7e 100644
--- a/altair/utils/mimebundle.py
+++ b/altair/utils/mimebundle.py
@@ -140,7 +140,7 @@ def spec_to_mimebundle(
if format in {"png", "svg", "pdf", "vega"}:
return _spec_to_mimebundle_with_engine(
spec,
- cast(Literal["png", "svg", "pdf", "vega"], format),
+ cast("Literal['png', 'svg', 'pdf', 'vega']", format),
internal_mode,
engine=engine,
format_locale=embed_options.get("formatLocale", None),
diff --git a/altair/utils/plugin_registry.py b/altair/utils/plugin_registry.py
index 81e34cb8d..91e9462eb 100644
--- a/altair/utils/plugin_registry.py
+++ b/altair/utils/plugin_registry.py
@@ -134,7 +134,7 @@ def __init__(
f"https://docs.astral.sh/ruff/rules/assert/"
)
deprecated_warn(msg, version="5.4.0")
- self.plugin_type = cast(IsPlugin, _is_type(plugin_type))
+ self.plugin_type = cast("IsPlugin", _is_type(plugin_type))
else:
self.plugin_type = plugin_type
self._active: Plugin[R] | None = None
@@ -214,7 +214,7 @@ def _enable(self, name: str, **options) -> None:
raise ValueError(self.entrypoint_err_messages[name]) from err
else:
raise NoSuchEntryPoint(self.entry_point_group, name) from err
- value = cast(PluginT, ep.load())
+ value = cast("PluginT", ep.load())
self.register(name, value)
self._active_name = name
self._active = self._plugins[name]
diff --git a/altair/vegalite/v5/api.py b/altair/vegalite/v5/api.py
index 909ed621e..5b3d93f86 100644
--- a/altair/vegalite/v5/api.py
+++ b/altair/vegalite/v5/api.py
@@ -798,7 +798,7 @@ def _parse_when_compose(
if constraints:
iters.append(_parse_when_constraints(constraints))
r = functools.reduce(operator.and_, itertools.chain.from_iterable(iters))
- return t.cast(_expr_core.BinaryExpression, r)
+ return t.cast("_expr_core.BinaryExpression", r)
def _parse_when(
@@ -1107,7 +1107,7 @@ def when(
conditions = self.to_dict()
current = conditions["condition"]
if isinstance(current, list):
- conditions = t.cast(_Conditional[_Conditions], conditions)
+ conditions = t.cast("_Conditional[_Conditions]", conditions)
return ChainedWhen(condition, conditions)
elif isinstance(current, dict):
cond = _reveal_parsed_shorthand(current)
@@ -1384,7 +1384,7 @@ def param(
parameter.empty = empty
elif empty in empty_remap:
utils.deprecated_warn(warn_msg, version="5.0.0")
- parameter.empty = empty_remap[t.cast(str, empty)]
+ parameter.empty = empty_remap[t.cast("str", empty)]
else:
raise ValueError(warn_msg)
@@ -3086,7 +3086,7 @@ def transform_filter(
verbose_composition = chart.transform_filter((datum.year == 2000) & (datum.sex == 1))
chart.transform_filter(year=2000, sex=1)
"""
- if depr_filter := t.cast(Any, constraints.pop("filter", None)):
+ if depr_filter := t.cast("Any", constraints.pop("filter", None)):
utils.deprecated_warn(
"Passing `filter` as a keyword is ambiguous.\n\n"
"Use a positional argument for `<5.5.0` behavior.\n"
@@ -3986,7 +3986,7 @@ def from_dict(
pass
# As a last resort, try using the Root vegalite object
- return t.cast(_TSchemaBase, core.Root.from_dict(dct, validate))
+ return t.cast("_TSchemaBase", core.Root.from_dict(dct, validate))
def to_dict(
self,
From 8d3991b93ee17dd639e0c9caac8100d1f32ed6ad Mon Sep 17 00:00:00 2001
From: Dan Redding <125183946+dangotbanned@users.noreply.github.com>
Date: Fri, 20 Dec 2024 19:53:01 +0000
Subject: [PATCH 22/42] chore: fix `ruff`, `mypy` warnings (#3717)
---
altair/utils/core.py | 2 +-
altair/utils/mimebundle.py | 2 +-
altair/utils/schemapi.py | 2 +-
pyproject.toml | 4 +++-
tests/utils/test_utils.py | 2 +-
tools/schemapi/schemapi.py | 2 +-
6 files changed, 8 insertions(+), 6 deletions(-)
diff --git a/altair/utils/core.py b/altair/utils/core.py
index 66a559fad..98daa0d0d 100644
--- a/altair/utils/core.py
+++ b/altair/utils/core.py
@@ -325,7 +325,7 @@ def numpy_is_subtype(dtype: Any, subtype: Any) -> bool:
import numpy as np
try:
- return np.issubdtype(dtype, subtype)
+ return cast("bool", np.issubdtype(dtype, subtype))
except (NotImplementedError, TypeError):
return False
diff --git a/altair/utils/mimebundle.py b/altair/utils/mimebundle.py
index 56cd05a7e..9355d02bb 100644
--- a/altair/utils/mimebundle.py
+++ b/altair/utils/mimebundle.py
@@ -336,7 +336,7 @@ def _validate_normalize_engine(
def _pngxy(data):
"""
- read the (width, height) from a PNG header.
+ Read the (width, height) from a PNG header.
Taken from IPython.display
"""
diff --git a/altair/utils/schemapi.py b/altair/utils/schemapi.py
index 7eaab77c1..0416c3405 100644
--- a/altair/utils/schemapi.py
+++ b/altair/utils/schemapi.py
@@ -723,7 +723,7 @@ def _format_params_as_table(param_dict_keys: Iterable[str]) -> str:
max_column_width = 80
# Output a square table if not too big (since it is easier to read)
num_param_names = len(param_names)
- square_columns = int(ceil(num_param_names**0.5))
+ square_columns = ceil(num_param_names**0.5)
columns = min(max_column_width // max_name_length, square_columns)
# Compute roughly equal column heights to evenly divide the param names
diff --git a/pyproject.toml b/pyproject.toml
index db733c9c4..7bb051b35 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -69,7 +69,7 @@ all = [
]
dev = [
"hatch>=1.13.0",
- "ruff>=0.6.0",
+ "ruff>=0.8.4",
"duckdb>=1.0",
"ipython[kernel]",
"pandas>=1.1.3",
@@ -341,6 +341,8 @@ ignore = [
"B905",
# mutable-class-default
"RUF012",
+ # used-dummy-variable
+ "RUF052",
# suppressible-exception
# https://github.com/vega/altair/pull/3431#discussion_r1629808660
"SIM105",
diff --git a/tests/utils/test_utils.py b/tests/utils/test_utils.py
index 2e8ae1214..23120e616 100644
--- a/tests/utils/test_utils.py
+++ b/tests/utils/test_utils.py
@@ -177,7 +177,7 @@ def test_sanitize_dataframe_colnames():
# Test that non-string columns result in an error
df.columns = [4, "foo", "bar"]
- with pytest.raises(ValueError, match="Dataframe contains invalid column name: 4."):
+ with pytest.raises(ValueError, match=r"Dataframe contains invalid column name: 4."):
sanitize_pandas_dataframe(df)
diff --git a/tools/schemapi/schemapi.py b/tools/schemapi/schemapi.py
index b41c61a85..b19ddad73 100644
--- a/tools/schemapi/schemapi.py
+++ b/tools/schemapi/schemapi.py
@@ -721,7 +721,7 @@ def _format_params_as_table(param_dict_keys: Iterable[str]) -> str:
max_column_width = 80
# Output a square table if not too big (since it is easier to read)
num_param_names = len(param_names)
- square_columns = int(ceil(num_param_names**0.5))
+ square_columns = ceil(num_param_names**0.5)
columns = min(max_column_width // max_name_length, square_columns)
# Compute roughly equal column heights to evenly divide the param names
From 1208c5d79e7ff0c10c5cd60bc21462f1be2073c9 Mon Sep 17 00:00:00 2001
From: Dan Redding <125183946+dangotbanned@users.noreply.github.com>
Date: Fri, 20 Dec 2024 22:04:03 +0000
Subject: [PATCH 23/42] ci: Switch from `hatch`, `pip` to `uv` in GitHub
Actions (#3719)
---
.github/workflows/build.yml | 23 +++++++++++++----------
.github/workflows/docbuild.yml | 14 +++++++++-----
.github/workflows/lint.yml | 17 ++++++++---------
3 files changed, 30 insertions(+), 24 deletions(-)
diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
index 4b72165af..a7ad3ffb7 100644
--- a/.github/workflows/build.yml
+++ b/.github/workflows/build.yml
@@ -2,6 +2,9 @@ name: build
on: [push, pull_request]
+env:
+ UV_SYSTEM_PYTHON: 1
+
jobs:
build:
runs-on: ubuntu-latest
@@ -16,15 +19,15 @@ jobs:
uses: actions/setup-python@v5
with:
python-version: ${{ matrix.python-version }}
+ - name: Install uv
+ uses: astral-sh/setup-uv@v4
- name: Install dependencies
- run: |
- python -m pip install --upgrade pip
- pip install ".[all, dev]"
+ run: uv pip install -e ".[dev, all]"
- name: Install specific jsonschema
# Only have to execute this if we don't want the latest jsonschema version
if: ${{ matrix.jsonschema-version != 'latest' }}
run: |
- pip install jsonschema==${{ matrix.jsonschema-version }}
+ uv pip install jsonschema==${{ matrix.jsonschema-version }}
- name: Maybe uninstall optional dependencies
# We uninstall pyarrow and vegafusion for one job to test that we have not
# accidentally introduced a hard dependency on these libraries.
@@ -32,17 +35,17 @@ jobs:
# Also see https://github.com/vega/altair/pull/3114
if: ${{ matrix.python-version == '3.9' }}
run: |
- pip uninstall -y pyarrow vegafusion vegafusion-python-embed vl-convert-python anywidget
+ uv pip uninstall pyarrow vegafusion vegafusion-python-embed vl-convert-python anywidget
- name: Maybe install lowest supported pandas version
# We install the lowest supported pandas version for one job to test that
# it still works. Downgrade to the oldest versions of pandas and numpy that include
# Python 3.9 wheels, so only run this job for Python 3.9
if: ${{ matrix.python-version == '3.9' }}
run: |
- pip install pandas==1.1.3 numpy==1.19.3
+ uv pip install pandas==1.1.3 numpy==1.19.3
- name: Test that schema generation has no effect
run: |
- pip install vl-convert-python
+ uv pip install vl-convert-python
python tools/generate_schema_wrapper.py
# This gets the paths of all files which were either deleted, modified
# or are not yet tracked by Git
@@ -66,7 +69,7 @@ jobs:
fi
- name: Test with pytest
run: |
- pytest --pyargs --numprocesses=logical --doctest-modules tests
+ uv run pytest --pyargs --numprocesses=logical --doctest-modules tests
- name: Validate Vega-Lite schema
run: |
# We install all 'format' dependencies of jsonschema as check-jsonschema
@@ -74,5 +77,5 @@ jobs:
# We can always use the latest jsonschema version here.
# uri-reference check is disabled as the URIs in the Vega-Lite schema do
# not conform RFC 3986.
- pip install 'jsonschema[format]' check-jsonschema --upgrade
- check-jsonschema --check-metaschema altair/vegalite/v5/schema/vega-lite-schema.json --disable-formats uri-reference
+ uv pip install 'jsonschema[format]' check-jsonschema --upgrade
+ uv run check-jsonschema --check-metaschema altair/vegalite/v5/schema/vega-lite-schema.json --disable-formats uri-reference
diff --git a/.github/workflows/docbuild.yml b/.github/workflows/docbuild.yml
index 585630bea..72db59734 100644
--- a/.github/workflows/docbuild.yml
+++ b/.github/workflows/docbuild.yml
@@ -2,6 +2,9 @@ name: docbuild
on: [push, pull_request]
+env:
+ UV_SYSTEM_PYTHON: 1
+
jobs:
build:
runs-on: ubuntu-latest
@@ -11,15 +14,16 @@ jobs:
uses: actions/setup-python@v5
with:
python-version: "3.12"
+ - name: Install uv
+ uses: astral-sh/setup-uv@v4
- name: Install dependencies
- run: |
- python -m pip install --upgrade pip
- pip install hatch
+ run: uv pip install -e ".[dev, all, doc]"
- name: Run doc:build-html
run: |
- hatch run doc:build-html
+ mkdir -p doc/_images
+ uv run sphinx-build -b html -d doc/_build/doctrees doc doc/_build/html
- name: Run doc:doctest
run: |
- hatch run doc:doctest
+ uv run sphinx-build -b doctest -d doc/_build/doctrees doc doc/_build/doctest
diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml
index 4e89e2777..c321fc9a4 100644
--- a/.github/workflows/lint.yml
+++ b/.github/workflows/lint.yml
@@ -7,23 +7,22 @@ jobs:
runs-on: ubuntu-latest
name: ruff-mypy
steps:
- - uses: actions/checkout@v4
- - name: Set up Python 3.12
+ - name: "Set up Python"
uses: actions/setup-python@v5
with:
python-version: "3.12"
+ - uses: actions/checkout@v4
+ - name: Install uv
+ uses: astral-sh/setup-uv@v4
# Installing all dependencies and not just the linters as mypy needs them for type checking
- name: Install dependencies
- run: |
- python -m pip install --upgrade pip
- pip install hatch
+ run: uv pip install -e ".[dev, all]" --system
- name: Lint with ruff
run: |
- hatch run ruff check .
+ uv run ruff check
- name: Check formatting with ruff
run: |
- hatch run ruff format --diff .
- hatch run ruff format --check .
+ uv run ruff format --check --diff
- name: Lint with mypy
run: |
- hatch run mypy altair tests
+ uv run mypy altair tests
From 7c2d97ffe80749a7cd1b24703547e40f4918172d Mon Sep 17 00:00:00 2001
From: Dan Redding <125183946+dangotbanned@users.noreply.github.com>
Date: Sun, 29 Dec 2024 19:03:27 +0000
Subject: [PATCH 24/42] ci(typing): Add bundled stubs to `pyright.ignore`
(#3724)
---
pyproject.toml | 1 +
1 file changed, 1 insertion(+)
diff --git a/pyproject.toml b/pyproject.toml
index 7bb051b35..3b555aa43 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -476,4 +476,5 @@ ignore=[
"./altair/jupyter/", # Mostly untyped
"./tests/test_jupyter_chart.py", # Based on untyped module
"../../../**/Lib", # stdlib
+ "../../../**/typeshed*" # typeshed-fallback
]
From 16e2ed7b2a2656b5bdc72c925bc19568a166f413 Mon Sep 17 00:00:00 2001
From: "Jason N. White"
Date: Wed, 1 Jan 2025 05:32:44 -0500
Subject: [PATCH 25/42] Update LICENSE, fix license year (#3726)
---
LICENSE | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/LICENSE b/LICENSE
index 03635b4b1..da22983b8 100644
--- a/LICENSE
+++ b/LICENSE
@@ -1,4 +1,4 @@
-Copyright (c) 2015-2023, Vega-Altair Developers
+Copyright (c) 2015-2025, Vega-Altair Developers
All rights reserved.
Redistribution and use in source and binary forms, with or without
From 48e976ef9388ce08a2e871a0f67ed012b914597a Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Wed, 1 Jan 2025 14:17:42 +0000
Subject: [PATCH 26/42] ci: bump astral-sh/setup-uv from 4 to 5 in the
github-actions group (#3727)
Bumps the github-actions group with 1 update: [astral-sh/setup-uv](https://github.com/astral-sh/setup-uv).
Updates `astral-sh/setup-uv` from 4 to 5
- [Release notes](https://github.com/astral-sh/setup-uv/releases)
- [Commits](https://github.com/astral-sh/setup-uv/compare/v4...v5)
---
updated-dependencies:
- dependency-name: astral-sh/setup-uv
dependency-type: direct:production
update-type: version-update:semver-major
dependency-group: github-actions
...
Signed-off-by: dependabot[bot]
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
---
.github/workflows/build.yml | 2 +-
.github/workflows/docbuild.yml | 2 +-
.github/workflows/lint.yml | 2 +-
3 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
index a7ad3ffb7..7010faa2c 100644
--- a/.github/workflows/build.yml
+++ b/.github/workflows/build.yml
@@ -20,7 +20,7 @@ jobs:
with:
python-version: ${{ matrix.python-version }}
- name: Install uv
- uses: astral-sh/setup-uv@v4
+ uses: astral-sh/setup-uv@v5
- name: Install dependencies
run: uv pip install -e ".[dev, all]"
- name: Install specific jsonschema
diff --git a/.github/workflows/docbuild.yml b/.github/workflows/docbuild.yml
index 72db59734..1bd2aa0f6 100644
--- a/.github/workflows/docbuild.yml
+++ b/.github/workflows/docbuild.yml
@@ -15,7 +15,7 @@ jobs:
with:
python-version: "3.12"
- name: Install uv
- uses: astral-sh/setup-uv@v4
+ uses: astral-sh/setup-uv@v5
- name: Install dependencies
run: uv pip install -e ".[dev, all, doc]"
- name: Run doc:build-html
diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml
index c321fc9a4..815cad4d0 100644
--- a/.github/workflows/lint.yml
+++ b/.github/workflows/lint.yml
@@ -13,7 +13,7 @@ jobs:
python-version: "3.12"
- uses: actions/checkout@v4
- name: Install uv
- uses: astral-sh/setup-uv@v4
+ uses: astral-sh/setup-uv@v5
# Installing all dependencies and not just the linters as mypy needs them for type checking
- name: Install dependencies
run: uv pip install -e ".[dev, all]" --system
From cf73537e5108264588b35f52228cd55261c8f428 Mon Sep 17 00:00:00 2001
From: Dan Redding <125183946+dangotbanned@users.noreply.github.com>
Date: Thu, 2 Jan 2025 13:31:41 +0000
Subject: [PATCH 27/42] chore(ruff): Fix ruff warnings (#3736)
---
altair/theme.py | 3 ++-
altair/utils/_vegafusion_data.py | 4 ++--
altair/utils/compiler.py | 3 ++-
altair/utils/core.py | 24 +++++++++++-------------
altair/utils/data.py | 13 ++-----------
altair/utils/display.py | 3 ++-
altair/utils/execeval.py | 3 ++-
altair/utils/plugin_registry.py | 3 ++-
altair/vegalite/data.py | 4 +++-
altair/vegalite/v5/api.py | 4 ++--
sphinxext/code_ref.py | 4 ++--
tests/expr/test_expr.py | 4 ++--
tests/utils/test_data.py | 5 ++++-
tests/utils/test_plugin_registry.py | 2 +-
tests/utils/test_schemapi.py | 4 ++--
tests/vegalite/v5/test_theme.py | 4 ++--
tools/schemapi/codegen.py | 4 ++--
tools/update_init_file.py | 6 ++++--
tools/vega_expr.py | 4 ++--
19 files changed, 51 insertions(+), 50 deletions(-)
diff --git a/altair/theme.py b/altair/theme.py
index e77a95eb8..54adbd16f 100644
--- a/altair/theme.py
+++ b/altair/theme.py
@@ -82,7 +82,8 @@
if TYPE_CHECKING:
import sys
- from typing import Any, Callable, Literal
+ from collections.abc import Callable
+ from typing import Any, Literal
if sys.version_info >= (3, 11):
from typing import LiteralString
diff --git a/altair/utils/_vegafusion_data.py b/altair/utils/_vegafusion_data.py
index e36fb3455..7fc4ff29d 100644
--- a/altair/utils/_vegafusion_data.py
+++ b/altair/utils/_vegafusion_data.py
@@ -2,7 +2,7 @@
import uuid
from importlib.metadata import version as importlib_version
-from typing import TYPE_CHECKING, Any, Callable, Final, TypedDict, Union, overload
+from typing import TYPE_CHECKING, Any, Final, TypedDict, Union, overload
from weakref import WeakValueDictionary
from narwhals.stable.v1.dependencies import is_into_dataframe
@@ -20,7 +20,7 @@
if TYPE_CHECKING:
import sys
- from collections.abc import MutableMapping
+ from collections.abc import Callable, MutableMapping
from narwhals.stable.v1.typing import IntoDataFrame
diff --git a/altair/utils/compiler.py b/altair/utils/compiler.py
index c8af2d3de..417c8d440 100644
--- a/altair/utils/compiler.py
+++ b/altair/utils/compiler.py
@@ -1,4 +1,5 @@
-from typing import Any, Callable
+from collections.abc import Callable
+from typing import Any
from altair.utils import PluginRegistry
diff --git a/altair/utils/core.py b/altair/utils/core.py
index 98daa0d0d..59c845165 100644
--- a/altair/utils/core.py
+++ b/altair/utils/core.py
@@ -8,11 +8,11 @@
import sys
import traceback
import warnings
-from collections.abc import Iterator, Mapping, MutableMapping
+from collections.abc import Callable, Iterator, Mapping, MutableMapping
from copy import deepcopy
from itertools import groupby
from operator import itemgetter
-from typing import TYPE_CHECKING, Any, Callable, Literal, TypeVar, cast, overload
+from typing import TYPE_CHECKING, Any, Literal, TypeVar, cast, overload
import jsonschema
import narwhals.stable.v1 as nw
@@ -32,8 +32,6 @@
if TYPE_CHECKING:
- import typing as t
-
import pandas as pd
from narwhals.stable.v1.typing import IntoExpr
@@ -287,7 +285,7 @@ def merge_props_geom(feat: dict[str, Any]) -> dict[str, Any]:
return props_geom
-def sanitize_geo_interface(geo: t.MutableMapping[Any, Any]) -> dict[str, Any]:
+def sanitize_geo_interface(geo: MutableMapping[Any, Any]) -> dict[str, Any]:
"""
Santize a geo_interface to prepare it for serialization.
@@ -768,21 +766,21 @@ def decorate(cb: WrapsFunc[R], /) -> WrappedMethod[T, P, R] | WrappedFunc[P, R]:
@overload
def update_nested(
- original: t.MutableMapping[Any, Any],
- update: t.Mapping[Any, Any],
+ original: MutableMapping[Any, Any],
+ update: Mapping[Any, Any],
copy: Literal[False] = ...,
-) -> t.MutableMapping[Any, Any]: ...
+) -> MutableMapping[Any, Any]: ...
@overload
def update_nested(
- original: t.Mapping[Any, Any],
- update: t.Mapping[Any, Any],
+ original: Mapping[Any, Any],
+ update: Mapping[Any, Any],
copy: Literal[True],
-) -> t.MutableMapping[Any, Any]: ...
+) -> MutableMapping[Any, Any]: ...
def update_nested(
original: Any,
- update: t.Mapping[Any, Any],
+ update: Mapping[Any, Any],
copy: bool = False,
-) -> t.MutableMapping[Any, Any]:
+) -> MutableMapping[Any, Any]:
"""
Update nested dictionaries.
diff --git a/altair/utils/data.py b/altair/utils/data.py
index 7964d15a0..565a6df7d 100644
--- a/altair/utils/data.py
+++ b/altair/utils/data.py
@@ -4,19 +4,10 @@
import json
import random
import sys
-from collections.abc import MutableMapping, Sequence
+from collections.abc import Callable, MutableMapping, Sequence
from functools import partial
from pathlib import Path
-from typing import (
- TYPE_CHECKING,
- Any,
- Callable,
- Literal,
- TypedDict,
- TypeVar,
- Union,
- overload,
-)
+from typing import TYPE_CHECKING, Any, Literal, TypedDict, TypeVar, Union, overload
import narwhals.stable.v1 as nw
from narwhals.stable.v1.dependencies import is_pandas_dataframe
diff --git a/altair/utils/display.py b/altair/utils/display.py
index 223417a11..475bd3244 100644
--- a/altair/utils/display.py
+++ b/altair/utils/display.py
@@ -4,7 +4,8 @@
import pkgutil
import textwrap
import uuid
-from typing import TYPE_CHECKING, Any, Callable, Union
+from collections.abc import Callable
+from typing import TYPE_CHECKING, Any, Union
from ._vegafusion_data import compile_with_vegafusion, using_vegafusion
from .mimebundle import spec_to_mimebundle
diff --git a/altair/utils/execeval.py b/altair/utils/execeval.py
index e5e855479..722021ac8 100644
--- a/altair/utils/execeval.py
+++ b/altair/utils/execeval.py
@@ -2,9 +2,10 @@
import ast
import sys
-from typing import TYPE_CHECKING, Any, Callable, Literal, overload
+from typing import TYPE_CHECKING, Any, Literal, overload
if TYPE_CHECKING:
+ from collections.abc import Callable
from os import PathLike
from _typeshed import ReadableBuffer
diff --git a/altair/utils/plugin_registry.py b/altair/utils/plugin_registry.py
index 91e9462eb..f25d9c90a 100644
--- a/altair/utils/plugin_registry.py
+++ b/altair/utils/plugin_registry.py
@@ -1,9 +1,10 @@
from __future__ import annotations
import sys
+from collections.abc import Callable
from functools import partial
from importlib.metadata import entry_points
-from typing import TYPE_CHECKING, Any, Callable, Generic, TypeVar, cast
+from typing import TYPE_CHECKING, Any, Generic, TypeVar, cast
from altair.utils.deprecation import deprecated_warn
diff --git a/altair/vegalite/data.py b/altair/vegalite/data.py
index cb2d58a59..1e135a9b7 100644
--- a/altair/vegalite/data.py
+++ b/altair/vegalite/data.py
@@ -1,6 +1,6 @@
from __future__ import annotations
-from typing import TYPE_CHECKING, Callable, overload
+from typing import TYPE_CHECKING, overload
from altair.utils.core import sanitize_pandas_dataframe
from altair.utils.data import DataTransformerRegistry as _DataTransformerRegistry
@@ -15,6 +15,8 @@
)
if TYPE_CHECKING:
+ from collections.abc import Callable
+
from altair.utils.data import DataType, ToValuesReturnType
from altair.utils.plugin_registry import PluginEnabler
diff --git a/altair/vegalite/v5/api.py b/altair/vegalite/v5/api.py
index 5b3d93f86..c34748fec 100644
--- a/altair/vegalite/v5/api.py
+++ b/altair/vegalite/v5/api.py
@@ -720,7 +720,7 @@ def _reveal_parsed_shorthand(obj: Map, /) -> dict[str, Any]:
def _is_extra(*objs: Any, kwds: Map) -> Iterator[bool]:
for el in objs:
- if isinstance(el, (SchemaBase, t.Mapping)):
+ if isinstance(el, (SchemaBase, Mapping)):
item = el.to_dict(validate=False) if isinstance(el, SchemaBase) else el
yield not (item.keys() - kwds.keys()).isdisjoint(utils.SHORTHAND_KEYS)
else:
@@ -854,7 +854,7 @@ def _parse_otherwise(
conditions.update(**kwds) # type: ignore[call-arg]
selection.condition = conditions["condition"]
else:
- if not isinstance(statement, t.Mapping):
+ if not isinstance(statement, Mapping):
statement = _parse_literal(statement)
selection = conditions
selection.update(**statement, **kwds) # type: ignore[call-arg]
diff --git a/sphinxext/code_ref.py b/sphinxext/code_ref.py
index 2eba68a6a..efe9ef5e1 100644
--- a/sphinxext/code_ref.py
+++ b/sphinxext/code_ref.py
@@ -14,8 +14,8 @@
if TYPE_CHECKING:
import sys
- from collections.abc import Iterable, Iterator, Mapping, Sequence
- from typing import Any, Callable, ClassVar, TypeVar, Union
+ from collections.abc import Callable, Iterable, Iterator, Mapping, Sequence
+ from typing import Any, ClassVar, TypeVar, Union
from docutils.parsers.rst.states import RSTState, RSTStateMachine
from docutils.statemachine import StringList
diff --git a/tests/expr/test_expr.py b/tests/expr/test_expr.py
index b2200184c..4c662a073 100644
--- a/tests/expr/test_expr.py
+++ b/tests/expr/test_expr.py
@@ -4,7 +4,7 @@
import operator
import sys
from inspect import classify_class_attrs, getmembers, signature
-from typing import TYPE_CHECKING, Any, Callable, TypeVar, cast
+from typing import TYPE_CHECKING, Any, TypeVar, cast
import pytest
from jsonschema.exceptions import ValidationError
@@ -14,7 +14,7 @@
from altair.expr.core import Expression, GetAttrExpression
if TYPE_CHECKING:
- from collections.abc import Iterable, Iterator
+ from collections.abc import Callable, Iterable, Iterator
from inspect import _IntrospectableCallable
T = TypeVar("T")
diff --git a/tests/utils/test_data.py b/tests/utils/test_data.py
index b4d16d3dd..a365f03dd 100644
--- a/tests/utils/test_data.py
+++ b/tests/utils/test_data.py
@@ -1,7 +1,7 @@
from __future__ import annotations
from pathlib import Path
-from typing import Any, Callable, SupportsIndex, TypeVar
+from typing import TYPE_CHECKING, Any, SupportsIndex, TypeVar
import narwhals.stable.v1 as nw
import pandas as pd
@@ -17,6 +17,9 @@
to_values,
)
+if TYPE_CHECKING:
+ from collections.abc import Callable
+
T = TypeVar("T")
diff --git a/tests/utils/test_plugin_registry.py b/tests/utils/test_plugin_registry.py
index 051d2cdcf..d200bbe96 100644
--- a/tests/utils/test_plugin_registry.py
+++ b/tests/utils/test_plugin_registry.py
@@ -1,4 +1,4 @@
-from typing import Callable
+from collections.abc import Callable
from altair.utils.plugin_registry import PluginRegistry
diff --git a/tests/utils/test_schemapi.py b/tests/utils/test_schemapi.py
index 72d01c0fb..1f847e8dd 100644
--- a/tests/utils/test_schemapi.py
+++ b/tests/utils/test_schemapi.py
@@ -11,7 +11,7 @@
import warnings
from collections import deque
from functools import partial
-from typing import TYPE_CHECKING, Any, Callable
+from typing import TYPE_CHECKING, Any
import jsonschema
import jsonschema.exceptions
@@ -35,7 +35,7 @@
from vega_datasets import data
if TYPE_CHECKING:
- from collections.abc import Iterable, Sequence
+ from collections.abc import Callable, Iterable, Sequence
from narwhals.stable.v1.typing import IntoDataFrame
diff --git a/tests/vegalite/v5/test_theme.py b/tests/vegalite/v5/test_theme.py
index 45eda9637..564f8a6ce 100644
--- a/tests/vegalite/v5/test_theme.py
+++ b/tests/vegalite/v5/test_theme.py
@@ -1,9 +1,9 @@
from __future__ import annotations
import json
-from collections.abc import Mapping, Set
+from collections.abc import Callable, Mapping, Set
from pathlib import Path
-from typing import TYPE_CHECKING, Any, Callable, Literal, TypeVar, cast, get_args
+from typing import TYPE_CHECKING, Any, Literal, TypeVar, cast, get_args
import pytest
diff --git a/tools/schemapi/codegen.py b/tools/schemapi/codegen.py
index dbb3f5974..ad1f4dcb1 100644
--- a/tools/schemapi/codegen.py
+++ b/tools/schemapi/codegen.py
@@ -5,11 +5,11 @@
import re
import sys
import textwrap
-from collections.abc import Iterable, Iterator
+from collections.abc import Callable, Iterable, Iterator
from dataclasses import dataclass
from itertools import chain, starmap
from operator import attrgetter
-from typing import Any, Callable, ClassVar, Final, Literal, TypeVar, Union
+from typing import Any, ClassVar, Final, Literal, TypeVar, Union
from .utils import (
Grouped,
diff --git a/tools/update_init_file.py b/tools/update_init_file.py
index 5ac9c7cb4..7faa837d3 100644
--- a/tools/update_init_file.py
+++ b/tools/update_init_file.py
@@ -2,8 +2,10 @@
from __future__ import annotations
+import collections.abc as cabc
import typing as t
import typing_extensions as te
+from collections.abc import Sequence
from importlib import import_module as _import_module
from importlib.util import find_spec as _find_spec
from inspect import getattr_static, ismodule
@@ -27,10 +29,10 @@
t.Any,
t.Literal,
t.Union,
- t.Iterable,
+ cabc.Iterable,
t.Protocol,
te.Protocol,
- t.Sequence,
+ Sequence,
t.IO,
annotations,
te.Required,
diff --git a/tools/vega_expr.py b/tools/vega_expr.py
index aa42e5ed6..942bcd6da 100644
--- a/tools/vega_expr.py
+++ b/tools/vega_expr.py
@@ -16,7 +16,7 @@
from itertools import chain
from textwrap import TextWrapper as _TextWrapper
from textwrap import indent
-from typing import TYPE_CHECKING, Any, Callable, ClassVar, Literal, overload
+from typing import TYPE_CHECKING, Any, ClassVar, Literal, overload
from tools.codemod import ruff
from tools.markup import RSTParse, Token, read_ast_tokens
@@ -25,7 +25,7 @@
if TYPE_CHECKING:
import sys
- from collections.abc import Iterable, Iterator, Mapping, Sequence
+ from collections.abc import Callable, Iterable, Iterator, Mapping, Sequence
from pathlib import Path
from re import Match, Pattern
From 582a364fa2c9611099cab6840a26ff326b05074b Mon Sep 17 00:00:00 2001
From: Dan Redding <125183946+dangotbanned@users.noreply.github.com>
Date: Thu, 2 Jan 2025 14:15:47 +0000
Subject: [PATCH 28/42] feat: Show python types in `ValidationError` messages
(#3735)
---
altair/utils/schemapi.py | 59 +++++++++++++++++++++++++++---------
tests/utils/test_schemapi.py | 47 ++++++++++++++--------------
tools/schemapi/schemapi.py | 59 +++++++++++++++++++++++++++---------
3 files changed, 114 insertions(+), 51 deletions(-)
diff --git a/altair/utils/schemapi.py b/altair/utils/schemapi.py
index 0416c3405..cf5f2e10e 100644
--- a/altair/utils/schemapi.py
+++ b/altair/utils/schemapi.py
@@ -7,6 +7,7 @@
import datetime as dt
import inspect
import json
+import operator
import sys
import textwrap
from collections import defaultdict
@@ -48,6 +49,7 @@
from types import ModuleType
from typing import ClassVar
+ from jsonschema.exceptions import ValidationError
from referencing import Registry
from altair.typing import ChartType
@@ -589,7 +591,23 @@ def _resolve_references(
return schema
+def _validator_values(errors: Iterable[ValidationError], /) -> Iterator[str]:
+ """Unwrap each error's ``.validator_value``, convince ``mypy`` it stores a string."""
+ for err in errors:
+ yield cast("str", err.validator_value)
+
+
class SchemaValidationError(jsonschema.ValidationError):
+ _JS_TO_PY: ClassVar[Mapping[str, str]] = {
+ "boolean": "bool",
+ "integer": "int",
+ "number": "float",
+ "string": "str",
+ "null": "None",
+ "object": "Mapping[str, Any]",
+ "array": "Sequence",
+ }
+
def __init__(self, obj: SchemaBase, err: jsonschema.ValidationError) -> None:
"""
A wrapper for ``jsonschema.ValidationError`` with friendlier traceback.
@@ -762,26 +780,39 @@ def split_into_equal_parts(n: int, p: int) -> list[int]:
param_names_table += "\n"
return param_names_table
+ def _format_type_reprs(self, errors: Iterable[ValidationError], /) -> str:
+ """
+ Translate jsonschema types to how they appear in annotations.
+
+ Adapts parts of:
+ - `tools.schemapi.utils.sort_type_reprs`_
+ - `tools.schemapi.utils.SchemaInfo.to_type_repr`_
+
+ .. _tools.schemapi.utils.sort_type_reprs:
+ https://github.com/vega/altair/blob/48e976ef9388ce08a2e871a0f67ed012b914597a/tools/schemapi/utils.py#L1106-L1146
+ .. _tools.schemapi.utils.SchemaInfo.to_type_repr:
+ https://github.com/vega/altair/blob/48e976ef9388ce08a2e871a0f67ed012b914597a/tools/schemapi/utils.py#L449-L543
+ """
+ to_py_types = (
+ self._JS_TO_PY.get(val, val) for val in _validator_values(errors)
+ )
+ it = sorted(to_py_types, key=str.lower)
+ it = sorted(it, key=len)
+ it = sorted(it, key=partial(operator.eq, "None"))
+ return f"of type `{' | '.join(it)}`"
+
def _get_default_error_message(
self,
errors: ValidationErrorList,
) -> str:
bullet_points: list[str] = []
errors_by_validator = _group_errors_by_validator(errors)
- if "enum" in errors_by_validator:
- for error in errors_by_validator["enum"]:
- bullet_points.append(f"one of {error.validator_value}")
-
- if "type" in errors_by_validator:
- types = [f"'{err.validator_value}'" for err in errors_by_validator["type"]]
- point = "of type "
- if len(types) == 1:
- point += types[0]
- elif len(types) == 2:
- point += f"{types[0]} or {types[1]}"
- else:
- point += ", ".join(types[:-1]) + f", or {types[-1]}"
- bullet_points.append(point)
+ if errs_enum := errors_by_validator.get("enum", None):
+ bullet_points.extend(
+ f"one of {val}" for val in _validator_values(errs_enum)
+ )
+ if errs_type := errors_by_validator.get("type", None):
+ bullet_points.append(self._format_type_reprs(errs_type))
# It should not matter which error is specifically used as they are all
# about the same offending instance (i.e. invalid value), so we can just
diff --git a/tests/utils/test_schemapi.py b/tests/utils/test_schemapi.py
index 1f847e8dd..1059b35c1 100644
--- a/tests/utils/test_schemapi.py
+++ b/tests/utils/test_schemapi.py
@@ -7,6 +7,7 @@
import io
import json
import pickle
+import re
import types
import warnings
from collections import deque
@@ -661,7 +662,7 @@ def id_func_chart_error_example(val) -> str:
chart_funcs_error_message: list[tuple[Callable[..., Any], str]] = [
(
chart_error_example__invalid_y_option_value_unknown_x_option,
- r"""Multiple errors were found.
+ rf"""Multiple errors were found.
Error 1: `X` has no parameter named 'unknown'
@@ -676,21 +677,21 @@ def id_func_chart_error_example(val) -> str:
Error 2: 'asdf' is an invalid value for `stack`. Valid values are:
- One of \['zero', 'center', 'normalize'\]
- - Of type 'null' or 'boolean'$""",
+ - Of type {re.escape("`bool | None`")}$""",
),
(
chart_error_example__wrong_tooltip_type_in_faceted_chart,
- r"""'\['wrong'\]' is an invalid value for `field`. Valid values are of type 'string' or 'object'.$""",
+ rf"""'\['wrong'\]' is an invalid value for `field`. Valid values are of type {re.escape("`str | Mapping[str, Any]`")}.$""",
),
(
chart_error_example__wrong_tooltip_type_in_layered_chart,
- r"""'\['wrong'\]' is an invalid value for `field`. Valid values are of type 'string' or 'object'.$""",
+ rf"""'\['wrong'\]' is an invalid value for `field`. Valid values are of type {re.escape("`str | Mapping[str, Any]`")}.$""",
),
(
chart_error_example__two_errors_in_layered_chart,
- r"""Multiple errors were found.
+ rf"""Multiple errors were found.
- Error 1: '\['wrong'\]' is an invalid value for `field`. Valid values are of type 'string' or 'object'.
+ Error 1: '\['wrong'\]' is an invalid value for `field`. Valid values are of type {re.escape("`str | Mapping[str, Any]`")}.
Error 2: `Color` has no parameter named 'invalidArgument'
@@ -703,17 +704,17 @@ def id_func_chart_error_example(val) -> str:
),
(
chart_error_example__two_errors_in_complex_concat_layered_chart,
- r"""Multiple errors were found.
+ rf"""Multiple errors were found.
- Error 1: '\['wrong'\]' is an invalid value for `field`. Valid values are of type 'string' or 'object'.
+ Error 1: '\['wrong'\]' is an invalid value for `field`. Valid values are of type {re.escape("`str | Mapping[str, Any]`")}.
- Error 2: '4' is an invalid value for `bandPosition`. Valid values are of type 'number'.$""",
+ Error 2: '4' is an invalid value for `bandPosition`. Valid values are of type `float`.$""",
),
(
chart_error_example__three_errors_in_complex_concat_layered_chart,
- r"""Multiple errors were found.
+ rf"""Multiple errors were found.
- Error 1: '\['wrong'\]' is an invalid value for `field`. Valid values are of type 'string' or 'object'.
+ Error 1: '\['wrong'\]' is an invalid value for `field`. Valid values are of type {re.escape("`str | Mapping[str, Any]`")}.
Error 2: `Color` has no parameter named 'invalidArgument'
@@ -724,7 +725,7 @@ def id_func_chart_error_example(val) -> str:
See the help for `Color` to read the full description of these parameters
- Error 3: '4' is an invalid value for `bandPosition`. Valid values are of type 'number'.$""",
+ Error 3: '4' is an invalid value for `bandPosition`. Valid values are of type `float`.$""",
),
(
chart_error_example__two_errors_with_one_in_nested_layered_chart,
@@ -764,25 +765,25 @@ def id_func_chart_error_example(val) -> str:
),
(
chart_error_example__invalid_y_option_value,
- r"""'asdf' is an invalid value for `stack`. Valid values are:
+ rf"""'asdf' is an invalid value for `stack`. Valid values are:
- One of \['zero', 'center', 'normalize'\]
- - Of type 'null' or 'boolean'$""",
+ - Of type {re.escape("`bool | None`")}$""",
),
(
chart_error_example__invalid_y_option_value_with_condition,
- r"""'asdf' is an invalid value for `stack`. Valid values are:
+ rf"""'asdf' is an invalid value for `stack`. Valid values are:
- One of \['zero', 'center', 'normalize'\]
- - Of type 'null' or 'boolean'$""",
+ - Of type {re.escape("`bool | None`")}$""",
),
(
chart_error_example__hconcat,
- r"""'{'text': 'Horsepower', 'align': 'right'}' is an invalid value for `title`. Valid values are of type 'string', 'array', or 'null'.$""",
+ rf"""'{{'text': 'Horsepower', 'align': 'right'}}' is an invalid value for `title`. Valid values are of type {re.escape("`str | Sequence | None`")}.$""",
),
(
chart_error_example__invalid_timeunit_value,
- r"""'invalid_value' is an invalid value for `timeUnit`. Valid values are:
+ rf"""'invalid_value' is an invalid value for `timeUnit`. Valid values are:
- One of \['year', 'quarter', 'month', 'week', 'day', 'dayofyear', 'date', 'hours', 'minutes', 'seconds', 'milliseconds'\]
- One of \['utcyear', 'utcquarter', 'utcmonth', 'utcweek', 'utcday', 'utcdayofyear', 'utcdate', 'utchours', 'utcminutes', 'utcseconds', 'utcmilliseconds'\]
@@ -790,20 +791,20 @@ def id_func_chart_error_example(val) -> str:
- One of \['utcyearquarter', 'utcyearquartermonth', 'utcyearmonth', 'utcyearmonthdate', 'utcyearmonthdatehours', 'utcyearmonthdatehoursminutes', 'utcyearmonthdatehoursminutesseconds', 'utcyearweek', 'utcyearweekday', 'utcyearweekdayhours', 'utcyearweekdayhoursminutes', 'utcyearweekdayhoursminutesseconds', 'utcyeardayofyear', 'utcquartermonth', 'utcmonthdate', 'utcmonthdatehours', 'utcmonthdatehoursminutes', 'utcmonthdatehoursminutesseconds', 'utcweekday', 'utcweekdayhours', 'utcweekdayhoursminutes', 'utcweekdayhoursminutesseconds', 'utcdayhours', 'utcdayhoursminutes', 'utcdayhoursminutesseconds', 'utchoursminutes', 'utchoursminutesseconds', 'utcminutesseconds', 'utcsecondsmilliseconds'\]
- One of \['binnedyear', 'binnedyearquarter', 'binnedyearquartermonth', 'binnedyearmonth', 'binnedyearmonthdate', 'binnedyearmonthdatehours', 'binnedyearmonthdatehoursminutes', 'binnedyearmonthdatehoursminutesseconds', 'binnedyearweek', 'binnedyearweekday', 'binnedyearweekdayhours', 'binnedyearweekdayhoursminutes', 'binnedyearweekdayhoursminutesseconds', 'binnedyeardayofyear'\]
- One of \['binnedutcyear', 'binnedutcyearquarter', 'binnedutcyearquartermonth', 'binnedutcyearmonth', 'binnedutcyearmonthdate', 'binnedutcyearmonthdatehours', 'binnedutcyearmonthdatehoursminutes', 'binnedutcyearmonthdatehoursminutesseconds', 'binnedutcyearweek', 'binnedutcyearweekday', 'binnedutcyearweekdayhours', 'binnedutcyearweekdayhoursminutes', 'binnedutcyearweekdayhoursminutesseconds', 'binnedutcyeardayofyear'\]
- - Of type 'object'$""",
+ - Of type {re.escape("`Mapping[str, Any]`")}$""",
),
(
chart_error_example__invalid_sort_value,
- r"""'invalid_value' is an invalid value for `sort`. Valid values are:
+ rf"""'invalid_value' is an invalid value for `sort`. Valid values are:
- One of \['ascending', 'descending'\]
- One of \['x', 'y', 'color', 'fill', 'stroke', 'strokeWidth', 'size', 'shape', 'fillOpacity', 'strokeOpacity', 'opacity', 'text'\]
- One of \['-x', '-y', '-color', '-fill', '-stroke', '-strokeWidth', '-size', '-shape', '-fillOpacity', '-strokeOpacity', '-opacity', '-text'\]
- - Of type 'array', 'object', or 'null'$""",
+ - Of type {re.escape("`Sequence | Mapping[str, Any] | None`")}$""",
),
(
chart_error_example__invalid_bandposition_value,
- r"""'4' is an invalid value for `bandPosition`. Valid values are of type 'number'.$""",
+ r"""'4' is an invalid value for `bandPosition`. Valid values are of type `float`.$""",
),
(
chart_error_example__invalid_type,
@@ -823,7 +824,7 @@ def id_func_chart_error_example(val) -> str:
),
(
chart_error_example__invalid_value_type,
- r"""'1' is an invalid value for `value`. Valid values are of type 'object', 'string', or 'null'.$""",
+ rf"""'1' is an invalid value for `value`. Valid values are of type {re.escape("`str | Mapping[str, Any] | None`")}.$""",
),
(
chart_error_example__four_errors_hide_fourth,
diff --git a/tools/schemapi/schemapi.py b/tools/schemapi/schemapi.py
index b19ddad73..5ee638266 100644
--- a/tools/schemapi/schemapi.py
+++ b/tools/schemapi/schemapi.py
@@ -5,6 +5,7 @@
import datetime as dt
import inspect
import json
+import operator
import sys
import textwrap
from collections import defaultdict
@@ -46,6 +47,7 @@
from types import ModuleType
from typing import ClassVar
+ from jsonschema.exceptions import ValidationError
from referencing import Registry
from altair.typing import ChartType
@@ -587,7 +589,23 @@ def _resolve_references(
return schema
+def _validator_values(errors: Iterable[ValidationError], /) -> Iterator[str]:
+ """Unwrap each error's ``.validator_value``, convince ``mypy`` it stores a string."""
+ for err in errors:
+ yield cast("str", err.validator_value)
+
+
class SchemaValidationError(jsonschema.ValidationError):
+ _JS_TO_PY: ClassVar[Mapping[str, str]] = {
+ "boolean": "bool",
+ "integer": "int",
+ "number": "float",
+ "string": "str",
+ "null": "None",
+ "object": "Mapping[str, Any]",
+ "array": "Sequence",
+ }
+
def __init__(self, obj: SchemaBase, err: jsonschema.ValidationError) -> None:
"""
A wrapper for ``jsonschema.ValidationError`` with friendlier traceback.
@@ -760,26 +778,39 @@ def split_into_equal_parts(n: int, p: int) -> list[int]:
param_names_table += "\n"
return param_names_table
+ def _format_type_reprs(self, errors: Iterable[ValidationError], /) -> str:
+ """
+ Translate jsonschema types to how they appear in annotations.
+
+ Adapts parts of:
+ - `tools.schemapi.utils.sort_type_reprs`_
+ - `tools.schemapi.utils.SchemaInfo.to_type_repr`_
+
+ .. _tools.schemapi.utils.sort_type_reprs:
+ https://github.com/vega/altair/blob/48e976ef9388ce08a2e871a0f67ed012b914597a/tools/schemapi/utils.py#L1106-L1146
+ .. _tools.schemapi.utils.SchemaInfo.to_type_repr:
+ https://github.com/vega/altair/blob/48e976ef9388ce08a2e871a0f67ed012b914597a/tools/schemapi/utils.py#L449-L543
+ """
+ to_py_types = (
+ self._JS_TO_PY.get(val, val) for val in _validator_values(errors)
+ )
+ it = sorted(to_py_types, key=str.lower)
+ it = sorted(it, key=len)
+ it = sorted(it, key=partial(operator.eq, "None"))
+ return f"of type `{' | '.join(it)}`"
+
def _get_default_error_message(
self,
errors: ValidationErrorList,
) -> str:
bullet_points: list[str] = []
errors_by_validator = _group_errors_by_validator(errors)
- if "enum" in errors_by_validator:
- for error in errors_by_validator["enum"]:
- bullet_points.append(f"one of {error.validator_value}")
-
- if "type" in errors_by_validator:
- types = [f"'{err.validator_value}'" for err in errors_by_validator["type"]]
- point = "of type "
- if len(types) == 1:
- point += types[0]
- elif len(types) == 2:
- point += f"{types[0]} or {types[1]}"
- else:
- point += ", ".join(types[:-1]) + f", or {types[-1]}"
- bullet_points.append(point)
+ if errs_enum := errors_by_validator.get("enum", None):
+ bullet_points.extend(
+ f"one of {val}" for val in _validator_values(errs_enum)
+ )
+ if errs_type := errors_by_validator.get("type", None):
+ bullet_points.append(self._format_type_reprs(errs_type))
# It should not matter which error is specifically used as they are all
# about the same offending instance (i.e. invalid value), so we can just
From 709bbdf298c1404b352c2e4733fdef96700d6fc3 Mon Sep 17 00:00:00 2001
From: Dan Redding <125183946+dangotbanned@users.noreply.github.com>
Date: Thu, 2 Jan 2025 19:48:30 +0000
Subject: [PATCH 29/42] chore(typing): fix `mypy>=1.14.0` warnings (#3739)
---
tools/markup.py | 40 ++++++++++++++++++++++++++--------------
tools/vega_expr.py | 21 ++++-----------------
2 files changed, 30 insertions(+), 31 deletions(-)
diff --git a/tools/markup.py b/tools/markup.py
index 88239299c..176719022 100644
--- a/tools/markup.py
+++ b/tools/markup.py
@@ -34,6 +34,21 @@
_RE_LIQUID_INCLUDE: Pattern[str] = re.compile(r"( \{% include.+%\})")
+_PRE_PARSE_REPLACEMENTS: tuple[str, str] = (
+ "https://en.wikipedia.org/wiki/Uniform_distribution_(continuous)",
+ "https://en.wikipedia.org/wiki/Continuous_uniform_distribution",
+)
+"""
+Replacement to apply *prior* to parsing as markdown.
+
+**HACK**: Closing parenthesis messes up markdown parsing, replace with resolved redirect wikipedia URL.
+
+TODO
+----
+Remove if this gets fixed upstream, via https://github.com/vega/vega/pull/3996
+"""
+
+
class RSTRenderer(_RSTRenderer):
def __init__(self) -> None:
super().__init__()
@@ -68,8 +83,11 @@ def __init__(
super().__init__(renderer, block, inline, plugins)
def __call__(self, s: str) -> str:
- s = super().__call__(s) # pyright: ignore[reportAssignmentType]
- return unescape(s).replace(r"\ ,", ",").replace(r"\ ", " ")
+ r = super().__call__(s)
+ if isinstance(r, str):
+ return unescape(r).replace(r"\ ,", ",").replace(r"\ ", " ")
+ msg = f"Expected `str` but got {type(r).__name__!r}"
+ raise TypeError(msg)
def render_tokens(self, tokens: Iterable[Token], /) -> str:
"""
@@ -129,14 +147,12 @@ def process_text(self, text: str, state: InlineState) -> None:
Removes `liquid`_ templating markup.
.. _liquid:
- https://shopify.github.io/liquid/
+ https://shopify.github.io/liquid/
"""
state.append_token({"type": "text", "raw": _RE_LIQUID_INCLUDE.sub(r"", text)})
-def read_ast_tokens(
- source: Url | Path, /, replacements: list[tuple[str, str]] | None = None
-) -> list[Token]:
+def read_ast_tokens(source: Url | Path, /) -> list[Token]:
"""
Read from ``source``, drop ``BlockState``.
@@ -144,17 +160,13 @@ def read_ast_tokens(
"""
markdown = _Markdown(renderer=None, inline=InlineParser())
if isinstance(source, Path):
- token_text = source.read_text()
+ text = source.read_text()
else:
with request.urlopen(source) as response:
- token_text = response.read().decode("utf-8")
-
- # Apply replacements
- if replacements:
- for replacement in replacements:
- token_text = token_text.replace(replacement[0], replacement[1])
+ text = response.read().decode("utf-8")
- tokens = markdown.parse(token_text, markdown.block.state_cls())
+ text = text.replace(*_PRE_PARSE_REPLACEMENTS)
+ tokens: Any = markdown.parse(text)
return tokens[0]
diff --git a/tools/vega_expr.py b/tools/vega_expr.py
index 942bcd6da..7e7a33035 100644
--- a/tools/vega_expr.py
+++ b/tools/vega_expr.py
@@ -47,14 +47,6 @@
EXPRESSIONS_DOCS_URL: LiteralString = f"{VEGA_DOCS_URL}expressions/"
EXPRESSIONS_URL_TEMPLATE = "https://raw.githubusercontent.com/vega/vega/refs/tags/{version}/docs/docs/expressions.md"
-# Replacements to apply prior to parsing as markdown
-PRE_PARSE_REPLACEMENTS = [
- # Closing paren messes up markdown parsing, replace with equivalent wikipedia URL
- (
- "https://en.wikipedia.org/wiki/Uniform_distribution_(continuous)",
- "https://en.wikipedia.org/wiki/Continuous_uniform_distribution",
- )
-]
# NOTE: Regex patterns
FUNCTION_DEF_LINE: Pattern[str] = re.compile(
@@ -939,15 +931,13 @@ def italics_to_backticks(s: str, names: Iterable[str], /) -> str:
return re.sub(pattern, r"\g``\g``\g", s)
-def parse_expressions(
- source: Url | Path, /, replacements: list[tuple[str, str]] | None = None
-) -> Iterator[VegaExprDef]:
+def parse_expressions(source: Url | Path, /) -> Iterator[VegaExprDef]:
"""
Download remote or read local `.md` resource and eagerly parse signatures of relevant definitions.
Yields with docs to ensure each can use all remapped names, regardless of the order they appear.
"""
- tokens = read_ast_tokens(source, replacements=replacements)
+ tokens = read_ast_tokens(source)
expr_defs = tuple(VegaExprDef.from_tokens(tokens))
VegaExprDef.remap_title.refresh()
for expr_def in expr_defs:
@@ -971,7 +961,7 @@ def write_expr_module(version: str, output: Path, *, header: str) -> None:
# Retrieve all of the links used in expr method docstrings,
# so we can include them in the class docstrings, so that sphinx
# will find them.
- expr_defs = parse_expressions(url, replacements=PRE_PARSE_REPLACEMENTS)
+ expr_defs = parse_expressions(url)
links = {}
rst_renderer = RSTRenderer()
@@ -1001,10 +991,7 @@ def write_expr_module(version: str, output: Path, *, header: str) -> None:
)
contents = chain(
content,
- (
- expr_def.render()
- for expr_def in parse_expressions(url, replacements=PRE_PARSE_REPLACEMENTS)
- ),
+ (expr_def.render() for expr_def in parse_expressions(url)),
[MODULE_POST],
)
print(f"Generating\n {url!s}\n ->{output!s}")
From b6253ffc120c5a03661a6ec55e3c9375d716d873 Mon Sep 17 00:00:00 2001
From: Dan Redding <125183946+dangotbanned@users.noreply.github.com>
Date: Thu, 2 Jan 2025 20:58:22 +0000
Subject: [PATCH 30/42] fix(typing): Resolve LSP violation for `ChartType.data`
(#3740)
---
altair/vegalite/v5/api.py | 15 +++++--------
altair/vegalite/v5/schema/core.py | 37 ++++++++++++++++---------------
tools/generate_schema_wrapper.py | 2 ++
tools/schemapi/utils.py | 5 +++++
4 files changed, 32 insertions(+), 27 deletions(-)
diff --git a/altair/vegalite/v5/api.py b/altair/vegalite/v5/api.py
index c34748fec..e46e3070a 100644
--- a/altair/vegalite/v5/api.py
+++ b/altair/vegalite/v5/api.py
@@ -3939,11 +3939,8 @@ def __init__(
height: Optional[int | dict | Step | Literal["container"]] = Undefined,
**kwargs: Any,
) -> None:
- # Data type hints won't match with what TopLevelUnitSpec expects
- # as there is some data processing happening when converting to
- # a VL spec
super().__init__(
- data=data, # type: ignore[arg-type]
+ data=data,
encoding=encoding,
mark=mark,
width=width,
@@ -4328,7 +4325,7 @@ def __init__(
) -> None:
for spec in concat:
_check_if_valid_subspec(spec, "ConcatChart")
- super().__init__(data=data, concat=list(concat), columns=columns, **kwargs) # type: ignore[arg-type]
+ super().__init__(data=data, concat=list(concat), columns=columns, **kwargs)
self.concat: list[ChartType]
self.params: Optional[Sequence[_Parameter]]
self.data: Optional[ChartDataType]
@@ -4432,7 +4429,7 @@ def __init__(
) -> None:
for spec in hconcat:
_check_if_valid_subspec(spec, "HConcatChart")
- super().__init__(data=data, hconcat=list(hconcat), **kwargs) # type: ignore[arg-type]
+ super().__init__(data=data, hconcat=list(hconcat), **kwargs)
self.hconcat: list[ChartType]
self.params: Optional[Sequence[_Parameter]]
self.data: Optional[ChartDataType]
@@ -4536,7 +4533,7 @@ def __init__(
) -> None:
for spec in vconcat:
_check_if_valid_subspec(spec, "VConcatChart")
- super().__init__(data=data, vconcat=list(vconcat), **kwargs) # type: ignore[arg-type]
+ super().__init__(data=data, vconcat=list(vconcat), **kwargs)
self.vconcat: list[ChartType]
self.params: Optional[Sequence[_Parameter]]
self.data: Optional[ChartDataType]
@@ -4644,7 +4641,7 @@ def __init__(
for spec in layer:
_check_if_valid_subspec(spec, "LayerChart")
_check_if_can_be_layered(spec)
- super().__init__(data=data, layer=list(layer), **kwargs) # type: ignore[arg-type]
+ super().__init__(data=data, layer=list(layer), **kwargs)
self.layer: list[ChartType]
self.params: Optional[Sequence[_Parameter]]
self.data: Optional[ChartDataType]
@@ -4775,7 +4772,7 @@ def __init__(
_spec_as_list = [spec]
params, _spec_as_list = _combine_subchart_params(params, _spec_as_list)
spec = _spec_as_list[0]
- super().__init__(data=data, spec=spec, facet=facet, params=params, **kwargs) # type: ignore[arg-type]
+ super().__init__(data=data, spec=spec, facet=facet, params=params, **kwargs)
self.data: Optional[ChartDataType]
self.spec: ChartType
self.params: Optional[Sequence[_Parameter]]
diff --git a/altair/vegalite/v5/schema/core.py b/altair/vegalite/v5/schema/core.py
index fa2df587a..a2481bafc 100644
--- a/altair/vegalite/v5/schema/core.py
+++ b/altair/vegalite/v5/schema/core.py
@@ -20,6 +20,7 @@
from altair import Parameter
from altair.typing import Optional
+ from altair.vegalite.v5.api import ChartDataType
from ._typing import * # noqa: F403
@@ -7887,7 +7888,7 @@ class GenericUnitSpecEncodingAnyMark(VegaLiteSchema):
def __init__(
self,
mark: Optional[SchemaBase | Map | Mark_T | CompositeMark_T] = Undefined,
- data: Optional[SchemaBase | Map | None] = Undefined,
+ data: Optional[SchemaBase | ChartDataType | Map | None] = Undefined,
description: Optional[str] = Undefined,
encoding: Optional[SchemaBase | Map] = Undefined,
name: Optional[str] = Undefined,
@@ -11062,7 +11063,7 @@ class LookupData(VegaLiteSchema):
def __init__(
self,
- data: Optional[SchemaBase | Map] = Undefined,
+ data: Optional[SchemaBase | ChartDataType | Map] = Undefined,
key: Optional[str | SchemaBase] = Undefined,
fields: Optional[Sequence[str | SchemaBase]] = Undefined,
**kwds,
@@ -21055,7 +21056,7 @@ def __init__(
bounds: Optional[Literal["full", "flush"]] = Undefined,
center: Optional[bool | SchemaBase | Map] = Undefined,
columns: Optional[float] = Undefined,
- data: Optional[SchemaBase | Map | None] = Undefined,
+ data: Optional[SchemaBase | ChartDataType | Map | None] = Undefined,
description: Optional[str] = Undefined,
name: Optional[str] = Undefined,
resolve: Optional[SchemaBase | Map] = Undefined,
@@ -21182,7 +21183,7 @@ def __init__(
bounds: Optional[Literal["full", "flush"]] = Undefined,
center: Optional[bool | SchemaBase | Map] = Undefined,
columns: Optional[float] = Undefined,
- data: Optional[SchemaBase | Map | None] = Undefined,
+ data: Optional[SchemaBase | ChartDataType | Map | None] = Undefined,
description: Optional[str] = Undefined,
name: Optional[str] = Undefined,
resolve: Optional[SchemaBase | Map] = Undefined,
@@ -21340,7 +21341,7 @@ def __init__(
align: Optional[SchemaBase | Map | LayoutAlign_T] = Undefined,
bounds: Optional[Literal["full", "flush"]] = Undefined,
center: Optional[bool | SchemaBase | Map] = Undefined,
- data: Optional[SchemaBase | Map | None] = Undefined,
+ data: Optional[SchemaBase | ChartDataType | Map | None] = Undefined,
description: Optional[str] = Undefined,
encoding: Optional[SchemaBase | Map] = Undefined,
height: Optional[float | SchemaBase | Literal["container"] | Map] = Undefined,
@@ -21429,7 +21430,7 @@ def __init__(
hconcat: Optional[Sequence[SchemaBase | Map]] = Undefined,
bounds: Optional[Literal["full", "flush"]] = Undefined,
center: Optional[bool] = Undefined,
- data: Optional[SchemaBase | Map | None] = Undefined,
+ data: Optional[SchemaBase | ChartDataType | Map | None] = Undefined,
description: Optional[str] = Undefined,
name: Optional[str] = Undefined,
resolve: Optional[SchemaBase | Map] = Undefined,
@@ -21537,7 +21538,7 @@ class LayerSpec(Spec, NonNormalizedSpec):
def __init__(
self,
layer: Optional[Sequence[SchemaBase | Map]] = Undefined,
- data: Optional[SchemaBase | Map | None] = Undefined,
+ data: Optional[SchemaBase | ChartDataType | Map | None] = Undefined,
description: Optional[str] = Undefined,
encoding: Optional[SchemaBase | Map] = Undefined,
height: Optional[float | SchemaBase | Literal["container"] | Map] = Undefined,
@@ -21677,7 +21678,7 @@ def __init__(
bounds: Optional[Literal["full", "flush"]] = Undefined,
center: Optional[bool | SchemaBase | Map] = Undefined,
columns: Optional[float] = Undefined,
- data: Optional[SchemaBase | Map | None] = Undefined,
+ data: Optional[SchemaBase | ChartDataType | Map | None] = Undefined,
description: Optional[str] = Undefined,
name: Optional[str] = Undefined,
resolve: Optional[SchemaBase | Map] = Undefined,
@@ -21807,7 +21808,7 @@ def __init__(
bounds: Optional[Literal["full", "flush"]] = Undefined,
center: Optional[bool | SchemaBase | Map] = Undefined,
columns: Optional[float] = Undefined,
- data: Optional[SchemaBase | Map | None] = Undefined,
+ data: Optional[SchemaBase | ChartDataType | Map | None] = Undefined,
description: Optional[str] = Undefined,
name: Optional[str] = Undefined,
resolve: Optional[SchemaBase | Map] = Undefined,
@@ -24400,7 +24401,7 @@ def __init__(
center: Optional[bool | SchemaBase | Map] = Undefined,
columns: Optional[float] = Undefined,
config: Optional[SchemaBase | Map] = Undefined,
- data: Optional[SchemaBase | Map | None] = Undefined,
+ data: Optional[SchemaBase | ChartDataType | Map | None] = Undefined,
datasets: Optional[SchemaBase | Map] = Undefined,
description: Optional[str] = Undefined,
name: Optional[str] = Undefined,
@@ -24565,7 +24566,7 @@ class TopLevelFacetSpec(TopLevelSpec):
def __init__(
self,
- data: Optional[SchemaBase | Map | None] = Undefined,
+ data: Optional[SchemaBase | ChartDataType | Map | None] = Undefined,
facet: Optional[SchemaBase | Map] = Undefined,
spec: Optional[SchemaBase | Map] = Undefined,
align: Optional[SchemaBase | Map | LayoutAlign_T] = Undefined,
@@ -24704,7 +24705,7 @@ def __init__(
bounds: Optional[Literal["full", "flush"]] = Undefined,
center: Optional[bool] = Undefined,
config: Optional[SchemaBase | Map] = Undefined,
- data: Optional[SchemaBase | Map | None] = Undefined,
+ data: Optional[SchemaBase | ChartDataType | Map | None] = Undefined,
datasets: Optional[SchemaBase | Map] = Undefined,
description: Optional[str] = Undefined,
name: Optional[str] = Undefined,
@@ -24860,7 +24861,7 @@ def __init__(
str | Parameter | SchemaBase | Map | ColorName_T
] = Undefined,
config: Optional[SchemaBase | Map] = Undefined,
- data: Optional[SchemaBase | Map | None] = Undefined,
+ data: Optional[SchemaBase | ChartDataType | Map | None] = Undefined,
datasets: Optional[SchemaBase | Map] = Undefined,
description: Optional[str] = Undefined,
encoding: Optional[SchemaBase | Map] = Undefined,
@@ -25067,7 +25068,7 @@ class TopLevelUnitSpec(TopLevelSpec):
def __init__(
self,
- data: Optional[SchemaBase | Map | None] = Undefined,
+ data: Optional[SchemaBase | ChartDataType | Map | None] = Undefined,
mark: Optional[SchemaBase | Map | Mark_T | CompositeMark_T] = Undefined,
align: Optional[SchemaBase | Map | LayoutAlign_T] = Undefined,
autosize: Optional[SchemaBase | Map | AutosizeType_T] = Undefined,
@@ -25212,7 +25213,7 @@ def __init__(
bounds: Optional[Literal["full", "flush"]] = Undefined,
center: Optional[bool] = Undefined,
config: Optional[SchemaBase | Map] = Undefined,
- data: Optional[SchemaBase | Map | None] = Undefined,
+ data: Optional[SchemaBase | ChartDataType | Map | None] = Undefined,
datasets: Optional[SchemaBase | Map] = Undefined,
description: Optional[str] = Undefined,
name: Optional[str] = Undefined,
@@ -26229,7 +26230,7 @@ class UnitSpec(VegaLiteSchema):
def __init__(
self,
mark: Optional[SchemaBase | Map | Mark_T | CompositeMark_T] = Undefined,
- data: Optional[SchemaBase | Map | None] = Undefined,
+ data: Optional[SchemaBase | ChartDataType | Map | None] = Undefined,
description: Optional[str] = Undefined,
encoding: Optional[SchemaBase | Map] = Undefined,
name: Optional[str] = Undefined,
@@ -26333,7 +26334,7 @@ class UnitSpecWithFrame(VegaLiteSchema):
def __init__(
self,
mark: Optional[SchemaBase | Map | Mark_T | CompositeMark_T] = Undefined,
- data: Optional[SchemaBase | Map | None] = Undefined,
+ data: Optional[SchemaBase | ChartDataType | Map | None] = Undefined,
description: Optional[str] = Undefined,
encoding: Optional[SchemaBase | Map] = Undefined,
height: Optional[float | SchemaBase | Literal["container"] | Map] = Undefined,
@@ -26460,7 +26461,7 @@ def __init__(
vconcat: Optional[Sequence[SchemaBase | Map]] = Undefined,
bounds: Optional[Literal["full", "flush"]] = Undefined,
center: Optional[bool] = Undefined,
- data: Optional[SchemaBase | Map | None] = Undefined,
+ data: Optional[SchemaBase | ChartDataType | Map | None] = Undefined,
description: Optional[str] = Undefined,
name: Optional[str] = Undefined,
resolve: Optional[SchemaBase | Map] = Undefined,
diff --git a/tools/generate_schema_wrapper.py b/tools/generate_schema_wrapper.py
index f68771e52..9dcda556a 100644
--- a/tools/generate_schema_wrapper.py
+++ b/tools/generate_schema_wrapper.py
@@ -269,6 +269,7 @@ class {name}(TypedDict{metaclass_kwds}):{comment}
BIN: Literal["Bin"] = "Bin"
IMPUTE: Literal["Impute"] = "Impute"
INTO_CONDITION: Literal["IntoCondition"] = "IntoCondition"
+CHART_DATA_TYPE: Literal["ChartDataType"] = "ChartDataType"
# NOTE: `core.py` typing imports
DATETIME: Literal["DateTime"] = "DateTime"
@@ -761,6 +762,7 @@ def generate_vegalite_schema_wrapper(fp: Path, /) -> ModuleDef[str]:
"from datetime import date, datetime",
"from altair import Parameter",
"from altair.typing import Optional",
+ f"from altair.vegalite.v5.api import {CHART_DATA_TYPE}",
"from ._typing import * # noqa: F403",
),
"\n" f"__all__ = {all_}\n",
diff --git a/tools/schemapi/utils.py b/tools/schemapi/utils.py
index caf2cec2b..000488cce 100644
--- a/tools/schemapi/utils.py
+++ b/tools/schemapi/utils.py
@@ -613,6 +613,8 @@ def title_to_type_reprs(self, *, use_concrete: bool) -> set[str]:
tps.add("Parameter")
if self.is_datetime():
tps.add("Temporal")
+ if self.is_top_level_spec_data():
+ tps.add("ChartDataType")
elif self.is_value():
value = self.properties["value"]
t = value.to_type_repr(target="annotation", use_concrete=use_concrete)
@@ -969,6 +971,9 @@ def is_theme_config_target(self) -> bool:
def is_datetime(self) -> bool:
return self.refname == "DateTime"
+ def is_top_level_spec_data(self) -> bool:
+ return self.refname == "Data"
+
class Grouped(Generic[T]):
"""
From be5e9ecd61d099c847dca44fb3a4283940c1e3b8 Mon Sep 17 00:00:00 2001
From: Dan Redding <125183946+dangotbanned@users.noreply.github.com>
Date: Fri, 3 Jan 2025 17:53:46 +0000
Subject: [PATCH 31/42] chore(ruff): Fix `UP006` warnings during codegen
(#3746)
---
tools/generate_schema_wrapper.py | 12 ++++++++----
tools/schemapi/utils.py | 3 ++-
2 files changed, 10 insertions(+), 5 deletions(-)
diff --git a/tools/generate_schema_wrapper.py b/tools/generate_schema_wrapper.py
index 9dcda556a..eab9afa71 100644
--- a/tools/generate_schema_wrapper.py
+++ b/tools/generate_schema_wrapper.py
@@ -753,7 +753,8 @@ def generate_vegalite_schema_wrapper(fp: Path, /) -> ModuleDef[str]:
all_ = [*sorted(it), "Root", "VegaLiteSchema", "SchemaBase", "load_schema"]
contents = [
HEADER,
- "from typing import Any, Literal, Union, Protocol, Sequence, List, Iterator, TYPE_CHECKING",
+ "from collections.abc import Iterator, Sequence",
+ "from typing import Any, Literal, Union, Protocol, TYPE_CHECKING",
"import pkgutil",
"import json\n",
"import narwhals.stable.v1 as nw\n",
@@ -871,7 +872,8 @@ def generate_vegalite_channel_wrappers(fp: Path, /) -> ModuleDef[list[str]]:
all_ = sorted(chain(it, COMPAT_EXPORTS))
imports = [
"import sys",
- "from typing import Any, overload, Sequence, List, Literal, Union, TYPE_CHECKING, TypedDict",
+ "from collections.abc import Sequence",
+ "from typing import Any, overload, Literal, Union, TYPE_CHECKING, TypedDict",
import_typing_extensions((3, 10), "TypeAlias"),
"import narwhals.stable.v1 as nw",
"from altair.utils.schemapi import Undefined, with_property_setters",
@@ -1226,7 +1228,8 @@ def vegalite_main(skip_download: bool = False) -> None:
fp_mixins = schemapath / "mixins.py"
print(f"Generating\n {schemafile!s}\n ->{fp_mixins!s}")
mixins_imports = (
- "from typing import Any, Sequence, List, Literal, Union",
+ "from collections.abc import Sequence",
+ "from typing import Any, Literal, Union",
"from altair.utils import use_signature, Undefined, SchemaBase",
"from . import core",
)
@@ -1256,7 +1259,8 @@ def vegalite_main(skip_download: bool = False) -> None:
fp_theme_config: Path = schemapath / "_config.py"
content_theme_config = [
HEADER,
- "from typing import Any, TYPE_CHECKING, Literal, Sequence, TypedDict, Union",
+ "from collections.abc import Sequence",
+ "from typing import Any, TYPE_CHECKING, Literal, TypedDict, Union",
import_typing_extensions((3, 14), "TypedDict", include_sys=True),
f"from ._typing import {ROW_COL_KWDS}, {PADDING_KWDS}",
"\n\n",
diff --git a/tools/schemapi/utils.py b/tools/schemapi/utils.py
index 000488cce..a9426f15c 100644
--- a/tools/schemapi/utils.py
+++ b/tools/schemapi/utils.py
@@ -124,7 +124,8 @@ def __init__(self, fmt: str = "{}_T") -> None:
"from __future__ import annotations\n",
"import sys",
"from datetime import date, datetime",
- "from typing import Annotated, Any, Generic, Literal, Mapping, TypeVar, Sequence, Union, get_args",
+ "from collections.abc import Sequence, Mapping",
+ "from typing import Annotated, Any, Generic, Literal, TypeVar, Union, get_args",
"import re",
import_typing_extensions(
(3, 14), "TypedDict", reason="https://peps.python.org/pep-0728/"
From 2b7e9b3eab13feee1705484d6d1f2e882c93ae9f Mon Sep 17 00:00:00 2001
From: Dan Redding <125183946+dangotbanned@users.noreply.github.com>
Date: Mon, 6 Jan 2025 15:08:53 +0000
Subject: [PATCH 32/42] fix: Replace circular import in `schemapi.py` (#3751)
---
altair/utils/schemapi.py | 12 +++++-------
tools/schemapi/schemapi.py | 12 +++++-------
2 files changed, 10 insertions(+), 14 deletions(-)
diff --git a/altair/utils/schemapi.py b/altair/utils/schemapi.py
index cf5f2e10e..638f2f50f 100644
--- a/altair/utils/schemapi.py
+++ b/altair/utils/schemapi.py
@@ -35,11 +35,6 @@
import narwhals.stable.v1 as nw
from packaging.version import Version
-# This leads to circular imports with the vegalite module. Currently, this works
-# but be aware that when you access it in this script, the vegalite module might
-# not yet be fully instantiated in case your code is being executed during import time
-from altair import vegalite
-
if sys.version_info >= (3, 12):
from typing import Protocol, TypeAliasType, runtime_checkable
else:
@@ -709,6 +704,8 @@ def _get_altair_class_for_error(
This should lead to more informative error messages pointing the user closer to the source of the issue.
"""
+ from altair import vegalite
+
for prop_name in reversed(error.absolute_path):
# Check if str as e.g. first item can be a 0
if isinstance(prop_name, str):
@@ -1597,14 +1594,15 @@ def __init__(self, prop: str, schema: dict[str, Any]) -> None:
self.schema = schema
def __get__(self, obj, cls):
+ from altair import vegalite
+
self.obj = obj
self.cls = cls
# The docs from the encoding class parameter (e.g. `bin` in X, Color,
# etc); this provides a general description of the parameter.
self.__doc__ = self.schema["description"].replace("__", "**")
property_name = f"{self.prop}"[0].upper() + f"{self.prop}"[1:]
- if hasattr(vegalite, property_name):
- altair_prop = getattr(vegalite, property_name)
+ if altair_prop := getattr(vegalite, property_name, None):
# Add the docstring from the helper class (e.g. `BinParams`) so
# that all the parameter names of the helper class are included in
# the final docstring
diff --git a/tools/schemapi/schemapi.py b/tools/schemapi/schemapi.py
index 5ee638266..24de6faae 100644
--- a/tools/schemapi/schemapi.py
+++ b/tools/schemapi/schemapi.py
@@ -33,11 +33,6 @@
import narwhals.stable.v1 as nw
from packaging.version import Version
-# This leads to circular imports with the vegalite module. Currently, this works
-# but be aware that when you access it in this script, the vegalite module might
-# not yet be fully instantiated in case your code is being executed during import time
-from altair import vegalite
-
if sys.version_info >= (3, 12):
from typing import Protocol, TypeAliasType, runtime_checkable
else:
@@ -707,6 +702,8 @@ def _get_altair_class_for_error(
This should lead to more informative error messages pointing the user closer to the source of the issue.
"""
+ from altair import vegalite
+
for prop_name in reversed(error.absolute_path):
# Check if str as e.g. first item can be a 0
if isinstance(prop_name, str):
@@ -1595,14 +1592,15 @@ def __init__(self, prop: str, schema: dict[str, Any]) -> None:
self.schema = schema
def __get__(self, obj, cls):
+ from altair import vegalite
+
self.obj = obj
self.cls = cls
# The docs from the encoding class parameter (e.g. `bin` in X, Color,
# etc); this provides a general description of the parameter.
self.__doc__ = self.schema["description"].replace("__", "**")
property_name = f"{self.prop}"[0].upper() + f"{self.prop}"[1:]
- if hasattr(vegalite, property_name):
- altair_prop = getattr(vegalite, property_name)
+ if altair_prop := getattr(vegalite, property_name, None):
# Add the docstring from the helper class (e.g. `BinParams`) so
# that all the parameter names of the helper class are included in
# the final docstring
From f0de7f24987ab87b3df825a7f5e8143bdd3e8645 Mon Sep 17 00:00:00 2001
From: Dan Redding <125183946+dangotbanned@users.noreply.github.com>
Date: Mon, 6 Jan 2025 17:49:22 +0000
Subject: [PATCH 33/42] fix: Include `*(Datum|Value)` in
`SchemaValidationError` (#3750)
---
altair/utils/schemapi.py | 53 +++++++++++++++++++++++++++++-------
tests/utils/test_schemapi.py | 25 +++++++++++++----
tools/schemapi/schemapi.py | 53 +++++++++++++++++++++++++++++-------
3 files changed, 105 insertions(+), 26 deletions(-)
diff --git a/altair/utils/schemapi.py b/altair/utils/schemapi.py
index 638f2f50f..a4af084b9 100644
--- a/altair/utils/schemapi.py
+++ b/altair/utils/schemapi.py
@@ -592,6 +592,42 @@ def _validator_values(errors: Iterable[ValidationError], /) -> Iterator[str]:
yield cast("str", err.validator_value)
+def _iter_channels(tp: type[Any], spec: Mapping[str, Any], /) -> Iterator[type[Any]]:
+ from altair import vegalite
+
+ for channel_type in ("datum", "value"):
+ if channel_type in spec:
+ name = f"{tp.__name__}{channel_type.capitalize()}"
+ if narrower := getattr(vegalite, name, None):
+ yield narrower
+
+
+def _is_channel(obj: Any) -> TypeIs[dict[str, Any]]:
+ props = {"datum", "value"}
+ return (
+ _is_dict(obj)
+ and all(isinstance(k, str) for k in obj)
+ and not (props.isdisjoint(obj))
+ )
+
+
+def _maybe_channel(tp: type[Any], spec: Any, /) -> type[Any]:
+ """
+ Replace a channel type with a `more specific`_ one or passthrough unchanged.
+
+ Parameters
+ ----------
+ tp
+ An imported ``SchemaBase`` class.
+ spec
+ The instance that failed validation.
+
+ .. _more specific:
+ https://github.com/vega/altair/issues/2913#issuecomment-2571762700
+ """
+ return next(_iter_channels(tp, spec), tp) if _is_channel(spec) else tp
+
+
class SchemaValidationError(jsonschema.ValidationError):
_JS_TO_PY: ClassVar[Mapping[str, str]] = {
"boolean": "bool",
@@ -703,22 +739,19 @@ def _get_altair_class_for_error(
Try to get the lowest class possible in the chart hierarchy so it can be displayed in the error message.
This should lead to more informative error messages pointing the user closer to the source of the issue.
+
+ If we did not find a suitable class based on traversing the path so we fall
+ back on the class of the top-level object which created the SchemaValidationError
"""
from altair import vegalite
for prop_name in reversed(error.absolute_path):
# Check if str as e.g. first item can be a 0
if isinstance(prop_name, str):
- potential_class_name = prop_name[0].upper() + prop_name[1:]
- cls = getattr(vegalite, potential_class_name, None)
- if cls is not None:
- break
- else:
- # Did not find a suitable class based on traversing the path so we fall
- # back on the class of the top-level object which created
- # the SchemaValidationError
- cls = self.obj.__class__
- return cls
+ candidate = prop_name[0].upper() + prop_name[1:]
+ if tp := getattr(vegalite, candidate, None):
+ return _maybe_channel(tp, self.instance)
+ return type(self.obj)
@staticmethod
def _format_params_as_table(param_dict_keys: Iterable[str]) -> str:
diff --git a/tests/utils/test_schemapi.py b/tests/utils/test_schemapi.py
index 1059b35c1..86f7e925b 100644
--- a/tests/utils/test_schemapi.py
+++ b/tests/utils/test_schemapi.py
@@ -522,6 +522,11 @@ def chart_error_example__additional_datum_argument():
return alt.Chart().mark_point().encode(x=alt.datum(1, wrong_argument=1))
+def chart_error_example__additional_value_argument():
+ # Error: `ColorValue` has no parameter named 'predicate'
+ return alt.Chart().mark_point().encode(color=alt.value("red", predicate=True))
+
+
def chart_error_example__invalid_value_type():
# Error: Value cannot be an integer in this case
return (
@@ -812,15 +817,23 @@ def id_func_chart_error_example(val) -> str:
),
(
chart_error_example__additional_datum_argument,
- r"""`X` has no parameter named 'wrong_argument'
+ r"""`XDatum` has no parameter named 'wrong_argument'
+
+ Existing parameter names are:
+ datum impute title
+ axis scale type
+ bandPosition stack
+
+ See the help for `XDatum` to read the full description of these parameters$""",
+ ),
+ (
+ chart_error_example__additional_value_argument,
+ r"""`ColorValue` has no parameter named 'predicate'
Existing parameter names are:
- shorthand bin scale timeUnit
- aggregate field sort title
- axis impute stack type
- bandPosition
+ value condition
- See the help for `X` to read the full description of these parameters$""",
+ See the help for `ColorValue` to read the full description of these parameters$""",
),
(
chart_error_example__invalid_value_type,
diff --git a/tools/schemapi/schemapi.py b/tools/schemapi/schemapi.py
index 24de6faae..60e8182a7 100644
--- a/tools/schemapi/schemapi.py
+++ b/tools/schemapi/schemapi.py
@@ -590,6 +590,42 @@ def _validator_values(errors: Iterable[ValidationError], /) -> Iterator[str]:
yield cast("str", err.validator_value)
+def _iter_channels(tp: type[Any], spec: Mapping[str, Any], /) -> Iterator[type[Any]]:
+ from altair import vegalite
+
+ for channel_type in ("datum", "value"):
+ if channel_type in spec:
+ name = f"{tp.__name__}{channel_type.capitalize()}"
+ if narrower := getattr(vegalite, name, None):
+ yield narrower
+
+
+def _is_channel(obj: Any) -> TypeIs[dict[str, Any]]:
+ props = {"datum", "value"}
+ return (
+ _is_dict(obj)
+ and all(isinstance(k, str) for k in obj)
+ and not (props.isdisjoint(obj))
+ )
+
+
+def _maybe_channel(tp: type[Any], spec: Any, /) -> type[Any]:
+ """
+ Replace a channel type with a `more specific`_ one or passthrough unchanged.
+
+ Parameters
+ ----------
+ tp
+ An imported ``SchemaBase`` class.
+ spec
+ The instance that failed validation.
+
+ .. _more specific:
+ https://github.com/vega/altair/issues/2913#issuecomment-2571762700
+ """
+ return next(_iter_channels(tp, spec), tp) if _is_channel(spec) else tp
+
+
class SchemaValidationError(jsonschema.ValidationError):
_JS_TO_PY: ClassVar[Mapping[str, str]] = {
"boolean": "bool",
@@ -701,22 +737,19 @@ def _get_altair_class_for_error(
Try to get the lowest class possible in the chart hierarchy so it can be displayed in the error message.
This should lead to more informative error messages pointing the user closer to the source of the issue.
+
+ If we did not find a suitable class based on traversing the path so we fall
+ back on the class of the top-level object which created the SchemaValidationError
"""
from altair import vegalite
for prop_name in reversed(error.absolute_path):
# Check if str as e.g. first item can be a 0
if isinstance(prop_name, str):
- potential_class_name = prop_name[0].upper() + prop_name[1:]
- cls = getattr(vegalite, potential_class_name, None)
- if cls is not None:
- break
- else:
- # Did not find a suitable class based on traversing the path so we fall
- # back on the class of the top-level object which created
- # the SchemaValidationError
- cls = self.obj.__class__
- return cls
+ candidate = prop_name[0].upper() + prop_name[1:]
+ if tp := getattr(vegalite, candidate, None):
+ return _maybe_channel(tp, self.instance)
+ return type(self.obj)
@staticmethod
def _format_params_as_table(param_dict_keys: Iterable[str]) -> str:
From 367993e92a6b255b9b5a35ca43d60117fc8f14e5 Mon Sep 17 00:00:00 2001
From: Dan Redding <125183946+dangotbanned@users.noreply.github.com>
Date: Mon, 6 Jan 2025 19:26:10 +0000
Subject: [PATCH 34/42] refactor: Centralize `Vega` project versioning (#3720)
---
NOTES_FOR_MAINTAINERS.md | 77 +++++----
RELEASING.md | 36 +++--
altair/utils/__init__.py | 10 +-
altair/utils/_importers.py | 6 +-
altair/utils/schemapi.py | 24 +++
pyproject.toml | 7 +
tools/__init__.py | 2 +
tools/generate_schema_wrapper.py | 15 +-
tools/versioning.py | 268 +++++++++++++++++++++++++++++++
9 files changed, 388 insertions(+), 57 deletions(-)
create mode 100644 tools/versioning.py
diff --git a/NOTES_FOR_MAINTAINERS.md b/NOTES_FOR_MAINTAINERS.md
index 03b4ede4e..50fadfdf8 100644
--- a/NOTES_FOR_MAINTAINERS.md
+++ b/NOTES_FOR_MAINTAINERS.md
@@ -27,11 +27,56 @@ The script output is designed to be deterministic; if the vega-lite version
is not changed, then running the script should overwrite the schema wrappers
with identical copies.
-## Updating the Vega-Lite version
+## Updating Vega versions
+All versions are maintained in [pyproject.toml](pyproject.toml).
-The vega & vega-lite versions for the Python code can be updated by manually
-changing the ``SCHEMA_VERSION`` definition within
-``tools/generate_schema_wrapper.py``, and then re-running the script.
+### Python Packages
+
+Projects which publish a package to PyPI are listed with a version bound in one of the following tables:
+
+- [`project.dependencies`](https://packaging.python.org/en/latest/specifications/pyproject-toml/#dependencies-optional-dependencies): Published dependencies.
+- [`project.optional-dependencies`](https://packaging.python.org/en/latest/specifications/pyproject-toml/#dependencies-optional-dependencies): Published optional dependencies, or "extras".
+- [`dependency-groups`](https://peps.python.org/pep-0735/): Local dependencies for development.
+
+> [!NOTE]
+> All are currently declared in sub-tables of `project.optional-dependencies`.
+
+The lower version bounds defined here are reused for [altair/utils/_importers.py](altair/utils/_importers.py).
+
+#### `vl-convert`
+
+We need to ensure that [vl-convert](https://github.com/vega/vl-convert) includes support for the new Vega-Lite version.
+Check the [vl-convert releases](https://github.com/vega/vl-convert/releases) to find the minimum
+version of `vl-convert` that includes support for the desired version of Vega-Lite (and [open
+an issue](https://github.com/vega/vl-convert/issues) if this version hasn't been
+included in a released yet).
+
+### Javascript/other
+
+Additional version constraints, including for [`Vega-Lite`](https://github.com/vega/vega-lite) itself are declared in `[tool.altair.vega]`.
+
+Whereas the [previous dependencies](#python-packages) are used primarily at *install-time*; this group is embedded into `altair` for use at *runtime* or when [generating the python code](#auto-generating-the-python-code):
+
+```toml
+[tool.altair.vega]
+vega-datasets = "..." # https://github.com/vega/vega-datasets
+vega-embed = "..." # https://github.com/vega/vega-embed
+vega-lite = "..." # https://github.com/vega/vega-lite
+```
+
+Some examples of where these propagate to:
+- [altair/jupyter/js/index.js](altair/jupyter/js/index.js)
+- [altair/utils/_importers.py](altair/utils/_importers.py)
+- [tools/generate_schema_wrapper.py](tools/generate_schema_wrapper.py)
+- [tools/versioning.py](tools/versioning.py)
+- [altair/utils/schemapi.py](https://github.com/vega/altair/blob/0e23fd33e9a755bab0ef73a856340c48c14897e6/altair/utils/schemapi.py#L1619-L1640)
+
+> [!IMPORTANT]
+> When updating **any** of these versions, be sure to [re-generate the python code](#auto-generating-the-python-code).
+
+#### Updating the Vega-Lite version
+
+The Vega-Lite version for the Python code propagates to `tools.generate_schema_wrapper.SCHEMA_VERSION`.
This will update all of the automatically-generated files in the ``schema``
directory for each version, but please note that it will *not* update other
@@ -50,30 +95,6 @@ of some docstrings.
Major version updates (e.g. Vega-Lite 1.X->2.X) have required substantial
rewrites, because the internal structure of the schema changed appreciably.
-### Updating the Vega-Lite in JupyterChart
-To update the Vega-Lite version used in JupyterChart, update the version in the
-esm.sh URL in `altair/jupyter/js/index.js`.
-
-For example, to update to Vega-Lite 5.15.1, Vega 5 and Vega-Embed 6, the URL
-should be:
-
-```javascript
-import embed from "https://esm.sh/vega-embed@6?deps=vega@5&deps=vega-lite@5.15.1";
-```
-
-### Updating vl-convert version bound
-
-When updating the version of Vega-Lite, it's important to ensure that
-[vl-convert](https://github.com/vega/vl-convert) includes support for the new Vega-Lite version.
-Check the [vl-convert releases](https://github.com/vega/vl-convert/releases) to find the minimum
-version of vl-convert that includes support for the desired version of Vega-Lite (and [open
-an issue](https://github.com/vega/vl-convert/issues) if this version hasn't been
-included in a released yet.). Update the vl-convert version check in `altair/utils/_importers.py`
-with the new minimum required version of vl-convert.
-
-Also, the version bound of the `vl-convert-python` package should be updated in the
-`[project.optional-dependencies]/all` dependency group in `pyproject.toml`.
-
## Releasing the Package
To cut a new release of Altair, follow the steps outlined in
diff --git a/RELEASING.md b/RELEASING.md
index 6582af76a..264081ebd 100644
--- a/RELEASING.md
+++ b/RELEASING.md
@@ -1,16 +1,18 @@
-1. Make sure to have an environment set up with `hatch` installed. See `CONTRIBUTING.md`.
+1. Check all [Vega project](https://github.com/orgs/vega/repositories?type=source) versions are up-to-date. See [NOTES_FOR_MAINTAINERS.md](NOTES_FOR_MAINTAINERS.md)
+
+2. Make sure to have an environment set up with `hatch` installed. See [CONTRIBUTING.md](CONTRIBUTING.md).
Remove any existing environments managed by `hatch` so that it will create new ones
with the latest dependencies when executing the commands further below:
hatch env prune
-2. Make certain your branch is in sync with head, and that you have no uncommitted modifications. If you work on a fork, replace `origin` with `upstream`:
+3. Make certain your branch is in sync with head, and that you have no uncommitted modifications. If you work on a fork, replace `origin` with `upstream`:
git checkout main
git pull origin main
git status # Should show "nothing to commit, working tree clean"
-3. Do a clean doc build:
+4. Do a clean doc build:
hatch run doc:clean-all
hatch run doc:build-html
@@ -19,62 +21,62 @@
Navigate to http://localhost:8000 and ensure it looks OK (particularly
do a visual scan of the gallery thumbnails).
-4. Create a new release branch:
+5. Create a new release branch:
git switch -c version_5.0.0
-5. Update version to, e.g. 5.0.0:
+6. Update version to, e.g. 5.0.0:
- in ``altair/__init__.py``
- in ``doc/conf.py``
-6. Commit changes and push:
+7. Commit changes and push:
git add . -u
git commit -m "chore: Bump version to 5.0.0"
git push
-7. Merge release branch into main, make sure that all required checks pass
+8. Merge release branch into main, make sure that all required checks pass
-8. On main, build source & wheel distributions. If you work on a fork, replace `origin` with `upstream`:
+9. On main, build source & wheel distributions. If you work on a fork, replace `origin` with `upstream`:
git switch main
git pull origin main
hatch clean # clean old builds & distributions
hatch build # create a source distribution and universal wheel
-9. publish to PyPI (Requires correct PyPI owner permissions):
+10. publish to PyPI (Requires correct PyPI owner permissions):
hatch publish
-10. build and publish docs (Requires write-access to altair-viz/altair-viz.github.io):
+11. build and publish docs (Requires write-access to altair-viz/altair-viz.github.io):
hatch run doc:publish-clean-build
-11. On main, tag the release. If you work on a fork, replace `origin` with `upstream`:
+12. On main, tag the release. If you work on a fork, replace `origin` with `upstream`:
git tag -a v5.0.0 -m "Version 5.0.0 release"
git push origin v5.0.0
-12. Create a new branch:
+13. Create a new branch:
git switch -c maint_5.1.0dev
-13. Update version and add 'dev' suffix, e.g. 5.1.0dev:
+14. Update version and add 'dev' suffix, e.g. 5.1.0dev:
- in ``altair/__init__.py``
- in ``doc/conf.py``
-14. Commit changes and push:
+15. Commit changes and push:
git add . -u
git commit -m "chore: Bump version to 5.1.0dev"
git push
-15. Merge maintenance branch into main
+16. Merge maintenance branch into main
-16. Double-check that a conda-forge pull request is generated from the updated
+17. Double-check that a conda-forge pull request is generated from the updated
pip package by the conda-forge bot (may take up to several hours):
https://github.com/conda-forge/altair-feedstock/pulls
-17. Publish a new release in https://github.com/vega/altair/releases/
+18. Publish a new release in https://github.com/vega/altair/releases/
diff --git a/altair/utils/__init__.py b/altair/utils/__init__.py
index bfcb52eff..68697ce33 100644
--- a/altair/utils/__init__.py
+++ b/altair/utils/__init__.py
@@ -12,10 +12,18 @@
from .deprecation import AltairDeprecationWarning, deprecated, deprecated_warn
from .html import spec_to_html
from .plugin_registry import PluginRegistry
-from .schemapi import Optional, SchemaBase, SchemaLike, Undefined, is_undefined
+from .schemapi import (
+ VERSIONS,
+ Optional,
+ SchemaBase,
+ SchemaLike,
+ Undefined,
+ is_undefined,
+)
__all__ = (
"SHORTHAND_KEYS",
+ "VERSIONS",
"AltairDeprecationWarning",
"Optional",
"PluginRegistry",
diff --git a/altair/utils/_importers.py b/altair/utils/_importers.py
index efe48df8b..d2b601804 100644
--- a/altair/utils/_importers.py
+++ b/altair/utils/_importers.py
@@ -5,12 +5,14 @@
from packaging.version import Version
+from altair.utils.schemapi import VERSIONS
+
if TYPE_CHECKING:
from types import ModuleType
def import_vegafusion() -> ModuleType:
- min_version = "1.5.0"
+ min_version = VERSIONS["vegafusion"]
try:
import vegafusion as vf
@@ -45,7 +47,7 @@ def import_vegafusion() -> ModuleType:
def import_vl_convert() -> ModuleType:
- min_version = "1.6.0"
+ min_version = VERSIONS["vl-convert-python"]
try:
version = importlib_version("vl-convert-python")
if Version(version) < Version(min_version):
diff --git a/altair/utils/schemapi.py b/altair/utils/schemapi.py
index a4af084b9..a5cb0bf11 100644
--- a/altair/utils/schemapi.py
+++ b/altair/utils/schemapi.py
@@ -1676,3 +1676,27 @@ def with_property_setters(cls: type[TSchemaBase]) -> type[TSchemaBase]:
for prop, propschema in schema.get("properties", {}).items():
setattr(cls, prop, _PropertySetter(prop, propschema))
return cls
+
+
+VERSIONS: Mapping[
+ Literal[
+ "vega-datasets", "vega-embed", "vega-lite", "vegafusion", "vl-convert-python"
+ ],
+ str,
+] = {
+ "vega-datasets": "v2.11.0",
+ "vega-embed": "6",
+ "vega-lite": "v5.20.1",
+ "vegafusion": "1.6.6",
+ "vl-convert-python": "1.7.0",
+}
+"""
+Version pins for non-``python`` `vega projects`_.
+
+Notes
+-----
+When cutting a new release, make sure to update ``[tool.altair.vega]`` in ``pyproject.toml``.
+
+.. _vega projects:
+ https://github.com/vega
+"""
diff --git a/pyproject.toml b/pyproject.toml
index 3b555aa43..5e52b5d2f 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -84,6 +84,7 @@ dev = [
"types-setuptools",
"geopandas",
"polars>=0.20.3",
+ "tomli; python_version<\"3.11\""
]
doc = [
"sphinx",
@@ -99,6 +100,12 @@ doc = [
"scipy",
]
+[tool.altair.vega]
+# Minimum/exact versions, for projects under the `vega` organization
+vega-datasets = "v2.11.0" # https://github.com/vega/vega-datasets
+vega-embed = "6" # https://github.com/vega/vega-embed
+vega-lite = "v5.20.1" # https://github.com/vega/vega-lite
+
[tool.hatch.version]
path = "altair/__init__.py"
diff --git a/tools/__init__.py b/tools/__init__.py
index 46fc97553..00ce52b6d 100644
--- a/tools/__init__.py
+++ b/tools/__init__.py
@@ -4,6 +4,7 @@
markup,
schemapi,
update_init_file,
+ versioning,
)
__all__ = [
@@ -12,4 +13,5 @@
"markup",
"schemapi",
"update_init_file",
+ "versioning",
]
diff --git a/tools/generate_schema_wrapper.py b/tools/generate_schema_wrapper.py
index eab9afa71..df1b32681 100644
--- a/tools/generate_schema_wrapper.py
+++ b/tools/generate_schema_wrapper.py
@@ -41,6 +41,7 @@
spell_literal,
)
from tools.vega_expr import write_expr_module
+from tools.versioning import VERSIONS
if TYPE_CHECKING:
from collections.abc import Iterable, Iterator
@@ -50,7 +51,7 @@
T = TypeVar("T", bound="str | Iterable[str]")
-SCHEMA_VERSION: Final = "v5.20.1"
+SCHEMA_VERSION: Final = VERSIONS["vega-lite"]
HEADER_COMMENT = """\
@@ -633,9 +634,8 @@ def copy_schemapi_util() -> None:
destination_fp.open("w", encoding="utf8") as dest,
):
dest.write(HEADER_COMMENT)
- dest.writelines(source.readlines())
- if sys.platform == "win32":
- ruff.format(destination_fp)
+ dest.writelines(chain(source.readlines(), VERSIONS.iter_inline_literal()))
+ ruff.format(destination_fp)
def recursive_dict_update(schema: dict, root: dict, def_dict: dict) -> None:
@@ -1390,13 +1390,10 @@ def main() -> None:
"--skip-download", action="store_true", help="skip downloading schema files"
)
args = parser.parse_args()
+ VERSIONS.update_all()
copy_schemapi_util()
vegalite_main(args.skip_download)
- write_expr_module(
- vlc.get_vega_version(),
- output=EXPR_FILE,
- header=HEADER_COMMENT,
- )
+ write_expr_module(VERSIONS.vlc_vega, output=EXPR_FILE, header=HEADER_COMMENT)
# The modules below are imported after the generation of the new schema files
# as these modules import Altair. This allows them to use the new changes
diff --git a/tools/versioning.py b/tools/versioning.py
new file mode 100644
index 000000000..25e7a226e
--- /dev/null
+++ b/tools/versioning.py
@@ -0,0 +1,268 @@
+"""
+Versioning utils, specfic to `vega projects`_.
+
+Includes non-`python` projects.
+
+.. _vega projects:
+ https://github.com/vega
+
+Examples
+--------
+>>> from tools.versioning import VERSIONS # doctest: +SKIP
+>>> VERSIONS["vega-lite"] # doctest: +SKIP
+'v5.20.1'
+
+>>> VERSIONS # doctest: +SKIP
+{'vega-datasets': 'v2.11.0',
+ 'vega-embed': '6',
+ 'vega-lite': 'v5.20.1',
+ 'vegafusion': '1.5.0',
+ 'vl-convert-python': '1.7.0'}
+"""
+
+from __future__ import annotations
+
+import sys
+from collections import deque
+from itertools import chain
+from pathlib import Path
+from typing import TYPE_CHECKING, Any, ClassVar, Literal
+
+if sys.version_info >= (3, 11):
+ import tomllib
+else:
+ # NOTE: See https://github.com/hukkin/tomli?tab=readme-ov-file#building-a-tomlitomllib-compatibility-layer
+ import tomli as tomllib # type: ignore
+from packaging.requirements import Requirement
+from packaging.version import parse as parse_version
+
+import vl_convert as vlc
+from tools.schemapi.utils import spell_literal
+
+if TYPE_CHECKING:
+ from collections.abc import (
+ ItemsView,
+ Iterable,
+ Iterator,
+ KeysView,
+ Mapping,
+ Sequence,
+ )
+
+ if sys.version_info >= (3, 11):
+ from typing import LiteralString
+ else:
+ from typing_extensions import LiteralString
+ if sys.version_info >= (3, 10):
+ from typing import TypeAlias
+ else:
+ from typing_extensions import TypeAlias
+
+__all__ = ["VERSIONS"]
+
+_REPO_ROOT: Path = Path(__file__).parent.parent
+_JUPYTER_INDEX = "altair/jupyter/js/index.js"
+_PYPROJECT: Literal["pyproject.toml"] = "pyproject.toml"
+_LOWER_BOUNDS = frozenset((">=", "==", "~=", "==="))
+
+VegaProjectPy: TypeAlias = Literal["vegafusion", "vl-convert-python"]
+VegaProject: TypeAlias = Literal[
+ "vega-datasets", "vega-embed", "vega-lite", "vegafusion", "vl-convert-python"
+]
+
+VERSIONS: _Versions
+"""Singleton ``_Versions`` instance."""
+
+
+def _read_pyproject_toml(fp: Path | None = None, /) -> dict[str, Any]:
+ source = fp or Path(__file__).parent.parent / _PYPROJECT
+ return tomllib.loads(source.read_text("utf-8"))
+
+
+def _keypath(mapping: Mapping[str, Any], path: Iterable[str], /) -> Any:
+ """Get a nested table from ``mapping`` by following ``path``."""
+ mut = dict[str, Any](**mapping)
+ for key in path:
+ mut = mut[key]
+ return mut
+
+
+class _Versions:
+ _TABLE_PATH: ClassVar[Sequence[LiteralString]] = "tool", "altair", "vega"
+ """
+ The table header path split by ``"."``::
+
+ [tool.altair.vega] -> "tool", "altair", "vega"
+ """
+ _PY_DEPS_PATH: ClassVar[Sequence[LiteralString]] = (
+ "project",
+ "optional-dependencies",
+ )
+ _PY_DEPS: ClassVar[frozenset[VegaProjectPy]] = frozenset(
+ ("vl-convert-python", "vegafusion")
+ )
+
+ _CONST_NAME: ClassVar[Literal["VERSIONS"]] = "VERSIONS"
+ """Variable name for the exported literal."""
+
+ _mapping: Mapping[VegaProject, str]
+
+ def __init__(self) -> None:
+ pyproject = _read_pyproject_toml()
+ py_deps = _keypath(pyproject, self._PY_DEPS_PATH)
+ js_deps = _keypath(pyproject, self._TABLE_PATH)
+ all_deps = chain(js_deps.items(), self._iter_py_deps_versions(py_deps))
+ self._mapping = dict(sorted(all_deps))
+
+ def __getitem__(self, key: VegaProject) -> str:
+ return self._mapping[key]
+
+ def __repr__(self) -> str:
+ return repr(self._mapping)
+
+ def projects(self) -> KeysView[VegaProject]:
+ return self._mapping.keys()
+
+ def items(self) -> ItemsView[VegaProject, str]:
+ return self._mapping.items()
+
+ @property
+ def vlc_vega(self) -> str:
+ """
+ Returns version of `Vega`_ bundled with `vl-convert`_.
+
+ .. _Vega:
+ https://github.com/vega/vega
+ .. _vl-convert:
+ https://github.com/vega/vl-convert
+ """
+ return vlc.get_vega_version()
+
+ @property
+ def vlc_vega_embed(self) -> str:
+ """
+ Returns version of `Vega-Embed`_ bundled with `vl-convert`_.
+
+ .. _Vega-Embed:
+ https://github.com/vega/vega-embed
+ .. _vl-convert:
+ https://github.com/vega/vl-convert
+ """
+ return vlc.get_vega_embed_version()
+
+ @property
+ def vlc_vega_themes(self) -> str:
+ """
+ Returns version of `Vega-Themes`_ bundled with `vl-convert`_.
+
+ .. _Vega-Themes:
+ https://github.com/vega/vega-themes
+ .. _vl-convert:
+ https://github.com/vega/vl-convert.
+ """
+ return vlc.get_vega_themes_version()
+
+ @property
+ def vlc_vegalite(self) -> list[str]:
+ """
+ Returns versions of `Vega-Lite`_ bundled with `vl-convert`_.
+
+ .. _Vega-Lite:
+ https://github.com/vega/vega-lite
+ .. _vl-convert:
+ https://github.com/vega/vl-convert
+ """
+ return vlc.get_vegalite_versions()
+
+ @property
+ def _annotation(self) -> str:
+ return f"Mapping[{spell_literal(self.projects())}, str]"
+
+ @property
+ def _header(self) -> str:
+ return f"[{'.'.join(self._TABLE_PATH)}]"
+
+ def iter_inline_literal(self) -> Iterator[str]:
+ """
+ Yields the ``[tool.altair.vega]`` table as an inline ``dict``.
+
+ Includes a type annotation and docstring.
+
+ Notes
+ -----
+ - Write at the bottom of ``altair.utils.schemapi``.
+ - Used in ``altair.utils._importers``.
+ """
+ yield f"{self._CONST_NAME}: {self._annotation} = {self!r}\n"
+ yield '"""\n'
+ yield (
+ "Version pins for non-``python`` `vega projects`_.\n\n"
+ "Notes\n"
+ "-----\n"
+ f"When cutting a new release, make sure to update ``{self._header}`` in ``pyproject.toml``.\n\n"
+ ".. _vega projects:\n"
+ " https://github.com/vega\n"
+ )
+ yield '"""\n'
+
+ def update_all(self) -> None:
+ """Update all static version pins."""
+ print("Updating Vega project pins")
+ self.update_vega_embed()
+
+ def update_vega_embed(self) -> None:
+ """Updates the **Vega-Lite** version used in ``JupyterChart``."""
+ fp = _REPO_ROOT / _JUPYTER_INDEX
+ embed = self["vega-embed"]
+ vega = parse_version(self.vlc_vega).major
+ vegalite = self["vega-lite"].lstrip("v")
+ stmt = f'import vegaEmbed from "https://esm.sh/vega-embed@{embed}?deps=vega@{vega}&deps=vega-lite@{vegalite}";\n'
+
+ with fp.open("r", encoding="utf-8", newline="\n") as f:
+ lines = deque(f.readlines())
+ lines.popleft()
+ print(f"Updating import in {fp.as_posix()!r}, to:\n {stmt!r}")
+ lines.appendleft(stmt)
+ with fp.open("w", encoding="utf-8", newline="\n") as f:
+ f.writelines(lines)
+
+ def _iter_py_deps_versions(
+ self, dep_groups: dict[str, Sequence[str]], /
+ ) -> Iterator[tuple[VegaProjectPy, str]]:
+ """
+ Extract the name and lower version bound for all Vega python packages.
+
+ Parameters
+ ----------
+ dep_groups
+ Mapping of dependency/extra groups to requirement strings.
+
+ .. note::
+ It is expected that this is **either** `project.optional-dependencies`_ or `dependency-groups`_.
+
+ .. _project.optional-dependencies:
+ https://packaging.python.org/en/latest/specifications/pyproject-toml/#dependencies-optional-dependencies
+ .. _dependency-groups:
+ https://peps.python.org/pep-0735/
+ """
+ for deps in dep_groups.values():
+ for req_string in deps:
+ req = Requirement(req_string)
+ if req.name in self._PY_DEPS:
+ it = (
+ parse_version(sp.version)
+ for sp in req.specifier
+ if sp.operator in _LOWER_BOUNDS
+ )
+ version = str(min(it))
+ yield req.name, version
+
+
+def __getattr__(name: str) -> _Versions:
+ if name == "VERSIONS":
+ global VERSIONS
+ VERSIONS = _Versions()
+ return VERSIONS
+ else:
+ msg = f"module {__name__!r} has no attribute {name!r}"
+ raise AttributeError(msg)
From 17baaa23175bf15b57f73b48c1a0e855e3a5b3c7 Mon Sep 17 00:00:00 2001
From: Dan Redding <125183946+dangotbanned@users.noreply.github.com>
Date: Wed, 8 Jan 2025 13:21:38 +0000
Subject: [PATCH 35/42] feat: Update `vega-lite` to `5.21.0` (#3761)
---
altair/jupyter/js/index.js | 2 +-
altair/utils/schemapi.py | 2 +-
altair/vegalite/v5/schema/__init__.py | 4 +-
altair/vegalite/v5/schema/_config.py | 18 +++
altair/vegalite/v5/schema/_typing.py | 5 +-
altair/vegalite/v5/schema/channels.py | 80 +++++-----
altair/vegalite/v5/schema/core.py | 100 ++++++++-----
.../vegalite/v5/schema/vega-lite-schema.json | 137 +++++++++---------
pyproject.toml | 2 +-
tests/utils/test_schemapi.py | 3 +-
tools/versioning.py | 2 +-
11 files changed, 200 insertions(+), 155 deletions(-)
diff --git a/altair/jupyter/js/index.js b/altair/jupyter/js/index.js
index 58b936091..85ce25e7c 100644
--- a/altair/jupyter/js/index.js
+++ b/altair/jupyter/js/index.js
@@ -1,4 +1,4 @@
-import vegaEmbed from "https://esm.sh/vega-embed@6?deps=vega@5&deps=vega-lite@5.20.1";
+import vegaEmbed from "https://esm.sh/vega-embed@6?deps=vega@5&deps=vega-lite@5.21.0";
import lodashDebounce from "https://esm.sh/lodash-es@4.17.21/debounce";
// Note: For offline support, the import lines above are removed and the remaining script
diff --git a/altair/utils/schemapi.py b/altair/utils/schemapi.py
index a5cb0bf11..e7708f0d7 100644
--- a/altair/utils/schemapi.py
+++ b/altair/utils/schemapi.py
@@ -1686,7 +1686,7 @@ def with_property_setters(cls: type[TSchemaBase]) -> type[TSchemaBase]:
] = {
"vega-datasets": "v2.11.0",
"vega-embed": "6",
- "vega-lite": "v5.20.1",
+ "vega-lite": "v5.21.0",
"vegafusion": "1.6.6",
"vl-convert-python": "1.7.0",
}
diff --git a/altair/vegalite/v5/schema/__init__.py b/altair/vegalite/v5/schema/__init__.py
index 3be8148db..0786b0f0d 100644
--- a/altair/vegalite/v5/schema/__init__.py
+++ b/altair/vegalite/v5/schema/__init__.py
@@ -6,9 +6,9 @@
from altair.vegalite.v5.schema.channels import *
from altair.vegalite.v5.schema.core import *
-SCHEMA_VERSION = "v5.20.1"
+SCHEMA_VERSION = "v5.21.0"
-SCHEMA_URL = "https://vega.github.io/schema/vega-lite/v5.20.1.json"
+SCHEMA_URL = "https://vega.github.io/schema/vega-lite/v5.21.0.json"
__all__ = [
"SCHEMA_URL",
diff --git a/altair/vegalite/v5/schema/_config.py b/altair/vegalite/v5/schema/_config.py
index b5d4020ff..bce4d5b10 100644
--- a/altair/vegalite/v5/schema/_config.py
+++ b/altair/vegalite/v5/schema/_config.py
@@ -6627,6 +6627,11 @@ class TickConfigKwds(TypedDict, total=False):
``"middle"``, ``"bottom"``.
**Note:** Expression reference is *not* supported for range marks.
+ binSpacing
+ Offset between bars for binned field. The ideal value for this is either 0
+ (preferred by statisticians) or 1 (Vega-Lite default, D3 example style).
+
+ **Default value:** ``1``
blend
The color blend mode for drawing an item on its current background. Any valid `CSS
mix-blend-mode `__
@@ -6645,6 +6650,10 @@ class TickConfigKwds(TypedDict, total=False):
`__.
* The ``fill`` and ``stroke`` properties have higher precedence than ``color`` and
will override ``color``.
+ continuousBandSize
+ The default size of the bars on continuous scales.
+
+ **Default value:** ``5``
cornerRadius
The radius in pixels of rounded rectangles or arcs' corners.
@@ -6679,6 +6688,9 @@ class TickConfigKwds(TypedDict, total=False):
the limit parameter.
**Default value:** ``"ltr"``
+ discreteBandSize
+ The default size of the bars with discrete dimensions. If unspecified, the default
+ size is ``step-2``, which provides 2 pixel offset between bars.
dx
The horizontal offset, in pixels, between the text label and its anchor point. The
offset is applied after rotation by the *angle* property.
@@ -6795,6 +6807,8 @@ class TickConfigKwds(TypedDict, total=False):
lineHeight
The line height in pixels (the spacing between subsequent lines of text) for
multi-line text marks.
+ minBandSize
+ The minimum band size for bar and rectangle marks. **Default value:** ``0.25``
opacity
The overall opacity (value between [0,1]).
@@ -6974,8 +6988,10 @@ class TickConfigKwds(TypedDict, total=False):
aspect: bool
bandSize: float
baseline: TextBaseline_T
+ binSpacing: float
blend: Blend_T
color: ColorHex | LinearGradientKwds | RadialGradientKwds | ColorName_T
+ continuousBandSize: float
cornerRadius: float
cornerRadiusBottomLeft: float
cornerRadiusBottomRight: float
@@ -6984,6 +7000,7 @@ class TickConfigKwds(TypedDict, total=False):
cursor: Cursor_T
description: str
dir: TextDirection_T
+ discreteBandSize: float
dx: float
dy: float
ellipsis: str
@@ -7003,6 +7020,7 @@ class TickConfigKwds(TypedDict, total=False):
limit: float
lineBreak: str
lineHeight: float
+ minBandSize: float
opacity: float
order: bool | None
orient: Orientation_T
diff --git a/altair/vegalite/v5/schema/_typing.py b/altair/vegalite/v5/schema/_typing.py
index fd6383ad7..db33b422b 100644
--- a/altair/vegalite/v5/schema/_typing.py
+++ b/altair/vegalite/v5/schema/_typing.py
@@ -487,6 +487,7 @@ class PaddingKwds(TypedDict, total=False):
"set3",
"tableau10",
"tableau20",
+ "observable10",
"blues",
"tealblues",
"teals",
@@ -1051,6 +1052,8 @@ class PaddingKwds(TypedDict, total=False):
SelectionResolution_T: TypeAlias = Literal["global", "union", "intersect"]
SelectionType_T: TypeAlias = Literal["point", "interval"]
SingleDefUnitChannel_T: TypeAlias = Literal[
+ "text",
+ "shape",
"x",
"y",
"xOffset",
@@ -1075,9 +1078,7 @@ class PaddingKwds(TypedDict, total=False):
"strokeDash",
"size",
"angle",
- "shape",
"key",
- "text",
"href",
"url",
"description",
diff --git a/altair/vegalite/v5/schema/channels.py b/altair/vegalite/v5/schema/channels.py
index a4a676c23..c5de8c292 100644
--- a/altair/vegalite/v5/schema/channels.py
+++ b/altair/vegalite/v5/schema/channels.py
@@ -390,7 +390,7 @@ class Angle(FieldChannelMixin, core.FieldOrDatumDefWithConditionMarkPropFieldDef
**See also:** `sort `__
documentation.
- timeUnit : dict, :class:`TimeUnit`, :class:`MultiTimeUnit`, :class:`BinnedTimeUnit`, :class:`SingleTimeUnit`, :class:`TimeUnitParams`, :class:`UtcMultiTimeUnit`, :class:`UtcSingleTimeUnit`, :class:`LocalMultiTimeUnit`, :class:`LocalSingleTimeUnit`, Literal['binnedutcyear', 'binnedutcyearquarter', 'binnedutcyearquartermonth', 'binnedutcyearmonth', 'binnedutcyearmonthdate', 'binnedutcyearmonthdatehours', 'binnedutcyearmonthdatehoursminutes', 'binnedutcyearmonthdatehoursminutesseconds', 'binnedutcyearweek', 'binnedutcyearweekday', 'binnedutcyearweekdayhours', 'binnedutcyearweekdayhoursminutes', 'binnedutcyearweekdayhoursminutesseconds', 'binnedutcyeardayofyear', 'binnedyear', 'binnedyearquarter', 'binnedyearquartermonth', 'binnedyearmonth', 'binnedyearmonthdate', 'binnedyearmonthdatehours', 'binnedyearmonthdatehoursminutes', 'binnedyearmonthdatehoursminutesseconds', 'binnedyearweek', 'binnedyearweekday', 'binnedyearweekdayhours', 'binnedyearweekdayhoursminutes', 'binnedyearweekdayhoursminutesseconds', 'binnedyeardayofyear', 'utcyear', 'utcquarter', 'utcmonth', 'utcweek', 'utcday', 'utcdayofyear', 'utcdate', 'utchours', 'utcminutes', 'utcseconds', 'utcmilliseconds', 'year', 'quarter', 'month', 'week', 'day', 'dayofyear', 'date', 'hours', 'minutes', 'seconds', 'milliseconds', 'utcyearquarter', 'utcyearquartermonth', 'utcyearmonth', 'utcyearmonthdate', 'utcyearmonthdatehours', 'utcyearmonthdatehoursminutes', 'utcyearmonthdatehoursminutesseconds', 'utcyearweek', 'utcyearweekday', 'utcyearweekdayhours', 'utcyearweekdayhoursminutes', 'utcyearweekdayhoursminutesseconds', 'utcyeardayofyear', 'utcquartermonth', 'utcmonthdate', 'utcmonthdatehours', 'utcmonthdatehoursminutes', 'utcmonthdatehoursminutesseconds', 'utcweekday', 'utcweekdayhours', 'utcweekdayhoursminutes', 'utcweekdayhoursminutesseconds', 'utcdayhours', 'utcdayhoursminutes', 'utcdayhoursminutesseconds', 'utchoursminutes', 'utchoursminutesseconds', 'utcminutesseconds', 'utcsecondsmilliseconds', 'yearquarter', 'yearquartermonth', 'yearmonth', 'yearmonthdate', 'yearmonthdatehours', 'yearmonthdatehoursminutes', 'yearmonthdatehoursminutesseconds', 'yearweek', 'yearweekday', 'yearweekdayhours', 'yearweekdayhoursminutes', 'yearweekdayhoursminutesseconds', 'yeardayofyear', 'quartermonth', 'monthdate', 'monthdatehours', 'monthdatehoursminutes', 'monthdatehoursminutesseconds', 'weekday', 'weekdayhours', 'weekdayhoursminutes', 'weekdayhoursminutesseconds', 'dayhours', 'dayhoursminutes', 'dayhoursminutesseconds', 'hoursminutes', 'hoursminutesseconds', 'minutesseconds', 'secondsmilliseconds']
+ timeUnit : dict, :class:`TimeUnit`, :class:`MultiTimeUnit`, :class:`BinnedTimeUnit`, :class:`SingleTimeUnit`, :class:`TimeUnitParams`, :class:`UtcMultiTimeUnit`, :class:`UtcSingleTimeUnit`, :class:`LocalMultiTimeUnit`, :class:`LocalSingleTimeUnit`, Literal['binnedyear', 'binnedyearquarter', 'binnedyearquartermonth', 'binnedyearmonth', 'binnedyearmonthdate', 'binnedyearmonthdatehours', 'binnedyearmonthdatehoursminutes', 'binnedyearmonthdatehoursminutesseconds', 'binnedyearweek', 'binnedyearweekday', 'binnedyearweekdayhours', 'binnedyearweekdayhoursminutes', 'binnedyearweekdayhoursminutesseconds', 'binnedyeardayofyear', 'binnedutcyear', 'binnedutcyearquarter', 'binnedutcyearquartermonth', 'binnedutcyearmonth', 'binnedutcyearmonthdate', 'binnedutcyearmonthdatehours', 'binnedutcyearmonthdatehoursminutes', 'binnedutcyearmonthdatehoursminutesseconds', 'binnedutcyearweek', 'binnedutcyearweekday', 'binnedutcyearweekdayhours', 'binnedutcyearweekdayhoursminutes', 'binnedutcyearweekdayhoursminutesseconds', 'binnedutcyeardayofyear', 'utcyear', 'utcquarter', 'utcmonth', 'utcweek', 'utcday', 'utcdayofyear', 'utcdate', 'utchours', 'utcminutes', 'utcseconds', 'utcmilliseconds', 'year', 'quarter', 'month', 'week', 'day', 'dayofyear', 'date', 'hours', 'minutes', 'seconds', 'milliseconds', 'utcyearquarter', 'utcyearquartermonth', 'utcyearmonth', 'utcyearmonthdate', 'utcyearmonthdatehours', 'utcyearmonthdatehoursminutes', 'utcyearmonthdatehoursminutesseconds', 'utcyearweek', 'utcyearweekday', 'utcyearweekdayhours', 'utcyearweekdayhoursminutes', 'utcyearweekdayhoursminutesseconds', 'utcyeardayofyear', 'utcquartermonth', 'utcmonthdate', 'utcmonthdatehours', 'utcmonthdatehoursminutes', 'utcmonthdatehoursminutesseconds', 'utcweekday', 'utcweekdayhours', 'utcweekdayhoursminutes', 'utcweekdayhoursminutesseconds', 'utcdayhours', 'utcdayhoursminutes', 'utcdayhoursminutesseconds', 'utchoursminutes', 'utchoursminutesseconds', 'utcminutesseconds', 'utcsecondsmilliseconds', 'yearquarter', 'yearquartermonth', 'yearmonth', 'yearmonthdate', 'yearmonthdatehours', 'yearmonthdatehoursminutes', 'yearmonthdatehoursminutesseconds', 'yearweek', 'yearweekday', 'yearweekdayhours', 'yearweekdayhoursminutes', 'yearweekdayhoursminutesseconds', 'yeardayofyear', 'quartermonth', 'monthdate', 'monthdatehours', 'monthdatehoursminutes', 'monthdatehoursminutesseconds', 'weekday', 'weekdayhours', 'weekdayhoursminutes', 'weekdayhoursminutesseconds', 'dayhours', 'dayhoursminutes', 'dayhoursminutesseconds', 'hoursminutes', 'hoursminutesseconds', 'minutesseconds', 'secondsmilliseconds']
Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours``) for a temporal
field. or `a temporal field that gets casted as ordinal
`__.
@@ -1208,7 +1208,7 @@ class Color(
**See also:** `sort `__
documentation.
- timeUnit : dict, :class:`TimeUnit`, :class:`MultiTimeUnit`, :class:`BinnedTimeUnit`, :class:`SingleTimeUnit`, :class:`TimeUnitParams`, :class:`UtcMultiTimeUnit`, :class:`UtcSingleTimeUnit`, :class:`LocalMultiTimeUnit`, :class:`LocalSingleTimeUnit`, Literal['binnedutcyear', 'binnedutcyearquarter', 'binnedutcyearquartermonth', 'binnedutcyearmonth', 'binnedutcyearmonthdate', 'binnedutcyearmonthdatehours', 'binnedutcyearmonthdatehoursminutes', 'binnedutcyearmonthdatehoursminutesseconds', 'binnedutcyearweek', 'binnedutcyearweekday', 'binnedutcyearweekdayhours', 'binnedutcyearweekdayhoursminutes', 'binnedutcyearweekdayhoursminutesseconds', 'binnedutcyeardayofyear', 'binnedyear', 'binnedyearquarter', 'binnedyearquartermonth', 'binnedyearmonth', 'binnedyearmonthdate', 'binnedyearmonthdatehours', 'binnedyearmonthdatehoursminutes', 'binnedyearmonthdatehoursminutesseconds', 'binnedyearweek', 'binnedyearweekday', 'binnedyearweekdayhours', 'binnedyearweekdayhoursminutes', 'binnedyearweekdayhoursminutesseconds', 'binnedyeardayofyear', 'utcyear', 'utcquarter', 'utcmonth', 'utcweek', 'utcday', 'utcdayofyear', 'utcdate', 'utchours', 'utcminutes', 'utcseconds', 'utcmilliseconds', 'year', 'quarter', 'month', 'week', 'day', 'dayofyear', 'date', 'hours', 'minutes', 'seconds', 'milliseconds', 'utcyearquarter', 'utcyearquartermonth', 'utcyearmonth', 'utcyearmonthdate', 'utcyearmonthdatehours', 'utcyearmonthdatehoursminutes', 'utcyearmonthdatehoursminutesseconds', 'utcyearweek', 'utcyearweekday', 'utcyearweekdayhours', 'utcyearweekdayhoursminutes', 'utcyearweekdayhoursminutesseconds', 'utcyeardayofyear', 'utcquartermonth', 'utcmonthdate', 'utcmonthdatehours', 'utcmonthdatehoursminutes', 'utcmonthdatehoursminutesseconds', 'utcweekday', 'utcweekdayhours', 'utcweekdayhoursminutes', 'utcweekdayhoursminutesseconds', 'utcdayhours', 'utcdayhoursminutes', 'utcdayhoursminutesseconds', 'utchoursminutes', 'utchoursminutesseconds', 'utcminutesseconds', 'utcsecondsmilliseconds', 'yearquarter', 'yearquartermonth', 'yearmonth', 'yearmonthdate', 'yearmonthdatehours', 'yearmonthdatehoursminutes', 'yearmonthdatehoursminutesseconds', 'yearweek', 'yearweekday', 'yearweekdayhours', 'yearweekdayhoursminutes', 'yearweekdayhoursminutesseconds', 'yeardayofyear', 'quartermonth', 'monthdate', 'monthdatehours', 'monthdatehoursminutes', 'monthdatehoursminutesseconds', 'weekday', 'weekdayhours', 'weekdayhoursminutes', 'weekdayhoursminutesseconds', 'dayhours', 'dayhoursminutes', 'dayhoursminutesseconds', 'hoursminutes', 'hoursminutesseconds', 'minutesseconds', 'secondsmilliseconds']
+ timeUnit : dict, :class:`TimeUnit`, :class:`MultiTimeUnit`, :class:`BinnedTimeUnit`, :class:`SingleTimeUnit`, :class:`TimeUnitParams`, :class:`UtcMultiTimeUnit`, :class:`UtcSingleTimeUnit`, :class:`LocalMultiTimeUnit`, :class:`LocalSingleTimeUnit`, Literal['binnedyear', 'binnedyearquarter', 'binnedyearquartermonth', 'binnedyearmonth', 'binnedyearmonthdate', 'binnedyearmonthdatehours', 'binnedyearmonthdatehoursminutes', 'binnedyearmonthdatehoursminutesseconds', 'binnedyearweek', 'binnedyearweekday', 'binnedyearweekdayhours', 'binnedyearweekdayhoursminutes', 'binnedyearweekdayhoursminutesseconds', 'binnedyeardayofyear', 'binnedutcyear', 'binnedutcyearquarter', 'binnedutcyearquartermonth', 'binnedutcyearmonth', 'binnedutcyearmonthdate', 'binnedutcyearmonthdatehours', 'binnedutcyearmonthdatehoursminutes', 'binnedutcyearmonthdatehoursminutesseconds', 'binnedutcyearweek', 'binnedutcyearweekday', 'binnedutcyearweekdayhours', 'binnedutcyearweekdayhoursminutes', 'binnedutcyearweekdayhoursminutesseconds', 'binnedutcyeardayofyear', 'utcyear', 'utcquarter', 'utcmonth', 'utcweek', 'utcday', 'utcdayofyear', 'utcdate', 'utchours', 'utcminutes', 'utcseconds', 'utcmilliseconds', 'year', 'quarter', 'month', 'week', 'day', 'dayofyear', 'date', 'hours', 'minutes', 'seconds', 'milliseconds', 'utcyearquarter', 'utcyearquartermonth', 'utcyearmonth', 'utcyearmonthdate', 'utcyearmonthdatehours', 'utcyearmonthdatehoursminutes', 'utcyearmonthdatehoursminutesseconds', 'utcyearweek', 'utcyearweekday', 'utcyearweekdayhours', 'utcyearweekdayhoursminutes', 'utcyearweekdayhoursminutesseconds', 'utcyeardayofyear', 'utcquartermonth', 'utcmonthdate', 'utcmonthdatehours', 'utcmonthdatehoursminutes', 'utcmonthdatehoursminutesseconds', 'utcweekday', 'utcweekdayhours', 'utcweekdayhoursminutes', 'utcweekdayhoursminutesseconds', 'utcdayhours', 'utcdayhoursminutes', 'utcdayhoursminutesseconds', 'utchoursminutes', 'utchoursminutesseconds', 'utcminutesseconds', 'utcsecondsmilliseconds', 'yearquarter', 'yearquartermonth', 'yearmonth', 'yearmonthdate', 'yearmonthdatehours', 'yearmonthdatehoursminutes', 'yearmonthdatehoursminutesseconds', 'yearweek', 'yearweekday', 'yearweekdayhours', 'yearweekdayhoursminutes', 'yearweekdayhoursminutesseconds', 'yeardayofyear', 'quartermonth', 'monthdate', 'monthdatehours', 'monthdatehoursminutes', 'monthdatehoursminutesseconds', 'weekday', 'weekdayhours', 'weekdayhoursminutes', 'weekdayhoursminutesseconds', 'dayhours', 'dayhoursminutes', 'dayhoursminutesseconds', 'hoursminutes', 'hoursminutesseconds', 'minutesseconds', 'secondsmilliseconds']
Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours``) for a temporal
field. or `a temporal field that gets casted as ordinal
`__.
@@ -2013,7 +2013,7 @@ class Column(FieldChannelMixin, core.RowColumnEncodingFieldDef):
**Default value**: Depends on ``"spacing"`` property of `the view composition
configuration `__
(``20`` by default)
- timeUnit : dict, :class:`TimeUnit`, :class:`MultiTimeUnit`, :class:`BinnedTimeUnit`, :class:`SingleTimeUnit`, :class:`TimeUnitParams`, :class:`UtcMultiTimeUnit`, :class:`UtcSingleTimeUnit`, :class:`LocalMultiTimeUnit`, :class:`LocalSingleTimeUnit`, Literal['binnedutcyear', 'binnedutcyearquarter', 'binnedutcyearquartermonth', 'binnedutcyearmonth', 'binnedutcyearmonthdate', 'binnedutcyearmonthdatehours', 'binnedutcyearmonthdatehoursminutes', 'binnedutcyearmonthdatehoursminutesseconds', 'binnedutcyearweek', 'binnedutcyearweekday', 'binnedutcyearweekdayhours', 'binnedutcyearweekdayhoursminutes', 'binnedutcyearweekdayhoursminutesseconds', 'binnedutcyeardayofyear', 'binnedyear', 'binnedyearquarter', 'binnedyearquartermonth', 'binnedyearmonth', 'binnedyearmonthdate', 'binnedyearmonthdatehours', 'binnedyearmonthdatehoursminutes', 'binnedyearmonthdatehoursminutesseconds', 'binnedyearweek', 'binnedyearweekday', 'binnedyearweekdayhours', 'binnedyearweekdayhoursminutes', 'binnedyearweekdayhoursminutesseconds', 'binnedyeardayofyear', 'utcyear', 'utcquarter', 'utcmonth', 'utcweek', 'utcday', 'utcdayofyear', 'utcdate', 'utchours', 'utcminutes', 'utcseconds', 'utcmilliseconds', 'year', 'quarter', 'month', 'week', 'day', 'dayofyear', 'date', 'hours', 'minutes', 'seconds', 'milliseconds', 'utcyearquarter', 'utcyearquartermonth', 'utcyearmonth', 'utcyearmonthdate', 'utcyearmonthdatehours', 'utcyearmonthdatehoursminutes', 'utcyearmonthdatehoursminutesseconds', 'utcyearweek', 'utcyearweekday', 'utcyearweekdayhours', 'utcyearweekdayhoursminutes', 'utcyearweekdayhoursminutesseconds', 'utcyeardayofyear', 'utcquartermonth', 'utcmonthdate', 'utcmonthdatehours', 'utcmonthdatehoursminutes', 'utcmonthdatehoursminutesseconds', 'utcweekday', 'utcweekdayhours', 'utcweekdayhoursminutes', 'utcweekdayhoursminutesseconds', 'utcdayhours', 'utcdayhoursminutes', 'utcdayhoursminutesseconds', 'utchoursminutes', 'utchoursminutesseconds', 'utcminutesseconds', 'utcsecondsmilliseconds', 'yearquarter', 'yearquartermonth', 'yearmonth', 'yearmonthdate', 'yearmonthdatehours', 'yearmonthdatehoursminutes', 'yearmonthdatehoursminutesseconds', 'yearweek', 'yearweekday', 'yearweekdayhours', 'yearweekdayhoursminutes', 'yearweekdayhoursminutesseconds', 'yeardayofyear', 'quartermonth', 'monthdate', 'monthdatehours', 'monthdatehoursminutes', 'monthdatehoursminutesseconds', 'weekday', 'weekdayhours', 'weekdayhoursminutes', 'weekdayhoursminutesseconds', 'dayhours', 'dayhoursminutes', 'dayhoursminutesseconds', 'hoursminutes', 'hoursminutesseconds', 'minutesseconds', 'secondsmilliseconds']
+ timeUnit : dict, :class:`TimeUnit`, :class:`MultiTimeUnit`, :class:`BinnedTimeUnit`, :class:`SingleTimeUnit`, :class:`TimeUnitParams`, :class:`UtcMultiTimeUnit`, :class:`UtcSingleTimeUnit`, :class:`LocalMultiTimeUnit`, :class:`LocalSingleTimeUnit`, Literal['binnedyear', 'binnedyearquarter', 'binnedyearquartermonth', 'binnedyearmonth', 'binnedyearmonthdate', 'binnedyearmonthdatehours', 'binnedyearmonthdatehoursminutes', 'binnedyearmonthdatehoursminutesseconds', 'binnedyearweek', 'binnedyearweekday', 'binnedyearweekdayhours', 'binnedyearweekdayhoursminutes', 'binnedyearweekdayhoursminutesseconds', 'binnedyeardayofyear', 'binnedutcyear', 'binnedutcyearquarter', 'binnedutcyearquartermonth', 'binnedutcyearmonth', 'binnedutcyearmonthdate', 'binnedutcyearmonthdatehours', 'binnedutcyearmonthdatehoursminutes', 'binnedutcyearmonthdatehoursminutesseconds', 'binnedutcyearweek', 'binnedutcyearweekday', 'binnedutcyearweekdayhours', 'binnedutcyearweekdayhoursminutes', 'binnedutcyearweekdayhoursminutesseconds', 'binnedutcyeardayofyear', 'utcyear', 'utcquarter', 'utcmonth', 'utcweek', 'utcday', 'utcdayofyear', 'utcdate', 'utchours', 'utcminutes', 'utcseconds', 'utcmilliseconds', 'year', 'quarter', 'month', 'week', 'day', 'dayofyear', 'date', 'hours', 'minutes', 'seconds', 'milliseconds', 'utcyearquarter', 'utcyearquartermonth', 'utcyearmonth', 'utcyearmonthdate', 'utcyearmonthdatehours', 'utcyearmonthdatehoursminutes', 'utcyearmonthdatehoursminutesseconds', 'utcyearweek', 'utcyearweekday', 'utcyearweekdayhours', 'utcyearweekdayhoursminutes', 'utcyearweekdayhoursminutesseconds', 'utcyeardayofyear', 'utcquartermonth', 'utcmonthdate', 'utcmonthdatehours', 'utcmonthdatehoursminutes', 'utcmonthdatehoursminutesseconds', 'utcweekday', 'utcweekdayhours', 'utcweekdayhoursminutes', 'utcweekdayhoursminutesseconds', 'utcdayhours', 'utcdayhoursminutes', 'utcdayhoursminutesseconds', 'utchoursminutes', 'utchoursminutesseconds', 'utcminutesseconds', 'utcsecondsmilliseconds', 'yearquarter', 'yearquartermonth', 'yearmonth', 'yearmonthdate', 'yearmonthdatehours', 'yearmonthdatehoursminutes', 'yearmonthdatehoursminutesseconds', 'yearweek', 'yearweekday', 'yearweekdayhours', 'yearweekdayhoursminutes', 'yearweekdayhoursminutesseconds', 'yeardayofyear', 'quartermonth', 'monthdate', 'monthdatehours', 'monthdatehoursminutes', 'monthdatehoursminutesseconds', 'weekday', 'weekdayhours', 'weekdayhoursminutes', 'weekdayhoursminutesseconds', 'dayhours', 'dayhoursminutes', 'dayhoursminutesseconds', 'hoursminutes', 'hoursminutesseconds', 'minutesseconds', 'secondsmilliseconds']
Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours``) for a temporal
field. or `a temporal field that gets casted as ordinal
`__.
@@ -2390,7 +2390,7 @@ class Description(FieldChannelMixin, core.StringFieldDefWithCondition):
* ``"time"`` for temporal fields and ordinal and nominal fields with ``timeUnit``.
* ``"number"`` for quantitative fields as well as ordinal and nominal fields without
``timeUnit``.
- timeUnit : dict, :class:`TimeUnit`, :class:`MultiTimeUnit`, :class:`BinnedTimeUnit`, :class:`SingleTimeUnit`, :class:`TimeUnitParams`, :class:`UtcMultiTimeUnit`, :class:`UtcSingleTimeUnit`, :class:`LocalMultiTimeUnit`, :class:`LocalSingleTimeUnit`, Literal['binnedutcyear', 'binnedutcyearquarter', 'binnedutcyearquartermonth', 'binnedutcyearmonth', 'binnedutcyearmonthdate', 'binnedutcyearmonthdatehours', 'binnedutcyearmonthdatehoursminutes', 'binnedutcyearmonthdatehoursminutesseconds', 'binnedutcyearweek', 'binnedutcyearweekday', 'binnedutcyearweekdayhours', 'binnedutcyearweekdayhoursminutes', 'binnedutcyearweekdayhoursminutesseconds', 'binnedutcyeardayofyear', 'binnedyear', 'binnedyearquarter', 'binnedyearquartermonth', 'binnedyearmonth', 'binnedyearmonthdate', 'binnedyearmonthdatehours', 'binnedyearmonthdatehoursminutes', 'binnedyearmonthdatehoursminutesseconds', 'binnedyearweek', 'binnedyearweekday', 'binnedyearweekdayhours', 'binnedyearweekdayhoursminutes', 'binnedyearweekdayhoursminutesseconds', 'binnedyeardayofyear', 'utcyear', 'utcquarter', 'utcmonth', 'utcweek', 'utcday', 'utcdayofyear', 'utcdate', 'utchours', 'utcminutes', 'utcseconds', 'utcmilliseconds', 'year', 'quarter', 'month', 'week', 'day', 'dayofyear', 'date', 'hours', 'minutes', 'seconds', 'milliseconds', 'utcyearquarter', 'utcyearquartermonth', 'utcyearmonth', 'utcyearmonthdate', 'utcyearmonthdatehours', 'utcyearmonthdatehoursminutes', 'utcyearmonthdatehoursminutesseconds', 'utcyearweek', 'utcyearweekday', 'utcyearweekdayhours', 'utcyearweekdayhoursminutes', 'utcyearweekdayhoursminutesseconds', 'utcyeardayofyear', 'utcquartermonth', 'utcmonthdate', 'utcmonthdatehours', 'utcmonthdatehoursminutes', 'utcmonthdatehoursminutesseconds', 'utcweekday', 'utcweekdayhours', 'utcweekdayhoursminutes', 'utcweekdayhoursminutesseconds', 'utcdayhours', 'utcdayhoursminutes', 'utcdayhoursminutesseconds', 'utchoursminutes', 'utchoursminutesseconds', 'utcminutesseconds', 'utcsecondsmilliseconds', 'yearquarter', 'yearquartermonth', 'yearmonth', 'yearmonthdate', 'yearmonthdatehours', 'yearmonthdatehoursminutes', 'yearmonthdatehoursminutesseconds', 'yearweek', 'yearweekday', 'yearweekdayhours', 'yearweekdayhoursminutes', 'yearweekdayhoursminutesseconds', 'yeardayofyear', 'quartermonth', 'monthdate', 'monthdatehours', 'monthdatehoursminutes', 'monthdatehoursminutesseconds', 'weekday', 'weekdayhours', 'weekdayhoursminutes', 'weekdayhoursminutesseconds', 'dayhours', 'dayhoursminutes', 'dayhoursminutesseconds', 'hoursminutes', 'hoursminutesseconds', 'minutesseconds', 'secondsmilliseconds']
+ timeUnit : dict, :class:`TimeUnit`, :class:`MultiTimeUnit`, :class:`BinnedTimeUnit`, :class:`SingleTimeUnit`, :class:`TimeUnitParams`, :class:`UtcMultiTimeUnit`, :class:`UtcSingleTimeUnit`, :class:`LocalMultiTimeUnit`, :class:`LocalSingleTimeUnit`, Literal['binnedyear', 'binnedyearquarter', 'binnedyearquartermonth', 'binnedyearmonth', 'binnedyearmonthdate', 'binnedyearmonthdatehours', 'binnedyearmonthdatehoursminutes', 'binnedyearmonthdatehoursminutesseconds', 'binnedyearweek', 'binnedyearweekday', 'binnedyearweekdayhours', 'binnedyearweekdayhoursminutes', 'binnedyearweekdayhoursminutesseconds', 'binnedyeardayofyear', 'binnedutcyear', 'binnedutcyearquarter', 'binnedutcyearquartermonth', 'binnedutcyearmonth', 'binnedutcyearmonthdate', 'binnedutcyearmonthdatehours', 'binnedutcyearmonthdatehoursminutes', 'binnedutcyearmonthdatehoursminutesseconds', 'binnedutcyearweek', 'binnedutcyearweekday', 'binnedutcyearweekdayhours', 'binnedutcyearweekdayhoursminutes', 'binnedutcyearweekdayhoursminutesseconds', 'binnedutcyeardayofyear', 'utcyear', 'utcquarter', 'utcmonth', 'utcweek', 'utcday', 'utcdayofyear', 'utcdate', 'utchours', 'utcminutes', 'utcseconds', 'utcmilliseconds', 'year', 'quarter', 'month', 'week', 'day', 'dayofyear', 'date', 'hours', 'minutes', 'seconds', 'milliseconds', 'utcyearquarter', 'utcyearquartermonth', 'utcyearmonth', 'utcyearmonthdate', 'utcyearmonthdatehours', 'utcyearmonthdatehoursminutes', 'utcyearmonthdatehoursminutesseconds', 'utcyearweek', 'utcyearweekday', 'utcyearweekdayhours', 'utcyearweekdayhoursminutes', 'utcyearweekdayhoursminutesseconds', 'utcyeardayofyear', 'utcquartermonth', 'utcmonthdate', 'utcmonthdatehours', 'utcmonthdatehoursminutes', 'utcmonthdatehoursminutesseconds', 'utcweekday', 'utcweekdayhours', 'utcweekdayhoursminutes', 'utcweekdayhoursminutesseconds', 'utcdayhours', 'utcdayhoursminutes', 'utcdayhoursminutesseconds', 'utchoursminutes', 'utchoursminutesseconds', 'utcminutesseconds', 'utcsecondsmilliseconds', 'yearquarter', 'yearquartermonth', 'yearmonth', 'yearmonthdate', 'yearmonthdatehours', 'yearmonthdatehoursminutes', 'yearmonthdatehoursminutesseconds', 'yearweek', 'yearweekday', 'yearweekdayhours', 'yearweekdayhoursminutes', 'yearweekdayhoursminutesseconds', 'yeardayofyear', 'quartermonth', 'monthdate', 'monthdatehours', 'monthdatehoursminutes', 'monthdatehoursminutesseconds', 'weekday', 'weekdayhours', 'weekdayhoursminutes', 'weekdayhoursminutesseconds', 'dayhours', 'dayhoursminutes', 'dayhoursminutesseconds', 'hoursminutes', 'hoursminutesseconds', 'minutesseconds', 'secondsmilliseconds']
Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours``) for a temporal
field. or `a temporal field that gets casted as ordinal
`__.
@@ -2796,7 +2796,7 @@ class Detail(FieldChannelMixin, core.FieldDefWithoutScale):
about escaping in the `field documentation
`__. 2) ``field`` is not required
if ``aggregate`` is ``count``.
- timeUnit : dict, :class:`TimeUnit`, :class:`MultiTimeUnit`, :class:`BinnedTimeUnit`, :class:`SingleTimeUnit`, :class:`TimeUnitParams`, :class:`UtcMultiTimeUnit`, :class:`UtcSingleTimeUnit`, :class:`LocalMultiTimeUnit`, :class:`LocalSingleTimeUnit`, Literal['binnedutcyear', 'binnedutcyearquarter', 'binnedutcyearquartermonth', 'binnedutcyearmonth', 'binnedutcyearmonthdate', 'binnedutcyearmonthdatehours', 'binnedutcyearmonthdatehoursminutes', 'binnedutcyearmonthdatehoursminutesseconds', 'binnedutcyearweek', 'binnedutcyearweekday', 'binnedutcyearweekdayhours', 'binnedutcyearweekdayhoursminutes', 'binnedutcyearweekdayhoursminutesseconds', 'binnedutcyeardayofyear', 'binnedyear', 'binnedyearquarter', 'binnedyearquartermonth', 'binnedyearmonth', 'binnedyearmonthdate', 'binnedyearmonthdatehours', 'binnedyearmonthdatehoursminutes', 'binnedyearmonthdatehoursminutesseconds', 'binnedyearweek', 'binnedyearweekday', 'binnedyearweekdayhours', 'binnedyearweekdayhoursminutes', 'binnedyearweekdayhoursminutesseconds', 'binnedyeardayofyear', 'utcyear', 'utcquarter', 'utcmonth', 'utcweek', 'utcday', 'utcdayofyear', 'utcdate', 'utchours', 'utcminutes', 'utcseconds', 'utcmilliseconds', 'year', 'quarter', 'month', 'week', 'day', 'dayofyear', 'date', 'hours', 'minutes', 'seconds', 'milliseconds', 'utcyearquarter', 'utcyearquartermonth', 'utcyearmonth', 'utcyearmonthdate', 'utcyearmonthdatehours', 'utcyearmonthdatehoursminutes', 'utcyearmonthdatehoursminutesseconds', 'utcyearweek', 'utcyearweekday', 'utcyearweekdayhours', 'utcyearweekdayhoursminutes', 'utcyearweekdayhoursminutesseconds', 'utcyeardayofyear', 'utcquartermonth', 'utcmonthdate', 'utcmonthdatehours', 'utcmonthdatehoursminutes', 'utcmonthdatehoursminutesseconds', 'utcweekday', 'utcweekdayhours', 'utcweekdayhoursminutes', 'utcweekdayhoursminutesseconds', 'utcdayhours', 'utcdayhoursminutes', 'utcdayhoursminutesseconds', 'utchoursminutes', 'utchoursminutesseconds', 'utcminutesseconds', 'utcsecondsmilliseconds', 'yearquarter', 'yearquartermonth', 'yearmonth', 'yearmonthdate', 'yearmonthdatehours', 'yearmonthdatehoursminutes', 'yearmonthdatehoursminutesseconds', 'yearweek', 'yearweekday', 'yearweekdayhours', 'yearweekdayhoursminutes', 'yearweekdayhoursminutesseconds', 'yeardayofyear', 'quartermonth', 'monthdate', 'monthdatehours', 'monthdatehoursminutes', 'monthdatehoursminutesseconds', 'weekday', 'weekdayhours', 'weekdayhoursminutes', 'weekdayhoursminutesseconds', 'dayhours', 'dayhoursminutes', 'dayhoursminutesseconds', 'hoursminutes', 'hoursminutesseconds', 'minutesseconds', 'secondsmilliseconds']
+ timeUnit : dict, :class:`TimeUnit`, :class:`MultiTimeUnit`, :class:`BinnedTimeUnit`, :class:`SingleTimeUnit`, :class:`TimeUnitParams`, :class:`UtcMultiTimeUnit`, :class:`UtcSingleTimeUnit`, :class:`LocalMultiTimeUnit`, :class:`LocalSingleTimeUnit`, Literal['binnedyear', 'binnedyearquarter', 'binnedyearquartermonth', 'binnedyearmonth', 'binnedyearmonthdate', 'binnedyearmonthdatehours', 'binnedyearmonthdatehoursminutes', 'binnedyearmonthdatehoursminutesseconds', 'binnedyearweek', 'binnedyearweekday', 'binnedyearweekdayhours', 'binnedyearweekdayhoursminutes', 'binnedyearweekdayhoursminutesseconds', 'binnedyeardayofyear', 'binnedutcyear', 'binnedutcyearquarter', 'binnedutcyearquartermonth', 'binnedutcyearmonth', 'binnedutcyearmonthdate', 'binnedutcyearmonthdatehours', 'binnedutcyearmonthdatehoursminutes', 'binnedutcyearmonthdatehoursminutesseconds', 'binnedutcyearweek', 'binnedutcyearweekday', 'binnedutcyearweekdayhours', 'binnedutcyearweekdayhoursminutes', 'binnedutcyearweekdayhoursminutesseconds', 'binnedutcyeardayofyear', 'utcyear', 'utcquarter', 'utcmonth', 'utcweek', 'utcday', 'utcdayofyear', 'utcdate', 'utchours', 'utcminutes', 'utcseconds', 'utcmilliseconds', 'year', 'quarter', 'month', 'week', 'day', 'dayofyear', 'date', 'hours', 'minutes', 'seconds', 'milliseconds', 'utcyearquarter', 'utcyearquartermonth', 'utcyearmonth', 'utcyearmonthdate', 'utcyearmonthdatehours', 'utcyearmonthdatehoursminutes', 'utcyearmonthdatehoursminutesseconds', 'utcyearweek', 'utcyearweekday', 'utcyearweekdayhours', 'utcyearweekdayhoursminutes', 'utcyearweekdayhoursminutesseconds', 'utcyeardayofyear', 'utcquartermonth', 'utcmonthdate', 'utcmonthdatehours', 'utcmonthdatehoursminutes', 'utcmonthdatehoursminutesseconds', 'utcweekday', 'utcweekdayhours', 'utcweekdayhoursminutes', 'utcweekdayhoursminutesseconds', 'utcdayhours', 'utcdayhoursminutes', 'utcdayhoursminutesseconds', 'utchoursminutes', 'utchoursminutesseconds', 'utcminutesseconds', 'utcsecondsmilliseconds', 'yearquarter', 'yearquartermonth', 'yearmonth', 'yearmonthdate', 'yearmonthdatehours', 'yearmonthdatehoursminutes', 'yearmonthdatehoursminutesseconds', 'yearweek', 'yearweekday', 'yearweekdayhours', 'yearweekdayhoursminutes', 'yearweekdayhoursminutesseconds', 'yeardayofyear', 'quartermonth', 'monthdate', 'monthdatehours', 'monthdatehoursminutes', 'monthdatehoursminutesseconds', 'weekday', 'weekdayhours', 'weekdayhoursminutes', 'weekdayhoursminutesseconds', 'dayhours', 'dayhoursminutes', 'dayhoursminutesseconds', 'hoursminutes', 'hoursminutesseconds', 'minutesseconds', 'secondsmilliseconds']
Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours``) for a temporal
field. or `a temporal field that gets casted as ordinal
`__.
@@ -3126,7 +3126,7 @@ class Facet(FieldChannelMixin, core.FacetEncodingFieldDef):
**Default value**: Depends on ``"spacing"`` property of `the view composition
configuration `__
(``20`` by default)
- timeUnit : dict, :class:`TimeUnit`, :class:`MultiTimeUnit`, :class:`BinnedTimeUnit`, :class:`SingleTimeUnit`, :class:`TimeUnitParams`, :class:`UtcMultiTimeUnit`, :class:`UtcSingleTimeUnit`, :class:`LocalMultiTimeUnit`, :class:`LocalSingleTimeUnit`, Literal['binnedutcyear', 'binnedutcyearquarter', 'binnedutcyearquartermonth', 'binnedutcyearmonth', 'binnedutcyearmonthdate', 'binnedutcyearmonthdatehours', 'binnedutcyearmonthdatehoursminutes', 'binnedutcyearmonthdatehoursminutesseconds', 'binnedutcyearweek', 'binnedutcyearweekday', 'binnedutcyearweekdayhours', 'binnedutcyearweekdayhoursminutes', 'binnedutcyearweekdayhoursminutesseconds', 'binnedutcyeardayofyear', 'binnedyear', 'binnedyearquarter', 'binnedyearquartermonth', 'binnedyearmonth', 'binnedyearmonthdate', 'binnedyearmonthdatehours', 'binnedyearmonthdatehoursminutes', 'binnedyearmonthdatehoursminutesseconds', 'binnedyearweek', 'binnedyearweekday', 'binnedyearweekdayhours', 'binnedyearweekdayhoursminutes', 'binnedyearweekdayhoursminutesseconds', 'binnedyeardayofyear', 'utcyear', 'utcquarter', 'utcmonth', 'utcweek', 'utcday', 'utcdayofyear', 'utcdate', 'utchours', 'utcminutes', 'utcseconds', 'utcmilliseconds', 'year', 'quarter', 'month', 'week', 'day', 'dayofyear', 'date', 'hours', 'minutes', 'seconds', 'milliseconds', 'utcyearquarter', 'utcyearquartermonth', 'utcyearmonth', 'utcyearmonthdate', 'utcyearmonthdatehours', 'utcyearmonthdatehoursminutes', 'utcyearmonthdatehoursminutesseconds', 'utcyearweek', 'utcyearweekday', 'utcyearweekdayhours', 'utcyearweekdayhoursminutes', 'utcyearweekdayhoursminutesseconds', 'utcyeardayofyear', 'utcquartermonth', 'utcmonthdate', 'utcmonthdatehours', 'utcmonthdatehoursminutes', 'utcmonthdatehoursminutesseconds', 'utcweekday', 'utcweekdayhours', 'utcweekdayhoursminutes', 'utcweekdayhoursminutesseconds', 'utcdayhours', 'utcdayhoursminutes', 'utcdayhoursminutesseconds', 'utchoursminutes', 'utchoursminutesseconds', 'utcminutesseconds', 'utcsecondsmilliseconds', 'yearquarter', 'yearquartermonth', 'yearmonth', 'yearmonthdate', 'yearmonthdatehours', 'yearmonthdatehoursminutes', 'yearmonthdatehoursminutesseconds', 'yearweek', 'yearweekday', 'yearweekdayhours', 'yearweekdayhoursminutes', 'yearweekdayhoursminutesseconds', 'yeardayofyear', 'quartermonth', 'monthdate', 'monthdatehours', 'monthdatehoursminutes', 'monthdatehoursminutesseconds', 'weekday', 'weekdayhours', 'weekdayhoursminutes', 'weekdayhoursminutesseconds', 'dayhours', 'dayhoursminutes', 'dayhoursminutesseconds', 'hoursminutes', 'hoursminutesseconds', 'minutesseconds', 'secondsmilliseconds']
+ timeUnit : dict, :class:`TimeUnit`, :class:`MultiTimeUnit`, :class:`BinnedTimeUnit`, :class:`SingleTimeUnit`, :class:`TimeUnitParams`, :class:`UtcMultiTimeUnit`, :class:`UtcSingleTimeUnit`, :class:`LocalMultiTimeUnit`, :class:`LocalSingleTimeUnit`, Literal['binnedyear', 'binnedyearquarter', 'binnedyearquartermonth', 'binnedyearmonth', 'binnedyearmonthdate', 'binnedyearmonthdatehours', 'binnedyearmonthdatehoursminutes', 'binnedyearmonthdatehoursminutesseconds', 'binnedyearweek', 'binnedyearweekday', 'binnedyearweekdayhours', 'binnedyearweekdayhoursminutes', 'binnedyearweekdayhoursminutesseconds', 'binnedyeardayofyear', 'binnedutcyear', 'binnedutcyearquarter', 'binnedutcyearquartermonth', 'binnedutcyearmonth', 'binnedutcyearmonthdate', 'binnedutcyearmonthdatehours', 'binnedutcyearmonthdatehoursminutes', 'binnedutcyearmonthdatehoursminutesseconds', 'binnedutcyearweek', 'binnedutcyearweekday', 'binnedutcyearweekdayhours', 'binnedutcyearweekdayhoursminutes', 'binnedutcyearweekdayhoursminutesseconds', 'binnedutcyeardayofyear', 'utcyear', 'utcquarter', 'utcmonth', 'utcweek', 'utcday', 'utcdayofyear', 'utcdate', 'utchours', 'utcminutes', 'utcseconds', 'utcmilliseconds', 'year', 'quarter', 'month', 'week', 'day', 'dayofyear', 'date', 'hours', 'minutes', 'seconds', 'milliseconds', 'utcyearquarter', 'utcyearquartermonth', 'utcyearmonth', 'utcyearmonthdate', 'utcyearmonthdatehours', 'utcyearmonthdatehoursminutes', 'utcyearmonthdatehoursminutesseconds', 'utcyearweek', 'utcyearweekday', 'utcyearweekdayhours', 'utcyearweekdayhoursminutes', 'utcyearweekdayhoursminutesseconds', 'utcyeardayofyear', 'utcquartermonth', 'utcmonthdate', 'utcmonthdatehours', 'utcmonthdatehoursminutes', 'utcmonthdatehoursminutesseconds', 'utcweekday', 'utcweekdayhours', 'utcweekdayhoursminutes', 'utcweekdayhoursminutesseconds', 'utcdayhours', 'utcdayhoursminutes', 'utcdayhoursminutesseconds', 'utchoursminutes', 'utchoursminutesseconds', 'utcminutesseconds', 'utcsecondsmilliseconds', 'yearquarter', 'yearquartermonth', 'yearmonth', 'yearmonthdate', 'yearmonthdatehours', 'yearmonthdatehoursminutes', 'yearmonthdatehoursminutesseconds', 'yearweek', 'yearweekday', 'yearweekdayhours', 'yearweekdayhoursminutes', 'yearweekdayhoursminutesseconds', 'yeardayofyear', 'quartermonth', 'monthdate', 'monthdatehours', 'monthdatehoursminutes', 'monthdatehoursminutesseconds', 'weekday', 'weekdayhours', 'weekdayhoursminutes', 'weekdayhoursminutesseconds', 'dayhours', 'dayhoursminutes', 'dayhoursminutesseconds', 'hoursminutes', 'hoursminutesseconds', 'minutesseconds', 'secondsmilliseconds']
Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours``) for a temporal
field. or `a temporal field that gets casted as ordinal
`__.
@@ -3553,7 +3553,7 @@ class Fill(
**See also:** `sort `__
documentation.
- timeUnit : dict, :class:`TimeUnit`, :class:`MultiTimeUnit`, :class:`BinnedTimeUnit`, :class:`SingleTimeUnit`, :class:`TimeUnitParams`, :class:`UtcMultiTimeUnit`, :class:`UtcSingleTimeUnit`, :class:`LocalMultiTimeUnit`, :class:`LocalSingleTimeUnit`, Literal['binnedutcyear', 'binnedutcyearquarter', 'binnedutcyearquartermonth', 'binnedutcyearmonth', 'binnedutcyearmonthdate', 'binnedutcyearmonthdatehours', 'binnedutcyearmonthdatehoursminutes', 'binnedutcyearmonthdatehoursminutesseconds', 'binnedutcyearweek', 'binnedutcyearweekday', 'binnedutcyearweekdayhours', 'binnedutcyearweekdayhoursminutes', 'binnedutcyearweekdayhoursminutesseconds', 'binnedutcyeardayofyear', 'binnedyear', 'binnedyearquarter', 'binnedyearquartermonth', 'binnedyearmonth', 'binnedyearmonthdate', 'binnedyearmonthdatehours', 'binnedyearmonthdatehoursminutes', 'binnedyearmonthdatehoursminutesseconds', 'binnedyearweek', 'binnedyearweekday', 'binnedyearweekdayhours', 'binnedyearweekdayhoursminutes', 'binnedyearweekdayhoursminutesseconds', 'binnedyeardayofyear', 'utcyear', 'utcquarter', 'utcmonth', 'utcweek', 'utcday', 'utcdayofyear', 'utcdate', 'utchours', 'utcminutes', 'utcseconds', 'utcmilliseconds', 'year', 'quarter', 'month', 'week', 'day', 'dayofyear', 'date', 'hours', 'minutes', 'seconds', 'milliseconds', 'utcyearquarter', 'utcyearquartermonth', 'utcyearmonth', 'utcyearmonthdate', 'utcyearmonthdatehours', 'utcyearmonthdatehoursminutes', 'utcyearmonthdatehoursminutesseconds', 'utcyearweek', 'utcyearweekday', 'utcyearweekdayhours', 'utcyearweekdayhoursminutes', 'utcyearweekdayhoursminutesseconds', 'utcyeardayofyear', 'utcquartermonth', 'utcmonthdate', 'utcmonthdatehours', 'utcmonthdatehoursminutes', 'utcmonthdatehoursminutesseconds', 'utcweekday', 'utcweekdayhours', 'utcweekdayhoursminutes', 'utcweekdayhoursminutesseconds', 'utcdayhours', 'utcdayhoursminutes', 'utcdayhoursminutesseconds', 'utchoursminutes', 'utchoursminutesseconds', 'utcminutesseconds', 'utcsecondsmilliseconds', 'yearquarter', 'yearquartermonth', 'yearmonth', 'yearmonthdate', 'yearmonthdatehours', 'yearmonthdatehoursminutes', 'yearmonthdatehoursminutesseconds', 'yearweek', 'yearweekday', 'yearweekdayhours', 'yearweekdayhoursminutes', 'yearweekdayhoursminutesseconds', 'yeardayofyear', 'quartermonth', 'monthdate', 'monthdatehours', 'monthdatehoursminutes', 'monthdatehoursminutesseconds', 'weekday', 'weekdayhours', 'weekdayhoursminutes', 'weekdayhoursminutesseconds', 'dayhours', 'dayhoursminutes', 'dayhoursminutesseconds', 'hoursminutes', 'hoursminutesseconds', 'minutesseconds', 'secondsmilliseconds']
+ timeUnit : dict, :class:`TimeUnit`, :class:`MultiTimeUnit`, :class:`BinnedTimeUnit`, :class:`SingleTimeUnit`, :class:`TimeUnitParams`, :class:`UtcMultiTimeUnit`, :class:`UtcSingleTimeUnit`, :class:`LocalMultiTimeUnit`, :class:`LocalSingleTimeUnit`, Literal['binnedyear', 'binnedyearquarter', 'binnedyearquartermonth', 'binnedyearmonth', 'binnedyearmonthdate', 'binnedyearmonthdatehours', 'binnedyearmonthdatehoursminutes', 'binnedyearmonthdatehoursminutesseconds', 'binnedyearweek', 'binnedyearweekday', 'binnedyearweekdayhours', 'binnedyearweekdayhoursminutes', 'binnedyearweekdayhoursminutesseconds', 'binnedyeardayofyear', 'binnedutcyear', 'binnedutcyearquarter', 'binnedutcyearquartermonth', 'binnedutcyearmonth', 'binnedutcyearmonthdate', 'binnedutcyearmonthdatehours', 'binnedutcyearmonthdatehoursminutes', 'binnedutcyearmonthdatehoursminutesseconds', 'binnedutcyearweek', 'binnedutcyearweekday', 'binnedutcyearweekdayhours', 'binnedutcyearweekdayhoursminutes', 'binnedutcyearweekdayhoursminutesseconds', 'binnedutcyeardayofyear', 'utcyear', 'utcquarter', 'utcmonth', 'utcweek', 'utcday', 'utcdayofyear', 'utcdate', 'utchours', 'utcminutes', 'utcseconds', 'utcmilliseconds', 'year', 'quarter', 'month', 'week', 'day', 'dayofyear', 'date', 'hours', 'minutes', 'seconds', 'milliseconds', 'utcyearquarter', 'utcyearquartermonth', 'utcyearmonth', 'utcyearmonthdate', 'utcyearmonthdatehours', 'utcyearmonthdatehoursminutes', 'utcyearmonthdatehoursminutesseconds', 'utcyearweek', 'utcyearweekday', 'utcyearweekdayhours', 'utcyearweekdayhoursminutes', 'utcyearweekdayhoursminutesseconds', 'utcyeardayofyear', 'utcquartermonth', 'utcmonthdate', 'utcmonthdatehours', 'utcmonthdatehoursminutes', 'utcmonthdatehoursminutesseconds', 'utcweekday', 'utcweekdayhours', 'utcweekdayhoursminutes', 'utcweekdayhoursminutesseconds', 'utcdayhours', 'utcdayhoursminutes', 'utcdayhoursminutesseconds', 'utchoursminutes', 'utchoursminutesseconds', 'utcminutesseconds', 'utcsecondsmilliseconds', 'yearquarter', 'yearquartermonth', 'yearmonth', 'yearmonthdate', 'yearmonthdatehours', 'yearmonthdatehoursminutes', 'yearmonthdatehoursminutesseconds', 'yearweek', 'yearweekday', 'yearweekdayhours', 'yearweekdayhoursminutes', 'yearweekdayhoursminutesseconds', 'yeardayofyear', 'quartermonth', 'monthdate', 'monthdatehours', 'monthdatehoursminutes', 'monthdatehoursminutesseconds', 'weekday', 'weekdayhours', 'weekdayhoursminutes', 'weekdayhoursminutesseconds', 'dayhours', 'dayhoursminutes', 'dayhoursminutesseconds', 'hoursminutes', 'hoursminutesseconds', 'minutesseconds', 'secondsmilliseconds']
Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours``) for a temporal
field. or `a temporal field that gets casted as ordinal
`__.
@@ -4375,7 +4375,7 @@ class FillOpacity(
**See also:** `sort `__
documentation.
- timeUnit : dict, :class:`TimeUnit`, :class:`MultiTimeUnit`, :class:`BinnedTimeUnit`, :class:`SingleTimeUnit`, :class:`TimeUnitParams`, :class:`UtcMultiTimeUnit`, :class:`UtcSingleTimeUnit`, :class:`LocalMultiTimeUnit`, :class:`LocalSingleTimeUnit`, Literal['binnedutcyear', 'binnedutcyearquarter', 'binnedutcyearquartermonth', 'binnedutcyearmonth', 'binnedutcyearmonthdate', 'binnedutcyearmonthdatehours', 'binnedutcyearmonthdatehoursminutes', 'binnedutcyearmonthdatehoursminutesseconds', 'binnedutcyearweek', 'binnedutcyearweekday', 'binnedutcyearweekdayhours', 'binnedutcyearweekdayhoursminutes', 'binnedutcyearweekdayhoursminutesseconds', 'binnedutcyeardayofyear', 'binnedyear', 'binnedyearquarter', 'binnedyearquartermonth', 'binnedyearmonth', 'binnedyearmonthdate', 'binnedyearmonthdatehours', 'binnedyearmonthdatehoursminutes', 'binnedyearmonthdatehoursminutesseconds', 'binnedyearweek', 'binnedyearweekday', 'binnedyearweekdayhours', 'binnedyearweekdayhoursminutes', 'binnedyearweekdayhoursminutesseconds', 'binnedyeardayofyear', 'utcyear', 'utcquarter', 'utcmonth', 'utcweek', 'utcday', 'utcdayofyear', 'utcdate', 'utchours', 'utcminutes', 'utcseconds', 'utcmilliseconds', 'year', 'quarter', 'month', 'week', 'day', 'dayofyear', 'date', 'hours', 'minutes', 'seconds', 'milliseconds', 'utcyearquarter', 'utcyearquartermonth', 'utcyearmonth', 'utcyearmonthdate', 'utcyearmonthdatehours', 'utcyearmonthdatehoursminutes', 'utcyearmonthdatehoursminutesseconds', 'utcyearweek', 'utcyearweekday', 'utcyearweekdayhours', 'utcyearweekdayhoursminutes', 'utcyearweekdayhoursminutesseconds', 'utcyeardayofyear', 'utcquartermonth', 'utcmonthdate', 'utcmonthdatehours', 'utcmonthdatehoursminutes', 'utcmonthdatehoursminutesseconds', 'utcweekday', 'utcweekdayhours', 'utcweekdayhoursminutes', 'utcweekdayhoursminutesseconds', 'utcdayhours', 'utcdayhoursminutes', 'utcdayhoursminutesseconds', 'utchoursminutes', 'utchoursminutesseconds', 'utcminutesseconds', 'utcsecondsmilliseconds', 'yearquarter', 'yearquartermonth', 'yearmonth', 'yearmonthdate', 'yearmonthdatehours', 'yearmonthdatehoursminutes', 'yearmonthdatehoursminutesseconds', 'yearweek', 'yearweekday', 'yearweekdayhours', 'yearweekdayhoursminutes', 'yearweekdayhoursminutesseconds', 'yeardayofyear', 'quartermonth', 'monthdate', 'monthdatehours', 'monthdatehoursminutes', 'monthdatehoursminutesseconds', 'weekday', 'weekdayhours', 'weekdayhoursminutes', 'weekdayhoursminutesseconds', 'dayhours', 'dayhoursminutes', 'dayhoursminutesseconds', 'hoursminutes', 'hoursminutesseconds', 'minutesseconds', 'secondsmilliseconds']
+ timeUnit : dict, :class:`TimeUnit`, :class:`MultiTimeUnit`, :class:`BinnedTimeUnit`, :class:`SingleTimeUnit`, :class:`TimeUnitParams`, :class:`UtcMultiTimeUnit`, :class:`UtcSingleTimeUnit`, :class:`LocalMultiTimeUnit`, :class:`LocalSingleTimeUnit`, Literal['binnedyear', 'binnedyearquarter', 'binnedyearquartermonth', 'binnedyearmonth', 'binnedyearmonthdate', 'binnedyearmonthdatehours', 'binnedyearmonthdatehoursminutes', 'binnedyearmonthdatehoursminutesseconds', 'binnedyearweek', 'binnedyearweekday', 'binnedyearweekdayhours', 'binnedyearweekdayhoursminutes', 'binnedyearweekdayhoursminutesseconds', 'binnedyeardayofyear', 'binnedutcyear', 'binnedutcyearquarter', 'binnedutcyearquartermonth', 'binnedutcyearmonth', 'binnedutcyearmonthdate', 'binnedutcyearmonthdatehours', 'binnedutcyearmonthdatehoursminutes', 'binnedutcyearmonthdatehoursminutesseconds', 'binnedutcyearweek', 'binnedutcyearweekday', 'binnedutcyearweekdayhours', 'binnedutcyearweekdayhoursminutes', 'binnedutcyearweekdayhoursminutesseconds', 'binnedutcyeardayofyear', 'utcyear', 'utcquarter', 'utcmonth', 'utcweek', 'utcday', 'utcdayofyear', 'utcdate', 'utchours', 'utcminutes', 'utcseconds', 'utcmilliseconds', 'year', 'quarter', 'month', 'week', 'day', 'dayofyear', 'date', 'hours', 'minutes', 'seconds', 'milliseconds', 'utcyearquarter', 'utcyearquartermonth', 'utcyearmonth', 'utcyearmonthdate', 'utcyearmonthdatehours', 'utcyearmonthdatehoursminutes', 'utcyearmonthdatehoursminutesseconds', 'utcyearweek', 'utcyearweekday', 'utcyearweekdayhours', 'utcyearweekdayhoursminutes', 'utcyearweekdayhoursminutesseconds', 'utcyeardayofyear', 'utcquartermonth', 'utcmonthdate', 'utcmonthdatehours', 'utcmonthdatehoursminutes', 'utcmonthdatehoursminutesseconds', 'utcweekday', 'utcweekdayhours', 'utcweekdayhoursminutes', 'utcweekdayhoursminutesseconds', 'utcdayhours', 'utcdayhoursminutes', 'utcdayhoursminutesseconds', 'utchoursminutes', 'utchoursminutesseconds', 'utcminutesseconds', 'utcsecondsmilliseconds', 'yearquarter', 'yearquartermonth', 'yearmonth', 'yearmonthdate', 'yearmonthdatehours', 'yearmonthdatehoursminutes', 'yearmonthdatehoursminutesseconds', 'yearweek', 'yearweekday', 'yearweekdayhours', 'yearweekdayhoursminutes', 'yearweekdayhoursminutesseconds', 'yeardayofyear', 'quartermonth', 'monthdate', 'monthdatehours', 'monthdatehoursminutes', 'monthdatehoursminutesseconds', 'weekday', 'weekdayhours', 'weekdayhoursminutes', 'weekdayhoursminutesseconds', 'dayhours', 'dayhoursminutes', 'dayhoursminutesseconds', 'hoursminutes', 'hoursminutesseconds', 'minutesseconds', 'secondsmilliseconds']
Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours``) for a temporal
field. or `a temporal field that gets casted as ordinal
`__.
@@ -5170,7 +5170,7 @@ class Href(FieldChannelMixin, core.StringFieldDefWithCondition):
* ``"time"`` for temporal fields and ordinal and nominal fields with ``timeUnit``.
* ``"number"`` for quantitative fields as well as ordinal and nominal fields without
``timeUnit``.
- timeUnit : dict, :class:`TimeUnit`, :class:`MultiTimeUnit`, :class:`BinnedTimeUnit`, :class:`SingleTimeUnit`, :class:`TimeUnitParams`, :class:`UtcMultiTimeUnit`, :class:`UtcSingleTimeUnit`, :class:`LocalMultiTimeUnit`, :class:`LocalSingleTimeUnit`, Literal['binnedutcyear', 'binnedutcyearquarter', 'binnedutcyearquartermonth', 'binnedutcyearmonth', 'binnedutcyearmonthdate', 'binnedutcyearmonthdatehours', 'binnedutcyearmonthdatehoursminutes', 'binnedutcyearmonthdatehoursminutesseconds', 'binnedutcyearweek', 'binnedutcyearweekday', 'binnedutcyearweekdayhours', 'binnedutcyearweekdayhoursminutes', 'binnedutcyearweekdayhoursminutesseconds', 'binnedutcyeardayofyear', 'binnedyear', 'binnedyearquarter', 'binnedyearquartermonth', 'binnedyearmonth', 'binnedyearmonthdate', 'binnedyearmonthdatehours', 'binnedyearmonthdatehoursminutes', 'binnedyearmonthdatehoursminutesseconds', 'binnedyearweek', 'binnedyearweekday', 'binnedyearweekdayhours', 'binnedyearweekdayhoursminutes', 'binnedyearweekdayhoursminutesseconds', 'binnedyeardayofyear', 'utcyear', 'utcquarter', 'utcmonth', 'utcweek', 'utcday', 'utcdayofyear', 'utcdate', 'utchours', 'utcminutes', 'utcseconds', 'utcmilliseconds', 'year', 'quarter', 'month', 'week', 'day', 'dayofyear', 'date', 'hours', 'minutes', 'seconds', 'milliseconds', 'utcyearquarter', 'utcyearquartermonth', 'utcyearmonth', 'utcyearmonthdate', 'utcyearmonthdatehours', 'utcyearmonthdatehoursminutes', 'utcyearmonthdatehoursminutesseconds', 'utcyearweek', 'utcyearweekday', 'utcyearweekdayhours', 'utcyearweekdayhoursminutes', 'utcyearweekdayhoursminutesseconds', 'utcyeardayofyear', 'utcquartermonth', 'utcmonthdate', 'utcmonthdatehours', 'utcmonthdatehoursminutes', 'utcmonthdatehoursminutesseconds', 'utcweekday', 'utcweekdayhours', 'utcweekdayhoursminutes', 'utcweekdayhoursminutesseconds', 'utcdayhours', 'utcdayhoursminutes', 'utcdayhoursminutesseconds', 'utchoursminutes', 'utchoursminutesseconds', 'utcminutesseconds', 'utcsecondsmilliseconds', 'yearquarter', 'yearquartermonth', 'yearmonth', 'yearmonthdate', 'yearmonthdatehours', 'yearmonthdatehoursminutes', 'yearmonthdatehoursminutesseconds', 'yearweek', 'yearweekday', 'yearweekdayhours', 'yearweekdayhoursminutes', 'yearweekdayhoursminutesseconds', 'yeardayofyear', 'quartermonth', 'monthdate', 'monthdatehours', 'monthdatehoursminutes', 'monthdatehoursminutesseconds', 'weekday', 'weekdayhours', 'weekdayhoursminutes', 'weekdayhoursminutesseconds', 'dayhours', 'dayhoursminutes', 'dayhoursminutesseconds', 'hoursminutes', 'hoursminutesseconds', 'minutesseconds', 'secondsmilliseconds']
+ timeUnit : dict, :class:`TimeUnit`, :class:`MultiTimeUnit`, :class:`BinnedTimeUnit`, :class:`SingleTimeUnit`, :class:`TimeUnitParams`, :class:`UtcMultiTimeUnit`, :class:`UtcSingleTimeUnit`, :class:`LocalMultiTimeUnit`, :class:`LocalSingleTimeUnit`, Literal['binnedyear', 'binnedyearquarter', 'binnedyearquartermonth', 'binnedyearmonth', 'binnedyearmonthdate', 'binnedyearmonthdatehours', 'binnedyearmonthdatehoursminutes', 'binnedyearmonthdatehoursminutesseconds', 'binnedyearweek', 'binnedyearweekday', 'binnedyearweekdayhours', 'binnedyearweekdayhoursminutes', 'binnedyearweekdayhoursminutesseconds', 'binnedyeardayofyear', 'binnedutcyear', 'binnedutcyearquarter', 'binnedutcyearquartermonth', 'binnedutcyearmonth', 'binnedutcyearmonthdate', 'binnedutcyearmonthdatehours', 'binnedutcyearmonthdatehoursminutes', 'binnedutcyearmonthdatehoursminutesseconds', 'binnedutcyearweek', 'binnedutcyearweekday', 'binnedutcyearweekdayhours', 'binnedutcyearweekdayhoursminutes', 'binnedutcyearweekdayhoursminutesseconds', 'binnedutcyeardayofyear', 'utcyear', 'utcquarter', 'utcmonth', 'utcweek', 'utcday', 'utcdayofyear', 'utcdate', 'utchours', 'utcminutes', 'utcseconds', 'utcmilliseconds', 'year', 'quarter', 'month', 'week', 'day', 'dayofyear', 'date', 'hours', 'minutes', 'seconds', 'milliseconds', 'utcyearquarter', 'utcyearquartermonth', 'utcyearmonth', 'utcyearmonthdate', 'utcyearmonthdatehours', 'utcyearmonthdatehoursminutes', 'utcyearmonthdatehoursminutesseconds', 'utcyearweek', 'utcyearweekday', 'utcyearweekdayhours', 'utcyearweekdayhoursminutes', 'utcyearweekdayhoursminutesseconds', 'utcyeardayofyear', 'utcquartermonth', 'utcmonthdate', 'utcmonthdatehours', 'utcmonthdatehoursminutes', 'utcmonthdatehoursminutesseconds', 'utcweekday', 'utcweekdayhours', 'utcweekdayhoursminutes', 'utcweekdayhoursminutesseconds', 'utcdayhours', 'utcdayhoursminutes', 'utcdayhoursminutesseconds', 'utchoursminutes', 'utchoursminutesseconds', 'utcminutesseconds', 'utcsecondsmilliseconds', 'yearquarter', 'yearquartermonth', 'yearmonth', 'yearmonthdate', 'yearmonthdatehours', 'yearmonthdatehoursminutes', 'yearmonthdatehoursminutesseconds', 'yearweek', 'yearweekday', 'yearweekdayhours', 'yearweekdayhoursminutes', 'yearweekdayhoursminutesseconds', 'yeardayofyear', 'quartermonth', 'monthdate', 'monthdatehours', 'monthdatehoursminutes', 'monthdatehoursminutesseconds', 'weekday', 'weekdayhours', 'weekdayhoursminutes', 'weekdayhoursminutesseconds', 'dayhours', 'dayhoursminutes', 'dayhoursminutesseconds', 'hoursminutes', 'hoursminutesseconds', 'minutesseconds', 'secondsmilliseconds']
Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours``) for a temporal
field. or `a temporal field that gets casted as ordinal
`__.
@@ -5570,7 +5570,7 @@ class Key(FieldChannelMixin, core.FieldDefWithoutScale):
about escaping in the `field documentation
`__. 2) ``field`` is not required
if ``aggregate`` is ``count``.
- timeUnit : dict, :class:`TimeUnit`, :class:`MultiTimeUnit`, :class:`BinnedTimeUnit`, :class:`SingleTimeUnit`, :class:`TimeUnitParams`, :class:`UtcMultiTimeUnit`, :class:`UtcSingleTimeUnit`, :class:`LocalMultiTimeUnit`, :class:`LocalSingleTimeUnit`, Literal['binnedutcyear', 'binnedutcyearquarter', 'binnedutcyearquartermonth', 'binnedutcyearmonth', 'binnedutcyearmonthdate', 'binnedutcyearmonthdatehours', 'binnedutcyearmonthdatehoursminutes', 'binnedutcyearmonthdatehoursminutesseconds', 'binnedutcyearweek', 'binnedutcyearweekday', 'binnedutcyearweekdayhours', 'binnedutcyearweekdayhoursminutes', 'binnedutcyearweekdayhoursminutesseconds', 'binnedutcyeardayofyear', 'binnedyear', 'binnedyearquarter', 'binnedyearquartermonth', 'binnedyearmonth', 'binnedyearmonthdate', 'binnedyearmonthdatehours', 'binnedyearmonthdatehoursminutes', 'binnedyearmonthdatehoursminutesseconds', 'binnedyearweek', 'binnedyearweekday', 'binnedyearweekdayhours', 'binnedyearweekdayhoursminutes', 'binnedyearweekdayhoursminutesseconds', 'binnedyeardayofyear', 'utcyear', 'utcquarter', 'utcmonth', 'utcweek', 'utcday', 'utcdayofyear', 'utcdate', 'utchours', 'utcminutes', 'utcseconds', 'utcmilliseconds', 'year', 'quarter', 'month', 'week', 'day', 'dayofyear', 'date', 'hours', 'minutes', 'seconds', 'milliseconds', 'utcyearquarter', 'utcyearquartermonth', 'utcyearmonth', 'utcyearmonthdate', 'utcyearmonthdatehours', 'utcyearmonthdatehoursminutes', 'utcyearmonthdatehoursminutesseconds', 'utcyearweek', 'utcyearweekday', 'utcyearweekdayhours', 'utcyearweekdayhoursminutes', 'utcyearweekdayhoursminutesseconds', 'utcyeardayofyear', 'utcquartermonth', 'utcmonthdate', 'utcmonthdatehours', 'utcmonthdatehoursminutes', 'utcmonthdatehoursminutesseconds', 'utcweekday', 'utcweekdayhours', 'utcweekdayhoursminutes', 'utcweekdayhoursminutesseconds', 'utcdayhours', 'utcdayhoursminutes', 'utcdayhoursminutesseconds', 'utchoursminutes', 'utchoursminutesseconds', 'utcminutesseconds', 'utcsecondsmilliseconds', 'yearquarter', 'yearquartermonth', 'yearmonth', 'yearmonthdate', 'yearmonthdatehours', 'yearmonthdatehoursminutes', 'yearmonthdatehoursminutesseconds', 'yearweek', 'yearweekday', 'yearweekdayhours', 'yearweekdayhoursminutes', 'yearweekdayhoursminutesseconds', 'yeardayofyear', 'quartermonth', 'monthdate', 'monthdatehours', 'monthdatehoursminutes', 'monthdatehoursminutesseconds', 'weekday', 'weekdayhours', 'weekdayhoursminutes', 'weekdayhoursminutesseconds', 'dayhours', 'dayhoursminutes', 'dayhoursminutesseconds', 'hoursminutes', 'hoursminutesseconds', 'minutesseconds', 'secondsmilliseconds']
+ timeUnit : dict, :class:`TimeUnit`, :class:`MultiTimeUnit`, :class:`BinnedTimeUnit`, :class:`SingleTimeUnit`, :class:`TimeUnitParams`, :class:`UtcMultiTimeUnit`, :class:`UtcSingleTimeUnit`, :class:`LocalMultiTimeUnit`, :class:`LocalSingleTimeUnit`, Literal['binnedyear', 'binnedyearquarter', 'binnedyearquartermonth', 'binnedyearmonth', 'binnedyearmonthdate', 'binnedyearmonthdatehours', 'binnedyearmonthdatehoursminutes', 'binnedyearmonthdatehoursminutesseconds', 'binnedyearweek', 'binnedyearweekday', 'binnedyearweekdayhours', 'binnedyearweekdayhoursminutes', 'binnedyearweekdayhoursminutesseconds', 'binnedyeardayofyear', 'binnedutcyear', 'binnedutcyearquarter', 'binnedutcyearquartermonth', 'binnedutcyearmonth', 'binnedutcyearmonthdate', 'binnedutcyearmonthdatehours', 'binnedutcyearmonthdatehoursminutes', 'binnedutcyearmonthdatehoursminutesseconds', 'binnedutcyearweek', 'binnedutcyearweekday', 'binnedutcyearweekdayhours', 'binnedutcyearweekdayhoursminutes', 'binnedutcyearweekdayhoursminutesseconds', 'binnedutcyeardayofyear', 'utcyear', 'utcquarter', 'utcmonth', 'utcweek', 'utcday', 'utcdayofyear', 'utcdate', 'utchours', 'utcminutes', 'utcseconds', 'utcmilliseconds', 'year', 'quarter', 'month', 'week', 'day', 'dayofyear', 'date', 'hours', 'minutes', 'seconds', 'milliseconds', 'utcyearquarter', 'utcyearquartermonth', 'utcyearmonth', 'utcyearmonthdate', 'utcyearmonthdatehours', 'utcyearmonthdatehoursminutes', 'utcyearmonthdatehoursminutesseconds', 'utcyearweek', 'utcyearweekday', 'utcyearweekdayhours', 'utcyearweekdayhoursminutes', 'utcyearweekdayhoursminutesseconds', 'utcyeardayofyear', 'utcquartermonth', 'utcmonthdate', 'utcmonthdatehours', 'utcmonthdatehoursminutes', 'utcmonthdatehoursminutesseconds', 'utcweekday', 'utcweekdayhours', 'utcweekdayhoursminutes', 'utcweekdayhoursminutesseconds', 'utcdayhours', 'utcdayhoursminutes', 'utcdayhoursminutesseconds', 'utchoursminutes', 'utchoursminutesseconds', 'utcminutesseconds', 'utcsecondsmilliseconds', 'yearquarter', 'yearquartermonth', 'yearmonth', 'yearmonthdate', 'yearmonthdatehours', 'yearmonthdatehoursminutes', 'yearmonthdatehoursminutesseconds', 'yearweek', 'yearweekday', 'yearweekdayhours', 'yearweekdayhoursminutes', 'yearweekdayhoursminutesseconds', 'yeardayofyear', 'quartermonth', 'monthdate', 'monthdatehours', 'monthdatehoursminutes', 'monthdatehoursminutesseconds', 'weekday', 'weekdayhours', 'weekdayhoursminutes', 'weekdayhoursminutesseconds', 'dayhours', 'dayhoursminutes', 'dayhoursminutesseconds', 'hoursminutes', 'hoursminutesseconds', 'minutesseconds', 'secondsmilliseconds']
Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours``) for a temporal
field. or `a temporal field that gets casted as ordinal
`__.
@@ -5808,7 +5808,7 @@ class Latitude(FieldChannelMixin, core.LatLongFieldDef):
about escaping in the `field documentation
`__. 2) ``field`` is not required
if ``aggregate`` is ``count``.
- timeUnit : dict, :class:`TimeUnit`, :class:`MultiTimeUnit`, :class:`BinnedTimeUnit`, :class:`SingleTimeUnit`, :class:`TimeUnitParams`, :class:`UtcMultiTimeUnit`, :class:`UtcSingleTimeUnit`, :class:`LocalMultiTimeUnit`, :class:`LocalSingleTimeUnit`, Literal['binnedutcyear', 'binnedutcyearquarter', 'binnedutcyearquartermonth', 'binnedutcyearmonth', 'binnedutcyearmonthdate', 'binnedutcyearmonthdatehours', 'binnedutcyearmonthdatehoursminutes', 'binnedutcyearmonthdatehoursminutesseconds', 'binnedutcyearweek', 'binnedutcyearweekday', 'binnedutcyearweekdayhours', 'binnedutcyearweekdayhoursminutes', 'binnedutcyearweekdayhoursminutesseconds', 'binnedutcyeardayofyear', 'binnedyear', 'binnedyearquarter', 'binnedyearquartermonth', 'binnedyearmonth', 'binnedyearmonthdate', 'binnedyearmonthdatehours', 'binnedyearmonthdatehoursminutes', 'binnedyearmonthdatehoursminutesseconds', 'binnedyearweek', 'binnedyearweekday', 'binnedyearweekdayhours', 'binnedyearweekdayhoursminutes', 'binnedyearweekdayhoursminutesseconds', 'binnedyeardayofyear', 'utcyear', 'utcquarter', 'utcmonth', 'utcweek', 'utcday', 'utcdayofyear', 'utcdate', 'utchours', 'utcminutes', 'utcseconds', 'utcmilliseconds', 'year', 'quarter', 'month', 'week', 'day', 'dayofyear', 'date', 'hours', 'minutes', 'seconds', 'milliseconds', 'utcyearquarter', 'utcyearquartermonth', 'utcyearmonth', 'utcyearmonthdate', 'utcyearmonthdatehours', 'utcyearmonthdatehoursminutes', 'utcyearmonthdatehoursminutesseconds', 'utcyearweek', 'utcyearweekday', 'utcyearweekdayhours', 'utcyearweekdayhoursminutes', 'utcyearweekdayhoursminutesseconds', 'utcyeardayofyear', 'utcquartermonth', 'utcmonthdate', 'utcmonthdatehours', 'utcmonthdatehoursminutes', 'utcmonthdatehoursminutesseconds', 'utcweekday', 'utcweekdayhours', 'utcweekdayhoursminutes', 'utcweekdayhoursminutesseconds', 'utcdayhours', 'utcdayhoursminutes', 'utcdayhoursminutesseconds', 'utchoursminutes', 'utchoursminutesseconds', 'utcminutesseconds', 'utcsecondsmilliseconds', 'yearquarter', 'yearquartermonth', 'yearmonth', 'yearmonthdate', 'yearmonthdatehours', 'yearmonthdatehoursminutes', 'yearmonthdatehoursminutesseconds', 'yearweek', 'yearweekday', 'yearweekdayhours', 'yearweekdayhoursminutes', 'yearweekdayhoursminutesseconds', 'yeardayofyear', 'quartermonth', 'monthdate', 'monthdatehours', 'monthdatehoursminutes', 'monthdatehoursminutesseconds', 'weekday', 'weekdayhours', 'weekdayhoursminutes', 'weekdayhoursminutesseconds', 'dayhours', 'dayhoursminutes', 'dayhoursminutesseconds', 'hoursminutes', 'hoursminutesseconds', 'minutesseconds', 'secondsmilliseconds']
+ timeUnit : dict, :class:`TimeUnit`, :class:`MultiTimeUnit`, :class:`BinnedTimeUnit`, :class:`SingleTimeUnit`, :class:`TimeUnitParams`, :class:`UtcMultiTimeUnit`, :class:`UtcSingleTimeUnit`, :class:`LocalMultiTimeUnit`, :class:`LocalSingleTimeUnit`, Literal['binnedyear', 'binnedyearquarter', 'binnedyearquartermonth', 'binnedyearmonth', 'binnedyearmonthdate', 'binnedyearmonthdatehours', 'binnedyearmonthdatehoursminutes', 'binnedyearmonthdatehoursminutesseconds', 'binnedyearweek', 'binnedyearweekday', 'binnedyearweekdayhours', 'binnedyearweekdayhoursminutes', 'binnedyearweekdayhoursminutesseconds', 'binnedyeardayofyear', 'binnedutcyear', 'binnedutcyearquarter', 'binnedutcyearquartermonth', 'binnedutcyearmonth', 'binnedutcyearmonthdate', 'binnedutcyearmonthdatehours', 'binnedutcyearmonthdatehoursminutes', 'binnedutcyearmonthdatehoursminutesseconds', 'binnedutcyearweek', 'binnedutcyearweekday', 'binnedutcyearweekdayhours', 'binnedutcyearweekdayhoursminutes', 'binnedutcyearweekdayhoursminutesseconds', 'binnedutcyeardayofyear', 'utcyear', 'utcquarter', 'utcmonth', 'utcweek', 'utcday', 'utcdayofyear', 'utcdate', 'utchours', 'utcminutes', 'utcseconds', 'utcmilliseconds', 'year', 'quarter', 'month', 'week', 'day', 'dayofyear', 'date', 'hours', 'minutes', 'seconds', 'milliseconds', 'utcyearquarter', 'utcyearquartermonth', 'utcyearmonth', 'utcyearmonthdate', 'utcyearmonthdatehours', 'utcyearmonthdatehoursminutes', 'utcyearmonthdatehoursminutesseconds', 'utcyearweek', 'utcyearweekday', 'utcyearweekdayhours', 'utcyearweekdayhoursminutes', 'utcyearweekdayhoursminutesseconds', 'utcyeardayofyear', 'utcquartermonth', 'utcmonthdate', 'utcmonthdatehours', 'utcmonthdatehoursminutes', 'utcmonthdatehoursminutesseconds', 'utcweekday', 'utcweekdayhours', 'utcweekdayhoursminutes', 'utcweekdayhoursminutesseconds', 'utcdayhours', 'utcdayhoursminutes', 'utcdayhoursminutesseconds', 'utchoursminutes', 'utchoursminutesseconds', 'utcminutesseconds', 'utcsecondsmilliseconds', 'yearquarter', 'yearquartermonth', 'yearmonth', 'yearmonthdate', 'yearmonthdatehours', 'yearmonthdatehoursminutes', 'yearmonthdatehoursminutesseconds', 'yearweek', 'yearweekday', 'yearweekdayhours', 'yearweekdayhoursminutes', 'yearweekdayhoursminutesseconds', 'yeardayofyear', 'quartermonth', 'monthdate', 'monthdatehours', 'monthdatehoursminutes', 'monthdatehoursminutesseconds', 'weekday', 'weekdayhours', 'weekdayhoursminutes', 'weekdayhoursminutesseconds', 'dayhours', 'dayhoursminutes', 'dayhoursminutesseconds', 'hoursminutes', 'hoursminutesseconds', 'minutesseconds', 'secondsmilliseconds']
Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours``) for a temporal
field. or `a temporal field that gets casted as ordinal
`__.
@@ -6162,7 +6162,7 @@ class Latitude2(FieldChannelMixin, core.SecondaryFieldDef):
about escaping in the `field documentation
`__. 2) ``field`` is not required
if ``aggregate`` is ``count``.
- timeUnit : dict, :class:`TimeUnit`, :class:`MultiTimeUnit`, :class:`BinnedTimeUnit`, :class:`SingleTimeUnit`, :class:`TimeUnitParams`, :class:`UtcMultiTimeUnit`, :class:`UtcSingleTimeUnit`, :class:`LocalMultiTimeUnit`, :class:`LocalSingleTimeUnit`, Literal['binnedutcyear', 'binnedutcyearquarter', 'binnedutcyearquartermonth', 'binnedutcyearmonth', 'binnedutcyearmonthdate', 'binnedutcyearmonthdatehours', 'binnedutcyearmonthdatehoursminutes', 'binnedutcyearmonthdatehoursminutesseconds', 'binnedutcyearweek', 'binnedutcyearweekday', 'binnedutcyearweekdayhours', 'binnedutcyearweekdayhoursminutes', 'binnedutcyearweekdayhoursminutesseconds', 'binnedutcyeardayofyear', 'binnedyear', 'binnedyearquarter', 'binnedyearquartermonth', 'binnedyearmonth', 'binnedyearmonthdate', 'binnedyearmonthdatehours', 'binnedyearmonthdatehoursminutes', 'binnedyearmonthdatehoursminutesseconds', 'binnedyearweek', 'binnedyearweekday', 'binnedyearweekdayhours', 'binnedyearweekdayhoursminutes', 'binnedyearweekdayhoursminutesseconds', 'binnedyeardayofyear', 'utcyear', 'utcquarter', 'utcmonth', 'utcweek', 'utcday', 'utcdayofyear', 'utcdate', 'utchours', 'utcminutes', 'utcseconds', 'utcmilliseconds', 'year', 'quarter', 'month', 'week', 'day', 'dayofyear', 'date', 'hours', 'minutes', 'seconds', 'milliseconds', 'utcyearquarter', 'utcyearquartermonth', 'utcyearmonth', 'utcyearmonthdate', 'utcyearmonthdatehours', 'utcyearmonthdatehoursminutes', 'utcyearmonthdatehoursminutesseconds', 'utcyearweek', 'utcyearweekday', 'utcyearweekdayhours', 'utcyearweekdayhoursminutes', 'utcyearweekdayhoursminutesseconds', 'utcyeardayofyear', 'utcquartermonth', 'utcmonthdate', 'utcmonthdatehours', 'utcmonthdatehoursminutes', 'utcmonthdatehoursminutesseconds', 'utcweekday', 'utcweekdayhours', 'utcweekdayhoursminutes', 'utcweekdayhoursminutesseconds', 'utcdayhours', 'utcdayhoursminutes', 'utcdayhoursminutesseconds', 'utchoursminutes', 'utchoursminutesseconds', 'utcminutesseconds', 'utcsecondsmilliseconds', 'yearquarter', 'yearquartermonth', 'yearmonth', 'yearmonthdate', 'yearmonthdatehours', 'yearmonthdatehoursminutes', 'yearmonthdatehoursminutesseconds', 'yearweek', 'yearweekday', 'yearweekdayhours', 'yearweekdayhoursminutes', 'yearweekdayhoursminutesseconds', 'yeardayofyear', 'quartermonth', 'monthdate', 'monthdatehours', 'monthdatehoursminutes', 'monthdatehoursminutesseconds', 'weekday', 'weekdayhours', 'weekdayhoursminutes', 'weekdayhoursminutesseconds', 'dayhours', 'dayhoursminutes', 'dayhoursminutesseconds', 'hoursminutes', 'hoursminutesseconds', 'minutesseconds', 'secondsmilliseconds']
+ timeUnit : dict, :class:`TimeUnit`, :class:`MultiTimeUnit`, :class:`BinnedTimeUnit`, :class:`SingleTimeUnit`, :class:`TimeUnitParams`, :class:`UtcMultiTimeUnit`, :class:`UtcSingleTimeUnit`, :class:`LocalMultiTimeUnit`, :class:`LocalSingleTimeUnit`, Literal['binnedyear', 'binnedyearquarter', 'binnedyearquartermonth', 'binnedyearmonth', 'binnedyearmonthdate', 'binnedyearmonthdatehours', 'binnedyearmonthdatehoursminutes', 'binnedyearmonthdatehoursminutesseconds', 'binnedyearweek', 'binnedyearweekday', 'binnedyearweekdayhours', 'binnedyearweekdayhoursminutes', 'binnedyearweekdayhoursminutesseconds', 'binnedyeardayofyear', 'binnedutcyear', 'binnedutcyearquarter', 'binnedutcyearquartermonth', 'binnedutcyearmonth', 'binnedutcyearmonthdate', 'binnedutcyearmonthdatehours', 'binnedutcyearmonthdatehoursminutes', 'binnedutcyearmonthdatehoursminutesseconds', 'binnedutcyearweek', 'binnedutcyearweekday', 'binnedutcyearweekdayhours', 'binnedutcyearweekdayhoursminutes', 'binnedutcyearweekdayhoursminutesseconds', 'binnedutcyeardayofyear', 'utcyear', 'utcquarter', 'utcmonth', 'utcweek', 'utcday', 'utcdayofyear', 'utcdate', 'utchours', 'utcminutes', 'utcseconds', 'utcmilliseconds', 'year', 'quarter', 'month', 'week', 'day', 'dayofyear', 'date', 'hours', 'minutes', 'seconds', 'milliseconds', 'utcyearquarter', 'utcyearquartermonth', 'utcyearmonth', 'utcyearmonthdate', 'utcyearmonthdatehours', 'utcyearmonthdatehoursminutes', 'utcyearmonthdatehoursminutesseconds', 'utcyearweek', 'utcyearweekday', 'utcyearweekdayhours', 'utcyearweekdayhoursminutes', 'utcyearweekdayhoursminutesseconds', 'utcyeardayofyear', 'utcquartermonth', 'utcmonthdate', 'utcmonthdatehours', 'utcmonthdatehoursminutes', 'utcmonthdatehoursminutesseconds', 'utcweekday', 'utcweekdayhours', 'utcweekdayhoursminutes', 'utcweekdayhoursminutesseconds', 'utcdayhours', 'utcdayhoursminutes', 'utcdayhoursminutesseconds', 'utchoursminutes', 'utchoursminutesseconds', 'utcminutesseconds', 'utcsecondsmilliseconds', 'yearquarter', 'yearquartermonth', 'yearmonth', 'yearmonthdate', 'yearmonthdatehours', 'yearmonthdatehoursminutes', 'yearmonthdatehoursminutesseconds', 'yearweek', 'yearweekday', 'yearweekdayhours', 'yearweekdayhoursminutes', 'yearweekdayhoursminutesseconds', 'yeardayofyear', 'quartermonth', 'monthdate', 'monthdatehours', 'monthdatehoursminutes', 'monthdatehoursminutesseconds', 'weekday', 'weekdayhours', 'weekdayhoursminutes', 'weekdayhoursminutesseconds', 'dayhours', 'dayhoursminutes', 'dayhoursminutesseconds', 'hoursminutes', 'hoursminutesseconds', 'minutesseconds', 'secondsmilliseconds']
Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours``) for a temporal
field. or `a temporal field that gets casted as ordinal
`__.
@@ -6466,7 +6466,7 @@ class Longitude(FieldChannelMixin, core.LatLongFieldDef):
about escaping in the `field documentation
`__. 2) ``field`` is not required
if ``aggregate`` is ``count``.
- timeUnit : dict, :class:`TimeUnit`, :class:`MultiTimeUnit`, :class:`BinnedTimeUnit`, :class:`SingleTimeUnit`, :class:`TimeUnitParams`, :class:`UtcMultiTimeUnit`, :class:`UtcSingleTimeUnit`, :class:`LocalMultiTimeUnit`, :class:`LocalSingleTimeUnit`, Literal['binnedutcyear', 'binnedutcyearquarter', 'binnedutcyearquartermonth', 'binnedutcyearmonth', 'binnedutcyearmonthdate', 'binnedutcyearmonthdatehours', 'binnedutcyearmonthdatehoursminutes', 'binnedutcyearmonthdatehoursminutesseconds', 'binnedutcyearweek', 'binnedutcyearweekday', 'binnedutcyearweekdayhours', 'binnedutcyearweekdayhoursminutes', 'binnedutcyearweekdayhoursminutesseconds', 'binnedutcyeardayofyear', 'binnedyear', 'binnedyearquarter', 'binnedyearquartermonth', 'binnedyearmonth', 'binnedyearmonthdate', 'binnedyearmonthdatehours', 'binnedyearmonthdatehoursminutes', 'binnedyearmonthdatehoursminutesseconds', 'binnedyearweek', 'binnedyearweekday', 'binnedyearweekdayhours', 'binnedyearweekdayhoursminutes', 'binnedyearweekdayhoursminutesseconds', 'binnedyeardayofyear', 'utcyear', 'utcquarter', 'utcmonth', 'utcweek', 'utcday', 'utcdayofyear', 'utcdate', 'utchours', 'utcminutes', 'utcseconds', 'utcmilliseconds', 'year', 'quarter', 'month', 'week', 'day', 'dayofyear', 'date', 'hours', 'minutes', 'seconds', 'milliseconds', 'utcyearquarter', 'utcyearquartermonth', 'utcyearmonth', 'utcyearmonthdate', 'utcyearmonthdatehours', 'utcyearmonthdatehoursminutes', 'utcyearmonthdatehoursminutesseconds', 'utcyearweek', 'utcyearweekday', 'utcyearweekdayhours', 'utcyearweekdayhoursminutes', 'utcyearweekdayhoursminutesseconds', 'utcyeardayofyear', 'utcquartermonth', 'utcmonthdate', 'utcmonthdatehours', 'utcmonthdatehoursminutes', 'utcmonthdatehoursminutesseconds', 'utcweekday', 'utcweekdayhours', 'utcweekdayhoursminutes', 'utcweekdayhoursminutesseconds', 'utcdayhours', 'utcdayhoursminutes', 'utcdayhoursminutesseconds', 'utchoursminutes', 'utchoursminutesseconds', 'utcminutesseconds', 'utcsecondsmilliseconds', 'yearquarter', 'yearquartermonth', 'yearmonth', 'yearmonthdate', 'yearmonthdatehours', 'yearmonthdatehoursminutes', 'yearmonthdatehoursminutesseconds', 'yearweek', 'yearweekday', 'yearweekdayhours', 'yearweekdayhoursminutes', 'yearweekdayhoursminutesseconds', 'yeardayofyear', 'quartermonth', 'monthdate', 'monthdatehours', 'monthdatehoursminutes', 'monthdatehoursminutesseconds', 'weekday', 'weekdayhours', 'weekdayhoursminutes', 'weekdayhoursminutesseconds', 'dayhours', 'dayhoursminutes', 'dayhoursminutesseconds', 'hoursminutes', 'hoursminutesseconds', 'minutesseconds', 'secondsmilliseconds']
+ timeUnit : dict, :class:`TimeUnit`, :class:`MultiTimeUnit`, :class:`BinnedTimeUnit`, :class:`SingleTimeUnit`, :class:`TimeUnitParams`, :class:`UtcMultiTimeUnit`, :class:`UtcSingleTimeUnit`, :class:`LocalMultiTimeUnit`, :class:`LocalSingleTimeUnit`, Literal['binnedyear', 'binnedyearquarter', 'binnedyearquartermonth', 'binnedyearmonth', 'binnedyearmonthdate', 'binnedyearmonthdatehours', 'binnedyearmonthdatehoursminutes', 'binnedyearmonthdatehoursminutesseconds', 'binnedyearweek', 'binnedyearweekday', 'binnedyearweekdayhours', 'binnedyearweekdayhoursminutes', 'binnedyearweekdayhoursminutesseconds', 'binnedyeardayofyear', 'binnedutcyear', 'binnedutcyearquarter', 'binnedutcyearquartermonth', 'binnedutcyearmonth', 'binnedutcyearmonthdate', 'binnedutcyearmonthdatehours', 'binnedutcyearmonthdatehoursminutes', 'binnedutcyearmonthdatehoursminutesseconds', 'binnedutcyearweek', 'binnedutcyearweekday', 'binnedutcyearweekdayhours', 'binnedutcyearweekdayhoursminutes', 'binnedutcyearweekdayhoursminutesseconds', 'binnedutcyeardayofyear', 'utcyear', 'utcquarter', 'utcmonth', 'utcweek', 'utcday', 'utcdayofyear', 'utcdate', 'utchours', 'utcminutes', 'utcseconds', 'utcmilliseconds', 'year', 'quarter', 'month', 'week', 'day', 'dayofyear', 'date', 'hours', 'minutes', 'seconds', 'milliseconds', 'utcyearquarter', 'utcyearquartermonth', 'utcyearmonth', 'utcyearmonthdate', 'utcyearmonthdatehours', 'utcyearmonthdatehoursminutes', 'utcyearmonthdatehoursminutesseconds', 'utcyearweek', 'utcyearweekday', 'utcyearweekdayhours', 'utcyearweekdayhoursminutes', 'utcyearweekdayhoursminutesseconds', 'utcyeardayofyear', 'utcquartermonth', 'utcmonthdate', 'utcmonthdatehours', 'utcmonthdatehoursminutes', 'utcmonthdatehoursminutesseconds', 'utcweekday', 'utcweekdayhours', 'utcweekdayhoursminutes', 'utcweekdayhoursminutesseconds', 'utcdayhours', 'utcdayhoursminutes', 'utcdayhoursminutesseconds', 'utchoursminutes', 'utchoursminutesseconds', 'utcminutesseconds', 'utcsecondsmilliseconds', 'yearquarter', 'yearquartermonth', 'yearmonth', 'yearmonthdate', 'yearmonthdatehours', 'yearmonthdatehoursminutes', 'yearmonthdatehoursminutesseconds', 'yearweek', 'yearweekday', 'yearweekdayhours', 'yearweekdayhoursminutes', 'yearweekdayhoursminutesseconds', 'yeardayofyear', 'quartermonth', 'monthdate', 'monthdatehours', 'monthdatehoursminutes', 'monthdatehoursminutesseconds', 'weekday', 'weekdayhours', 'weekdayhoursminutes', 'weekdayhoursminutesseconds', 'dayhours', 'dayhoursminutes', 'dayhoursminutesseconds', 'hoursminutes', 'hoursminutesseconds', 'minutesseconds', 'secondsmilliseconds']
Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours``) for a temporal
field. or `a temporal field that gets casted as ordinal
`__.
@@ -6820,7 +6820,7 @@ class Longitude2(FieldChannelMixin, core.SecondaryFieldDef):
about escaping in the `field documentation
`__. 2) ``field`` is not required
if ``aggregate`` is ``count``.
- timeUnit : dict, :class:`TimeUnit`, :class:`MultiTimeUnit`, :class:`BinnedTimeUnit`, :class:`SingleTimeUnit`, :class:`TimeUnitParams`, :class:`UtcMultiTimeUnit`, :class:`UtcSingleTimeUnit`, :class:`LocalMultiTimeUnit`, :class:`LocalSingleTimeUnit`, Literal['binnedutcyear', 'binnedutcyearquarter', 'binnedutcyearquartermonth', 'binnedutcyearmonth', 'binnedutcyearmonthdate', 'binnedutcyearmonthdatehours', 'binnedutcyearmonthdatehoursminutes', 'binnedutcyearmonthdatehoursminutesseconds', 'binnedutcyearweek', 'binnedutcyearweekday', 'binnedutcyearweekdayhours', 'binnedutcyearweekdayhoursminutes', 'binnedutcyearweekdayhoursminutesseconds', 'binnedutcyeardayofyear', 'binnedyear', 'binnedyearquarter', 'binnedyearquartermonth', 'binnedyearmonth', 'binnedyearmonthdate', 'binnedyearmonthdatehours', 'binnedyearmonthdatehoursminutes', 'binnedyearmonthdatehoursminutesseconds', 'binnedyearweek', 'binnedyearweekday', 'binnedyearweekdayhours', 'binnedyearweekdayhoursminutes', 'binnedyearweekdayhoursminutesseconds', 'binnedyeardayofyear', 'utcyear', 'utcquarter', 'utcmonth', 'utcweek', 'utcday', 'utcdayofyear', 'utcdate', 'utchours', 'utcminutes', 'utcseconds', 'utcmilliseconds', 'year', 'quarter', 'month', 'week', 'day', 'dayofyear', 'date', 'hours', 'minutes', 'seconds', 'milliseconds', 'utcyearquarter', 'utcyearquartermonth', 'utcyearmonth', 'utcyearmonthdate', 'utcyearmonthdatehours', 'utcyearmonthdatehoursminutes', 'utcyearmonthdatehoursminutesseconds', 'utcyearweek', 'utcyearweekday', 'utcyearweekdayhours', 'utcyearweekdayhoursminutes', 'utcyearweekdayhoursminutesseconds', 'utcyeardayofyear', 'utcquartermonth', 'utcmonthdate', 'utcmonthdatehours', 'utcmonthdatehoursminutes', 'utcmonthdatehoursminutesseconds', 'utcweekday', 'utcweekdayhours', 'utcweekdayhoursminutes', 'utcweekdayhoursminutesseconds', 'utcdayhours', 'utcdayhoursminutes', 'utcdayhoursminutesseconds', 'utchoursminutes', 'utchoursminutesseconds', 'utcminutesseconds', 'utcsecondsmilliseconds', 'yearquarter', 'yearquartermonth', 'yearmonth', 'yearmonthdate', 'yearmonthdatehours', 'yearmonthdatehoursminutes', 'yearmonthdatehoursminutesseconds', 'yearweek', 'yearweekday', 'yearweekdayhours', 'yearweekdayhoursminutes', 'yearweekdayhoursminutesseconds', 'yeardayofyear', 'quartermonth', 'monthdate', 'monthdatehours', 'monthdatehoursminutes', 'monthdatehoursminutesseconds', 'weekday', 'weekdayhours', 'weekdayhoursminutes', 'weekdayhoursminutesseconds', 'dayhours', 'dayhoursminutes', 'dayhoursminutesseconds', 'hoursminutes', 'hoursminutesseconds', 'minutesseconds', 'secondsmilliseconds']
+ timeUnit : dict, :class:`TimeUnit`, :class:`MultiTimeUnit`, :class:`BinnedTimeUnit`, :class:`SingleTimeUnit`, :class:`TimeUnitParams`, :class:`UtcMultiTimeUnit`, :class:`UtcSingleTimeUnit`, :class:`LocalMultiTimeUnit`, :class:`LocalSingleTimeUnit`, Literal['binnedyear', 'binnedyearquarter', 'binnedyearquartermonth', 'binnedyearmonth', 'binnedyearmonthdate', 'binnedyearmonthdatehours', 'binnedyearmonthdatehoursminutes', 'binnedyearmonthdatehoursminutesseconds', 'binnedyearweek', 'binnedyearweekday', 'binnedyearweekdayhours', 'binnedyearweekdayhoursminutes', 'binnedyearweekdayhoursminutesseconds', 'binnedyeardayofyear', 'binnedutcyear', 'binnedutcyearquarter', 'binnedutcyearquartermonth', 'binnedutcyearmonth', 'binnedutcyearmonthdate', 'binnedutcyearmonthdatehours', 'binnedutcyearmonthdatehoursminutes', 'binnedutcyearmonthdatehoursminutesseconds', 'binnedutcyearweek', 'binnedutcyearweekday', 'binnedutcyearweekdayhours', 'binnedutcyearweekdayhoursminutes', 'binnedutcyearweekdayhoursminutesseconds', 'binnedutcyeardayofyear', 'utcyear', 'utcquarter', 'utcmonth', 'utcweek', 'utcday', 'utcdayofyear', 'utcdate', 'utchours', 'utcminutes', 'utcseconds', 'utcmilliseconds', 'year', 'quarter', 'month', 'week', 'day', 'dayofyear', 'date', 'hours', 'minutes', 'seconds', 'milliseconds', 'utcyearquarter', 'utcyearquartermonth', 'utcyearmonth', 'utcyearmonthdate', 'utcyearmonthdatehours', 'utcyearmonthdatehoursminutes', 'utcyearmonthdatehoursminutesseconds', 'utcyearweek', 'utcyearweekday', 'utcyearweekdayhours', 'utcyearweekdayhoursminutes', 'utcyearweekdayhoursminutesseconds', 'utcyeardayofyear', 'utcquartermonth', 'utcmonthdate', 'utcmonthdatehours', 'utcmonthdatehoursminutes', 'utcmonthdatehoursminutesseconds', 'utcweekday', 'utcweekdayhours', 'utcweekdayhoursminutes', 'utcweekdayhoursminutesseconds', 'utcdayhours', 'utcdayhoursminutes', 'utcdayhoursminutesseconds', 'utchoursminutes', 'utchoursminutesseconds', 'utcminutesseconds', 'utcsecondsmilliseconds', 'yearquarter', 'yearquartermonth', 'yearmonth', 'yearmonthdate', 'yearmonthdatehours', 'yearmonthdatehoursminutes', 'yearmonthdatehoursminutesseconds', 'yearweek', 'yearweekday', 'yearweekdayhours', 'yearweekdayhoursminutes', 'yearweekdayhoursminutesseconds', 'yeardayofyear', 'quartermonth', 'monthdate', 'monthdatehours', 'monthdatehoursminutes', 'monthdatehoursminutesseconds', 'weekday', 'weekdayhours', 'weekdayhoursminutes', 'weekdayhoursminutesseconds', 'dayhours', 'dayhoursminutes', 'dayhoursminutesseconds', 'hoursminutes', 'hoursminutesseconds', 'minutesseconds', 'secondsmilliseconds']
Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours``) for a temporal
field. or `a temporal field that gets casted as ordinal
`__.
@@ -7193,7 +7193,7 @@ class Opacity(
**See also:** `sort `__
documentation.
- timeUnit : dict, :class:`TimeUnit`, :class:`MultiTimeUnit`, :class:`BinnedTimeUnit`, :class:`SingleTimeUnit`, :class:`TimeUnitParams`, :class:`UtcMultiTimeUnit`, :class:`UtcSingleTimeUnit`, :class:`LocalMultiTimeUnit`, :class:`LocalSingleTimeUnit`, Literal['binnedutcyear', 'binnedutcyearquarter', 'binnedutcyearquartermonth', 'binnedutcyearmonth', 'binnedutcyearmonthdate', 'binnedutcyearmonthdatehours', 'binnedutcyearmonthdatehoursminutes', 'binnedutcyearmonthdatehoursminutesseconds', 'binnedutcyearweek', 'binnedutcyearweekday', 'binnedutcyearweekdayhours', 'binnedutcyearweekdayhoursminutes', 'binnedutcyearweekdayhoursminutesseconds', 'binnedutcyeardayofyear', 'binnedyear', 'binnedyearquarter', 'binnedyearquartermonth', 'binnedyearmonth', 'binnedyearmonthdate', 'binnedyearmonthdatehours', 'binnedyearmonthdatehoursminutes', 'binnedyearmonthdatehoursminutesseconds', 'binnedyearweek', 'binnedyearweekday', 'binnedyearweekdayhours', 'binnedyearweekdayhoursminutes', 'binnedyearweekdayhoursminutesseconds', 'binnedyeardayofyear', 'utcyear', 'utcquarter', 'utcmonth', 'utcweek', 'utcday', 'utcdayofyear', 'utcdate', 'utchours', 'utcminutes', 'utcseconds', 'utcmilliseconds', 'year', 'quarter', 'month', 'week', 'day', 'dayofyear', 'date', 'hours', 'minutes', 'seconds', 'milliseconds', 'utcyearquarter', 'utcyearquartermonth', 'utcyearmonth', 'utcyearmonthdate', 'utcyearmonthdatehours', 'utcyearmonthdatehoursminutes', 'utcyearmonthdatehoursminutesseconds', 'utcyearweek', 'utcyearweekday', 'utcyearweekdayhours', 'utcyearweekdayhoursminutes', 'utcyearweekdayhoursminutesseconds', 'utcyeardayofyear', 'utcquartermonth', 'utcmonthdate', 'utcmonthdatehours', 'utcmonthdatehoursminutes', 'utcmonthdatehoursminutesseconds', 'utcweekday', 'utcweekdayhours', 'utcweekdayhoursminutes', 'utcweekdayhoursminutesseconds', 'utcdayhours', 'utcdayhoursminutes', 'utcdayhoursminutesseconds', 'utchoursminutes', 'utchoursminutesseconds', 'utcminutesseconds', 'utcsecondsmilliseconds', 'yearquarter', 'yearquartermonth', 'yearmonth', 'yearmonthdate', 'yearmonthdatehours', 'yearmonthdatehoursminutes', 'yearmonthdatehoursminutesseconds', 'yearweek', 'yearweekday', 'yearweekdayhours', 'yearweekdayhoursminutes', 'yearweekdayhoursminutesseconds', 'yeardayofyear', 'quartermonth', 'monthdate', 'monthdatehours', 'monthdatehoursminutes', 'monthdatehoursminutesseconds', 'weekday', 'weekdayhours', 'weekdayhoursminutes', 'weekdayhoursminutesseconds', 'dayhours', 'dayhoursminutes', 'dayhoursminutesseconds', 'hoursminutes', 'hoursminutesseconds', 'minutesseconds', 'secondsmilliseconds']
+ timeUnit : dict, :class:`TimeUnit`, :class:`MultiTimeUnit`, :class:`BinnedTimeUnit`, :class:`SingleTimeUnit`, :class:`TimeUnitParams`, :class:`UtcMultiTimeUnit`, :class:`UtcSingleTimeUnit`, :class:`LocalMultiTimeUnit`, :class:`LocalSingleTimeUnit`, Literal['binnedyear', 'binnedyearquarter', 'binnedyearquartermonth', 'binnedyearmonth', 'binnedyearmonthdate', 'binnedyearmonthdatehours', 'binnedyearmonthdatehoursminutes', 'binnedyearmonthdatehoursminutesseconds', 'binnedyearweek', 'binnedyearweekday', 'binnedyearweekdayhours', 'binnedyearweekdayhoursminutes', 'binnedyearweekdayhoursminutesseconds', 'binnedyeardayofyear', 'binnedutcyear', 'binnedutcyearquarter', 'binnedutcyearquartermonth', 'binnedutcyearmonth', 'binnedutcyearmonthdate', 'binnedutcyearmonthdatehours', 'binnedutcyearmonthdatehoursminutes', 'binnedutcyearmonthdatehoursminutesseconds', 'binnedutcyearweek', 'binnedutcyearweekday', 'binnedutcyearweekdayhours', 'binnedutcyearweekdayhoursminutes', 'binnedutcyearweekdayhoursminutesseconds', 'binnedutcyeardayofyear', 'utcyear', 'utcquarter', 'utcmonth', 'utcweek', 'utcday', 'utcdayofyear', 'utcdate', 'utchours', 'utcminutes', 'utcseconds', 'utcmilliseconds', 'year', 'quarter', 'month', 'week', 'day', 'dayofyear', 'date', 'hours', 'minutes', 'seconds', 'milliseconds', 'utcyearquarter', 'utcyearquartermonth', 'utcyearmonth', 'utcyearmonthdate', 'utcyearmonthdatehours', 'utcyearmonthdatehoursminutes', 'utcyearmonthdatehoursminutesseconds', 'utcyearweek', 'utcyearweekday', 'utcyearweekdayhours', 'utcyearweekdayhoursminutes', 'utcyearweekdayhoursminutesseconds', 'utcyeardayofyear', 'utcquartermonth', 'utcmonthdate', 'utcmonthdatehours', 'utcmonthdatehoursminutes', 'utcmonthdatehoursminutesseconds', 'utcweekday', 'utcweekdayhours', 'utcweekdayhoursminutes', 'utcweekdayhoursminutesseconds', 'utcdayhours', 'utcdayhoursminutes', 'utcdayhoursminutesseconds', 'utchoursminutes', 'utchoursminutesseconds', 'utcminutesseconds', 'utcsecondsmilliseconds', 'yearquarter', 'yearquartermonth', 'yearmonth', 'yearmonthdate', 'yearmonthdatehours', 'yearmonthdatehoursminutes', 'yearmonthdatehoursminutesseconds', 'yearweek', 'yearweekday', 'yearweekdayhours', 'yearweekdayhoursminutes', 'yearweekdayhoursminutesseconds', 'yeardayofyear', 'quartermonth', 'monthdate', 'monthdatehours', 'monthdatehoursminutes', 'monthdatehoursminutesseconds', 'weekday', 'weekdayhours', 'weekdayhoursminutes', 'weekdayhoursminutesseconds', 'dayhours', 'dayhoursminutes', 'dayhoursminutesseconds', 'hoursminutes', 'hoursminutesseconds', 'minutesseconds', 'secondsmilliseconds']
Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours``) for a temporal
field. or `a temporal field that gets casted as ordinal
`__.
@@ -7949,7 +7949,7 @@ class Order(FieldChannelMixin, core.OrderFieldDef):
if ``aggregate`` is ``count``.
sort : :class:`SortOrder`, Literal['ascending', 'descending']
The sort order. One of ``"ascending"`` (default) or ``"descending"``.
- timeUnit : dict, :class:`TimeUnit`, :class:`MultiTimeUnit`, :class:`BinnedTimeUnit`, :class:`SingleTimeUnit`, :class:`TimeUnitParams`, :class:`UtcMultiTimeUnit`, :class:`UtcSingleTimeUnit`, :class:`LocalMultiTimeUnit`, :class:`LocalSingleTimeUnit`, Literal['binnedutcyear', 'binnedutcyearquarter', 'binnedutcyearquartermonth', 'binnedutcyearmonth', 'binnedutcyearmonthdate', 'binnedutcyearmonthdatehours', 'binnedutcyearmonthdatehoursminutes', 'binnedutcyearmonthdatehoursminutesseconds', 'binnedutcyearweek', 'binnedutcyearweekday', 'binnedutcyearweekdayhours', 'binnedutcyearweekdayhoursminutes', 'binnedutcyearweekdayhoursminutesseconds', 'binnedutcyeardayofyear', 'binnedyear', 'binnedyearquarter', 'binnedyearquartermonth', 'binnedyearmonth', 'binnedyearmonthdate', 'binnedyearmonthdatehours', 'binnedyearmonthdatehoursminutes', 'binnedyearmonthdatehoursminutesseconds', 'binnedyearweek', 'binnedyearweekday', 'binnedyearweekdayhours', 'binnedyearweekdayhoursminutes', 'binnedyearweekdayhoursminutesseconds', 'binnedyeardayofyear', 'utcyear', 'utcquarter', 'utcmonth', 'utcweek', 'utcday', 'utcdayofyear', 'utcdate', 'utchours', 'utcminutes', 'utcseconds', 'utcmilliseconds', 'year', 'quarter', 'month', 'week', 'day', 'dayofyear', 'date', 'hours', 'minutes', 'seconds', 'milliseconds', 'utcyearquarter', 'utcyearquartermonth', 'utcyearmonth', 'utcyearmonthdate', 'utcyearmonthdatehours', 'utcyearmonthdatehoursminutes', 'utcyearmonthdatehoursminutesseconds', 'utcyearweek', 'utcyearweekday', 'utcyearweekdayhours', 'utcyearweekdayhoursminutes', 'utcyearweekdayhoursminutesseconds', 'utcyeardayofyear', 'utcquartermonth', 'utcmonthdate', 'utcmonthdatehours', 'utcmonthdatehoursminutes', 'utcmonthdatehoursminutesseconds', 'utcweekday', 'utcweekdayhours', 'utcweekdayhoursminutes', 'utcweekdayhoursminutesseconds', 'utcdayhours', 'utcdayhoursminutes', 'utcdayhoursminutesseconds', 'utchoursminutes', 'utchoursminutesseconds', 'utcminutesseconds', 'utcsecondsmilliseconds', 'yearquarter', 'yearquartermonth', 'yearmonth', 'yearmonthdate', 'yearmonthdatehours', 'yearmonthdatehoursminutes', 'yearmonthdatehoursminutesseconds', 'yearweek', 'yearweekday', 'yearweekdayhours', 'yearweekdayhoursminutes', 'yearweekdayhoursminutesseconds', 'yeardayofyear', 'quartermonth', 'monthdate', 'monthdatehours', 'monthdatehoursminutes', 'monthdatehoursminutesseconds', 'weekday', 'weekdayhours', 'weekdayhoursminutes', 'weekdayhoursminutesseconds', 'dayhours', 'dayhoursminutes', 'dayhoursminutesseconds', 'hoursminutes', 'hoursminutesseconds', 'minutesseconds', 'secondsmilliseconds']
+ timeUnit : dict, :class:`TimeUnit`, :class:`MultiTimeUnit`, :class:`BinnedTimeUnit`, :class:`SingleTimeUnit`, :class:`TimeUnitParams`, :class:`UtcMultiTimeUnit`, :class:`UtcSingleTimeUnit`, :class:`LocalMultiTimeUnit`, :class:`LocalSingleTimeUnit`, Literal['binnedyear', 'binnedyearquarter', 'binnedyearquartermonth', 'binnedyearmonth', 'binnedyearmonthdate', 'binnedyearmonthdatehours', 'binnedyearmonthdatehoursminutes', 'binnedyearmonthdatehoursminutesseconds', 'binnedyearweek', 'binnedyearweekday', 'binnedyearweekdayhours', 'binnedyearweekdayhoursminutes', 'binnedyearweekdayhoursminutesseconds', 'binnedyeardayofyear', 'binnedutcyear', 'binnedutcyearquarter', 'binnedutcyearquartermonth', 'binnedutcyearmonth', 'binnedutcyearmonthdate', 'binnedutcyearmonthdatehours', 'binnedutcyearmonthdatehoursminutes', 'binnedutcyearmonthdatehoursminutesseconds', 'binnedutcyearweek', 'binnedutcyearweekday', 'binnedutcyearweekdayhours', 'binnedutcyearweekdayhoursminutes', 'binnedutcyearweekdayhoursminutesseconds', 'binnedutcyeardayofyear', 'utcyear', 'utcquarter', 'utcmonth', 'utcweek', 'utcday', 'utcdayofyear', 'utcdate', 'utchours', 'utcminutes', 'utcseconds', 'utcmilliseconds', 'year', 'quarter', 'month', 'week', 'day', 'dayofyear', 'date', 'hours', 'minutes', 'seconds', 'milliseconds', 'utcyearquarter', 'utcyearquartermonth', 'utcyearmonth', 'utcyearmonthdate', 'utcyearmonthdatehours', 'utcyearmonthdatehoursminutes', 'utcyearmonthdatehoursminutesseconds', 'utcyearweek', 'utcyearweekday', 'utcyearweekdayhours', 'utcyearweekdayhoursminutes', 'utcyearweekdayhoursminutesseconds', 'utcyeardayofyear', 'utcquartermonth', 'utcmonthdate', 'utcmonthdatehours', 'utcmonthdatehoursminutes', 'utcmonthdatehoursminutesseconds', 'utcweekday', 'utcweekdayhours', 'utcweekdayhoursminutes', 'utcweekdayhoursminutesseconds', 'utcdayhours', 'utcdayhoursminutes', 'utcdayhoursminutesseconds', 'utchoursminutes', 'utchoursminutesseconds', 'utcminutesseconds', 'utcsecondsmilliseconds', 'yearquarter', 'yearquartermonth', 'yearmonth', 'yearmonthdate', 'yearmonthdatehours', 'yearmonthdatehoursminutes', 'yearmonthdatehoursminutesseconds', 'yearweek', 'yearweekday', 'yearweekdayhours', 'yearweekdayhoursminutes', 'yearweekdayhoursminutesseconds', 'yeardayofyear', 'quartermonth', 'monthdate', 'monthdatehours', 'monthdatehoursminutes', 'monthdatehoursminutesseconds', 'weekday', 'weekdayhours', 'weekdayhoursminutes', 'weekdayhoursminutesseconds', 'dayhours', 'dayhoursminutes', 'dayhoursminutesseconds', 'hoursminutes', 'hoursminutesseconds', 'minutesseconds', 'secondsmilliseconds']
Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours``) for a temporal
field. or `a temporal field that gets casted as ordinal
`__.
@@ -8322,7 +8322,7 @@ class Radius(FieldChannelMixin, core.PositionFieldDefBase):
**See also:** `stack `__
documentation.
- timeUnit : dict, :class:`TimeUnit`, :class:`MultiTimeUnit`, :class:`BinnedTimeUnit`, :class:`SingleTimeUnit`, :class:`TimeUnitParams`, :class:`UtcMultiTimeUnit`, :class:`UtcSingleTimeUnit`, :class:`LocalMultiTimeUnit`, :class:`LocalSingleTimeUnit`, Literal['binnedutcyear', 'binnedutcyearquarter', 'binnedutcyearquartermonth', 'binnedutcyearmonth', 'binnedutcyearmonthdate', 'binnedutcyearmonthdatehours', 'binnedutcyearmonthdatehoursminutes', 'binnedutcyearmonthdatehoursminutesseconds', 'binnedutcyearweek', 'binnedutcyearweekday', 'binnedutcyearweekdayhours', 'binnedutcyearweekdayhoursminutes', 'binnedutcyearweekdayhoursminutesseconds', 'binnedutcyeardayofyear', 'binnedyear', 'binnedyearquarter', 'binnedyearquartermonth', 'binnedyearmonth', 'binnedyearmonthdate', 'binnedyearmonthdatehours', 'binnedyearmonthdatehoursminutes', 'binnedyearmonthdatehoursminutesseconds', 'binnedyearweek', 'binnedyearweekday', 'binnedyearweekdayhours', 'binnedyearweekdayhoursminutes', 'binnedyearweekdayhoursminutesseconds', 'binnedyeardayofyear', 'utcyear', 'utcquarter', 'utcmonth', 'utcweek', 'utcday', 'utcdayofyear', 'utcdate', 'utchours', 'utcminutes', 'utcseconds', 'utcmilliseconds', 'year', 'quarter', 'month', 'week', 'day', 'dayofyear', 'date', 'hours', 'minutes', 'seconds', 'milliseconds', 'utcyearquarter', 'utcyearquartermonth', 'utcyearmonth', 'utcyearmonthdate', 'utcyearmonthdatehours', 'utcyearmonthdatehoursminutes', 'utcyearmonthdatehoursminutesseconds', 'utcyearweek', 'utcyearweekday', 'utcyearweekdayhours', 'utcyearweekdayhoursminutes', 'utcyearweekdayhoursminutesseconds', 'utcyeardayofyear', 'utcquartermonth', 'utcmonthdate', 'utcmonthdatehours', 'utcmonthdatehoursminutes', 'utcmonthdatehoursminutesseconds', 'utcweekday', 'utcweekdayhours', 'utcweekdayhoursminutes', 'utcweekdayhoursminutesseconds', 'utcdayhours', 'utcdayhoursminutes', 'utcdayhoursminutesseconds', 'utchoursminutes', 'utchoursminutesseconds', 'utcminutesseconds', 'utcsecondsmilliseconds', 'yearquarter', 'yearquartermonth', 'yearmonth', 'yearmonthdate', 'yearmonthdatehours', 'yearmonthdatehoursminutes', 'yearmonthdatehoursminutesseconds', 'yearweek', 'yearweekday', 'yearweekdayhours', 'yearweekdayhoursminutes', 'yearweekdayhoursminutesseconds', 'yeardayofyear', 'quartermonth', 'monthdate', 'monthdatehours', 'monthdatehoursminutes', 'monthdatehoursminutesseconds', 'weekday', 'weekdayhours', 'weekdayhoursminutes', 'weekdayhoursminutesseconds', 'dayhours', 'dayhoursminutes', 'dayhoursminutesseconds', 'hoursminutes', 'hoursminutesseconds', 'minutesseconds', 'secondsmilliseconds']
+ timeUnit : dict, :class:`TimeUnit`, :class:`MultiTimeUnit`, :class:`BinnedTimeUnit`, :class:`SingleTimeUnit`, :class:`TimeUnitParams`, :class:`UtcMultiTimeUnit`, :class:`UtcSingleTimeUnit`, :class:`LocalMultiTimeUnit`, :class:`LocalSingleTimeUnit`, Literal['binnedyear', 'binnedyearquarter', 'binnedyearquartermonth', 'binnedyearmonth', 'binnedyearmonthdate', 'binnedyearmonthdatehours', 'binnedyearmonthdatehoursminutes', 'binnedyearmonthdatehoursminutesseconds', 'binnedyearweek', 'binnedyearweekday', 'binnedyearweekdayhours', 'binnedyearweekdayhoursminutes', 'binnedyearweekdayhoursminutesseconds', 'binnedyeardayofyear', 'binnedutcyear', 'binnedutcyearquarter', 'binnedutcyearquartermonth', 'binnedutcyearmonth', 'binnedutcyearmonthdate', 'binnedutcyearmonthdatehours', 'binnedutcyearmonthdatehoursminutes', 'binnedutcyearmonthdatehoursminutesseconds', 'binnedutcyearweek', 'binnedutcyearweekday', 'binnedutcyearweekdayhours', 'binnedutcyearweekdayhoursminutes', 'binnedutcyearweekdayhoursminutesseconds', 'binnedutcyeardayofyear', 'utcyear', 'utcquarter', 'utcmonth', 'utcweek', 'utcday', 'utcdayofyear', 'utcdate', 'utchours', 'utcminutes', 'utcseconds', 'utcmilliseconds', 'year', 'quarter', 'month', 'week', 'day', 'dayofyear', 'date', 'hours', 'minutes', 'seconds', 'milliseconds', 'utcyearquarter', 'utcyearquartermonth', 'utcyearmonth', 'utcyearmonthdate', 'utcyearmonthdatehours', 'utcyearmonthdatehoursminutes', 'utcyearmonthdatehoursminutesseconds', 'utcyearweek', 'utcyearweekday', 'utcyearweekdayhours', 'utcyearweekdayhoursminutes', 'utcyearweekdayhoursminutesseconds', 'utcyeardayofyear', 'utcquartermonth', 'utcmonthdate', 'utcmonthdatehours', 'utcmonthdatehoursminutes', 'utcmonthdatehoursminutesseconds', 'utcweekday', 'utcweekdayhours', 'utcweekdayhoursminutes', 'utcweekdayhoursminutesseconds', 'utcdayhours', 'utcdayhoursminutes', 'utcdayhoursminutesseconds', 'utchoursminutes', 'utchoursminutesseconds', 'utcminutesseconds', 'utcsecondsmilliseconds', 'yearquarter', 'yearquartermonth', 'yearmonth', 'yearmonthdate', 'yearmonthdatehours', 'yearmonthdatehoursminutes', 'yearmonthdatehoursminutesseconds', 'yearweek', 'yearweekday', 'yearweekdayhours', 'yearweekdayhoursminutes', 'yearweekdayhoursminutesseconds', 'yeardayofyear', 'quartermonth', 'monthdate', 'monthdatehours', 'monthdatehoursminutes', 'monthdatehoursminutesseconds', 'weekday', 'weekdayhours', 'weekdayhoursminutes', 'weekdayhoursminutesseconds', 'dayhours', 'dayhoursminutes', 'dayhoursminutesseconds', 'hoursminutes', 'hoursminutesseconds', 'minutesseconds', 'secondsmilliseconds']
Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours``) for a temporal
field. or `a temporal field that gets casted as ordinal
`__.
@@ -8914,7 +8914,7 @@ class Radius2(FieldChannelMixin, core.SecondaryFieldDef):
about escaping in the `field documentation
`__. 2) ``field`` is not required
if ``aggregate`` is ``count``.
- timeUnit : dict, :class:`TimeUnit`, :class:`MultiTimeUnit`, :class:`BinnedTimeUnit`, :class:`SingleTimeUnit`, :class:`TimeUnitParams`, :class:`UtcMultiTimeUnit`, :class:`UtcSingleTimeUnit`, :class:`LocalMultiTimeUnit`, :class:`LocalSingleTimeUnit`, Literal['binnedutcyear', 'binnedutcyearquarter', 'binnedutcyearquartermonth', 'binnedutcyearmonth', 'binnedutcyearmonthdate', 'binnedutcyearmonthdatehours', 'binnedutcyearmonthdatehoursminutes', 'binnedutcyearmonthdatehoursminutesseconds', 'binnedutcyearweek', 'binnedutcyearweekday', 'binnedutcyearweekdayhours', 'binnedutcyearweekdayhoursminutes', 'binnedutcyearweekdayhoursminutesseconds', 'binnedutcyeardayofyear', 'binnedyear', 'binnedyearquarter', 'binnedyearquartermonth', 'binnedyearmonth', 'binnedyearmonthdate', 'binnedyearmonthdatehours', 'binnedyearmonthdatehoursminutes', 'binnedyearmonthdatehoursminutesseconds', 'binnedyearweek', 'binnedyearweekday', 'binnedyearweekdayhours', 'binnedyearweekdayhoursminutes', 'binnedyearweekdayhoursminutesseconds', 'binnedyeardayofyear', 'utcyear', 'utcquarter', 'utcmonth', 'utcweek', 'utcday', 'utcdayofyear', 'utcdate', 'utchours', 'utcminutes', 'utcseconds', 'utcmilliseconds', 'year', 'quarter', 'month', 'week', 'day', 'dayofyear', 'date', 'hours', 'minutes', 'seconds', 'milliseconds', 'utcyearquarter', 'utcyearquartermonth', 'utcyearmonth', 'utcyearmonthdate', 'utcyearmonthdatehours', 'utcyearmonthdatehoursminutes', 'utcyearmonthdatehoursminutesseconds', 'utcyearweek', 'utcyearweekday', 'utcyearweekdayhours', 'utcyearweekdayhoursminutes', 'utcyearweekdayhoursminutesseconds', 'utcyeardayofyear', 'utcquartermonth', 'utcmonthdate', 'utcmonthdatehours', 'utcmonthdatehoursminutes', 'utcmonthdatehoursminutesseconds', 'utcweekday', 'utcweekdayhours', 'utcweekdayhoursminutes', 'utcweekdayhoursminutesseconds', 'utcdayhours', 'utcdayhoursminutes', 'utcdayhoursminutesseconds', 'utchoursminutes', 'utchoursminutesseconds', 'utcminutesseconds', 'utcsecondsmilliseconds', 'yearquarter', 'yearquartermonth', 'yearmonth', 'yearmonthdate', 'yearmonthdatehours', 'yearmonthdatehoursminutes', 'yearmonthdatehoursminutesseconds', 'yearweek', 'yearweekday', 'yearweekdayhours', 'yearweekdayhoursminutes', 'yearweekdayhoursminutesseconds', 'yeardayofyear', 'quartermonth', 'monthdate', 'monthdatehours', 'monthdatehoursminutes', 'monthdatehoursminutesseconds', 'weekday', 'weekdayhours', 'weekdayhoursminutes', 'weekdayhoursminutesseconds', 'dayhours', 'dayhoursminutes', 'dayhoursminutesseconds', 'hoursminutes', 'hoursminutesseconds', 'minutesseconds', 'secondsmilliseconds']
+ timeUnit : dict, :class:`TimeUnit`, :class:`MultiTimeUnit`, :class:`BinnedTimeUnit`, :class:`SingleTimeUnit`, :class:`TimeUnitParams`, :class:`UtcMultiTimeUnit`, :class:`UtcSingleTimeUnit`, :class:`LocalMultiTimeUnit`, :class:`LocalSingleTimeUnit`, Literal['binnedyear', 'binnedyearquarter', 'binnedyearquartermonth', 'binnedyearmonth', 'binnedyearmonthdate', 'binnedyearmonthdatehours', 'binnedyearmonthdatehoursminutes', 'binnedyearmonthdatehoursminutesseconds', 'binnedyearweek', 'binnedyearweekday', 'binnedyearweekdayhours', 'binnedyearweekdayhoursminutes', 'binnedyearweekdayhoursminutesseconds', 'binnedyeardayofyear', 'binnedutcyear', 'binnedutcyearquarter', 'binnedutcyearquartermonth', 'binnedutcyearmonth', 'binnedutcyearmonthdate', 'binnedutcyearmonthdatehours', 'binnedutcyearmonthdatehoursminutes', 'binnedutcyearmonthdatehoursminutesseconds', 'binnedutcyearweek', 'binnedutcyearweekday', 'binnedutcyearweekdayhours', 'binnedutcyearweekdayhoursminutes', 'binnedutcyearweekdayhoursminutesseconds', 'binnedutcyeardayofyear', 'utcyear', 'utcquarter', 'utcmonth', 'utcweek', 'utcday', 'utcdayofyear', 'utcdate', 'utchours', 'utcminutes', 'utcseconds', 'utcmilliseconds', 'year', 'quarter', 'month', 'week', 'day', 'dayofyear', 'date', 'hours', 'minutes', 'seconds', 'milliseconds', 'utcyearquarter', 'utcyearquartermonth', 'utcyearmonth', 'utcyearmonthdate', 'utcyearmonthdatehours', 'utcyearmonthdatehoursminutes', 'utcyearmonthdatehoursminutesseconds', 'utcyearweek', 'utcyearweekday', 'utcyearweekdayhours', 'utcyearweekdayhoursminutes', 'utcyearweekdayhoursminutesseconds', 'utcyeardayofyear', 'utcquartermonth', 'utcmonthdate', 'utcmonthdatehours', 'utcmonthdatehoursminutes', 'utcmonthdatehoursminutesseconds', 'utcweekday', 'utcweekdayhours', 'utcweekdayhoursminutes', 'utcweekdayhoursminutesseconds', 'utcdayhours', 'utcdayhoursminutes', 'utcdayhoursminutesseconds', 'utchoursminutes', 'utchoursminutesseconds', 'utcminutesseconds', 'utcsecondsmilliseconds', 'yearquarter', 'yearquartermonth', 'yearmonth', 'yearmonthdate', 'yearmonthdatehours', 'yearmonthdatehoursminutes', 'yearmonthdatehoursminutesseconds', 'yearweek', 'yearweekday', 'yearweekdayhours', 'yearweekdayhoursminutes', 'yearweekdayhoursminutesseconds', 'yeardayofyear', 'quartermonth', 'monthdate', 'monthdatehours', 'monthdatehoursminutes', 'monthdatehoursminutesseconds', 'weekday', 'weekdayhours', 'weekdayhoursminutes', 'weekdayhoursminutesseconds', 'dayhours', 'dayhoursminutes', 'dayhoursminutesseconds', 'hoursminutes', 'hoursminutesseconds', 'minutesseconds', 'secondsmilliseconds']
Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours``) for a temporal
field. or `a temporal field that gets casted as ordinal
`__.
@@ -9270,7 +9270,7 @@ class Row(FieldChannelMixin, core.RowColumnEncodingFieldDef):
**Default value**: Depends on ``"spacing"`` property of `the view composition
configuration `__
(``20`` by default)
- timeUnit : dict, :class:`TimeUnit`, :class:`MultiTimeUnit`, :class:`BinnedTimeUnit`, :class:`SingleTimeUnit`, :class:`TimeUnitParams`, :class:`UtcMultiTimeUnit`, :class:`UtcSingleTimeUnit`, :class:`LocalMultiTimeUnit`, :class:`LocalSingleTimeUnit`, Literal['binnedutcyear', 'binnedutcyearquarter', 'binnedutcyearquartermonth', 'binnedutcyearmonth', 'binnedutcyearmonthdate', 'binnedutcyearmonthdatehours', 'binnedutcyearmonthdatehoursminutes', 'binnedutcyearmonthdatehoursminutesseconds', 'binnedutcyearweek', 'binnedutcyearweekday', 'binnedutcyearweekdayhours', 'binnedutcyearweekdayhoursminutes', 'binnedutcyearweekdayhoursminutesseconds', 'binnedutcyeardayofyear', 'binnedyear', 'binnedyearquarter', 'binnedyearquartermonth', 'binnedyearmonth', 'binnedyearmonthdate', 'binnedyearmonthdatehours', 'binnedyearmonthdatehoursminutes', 'binnedyearmonthdatehoursminutesseconds', 'binnedyearweek', 'binnedyearweekday', 'binnedyearweekdayhours', 'binnedyearweekdayhoursminutes', 'binnedyearweekdayhoursminutesseconds', 'binnedyeardayofyear', 'utcyear', 'utcquarter', 'utcmonth', 'utcweek', 'utcday', 'utcdayofyear', 'utcdate', 'utchours', 'utcminutes', 'utcseconds', 'utcmilliseconds', 'year', 'quarter', 'month', 'week', 'day', 'dayofyear', 'date', 'hours', 'minutes', 'seconds', 'milliseconds', 'utcyearquarter', 'utcyearquartermonth', 'utcyearmonth', 'utcyearmonthdate', 'utcyearmonthdatehours', 'utcyearmonthdatehoursminutes', 'utcyearmonthdatehoursminutesseconds', 'utcyearweek', 'utcyearweekday', 'utcyearweekdayhours', 'utcyearweekdayhoursminutes', 'utcyearweekdayhoursminutesseconds', 'utcyeardayofyear', 'utcquartermonth', 'utcmonthdate', 'utcmonthdatehours', 'utcmonthdatehoursminutes', 'utcmonthdatehoursminutesseconds', 'utcweekday', 'utcweekdayhours', 'utcweekdayhoursminutes', 'utcweekdayhoursminutesseconds', 'utcdayhours', 'utcdayhoursminutes', 'utcdayhoursminutesseconds', 'utchoursminutes', 'utchoursminutesseconds', 'utcminutesseconds', 'utcsecondsmilliseconds', 'yearquarter', 'yearquartermonth', 'yearmonth', 'yearmonthdate', 'yearmonthdatehours', 'yearmonthdatehoursminutes', 'yearmonthdatehoursminutesseconds', 'yearweek', 'yearweekday', 'yearweekdayhours', 'yearweekdayhoursminutes', 'yearweekdayhoursminutesseconds', 'yeardayofyear', 'quartermonth', 'monthdate', 'monthdatehours', 'monthdatehoursminutes', 'monthdatehoursminutesseconds', 'weekday', 'weekdayhours', 'weekdayhoursminutes', 'weekdayhoursminutesseconds', 'dayhours', 'dayhoursminutes', 'dayhoursminutesseconds', 'hoursminutes', 'hoursminutesseconds', 'minutesseconds', 'secondsmilliseconds']
+ timeUnit : dict, :class:`TimeUnit`, :class:`MultiTimeUnit`, :class:`BinnedTimeUnit`, :class:`SingleTimeUnit`, :class:`TimeUnitParams`, :class:`UtcMultiTimeUnit`, :class:`UtcSingleTimeUnit`, :class:`LocalMultiTimeUnit`, :class:`LocalSingleTimeUnit`, Literal['binnedyear', 'binnedyearquarter', 'binnedyearquartermonth', 'binnedyearmonth', 'binnedyearmonthdate', 'binnedyearmonthdatehours', 'binnedyearmonthdatehoursminutes', 'binnedyearmonthdatehoursminutesseconds', 'binnedyearweek', 'binnedyearweekday', 'binnedyearweekdayhours', 'binnedyearweekdayhoursminutes', 'binnedyearweekdayhoursminutesseconds', 'binnedyeardayofyear', 'binnedutcyear', 'binnedutcyearquarter', 'binnedutcyearquartermonth', 'binnedutcyearmonth', 'binnedutcyearmonthdate', 'binnedutcyearmonthdatehours', 'binnedutcyearmonthdatehoursminutes', 'binnedutcyearmonthdatehoursminutesseconds', 'binnedutcyearweek', 'binnedutcyearweekday', 'binnedutcyearweekdayhours', 'binnedutcyearweekdayhoursminutes', 'binnedutcyearweekdayhoursminutesseconds', 'binnedutcyeardayofyear', 'utcyear', 'utcquarter', 'utcmonth', 'utcweek', 'utcday', 'utcdayofyear', 'utcdate', 'utchours', 'utcminutes', 'utcseconds', 'utcmilliseconds', 'year', 'quarter', 'month', 'week', 'day', 'dayofyear', 'date', 'hours', 'minutes', 'seconds', 'milliseconds', 'utcyearquarter', 'utcyearquartermonth', 'utcyearmonth', 'utcyearmonthdate', 'utcyearmonthdatehours', 'utcyearmonthdatehoursminutes', 'utcyearmonthdatehoursminutesseconds', 'utcyearweek', 'utcyearweekday', 'utcyearweekdayhours', 'utcyearweekdayhoursminutes', 'utcyearweekdayhoursminutesseconds', 'utcyeardayofyear', 'utcquartermonth', 'utcmonthdate', 'utcmonthdatehours', 'utcmonthdatehoursminutes', 'utcmonthdatehoursminutesseconds', 'utcweekday', 'utcweekdayhours', 'utcweekdayhoursminutes', 'utcweekdayhoursminutesseconds', 'utcdayhours', 'utcdayhoursminutes', 'utcdayhoursminutesseconds', 'utchoursminutes', 'utchoursminutesseconds', 'utcminutesseconds', 'utcsecondsmilliseconds', 'yearquarter', 'yearquartermonth', 'yearmonth', 'yearmonthdate', 'yearmonthdatehours', 'yearmonthdatehoursminutes', 'yearmonthdatehoursminutesseconds', 'yearweek', 'yearweekday', 'yearweekdayhours', 'yearweekdayhoursminutes', 'yearweekdayhoursminutesseconds', 'yeardayofyear', 'quartermonth', 'monthdate', 'monthdatehours', 'monthdatehoursminutes', 'monthdatehoursminutesseconds', 'weekday', 'weekdayhours', 'weekdayhoursminutes', 'weekdayhoursminutesseconds', 'dayhours', 'dayhoursminutes', 'dayhoursminutesseconds', 'hoursminutes', 'hoursminutesseconds', 'minutesseconds', 'secondsmilliseconds']
Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours``) for a temporal
field. or `a temporal field that gets casted as ordinal
`__.
@@ -9674,7 +9674,7 @@ class Shape(
**See also:** `sort `__
documentation.
- timeUnit : dict, :class:`TimeUnit`, :class:`MultiTimeUnit`, :class:`BinnedTimeUnit`, :class:`SingleTimeUnit`, :class:`TimeUnitParams`, :class:`UtcMultiTimeUnit`, :class:`UtcSingleTimeUnit`, :class:`LocalMultiTimeUnit`, :class:`LocalSingleTimeUnit`, Literal['binnedutcyear', 'binnedutcyearquarter', 'binnedutcyearquartermonth', 'binnedutcyearmonth', 'binnedutcyearmonthdate', 'binnedutcyearmonthdatehours', 'binnedutcyearmonthdatehoursminutes', 'binnedutcyearmonthdatehoursminutesseconds', 'binnedutcyearweek', 'binnedutcyearweekday', 'binnedutcyearweekdayhours', 'binnedutcyearweekdayhoursminutes', 'binnedutcyearweekdayhoursminutesseconds', 'binnedutcyeardayofyear', 'binnedyear', 'binnedyearquarter', 'binnedyearquartermonth', 'binnedyearmonth', 'binnedyearmonthdate', 'binnedyearmonthdatehours', 'binnedyearmonthdatehoursminutes', 'binnedyearmonthdatehoursminutesseconds', 'binnedyearweek', 'binnedyearweekday', 'binnedyearweekdayhours', 'binnedyearweekdayhoursminutes', 'binnedyearweekdayhoursminutesseconds', 'binnedyeardayofyear', 'utcyear', 'utcquarter', 'utcmonth', 'utcweek', 'utcday', 'utcdayofyear', 'utcdate', 'utchours', 'utcminutes', 'utcseconds', 'utcmilliseconds', 'year', 'quarter', 'month', 'week', 'day', 'dayofyear', 'date', 'hours', 'minutes', 'seconds', 'milliseconds', 'utcyearquarter', 'utcyearquartermonth', 'utcyearmonth', 'utcyearmonthdate', 'utcyearmonthdatehours', 'utcyearmonthdatehoursminutes', 'utcyearmonthdatehoursminutesseconds', 'utcyearweek', 'utcyearweekday', 'utcyearweekdayhours', 'utcyearweekdayhoursminutes', 'utcyearweekdayhoursminutesseconds', 'utcyeardayofyear', 'utcquartermonth', 'utcmonthdate', 'utcmonthdatehours', 'utcmonthdatehoursminutes', 'utcmonthdatehoursminutesseconds', 'utcweekday', 'utcweekdayhours', 'utcweekdayhoursminutes', 'utcweekdayhoursminutesseconds', 'utcdayhours', 'utcdayhoursminutes', 'utcdayhoursminutesseconds', 'utchoursminutes', 'utchoursminutesseconds', 'utcminutesseconds', 'utcsecondsmilliseconds', 'yearquarter', 'yearquartermonth', 'yearmonth', 'yearmonthdate', 'yearmonthdatehours', 'yearmonthdatehoursminutes', 'yearmonthdatehoursminutesseconds', 'yearweek', 'yearweekday', 'yearweekdayhours', 'yearweekdayhoursminutes', 'yearweekdayhoursminutesseconds', 'yeardayofyear', 'quartermonth', 'monthdate', 'monthdatehours', 'monthdatehoursminutes', 'monthdatehoursminutesseconds', 'weekday', 'weekdayhours', 'weekdayhoursminutes', 'weekdayhoursminutesseconds', 'dayhours', 'dayhoursminutes', 'dayhoursminutesseconds', 'hoursminutes', 'hoursminutesseconds', 'minutesseconds', 'secondsmilliseconds']
+ timeUnit : dict, :class:`TimeUnit`, :class:`MultiTimeUnit`, :class:`BinnedTimeUnit`, :class:`SingleTimeUnit`, :class:`TimeUnitParams`, :class:`UtcMultiTimeUnit`, :class:`UtcSingleTimeUnit`, :class:`LocalMultiTimeUnit`, :class:`LocalSingleTimeUnit`, Literal['binnedyear', 'binnedyearquarter', 'binnedyearquartermonth', 'binnedyearmonth', 'binnedyearmonthdate', 'binnedyearmonthdatehours', 'binnedyearmonthdatehoursminutes', 'binnedyearmonthdatehoursminutesseconds', 'binnedyearweek', 'binnedyearweekday', 'binnedyearweekdayhours', 'binnedyearweekdayhoursminutes', 'binnedyearweekdayhoursminutesseconds', 'binnedyeardayofyear', 'binnedutcyear', 'binnedutcyearquarter', 'binnedutcyearquartermonth', 'binnedutcyearmonth', 'binnedutcyearmonthdate', 'binnedutcyearmonthdatehours', 'binnedutcyearmonthdatehoursminutes', 'binnedutcyearmonthdatehoursminutesseconds', 'binnedutcyearweek', 'binnedutcyearweekday', 'binnedutcyearweekdayhours', 'binnedutcyearweekdayhoursminutes', 'binnedutcyearweekdayhoursminutesseconds', 'binnedutcyeardayofyear', 'utcyear', 'utcquarter', 'utcmonth', 'utcweek', 'utcday', 'utcdayofyear', 'utcdate', 'utchours', 'utcminutes', 'utcseconds', 'utcmilliseconds', 'year', 'quarter', 'month', 'week', 'day', 'dayofyear', 'date', 'hours', 'minutes', 'seconds', 'milliseconds', 'utcyearquarter', 'utcyearquartermonth', 'utcyearmonth', 'utcyearmonthdate', 'utcyearmonthdatehours', 'utcyearmonthdatehoursminutes', 'utcyearmonthdatehoursminutesseconds', 'utcyearweek', 'utcyearweekday', 'utcyearweekdayhours', 'utcyearweekdayhoursminutes', 'utcyearweekdayhoursminutesseconds', 'utcyeardayofyear', 'utcquartermonth', 'utcmonthdate', 'utcmonthdatehours', 'utcmonthdatehoursminutes', 'utcmonthdatehoursminutesseconds', 'utcweekday', 'utcweekdayhours', 'utcweekdayhoursminutes', 'utcweekdayhoursminutesseconds', 'utcdayhours', 'utcdayhoursminutes', 'utcdayhoursminutesseconds', 'utchoursminutes', 'utchoursminutesseconds', 'utcminutesseconds', 'utcsecondsmilliseconds', 'yearquarter', 'yearquartermonth', 'yearmonth', 'yearmonthdate', 'yearmonthdatehours', 'yearmonthdatehoursminutes', 'yearmonthdatehoursminutesseconds', 'yearweek', 'yearweekday', 'yearweekdayhours', 'yearweekdayhoursminutes', 'yearweekdayhoursminutesseconds', 'yeardayofyear', 'quartermonth', 'monthdate', 'monthdatehours', 'monthdatehoursminutes', 'monthdatehoursminutesseconds', 'weekday', 'weekdayhours', 'weekdayhoursminutes', 'weekdayhoursminutesseconds', 'dayhours', 'dayhoursminutes', 'dayhoursminutesseconds', 'hoursminutes', 'hoursminutesseconds', 'minutesseconds', 'secondsmilliseconds']
Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours``) for a temporal
field. or `a temporal field that gets casted as ordinal
`__.
@@ -10494,7 +10494,7 @@ class Size(FieldChannelMixin, core.FieldOrDatumDefWithConditionMarkPropFieldDefn
**See also:** `sort `__
documentation.
- timeUnit : dict, :class:`TimeUnit`, :class:`MultiTimeUnit`, :class:`BinnedTimeUnit`, :class:`SingleTimeUnit`, :class:`TimeUnitParams`, :class:`UtcMultiTimeUnit`, :class:`UtcSingleTimeUnit`, :class:`LocalMultiTimeUnit`, :class:`LocalSingleTimeUnit`, Literal['binnedutcyear', 'binnedutcyearquarter', 'binnedutcyearquartermonth', 'binnedutcyearmonth', 'binnedutcyearmonthdate', 'binnedutcyearmonthdatehours', 'binnedutcyearmonthdatehoursminutes', 'binnedutcyearmonthdatehoursminutesseconds', 'binnedutcyearweek', 'binnedutcyearweekday', 'binnedutcyearweekdayhours', 'binnedutcyearweekdayhoursminutes', 'binnedutcyearweekdayhoursminutesseconds', 'binnedutcyeardayofyear', 'binnedyear', 'binnedyearquarter', 'binnedyearquartermonth', 'binnedyearmonth', 'binnedyearmonthdate', 'binnedyearmonthdatehours', 'binnedyearmonthdatehoursminutes', 'binnedyearmonthdatehoursminutesseconds', 'binnedyearweek', 'binnedyearweekday', 'binnedyearweekdayhours', 'binnedyearweekdayhoursminutes', 'binnedyearweekdayhoursminutesseconds', 'binnedyeardayofyear', 'utcyear', 'utcquarter', 'utcmonth', 'utcweek', 'utcday', 'utcdayofyear', 'utcdate', 'utchours', 'utcminutes', 'utcseconds', 'utcmilliseconds', 'year', 'quarter', 'month', 'week', 'day', 'dayofyear', 'date', 'hours', 'minutes', 'seconds', 'milliseconds', 'utcyearquarter', 'utcyearquartermonth', 'utcyearmonth', 'utcyearmonthdate', 'utcyearmonthdatehours', 'utcyearmonthdatehoursminutes', 'utcyearmonthdatehoursminutesseconds', 'utcyearweek', 'utcyearweekday', 'utcyearweekdayhours', 'utcyearweekdayhoursminutes', 'utcyearweekdayhoursminutesseconds', 'utcyeardayofyear', 'utcquartermonth', 'utcmonthdate', 'utcmonthdatehours', 'utcmonthdatehoursminutes', 'utcmonthdatehoursminutesseconds', 'utcweekday', 'utcweekdayhours', 'utcweekdayhoursminutes', 'utcweekdayhoursminutesseconds', 'utcdayhours', 'utcdayhoursminutes', 'utcdayhoursminutesseconds', 'utchoursminutes', 'utchoursminutesseconds', 'utcminutesseconds', 'utcsecondsmilliseconds', 'yearquarter', 'yearquartermonth', 'yearmonth', 'yearmonthdate', 'yearmonthdatehours', 'yearmonthdatehoursminutes', 'yearmonthdatehoursminutesseconds', 'yearweek', 'yearweekday', 'yearweekdayhours', 'yearweekdayhoursminutes', 'yearweekdayhoursminutesseconds', 'yeardayofyear', 'quartermonth', 'monthdate', 'monthdatehours', 'monthdatehoursminutes', 'monthdatehoursminutesseconds', 'weekday', 'weekdayhours', 'weekdayhoursminutes', 'weekdayhoursminutesseconds', 'dayhours', 'dayhoursminutes', 'dayhoursminutesseconds', 'hoursminutes', 'hoursminutesseconds', 'minutesseconds', 'secondsmilliseconds']
+ timeUnit : dict, :class:`TimeUnit`, :class:`MultiTimeUnit`, :class:`BinnedTimeUnit`, :class:`SingleTimeUnit`, :class:`TimeUnitParams`, :class:`UtcMultiTimeUnit`, :class:`UtcSingleTimeUnit`, :class:`LocalMultiTimeUnit`, :class:`LocalSingleTimeUnit`, Literal['binnedyear', 'binnedyearquarter', 'binnedyearquartermonth', 'binnedyearmonth', 'binnedyearmonthdate', 'binnedyearmonthdatehours', 'binnedyearmonthdatehoursminutes', 'binnedyearmonthdatehoursminutesseconds', 'binnedyearweek', 'binnedyearweekday', 'binnedyearweekdayhours', 'binnedyearweekdayhoursminutes', 'binnedyearweekdayhoursminutesseconds', 'binnedyeardayofyear', 'binnedutcyear', 'binnedutcyearquarter', 'binnedutcyearquartermonth', 'binnedutcyearmonth', 'binnedutcyearmonthdate', 'binnedutcyearmonthdatehours', 'binnedutcyearmonthdatehoursminutes', 'binnedutcyearmonthdatehoursminutesseconds', 'binnedutcyearweek', 'binnedutcyearweekday', 'binnedutcyearweekdayhours', 'binnedutcyearweekdayhoursminutes', 'binnedutcyearweekdayhoursminutesseconds', 'binnedutcyeardayofyear', 'utcyear', 'utcquarter', 'utcmonth', 'utcweek', 'utcday', 'utcdayofyear', 'utcdate', 'utchours', 'utcminutes', 'utcseconds', 'utcmilliseconds', 'year', 'quarter', 'month', 'week', 'day', 'dayofyear', 'date', 'hours', 'minutes', 'seconds', 'milliseconds', 'utcyearquarter', 'utcyearquartermonth', 'utcyearmonth', 'utcyearmonthdate', 'utcyearmonthdatehours', 'utcyearmonthdatehoursminutes', 'utcyearmonthdatehoursminutesseconds', 'utcyearweek', 'utcyearweekday', 'utcyearweekdayhours', 'utcyearweekdayhoursminutes', 'utcyearweekdayhoursminutesseconds', 'utcyeardayofyear', 'utcquartermonth', 'utcmonthdate', 'utcmonthdatehours', 'utcmonthdatehoursminutes', 'utcmonthdatehoursminutesseconds', 'utcweekday', 'utcweekdayhours', 'utcweekdayhoursminutes', 'utcweekdayhoursminutesseconds', 'utcdayhours', 'utcdayhoursminutes', 'utcdayhoursminutesseconds', 'utchoursminutes', 'utchoursminutesseconds', 'utcminutesseconds', 'utcsecondsmilliseconds', 'yearquarter', 'yearquartermonth', 'yearmonth', 'yearmonthdate', 'yearmonthdatehours', 'yearmonthdatehoursminutes', 'yearmonthdatehoursminutesseconds', 'yearweek', 'yearweekday', 'yearweekdayhours', 'yearweekdayhoursminutes', 'yearweekdayhoursminutesseconds', 'yeardayofyear', 'quartermonth', 'monthdate', 'monthdatehours', 'monthdatehoursminutes', 'monthdatehoursminutesseconds', 'weekday', 'weekdayhours', 'weekdayhoursminutes', 'weekdayhoursminutesseconds', 'dayhours', 'dayhoursminutes', 'dayhoursminutesseconds', 'hoursminutes', 'hoursminutesseconds', 'minutesseconds', 'secondsmilliseconds']
Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours``) for a temporal
field. or `a temporal field that gets casted as ordinal
`__.
@@ -11312,7 +11312,7 @@ class Stroke(
**See also:** `sort `__
documentation.
- timeUnit : dict, :class:`TimeUnit`, :class:`MultiTimeUnit`, :class:`BinnedTimeUnit`, :class:`SingleTimeUnit`, :class:`TimeUnitParams`, :class:`UtcMultiTimeUnit`, :class:`UtcSingleTimeUnit`, :class:`LocalMultiTimeUnit`, :class:`LocalSingleTimeUnit`, Literal['binnedutcyear', 'binnedutcyearquarter', 'binnedutcyearquartermonth', 'binnedutcyearmonth', 'binnedutcyearmonthdate', 'binnedutcyearmonthdatehours', 'binnedutcyearmonthdatehoursminutes', 'binnedutcyearmonthdatehoursminutesseconds', 'binnedutcyearweek', 'binnedutcyearweekday', 'binnedutcyearweekdayhours', 'binnedutcyearweekdayhoursminutes', 'binnedutcyearweekdayhoursminutesseconds', 'binnedutcyeardayofyear', 'binnedyear', 'binnedyearquarter', 'binnedyearquartermonth', 'binnedyearmonth', 'binnedyearmonthdate', 'binnedyearmonthdatehours', 'binnedyearmonthdatehoursminutes', 'binnedyearmonthdatehoursminutesseconds', 'binnedyearweek', 'binnedyearweekday', 'binnedyearweekdayhours', 'binnedyearweekdayhoursminutes', 'binnedyearweekdayhoursminutesseconds', 'binnedyeardayofyear', 'utcyear', 'utcquarter', 'utcmonth', 'utcweek', 'utcday', 'utcdayofyear', 'utcdate', 'utchours', 'utcminutes', 'utcseconds', 'utcmilliseconds', 'year', 'quarter', 'month', 'week', 'day', 'dayofyear', 'date', 'hours', 'minutes', 'seconds', 'milliseconds', 'utcyearquarter', 'utcyearquartermonth', 'utcyearmonth', 'utcyearmonthdate', 'utcyearmonthdatehours', 'utcyearmonthdatehoursminutes', 'utcyearmonthdatehoursminutesseconds', 'utcyearweek', 'utcyearweekday', 'utcyearweekdayhours', 'utcyearweekdayhoursminutes', 'utcyearweekdayhoursminutesseconds', 'utcyeardayofyear', 'utcquartermonth', 'utcmonthdate', 'utcmonthdatehours', 'utcmonthdatehoursminutes', 'utcmonthdatehoursminutesseconds', 'utcweekday', 'utcweekdayhours', 'utcweekdayhoursminutes', 'utcweekdayhoursminutesseconds', 'utcdayhours', 'utcdayhoursminutes', 'utcdayhoursminutesseconds', 'utchoursminutes', 'utchoursminutesseconds', 'utcminutesseconds', 'utcsecondsmilliseconds', 'yearquarter', 'yearquartermonth', 'yearmonth', 'yearmonthdate', 'yearmonthdatehours', 'yearmonthdatehoursminutes', 'yearmonthdatehoursminutesseconds', 'yearweek', 'yearweekday', 'yearweekdayhours', 'yearweekdayhoursminutes', 'yearweekdayhoursminutesseconds', 'yeardayofyear', 'quartermonth', 'monthdate', 'monthdatehours', 'monthdatehoursminutes', 'monthdatehoursminutesseconds', 'weekday', 'weekdayhours', 'weekdayhoursminutes', 'weekdayhoursminutesseconds', 'dayhours', 'dayhoursminutes', 'dayhoursminutesseconds', 'hoursminutes', 'hoursminutesseconds', 'minutesseconds', 'secondsmilliseconds']
+ timeUnit : dict, :class:`TimeUnit`, :class:`MultiTimeUnit`, :class:`BinnedTimeUnit`, :class:`SingleTimeUnit`, :class:`TimeUnitParams`, :class:`UtcMultiTimeUnit`, :class:`UtcSingleTimeUnit`, :class:`LocalMultiTimeUnit`, :class:`LocalSingleTimeUnit`, Literal['binnedyear', 'binnedyearquarter', 'binnedyearquartermonth', 'binnedyearmonth', 'binnedyearmonthdate', 'binnedyearmonthdatehours', 'binnedyearmonthdatehoursminutes', 'binnedyearmonthdatehoursminutesseconds', 'binnedyearweek', 'binnedyearweekday', 'binnedyearweekdayhours', 'binnedyearweekdayhoursminutes', 'binnedyearweekdayhoursminutesseconds', 'binnedyeardayofyear', 'binnedutcyear', 'binnedutcyearquarter', 'binnedutcyearquartermonth', 'binnedutcyearmonth', 'binnedutcyearmonthdate', 'binnedutcyearmonthdatehours', 'binnedutcyearmonthdatehoursminutes', 'binnedutcyearmonthdatehoursminutesseconds', 'binnedutcyearweek', 'binnedutcyearweekday', 'binnedutcyearweekdayhours', 'binnedutcyearweekdayhoursminutes', 'binnedutcyearweekdayhoursminutesseconds', 'binnedutcyeardayofyear', 'utcyear', 'utcquarter', 'utcmonth', 'utcweek', 'utcday', 'utcdayofyear', 'utcdate', 'utchours', 'utcminutes', 'utcseconds', 'utcmilliseconds', 'year', 'quarter', 'month', 'week', 'day', 'dayofyear', 'date', 'hours', 'minutes', 'seconds', 'milliseconds', 'utcyearquarter', 'utcyearquartermonth', 'utcyearmonth', 'utcyearmonthdate', 'utcyearmonthdatehours', 'utcyearmonthdatehoursminutes', 'utcyearmonthdatehoursminutesseconds', 'utcyearweek', 'utcyearweekday', 'utcyearweekdayhours', 'utcyearweekdayhoursminutes', 'utcyearweekdayhoursminutesseconds', 'utcyeardayofyear', 'utcquartermonth', 'utcmonthdate', 'utcmonthdatehours', 'utcmonthdatehoursminutes', 'utcmonthdatehoursminutesseconds', 'utcweekday', 'utcweekdayhours', 'utcweekdayhoursminutes', 'utcweekdayhoursminutesseconds', 'utcdayhours', 'utcdayhoursminutes', 'utcdayhoursminutesseconds', 'utchoursminutes', 'utchoursminutesseconds', 'utcminutesseconds', 'utcsecondsmilliseconds', 'yearquarter', 'yearquartermonth', 'yearmonth', 'yearmonthdate', 'yearmonthdatehours', 'yearmonthdatehoursminutes', 'yearmonthdatehoursminutesseconds', 'yearweek', 'yearweekday', 'yearweekdayhours', 'yearweekdayhoursminutes', 'yearweekdayhoursminutesseconds', 'yeardayofyear', 'quartermonth', 'monthdate', 'monthdatehours', 'monthdatehoursminutes', 'monthdatehoursminutesseconds', 'weekday', 'weekdayhours', 'weekdayhoursminutes', 'weekdayhoursminutesseconds', 'dayhours', 'dayhoursminutes', 'dayhoursminutesseconds', 'hoursminutes', 'hoursminutesseconds', 'minutesseconds', 'secondsmilliseconds']
Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours``) for a temporal
field. or `a temporal field that gets casted as ordinal
`__.
@@ -12138,7 +12138,7 @@ class StrokeDash(
**See also:** `sort `__
documentation.
- timeUnit : dict, :class:`TimeUnit`, :class:`MultiTimeUnit`, :class:`BinnedTimeUnit`, :class:`SingleTimeUnit`, :class:`TimeUnitParams`, :class:`UtcMultiTimeUnit`, :class:`UtcSingleTimeUnit`, :class:`LocalMultiTimeUnit`, :class:`LocalSingleTimeUnit`, Literal['binnedutcyear', 'binnedutcyearquarter', 'binnedutcyearquartermonth', 'binnedutcyearmonth', 'binnedutcyearmonthdate', 'binnedutcyearmonthdatehours', 'binnedutcyearmonthdatehoursminutes', 'binnedutcyearmonthdatehoursminutesseconds', 'binnedutcyearweek', 'binnedutcyearweekday', 'binnedutcyearweekdayhours', 'binnedutcyearweekdayhoursminutes', 'binnedutcyearweekdayhoursminutesseconds', 'binnedutcyeardayofyear', 'binnedyear', 'binnedyearquarter', 'binnedyearquartermonth', 'binnedyearmonth', 'binnedyearmonthdate', 'binnedyearmonthdatehours', 'binnedyearmonthdatehoursminutes', 'binnedyearmonthdatehoursminutesseconds', 'binnedyearweek', 'binnedyearweekday', 'binnedyearweekdayhours', 'binnedyearweekdayhoursminutes', 'binnedyearweekdayhoursminutesseconds', 'binnedyeardayofyear', 'utcyear', 'utcquarter', 'utcmonth', 'utcweek', 'utcday', 'utcdayofyear', 'utcdate', 'utchours', 'utcminutes', 'utcseconds', 'utcmilliseconds', 'year', 'quarter', 'month', 'week', 'day', 'dayofyear', 'date', 'hours', 'minutes', 'seconds', 'milliseconds', 'utcyearquarter', 'utcyearquartermonth', 'utcyearmonth', 'utcyearmonthdate', 'utcyearmonthdatehours', 'utcyearmonthdatehoursminutes', 'utcyearmonthdatehoursminutesseconds', 'utcyearweek', 'utcyearweekday', 'utcyearweekdayhours', 'utcyearweekdayhoursminutes', 'utcyearweekdayhoursminutesseconds', 'utcyeardayofyear', 'utcquartermonth', 'utcmonthdate', 'utcmonthdatehours', 'utcmonthdatehoursminutes', 'utcmonthdatehoursminutesseconds', 'utcweekday', 'utcweekdayhours', 'utcweekdayhoursminutes', 'utcweekdayhoursminutesseconds', 'utcdayhours', 'utcdayhoursminutes', 'utcdayhoursminutesseconds', 'utchoursminutes', 'utchoursminutesseconds', 'utcminutesseconds', 'utcsecondsmilliseconds', 'yearquarter', 'yearquartermonth', 'yearmonth', 'yearmonthdate', 'yearmonthdatehours', 'yearmonthdatehoursminutes', 'yearmonthdatehoursminutesseconds', 'yearweek', 'yearweekday', 'yearweekdayhours', 'yearweekdayhoursminutes', 'yearweekdayhoursminutesseconds', 'yeardayofyear', 'quartermonth', 'monthdate', 'monthdatehours', 'monthdatehoursminutes', 'monthdatehoursminutesseconds', 'weekday', 'weekdayhours', 'weekdayhoursminutes', 'weekdayhoursminutesseconds', 'dayhours', 'dayhoursminutes', 'dayhoursminutesseconds', 'hoursminutes', 'hoursminutesseconds', 'minutesseconds', 'secondsmilliseconds']
+ timeUnit : dict, :class:`TimeUnit`, :class:`MultiTimeUnit`, :class:`BinnedTimeUnit`, :class:`SingleTimeUnit`, :class:`TimeUnitParams`, :class:`UtcMultiTimeUnit`, :class:`UtcSingleTimeUnit`, :class:`LocalMultiTimeUnit`, :class:`LocalSingleTimeUnit`, Literal['binnedyear', 'binnedyearquarter', 'binnedyearquartermonth', 'binnedyearmonth', 'binnedyearmonthdate', 'binnedyearmonthdatehours', 'binnedyearmonthdatehoursminutes', 'binnedyearmonthdatehoursminutesseconds', 'binnedyearweek', 'binnedyearweekday', 'binnedyearweekdayhours', 'binnedyearweekdayhoursminutes', 'binnedyearweekdayhoursminutesseconds', 'binnedyeardayofyear', 'binnedutcyear', 'binnedutcyearquarter', 'binnedutcyearquartermonth', 'binnedutcyearmonth', 'binnedutcyearmonthdate', 'binnedutcyearmonthdatehours', 'binnedutcyearmonthdatehoursminutes', 'binnedutcyearmonthdatehoursminutesseconds', 'binnedutcyearweek', 'binnedutcyearweekday', 'binnedutcyearweekdayhours', 'binnedutcyearweekdayhoursminutes', 'binnedutcyearweekdayhoursminutesseconds', 'binnedutcyeardayofyear', 'utcyear', 'utcquarter', 'utcmonth', 'utcweek', 'utcday', 'utcdayofyear', 'utcdate', 'utchours', 'utcminutes', 'utcseconds', 'utcmilliseconds', 'year', 'quarter', 'month', 'week', 'day', 'dayofyear', 'date', 'hours', 'minutes', 'seconds', 'milliseconds', 'utcyearquarter', 'utcyearquartermonth', 'utcyearmonth', 'utcyearmonthdate', 'utcyearmonthdatehours', 'utcyearmonthdatehoursminutes', 'utcyearmonthdatehoursminutesseconds', 'utcyearweek', 'utcyearweekday', 'utcyearweekdayhours', 'utcyearweekdayhoursminutes', 'utcyearweekdayhoursminutesseconds', 'utcyeardayofyear', 'utcquartermonth', 'utcmonthdate', 'utcmonthdatehours', 'utcmonthdatehoursminutes', 'utcmonthdatehoursminutesseconds', 'utcweekday', 'utcweekdayhours', 'utcweekdayhoursminutes', 'utcweekdayhoursminutesseconds', 'utcdayhours', 'utcdayhoursminutes', 'utcdayhoursminutesseconds', 'utchoursminutes', 'utchoursminutesseconds', 'utcminutesseconds', 'utcsecondsmilliseconds', 'yearquarter', 'yearquartermonth', 'yearmonth', 'yearmonthdate', 'yearmonthdatehours', 'yearmonthdatehoursminutes', 'yearmonthdatehoursminutesseconds', 'yearweek', 'yearweekday', 'yearweekdayhours', 'yearweekdayhoursminutes', 'yearweekdayhoursminutesseconds', 'yeardayofyear', 'quartermonth', 'monthdate', 'monthdatehours', 'monthdatehoursminutes', 'monthdatehoursminutesseconds', 'weekday', 'weekdayhours', 'weekdayhoursminutes', 'weekdayhoursminutesseconds', 'dayhours', 'dayhoursminutes', 'dayhoursminutesseconds', 'hoursminutes', 'hoursminutesseconds', 'minutesseconds', 'secondsmilliseconds']
Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours``) for a temporal
field. or `a temporal field that gets casted as ordinal
`__.
@@ -12963,7 +12963,7 @@ class StrokeOpacity(
**See also:** `sort `__
documentation.
- timeUnit : dict, :class:`TimeUnit`, :class:`MultiTimeUnit`, :class:`BinnedTimeUnit`, :class:`SingleTimeUnit`, :class:`TimeUnitParams`, :class:`UtcMultiTimeUnit`, :class:`UtcSingleTimeUnit`, :class:`LocalMultiTimeUnit`, :class:`LocalSingleTimeUnit`, Literal['binnedutcyear', 'binnedutcyearquarter', 'binnedutcyearquartermonth', 'binnedutcyearmonth', 'binnedutcyearmonthdate', 'binnedutcyearmonthdatehours', 'binnedutcyearmonthdatehoursminutes', 'binnedutcyearmonthdatehoursminutesseconds', 'binnedutcyearweek', 'binnedutcyearweekday', 'binnedutcyearweekdayhours', 'binnedutcyearweekdayhoursminutes', 'binnedutcyearweekdayhoursminutesseconds', 'binnedutcyeardayofyear', 'binnedyear', 'binnedyearquarter', 'binnedyearquartermonth', 'binnedyearmonth', 'binnedyearmonthdate', 'binnedyearmonthdatehours', 'binnedyearmonthdatehoursminutes', 'binnedyearmonthdatehoursminutesseconds', 'binnedyearweek', 'binnedyearweekday', 'binnedyearweekdayhours', 'binnedyearweekdayhoursminutes', 'binnedyearweekdayhoursminutesseconds', 'binnedyeardayofyear', 'utcyear', 'utcquarter', 'utcmonth', 'utcweek', 'utcday', 'utcdayofyear', 'utcdate', 'utchours', 'utcminutes', 'utcseconds', 'utcmilliseconds', 'year', 'quarter', 'month', 'week', 'day', 'dayofyear', 'date', 'hours', 'minutes', 'seconds', 'milliseconds', 'utcyearquarter', 'utcyearquartermonth', 'utcyearmonth', 'utcyearmonthdate', 'utcyearmonthdatehours', 'utcyearmonthdatehoursminutes', 'utcyearmonthdatehoursminutesseconds', 'utcyearweek', 'utcyearweekday', 'utcyearweekdayhours', 'utcyearweekdayhoursminutes', 'utcyearweekdayhoursminutesseconds', 'utcyeardayofyear', 'utcquartermonth', 'utcmonthdate', 'utcmonthdatehours', 'utcmonthdatehoursminutes', 'utcmonthdatehoursminutesseconds', 'utcweekday', 'utcweekdayhours', 'utcweekdayhoursminutes', 'utcweekdayhoursminutesseconds', 'utcdayhours', 'utcdayhoursminutes', 'utcdayhoursminutesseconds', 'utchoursminutes', 'utchoursminutesseconds', 'utcminutesseconds', 'utcsecondsmilliseconds', 'yearquarter', 'yearquartermonth', 'yearmonth', 'yearmonthdate', 'yearmonthdatehours', 'yearmonthdatehoursminutes', 'yearmonthdatehoursminutesseconds', 'yearweek', 'yearweekday', 'yearweekdayhours', 'yearweekdayhoursminutes', 'yearweekdayhoursminutesseconds', 'yeardayofyear', 'quartermonth', 'monthdate', 'monthdatehours', 'monthdatehoursminutes', 'monthdatehoursminutesseconds', 'weekday', 'weekdayhours', 'weekdayhoursminutes', 'weekdayhoursminutesseconds', 'dayhours', 'dayhoursminutes', 'dayhoursminutesseconds', 'hoursminutes', 'hoursminutesseconds', 'minutesseconds', 'secondsmilliseconds']
+ timeUnit : dict, :class:`TimeUnit`, :class:`MultiTimeUnit`, :class:`BinnedTimeUnit`, :class:`SingleTimeUnit`, :class:`TimeUnitParams`, :class:`UtcMultiTimeUnit`, :class:`UtcSingleTimeUnit`, :class:`LocalMultiTimeUnit`, :class:`LocalSingleTimeUnit`, Literal['binnedyear', 'binnedyearquarter', 'binnedyearquartermonth', 'binnedyearmonth', 'binnedyearmonthdate', 'binnedyearmonthdatehours', 'binnedyearmonthdatehoursminutes', 'binnedyearmonthdatehoursminutesseconds', 'binnedyearweek', 'binnedyearweekday', 'binnedyearweekdayhours', 'binnedyearweekdayhoursminutes', 'binnedyearweekdayhoursminutesseconds', 'binnedyeardayofyear', 'binnedutcyear', 'binnedutcyearquarter', 'binnedutcyearquartermonth', 'binnedutcyearmonth', 'binnedutcyearmonthdate', 'binnedutcyearmonthdatehours', 'binnedutcyearmonthdatehoursminutes', 'binnedutcyearmonthdatehoursminutesseconds', 'binnedutcyearweek', 'binnedutcyearweekday', 'binnedutcyearweekdayhours', 'binnedutcyearweekdayhoursminutes', 'binnedutcyearweekdayhoursminutesseconds', 'binnedutcyeardayofyear', 'utcyear', 'utcquarter', 'utcmonth', 'utcweek', 'utcday', 'utcdayofyear', 'utcdate', 'utchours', 'utcminutes', 'utcseconds', 'utcmilliseconds', 'year', 'quarter', 'month', 'week', 'day', 'dayofyear', 'date', 'hours', 'minutes', 'seconds', 'milliseconds', 'utcyearquarter', 'utcyearquartermonth', 'utcyearmonth', 'utcyearmonthdate', 'utcyearmonthdatehours', 'utcyearmonthdatehoursminutes', 'utcyearmonthdatehoursminutesseconds', 'utcyearweek', 'utcyearweekday', 'utcyearweekdayhours', 'utcyearweekdayhoursminutes', 'utcyearweekdayhoursminutesseconds', 'utcyeardayofyear', 'utcquartermonth', 'utcmonthdate', 'utcmonthdatehours', 'utcmonthdatehoursminutes', 'utcmonthdatehoursminutesseconds', 'utcweekday', 'utcweekdayhours', 'utcweekdayhoursminutes', 'utcweekdayhoursminutesseconds', 'utcdayhours', 'utcdayhoursminutes', 'utcdayhoursminutesseconds', 'utchoursminutes', 'utchoursminutesseconds', 'utcminutesseconds', 'utcsecondsmilliseconds', 'yearquarter', 'yearquartermonth', 'yearmonth', 'yearmonthdate', 'yearmonthdatehours', 'yearmonthdatehoursminutes', 'yearmonthdatehoursminutesseconds', 'yearweek', 'yearweekday', 'yearweekdayhours', 'yearweekdayhoursminutes', 'yearweekdayhoursminutesseconds', 'yeardayofyear', 'quartermonth', 'monthdate', 'monthdatehours', 'monthdatehoursminutes', 'monthdatehoursminutesseconds', 'weekday', 'weekdayhours', 'weekdayhoursminutes', 'weekdayhoursminutesseconds', 'dayhours', 'dayhoursminutes', 'dayhoursminutesseconds', 'hoursminutes', 'hoursminutesseconds', 'minutesseconds', 'secondsmilliseconds']
Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours``) for a temporal
field. or `a temporal field that gets casted as ordinal
`__.
@@ -13788,7 +13788,7 @@ class StrokeWidth(
**See also:** `sort `__
documentation.
- timeUnit : dict, :class:`TimeUnit`, :class:`MultiTimeUnit`, :class:`BinnedTimeUnit`, :class:`SingleTimeUnit`, :class:`TimeUnitParams`, :class:`UtcMultiTimeUnit`, :class:`UtcSingleTimeUnit`, :class:`LocalMultiTimeUnit`, :class:`LocalSingleTimeUnit`, Literal['binnedutcyear', 'binnedutcyearquarter', 'binnedutcyearquartermonth', 'binnedutcyearmonth', 'binnedutcyearmonthdate', 'binnedutcyearmonthdatehours', 'binnedutcyearmonthdatehoursminutes', 'binnedutcyearmonthdatehoursminutesseconds', 'binnedutcyearweek', 'binnedutcyearweekday', 'binnedutcyearweekdayhours', 'binnedutcyearweekdayhoursminutes', 'binnedutcyearweekdayhoursminutesseconds', 'binnedutcyeardayofyear', 'binnedyear', 'binnedyearquarter', 'binnedyearquartermonth', 'binnedyearmonth', 'binnedyearmonthdate', 'binnedyearmonthdatehours', 'binnedyearmonthdatehoursminutes', 'binnedyearmonthdatehoursminutesseconds', 'binnedyearweek', 'binnedyearweekday', 'binnedyearweekdayhours', 'binnedyearweekdayhoursminutes', 'binnedyearweekdayhoursminutesseconds', 'binnedyeardayofyear', 'utcyear', 'utcquarter', 'utcmonth', 'utcweek', 'utcday', 'utcdayofyear', 'utcdate', 'utchours', 'utcminutes', 'utcseconds', 'utcmilliseconds', 'year', 'quarter', 'month', 'week', 'day', 'dayofyear', 'date', 'hours', 'minutes', 'seconds', 'milliseconds', 'utcyearquarter', 'utcyearquartermonth', 'utcyearmonth', 'utcyearmonthdate', 'utcyearmonthdatehours', 'utcyearmonthdatehoursminutes', 'utcyearmonthdatehoursminutesseconds', 'utcyearweek', 'utcyearweekday', 'utcyearweekdayhours', 'utcyearweekdayhoursminutes', 'utcyearweekdayhoursminutesseconds', 'utcyeardayofyear', 'utcquartermonth', 'utcmonthdate', 'utcmonthdatehours', 'utcmonthdatehoursminutes', 'utcmonthdatehoursminutesseconds', 'utcweekday', 'utcweekdayhours', 'utcweekdayhoursminutes', 'utcweekdayhoursminutesseconds', 'utcdayhours', 'utcdayhoursminutes', 'utcdayhoursminutesseconds', 'utchoursminutes', 'utchoursminutesseconds', 'utcminutesseconds', 'utcsecondsmilliseconds', 'yearquarter', 'yearquartermonth', 'yearmonth', 'yearmonthdate', 'yearmonthdatehours', 'yearmonthdatehoursminutes', 'yearmonthdatehoursminutesseconds', 'yearweek', 'yearweekday', 'yearweekdayhours', 'yearweekdayhoursminutes', 'yearweekdayhoursminutesseconds', 'yeardayofyear', 'quartermonth', 'monthdate', 'monthdatehours', 'monthdatehoursminutes', 'monthdatehoursminutesseconds', 'weekday', 'weekdayhours', 'weekdayhoursminutes', 'weekdayhoursminutesseconds', 'dayhours', 'dayhoursminutes', 'dayhoursminutesseconds', 'hoursminutes', 'hoursminutesseconds', 'minutesseconds', 'secondsmilliseconds']
+ timeUnit : dict, :class:`TimeUnit`, :class:`MultiTimeUnit`, :class:`BinnedTimeUnit`, :class:`SingleTimeUnit`, :class:`TimeUnitParams`, :class:`UtcMultiTimeUnit`, :class:`UtcSingleTimeUnit`, :class:`LocalMultiTimeUnit`, :class:`LocalSingleTimeUnit`, Literal['binnedyear', 'binnedyearquarter', 'binnedyearquartermonth', 'binnedyearmonth', 'binnedyearmonthdate', 'binnedyearmonthdatehours', 'binnedyearmonthdatehoursminutes', 'binnedyearmonthdatehoursminutesseconds', 'binnedyearweek', 'binnedyearweekday', 'binnedyearweekdayhours', 'binnedyearweekdayhoursminutes', 'binnedyearweekdayhoursminutesseconds', 'binnedyeardayofyear', 'binnedutcyear', 'binnedutcyearquarter', 'binnedutcyearquartermonth', 'binnedutcyearmonth', 'binnedutcyearmonthdate', 'binnedutcyearmonthdatehours', 'binnedutcyearmonthdatehoursminutes', 'binnedutcyearmonthdatehoursminutesseconds', 'binnedutcyearweek', 'binnedutcyearweekday', 'binnedutcyearweekdayhours', 'binnedutcyearweekdayhoursminutes', 'binnedutcyearweekdayhoursminutesseconds', 'binnedutcyeardayofyear', 'utcyear', 'utcquarter', 'utcmonth', 'utcweek', 'utcday', 'utcdayofyear', 'utcdate', 'utchours', 'utcminutes', 'utcseconds', 'utcmilliseconds', 'year', 'quarter', 'month', 'week', 'day', 'dayofyear', 'date', 'hours', 'minutes', 'seconds', 'milliseconds', 'utcyearquarter', 'utcyearquartermonth', 'utcyearmonth', 'utcyearmonthdate', 'utcyearmonthdatehours', 'utcyearmonthdatehoursminutes', 'utcyearmonthdatehoursminutesseconds', 'utcyearweek', 'utcyearweekday', 'utcyearweekdayhours', 'utcyearweekdayhoursminutes', 'utcyearweekdayhoursminutesseconds', 'utcyeardayofyear', 'utcquartermonth', 'utcmonthdate', 'utcmonthdatehours', 'utcmonthdatehoursminutes', 'utcmonthdatehoursminutesseconds', 'utcweekday', 'utcweekdayhours', 'utcweekdayhoursminutes', 'utcweekdayhoursminutesseconds', 'utcdayhours', 'utcdayhoursminutes', 'utcdayhoursminutesseconds', 'utchoursminutes', 'utchoursminutesseconds', 'utcminutesseconds', 'utcsecondsmilliseconds', 'yearquarter', 'yearquartermonth', 'yearmonth', 'yearmonthdate', 'yearmonthdatehours', 'yearmonthdatehoursminutes', 'yearmonthdatehoursminutesseconds', 'yearweek', 'yearweekday', 'yearweekdayhours', 'yearweekdayhoursminutes', 'yearweekdayhoursminutesseconds', 'yeardayofyear', 'quartermonth', 'monthdate', 'monthdatehours', 'monthdatehoursminutes', 'monthdatehoursminutesseconds', 'weekday', 'weekdayhours', 'weekdayhoursminutes', 'weekdayhoursminutesseconds', 'dayhours', 'dayhoursminutes', 'dayhoursminutesseconds', 'hoursminutes', 'hoursminutesseconds', 'minutesseconds', 'secondsmilliseconds']
Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours``) for a temporal
field. or `a temporal field that gets casted as ordinal
`__.
@@ -14583,7 +14583,7 @@ class Text(FieldChannelMixin, core.FieldOrDatumDefWithConditionStringFieldDefTex
* ``"time"`` for temporal fields and ordinal and nominal fields with ``timeUnit``.
* ``"number"`` for quantitative fields as well as ordinal and nominal fields without
``timeUnit``.
- timeUnit : dict, :class:`TimeUnit`, :class:`MultiTimeUnit`, :class:`BinnedTimeUnit`, :class:`SingleTimeUnit`, :class:`TimeUnitParams`, :class:`UtcMultiTimeUnit`, :class:`UtcSingleTimeUnit`, :class:`LocalMultiTimeUnit`, :class:`LocalSingleTimeUnit`, Literal['binnedutcyear', 'binnedutcyearquarter', 'binnedutcyearquartermonth', 'binnedutcyearmonth', 'binnedutcyearmonthdate', 'binnedutcyearmonthdatehours', 'binnedutcyearmonthdatehoursminutes', 'binnedutcyearmonthdatehoursminutesseconds', 'binnedutcyearweek', 'binnedutcyearweekday', 'binnedutcyearweekdayhours', 'binnedutcyearweekdayhoursminutes', 'binnedutcyearweekdayhoursminutesseconds', 'binnedutcyeardayofyear', 'binnedyear', 'binnedyearquarter', 'binnedyearquartermonth', 'binnedyearmonth', 'binnedyearmonthdate', 'binnedyearmonthdatehours', 'binnedyearmonthdatehoursminutes', 'binnedyearmonthdatehoursminutesseconds', 'binnedyearweek', 'binnedyearweekday', 'binnedyearweekdayhours', 'binnedyearweekdayhoursminutes', 'binnedyearweekdayhoursminutesseconds', 'binnedyeardayofyear', 'utcyear', 'utcquarter', 'utcmonth', 'utcweek', 'utcday', 'utcdayofyear', 'utcdate', 'utchours', 'utcminutes', 'utcseconds', 'utcmilliseconds', 'year', 'quarter', 'month', 'week', 'day', 'dayofyear', 'date', 'hours', 'minutes', 'seconds', 'milliseconds', 'utcyearquarter', 'utcyearquartermonth', 'utcyearmonth', 'utcyearmonthdate', 'utcyearmonthdatehours', 'utcyearmonthdatehoursminutes', 'utcyearmonthdatehoursminutesseconds', 'utcyearweek', 'utcyearweekday', 'utcyearweekdayhours', 'utcyearweekdayhoursminutes', 'utcyearweekdayhoursminutesseconds', 'utcyeardayofyear', 'utcquartermonth', 'utcmonthdate', 'utcmonthdatehours', 'utcmonthdatehoursminutes', 'utcmonthdatehoursminutesseconds', 'utcweekday', 'utcweekdayhours', 'utcweekdayhoursminutes', 'utcweekdayhoursminutesseconds', 'utcdayhours', 'utcdayhoursminutes', 'utcdayhoursminutesseconds', 'utchoursminutes', 'utchoursminutesseconds', 'utcminutesseconds', 'utcsecondsmilliseconds', 'yearquarter', 'yearquartermonth', 'yearmonth', 'yearmonthdate', 'yearmonthdatehours', 'yearmonthdatehoursminutes', 'yearmonthdatehoursminutesseconds', 'yearweek', 'yearweekday', 'yearweekdayhours', 'yearweekdayhoursminutes', 'yearweekdayhoursminutesseconds', 'yeardayofyear', 'quartermonth', 'monthdate', 'monthdatehours', 'monthdatehoursminutes', 'monthdatehoursminutesseconds', 'weekday', 'weekdayhours', 'weekdayhoursminutes', 'weekdayhoursminutesseconds', 'dayhours', 'dayhoursminutes', 'dayhoursminutesseconds', 'hoursminutes', 'hoursminutesseconds', 'minutesseconds', 'secondsmilliseconds']
+ timeUnit : dict, :class:`TimeUnit`, :class:`MultiTimeUnit`, :class:`BinnedTimeUnit`, :class:`SingleTimeUnit`, :class:`TimeUnitParams`, :class:`UtcMultiTimeUnit`, :class:`UtcSingleTimeUnit`, :class:`LocalMultiTimeUnit`, :class:`LocalSingleTimeUnit`, Literal['binnedyear', 'binnedyearquarter', 'binnedyearquartermonth', 'binnedyearmonth', 'binnedyearmonthdate', 'binnedyearmonthdatehours', 'binnedyearmonthdatehoursminutes', 'binnedyearmonthdatehoursminutesseconds', 'binnedyearweek', 'binnedyearweekday', 'binnedyearweekdayhours', 'binnedyearweekdayhoursminutes', 'binnedyearweekdayhoursminutesseconds', 'binnedyeardayofyear', 'binnedutcyear', 'binnedutcyearquarter', 'binnedutcyearquartermonth', 'binnedutcyearmonth', 'binnedutcyearmonthdate', 'binnedutcyearmonthdatehours', 'binnedutcyearmonthdatehoursminutes', 'binnedutcyearmonthdatehoursminutesseconds', 'binnedutcyearweek', 'binnedutcyearweekday', 'binnedutcyearweekdayhours', 'binnedutcyearweekdayhoursminutes', 'binnedutcyearweekdayhoursminutesseconds', 'binnedutcyeardayofyear', 'utcyear', 'utcquarter', 'utcmonth', 'utcweek', 'utcday', 'utcdayofyear', 'utcdate', 'utchours', 'utcminutes', 'utcseconds', 'utcmilliseconds', 'year', 'quarter', 'month', 'week', 'day', 'dayofyear', 'date', 'hours', 'minutes', 'seconds', 'milliseconds', 'utcyearquarter', 'utcyearquartermonth', 'utcyearmonth', 'utcyearmonthdate', 'utcyearmonthdatehours', 'utcyearmonthdatehoursminutes', 'utcyearmonthdatehoursminutesseconds', 'utcyearweek', 'utcyearweekday', 'utcyearweekdayhours', 'utcyearweekdayhoursminutes', 'utcyearweekdayhoursminutesseconds', 'utcyeardayofyear', 'utcquartermonth', 'utcmonthdate', 'utcmonthdatehours', 'utcmonthdatehoursminutes', 'utcmonthdatehoursminutesseconds', 'utcweekday', 'utcweekdayhours', 'utcweekdayhoursminutes', 'utcweekdayhoursminutesseconds', 'utcdayhours', 'utcdayhoursminutes', 'utcdayhoursminutesseconds', 'utchoursminutes', 'utchoursminutesseconds', 'utcminutesseconds', 'utcsecondsmilliseconds', 'yearquarter', 'yearquartermonth', 'yearmonth', 'yearmonthdate', 'yearmonthdatehours', 'yearmonthdatehoursminutes', 'yearmonthdatehoursminutesseconds', 'yearweek', 'yearweekday', 'yearweekdayhours', 'yearweekdayhoursminutes', 'yearweekdayhoursminutesseconds', 'yeardayofyear', 'quartermonth', 'monthdate', 'monthdatehours', 'monthdatehoursminutes', 'monthdatehoursminutesseconds', 'weekday', 'weekdayhours', 'weekdayhoursminutes', 'weekdayhoursminutesseconds', 'dayhours', 'dayhoursminutes', 'dayhoursminutesseconds', 'hoursminutes', 'hoursminutesseconds', 'minutesseconds', 'secondsmilliseconds']
Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours``) for a temporal
field. or `a temporal field that gets casted as ordinal
`__.
@@ -15211,7 +15211,7 @@ class Theta(FieldChannelMixin, core.PositionFieldDefBase):
**See also:** `stack `__
documentation.
- timeUnit : dict, :class:`TimeUnit`, :class:`MultiTimeUnit`, :class:`BinnedTimeUnit`, :class:`SingleTimeUnit`, :class:`TimeUnitParams`, :class:`UtcMultiTimeUnit`, :class:`UtcSingleTimeUnit`, :class:`LocalMultiTimeUnit`, :class:`LocalSingleTimeUnit`, Literal['binnedutcyear', 'binnedutcyearquarter', 'binnedutcyearquartermonth', 'binnedutcyearmonth', 'binnedutcyearmonthdate', 'binnedutcyearmonthdatehours', 'binnedutcyearmonthdatehoursminutes', 'binnedutcyearmonthdatehoursminutesseconds', 'binnedutcyearweek', 'binnedutcyearweekday', 'binnedutcyearweekdayhours', 'binnedutcyearweekdayhoursminutes', 'binnedutcyearweekdayhoursminutesseconds', 'binnedutcyeardayofyear', 'binnedyear', 'binnedyearquarter', 'binnedyearquartermonth', 'binnedyearmonth', 'binnedyearmonthdate', 'binnedyearmonthdatehours', 'binnedyearmonthdatehoursminutes', 'binnedyearmonthdatehoursminutesseconds', 'binnedyearweek', 'binnedyearweekday', 'binnedyearweekdayhours', 'binnedyearweekdayhoursminutes', 'binnedyearweekdayhoursminutesseconds', 'binnedyeardayofyear', 'utcyear', 'utcquarter', 'utcmonth', 'utcweek', 'utcday', 'utcdayofyear', 'utcdate', 'utchours', 'utcminutes', 'utcseconds', 'utcmilliseconds', 'year', 'quarter', 'month', 'week', 'day', 'dayofyear', 'date', 'hours', 'minutes', 'seconds', 'milliseconds', 'utcyearquarter', 'utcyearquartermonth', 'utcyearmonth', 'utcyearmonthdate', 'utcyearmonthdatehours', 'utcyearmonthdatehoursminutes', 'utcyearmonthdatehoursminutesseconds', 'utcyearweek', 'utcyearweekday', 'utcyearweekdayhours', 'utcyearweekdayhoursminutes', 'utcyearweekdayhoursminutesseconds', 'utcyeardayofyear', 'utcquartermonth', 'utcmonthdate', 'utcmonthdatehours', 'utcmonthdatehoursminutes', 'utcmonthdatehoursminutesseconds', 'utcweekday', 'utcweekdayhours', 'utcweekdayhoursminutes', 'utcweekdayhoursminutesseconds', 'utcdayhours', 'utcdayhoursminutes', 'utcdayhoursminutesseconds', 'utchoursminutes', 'utchoursminutesseconds', 'utcminutesseconds', 'utcsecondsmilliseconds', 'yearquarter', 'yearquartermonth', 'yearmonth', 'yearmonthdate', 'yearmonthdatehours', 'yearmonthdatehoursminutes', 'yearmonthdatehoursminutesseconds', 'yearweek', 'yearweekday', 'yearweekdayhours', 'yearweekdayhoursminutes', 'yearweekdayhoursminutesseconds', 'yeardayofyear', 'quartermonth', 'monthdate', 'monthdatehours', 'monthdatehoursminutes', 'monthdatehoursminutesseconds', 'weekday', 'weekdayhours', 'weekdayhoursminutes', 'weekdayhoursminutesseconds', 'dayhours', 'dayhoursminutes', 'dayhoursminutesseconds', 'hoursminutes', 'hoursminutesseconds', 'minutesseconds', 'secondsmilliseconds']
+ timeUnit : dict, :class:`TimeUnit`, :class:`MultiTimeUnit`, :class:`BinnedTimeUnit`, :class:`SingleTimeUnit`, :class:`TimeUnitParams`, :class:`UtcMultiTimeUnit`, :class:`UtcSingleTimeUnit`, :class:`LocalMultiTimeUnit`, :class:`LocalSingleTimeUnit`, Literal['binnedyear', 'binnedyearquarter', 'binnedyearquartermonth', 'binnedyearmonth', 'binnedyearmonthdate', 'binnedyearmonthdatehours', 'binnedyearmonthdatehoursminutes', 'binnedyearmonthdatehoursminutesseconds', 'binnedyearweek', 'binnedyearweekday', 'binnedyearweekdayhours', 'binnedyearweekdayhoursminutes', 'binnedyearweekdayhoursminutesseconds', 'binnedyeardayofyear', 'binnedutcyear', 'binnedutcyearquarter', 'binnedutcyearquartermonth', 'binnedutcyearmonth', 'binnedutcyearmonthdate', 'binnedutcyearmonthdatehours', 'binnedutcyearmonthdatehoursminutes', 'binnedutcyearmonthdatehoursminutesseconds', 'binnedutcyearweek', 'binnedutcyearweekday', 'binnedutcyearweekdayhours', 'binnedutcyearweekdayhoursminutes', 'binnedutcyearweekdayhoursminutesseconds', 'binnedutcyeardayofyear', 'utcyear', 'utcquarter', 'utcmonth', 'utcweek', 'utcday', 'utcdayofyear', 'utcdate', 'utchours', 'utcminutes', 'utcseconds', 'utcmilliseconds', 'year', 'quarter', 'month', 'week', 'day', 'dayofyear', 'date', 'hours', 'minutes', 'seconds', 'milliseconds', 'utcyearquarter', 'utcyearquartermonth', 'utcyearmonth', 'utcyearmonthdate', 'utcyearmonthdatehours', 'utcyearmonthdatehoursminutes', 'utcyearmonthdatehoursminutesseconds', 'utcyearweek', 'utcyearweekday', 'utcyearweekdayhours', 'utcyearweekdayhoursminutes', 'utcyearweekdayhoursminutesseconds', 'utcyeardayofyear', 'utcquartermonth', 'utcmonthdate', 'utcmonthdatehours', 'utcmonthdatehoursminutes', 'utcmonthdatehoursminutesseconds', 'utcweekday', 'utcweekdayhours', 'utcweekdayhoursminutes', 'utcweekdayhoursminutesseconds', 'utcdayhours', 'utcdayhoursminutes', 'utcdayhoursminutesseconds', 'utchoursminutes', 'utchoursminutesseconds', 'utcminutesseconds', 'utcsecondsmilliseconds', 'yearquarter', 'yearquartermonth', 'yearmonth', 'yearmonthdate', 'yearmonthdatehours', 'yearmonthdatehoursminutes', 'yearmonthdatehoursminutesseconds', 'yearweek', 'yearweekday', 'yearweekdayhours', 'yearweekdayhoursminutes', 'yearweekdayhoursminutesseconds', 'yeardayofyear', 'quartermonth', 'monthdate', 'monthdatehours', 'monthdatehoursminutes', 'monthdatehoursminutesseconds', 'weekday', 'weekdayhours', 'weekdayhoursminutes', 'weekdayhoursminutesseconds', 'dayhours', 'dayhoursminutes', 'dayhoursminutesseconds', 'hoursminutes', 'hoursminutesseconds', 'minutesseconds', 'secondsmilliseconds']
Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours``) for a temporal
field. or `a temporal field that gets casted as ordinal
`__.
@@ -15799,7 +15799,7 @@ class Theta2(FieldChannelMixin, core.SecondaryFieldDef):
about escaping in the `field documentation
`__. 2) ``field`` is not required
if ``aggregate`` is ``count``.
- timeUnit : dict, :class:`TimeUnit`, :class:`MultiTimeUnit`, :class:`BinnedTimeUnit`, :class:`SingleTimeUnit`, :class:`TimeUnitParams`, :class:`UtcMultiTimeUnit`, :class:`UtcSingleTimeUnit`, :class:`LocalMultiTimeUnit`, :class:`LocalSingleTimeUnit`, Literal['binnedutcyear', 'binnedutcyearquarter', 'binnedutcyearquartermonth', 'binnedutcyearmonth', 'binnedutcyearmonthdate', 'binnedutcyearmonthdatehours', 'binnedutcyearmonthdatehoursminutes', 'binnedutcyearmonthdatehoursminutesseconds', 'binnedutcyearweek', 'binnedutcyearweekday', 'binnedutcyearweekdayhours', 'binnedutcyearweekdayhoursminutes', 'binnedutcyearweekdayhoursminutesseconds', 'binnedutcyeardayofyear', 'binnedyear', 'binnedyearquarter', 'binnedyearquartermonth', 'binnedyearmonth', 'binnedyearmonthdate', 'binnedyearmonthdatehours', 'binnedyearmonthdatehoursminutes', 'binnedyearmonthdatehoursminutesseconds', 'binnedyearweek', 'binnedyearweekday', 'binnedyearweekdayhours', 'binnedyearweekdayhoursminutes', 'binnedyearweekdayhoursminutesseconds', 'binnedyeardayofyear', 'utcyear', 'utcquarter', 'utcmonth', 'utcweek', 'utcday', 'utcdayofyear', 'utcdate', 'utchours', 'utcminutes', 'utcseconds', 'utcmilliseconds', 'year', 'quarter', 'month', 'week', 'day', 'dayofyear', 'date', 'hours', 'minutes', 'seconds', 'milliseconds', 'utcyearquarter', 'utcyearquartermonth', 'utcyearmonth', 'utcyearmonthdate', 'utcyearmonthdatehours', 'utcyearmonthdatehoursminutes', 'utcyearmonthdatehoursminutesseconds', 'utcyearweek', 'utcyearweekday', 'utcyearweekdayhours', 'utcyearweekdayhoursminutes', 'utcyearweekdayhoursminutesseconds', 'utcyeardayofyear', 'utcquartermonth', 'utcmonthdate', 'utcmonthdatehours', 'utcmonthdatehoursminutes', 'utcmonthdatehoursminutesseconds', 'utcweekday', 'utcweekdayhours', 'utcweekdayhoursminutes', 'utcweekdayhoursminutesseconds', 'utcdayhours', 'utcdayhoursminutes', 'utcdayhoursminutesseconds', 'utchoursminutes', 'utchoursminutesseconds', 'utcminutesseconds', 'utcsecondsmilliseconds', 'yearquarter', 'yearquartermonth', 'yearmonth', 'yearmonthdate', 'yearmonthdatehours', 'yearmonthdatehoursminutes', 'yearmonthdatehoursminutesseconds', 'yearweek', 'yearweekday', 'yearweekdayhours', 'yearweekdayhoursminutes', 'yearweekdayhoursminutesseconds', 'yeardayofyear', 'quartermonth', 'monthdate', 'monthdatehours', 'monthdatehoursminutes', 'monthdatehoursminutesseconds', 'weekday', 'weekdayhours', 'weekdayhoursminutes', 'weekdayhoursminutesseconds', 'dayhours', 'dayhoursminutes', 'dayhoursminutesseconds', 'hoursminutes', 'hoursminutesseconds', 'minutesseconds', 'secondsmilliseconds']
+ timeUnit : dict, :class:`TimeUnit`, :class:`MultiTimeUnit`, :class:`BinnedTimeUnit`, :class:`SingleTimeUnit`, :class:`TimeUnitParams`, :class:`UtcMultiTimeUnit`, :class:`UtcSingleTimeUnit`, :class:`LocalMultiTimeUnit`, :class:`LocalSingleTimeUnit`, Literal['binnedyear', 'binnedyearquarter', 'binnedyearquartermonth', 'binnedyearmonth', 'binnedyearmonthdate', 'binnedyearmonthdatehours', 'binnedyearmonthdatehoursminutes', 'binnedyearmonthdatehoursminutesseconds', 'binnedyearweek', 'binnedyearweekday', 'binnedyearweekdayhours', 'binnedyearweekdayhoursminutes', 'binnedyearweekdayhoursminutesseconds', 'binnedyeardayofyear', 'binnedutcyear', 'binnedutcyearquarter', 'binnedutcyearquartermonth', 'binnedutcyearmonth', 'binnedutcyearmonthdate', 'binnedutcyearmonthdatehours', 'binnedutcyearmonthdatehoursminutes', 'binnedutcyearmonthdatehoursminutesseconds', 'binnedutcyearweek', 'binnedutcyearweekday', 'binnedutcyearweekdayhours', 'binnedutcyearweekdayhoursminutes', 'binnedutcyearweekdayhoursminutesseconds', 'binnedutcyeardayofyear', 'utcyear', 'utcquarter', 'utcmonth', 'utcweek', 'utcday', 'utcdayofyear', 'utcdate', 'utchours', 'utcminutes', 'utcseconds', 'utcmilliseconds', 'year', 'quarter', 'month', 'week', 'day', 'dayofyear', 'date', 'hours', 'minutes', 'seconds', 'milliseconds', 'utcyearquarter', 'utcyearquartermonth', 'utcyearmonth', 'utcyearmonthdate', 'utcyearmonthdatehours', 'utcyearmonthdatehoursminutes', 'utcyearmonthdatehoursminutesseconds', 'utcyearweek', 'utcyearweekday', 'utcyearweekdayhours', 'utcyearweekdayhoursminutes', 'utcyearweekdayhoursminutesseconds', 'utcyeardayofyear', 'utcquartermonth', 'utcmonthdate', 'utcmonthdatehours', 'utcmonthdatehoursminutes', 'utcmonthdatehoursminutesseconds', 'utcweekday', 'utcweekdayhours', 'utcweekdayhoursminutes', 'utcweekdayhoursminutesseconds', 'utcdayhours', 'utcdayhoursminutes', 'utcdayhoursminutesseconds', 'utchoursminutes', 'utchoursminutesseconds', 'utcminutesseconds', 'utcsecondsmilliseconds', 'yearquarter', 'yearquartermonth', 'yearmonth', 'yearmonthdate', 'yearmonthdatehours', 'yearmonthdatehoursminutes', 'yearmonthdatehoursminutesseconds', 'yearweek', 'yearweekday', 'yearweekdayhours', 'yearweekdayhoursminutes', 'yearweekdayhoursminutesseconds', 'yeardayofyear', 'quartermonth', 'monthdate', 'monthdatehours', 'monthdatehoursminutes', 'monthdatehoursminutesseconds', 'weekday', 'weekdayhours', 'weekdayhoursminutes', 'weekdayhoursminutesseconds', 'dayhours', 'dayhoursminutes', 'dayhoursminutesseconds', 'hoursminutes', 'hoursminutesseconds', 'minutesseconds', 'secondsmilliseconds']
Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours``) for a temporal
field. or `a temporal field that gets casted as ordinal
`__.
@@ -16142,7 +16142,7 @@ class Tooltip(FieldChannelMixin, core.StringFieldDefWithCondition):
* ``"time"`` for temporal fields and ordinal and nominal fields with ``timeUnit``.
* ``"number"`` for quantitative fields as well as ordinal and nominal fields without
``timeUnit``.
- timeUnit : dict, :class:`TimeUnit`, :class:`MultiTimeUnit`, :class:`BinnedTimeUnit`, :class:`SingleTimeUnit`, :class:`TimeUnitParams`, :class:`UtcMultiTimeUnit`, :class:`UtcSingleTimeUnit`, :class:`LocalMultiTimeUnit`, :class:`LocalSingleTimeUnit`, Literal['binnedutcyear', 'binnedutcyearquarter', 'binnedutcyearquartermonth', 'binnedutcyearmonth', 'binnedutcyearmonthdate', 'binnedutcyearmonthdatehours', 'binnedutcyearmonthdatehoursminutes', 'binnedutcyearmonthdatehoursminutesseconds', 'binnedutcyearweek', 'binnedutcyearweekday', 'binnedutcyearweekdayhours', 'binnedutcyearweekdayhoursminutes', 'binnedutcyearweekdayhoursminutesseconds', 'binnedutcyeardayofyear', 'binnedyear', 'binnedyearquarter', 'binnedyearquartermonth', 'binnedyearmonth', 'binnedyearmonthdate', 'binnedyearmonthdatehours', 'binnedyearmonthdatehoursminutes', 'binnedyearmonthdatehoursminutesseconds', 'binnedyearweek', 'binnedyearweekday', 'binnedyearweekdayhours', 'binnedyearweekdayhoursminutes', 'binnedyearweekdayhoursminutesseconds', 'binnedyeardayofyear', 'utcyear', 'utcquarter', 'utcmonth', 'utcweek', 'utcday', 'utcdayofyear', 'utcdate', 'utchours', 'utcminutes', 'utcseconds', 'utcmilliseconds', 'year', 'quarter', 'month', 'week', 'day', 'dayofyear', 'date', 'hours', 'minutes', 'seconds', 'milliseconds', 'utcyearquarter', 'utcyearquartermonth', 'utcyearmonth', 'utcyearmonthdate', 'utcyearmonthdatehours', 'utcyearmonthdatehoursminutes', 'utcyearmonthdatehoursminutesseconds', 'utcyearweek', 'utcyearweekday', 'utcyearweekdayhours', 'utcyearweekdayhoursminutes', 'utcyearweekdayhoursminutesseconds', 'utcyeardayofyear', 'utcquartermonth', 'utcmonthdate', 'utcmonthdatehours', 'utcmonthdatehoursminutes', 'utcmonthdatehoursminutesseconds', 'utcweekday', 'utcweekdayhours', 'utcweekdayhoursminutes', 'utcweekdayhoursminutesseconds', 'utcdayhours', 'utcdayhoursminutes', 'utcdayhoursminutesseconds', 'utchoursminutes', 'utchoursminutesseconds', 'utcminutesseconds', 'utcsecondsmilliseconds', 'yearquarter', 'yearquartermonth', 'yearmonth', 'yearmonthdate', 'yearmonthdatehours', 'yearmonthdatehoursminutes', 'yearmonthdatehoursminutesseconds', 'yearweek', 'yearweekday', 'yearweekdayhours', 'yearweekdayhoursminutes', 'yearweekdayhoursminutesseconds', 'yeardayofyear', 'quartermonth', 'monthdate', 'monthdatehours', 'monthdatehoursminutes', 'monthdatehoursminutesseconds', 'weekday', 'weekdayhours', 'weekdayhoursminutes', 'weekdayhoursminutesseconds', 'dayhours', 'dayhoursminutes', 'dayhoursminutesseconds', 'hoursminutes', 'hoursminutesseconds', 'minutesseconds', 'secondsmilliseconds']
+ timeUnit : dict, :class:`TimeUnit`, :class:`MultiTimeUnit`, :class:`BinnedTimeUnit`, :class:`SingleTimeUnit`, :class:`TimeUnitParams`, :class:`UtcMultiTimeUnit`, :class:`UtcSingleTimeUnit`, :class:`LocalMultiTimeUnit`, :class:`LocalSingleTimeUnit`, Literal['binnedyear', 'binnedyearquarter', 'binnedyearquartermonth', 'binnedyearmonth', 'binnedyearmonthdate', 'binnedyearmonthdatehours', 'binnedyearmonthdatehoursminutes', 'binnedyearmonthdatehoursminutesseconds', 'binnedyearweek', 'binnedyearweekday', 'binnedyearweekdayhours', 'binnedyearweekdayhoursminutes', 'binnedyearweekdayhoursminutesseconds', 'binnedyeardayofyear', 'binnedutcyear', 'binnedutcyearquarter', 'binnedutcyearquartermonth', 'binnedutcyearmonth', 'binnedutcyearmonthdate', 'binnedutcyearmonthdatehours', 'binnedutcyearmonthdatehoursminutes', 'binnedutcyearmonthdatehoursminutesseconds', 'binnedutcyearweek', 'binnedutcyearweekday', 'binnedutcyearweekdayhours', 'binnedutcyearweekdayhoursminutes', 'binnedutcyearweekdayhoursminutesseconds', 'binnedutcyeardayofyear', 'utcyear', 'utcquarter', 'utcmonth', 'utcweek', 'utcday', 'utcdayofyear', 'utcdate', 'utchours', 'utcminutes', 'utcseconds', 'utcmilliseconds', 'year', 'quarter', 'month', 'week', 'day', 'dayofyear', 'date', 'hours', 'minutes', 'seconds', 'milliseconds', 'utcyearquarter', 'utcyearquartermonth', 'utcyearmonth', 'utcyearmonthdate', 'utcyearmonthdatehours', 'utcyearmonthdatehoursminutes', 'utcyearmonthdatehoursminutesseconds', 'utcyearweek', 'utcyearweekday', 'utcyearweekdayhours', 'utcyearweekdayhoursminutes', 'utcyearweekdayhoursminutesseconds', 'utcyeardayofyear', 'utcquartermonth', 'utcmonthdate', 'utcmonthdatehours', 'utcmonthdatehoursminutes', 'utcmonthdatehoursminutesseconds', 'utcweekday', 'utcweekdayhours', 'utcweekdayhoursminutes', 'utcweekdayhoursminutesseconds', 'utcdayhours', 'utcdayhoursminutes', 'utcdayhoursminutesseconds', 'utchoursminutes', 'utchoursminutesseconds', 'utcminutesseconds', 'utcsecondsmilliseconds', 'yearquarter', 'yearquartermonth', 'yearmonth', 'yearmonthdate', 'yearmonthdatehours', 'yearmonthdatehoursminutes', 'yearmonthdatehoursminutesseconds', 'yearweek', 'yearweekday', 'yearweekdayhours', 'yearweekdayhoursminutes', 'yearweekdayhoursminutesseconds', 'yeardayofyear', 'quartermonth', 'monthdate', 'monthdatehours', 'monthdatehoursminutes', 'monthdatehoursminutesseconds', 'weekday', 'weekdayhours', 'weekdayhoursminutes', 'weekdayhoursminutesseconds', 'dayhours', 'dayhoursminutes', 'dayhoursminutesseconds', 'hoursminutes', 'hoursminutesseconds', 'minutesseconds', 'secondsmilliseconds']
Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours``) for a temporal
field. or `a temporal field that gets casted as ordinal
`__.
@@ -16585,7 +16585,7 @@ class Url(FieldChannelMixin, core.StringFieldDefWithCondition):
* ``"time"`` for temporal fields and ordinal and nominal fields with ``timeUnit``.
* ``"number"`` for quantitative fields as well as ordinal and nominal fields without
``timeUnit``.
- timeUnit : dict, :class:`TimeUnit`, :class:`MultiTimeUnit`, :class:`BinnedTimeUnit`, :class:`SingleTimeUnit`, :class:`TimeUnitParams`, :class:`UtcMultiTimeUnit`, :class:`UtcSingleTimeUnit`, :class:`LocalMultiTimeUnit`, :class:`LocalSingleTimeUnit`, Literal['binnedutcyear', 'binnedutcyearquarter', 'binnedutcyearquartermonth', 'binnedutcyearmonth', 'binnedutcyearmonthdate', 'binnedutcyearmonthdatehours', 'binnedutcyearmonthdatehoursminutes', 'binnedutcyearmonthdatehoursminutesseconds', 'binnedutcyearweek', 'binnedutcyearweekday', 'binnedutcyearweekdayhours', 'binnedutcyearweekdayhoursminutes', 'binnedutcyearweekdayhoursminutesseconds', 'binnedutcyeardayofyear', 'binnedyear', 'binnedyearquarter', 'binnedyearquartermonth', 'binnedyearmonth', 'binnedyearmonthdate', 'binnedyearmonthdatehours', 'binnedyearmonthdatehoursminutes', 'binnedyearmonthdatehoursminutesseconds', 'binnedyearweek', 'binnedyearweekday', 'binnedyearweekdayhours', 'binnedyearweekdayhoursminutes', 'binnedyearweekdayhoursminutesseconds', 'binnedyeardayofyear', 'utcyear', 'utcquarter', 'utcmonth', 'utcweek', 'utcday', 'utcdayofyear', 'utcdate', 'utchours', 'utcminutes', 'utcseconds', 'utcmilliseconds', 'year', 'quarter', 'month', 'week', 'day', 'dayofyear', 'date', 'hours', 'minutes', 'seconds', 'milliseconds', 'utcyearquarter', 'utcyearquartermonth', 'utcyearmonth', 'utcyearmonthdate', 'utcyearmonthdatehours', 'utcyearmonthdatehoursminutes', 'utcyearmonthdatehoursminutesseconds', 'utcyearweek', 'utcyearweekday', 'utcyearweekdayhours', 'utcyearweekdayhoursminutes', 'utcyearweekdayhoursminutesseconds', 'utcyeardayofyear', 'utcquartermonth', 'utcmonthdate', 'utcmonthdatehours', 'utcmonthdatehoursminutes', 'utcmonthdatehoursminutesseconds', 'utcweekday', 'utcweekdayhours', 'utcweekdayhoursminutes', 'utcweekdayhoursminutesseconds', 'utcdayhours', 'utcdayhoursminutes', 'utcdayhoursminutesseconds', 'utchoursminutes', 'utchoursminutesseconds', 'utcminutesseconds', 'utcsecondsmilliseconds', 'yearquarter', 'yearquartermonth', 'yearmonth', 'yearmonthdate', 'yearmonthdatehours', 'yearmonthdatehoursminutes', 'yearmonthdatehoursminutesseconds', 'yearweek', 'yearweekday', 'yearweekdayhours', 'yearweekdayhoursminutes', 'yearweekdayhoursminutesseconds', 'yeardayofyear', 'quartermonth', 'monthdate', 'monthdatehours', 'monthdatehoursminutes', 'monthdatehoursminutesseconds', 'weekday', 'weekdayhours', 'weekdayhoursminutes', 'weekdayhoursminutesseconds', 'dayhours', 'dayhoursminutes', 'dayhoursminutesseconds', 'hoursminutes', 'hoursminutesseconds', 'minutesseconds', 'secondsmilliseconds']
+ timeUnit : dict, :class:`TimeUnit`, :class:`MultiTimeUnit`, :class:`BinnedTimeUnit`, :class:`SingleTimeUnit`, :class:`TimeUnitParams`, :class:`UtcMultiTimeUnit`, :class:`UtcSingleTimeUnit`, :class:`LocalMultiTimeUnit`, :class:`LocalSingleTimeUnit`, Literal['binnedyear', 'binnedyearquarter', 'binnedyearquartermonth', 'binnedyearmonth', 'binnedyearmonthdate', 'binnedyearmonthdatehours', 'binnedyearmonthdatehoursminutes', 'binnedyearmonthdatehoursminutesseconds', 'binnedyearweek', 'binnedyearweekday', 'binnedyearweekdayhours', 'binnedyearweekdayhoursminutes', 'binnedyearweekdayhoursminutesseconds', 'binnedyeardayofyear', 'binnedutcyear', 'binnedutcyearquarter', 'binnedutcyearquartermonth', 'binnedutcyearmonth', 'binnedutcyearmonthdate', 'binnedutcyearmonthdatehours', 'binnedutcyearmonthdatehoursminutes', 'binnedutcyearmonthdatehoursminutesseconds', 'binnedutcyearweek', 'binnedutcyearweekday', 'binnedutcyearweekdayhours', 'binnedutcyearweekdayhoursminutes', 'binnedutcyearweekdayhoursminutesseconds', 'binnedutcyeardayofyear', 'utcyear', 'utcquarter', 'utcmonth', 'utcweek', 'utcday', 'utcdayofyear', 'utcdate', 'utchours', 'utcminutes', 'utcseconds', 'utcmilliseconds', 'year', 'quarter', 'month', 'week', 'day', 'dayofyear', 'date', 'hours', 'minutes', 'seconds', 'milliseconds', 'utcyearquarter', 'utcyearquartermonth', 'utcyearmonth', 'utcyearmonthdate', 'utcyearmonthdatehours', 'utcyearmonthdatehoursminutes', 'utcyearmonthdatehoursminutesseconds', 'utcyearweek', 'utcyearweekday', 'utcyearweekdayhours', 'utcyearweekdayhoursminutes', 'utcyearweekdayhoursminutesseconds', 'utcyeardayofyear', 'utcquartermonth', 'utcmonthdate', 'utcmonthdatehours', 'utcmonthdatehoursminutes', 'utcmonthdatehoursminutesseconds', 'utcweekday', 'utcweekdayhours', 'utcweekdayhoursminutes', 'utcweekdayhoursminutesseconds', 'utcdayhours', 'utcdayhoursminutes', 'utcdayhoursminutesseconds', 'utchoursminutes', 'utchoursminutesseconds', 'utcminutesseconds', 'utcsecondsmilliseconds', 'yearquarter', 'yearquartermonth', 'yearmonth', 'yearmonthdate', 'yearmonthdatehours', 'yearmonthdatehoursminutes', 'yearmonthdatehoursminutesseconds', 'yearweek', 'yearweekday', 'yearweekdayhours', 'yearweekdayhoursminutes', 'yearweekdayhoursminutesseconds', 'yeardayofyear', 'quartermonth', 'monthdate', 'monthdatehours', 'monthdatehoursminutes', 'monthdatehoursminutesseconds', 'weekday', 'weekdayhours', 'weekdayhoursminutes', 'weekdayhoursminutesseconds', 'dayhours', 'dayhoursminutes', 'dayhoursminutesseconds', 'hoursminutes', 'hoursminutesseconds', 'minutesseconds', 'secondsmilliseconds']
Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours``) for a temporal
field. or `a temporal field that gets casted as ordinal
`__.
@@ -17081,7 +17081,7 @@ class X(FieldChannelMixin, core.PositionFieldDef):
**See also:** `stack `__
documentation.
- timeUnit : dict, :class:`TimeUnit`, :class:`MultiTimeUnit`, :class:`BinnedTimeUnit`, :class:`SingleTimeUnit`, :class:`TimeUnitParams`, :class:`UtcMultiTimeUnit`, :class:`UtcSingleTimeUnit`, :class:`LocalMultiTimeUnit`, :class:`LocalSingleTimeUnit`, Literal['binnedutcyear', 'binnedutcyearquarter', 'binnedutcyearquartermonth', 'binnedutcyearmonth', 'binnedutcyearmonthdate', 'binnedutcyearmonthdatehours', 'binnedutcyearmonthdatehoursminutes', 'binnedutcyearmonthdatehoursminutesseconds', 'binnedutcyearweek', 'binnedutcyearweekday', 'binnedutcyearweekdayhours', 'binnedutcyearweekdayhoursminutes', 'binnedutcyearweekdayhoursminutesseconds', 'binnedutcyeardayofyear', 'binnedyear', 'binnedyearquarter', 'binnedyearquartermonth', 'binnedyearmonth', 'binnedyearmonthdate', 'binnedyearmonthdatehours', 'binnedyearmonthdatehoursminutes', 'binnedyearmonthdatehoursminutesseconds', 'binnedyearweek', 'binnedyearweekday', 'binnedyearweekdayhours', 'binnedyearweekdayhoursminutes', 'binnedyearweekdayhoursminutesseconds', 'binnedyeardayofyear', 'utcyear', 'utcquarter', 'utcmonth', 'utcweek', 'utcday', 'utcdayofyear', 'utcdate', 'utchours', 'utcminutes', 'utcseconds', 'utcmilliseconds', 'year', 'quarter', 'month', 'week', 'day', 'dayofyear', 'date', 'hours', 'minutes', 'seconds', 'milliseconds', 'utcyearquarter', 'utcyearquartermonth', 'utcyearmonth', 'utcyearmonthdate', 'utcyearmonthdatehours', 'utcyearmonthdatehoursminutes', 'utcyearmonthdatehoursminutesseconds', 'utcyearweek', 'utcyearweekday', 'utcyearweekdayhours', 'utcyearweekdayhoursminutes', 'utcyearweekdayhoursminutesseconds', 'utcyeardayofyear', 'utcquartermonth', 'utcmonthdate', 'utcmonthdatehours', 'utcmonthdatehoursminutes', 'utcmonthdatehoursminutesseconds', 'utcweekday', 'utcweekdayhours', 'utcweekdayhoursminutes', 'utcweekdayhoursminutesseconds', 'utcdayhours', 'utcdayhoursminutes', 'utcdayhoursminutesseconds', 'utchoursminutes', 'utchoursminutesseconds', 'utcminutesseconds', 'utcsecondsmilliseconds', 'yearquarter', 'yearquartermonth', 'yearmonth', 'yearmonthdate', 'yearmonthdatehours', 'yearmonthdatehoursminutes', 'yearmonthdatehoursminutesseconds', 'yearweek', 'yearweekday', 'yearweekdayhours', 'yearweekdayhoursminutes', 'yearweekdayhoursminutesseconds', 'yeardayofyear', 'quartermonth', 'monthdate', 'monthdatehours', 'monthdatehoursminutes', 'monthdatehoursminutesseconds', 'weekday', 'weekdayhours', 'weekdayhoursminutes', 'weekdayhoursminutesseconds', 'dayhours', 'dayhoursminutes', 'dayhoursminutesseconds', 'hoursminutes', 'hoursminutesseconds', 'minutesseconds', 'secondsmilliseconds']
+ timeUnit : dict, :class:`TimeUnit`, :class:`MultiTimeUnit`, :class:`BinnedTimeUnit`, :class:`SingleTimeUnit`, :class:`TimeUnitParams`, :class:`UtcMultiTimeUnit`, :class:`UtcSingleTimeUnit`, :class:`LocalMultiTimeUnit`, :class:`LocalSingleTimeUnit`, Literal['binnedyear', 'binnedyearquarter', 'binnedyearquartermonth', 'binnedyearmonth', 'binnedyearmonthdate', 'binnedyearmonthdatehours', 'binnedyearmonthdatehoursminutes', 'binnedyearmonthdatehoursminutesseconds', 'binnedyearweek', 'binnedyearweekday', 'binnedyearweekdayhours', 'binnedyearweekdayhoursminutes', 'binnedyearweekdayhoursminutesseconds', 'binnedyeardayofyear', 'binnedutcyear', 'binnedutcyearquarter', 'binnedutcyearquartermonth', 'binnedutcyearmonth', 'binnedutcyearmonthdate', 'binnedutcyearmonthdatehours', 'binnedutcyearmonthdatehoursminutes', 'binnedutcyearmonthdatehoursminutesseconds', 'binnedutcyearweek', 'binnedutcyearweekday', 'binnedutcyearweekdayhours', 'binnedutcyearweekdayhoursminutes', 'binnedutcyearweekdayhoursminutesseconds', 'binnedutcyeardayofyear', 'utcyear', 'utcquarter', 'utcmonth', 'utcweek', 'utcday', 'utcdayofyear', 'utcdate', 'utchours', 'utcminutes', 'utcseconds', 'utcmilliseconds', 'year', 'quarter', 'month', 'week', 'day', 'dayofyear', 'date', 'hours', 'minutes', 'seconds', 'milliseconds', 'utcyearquarter', 'utcyearquartermonth', 'utcyearmonth', 'utcyearmonthdate', 'utcyearmonthdatehours', 'utcyearmonthdatehoursminutes', 'utcyearmonthdatehoursminutesseconds', 'utcyearweek', 'utcyearweekday', 'utcyearweekdayhours', 'utcyearweekdayhoursminutes', 'utcyearweekdayhoursminutesseconds', 'utcyeardayofyear', 'utcquartermonth', 'utcmonthdate', 'utcmonthdatehours', 'utcmonthdatehoursminutes', 'utcmonthdatehoursminutesseconds', 'utcweekday', 'utcweekdayhours', 'utcweekdayhoursminutes', 'utcweekdayhoursminutesseconds', 'utcdayhours', 'utcdayhoursminutes', 'utcdayhoursminutesseconds', 'utchoursminutes', 'utchoursminutesseconds', 'utcminutesseconds', 'utcsecondsmilliseconds', 'yearquarter', 'yearquartermonth', 'yearmonth', 'yearmonthdate', 'yearmonthdatehours', 'yearmonthdatehoursminutes', 'yearmonthdatehoursminutesseconds', 'yearweek', 'yearweekday', 'yearweekdayhours', 'yearweekdayhoursminutes', 'yearweekdayhoursminutesseconds', 'yeardayofyear', 'quartermonth', 'monthdate', 'monthdatehours', 'monthdatehoursminutes', 'monthdatehoursminutesseconds', 'weekday', 'weekdayhours', 'weekdayhoursminutes', 'weekdayhoursminutesseconds', 'dayhours', 'dayhoursminutes', 'dayhoursminutesseconds', 'hoursminutes', 'hoursminutesseconds', 'minutesseconds', 'secondsmilliseconds']
Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours``) for a temporal
field. or `a temporal field that gets casted as ordinal
`__.
@@ -17954,7 +17954,7 @@ class X2(FieldChannelMixin, core.SecondaryFieldDef):
about escaping in the `field documentation
`__. 2) ``field`` is not required
if ``aggregate`` is ``count``.
- timeUnit : dict, :class:`TimeUnit`, :class:`MultiTimeUnit`, :class:`BinnedTimeUnit`, :class:`SingleTimeUnit`, :class:`TimeUnitParams`, :class:`UtcMultiTimeUnit`, :class:`UtcSingleTimeUnit`, :class:`LocalMultiTimeUnit`, :class:`LocalSingleTimeUnit`, Literal['binnedutcyear', 'binnedutcyearquarter', 'binnedutcyearquartermonth', 'binnedutcyearmonth', 'binnedutcyearmonthdate', 'binnedutcyearmonthdatehours', 'binnedutcyearmonthdatehoursminutes', 'binnedutcyearmonthdatehoursminutesseconds', 'binnedutcyearweek', 'binnedutcyearweekday', 'binnedutcyearweekdayhours', 'binnedutcyearweekdayhoursminutes', 'binnedutcyearweekdayhoursminutesseconds', 'binnedutcyeardayofyear', 'binnedyear', 'binnedyearquarter', 'binnedyearquartermonth', 'binnedyearmonth', 'binnedyearmonthdate', 'binnedyearmonthdatehours', 'binnedyearmonthdatehoursminutes', 'binnedyearmonthdatehoursminutesseconds', 'binnedyearweek', 'binnedyearweekday', 'binnedyearweekdayhours', 'binnedyearweekdayhoursminutes', 'binnedyearweekdayhoursminutesseconds', 'binnedyeardayofyear', 'utcyear', 'utcquarter', 'utcmonth', 'utcweek', 'utcday', 'utcdayofyear', 'utcdate', 'utchours', 'utcminutes', 'utcseconds', 'utcmilliseconds', 'year', 'quarter', 'month', 'week', 'day', 'dayofyear', 'date', 'hours', 'minutes', 'seconds', 'milliseconds', 'utcyearquarter', 'utcyearquartermonth', 'utcyearmonth', 'utcyearmonthdate', 'utcyearmonthdatehours', 'utcyearmonthdatehoursminutes', 'utcyearmonthdatehoursminutesseconds', 'utcyearweek', 'utcyearweekday', 'utcyearweekdayhours', 'utcyearweekdayhoursminutes', 'utcyearweekdayhoursminutesseconds', 'utcyeardayofyear', 'utcquartermonth', 'utcmonthdate', 'utcmonthdatehours', 'utcmonthdatehoursminutes', 'utcmonthdatehoursminutesseconds', 'utcweekday', 'utcweekdayhours', 'utcweekdayhoursminutes', 'utcweekdayhoursminutesseconds', 'utcdayhours', 'utcdayhoursminutes', 'utcdayhoursminutesseconds', 'utchoursminutes', 'utchoursminutesseconds', 'utcminutesseconds', 'utcsecondsmilliseconds', 'yearquarter', 'yearquartermonth', 'yearmonth', 'yearmonthdate', 'yearmonthdatehours', 'yearmonthdatehoursminutes', 'yearmonthdatehoursminutesseconds', 'yearweek', 'yearweekday', 'yearweekdayhours', 'yearweekdayhoursminutes', 'yearweekdayhoursminutesseconds', 'yeardayofyear', 'quartermonth', 'monthdate', 'monthdatehours', 'monthdatehoursminutes', 'monthdatehoursminutesseconds', 'weekday', 'weekdayhours', 'weekdayhoursminutes', 'weekdayhoursminutesseconds', 'dayhours', 'dayhoursminutes', 'dayhoursminutesseconds', 'hoursminutes', 'hoursminutesseconds', 'minutesseconds', 'secondsmilliseconds']
+ timeUnit : dict, :class:`TimeUnit`, :class:`MultiTimeUnit`, :class:`BinnedTimeUnit`, :class:`SingleTimeUnit`, :class:`TimeUnitParams`, :class:`UtcMultiTimeUnit`, :class:`UtcSingleTimeUnit`, :class:`LocalMultiTimeUnit`, :class:`LocalSingleTimeUnit`, Literal['binnedyear', 'binnedyearquarter', 'binnedyearquartermonth', 'binnedyearmonth', 'binnedyearmonthdate', 'binnedyearmonthdatehours', 'binnedyearmonthdatehoursminutes', 'binnedyearmonthdatehoursminutesseconds', 'binnedyearweek', 'binnedyearweekday', 'binnedyearweekdayhours', 'binnedyearweekdayhoursminutes', 'binnedyearweekdayhoursminutesseconds', 'binnedyeardayofyear', 'binnedutcyear', 'binnedutcyearquarter', 'binnedutcyearquartermonth', 'binnedutcyearmonth', 'binnedutcyearmonthdate', 'binnedutcyearmonthdatehours', 'binnedutcyearmonthdatehoursminutes', 'binnedutcyearmonthdatehoursminutesseconds', 'binnedutcyearweek', 'binnedutcyearweekday', 'binnedutcyearweekdayhours', 'binnedutcyearweekdayhoursminutes', 'binnedutcyearweekdayhoursminutesseconds', 'binnedutcyeardayofyear', 'utcyear', 'utcquarter', 'utcmonth', 'utcweek', 'utcday', 'utcdayofyear', 'utcdate', 'utchours', 'utcminutes', 'utcseconds', 'utcmilliseconds', 'year', 'quarter', 'month', 'week', 'day', 'dayofyear', 'date', 'hours', 'minutes', 'seconds', 'milliseconds', 'utcyearquarter', 'utcyearquartermonth', 'utcyearmonth', 'utcyearmonthdate', 'utcyearmonthdatehours', 'utcyearmonthdatehoursminutes', 'utcyearmonthdatehoursminutesseconds', 'utcyearweek', 'utcyearweekday', 'utcyearweekdayhours', 'utcyearweekdayhoursminutes', 'utcyearweekdayhoursminutesseconds', 'utcyeardayofyear', 'utcquartermonth', 'utcmonthdate', 'utcmonthdatehours', 'utcmonthdatehoursminutes', 'utcmonthdatehoursminutesseconds', 'utcweekday', 'utcweekdayhours', 'utcweekdayhoursminutes', 'utcweekdayhoursminutesseconds', 'utcdayhours', 'utcdayhoursminutes', 'utcdayhoursminutesseconds', 'utchoursminutes', 'utchoursminutesseconds', 'utcminutesseconds', 'utcsecondsmilliseconds', 'yearquarter', 'yearquartermonth', 'yearmonth', 'yearmonthdate', 'yearmonthdatehours', 'yearmonthdatehoursminutes', 'yearmonthdatehoursminutesseconds', 'yearweek', 'yearweekday', 'yearweekdayhours', 'yearweekdayhoursminutes', 'yearweekdayhoursminutesseconds', 'yeardayofyear', 'quartermonth', 'monthdate', 'monthdatehours', 'monthdatehoursminutes', 'monthdatehoursminutesseconds', 'weekday', 'weekdayhours', 'weekdayhoursminutes', 'weekdayhoursminutesseconds', 'dayhours', 'dayhoursminutes', 'dayhoursminutesseconds', 'hoursminutes', 'hoursminutesseconds', 'minutesseconds', 'secondsmilliseconds']
Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours``) for a temporal
field. or `a temporal field that gets casted as ordinal
`__.
@@ -18257,7 +18257,7 @@ class XError(FieldChannelMixin, core.SecondaryFieldDef):
about escaping in the `field documentation
`__. 2) ``field`` is not required
if ``aggregate`` is ``count``.
- timeUnit : dict, :class:`TimeUnit`, :class:`MultiTimeUnit`, :class:`BinnedTimeUnit`, :class:`SingleTimeUnit`, :class:`TimeUnitParams`, :class:`UtcMultiTimeUnit`, :class:`UtcSingleTimeUnit`, :class:`LocalMultiTimeUnit`, :class:`LocalSingleTimeUnit`, Literal['binnedutcyear', 'binnedutcyearquarter', 'binnedutcyearquartermonth', 'binnedutcyearmonth', 'binnedutcyearmonthdate', 'binnedutcyearmonthdatehours', 'binnedutcyearmonthdatehoursminutes', 'binnedutcyearmonthdatehoursminutesseconds', 'binnedutcyearweek', 'binnedutcyearweekday', 'binnedutcyearweekdayhours', 'binnedutcyearweekdayhoursminutes', 'binnedutcyearweekdayhoursminutesseconds', 'binnedutcyeardayofyear', 'binnedyear', 'binnedyearquarter', 'binnedyearquartermonth', 'binnedyearmonth', 'binnedyearmonthdate', 'binnedyearmonthdatehours', 'binnedyearmonthdatehoursminutes', 'binnedyearmonthdatehoursminutesseconds', 'binnedyearweek', 'binnedyearweekday', 'binnedyearweekdayhours', 'binnedyearweekdayhoursminutes', 'binnedyearweekdayhoursminutesseconds', 'binnedyeardayofyear', 'utcyear', 'utcquarter', 'utcmonth', 'utcweek', 'utcday', 'utcdayofyear', 'utcdate', 'utchours', 'utcminutes', 'utcseconds', 'utcmilliseconds', 'year', 'quarter', 'month', 'week', 'day', 'dayofyear', 'date', 'hours', 'minutes', 'seconds', 'milliseconds', 'utcyearquarter', 'utcyearquartermonth', 'utcyearmonth', 'utcyearmonthdate', 'utcyearmonthdatehours', 'utcyearmonthdatehoursminutes', 'utcyearmonthdatehoursminutesseconds', 'utcyearweek', 'utcyearweekday', 'utcyearweekdayhours', 'utcyearweekdayhoursminutes', 'utcyearweekdayhoursminutesseconds', 'utcyeardayofyear', 'utcquartermonth', 'utcmonthdate', 'utcmonthdatehours', 'utcmonthdatehoursminutes', 'utcmonthdatehoursminutesseconds', 'utcweekday', 'utcweekdayhours', 'utcweekdayhoursminutes', 'utcweekdayhoursminutesseconds', 'utcdayhours', 'utcdayhoursminutes', 'utcdayhoursminutesseconds', 'utchoursminutes', 'utchoursminutesseconds', 'utcminutesseconds', 'utcsecondsmilliseconds', 'yearquarter', 'yearquartermonth', 'yearmonth', 'yearmonthdate', 'yearmonthdatehours', 'yearmonthdatehoursminutes', 'yearmonthdatehoursminutesseconds', 'yearweek', 'yearweekday', 'yearweekdayhours', 'yearweekdayhoursminutes', 'yearweekdayhoursminutesseconds', 'yeardayofyear', 'quartermonth', 'monthdate', 'monthdatehours', 'monthdatehoursminutes', 'monthdatehoursminutesseconds', 'weekday', 'weekdayhours', 'weekdayhoursminutes', 'weekdayhoursminutesseconds', 'dayhours', 'dayhoursminutes', 'dayhoursminutesseconds', 'hoursminutes', 'hoursminutesseconds', 'minutesseconds', 'secondsmilliseconds']
+ timeUnit : dict, :class:`TimeUnit`, :class:`MultiTimeUnit`, :class:`BinnedTimeUnit`, :class:`SingleTimeUnit`, :class:`TimeUnitParams`, :class:`UtcMultiTimeUnit`, :class:`UtcSingleTimeUnit`, :class:`LocalMultiTimeUnit`, :class:`LocalSingleTimeUnit`, Literal['binnedyear', 'binnedyearquarter', 'binnedyearquartermonth', 'binnedyearmonth', 'binnedyearmonthdate', 'binnedyearmonthdatehours', 'binnedyearmonthdatehoursminutes', 'binnedyearmonthdatehoursminutesseconds', 'binnedyearweek', 'binnedyearweekday', 'binnedyearweekdayhours', 'binnedyearweekdayhoursminutes', 'binnedyearweekdayhoursminutesseconds', 'binnedyeardayofyear', 'binnedutcyear', 'binnedutcyearquarter', 'binnedutcyearquartermonth', 'binnedutcyearmonth', 'binnedutcyearmonthdate', 'binnedutcyearmonthdatehours', 'binnedutcyearmonthdatehoursminutes', 'binnedutcyearmonthdatehoursminutesseconds', 'binnedutcyearweek', 'binnedutcyearweekday', 'binnedutcyearweekdayhours', 'binnedutcyearweekdayhoursminutes', 'binnedutcyearweekdayhoursminutesseconds', 'binnedutcyeardayofyear', 'utcyear', 'utcquarter', 'utcmonth', 'utcweek', 'utcday', 'utcdayofyear', 'utcdate', 'utchours', 'utcminutes', 'utcseconds', 'utcmilliseconds', 'year', 'quarter', 'month', 'week', 'day', 'dayofyear', 'date', 'hours', 'minutes', 'seconds', 'milliseconds', 'utcyearquarter', 'utcyearquartermonth', 'utcyearmonth', 'utcyearmonthdate', 'utcyearmonthdatehours', 'utcyearmonthdatehoursminutes', 'utcyearmonthdatehoursminutesseconds', 'utcyearweek', 'utcyearweekday', 'utcyearweekdayhours', 'utcyearweekdayhoursminutes', 'utcyearweekdayhoursminutesseconds', 'utcyeardayofyear', 'utcquartermonth', 'utcmonthdate', 'utcmonthdatehours', 'utcmonthdatehoursminutes', 'utcmonthdatehoursminutesseconds', 'utcweekday', 'utcweekdayhours', 'utcweekdayhoursminutes', 'utcweekdayhoursminutesseconds', 'utcdayhours', 'utcdayhoursminutes', 'utcdayhoursminutesseconds', 'utchoursminutes', 'utchoursminutesseconds', 'utcminutesseconds', 'utcsecondsmilliseconds', 'yearquarter', 'yearquartermonth', 'yearmonth', 'yearmonthdate', 'yearmonthdatehours', 'yearmonthdatehoursminutes', 'yearmonthdatehoursminutesseconds', 'yearweek', 'yearweekday', 'yearweekdayhours', 'yearweekdayhoursminutes', 'yearweekdayhoursminutesseconds', 'yeardayofyear', 'quartermonth', 'monthdate', 'monthdatehours', 'monthdatehoursminutes', 'monthdatehoursminutesseconds', 'weekday', 'weekdayhours', 'weekdayhoursminutes', 'weekdayhoursminutesseconds', 'dayhours', 'dayhoursminutes', 'dayhoursminutesseconds', 'hoursminutes', 'hoursminutesseconds', 'minutesseconds', 'secondsmilliseconds']
Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours``) for a temporal
field. or `a temporal field that gets casted as ordinal
`__.
@@ -18440,7 +18440,7 @@ class XError2(FieldChannelMixin, core.SecondaryFieldDef):
about escaping in the `field documentation
`__. 2) ``field`` is not required
if ``aggregate`` is ``count``.
- timeUnit : dict, :class:`TimeUnit`, :class:`MultiTimeUnit`, :class:`BinnedTimeUnit`, :class:`SingleTimeUnit`, :class:`TimeUnitParams`, :class:`UtcMultiTimeUnit`, :class:`UtcSingleTimeUnit`, :class:`LocalMultiTimeUnit`, :class:`LocalSingleTimeUnit`, Literal['binnedutcyear', 'binnedutcyearquarter', 'binnedutcyearquartermonth', 'binnedutcyearmonth', 'binnedutcyearmonthdate', 'binnedutcyearmonthdatehours', 'binnedutcyearmonthdatehoursminutes', 'binnedutcyearmonthdatehoursminutesseconds', 'binnedutcyearweek', 'binnedutcyearweekday', 'binnedutcyearweekdayhours', 'binnedutcyearweekdayhoursminutes', 'binnedutcyearweekdayhoursminutesseconds', 'binnedutcyeardayofyear', 'binnedyear', 'binnedyearquarter', 'binnedyearquartermonth', 'binnedyearmonth', 'binnedyearmonthdate', 'binnedyearmonthdatehours', 'binnedyearmonthdatehoursminutes', 'binnedyearmonthdatehoursminutesseconds', 'binnedyearweek', 'binnedyearweekday', 'binnedyearweekdayhours', 'binnedyearweekdayhoursminutes', 'binnedyearweekdayhoursminutesseconds', 'binnedyeardayofyear', 'utcyear', 'utcquarter', 'utcmonth', 'utcweek', 'utcday', 'utcdayofyear', 'utcdate', 'utchours', 'utcminutes', 'utcseconds', 'utcmilliseconds', 'year', 'quarter', 'month', 'week', 'day', 'dayofyear', 'date', 'hours', 'minutes', 'seconds', 'milliseconds', 'utcyearquarter', 'utcyearquartermonth', 'utcyearmonth', 'utcyearmonthdate', 'utcyearmonthdatehours', 'utcyearmonthdatehoursminutes', 'utcyearmonthdatehoursminutesseconds', 'utcyearweek', 'utcyearweekday', 'utcyearweekdayhours', 'utcyearweekdayhoursminutes', 'utcyearweekdayhoursminutesseconds', 'utcyeardayofyear', 'utcquartermonth', 'utcmonthdate', 'utcmonthdatehours', 'utcmonthdatehoursminutes', 'utcmonthdatehoursminutesseconds', 'utcweekday', 'utcweekdayhours', 'utcweekdayhoursminutes', 'utcweekdayhoursminutesseconds', 'utcdayhours', 'utcdayhoursminutes', 'utcdayhoursminutesseconds', 'utchoursminutes', 'utchoursminutesseconds', 'utcminutesseconds', 'utcsecondsmilliseconds', 'yearquarter', 'yearquartermonth', 'yearmonth', 'yearmonthdate', 'yearmonthdatehours', 'yearmonthdatehoursminutes', 'yearmonthdatehoursminutesseconds', 'yearweek', 'yearweekday', 'yearweekdayhours', 'yearweekdayhoursminutes', 'yearweekdayhoursminutesseconds', 'yeardayofyear', 'quartermonth', 'monthdate', 'monthdatehours', 'monthdatehoursminutes', 'monthdatehoursminutesseconds', 'weekday', 'weekdayhours', 'weekdayhoursminutes', 'weekdayhoursminutesseconds', 'dayhours', 'dayhoursminutes', 'dayhoursminutesseconds', 'hoursminutes', 'hoursminutesseconds', 'minutesseconds', 'secondsmilliseconds']
+ timeUnit : dict, :class:`TimeUnit`, :class:`MultiTimeUnit`, :class:`BinnedTimeUnit`, :class:`SingleTimeUnit`, :class:`TimeUnitParams`, :class:`UtcMultiTimeUnit`, :class:`UtcSingleTimeUnit`, :class:`LocalMultiTimeUnit`, :class:`LocalSingleTimeUnit`, Literal['binnedyear', 'binnedyearquarter', 'binnedyearquartermonth', 'binnedyearmonth', 'binnedyearmonthdate', 'binnedyearmonthdatehours', 'binnedyearmonthdatehoursminutes', 'binnedyearmonthdatehoursminutesseconds', 'binnedyearweek', 'binnedyearweekday', 'binnedyearweekdayhours', 'binnedyearweekdayhoursminutes', 'binnedyearweekdayhoursminutesseconds', 'binnedyeardayofyear', 'binnedutcyear', 'binnedutcyearquarter', 'binnedutcyearquartermonth', 'binnedutcyearmonth', 'binnedutcyearmonthdate', 'binnedutcyearmonthdatehours', 'binnedutcyearmonthdatehoursminutes', 'binnedutcyearmonthdatehoursminutesseconds', 'binnedutcyearweek', 'binnedutcyearweekday', 'binnedutcyearweekdayhours', 'binnedutcyearweekdayhoursminutes', 'binnedutcyearweekdayhoursminutesseconds', 'binnedutcyeardayofyear', 'utcyear', 'utcquarter', 'utcmonth', 'utcweek', 'utcday', 'utcdayofyear', 'utcdate', 'utchours', 'utcminutes', 'utcseconds', 'utcmilliseconds', 'year', 'quarter', 'month', 'week', 'day', 'dayofyear', 'date', 'hours', 'minutes', 'seconds', 'milliseconds', 'utcyearquarter', 'utcyearquartermonth', 'utcyearmonth', 'utcyearmonthdate', 'utcyearmonthdatehours', 'utcyearmonthdatehoursminutes', 'utcyearmonthdatehoursminutesseconds', 'utcyearweek', 'utcyearweekday', 'utcyearweekdayhours', 'utcyearweekdayhoursminutes', 'utcyearweekdayhoursminutesseconds', 'utcyeardayofyear', 'utcquartermonth', 'utcmonthdate', 'utcmonthdatehours', 'utcmonthdatehoursminutes', 'utcmonthdatehoursminutesseconds', 'utcweekday', 'utcweekdayhours', 'utcweekdayhoursminutes', 'utcweekdayhoursminutesseconds', 'utcdayhours', 'utcdayhoursminutes', 'utcdayhoursminutesseconds', 'utchoursminutes', 'utchoursminutesseconds', 'utcminutesseconds', 'utcsecondsmilliseconds', 'yearquarter', 'yearquartermonth', 'yearmonth', 'yearmonthdate', 'yearmonthdatehours', 'yearmonthdatehoursminutes', 'yearmonthdatehoursminutesseconds', 'yearweek', 'yearweekday', 'yearweekdayhours', 'yearweekdayhoursminutes', 'yearweekdayhoursminutesseconds', 'yeardayofyear', 'quartermonth', 'monthdate', 'monthdatehours', 'monthdatehoursminutes', 'monthdatehoursminutesseconds', 'weekday', 'weekdayhours', 'weekdayhoursminutes', 'weekdayhoursminutesseconds', 'dayhours', 'dayhoursminutes', 'dayhoursminutesseconds', 'hoursminutes', 'hoursminutesseconds', 'minutesseconds', 'secondsmilliseconds']
Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours``) for a temporal
field. or `a temporal field that gets casted as ordinal
`__.
@@ -18671,7 +18671,7 @@ class XOffset(FieldChannelMixin, core.ScaleFieldDef):
**See also:** `sort `__
documentation.
- timeUnit : dict, :class:`TimeUnit`, :class:`MultiTimeUnit`, :class:`BinnedTimeUnit`, :class:`SingleTimeUnit`, :class:`TimeUnitParams`, :class:`UtcMultiTimeUnit`, :class:`UtcSingleTimeUnit`, :class:`LocalMultiTimeUnit`, :class:`LocalSingleTimeUnit`, Literal['binnedutcyear', 'binnedutcyearquarter', 'binnedutcyearquartermonth', 'binnedutcyearmonth', 'binnedutcyearmonthdate', 'binnedutcyearmonthdatehours', 'binnedutcyearmonthdatehoursminutes', 'binnedutcyearmonthdatehoursminutesseconds', 'binnedutcyearweek', 'binnedutcyearweekday', 'binnedutcyearweekdayhours', 'binnedutcyearweekdayhoursminutes', 'binnedutcyearweekdayhoursminutesseconds', 'binnedutcyeardayofyear', 'binnedyear', 'binnedyearquarter', 'binnedyearquartermonth', 'binnedyearmonth', 'binnedyearmonthdate', 'binnedyearmonthdatehours', 'binnedyearmonthdatehoursminutes', 'binnedyearmonthdatehoursminutesseconds', 'binnedyearweek', 'binnedyearweekday', 'binnedyearweekdayhours', 'binnedyearweekdayhoursminutes', 'binnedyearweekdayhoursminutesseconds', 'binnedyeardayofyear', 'utcyear', 'utcquarter', 'utcmonth', 'utcweek', 'utcday', 'utcdayofyear', 'utcdate', 'utchours', 'utcminutes', 'utcseconds', 'utcmilliseconds', 'year', 'quarter', 'month', 'week', 'day', 'dayofyear', 'date', 'hours', 'minutes', 'seconds', 'milliseconds', 'utcyearquarter', 'utcyearquartermonth', 'utcyearmonth', 'utcyearmonthdate', 'utcyearmonthdatehours', 'utcyearmonthdatehoursminutes', 'utcyearmonthdatehoursminutesseconds', 'utcyearweek', 'utcyearweekday', 'utcyearweekdayhours', 'utcyearweekdayhoursminutes', 'utcyearweekdayhoursminutesseconds', 'utcyeardayofyear', 'utcquartermonth', 'utcmonthdate', 'utcmonthdatehours', 'utcmonthdatehoursminutes', 'utcmonthdatehoursminutesseconds', 'utcweekday', 'utcweekdayhours', 'utcweekdayhoursminutes', 'utcweekdayhoursminutesseconds', 'utcdayhours', 'utcdayhoursminutes', 'utcdayhoursminutesseconds', 'utchoursminutes', 'utchoursminutesseconds', 'utcminutesseconds', 'utcsecondsmilliseconds', 'yearquarter', 'yearquartermonth', 'yearmonth', 'yearmonthdate', 'yearmonthdatehours', 'yearmonthdatehoursminutes', 'yearmonthdatehoursminutesseconds', 'yearweek', 'yearweekday', 'yearweekdayhours', 'yearweekdayhoursminutes', 'yearweekdayhoursminutesseconds', 'yeardayofyear', 'quartermonth', 'monthdate', 'monthdatehours', 'monthdatehoursminutes', 'monthdatehoursminutesseconds', 'weekday', 'weekdayhours', 'weekdayhoursminutes', 'weekdayhoursminutesseconds', 'dayhours', 'dayhoursminutes', 'dayhoursminutesseconds', 'hoursminutes', 'hoursminutesseconds', 'minutesseconds', 'secondsmilliseconds']
+ timeUnit : dict, :class:`TimeUnit`, :class:`MultiTimeUnit`, :class:`BinnedTimeUnit`, :class:`SingleTimeUnit`, :class:`TimeUnitParams`, :class:`UtcMultiTimeUnit`, :class:`UtcSingleTimeUnit`, :class:`LocalMultiTimeUnit`, :class:`LocalSingleTimeUnit`, Literal['binnedyear', 'binnedyearquarter', 'binnedyearquartermonth', 'binnedyearmonth', 'binnedyearmonthdate', 'binnedyearmonthdatehours', 'binnedyearmonthdatehoursminutes', 'binnedyearmonthdatehoursminutesseconds', 'binnedyearweek', 'binnedyearweekday', 'binnedyearweekdayhours', 'binnedyearweekdayhoursminutes', 'binnedyearweekdayhoursminutesseconds', 'binnedyeardayofyear', 'binnedutcyear', 'binnedutcyearquarter', 'binnedutcyearquartermonth', 'binnedutcyearmonth', 'binnedutcyearmonthdate', 'binnedutcyearmonthdatehours', 'binnedutcyearmonthdatehoursminutes', 'binnedutcyearmonthdatehoursminutesseconds', 'binnedutcyearweek', 'binnedutcyearweekday', 'binnedutcyearweekdayhours', 'binnedutcyearweekdayhoursminutes', 'binnedutcyearweekdayhoursminutesseconds', 'binnedutcyeardayofyear', 'utcyear', 'utcquarter', 'utcmonth', 'utcweek', 'utcday', 'utcdayofyear', 'utcdate', 'utchours', 'utcminutes', 'utcseconds', 'utcmilliseconds', 'year', 'quarter', 'month', 'week', 'day', 'dayofyear', 'date', 'hours', 'minutes', 'seconds', 'milliseconds', 'utcyearquarter', 'utcyearquartermonth', 'utcyearmonth', 'utcyearmonthdate', 'utcyearmonthdatehours', 'utcyearmonthdatehoursminutes', 'utcyearmonthdatehoursminutesseconds', 'utcyearweek', 'utcyearweekday', 'utcyearweekdayhours', 'utcyearweekdayhoursminutes', 'utcyearweekdayhoursminutesseconds', 'utcyeardayofyear', 'utcquartermonth', 'utcmonthdate', 'utcmonthdatehours', 'utcmonthdatehoursminutes', 'utcmonthdatehoursminutesseconds', 'utcweekday', 'utcweekdayhours', 'utcweekdayhoursminutes', 'utcweekdayhoursminutesseconds', 'utcdayhours', 'utcdayhoursminutes', 'utcdayhoursminutesseconds', 'utchoursminutes', 'utchoursminutesseconds', 'utcminutesseconds', 'utcsecondsmilliseconds', 'yearquarter', 'yearquartermonth', 'yearmonth', 'yearmonthdate', 'yearmonthdatehours', 'yearmonthdatehoursminutes', 'yearmonthdatehoursminutesseconds', 'yearweek', 'yearweekday', 'yearweekdayhours', 'yearweekdayhoursminutes', 'yearweekdayhoursminutesseconds', 'yeardayofyear', 'quartermonth', 'monthdate', 'monthdatehours', 'monthdatehoursminutes', 'monthdatehoursminutesseconds', 'weekday', 'weekdayhours', 'weekdayhoursminutes', 'weekdayhoursminutesseconds', 'dayhours', 'dayhoursminutes', 'dayhoursminutesseconds', 'hoursminutes', 'hoursminutesseconds', 'minutesseconds', 'secondsmilliseconds']
Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours``) for a temporal
field. or `a temporal field that gets casted as ordinal
`__.
@@ -19320,7 +19320,7 @@ class Y(FieldChannelMixin, core.PositionFieldDef):
**See also:** `stack `__
documentation.
- timeUnit : dict, :class:`TimeUnit`, :class:`MultiTimeUnit`, :class:`BinnedTimeUnit`, :class:`SingleTimeUnit`, :class:`TimeUnitParams`, :class:`UtcMultiTimeUnit`, :class:`UtcSingleTimeUnit`, :class:`LocalMultiTimeUnit`, :class:`LocalSingleTimeUnit`, Literal['binnedutcyear', 'binnedutcyearquarter', 'binnedutcyearquartermonth', 'binnedutcyearmonth', 'binnedutcyearmonthdate', 'binnedutcyearmonthdatehours', 'binnedutcyearmonthdatehoursminutes', 'binnedutcyearmonthdatehoursminutesseconds', 'binnedutcyearweek', 'binnedutcyearweekday', 'binnedutcyearweekdayhours', 'binnedutcyearweekdayhoursminutes', 'binnedutcyearweekdayhoursminutesseconds', 'binnedutcyeardayofyear', 'binnedyear', 'binnedyearquarter', 'binnedyearquartermonth', 'binnedyearmonth', 'binnedyearmonthdate', 'binnedyearmonthdatehours', 'binnedyearmonthdatehoursminutes', 'binnedyearmonthdatehoursminutesseconds', 'binnedyearweek', 'binnedyearweekday', 'binnedyearweekdayhours', 'binnedyearweekdayhoursminutes', 'binnedyearweekdayhoursminutesseconds', 'binnedyeardayofyear', 'utcyear', 'utcquarter', 'utcmonth', 'utcweek', 'utcday', 'utcdayofyear', 'utcdate', 'utchours', 'utcminutes', 'utcseconds', 'utcmilliseconds', 'year', 'quarter', 'month', 'week', 'day', 'dayofyear', 'date', 'hours', 'minutes', 'seconds', 'milliseconds', 'utcyearquarter', 'utcyearquartermonth', 'utcyearmonth', 'utcyearmonthdate', 'utcyearmonthdatehours', 'utcyearmonthdatehoursminutes', 'utcyearmonthdatehoursminutesseconds', 'utcyearweek', 'utcyearweekday', 'utcyearweekdayhours', 'utcyearweekdayhoursminutes', 'utcyearweekdayhoursminutesseconds', 'utcyeardayofyear', 'utcquartermonth', 'utcmonthdate', 'utcmonthdatehours', 'utcmonthdatehoursminutes', 'utcmonthdatehoursminutesseconds', 'utcweekday', 'utcweekdayhours', 'utcweekdayhoursminutes', 'utcweekdayhoursminutesseconds', 'utcdayhours', 'utcdayhoursminutes', 'utcdayhoursminutesseconds', 'utchoursminutes', 'utchoursminutesseconds', 'utcminutesseconds', 'utcsecondsmilliseconds', 'yearquarter', 'yearquartermonth', 'yearmonth', 'yearmonthdate', 'yearmonthdatehours', 'yearmonthdatehoursminutes', 'yearmonthdatehoursminutesseconds', 'yearweek', 'yearweekday', 'yearweekdayhours', 'yearweekdayhoursminutes', 'yearweekdayhoursminutesseconds', 'yeardayofyear', 'quartermonth', 'monthdate', 'monthdatehours', 'monthdatehoursminutes', 'monthdatehoursminutesseconds', 'weekday', 'weekdayhours', 'weekdayhoursminutes', 'weekdayhoursminutesseconds', 'dayhours', 'dayhoursminutes', 'dayhoursminutesseconds', 'hoursminutes', 'hoursminutesseconds', 'minutesseconds', 'secondsmilliseconds']
+ timeUnit : dict, :class:`TimeUnit`, :class:`MultiTimeUnit`, :class:`BinnedTimeUnit`, :class:`SingleTimeUnit`, :class:`TimeUnitParams`, :class:`UtcMultiTimeUnit`, :class:`UtcSingleTimeUnit`, :class:`LocalMultiTimeUnit`, :class:`LocalSingleTimeUnit`, Literal['binnedyear', 'binnedyearquarter', 'binnedyearquartermonth', 'binnedyearmonth', 'binnedyearmonthdate', 'binnedyearmonthdatehours', 'binnedyearmonthdatehoursminutes', 'binnedyearmonthdatehoursminutesseconds', 'binnedyearweek', 'binnedyearweekday', 'binnedyearweekdayhours', 'binnedyearweekdayhoursminutes', 'binnedyearweekdayhoursminutesseconds', 'binnedyeardayofyear', 'binnedutcyear', 'binnedutcyearquarter', 'binnedutcyearquartermonth', 'binnedutcyearmonth', 'binnedutcyearmonthdate', 'binnedutcyearmonthdatehours', 'binnedutcyearmonthdatehoursminutes', 'binnedutcyearmonthdatehoursminutesseconds', 'binnedutcyearweek', 'binnedutcyearweekday', 'binnedutcyearweekdayhours', 'binnedutcyearweekdayhoursminutes', 'binnedutcyearweekdayhoursminutesseconds', 'binnedutcyeardayofyear', 'utcyear', 'utcquarter', 'utcmonth', 'utcweek', 'utcday', 'utcdayofyear', 'utcdate', 'utchours', 'utcminutes', 'utcseconds', 'utcmilliseconds', 'year', 'quarter', 'month', 'week', 'day', 'dayofyear', 'date', 'hours', 'minutes', 'seconds', 'milliseconds', 'utcyearquarter', 'utcyearquartermonth', 'utcyearmonth', 'utcyearmonthdate', 'utcyearmonthdatehours', 'utcyearmonthdatehoursminutes', 'utcyearmonthdatehoursminutesseconds', 'utcyearweek', 'utcyearweekday', 'utcyearweekdayhours', 'utcyearweekdayhoursminutes', 'utcyearweekdayhoursminutesseconds', 'utcyeardayofyear', 'utcquartermonth', 'utcmonthdate', 'utcmonthdatehours', 'utcmonthdatehoursminutes', 'utcmonthdatehoursminutesseconds', 'utcweekday', 'utcweekdayhours', 'utcweekdayhoursminutes', 'utcweekdayhoursminutesseconds', 'utcdayhours', 'utcdayhoursminutes', 'utcdayhoursminutesseconds', 'utchoursminutes', 'utchoursminutesseconds', 'utcminutesseconds', 'utcsecondsmilliseconds', 'yearquarter', 'yearquartermonth', 'yearmonth', 'yearmonthdate', 'yearmonthdatehours', 'yearmonthdatehoursminutes', 'yearmonthdatehoursminutesseconds', 'yearweek', 'yearweekday', 'yearweekdayhours', 'yearweekdayhoursminutes', 'yearweekdayhoursminutesseconds', 'yeardayofyear', 'quartermonth', 'monthdate', 'monthdatehours', 'monthdatehoursminutes', 'monthdatehoursminutesseconds', 'weekday', 'weekdayhours', 'weekdayhoursminutes', 'weekdayhoursminutesseconds', 'dayhours', 'dayhoursminutes', 'dayhoursminutesseconds', 'hoursminutes', 'hoursminutesseconds', 'minutesseconds', 'secondsmilliseconds']
Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours``) for a temporal
field. or `a temporal field that gets casted as ordinal
`__.
@@ -20193,7 +20193,7 @@ class Y2(FieldChannelMixin, core.SecondaryFieldDef):
about escaping in the `field documentation
`__. 2) ``field`` is not required
if ``aggregate`` is ``count``.
- timeUnit : dict, :class:`TimeUnit`, :class:`MultiTimeUnit`, :class:`BinnedTimeUnit`, :class:`SingleTimeUnit`, :class:`TimeUnitParams`, :class:`UtcMultiTimeUnit`, :class:`UtcSingleTimeUnit`, :class:`LocalMultiTimeUnit`, :class:`LocalSingleTimeUnit`, Literal['binnedutcyear', 'binnedutcyearquarter', 'binnedutcyearquartermonth', 'binnedutcyearmonth', 'binnedutcyearmonthdate', 'binnedutcyearmonthdatehours', 'binnedutcyearmonthdatehoursminutes', 'binnedutcyearmonthdatehoursminutesseconds', 'binnedutcyearweek', 'binnedutcyearweekday', 'binnedutcyearweekdayhours', 'binnedutcyearweekdayhoursminutes', 'binnedutcyearweekdayhoursminutesseconds', 'binnedutcyeardayofyear', 'binnedyear', 'binnedyearquarter', 'binnedyearquartermonth', 'binnedyearmonth', 'binnedyearmonthdate', 'binnedyearmonthdatehours', 'binnedyearmonthdatehoursminutes', 'binnedyearmonthdatehoursminutesseconds', 'binnedyearweek', 'binnedyearweekday', 'binnedyearweekdayhours', 'binnedyearweekdayhoursminutes', 'binnedyearweekdayhoursminutesseconds', 'binnedyeardayofyear', 'utcyear', 'utcquarter', 'utcmonth', 'utcweek', 'utcday', 'utcdayofyear', 'utcdate', 'utchours', 'utcminutes', 'utcseconds', 'utcmilliseconds', 'year', 'quarter', 'month', 'week', 'day', 'dayofyear', 'date', 'hours', 'minutes', 'seconds', 'milliseconds', 'utcyearquarter', 'utcyearquartermonth', 'utcyearmonth', 'utcyearmonthdate', 'utcyearmonthdatehours', 'utcyearmonthdatehoursminutes', 'utcyearmonthdatehoursminutesseconds', 'utcyearweek', 'utcyearweekday', 'utcyearweekdayhours', 'utcyearweekdayhoursminutes', 'utcyearweekdayhoursminutesseconds', 'utcyeardayofyear', 'utcquartermonth', 'utcmonthdate', 'utcmonthdatehours', 'utcmonthdatehoursminutes', 'utcmonthdatehoursminutesseconds', 'utcweekday', 'utcweekdayhours', 'utcweekdayhoursminutes', 'utcweekdayhoursminutesseconds', 'utcdayhours', 'utcdayhoursminutes', 'utcdayhoursminutesseconds', 'utchoursminutes', 'utchoursminutesseconds', 'utcminutesseconds', 'utcsecondsmilliseconds', 'yearquarter', 'yearquartermonth', 'yearmonth', 'yearmonthdate', 'yearmonthdatehours', 'yearmonthdatehoursminutes', 'yearmonthdatehoursminutesseconds', 'yearweek', 'yearweekday', 'yearweekdayhours', 'yearweekdayhoursminutes', 'yearweekdayhoursminutesseconds', 'yeardayofyear', 'quartermonth', 'monthdate', 'monthdatehours', 'monthdatehoursminutes', 'monthdatehoursminutesseconds', 'weekday', 'weekdayhours', 'weekdayhoursminutes', 'weekdayhoursminutesseconds', 'dayhours', 'dayhoursminutes', 'dayhoursminutesseconds', 'hoursminutes', 'hoursminutesseconds', 'minutesseconds', 'secondsmilliseconds']
+ timeUnit : dict, :class:`TimeUnit`, :class:`MultiTimeUnit`, :class:`BinnedTimeUnit`, :class:`SingleTimeUnit`, :class:`TimeUnitParams`, :class:`UtcMultiTimeUnit`, :class:`UtcSingleTimeUnit`, :class:`LocalMultiTimeUnit`, :class:`LocalSingleTimeUnit`, Literal['binnedyear', 'binnedyearquarter', 'binnedyearquartermonth', 'binnedyearmonth', 'binnedyearmonthdate', 'binnedyearmonthdatehours', 'binnedyearmonthdatehoursminutes', 'binnedyearmonthdatehoursminutesseconds', 'binnedyearweek', 'binnedyearweekday', 'binnedyearweekdayhours', 'binnedyearweekdayhoursminutes', 'binnedyearweekdayhoursminutesseconds', 'binnedyeardayofyear', 'binnedutcyear', 'binnedutcyearquarter', 'binnedutcyearquartermonth', 'binnedutcyearmonth', 'binnedutcyearmonthdate', 'binnedutcyearmonthdatehours', 'binnedutcyearmonthdatehoursminutes', 'binnedutcyearmonthdatehoursminutesseconds', 'binnedutcyearweek', 'binnedutcyearweekday', 'binnedutcyearweekdayhours', 'binnedutcyearweekdayhoursminutes', 'binnedutcyearweekdayhoursminutesseconds', 'binnedutcyeardayofyear', 'utcyear', 'utcquarter', 'utcmonth', 'utcweek', 'utcday', 'utcdayofyear', 'utcdate', 'utchours', 'utcminutes', 'utcseconds', 'utcmilliseconds', 'year', 'quarter', 'month', 'week', 'day', 'dayofyear', 'date', 'hours', 'minutes', 'seconds', 'milliseconds', 'utcyearquarter', 'utcyearquartermonth', 'utcyearmonth', 'utcyearmonthdate', 'utcyearmonthdatehours', 'utcyearmonthdatehoursminutes', 'utcyearmonthdatehoursminutesseconds', 'utcyearweek', 'utcyearweekday', 'utcyearweekdayhours', 'utcyearweekdayhoursminutes', 'utcyearweekdayhoursminutesseconds', 'utcyeardayofyear', 'utcquartermonth', 'utcmonthdate', 'utcmonthdatehours', 'utcmonthdatehoursminutes', 'utcmonthdatehoursminutesseconds', 'utcweekday', 'utcweekdayhours', 'utcweekdayhoursminutes', 'utcweekdayhoursminutesseconds', 'utcdayhours', 'utcdayhoursminutes', 'utcdayhoursminutesseconds', 'utchoursminutes', 'utchoursminutesseconds', 'utcminutesseconds', 'utcsecondsmilliseconds', 'yearquarter', 'yearquartermonth', 'yearmonth', 'yearmonthdate', 'yearmonthdatehours', 'yearmonthdatehoursminutes', 'yearmonthdatehoursminutesseconds', 'yearweek', 'yearweekday', 'yearweekdayhours', 'yearweekdayhoursminutes', 'yearweekdayhoursminutesseconds', 'yeardayofyear', 'quartermonth', 'monthdate', 'monthdatehours', 'monthdatehoursminutes', 'monthdatehoursminutesseconds', 'weekday', 'weekdayhours', 'weekdayhoursminutes', 'weekdayhoursminutesseconds', 'dayhours', 'dayhoursminutes', 'dayhoursminutesseconds', 'hoursminutes', 'hoursminutesseconds', 'minutesseconds', 'secondsmilliseconds']
Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours``) for a temporal
field. or `a temporal field that gets casted as ordinal
`__.
@@ -20496,7 +20496,7 @@ class YError(FieldChannelMixin, core.SecondaryFieldDef):
about escaping in the `field documentation
`__. 2) ``field`` is not required
if ``aggregate`` is ``count``.
- timeUnit : dict, :class:`TimeUnit`, :class:`MultiTimeUnit`, :class:`BinnedTimeUnit`, :class:`SingleTimeUnit`, :class:`TimeUnitParams`, :class:`UtcMultiTimeUnit`, :class:`UtcSingleTimeUnit`, :class:`LocalMultiTimeUnit`, :class:`LocalSingleTimeUnit`, Literal['binnedutcyear', 'binnedutcyearquarter', 'binnedutcyearquartermonth', 'binnedutcyearmonth', 'binnedutcyearmonthdate', 'binnedutcyearmonthdatehours', 'binnedutcyearmonthdatehoursminutes', 'binnedutcyearmonthdatehoursminutesseconds', 'binnedutcyearweek', 'binnedutcyearweekday', 'binnedutcyearweekdayhours', 'binnedutcyearweekdayhoursminutes', 'binnedutcyearweekdayhoursminutesseconds', 'binnedutcyeardayofyear', 'binnedyear', 'binnedyearquarter', 'binnedyearquartermonth', 'binnedyearmonth', 'binnedyearmonthdate', 'binnedyearmonthdatehours', 'binnedyearmonthdatehoursminutes', 'binnedyearmonthdatehoursminutesseconds', 'binnedyearweek', 'binnedyearweekday', 'binnedyearweekdayhours', 'binnedyearweekdayhoursminutes', 'binnedyearweekdayhoursminutesseconds', 'binnedyeardayofyear', 'utcyear', 'utcquarter', 'utcmonth', 'utcweek', 'utcday', 'utcdayofyear', 'utcdate', 'utchours', 'utcminutes', 'utcseconds', 'utcmilliseconds', 'year', 'quarter', 'month', 'week', 'day', 'dayofyear', 'date', 'hours', 'minutes', 'seconds', 'milliseconds', 'utcyearquarter', 'utcyearquartermonth', 'utcyearmonth', 'utcyearmonthdate', 'utcyearmonthdatehours', 'utcyearmonthdatehoursminutes', 'utcyearmonthdatehoursminutesseconds', 'utcyearweek', 'utcyearweekday', 'utcyearweekdayhours', 'utcyearweekdayhoursminutes', 'utcyearweekdayhoursminutesseconds', 'utcyeardayofyear', 'utcquartermonth', 'utcmonthdate', 'utcmonthdatehours', 'utcmonthdatehoursminutes', 'utcmonthdatehoursminutesseconds', 'utcweekday', 'utcweekdayhours', 'utcweekdayhoursminutes', 'utcweekdayhoursminutesseconds', 'utcdayhours', 'utcdayhoursminutes', 'utcdayhoursminutesseconds', 'utchoursminutes', 'utchoursminutesseconds', 'utcminutesseconds', 'utcsecondsmilliseconds', 'yearquarter', 'yearquartermonth', 'yearmonth', 'yearmonthdate', 'yearmonthdatehours', 'yearmonthdatehoursminutes', 'yearmonthdatehoursminutesseconds', 'yearweek', 'yearweekday', 'yearweekdayhours', 'yearweekdayhoursminutes', 'yearweekdayhoursminutesseconds', 'yeardayofyear', 'quartermonth', 'monthdate', 'monthdatehours', 'monthdatehoursminutes', 'monthdatehoursminutesseconds', 'weekday', 'weekdayhours', 'weekdayhoursminutes', 'weekdayhoursminutesseconds', 'dayhours', 'dayhoursminutes', 'dayhoursminutesseconds', 'hoursminutes', 'hoursminutesseconds', 'minutesseconds', 'secondsmilliseconds']
+ timeUnit : dict, :class:`TimeUnit`, :class:`MultiTimeUnit`, :class:`BinnedTimeUnit`, :class:`SingleTimeUnit`, :class:`TimeUnitParams`, :class:`UtcMultiTimeUnit`, :class:`UtcSingleTimeUnit`, :class:`LocalMultiTimeUnit`, :class:`LocalSingleTimeUnit`, Literal['binnedyear', 'binnedyearquarter', 'binnedyearquartermonth', 'binnedyearmonth', 'binnedyearmonthdate', 'binnedyearmonthdatehours', 'binnedyearmonthdatehoursminutes', 'binnedyearmonthdatehoursminutesseconds', 'binnedyearweek', 'binnedyearweekday', 'binnedyearweekdayhours', 'binnedyearweekdayhoursminutes', 'binnedyearweekdayhoursminutesseconds', 'binnedyeardayofyear', 'binnedutcyear', 'binnedutcyearquarter', 'binnedutcyearquartermonth', 'binnedutcyearmonth', 'binnedutcyearmonthdate', 'binnedutcyearmonthdatehours', 'binnedutcyearmonthdatehoursminutes', 'binnedutcyearmonthdatehoursminutesseconds', 'binnedutcyearweek', 'binnedutcyearweekday', 'binnedutcyearweekdayhours', 'binnedutcyearweekdayhoursminutes', 'binnedutcyearweekdayhoursminutesseconds', 'binnedutcyeardayofyear', 'utcyear', 'utcquarter', 'utcmonth', 'utcweek', 'utcday', 'utcdayofyear', 'utcdate', 'utchours', 'utcminutes', 'utcseconds', 'utcmilliseconds', 'year', 'quarter', 'month', 'week', 'day', 'dayofyear', 'date', 'hours', 'minutes', 'seconds', 'milliseconds', 'utcyearquarter', 'utcyearquartermonth', 'utcyearmonth', 'utcyearmonthdate', 'utcyearmonthdatehours', 'utcyearmonthdatehoursminutes', 'utcyearmonthdatehoursminutesseconds', 'utcyearweek', 'utcyearweekday', 'utcyearweekdayhours', 'utcyearweekdayhoursminutes', 'utcyearweekdayhoursminutesseconds', 'utcyeardayofyear', 'utcquartermonth', 'utcmonthdate', 'utcmonthdatehours', 'utcmonthdatehoursminutes', 'utcmonthdatehoursminutesseconds', 'utcweekday', 'utcweekdayhours', 'utcweekdayhoursminutes', 'utcweekdayhoursminutesseconds', 'utcdayhours', 'utcdayhoursminutes', 'utcdayhoursminutesseconds', 'utchoursminutes', 'utchoursminutesseconds', 'utcminutesseconds', 'utcsecondsmilliseconds', 'yearquarter', 'yearquartermonth', 'yearmonth', 'yearmonthdate', 'yearmonthdatehours', 'yearmonthdatehoursminutes', 'yearmonthdatehoursminutesseconds', 'yearweek', 'yearweekday', 'yearweekdayhours', 'yearweekdayhoursminutes', 'yearweekdayhoursminutesseconds', 'yeardayofyear', 'quartermonth', 'monthdate', 'monthdatehours', 'monthdatehoursminutes', 'monthdatehoursminutesseconds', 'weekday', 'weekdayhours', 'weekdayhoursminutes', 'weekdayhoursminutesseconds', 'dayhours', 'dayhoursminutes', 'dayhoursminutesseconds', 'hoursminutes', 'hoursminutesseconds', 'minutesseconds', 'secondsmilliseconds']
Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours``) for a temporal
field. or `a temporal field that gets casted as ordinal
`__.
@@ -20679,7 +20679,7 @@ class YError2(FieldChannelMixin, core.SecondaryFieldDef):
about escaping in the `field documentation
`__. 2) ``field`` is not required
if ``aggregate`` is ``count``.
- timeUnit : dict, :class:`TimeUnit`, :class:`MultiTimeUnit`, :class:`BinnedTimeUnit`, :class:`SingleTimeUnit`, :class:`TimeUnitParams`, :class:`UtcMultiTimeUnit`, :class:`UtcSingleTimeUnit`, :class:`LocalMultiTimeUnit`, :class:`LocalSingleTimeUnit`, Literal['binnedutcyear', 'binnedutcyearquarter', 'binnedutcyearquartermonth', 'binnedutcyearmonth', 'binnedutcyearmonthdate', 'binnedutcyearmonthdatehours', 'binnedutcyearmonthdatehoursminutes', 'binnedutcyearmonthdatehoursminutesseconds', 'binnedutcyearweek', 'binnedutcyearweekday', 'binnedutcyearweekdayhours', 'binnedutcyearweekdayhoursminutes', 'binnedutcyearweekdayhoursminutesseconds', 'binnedutcyeardayofyear', 'binnedyear', 'binnedyearquarter', 'binnedyearquartermonth', 'binnedyearmonth', 'binnedyearmonthdate', 'binnedyearmonthdatehours', 'binnedyearmonthdatehoursminutes', 'binnedyearmonthdatehoursminutesseconds', 'binnedyearweek', 'binnedyearweekday', 'binnedyearweekdayhours', 'binnedyearweekdayhoursminutes', 'binnedyearweekdayhoursminutesseconds', 'binnedyeardayofyear', 'utcyear', 'utcquarter', 'utcmonth', 'utcweek', 'utcday', 'utcdayofyear', 'utcdate', 'utchours', 'utcminutes', 'utcseconds', 'utcmilliseconds', 'year', 'quarter', 'month', 'week', 'day', 'dayofyear', 'date', 'hours', 'minutes', 'seconds', 'milliseconds', 'utcyearquarter', 'utcyearquartermonth', 'utcyearmonth', 'utcyearmonthdate', 'utcyearmonthdatehours', 'utcyearmonthdatehoursminutes', 'utcyearmonthdatehoursminutesseconds', 'utcyearweek', 'utcyearweekday', 'utcyearweekdayhours', 'utcyearweekdayhoursminutes', 'utcyearweekdayhoursminutesseconds', 'utcyeardayofyear', 'utcquartermonth', 'utcmonthdate', 'utcmonthdatehours', 'utcmonthdatehoursminutes', 'utcmonthdatehoursminutesseconds', 'utcweekday', 'utcweekdayhours', 'utcweekdayhoursminutes', 'utcweekdayhoursminutesseconds', 'utcdayhours', 'utcdayhoursminutes', 'utcdayhoursminutesseconds', 'utchoursminutes', 'utchoursminutesseconds', 'utcminutesseconds', 'utcsecondsmilliseconds', 'yearquarter', 'yearquartermonth', 'yearmonth', 'yearmonthdate', 'yearmonthdatehours', 'yearmonthdatehoursminutes', 'yearmonthdatehoursminutesseconds', 'yearweek', 'yearweekday', 'yearweekdayhours', 'yearweekdayhoursminutes', 'yearweekdayhoursminutesseconds', 'yeardayofyear', 'quartermonth', 'monthdate', 'monthdatehours', 'monthdatehoursminutes', 'monthdatehoursminutesseconds', 'weekday', 'weekdayhours', 'weekdayhoursminutes', 'weekdayhoursminutesseconds', 'dayhours', 'dayhoursminutes', 'dayhoursminutesseconds', 'hoursminutes', 'hoursminutesseconds', 'minutesseconds', 'secondsmilliseconds']
+ timeUnit : dict, :class:`TimeUnit`, :class:`MultiTimeUnit`, :class:`BinnedTimeUnit`, :class:`SingleTimeUnit`, :class:`TimeUnitParams`, :class:`UtcMultiTimeUnit`, :class:`UtcSingleTimeUnit`, :class:`LocalMultiTimeUnit`, :class:`LocalSingleTimeUnit`, Literal['binnedyear', 'binnedyearquarter', 'binnedyearquartermonth', 'binnedyearmonth', 'binnedyearmonthdate', 'binnedyearmonthdatehours', 'binnedyearmonthdatehoursminutes', 'binnedyearmonthdatehoursminutesseconds', 'binnedyearweek', 'binnedyearweekday', 'binnedyearweekdayhours', 'binnedyearweekdayhoursminutes', 'binnedyearweekdayhoursminutesseconds', 'binnedyeardayofyear', 'binnedutcyear', 'binnedutcyearquarter', 'binnedutcyearquartermonth', 'binnedutcyearmonth', 'binnedutcyearmonthdate', 'binnedutcyearmonthdatehours', 'binnedutcyearmonthdatehoursminutes', 'binnedutcyearmonthdatehoursminutesseconds', 'binnedutcyearweek', 'binnedutcyearweekday', 'binnedutcyearweekdayhours', 'binnedutcyearweekdayhoursminutes', 'binnedutcyearweekdayhoursminutesseconds', 'binnedutcyeardayofyear', 'utcyear', 'utcquarter', 'utcmonth', 'utcweek', 'utcday', 'utcdayofyear', 'utcdate', 'utchours', 'utcminutes', 'utcseconds', 'utcmilliseconds', 'year', 'quarter', 'month', 'week', 'day', 'dayofyear', 'date', 'hours', 'minutes', 'seconds', 'milliseconds', 'utcyearquarter', 'utcyearquartermonth', 'utcyearmonth', 'utcyearmonthdate', 'utcyearmonthdatehours', 'utcyearmonthdatehoursminutes', 'utcyearmonthdatehoursminutesseconds', 'utcyearweek', 'utcyearweekday', 'utcyearweekdayhours', 'utcyearweekdayhoursminutes', 'utcyearweekdayhoursminutesseconds', 'utcyeardayofyear', 'utcquartermonth', 'utcmonthdate', 'utcmonthdatehours', 'utcmonthdatehoursminutes', 'utcmonthdatehoursminutesseconds', 'utcweekday', 'utcweekdayhours', 'utcweekdayhoursminutes', 'utcweekdayhoursminutesseconds', 'utcdayhours', 'utcdayhoursminutes', 'utcdayhoursminutesseconds', 'utchoursminutes', 'utchoursminutesseconds', 'utcminutesseconds', 'utcsecondsmilliseconds', 'yearquarter', 'yearquartermonth', 'yearmonth', 'yearmonthdate', 'yearmonthdatehours', 'yearmonthdatehoursminutes', 'yearmonthdatehoursminutesseconds', 'yearweek', 'yearweekday', 'yearweekdayhours', 'yearweekdayhoursminutes', 'yearweekdayhoursminutesseconds', 'yeardayofyear', 'quartermonth', 'monthdate', 'monthdatehours', 'monthdatehoursminutes', 'monthdatehoursminutesseconds', 'weekday', 'weekdayhours', 'weekdayhoursminutes', 'weekdayhoursminutesseconds', 'dayhours', 'dayhoursminutes', 'dayhoursminutesseconds', 'hoursminutes', 'hoursminutesseconds', 'minutesseconds', 'secondsmilliseconds']
Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours``) for a temporal
field. or `a temporal field that gets casted as ordinal
`__.
@@ -20910,7 +20910,7 @@ class YOffset(FieldChannelMixin, core.ScaleFieldDef):
**See also:** `sort `__
documentation.
- timeUnit : dict, :class:`TimeUnit`, :class:`MultiTimeUnit`, :class:`BinnedTimeUnit`, :class:`SingleTimeUnit`, :class:`TimeUnitParams`, :class:`UtcMultiTimeUnit`, :class:`UtcSingleTimeUnit`, :class:`LocalMultiTimeUnit`, :class:`LocalSingleTimeUnit`, Literal['binnedutcyear', 'binnedutcyearquarter', 'binnedutcyearquartermonth', 'binnedutcyearmonth', 'binnedutcyearmonthdate', 'binnedutcyearmonthdatehours', 'binnedutcyearmonthdatehoursminutes', 'binnedutcyearmonthdatehoursminutesseconds', 'binnedutcyearweek', 'binnedutcyearweekday', 'binnedutcyearweekdayhours', 'binnedutcyearweekdayhoursminutes', 'binnedutcyearweekdayhoursminutesseconds', 'binnedutcyeardayofyear', 'binnedyear', 'binnedyearquarter', 'binnedyearquartermonth', 'binnedyearmonth', 'binnedyearmonthdate', 'binnedyearmonthdatehours', 'binnedyearmonthdatehoursminutes', 'binnedyearmonthdatehoursminutesseconds', 'binnedyearweek', 'binnedyearweekday', 'binnedyearweekdayhours', 'binnedyearweekdayhoursminutes', 'binnedyearweekdayhoursminutesseconds', 'binnedyeardayofyear', 'utcyear', 'utcquarter', 'utcmonth', 'utcweek', 'utcday', 'utcdayofyear', 'utcdate', 'utchours', 'utcminutes', 'utcseconds', 'utcmilliseconds', 'year', 'quarter', 'month', 'week', 'day', 'dayofyear', 'date', 'hours', 'minutes', 'seconds', 'milliseconds', 'utcyearquarter', 'utcyearquartermonth', 'utcyearmonth', 'utcyearmonthdate', 'utcyearmonthdatehours', 'utcyearmonthdatehoursminutes', 'utcyearmonthdatehoursminutesseconds', 'utcyearweek', 'utcyearweekday', 'utcyearweekdayhours', 'utcyearweekdayhoursminutes', 'utcyearweekdayhoursminutesseconds', 'utcyeardayofyear', 'utcquartermonth', 'utcmonthdate', 'utcmonthdatehours', 'utcmonthdatehoursminutes', 'utcmonthdatehoursminutesseconds', 'utcweekday', 'utcweekdayhours', 'utcweekdayhoursminutes', 'utcweekdayhoursminutesseconds', 'utcdayhours', 'utcdayhoursminutes', 'utcdayhoursminutesseconds', 'utchoursminutes', 'utchoursminutesseconds', 'utcminutesseconds', 'utcsecondsmilliseconds', 'yearquarter', 'yearquartermonth', 'yearmonth', 'yearmonthdate', 'yearmonthdatehours', 'yearmonthdatehoursminutes', 'yearmonthdatehoursminutesseconds', 'yearweek', 'yearweekday', 'yearweekdayhours', 'yearweekdayhoursminutes', 'yearweekdayhoursminutesseconds', 'yeardayofyear', 'quartermonth', 'monthdate', 'monthdatehours', 'monthdatehoursminutes', 'monthdatehoursminutesseconds', 'weekday', 'weekdayhours', 'weekdayhoursminutes', 'weekdayhoursminutesseconds', 'dayhours', 'dayhoursminutes', 'dayhoursminutesseconds', 'hoursminutes', 'hoursminutesseconds', 'minutesseconds', 'secondsmilliseconds']
+ timeUnit : dict, :class:`TimeUnit`, :class:`MultiTimeUnit`, :class:`BinnedTimeUnit`, :class:`SingleTimeUnit`, :class:`TimeUnitParams`, :class:`UtcMultiTimeUnit`, :class:`UtcSingleTimeUnit`, :class:`LocalMultiTimeUnit`, :class:`LocalSingleTimeUnit`, Literal['binnedyear', 'binnedyearquarter', 'binnedyearquartermonth', 'binnedyearmonth', 'binnedyearmonthdate', 'binnedyearmonthdatehours', 'binnedyearmonthdatehoursminutes', 'binnedyearmonthdatehoursminutesseconds', 'binnedyearweek', 'binnedyearweekday', 'binnedyearweekdayhours', 'binnedyearweekdayhoursminutes', 'binnedyearweekdayhoursminutesseconds', 'binnedyeardayofyear', 'binnedutcyear', 'binnedutcyearquarter', 'binnedutcyearquartermonth', 'binnedutcyearmonth', 'binnedutcyearmonthdate', 'binnedutcyearmonthdatehours', 'binnedutcyearmonthdatehoursminutes', 'binnedutcyearmonthdatehoursminutesseconds', 'binnedutcyearweek', 'binnedutcyearweekday', 'binnedutcyearweekdayhours', 'binnedutcyearweekdayhoursminutes', 'binnedutcyearweekdayhoursminutesseconds', 'binnedutcyeardayofyear', 'utcyear', 'utcquarter', 'utcmonth', 'utcweek', 'utcday', 'utcdayofyear', 'utcdate', 'utchours', 'utcminutes', 'utcseconds', 'utcmilliseconds', 'year', 'quarter', 'month', 'week', 'day', 'dayofyear', 'date', 'hours', 'minutes', 'seconds', 'milliseconds', 'utcyearquarter', 'utcyearquartermonth', 'utcyearmonth', 'utcyearmonthdate', 'utcyearmonthdatehours', 'utcyearmonthdatehoursminutes', 'utcyearmonthdatehoursminutesseconds', 'utcyearweek', 'utcyearweekday', 'utcyearweekdayhours', 'utcyearweekdayhoursminutes', 'utcyearweekdayhoursminutesseconds', 'utcyeardayofyear', 'utcquartermonth', 'utcmonthdate', 'utcmonthdatehours', 'utcmonthdatehoursminutes', 'utcmonthdatehoursminutesseconds', 'utcweekday', 'utcweekdayhours', 'utcweekdayhoursminutes', 'utcweekdayhoursminutesseconds', 'utcdayhours', 'utcdayhoursminutes', 'utcdayhoursminutesseconds', 'utchoursminutes', 'utchoursminutesseconds', 'utcminutesseconds', 'utcsecondsmilliseconds', 'yearquarter', 'yearquartermonth', 'yearmonth', 'yearmonthdate', 'yearmonthdatehours', 'yearmonthdatehoursminutes', 'yearmonthdatehoursminutesseconds', 'yearweek', 'yearweekday', 'yearweekdayhours', 'yearweekdayhoursminutes', 'yearweekdayhoursminutesseconds', 'yeardayofyear', 'quartermonth', 'monthdate', 'monthdatehours', 'monthdatehoursminutes', 'monthdatehoursminutesseconds', 'weekday', 'weekdayhours', 'weekdayhoursminutes', 'weekdayhoursminutesseconds', 'dayhours', 'dayhoursminutes', 'dayhoursminutesseconds', 'hoursminutes', 'hoursminutesseconds', 'minutesseconds', 'secondsmilliseconds']
Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours``) for a temporal
field. or `a temporal field that gets casted as ordinal
`__.
diff --git a/altair/vegalite/v5/schema/core.py b/altair/vegalite/v5/schema/core.py
index a2481bafc..278aac0ae 100644
--- a/altair/vegalite/v5/schema/core.py
+++ b/altair/vegalite/v5/schema/core.py
@@ -3486,8 +3486,8 @@ class BinnedTimeUnit(VegaLiteSchema):
_schema = {"$ref": "#/definitions/BinnedTimeUnit"}
- def __init__(self, *args, **kwds):
- super().__init__(*args, **kwds)
+ def __init__(self, *args):
+ super().__init__(*args)
class Blend(VegaLiteSchema):
@@ -4235,7 +4235,7 @@ class ConditionalParameterStringFieldDef(ConditionalStringFieldDef):
* ``"time"`` for temporal fields and ordinal and nominal fields with ``timeUnit``.
* ``"number"`` for quantitative fields as well as ordinal and nominal fields without
``timeUnit``.
- timeUnit : dict, :class:`TimeUnit`, :class:`MultiTimeUnit`, :class:`BinnedTimeUnit`, :class:`SingleTimeUnit`, :class:`TimeUnitParams`, :class:`UtcMultiTimeUnit`, :class:`UtcSingleTimeUnit`, :class:`LocalMultiTimeUnit`, :class:`LocalSingleTimeUnit`, Literal['binnedutcyear', 'binnedutcyearquarter', 'binnedutcyearquartermonth', 'binnedutcyearmonth', 'binnedutcyearmonthdate', 'binnedutcyearmonthdatehours', 'binnedutcyearmonthdatehoursminutes', 'binnedutcyearmonthdatehoursminutesseconds', 'binnedutcyearweek', 'binnedutcyearweekday', 'binnedutcyearweekdayhours', 'binnedutcyearweekdayhoursminutes', 'binnedutcyearweekdayhoursminutesseconds', 'binnedutcyeardayofyear', 'binnedyear', 'binnedyearquarter', 'binnedyearquartermonth', 'binnedyearmonth', 'binnedyearmonthdate', 'binnedyearmonthdatehours', 'binnedyearmonthdatehoursminutes', 'binnedyearmonthdatehoursminutesseconds', 'binnedyearweek', 'binnedyearweekday', 'binnedyearweekdayhours', 'binnedyearweekdayhoursminutes', 'binnedyearweekdayhoursminutesseconds', 'binnedyeardayofyear', 'utcyear', 'utcquarter', 'utcmonth', 'utcweek', 'utcday', 'utcdayofyear', 'utcdate', 'utchours', 'utcminutes', 'utcseconds', 'utcmilliseconds', 'year', 'quarter', 'month', 'week', 'day', 'dayofyear', 'date', 'hours', 'minutes', 'seconds', 'milliseconds', 'utcyearquarter', 'utcyearquartermonth', 'utcyearmonth', 'utcyearmonthdate', 'utcyearmonthdatehours', 'utcyearmonthdatehoursminutes', 'utcyearmonthdatehoursminutesseconds', 'utcyearweek', 'utcyearweekday', 'utcyearweekdayhours', 'utcyearweekdayhoursminutes', 'utcyearweekdayhoursminutesseconds', 'utcyeardayofyear', 'utcquartermonth', 'utcmonthdate', 'utcmonthdatehours', 'utcmonthdatehoursminutes', 'utcmonthdatehoursminutesseconds', 'utcweekday', 'utcweekdayhours', 'utcweekdayhoursminutes', 'utcweekdayhoursminutesseconds', 'utcdayhours', 'utcdayhoursminutes', 'utcdayhoursminutesseconds', 'utchoursminutes', 'utchoursminutesseconds', 'utcminutesseconds', 'utcsecondsmilliseconds', 'yearquarter', 'yearquartermonth', 'yearmonth', 'yearmonthdate', 'yearmonthdatehours', 'yearmonthdatehoursminutes', 'yearmonthdatehoursminutesseconds', 'yearweek', 'yearweekday', 'yearweekdayhours', 'yearweekdayhoursminutes', 'yearweekdayhoursminutesseconds', 'yeardayofyear', 'quartermonth', 'monthdate', 'monthdatehours', 'monthdatehoursminutes', 'monthdatehoursminutesseconds', 'weekday', 'weekdayhours', 'weekdayhoursminutes', 'weekdayhoursminutesseconds', 'dayhours', 'dayhoursminutes', 'dayhoursminutesseconds', 'hoursminutes', 'hoursminutesseconds', 'minutesseconds', 'secondsmilliseconds']
+ timeUnit : dict, :class:`TimeUnit`, :class:`MultiTimeUnit`, :class:`BinnedTimeUnit`, :class:`SingleTimeUnit`, :class:`TimeUnitParams`, :class:`UtcMultiTimeUnit`, :class:`UtcSingleTimeUnit`, :class:`LocalMultiTimeUnit`, :class:`LocalSingleTimeUnit`, Literal['binnedyear', 'binnedyearquarter', 'binnedyearquartermonth', 'binnedyearmonth', 'binnedyearmonthdate', 'binnedyearmonthdatehours', 'binnedyearmonthdatehoursminutes', 'binnedyearmonthdatehoursminutesseconds', 'binnedyearweek', 'binnedyearweekday', 'binnedyearweekdayhours', 'binnedyearweekdayhoursminutes', 'binnedyearweekdayhoursminutesseconds', 'binnedyeardayofyear', 'binnedutcyear', 'binnedutcyearquarter', 'binnedutcyearquartermonth', 'binnedutcyearmonth', 'binnedutcyearmonthdate', 'binnedutcyearmonthdatehours', 'binnedutcyearmonthdatehoursminutes', 'binnedutcyearmonthdatehoursminutesseconds', 'binnedutcyearweek', 'binnedutcyearweekday', 'binnedutcyearweekdayhours', 'binnedutcyearweekdayhoursminutes', 'binnedutcyearweekdayhoursminutesseconds', 'binnedutcyeardayofyear', 'utcyear', 'utcquarter', 'utcmonth', 'utcweek', 'utcday', 'utcdayofyear', 'utcdate', 'utchours', 'utcminutes', 'utcseconds', 'utcmilliseconds', 'year', 'quarter', 'month', 'week', 'day', 'dayofyear', 'date', 'hours', 'minutes', 'seconds', 'milliseconds', 'utcyearquarter', 'utcyearquartermonth', 'utcyearmonth', 'utcyearmonthdate', 'utcyearmonthdatehours', 'utcyearmonthdatehoursminutes', 'utcyearmonthdatehoursminutesseconds', 'utcyearweek', 'utcyearweekday', 'utcyearweekdayhours', 'utcyearweekdayhoursminutes', 'utcyearweekdayhoursminutesseconds', 'utcyeardayofyear', 'utcquartermonth', 'utcmonthdate', 'utcmonthdatehours', 'utcmonthdatehoursminutes', 'utcmonthdatehoursminutesseconds', 'utcweekday', 'utcweekdayhours', 'utcweekdayhoursminutes', 'utcweekdayhoursminutesseconds', 'utcdayhours', 'utcdayhoursminutes', 'utcdayhoursminutesseconds', 'utchoursminutes', 'utchoursminutesseconds', 'utcminutesseconds', 'utcsecondsmilliseconds', 'yearquarter', 'yearquartermonth', 'yearmonth', 'yearmonthdate', 'yearmonthdatehours', 'yearmonthdatehoursminutes', 'yearmonthdatehoursminutesseconds', 'yearweek', 'yearweekday', 'yearweekdayhours', 'yearweekdayhoursminutes', 'yearweekdayhoursminutesseconds', 'yeardayofyear', 'quartermonth', 'monthdate', 'monthdatehours', 'monthdatehoursminutes', 'monthdatehoursminutesseconds', 'weekday', 'weekdayhours', 'weekdayhoursminutes', 'weekdayhoursminutesseconds', 'dayhours', 'dayhoursminutes', 'dayhoursminutesseconds', 'hoursminutes', 'hoursminutesseconds', 'minutesseconds', 'secondsmilliseconds']
Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours``) for a temporal
field. or `a temporal field that gets casted as ordinal
`__.
@@ -4455,7 +4455,7 @@ class ConditionalPredicateStringFieldDef(ConditionalStringFieldDef):
* ``"time"`` for temporal fields and ordinal and nominal fields with ``timeUnit``.
* ``"number"`` for quantitative fields as well as ordinal and nominal fields without
``timeUnit``.
- timeUnit : dict, :class:`TimeUnit`, :class:`MultiTimeUnit`, :class:`BinnedTimeUnit`, :class:`SingleTimeUnit`, :class:`TimeUnitParams`, :class:`UtcMultiTimeUnit`, :class:`UtcSingleTimeUnit`, :class:`LocalMultiTimeUnit`, :class:`LocalSingleTimeUnit`, Literal['binnedutcyear', 'binnedutcyearquarter', 'binnedutcyearquartermonth', 'binnedutcyearmonth', 'binnedutcyearmonthdate', 'binnedutcyearmonthdatehours', 'binnedutcyearmonthdatehoursminutes', 'binnedutcyearmonthdatehoursminutesseconds', 'binnedutcyearweek', 'binnedutcyearweekday', 'binnedutcyearweekdayhours', 'binnedutcyearweekdayhoursminutes', 'binnedutcyearweekdayhoursminutesseconds', 'binnedutcyeardayofyear', 'binnedyear', 'binnedyearquarter', 'binnedyearquartermonth', 'binnedyearmonth', 'binnedyearmonthdate', 'binnedyearmonthdatehours', 'binnedyearmonthdatehoursminutes', 'binnedyearmonthdatehoursminutesseconds', 'binnedyearweek', 'binnedyearweekday', 'binnedyearweekdayhours', 'binnedyearweekdayhoursminutes', 'binnedyearweekdayhoursminutesseconds', 'binnedyeardayofyear', 'utcyear', 'utcquarter', 'utcmonth', 'utcweek', 'utcday', 'utcdayofyear', 'utcdate', 'utchours', 'utcminutes', 'utcseconds', 'utcmilliseconds', 'year', 'quarter', 'month', 'week', 'day', 'dayofyear', 'date', 'hours', 'minutes', 'seconds', 'milliseconds', 'utcyearquarter', 'utcyearquartermonth', 'utcyearmonth', 'utcyearmonthdate', 'utcyearmonthdatehours', 'utcyearmonthdatehoursminutes', 'utcyearmonthdatehoursminutesseconds', 'utcyearweek', 'utcyearweekday', 'utcyearweekdayhours', 'utcyearweekdayhoursminutes', 'utcyearweekdayhoursminutesseconds', 'utcyeardayofyear', 'utcquartermonth', 'utcmonthdate', 'utcmonthdatehours', 'utcmonthdatehoursminutes', 'utcmonthdatehoursminutesseconds', 'utcweekday', 'utcweekdayhours', 'utcweekdayhoursminutes', 'utcweekdayhoursminutesseconds', 'utcdayhours', 'utcdayhoursminutes', 'utcdayhoursminutesseconds', 'utchoursminutes', 'utchoursminutesseconds', 'utcminutesseconds', 'utcsecondsmilliseconds', 'yearquarter', 'yearquartermonth', 'yearmonth', 'yearmonthdate', 'yearmonthdatehours', 'yearmonthdatehoursminutes', 'yearmonthdatehoursminutesseconds', 'yearweek', 'yearweekday', 'yearweekdayhours', 'yearweekdayhoursminutes', 'yearweekdayhoursminutesseconds', 'yeardayofyear', 'quartermonth', 'monthdate', 'monthdatehours', 'monthdatehoursminutes', 'monthdatehoursminutesseconds', 'weekday', 'weekdayhours', 'weekdayhoursminutes', 'weekdayhoursminutesseconds', 'dayhours', 'dayhoursminutes', 'dayhoursminutesseconds', 'hoursminutes', 'hoursminutesseconds', 'minutesseconds', 'secondsmilliseconds']
+ timeUnit : dict, :class:`TimeUnit`, :class:`MultiTimeUnit`, :class:`BinnedTimeUnit`, :class:`SingleTimeUnit`, :class:`TimeUnitParams`, :class:`UtcMultiTimeUnit`, :class:`UtcSingleTimeUnit`, :class:`LocalMultiTimeUnit`, :class:`LocalSingleTimeUnit`, Literal['binnedyear', 'binnedyearquarter', 'binnedyearquartermonth', 'binnedyearmonth', 'binnedyearmonthdate', 'binnedyearmonthdatehours', 'binnedyearmonthdatehoursminutes', 'binnedyearmonthdatehoursminutesseconds', 'binnedyearweek', 'binnedyearweekday', 'binnedyearweekdayhours', 'binnedyearweekdayhoursminutes', 'binnedyearweekdayhoursminutesseconds', 'binnedyeardayofyear', 'binnedutcyear', 'binnedutcyearquarter', 'binnedutcyearquartermonth', 'binnedutcyearmonth', 'binnedutcyearmonthdate', 'binnedutcyearmonthdatehours', 'binnedutcyearmonthdatehoursminutes', 'binnedutcyearmonthdatehoursminutesseconds', 'binnedutcyearweek', 'binnedutcyearweekday', 'binnedutcyearweekdayhours', 'binnedutcyearweekdayhoursminutes', 'binnedutcyearweekdayhoursminutesseconds', 'binnedutcyeardayofyear', 'utcyear', 'utcquarter', 'utcmonth', 'utcweek', 'utcday', 'utcdayofyear', 'utcdate', 'utchours', 'utcminutes', 'utcseconds', 'utcmilliseconds', 'year', 'quarter', 'month', 'week', 'day', 'dayofyear', 'date', 'hours', 'minutes', 'seconds', 'milliseconds', 'utcyearquarter', 'utcyearquartermonth', 'utcyearmonth', 'utcyearmonthdate', 'utcyearmonthdatehours', 'utcyearmonthdatehoursminutes', 'utcyearmonthdatehoursminutesseconds', 'utcyearweek', 'utcyearweekday', 'utcyearweekdayhours', 'utcyearweekdayhoursminutes', 'utcyearweekdayhoursminutesseconds', 'utcyeardayofyear', 'utcquartermonth', 'utcmonthdate', 'utcmonthdatehours', 'utcmonthdatehoursminutes', 'utcmonthdatehoursminutesseconds', 'utcweekday', 'utcweekdayhours', 'utcweekdayhoursminutes', 'utcweekdayhoursminutesseconds', 'utcdayhours', 'utcdayhoursminutes', 'utcdayhoursminutesseconds', 'utchoursminutes', 'utchoursminutesseconds', 'utcminutesseconds', 'utcsecondsmilliseconds', 'yearquarter', 'yearquartermonth', 'yearmonth', 'yearmonthdate', 'yearmonthdatehours', 'yearmonthdatehoursminutes', 'yearmonthdatehoursminutesseconds', 'yearweek', 'yearweekday', 'yearweekdayhours', 'yearweekdayhoursminutes', 'yearweekdayhoursminutesseconds', 'yeardayofyear', 'quartermonth', 'monthdate', 'monthdatehours', 'monthdatehoursminutes', 'monthdatehoursminutesseconds', 'weekday', 'weekdayhours', 'weekdayhoursminutes', 'weekdayhoursminutesseconds', 'dayhours', 'dayhoursminutes', 'dayhoursminutesseconds', 'hoursminutes', 'hoursminutesseconds', 'minutesseconds', 'secondsmilliseconds']
Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours``) for a temporal
field. or `a temporal field that gets casted as ordinal
`__.
@@ -6484,7 +6484,7 @@ class FacetEncodingFieldDef(VegaLiteSchema):
**Default value**: Depends on ``"spacing"`` property of `the view composition
configuration `__
(``20`` by default)
- timeUnit : dict, :class:`TimeUnit`, :class:`MultiTimeUnit`, :class:`BinnedTimeUnit`, :class:`SingleTimeUnit`, :class:`TimeUnitParams`, :class:`UtcMultiTimeUnit`, :class:`UtcSingleTimeUnit`, :class:`LocalMultiTimeUnit`, :class:`LocalSingleTimeUnit`, Literal['binnedutcyear', 'binnedutcyearquarter', 'binnedutcyearquartermonth', 'binnedutcyearmonth', 'binnedutcyearmonthdate', 'binnedutcyearmonthdatehours', 'binnedutcyearmonthdatehoursminutes', 'binnedutcyearmonthdatehoursminutesseconds', 'binnedutcyearweek', 'binnedutcyearweekday', 'binnedutcyearweekdayhours', 'binnedutcyearweekdayhoursminutes', 'binnedutcyearweekdayhoursminutesseconds', 'binnedutcyeardayofyear', 'binnedyear', 'binnedyearquarter', 'binnedyearquartermonth', 'binnedyearmonth', 'binnedyearmonthdate', 'binnedyearmonthdatehours', 'binnedyearmonthdatehoursminutes', 'binnedyearmonthdatehoursminutesseconds', 'binnedyearweek', 'binnedyearweekday', 'binnedyearweekdayhours', 'binnedyearweekdayhoursminutes', 'binnedyearweekdayhoursminutesseconds', 'binnedyeardayofyear', 'utcyear', 'utcquarter', 'utcmonth', 'utcweek', 'utcday', 'utcdayofyear', 'utcdate', 'utchours', 'utcminutes', 'utcseconds', 'utcmilliseconds', 'year', 'quarter', 'month', 'week', 'day', 'dayofyear', 'date', 'hours', 'minutes', 'seconds', 'milliseconds', 'utcyearquarter', 'utcyearquartermonth', 'utcyearmonth', 'utcyearmonthdate', 'utcyearmonthdatehours', 'utcyearmonthdatehoursminutes', 'utcyearmonthdatehoursminutesseconds', 'utcyearweek', 'utcyearweekday', 'utcyearweekdayhours', 'utcyearweekdayhoursminutes', 'utcyearweekdayhoursminutesseconds', 'utcyeardayofyear', 'utcquartermonth', 'utcmonthdate', 'utcmonthdatehours', 'utcmonthdatehoursminutes', 'utcmonthdatehoursminutesseconds', 'utcweekday', 'utcweekdayhours', 'utcweekdayhoursminutes', 'utcweekdayhoursminutesseconds', 'utcdayhours', 'utcdayhoursminutes', 'utcdayhoursminutesseconds', 'utchoursminutes', 'utchoursminutesseconds', 'utcminutesseconds', 'utcsecondsmilliseconds', 'yearquarter', 'yearquartermonth', 'yearmonth', 'yearmonthdate', 'yearmonthdatehours', 'yearmonthdatehoursminutes', 'yearmonthdatehoursminutesseconds', 'yearweek', 'yearweekday', 'yearweekdayhours', 'yearweekdayhoursminutes', 'yearweekdayhoursminutesseconds', 'yeardayofyear', 'quartermonth', 'monthdate', 'monthdatehours', 'monthdatehoursminutes', 'monthdatehoursminutesseconds', 'weekday', 'weekdayhours', 'weekdayhoursminutes', 'weekdayhoursminutesseconds', 'dayhours', 'dayhoursminutes', 'dayhoursminutesseconds', 'hoursminutes', 'hoursminutesseconds', 'minutesseconds', 'secondsmilliseconds']
+ timeUnit : dict, :class:`TimeUnit`, :class:`MultiTimeUnit`, :class:`BinnedTimeUnit`, :class:`SingleTimeUnit`, :class:`TimeUnitParams`, :class:`UtcMultiTimeUnit`, :class:`UtcSingleTimeUnit`, :class:`LocalMultiTimeUnit`, :class:`LocalSingleTimeUnit`, Literal['binnedyear', 'binnedyearquarter', 'binnedyearquartermonth', 'binnedyearmonth', 'binnedyearmonthdate', 'binnedyearmonthdatehours', 'binnedyearmonthdatehoursminutes', 'binnedyearmonthdatehoursminutesseconds', 'binnedyearweek', 'binnedyearweekday', 'binnedyearweekdayhours', 'binnedyearweekdayhoursminutes', 'binnedyearweekdayhoursminutesseconds', 'binnedyeardayofyear', 'binnedutcyear', 'binnedutcyearquarter', 'binnedutcyearquartermonth', 'binnedutcyearmonth', 'binnedutcyearmonthdate', 'binnedutcyearmonthdatehours', 'binnedutcyearmonthdatehoursminutes', 'binnedutcyearmonthdatehoursminutesseconds', 'binnedutcyearweek', 'binnedutcyearweekday', 'binnedutcyearweekdayhours', 'binnedutcyearweekdayhoursminutes', 'binnedutcyearweekdayhoursminutesseconds', 'binnedutcyeardayofyear', 'utcyear', 'utcquarter', 'utcmonth', 'utcweek', 'utcday', 'utcdayofyear', 'utcdate', 'utchours', 'utcminutes', 'utcseconds', 'utcmilliseconds', 'year', 'quarter', 'month', 'week', 'day', 'dayofyear', 'date', 'hours', 'minutes', 'seconds', 'milliseconds', 'utcyearquarter', 'utcyearquartermonth', 'utcyearmonth', 'utcyearmonthdate', 'utcyearmonthdatehours', 'utcyearmonthdatehoursminutes', 'utcyearmonthdatehoursminutesseconds', 'utcyearweek', 'utcyearweekday', 'utcyearweekdayhours', 'utcyearweekdayhoursminutes', 'utcyearweekdayhoursminutesseconds', 'utcyeardayofyear', 'utcquartermonth', 'utcmonthdate', 'utcmonthdatehours', 'utcmonthdatehoursminutes', 'utcmonthdatehoursminutesseconds', 'utcweekday', 'utcweekdayhours', 'utcweekdayhoursminutes', 'utcweekdayhoursminutesseconds', 'utcdayhours', 'utcdayhoursminutes', 'utcdayhoursminutesseconds', 'utchoursminutes', 'utchoursminutesseconds', 'utcminutesseconds', 'utcsecondsmilliseconds', 'yearquarter', 'yearquartermonth', 'yearmonth', 'yearmonthdate', 'yearmonthdatehours', 'yearmonthdatehoursminutes', 'yearmonthdatehoursminutesseconds', 'yearweek', 'yearweekday', 'yearweekdayhours', 'yearweekdayhoursminutes', 'yearweekdayhoursminutesseconds', 'yeardayofyear', 'quartermonth', 'monthdate', 'monthdatehours', 'monthdatehoursminutes', 'monthdatehoursminutesseconds', 'weekday', 'weekdayhours', 'weekdayhoursminutes', 'weekdayhoursminutesseconds', 'dayhours', 'dayhoursminutes', 'dayhoursminutesseconds', 'hoursminutes', 'hoursminutesseconds', 'minutesseconds', 'secondsmilliseconds']
Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours``) for a temporal
field. or `a temporal field that gets casted as ordinal
`__.
@@ -6715,7 +6715,7 @@ class FacetFieldDef(VegaLiteSchema):
**Default value:** ``"ascending"``
**Note:** ``null`` is not supported for ``row`` and ``column``.
- timeUnit : dict, :class:`TimeUnit`, :class:`MultiTimeUnit`, :class:`BinnedTimeUnit`, :class:`SingleTimeUnit`, :class:`TimeUnitParams`, :class:`UtcMultiTimeUnit`, :class:`UtcSingleTimeUnit`, :class:`LocalMultiTimeUnit`, :class:`LocalSingleTimeUnit`, Literal['binnedutcyear', 'binnedutcyearquarter', 'binnedutcyearquartermonth', 'binnedutcyearmonth', 'binnedutcyearmonthdate', 'binnedutcyearmonthdatehours', 'binnedutcyearmonthdatehoursminutes', 'binnedutcyearmonthdatehoursminutesseconds', 'binnedutcyearweek', 'binnedutcyearweekday', 'binnedutcyearweekdayhours', 'binnedutcyearweekdayhoursminutes', 'binnedutcyearweekdayhoursminutesseconds', 'binnedutcyeardayofyear', 'binnedyear', 'binnedyearquarter', 'binnedyearquartermonth', 'binnedyearmonth', 'binnedyearmonthdate', 'binnedyearmonthdatehours', 'binnedyearmonthdatehoursminutes', 'binnedyearmonthdatehoursminutesseconds', 'binnedyearweek', 'binnedyearweekday', 'binnedyearweekdayhours', 'binnedyearweekdayhoursminutes', 'binnedyearweekdayhoursminutesseconds', 'binnedyeardayofyear', 'utcyear', 'utcquarter', 'utcmonth', 'utcweek', 'utcday', 'utcdayofyear', 'utcdate', 'utchours', 'utcminutes', 'utcseconds', 'utcmilliseconds', 'year', 'quarter', 'month', 'week', 'day', 'dayofyear', 'date', 'hours', 'minutes', 'seconds', 'milliseconds', 'utcyearquarter', 'utcyearquartermonth', 'utcyearmonth', 'utcyearmonthdate', 'utcyearmonthdatehours', 'utcyearmonthdatehoursminutes', 'utcyearmonthdatehoursminutesseconds', 'utcyearweek', 'utcyearweekday', 'utcyearweekdayhours', 'utcyearweekdayhoursminutes', 'utcyearweekdayhoursminutesseconds', 'utcyeardayofyear', 'utcquartermonth', 'utcmonthdate', 'utcmonthdatehours', 'utcmonthdatehoursminutes', 'utcmonthdatehoursminutesseconds', 'utcweekday', 'utcweekdayhours', 'utcweekdayhoursminutes', 'utcweekdayhoursminutesseconds', 'utcdayhours', 'utcdayhoursminutes', 'utcdayhoursminutesseconds', 'utchoursminutes', 'utchoursminutesseconds', 'utcminutesseconds', 'utcsecondsmilliseconds', 'yearquarter', 'yearquartermonth', 'yearmonth', 'yearmonthdate', 'yearmonthdatehours', 'yearmonthdatehoursminutes', 'yearmonthdatehoursminutesseconds', 'yearweek', 'yearweekday', 'yearweekdayhours', 'yearweekdayhoursminutes', 'yearweekdayhoursminutesseconds', 'yeardayofyear', 'quartermonth', 'monthdate', 'monthdatehours', 'monthdatehoursminutes', 'monthdatehoursminutesseconds', 'weekday', 'weekdayhours', 'weekdayhoursminutes', 'weekdayhoursminutesseconds', 'dayhours', 'dayhoursminutes', 'dayhoursminutesseconds', 'hoursminutes', 'hoursminutesseconds', 'minutesseconds', 'secondsmilliseconds']
+ timeUnit : dict, :class:`TimeUnit`, :class:`MultiTimeUnit`, :class:`BinnedTimeUnit`, :class:`SingleTimeUnit`, :class:`TimeUnitParams`, :class:`UtcMultiTimeUnit`, :class:`UtcSingleTimeUnit`, :class:`LocalMultiTimeUnit`, :class:`LocalSingleTimeUnit`, Literal['binnedyear', 'binnedyearquarter', 'binnedyearquartermonth', 'binnedyearmonth', 'binnedyearmonthdate', 'binnedyearmonthdatehours', 'binnedyearmonthdatehoursminutes', 'binnedyearmonthdatehoursminutesseconds', 'binnedyearweek', 'binnedyearweekday', 'binnedyearweekdayhours', 'binnedyearweekdayhoursminutes', 'binnedyearweekdayhoursminutesseconds', 'binnedyeardayofyear', 'binnedutcyear', 'binnedutcyearquarter', 'binnedutcyearquartermonth', 'binnedutcyearmonth', 'binnedutcyearmonthdate', 'binnedutcyearmonthdatehours', 'binnedutcyearmonthdatehoursminutes', 'binnedutcyearmonthdatehoursminutesseconds', 'binnedutcyearweek', 'binnedutcyearweekday', 'binnedutcyearweekdayhours', 'binnedutcyearweekdayhoursminutes', 'binnedutcyearweekdayhoursminutesseconds', 'binnedutcyeardayofyear', 'utcyear', 'utcquarter', 'utcmonth', 'utcweek', 'utcday', 'utcdayofyear', 'utcdate', 'utchours', 'utcminutes', 'utcseconds', 'utcmilliseconds', 'year', 'quarter', 'month', 'week', 'day', 'dayofyear', 'date', 'hours', 'minutes', 'seconds', 'milliseconds', 'utcyearquarter', 'utcyearquartermonth', 'utcyearmonth', 'utcyearmonthdate', 'utcyearmonthdatehours', 'utcyearmonthdatehoursminutes', 'utcyearmonthdatehoursminutesseconds', 'utcyearweek', 'utcyearweekday', 'utcyearweekdayhours', 'utcyearweekdayhoursminutes', 'utcyearweekdayhoursminutesseconds', 'utcyeardayofyear', 'utcquartermonth', 'utcmonthdate', 'utcmonthdatehours', 'utcmonthdatehoursminutes', 'utcmonthdatehoursminutesseconds', 'utcweekday', 'utcweekdayhours', 'utcweekdayhoursminutes', 'utcweekdayhoursminutesseconds', 'utcdayhours', 'utcdayhoursminutes', 'utcdayhoursminutesseconds', 'utchoursminutes', 'utchoursminutesseconds', 'utcminutesseconds', 'utcsecondsmilliseconds', 'yearquarter', 'yearquartermonth', 'yearmonth', 'yearmonthdate', 'yearmonthdatehours', 'yearmonthdatehoursminutes', 'yearmonthdatehoursminutesseconds', 'yearweek', 'yearweekday', 'yearweekdayhours', 'yearweekdayhoursminutes', 'yearweekdayhoursminutesseconds', 'yeardayofyear', 'quartermonth', 'monthdate', 'monthdatehours', 'monthdatehoursminutes', 'monthdatehoursminutesseconds', 'weekday', 'weekdayhours', 'weekdayhoursminutes', 'weekdayhoursminutesseconds', 'dayhours', 'dayhoursminutes', 'dayhoursminutesseconds', 'hoursminutes', 'hoursminutesseconds', 'minutesseconds', 'secondsmilliseconds']
Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours``) for a temporal
field. or `a temporal field that gets casted as ordinal
`__.
@@ -7352,7 +7352,7 @@ class FieldDefWithoutScale(VegaLiteSchema):
about escaping in the `field documentation
`__. 2) ``field`` is not required
if ``aggregate`` is ``count``.
- timeUnit : dict, :class:`TimeUnit`, :class:`MultiTimeUnit`, :class:`BinnedTimeUnit`, :class:`SingleTimeUnit`, :class:`TimeUnitParams`, :class:`UtcMultiTimeUnit`, :class:`UtcSingleTimeUnit`, :class:`LocalMultiTimeUnit`, :class:`LocalSingleTimeUnit`, Literal['binnedutcyear', 'binnedutcyearquarter', 'binnedutcyearquartermonth', 'binnedutcyearmonth', 'binnedutcyearmonthdate', 'binnedutcyearmonthdatehours', 'binnedutcyearmonthdatehoursminutes', 'binnedutcyearmonthdatehoursminutesseconds', 'binnedutcyearweek', 'binnedutcyearweekday', 'binnedutcyearweekdayhours', 'binnedutcyearweekdayhoursminutes', 'binnedutcyearweekdayhoursminutesseconds', 'binnedutcyeardayofyear', 'binnedyear', 'binnedyearquarter', 'binnedyearquartermonth', 'binnedyearmonth', 'binnedyearmonthdate', 'binnedyearmonthdatehours', 'binnedyearmonthdatehoursminutes', 'binnedyearmonthdatehoursminutesseconds', 'binnedyearweek', 'binnedyearweekday', 'binnedyearweekdayhours', 'binnedyearweekdayhoursminutes', 'binnedyearweekdayhoursminutesseconds', 'binnedyeardayofyear', 'utcyear', 'utcquarter', 'utcmonth', 'utcweek', 'utcday', 'utcdayofyear', 'utcdate', 'utchours', 'utcminutes', 'utcseconds', 'utcmilliseconds', 'year', 'quarter', 'month', 'week', 'day', 'dayofyear', 'date', 'hours', 'minutes', 'seconds', 'milliseconds', 'utcyearquarter', 'utcyearquartermonth', 'utcyearmonth', 'utcyearmonthdate', 'utcyearmonthdatehours', 'utcyearmonthdatehoursminutes', 'utcyearmonthdatehoursminutesseconds', 'utcyearweek', 'utcyearweekday', 'utcyearweekdayhours', 'utcyearweekdayhoursminutes', 'utcyearweekdayhoursminutesseconds', 'utcyeardayofyear', 'utcquartermonth', 'utcmonthdate', 'utcmonthdatehours', 'utcmonthdatehoursminutes', 'utcmonthdatehoursminutesseconds', 'utcweekday', 'utcweekdayhours', 'utcweekdayhoursminutes', 'utcweekdayhoursminutesseconds', 'utcdayhours', 'utcdayhoursminutes', 'utcdayhoursminutesseconds', 'utchoursminutes', 'utchoursminutesseconds', 'utcminutesseconds', 'utcsecondsmilliseconds', 'yearquarter', 'yearquartermonth', 'yearmonth', 'yearmonthdate', 'yearmonthdatehours', 'yearmonthdatehoursminutes', 'yearmonthdatehoursminutesseconds', 'yearweek', 'yearweekday', 'yearweekdayhours', 'yearweekdayhoursminutes', 'yearweekdayhoursminutesseconds', 'yeardayofyear', 'quartermonth', 'monthdate', 'monthdatehours', 'monthdatehoursminutes', 'monthdatehoursminutesseconds', 'weekday', 'weekdayhours', 'weekdayhoursminutes', 'weekdayhoursminutesseconds', 'dayhours', 'dayhoursminutes', 'dayhoursminutesseconds', 'hoursminutes', 'hoursminutesseconds', 'minutesseconds', 'secondsmilliseconds']
+ timeUnit : dict, :class:`TimeUnit`, :class:`MultiTimeUnit`, :class:`BinnedTimeUnit`, :class:`SingleTimeUnit`, :class:`TimeUnitParams`, :class:`UtcMultiTimeUnit`, :class:`UtcSingleTimeUnit`, :class:`LocalMultiTimeUnit`, :class:`LocalSingleTimeUnit`, Literal['binnedyear', 'binnedyearquarter', 'binnedyearquartermonth', 'binnedyearmonth', 'binnedyearmonthdate', 'binnedyearmonthdatehours', 'binnedyearmonthdatehoursminutes', 'binnedyearmonthdatehoursminutesseconds', 'binnedyearweek', 'binnedyearweekday', 'binnedyearweekdayhours', 'binnedyearweekdayhoursminutes', 'binnedyearweekdayhoursminutesseconds', 'binnedyeardayofyear', 'binnedutcyear', 'binnedutcyearquarter', 'binnedutcyearquartermonth', 'binnedutcyearmonth', 'binnedutcyearmonthdate', 'binnedutcyearmonthdatehours', 'binnedutcyearmonthdatehoursminutes', 'binnedutcyearmonthdatehoursminutesseconds', 'binnedutcyearweek', 'binnedutcyearweekday', 'binnedutcyearweekdayhours', 'binnedutcyearweekdayhoursminutes', 'binnedutcyearweekdayhoursminutesseconds', 'binnedutcyeardayofyear', 'utcyear', 'utcquarter', 'utcmonth', 'utcweek', 'utcday', 'utcdayofyear', 'utcdate', 'utchours', 'utcminutes', 'utcseconds', 'utcmilliseconds', 'year', 'quarter', 'month', 'week', 'day', 'dayofyear', 'date', 'hours', 'minutes', 'seconds', 'milliseconds', 'utcyearquarter', 'utcyearquartermonth', 'utcyearmonth', 'utcyearmonthdate', 'utcyearmonthdatehours', 'utcyearmonthdatehoursminutes', 'utcyearmonthdatehoursminutesseconds', 'utcyearweek', 'utcyearweekday', 'utcyearweekdayhours', 'utcyearweekdayhoursminutes', 'utcyearweekdayhoursminutesseconds', 'utcyeardayofyear', 'utcquartermonth', 'utcmonthdate', 'utcmonthdatehours', 'utcmonthdatehoursminutes', 'utcmonthdatehoursminutesseconds', 'utcweekday', 'utcweekdayhours', 'utcweekdayhoursminutes', 'utcweekdayhoursminutesseconds', 'utcdayhours', 'utcdayhoursminutes', 'utcdayhoursminutesseconds', 'utchoursminutes', 'utchoursminutesseconds', 'utcminutesseconds', 'utcsecondsmilliseconds', 'yearquarter', 'yearquartermonth', 'yearmonth', 'yearmonthdate', 'yearmonthdatehours', 'yearmonthdatehoursminutes', 'yearmonthdatehoursminutesseconds', 'yearweek', 'yearweekday', 'yearweekdayhours', 'yearweekdayhoursminutes', 'yearweekdayhoursminutesseconds', 'yeardayofyear', 'quartermonth', 'monthdate', 'monthdatehours', 'monthdatehoursminutes', 'monthdatehoursminutesseconds', 'weekday', 'weekdayhours', 'weekdayhoursminutes', 'weekdayhoursminutesseconds', 'dayhours', 'dayhoursminutes', 'dayhoursminutesseconds', 'hoursminutes', 'hoursminutesseconds', 'minutesseconds', 'secondsmilliseconds']
Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours``) for a temporal
field. or `a temporal field that gets casted as ordinal
`__.
@@ -7580,7 +7580,7 @@ class FieldOrDatumDefWithConditionStringFieldDefstring(VegaLiteSchema):
* ``"time"`` for temporal fields and ordinal and nominal fields with ``timeUnit``.
* ``"number"`` for quantitative fields as well as ordinal and nominal fields without
``timeUnit``.
- timeUnit : dict, :class:`TimeUnit`, :class:`MultiTimeUnit`, :class:`BinnedTimeUnit`, :class:`SingleTimeUnit`, :class:`TimeUnitParams`, :class:`UtcMultiTimeUnit`, :class:`UtcSingleTimeUnit`, :class:`LocalMultiTimeUnit`, :class:`LocalSingleTimeUnit`, Literal['binnedutcyear', 'binnedutcyearquarter', 'binnedutcyearquartermonth', 'binnedutcyearmonth', 'binnedutcyearmonthdate', 'binnedutcyearmonthdatehours', 'binnedutcyearmonthdatehoursminutes', 'binnedutcyearmonthdatehoursminutesseconds', 'binnedutcyearweek', 'binnedutcyearweekday', 'binnedutcyearweekdayhours', 'binnedutcyearweekdayhoursminutes', 'binnedutcyearweekdayhoursminutesseconds', 'binnedutcyeardayofyear', 'binnedyear', 'binnedyearquarter', 'binnedyearquartermonth', 'binnedyearmonth', 'binnedyearmonthdate', 'binnedyearmonthdatehours', 'binnedyearmonthdatehoursminutes', 'binnedyearmonthdatehoursminutesseconds', 'binnedyearweek', 'binnedyearweekday', 'binnedyearweekdayhours', 'binnedyearweekdayhoursminutes', 'binnedyearweekdayhoursminutesseconds', 'binnedyeardayofyear', 'utcyear', 'utcquarter', 'utcmonth', 'utcweek', 'utcday', 'utcdayofyear', 'utcdate', 'utchours', 'utcminutes', 'utcseconds', 'utcmilliseconds', 'year', 'quarter', 'month', 'week', 'day', 'dayofyear', 'date', 'hours', 'minutes', 'seconds', 'milliseconds', 'utcyearquarter', 'utcyearquartermonth', 'utcyearmonth', 'utcyearmonthdate', 'utcyearmonthdatehours', 'utcyearmonthdatehoursminutes', 'utcyearmonthdatehoursminutesseconds', 'utcyearweek', 'utcyearweekday', 'utcyearweekdayhours', 'utcyearweekdayhoursminutes', 'utcyearweekdayhoursminutesseconds', 'utcyeardayofyear', 'utcquartermonth', 'utcmonthdate', 'utcmonthdatehours', 'utcmonthdatehoursminutes', 'utcmonthdatehoursminutesseconds', 'utcweekday', 'utcweekdayhours', 'utcweekdayhoursminutes', 'utcweekdayhoursminutesseconds', 'utcdayhours', 'utcdayhoursminutes', 'utcdayhoursminutesseconds', 'utchoursminutes', 'utchoursminutesseconds', 'utcminutesseconds', 'utcsecondsmilliseconds', 'yearquarter', 'yearquartermonth', 'yearmonth', 'yearmonthdate', 'yearmonthdatehours', 'yearmonthdatehoursminutes', 'yearmonthdatehoursminutesseconds', 'yearweek', 'yearweekday', 'yearweekdayhours', 'yearweekdayhoursminutes', 'yearweekdayhoursminutesseconds', 'yeardayofyear', 'quartermonth', 'monthdate', 'monthdatehours', 'monthdatehoursminutes', 'monthdatehoursminutesseconds', 'weekday', 'weekdayhours', 'weekdayhoursminutes', 'weekdayhoursminutesseconds', 'dayhours', 'dayhoursminutes', 'dayhoursminutesseconds', 'hoursminutes', 'hoursminutesseconds', 'minutesseconds', 'secondsmilliseconds']
+ timeUnit : dict, :class:`TimeUnit`, :class:`MultiTimeUnit`, :class:`BinnedTimeUnit`, :class:`SingleTimeUnit`, :class:`TimeUnitParams`, :class:`UtcMultiTimeUnit`, :class:`UtcSingleTimeUnit`, :class:`LocalMultiTimeUnit`, :class:`LocalSingleTimeUnit`, Literal['binnedyear', 'binnedyearquarter', 'binnedyearquartermonth', 'binnedyearmonth', 'binnedyearmonthdate', 'binnedyearmonthdatehours', 'binnedyearmonthdatehoursminutes', 'binnedyearmonthdatehoursminutesseconds', 'binnedyearweek', 'binnedyearweekday', 'binnedyearweekdayhours', 'binnedyearweekdayhoursminutes', 'binnedyearweekdayhoursminutesseconds', 'binnedyeardayofyear', 'binnedutcyear', 'binnedutcyearquarter', 'binnedutcyearquartermonth', 'binnedutcyearmonth', 'binnedutcyearmonthdate', 'binnedutcyearmonthdatehours', 'binnedutcyearmonthdatehoursminutes', 'binnedutcyearmonthdatehoursminutesseconds', 'binnedutcyearweek', 'binnedutcyearweekday', 'binnedutcyearweekdayhours', 'binnedutcyearweekdayhoursminutes', 'binnedutcyearweekdayhoursminutesseconds', 'binnedutcyeardayofyear', 'utcyear', 'utcquarter', 'utcmonth', 'utcweek', 'utcday', 'utcdayofyear', 'utcdate', 'utchours', 'utcminutes', 'utcseconds', 'utcmilliseconds', 'year', 'quarter', 'month', 'week', 'day', 'dayofyear', 'date', 'hours', 'minutes', 'seconds', 'milliseconds', 'utcyearquarter', 'utcyearquartermonth', 'utcyearmonth', 'utcyearmonthdate', 'utcyearmonthdatehours', 'utcyearmonthdatehoursminutes', 'utcyearmonthdatehoursminutesseconds', 'utcyearweek', 'utcyearweekday', 'utcyearweekdayhours', 'utcyearweekdayhoursminutes', 'utcyearweekdayhoursminutesseconds', 'utcyeardayofyear', 'utcquartermonth', 'utcmonthdate', 'utcmonthdatehours', 'utcmonthdatehoursminutes', 'utcmonthdatehoursminutesseconds', 'utcweekday', 'utcweekdayhours', 'utcweekdayhoursminutes', 'utcweekdayhoursminutesseconds', 'utcdayhours', 'utcdayhoursminutes', 'utcdayhoursminutesseconds', 'utchoursminutes', 'utchoursminutesseconds', 'utcminutesseconds', 'utcsecondsmilliseconds', 'yearquarter', 'yearquartermonth', 'yearmonth', 'yearmonthdate', 'yearmonthdatehours', 'yearmonthdatehoursminutes', 'yearmonthdatehoursminutesseconds', 'yearweek', 'yearweekday', 'yearweekdayhours', 'yearweekdayhoursminutes', 'yearweekdayhoursminutesseconds', 'yeardayofyear', 'quartermonth', 'monthdate', 'monthdatehours', 'monthdatehoursminutes', 'monthdatehoursminutesseconds', 'weekday', 'weekdayhours', 'weekdayhoursminutes', 'weekdayhoursminutesseconds', 'dayhours', 'dayhoursminutes', 'dayhoursminutesseconds', 'hoursminutes', 'hoursminutesseconds', 'minutesseconds', 'secondsmilliseconds']
Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours``) for a temporal
field. or `a temporal field that gets casted as ordinal
`__.
@@ -8799,7 +8799,7 @@ class IntervalSelectionConfig(VegaLiteSchema):
**See also:** `clear examples
`__ in the
documentation.
- encodings : Sequence[:class:`SingleDefUnitChannel`, Literal['x', 'y', 'xOffset', 'yOffset', 'x2', 'y2', 'longitude', 'latitude', 'longitude2', 'latitude2', 'theta', 'theta2', 'radius', 'radius2', 'color', 'fill', 'stroke', 'opacity', 'fillOpacity', 'strokeOpacity', 'strokeWidth', 'strokeDash', 'size', 'angle', 'shape', 'key', 'text', 'href', 'url', 'description']]
+ encodings : Sequence[:class:`SingleDefUnitChannel`, Literal['text', 'shape', 'x', 'y', 'xOffset', 'yOffset', 'x2', 'y2', 'longitude', 'latitude', 'longitude2', 'latitude2', 'theta', 'theta2', 'radius', 'radius2', 'color', 'fill', 'stroke', 'opacity', 'fillOpacity', 'strokeOpacity', 'strokeWidth', 'strokeDash', 'size', 'angle', 'key', 'href', 'url', 'description']]
An array of encoding channels. The corresponding data field values must match for a
data tuple to fall within the selection.
@@ -8920,7 +8920,7 @@ class IntervalSelectionConfigWithoutType(VegaLiteSchema):
**See also:** `clear examples
`__ in the
documentation.
- encodings : Sequence[:class:`SingleDefUnitChannel`, Literal['x', 'y', 'xOffset', 'yOffset', 'x2', 'y2', 'longitude', 'latitude', 'longitude2', 'latitude2', 'theta', 'theta2', 'radius', 'radius2', 'color', 'fill', 'stroke', 'opacity', 'fillOpacity', 'strokeOpacity', 'strokeWidth', 'strokeDash', 'size', 'angle', 'shape', 'key', 'text', 'href', 'url', 'description']]
+ encodings : Sequence[:class:`SingleDefUnitChannel`, Literal['text', 'shape', 'x', 'y', 'xOffset', 'yOffset', 'x2', 'y2', 'longitude', 'latitude', 'longitude2', 'latitude2', 'theta', 'theta2', 'radius', 'radius2', 'color', 'fill', 'stroke', 'opacity', 'fillOpacity', 'strokeOpacity', 'strokeWidth', 'strokeDash', 'size', 'angle', 'key', 'href', 'url', 'description']]
An array of encoding channels. The corresponding data field values must match for a
data tuple to fall within the selection.
@@ -9171,7 +9171,7 @@ class LatLongFieldDef(LatLongDef):
about escaping in the `field documentation
`__. 2) ``field`` is not required
if ``aggregate`` is ``count``.
- timeUnit : dict, :class:`TimeUnit`, :class:`MultiTimeUnit`, :class:`BinnedTimeUnit`, :class:`SingleTimeUnit`, :class:`TimeUnitParams`, :class:`UtcMultiTimeUnit`, :class:`UtcSingleTimeUnit`, :class:`LocalMultiTimeUnit`, :class:`LocalSingleTimeUnit`, Literal['binnedutcyear', 'binnedutcyearquarter', 'binnedutcyearquartermonth', 'binnedutcyearmonth', 'binnedutcyearmonthdate', 'binnedutcyearmonthdatehours', 'binnedutcyearmonthdatehoursminutes', 'binnedutcyearmonthdatehoursminutesseconds', 'binnedutcyearweek', 'binnedutcyearweekday', 'binnedutcyearweekdayhours', 'binnedutcyearweekdayhoursminutes', 'binnedutcyearweekdayhoursminutesseconds', 'binnedutcyeardayofyear', 'binnedyear', 'binnedyearquarter', 'binnedyearquartermonth', 'binnedyearmonth', 'binnedyearmonthdate', 'binnedyearmonthdatehours', 'binnedyearmonthdatehoursminutes', 'binnedyearmonthdatehoursminutesseconds', 'binnedyearweek', 'binnedyearweekday', 'binnedyearweekdayhours', 'binnedyearweekdayhoursminutes', 'binnedyearweekdayhoursminutesseconds', 'binnedyeardayofyear', 'utcyear', 'utcquarter', 'utcmonth', 'utcweek', 'utcday', 'utcdayofyear', 'utcdate', 'utchours', 'utcminutes', 'utcseconds', 'utcmilliseconds', 'year', 'quarter', 'month', 'week', 'day', 'dayofyear', 'date', 'hours', 'minutes', 'seconds', 'milliseconds', 'utcyearquarter', 'utcyearquartermonth', 'utcyearmonth', 'utcyearmonthdate', 'utcyearmonthdatehours', 'utcyearmonthdatehoursminutes', 'utcyearmonthdatehoursminutesseconds', 'utcyearweek', 'utcyearweekday', 'utcyearweekdayhours', 'utcyearweekdayhoursminutes', 'utcyearweekdayhoursminutesseconds', 'utcyeardayofyear', 'utcquartermonth', 'utcmonthdate', 'utcmonthdatehours', 'utcmonthdatehoursminutes', 'utcmonthdatehoursminutesseconds', 'utcweekday', 'utcweekdayhours', 'utcweekdayhoursminutes', 'utcweekdayhoursminutesseconds', 'utcdayhours', 'utcdayhoursminutes', 'utcdayhoursminutesseconds', 'utchoursminutes', 'utchoursminutesseconds', 'utcminutesseconds', 'utcsecondsmilliseconds', 'yearquarter', 'yearquartermonth', 'yearmonth', 'yearmonthdate', 'yearmonthdatehours', 'yearmonthdatehoursminutes', 'yearmonthdatehoursminutesseconds', 'yearweek', 'yearweekday', 'yearweekdayhours', 'yearweekdayhoursminutes', 'yearweekdayhoursminutesseconds', 'yeardayofyear', 'quartermonth', 'monthdate', 'monthdatehours', 'monthdatehoursminutes', 'monthdatehoursminutesseconds', 'weekday', 'weekdayhours', 'weekdayhoursminutes', 'weekdayhoursminutesseconds', 'dayhours', 'dayhoursminutes', 'dayhoursminutesseconds', 'hoursminutes', 'hoursminutesseconds', 'minutesseconds', 'secondsmilliseconds']
+ timeUnit : dict, :class:`TimeUnit`, :class:`MultiTimeUnit`, :class:`BinnedTimeUnit`, :class:`SingleTimeUnit`, :class:`TimeUnitParams`, :class:`UtcMultiTimeUnit`, :class:`UtcSingleTimeUnit`, :class:`LocalMultiTimeUnit`, :class:`LocalSingleTimeUnit`, Literal['binnedyear', 'binnedyearquarter', 'binnedyearquartermonth', 'binnedyearmonth', 'binnedyearmonthdate', 'binnedyearmonthdatehours', 'binnedyearmonthdatehoursminutes', 'binnedyearmonthdatehoursminutesseconds', 'binnedyearweek', 'binnedyearweekday', 'binnedyearweekdayhours', 'binnedyearweekdayhoursminutes', 'binnedyearweekdayhoursminutesseconds', 'binnedyeardayofyear', 'binnedutcyear', 'binnedutcyearquarter', 'binnedutcyearquartermonth', 'binnedutcyearmonth', 'binnedutcyearmonthdate', 'binnedutcyearmonthdatehours', 'binnedutcyearmonthdatehoursminutes', 'binnedutcyearmonthdatehoursminutesseconds', 'binnedutcyearweek', 'binnedutcyearweekday', 'binnedutcyearweekdayhours', 'binnedutcyearweekdayhoursminutes', 'binnedutcyearweekdayhoursminutesseconds', 'binnedutcyeardayofyear', 'utcyear', 'utcquarter', 'utcmonth', 'utcweek', 'utcday', 'utcdayofyear', 'utcdate', 'utchours', 'utcminutes', 'utcseconds', 'utcmilliseconds', 'year', 'quarter', 'month', 'week', 'day', 'dayofyear', 'date', 'hours', 'minutes', 'seconds', 'milliseconds', 'utcyearquarter', 'utcyearquartermonth', 'utcyearmonth', 'utcyearmonthdate', 'utcyearmonthdatehours', 'utcyearmonthdatehoursminutes', 'utcyearmonthdatehoursminutesseconds', 'utcyearweek', 'utcyearweekday', 'utcyearweekdayhours', 'utcyearweekdayhoursminutes', 'utcyearweekdayhoursminutesseconds', 'utcyeardayofyear', 'utcquartermonth', 'utcmonthdate', 'utcmonthdatehours', 'utcmonthdatehoursminutes', 'utcmonthdatehoursminutesseconds', 'utcweekday', 'utcweekdayhours', 'utcweekdayhoursminutes', 'utcweekdayhoursminutesseconds', 'utcdayhours', 'utcdayhoursminutes', 'utcdayhoursminutesseconds', 'utchoursminutes', 'utchoursminutesseconds', 'utcminutesseconds', 'utcsecondsmilliseconds', 'yearquarter', 'yearquartermonth', 'yearmonth', 'yearmonthdate', 'yearmonthdatehours', 'yearmonthdatehoursminutes', 'yearmonthdatehoursminutesseconds', 'yearweek', 'yearweekday', 'yearweekdayhours', 'yearweekdayhoursminutes', 'yearweekdayhoursminutesseconds', 'yeardayofyear', 'quartermonth', 'monthdate', 'monthdatehours', 'monthdatehoursminutes', 'monthdatehoursminutesseconds', 'weekday', 'weekdayhours', 'weekdayhoursminutes', 'weekdayhoursminutesseconds', 'dayhours', 'dayhoursminutes', 'dayhoursminutesseconds', 'hoursminutes', 'hoursminutesseconds', 'minutesseconds', 'secondsmilliseconds']
Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours``) for a temporal
field. or `a temporal field that gets casted as ordinal
`__.
@@ -12612,7 +12612,7 @@ class FieldOrDatumDefWithConditionMarkPropFieldDefGradientstringnull(
**See also:** `sort `__
documentation.
- timeUnit : dict, :class:`TimeUnit`, :class:`MultiTimeUnit`, :class:`BinnedTimeUnit`, :class:`SingleTimeUnit`, :class:`TimeUnitParams`, :class:`UtcMultiTimeUnit`, :class:`UtcSingleTimeUnit`, :class:`LocalMultiTimeUnit`, :class:`LocalSingleTimeUnit`, Literal['binnedutcyear', 'binnedutcyearquarter', 'binnedutcyearquartermonth', 'binnedutcyearmonth', 'binnedutcyearmonthdate', 'binnedutcyearmonthdatehours', 'binnedutcyearmonthdatehoursminutes', 'binnedutcyearmonthdatehoursminutesseconds', 'binnedutcyearweek', 'binnedutcyearweekday', 'binnedutcyearweekdayhours', 'binnedutcyearweekdayhoursminutes', 'binnedutcyearweekdayhoursminutesseconds', 'binnedutcyeardayofyear', 'binnedyear', 'binnedyearquarter', 'binnedyearquartermonth', 'binnedyearmonth', 'binnedyearmonthdate', 'binnedyearmonthdatehours', 'binnedyearmonthdatehoursminutes', 'binnedyearmonthdatehoursminutesseconds', 'binnedyearweek', 'binnedyearweekday', 'binnedyearweekdayhours', 'binnedyearweekdayhoursminutes', 'binnedyearweekdayhoursminutesseconds', 'binnedyeardayofyear', 'utcyear', 'utcquarter', 'utcmonth', 'utcweek', 'utcday', 'utcdayofyear', 'utcdate', 'utchours', 'utcminutes', 'utcseconds', 'utcmilliseconds', 'year', 'quarter', 'month', 'week', 'day', 'dayofyear', 'date', 'hours', 'minutes', 'seconds', 'milliseconds', 'utcyearquarter', 'utcyearquartermonth', 'utcyearmonth', 'utcyearmonthdate', 'utcyearmonthdatehours', 'utcyearmonthdatehoursminutes', 'utcyearmonthdatehoursminutesseconds', 'utcyearweek', 'utcyearweekday', 'utcyearweekdayhours', 'utcyearweekdayhoursminutes', 'utcyearweekdayhoursminutesseconds', 'utcyeardayofyear', 'utcquartermonth', 'utcmonthdate', 'utcmonthdatehours', 'utcmonthdatehoursminutes', 'utcmonthdatehoursminutesseconds', 'utcweekday', 'utcweekdayhours', 'utcweekdayhoursminutes', 'utcweekdayhoursminutesseconds', 'utcdayhours', 'utcdayhoursminutes', 'utcdayhoursminutesseconds', 'utchoursminutes', 'utchoursminutesseconds', 'utcminutesseconds', 'utcsecondsmilliseconds', 'yearquarter', 'yearquartermonth', 'yearmonth', 'yearmonthdate', 'yearmonthdatehours', 'yearmonthdatehoursminutes', 'yearmonthdatehoursminutesseconds', 'yearweek', 'yearweekday', 'yearweekdayhours', 'yearweekdayhoursminutes', 'yearweekdayhoursminutesseconds', 'yeardayofyear', 'quartermonth', 'monthdate', 'monthdatehours', 'monthdatehoursminutes', 'monthdatehoursminutesseconds', 'weekday', 'weekdayhours', 'weekdayhoursminutes', 'weekdayhoursminutesseconds', 'dayhours', 'dayhoursminutes', 'dayhoursminutesseconds', 'hoursminutes', 'hoursminutesseconds', 'minutesseconds', 'secondsmilliseconds']
+ timeUnit : dict, :class:`TimeUnit`, :class:`MultiTimeUnit`, :class:`BinnedTimeUnit`, :class:`SingleTimeUnit`, :class:`TimeUnitParams`, :class:`UtcMultiTimeUnit`, :class:`UtcSingleTimeUnit`, :class:`LocalMultiTimeUnit`, :class:`LocalSingleTimeUnit`, Literal['binnedyear', 'binnedyearquarter', 'binnedyearquartermonth', 'binnedyearmonth', 'binnedyearmonthdate', 'binnedyearmonthdatehours', 'binnedyearmonthdatehoursminutes', 'binnedyearmonthdatehoursminutesseconds', 'binnedyearweek', 'binnedyearweekday', 'binnedyearweekdayhours', 'binnedyearweekdayhoursminutes', 'binnedyearweekdayhoursminutesseconds', 'binnedyeardayofyear', 'binnedutcyear', 'binnedutcyearquarter', 'binnedutcyearquartermonth', 'binnedutcyearmonth', 'binnedutcyearmonthdate', 'binnedutcyearmonthdatehours', 'binnedutcyearmonthdatehoursminutes', 'binnedutcyearmonthdatehoursminutesseconds', 'binnedutcyearweek', 'binnedutcyearweekday', 'binnedutcyearweekdayhours', 'binnedutcyearweekdayhoursminutes', 'binnedutcyearweekdayhoursminutesseconds', 'binnedutcyeardayofyear', 'utcyear', 'utcquarter', 'utcmonth', 'utcweek', 'utcday', 'utcdayofyear', 'utcdate', 'utchours', 'utcminutes', 'utcseconds', 'utcmilliseconds', 'year', 'quarter', 'month', 'week', 'day', 'dayofyear', 'date', 'hours', 'minutes', 'seconds', 'milliseconds', 'utcyearquarter', 'utcyearquartermonth', 'utcyearmonth', 'utcyearmonthdate', 'utcyearmonthdatehours', 'utcyearmonthdatehoursminutes', 'utcyearmonthdatehoursminutesseconds', 'utcyearweek', 'utcyearweekday', 'utcyearweekdayhours', 'utcyearweekdayhoursminutes', 'utcyearweekdayhoursminutesseconds', 'utcyeardayofyear', 'utcquartermonth', 'utcmonthdate', 'utcmonthdatehours', 'utcmonthdatehoursminutes', 'utcmonthdatehoursminutesseconds', 'utcweekday', 'utcweekdayhours', 'utcweekdayhoursminutes', 'utcweekdayhoursminutesseconds', 'utcdayhours', 'utcdayhoursminutes', 'utcdayhoursminutesseconds', 'utchoursminutes', 'utchoursminutesseconds', 'utcminutesseconds', 'utcsecondsmilliseconds', 'yearquarter', 'yearquartermonth', 'yearmonth', 'yearmonthdate', 'yearmonthdatehours', 'yearmonthdatehoursminutes', 'yearmonthdatehoursminutesseconds', 'yearweek', 'yearweekday', 'yearweekdayhours', 'yearweekdayhoursminutes', 'yearweekdayhoursminutesseconds', 'yeardayofyear', 'quartermonth', 'monthdate', 'monthdatehours', 'monthdatehoursminutes', 'monthdatehoursminutesseconds', 'weekday', 'weekdayhours', 'weekdayhoursminutes', 'weekdayhoursminutesseconds', 'dayhours', 'dayhoursminutes', 'dayhoursminutesseconds', 'hoursminutes', 'hoursminutesseconds', 'minutesseconds', 'secondsmilliseconds']
Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours``) for a temporal
field. or `a temporal field that gets casted as ordinal
`__.
@@ -13262,7 +13262,7 @@ class FieldOrDatumDefWithConditionMarkPropFieldDefnumberArray(
**See also:** `sort `__
documentation.
- timeUnit : dict, :class:`TimeUnit`, :class:`MultiTimeUnit`, :class:`BinnedTimeUnit`, :class:`SingleTimeUnit`, :class:`TimeUnitParams`, :class:`UtcMultiTimeUnit`, :class:`UtcSingleTimeUnit`, :class:`LocalMultiTimeUnit`, :class:`LocalSingleTimeUnit`, Literal['binnedutcyear', 'binnedutcyearquarter', 'binnedutcyearquartermonth', 'binnedutcyearmonth', 'binnedutcyearmonthdate', 'binnedutcyearmonthdatehours', 'binnedutcyearmonthdatehoursminutes', 'binnedutcyearmonthdatehoursminutesseconds', 'binnedutcyearweek', 'binnedutcyearweekday', 'binnedutcyearweekdayhours', 'binnedutcyearweekdayhoursminutes', 'binnedutcyearweekdayhoursminutesseconds', 'binnedutcyeardayofyear', 'binnedyear', 'binnedyearquarter', 'binnedyearquartermonth', 'binnedyearmonth', 'binnedyearmonthdate', 'binnedyearmonthdatehours', 'binnedyearmonthdatehoursminutes', 'binnedyearmonthdatehoursminutesseconds', 'binnedyearweek', 'binnedyearweekday', 'binnedyearweekdayhours', 'binnedyearweekdayhoursminutes', 'binnedyearweekdayhoursminutesseconds', 'binnedyeardayofyear', 'utcyear', 'utcquarter', 'utcmonth', 'utcweek', 'utcday', 'utcdayofyear', 'utcdate', 'utchours', 'utcminutes', 'utcseconds', 'utcmilliseconds', 'year', 'quarter', 'month', 'week', 'day', 'dayofyear', 'date', 'hours', 'minutes', 'seconds', 'milliseconds', 'utcyearquarter', 'utcyearquartermonth', 'utcyearmonth', 'utcyearmonthdate', 'utcyearmonthdatehours', 'utcyearmonthdatehoursminutes', 'utcyearmonthdatehoursminutesseconds', 'utcyearweek', 'utcyearweekday', 'utcyearweekdayhours', 'utcyearweekdayhoursminutes', 'utcyearweekdayhoursminutesseconds', 'utcyeardayofyear', 'utcquartermonth', 'utcmonthdate', 'utcmonthdatehours', 'utcmonthdatehoursminutes', 'utcmonthdatehoursminutesseconds', 'utcweekday', 'utcweekdayhours', 'utcweekdayhoursminutes', 'utcweekdayhoursminutesseconds', 'utcdayhours', 'utcdayhoursminutes', 'utcdayhoursminutesseconds', 'utchoursminutes', 'utchoursminutesseconds', 'utcminutesseconds', 'utcsecondsmilliseconds', 'yearquarter', 'yearquartermonth', 'yearmonth', 'yearmonthdate', 'yearmonthdatehours', 'yearmonthdatehoursminutes', 'yearmonthdatehoursminutesseconds', 'yearweek', 'yearweekday', 'yearweekdayhours', 'yearweekdayhoursminutes', 'yearweekdayhoursminutesseconds', 'yeardayofyear', 'quartermonth', 'monthdate', 'monthdatehours', 'monthdatehoursminutes', 'monthdatehoursminutesseconds', 'weekday', 'weekdayhours', 'weekdayhoursminutes', 'weekdayhoursminutesseconds', 'dayhours', 'dayhoursminutes', 'dayhoursminutesseconds', 'hoursminutes', 'hoursminutesseconds', 'minutesseconds', 'secondsmilliseconds']
+ timeUnit : dict, :class:`TimeUnit`, :class:`MultiTimeUnit`, :class:`BinnedTimeUnit`, :class:`SingleTimeUnit`, :class:`TimeUnitParams`, :class:`UtcMultiTimeUnit`, :class:`UtcSingleTimeUnit`, :class:`LocalMultiTimeUnit`, :class:`LocalSingleTimeUnit`, Literal['binnedyear', 'binnedyearquarter', 'binnedyearquartermonth', 'binnedyearmonth', 'binnedyearmonthdate', 'binnedyearmonthdatehours', 'binnedyearmonthdatehoursminutes', 'binnedyearmonthdatehoursminutesseconds', 'binnedyearweek', 'binnedyearweekday', 'binnedyearweekdayhours', 'binnedyearweekdayhoursminutes', 'binnedyearweekdayhoursminutesseconds', 'binnedyeardayofyear', 'binnedutcyear', 'binnedutcyearquarter', 'binnedutcyearquartermonth', 'binnedutcyearmonth', 'binnedutcyearmonthdate', 'binnedutcyearmonthdatehours', 'binnedutcyearmonthdatehoursminutes', 'binnedutcyearmonthdatehoursminutesseconds', 'binnedutcyearweek', 'binnedutcyearweekday', 'binnedutcyearweekdayhours', 'binnedutcyearweekdayhoursminutes', 'binnedutcyearweekdayhoursminutesseconds', 'binnedutcyeardayofyear', 'utcyear', 'utcquarter', 'utcmonth', 'utcweek', 'utcday', 'utcdayofyear', 'utcdate', 'utchours', 'utcminutes', 'utcseconds', 'utcmilliseconds', 'year', 'quarter', 'month', 'week', 'day', 'dayofyear', 'date', 'hours', 'minutes', 'seconds', 'milliseconds', 'utcyearquarter', 'utcyearquartermonth', 'utcyearmonth', 'utcyearmonthdate', 'utcyearmonthdatehours', 'utcyearmonthdatehoursminutes', 'utcyearmonthdatehoursminutesseconds', 'utcyearweek', 'utcyearweekday', 'utcyearweekdayhours', 'utcyearweekdayhoursminutes', 'utcyearweekdayhoursminutesseconds', 'utcyeardayofyear', 'utcquartermonth', 'utcmonthdate', 'utcmonthdatehours', 'utcmonthdatehoursminutes', 'utcmonthdatehoursminutesseconds', 'utcweekday', 'utcweekdayhours', 'utcweekdayhoursminutes', 'utcweekdayhoursminutesseconds', 'utcdayhours', 'utcdayhoursminutes', 'utcdayhoursminutesseconds', 'utchoursminutes', 'utchoursminutesseconds', 'utcminutesseconds', 'utcsecondsmilliseconds', 'yearquarter', 'yearquartermonth', 'yearmonth', 'yearmonthdate', 'yearmonthdatehours', 'yearmonthdatehoursminutes', 'yearmonthdatehoursminutesseconds', 'yearweek', 'yearweekday', 'yearweekdayhours', 'yearweekdayhoursminutes', 'yearweekdayhoursminutesseconds', 'yeardayofyear', 'quartermonth', 'monthdate', 'monthdatehours', 'monthdatehoursminutes', 'monthdatehoursminutesseconds', 'weekday', 'weekdayhours', 'weekdayhoursminutes', 'weekdayhoursminutesseconds', 'dayhours', 'dayhoursminutes', 'dayhoursminutesseconds', 'hoursminutes', 'hoursminutesseconds', 'minutesseconds', 'secondsmilliseconds']
Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours``) for a temporal
field. or `a temporal field that gets casted as ordinal
`__.
@@ -13671,7 +13671,7 @@ class FieldOrDatumDefWithConditionMarkPropFieldDefnumber(
**See also:** `sort `__
documentation.
- timeUnit : dict, :class:`TimeUnit`, :class:`MultiTimeUnit`, :class:`BinnedTimeUnit`, :class:`SingleTimeUnit`, :class:`TimeUnitParams`, :class:`UtcMultiTimeUnit`, :class:`UtcSingleTimeUnit`, :class:`LocalMultiTimeUnit`, :class:`LocalSingleTimeUnit`, Literal['binnedutcyear', 'binnedutcyearquarter', 'binnedutcyearquartermonth', 'binnedutcyearmonth', 'binnedutcyearmonthdate', 'binnedutcyearmonthdatehours', 'binnedutcyearmonthdatehoursminutes', 'binnedutcyearmonthdatehoursminutesseconds', 'binnedutcyearweek', 'binnedutcyearweekday', 'binnedutcyearweekdayhours', 'binnedutcyearweekdayhoursminutes', 'binnedutcyearweekdayhoursminutesseconds', 'binnedutcyeardayofyear', 'binnedyear', 'binnedyearquarter', 'binnedyearquartermonth', 'binnedyearmonth', 'binnedyearmonthdate', 'binnedyearmonthdatehours', 'binnedyearmonthdatehoursminutes', 'binnedyearmonthdatehoursminutesseconds', 'binnedyearweek', 'binnedyearweekday', 'binnedyearweekdayhours', 'binnedyearweekdayhoursminutes', 'binnedyearweekdayhoursminutesseconds', 'binnedyeardayofyear', 'utcyear', 'utcquarter', 'utcmonth', 'utcweek', 'utcday', 'utcdayofyear', 'utcdate', 'utchours', 'utcminutes', 'utcseconds', 'utcmilliseconds', 'year', 'quarter', 'month', 'week', 'day', 'dayofyear', 'date', 'hours', 'minutes', 'seconds', 'milliseconds', 'utcyearquarter', 'utcyearquartermonth', 'utcyearmonth', 'utcyearmonthdate', 'utcyearmonthdatehours', 'utcyearmonthdatehoursminutes', 'utcyearmonthdatehoursminutesseconds', 'utcyearweek', 'utcyearweekday', 'utcyearweekdayhours', 'utcyearweekdayhoursminutes', 'utcyearweekdayhoursminutesseconds', 'utcyeardayofyear', 'utcquartermonth', 'utcmonthdate', 'utcmonthdatehours', 'utcmonthdatehoursminutes', 'utcmonthdatehoursminutesseconds', 'utcweekday', 'utcweekdayhours', 'utcweekdayhoursminutes', 'utcweekdayhoursminutesseconds', 'utcdayhours', 'utcdayhoursminutes', 'utcdayhoursminutesseconds', 'utchoursminutes', 'utchoursminutesseconds', 'utcminutesseconds', 'utcsecondsmilliseconds', 'yearquarter', 'yearquartermonth', 'yearmonth', 'yearmonthdate', 'yearmonthdatehours', 'yearmonthdatehoursminutes', 'yearmonthdatehoursminutesseconds', 'yearweek', 'yearweekday', 'yearweekdayhours', 'yearweekdayhoursminutes', 'yearweekdayhoursminutesseconds', 'yeardayofyear', 'quartermonth', 'monthdate', 'monthdatehours', 'monthdatehoursminutes', 'monthdatehoursminutesseconds', 'weekday', 'weekdayhours', 'weekdayhoursminutes', 'weekdayhoursminutesseconds', 'dayhours', 'dayhoursminutes', 'dayhoursminutesseconds', 'hoursminutes', 'hoursminutesseconds', 'minutesseconds', 'secondsmilliseconds']
+ timeUnit : dict, :class:`TimeUnit`, :class:`MultiTimeUnit`, :class:`BinnedTimeUnit`, :class:`SingleTimeUnit`, :class:`TimeUnitParams`, :class:`UtcMultiTimeUnit`, :class:`UtcSingleTimeUnit`, :class:`LocalMultiTimeUnit`, :class:`LocalSingleTimeUnit`, Literal['binnedyear', 'binnedyearquarter', 'binnedyearquartermonth', 'binnedyearmonth', 'binnedyearmonthdate', 'binnedyearmonthdatehours', 'binnedyearmonthdatehoursminutes', 'binnedyearmonthdatehoursminutesseconds', 'binnedyearweek', 'binnedyearweekday', 'binnedyearweekdayhours', 'binnedyearweekdayhoursminutes', 'binnedyearweekdayhoursminutesseconds', 'binnedyeardayofyear', 'binnedutcyear', 'binnedutcyearquarter', 'binnedutcyearquartermonth', 'binnedutcyearmonth', 'binnedutcyearmonthdate', 'binnedutcyearmonthdatehours', 'binnedutcyearmonthdatehoursminutes', 'binnedutcyearmonthdatehoursminutesseconds', 'binnedutcyearweek', 'binnedutcyearweekday', 'binnedutcyearweekdayhours', 'binnedutcyearweekdayhoursminutes', 'binnedutcyearweekdayhoursminutesseconds', 'binnedutcyeardayofyear', 'utcyear', 'utcquarter', 'utcmonth', 'utcweek', 'utcday', 'utcdayofyear', 'utcdate', 'utchours', 'utcminutes', 'utcseconds', 'utcmilliseconds', 'year', 'quarter', 'month', 'week', 'day', 'dayofyear', 'date', 'hours', 'minutes', 'seconds', 'milliseconds', 'utcyearquarter', 'utcyearquartermonth', 'utcyearmonth', 'utcyearmonthdate', 'utcyearmonthdatehours', 'utcyearmonthdatehoursminutes', 'utcyearmonthdatehoursminutesseconds', 'utcyearweek', 'utcyearweekday', 'utcyearweekdayhours', 'utcyearweekdayhoursminutes', 'utcyearweekdayhoursminutesseconds', 'utcyeardayofyear', 'utcquartermonth', 'utcmonthdate', 'utcmonthdatehours', 'utcmonthdatehoursminutes', 'utcmonthdatehoursminutesseconds', 'utcweekday', 'utcweekdayhours', 'utcweekdayhoursminutes', 'utcweekdayhoursminutesseconds', 'utcdayhours', 'utcdayhoursminutes', 'utcdayhoursminutesseconds', 'utchoursminutes', 'utchoursminutesseconds', 'utcminutesseconds', 'utcsecondsmilliseconds', 'yearquarter', 'yearquartermonth', 'yearmonth', 'yearmonthdate', 'yearmonthdatehours', 'yearmonthdatehoursminutes', 'yearmonthdatehoursminutesseconds', 'yearweek', 'yearweekday', 'yearweekdayhours', 'yearweekdayhoursminutes', 'yearweekdayhoursminutesseconds', 'yeardayofyear', 'quartermonth', 'monthdate', 'monthdatehours', 'monthdatehoursminutes', 'monthdatehoursminutesseconds', 'weekday', 'weekdayhours', 'weekdayhoursminutes', 'weekdayhoursminutesseconds', 'dayhours', 'dayhoursminutes', 'dayhoursminutesseconds', 'hoursminutes', 'hoursminutesseconds', 'minutesseconds', 'secondsmilliseconds']
Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours``) for a temporal
field. or `a temporal field that gets casted as ordinal
`__.
@@ -13883,7 +13883,7 @@ class OrderFieldDef(VegaLiteSchema):
if ``aggregate`` is ``count``.
sort : :class:`SortOrder`, Literal['ascending', 'descending']
The sort order. One of ``"ascending"`` (default) or ``"descending"``.
- timeUnit : dict, :class:`TimeUnit`, :class:`MultiTimeUnit`, :class:`BinnedTimeUnit`, :class:`SingleTimeUnit`, :class:`TimeUnitParams`, :class:`UtcMultiTimeUnit`, :class:`UtcSingleTimeUnit`, :class:`LocalMultiTimeUnit`, :class:`LocalSingleTimeUnit`, Literal['binnedutcyear', 'binnedutcyearquarter', 'binnedutcyearquartermonth', 'binnedutcyearmonth', 'binnedutcyearmonthdate', 'binnedutcyearmonthdatehours', 'binnedutcyearmonthdatehoursminutes', 'binnedutcyearmonthdatehoursminutesseconds', 'binnedutcyearweek', 'binnedutcyearweekday', 'binnedutcyearweekdayhours', 'binnedutcyearweekdayhoursminutes', 'binnedutcyearweekdayhoursminutesseconds', 'binnedutcyeardayofyear', 'binnedyear', 'binnedyearquarter', 'binnedyearquartermonth', 'binnedyearmonth', 'binnedyearmonthdate', 'binnedyearmonthdatehours', 'binnedyearmonthdatehoursminutes', 'binnedyearmonthdatehoursminutesseconds', 'binnedyearweek', 'binnedyearweekday', 'binnedyearweekdayhours', 'binnedyearweekdayhoursminutes', 'binnedyearweekdayhoursminutesseconds', 'binnedyeardayofyear', 'utcyear', 'utcquarter', 'utcmonth', 'utcweek', 'utcday', 'utcdayofyear', 'utcdate', 'utchours', 'utcminutes', 'utcseconds', 'utcmilliseconds', 'year', 'quarter', 'month', 'week', 'day', 'dayofyear', 'date', 'hours', 'minutes', 'seconds', 'milliseconds', 'utcyearquarter', 'utcyearquartermonth', 'utcyearmonth', 'utcyearmonthdate', 'utcyearmonthdatehours', 'utcyearmonthdatehoursminutes', 'utcyearmonthdatehoursminutesseconds', 'utcyearweek', 'utcyearweekday', 'utcyearweekdayhours', 'utcyearweekdayhoursminutes', 'utcyearweekdayhoursminutesseconds', 'utcyeardayofyear', 'utcquartermonth', 'utcmonthdate', 'utcmonthdatehours', 'utcmonthdatehoursminutes', 'utcmonthdatehoursminutesseconds', 'utcweekday', 'utcweekdayhours', 'utcweekdayhoursminutes', 'utcweekdayhoursminutesseconds', 'utcdayhours', 'utcdayhoursminutes', 'utcdayhoursminutesseconds', 'utchoursminutes', 'utchoursminutesseconds', 'utcminutesseconds', 'utcsecondsmilliseconds', 'yearquarter', 'yearquartermonth', 'yearmonth', 'yearmonthdate', 'yearmonthdatehours', 'yearmonthdatehoursminutes', 'yearmonthdatehoursminutesseconds', 'yearweek', 'yearweekday', 'yearweekdayhours', 'yearweekdayhoursminutes', 'yearweekdayhoursminutesseconds', 'yeardayofyear', 'quartermonth', 'monthdate', 'monthdatehours', 'monthdatehoursminutes', 'monthdatehoursminutesseconds', 'weekday', 'weekdayhours', 'weekdayhoursminutes', 'weekdayhoursminutesseconds', 'dayhours', 'dayhoursminutes', 'dayhoursminutesseconds', 'hoursminutes', 'hoursminutesseconds', 'minutesseconds', 'secondsmilliseconds']
+ timeUnit : dict, :class:`TimeUnit`, :class:`MultiTimeUnit`, :class:`BinnedTimeUnit`, :class:`SingleTimeUnit`, :class:`TimeUnitParams`, :class:`UtcMultiTimeUnit`, :class:`UtcSingleTimeUnit`, :class:`LocalMultiTimeUnit`, :class:`LocalSingleTimeUnit`, Literal['binnedyear', 'binnedyearquarter', 'binnedyearquartermonth', 'binnedyearmonth', 'binnedyearmonthdate', 'binnedyearmonthdatehours', 'binnedyearmonthdatehoursminutes', 'binnedyearmonthdatehoursminutesseconds', 'binnedyearweek', 'binnedyearweekday', 'binnedyearweekdayhours', 'binnedyearweekdayhoursminutes', 'binnedyearweekdayhoursminutesseconds', 'binnedyeardayofyear', 'binnedutcyear', 'binnedutcyearquarter', 'binnedutcyearquartermonth', 'binnedutcyearmonth', 'binnedutcyearmonthdate', 'binnedutcyearmonthdatehours', 'binnedutcyearmonthdatehoursminutes', 'binnedutcyearmonthdatehoursminutesseconds', 'binnedutcyearweek', 'binnedutcyearweekday', 'binnedutcyearweekdayhours', 'binnedutcyearweekdayhoursminutes', 'binnedutcyearweekdayhoursminutesseconds', 'binnedutcyeardayofyear', 'utcyear', 'utcquarter', 'utcmonth', 'utcweek', 'utcday', 'utcdayofyear', 'utcdate', 'utchours', 'utcminutes', 'utcseconds', 'utcmilliseconds', 'year', 'quarter', 'month', 'week', 'day', 'dayofyear', 'date', 'hours', 'minutes', 'seconds', 'milliseconds', 'utcyearquarter', 'utcyearquartermonth', 'utcyearmonth', 'utcyearmonthdate', 'utcyearmonthdatehours', 'utcyearmonthdatehoursminutes', 'utcyearmonthdatehoursminutesseconds', 'utcyearweek', 'utcyearweekday', 'utcyearweekdayhours', 'utcyearweekdayhoursminutes', 'utcyearweekdayhoursminutesseconds', 'utcyeardayofyear', 'utcquartermonth', 'utcmonthdate', 'utcmonthdatehours', 'utcmonthdatehoursminutes', 'utcmonthdatehoursminutesseconds', 'utcweekday', 'utcweekdayhours', 'utcweekdayhoursminutes', 'utcweekdayhoursminutesseconds', 'utcdayhours', 'utcdayhoursminutes', 'utcdayhoursminutesseconds', 'utchoursminutes', 'utchoursminutesseconds', 'utcminutesseconds', 'utcsecondsmilliseconds', 'yearquarter', 'yearquartermonth', 'yearmonth', 'yearmonthdate', 'yearmonthdatehours', 'yearmonthdatehoursminutes', 'yearmonthdatehoursminutesseconds', 'yearweek', 'yearweekday', 'yearweekdayhours', 'yearweekdayhoursminutes', 'yearweekdayhoursminutesseconds', 'yeardayofyear', 'quartermonth', 'monthdate', 'monthdatehours', 'monthdatehoursminutes', 'monthdatehoursminutesseconds', 'weekday', 'weekdayhours', 'weekdayhoursminutes', 'weekdayhoursminutesseconds', 'dayhours', 'dayhoursminutes', 'dayhoursminutesseconds', 'hoursminutes', 'hoursminutesseconds', 'minutesseconds', 'secondsmilliseconds']
Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours``) for a temporal
field. or `a temporal field that gets casted as ordinal
`__.
@@ -14716,8 +14716,8 @@ class ParseValue(VegaLiteSchema):
_schema = {"$ref": "#/definitions/ParseValue"}
- def __init__(self, *args, **kwds):
- super().__init__(*args, **kwds)
+ def __init__(self, *args):
+ super().__init__(*args)
class Point(Geometry):
@@ -14776,7 +14776,7 @@ class PointSelectionConfig(VegaLiteSchema):
**See also:** `clear examples
`__ in the
documentation.
- encodings : Sequence[:class:`SingleDefUnitChannel`, Literal['x', 'y', 'xOffset', 'yOffset', 'x2', 'y2', 'longitude', 'latitude', 'longitude2', 'latitude2', 'theta', 'theta2', 'radius', 'radius2', 'color', 'fill', 'stroke', 'opacity', 'fillOpacity', 'strokeOpacity', 'strokeWidth', 'strokeDash', 'size', 'angle', 'shape', 'key', 'text', 'href', 'url', 'description']]
+ encodings : Sequence[:class:`SingleDefUnitChannel`, Literal['text', 'shape', 'x', 'y', 'xOffset', 'yOffset', 'x2', 'y2', 'longitude', 'latitude', 'longitude2', 'latitude2', 'theta', 'theta2', 'radius', 'radius2', 'color', 'fill', 'stroke', 'opacity', 'fillOpacity', 'strokeOpacity', 'strokeWidth', 'strokeDash', 'size', 'angle', 'key', 'href', 'url', 'description']]
An array of encoding channels. The corresponding data field values must match for a
data tuple to fall within the selection.
@@ -14894,7 +14894,7 @@ class PointSelectionConfigWithoutType(VegaLiteSchema):
**See also:** `clear examples
`__ in the
documentation.
- encodings : Sequence[:class:`SingleDefUnitChannel`, Literal['x', 'y', 'xOffset', 'yOffset', 'x2', 'y2', 'longitude', 'latitude', 'longitude2', 'latitude2', 'theta', 'theta2', 'radius', 'radius2', 'color', 'fill', 'stroke', 'opacity', 'fillOpacity', 'strokeOpacity', 'strokeWidth', 'strokeDash', 'size', 'angle', 'shape', 'key', 'text', 'href', 'url', 'description']]
+ encodings : Sequence[:class:`SingleDefUnitChannel`, Literal['text', 'shape', 'x', 'y', 'xOffset', 'yOffset', 'x2', 'y2', 'longitude', 'latitude', 'longitude2', 'latitude2', 'theta', 'theta2', 'radius', 'radius2', 'color', 'fill', 'stroke', 'opacity', 'fillOpacity', 'strokeOpacity', 'strokeWidth', 'strokeDash', 'size', 'angle', 'key', 'href', 'url', 'description']]
An array of encoding channels. The corresponding data field values must match for a
data tuple to fall within the selection.
@@ -15696,7 +15696,7 @@ class PositionFieldDef(PositionDef):
**See also:** `stack `__
documentation.
- timeUnit : dict, :class:`TimeUnit`, :class:`MultiTimeUnit`, :class:`BinnedTimeUnit`, :class:`SingleTimeUnit`, :class:`TimeUnitParams`, :class:`UtcMultiTimeUnit`, :class:`UtcSingleTimeUnit`, :class:`LocalMultiTimeUnit`, :class:`LocalSingleTimeUnit`, Literal['binnedutcyear', 'binnedutcyearquarter', 'binnedutcyearquartermonth', 'binnedutcyearmonth', 'binnedutcyearmonthdate', 'binnedutcyearmonthdatehours', 'binnedutcyearmonthdatehoursminutes', 'binnedutcyearmonthdatehoursminutesseconds', 'binnedutcyearweek', 'binnedutcyearweekday', 'binnedutcyearweekdayhours', 'binnedutcyearweekdayhoursminutes', 'binnedutcyearweekdayhoursminutesseconds', 'binnedutcyeardayofyear', 'binnedyear', 'binnedyearquarter', 'binnedyearquartermonth', 'binnedyearmonth', 'binnedyearmonthdate', 'binnedyearmonthdatehours', 'binnedyearmonthdatehoursminutes', 'binnedyearmonthdatehoursminutesseconds', 'binnedyearweek', 'binnedyearweekday', 'binnedyearweekdayhours', 'binnedyearweekdayhoursminutes', 'binnedyearweekdayhoursminutesseconds', 'binnedyeardayofyear', 'utcyear', 'utcquarter', 'utcmonth', 'utcweek', 'utcday', 'utcdayofyear', 'utcdate', 'utchours', 'utcminutes', 'utcseconds', 'utcmilliseconds', 'year', 'quarter', 'month', 'week', 'day', 'dayofyear', 'date', 'hours', 'minutes', 'seconds', 'milliseconds', 'utcyearquarter', 'utcyearquartermonth', 'utcyearmonth', 'utcyearmonthdate', 'utcyearmonthdatehours', 'utcyearmonthdatehoursminutes', 'utcyearmonthdatehoursminutesseconds', 'utcyearweek', 'utcyearweekday', 'utcyearweekdayhours', 'utcyearweekdayhoursminutes', 'utcyearweekdayhoursminutesseconds', 'utcyeardayofyear', 'utcquartermonth', 'utcmonthdate', 'utcmonthdatehours', 'utcmonthdatehoursminutes', 'utcmonthdatehoursminutesseconds', 'utcweekday', 'utcweekdayhours', 'utcweekdayhoursminutes', 'utcweekdayhoursminutesseconds', 'utcdayhours', 'utcdayhoursminutes', 'utcdayhoursminutesseconds', 'utchoursminutes', 'utchoursminutesseconds', 'utcminutesseconds', 'utcsecondsmilliseconds', 'yearquarter', 'yearquartermonth', 'yearmonth', 'yearmonthdate', 'yearmonthdatehours', 'yearmonthdatehoursminutes', 'yearmonthdatehoursminutesseconds', 'yearweek', 'yearweekday', 'yearweekdayhours', 'yearweekdayhoursminutes', 'yearweekdayhoursminutesseconds', 'yeardayofyear', 'quartermonth', 'monthdate', 'monthdatehours', 'monthdatehoursminutes', 'monthdatehoursminutesseconds', 'weekday', 'weekdayhours', 'weekdayhoursminutes', 'weekdayhoursminutesseconds', 'dayhours', 'dayhoursminutes', 'dayhoursminutesseconds', 'hoursminutes', 'hoursminutesseconds', 'minutesseconds', 'secondsmilliseconds']
+ timeUnit : dict, :class:`TimeUnit`, :class:`MultiTimeUnit`, :class:`BinnedTimeUnit`, :class:`SingleTimeUnit`, :class:`TimeUnitParams`, :class:`UtcMultiTimeUnit`, :class:`UtcSingleTimeUnit`, :class:`LocalMultiTimeUnit`, :class:`LocalSingleTimeUnit`, Literal['binnedyear', 'binnedyearquarter', 'binnedyearquartermonth', 'binnedyearmonth', 'binnedyearmonthdate', 'binnedyearmonthdatehours', 'binnedyearmonthdatehoursminutes', 'binnedyearmonthdatehoursminutesseconds', 'binnedyearweek', 'binnedyearweekday', 'binnedyearweekdayhours', 'binnedyearweekdayhoursminutes', 'binnedyearweekdayhoursminutesseconds', 'binnedyeardayofyear', 'binnedutcyear', 'binnedutcyearquarter', 'binnedutcyearquartermonth', 'binnedutcyearmonth', 'binnedutcyearmonthdate', 'binnedutcyearmonthdatehours', 'binnedutcyearmonthdatehoursminutes', 'binnedutcyearmonthdatehoursminutesseconds', 'binnedutcyearweek', 'binnedutcyearweekday', 'binnedutcyearweekdayhours', 'binnedutcyearweekdayhoursminutes', 'binnedutcyearweekdayhoursminutesseconds', 'binnedutcyeardayofyear', 'utcyear', 'utcquarter', 'utcmonth', 'utcweek', 'utcday', 'utcdayofyear', 'utcdate', 'utchours', 'utcminutes', 'utcseconds', 'utcmilliseconds', 'year', 'quarter', 'month', 'week', 'day', 'dayofyear', 'date', 'hours', 'minutes', 'seconds', 'milliseconds', 'utcyearquarter', 'utcyearquartermonth', 'utcyearmonth', 'utcyearmonthdate', 'utcyearmonthdatehours', 'utcyearmonthdatehoursminutes', 'utcyearmonthdatehoursminutesseconds', 'utcyearweek', 'utcyearweekday', 'utcyearweekdayhours', 'utcyearweekdayhoursminutes', 'utcyearweekdayhoursminutesseconds', 'utcyeardayofyear', 'utcquartermonth', 'utcmonthdate', 'utcmonthdatehours', 'utcmonthdatehoursminutes', 'utcmonthdatehoursminutesseconds', 'utcweekday', 'utcweekdayhours', 'utcweekdayhoursminutes', 'utcweekdayhoursminutesseconds', 'utcdayhours', 'utcdayhoursminutes', 'utcdayhoursminutesseconds', 'utchoursminutes', 'utchoursminutesseconds', 'utcminutesseconds', 'utcsecondsmilliseconds', 'yearquarter', 'yearquartermonth', 'yearmonth', 'yearmonthdate', 'yearmonthdatehours', 'yearmonthdatehoursminutes', 'yearmonthdatehoursminutesseconds', 'yearweek', 'yearweekday', 'yearweekdayhours', 'yearweekdayhoursminutes', 'yearweekdayhoursminutesseconds', 'yeardayofyear', 'quartermonth', 'monthdate', 'monthdatehours', 'monthdatehoursminutes', 'monthdatehoursminutesseconds', 'weekday', 'weekdayhours', 'weekdayhoursminutes', 'weekdayhoursminutesseconds', 'dayhours', 'dayhoursminutes', 'dayhoursminutesseconds', 'hoursminutes', 'hoursminutesseconds', 'minutesseconds', 'secondsmilliseconds']
Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours``) for a temporal
field. or `a temporal field that gets casted as ordinal
`__.
@@ -15978,7 +15978,7 @@ class PositionFieldDefBase(PolarDef):
**See also:** `stack `__
documentation.
- timeUnit : dict, :class:`TimeUnit`, :class:`MultiTimeUnit`, :class:`BinnedTimeUnit`, :class:`SingleTimeUnit`, :class:`TimeUnitParams`, :class:`UtcMultiTimeUnit`, :class:`UtcSingleTimeUnit`, :class:`LocalMultiTimeUnit`, :class:`LocalSingleTimeUnit`, Literal['binnedutcyear', 'binnedutcyearquarter', 'binnedutcyearquartermonth', 'binnedutcyearmonth', 'binnedutcyearmonthdate', 'binnedutcyearmonthdatehours', 'binnedutcyearmonthdatehoursminutes', 'binnedutcyearmonthdatehoursminutesseconds', 'binnedutcyearweek', 'binnedutcyearweekday', 'binnedutcyearweekdayhours', 'binnedutcyearweekdayhoursminutes', 'binnedutcyearweekdayhoursminutesseconds', 'binnedutcyeardayofyear', 'binnedyear', 'binnedyearquarter', 'binnedyearquartermonth', 'binnedyearmonth', 'binnedyearmonthdate', 'binnedyearmonthdatehours', 'binnedyearmonthdatehoursminutes', 'binnedyearmonthdatehoursminutesseconds', 'binnedyearweek', 'binnedyearweekday', 'binnedyearweekdayhours', 'binnedyearweekdayhoursminutes', 'binnedyearweekdayhoursminutesseconds', 'binnedyeardayofyear', 'utcyear', 'utcquarter', 'utcmonth', 'utcweek', 'utcday', 'utcdayofyear', 'utcdate', 'utchours', 'utcminutes', 'utcseconds', 'utcmilliseconds', 'year', 'quarter', 'month', 'week', 'day', 'dayofyear', 'date', 'hours', 'minutes', 'seconds', 'milliseconds', 'utcyearquarter', 'utcyearquartermonth', 'utcyearmonth', 'utcyearmonthdate', 'utcyearmonthdatehours', 'utcyearmonthdatehoursminutes', 'utcyearmonthdatehoursminutesseconds', 'utcyearweek', 'utcyearweekday', 'utcyearweekdayhours', 'utcyearweekdayhoursminutes', 'utcyearweekdayhoursminutesseconds', 'utcyeardayofyear', 'utcquartermonth', 'utcmonthdate', 'utcmonthdatehours', 'utcmonthdatehoursminutes', 'utcmonthdatehoursminutesseconds', 'utcweekday', 'utcweekdayhours', 'utcweekdayhoursminutes', 'utcweekdayhoursminutesseconds', 'utcdayhours', 'utcdayhoursminutes', 'utcdayhoursminutesseconds', 'utchoursminutes', 'utchoursminutesseconds', 'utcminutesseconds', 'utcsecondsmilliseconds', 'yearquarter', 'yearquartermonth', 'yearmonth', 'yearmonthdate', 'yearmonthdatehours', 'yearmonthdatehoursminutes', 'yearmonthdatehoursminutesseconds', 'yearweek', 'yearweekday', 'yearweekdayhours', 'yearweekdayhoursminutes', 'yearweekdayhoursminutesseconds', 'yeardayofyear', 'quartermonth', 'monthdate', 'monthdatehours', 'monthdatehoursminutes', 'monthdatehoursminutesseconds', 'weekday', 'weekdayhours', 'weekdayhoursminutes', 'weekdayhoursminutesseconds', 'dayhours', 'dayhoursminutes', 'dayhoursminutesseconds', 'hoursminutes', 'hoursminutesseconds', 'minutesseconds', 'secondsmilliseconds']
+ timeUnit : dict, :class:`TimeUnit`, :class:`MultiTimeUnit`, :class:`BinnedTimeUnit`, :class:`SingleTimeUnit`, :class:`TimeUnitParams`, :class:`UtcMultiTimeUnit`, :class:`UtcSingleTimeUnit`, :class:`LocalMultiTimeUnit`, :class:`LocalSingleTimeUnit`, Literal['binnedyear', 'binnedyearquarter', 'binnedyearquartermonth', 'binnedyearmonth', 'binnedyearmonthdate', 'binnedyearmonthdatehours', 'binnedyearmonthdatehoursminutes', 'binnedyearmonthdatehoursminutesseconds', 'binnedyearweek', 'binnedyearweekday', 'binnedyearweekdayhours', 'binnedyearweekdayhoursminutes', 'binnedyearweekdayhoursminutesseconds', 'binnedyeardayofyear', 'binnedutcyear', 'binnedutcyearquarter', 'binnedutcyearquartermonth', 'binnedutcyearmonth', 'binnedutcyearmonthdate', 'binnedutcyearmonthdatehours', 'binnedutcyearmonthdatehoursminutes', 'binnedutcyearmonthdatehoursminutesseconds', 'binnedutcyearweek', 'binnedutcyearweekday', 'binnedutcyearweekdayhours', 'binnedutcyearweekdayhoursminutes', 'binnedutcyearweekdayhoursminutesseconds', 'binnedutcyeardayofyear', 'utcyear', 'utcquarter', 'utcmonth', 'utcweek', 'utcday', 'utcdayofyear', 'utcdate', 'utchours', 'utcminutes', 'utcseconds', 'utcmilliseconds', 'year', 'quarter', 'month', 'week', 'day', 'dayofyear', 'date', 'hours', 'minutes', 'seconds', 'milliseconds', 'utcyearquarter', 'utcyearquartermonth', 'utcyearmonth', 'utcyearmonthdate', 'utcyearmonthdatehours', 'utcyearmonthdatehoursminutes', 'utcyearmonthdatehoursminutesseconds', 'utcyearweek', 'utcyearweekday', 'utcyearweekdayhours', 'utcyearweekdayhoursminutes', 'utcyearweekdayhoursminutesseconds', 'utcyeardayofyear', 'utcquartermonth', 'utcmonthdate', 'utcmonthdatehours', 'utcmonthdatehoursminutes', 'utcmonthdatehoursminutesseconds', 'utcweekday', 'utcweekdayhours', 'utcweekdayhoursminutes', 'utcweekdayhoursminutesseconds', 'utcdayhours', 'utcdayhoursminutes', 'utcdayhoursminutesseconds', 'utchoursminutes', 'utchoursminutesseconds', 'utcminutesseconds', 'utcsecondsmilliseconds', 'yearquarter', 'yearquartermonth', 'yearmonth', 'yearmonthdate', 'yearmonthdatehours', 'yearmonthdatehoursminutes', 'yearmonthdatehoursminutesseconds', 'yearweek', 'yearweekday', 'yearweekdayhours', 'yearweekdayhoursminutes', 'yearweekdayhoursminutesseconds', 'yeardayofyear', 'quartermonth', 'monthdate', 'monthdatehours', 'monthdatehoursminutes', 'monthdatehoursminutesseconds', 'weekday', 'weekdayhours', 'weekdayhoursminutes', 'weekdayhoursminutesseconds', 'dayhours', 'dayhoursminutes', 'dayhoursminutesseconds', 'hoursminutes', 'hoursminutesseconds', 'minutesseconds', 'secondsmilliseconds']
Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours``) for a temporal
field. or `a temporal field that gets casted as ordinal
`__.
@@ -16231,7 +16231,7 @@ class FieldEqualPredicate(Predicate):
The value that the field should be equal to.
field : str, :class:`FieldName`
Field to be tested.
- timeUnit : dict, :class:`TimeUnit`, :class:`MultiTimeUnit`, :class:`BinnedTimeUnit`, :class:`SingleTimeUnit`, :class:`TimeUnitParams`, :class:`UtcMultiTimeUnit`, :class:`UtcSingleTimeUnit`, :class:`LocalMultiTimeUnit`, :class:`LocalSingleTimeUnit`, Literal['binnedutcyear', 'binnedutcyearquarter', 'binnedutcyearquartermonth', 'binnedutcyearmonth', 'binnedutcyearmonthdate', 'binnedutcyearmonthdatehours', 'binnedutcyearmonthdatehoursminutes', 'binnedutcyearmonthdatehoursminutesseconds', 'binnedutcyearweek', 'binnedutcyearweekday', 'binnedutcyearweekdayhours', 'binnedutcyearweekdayhoursminutes', 'binnedutcyearweekdayhoursminutesseconds', 'binnedutcyeardayofyear', 'binnedyear', 'binnedyearquarter', 'binnedyearquartermonth', 'binnedyearmonth', 'binnedyearmonthdate', 'binnedyearmonthdatehours', 'binnedyearmonthdatehoursminutes', 'binnedyearmonthdatehoursminutesseconds', 'binnedyearweek', 'binnedyearweekday', 'binnedyearweekdayhours', 'binnedyearweekdayhoursminutes', 'binnedyearweekdayhoursminutesseconds', 'binnedyeardayofyear', 'utcyear', 'utcquarter', 'utcmonth', 'utcweek', 'utcday', 'utcdayofyear', 'utcdate', 'utchours', 'utcminutes', 'utcseconds', 'utcmilliseconds', 'year', 'quarter', 'month', 'week', 'day', 'dayofyear', 'date', 'hours', 'minutes', 'seconds', 'milliseconds', 'utcyearquarter', 'utcyearquartermonth', 'utcyearmonth', 'utcyearmonthdate', 'utcyearmonthdatehours', 'utcyearmonthdatehoursminutes', 'utcyearmonthdatehoursminutesseconds', 'utcyearweek', 'utcyearweekday', 'utcyearweekdayhours', 'utcyearweekdayhoursminutes', 'utcyearweekdayhoursminutesseconds', 'utcyeardayofyear', 'utcquartermonth', 'utcmonthdate', 'utcmonthdatehours', 'utcmonthdatehoursminutes', 'utcmonthdatehoursminutesseconds', 'utcweekday', 'utcweekdayhours', 'utcweekdayhoursminutes', 'utcweekdayhoursminutesseconds', 'utcdayhours', 'utcdayhoursminutes', 'utcdayhoursminutesseconds', 'utchoursminutes', 'utchoursminutesseconds', 'utcminutesseconds', 'utcsecondsmilliseconds', 'yearquarter', 'yearquartermonth', 'yearmonth', 'yearmonthdate', 'yearmonthdatehours', 'yearmonthdatehoursminutes', 'yearmonthdatehoursminutesseconds', 'yearweek', 'yearweekday', 'yearweekdayhours', 'yearweekdayhoursminutes', 'yearweekdayhoursminutesseconds', 'yeardayofyear', 'quartermonth', 'monthdate', 'monthdatehours', 'monthdatehoursminutes', 'monthdatehoursminutesseconds', 'weekday', 'weekdayhours', 'weekdayhoursminutes', 'weekdayhoursminutesseconds', 'dayhours', 'dayhoursminutes', 'dayhoursminutesseconds', 'hoursminutes', 'hoursminutesseconds', 'minutesseconds', 'secondsmilliseconds']
+ timeUnit : dict, :class:`TimeUnit`, :class:`MultiTimeUnit`, :class:`BinnedTimeUnit`, :class:`SingleTimeUnit`, :class:`TimeUnitParams`, :class:`UtcMultiTimeUnit`, :class:`UtcSingleTimeUnit`, :class:`LocalMultiTimeUnit`, :class:`LocalSingleTimeUnit`, Literal['binnedyear', 'binnedyearquarter', 'binnedyearquartermonth', 'binnedyearmonth', 'binnedyearmonthdate', 'binnedyearmonthdatehours', 'binnedyearmonthdatehoursminutes', 'binnedyearmonthdatehoursminutesseconds', 'binnedyearweek', 'binnedyearweekday', 'binnedyearweekdayhours', 'binnedyearweekdayhoursminutes', 'binnedyearweekdayhoursminutesseconds', 'binnedyeardayofyear', 'binnedutcyear', 'binnedutcyearquarter', 'binnedutcyearquartermonth', 'binnedutcyearmonth', 'binnedutcyearmonthdate', 'binnedutcyearmonthdatehours', 'binnedutcyearmonthdatehoursminutes', 'binnedutcyearmonthdatehoursminutesseconds', 'binnedutcyearweek', 'binnedutcyearweekday', 'binnedutcyearweekdayhours', 'binnedutcyearweekdayhoursminutes', 'binnedutcyearweekdayhoursminutesseconds', 'binnedutcyeardayofyear', 'utcyear', 'utcquarter', 'utcmonth', 'utcweek', 'utcday', 'utcdayofyear', 'utcdate', 'utchours', 'utcminutes', 'utcseconds', 'utcmilliseconds', 'year', 'quarter', 'month', 'week', 'day', 'dayofyear', 'date', 'hours', 'minutes', 'seconds', 'milliseconds', 'utcyearquarter', 'utcyearquartermonth', 'utcyearmonth', 'utcyearmonthdate', 'utcyearmonthdatehours', 'utcyearmonthdatehoursminutes', 'utcyearmonthdatehoursminutesseconds', 'utcyearweek', 'utcyearweekday', 'utcyearweekdayhours', 'utcyearweekdayhoursminutes', 'utcyearweekdayhoursminutesseconds', 'utcyeardayofyear', 'utcquartermonth', 'utcmonthdate', 'utcmonthdatehours', 'utcmonthdatehoursminutes', 'utcmonthdatehoursminutesseconds', 'utcweekday', 'utcweekdayhours', 'utcweekdayhoursminutes', 'utcweekdayhoursminutesseconds', 'utcdayhours', 'utcdayhoursminutes', 'utcdayhoursminutesseconds', 'utchoursminutes', 'utchoursminutesseconds', 'utcminutesseconds', 'utcsecondsmilliseconds', 'yearquarter', 'yearquartermonth', 'yearmonth', 'yearmonthdate', 'yearmonthdatehours', 'yearmonthdatehoursminutes', 'yearmonthdatehoursminutesseconds', 'yearweek', 'yearweekday', 'yearweekdayhours', 'yearweekdayhoursminutes', 'yearweekdayhoursminutesseconds', 'yeardayofyear', 'quartermonth', 'monthdate', 'monthdatehours', 'monthdatehoursminutes', 'monthdatehoursminutesseconds', 'weekday', 'weekdayhours', 'weekdayhoursminutes', 'weekdayhoursminutesseconds', 'dayhours', 'dayhoursminutes', 'dayhoursminutesseconds', 'hoursminutes', 'hoursminutesseconds', 'minutesseconds', 'secondsmilliseconds']
Time unit for the field to be tested.
"""
@@ -16261,7 +16261,7 @@ class FieldGTEPredicate(Predicate):
Field to be tested.
gte : str, dict, float, :class:`ExprRef`, :class:`DateTime`
The value that the field should be greater than or equals to.
- timeUnit : dict, :class:`TimeUnit`, :class:`MultiTimeUnit`, :class:`BinnedTimeUnit`, :class:`SingleTimeUnit`, :class:`TimeUnitParams`, :class:`UtcMultiTimeUnit`, :class:`UtcSingleTimeUnit`, :class:`LocalMultiTimeUnit`, :class:`LocalSingleTimeUnit`, Literal['binnedutcyear', 'binnedutcyearquarter', 'binnedutcyearquartermonth', 'binnedutcyearmonth', 'binnedutcyearmonthdate', 'binnedutcyearmonthdatehours', 'binnedutcyearmonthdatehoursminutes', 'binnedutcyearmonthdatehoursminutesseconds', 'binnedutcyearweek', 'binnedutcyearweekday', 'binnedutcyearweekdayhours', 'binnedutcyearweekdayhoursminutes', 'binnedutcyearweekdayhoursminutesseconds', 'binnedutcyeardayofyear', 'binnedyear', 'binnedyearquarter', 'binnedyearquartermonth', 'binnedyearmonth', 'binnedyearmonthdate', 'binnedyearmonthdatehours', 'binnedyearmonthdatehoursminutes', 'binnedyearmonthdatehoursminutesseconds', 'binnedyearweek', 'binnedyearweekday', 'binnedyearweekdayhours', 'binnedyearweekdayhoursminutes', 'binnedyearweekdayhoursminutesseconds', 'binnedyeardayofyear', 'utcyear', 'utcquarter', 'utcmonth', 'utcweek', 'utcday', 'utcdayofyear', 'utcdate', 'utchours', 'utcminutes', 'utcseconds', 'utcmilliseconds', 'year', 'quarter', 'month', 'week', 'day', 'dayofyear', 'date', 'hours', 'minutes', 'seconds', 'milliseconds', 'utcyearquarter', 'utcyearquartermonth', 'utcyearmonth', 'utcyearmonthdate', 'utcyearmonthdatehours', 'utcyearmonthdatehoursminutes', 'utcyearmonthdatehoursminutesseconds', 'utcyearweek', 'utcyearweekday', 'utcyearweekdayhours', 'utcyearweekdayhoursminutes', 'utcyearweekdayhoursminutesseconds', 'utcyeardayofyear', 'utcquartermonth', 'utcmonthdate', 'utcmonthdatehours', 'utcmonthdatehoursminutes', 'utcmonthdatehoursminutesseconds', 'utcweekday', 'utcweekdayhours', 'utcweekdayhoursminutes', 'utcweekdayhoursminutesseconds', 'utcdayhours', 'utcdayhoursminutes', 'utcdayhoursminutesseconds', 'utchoursminutes', 'utchoursminutesseconds', 'utcminutesseconds', 'utcsecondsmilliseconds', 'yearquarter', 'yearquartermonth', 'yearmonth', 'yearmonthdate', 'yearmonthdatehours', 'yearmonthdatehoursminutes', 'yearmonthdatehoursminutesseconds', 'yearweek', 'yearweekday', 'yearweekdayhours', 'yearweekdayhoursminutes', 'yearweekdayhoursminutesseconds', 'yeardayofyear', 'quartermonth', 'monthdate', 'monthdatehours', 'monthdatehoursminutes', 'monthdatehoursminutesseconds', 'weekday', 'weekdayhours', 'weekdayhoursminutes', 'weekdayhoursminutesseconds', 'dayhours', 'dayhoursminutes', 'dayhoursminutesseconds', 'hoursminutes', 'hoursminutesseconds', 'minutesseconds', 'secondsmilliseconds']
+ timeUnit : dict, :class:`TimeUnit`, :class:`MultiTimeUnit`, :class:`BinnedTimeUnit`, :class:`SingleTimeUnit`, :class:`TimeUnitParams`, :class:`UtcMultiTimeUnit`, :class:`UtcSingleTimeUnit`, :class:`LocalMultiTimeUnit`, :class:`LocalSingleTimeUnit`, Literal['binnedyear', 'binnedyearquarter', 'binnedyearquartermonth', 'binnedyearmonth', 'binnedyearmonthdate', 'binnedyearmonthdatehours', 'binnedyearmonthdatehoursminutes', 'binnedyearmonthdatehoursminutesseconds', 'binnedyearweek', 'binnedyearweekday', 'binnedyearweekdayhours', 'binnedyearweekdayhoursminutes', 'binnedyearweekdayhoursminutesseconds', 'binnedyeardayofyear', 'binnedutcyear', 'binnedutcyearquarter', 'binnedutcyearquartermonth', 'binnedutcyearmonth', 'binnedutcyearmonthdate', 'binnedutcyearmonthdatehours', 'binnedutcyearmonthdatehoursminutes', 'binnedutcyearmonthdatehoursminutesseconds', 'binnedutcyearweek', 'binnedutcyearweekday', 'binnedutcyearweekdayhours', 'binnedutcyearweekdayhoursminutes', 'binnedutcyearweekdayhoursminutesseconds', 'binnedutcyeardayofyear', 'utcyear', 'utcquarter', 'utcmonth', 'utcweek', 'utcday', 'utcdayofyear', 'utcdate', 'utchours', 'utcminutes', 'utcseconds', 'utcmilliseconds', 'year', 'quarter', 'month', 'week', 'day', 'dayofyear', 'date', 'hours', 'minutes', 'seconds', 'milliseconds', 'utcyearquarter', 'utcyearquartermonth', 'utcyearmonth', 'utcyearmonthdate', 'utcyearmonthdatehours', 'utcyearmonthdatehoursminutes', 'utcyearmonthdatehoursminutesseconds', 'utcyearweek', 'utcyearweekday', 'utcyearweekdayhours', 'utcyearweekdayhoursminutes', 'utcyearweekdayhoursminutesseconds', 'utcyeardayofyear', 'utcquartermonth', 'utcmonthdate', 'utcmonthdatehours', 'utcmonthdatehoursminutes', 'utcmonthdatehoursminutesseconds', 'utcweekday', 'utcweekdayhours', 'utcweekdayhoursminutes', 'utcweekdayhoursminutesseconds', 'utcdayhours', 'utcdayhoursminutes', 'utcdayhoursminutesseconds', 'utchoursminutes', 'utchoursminutesseconds', 'utcminutesseconds', 'utcsecondsmilliseconds', 'yearquarter', 'yearquartermonth', 'yearmonth', 'yearmonthdate', 'yearmonthdatehours', 'yearmonthdatehoursminutes', 'yearmonthdatehoursminutesseconds', 'yearweek', 'yearweekday', 'yearweekdayhours', 'yearweekdayhoursminutes', 'yearweekdayhoursminutesseconds', 'yeardayofyear', 'quartermonth', 'monthdate', 'monthdatehours', 'monthdatehoursminutes', 'monthdatehoursminutesseconds', 'weekday', 'weekdayhours', 'weekdayhoursminutes', 'weekdayhoursminutesseconds', 'dayhours', 'dayhoursminutes', 'dayhoursminutesseconds', 'hoursminutes', 'hoursminutesseconds', 'minutesseconds', 'secondsmilliseconds']
Time unit for the field to be tested.
"""
@@ -16291,7 +16291,7 @@ class FieldGTPredicate(Predicate):
Field to be tested.
gt : str, dict, float, :class:`ExprRef`, :class:`DateTime`
The value that the field should be greater than.
- timeUnit : dict, :class:`TimeUnit`, :class:`MultiTimeUnit`, :class:`BinnedTimeUnit`, :class:`SingleTimeUnit`, :class:`TimeUnitParams`, :class:`UtcMultiTimeUnit`, :class:`UtcSingleTimeUnit`, :class:`LocalMultiTimeUnit`, :class:`LocalSingleTimeUnit`, Literal['binnedutcyear', 'binnedutcyearquarter', 'binnedutcyearquartermonth', 'binnedutcyearmonth', 'binnedutcyearmonthdate', 'binnedutcyearmonthdatehours', 'binnedutcyearmonthdatehoursminutes', 'binnedutcyearmonthdatehoursminutesseconds', 'binnedutcyearweek', 'binnedutcyearweekday', 'binnedutcyearweekdayhours', 'binnedutcyearweekdayhoursminutes', 'binnedutcyearweekdayhoursminutesseconds', 'binnedutcyeardayofyear', 'binnedyear', 'binnedyearquarter', 'binnedyearquartermonth', 'binnedyearmonth', 'binnedyearmonthdate', 'binnedyearmonthdatehours', 'binnedyearmonthdatehoursminutes', 'binnedyearmonthdatehoursminutesseconds', 'binnedyearweek', 'binnedyearweekday', 'binnedyearweekdayhours', 'binnedyearweekdayhoursminutes', 'binnedyearweekdayhoursminutesseconds', 'binnedyeardayofyear', 'utcyear', 'utcquarter', 'utcmonth', 'utcweek', 'utcday', 'utcdayofyear', 'utcdate', 'utchours', 'utcminutes', 'utcseconds', 'utcmilliseconds', 'year', 'quarter', 'month', 'week', 'day', 'dayofyear', 'date', 'hours', 'minutes', 'seconds', 'milliseconds', 'utcyearquarter', 'utcyearquartermonth', 'utcyearmonth', 'utcyearmonthdate', 'utcyearmonthdatehours', 'utcyearmonthdatehoursminutes', 'utcyearmonthdatehoursminutesseconds', 'utcyearweek', 'utcyearweekday', 'utcyearweekdayhours', 'utcyearweekdayhoursminutes', 'utcyearweekdayhoursminutesseconds', 'utcyeardayofyear', 'utcquartermonth', 'utcmonthdate', 'utcmonthdatehours', 'utcmonthdatehoursminutes', 'utcmonthdatehoursminutesseconds', 'utcweekday', 'utcweekdayhours', 'utcweekdayhoursminutes', 'utcweekdayhoursminutesseconds', 'utcdayhours', 'utcdayhoursminutes', 'utcdayhoursminutesseconds', 'utchoursminutes', 'utchoursminutesseconds', 'utcminutesseconds', 'utcsecondsmilliseconds', 'yearquarter', 'yearquartermonth', 'yearmonth', 'yearmonthdate', 'yearmonthdatehours', 'yearmonthdatehoursminutes', 'yearmonthdatehoursminutesseconds', 'yearweek', 'yearweekday', 'yearweekdayhours', 'yearweekdayhoursminutes', 'yearweekdayhoursminutesseconds', 'yeardayofyear', 'quartermonth', 'monthdate', 'monthdatehours', 'monthdatehoursminutes', 'monthdatehoursminutesseconds', 'weekday', 'weekdayhours', 'weekdayhoursminutes', 'weekdayhoursminutesseconds', 'dayhours', 'dayhoursminutes', 'dayhoursminutesseconds', 'hoursminutes', 'hoursminutesseconds', 'minutesseconds', 'secondsmilliseconds']
+ timeUnit : dict, :class:`TimeUnit`, :class:`MultiTimeUnit`, :class:`BinnedTimeUnit`, :class:`SingleTimeUnit`, :class:`TimeUnitParams`, :class:`UtcMultiTimeUnit`, :class:`UtcSingleTimeUnit`, :class:`LocalMultiTimeUnit`, :class:`LocalSingleTimeUnit`, Literal['binnedyear', 'binnedyearquarter', 'binnedyearquartermonth', 'binnedyearmonth', 'binnedyearmonthdate', 'binnedyearmonthdatehours', 'binnedyearmonthdatehoursminutes', 'binnedyearmonthdatehoursminutesseconds', 'binnedyearweek', 'binnedyearweekday', 'binnedyearweekdayhours', 'binnedyearweekdayhoursminutes', 'binnedyearweekdayhoursminutesseconds', 'binnedyeardayofyear', 'binnedutcyear', 'binnedutcyearquarter', 'binnedutcyearquartermonth', 'binnedutcyearmonth', 'binnedutcyearmonthdate', 'binnedutcyearmonthdatehours', 'binnedutcyearmonthdatehoursminutes', 'binnedutcyearmonthdatehoursminutesseconds', 'binnedutcyearweek', 'binnedutcyearweekday', 'binnedutcyearweekdayhours', 'binnedutcyearweekdayhoursminutes', 'binnedutcyearweekdayhoursminutesseconds', 'binnedutcyeardayofyear', 'utcyear', 'utcquarter', 'utcmonth', 'utcweek', 'utcday', 'utcdayofyear', 'utcdate', 'utchours', 'utcminutes', 'utcseconds', 'utcmilliseconds', 'year', 'quarter', 'month', 'week', 'day', 'dayofyear', 'date', 'hours', 'minutes', 'seconds', 'milliseconds', 'utcyearquarter', 'utcyearquartermonth', 'utcyearmonth', 'utcyearmonthdate', 'utcyearmonthdatehours', 'utcyearmonthdatehoursminutes', 'utcyearmonthdatehoursminutesseconds', 'utcyearweek', 'utcyearweekday', 'utcyearweekdayhours', 'utcyearweekdayhoursminutes', 'utcyearweekdayhoursminutesseconds', 'utcyeardayofyear', 'utcquartermonth', 'utcmonthdate', 'utcmonthdatehours', 'utcmonthdatehoursminutes', 'utcmonthdatehoursminutesseconds', 'utcweekday', 'utcweekdayhours', 'utcweekdayhoursminutes', 'utcweekdayhoursminutesseconds', 'utcdayhours', 'utcdayhoursminutes', 'utcdayhoursminutesseconds', 'utchoursminutes', 'utchoursminutesseconds', 'utcminutesseconds', 'utcsecondsmilliseconds', 'yearquarter', 'yearquartermonth', 'yearmonth', 'yearmonthdate', 'yearmonthdatehours', 'yearmonthdatehoursminutes', 'yearmonthdatehoursminutesseconds', 'yearweek', 'yearweekday', 'yearweekdayhours', 'yearweekdayhoursminutes', 'yearweekdayhoursminutesseconds', 'yeardayofyear', 'quartermonth', 'monthdate', 'monthdatehours', 'monthdatehoursminutes', 'monthdatehoursminutesseconds', 'weekday', 'weekdayhours', 'weekdayhoursminutes', 'weekdayhoursminutesseconds', 'dayhours', 'dayhoursminutes', 'dayhoursminutesseconds', 'hoursminutes', 'hoursminutesseconds', 'minutesseconds', 'secondsmilliseconds']
Time unit for the field to be tested.
"""
@@ -16319,7 +16319,7 @@ class FieldLTEPredicate(Predicate):
Field to be tested.
lte : str, dict, float, :class:`ExprRef`, :class:`DateTime`
The value that the field should be less than or equals to.
- timeUnit : dict, :class:`TimeUnit`, :class:`MultiTimeUnit`, :class:`BinnedTimeUnit`, :class:`SingleTimeUnit`, :class:`TimeUnitParams`, :class:`UtcMultiTimeUnit`, :class:`UtcSingleTimeUnit`, :class:`LocalMultiTimeUnit`, :class:`LocalSingleTimeUnit`, Literal['binnedutcyear', 'binnedutcyearquarter', 'binnedutcyearquartermonth', 'binnedutcyearmonth', 'binnedutcyearmonthdate', 'binnedutcyearmonthdatehours', 'binnedutcyearmonthdatehoursminutes', 'binnedutcyearmonthdatehoursminutesseconds', 'binnedutcyearweek', 'binnedutcyearweekday', 'binnedutcyearweekdayhours', 'binnedutcyearweekdayhoursminutes', 'binnedutcyearweekdayhoursminutesseconds', 'binnedutcyeardayofyear', 'binnedyear', 'binnedyearquarter', 'binnedyearquartermonth', 'binnedyearmonth', 'binnedyearmonthdate', 'binnedyearmonthdatehours', 'binnedyearmonthdatehoursminutes', 'binnedyearmonthdatehoursminutesseconds', 'binnedyearweek', 'binnedyearweekday', 'binnedyearweekdayhours', 'binnedyearweekdayhoursminutes', 'binnedyearweekdayhoursminutesseconds', 'binnedyeardayofyear', 'utcyear', 'utcquarter', 'utcmonth', 'utcweek', 'utcday', 'utcdayofyear', 'utcdate', 'utchours', 'utcminutes', 'utcseconds', 'utcmilliseconds', 'year', 'quarter', 'month', 'week', 'day', 'dayofyear', 'date', 'hours', 'minutes', 'seconds', 'milliseconds', 'utcyearquarter', 'utcyearquartermonth', 'utcyearmonth', 'utcyearmonthdate', 'utcyearmonthdatehours', 'utcyearmonthdatehoursminutes', 'utcyearmonthdatehoursminutesseconds', 'utcyearweek', 'utcyearweekday', 'utcyearweekdayhours', 'utcyearweekdayhoursminutes', 'utcyearweekdayhoursminutesseconds', 'utcyeardayofyear', 'utcquartermonth', 'utcmonthdate', 'utcmonthdatehours', 'utcmonthdatehoursminutes', 'utcmonthdatehoursminutesseconds', 'utcweekday', 'utcweekdayhours', 'utcweekdayhoursminutes', 'utcweekdayhoursminutesseconds', 'utcdayhours', 'utcdayhoursminutes', 'utcdayhoursminutesseconds', 'utchoursminutes', 'utchoursminutesseconds', 'utcminutesseconds', 'utcsecondsmilliseconds', 'yearquarter', 'yearquartermonth', 'yearmonth', 'yearmonthdate', 'yearmonthdatehours', 'yearmonthdatehoursminutes', 'yearmonthdatehoursminutesseconds', 'yearweek', 'yearweekday', 'yearweekdayhours', 'yearweekdayhoursminutes', 'yearweekdayhoursminutesseconds', 'yeardayofyear', 'quartermonth', 'monthdate', 'monthdatehours', 'monthdatehoursminutes', 'monthdatehoursminutesseconds', 'weekday', 'weekdayhours', 'weekdayhoursminutes', 'weekdayhoursminutesseconds', 'dayhours', 'dayhoursminutes', 'dayhoursminutesseconds', 'hoursminutes', 'hoursminutesseconds', 'minutesseconds', 'secondsmilliseconds']
+ timeUnit : dict, :class:`TimeUnit`, :class:`MultiTimeUnit`, :class:`BinnedTimeUnit`, :class:`SingleTimeUnit`, :class:`TimeUnitParams`, :class:`UtcMultiTimeUnit`, :class:`UtcSingleTimeUnit`, :class:`LocalMultiTimeUnit`, :class:`LocalSingleTimeUnit`, Literal['binnedyear', 'binnedyearquarter', 'binnedyearquartermonth', 'binnedyearmonth', 'binnedyearmonthdate', 'binnedyearmonthdatehours', 'binnedyearmonthdatehoursminutes', 'binnedyearmonthdatehoursminutesseconds', 'binnedyearweek', 'binnedyearweekday', 'binnedyearweekdayhours', 'binnedyearweekdayhoursminutes', 'binnedyearweekdayhoursminutesseconds', 'binnedyeardayofyear', 'binnedutcyear', 'binnedutcyearquarter', 'binnedutcyearquartermonth', 'binnedutcyearmonth', 'binnedutcyearmonthdate', 'binnedutcyearmonthdatehours', 'binnedutcyearmonthdatehoursminutes', 'binnedutcyearmonthdatehoursminutesseconds', 'binnedutcyearweek', 'binnedutcyearweekday', 'binnedutcyearweekdayhours', 'binnedutcyearweekdayhoursminutes', 'binnedutcyearweekdayhoursminutesseconds', 'binnedutcyeardayofyear', 'utcyear', 'utcquarter', 'utcmonth', 'utcweek', 'utcday', 'utcdayofyear', 'utcdate', 'utchours', 'utcminutes', 'utcseconds', 'utcmilliseconds', 'year', 'quarter', 'month', 'week', 'day', 'dayofyear', 'date', 'hours', 'minutes', 'seconds', 'milliseconds', 'utcyearquarter', 'utcyearquartermonth', 'utcyearmonth', 'utcyearmonthdate', 'utcyearmonthdatehours', 'utcyearmonthdatehoursminutes', 'utcyearmonthdatehoursminutesseconds', 'utcyearweek', 'utcyearweekday', 'utcyearweekdayhours', 'utcyearweekdayhoursminutes', 'utcyearweekdayhoursminutesseconds', 'utcyeardayofyear', 'utcquartermonth', 'utcmonthdate', 'utcmonthdatehours', 'utcmonthdatehoursminutes', 'utcmonthdatehoursminutesseconds', 'utcweekday', 'utcweekdayhours', 'utcweekdayhoursminutes', 'utcweekdayhoursminutesseconds', 'utcdayhours', 'utcdayhoursminutes', 'utcdayhoursminutesseconds', 'utchoursminutes', 'utchoursminutesseconds', 'utcminutesseconds', 'utcsecondsmilliseconds', 'yearquarter', 'yearquartermonth', 'yearmonth', 'yearmonthdate', 'yearmonthdatehours', 'yearmonthdatehoursminutes', 'yearmonthdatehoursminutesseconds', 'yearweek', 'yearweekday', 'yearweekdayhours', 'yearweekdayhoursminutes', 'yearweekdayhoursminutesseconds', 'yeardayofyear', 'quartermonth', 'monthdate', 'monthdatehours', 'monthdatehoursminutes', 'monthdatehoursminutesseconds', 'weekday', 'weekdayhours', 'weekdayhoursminutes', 'weekdayhoursminutesseconds', 'dayhours', 'dayhoursminutes', 'dayhoursminutesseconds', 'hoursminutes', 'hoursminutesseconds', 'minutesseconds', 'secondsmilliseconds']
Time unit for the field to be tested.
"""
@@ -16349,7 +16349,7 @@ class FieldLTPredicate(Predicate):
Field to be tested.
lt : str, dict, float, :class:`ExprRef`, :class:`DateTime`
The value that the field should be less than.
- timeUnit : dict, :class:`TimeUnit`, :class:`MultiTimeUnit`, :class:`BinnedTimeUnit`, :class:`SingleTimeUnit`, :class:`TimeUnitParams`, :class:`UtcMultiTimeUnit`, :class:`UtcSingleTimeUnit`, :class:`LocalMultiTimeUnit`, :class:`LocalSingleTimeUnit`, Literal['binnedutcyear', 'binnedutcyearquarter', 'binnedutcyearquartermonth', 'binnedutcyearmonth', 'binnedutcyearmonthdate', 'binnedutcyearmonthdatehours', 'binnedutcyearmonthdatehoursminutes', 'binnedutcyearmonthdatehoursminutesseconds', 'binnedutcyearweek', 'binnedutcyearweekday', 'binnedutcyearweekdayhours', 'binnedutcyearweekdayhoursminutes', 'binnedutcyearweekdayhoursminutesseconds', 'binnedutcyeardayofyear', 'binnedyear', 'binnedyearquarter', 'binnedyearquartermonth', 'binnedyearmonth', 'binnedyearmonthdate', 'binnedyearmonthdatehours', 'binnedyearmonthdatehoursminutes', 'binnedyearmonthdatehoursminutesseconds', 'binnedyearweek', 'binnedyearweekday', 'binnedyearweekdayhours', 'binnedyearweekdayhoursminutes', 'binnedyearweekdayhoursminutesseconds', 'binnedyeardayofyear', 'utcyear', 'utcquarter', 'utcmonth', 'utcweek', 'utcday', 'utcdayofyear', 'utcdate', 'utchours', 'utcminutes', 'utcseconds', 'utcmilliseconds', 'year', 'quarter', 'month', 'week', 'day', 'dayofyear', 'date', 'hours', 'minutes', 'seconds', 'milliseconds', 'utcyearquarter', 'utcyearquartermonth', 'utcyearmonth', 'utcyearmonthdate', 'utcyearmonthdatehours', 'utcyearmonthdatehoursminutes', 'utcyearmonthdatehoursminutesseconds', 'utcyearweek', 'utcyearweekday', 'utcyearweekdayhours', 'utcyearweekdayhoursminutes', 'utcyearweekdayhoursminutesseconds', 'utcyeardayofyear', 'utcquartermonth', 'utcmonthdate', 'utcmonthdatehours', 'utcmonthdatehoursminutes', 'utcmonthdatehoursminutesseconds', 'utcweekday', 'utcweekdayhours', 'utcweekdayhoursminutes', 'utcweekdayhoursminutesseconds', 'utcdayhours', 'utcdayhoursminutes', 'utcdayhoursminutesseconds', 'utchoursminutes', 'utchoursminutesseconds', 'utcminutesseconds', 'utcsecondsmilliseconds', 'yearquarter', 'yearquartermonth', 'yearmonth', 'yearmonthdate', 'yearmonthdatehours', 'yearmonthdatehoursminutes', 'yearmonthdatehoursminutesseconds', 'yearweek', 'yearweekday', 'yearweekdayhours', 'yearweekdayhoursminutes', 'yearweekdayhoursminutesseconds', 'yeardayofyear', 'quartermonth', 'monthdate', 'monthdatehours', 'monthdatehoursminutes', 'monthdatehoursminutesseconds', 'weekday', 'weekdayhours', 'weekdayhoursminutes', 'weekdayhoursminutesseconds', 'dayhours', 'dayhoursminutes', 'dayhoursminutesseconds', 'hoursminutes', 'hoursminutesseconds', 'minutesseconds', 'secondsmilliseconds']
+ timeUnit : dict, :class:`TimeUnit`, :class:`MultiTimeUnit`, :class:`BinnedTimeUnit`, :class:`SingleTimeUnit`, :class:`TimeUnitParams`, :class:`UtcMultiTimeUnit`, :class:`UtcSingleTimeUnit`, :class:`LocalMultiTimeUnit`, :class:`LocalSingleTimeUnit`, Literal['binnedyear', 'binnedyearquarter', 'binnedyearquartermonth', 'binnedyearmonth', 'binnedyearmonthdate', 'binnedyearmonthdatehours', 'binnedyearmonthdatehoursminutes', 'binnedyearmonthdatehoursminutesseconds', 'binnedyearweek', 'binnedyearweekday', 'binnedyearweekdayhours', 'binnedyearweekdayhoursminutes', 'binnedyearweekdayhoursminutesseconds', 'binnedyeardayofyear', 'binnedutcyear', 'binnedutcyearquarter', 'binnedutcyearquartermonth', 'binnedutcyearmonth', 'binnedutcyearmonthdate', 'binnedutcyearmonthdatehours', 'binnedutcyearmonthdatehoursminutes', 'binnedutcyearmonthdatehoursminutesseconds', 'binnedutcyearweek', 'binnedutcyearweekday', 'binnedutcyearweekdayhours', 'binnedutcyearweekdayhoursminutes', 'binnedutcyearweekdayhoursminutesseconds', 'binnedutcyeardayofyear', 'utcyear', 'utcquarter', 'utcmonth', 'utcweek', 'utcday', 'utcdayofyear', 'utcdate', 'utchours', 'utcminutes', 'utcseconds', 'utcmilliseconds', 'year', 'quarter', 'month', 'week', 'day', 'dayofyear', 'date', 'hours', 'minutes', 'seconds', 'milliseconds', 'utcyearquarter', 'utcyearquartermonth', 'utcyearmonth', 'utcyearmonthdate', 'utcyearmonthdatehours', 'utcyearmonthdatehoursminutes', 'utcyearmonthdatehoursminutesseconds', 'utcyearweek', 'utcyearweekday', 'utcyearweekdayhours', 'utcyearweekdayhoursminutes', 'utcyearweekdayhoursminutesseconds', 'utcyeardayofyear', 'utcquartermonth', 'utcmonthdate', 'utcmonthdatehours', 'utcmonthdatehoursminutes', 'utcmonthdatehoursminutesseconds', 'utcweekday', 'utcweekdayhours', 'utcweekdayhoursminutes', 'utcweekdayhoursminutesseconds', 'utcdayhours', 'utcdayhoursminutes', 'utcdayhoursminutesseconds', 'utchoursminutes', 'utchoursminutesseconds', 'utcminutesseconds', 'utcsecondsmilliseconds', 'yearquarter', 'yearquartermonth', 'yearmonth', 'yearmonthdate', 'yearmonthdatehours', 'yearmonthdatehoursminutes', 'yearmonthdatehoursminutesseconds', 'yearweek', 'yearweekday', 'yearweekdayhours', 'yearweekdayhoursminutes', 'yearweekdayhoursminutesseconds', 'yeardayofyear', 'quartermonth', 'monthdate', 'monthdatehours', 'monthdatehoursminutes', 'monthdatehoursminutesseconds', 'weekday', 'weekdayhours', 'weekdayhoursminutes', 'weekdayhoursminutesseconds', 'dayhours', 'dayhoursminutes', 'dayhoursminutesseconds', 'hoursminutes', 'hoursminutesseconds', 'minutesseconds', 'secondsmilliseconds']
Time unit for the field to be tested.
"""
@@ -16378,7 +16378,7 @@ class FieldOneOfPredicate(Predicate):
oneOf : Sequence[str], Sequence[bool], Sequence[float], Sequence[dict, :class:`DateTime`]
A set of values that the ``field``'s value should be a member of, for a data item
included in the filtered data.
- timeUnit : dict, :class:`TimeUnit`, :class:`MultiTimeUnit`, :class:`BinnedTimeUnit`, :class:`SingleTimeUnit`, :class:`TimeUnitParams`, :class:`UtcMultiTimeUnit`, :class:`UtcSingleTimeUnit`, :class:`LocalMultiTimeUnit`, :class:`LocalSingleTimeUnit`, Literal['binnedutcyear', 'binnedutcyearquarter', 'binnedutcyearquartermonth', 'binnedutcyearmonth', 'binnedutcyearmonthdate', 'binnedutcyearmonthdatehours', 'binnedutcyearmonthdatehoursminutes', 'binnedutcyearmonthdatehoursminutesseconds', 'binnedutcyearweek', 'binnedutcyearweekday', 'binnedutcyearweekdayhours', 'binnedutcyearweekdayhoursminutes', 'binnedutcyearweekdayhoursminutesseconds', 'binnedutcyeardayofyear', 'binnedyear', 'binnedyearquarter', 'binnedyearquartermonth', 'binnedyearmonth', 'binnedyearmonthdate', 'binnedyearmonthdatehours', 'binnedyearmonthdatehoursminutes', 'binnedyearmonthdatehoursminutesseconds', 'binnedyearweek', 'binnedyearweekday', 'binnedyearweekdayhours', 'binnedyearweekdayhoursminutes', 'binnedyearweekdayhoursminutesseconds', 'binnedyeardayofyear', 'utcyear', 'utcquarter', 'utcmonth', 'utcweek', 'utcday', 'utcdayofyear', 'utcdate', 'utchours', 'utcminutes', 'utcseconds', 'utcmilliseconds', 'year', 'quarter', 'month', 'week', 'day', 'dayofyear', 'date', 'hours', 'minutes', 'seconds', 'milliseconds', 'utcyearquarter', 'utcyearquartermonth', 'utcyearmonth', 'utcyearmonthdate', 'utcyearmonthdatehours', 'utcyearmonthdatehoursminutes', 'utcyearmonthdatehoursminutesseconds', 'utcyearweek', 'utcyearweekday', 'utcyearweekdayhours', 'utcyearweekdayhoursminutes', 'utcyearweekdayhoursminutesseconds', 'utcyeardayofyear', 'utcquartermonth', 'utcmonthdate', 'utcmonthdatehours', 'utcmonthdatehoursminutes', 'utcmonthdatehoursminutesseconds', 'utcweekday', 'utcweekdayhours', 'utcweekdayhoursminutes', 'utcweekdayhoursminutesseconds', 'utcdayhours', 'utcdayhoursminutes', 'utcdayhoursminutesseconds', 'utchoursminutes', 'utchoursminutesseconds', 'utcminutesseconds', 'utcsecondsmilliseconds', 'yearquarter', 'yearquartermonth', 'yearmonth', 'yearmonthdate', 'yearmonthdatehours', 'yearmonthdatehoursminutes', 'yearmonthdatehoursminutesseconds', 'yearweek', 'yearweekday', 'yearweekdayhours', 'yearweekdayhoursminutes', 'yearweekdayhoursminutesseconds', 'yeardayofyear', 'quartermonth', 'monthdate', 'monthdatehours', 'monthdatehoursminutes', 'monthdatehoursminutesseconds', 'weekday', 'weekdayhours', 'weekdayhoursminutes', 'weekdayhoursminutesseconds', 'dayhours', 'dayhoursminutes', 'dayhoursminutesseconds', 'hoursminutes', 'hoursminutesseconds', 'minutesseconds', 'secondsmilliseconds']
+ timeUnit : dict, :class:`TimeUnit`, :class:`MultiTimeUnit`, :class:`BinnedTimeUnit`, :class:`SingleTimeUnit`, :class:`TimeUnitParams`, :class:`UtcMultiTimeUnit`, :class:`UtcSingleTimeUnit`, :class:`LocalMultiTimeUnit`, :class:`LocalSingleTimeUnit`, Literal['binnedyear', 'binnedyearquarter', 'binnedyearquartermonth', 'binnedyearmonth', 'binnedyearmonthdate', 'binnedyearmonthdatehours', 'binnedyearmonthdatehoursminutes', 'binnedyearmonthdatehoursminutesseconds', 'binnedyearweek', 'binnedyearweekday', 'binnedyearweekdayhours', 'binnedyearweekdayhoursminutes', 'binnedyearweekdayhoursminutesseconds', 'binnedyeardayofyear', 'binnedutcyear', 'binnedutcyearquarter', 'binnedutcyearquartermonth', 'binnedutcyearmonth', 'binnedutcyearmonthdate', 'binnedutcyearmonthdatehours', 'binnedutcyearmonthdatehoursminutes', 'binnedutcyearmonthdatehoursminutesseconds', 'binnedutcyearweek', 'binnedutcyearweekday', 'binnedutcyearweekdayhours', 'binnedutcyearweekdayhoursminutes', 'binnedutcyearweekdayhoursminutesseconds', 'binnedutcyeardayofyear', 'utcyear', 'utcquarter', 'utcmonth', 'utcweek', 'utcday', 'utcdayofyear', 'utcdate', 'utchours', 'utcminutes', 'utcseconds', 'utcmilliseconds', 'year', 'quarter', 'month', 'week', 'day', 'dayofyear', 'date', 'hours', 'minutes', 'seconds', 'milliseconds', 'utcyearquarter', 'utcyearquartermonth', 'utcyearmonth', 'utcyearmonthdate', 'utcyearmonthdatehours', 'utcyearmonthdatehoursminutes', 'utcyearmonthdatehoursminutesseconds', 'utcyearweek', 'utcyearweekday', 'utcyearweekdayhours', 'utcyearweekdayhoursminutes', 'utcyearweekdayhoursminutesseconds', 'utcyeardayofyear', 'utcquartermonth', 'utcmonthdate', 'utcmonthdatehours', 'utcmonthdatehoursminutes', 'utcmonthdatehoursminutesseconds', 'utcweekday', 'utcweekdayhours', 'utcweekdayhoursminutes', 'utcweekdayhoursminutesseconds', 'utcdayhours', 'utcdayhoursminutes', 'utcdayhoursminutesseconds', 'utchoursminutes', 'utchoursminutesseconds', 'utcminutesseconds', 'utcsecondsmilliseconds', 'yearquarter', 'yearquartermonth', 'yearmonth', 'yearmonthdate', 'yearmonthdatehours', 'yearmonthdatehoursminutes', 'yearmonthdatehoursminutesseconds', 'yearweek', 'yearweekday', 'yearweekdayhours', 'yearweekdayhoursminutes', 'yearweekdayhoursminutesseconds', 'yeardayofyear', 'quartermonth', 'monthdate', 'monthdatehours', 'monthdatehoursminutes', 'monthdatehoursminutesseconds', 'weekday', 'weekdayhours', 'weekdayhoursminutes', 'weekdayhoursminutesseconds', 'dayhours', 'dayhoursminutes', 'dayhoursminutesseconds', 'hoursminutes', 'hoursminutesseconds', 'minutesseconds', 'secondsmilliseconds']
Time unit for the field to be tested.
"""
@@ -16412,7 +16412,7 @@ class FieldRangePredicate(Predicate):
range : dict, :class:`ExprRef`, Sequence[dict, float, :class:`ExprRef`, :class:`DateTime`, None]
An array of inclusive minimum and maximum values for a field value of a data item to
be included in the filtered data.
- timeUnit : dict, :class:`TimeUnit`, :class:`MultiTimeUnit`, :class:`BinnedTimeUnit`, :class:`SingleTimeUnit`, :class:`TimeUnitParams`, :class:`UtcMultiTimeUnit`, :class:`UtcSingleTimeUnit`, :class:`LocalMultiTimeUnit`, :class:`LocalSingleTimeUnit`, Literal['binnedutcyear', 'binnedutcyearquarter', 'binnedutcyearquartermonth', 'binnedutcyearmonth', 'binnedutcyearmonthdate', 'binnedutcyearmonthdatehours', 'binnedutcyearmonthdatehoursminutes', 'binnedutcyearmonthdatehoursminutesseconds', 'binnedutcyearweek', 'binnedutcyearweekday', 'binnedutcyearweekdayhours', 'binnedutcyearweekdayhoursminutes', 'binnedutcyearweekdayhoursminutesseconds', 'binnedutcyeardayofyear', 'binnedyear', 'binnedyearquarter', 'binnedyearquartermonth', 'binnedyearmonth', 'binnedyearmonthdate', 'binnedyearmonthdatehours', 'binnedyearmonthdatehoursminutes', 'binnedyearmonthdatehoursminutesseconds', 'binnedyearweek', 'binnedyearweekday', 'binnedyearweekdayhours', 'binnedyearweekdayhoursminutes', 'binnedyearweekdayhoursminutesseconds', 'binnedyeardayofyear', 'utcyear', 'utcquarter', 'utcmonth', 'utcweek', 'utcday', 'utcdayofyear', 'utcdate', 'utchours', 'utcminutes', 'utcseconds', 'utcmilliseconds', 'year', 'quarter', 'month', 'week', 'day', 'dayofyear', 'date', 'hours', 'minutes', 'seconds', 'milliseconds', 'utcyearquarter', 'utcyearquartermonth', 'utcyearmonth', 'utcyearmonthdate', 'utcyearmonthdatehours', 'utcyearmonthdatehoursminutes', 'utcyearmonthdatehoursminutesseconds', 'utcyearweek', 'utcyearweekday', 'utcyearweekdayhours', 'utcyearweekdayhoursminutes', 'utcyearweekdayhoursminutesseconds', 'utcyeardayofyear', 'utcquartermonth', 'utcmonthdate', 'utcmonthdatehours', 'utcmonthdatehoursminutes', 'utcmonthdatehoursminutesseconds', 'utcweekday', 'utcweekdayhours', 'utcweekdayhoursminutes', 'utcweekdayhoursminutesseconds', 'utcdayhours', 'utcdayhoursminutes', 'utcdayhoursminutesseconds', 'utchoursminutes', 'utchoursminutesseconds', 'utcminutesseconds', 'utcsecondsmilliseconds', 'yearquarter', 'yearquartermonth', 'yearmonth', 'yearmonthdate', 'yearmonthdatehours', 'yearmonthdatehoursminutes', 'yearmonthdatehoursminutesseconds', 'yearweek', 'yearweekday', 'yearweekdayhours', 'yearweekdayhoursminutes', 'yearweekdayhoursminutesseconds', 'yeardayofyear', 'quartermonth', 'monthdate', 'monthdatehours', 'monthdatehoursminutes', 'monthdatehoursminutesseconds', 'weekday', 'weekdayhours', 'weekdayhoursminutes', 'weekdayhoursminutesseconds', 'dayhours', 'dayhoursminutes', 'dayhoursminutesseconds', 'hoursminutes', 'hoursminutesseconds', 'minutesseconds', 'secondsmilliseconds']
+ timeUnit : dict, :class:`TimeUnit`, :class:`MultiTimeUnit`, :class:`BinnedTimeUnit`, :class:`SingleTimeUnit`, :class:`TimeUnitParams`, :class:`UtcMultiTimeUnit`, :class:`UtcSingleTimeUnit`, :class:`LocalMultiTimeUnit`, :class:`LocalSingleTimeUnit`, Literal['binnedyear', 'binnedyearquarter', 'binnedyearquartermonth', 'binnedyearmonth', 'binnedyearmonthdate', 'binnedyearmonthdatehours', 'binnedyearmonthdatehoursminutes', 'binnedyearmonthdatehoursminutesseconds', 'binnedyearweek', 'binnedyearweekday', 'binnedyearweekdayhours', 'binnedyearweekdayhoursminutes', 'binnedyearweekdayhoursminutesseconds', 'binnedyeardayofyear', 'binnedutcyear', 'binnedutcyearquarter', 'binnedutcyearquartermonth', 'binnedutcyearmonth', 'binnedutcyearmonthdate', 'binnedutcyearmonthdatehours', 'binnedutcyearmonthdatehoursminutes', 'binnedutcyearmonthdatehoursminutesseconds', 'binnedutcyearweek', 'binnedutcyearweekday', 'binnedutcyearweekdayhours', 'binnedutcyearweekdayhoursminutes', 'binnedutcyearweekdayhoursminutesseconds', 'binnedutcyeardayofyear', 'utcyear', 'utcquarter', 'utcmonth', 'utcweek', 'utcday', 'utcdayofyear', 'utcdate', 'utchours', 'utcminutes', 'utcseconds', 'utcmilliseconds', 'year', 'quarter', 'month', 'week', 'day', 'dayofyear', 'date', 'hours', 'minutes', 'seconds', 'milliseconds', 'utcyearquarter', 'utcyearquartermonth', 'utcyearmonth', 'utcyearmonthdate', 'utcyearmonthdatehours', 'utcyearmonthdatehoursminutes', 'utcyearmonthdatehoursminutesseconds', 'utcyearweek', 'utcyearweekday', 'utcyearweekdayhours', 'utcyearweekdayhoursminutes', 'utcyearweekdayhoursminutesseconds', 'utcyeardayofyear', 'utcquartermonth', 'utcmonthdate', 'utcmonthdatehours', 'utcmonthdatehoursminutes', 'utcmonthdatehoursminutesseconds', 'utcweekday', 'utcweekdayhours', 'utcweekdayhoursminutes', 'utcweekdayhoursminutesseconds', 'utcdayhours', 'utcdayhoursminutes', 'utcdayhoursminutesseconds', 'utchoursminutes', 'utchoursminutesseconds', 'utcminutesseconds', 'utcsecondsmilliseconds', 'yearquarter', 'yearquartermonth', 'yearmonth', 'yearmonthdate', 'yearmonthdatehours', 'yearmonthdatehoursminutes', 'yearmonthdatehoursminutesseconds', 'yearweek', 'yearweekday', 'yearweekdayhours', 'yearweekdayhoursminutes', 'yearweekdayhoursminutesseconds', 'yeardayofyear', 'quartermonth', 'monthdate', 'monthdatehours', 'monthdatehoursminutes', 'monthdatehoursminutesseconds', 'weekday', 'weekdayhours', 'weekdayhoursminutes', 'weekdayhoursminutesseconds', 'dayhours', 'dayhoursminutes', 'dayhoursminutesseconds', 'hoursminutes', 'hoursminutesseconds', 'minutesseconds', 'secondsmilliseconds']
Time unit for the field to be tested.
"""
@@ -16447,7 +16447,7 @@ class FieldValidPredicate(Predicate):
If set to true the field's value has to be valid, meaning both not ``null`` and not
`NaN
`__.
- timeUnit : dict, :class:`TimeUnit`, :class:`MultiTimeUnit`, :class:`BinnedTimeUnit`, :class:`SingleTimeUnit`, :class:`TimeUnitParams`, :class:`UtcMultiTimeUnit`, :class:`UtcSingleTimeUnit`, :class:`LocalMultiTimeUnit`, :class:`LocalSingleTimeUnit`, Literal['binnedutcyear', 'binnedutcyearquarter', 'binnedutcyearquartermonth', 'binnedutcyearmonth', 'binnedutcyearmonthdate', 'binnedutcyearmonthdatehours', 'binnedutcyearmonthdatehoursminutes', 'binnedutcyearmonthdatehoursminutesseconds', 'binnedutcyearweek', 'binnedutcyearweekday', 'binnedutcyearweekdayhours', 'binnedutcyearweekdayhoursminutes', 'binnedutcyearweekdayhoursminutesseconds', 'binnedutcyeardayofyear', 'binnedyear', 'binnedyearquarter', 'binnedyearquartermonth', 'binnedyearmonth', 'binnedyearmonthdate', 'binnedyearmonthdatehours', 'binnedyearmonthdatehoursminutes', 'binnedyearmonthdatehoursminutesseconds', 'binnedyearweek', 'binnedyearweekday', 'binnedyearweekdayhours', 'binnedyearweekdayhoursminutes', 'binnedyearweekdayhoursminutesseconds', 'binnedyeardayofyear', 'utcyear', 'utcquarter', 'utcmonth', 'utcweek', 'utcday', 'utcdayofyear', 'utcdate', 'utchours', 'utcminutes', 'utcseconds', 'utcmilliseconds', 'year', 'quarter', 'month', 'week', 'day', 'dayofyear', 'date', 'hours', 'minutes', 'seconds', 'milliseconds', 'utcyearquarter', 'utcyearquartermonth', 'utcyearmonth', 'utcyearmonthdate', 'utcyearmonthdatehours', 'utcyearmonthdatehoursminutes', 'utcyearmonthdatehoursminutesseconds', 'utcyearweek', 'utcyearweekday', 'utcyearweekdayhours', 'utcyearweekdayhoursminutes', 'utcyearweekdayhoursminutesseconds', 'utcyeardayofyear', 'utcquartermonth', 'utcmonthdate', 'utcmonthdatehours', 'utcmonthdatehoursminutes', 'utcmonthdatehoursminutesseconds', 'utcweekday', 'utcweekdayhours', 'utcweekdayhoursminutes', 'utcweekdayhoursminutesseconds', 'utcdayhours', 'utcdayhoursminutes', 'utcdayhoursminutesseconds', 'utchoursminutes', 'utchoursminutesseconds', 'utcminutesseconds', 'utcsecondsmilliseconds', 'yearquarter', 'yearquartermonth', 'yearmonth', 'yearmonthdate', 'yearmonthdatehours', 'yearmonthdatehoursminutes', 'yearmonthdatehoursminutesseconds', 'yearweek', 'yearweekday', 'yearweekdayhours', 'yearweekdayhoursminutes', 'yearweekdayhoursminutesseconds', 'yeardayofyear', 'quartermonth', 'monthdate', 'monthdatehours', 'monthdatehoursminutes', 'monthdatehoursminutesseconds', 'weekday', 'weekdayhours', 'weekdayhoursminutes', 'weekdayhoursminutesseconds', 'dayhours', 'dayhoursminutes', 'dayhoursminutesseconds', 'hoursminutes', 'hoursminutesseconds', 'minutesseconds', 'secondsmilliseconds']
+ timeUnit : dict, :class:`TimeUnit`, :class:`MultiTimeUnit`, :class:`BinnedTimeUnit`, :class:`SingleTimeUnit`, :class:`TimeUnitParams`, :class:`UtcMultiTimeUnit`, :class:`UtcSingleTimeUnit`, :class:`LocalMultiTimeUnit`, :class:`LocalSingleTimeUnit`, Literal['binnedyear', 'binnedyearquarter', 'binnedyearquartermonth', 'binnedyearmonth', 'binnedyearmonthdate', 'binnedyearmonthdatehours', 'binnedyearmonthdatehoursminutes', 'binnedyearmonthdatehoursminutesseconds', 'binnedyearweek', 'binnedyearweekday', 'binnedyearweekdayhours', 'binnedyearweekdayhoursminutes', 'binnedyearweekdayhoursminutesseconds', 'binnedyeardayofyear', 'binnedutcyear', 'binnedutcyearquarter', 'binnedutcyearquartermonth', 'binnedutcyearmonth', 'binnedutcyearmonthdate', 'binnedutcyearmonthdatehours', 'binnedutcyearmonthdatehoursminutes', 'binnedutcyearmonthdatehoursminutesseconds', 'binnedutcyearweek', 'binnedutcyearweekday', 'binnedutcyearweekdayhours', 'binnedutcyearweekdayhoursminutes', 'binnedutcyearweekdayhoursminutesseconds', 'binnedutcyeardayofyear', 'utcyear', 'utcquarter', 'utcmonth', 'utcweek', 'utcday', 'utcdayofyear', 'utcdate', 'utchours', 'utcminutes', 'utcseconds', 'utcmilliseconds', 'year', 'quarter', 'month', 'week', 'day', 'dayofyear', 'date', 'hours', 'minutes', 'seconds', 'milliseconds', 'utcyearquarter', 'utcyearquartermonth', 'utcyearmonth', 'utcyearmonthdate', 'utcyearmonthdatehours', 'utcyearmonthdatehoursminutes', 'utcyearmonthdatehoursminutesseconds', 'utcyearweek', 'utcyearweekday', 'utcyearweekdayhours', 'utcyearweekdayhoursminutes', 'utcyearweekdayhoursminutesseconds', 'utcyeardayofyear', 'utcquartermonth', 'utcmonthdate', 'utcmonthdatehours', 'utcmonthdatehoursminutes', 'utcmonthdatehoursminutesseconds', 'utcweekday', 'utcweekdayhours', 'utcweekdayhoursminutes', 'utcweekdayhoursminutesseconds', 'utcdayhours', 'utcdayhoursminutes', 'utcdayhoursminutesseconds', 'utchoursminutes', 'utchoursminutesseconds', 'utcminutesseconds', 'utcsecondsmilliseconds', 'yearquarter', 'yearquartermonth', 'yearmonth', 'yearmonthdate', 'yearmonthdatehours', 'yearmonthdatehoursminutes', 'yearmonthdatehoursminutesseconds', 'yearweek', 'yearweekday', 'yearweekdayhours', 'yearweekdayhoursminutes', 'yearweekdayhoursminutesseconds', 'yeardayofyear', 'quartermonth', 'monthdate', 'monthdatehours', 'monthdatehoursminutes', 'monthdatehoursminutesseconds', 'weekday', 'weekdayhours', 'weekdayhoursminutes', 'weekdayhoursminutesseconds', 'dayhours', 'dayhoursminutes', 'dayhoursminutesseconds', 'hoursminutes', 'hoursminutesseconds', 'minutesseconds', 'secondsmilliseconds']
Time unit for the field to be tested.
"""
@@ -17888,7 +17888,7 @@ class RowColumnEncodingFieldDef(VegaLiteSchema):
**Default value**: Depends on ``"spacing"`` property of `the view composition
configuration `__
(``20`` by default)
- timeUnit : dict, :class:`TimeUnit`, :class:`MultiTimeUnit`, :class:`BinnedTimeUnit`, :class:`SingleTimeUnit`, :class:`TimeUnitParams`, :class:`UtcMultiTimeUnit`, :class:`UtcSingleTimeUnit`, :class:`LocalMultiTimeUnit`, :class:`LocalSingleTimeUnit`, Literal['binnedutcyear', 'binnedutcyearquarter', 'binnedutcyearquartermonth', 'binnedutcyearmonth', 'binnedutcyearmonthdate', 'binnedutcyearmonthdatehours', 'binnedutcyearmonthdatehoursminutes', 'binnedutcyearmonthdatehoursminutesseconds', 'binnedutcyearweek', 'binnedutcyearweekday', 'binnedutcyearweekdayhours', 'binnedutcyearweekdayhoursminutes', 'binnedutcyearweekdayhoursminutesseconds', 'binnedutcyeardayofyear', 'binnedyear', 'binnedyearquarter', 'binnedyearquartermonth', 'binnedyearmonth', 'binnedyearmonthdate', 'binnedyearmonthdatehours', 'binnedyearmonthdatehoursminutes', 'binnedyearmonthdatehoursminutesseconds', 'binnedyearweek', 'binnedyearweekday', 'binnedyearweekdayhours', 'binnedyearweekdayhoursminutes', 'binnedyearweekdayhoursminutesseconds', 'binnedyeardayofyear', 'utcyear', 'utcquarter', 'utcmonth', 'utcweek', 'utcday', 'utcdayofyear', 'utcdate', 'utchours', 'utcminutes', 'utcseconds', 'utcmilliseconds', 'year', 'quarter', 'month', 'week', 'day', 'dayofyear', 'date', 'hours', 'minutes', 'seconds', 'milliseconds', 'utcyearquarter', 'utcyearquartermonth', 'utcyearmonth', 'utcyearmonthdate', 'utcyearmonthdatehours', 'utcyearmonthdatehoursminutes', 'utcyearmonthdatehoursminutesseconds', 'utcyearweek', 'utcyearweekday', 'utcyearweekdayhours', 'utcyearweekdayhoursminutes', 'utcyearweekdayhoursminutesseconds', 'utcyeardayofyear', 'utcquartermonth', 'utcmonthdate', 'utcmonthdatehours', 'utcmonthdatehoursminutes', 'utcmonthdatehoursminutesseconds', 'utcweekday', 'utcweekdayhours', 'utcweekdayhoursminutes', 'utcweekdayhoursminutesseconds', 'utcdayhours', 'utcdayhoursminutes', 'utcdayhoursminutesseconds', 'utchoursminutes', 'utchoursminutesseconds', 'utcminutesseconds', 'utcsecondsmilliseconds', 'yearquarter', 'yearquartermonth', 'yearmonth', 'yearmonthdate', 'yearmonthdatehours', 'yearmonthdatehoursminutes', 'yearmonthdatehoursminutesseconds', 'yearweek', 'yearweekday', 'yearweekdayhours', 'yearweekdayhoursminutes', 'yearweekdayhoursminutesseconds', 'yeardayofyear', 'quartermonth', 'monthdate', 'monthdatehours', 'monthdatehoursminutes', 'monthdatehoursminutesseconds', 'weekday', 'weekdayhours', 'weekdayhoursminutes', 'weekdayhoursminutesseconds', 'dayhours', 'dayhoursminutes', 'dayhoursminutesseconds', 'hoursminutes', 'hoursminutesseconds', 'minutesseconds', 'secondsmilliseconds']
+ timeUnit : dict, :class:`TimeUnit`, :class:`MultiTimeUnit`, :class:`BinnedTimeUnit`, :class:`SingleTimeUnit`, :class:`TimeUnitParams`, :class:`UtcMultiTimeUnit`, :class:`UtcSingleTimeUnit`, :class:`LocalMultiTimeUnit`, :class:`LocalSingleTimeUnit`, Literal['binnedyear', 'binnedyearquarter', 'binnedyearquartermonth', 'binnedyearmonth', 'binnedyearmonthdate', 'binnedyearmonthdatehours', 'binnedyearmonthdatehoursminutes', 'binnedyearmonthdatehoursminutesseconds', 'binnedyearweek', 'binnedyearweekday', 'binnedyearweekdayhours', 'binnedyearweekdayhoursminutes', 'binnedyearweekdayhoursminutesseconds', 'binnedyeardayofyear', 'binnedutcyear', 'binnedutcyearquarter', 'binnedutcyearquartermonth', 'binnedutcyearmonth', 'binnedutcyearmonthdate', 'binnedutcyearmonthdatehours', 'binnedutcyearmonthdatehoursminutes', 'binnedutcyearmonthdatehoursminutesseconds', 'binnedutcyearweek', 'binnedutcyearweekday', 'binnedutcyearweekdayhours', 'binnedutcyearweekdayhoursminutes', 'binnedutcyearweekdayhoursminutesseconds', 'binnedutcyeardayofyear', 'utcyear', 'utcquarter', 'utcmonth', 'utcweek', 'utcday', 'utcdayofyear', 'utcdate', 'utchours', 'utcminutes', 'utcseconds', 'utcmilliseconds', 'year', 'quarter', 'month', 'week', 'day', 'dayofyear', 'date', 'hours', 'minutes', 'seconds', 'milliseconds', 'utcyearquarter', 'utcyearquartermonth', 'utcyearmonth', 'utcyearmonthdate', 'utcyearmonthdatehours', 'utcyearmonthdatehoursminutes', 'utcyearmonthdatehoursminutesseconds', 'utcyearweek', 'utcyearweekday', 'utcyearweekdayhours', 'utcyearweekdayhoursminutes', 'utcyearweekdayhoursminutesseconds', 'utcyeardayofyear', 'utcquartermonth', 'utcmonthdate', 'utcmonthdatehours', 'utcmonthdatehoursminutes', 'utcmonthdatehoursminutesseconds', 'utcweekday', 'utcweekdayhours', 'utcweekdayhoursminutes', 'utcweekdayhoursminutesseconds', 'utcdayhours', 'utcdayhoursminutes', 'utcdayhoursminutesseconds', 'utchoursminutes', 'utchoursminutesseconds', 'utcminutesseconds', 'utcsecondsmilliseconds', 'yearquarter', 'yearquartermonth', 'yearmonth', 'yearmonthdate', 'yearmonthdatehours', 'yearmonthdatehoursminutes', 'yearmonthdatehoursminutesseconds', 'yearweek', 'yearweekday', 'yearweekdayhours', 'yearweekdayhoursminutes', 'yearweekdayhoursminutesseconds', 'yeardayofyear', 'quartermonth', 'monthdate', 'monthdatehours', 'monthdatehoursminutes', 'monthdatehoursminutesseconds', 'weekday', 'weekdayhours', 'weekdayhoursminutes', 'weekdayhoursminutesseconds', 'dayhours', 'dayhoursminutes', 'dayhoursminutesseconds', 'hoursminutes', 'hoursminutesseconds', 'minutesseconds', 'secondsmilliseconds']
Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours``) for a temporal
field. or `a temporal field that gets casted as ordinal
`__.
@@ -18238,7 +18238,7 @@ class Scale(VegaLiteSchema):
snapping to the pixel grid.
**Default value:** ``false``.
- scheme : dict, :class:`ExprRef`, :class:`Cyclical`, :class:`Diverging`, :class:`Categorical`, :class:`ColorScheme`, :class:`SchemeParams`, :class:`SequentialMultiHue`, :class:`SequentialSingleHue`, Literal['accent', 'category10', 'category20', 'category20b', 'category20c', 'dark2', 'paired', 'pastel1', 'pastel2', 'set1', 'set2', 'set3', 'tableau10', 'tableau20', 'blueorange', 'blueorange-3', 'blueorange-4', 'blueorange-5', 'blueorange-6', 'blueorange-7', 'blueorange-8', 'blueorange-9', 'blueorange-10', 'blueorange-11', 'brownbluegreen', 'brownbluegreen-3', 'brownbluegreen-4', 'brownbluegreen-5', 'brownbluegreen-6', 'brownbluegreen-7', 'brownbluegreen-8', 'brownbluegreen-9', 'brownbluegreen-10', 'brownbluegreen-11', 'purplegreen', 'purplegreen-3', 'purplegreen-4', 'purplegreen-5', 'purplegreen-6', 'purplegreen-7', 'purplegreen-8', 'purplegreen-9', 'purplegreen-10', 'purplegreen-11', 'pinkyellowgreen', 'pinkyellowgreen-3', 'pinkyellowgreen-4', 'pinkyellowgreen-5', 'pinkyellowgreen-6', 'pinkyellowgreen-7', 'pinkyellowgreen-8', 'pinkyellowgreen-9', 'pinkyellowgreen-10', 'pinkyellowgreen-11', 'purpleorange', 'purpleorange-3', 'purpleorange-4', 'purpleorange-5', 'purpleorange-6', 'purpleorange-7', 'purpleorange-8', 'purpleorange-9', 'purpleorange-10', 'purpleorange-11', 'redblue', 'redblue-3', 'redblue-4', 'redblue-5', 'redblue-6', 'redblue-7', 'redblue-8', 'redblue-9', 'redblue-10', 'redblue-11', 'redgrey', 'redgrey-3', 'redgrey-4', 'redgrey-5', 'redgrey-6', 'redgrey-7', 'redgrey-8', 'redgrey-9', 'redgrey-10', 'redgrey-11', 'redyellowblue', 'redyellowblue-3', 'redyellowblue-4', 'redyellowblue-5', 'redyellowblue-6', 'redyellowblue-7', 'redyellowblue-8', 'redyellowblue-9', 'redyellowblue-10', 'redyellowblue-11', 'redyellowgreen', 'redyellowgreen-3', 'redyellowgreen-4', 'redyellowgreen-5', 'redyellowgreen-6', 'redyellowgreen-7', 'redyellowgreen-8', 'redyellowgreen-9', 'redyellowgreen-10', 'redyellowgreen-11', 'spectral', 'spectral-3', 'spectral-4', 'spectral-5', 'spectral-6', 'spectral-7', 'spectral-8', 'spectral-9', 'spectral-10', 'spectral-11', 'blues', 'tealblues', 'teals', 'greens', 'browns', 'greys', 'purples', 'warmgreys', 'reds', 'oranges', 'rainbow', 'sinebow', 'turbo', 'viridis', 'inferno', 'magma', 'plasma', 'cividis', 'bluegreen', 'bluegreen-3', 'bluegreen-4', 'bluegreen-5', 'bluegreen-6', 'bluegreen-7', 'bluegreen-8', 'bluegreen-9', 'bluepurple', 'bluepurple-3', 'bluepurple-4', 'bluepurple-5', 'bluepurple-6', 'bluepurple-7', 'bluepurple-8', 'bluepurple-9', 'goldgreen', 'goldgreen-3', 'goldgreen-4', 'goldgreen-5', 'goldgreen-6', 'goldgreen-7', 'goldgreen-8', 'goldgreen-9', 'goldorange', 'goldorange-3', 'goldorange-4', 'goldorange-5', 'goldorange-6', 'goldorange-7', 'goldorange-8', 'goldorange-9', 'goldred', 'goldred-3', 'goldred-4', 'goldred-5', 'goldred-6', 'goldred-7', 'goldred-8', 'goldred-9', 'greenblue', 'greenblue-3', 'greenblue-4', 'greenblue-5', 'greenblue-6', 'greenblue-7', 'greenblue-8', 'greenblue-9', 'orangered', 'orangered-3', 'orangered-4', 'orangered-5', 'orangered-6', 'orangered-7', 'orangered-8', 'orangered-9', 'purplebluegreen', 'purplebluegreen-3', 'purplebluegreen-4', 'purplebluegreen-5', 'purplebluegreen-6', 'purplebluegreen-7', 'purplebluegreen-8', 'purplebluegreen-9', 'purpleblue', 'purpleblue-3', 'purpleblue-4', 'purpleblue-5', 'purpleblue-6', 'purpleblue-7', 'purpleblue-8', 'purpleblue-9', 'purplered', 'purplered-3', 'purplered-4', 'purplered-5', 'purplered-6', 'purplered-7', 'purplered-8', 'purplered-9', 'redpurple', 'redpurple-3', 'redpurple-4', 'redpurple-5', 'redpurple-6', 'redpurple-7', 'redpurple-8', 'redpurple-9', 'yellowgreenblue', 'yellowgreenblue-3', 'yellowgreenblue-4', 'yellowgreenblue-5', 'yellowgreenblue-6', 'yellowgreenblue-7', 'yellowgreenblue-8', 'yellowgreenblue-9', 'yellowgreen', 'yellowgreen-3', 'yellowgreen-4', 'yellowgreen-5', 'yellowgreen-6', 'yellowgreen-7', 'yellowgreen-8', 'yellowgreen-9', 'yelloworangebrown', 'yelloworangebrown-3', 'yelloworangebrown-4', 'yelloworangebrown-5', 'yelloworangebrown-6', 'yelloworangebrown-7', 'yelloworangebrown-8', 'yelloworangebrown-9', 'yelloworangered', 'yelloworangered-3', 'yelloworangered-4', 'yelloworangered-5', 'yelloworangered-6', 'yelloworangered-7', 'yelloworangered-8', 'yelloworangered-9', 'darkblue', 'darkblue-3', 'darkblue-4', 'darkblue-5', 'darkblue-6', 'darkblue-7', 'darkblue-8', 'darkblue-9', 'darkgold', 'darkgold-3', 'darkgold-4', 'darkgold-5', 'darkgold-6', 'darkgold-7', 'darkgold-8', 'darkgold-9', 'darkgreen', 'darkgreen-3', 'darkgreen-4', 'darkgreen-5', 'darkgreen-6', 'darkgreen-7', 'darkgreen-8', 'darkgreen-9', 'darkmulti', 'darkmulti-3', 'darkmulti-4', 'darkmulti-5', 'darkmulti-6', 'darkmulti-7', 'darkmulti-8', 'darkmulti-9', 'darkred', 'darkred-3', 'darkred-4', 'darkred-5', 'darkred-6', 'darkred-7', 'darkred-8', 'darkred-9', 'lightgreyred', 'lightgreyred-3', 'lightgreyred-4', 'lightgreyred-5', 'lightgreyred-6', 'lightgreyred-7', 'lightgreyred-8', 'lightgreyred-9', 'lightgreyteal', 'lightgreyteal-3', 'lightgreyteal-4', 'lightgreyteal-5', 'lightgreyteal-6', 'lightgreyteal-7', 'lightgreyteal-8', 'lightgreyteal-9', 'lightmulti', 'lightmulti-3', 'lightmulti-4', 'lightmulti-5', 'lightmulti-6', 'lightmulti-7', 'lightmulti-8', 'lightmulti-9', 'lightorange', 'lightorange-3', 'lightorange-4', 'lightorange-5', 'lightorange-6', 'lightorange-7', 'lightorange-8', 'lightorange-9', 'lighttealblue', 'lighttealblue-3', 'lighttealblue-4', 'lighttealblue-5', 'lighttealblue-6', 'lighttealblue-7', 'lighttealblue-8', 'lighttealblue-9']
+ scheme : dict, :class:`ExprRef`, :class:`Cyclical`, :class:`Diverging`, :class:`Categorical`, :class:`ColorScheme`, :class:`SchemeParams`, :class:`SequentialMultiHue`, :class:`SequentialSingleHue`, Literal['accent', 'category10', 'category20', 'category20b', 'category20c', 'dark2', 'paired', 'pastel1', 'pastel2', 'set1', 'set2', 'set3', 'tableau10', 'tableau20', 'observable10', 'blueorange', 'blueorange-3', 'blueorange-4', 'blueorange-5', 'blueorange-6', 'blueorange-7', 'blueorange-8', 'blueorange-9', 'blueorange-10', 'blueorange-11', 'brownbluegreen', 'brownbluegreen-3', 'brownbluegreen-4', 'brownbluegreen-5', 'brownbluegreen-6', 'brownbluegreen-7', 'brownbluegreen-8', 'brownbluegreen-9', 'brownbluegreen-10', 'brownbluegreen-11', 'purplegreen', 'purplegreen-3', 'purplegreen-4', 'purplegreen-5', 'purplegreen-6', 'purplegreen-7', 'purplegreen-8', 'purplegreen-9', 'purplegreen-10', 'purplegreen-11', 'pinkyellowgreen', 'pinkyellowgreen-3', 'pinkyellowgreen-4', 'pinkyellowgreen-5', 'pinkyellowgreen-6', 'pinkyellowgreen-7', 'pinkyellowgreen-8', 'pinkyellowgreen-9', 'pinkyellowgreen-10', 'pinkyellowgreen-11', 'purpleorange', 'purpleorange-3', 'purpleorange-4', 'purpleorange-5', 'purpleorange-6', 'purpleorange-7', 'purpleorange-8', 'purpleorange-9', 'purpleorange-10', 'purpleorange-11', 'redblue', 'redblue-3', 'redblue-4', 'redblue-5', 'redblue-6', 'redblue-7', 'redblue-8', 'redblue-9', 'redblue-10', 'redblue-11', 'redgrey', 'redgrey-3', 'redgrey-4', 'redgrey-5', 'redgrey-6', 'redgrey-7', 'redgrey-8', 'redgrey-9', 'redgrey-10', 'redgrey-11', 'redyellowblue', 'redyellowblue-3', 'redyellowblue-4', 'redyellowblue-5', 'redyellowblue-6', 'redyellowblue-7', 'redyellowblue-8', 'redyellowblue-9', 'redyellowblue-10', 'redyellowblue-11', 'redyellowgreen', 'redyellowgreen-3', 'redyellowgreen-4', 'redyellowgreen-5', 'redyellowgreen-6', 'redyellowgreen-7', 'redyellowgreen-8', 'redyellowgreen-9', 'redyellowgreen-10', 'redyellowgreen-11', 'spectral', 'spectral-3', 'spectral-4', 'spectral-5', 'spectral-6', 'spectral-7', 'spectral-8', 'spectral-9', 'spectral-10', 'spectral-11', 'blues', 'tealblues', 'teals', 'greens', 'browns', 'greys', 'purples', 'warmgreys', 'reds', 'oranges', 'rainbow', 'sinebow', 'turbo', 'viridis', 'inferno', 'magma', 'plasma', 'cividis', 'bluegreen', 'bluegreen-3', 'bluegreen-4', 'bluegreen-5', 'bluegreen-6', 'bluegreen-7', 'bluegreen-8', 'bluegreen-9', 'bluepurple', 'bluepurple-3', 'bluepurple-4', 'bluepurple-5', 'bluepurple-6', 'bluepurple-7', 'bluepurple-8', 'bluepurple-9', 'goldgreen', 'goldgreen-3', 'goldgreen-4', 'goldgreen-5', 'goldgreen-6', 'goldgreen-7', 'goldgreen-8', 'goldgreen-9', 'goldorange', 'goldorange-3', 'goldorange-4', 'goldorange-5', 'goldorange-6', 'goldorange-7', 'goldorange-8', 'goldorange-9', 'goldred', 'goldred-3', 'goldred-4', 'goldred-5', 'goldred-6', 'goldred-7', 'goldred-8', 'goldred-9', 'greenblue', 'greenblue-3', 'greenblue-4', 'greenblue-5', 'greenblue-6', 'greenblue-7', 'greenblue-8', 'greenblue-9', 'orangered', 'orangered-3', 'orangered-4', 'orangered-5', 'orangered-6', 'orangered-7', 'orangered-8', 'orangered-9', 'purplebluegreen', 'purplebluegreen-3', 'purplebluegreen-4', 'purplebluegreen-5', 'purplebluegreen-6', 'purplebluegreen-7', 'purplebluegreen-8', 'purplebluegreen-9', 'purpleblue', 'purpleblue-3', 'purpleblue-4', 'purpleblue-5', 'purpleblue-6', 'purpleblue-7', 'purpleblue-8', 'purpleblue-9', 'purplered', 'purplered-3', 'purplered-4', 'purplered-5', 'purplered-6', 'purplered-7', 'purplered-8', 'purplered-9', 'redpurple', 'redpurple-3', 'redpurple-4', 'redpurple-5', 'redpurple-6', 'redpurple-7', 'redpurple-8', 'redpurple-9', 'yellowgreenblue', 'yellowgreenblue-3', 'yellowgreenblue-4', 'yellowgreenblue-5', 'yellowgreenblue-6', 'yellowgreenblue-7', 'yellowgreenblue-8', 'yellowgreenblue-9', 'yellowgreen', 'yellowgreen-3', 'yellowgreen-4', 'yellowgreen-5', 'yellowgreen-6', 'yellowgreen-7', 'yellowgreen-8', 'yellowgreen-9', 'yelloworangebrown', 'yelloworangebrown-3', 'yelloworangebrown-4', 'yelloworangebrown-5', 'yelloworangebrown-6', 'yelloworangebrown-7', 'yelloworangebrown-8', 'yelloworangebrown-9', 'yelloworangered', 'yelloworangered-3', 'yelloworangered-4', 'yelloworangered-5', 'yelloworangered-6', 'yelloworangered-7', 'yelloworangered-8', 'yelloworangered-9', 'darkblue', 'darkblue-3', 'darkblue-4', 'darkblue-5', 'darkblue-6', 'darkblue-7', 'darkblue-8', 'darkblue-9', 'darkgold', 'darkgold-3', 'darkgold-4', 'darkgold-5', 'darkgold-6', 'darkgold-7', 'darkgold-8', 'darkgold-9', 'darkgreen', 'darkgreen-3', 'darkgreen-4', 'darkgreen-5', 'darkgreen-6', 'darkgreen-7', 'darkgreen-8', 'darkgreen-9', 'darkmulti', 'darkmulti-3', 'darkmulti-4', 'darkmulti-5', 'darkmulti-6', 'darkmulti-7', 'darkmulti-8', 'darkmulti-9', 'darkred', 'darkred-3', 'darkred-4', 'darkred-5', 'darkred-6', 'darkred-7', 'darkred-8', 'darkred-9', 'lightgreyred', 'lightgreyred-3', 'lightgreyred-4', 'lightgreyred-5', 'lightgreyred-6', 'lightgreyred-7', 'lightgreyred-8', 'lightgreyred-9', 'lightgreyteal', 'lightgreyteal-3', 'lightgreyteal-4', 'lightgreyteal-5', 'lightgreyteal-6', 'lightgreyteal-7', 'lightgreyteal-8', 'lightgreyteal-9', 'lightmulti', 'lightmulti-3', 'lightmulti-4', 'lightmulti-5', 'lightmulti-6', 'lightmulti-7', 'lightmulti-8', 'lightmulti-9', 'lightorange', 'lightorange-3', 'lightorange-4', 'lightorange-5', 'lightorange-6', 'lightorange-7', 'lightorange-8', 'lightorange-9', 'lighttealblue', 'lighttealblue-3', 'lighttealblue-4', 'lighttealblue-5', 'lighttealblue-6', 'lighttealblue-7', 'lighttealblue-8', 'lighttealblue-9']
A string indicating a color `scheme
`__ name (e.g.,
``"category10"`` or ``"blues"``) or a `scheme parameter object
@@ -18888,7 +18888,7 @@ class ScaleFieldDef(OffsetDef):
**See also:** `sort `__
documentation.
- timeUnit : dict, :class:`TimeUnit`, :class:`MultiTimeUnit`, :class:`BinnedTimeUnit`, :class:`SingleTimeUnit`, :class:`TimeUnitParams`, :class:`UtcMultiTimeUnit`, :class:`UtcSingleTimeUnit`, :class:`LocalMultiTimeUnit`, :class:`LocalSingleTimeUnit`, Literal['binnedutcyear', 'binnedutcyearquarter', 'binnedutcyearquartermonth', 'binnedutcyearmonth', 'binnedutcyearmonthdate', 'binnedutcyearmonthdatehours', 'binnedutcyearmonthdatehoursminutes', 'binnedutcyearmonthdatehoursminutesseconds', 'binnedutcyearweek', 'binnedutcyearweekday', 'binnedutcyearweekdayhours', 'binnedutcyearweekdayhoursminutes', 'binnedutcyearweekdayhoursminutesseconds', 'binnedutcyeardayofyear', 'binnedyear', 'binnedyearquarter', 'binnedyearquartermonth', 'binnedyearmonth', 'binnedyearmonthdate', 'binnedyearmonthdatehours', 'binnedyearmonthdatehoursminutes', 'binnedyearmonthdatehoursminutesseconds', 'binnedyearweek', 'binnedyearweekday', 'binnedyearweekdayhours', 'binnedyearweekdayhoursminutes', 'binnedyearweekdayhoursminutesseconds', 'binnedyeardayofyear', 'utcyear', 'utcquarter', 'utcmonth', 'utcweek', 'utcday', 'utcdayofyear', 'utcdate', 'utchours', 'utcminutes', 'utcseconds', 'utcmilliseconds', 'year', 'quarter', 'month', 'week', 'day', 'dayofyear', 'date', 'hours', 'minutes', 'seconds', 'milliseconds', 'utcyearquarter', 'utcyearquartermonth', 'utcyearmonth', 'utcyearmonthdate', 'utcyearmonthdatehours', 'utcyearmonthdatehoursminutes', 'utcyearmonthdatehoursminutesseconds', 'utcyearweek', 'utcyearweekday', 'utcyearweekdayhours', 'utcyearweekdayhoursminutes', 'utcyearweekdayhoursminutesseconds', 'utcyeardayofyear', 'utcquartermonth', 'utcmonthdate', 'utcmonthdatehours', 'utcmonthdatehoursminutes', 'utcmonthdatehoursminutesseconds', 'utcweekday', 'utcweekdayhours', 'utcweekdayhoursminutes', 'utcweekdayhoursminutesseconds', 'utcdayhours', 'utcdayhoursminutes', 'utcdayhoursminutesseconds', 'utchoursminutes', 'utchoursminutesseconds', 'utcminutesseconds', 'utcsecondsmilliseconds', 'yearquarter', 'yearquartermonth', 'yearmonth', 'yearmonthdate', 'yearmonthdatehours', 'yearmonthdatehoursminutes', 'yearmonthdatehoursminutesseconds', 'yearweek', 'yearweekday', 'yearweekdayhours', 'yearweekdayhoursminutes', 'yearweekdayhoursminutesseconds', 'yeardayofyear', 'quartermonth', 'monthdate', 'monthdatehours', 'monthdatehoursminutes', 'monthdatehoursminutesseconds', 'weekday', 'weekdayhours', 'weekdayhoursminutes', 'weekdayhoursminutesseconds', 'dayhours', 'dayhoursminutes', 'dayhoursminutesseconds', 'hoursminutes', 'hoursminutesseconds', 'minutesseconds', 'secondsmilliseconds']
+ timeUnit : dict, :class:`TimeUnit`, :class:`MultiTimeUnit`, :class:`BinnedTimeUnit`, :class:`SingleTimeUnit`, :class:`TimeUnitParams`, :class:`UtcMultiTimeUnit`, :class:`UtcSingleTimeUnit`, :class:`LocalMultiTimeUnit`, :class:`LocalSingleTimeUnit`, Literal['binnedyear', 'binnedyearquarter', 'binnedyearquartermonth', 'binnedyearmonth', 'binnedyearmonthdate', 'binnedyearmonthdatehours', 'binnedyearmonthdatehoursminutes', 'binnedyearmonthdatehoursminutesseconds', 'binnedyearweek', 'binnedyearweekday', 'binnedyearweekdayhours', 'binnedyearweekdayhoursminutes', 'binnedyearweekdayhoursminutesseconds', 'binnedyeardayofyear', 'binnedutcyear', 'binnedutcyearquarter', 'binnedutcyearquartermonth', 'binnedutcyearmonth', 'binnedutcyearmonthdate', 'binnedutcyearmonthdatehours', 'binnedutcyearmonthdatehoursminutes', 'binnedutcyearmonthdatehoursminutesseconds', 'binnedutcyearweek', 'binnedutcyearweekday', 'binnedutcyearweekdayhours', 'binnedutcyearweekdayhoursminutes', 'binnedutcyearweekdayhoursminutesseconds', 'binnedutcyeardayofyear', 'utcyear', 'utcquarter', 'utcmonth', 'utcweek', 'utcday', 'utcdayofyear', 'utcdate', 'utchours', 'utcminutes', 'utcseconds', 'utcmilliseconds', 'year', 'quarter', 'month', 'week', 'day', 'dayofyear', 'date', 'hours', 'minutes', 'seconds', 'milliseconds', 'utcyearquarter', 'utcyearquartermonth', 'utcyearmonth', 'utcyearmonthdate', 'utcyearmonthdatehours', 'utcyearmonthdatehoursminutes', 'utcyearmonthdatehoursminutesseconds', 'utcyearweek', 'utcyearweekday', 'utcyearweekdayhours', 'utcyearweekdayhoursminutes', 'utcyearweekdayhoursminutesseconds', 'utcyeardayofyear', 'utcquartermonth', 'utcmonthdate', 'utcmonthdatehours', 'utcmonthdatehoursminutes', 'utcmonthdatehoursminutesseconds', 'utcweekday', 'utcweekdayhours', 'utcweekdayhoursminutes', 'utcweekdayhoursminutesseconds', 'utcdayhours', 'utcdayhoursminutes', 'utcdayhoursminutesseconds', 'utchoursminutes', 'utchoursminutesseconds', 'utcminutesseconds', 'utcsecondsmilliseconds', 'yearquarter', 'yearquartermonth', 'yearmonth', 'yearmonthdate', 'yearmonthdatehours', 'yearmonthdatehoursminutes', 'yearmonthdatehoursminutesseconds', 'yearweek', 'yearweekday', 'yearweekdayhours', 'yearweekdayhoursminutes', 'yearweekdayhoursminutesseconds', 'yeardayofyear', 'quartermonth', 'monthdate', 'monthdatehours', 'monthdatehoursminutes', 'monthdatehoursminutesseconds', 'weekday', 'weekdayhours', 'weekdayhoursminutes', 'weekdayhoursminutesseconds', 'dayhours', 'dayhoursminutes', 'dayhoursminutesseconds', 'hoursminutes', 'hoursminutesseconds', 'minutesseconds', 'secondsmilliseconds']
Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours``) for a temporal
field. or `a temporal field that gets casted as ordinal
`__.
@@ -19748,7 +19748,7 @@ class SchemeParams(VegaLiteSchema):
Parameters
----------
- name : :class:`Cyclical`, :class:`Diverging`, :class:`Categorical`, :class:`ColorScheme`, :class:`SequentialMultiHue`, :class:`SequentialSingleHue`, Literal['accent', 'category10', 'category20', 'category20b', 'category20c', 'dark2', 'paired', 'pastel1', 'pastel2', 'set1', 'set2', 'set3', 'tableau10', 'tableau20', 'blueorange', 'blueorange-3', 'blueorange-4', 'blueorange-5', 'blueorange-6', 'blueorange-7', 'blueorange-8', 'blueorange-9', 'blueorange-10', 'blueorange-11', 'brownbluegreen', 'brownbluegreen-3', 'brownbluegreen-4', 'brownbluegreen-5', 'brownbluegreen-6', 'brownbluegreen-7', 'brownbluegreen-8', 'brownbluegreen-9', 'brownbluegreen-10', 'brownbluegreen-11', 'purplegreen', 'purplegreen-3', 'purplegreen-4', 'purplegreen-5', 'purplegreen-6', 'purplegreen-7', 'purplegreen-8', 'purplegreen-9', 'purplegreen-10', 'purplegreen-11', 'pinkyellowgreen', 'pinkyellowgreen-3', 'pinkyellowgreen-4', 'pinkyellowgreen-5', 'pinkyellowgreen-6', 'pinkyellowgreen-7', 'pinkyellowgreen-8', 'pinkyellowgreen-9', 'pinkyellowgreen-10', 'pinkyellowgreen-11', 'purpleorange', 'purpleorange-3', 'purpleorange-4', 'purpleorange-5', 'purpleorange-6', 'purpleorange-7', 'purpleorange-8', 'purpleorange-9', 'purpleorange-10', 'purpleorange-11', 'redblue', 'redblue-3', 'redblue-4', 'redblue-5', 'redblue-6', 'redblue-7', 'redblue-8', 'redblue-9', 'redblue-10', 'redblue-11', 'redgrey', 'redgrey-3', 'redgrey-4', 'redgrey-5', 'redgrey-6', 'redgrey-7', 'redgrey-8', 'redgrey-9', 'redgrey-10', 'redgrey-11', 'redyellowblue', 'redyellowblue-3', 'redyellowblue-4', 'redyellowblue-5', 'redyellowblue-6', 'redyellowblue-7', 'redyellowblue-8', 'redyellowblue-9', 'redyellowblue-10', 'redyellowblue-11', 'redyellowgreen', 'redyellowgreen-3', 'redyellowgreen-4', 'redyellowgreen-5', 'redyellowgreen-6', 'redyellowgreen-7', 'redyellowgreen-8', 'redyellowgreen-9', 'redyellowgreen-10', 'redyellowgreen-11', 'spectral', 'spectral-3', 'spectral-4', 'spectral-5', 'spectral-6', 'spectral-7', 'spectral-8', 'spectral-9', 'spectral-10', 'spectral-11', 'blues', 'tealblues', 'teals', 'greens', 'browns', 'greys', 'purples', 'warmgreys', 'reds', 'oranges', 'rainbow', 'sinebow', 'turbo', 'viridis', 'inferno', 'magma', 'plasma', 'cividis', 'bluegreen', 'bluegreen-3', 'bluegreen-4', 'bluegreen-5', 'bluegreen-6', 'bluegreen-7', 'bluegreen-8', 'bluegreen-9', 'bluepurple', 'bluepurple-3', 'bluepurple-4', 'bluepurple-5', 'bluepurple-6', 'bluepurple-7', 'bluepurple-8', 'bluepurple-9', 'goldgreen', 'goldgreen-3', 'goldgreen-4', 'goldgreen-5', 'goldgreen-6', 'goldgreen-7', 'goldgreen-8', 'goldgreen-9', 'goldorange', 'goldorange-3', 'goldorange-4', 'goldorange-5', 'goldorange-6', 'goldorange-7', 'goldorange-8', 'goldorange-9', 'goldred', 'goldred-3', 'goldred-4', 'goldred-5', 'goldred-6', 'goldred-7', 'goldred-8', 'goldred-9', 'greenblue', 'greenblue-3', 'greenblue-4', 'greenblue-5', 'greenblue-6', 'greenblue-7', 'greenblue-8', 'greenblue-9', 'orangered', 'orangered-3', 'orangered-4', 'orangered-5', 'orangered-6', 'orangered-7', 'orangered-8', 'orangered-9', 'purplebluegreen', 'purplebluegreen-3', 'purplebluegreen-4', 'purplebluegreen-5', 'purplebluegreen-6', 'purplebluegreen-7', 'purplebluegreen-8', 'purplebluegreen-9', 'purpleblue', 'purpleblue-3', 'purpleblue-4', 'purpleblue-5', 'purpleblue-6', 'purpleblue-7', 'purpleblue-8', 'purpleblue-9', 'purplered', 'purplered-3', 'purplered-4', 'purplered-5', 'purplered-6', 'purplered-7', 'purplered-8', 'purplered-9', 'redpurple', 'redpurple-3', 'redpurple-4', 'redpurple-5', 'redpurple-6', 'redpurple-7', 'redpurple-8', 'redpurple-9', 'yellowgreenblue', 'yellowgreenblue-3', 'yellowgreenblue-4', 'yellowgreenblue-5', 'yellowgreenblue-6', 'yellowgreenblue-7', 'yellowgreenblue-8', 'yellowgreenblue-9', 'yellowgreen', 'yellowgreen-3', 'yellowgreen-4', 'yellowgreen-5', 'yellowgreen-6', 'yellowgreen-7', 'yellowgreen-8', 'yellowgreen-9', 'yelloworangebrown', 'yelloworangebrown-3', 'yelloworangebrown-4', 'yelloworangebrown-5', 'yelloworangebrown-6', 'yelloworangebrown-7', 'yelloworangebrown-8', 'yelloworangebrown-9', 'yelloworangered', 'yelloworangered-3', 'yelloworangered-4', 'yelloworangered-5', 'yelloworangered-6', 'yelloworangered-7', 'yelloworangered-8', 'yelloworangered-9', 'darkblue', 'darkblue-3', 'darkblue-4', 'darkblue-5', 'darkblue-6', 'darkblue-7', 'darkblue-8', 'darkblue-9', 'darkgold', 'darkgold-3', 'darkgold-4', 'darkgold-5', 'darkgold-6', 'darkgold-7', 'darkgold-8', 'darkgold-9', 'darkgreen', 'darkgreen-3', 'darkgreen-4', 'darkgreen-5', 'darkgreen-6', 'darkgreen-7', 'darkgreen-8', 'darkgreen-9', 'darkmulti', 'darkmulti-3', 'darkmulti-4', 'darkmulti-5', 'darkmulti-6', 'darkmulti-7', 'darkmulti-8', 'darkmulti-9', 'darkred', 'darkred-3', 'darkred-4', 'darkred-5', 'darkred-6', 'darkred-7', 'darkred-8', 'darkred-9', 'lightgreyred', 'lightgreyred-3', 'lightgreyred-4', 'lightgreyred-5', 'lightgreyred-6', 'lightgreyred-7', 'lightgreyred-8', 'lightgreyred-9', 'lightgreyteal', 'lightgreyteal-3', 'lightgreyteal-4', 'lightgreyteal-5', 'lightgreyteal-6', 'lightgreyteal-7', 'lightgreyteal-8', 'lightgreyteal-9', 'lightmulti', 'lightmulti-3', 'lightmulti-4', 'lightmulti-5', 'lightmulti-6', 'lightmulti-7', 'lightmulti-8', 'lightmulti-9', 'lightorange', 'lightorange-3', 'lightorange-4', 'lightorange-5', 'lightorange-6', 'lightorange-7', 'lightorange-8', 'lightorange-9', 'lighttealblue', 'lighttealblue-3', 'lighttealblue-4', 'lighttealblue-5', 'lighttealblue-6', 'lighttealblue-7', 'lighttealblue-8', 'lighttealblue-9']
+ name : :class:`Cyclical`, :class:`Diverging`, :class:`Categorical`, :class:`ColorScheme`, :class:`SequentialMultiHue`, :class:`SequentialSingleHue`, Literal['accent', 'category10', 'category20', 'category20b', 'category20c', 'dark2', 'paired', 'pastel1', 'pastel2', 'set1', 'set2', 'set3', 'tableau10', 'tableau20', 'observable10', 'blueorange', 'blueorange-3', 'blueorange-4', 'blueorange-5', 'blueorange-6', 'blueorange-7', 'blueorange-8', 'blueorange-9', 'blueorange-10', 'blueorange-11', 'brownbluegreen', 'brownbluegreen-3', 'brownbluegreen-4', 'brownbluegreen-5', 'brownbluegreen-6', 'brownbluegreen-7', 'brownbluegreen-8', 'brownbluegreen-9', 'brownbluegreen-10', 'brownbluegreen-11', 'purplegreen', 'purplegreen-3', 'purplegreen-4', 'purplegreen-5', 'purplegreen-6', 'purplegreen-7', 'purplegreen-8', 'purplegreen-9', 'purplegreen-10', 'purplegreen-11', 'pinkyellowgreen', 'pinkyellowgreen-3', 'pinkyellowgreen-4', 'pinkyellowgreen-5', 'pinkyellowgreen-6', 'pinkyellowgreen-7', 'pinkyellowgreen-8', 'pinkyellowgreen-9', 'pinkyellowgreen-10', 'pinkyellowgreen-11', 'purpleorange', 'purpleorange-3', 'purpleorange-4', 'purpleorange-5', 'purpleorange-6', 'purpleorange-7', 'purpleorange-8', 'purpleorange-9', 'purpleorange-10', 'purpleorange-11', 'redblue', 'redblue-3', 'redblue-4', 'redblue-5', 'redblue-6', 'redblue-7', 'redblue-8', 'redblue-9', 'redblue-10', 'redblue-11', 'redgrey', 'redgrey-3', 'redgrey-4', 'redgrey-5', 'redgrey-6', 'redgrey-7', 'redgrey-8', 'redgrey-9', 'redgrey-10', 'redgrey-11', 'redyellowblue', 'redyellowblue-3', 'redyellowblue-4', 'redyellowblue-5', 'redyellowblue-6', 'redyellowblue-7', 'redyellowblue-8', 'redyellowblue-9', 'redyellowblue-10', 'redyellowblue-11', 'redyellowgreen', 'redyellowgreen-3', 'redyellowgreen-4', 'redyellowgreen-5', 'redyellowgreen-6', 'redyellowgreen-7', 'redyellowgreen-8', 'redyellowgreen-9', 'redyellowgreen-10', 'redyellowgreen-11', 'spectral', 'spectral-3', 'spectral-4', 'spectral-5', 'spectral-6', 'spectral-7', 'spectral-8', 'spectral-9', 'spectral-10', 'spectral-11', 'blues', 'tealblues', 'teals', 'greens', 'browns', 'greys', 'purples', 'warmgreys', 'reds', 'oranges', 'rainbow', 'sinebow', 'turbo', 'viridis', 'inferno', 'magma', 'plasma', 'cividis', 'bluegreen', 'bluegreen-3', 'bluegreen-4', 'bluegreen-5', 'bluegreen-6', 'bluegreen-7', 'bluegreen-8', 'bluegreen-9', 'bluepurple', 'bluepurple-3', 'bluepurple-4', 'bluepurple-5', 'bluepurple-6', 'bluepurple-7', 'bluepurple-8', 'bluepurple-9', 'goldgreen', 'goldgreen-3', 'goldgreen-4', 'goldgreen-5', 'goldgreen-6', 'goldgreen-7', 'goldgreen-8', 'goldgreen-9', 'goldorange', 'goldorange-3', 'goldorange-4', 'goldorange-5', 'goldorange-6', 'goldorange-7', 'goldorange-8', 'goldorange-9', 'goldred', 'goldred-3', 'goldred-4', 'goldred-5', 'goldred-6', 'goldred-7', 'goldred-8', 'goldred-9', 'greenblue', 'greenblue-3', 'greenblue-4', 'greenblue-5', 'greenblue-6', 'greenblue-7', 'greenblue-8', 'greenblue-9', 'orangered', 'orangered-3', 'orangered-4', 'orangered-5', 'orangered-6', 'orangered-7', 'orangered-8', 'orangered-9', 'purplebluegreen', 'purplebluegreen-3', 'purplebluegreen-4', 'purplebluegreen-5', 'purplebluegreen-6', 'purplebluegreen-7', 'purplebluegreen-8', 'purplebluegreen-9', 'purpleblue', 'purpleblue-3', 'purpleblue-4', 'purpleblue-5', 'purpleblue-6', 'purpleblue-7', 'purpleblue-8', 'purpleblue-9', 'purplered', 'purplered-3', 'purplered-4', 'purplered-5', 'purplered-6', 'purplered-7', 'purplered-8', 'purplered-9', 'redpurple', 'redpurple-3', 'redpurple-4', 'redpurple-5', 'redpurple-6', 'redpurple-7', 'redpurple-8', 'redpurple-9', 'yellowgreenblue', 'yellowgreenblue-3', 'yellowgreenblue-4', 'yellowgreenblue-5', 'yellowgreenblue-6', 'yellowgreenblue-7', 'yellowgreenblue-8', 'yellowgreenblue-9', 'yellowgreen', 'yellowgreen-3', 'yellowgreen-4', 'yellowgreen-5', 'yellowgreen-6', 'yellowgreen-7', 'yellowgreen-8', 'yellowgreen-9', 'yelloworangebrown', 'yelloworangebrown-3', 'yelloworangebrown-4', 'yelloworangebrown-5', 'yelloworangebrown-6', 'yelloworangebrown-7', 'yelloworangebrown-8', 'yelloworangebrown-9', 'yelloworangered', 'yelloworangered-3', 'yelloworangered-4', 'yelloworangered-5', 'yelloworangered-6', 'yelloworangered-7', 'yelloworangered-8', 'yelloworangered-9', 'darkblue', 'darkblue-3', 'darkblue-4', 'darkblue-5', 'darkblue-6', 'darkblue-7', 'darkblue-8', 'darkblue-9', 'darkgold', 'darkgold-3', 'darkgold-4', 'darkgold-5', 'darkgold-6', 'darkgold-7', 'darkgold-8', 'darkgold-9', 'darkgreen', 'darkgreen-3', 'darkgreen-4', 'darkgreen-5', 'darkgreen-6', 'darkgreen-7', 'darkgreen-8', 'darkgreen-9', 'darkmulti', 'darkmulti-3', 'darkmulti-4', 'darkmulti-5', 'darkmulti-6', 'darkmulti-7', 'darkmulti-8', 'darkmulti-9', 'darkred', 'darkred-3', 'darkred-4', 'darkred-5', 'darkred-6', 'darkred-7', 'darkred-8', 'darkred-9', 'lightgreyred', 'lightgreyred-3', 'lightgreyred-4', 'lightgreyred-5', 'lightgreyred-6', 'lightgreyred-7', 'lightgreyred-8', 'lightgreyred-9', 'lightgreyteal', 'lightgreyteal-3', 'lightgreyteal-4', 'lightgreyteal-5', 'lightgreyteal-6', 'lightgreyteal-7', 'lightgreyteal-8', 'lightgreyteal-9', 'lightmulti', 'lightmulti-3', 'lightmulti-4', 'lightmulti-5', 'lightmulti-6', 'lightmulti-7', 'lightmulti-8', 'lightmulti-9', 'lightorange', 'lightorange-3', 'lightorange-4', 'lightorange-5', 'lightorange-6', 'lightorange-7', 'lightorange-8', 'lightorange-9', 'lighttealblue', 'lighttealblue-3', 'lighttealblue-4', 'lighttealblue-5', 'lighttealblue-6', 'lighttealblue-7', 'lighttealblue-8', 'lighttealblue-9']
A color scheme name for ordinal scales (e.g., ``"category10"`` or ``"blues"``).
For the full list of supported schemes, please refer to the `Vega Scheme
@@ -19834,7 +19834,7 @@ class SecondaryFieldDef(Position2Def):
about escaping in the `field documentation
`__. 2) ``field`` is not required
if ``aggregate`` is ``count``.
- timeUnit : dict, :class:`TimeUnit`, :class:`MultiTimeUnit`, :class:`BinnedTimeUnit`, :class:`SingleTimeUnit`, :class:`TimeUnitParams`, :class:`UtcMultiTimeUnit`, :class:`UtcSingleTimeUnit`, :class:`LocalMultiTimeUnit`, :class:`LocalSingleTimeUnit`, Literal['binnedutcyear', 'binnedutcyearquarter', 'binnedutcyearquartermonth', 'binnedutcyearmonth', 'binnedutcyearmonthdate', 'binnedutcyearmonthdatehours', 'binnedutcyearmonthdatehoursminutes', 'binnedutcyearmonthdatehoursminutesseconds', 'binnedutcyearweek', 'binnedutcyearweekday', 'binnedutcyearweekdayhours', 'binnedutcyearweekdayhoursminutes', 'binnedutcyearweekdayhoursminutesseconds', 'binnedutcyeardayofyear', 'binnedyear', 'binnedyearquarter', 'binnedyearquartermonth', 'binnedyearmonth', 'binnedyearmonthdate', 'binnedyearmonthdatehours', 'binnedyearmonthdatehoursminutes', 'binnedyearmonthdatehoursminutesseconds', 'binnedyearweek', 'binnedyearweekday', 'binnedyearweekdayhours', 'binnedyearweekdayhoursminutes', 'binnedyearweekdayhoursminutesseconds', 'binnedyeardayofyear', 'utcyear', 'utcquarter', 'utcmonth', 'utcweek', 'utcday', 'utcdayofyear', 'utcdate', 'utchours', 'utcminutes', 'utcseconds', 'utcmilliseconds', 'year', 'quarter', 'month', 'week', 'day', 'dayofyear', 'date', 'hours', 'minutes', 'seconds', 'milliseconds', 'utcyearquarter', 'utcyearquartermonth', 'utcyearmonth', 'utcyearmonthdate', 'utcyearmonthdatehours', 'utcyearmonthdatehoursminutes', 'utcyearmonthdatehoursminutesseconds', 'utcyearweek', 'utcyearweekday', 'utcyearweekdayhours', 'utcyearweekdayhoursminutes', 'utcyearweekdayhoursminutesseconds', 'utcyeardayofyear', 'utcquartermonth', 'utcmonthdate', 'utcmonthdatehours', 'utcmonthdatehoursminutes', 'utcmonthdatehoursminutesseconds', 'utcweekday', 'utcweekdayhours', 'utcweekdayhoursminutes', 'utcweekdayhoursminutesseconds', 'utcdayhours', 'utcdayhoursminutes', 'utcdayhoursminutesseconds', 'utchoursminutes', 'utchoursminutesseconds', 'utcminutesseconds', 'utcsecondsmilliseconds', 'yearquarter', 'yearquartermonth', 'yearmonth', 'yearmonthdate', 'yearmonthdatehours', 'yearmonthdatehoursminutes', 'yearmonthdatehoursminutesseconds', 'yearweek', 'yearweekday', 'yearweekdayhours', 'yearweekdayhoursminutes', 'yearweekdayhoursminutesseconds', 'yeardayofyear', 'quartermonth', 'monthdate', 'monthdatehours', 'monthdatehoursminutes', 'monthdatehoursminutesseconds', 'weekday', 'weekdayhours', 'weekdayhoursminutes', 'weekdayhoursminutesseconds', 'dayhours', 'dayhoursminutes', 'dayhoursminutesseconds', 'hoursminutes', 'hoursminutesseconds', 'minutesseconds', 'secondsmilliseconds']
+ timeUnit : dict, :class:`TimeUnit`, :class:`MultiTimeUnit`, :class:`BinnedTimeUnit`, :class:`SingleTimeUnit`, :class:`TimeUnitParams`, :class:`UtcMultiTimeUnit`, :class:`UtcSingleTimeUnit`, :class:`LocalMultiTimeUnit`, :class:`LocalSingleTimeUnit`, Literal['binnedyear', 'binnedyearquarter', 'binnedyearquartermonth', 'binnedyearmonth', 'binnedyearmonthdate', 'binnedyearmonthdatehours', 'binnedyearmonthdatehoursminutes', 'binnedyearmonthdatehoursminutesseconds', 'binnedyearweek', 'binnedyearweekday', 'binnedyearweekdayhours', 'binnedyearweekdayhoursminutes', 'binnedyearweekdayhoursminutesseconds', 'binnedyeardayofyear', 'binnedutcyear', 'binnedutcyearquarter', 'binnedutcyearquartermonth', 'binnedutcyearmonth', 'binnedutcyearmonthdate', 'binnedutcyearmonthdatehours', 'binnedutcyearmonthdatehoursminutes', 'binnedutcyearmonthdatehoursminutesseconds', 'binnedutcyearweek', 'binnedutcyearweekday', 'binnedutcyearweekdayhours', 'binnedutcyearweekdayhoursminutes', 'binnedutcyearweekdayhoursminutesseconds', 'binnedutcyeardayofyear', 'utcyear', 'utcquarter', 'utcmonth', 'utcweek', 'utcday', 'utcdayofyear', 'utcdate', 'utchours', 'utcminutes', 'utcseconds', 'utcmilliseconds', 'year', 'quarter', 'month', 'week', 'day', 'dayofyear', 'date', 'hours', 'minutes', 'seconds', 'milliseconds', 'utcyearquarter', 'utcyearquartermonth', 'utcyearmonth', 'utcyearmonthdate', 'utcyearmonthdatehours', 'utcyearmonthdatehoursminutes', 'utcyearmonthdatehoursminutesseconds', 'utcyearweek', 'utcyearweekday', 'utcyearweekdayhours', 'utcyearweekdayhoursminutes', 'utcyearweekdayhoursminutesseconds', 'utcyeardayofyear', 'utcquartermonth', 'utcmonthdate', 'utcmonthdatehours', 'utcmonthdatehoursminutes', 'utcmonthdatehoursminutesseconds', 'utcweekday', 'utcweekdayhours', 'utcweekdayhoursminutes', 'utcweekdayhoursminutesseconds', 'utcdayhours', 'utcdayhoursminutes', 'utcdayhoursminutesseconds', 'utchoursminutes', 'utchoursminutesseconds', 'utcminutesseconds', 'utcsecondsmilliseconds', 'yearquarter', 'yearquartermonth', 'yearmonth', 'yearmonthdate', 'yearmonthdatehours', 'yearmonthdatehoursminutes', 'yearmonthdatehoursminutesseconds', 'yearweek', 'yearweekday', 'yearweekdayhours', 'yearweekdayhoursminutes', 'yearweekdayhoursminutesseconds', 'yeardayofyear', 'quartermonth', 'monthdate', 'monthdatehours', 'monthdatehoursminutes', 'monthdatehoursminutesseconds', 'weekday', 'weekdayhours', 'weekdayhoursminutes', 'weekdayhoursminutesseconds', 'dayhours', 'dayhoursminutes', 'dayhoursminutesseconds', 'hoursminutes', 'hoursminutesseconds', 'minutesseconds', 'secondsmilliseconds']
Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours``) for a temporal
field. or `a temporal field that gets casted as ordinal
`__.
@@ -20460,7 +20460,7 @@ class FieldOrDatumDefWithConditionMarkPropFieldDefTypeForShapestringnull(
**See also:** `sort `__
documentation.
- timeUnit : dict, :class:`TimeUnit`, :class:`MultiTimeUnit`, :class:`BinnedTimeUnit`, :class:`SingleTimeUnit`, :class:`TimeUnitParams`, :class:`UtcMultiTimeUnit`, :class:`UtcSingleTimeUnit`, :class:`LocalMultiTimeUnit`, :class:`LocalSingleTimeUnit`, Literal['binnedutcyear', 'binnedutcyearquarter', 'binnedutcyearquartermonth', 'binnedutcyearmonth', 'binnedutcyearmonthdate', 'binnedutcyearmonthdatehours', 'binnedutcyearmonthdatehoursminutes', 'binnedutcyearmonthdatehoursminutesseconds', 'binnedutcyearweek', 'binnedutcyearweekday', 'binnedutcyearweekdayhours', 'binnedutcyearweekdayhoursminutes', 'binnedutcyearweekdayhoursminutesseconds', 'binnedutcyeardayofyear', 'binnedyear', 'binnedyearquarter', 'binnedyearquartermonth', 'binnedyearmonth', 'binnedyearmonthdate', 'binnedyearmonthdatehours', 'binnedyearmonthdatehoursminutes', 'binnedyearmonthdatehoursminutesseconds', 'binnedyearweek', 'binnedyearweekday', 'binnedyearweekdayhours', 'binnedyearweekdayhoursminutes', 'binnedyearweekdayhoursminutesseconds', 'binnedyeardayofyear', 'utcyear', 'utcquarter', 'utcmonth', 'utcweek', 'utcday', 'utcdayofyear', 'utcdate', 'utchours', 'utcminutes', 'utcseconds', 'utcmilliseconds', 'year', 'quarter', 'month', 'week', 'day', 'dayofyear', 'date', 'hours', 'minutes', 'seconds', 'milliseconds', 'utcyearquarter', 'utcyearquartermonth', 'utcyearmonth', 'utcyearmonthdate', 'utcyearmonthdatehours', 'utcyearmonthdatehoursminutes', 'utcyearmonthdatehoursminutesseconds', 'utcyearweek', 'utcyearweekday', 'utcyearweekdayhours', 'utcyearweekdayhoursminutes', 'utcyearweekdayhoursminutesseconds', 'utcyeardayofyear', 'utcquartermonth', 'utcmonthdate', 'utcmonthdatehours', 'utcmonthdatehoursminutes', 'utcmonthdatehoursminutesseconds', 'utcweekday', 'utcweekdayhours', 'utcweekdayhoursminutes', 'utcweekdayhoursminutesseconds', 'utcdayhours', 'utcdayhoursminutes', 'utcdayhoursminutesseconds', 'utchoursminutes', 'utchoursminutesseconds', 'utcminutesseconds', 'utcsecondsmilliseconds', 'yearquarter', 'yearquartermonth', 'yearmonth', 'yearmonthdate', 'yearmonthdatehours', 'yearmonthdatehoursminutes', 'yearmonthdatehoursminutesseconds', 'yearweek', 'yearweekday', 'yearweekdayhours', 'yearweekdayhoursminutes', 'yearweekdayhoursminutesseconds', 'yeardayofyear', 'quartermonth', 'monthdate', 'monthdatehours', 'monthdatehoursminutes', 'monthdatehoursminutesseconds', 'weekday', 'weekdayhours', 'weekdayhoursminutes', 'weekdayhoursminutesseconds', 'dayhours', 'dayhoursminutes', 'dayhoursminutesseconds', 'hoursminutes', 'hoursminutesseconds', 'minutesseconds', 'secondsmilliseconds']
+ timeUnit : dict, :class:`TimeUnit`, :class:`MultiTimeUnit`, :class:`BinnedTimeUnit`, :class:`SingleTimeUnit`, :class:`TimeUnitParams`, :class:`UtcMultiTimeUnit`, :class:`UtcSingleTimeUnit`, :class:`LocalMultiTimeUnit`, :class:`LocalSingleTimeUnit`, Literal['binnedyear', 'binnedyearquarter', 'binnedyearquartermonth', 'binnedyearmonth', 'binnedyearmonthdate', 'binnedyearmonthdatehours', 'binnedyearmonthdatehoursminutes', 'binnedyearmonthdatehoursminutesseconds', 'binnedyearweek', 'binnedyearweekday', 'binnedyearweekdayhours', 'binnedyearweekdayhoursminutes', 'binnedyearweekdayhoursminutesseconds', 'binnedyeardayofyear', 'binnedutcyear', 'binnedutcyearquarter', 'binnedutcyearquartermonth', 'binnedutcyearmonth', 'binnedutcyearmonthdate', 'binnedutcyearmonthdatehours', 'binnedutcyearmonthdatehoursminutes', 'binnedutcyearmonthdatehoursminutesseconds', 'binnedutcyearweek', 'binnedutcyearweekday', 'binnedutcyearweekdayhours', 'binnedutcyearweekdayhoursminutes', 'binnedutcyearweekdayhoursminutesseconds', 'binnedutcyeardayofyear', 'utcyear', 'utcquarter', 'utcmonth', 'utcweek', 'utcday', 'utcdayofyear', 'utcdate', 'utchours', 'utcminutes', 'utcseconds', 'utcmilliseconds', 'year', 'quarter', 'month', 'week', 'day', 'dayofyear', 'date', 'hours', 'minutes', 'seconds', 'milliseconds', 'utcyearquarter', 'utcyearquartermonth', 'utcyearmonth', 'utcyearmonthdate', 'utcyearmonthdatehours', 'utcyearmonthdatehoursminutes', 'utcyearmonthdatehoursminutesseconds', 'utcyearweek', 'utcyearweekday', 'utcyearweekdayhours', 'utcyearweekdayhoursminutes', 'utcyearweekdayhoursminutesseconds', 'utcyeardayofyear', 'utcquartermonth', 'utcmonthdate', 'utcmonthdatehours', 'utcmonthdatehoursminutes', 'utcmonthdatehoursminutesseconds', 'utcweekday', 'utcweekdayhours', 'utcweekdayhoursminutes', 'utcweekdayhoursminutesseconds', 'utcdayhours', 'utcdayhoursminutes', 'utcdayhoursminutesseconds', 'utchoursminutes', 'utchoursminutesseconds', 'utcminutesseconds', 'utcsecondsmilliseconds', 'yearquarter', 'yearquartermonth', 'yearmonth', 'yearmonthdate', 'yearmonthdatehours', 'yearmonthdatehoursminutes', 'yearmonthdatehoursminutesseconds', 'yearweek', 'yearweekday', 'yearweekdayhours', 'yearweekdayhoursminutes', 'yearweekdayhoursminutesseconds', 'yeardayofyear', 'quartermonth', 'monthdate', 'monthdatehours', 'monthdatehoursminutes', 'monthdatehoursminutesseconds', 'weekday', 'weekdayhours', 'weekdayhoursminutes', 'weekdayhoursminutesseconds', 'dayhours', 'dayhoursminutes', 'dayhoursminutesseconds', 'hoursminutes', 'hoursminutesseconds', 'minutesseconds', 'secondsmilliseconds']
Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours``) for a temporal
field. or `a temporal field that gets casted as ordinal
`__.
@@ -22110,7 +22110,7 @@ class StringFieldDef(VegaLiteSchema):
* ``"time"`` for temporal fields and ordinal and nominal fields with ``timeUnit``.
* ``"number"`` for quantitative fields as well as ordinal and nominal fields without
``timeUnit``.
- timeUnit : dict, :class:`TimeUnit`, :class:`MultiTimeUnit`, :class:`BinnedTimeUnit`, :class:`SingleTimeUnit`, :class:`TimeUnitParams`, :class:`UtcMultiTimeUnit`, :class:`UtcSingleTimeUnit`, :class:`LocalMultiTimeUnit`, :class:`LocalSingleTimeUnit`, Literal['binnedutcyear', 'binnedutcyearquarter', 'binnedutcyearquartermonth', 'binnedutcyearmonth', 'binnedutcyearmonthdate', 'binnedutcyearmonthdatehours', 'binnedutcyearmonthdatehoursminutes', 'binnedutcyearmonthdatehoursminutesseconds', 'binnedutcyearweek', 'binnedutcyearweekday', 'binnedutcyearweekdayhours', 'binnedutcyearweekdayhoursminutes', 'binnedutcyearweekdayhoursminutesseconds', 'binnedutcyeardayofyear', 'binnedyear', 'binnedyearquarter', 'binnedyearquartermonth', 'binnedyearmonth', 'binnedyearmonthdate', 'binnedyearmonthdatehours', 'binnedyearmonthdatehoursminutes', 'binnedyearmonthdatehoursminutesseconds', 'binnedyearweek', 'binnedyearweekday', 'binnedyearweekdayhours', 'binnedyearweekdayhoursminutes', 'binnedyearweekdayhoursminutesseconds', 'binnedyeardayofyear', 'utcyear', 'utcquarter', 'utcmonth', 'utcweek', 'utcday', 'utcdayofyear', 'utcdate', 'utchours', 'utcminutes', 'utcseconds', 'utcmilliseconds', 'year', 'quarter', 'month', 'week', 'day', 'dayofyear', 'date', 'hours', 'minutes', 'seconds', 'milliseconds', 'utcyearquarter', 'utcyearquartermonth', 'utcyearmonth', 'utcyearmonthdate', 'utcyearmonthdatehours', 'utcyearmonthdatehoursminutes', 'utcyearmonthdatehoursminutesseconds', 'utcyearweek', 'utcyearweekday', 'utcyearweekdayhours', 'utcyearweekdayhoursminutes', 'utcyearweekdayhoursminutesseconds', 'utcyeardayofyear', 'utcquartermonth', 'utcmonthdate', 'utcmonthdatehours', 'utcmonthdatehoursminutes', 'utcmonthdatehoursminutesseconds', 'utcweekday', 'utcweekdayhours', 'utcweekdayhoursminutes', 'utcweekdayhoursminutesseconds', 'utcdayhours', 'utcdayhoursminutes', 'utcdayhoursminutesseconds', 'utchoursminutes', 'utchoursminutesseconds', 'utcminutesseconds', 'utcsecondsmilliseconds', 'yearquarter', 'yearquartermonth', 'yearmonth', 'yearmonthdate', 'yearmonthdatehours', 'yearmonthdatehoursminutes', 'yearmonthdatehoursminutesseconds', 'yearweek', 'yearweekday', 'yearweekdayhours', 'yearweekdayhoursminutes', 'yearweekdayhoursminutesseconds', 'yeardayofyear', 'quartermonth', 'monthdate', 'monthdatehours', 'monthdatehoursminutes', 'monthdatehoursminutesseconds', 'weekday', 'weekdayhours', 'weekdayhoursminutes', 'weekdayhoursminutesseconds', 'dayhours', 'dayhoursminutes', 'dayhoursminutesseconds', 'hoursminutes', 'hoursminutesseconds', 'minutesseconds', 'secondsmilliseconds']
+ timeUnit : dict, :class:`TimeUnit`, :class:`MultiTimeUnit`, :class:`BinnedTimeUnit`, :class:`SingleTimeUnit`, :class:`TimeUnitParams`, :class:`UtcMultiTimeUnit`, :class:`UtcSingleTimeUnit`, :class:`LocalMultiTimeUnit`, :class:`LocalSingleTimeUnit`, Literal['binnedyear', 'binnedyearquarter', 'binnedyearquartermonth', 'binnedyearmonth', 'binnedyearmonthdate', 'binnedyearmonthdatehours', 'binnedyearmonthdatehoursminutes', 'binnedyearmonthdatehoursminutesseconds', 'binnedyearweek', 'binnedyearweekday', 'binnedyearweekdayhours', 'binnedyearweekdayhoursminutes', 'binnedyearweekdayhoursminutesseconds', 'binnedyeardayofyear', 'binnedutcyear', 'binnedutcyearquarter', 'binnedutcyearquartermonth', 'binnedutcyearmonth', 'binnedutcyearmonthdate', 'binnedutcyearmonthdatehours', 'binnedutcyearmonthdatehoursminutes', 'binnedutcyearmonthdatehoursminutesseconds', 'binnedutcyearweek', 'binnedutcyearweekday', 'binnedutcyearweekdayhours', 'binnedutcyearweekdayhoursminutes', 'binnedutcyearweekdayhoursminutesseconds', 'binnedutcyeardayofyear', 'utcyear', 'utcquarter', 'utcmonth', 'utcweek', 'utcday', 'utcdayofyear', 'utcdate', 'utchours', 'utcminutes', 'utcseconds', 'utcmilliseconds', 'year', 'quarter', 'month', 'week', 'day', 'dayofyear', 'date', 'hours', 'minutes', 'seconds', 'milliseconds', 'utcyearquarter', 'utcyearquartermonth', 'utcyearmonth', 'utcyearmonthdate', 'utcyearmonthdatehours', 'utcyearmonthdatehoursminutes', 'utcyearmonthdatehoursminutesseconds', 'utcyearweek', 'utcyearweekday', 'utcyearweekdayhours', 'utcyearweekdayhoursminutes', 'utcyearweekdayhoursminutesseconds', 'utcyeardayofyear', 'utcquartermonth', 'utcmonthdate', 'utcmonthdatehours', 'utcmonthdatehoursminutes', 'utcmonthdatehoursminutesseconds', 'utcweekday', 'utcweekdayhours', 'utcweekdayhoursminutes', 'utcweekdayhoursminutesseconds', 'utcdayhours', 'utcdayhoursminutes', 'utcdayhoursminutesseconds', 'utchoursminutes', 'utchoursminutesseconds', 'utcminutesseconds', 'utcsecondsmilliseconds', 'yearquarter', 'yearquartermonth', 'yearmonth', 'yearmonthdate', 'yearmonthdatehours', 'yearmonthdatehoursminutes', 'yearmonthdatehoursminutesseconds', 'yearweek', 'yearweekday', 'yearweekdayhours', 'yearweekdayhoursminutes', 'yearweekdayhoursminutesseconds', 'yeardayofyear', 'quartermonth', 'monthdate', 'monthdatehours', 'monthdatehoursminutes', 'monthdatehoursminutesseconds', 'weekday', 'weekdayhours', 'weekdayhoursminutes', 'weekdayhoursminutesseconds', 'dayhours', 'dayhoursminutes', 'dayhoursminutesseconds', 'hoursminutes', 'hoursminutesseconds', 'minutesseconds', 'secondsmilliseconds']
Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours``) for a temporal
field. or `a temporal field that gets casted as ordinal
`__.
@@ -22333,7 +22333,7 @@ class StringFieldDefWithCondition(VegaLiteSchema):
* ``"time"`` for temporal fields and ordinal and nominal fields with ``timeUnit``.
* ``"number"`` for quantitative fields as well as ordinal and nominal fields without
``timeUnit``.
- timeUnit : dict, :class:`TimeUnit`, :class:`MultiTimeUnit`, :class:`BinnedTimeUnit`, :class:`SingleTimeUnit`, :class:`TimeUnitParams`, :class:`UtcMultiTimeUnit`, :class:`UtcSingleTimeUnit`, :class:`LocalMultiTimeUnit`, :class:`LocalSingleTimeUnit`, Literal['binnedutcyear', 'binnedutcyearquarter', 'binnedutcyearquartermonth', 'binnedutcyearmonth', 'binnedutcyearmonthdate', 'binnedutcyearmonthdatehours', 'binnedutcyearmonthdatehoursminutes', 'binnedutcyearmonthdatehoursminutesseconds', 'binnedutcyearweek', 'binnedutcyearweekday', 'binnedutcyearweekdayhours', 'binnedutcyearweekdayhoursminutes', 'binnedutcyearweekdayhoursminutesseconds', 'binnedutcyeardayofyear', 'binnedyear', 'binnedyearquarter', 'binnedyearquartermonth', 'binnedyearmonth', 'binnedyearmonthdate', 'binnedyearmonthdatehours', 'binnedyearmonthdatehoursminutes', 'binnedyearmonthdatehoursminutesseconds', 'binnedyearweek', 'binnedyearweekday', 'binnedyearweekdayhours', 'binnedyearweekdayhoursminutes', 'binnedyearweekdayhoursminutesseconds', 'binnedyeardayofyear', 'utcyear', 'utcquarter', 'utcmonth', 'utcweek', 'utcday', 'utcdayofyear', 'utcdate', 'utchours', 'utcminutes', 'utcseconds', 'utcmilliseconds', 'year', 'quarter', 'month', 'week', 'day', 'dayofyear', 'date', 'hours', 'minutes', 'seconds', 'milliseconds', 'utcyearquarter', 'utcyearquartermonth', 'utcyearmonth', 'utcyearmonthdate', 'utcyearmonthdatehours', 'utcyearmonthdatehoursminutes', 'utcyearmonthdatehoursminutesseconds', 'utcyearweek', 'utcyearweekday', 'utcyearweekdayhours', 'utcyearweekdayhoursminutes', 'utcyearweekdayhoursminutesseconds', 'utcyeardayofyear', 'utcquartermonth', 'utcmonthdate', 'utcmonthdatehours', 'utcmonthdatehoursminutes', 'utcmonthdatehoursminutesseconds', 'utcweekday', 'utcweekdayhours', 'utcweekdayhoursminutes', 'utcweekdayhoursminutesseconds', 'utcdayhours', 'utcdayhoursminutes', 'utcdayhoursminutesseconds', 'utchoursminutes', 'utchoursminutesseconds', 'utcminutesseconds', 'utcsecondsmilliseconds', 'yearquarter', 'yearquartermonth', 'yearmonth', 'yearmonthdate', 'yearmonthdatehours', 'yearmonthdatehoursminutes', 'yearmonthdatehoursminutesseconds', 'yearweek', 'yearweekday', 'yearweekdayhours', 'yearweekdayhoursminutes', 'yearweekdayhoursminutesseconds', 'yeardayofyear', 'quartermonth', 'monthdate', 'monthdatehours', 'monthdatehoursminutes', 'monthdatehoursminutesseconds', 'weekday', 'weekdayhours', 'weekdayhoursminutes', 'weekdayhoursminutesseconds', 'dayhours', 'dayhoursminutes', 'dayhoursminutesseconds', 'hoursminutes', 'hoursminutesseconds', 'minutesseconds', 'secondsmilliseconds']
+ timeUnit : dict, :class:`TimeUnit`, :class:`MultiTimeUnit`, :class:`BinnedTimeUnit`, :class:`SingleTimeUnit`, :class:`TimeUnitParams`, :class:`UtcMultiTimeUnit`, :class:`UtcSingleTimeUnit`, :class:`LocalMultiTimeUnit`, :class:`LocalSingleTimeUnit`, Literal['binnedyear', 'binnedyearquarter', 'binnedyearquartermonth', 'binnedyearmonth', 'binnedyearmonthdate', 'binnedyearmonthdatehours', 'binnedyearmonthdatehoursminutes', 'binnedyearmonthdatehoursminutesseconds', 'binnedyearweek', 'binnedyearweekday', 'binnedyearweekdayhours', 'binnedyearweekdayhoursminutes', 'binnedyearweekdayhoursminutesseconds', 'binnedyeardayofyear', 'binnedutcyear', 'binnedutcyearquarter', 'binnedutcyearquartermonth', 'binnedutcyearmonth', 'binnedutcyearmonthdate', 'binnedutcyearmonthdatehours', 'binnedutcyearmonthdatehoursminutes', 'binnedutcyearmonthdatehoursminutesseconds', 'binnedutcyearweek', 'binnedutcyearweekday', 'binnedutcyearweekdayhours', 'binnedutcyearweekdayhoursminutes', 'binnedutcyearweekdayhoursminutesseconds', 'binnedutcyeardayofyear', 'utcyear', 'utcquarter', 'utcmonth', 'utcweek', 'utcday', 'utcdayofyear', 'utcdate', 'utchours', 'utcminutes', 'utcseconds', 'utcmilliseconds', 'year', 'quarter', 'month', 'week', 'day', 'dayofyear', 'date', 'hours', 'minutes', 'seconds', 'milliseconds', 'utcyearquarter', 'utcyearquartermonth', 'utcyearmonth', 'utcyearmonthdate', 'utcyearmonthdatehours', 'utcyearmonthdatehoursminutes', 'utcyearmonthdatehoursminutesseconds', 'utcyearweek', 'utcyearweekday', 'utcyearweekdayhours', 'utcyearweekdayhoursminutes', 'utcyearweekdayhoursminutesseconds', 'utcyeardayofyear', 'utcquartermonth', 'utcmonthdate', 'utcmonthdatehours', 'utcmonthdatehoursminutes', 'utcmonthdatehoursminutesseconds', 'utcweekday', 'utcweekdayhours', 'utcweekdayhoursminutes', 'utcweekdayhoursminutesseconds', 'utcdayhours', 'utcdayhoursminutes', 'utcdayhoursminutesseconds', 'utchoursminutes', 'utchoursminutesseconds', 'utcminutesseconds', 'utcsecondsmilliseconds', 'yearquarter', 'yearquartermonth', 'yearmonth', 'yearmonthdate', 'yearmonthdatehours', 'yearmonthdatehoursminutes', 'yearmonthdatehoursminutesseconds', 'yearweek', 'yearweekday', 'yearweekdayhours', 'yearweekdayhoursminutes', 'yearweekdayhoursminutesseconds', 'yeardayofyear', 'quartermonth', 'monthdate', 'monthdatehours', 'monthdatehoursminutes', 'monthdatehoursminutesseconds', 'weekday', 'weekdayhours', 'weekdayhoursminutes', 'weekdayhoursminutesseconds', 'dayhours', 'dayhoursminutes', 'dayhoursminutesseconds', 'hoursminutes', 'hoursminutesseconds', 'minutesseconds', 'secondsmilliseconds']
Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours``) for a temporal
field. or `a temporal field that gets casted as ordinal
`__.
@@ -22903,7 +22903,7 @@ class FieldOrDatumDefWithConditionStringFieldDefText(TextDef):
* ``"time"`` for temporal fields and ordinal and nominal fields with ``timeUnit``.
* ``"number"`` for quantitative fields as well as ordinal and nominal fields without
``timeUnit``.
- timeUnit : dict, :class:`TimeUnit`, :class:`MultiTimeUnit`, :class:`BinnedTimeUnit`, :class:`SingleTimeUnit`, :class:`TimeUnitParams`, :class:`UtcMultiTimeUnit`, :class:`UtcSingleTimeUnit`, :class:`LocalMultiTimeUnit`, :class:`LocalSingleTimeUnit`, Literal['binnedutcyear', 'binnedutcyearquarter', 'binnedutcyearquartermonth', 'binnedutcyearmonth', 'binnedutcyearmonthdate', 'binnedutcyearmonthdatehours', 'binnedutcyearmonthdatehoursminutes', 'binnedutcyearmonthdatehoursminutesseconds', 'binnedutcyearweek', 'binnedutcyearweekday', 'binnedutcyearweekdayhours', 'binnedutcyearweekdayhoursminutes', 'binnedutcyearweekdayhoursminutesseconds', 'binnedutcyeardayofyear', 'binnedyear', 'binnedyearquarter', 'binnedyearquartermonth', 'binnedyearmonth', 'binnedyearmonthdate', 'binnedyearmonthdatehours', 'binnedyearmonthdatehoursminutes', 'binnedyearmonthdatehoursminutesseconds', 'binnedyearweek', 'binnedyearweekday', 'binnedyearweekdayhours', 'binnedyearweekdayhoursminutes', 'binnedyearweekdayhoursminutesseconds', 'binnedyeardayofyear', 'utcyear', 'utcquarter', 'utcmonth', 'utcweek', 'utcday', 'utcdayofyear', 'utcdate', 'utchours', 'utcminutes', 'utcseconds', 'utcmilliseconds', 'year', 'quarter', 'month', 'week', 'day', 'dayofyear', 'date', 'hours', 'minutes', 'seconds', 'milliseconds', 'utcyearquarter', 'utcyearquartermonth', 'utcyearmonth', 'utcyearmonthdate', 'utcyearmonthdatehours', 'utcyearmonthdatehoursminutes', 'utcyearmonthdatehoursminutesseconds', 'utcyearweek', 'utcyearweekday', 'utcyearweekdayhours', 'utcyearweekdayhoursminutes', 'utcyearweekdayhoursminutesseconds', 'utcyeardayofyear', 'utcquartermonth', 'utcmonthdate', 'utcmonthdatehours', 'utcmonthdatehoursminutes', 'utcmonthdatehoursminutesseconds', 'utcweekday', 'utcweekdayhours', 'utcweekdayhoursminutes', 'utcweekdayhoursminutesseconds', 'utcdayhours', 'utcdayhoursminutes', 'utcdayhoursminutesseconds', 'utchoursminutes', 'utchoursminutesseconds', 'utcminutesseconds', 'utcsecondsmilliseconds', 'yearquarter', 'yearquartermonth', 'yearmonth', 'yearmonthdate', 'yearmonthdatehours', 'yearmonthdatehoursminutes', 'yearmonthdatehoursminutesseconds', 'yearweek', 'yearweekday', 'yearweekdayhours', 'yearweekdayhoursminutes', 'yearweekdayhoursminutesseconds', 'yeardayofyear', 'quartermonth', 'monthdate', 'monthdatehours', 'monthdatehoursminutes', 'monthdatehoursminutesseconds', 'weekday', 'weekdayhours', 'weekdayhoursminutes', 'weekdayhoursminutesseconds', 'dayhours', 'dayhoursminutes', 'dayhoursminutesseconds', 'hoursminutes', 'hoursminutesseconds', 'minutesseconds', 'secondsmilliseconds']
+ timeUnit : dict, :class:`TimeUnit`, :class:`MultiTimeUnit`, :class:`BinnedTimeUnit`, :class:`SingleTimeUnit`, :class:`TimeUnitParams`, :class:`UtcMultiTimeUnit`, :class:`UtcSingleTimeUnit`, :class:`LocalMultiTimeUnit`, :class:`LocalSingleTimeUnit`, Literal['binnedyear', 'binnedyearquarter', 'binnedyearquartermonth', 'binnedyearmonth', 'binnedyearmonthdate', 'binnedyearmonthdatehours', 'binnedyearmonthdatehoursminutes', 'binnedyearmonthdatehoursminutesseconds', 'binnedyearweek', 'binnedyearweekday', 'binnedyearweekdayhours', 'binnedyearweekdayhoursminutes', 'binnedyearweekdayhoursminutesseconds', 'binnedyeardayofyear', 'binnedutcyear', 'binnedutcyearquarter', 'binnedutcyearquartermonth', 'binnedutcyearmonth', 'binnedutcyearmonthdate', 'binnedutcyearmonthdatehours', 'binnedutcyearmonthdatehoursminutes', 'binnedutcyearmonthdatehoursminutesseconds', 'binnedutcyearweek', 'binnedutcyearweekday', 'binnedutcyearweekdayhours', 'binnedutcyearweekdayhoursminutes', 'binnedutcyearweekdayhoursminutesseconds', 'binnedutcyeardayofyear', 'utcyear', 'utcquarter', 'utcmonth', 'utcweek', 'utcday', 'utcdayofyear', 'utcdate', 'utchours', 'utcminutes', 'utcseconds', 'utcmilliseconds', 'year', 'quarter', 'month', 'week', 'day', 'dayofyear', 'date', 'hours', 'minutes', 'seconds', 'milliseconds', 'utcyearquarter', 'utcyearquartermonth', 'utcyearmonth', 'utcyearmonthdate', 'utcyearmonthdatehours', 'utcyearmonthdatehoursminutes', 'utcyearmonthdatehoursminutesseconds', 'utcyearweek', 'utcyearweekday', 'utcyearweekdayhours', 'utcyearweekdayhoursminutes', 'utcyearweekdayhoursminutesseconds', 'utcyeardayofyear', 'utcquartermonth', 'utcmonthdate', 'utcmonthdatehours', 'utcmonthdatehoursminutes', 'utcmonthdatehoursminutesseconds', 'utcweekday', 'utcweekdayhours', 'utcweekdayhoursminutes', 'utcweekdayhoursminutesseconds', 'utcdayhours', 'utcdayhoursminutes', 'utcdayhoursminutesseconds', 'utchoursminutes', 'utchoursminutesseconds', 'utcminutesseconds', 'utcsecondsmilliseconds', 'yearquarter', 'yearquartermonth', 'yearmonth', 'yearmonthdate', 'yearmonthdatehours', 'yearmonthdatehoursminutes', 'yearmonthdatehoursminutesseconds', 'yearweek', 'yearweekday', 'yearweekdayhours', 'yearweekdayhoursminutes', 'yearweekdayhoursminutesseconds', 'yeardayofyear', 'quartermonth', 'monthdate', 'monthdatehours', 'monthdatehoursminutes', 'monthdatehoursminutesseconds', 'weekday', 'weekdayhours', 'weekdayhoursminutes', 'weekdayhoursminutesseconds', 'dayhours', 'dayhoursminutes', 'dayhoursminutesseconds', 'hoursminutes', 'hoursminutesseconds', 'minutesseconds', 'secondsmilliseconds']
Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours``) for a temporal
field. or `a temporal field that gets casted as ordinal
`__.
@@ -23093,6 +23093,11 @@ class TickConfig(AnyMarkConfig):
``"middle"``, ``"bottom"``.
**Note:** Expression reference is *not* supported for range marks.
+ binSpacing : float
+ Offset between bars for binned field. The ideal value for this is either 0
+ (preferred by statisticians) or 1 (Vega-Lite default, D3 example style).
+
+ **Default value:** ``1``
blend : dict, :class:`Blend`, :class:`ExprRef`, Literal[None, 'multiply', 'screen', 'overlay', 'darken', 'lighten', 'color-dodge', 'color-burn', 'hard-light', 'soft-light', 'difference', 'exclusion', 'hue', 'saturation', 'color', 'luminosity']
The color blend mode for drawing an item on its current background. Any valid `CSS
mix-blend-mode `__
@@ -23111,6 +23116,10 @@ class TickConfig(AnyMarkConfig):
`__.
* The ``fill`` and ``stroke`` properties have higher precedence than ``color`` and
will override ``color``.
+ continuousBandSize : float
+ The default size of the bars on continuous scales.
+
+ **Default value:** ``5``
cornerRadius : dict, float, :class:`ExprRef`
The radius in pixels of rounded rectangles or arcs' corners.
@@ -23145,6 +23154,9 @@ class TickConfig(AnyMarkConfig):
the limit parameter.
**Default value:** ``"ltr"``
+ discreteBandSize : dict, float, :class:`RelativeBandSize`
+ The default size of the bars with discrete dimensions. If unspecified, the default
+ size is ``step-2``, which provides 2 pixel offset between bars.
dx : dict, float, :class:`ExprRef`
The horizontal offset, in pixels, between the text label and its anchor point. The
offset is applied after rotation by the *angle* property.
@@ -23261,6 +23273,8 @@ class TickConfig(AnyMarkConfig):
lineHeight : dict, float, :class:`ExprRef`
The line height in pixels (the spacing between subsequent lines of text) for
multi-line text marks.
+ minBandSize : dict, float, :class:`ExprRef`
+ The minimum band size for bar and rectangle marks. **Default value:** ``0.25``
opacity : dict, float, :class:`ExprRef`
The overall opacity (value between [0,1]).
@@ -23444,8 +23458,10 @@ def __init__(
aspect: Optional[bool | Parameter | SchemaBase | Map] = Undefined,
bandSize: Optional[float] = Undefined,
baseline: Optional[Parameter | SchemaBase | Map | TextBaseline_T] = Undefined,
+ binSpacing: Optional[float] = Undefined,
blend: Optional[Parameter | SchemaBase | Map | Blend_T] = Undefined,
color: Optional[str | Parameter | SchemaBase | Map | ColorName_T] = Undefined,
+ continuousBandSize: Optional[float] = Undefined,
cornerRadius: Optional[float | Parameter | SchemaBase | Map] = Undefined,
cornerRadiusBottomLeft: Optional[
float | Parameter | SchemaBase | Map
@@ -23460,6 +23476,7 @@ def __init__(
cursor: Optional[Parameter | SchemaBase | Map | Cursor_T] = Undefined,
description: Optional[str | Parameter | SchemaBase | Map] = Undefined,
dir: Optional[Parameter | SchemaBase | Map | TextDirection_T] = Undefined,
+ discreteBandSize: Optional[float | SchemaBase | Map] = Undefined,
dx: Optional[float | Parameter | SchemaBase | Map] = Undefined,
dy: Optional[float | Parameter | SchemaBase | Map] = Undefined,
ellipsis: Optional[str | Parameter | SchemaBase | Map] = Undefined,
@@ -23481,6 +23498,7 @@ def __init__(
limit: Optional[float | Parameter | SchemaBase | Map] = Undefined,
lineBreak: Optional[str | Parameter | SchemaBase | Map] = Undefined,
lineHeight: Optional[float | Parameter | SchemaBase | Map] = Undefined,
+ minBandSize: Optional[float | Parameter | SchemaBase | Map] = Undefined,
opacity: Optional[float | Parameter | SchemaBase | Map] = Undefined,
order: Optional[bool | None] = Undefined,
orient: Optional[SchemaBase | Orientation_T] = Undefined,
@@ -23540,8 +23558,10 @@ def __init__(
aspect=aspect,
bandSize=bandSize,
baseline=baseline,
+ binSpacing=binSpacing,
blend=blend,
color=color,
+ continuousBandSize=continuousBandSize,
cornerRadius=cornerRadius,
cornerRadiusBottomLeft=cornerRadiusBottomLeft,
cornerRadiusBottomRight=cornerRadiusBottomRight,
@@ -23550,6 +23570,7 @@ def __init__(
cursor=cursor,
description=description,
dir=dir,
+ discreteBandSize=discreteBandSize,
dx=dx,
dy=dy,
ellipsis=ellipsis,
@@ -23569,6 +23590,7 @@ def __init__(
limit=limit,
lineBreak=lineBreak,
lineHeight=lineHeight,
+ minBandSize=minBandSize,
opacity=opacity,
order=order,
orient=orient,
@@ -26057,7 +26079,7 @@ class TypedFieldDef(VegaLiteSchema):
about escaping in the `field documentation
`__. 2) ``field`` is not required
if ``aggregate`` is ``count``.
- timeUnit : dict, :class:`TimeUnit`, :class:`MultiTimeUnit`, :class:`BinnedTimeUnit`, :class:`SingleTimeUnit`, :class:`TimeUnitParams`, :class:`UtcMultiTimeUnit`, :class:`UtcSingleTimeUnit`, :class:`LocalMultiTimeUnit`, :class:`LocalSingleTimeUnit`, Literal['binnedutcyear', 'binnedutcyearquarter', 'binnedutcyearquartermonth', 'binnedutcyearmonth', 'binnedutcyearmonthdate', 'binnedutcyearmonthdatehours', 'binnedutcyearmonthdatehoursminutes', 'binnedutcyearmonthdatehoursminutesseconds', 'binnedutcyearweek', 'binnedutcyearweekday', 'binnedutcyearweekdayhours', 'binnedutcyearweekdayhoursminutes', 'binnedutcyearweekdayhoursminutesseconds', 'binnedutcyeardayofyear', 'binnedyear', 'binnedyearquarter', 'binnedyearquartermonth', 'binnedyearmonth', 'binnedyearmonthdate', 'binnedyearmonthdatehours', 'binnedyearmonthdatehoursminutes', 'binnedyearmonthdatehoursminutesseconds', 'binnedyearweek', 'binnedyearweekday', 'binnedyearweekdayhours', 'binnedyearweekdayhoursminutes', 'binnedyearweekdayhoursminutesseconds', 'binnedyeardayofyear', 'utcyear', 'utcquarter', 'utcmonth', 'utcweek', 'utcday', 'utcdayofyear', 'utcdate', 'utchours', 'utcminutes', 'utcseconds', 'utcmilliseconds', 'year', 'quarter', 'month', 'week', 'day', 'dayofyear', 'date', 'hours', 'minutes', 'seconds', 'milliseconds', 'utcyearquarter', 'utcyearquartermonth', 'utcyearmonth', 'utcyearmonthdate', 'utcyearmonthdatehours', 'utcyearmonthdatehoursminutes', 'utcyearmonthdatehoursminutesseconds', 'utcyearweek', 'utcyearweekday', 'utcyearweekdayhours', 'utcyearweekdayhoursminutes', 'utcyearweekdayhoursminutesseconds', 'utcyeardayofyear', 'utcquartermonth', 'utcmonthdate', 'utcmonthdatehours', 'utcmonthdatehoursminutes', 'utcmonthdatehoursminutesseconds', 'utcweekday', 'utcweekdayhours', 'utcweekdayhoursminutes', 'utcweekdayhoursminutesseconds', 'utcdayhours', 'utcdayhoursminutes', 'utcdayhoursminutesseconds', 'utchoursminutes', 'utchoursminutesseconds', 'utcminutesseconds', 'utcsecondsmilliseconds', 'yearquarter', 'yearquartermonth', 'yearmonth', 'yearmonthdate', 'yearmonthdatehours', 'yearmonthdatehoursminutes', 'yearmonthdatehoursminutesseconds', 'yearweek', 'yearweekday', 'yearweekdayhours', 'yearweekdayhoursminutes', 'yearweekdayhoursminutesseconds', 'yeardayofyear', 'quartermonth', 'monthdate', 'monthdatehours', 'monthdatehoursminutes', 'monthdatehoursminutesseconds', 'weekday', 'weekdayhours', 'weekdayhoursminutes', 'weekdayhoursminutesseconds', 'dayhours', 'dayhoursminutes', 'dayhoursminutesseconds', 'hoursminutes', 'hoursminutesseconds', 'minutesseconds', 'secondsmilliseconds']
+ timeUnit : dict, :class:`TimeUnit`, :class:`MultiTimeUnit`, :class:`BinnedTimeUnit`, :class:`SingleTimeUnit`, :class:`TimeUnitParams`, :class:`UtcMultiTimeUnit`, :class:`UtcSingleTimeUnit`, :class:`LocalMultiTimeUnit`, :class:`LocalSingleTimeUnit`, Literal['binnedyear', 'binnedyearquarter', 'binnedyearquartermonth', 'binnedyearmonth', 'binnedyearmonthdate', 'binnedyearmonthdatehours', 'binnedyearmonthdatehoursminutes', 'binnedyearmonthdatehoursminutesseconds', 'binnedyearweek', 'binnedyearweekday', 'binnedyearweekdayhours', 'binnedyearweekdayhoursminutes', 'binnedyearweekdayhoursminutesseconds', 'binnedyeardayofyear', 'binnedutcyear', 'binnedutcyearquarter', 'binnedutcyearquartermonth', 'binnedutcyearmonth', 'binnedutcyearmonthdate', 'binnedutcyearmonthdatehours', 'binnedutcyearmonthdatehoursminutes', 'binnedutcyearmonthdatehoursminutesseconds', 'binnedutcyearweek', 'binnedutcyearweekday', 'binnedutcyearweekdayhours', 'binnedutcyearweekdayhoursminutes', 'binnedutcyearweekdayhoursminutesseconds', 'binnedutcyeardayofyear', 'utcyear', 'utcquarter', 'utcmonth', 'utcweek', 'utcday', 'utcdayofyear', 'utcdate', 'utchours', 'utcminutes', 'utcseconds', 'utcmilliseconds', 'year', 'quarter', 'month', 'week', 'day', 'dayofyear', 'date', 'hours', 'minutes', 'seconds', 'milliseconds', 'utcyearquarter', 'utcyearquartermonth', 'utcyearmonth', 'utcyearmonthdate', 'utcyearmonthdatehours', 'utcyearmonthdatehoursminutes', 'utcyearmonthdatehoursminutesseconds', 'utcyearweek', 'utcyearweekday', 'utcyearweekdayhours', 'utcyearweekdayhoursminutes', 'utcyearweekdayhoursminutesseconds', 'utcyeardayofyear', 'utcquartermonth', 'utcmonthdate', 'utcmonthdatehours', 'utcmonthdatehoursminutes', 'utcmonthdatehoursminutesseconds', 'utcweekday', 'utcweekdayhours', 'utcweekdayhoursminutes', 'utcweekdayhoursminutesseconds', 'utcdayhours', 'utcdayhoursminutes', 'utcdayhoursminutesseconds', 'utchoursminutes', 'utchoursminutesseconds', 'utcminutesseconds', 'utcsecondsmilliseconds', 'yearquarter', 'yearquartermonth', 'yearmonth', 'yearmonthdate', 'yearmonthdatehours', 'yearmonthdatehoursminutes', 'yearmonthdatehoursminutesseconds', 'yearweek', 'yearweekday', 'yearweekdayhours', 'yearweekdayhoursminutes', 'yearweekdayhoursminutesseconds', 'yeardayofyear', 'quartermonth', 'monthdate', 'monthdatehours', 'monthdatehoursminutes', 'monthdatehoursminutesseconds', 'weekday', 'weekdayhours', 'weekdayhoursminutes', 'weekdayhoursminutesseconds', 'dayhours', 'dayhoursminutes', 'dayhoursminutesseconds', 'hoursminutes', 'hoursminutesseconds', 'minutesseconds', 'secondsmilliseconds']
Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours``) for a temporal
field. or `a temporal field that gets casted as ordinal
`__.
diff --git a/altair/vegalite/v5/schema/vega-lite-schema.json b/altair/vegalite/v5/schema/vega-lite-schema.json
index b6c6b5a1f..c99b9e876 100644
--- a/altair/vegalite/v5/schema/vega-lite-schema.json
+++ b/altair/vegalite/v5/schema/vega-lite-schema.json
@@ -4428,46 +4428,37 @@
]
},
"BinnedTimeUnit": {
- "anyOf": [
- {
- "enum": [
- "binnedyear",
- "binnedyearquarter",
- "binnedyearquartermonth",
- "binnedyearmonth",
- "binnedyearmonthdate",
- "binnedyearmonthdatehours",
- "binnedyearmonthdatehoursminutes",
- "binnedyearmonthdatehoursminutesseconds",
- "binnedyearweek",
- "binnedyearweekday",
- "binnedyearweekdayhours",
- "binnedyearweekdayhoursminutes",
- "binnedyearweekdayhoursminutesseconds",
- "binnedyeardayofyear"
- ],
- "type": "string"
- },
- {
- "enum": [
- "binnedutcyear",
- "binnedutcyearquarter",
- "binnedutcyearquartermonth",
- "binnedutcyearmonth",
- "binnedutcyearmonthdate",
- "binnedutcyearmonthdatehours",
- "binnedutcyearmonthdatehoursminutes",
- "binnedutcyearmonthdatehoursminutesseconds",
- "binnedutcyearweek",
- "binnedutcyearweekday",
- "binnedutcyearweekdayhours",
- "binnedutcyearweekdayhoursminutes",
- "binnedutcyearweekdayhoursminutesseconds",
- "binnedutcyeardayofyear"
- ],
- "type": "string"
- }
- ]
+ "enum": [
+ "binnedyear",
+ "binnedyearquarter",
+ "binnedyearquartermonth",
+ "binnedyearmonth",
+ "binnedyearmonthdate",
+ "binnedyearmonthdatehours",
+ "binnedyearmonthdatehoursminutes",
+ "binnedyearmonthdatehoursminutesseconds",
+ "binnedyearweek",
+ "binnedyearweekday",
+ "binnedyearweekdayhours",
+ "binnedyearweekdayhoursminutes",
+ "binnedyearweekdayhoursminutesseconds",
+ "binnedyeardayofyear",
+ "binnedutcyear",
+ "binnedutcyearquarter",
+ "binnedutcyearquartermonth",
+ "binnedutcyearmonth",
+ "binnedutcyearmonthdate",
+ "binnedutcyearmonthdatehours",
+ "binnedutcyearmonthdatehoursminutes",
+ "binnedutcyearmonthdatehoursminutesseconds",
+ "binnedutcyearweek",
+ "binnedutcyearweekday",
+ "binnedutcyearweekdayhours",
+ "binnedutcyearweekdayhoursminutes",
+ "binnedutcyearweekdayhoursminutesseconds",
+ "binnedutcyeardayofyear"
+ ],
+ "type": "string"
},
"Blend": {
"enum": [
@@ -4761,7 +4752,8 @@
"set2",
"set3",
"tableau10",
- "tableau20"
+ "tableau20",
+ "observable10"
],
"type": "string"
},
@@ -19238,29 +19230,9 @@
"type": "object"
},
"ParseValue": {
- "anyOf": [
- {
- "type": "null"
- },
- {
- "type": "string"
- },
- {
- "const": "string",
- "type": "string"
- },
- {
- "const": "boolean",
- "type": "string"
- },
- {
- "const": "date",
- "type": "string"
- },
- {
- "const": "number",
- "type": "string"
- }
+ "type": [
+ "string",
+ "null"
]
},
"PivotTransform": {
@@ -27685,6 +27657,8 @@
},
"SingleDefUnitChannel": {
"enum": [
+ "text",
+ "shape",
"x",
"y",
"xOffset",
@@ -27709,9 +27683,7 @@
"strokeDash",
"size",
"angle",
- "shape",
"key",
- "text",
"href",
"url",
"description"
@@ -28336,6 +28308,11 @@
],
"description": "For text marks, the vertical text baseline. One of `\"alphabetic\"` (default), `\"top\"`, `\"middle\"`, `\"bottom\"`, `\"line-top\"`, `\"line-bottom\"`, or an expression reference that provides one of the valid values. The `\"line-top\"` and `\"line-bottom\"` values operate similarly to `\"top\"` and `\"bottom\"`, but are calculated relative to the `lineHeight` rather than `fontSize` alone.\n\nFor range marks, the vertical alignment of the marks. One of `\"top\"`, `\"middle\"`, `\"bottom\"`.\n\n__Note:__ Expression reference is *not* supported for range marks."
},
+ "binSpacing": {
+ "description": "Offset between bars for binned field. The ideal value for this is either 0 (preferred by statisticians) or 1 (Vega-Lite default, D3 example style).\n\n__Default value:__ `1`",
+ "minimum": 0,
+ "type": "number"
+ },
"blend": {
"anyOf": [
{
@@ -28361,6 +28338,11 @@
],
"description": "Default color.\n\n__Default value:__ ■ `\"#4682b4\"`\n\n__Note:__\n- This property cannot be used in a [style config](https://vega.github.io/vega-lite/docs/mark.html#style-config).\n- The `fill` and `stroke` properties have higher precedence than `color` and will override `color`."
},
+ "continuousBandSize": {
+ "description": "The default size of the bars on continuous scales.\n\n__Default value:__ `5`",
+ "minimum": 0,
+ "type": "number"
+ },
"cornerRadius": {
"anyOf": [
{
@@ -28449,6 +28431,18 @@
}
]
},
+ "discreteBandSize": {
+ "anyOf": [
+ {
+ "type": "number"
+ },
+ {
+ "$ref": "#/definitions/RelativeBandSize"
+ }
+ ],
+ "description": "The default size of the bars with discrete dimensions. If unspecified, the default size is `step-2`, which provides 2 pixel offset between bars.",
+ "minimum": 0
+ },
"dx": {
"anyOf": [
{
@@ -28661,6 +28655,17 @@
}
]
},
+ "minBandSize": {
+ "anyOf": [
+ {
+ "type": "number"
+ },
+ {
+ "$ref": "#/definitions/ExprRef"
+ }
+ ],
+ "description": "The minimum band size for bar and rectangle marks. __Default value:__ `0.25`"
+ },
"opacity": {
"anyOf": [
{
diff --git a/pyproject.toml b/pyproject.toml
index 5e52b5d2f..190c7131a 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -104,7 +104,7 @@ doc = [
# Minimum/exact versions, for projects under the `vega` organization
vega-datasets = "v2.11.0" # https://github.com/vega/vega-datasets
vega-embed = "6" # https://github.com/vega/vega-embed
-vega-lite = "v5.20.1" # https://github.com/vega/vega-lite
+vega-lite = "v5.21.0" # https://github.com/vega/vega-lite
[tool.hatch.version]
path = "altair/__init__.py"
diff --git a/tests/utils/test_schemapi.py b/tests/utils/test_schemapi.py
index 86f7e925b..af528d9b7 100644
--- a/tests/utils/test_schemapi.py
+++ b/tests/utils/test_schemapi.py
@@ -794,8 +794,7 @@ def id_func_chart_error_example(val) -> str:
- One of \['utcyear', 'utcquarter', 'utcmonth', 'utcweek', 'utcday', 'utcdayofyear', 'utcdate', 'utchours', 'utcminutes', 'utcseconds', 'utcmilliseconds'\]
- One of \['yearquarter', 'yearquartermonth', 'yearmonth', 'yearmonthdate', 'yearmonthdatehours', 'yearmonthdatehoursminutes', 'yearmonthdatehoursminutesseconds', 'yearweek', 'yearweekday', 'yearweekdayhours', 'yearweekdayhoursminutes', 'yearweekdayhoursminutesseconds', 'yeardayofyear', 'quartermonth', 'monthdate', 'monthdatehours', 'monthdatehoursminutes', 'monthdatehoursminutesseconds', 'weekday', 'weekdayhours', 'weekdayhoursminutes', 'weekdayhoursminutesseconds', 'dayhours', 'dayhoursminutes', 'dayhoursminutesseconds', 'hoursminutes', 'hoursminutesseconds', 'minutesseconds', 'secondsmilliseconds'\]
- One of \['utcyearquarter', 'utcyearquartermonth', 'utcyearmonth', 'utcyearmonthdate', 'utcyearmonthdatehours', 'utcyearmonthdatehoursminutes', 'utcyearmonthdatehoursminutesseconds', 'utcyearweek', 'utcyearweekday', 'utcyearweekdayhours', 'utcyearweekdayhoursminutes', 'utcyearweekdayhoursminutesseconds', 'utcyeardayofyear', 'utcquartermonth', 'utcmonthdate', 'utcmonthdatehours', 'utcmonthdatehoursminutes', 'utcmonthdatehoursminutesseconds', 'utcweekday', 'utcweekdayhours', 'utcweekdayhoursminutes', 'utcweekdayhoursminutesseconds', 'utcdayhours', 'utcdayhoursminutes', 'utcdayhoursminutesseconds', 'utchoursminutes', 'utchoursminutesseconds', 'utcminutesseconds', 'utcsecondsmilliseconds'\]
- - One of \['binnedyear', 'binnedyearquarter', 'binnedyearquartermonth', 'binnedyearmonth', 'binnedyearmonthdate', 'binnedyearmonthdatehours', 'binnedyearmonthdatehoursminutes', 'binnedyearmonthdatehoursminutesseconds', 'binnedyearweek', 'binnedyearweekday', 'binnedyearweekdayhours', 'binnedyearweekdayhoursminutes', 'binnedyearweekdayhoursminutesseconds', 'binnedyeardayofyear'\]
- - One of \['binnedutcyear', 'binnedutcyearquarter', 'binnedutcyearquartermonth', 'binnedutcyearmonth', 'binnedutcyearmonthdate', 'binnedutcyearmonthdatehours', 'binnedutcyearmonthdatehoursminutes', 'binnedutcyearmonthdatehoursminutesseconds', 'binnedutcyearweek', 'binnedutcyearweekday', 'binnedutcyearweekdayhours', 'binnedutcyearweekdayhoursminutes', 'binnedutcyearweekdayhoursminutesseconds', 'binnedutcyeardayofyear'\]
+ - One of \['binnedyear', 'binnedyearquarter', 'binnedyearquartermonth', 'binnedyearmonth', 'binnedyearmonthdate', 'binnedyearmonthdatehours', 'binnedyearmonthdatehoursminutes', 'binnedyearmonthdatehoursminutesseconds', 'binnedyearweek', 'binnedyearweekday', 'binnedyearweekdayhours', 'binnedyearweekdayhoursminutes', 'binnedyearweekdayhoursminutesseconds', 'binnedyeardayofyear', 'binnedutcyear', 'binnedutcyearquarter', 'binnedutcyearquartermonth', 'binnedutcyearmonth', 'binnedutcyearmonthdate', 'binnedutcyearmonthdatehours', 'binnedutcyearmonthdatehoursminutes', 'binnedutcyearmonthdatehoursminutesseconds', 'binnedutcyearweek', 'binnedutcyearweekday', 'binnedutcyearweekdayhours', 'binnedutcyearweekdayhoursminutes', 'binnedutcyearweekdayhoursminutesseconds', 'binnedutcyeardayofyear'\]
- Of type {re.escape("`Mapping[str, Any]`")}$""",
),
(
diff --git a/tools/versioning.py b/tools/versioning.py
index 25e7a226e..5a1ebb09d 100644
--- a/tools/versioning.py
+++ b/tools/versioning.py
@@ -255,7 +255,7 @@ def _iter_py_deps_versions(
if sp.operator in _LOWER_BOUNDS
)
version = str(min(it))
- yield req.name, version
+ yield req.name, version # type: ignore[misc]
def __getattr__(name: str) -> _Versions:
From 23b189103b8c5ac38928876cdde5ec5f71fcadc3 Mon Sep 17 00:00:00 2001
From: Dan Redding <125183946+dangotbanned@users.noreply.github.com>
Date: Thu, 9 Jan 2025 12:42:50 +0000
Subject: [PATCH 36/42] ci: Unpin `pillow`, allow `>=10.0.0` (#3764)
---
pyproject.toml | 2 +-
sphinxext/utils.py | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/pyproject.toml b/pyproject.toml
index 190c7131a..be5241455 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -92,7 +92,7 @@ doc = [
"sphinxext_altair",
"jinja2",
"numpydoc",
- "pillow>=9,<10",
+ "pillow",
"pydata-sphinx-theme>=0.14.1",
"myst-parser",
"sphinx_copybutton",
diff --git a/sphinxext/utils.py b/sphinxext/utils.py
index 743cf0913..ed3e974c6 100644
--- a/sphinxext/utils.py
+++ b/sphinxext/utils.py
@@ -30,7 +30,7 @@ def create_thumbnail(
final_height = height
final_width = int(im_width * height_factor)
- thumb = im.resize((final_width, final_height), Image.ANTIALIAS)
+ thumb = im.resize((final_width, final_height), Image.Resampling.LANCZOS)
thumb.save(thumb_filename)
From 8a6f65c02e18c9acd3a08e02f73670795c0a7e66 Mon Sep 17 00:00:00 2001
From: Dan Redding <125183946+dangotbanned@users.noreply.github.com>
Date: Fri, 10 Jan 2025 14:25:37 +0000
Subject: [PATCH 37/42] chore(ruff): Update to `0.9.0` (#3766)
---
altair/utils/save.py | 2 +-
altair/utils/schemapi.py | 2 +-
altair/vegalite/v5/api.py | 10 +-
altair/vegalite/v5/display.py | 2 +-
pyproject.toml | 284 +++++++++-------------------
sphinxext/code_ref.py | 2 +-
sphinxext/schematable.py | 2 +-
tests/__init__.py | 2 +-
tests/utils/test_plugin_registry.py | 4 +-
tests/utils/test_schemapi.py | 4 +-
tools/generate_schema_wrapper.py | 8 +-
tools/schemapi/schemapi.py | 2 +-
tools/update_init_file.py | 5 +-
tools/vega_expr.py | 3 +-
14 files changed, 113 insertions(+), 219 deletions(-)
diff --git a/altair/utils/save.py b/altair/utils/save.py
index 042d457dc..0b17c8e1f 100644
--- a/altair/utils/save.py
+++ b/altair/utils/save.py
@@ -65,7 +65,7 @@ def set_inspect_mode_argument(
mode = "vega-lite"
if mode != "vega-lite":
- msg = "mode must be 'vega-lite', " f"not '{mode}'"
+ msg = f"mode must be 'vega-lite', not '{mode}'"
raise ValueError(msg)
if mode == "vega-lite" and vegalite_version is None:
diff --git a/altair/utils/schemapi.py b/altair/utils/schemapi.py
index e7708f0d7..3a49b928d 100644
--- a/altair/utils/schemapi.py
+++ b/altair/utils/schemapi.py
@@ -58,7 +58,7 @@
from typing import Never, Self
else:
from typing_extensions import Never, Self
- _OptionalModule: TypeAlias = "ModuleType | None"
+ _OptionalModule: TypeAlias = "ModuleType | None" # noqa: TC008
ValidationErrorList: TypeAlias = list[jsonschema.exceptions.ValidationError]
GroupedValidationErrors: TypeAlias = dict[str, ValidationErrorList]
diff --git a/altair/vegalite/v5/api.py b/altair/vegalite/v5/api.py
index e46e3070a..9a6feb667 100644
--- a/altair/vegalite/v5/api.py
+++ b/altair/vegalite/v5/api.py
@@ -1138,7 +1138,7 @@ def __repr__(self) -> str:
args = f"{COND}{self.condition!r}".replace("\n", "\n ")
else:
conds = "\n ".join(f"{c!r}" for c in self.condition)
- args = f"{COND}[\n " f"{conds}\n ]"
+ args = f"{COND}[\n {conds}\n ]"
return f"{name}({LB}\n {args}\n{RB})"
@@ -1166,9 +1166,7 @@ def __init__(
def __repr__(self) -> str:
return (
- f"{type(self).__name__}(\n"
- f" {self._conditions!r},\n {self._condition!r}\n"
- ")"
+ f"{type(self).__name__}(\n {self._conditions!r},\n {self._condition!r}\n)"
)
def then(self, statement: _StatementType, /, **kwds: Any) -> Then[_Conditions]:
@@ -3771,7 +3769,7 @@ def show(self) -> None:
def _set_resolve(self, **kwargs: Any): # noqa: ANN202
"""Copy the chart and update the resolve property with kwargs."""
if not hasattr(self, "resolve"):
- msg = f"{self.__class__} object has no attribute " "'resolve'"
+ msg = f"{self.__class__} object has no attribute 'resolve'"
raise ValueError(msg)
copy = _top_schema_base(self).copy(deep=["resolve"])
if copy.resolve is Undefined:
@@ -4726,7 +4724,7 @@ def interactive(
"""
if not self.layer:
- msg = "LayerChart: cannot call interactive() until a " "layer is defined"
+ msg = "LayerChart: cannot call interactive() until a layer is defined"
raise ValueError(msg)
copy = self.copy(deep=["layer"])
copy.layer[0] = copy.layer[0].interactive(
diff --git a/altair/vegalite/v5/display.py b/altair/vegalite/v5/display.py
index dcc506958..9c909b2d0 100644
--- a/altair/vegalite/v5/display.py
+++ b/altair/vegalite/v5/display.py
@@ -41,7 +41,7 @@
# The display message when rendering fails
DEFAULT_DISPLAY: Final = f"""\
-
+
If you see this message, it means the renderer has not been properly enabled
for the frontend that you are using. For more information, see
diff --git a/pyproject.toml b/pyproject.toml
index be5241455..db119806e 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -203,193 +203,102 @@ publish-clean-build = [
]
[tool.ruff]
-target-version = "py39"
-line-length = 88
-indent-width = 4
exclude = [
".git",
- "build",
"__pycache__",
+ "build",
"tests/examples_arguments_syntax",
"tests/examples_methods_syntax",
]
+indent-width = 4
+line-length = 88
+target-version = "py39"
[tool.ruff.lint]
-# https://docs.astral.sh/ruff/preview/
-preview = true
-
-# https://docs.astral.sh/ruff/settings/#lint_extend-safe-fixes
-extend-safe-fixes=[
- # unnecessary-comprehension-in-call
- "C419",
- # literal-membership
- "PLR6201",
- # from __future__ import annotations #
- # ---------------------------------- #
- "UP006",
- "UP007",
- "UP008",
- "TCH",
- # assign exception msg to variable #
- # -------------------------------- #
- "EM101",
- "EM102",
- # trailing-whitespace
- "W291",
- # blank line contains whitespace
- "W293",
- # unsorted-dunder-all
- "RUF022",
- # pydocstyle #
- # ---------- #
- # fits-on-one-line
- "D200",
- # escape-sequence-in-docstring
- "D301",
- # ends-in-period
- "D400",
- # missing-return-type-special-method
- "ANN204",
- # unnecessary-dict-comprehension-for-iterable
- "C420",
+extend-safe-fixes = [ # https://docs.astral.sh/ruff/settings/#lint_extend-safe-fixes
+ "ANN204", # missing-return-type-special-method
+ "C419", # unnecessary-comprehension-in-call
+ "C420", # unnecessary-dict-comprehension-for-iterable
+ "D200", # fits-on-one-line
+ "D301", # escape-sequence-in-docstring
+ "D400", # ends-in-period
+ "EM101", # raw-string-in-exception
+ "EM102", # f-string-in-exception
+ "PLR6201", # literal-membership
+ "TC", # flake8-type-checking
+ "UP006", # non-pep585-annotation
+ "UP007", # non-pep604-annotation-union
+ "UP008", # super-call-with-parameters
+ "W291", # trailing-whitespace
+ "W293", # blank line contains whitespace
]
-
-# https://docs.astral.sh/ruff/preview/#using-rules-that-are-in-preview
-extend-select=[
- # refurb
- "FURB",
- # pylint (preview) autofix #
- # ------------------------ #
- # unnecessary-dunder-call
- "PLC2801",
- # unnecessary-dict-index-lookup
- "PLR1733",
- # unnecessary-list-index-lookup
- "PLR1736",
- # literal-membership
- "PLR6201",
- # unspecified-encoding
- "PLW1514",
+extend-select = [ # https://docs.astral.sh/ruff/preview/#using-rules-that-are-in-preview
+ "FURB", # refurb
+ "PLC2801", # unnecessary-dunder-call
+ "PLR1733", # unnecessary-dict-index-lookup
+ "PLR1736", # unnecessary-list-index-lookup
+ "PLR6201", # literal-membership
+ "PLW1514", # unspecified-encoding
]
-select = [
- # flake8-bugbear
- "B",
- # flake8-comprehensions
- "C4",
- # pycodestyle-error
- "E",
- # flake8-errmsg
- "EM",
- # pyflakes
- "F",
- # flake8-future-annotations
- "FA",
- # flynt
- "FLY",
- # flake8-pie
- "PIE",
- # flake8-pytest-style
- "PT",
- # flake8-use-pathlib
- "PTH",
- # Ruff-specific rules
- "RUF",
- # flake8-simplify
- "SIM",
- # flake8-type-checking
- "TCH",
- # flake8-tidy-imports
- "TID",
- # pyupgrade
- "UP",
- # pycodestyle-warning
- "W",
- # pylint (stable) autofix #
- # ----------------------- #
- # iteration-over-set
- "PLC0208",
- # manual-from-import
- "PLR0402",
- # useless-return
- "PLR1711",
- # repeated-equality-comparison
- "PLR1714",
- # collapsible-else-if
- "PLR5501",
- # useless-else-on-loop
- "PLW0120",
- # subprocess-run-without-check
- "PLW1510",
- # nested-min-max
- "PLW3301",
- # pydocstyle #
- # ---------- #
- "D",
- # multi-line-summary-second-line
- "D213",
- # numpy-specific-rules
- "NPY",
- # flake8-annotations
- "ANN",
- # unsorted-imports
- "I001",
- # complex-structure
- "C901",
+ignore = [
+ "ANN401", # any-type
+ "D100", # undocumented-public-module
+ "D101", # undocumented-public-class
+ "D102", # undocumented-public-method
+ "D103", # undocumented-public-function
+ "D104", # undocumented-public-package
+ "D105", # undocumented-magic-method
+ "D107", # undocumented-public-init
+ "D206", # indent-with-spaces
+ "D212", # multi-line-summary-first-line ((D213) is the opposite of this)
+ "D401", # non-imperative-mood
+ "D413", # missing-blank-line-after-last-section
+ "E501", # line-too-long (https://docs.astral.sh/ruff/formatter/#conflicting-lint-rules)
+ "RUF012", # mutable-class-default
+ "RUF052", # used-dummy-variable
+ "SIM105", # suppressible-exception (https://github.com/vega/altair/pull/3431#discussion_r1629808660)
+ "W505", # doc-line-too-long
]
-ignore = [
- # Whitespace before ':'
- "E203",
- # Too many leading '#' for block comment
- "E266",
- # Line too long
- "E501",
- # zip() without an explicit strict= parameter set.
- # python>=3.10 only
- "B905",
- # mutable-class-default
- "RUF012",
- # used-dummy-variable
- "RUF052",
- # suppressible-exception
- # https://github.com/vega/altair/pull/3431#discussion_r1629808660
- "SIM105",
- # pydocstyle/ https://docs.astral.sh/ruff/formatter/#conflicting-lint-rules #
- # ------------------------------------------------------------------------- #
- # undocumented-public-module
- "D100",
- # undocumented-public-class
- "D101",
- # undocumented-public-method
- "D102",
- # undocumented-public-function
- "D103",
- # undocumented-public-package
- "D104",
- # undocumented-magic-method
- "D105",
- # undocumented-public-init
- "D107",
- # indent-with-spaces
- "D206",
- # multi-line-summary-first-line ((D213) is the opposite of this)
- "D212",
- # Imperative mood
- "D401",
- # Blank line after last section
- "D413",
- # doc-line-too-long
- "W505",
- # Any as annotation
- "ANN401"
+mccabe.max-complexity = 10
+preview = true # https://docs.astral.sh/ruff/preview/
+pydocstyle.convention = "numpy" # https://docs.astral.sh/ruff/settings/#lintpydocstyle
+select = [
+ "ANN", # flake8-annotations
+ "B", # flake8-bugbear
+ "C4", # flake8-comprehensions
+ "C901", # complex-structure
+ "D", # pydocstyle
+ "D213", # multi-line-summary-second-line
+ "E", # pycodestyle-error
+ "EM", # flake8-errmsg
+ "F", # pyflakes
+ "FA", # flake8-future-annotations
+ "FLY", # flynt
+ "I001", # unsorted-imports
+ "NPY", # numpy-specific-rules
+ "PIE", # flake8-pie
+ "PLC0208", # iteration-over-set
+ "PLR0402", # manual-from-import
+ "PLR1711", # useless-return
+ "PLR1714", # repeated-equality-comparison
+ "PLR5501", # collapsible-else-if
+ "PLW0120", # useless-else-on-loop
+ "PLW1510", # subprocess-run-without-check
+ "PLW3301", # nested-min-max
+ "PT", # flake8-pytest-style
+ "PTH", # flake8-use-pathlib
+ "RUF", # Ruff-specific rules
+ "SIM", # flake8-simplify
+ "TC", # flake8-type-checking
+ "TID", # flake8-tidy-imports
+ "UP", # pyupgrade
+ "W", # pycodestyle-warning
]
-# https://docs.astral.sh/ruff/settings/#lintpydocstyle
-pydocstyle={ convention="numpy" }
-mccabe={ max-complexity=10 }
[tool.ruff.lint.isort]
-classes = ["expr", "datum"]
+classes = ["datum", "expr"]
extra-standard-library = ["typing_extensions"]
-known-first-party=[
+known-first-party = [
"altair_tiles",
"sphinxext_altair",
"vega_datasets",
@@ -400,37 +309,30 @@ split-on-trailing-comma = false
[tool.ruff.lint.flake8-tidy-imports.banned-api]
# https://docs.astral.sh/ruff/settings/#lint_flake8-tidy-imports_banned-api
-"typing.Optional".msg = """
-Use `Union[T, None]` instead.
-`typing.Optional` is likely to be confused with `altair.typing.Optional`, \
-which have a similar but different semantic meaning.
-See https://github.com/vega/altair/pull/3449
-"""
"narwhals.dependencies".msg = """
Import `dependencies` from `narwhals.stable.v1` instead.
"""
+"narwhals.dtypes".msg = """
+Import `dtypes` from `narwhals.stable.v1` instead.
+"""
"narwhals.typing".msg = """
Import `typing` from `narwhals.stable.v1` instead.
"""
-"narwhals.dtypes".msg = """
-Import `dtypes` from `narwhals.stable.v1` instead.
+"typing.Optional".msg = """
+Use `Union[T, None]` instead.
+`typing.Optional` is likely to be confused with `altair.typing.Optional`, \
+which have a similar but different semantic meaning.
+See https://github.com/vega/altair/pull/3449
"""
[tool.ruff.lint.per-file-ignores]
-# Only enforce type annotation rules on public api
-"!altair/vegalite/v5/api.py" = ["ANN"]
-# Allow complex if/elif branching during tests
-"tests/**/*.py"= ["C901"]
-
+"!altair/vegalite/v5/api.py" = ["ANN"] # Only enforce annotation rules on public api
+"tests/**/*.py" = ["C901"] # Allow complex if/elif branching during tests
[tool.ruff.format]
-quote-style = "double"
-indent-style = "space"
-skip-magic-trailing-comma = false
-line-ending = "lf"
-# https://docs.astral.sh/ruff/formatter/#docstring-formatting
-docstring-code-format = true
+docstring-code-format = true # https://docs.astral.sh/ruff/formatter/#docstring-formatting
docstring-code-line-length = 88
+line-ending = "lf"
[tool.pytest.ini_options]
# Pytest does not need to search these folders for test functions.
diff --git a/sphinxext/code_ref.py b/sphinxext/code_ref.py
index efe9ef5e1..4ddea8a60 100644
--- a/sphinxext/code_ref.py
+++ b/sphinxext/code_ref.py
@@ -64,7 +64,7 @@ def validate_packages(packages: Any) -> str:
if len(split) == 1:
return f'["{split[0]}"]'
else:
- return f'[{",".join(split)}]'
+ return f"[{','.join(split)}]"
def raw_html(text: str, /) -> nodes.raw:
diff --git a/sphinxext/schematable.py b/sphinxext/schematable.py
index 323f8dfe7..0b3a9c3c6 100644
--- a/sphinxext/schematable.py
+++ b/sphinxext/schematable.py
@@ -40,7 +40,7 @@ def type_description(schema: dict[str, Any]) -> str:
)
else:
warnings.warn(
- f"cannot infer type for schema with keys {schema.keys()}" "",
+ f"cannot infer type for schema with keys {schema.keys()}",
stacklevel=1,
)
return "--"
diff --git a/tests/__init__.py b/tests/__init__.py
index 617cfca80..706f6d181 100644
--- a/tests/__init__.py
+++ b/tests/__init__.py
@@ -22,7 +22,7 @@
from _pytest.mark import ParameterSet
MarksType: TypeAlias = (
- "pytest.MarkDecorator | Collection[pytest.MarkDecorator | pytest.Mark]"
+ "pytest.MarkDecorator | Collection[pytest.MarkDecorator | pytest.Mark]" # noqa: TC008
)
diff --git a/tests/utils/test_plugin_registry.py b/tests/utils/test_plugin_registry.py
index d200bbe96..759a316df 100644
--- a/tests/utils/test_plugin_registry.py
+++ b/tests/utils/test_plugin_registry.py
@@ -32,7 +32,7 @@ def test_plugin_registry():
assert plugins.active == ""
assert plugins.get() is None
assert repr(plugins) == (
- "TypedCallableRegistry(active='', " "registered=['new_plugin'])"
+ "TypedCallableRegistry(active='', registered=['new_plugin'])"
)
plugins.enable("new_plugin")
@@ -42,7 +42,7 @@ def test_plugin_registry():
assert fn is not None
assert fn(3) == 9
assert repr(plugins) == (
- "TypedCallableRegistry(active='new_plugin', " "registered=['new_plugin'])"
+ "TypedCallableRegistry(active='new_plugin', registered=['new_plugin'])"
)
diff --git a/tests/utils/test_schemapi.py b/tests/utils/test_schemapi.py
index af528d9b7..f8b994153 100644
--- a/tests/utils/test_schemapi.py
+++ b/tests/utils/test_schemapi.py
@@ -362,9 +362,7 @@ def test_attribute_error():
invalid_attr = "invalid_attribute"
with pytest.raises(AttributeError) as err:
getattr(m, invalid_attr)
- assert str(err.value) == (
- "'MySchema' object has no attribute " "'invalid_attribute'"
- )
+ assert str(err.value) == ("'MySchema' object has no attribute 'invalid_attribute'")
def test_to_from_json(dct):
diff --git a/tools/generate_schema_wrapper.py b/tools/generate_schema_wrapper.py
index df1b32681..1200de88e 100644
--- a/tools/generate_schema_wrapper.py
+++ b/tools/generate_schema_wrapper.py
@@ -766,7 +766,7 @@ def generate_vegalite_schema_wrapper(fp: Path, /) -> ModuleDef[str]:
f"from altair.vegalite.v5.api import {CHART_DATA_TYPE}",
"from ._typing import * # noqa: F403",
),
- "\n" f"__all__ = {all_}\n",
+ f"\n__all__ = {all_}\n",
LOAD_SCHEMA.format(schemafile=SCHEMA_FILE),
BASE_SCHEMA.format(basename=basename),
schema_class(
@@ -905,7 +905,7 @@ def generate_vegalite_channel_wrappers(fp: Path, /) -> ModuleDef[list[str]]:
f"from altair.vegalite.v5.api import {', '.join(TYPING_API)}",
textwrap.indent(import_typing_extensions((3, 11), "Self"), " "),
),
- "\n" f"__all__ = {all_}\n",
+ f"\n__all__ = {all_}\n",
CHANNEL_MIXINS,
*class_defs,
*generate_encoding_artifacts(
@@ -1016,9 +1016,7 @@ def generate_typed_dict(
f"{args}\n "
f"__extra_items__: {finalize_type_reprs(kwds_all_tps, target=TARGET)}"
)
- doc = (
- f"{doc}\n" f"{EXTRA_ITEMS_MESSAGE.format(invalid_kwds=repr(sorted(kwds)))}"
- )
+ doc = f"{doc}\n{EXTRA_ITEMS_MESSAGE.format(invalid_kwds=repr(sorted(kwds)))}"
return UNIVERSAL_TYPED_DICT.format(
name=name,
diff --git a/tools/schemapi/schemapi.py b/tools/schemapi/schemapi.py
index 60e8182a7..0b926ec69 100644
--- a/tools/schemapi/schemapi.py
+++ b/tools/schemapi/schemapi.py
@@ -56,7 +56,7 @@
from typing import Never, Self
else:
from typing_extensions import Never, Self
- _OptionalModule: TypeAlias = "ModuleType | None"
+ _OptionalModule: TypeAlias = "ModuleType | None" # noqa: TC008
ValidationErrorList: TypeAlias = list[jsonschema.exceptions.ValidationError]
GroupedValidationErrors: TypeAlias = dict[str, ValidationErrorList]
diff --git a/tools/update_init_file.py b/tools/update_init_file.py
index 7faa837d3..0dfbd6c62 100644
--- a/tools/update_init_file.py
+++ b/tools/update_init_file.py
@@ -83,7 +83,7 @@ def update__all__variable() -> None:
ruff.write_lint_format(init_path, new_lines)
for source in DYNAMIC_ALL:
- print(f"Updating `__all__`\n " f"{source!r}\n ->{normalize_source(source)!s}")
+ print(f"Updating `__all__`\n {source!r}\n ->{normalize_source(source)!s}")
update_dynamic__all__(source)
@@ -149,8 +149,7 @@ def _retrieve_all(name: str, /) -> list[str]:
found = _import_module(name).__all__
if not found:
msg = (
- f"Expected to find a populated `__all__` for {name!r},\n"
- f"but got: {found!r}"
+ f"Expected to find a populated `__all__` for {name!r},\nbut got: {found!r}"
)
raise AttributeError(msg)
return found
diff --git a/tools/vega_expr.py b/tools/vega_expr.py
index 7e7a33035..9f7e010a3 100644
--- a/tools/vega_expr.py
+++ b/tools/vega_expr.py
@@ -391,8 +391,7 @@ def _compile(self) -> Pattern[str]:
if not self._mapping:
name = self._mapping.__qualname__ # type: ignore[attr-defined]
msg = (
- f"Requires {name!r} to be populated, but got:\n"
- f"{name}={self._mapping!r}"
+ f"Requires {name!r} to be populated, but got:\n{name}={self._mapping!r}"
)
raise TypeError(msg)
return re.compile(rf"{self._fmt_match.format('|'.join(self._mapping))}")
From 4bb957bdf8242ffce9ad3f771f89f2d9bbc5f401 Mon Sep 17 00:00:00 2001
From: Dan Redding <125183946+dangotbanned@users.noreply.github.com>
Date: Mon, 13 Jan 2025 17:06:30 +0000
Subject: [PATCH 38/42] feat: Show `user_rows` in `MaxRowsError` message
(#3768)
---
altair/utils/data.py | 40 +++++++++++++++++++++++-----------------
1 file changed, 23 insertions(+), 17 deletions(-)
diff --git a/altair/utils/data.py b/altair/utils/data.py
index 565a6df7d..63ae7ffb0 100644
--- a/altair/utils/data.py
+++ b/altair/utils/data.py
@@ -106,6 +106,26 @@ def consolidate_datasets(self, value: bool) -> None:
class MaxRowsError(Exception):
"""Raised when a data model has too many rows."""
+ def __init__(self, message: str, /) -> None:
+ self.message = message
+ super().__init__(self.message)
+
+ @classmethod
+ def from_limit_rows(cls, user_rows: int, max_rows: int, /) -> MaxRowsError:
+ msg = (
+ f"The number of rows in your dataset ({user_rows}) is greater "
+ f"than the maximum allowed ({max_rows}).\n\n"
+ "Try enabling the VegaFusion data transformer which "
+ "raises this limit by pre-evaluating data\n"
+ "transformations in Python.\n"
+ " >> import altair as alt\n"
+ ' >> alt.data_transformers.enable("vegafusion")\n\n'
+ "Or, see https://altair-viz.github.io/user_guide/large_datasets.html "
+ "for additional information\n"
+ "on how to plot large datasets."
+ )
+ return cls(msg)
+
@overload
def limit_rows(data: None = ..., max_rows: int | None = ...) -> partial: ...
@@ -123,21 +143,6 @@ def limit_rows(
return partial(limit_rows, max_rows=max_rows)
check_data_type(data)
- def raise_max_rows_error():
- msg = (
- "The number of rows in your dataset is greater "
- f"than the maximum allowed ({max_rows}).\n\n"
- "Try enabling the VegaFusion data transformer which "
- "raises this limit by pre-evaluating data\n"
- "transformations in Python.\n"
- " >> import altair as alt\n"
- ' >> alt.data_transformers.enable("vegafusion")\n\n'
- "Or, see https://altair-viz.github.io/user_guide/large_datasets.html "
- "for additional information\n"
- "on how to plot large datasets."
- )
- raise MaxRowsError(msg)
-
if isinstance(data, SupportsGeoInterface):
if data.__geo_interface__["type"] == "FeatureCollection":
values = data.__geo_interface__["features"]
@@ -152,8 +157,9 @@ def raise_max_rows_error():
data = to_eager_narwhals_dataframe(data)
values = data
- if max_rows is not None and len(values) > max_rows:
- raise_max_rows_error()
+ n = len(values)
+ if max_rows is not None and n > max_rows:
+ raise MaxRowsError.from_limit_rows(n, max_rows)
return data
From a654f604f0b520f4710a267e376ba2567058baeb Mon Sep 17 00:00:00 2001
From: Dan Redding <125183946+dangotbanned@users.noreply.github.com>
Date: Thu, 16 Jan 2025 14:54:53 +0000
Subject: [PATCH 39/42] chore(ruff): Fix `0.9.2` lints (#3771)
---
altair/utils/schemapi.py | 2 +-
tests/__init__.py | 2 +-
tests/utils/test_utils.py | 2 +-
tests/vegalite/v5/test_renderers.py | 24 +++++++++++++-----------
tools/schemapi/schemapi.py | 2 +-
5 files changed, 17 insertions(+), 15 deletions(-)
diff --git a/altair/utils/schemapi.py b/altair/utils/schemapi.py
index 3a49b928d..e7708f0d7 100644
--- a/altair/utils/schemapi.py
+++ b/altair/utils/schemapi.py
@@ -58,7 +58,7 @@
from typing import Never, Self
else:
from typing_extensions import Never, Self
- _OptionalModule: TypeAlias = "ModuleType | None" # noqa: TC008
+ _OptionalModule: TypeAlias = "ModuleType | None"
ValidationErrorList: TypeAlias = list[jsonschema.exceptions.ValidationError]
GroupedValidationErrors: TypeAlias = dict[str, ValidationErrorList]
diff --git a/tests/__init__.py b/tests/__init__.py
index 706f6d181..617cfca80 100644
--- a/tests/__init__.py
+++ b/tests/__init__.py
@@ -22,7 +22,7 @@
from _pytest.mark import ParameterSet
MarksType: TypeAlias = (
- "pytest.MarkDecorator | Collection[pytest.MarkDecorator | pytest.Mark]" # noqa: TC008
+ "pytest.MarkDecorator | Collection[pytest.MarkDecorator | pytest.Mark]"
)
diff --git a/tests/utils/test_utils.py b/tests/utils/test_utils.py
index 23120e616..e6b75f4f2 100644
--- a/tests/utils/test_utils.py
+++ b/tests/utils/test_utils.py
@@ -30,7 +30,7 @@ def _check(arr, typ):
_check(nulled, "quantitative")
_check(["a", "b", "c"], "nominal")
- with pytest.warns(UserWarning):
+ with pytest.warns(UserWarning, match=r"infer vegalite type"):
_check([], "nominal")
diff --git a/tests/vegalite/v5/test_renderers.py b/tests/vegalite/v5/test_renderers.py
index d8b35308b..426f9114f 100644
--- a/tests/vegalite/v5/test_renderers.py
+++ b/tests/vegalite/v5/test_renderers.py
@@ -35,7 +35,7 @@ def chart():
return alt.Chart("data.csv").mark_point()
-def test_html_renderer_embed_options(chart, renderer="html"):
+def test_html_renderer_embed_options(chart):
"""Test that embed_options in renderer metadata are correctly manifest in html."""
# Short of parsing the javascript, it's difficult to parse out the
# actions. So we use string matching
@@ -45,7 +45,7 @@ def assert_has_options(chart, **opts):
for key, val in opts.items():
assert json.dumps({key: val})[1:-1] in html
- with alt.renderers.enable(renderer):
+ with alt.renderers.enable("html"):
assert_has_options(chart, mode="vega-lite")
with alt.renderers.enable(embed_options={"actions": {"export": True}}):
@@ -55,11 +55,13 @@ def assert_has_options(chart, **opts):
assert_has_options(chart, mode="vega-lite", actions=True)
-def test_mimetype_renderer_embed_options(chart, renderer="mimetype"):
+def test_mimetype_renderer_embed_options(chart):
# check that metadata is passed appropriately
- mimetype = alt.display.VEGALITE_MIME_TYPE
+ from altair.vegalite.v5.display import VEGALITE_MIME_TYPE
+
+ mimetype = VEGALITE_MIME_TYPE
spec = chart.to_dict()
- with alt.renderers.enable(renderer):
+ with alt.renderers.enable("mimetype"):
# Sanity check: no metadata specified
bundle, metadata = chart._repr_mimebundle_(None, None)
assert bundle[mimetype] == spec
@@ -71,11 +73,11 @@ def test_mimetype_renderer_embed_options(chart, renderer="mimetype"):
assert metadata == {mimetype: {"embed_options": {"actions": False}}}
-def test_json_renderer_embed_options(chart, renderer="json"):
+def test_json_renderer_embed_options(chart):
"""Test that embed_options in renderer metadata are correctly manifest in html."""
mimetype = "application/json"
spec = chart.to_dict()
- with alt.renderers.enable(renderer):
+ with alt.renderers.enable("json"):
# Sanity check: no options specified
bundle, metadata = chart._repr_mimebundle_(None, None)
assert bundle[mimetype] == spec
@@ -89,12 +91,12 @@ def test_json_renderer_embed_options(chart, renderer="json"):
@skip_requires_vl_convert
-def test_renderer_with_none_embed_options(chart, renderer="mimetype"):
+def test_renderer_with_none_embed_options(chart):
# Check that setting embed_options to None doesn't crash
from altair.utils.mimebundle import spec_to_mimebundle
spec = chart.to_dict()
- with alt.renderers.enable(renderer, embed_options=None):
+ with alt.renderers.enable("mimetype", embed_options=None):
bundle = spec_to_mimebundle(
spec=spec,
mode="vega-lite",
@@ -105,9 +107,9 @@ def test_renderer_with_none_embed_options(chart, renderer="mimetype"):
@jupyter_marks
-def test_jupyter_renderer_mimetype(chart, renderer="jupyter") -> None:
+def test_jupyter_renderer_mimetype(chart) -> None:
"""Test that we get the expected widget mimetype when the jupyter renderer is enabled."""
- with alt.renderers.enable(renderer):
+ with alt.renderers.enable("jupyter"):
assert (
"application/vnd.jupyter.widget-view+json"
in chart._repr_mimebundle_(None, None)[0]
diff --git a/tools/schemapi/schemapi.py b/tools/schemapi/schemapi.py
index 0b926ec69..60e8182a7 100644
--- a/tools/schemapi/schemapi.py
+++ b/tools/schemapi/schemapi.py
@@ -56,7 +56,7 @@
from typing import Never, Self
else:
from typing_extensions import Never, Self
- _OptionalModule: TypeAlias = "ModuleType | None" # noqa: TC008
+ _OptionalModule: TypeAlias = "ModuleType | None"
ValidationErrorList: TypeAlias = list[jsonschema.exceptions.ValidationError]
GroupedValidationErrors: TypeAlias = dict[str, ValidationErrorList]
From f1ae31e41fc3b68f951b31bc3668a111a5624d42 Mon Sep 17 00:00:00 2001
From: Dan Redding <125183946+dangotbanned@users.noreply.github.com>
Date: Thu, 16 Jan 2025 15:07:35 +0000
Subject: [PATCH 40/42] chore: Add `needs-triage` to new bug reports (#3769)
---
.github/ISSUE_TEMPLATE/bug-report.yml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/.github/ISSUE_TEMPLATE/bug-report.yml b/.github/ISSUE_TEMPLATE/bug-report.yml
index b9112fb45..67e5268c3 100644
--- a/.github/ISSUE_TEMPLATE/bug-report.yml
+++ b/.github/ISSUE_TEMPLATE/bug-report.yml
@@ -1,6 +1,6 @@
name: Bug report
description: Report something that is broken
-labels: ["bug"]
+labels: ["bug", "needs-triage"]
body:
- type: markdown
attributes:
From f45dcfb551a66bbacb0c2b694ea2b7ce5a1cbdf2 Mon Sep 17 00:00:00 2001
From: Dan Redding <125183946+dangotbanned@users.noreply.github.com>
Date: Thu, 16 Jan 2025 15:36:50 +0000
Subject: [PATCH 41/42] test: Make `skip_requires_pyarrow` compatible w/
`pytest.param` (#3772)
---
tests/__init__.py | 31 +++++++++++++++++++------------
1 file changed, 19 insertions(+), 12 deletions(-)
diff --git a/tests/__init__.py b/tests/__init__.py
index 617cfca80..17a33e91e 100644
--- a/tests/__init__.py
+++ b/tests/__init__.py
@@ -5,14 +5,14 @@
import sys
from importlib.util import find_spec
from pathlib import Path
-from typing import TYPE_CHECKING, Any
+from typing import TYPE_CHECKING, overload
import pytest
from tests import examples_arguments_syntax, examples_methods_syntax
if TYPE_CHECKING:
- from collections.abc import Callable, Collection, Iterator, Mapping
+ from collections.abc import Collection, Iterator, Mapping
from re import Pattern
if sys.version_info >= (3, 11):
@@ -20,6 +20,7 @@
else:
from typing_extensions import TypeAlias
from _pytest.mark import ParameterSet
+ from _pytest.mark.structures import Markable
MarksType: TypeAlias = (
"pytest.MarkDecorator | Collection[pytest.MarkDecorator | pytest.Mark]"
@@ -96,9 +97,21 @@ def windows_has_tzdata() -> bool:
"""
+@overload
def skip_requires_pyarrow(
- fn: Callable[..., Any] | None = None, /, *, requires_tzdata: bool = False
-) -> Callable[..., Any]:
+ fn: None = ..., /, *, requires_tzdata: bool = ...
+) -> pytest.MarkDecorator: ...
+
+
+@overload
+def skip_requires_pyarrow(
+ fn: Markable, /, *, requires_tzdata: bool = ...
+) -> Markable: ...
+
+
+def skip_requires_pyarrow(
+ fn: Markable | None = None, /, *, requires_tzdata: bool = False
+) -> pytest.MarkDecorator | Markable:
"""
``pytest.mark.skipif`` decorator.
@@ -109,7 +122,7 @@ def skip_requires_pyarrow(
https://github.com/vega/altair/issues/3050
.. _pyarrow:
- https://pypi.org/project/pyarrow/
+ https://pypi.org/project/pyarrow/
"""
composed = pytest.mark.skipif(
find_spec("pyarrow") is None, reason="`pyarrow` not installed."
@@ -120,13 +133,7 @@ def skip_requires_pyarrow(
reason="Timezone database is not installed on Windows",
)(composed)
- def wrap(test_fn: Callable[..., Any], /) -> Callable[..., Any]:
- return composed(test_fn)
-
- if fn is None:
- return wrap
- else:
- return wrap(fn)
+ return composed if fn is None else composed(fn)
def id_func_str_only(val) -> str:
From 21f5849b32923674d23a377d8671b562644b56b2 Mon Sep 17 00:00:00 2001
From: Dan Redding <125183946+dangotbanned@users.noreply.github.com>
Date: Fri, 17 Jan 2025 11:59:51 +0000
Subject: [PATCH 42/42] build: Migrate from `hatch` to `uv` (#3723)
---
.github/workflows/build.yml | 2 +-
.github/workflows/docbuild.yml | 14 +-
.github/workflows/lint.yml | 13 +-
CONTRIBUTING.md | 94 +-
NOTES_FOR_MAINTAINERS.md | 6 +-
README.md | 11 +-
RELEASING.md | 29 +-
doc/getting_started/installation.rst | 22 -
doc/sync_website.sh | 27 -
pyproject.toml | 136 +-
tools/__init__.py | 2 +
tools/fs.py | 139 ++
tools/sync_website.py | 102 +
uv.lock | 3297 ++++++++++++++++++++++++++
14 files changed, 3681 insertions(+), 213 deletions(-)
delete mode 100644 doc/sync_website.sh
create mode 100644 tools/fs.py
create mode 100644 tools/sync_website.py
create mode 100644 uv.lock
diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
index 7010faa2c..d92f5fc44 100644
--- a/.github/workflows/build.yml
+++ b/.github/workflows/build.yml
@@ -69,7 +69,7 @@ jobs:
fi
- name: Test with pytest
run: |
- uv run pytest --pyargs --numprocesses=logical --doctest-modules tests
+ uv run pytest --pyargs --numprocesses=logical --doctest-modules --doctest-ignore-import-errors tests
- name: Validate Vega-Lite schema
run: |
# We install all 'format' dependencies of jsonschema as check-jsonschema
diff --git a/.github/workflows/docbuild.yml b/.github/workflows/docbuild.yml
index 1bd2aa0f6..c3978de5e 100644
--- a/.github/workflows/docbuild.yml
+++ b/.github/workflows/docbuild.yml
@@ -2,9 +2,6 @@ name: docbuild
on: [push, pull_request]
-env:
- UV_SYSTEM_PYTHON: 1
-
jobs:
build:
runs-on: ubuntu-latest
@@ -16,13 +13,18 @@ jobs:
python-version: "3.12"
- name: Install uv
uses: astral-sh/setup-uv@v5
+ with:
+ enable-cache: true
+ cache-dependency-glob: |
+ **/uv.lock
+ **/pyproject.toml
- name: Install dependencies
- run: uv pip install -e ".[dev, all, doc]"
- - name: Run doc:build-html
+ run: uv sync --all-extras
+ - name: Build docs
run: |
mkdir -p doc/_images
uv run sphinx-build -b html -d doc/_build/doctrees doc doc/_build/html
- - name: Run doc:doctest
+ - name: Run doctests
run: |
uv run sphinx-build -b doctest -d doc/_build/doctrees doc doc/_build/doctest
diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml
index 815cad4d0..585dc0f5f 100644
--- a/.github/workflows/lint.yml
+++ b/.github/workflows/lint.yml
@@ -14,15 +14,20 @@ jobs:
- uses: actions/checkout@v4
- name: Install uv
uses: astral-sh/setup-uv@v5
+ with:
+ enable-cache: true
+ cache-dependency-glob: |
+ **/uv.lock
+ **/pyproject.toml
# Installing all dependencies and not just the linters as mypy needs them for type checking
- name: Install dependencies
- run: uv pip install -e ".[dev, all]" --system
- - name: Lint with ruff
+ run: uv sync --all-extras
+ - name: ruff check (lint)
run: |
uv run ruff check
- - name: Check formatting with ruff
+ - name: ruff format
run: |
uv run ruff format --check --diff
- - name: Lint with mypy
+ - name: mypy (type check)
run: |
uv run mypy altair tests
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index 541339a6b..97aba4227 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -28,18 +28,54 @@ git clone https://github.com/YOUR-USERNAME/altair.git
To keep your fork up to date with changes in this repo,
you can [use the fetch upstream button on GitHub](https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/working-with-forks/syncing-a-fork).
-Now you can install the latest version of Altair locally using `pip`.
-The `-e` flag indicates that your local changes will be reflected
-every time you open a new Python interpreter
-(instead of having to reinstall the package each time).
+
+[Install `uv`](https://docs.astral.sh/uv/getting-started/installation/), or update to the latest version:
+
+```cmd
+uv self update
+```
+Install Python:
+
+```cmd
+uv python install 3.12
+```
+
+Initialize a new virtual environment:
```cmd
-cd altair/
-python -m pip install -e ".[all, dev]"
+cd altair/
+uv venv -p 3.12
```
-'[all, dev]' indicates that pip should also install the optional and development requirements
-which you can find in `pyproject.toml` (`[project.optional-dependencies]/all` and `[project.optional-dependencies]/dev`)
+Activate your environment:
+
+macOS/Linux
+
+
+```bash
+source .venv/bin/activate
+```
+
+
+
+
+Windows
+
+
+```cmd
+.venv\Scripts\activate
+```
+
+
+
+
+Install the project with all development dependencies:
+```cmd
+uv sync --all-extras
+```
+
+> [!TIP]
+> If you're new to `uv`, check out their [Getting started](https://docs.astral.sh/uv/getting-started/) guide for help
### Creating a Branch
@@ -59,7 +95,7 @@ make sure to run the following to see if there are any changes
to the automatically generated files:
```bash
-hatch run generate-schema-wrapper
+uv run task generate-schema-wrapper
```
For information on how to update the Vega-Lite version that Altair uses,
@@ -72,7 +108,7 @@ it is recommended that you run the Altair test suite,
which includes a number of tests to validate the correctness of your code:
```bash
-hatch test
+uv run task test
```
@@ -83,14 +119,15 @@ Study the output of any failed tests and try to fix the issues
before proceeding to the next section.
#### Failures on specific python version(s)
-By default, `hatch test` will run the test suite against the currently active python version.
+
+By default, `uv run task test` will run the test suite against the currently active python version.
Two useful variants for debugging failures that only appear *after* you've submitted your PR:
```bash
# Test against all python version(s) in the matrix
-hatch test --all
-# Test against a specific python version
-hatch test --python 3.8
+uv run task test-all
+# Test against our minimum required version
+uv run task test-min
```
See [hatch test](https://hatch.pypa.io/latest/cli/reference/#hatch-test) docs for other options.
@@ -99,7 +136,7 @@ See [hatch test](https://hatch.pypa.io/latest/cli/reference/#hatch-test) docs fo
If `test_completeness_of__all__` fails, you may need to run:
```bash
-hatch run update-init-file
+uv run task update-init-file
```
However, this test usually indicates *unintentional* addition(s) to the top-level `alt.` namespace that will need resolving first.
@@ -204,27 +241,20 @@ Some additional notes:
The process to build the documentation locally consists of three steps:
-1. Clean any previously generated files to ensure a clean build.
-2. Generate the documentation in HTML format.
-3. View the generated documentation using a local Python testing server.
-
-The specific commands for each step depend on your operating system.
-Make sure you execute the following commands from the root dir of altair and have [`hatch`](https://hatch.pypa.io/) installed in your local environment.
+1. **Clean** (remove) any previously generated documentation files.
+2. **Build** the documentation in HTML format.
+3. View the documentation using a *local* Python testing **server**.
-- For MacOS and Linux, run the following commands in your terminal:
-```bash
-hatch run doc:clean-all
-hatch run doc:build-html
-hatch run doc:serve
-```
-
-- For Windows, use these commands instead:
+Steps 1 & 2 can be run as a single command, followed by step 3:
```cmd
-hatch run doc:clean-all-win
-hatch run doc:build-html-win
-hatch run doc:serve
+uv run task doc-clean-build
+uv run task doc-serve
```
+> [!TIP]
+> If these commands were not available for you, make sure you've [set up your environment](#setting-up-your-environment)
+
+
To view the documentation, open your browser and go to `http://localhost:8000`. To stop the server, use `^C` (control+c) in the terminal.
---
diff --git a/NOTES_FOR_MAINTAINERS.md b/NOTES_FOR_MAINTAINERS.md
index 50fadfdf8..4f4537811 100644
--- a/NOTES_FOR_MAINTAINERS.md
+++ b/NOTES_FOR_MAINTAINERS.md
@@ -7,10 +7,10 @@ The core Python API for Altair can be found in the following locations:
- ``altair/vegalite/v5/schema/``
All the files within these directories are created automatically by running
-the following script from the root of the repository:
+the following script:
```bash
-hatch run generate-schema-wrapper
+uv run task generate-schema-wrapper
```
This script does a couple things:
@@ -86,7 +86,7 @@ These additional methods have fairly good test coverage, so running the test
suite should identify any inconsistencies:
```bash
-hatch test
+uv run task test
```
Generally, minor version updates (e.g. Vega-Lite 2.3->2.4) have been relatively
diff --git a/README.md b/README.md
index 6134975c6..3fa703d80 100644
--- a/README.md
+++ b/README.md
@@ -108,19 +108,10 @@ you can post it on [StackOverflow](https://stackoverflow.com/questions/tagged/al
For bugs and feature requests, please open a [Github Issue](https://github.com/vega/altair/issues).
## Development
-
-[![Hatch project](https://img.shields.io/badge/%F0%9F%A5%9A-Hatch-4051b5.svg)](https://github.com/pypa/hatch)
+[![uv](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/astral-sh/uv/main/assets/badge/v0.json)](https://github.com/astral-sh/uv)
[![Ruff](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/astral-sh/ruff/main/assets/badge/v2.json)](https://github.com/astral-sh/ruff)
[![pytest](https://img.shields.io/badge/logo-pytest-blue?logo=pytest&labelColor=5c5c5c&label=%20)](https://github.com/pytest-dev/pytest)
-You can find the instructions on how to install the package for development in [the documentation](https://altair-viz.github.io/getting_started/installation.html).
-
-To run the tests and linters, use
-
-```bash
-hatch test
-```
-
For information on how to contribute your developments back to the Vega-Altair repository, see
[`CONTRIBUTING.md`](https://github.com/vega/altair/blob/main/CONTRIBUTING.md)
diff --git a/RELEASING.md b/RELEASING.md
index 264081ebd..ef6717f6f 100644
--- a/RELEASING.md
+++ b/RELEASING.md
@@ -1,10 +1,10 @@
1. Check all [Vega project](https://github.com/orgs/vega/repositories?type=source) versions are up-to-date. See [NOTES_FOR_MAINTAINERS.md](NOTES_FOR_MAINTAINERS.md)
-2. Make sure to have an environment set up with `hatch` installed. See [CONTRIBUTING.md](CONTRIBUTING.md).
- Remove any existing environments managed by `hatch` so that it will create new ones
- with the latest dependencies when executing the commands further below:
+
+2. Make sure to have [set up your environment](CONTRIBUTING.md#setting-up-your-environment).
+ Update your environment with the latest dependencies:
- hatch env prune
+ uv sync --all-extras
3. Make certain your branch is in sync with head, and that you have no uncommitted modifications. If you work on a fork, replace `origin` with `upstream`:
@@ -12,11 +12,7 @@
git pull origin main
git status # Should show "nothing to commit, working tree clean"
-4. Do a clean doc build:
-
- hatch run doc:clean-all
- hatch run doc:build-html
- hatch run doc:serve
+4. Do a [clean doc build](CONTRIBUTING.md#building-the-documentation-locally):
Navigate to http://localhost:8000 and ensure it looks OK (particularly
do a visual scan of the gallery thumbnails).
@@ -38,20 +34,19 @@
8. Merge release branch into main, make sure that all required checks pass
-9. On main, build source & wheel distributions. If you work on a fork, replace `origin` with `upstream`:
+9. Switch to main, If you work on a fork, replace `origin` with `upstream`:
git switch main
git pull origin main
- hatch clean # clean old builds & distributions
- hatch build # create a source distribution and universal wheel
-
-10. publish to PyPI (Requires correct PyPI owner permissions):
+
+10. Build a source distribution and universal wheel,
+ publish to PyPI (Requires correct PyPI owner permissions and [UV_PUBLISH_TOKEN](https://docs.astral.sh/uv/configuration/environment/#uv_publish_token)):
- hatch publish
+ uv run task publish
-11. build and publish docs (Requires write-access to altair-viz/altair-viz.github.io):
+11. Build and publish docs (Requires write-access to [altair-viz/altair-viz.github.io](https://github.com/altair-viz/altair-viz.github.io)):
- hatch run doc:publish-clean-build
+ uv run task doc-publish-clean-build
12. On main, tag the release. If you work on a fork, replace `origin` with `upstream`:
diff --git a/doc/getting_started/installation.rst b/doc/getting_started/installation.rst
index 3d9b30e31..87bb9dd27 100644
--- a/doc/getting_started/installation.rst
+++ b/doc/getting_started/installation.rst
@@ -33,27 +33,6 @@ Altair can also be installed with just the dependencies necessary for saving cha
Development Installation
========================
-The `Altair source repository`_ is available on GitHub. Once you have cloned the
-repository and installed all the above dependencies, run the following command
-from the root of the repository to install the main version of Altair:
-
-.. code-block:: bash
-
- pip install -e .
-
-To install optional and development dependencies as well, run
-
-.. code-block:: bash
-
- pip install -e ".[all, dev]"
-
-If you do not wish to clone the source repository, you can install the
-development version directly from GitHub using:
-
-.. code-block:: bash
-
- pip install -e git+https://github.com/vega/altair.git
-
Please see `CONTRIBUTING.md `_
for details on how to contribute to the Altair project.
@@ -62,4 +41,3 @@ for details on how to contribute to the Altair project.
.. _vega_datasets: https://github.com/altair-viz/vega_datasets
.. _JupyterLab: http://jupyterlab.readthedocs.io/
.. _Jupyter Notebook: https://jupyter-notebook.readthedocs.io/
-.. _Altair source repository: http://github.com/vega/altair
diff --git a/doc/sync_website.sh b/doc/sync_website.sh
deleted file mode 100644
index fcb611ef5..000000000
--- a/doc/sync_website.sh
+++ /dev/null
@@ -1,27 +0,0 @@
-#!/bin/bash
-
-# get git hash for commit message
-GITHASH=$(git rev-parse HEAD)
-MSG="doc build for commit $GITHASH"
-cd _build
-
-# clone the repo if needed
-if test -d altair-viz.github.io;
-then echo "using existing cloned altair directory";
-else git clone https://github.com/altair-viz/altair-viz.github.io.git;
-fi
-
-# sync the website
-cd altair-viz.github.io
-git pull
-
-# remove all tracked files
-git ls-files -z | xargs -0 rm -f
-
-# sync files from html build
-rsync -r ../html/ ./
-
-# add commit, and push to github
-git add . --all
-git commit -m "$MSG"
-git push origin master
diff --git a/pyproject.toml b/pyproject.toml
index db119806e..ada8245c5 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -84,7 +84,8 @@ dev = [
"types-setuptools",
"geopandas",
"polars>=0.20.3",
- "tomli; python_version<\"3.11\""
+ "taskipy>=1.14.1",
+ "tomli>=2.2.1",
]
doc = [
"sphinx",
@@ -106,101 +107,20 @@ vega-datasets = "v2.11.0" # https://github.com/vega/vega-datasets
vega-embed = "6" # https://github.com/vega/vega-embed
vega-lite = "v5.21.0" # https://github.com/vega/vega-lite
-[tool.hatch.version]
-path = "altair/__init__.py"
+[tool.hatch]
+build = { include = ["/altair"], artifacts = ["altair/jupyter/js/index.js"] }
+metadata = { allow-direct-references = true }
+version = { path = "altair/__init__.py" }
-[tool.hatch.metadata]
-allow-direct-references = true
-
-[tool.hatch.build]
-include = ["/altair"]
-artifacts = ["altair/jupyter/js/index.js"]
-
-[tool.hatch.envs.default]
-features = ["all", "dev"]
+[tool.hatch.envs]
# https://hatch.pypa.io/latest/how-to/environment/select-installer/#enabling-uv
-installer = "uv"
-
-[tool.hatch.envs.default.scripts]
-generate-schema-wrapper = [
- "mypy tools",
- "python tools/generate_schema_wrapper.py",
- "test"
-]
-test = [
- "ruff check .",
- "ruff format --diff --check .",
- "mypy altair tests",
- "python -m pytest --pyargs --numprocesses=logical --doctest-modules tests altair tools",
-]
-test-coverage = "python -m pytest --pyargs --doctest-modules --cov=altair --cov-report term altair"
-test-coverage-html = "python -m pytest --pyargs --doctest-modules --cov=altair --cov-report html altair"
-update-init-file = [
- "python tools/update_init_file.py",
- "ruff check .",
- "ruff format .",
-]
-test-fast = [
- "ruff check .", "ruff format .",
- "pytest -p no:randomly -n logical --numprocesses=logical --doctest-modules tests altair tools -m \"not slow\" {args}"
-]
-test-slow = [
- "ruff check .", "ruff format .",
- "pytest -p no:randomly -n logical --numprocesses=logical --doctest-modules tests altair tools -m \"slow\" {args}"
-]
+default = { features = ["all", "dev"], installer = "uv" }
+doc = { features = ["all", "dev", "doc"] }
[tool.hatch.envs.hatch-test]
# https://hatch.pypa.io/latest/tutorials/testing/overview/
features = ["all", "dev", "doc"]
-# https://pytest-xdist.readthedocs.io/en/latest/distribution.html#running-tests-across-multiple-cpus
-default-args = ["--numprocesses=logical","--doctest-modules", "tests", "altair", "tools"]
-parallel = true
-[[tool.hatch.envs.hatch-test.matrix]]
-python = ["3.9", "3.10", "3.11", "3.12", "3.13"]
-[tool.hatch.envs.hatch-test.scripts]
-run = [
- "ruff check .",
- "ruff format --diff --check .",
- "mypy altair tests",
- "pytest{env:HATCH_TEST_ARGS:} {args}"
-]
-run-cov = "coverage run -m pytest{env:HATCH_TEST_ARGS:} {args}"
-cov-combine = "coverage combine"
-cov-report = "coverage report"
-
-[tool.hatch.envs.doc]
-features = ["all", "dev", "doc"]
-
-[tool.hatch.envs.doc.scripts]
-clean = "rm -rf doc/_build"
-clean-generated = ["rm -rf doc/user_guide/generated", "rm -rf doc/gallery"]
-clean-all = ["clean", "clean-generated", "rm -rf doc/_images"]
-clean-win = "if exist doc\\_build rd /s /q doc\\_build"
-clean-generated-win = [
- "if exist doc\\user_guide\\generated rd /s /q doc\\user_guide\\generated",
- "if exist doc\\gallery rd /s /q doc\\gallery",
-]
-clean-all-win = [
- "clean-win",
- "clean-generated-win",
- "if exist doc\\_images rd /s /q doc\\_images",
-]
-build-html = [
- "mkdir -p doc/_images",
- "sphinx-build -b html -d doc/_build/doctrees doc doc/_build/html",
-]
-build-html-win = [
- "if not exist doc\\_images md doc\\_images",
- "sphinx-build -b html -d doc\\_build\\doctrees doc doc\\_build\\html",
-]
-doctest = "sphinx-build -b doctest -d doc/_build/doctrees doc doc/_build/doctest"
-coverage = "sphinx-build -b coverage -d doc/_build/doctrees doc doc/_build/coverage"
-serve = "(cd doc/_build/html && python -m http.server)"
-publish-clean-build = [
- "clean-all",
- "build-html",
- "(cd doc && bash sync_website.sh)",
-]
+matrix = [{ python = ["3.9", "3.10", "3.11", "3.12", "3.13"] }]
[tool.ruff]
exclude = [
@@ -334,12 +254,46 @@ docstring-code-format = true # https://docs.astral.sh/ruff/formatter/#docst
docstring-code-line-length = 88
line-ending = "lf"
+[tool.taskipy.settings]
+cwd = "."
+
+[tool.taskipy.tasks]
+lint = "ruff check"
+format = "ruff format --diff --check"
+ruff-fix = "task lint && ruff format"
+type-check = "mypy altair tests"
+
+pytest = "pytest"
+test = "task lint && task format && task type-check && task pytest"
+test-fast = "task ruff-fix && pytest -m \"not slow\""
+test-slow = "task ruff-fix && pytest -m \"slow\""
+test-min = "task lint && task format && task type-check && hatch test --python 3.9"
+test-all = "task lint && task format && task type-check && hatch test --all"
+
+generate-schema-wrapper = "mypy tools && python tools/generate_schema_wrapper.py && task test"
+update-init-file = "python tools/update_init_file.py && task ruff-fix"
+
+doc-clean = "python -c \"import tools;tools.fs.rm('doc/_build')\""
+doc-clean-generated = "python -c \"import tools;tools.fs.rm('doc/user_guide/generated', 'doc/gallery')\""
+doc-clean-images = "python -c \"import tools;tools.fs.rm('doc/_images')\""
+doc-clean-all = "task doc-clean && task doc-clean-generated && task doc-clean-images"
+doc-mkdir = "python -c \"import tools;tools.fs.mkdir('doc/_images')\""
+doc-build-html = "task doc-mkdir && sphinx-build -b html -d doc/_build/doctrees doc doc/_build/html"
+doc-clean-build = "task doc-clean-all && task doc-build-html"
+doc-serve = "python -m http.server --bind \"127.0.0.1\" --directory doc/_build/html 8000"
+doc-publish = "python tools/sync_website.py"
+doc-publish-clean-build = "task doc-clean-build && task doc-publish"
+
+clean = "python -c \"import tools;tools.fs.rm('dist')\""
+build = "task clean && uv build"
+publish = "task build && uv publish"
+
[tool.pytest.ini_options]
# Pytest does not need to search these folders for test functions.
# They contain examples which are being executed by the
# test_examples tests.
norecursedirs = ["tests/examples_arguments_syntax", "tests/examples_methods_syntax"]
-addopts = ["--numprocesses=logical"]
+addopts = ["--numprocesses=logical", "--doctest-modules", "tests", "altair", "tools"]
# https://docs.pytest.org/en/stable/how-to/mark.html#registering-marks
markers = [
"slow: Label tests as slow (deselect with '-m \"not slow\"')"
diff --git a/tools/__init__.py b/tools/__init__.py
index 00ce52b6d..0d5c03873 100644
--- a/tools/__init__.py
+++ b/tools/__init__.py
@@ -1,4 +1,5 @@
from tools import (
+ fs,
generate_api_docs,
generate_schema_wrapper,
markup,
@@ -8,6 +9,7 @@
)
__all__ = [
+ "fs",
"generate_api_docs",
"generate_schema_wrapper",
"markup",
diff --git a/tools/fs.py b/tools/fs.py
new file mode 100644
index 000000000..cae3aef69
--- /dev/null
+++ b/tools/fs.py
@@ -0,0 +1,139 @@
+"""Cross-platform filesystem utilities."""
+
+from __future__ import annotations
+
+import datetime as dt
+import shutil
+import subprocess as sp
+from pathlib import Path
+from typing import TYPE_CHECKING, Any
+
+if TYPE_CHECKING:
+ from collections.abc import Callable
+
+
+__all__ = [
+ "REPO_ROOT",
+ "copytree",
+ "dir_exists",
+ "file_exists",
+ "mkdir",
+ "modified_time",
+ "path_repr",
+ "rm",
+ "run_check",
+ "run_stream_stdout",
+]
+
+REPO_ROOT: Path = Path(__file__).parent.parent
+
+
+def mkdir(*sources: str | Path, parents: bool = True) -> None:
+ """
+ Platform independent `bash mkdir`_, using ``--parents`` option.
+
+ .. _bash mkdir:
+ https://ss64.com/bash/mkdir.html
+ """
+ for source in sources:
+ Path(source).mkdir(parents=parents, exist_ok=True)
+
+
+def rm(*sources: str | Path, force: bool = True) -> None:
+ """
+ Platform independent `bash rm`_, using ``--recursive``, ``--force`` options.
+
+ .. _bash rm:
+ https://ss64.com/bash/rm.html
+ """
+ for source in sources:
+ fp = Path(source)
+ if fp.is_file():
+ fp.unlink(missing_ok=force)
+ else:
+ shutil.rmtree(fp, ignore_errors=force)
+
+
+def copytree(src: str | Path, dst: str | Path, *, force: bool = True):
+ """
+ Recursively copy a directory tree and return the destination directory.
+
+ Wraps `shutil.copytree`_.
+
+ .. _shutil.copytree:
+ https://docs.python.org/3/library/shutil.html#shutil.copytree
+ """
+ return shutil.copytree(src, dst, dirs_exist_ok=force)
+
+
+def file_exists(file: str | Path, /) -> bool:
+ """Fail on files created using ``Path.touch()``."""
+ fp = Path(file)
+ return bool(fp.exists() and fp.stat().st_size)
+
+
+def dir_exists(file: str | Path, /) -> bool:
+ fp = Path(file)
+ return fp.exists() and fp.is_dir()
+
+
+def modified_time(file: str | Path, /) -> dt.datetime:
+ """UTC datetime when ``file`` was last modified."""
+ return dt.datetime.fromtimestamp(Path(file).stat().st_mtime, dt.timezone.utc)
+
+
+def path_repr(fp: Path, /) -> str:
+ """Return string representation w/ ``/``, relative to root of repository."""
+ return f"{fp.relative_to(REPO_ROOT).as_posix()!r}"
+
+
+def _stdout_handler(line: bytes, /) -> None:
+ """Pass-through to ``sys.stdout``, without adding whitespace."""
+ print(line.decode(), end="")
+
+
+def run_stream_stdout(
+ args: sp._CMD,
+ *,
+ stdout_handler: Callable[[bytes], None] = _stdout_handler,
+) -> sp.CompletedProcess[Any]:
+ """
+ Mimic `subprocess.run`_, piping stdout back to the caller in real-time*.
+
+ Adapted from `stackoverflow-76626021`_.
+
+ Notes
+ -----
+ - `pytest`_ is line-by-line
+ - `sphinx-build`_ comes out in 3 bursts (over 8 minutes)
+ - All others only output a short message (usually 1 line)
+
+ .. _subprocess.run:
+ https://docs.python.org/3/library/subprocess.html#subprocess.run
+ .. _stackoverflow-76626021:
+ https://stackoverflow.com/questions/21953835/run-subprocess-and-print-output-to-logging/76626021#76626021
+ .. _pytest:
+ https://docs.pytest.org/en/stable/index.html
+ .. _sphinx-build:
+ https://www.sphinx-doc.org/en/master/man/sphinx-build.html
+ """
+ with sp.Popen(args, stdout=sp.PIPE, stderr=sp.STDOUT) as process:
+ if process.stdout is not None:
+ for chunk in process.stdout:
+ stdout_handler(chunk)
+ else:
+ msg = "stdout is None"
+ raise NotImplementedError(msg)
+ if retcode := process.poll():
+ raise sp.CalledProcessError(retcode, process.args)
+ return sp.CompletedProcess(process.args, 0)
+
+
+def run_check(args: sp._CMD, /) -> sp.CompletedProcess[str]:
+ """
+ Run a command in a `subprocess`_, capturing and decoding output.
+
+ .. _subprocess:
+ https://docs.python.org/3/library/subprocess.html#subprocess.run
+ """
+ return sp.run(args, check=True, capture_output=True, encoding="utf-8")
diff --git a/tools/sync_website.py b/tools/sync_website.py
new file mode 100644
index 000000000..f031d6e95
--- /dev/null
+++ b/tools/sync_website.py
@@ -0,0 +1,102 @@
+from __future__ import annotations
+
+import argparse
+import os
+from typing import TYPE_CHECKING
+
+from tools import fs
+
+if TYPE_CHECKING:
+ from pathlib import Path
+ from typing import Literal
+
+DOC_REPO_ORG: Literal["altair-viz"] = "altair-viz"
+GITHUB: Literal["github"] = "github"
+WEBSITE: str = f"{DOC_REPO_ORG}.{GITHUB}.io"
+DOC_REPO_URL: str = f"https://{GITHUB}.com/{DOC_REPO_ORG}/{WEBSITE}.git"
+
+
+DOC_DIR: Path = fs.REPO_ROOT / "doc"
+DOC_BUILD_DIR: Path = DOC_DIR / "_build"
+DOC_REPO_DIR: Path = DOC_BUILD_DIR / WEBSITE
+DOC_HTML_DIR: Path = DOC_BUILD_DIR / "html"
+DOC_BUILD_INFO: Path = DOC_HTML_DIR / ".buildinfo"
+
+CMD_CLONE = "git", "clone", DOC_REPO_URL
+CMD_PULL = "git", "pull"
+CMD_HEAD_HASH = "git", "rev-parse", "HEAD"
+CMD_ADD = "git", "add", ".", "--all", "--force"
+CMD_COMMIT = "git", "commit", "-m"
+CMD_PUSH = "git", "push", "origin", "master"
+
+COMMIT_MSG_PREFIX = "doc build for commit"
+UNTRACKED = ".git"
+
+
+def clone_or_sync_repo() -> None:
+ os.chdir(DOC_BUILD_DIR)
+ if not DOC_REPO_DIR.exists():
+ print(f"Cloning repo {WEBSITE!r}\n -> {fs.path_repr(DOC_REPO_DIR)}")
+ fs.run_stream_stdout(CMD_CLONE)
+ else:
+ print(f"Using existing cloned altair directory {fs.path_repr(DOC_REPO_DIR)}")
+ os.chdir(DOC_REPO_DIR)
+ print(f"Syncing {WEBSITE!r}\n -> {fs.path_repr(DOC_REPO_DIR)} ...")
+ fs.run_stream_stdout(CMD_PULL)
+
+
+def remove_tracked_files() -> None:
+ os.chdir(DOC_REPO_DIR)
+ print(f"Removing all tracked files from {fs.path_repr(DOC_REPO_DIR)} ...")
+ for fp in DOC_REPO_DIR.iterdir():
+ if fp.name == UNTRACKED:
+ continue
+ fs.rm(fp)
+
+
+def sync_from_html_build() -> None:
+ print(f"Syncing files from {fs.path_repr(DOC_HTML_DIR)} ...")
+ copy_ret = fs.copytree(DOC_HTML_DIR, DOC_REPO_DIR)
+ print(f"Successful copy to: {fs.path_repr(copy_ret)}")
+
+
+def generate_commit_message() -> str:
+ os.chdir(DOC_REPO_DIR)
+ print("Generating commit message ...")
+ return f"{COMMIT_MSG_PREFIX} {fs.run_check(CMD_HEAD_HASH).stdout.strip()}"
+
+
+def add_commit_push_github(msg: str, /, *, dry_run: bool) -> None:
+ os.chdir(DOC_REPO_DIR)
+ print("Pushing ...")
+ cmd_commit = *CMD_COMMIT, msg
+ cmd_push = (*CMD_PUSH, "--dry-run") if dry_run else CMD_PUSH
+ commands = (CMD_ADD, cmd_commit, cmd_push)
+ for command in commands:
+ fs.run_stream_stdout(command)
+
+
+def ensure_build_html() -> None:
+ if not fs.dir_exists(DOC_HTML_DIR):
+ raise FileNotFoundError(DOC_HTML_DIR)
+ if not DOC_BUILD_INFO.exists():
+ raise FileNotFoundError(DOC_BUILD_INFO)
+ fs.mkdir(DOC_REPO_DIR)
+ time = fs.modified_time(DOC_BUILD_INFO).isoformat(" ", "seconds")
+ print(f"Docs last build time: {time!r}")
+
+
+def main(*, dry_run: bool = False) -> None:
+ ensure_build_html()
+ commit_message = generate_commit_message()
+ clone_or_sync_repo()
+ remove_tracked_files()
+ sync_from_html_build()
+ add_commit_push_github(commit_message, dry_run=dry_run)
+
+
+if __name__ == "__main__":
+ parser = argparse.ArgumentParser(prog="sync_website.py")
+ parser.add_argument("--dry-run", action="store_true")
+ args = parser.parse_args()
+ main(dry_run=args.dry_run)
diff --git a/uv.lock b/uv.lock
new file mode 100644
index 000000000..d6a2a3a93
--- /dev/null
+++ b/uv.lock
@@ -0,0 +1,3297 @@
+version = 1
+requires-python = ">=3.9"
+resolution-markers = [
+ "python_full_version >= '3.12'",
+ "python_full_version == '3.11.*'",
+ "python_full_version == '3.10.*'",
+ "python_full_version < '3.10'",
+]
+
+[[package]]
+name = "accessible-pygments"
+version = "0.0.5"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "pygments" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/bc/c1/bbac6a50d02774f91572938964c582fff4270eee73ab822a4aeea4d8b11b/accessible_pygments-0.0.5.tar.gz", hash = "sha256:40918d3e6a2b619ad424cb91e556bd3bd8865443d9f22f1dcdf79e33c8046872", size = 1377899 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/8d/3f/95338030883d8c8b91223b4e21744b04d11b161a3ef117295d8241f50ab4/accessible_pygments-0.0.5-py3-none-any.whl", hash = "sha256:88ae3211e68a1d0b011504b2ffc1691feafce124b845bd072ab6f9f66f34d4b7", size = 1395903 },
+]
+
+[[package]]
+name = "alabaster"
+version = "0.7.16"
+source = { registry = "https://pypi.org/simple" }
+resolution-markers = [
+ "python_full_version < '3.10'",
+]
+sdist = { url = "https://files.pythonhosted.org/packages/c9/3e/13dd8e5ed9094e734ac430b5d0eb4f2bb001708a8b7856cbf8e084e001ba/alabaster-0.7.16.tar.gz", hash = "sha256:75a8b99c28a5dad50dd7f8ccdd447a121ddb3892da9e53d1ca5cca3106d58d65", size = 23776 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/32/34/d4e1c02d3bee589efb5dfa17f88ea08bdb3e3eac12bc475462aec52ed223/alabaster-0.7.16-py3-none-any.whl", hash = "sha256:b46733c07dce03ae4e150330b975c75737fa60f0a7c591b6c8bf4928a28e2c92", size = 13511 },
+]
+
+[[package]]
+name = "alabaster"
+version = "1.0.0"
+source = { registry = "https://pypi.org/simple" }
+resolution-markers = [
+ "python_full_version >= '3.12'",
+ "python_full_version == '3.11.*'",
+ "python_full_version == '3.10.*'",
+]
+sdist = { url = "https://files.pythonhosted.org/packages/a6/f8/d9c74d0daf3f742840fd818d69cfae176fa332022fd44e3469487d5a9420/alabaster-1.0.0.tar.gz", hash = "sha256:c00dca57bca26fa62a6d7d0a9fcce65f3e026e9bfe33e9c538fd3fbb2144fd9e", size = 24210 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/7e/b3/6b4067be973ae96ba0d615946e314c5ae35f9f993eca561b356540bb0c2b/alabaster-1.0.0-py3-none-any.whl", hash = "sha256:fc6786402dc3fcb2de3cabd5fe455a2db534b371124f1f21de8731783dec828b", size = 13929 },
+]
+
+[[package]]
+name = "altair"
+version = "5.6.0.dev0"
+source = { editable = "." }
+dependencies = [
+ { name = "jinja2" },
+ { name = "jsonschema" },
+ { name = "narwhals" },
+ { name = "packaging" },
+ { name = "typing-extensions", marker = "python_full_version < '3.14'" },
+]
+
+[package.optional-dependencies]
+all = [
+ { name = "altair-tiles" },
+ { name = "anywidget" },
+ { name = "numpy", version = "2.0.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" },
+ { name = "numpy", version = "2.2.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" },
+ { name = "pandas" },
+ { name = "pyarrow" },
+ { name = "vega-datasets" },
+ { name = "vegafusion" },
+ { name = "vl-convert-python" },
+]
+dev = [
+ { name = "duckdb" },
+ { name = "geopandas" },
+ { name = "hatch" },
+ { name = "ipython", version = "8.18.1", source = { registry = "https://pypi.org/simple" }, extra = ["kernel"], marker = "python_full_version < '3.10'" },
+ { name = "ipython", version = "8.31.0", source = { registry = "https://pypi.org/simple" }, extra = ["kernel"], marker = "python_full_version >= '3.10'" },
+ { name = "mistune" },
+ { name = "mypy" },
+ { name = "pandas" },
+ { name = "pandas-stubs", version = "2.2.2.240807", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" },
+ { name = "pandas-stubs", version = "2.2.3.241126", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" },
+ { name = "polars" },
+ { name = "pyarrow-stubs" },
+ { name = "pytest" },
+ { name = "pytest-cov" },
+ { name = "pytest-xdist", extra = ["psutil"] },
+ { name = "ruff" },
+ { name = "taskipy" },
+ { name = "tomli" },
+ { name = "types-jsonschema" },
+ { name = "types-setuptools" },
+]
+doc = [
+ { name = "docutils" },
+ { name = "jinja2" },
+ { name = "myst-parser", version = "3.0.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" },
+ { name = "myst-parser", version = "4.0.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" },
+ { name = "numpydoc" },
+ { name = "pillow" },
+ { name = "pydata-sphinx-theme" },
+ { name = "scipy", version = "1.13.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" },
+ { name = "scipy", version = "1.15.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" },
+ { name = "sphinx", version = "7.4.7", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" },
+ { name = "sphinx", version = "8.1.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" },
+ { name = "sphinx-copybutton" },
+ { name = "sphinx-design" },
+ { name = "sphinxext-altair" },
+]
+save = [
+ { name = "vl-convert-python" },
+]
+
+[package.metadata]
+requires-dist = [
+ { name = "altair-tiles", marker = "extra == 'all'", specifier = ">=0.3.0" },
+ { name = "anywidget", marker = "extra == 'all'", specifier = ">=0.9.0" },
+ { name = "docutils", marker = "extra == 'doc'" },
+ { name = "duckdb", marker = "extra == 'dev'", specifier = ">=1.0" },
+ { name = "geopandas", marker = "extra == 'dev'" },
+ { name = "hatch", marker = "extra == 'dev'", specifier = ">=1.13.0" },
+ { name = "ipython", extras = ["kernel"], marker = "extra == 'dev'" },
+ { name = "jinja2" },
+ { name = "jinja2", marker = "extra == 'doc'" },
+ { name = "jsonschema", specifier = ">=3.0" },
+ { name = "mistune", marker = "extra == 'dev'" },
+ { name = "mypy", marker = "extra == 'dev'" },
+ { name = "myst-parser", marker = "extra == 'doc'" },
+ { name = "narwhals", specifier = ">=1.14.2" },
+ { name = "numpy", marker = "extra == 'all'" },
+ { name = "numpydoc", marker = "extra == 'doc'" },
+ { name = "packaging" },
+ { name = "pandas", marker = "extra == 'all'", specifier = ">=1.1.3" },
+ { name = "pandas", marker = "extra == 'dev'", specifier = ">=1.1.3" },
+ { name = "pandas-stubs", marker = "extra == 'dev'" },
+ { name = "pillow", marker = "extra == 'doc'" },
+ { name = "polars", marker = "extra == 'dev'", specifier = ">=0.20.3" },
+ { name = "pyarrow", marker = "extra == 'all'", specifier = ">=11" },
+ { name = "pyarrow-stubs", marker = "extra == 'dev'" },
+ { name = "pydata-sphinx-theme", marker = "extra == 'doc'", specifier = ">=0.14.1" },
+ { name = "pytest", marker = "extra == 'dev'" },
+ { name = "pytest-cov", marker = "extra == 'dev'" },
+ { name = "pytest-xdist", extras = ["psutil"], marker = "extra == 'dev'", specifier = "~=3.5" },
+ { name = "ruff", marker = "extra == 'dev'", specifier = ">=0.8.4" },
+ { name = "scipy", marker = "extra == 'doc'" },
+ { name = "sphinx", marker = "extra == 'doc'" },
+ { name = "sphinx-copybutton", marker = "extra == 'doc'" },
+ { name = "sphinx-design", marker = "extra == 'doc'" },
+ { name = "sphinxext-altair", marker = "extra == 'doc'" },
+ { name = "taskipy", marker = "extra == 'dev'", specifier = ">=1.14.1" },
+ { name = "tomli", marker = "extra == 'dev'", specifier = ">=2.2.1" },
+ { name = "types-jsonschema", marker = "extra == 'dev'" },
+ { name = "types-setuptools", marker = "extra == 'dev'" },
+ { name = "typing-extensions", marker = "python_full_version < '3.14'", specifier = ">=4.10.0" },
+ { name = "vega-datasets", marker = "extra == 'all'", specifier = ">=0.9.0" },
+ { name = "vegafusion", extras = ["embed"], marker = "extra == 'all'", specifier = ">=1.6.6" },
+ { name = "vl-convert-python", marker = "extra == 'all'", specifier = ">=1.7.0" },
+ { name = "vl-convert-python", marker = "extra == 'save'", specifier = ">=1.7.0" },
+]
+
+[[package]]
+name = "altair-tiles"
+version = "0.3.0"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "altair" },
+ { name = "mercantile" },
+ { name = "xyzservices" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/00/08/afbd3ebc1e0de4b622f19ff86cc86ec73d8c1af2900d7ccf1a1f8b7b1ce9/altair_tiles-0.3.0.tar.gz", hash = "sha256:4e0c3d8233fc6697557171bfaef449fbc7eb10e36a730be48235007f60a5e62a", size = 9196 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/ab/8c/1f76ae01359215bf163600242424d11bc0b429be9a887969094b602f918e/altair_tiles-0.3.0-py3-none-any.whl", hash = "sha256:b9ddeb3b85780b0c5309e06f1dfd8470661f47e27575541121d603f825b599b4", size = 8694 },
+]
+
+[[package]]
+name = "anyio"
+version = "4.8.0"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "exceptiongroup", marker = "python_full_version < '3.11'" },
+ { name = "idna" },
+ { name = "sniffio" },
+ { name = "typing-extensions", marker = "python_full_version < '3.13'" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/a3/73/199a98fc2dae33535d6b8e8e6ec01f8c1d76c9adb096c6b7d64823038cde/anyio-4.8.0.tar.gz", hash = "sha256:1d9fe889df5212298c0c0723fa20479d1b94883a2df44bd3897aa91083316f7a", size = 181126 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/46/eb/e7f063ad1fec6b3178a3cd82d1a3c4de82cccf283fc42746168188e1cdd5/anyio-4.8.0-py3-none-any.whl", hash = "sha256:b5011f270ab5eb0abf13385f851315585cc37ef330dd88e27ec3d34d651fd47a", size = 96041 },
+]
+
+[[package]]
+name = "anywidget"
+version = "0.9.13"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "ipywidgets" },
+ { name = "psygnal" },
+ { name = "typing-extensions" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/87/79/647983b0cbddd797d9d79e09f89ee5912bb066af6bf456bd8acde66b1a39/anywidget-0.9.13.tar.gz", hash = "sha256:c655455bf51f82182eb23c5947d37cc41f0b1ffacaf7e2b763147a2332cb3f07", size = 9666998 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/1a/5a/7b024920cca385eb9b56bc63edf0a647de208346bfac5b339b544733d53a/anywidget-0.9.13-py3-none-any.whl", hash = "sha256:43d1658f1043b8c95cd350b2f5deccb123fd37810a36f656d6163aefe8163705", size = 213685 },
+]
+
+[[package]]
+name = "appnope"
+version = "0.1.4"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/35/5d/752690df9ef5b76e169e68d6a129fa6d08a7100ca7f754c89495db3c6019/appnope-0.1.4.tar.gz", hash = "sha256:1de3860566df9caf38f01f86f65e0e13e379af54f9e4bee1e66b48f2efffd1ee", size = 4170 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/81/29/5ecc3a15d5a33e31b26c11426c45c501e439cb865d0bff96315d86443b78/appnope-0.1.4-py2.py3-none-any.whl", hash = "sha256:502575ee11cd7a28c0205f379b525beefebab9d161b7c964670864014ed7213c", size = 4321 },
+]
+
+[[package]]
+name = "arro3-core"
+version = "0.4.5"
+source = { registry = "https://pypi.org/simple" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/14/28/05c9c72b8fff7e26c6422ffb8c59173bbe8f988b41c7b8c14d7f207dc0bb/arro3_core-0.4.5-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:4ef5bb563689ac1e274c3cd9e15da379093906b0d01c442561f922935091bed7", size = 2383900 },
+ { url = "https://files.pythonhosted.org/packages/ba/a9/43d53aba2a31966ec001573ab1fbaf1cb367e1e27b90e5ca8dad2d1d340e/arro3_core-0.4.5-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:6d6443c451e83f5761792cb4a3b3a0d106b83270e2af0c660382e4027f8d7e0b", size = 2144431 },
+ { url = "https://files.pythonhosted.org/packages/35/0b/5a45651efd37ae2acd1ed82190089b679b2931bdbf316a2810044e96e1f3/arro3_core-0.4.5-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f61b4526313006935eabe01ad90f640984a77af519704f51ef93bbd3235d1bdb", size = 2667337 },
+ { url = "https://files.pythonhosted.org/packages/2e/ef/a4c110f57a9b9a734461b04985a1af37c9722534a6aee9fa57dfbe183c98/arro3_core-0.4.5-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f8255943f86750022e8810c438b9c9b50a50ccefdff56a7bcf4a334586ac320e", size = 2514949 },
+ { url = "https://files.pythonhosted.org/packages/17/48/2b998890d9850a7edc33bab3cc81f51e98ad5cfbfa95357f6264067f2f4c/arro3_core-0.4.5-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:63e5bfd37ef54ba39834b04c60ed019831378bf813777faac0b2ce2ece19b722", size = 3513869 },
+ { url = "https://files.pythonhosted.org/packages/aa/c9/42e090290c2735b4375d14d846d40fc702b9cfe4eb31d47c6a8eeb3d3b8b/arro3_core-0.4.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:095223c0dae98cfdf79c185c44c9ead1487ee6f782f8131deea2b27aec1f1e3d", size = 2487277 },
+ { url = "https://files.pythonhosted.org/packages/d7/1b/bea817a6380d74a6f3147163ff2ffed2e874c8bdd35894e83928b69f7e1a/arro3_core-0.4.5-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:19fb3264964cac3d0a9e1149d8a3bdec48209e1a5259f28eadd29e10268f5854", size = 2343661 },
+ { url = "https://files.pythonhosted.org/packages/5d/f0/48a7e22465a18eab0218af87de35db661c1d608c9c0afe12b7f9be2a287f/arro3_core-0.4.5-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:a361fa08d309e94851a14a9acda7fff9b191533e0eaa6fb041463454fe53b185", size = 2687322 },
+ { url = "https://files.pythonhosted.org/packages/bd/2b/71a9b2b9f328c63e740c9cddbf5c25eaf2be6f347e3ecc333802c5918c9b/arro3_core-0.4.5-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:cea943a3886b06bf1034d6ed539727aa93bc49748905320a8bd4f54547104eaa", size = 2485484 },
+ { url = "https://files.pythonhosted.org/packages/69/84/d37b38034a76e5f56ec58f660d139a8d472e3077fafa6ee8db890461db67/arro3_core-0.4.5-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:107bfa3a4f34e1655a8a62ff1b57ebedcbb8941bab7dcad56f3d4dc837a2f9fe", size = 2928761 },
+ { url = "https://files.pythonhosted.org/packages/a3/92/266096673243de9dafc23bc8677407c53e29728104439440c0ff5c264116/arro3_core-0.4.5-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:acda846128c830e996d6349aa2594130705a235c160df52e373dbb721c8ca8e4", size = 2771855 },
+ { url = "https://files.pythonhosted.org/packages/aa/37/c4592c1312d137000f0e0e398357bd8c513616b3060fe9eb15222dea0346/arro3_core-0.4.5-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:c9721f38813ee0496262c8dcd1432f137c1069f41057bd71b406b50459dc188d", size = 2662354 },
+ { url = "https://files.pythonhosted.org/packages/49/75/fb32538e4396baf9fcaabc1de8666fc7494089ca572e1c5119d36097693a/arro3_core-0.4.5-cp310-cp310-win_amd64.whl", hash = "sha256:60618424cb75cde43490c8a48cf5215a7aa0c85c6524bf071e4e17712d7393c6", size = 2355223 },
+ { url = "https://files.pythonhosted.org/packages/9c/b4/10821b5c995c30081a79d92de8bb8f65ce8b3fc873d5a0e7984332ce4bf2/arro3_core-0.4.5-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:1fb628fcb84030f1748f268018b15f0658d308ec9e52ea60811dd7445f14afd3", size = 2384112 },
+ { url = "https://files.pythonhosted.org/packages/84/19/beaae377d0767456c462f33f95f8e9ba989ef8749a4e6a1da858271ec88b/arro3_core-0.4.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:1226b5dd5e2912c52d8cb6ec2f629126b6937419ad25e5b298c1901843777246", size = 2144486 },
+ { url = "https://files.pythonhosted.org/packages/6b/a9/1a80f6bc2f42612f919f3b138366d9f8ae29459347c376852e3fa564e982/arro3_core-0.4.5-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:b3507a6a33bc69f07015c2aa397fedc736121e4c190aab3a967659af42aa0ab4", size = 2667446 },
+ { url = "https://files.pythonhosted.org/packages/52/8f/d600ad486555bdfde9860955acf702acdf80ea406e2cc22be982e2114246/arro3_core-0.4.5-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2542b68d63ddfb919cf48cc31a73bbfc49aefe942c1bc696010af7117b8becbe", size = 2514878 },
+ { url = "https://files.pythonhosted.org/packages/22/4c/de47cc05e7ef011588208d5c95bb0d020b6ea9656e29a80537b89728f213/arro3_core-0.4.5-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:30c59b680d1be504011706fac95983038ea90320e3c0a5df4a8785c8bd734e78", size = 3512989 },
+ { url = "https://files.pythonhosted.org/packages/81/81/93a12524d53530dab18be2e65414d554938a97588ccdb1c53c2b7c1a1c52/arro3_core-0.4.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:49f7685975ce0a4a10498433882a6bd31811d62304b15644b3738a4b56a32c67", size = 2487279 },
+ { url = "https://files.pythonhosted.org/packages/9e/12/d2803be7e4c5f3ed787371dcdd0f9b1cbee5a301b10b5f54d953450de481/arro3_core-0.4.5-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:382319524b6986e8039c9b4eb04b9613cad962f5d3935e7b966a184590f40b4b", size = 2343701 },
+ { url = "https://files.pythonhosted.org/packages/03/85/fb00f1c3271d29a44f0dd53cc45f20eafad5cff132467513dd1d817a3a8b/arro3_core-0.4.5-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:83a7b420833487b592fa55caf114ef3e68ee2c0684b3739c1f0390c4e268379e", size = 2687523 },
+ { url = "https://files.pythonhosted.org/packages/77/5d/ea482ea48c437285515e278aab893934678cfb5b9e16798309836e372c56/arro3_core-0.4.5-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:c12e1996885b79be9a5b5a26d195c50f335bd0057cf9cec4bc4e88e96d221548", size = 2485166 },
+ { url = "https://files.pythonhosted.org/packages/22/36/d923ee86950245905297477b1dbedfc3026b742a1bb63c5a6a374b6a7907/arro3_core-0.4.5-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:b552f008a91da49068ada01d38c789f511c81652294909392fbe4dce3a4b5a36", size = 2928951 },
+ { url = "https://files.pythonhosted.org/packages/09/0a/0202c304b11978c93b17c3e08dd422b61319645cd1d64e232362ca3a3657/arro3_core-0.4.5-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:284e7f70e38c6d6c61e53dd4c970721c6e2900c0985380796a76bfab5a2985ce", size = 2772054 },
+ { url = "https://files.pythonhosted.org/packages/30/b4/2e33506d60a2ff2116cd78a3db7d8cef1d522ac2b9ac4468d032a909d042/arro3_core-0.4.5-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:a34f4f9dc326b5d38bddd1009e5c69277ae315a28bdd2127aa3064ce9d56ca72", size = 2662343 },
+ { url = "https://files.pythonhosted.org/packages/aa/e6/3969f54c8d7809cedc42e88e8e92c16775d8689c25f2a42f2dd8501252fe/arro3_core-0.4.5-cp311-cp311-win_amd64.whl", hash = "sha256:d1823c2f0e623714519fcd3768a6fa59c769e6044fc66fc6a34a091dc701b84b", size = 2355366 },
+ { url = "https://files.pythonhosted.org/packages/6d/de/4d70416eefb82cf1ee30e8e76814877664229293c9621e454e7adbc2af78/arro3_core-0.4.5-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:50495e2b643d390ac967a533ad181a497be7e3bfa91414cee12d4bb345c7e19f", size = 2369336 },
+ { url = "https://files.pythonhosted.org/packages/60/66/2b8b5f74859fd5acb0e6df466ceb3fd7b01fdf361f6603fcceebcfcfc54b/arro3_core-0.4.5-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:550dd93c44f2462519c85e30bf88ab71dcada4c4ddf0cbef72cc016200479ea0", size = 2132754 },
+ { url = "https://files.pythonhosted.org/packages/dc/59/b4845d5984ff126b146caf3b9fbe603e39e96703d48a19f21424041c35c8/arro3_core-0.4.5-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:0d1f13ad10440066cd7d951c6796d2e30bca558dcedd9f70622a5f4540b70d7f", size = 2654942 },
+ { url = "https://files.pythonhosted.org/packages/65/41/c890766a4a25928c12a1e45996aa70a5c79eecd2ab71c5e6ad8f317702a7/arro3_core-0.4.5-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3645ac0bea6d6e146998153b1bbc17cb7b94708ef51097d318d9fa23bb895098", size = 2508820 },
+ { url = "https://files.pythonhosted.org/packages/15/af/5753cfa8f1b2bd9bec9e6f4cc597f39f9ab4aa59bd78067187849a5c41bb/arro3_core-0.4.5-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:113f658be221f5b1875905988fe73f265cf5ac2d0d551edaf8a377233b691c4f", size = 3546579 },
+ { url = "https://files.pythonhosted.org/packages/dd/68/0f1b5a05f29d5aeef7c20d646d8598eaba08d19da9b195e0effe85ec5183/arro3_core-0.4.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f7cbc6b7577e4c2bcca980db23e0be986d6889e3ef322c85f35c4cd8af210d2c", size = 2485782 },
+ { url = "https://files.pythonhosted.org/packages/3c/a6/fa62a6af2e18232498e72f594d774855c3679c49f12954958f8531bcf30d/arro3_core-0.4.5-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:d8e61a591f2f63c610fda80a9e10e1541674a3e582daaa3cedac351d10033af1", size = 2338831 },
+ { url = "https://files.pythonhosted.org/packages/44/c9/99ce2eb3840ac02d9070206f37c4e5fd4ffb161dc5808ff4dd35b62e9e97/arro3_core-0.4.5-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:c3b47354ff584e9b129ad9c9f73552e2d15144081d6c05cd8244be59da1afda9", size = 2679555 },
+ { url = "https://files.pythonhosted.org/packages/0c/fa/5cf21ac70a445c01869d64b8204fc84d61bcfebcf51851f2aa7d8bf5253c/arro3_core-0.4.5-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:b69447fd9725c8c9b40d29a3149b44736e5e5993a048ee5980509713ede0cdb7", size = 2478985 },
+ { url = "https://files.pythonhosted.org/packages/89/78/58e6cbc9acade1e5d7d019a10b8ce438125a45ada4cc55df7fab7f18e79b/arro3_core-0.4.5-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:ef90c5cdf31a68eb98da024700096fe77a47fe4a1de24312cd8cf3472868e529", size = 2916793 },
+ { url = "https://files.pythonhosted.org/packages/57/0f/1af0878d6ed28cc7251b655badeab8a3bb12d3e1ada7b0c044b3addad873/arro3_core-0.4.5-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:e04504728f880c775e58abda44914e04e94d1bc8536da5ff3d2ca2ba77bef7bc", size = 2764614 },
+ { url = "https://files.pythonhosted.org/packages/82/11/518aba36c488e32b94b231118530a4e8e328555944664c85a5977b55f16d/arro3_core-0.4.5-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:71278f35bee941324581a19b3de6d444e45f17358692a7920932ff7a9aeb390b", size = 2659801 },
+ { url = "https://files.pythonhosted.org/packages/c1/dd/ae9ad933a10928431f728112ec9e4267fce7db61f87106a1bf938f24b666/arro3_core-0.4.5-cp312-cp312-win_amd64.whl", hash = "sha256:6cd0552dacaba312c87f6062e6e6f5d707ca29eeab82f3d4d957b341d536ab87", size = 2356558 },
+ { url = "https://files.pythonhosted.org/packages/d8/e2/6497744aeb2f0360592bf753eef3b3c9ae10b48b598279d3ef496924373c/arro3_core-0.4.5-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:db802a712a68a4bfc6ab167962ccf8fc2170569f6232993545958562bd48937f", size = 2368914 },
+ { url = "https://files.pythonhosted.org/packages/d0/2d/546030085123e80e849575a222b307e5a45608453a54368bfafe644d6492/arro3_core-0.4.5-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:5465c828b3e0093e68cc96fe845a75263dd4b89e9864086614147bf778112c87", size = 2132271 },
+ { url = "https://files.pythonhosted.org/packages/9a/58/3760815ee9b1a769f22bba4705b5a84a0cb020415201e97c97d4142ac375/arro3_core-0.4.5-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:89a64014998c7bced9ee84e5b33c47096670f2a5d4250c9beb3aebbe70f64071", size = 2654427 },
+ { url = "https://files.pythonhosted.org/packages/77/1b/20a25dbb5debf2a358130cacab0f66815384db6ed0fe2e761a59ee48d2bf/arro3_core-0.4.5-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8acb6cce103dfb56cdf69ba6a6471ba4beea062b2df7a0c061a6e04414ab42f6", size = 2508290 },
+ { url = "https://files.pythonhosted.org/packages/2a/e7/877c88d1d797ab07a7293082214c52883927625594dce23094634aa72e87/arro3_core-0.4.5-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:dd82248bbd7971e73c5acdd42e3efbfee141413086c0ec6d9f527818fd17300c", size = 3554592 },
+ { url = "https://files.pythonhosted.org/packages/6c/9d/698dd7c5a56197b9458f390840d8596dea65cb62bcbffdac8e8a40512398/arro3_core-0.4.5-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bb1d703238cd10ee52314b71620897a6830769128f8f665179778e773e2a7e18", size = 2485344 },
+ { url = "https://files.pythonhosted.org/packages/11/96/60758cc7b7dbc9f52a55d81f973c6d3d6666038f993c37e06c8ae1ebb078/arro3_core-0.4.5-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:790bccb515dcd015d0f04128423f312ab6adaf226573f07bcd768c8af46f5814", size = 2338545 },
+ { url = "https://files.pythonhosted.org/packages/c8/57/62b8443d8d7fe4dd8c4f5a90f2fad1b844ef7822966e9d6e5e0a5369a0f5/arro3_core-0.4.5-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:8639e08e6f289976420c728572b97c60d339e4577568d4b148d962bd16f14e19", size = 2679301 },
+ { url = "https://files.pythonhosted.org/packages/ef/85/def91d17cc77d8f5e37bd1b90be54aa74403f9f1eb0b9a840f367a792a7e/arro3_core-0.4.5-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:e79129ed90b32159b627c25040222f6ab987aee347b1b942d4743d1bb6d27f1a", size = 2478468 },
+ { url = "https://files.pythonhosted.org/packages/ea/36/e58dce0cd997758af9188f7085614ea8852ee5f0c13960579a658a5a39bc/arro3_core-0.4.5-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:53c7568699d185f3f75c39c4e476b5c871c461e4956769e627acdacdb1199951", size = 2916412 },
+ { url = "https://files.pythonhosted.org/packages/c4/a6/9719dee21ec18a5556d5faa7bd15fac4249fe5b270bfc974afbe8e3782cc/arro3_core-0.4.5-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:aa057de5d3f5e3624f1c4d4be924f42def0f96fb67673ff4cfb1bddc57ce5824", size = 2764217 },
+ { url = "https://files.pythonhosted.org/packages/b0/e6/be087204b946059e8ae1276f8a557112cb8d47a5f4255f8fdf87b4ecca32/arro3_core-0.4.5-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:f8260cd4bffded2245718e011c595b1236e682863e7f8adcc0b3029272da34fe", size = 2659439 },
+ { url = "https://files.pythonhosted.org/packages/8b/ec/eedb545901b067a0de06dc4fe2d1d21ce439fed1e7f0aca2d3ca87f5459c/arro3_core-0.4.5-cp313-cp313-win_amd64.whl", hash = "sha256:fa90beff5023f02836a9943702cf4e258b112ae05edac6c7f6fffad1fa1ea3ed", size = 2356197 },
+ { url = "https://files.pythonhosted.org/packages/0d/ee/6532a192642a02c18277f386f5139beab1d3d4e46db007fbf19b01d49321/arro3_core-0.4.5-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:4585e389a51e337647688f085869fabbab6c2e4cadb57742eb8e5c3c244b03f7", size = 2386520 },
+ { url = "https://files.pythonhosted.org/packages/cd/20/20813a8cd508d07a163faed7a0239c65b0a2aa221cadc33b436200c790e0/arro3_core-0.4.5-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:fd84256a364afb1e4a64abfb2a8cc54b4aecd249b740ce4bf2a6b832bfeb3e20", size = 2147145 },
+ { url = "https://files.pythonhosted.org/packages/f1/bd/4b7529e92271d57dffc11f3d111afe946fe9e82b17ae9a7cac9e30bffd28/arro3_core-0.4.5-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:af722467a6c767cfa11f5db61f9df4989b49ce79a240c66133c9ab9983e3b933", size = 2668728 },
+ { url = "https://files.pythonhosted.org/packages/4d/b9/927726fa5803421c362aab40eb56f7d68874c3bce451f21d2241258a25e4/arro3_core-0.4.5-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b2033e99c06c53028ce73deb5eb8a0ff047a7ae1eb479f4a598e0d35b548034a", size = 2516220 },
+ { url = "https://files.pythonhosted.org/packages/31/b1/77e21f2c16b747f8c90edfc354d502acf2530719a1ecb0d7d59c471ff420/arro3_core-0.4.5-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:383b353e706c2b21b7cb39a3e2a08cf5d372d7e461ebf601805e643079d166c2", size = 3515682 },
+ { url = "https://files.pythonhosted.org/packages/f0/f3/0165be00ccc9b2ab27bfe7312738b7cb283aaaab8e761509e43f01be142d/arro3_core-0.4.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c75b8b0601e3380356b61c5619e4c67a9fd727a53988a9747e3fb9266261e916", size = 2489018 },
+ { url = "https://files.pythonhosted.org/packages/0e/7c/dc97d8e48332f45c06e422c4ad07b18d8188ccd9d4f3280e3b4d420b3ac8/arro3_core-0.4.5-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:d1aef8def24857e176877d479e90a4c184b8a5a5619afc56accc7be32bdb252b", size = 2345741 },
+ { url = "https://files.pythonhosted.org/packages/99/34/623b3b4fd5d53cced0ee0dae7e4117b4bd3f3c15a14f55ec8a2807a39f78/arro3_core-0.4.5-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:9a2a8d4a941c64045245e1953476517c0831f7a8c404913eafcd6f11fbaf2c6c", size = 2688565 },
+ { url = "https://files.pythonhosted.org/packages/5f/0a/e460cfc46425e46d0da4566eb9e5a997f0d2871befccaf4ffbb2d1388398/arro3_core-0.4.5-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:2d5837b376fe448a837c33b411e63546ed89f2e07c578917e53591bba6ff9f55", size = 2486925 },
+ { url = "https://files.pythonhosted.org/packages/41/47/5403b6a1b572a5ecae18a14065f585da97cc229beb0501e32648758907a4/arro3_core-0.4.5-cp39-cp39-musllinux_1_2_armv7l.whl", hash = "sha256:7999be8b4eb57ba1b7c9b573e60eb7230e6abd269308fef4fec117d84221a7b4", size = 2930843 },
+ { url = "https://files.pythonhosted.org/packages/81/03/444644c52567395458f12f6f9681601b83a04b4900e0a10100e59388dc6e/arro3_core-0.4.5-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:19b930c975e51181ca5b2129f540f54b196cdb77894670921cfe9a4ad1651788", size = 2773047 },
+ { url = "https://files.pythonhosted.org/packages/46/9a/e2cb1b5434d24c75854a113509ccc312849cc46a359f7ab214d93a7be7e7/arro3_core-0.4.5-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:a5531b1c82ac5ed5758c30f331da186d0f2e046bc76d5b07d437ae8b023258db", size = 2664059 },
+ { url = "https://files.pythonhosted.org/packages/c3/ef/b9dad22a08e655334b8c55dda672641b0efc16ca589fc8fed4b5f308c01d/arro3_core-0.4.5-cp39-cp39-win_amd64.whl", hash = "sha256:d9aa31c47af3eb6f632ec1d8605608703d03d29cfcfc8d6e9818c77c1f2d9843", size = 2356610 },
+ { url = "https://files.pythonhosted.org/packages/31/0f/3a5456bebf4964910628331afde57bef8f7c3b87ae3636567c597d86ed22/arro3_core-0.4.5-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:6b60cc70b6bb31976dc3ae3ce8c21ffab3f4a85ab73b5ce1f65424cf0dce7a7e", size = 2382370 },
+ { url = "https://files.pythonhosted.org/packages/50/b2/d1b86f3d1fd253db05a62d5dd874f8c975f88f18c5235c8caabccc67a1b8/arro3_core-0.4.5-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:9248a0cfad662270c03272b7ddd96c9b62fbf7d4b00287a6fdf222714418b2cb", size = 2144098 },
+ { url = "https://files.pythonhosted.org/packages/bf/15/399abd3243569835143e0437dc1587da7e2668fdf15e402b86272b74cb22/arro3_core-0.4.5-pp310-pypy310_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:d718d968b2ad504ebcdffe36ff7078ea62fe9cc7cee1d175df0582668a95902e", size = 2665983 },
+ { url = "https://files.pythonhosted.org/packages/ac/b3/0b7f9d83ecc3ceb934ebf548d0373299f80fd7930ea1fbca1a3e614ad395/arro3_core-0.4.5-pp310-pypy310_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:33faff8b19ebe8839e2e7dc2590c642c3023fe1bc70ba78ce18c5e345b523b89", size = 2513984 },
+ { url = "https://files.pythonhosted.org/packages/7f/cc/135b5ba86a0110cc9cee2f572814f9b4d4faeaf0f5577c1b8268b6e65772/arro3_core-0.4.5-pp310-pypy310_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8176ee4269c12a431786d21125979c326af1f9efc59b23400b4b28dacf4400af", size = 3509591 },
+ { url = "https://files.pythonhosted.org/packages/73/c8/ebd3c18b94b3734a613e07004052b2717bc8ac0240a68257b33ca30abb9e/arro3_core-0.4.5-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:474f619583e88043213af7c8d1d381bfa6f3f52cc6f582f845b4a7b08ad609d0", size = 2486035 },
+ { url = "https://files.pythonhosted.org/packages/0b/ea/4cf22b5ec372de2350f5ef10031bdbfbf016b40a9eca9e6210ec3f413e32/arro3_core-0.4.5-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:a48cdf8ebb891e249dd5ccdb0e97e3a25bb394dedc0df968a330cada899f6e77", size = 2342692 },
+ { url = "https://files.pythonhosted.org/packages/ec/5f/3fbb2c230b79a8ec0391abc83b680e493f697da31257f0174a0ce9632806/arro3_core-0.4.5-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e83c8d3fb1c06e396c2600b5e93efabd98ecc8e19e0c7f30024a0d72d4859868", size = 2686733 },
+ { url = "https://files.pythonhosted.org/packages/b6/be/7cbb590594fdd2596c9300c0ee05ad03620c7f963a70d9fed01d2f507364/arro3_core-0.4.5-pp310-pypy310_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:c643b1540f326d213d9e910d99ed11258880bf3bedb753ee6f791fc6d01f86fb", size = 2484257 },
+ { url = "https://files.pythonhosted.org/packages/19/9b/b3fe104338d0f4b9f1abddf172b24989d1bbdf9c10db38f53ebf2bfe5f18/arro3_core-0.4.5-pp310-pypy310_pp73-musllinux_1_2_armv7l.whl", hash = "sha256:f0d0f5044c9573e1b7443d1d383143bfe00adef17c5de3e085e3b33684876647", size = 2927734 },
+ { url = "https://files.pythonhosted.org/packages/0c/4e/5b0f655462fe90ab13a892df29897e21cec2a5eb24aa0ad664ef93b99a1d/arro3_core-0.4.5-pp310-pypy310_pp73-musllinux_1_2_i686.whl", hash = "sha256:209a3ef1f9e89ddf02709b03e3c317c96158f5952a5e6ec2179707483990a0f9", size = 2771296 },
+ { url = "https://files.pythonhosted.org/packages/be/ae/12bb4619ed78ad9845e8d425dc96b97d90728cb20e2eb75dc563ef124159/arro3_core-0.4.5-pp310-pypy310_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:a08a76a48a756afdfdc34098810012fe2a86f87289b39cb6049691ae51a4744f", size = 2661378 },
+]
+
+[[package]]
+name = "asttokens"
+version = "3.0.0"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/4a/e7/82da0a03e7ba5141f05cce0d302e6eed121ae055e0456ca228bf693984bc/asttokens-3.0.0.tar.gz", hash = "sha256:0dcd8baa8d62b0c1d118b399b2ddba3c4aff271d0d7a9e0d4c1681c79035bbc7", size = 61978 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/25/8a/c46dcc25341b5bce5472c718902eb3d38600a903b14fa6aeecef3f21a46f/asttokens-3.0.0-py3-none-any.whl", hash = "sha256:e3078351a059199dd5138cb1c706e6430c05eff2ff136af5eb4790f9d28932e2", size = 26918 },
+]
+
+[[package]]
+name = "attrs"
+version = "24.3.0"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/48/c8/6260f8ccc11f0917360fc0da435c5c9c7504e3db174d5a12a1494887b045/attrs-24.3.0.tar.gz", hash = "sha256:8f5c07333d543103541ba7be0e2ce16eeee8130cb0b3f9238ab904ce1e85baff", size = 805984 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/89/aa/ab0f7891a01eeb2d2e338ae8fecbe57fcebea1a24dbb64d45801bfab481d/attrs-24.3.0-py3-none-any.whl", hash = "sha256:ac96cd038792094f438ad1f6ff80837353805ac950cd2aa0e0625ef19850c308", size = 63397 },
+]
+
+[[package]]
+name = "babel"
+version = "2.16.0"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/2a/74/f1bc80f23eeba13393b7222b11d95ca3af2c1e28edca18af487137eefed9/babel-2.16.0.tar.gz", hash = "sha256:d1f3554ca26605fe173f3de0c65f750f5a42f924499bf134de6423582298e316", size = 9348104 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/ed/20/bc79bc575ba2e2a7f70e8a1155618bb1301eaa5132a8271373a6903f73f8/babel-2.16.0-py3-none-any.whl", hash = "sha256:368b5b98b37c06b7daf6696391c3240c938b37767d4584413e8438c5c435fa8b", size = 9587599 },
+]
+
+[[package]]
+name = "backports-tarfile"
+version = "1.2.0"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/86/72/cd9b395f25e290e633655a100af28cb253e4393396264a98bd5f5951d50f/backports_tarfile-1.2.0.tar.gz", hash = "sha256:d75e02c268746e1b8144c278978b6e98e85de6ad16f8e4b0844a154557eca991", size = 86406 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/b9/fa/123043af240e49752f1c4bd24da5053b6bd00cad78c2be53c0d1e8b975bc/backports.tarfile-1.2.0-py3-none-any.whl", hash = "sha256:77e284d754527b01fb1e6fa8a1afe577858ebe4e9dad8919e34c862cb399bc34", size = 30181 },
+]
+
+[[package]]
+name = "beautifulsoup4"
+version = "4.12.3"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "soupsieve" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/b3/ca/824b1195773ce6166d388573fc106ce56d4a805bd7427b624e063596ec58/beautifulsoup4-4.12.3.tar.gz", hash = "sha256:74e3d1928edc070d21748185c46e3fb33490f22f52a3addee9aee0f4f7781051", size = 581181 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/b1/fe/e8c672695b37eecc5cbf43e1d0638d88d66ba3a44c4d321c796f4e59167f/beautifulsoup4-4.12.3-py3-none-any.whl", hash = "sha256:b80878c9f40111313e55da8ba20bdba06d8fa3969fc68304167741bbf9e082ed", size = 147925 },
+]
+
+[[package]]
+name = "certifi"
+version = "2024.12.14"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/0f/bd/1d41ee578ce09523c81a15426705dd20969f5abf006d1afe8aeff0dd776a/certifi-2024.12.14.tar.gz", hash = "sha256:b650d30f370c2b724812bee08008be0c4163b163ddaec3f2546c1caf65f191db", size = 166010 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/a5/32/8f6669fc4798494966bf446c8c4a162e0b5d893dff088afddf76414f70e1/certifi-2024.12.14-py3-none-any.whl", hash = "sha256:1275f7a45be9464efc1173084eaa30f866fe2e47d389406136d332ed4967ec56", size = 164927 },
+]
+
+[[package]]
+name = "cffi"
+version = "1.17.1"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "pycparser" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/fc/97/c783634659c2920c3fc70419e3af40972dbaf758daa229a7d6ea6135c90d/cffi-1.17.1.tar.gz", hash = "sha256:1c39c6016c32bc48dd54561950ebd6836e1670f2ae46128f67cf49e789c52824", size = 516621 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/90/07/f44ca684db4e4f08a3fdc6eeb9a0d15dc6883efc7b8c90357fdbf74e186c/cffi-1.17.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:df8b1c11f177bc2313ec4b2d46baec87a5f3e71fc8b45dab2ee7cae86d9aba14", size = 182191 },
+ { url = "https://files.pythonhosted.org/packages/08/fd/cc2fedbd887223f9f5d170c96e57cbf655df9831a6546c1727ae13fa977a/cffi-1.17.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8f2cdc858323644ab277e9bb925ad72ae0e67f69e804f4898c070998d50b1a67", size = 178592 },
+ { url = "https://files.pythonhosted.org/packages/de/cc/4635c320081c78d6ffc2cab0a76025b691a91204f4aa317d568ff9280a2d/cffi-1.17.1-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:edae79245293e15384b51f88b00613ba9f7198016a5948b5dddf4917d4d26382", size = 426024 },
+ { url = "https://files.pythonhosted.org/packages/b6/7b/3b2b250f3aab91abe5f8a51ada1b717935fdaec53f790ad4100fe2ec64d1/cffi-1.17.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:45398b671ac6d70e67da8e4224a065cec6a93541bb7aebe1b198a61b58c7b702", size = 448188 },
+ { url = "https://files.pythonhosted.org/packages/d3/48/1b9283ebbf0ec065148d8de05d647a986c5f22586b18120020452fff8f5d/cffi-1.17.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ad9413ccdeda48c5afdae7e4fa2192157e991ff761e7ab8fdd8926f40b160cc3", size = 455571 },
+ { url = "https://files.pythonhosted.org/packages/40/87/3b8452525437b40f39ca7ff70276679772ee7e8b394934ff60e63b7b090c/cffi-1.17.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5da5719280082ac6bd9aa7becb3938dc9f9cbd57fac7d2871717b1feb0902ab6", size = 436687 },
+ { url = "https://files.pythonhosted.org/packages/8d/fb/4da72871d177d63649ac449aec2e8a29efe0274035880c7af59101ca2232/cffi-1.17.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2bb1a08b8008b281856e5971307cc386a8e9c5b625ac297e853d36da6efe9c17", size = 446211 },
+ { url = "https://files.pythonhosted.org/packages/ab/a0/62f00bcb411332106c02b663b26f3545a9ef136f80d5df746c05878f8c4b/cffi-1.17.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:045d61c734659cc045141be4bae381a41d89b741f795af1dd018bfb532fd0df8", size = 461325 },
+ { url = "https://files.pythonhosted.org/packages/36/83/76127035ed2e7e27b0787604d99da630ac3123bfb02d8e80c633f218a11d/cffi-1.17.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:6883e737d7d9e4899a8a695e00ec36bd4e5e4f18fabe0aca0efe0a4b44cdb13e", size = 438784 },
+ { url = "https://files.pythonhosted.org/packages/21/81/a6cd025db2f08ac88b901b745c163d884641909641f9b826e8cb87645942/cffi-1.17.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:6b8b4a92e1c65048ff98cfe1f735ef8f1ceb72e3d5f0c25fdb12087a23da22be", size = 461564 },
+ { url = "https://files.pythonhosted.org/packages/f8/fe/4d41c2f200c4a457933dbd98d3cf4e911870877bd94d9656cc0fcb390681/cffi-1.17.1-cp310-cp310-win32.whl", hash = "sha256:c9c3d058ebabb74db66e431095118094d06abf53284d9c81f27300d0e0d8bc7c", size = 171804 },
+ { url = "https://files.pythonhosted.org/packages/d1/b6/0b0f5ab93b0df4acc49cae758c81fe4e5ef26c3ae2e10cc69249dfd8b3ab/cffi-1.17.1-cp310-cp310-win_amd64.whl", hash = "sha256:0f048dcf80db46f0098ccac01132761580d28e28bc0f78ae0d58048063317e15", size = 181299 },
+ { url = "https://files.pythonhosted.org/packages/6b/f4/927e3a8899e52a27fa57a48607ff7dc91a9ebe97399b357b85a0c7892e00/cffi-1.17.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:a45e3c6913c5b87b3ff120dcdc03f6131fa0065027d0ed7ee6190736a74cd401", size = 182264 },
+ { url = "https://files.pythonhosted.org/packages/6c/f5/6c3a8efe5f503175aaddcbea6ad0d2c96dad6f5abb205750d1b3df44ef29/cffi-1.17.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:30c5e0cb5ae493c04c8b42916e52ca38079f1b235c2f8ae5f4527b963c401caf", size = 178651 },
+ { url = "https://files.pythonhosted.org/packages/94/dd/a3f0118e688d1b1a57553da23b16bdade96d2f9bcda4d32e7d2838047ff7/cffi-1.17.1-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f75c7ab1f9e4aca5414ed4d8e5c0e303a34f4421f8a0d47a4d019ceff0ab6af4", size = 445259 },
+ { url = "https://files.pythonhosted.org/packages/2e/ea/70ce63780f096e16ce8588efe039d3c4f91deb1dc01e9c73a287939c79a6/cffi-1.17.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a1ed2dd2972641495a3ec98445e09766f077aee98a1c896dcb4ad0d303628e41", size = 469200 },
+ { url = "https://files.pythonhosted.org/packages/1c/a0/a4fa9f4f781bda074c3ddd57a572b060fa0df7655d2a4247bbe277200146/cffi-1.17.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:46bf43160c1a35f7ec506d254e5c890f3c03648a4dbac12d624e4490a7046cd1", size = 477235 },
+ { url = "https://files.pythonhosted.org/packages/62/12/ce8710b5b8affbcdd5c6e367217c242524ad17a02fe5beec3ee339f69f85/cffi-1.17.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a24ed04c8ffd54b0729c07cee15a81d964e6fee0e3d4d342a27b020d22959dc6", size = 459721 },
+ { url = "https://files.pythonhosted.org/packages/ff/6b/d45873c5e0242196f042d555526f92aa9e0c32355a1be1ff8c27f077fd37/cffi-1.17.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:610faea79c43e44c71e1ec53a554553fa22321b65fae24889706c0a84d4ad86d", size = 467242 },
+ { url = "https://files.pythonhosted.org/packages/1a/52/d9a0e523a572fbccf2955f5abe883cfa8bcc570d7faeee06336fbd50c9fc/cffi-1.17.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:a9b15d491f3ad5d692e11f6b71f7857e7835eb677955c00cc0aefcd0669adaf6", size = 477999 },
+ { url = "https://files.pythonhosted.org/packages/44/74/f2a2460684a1a2d00ca799ad880d54652841a780c4c97b87754f660c7603/cffi-1.17.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:de2ea4b5833625383e464549fec1bc395c1bdeeb5f25c4a3a82b5a8c756ec22f", size = 454242 },
+ { url = "https://files.pythonhosted.org/packages/f8/4a/34599cac7dfcd888ff54e801afe06a19c17787dfd94495ab0c8d35fe99fb/cffi-1.17.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:fc48c783f9c87e60831201f2cce7f3b2e4846bf4d8728eabe54d60700b318a0b", size = 478604 },
+ { url = "https://files.pythonhosted.org/packages/34/33/e1b8a1ba29025adbdcda5fb3a36f94c03d771c1b7b12f726ff7fef2ebe36/cffi-1.17.1-cp311-cp311-win32.whl", hash = "sha256:85a950a4ac9c359340d5963966e3e0a94a676bd6245a4b55bc43949eee26a655", size = 171727 },
+ { url = "https://files.pythonhosted.org/packages/3d/97/50228be003bb2802627d28ec0627837ac0bf35c90cf769812056f235b2d1/cffi-1.17.1-cp311-cp311-win_amd64.whl", hash = "sha256:caaf0640ef5f5517f49bc275eca1406b0ffa6aa184892812030f04c2abf589a0", size = 181400 },
+ { url = "https://files.pythonhosted.org/packages/5a/84/e94227139ee5fb4d600a7a4927f322e1d4aea6fdc50bd3fca8493caba23f/cffi-1.17.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:805b4371bf7197c329fcb3ead37e710d1bca9da5d583f5073b799d5c5bd1eee4", size = 183178 },
+ { url = "https://files.pythonhosted.org/packages/da/ee/fb72c2b48656111c4ef27f0f91da355e130a923473bf5ee75c5643d00cca/cffi-1.17.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:733e99bc2df47476e3848417c5a4540522f234dfd4ef3ab7fafdf555b082ec0c", size = 178840 },
+ { url = "https://files.pythonhosted.org/packages/cc/b6/db007700f67d151abadf508cbfd6a1884f57eab90b1bb985c4c8c02b0f28/cffi-1.17.1-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1257bdabf294dceb59f5e70c64a3e2f462c30c7ad68092d01bbbfb1c16b1ba36", size = 454803 },
+ { url = "https://files.pythonhosted.org/packages/1a/df/f8d151540d8c200eb1c6fba8cd0dfd40904f1b0682ea705c36e6c2e97ab3/cffi-1.17.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:da95af8214998d77a98cc14e3a3bd00aa191526343078b530ceb0bd710fb48a5", size = 478850 },
+ { url = "https://files.pythonhosted.org/packages/28/c0/b31116332a547fd2677ae5b78a2ef662dfc8023d67f41b2a83f7c2aa78b1/cffi-1.17.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d63afe322132c194cf832bfec0dc69a99fb9bb6bbd550f161a49e9e855cc78ff", size = 485729 },
+ { url = "https://files.pythonhosted.org/packages/91/2b/9a1ddfa5c7f13cab007a2c9cc295b70fbbda7cb10a286aa6810338e60ea1/cffi-1.17.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f79fc4fc25f1c8698ff97788206bb3c2598949bfe0fef03d299eb1b5356ada99", size = 471256 },
+ { url = "https://files.pythonhosted.org/packages/b2/d5/da47df7004cb17e4955df6a43d14b3b4ae77737dff8bf7f8f333196717bf/cffi-1.17.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b62ce867176a75d03a665bad002af8e6d54644fad99a3c70905c543130e39d93", size = 479424 },
+ { url = "https://files.pythonhosted.org/packages/0b/ac/2a28bcf513e93a219c8a4e8e125534f4f6db03e3179ba1c45e949b76212c/cffi-1.17.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:386c8bf53c502fff58903061338ce4f4950cbdcb23e2902d86c0f722b786bbe3", size = 484568 },
+ { url = "https://files.pythonhosted.org/packages/d4/38/ca8a4f639065f14ae0f1d9751e70447a261f1a30fa7547a828ae08142465/cffi-1.17.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:4ceb10419a9adf4460ea14cfd6bc43d08701f0835e979bf821052f1805850fe8", size = 488736 },
+ { url = "https://files.pythonhosted.org/packages/86/c5/28b2d6f799ec0bdecf44dced2ec5ed43e0eb63097b0f58c293583b406582/cffi-1.17.1-cp312-cp312-win32.whl", hash = "sha256:a08d7e755f8ed21095a310a693525137cfe756ce62d066e53f502a83dc550f65", size = 172448 },
+ { url = "https://files.pythonhosted.org/packages/50/b9/db34c4755a7bd1cb2d1603ac3863f22bcecbd1ba29e5ee841a4bc510b294/cffi-1.17.1-cp312-cp312-win_amd64.whl", hash = "sha256:51392eae71afec0d0c8fb1a53b204dbb3bcabcb3c9b807eedf3e1e6ccf2de903", size = 181976 },
+ { url = "https://files.pythonhosted.org/packages/8d/f8/dd6c246b148639254dad4d6803eb6a54e8c85c6e11ec9df2cffa87571dbe/cffi-1.17.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:f3a2b4222ce6b60e2e8b337bb9596923045681d71e5a082783484d845390938e", size = 182989 },
+ { url = "https://files.pythonhosted.org/packages/8b/f1/672d303ddf17c24fc83afd712316fda78dc6fce1cd53011b839483e1ecc8/cffi-1.17.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:0984a4925a435b1da406122d4d7968dd861c1385afe3b45ba82b750f229811e2", size = 178802 },
+ { url = "https://files.pythonhosted.org/packages/0e/2d/eab2e858a91fdff70533cab61dcff4a1f55ec60425832ddfdc9cd36bc8af/cffi-1.17.1-cp313-cp313-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d01b12eeeb4427d3110de311e1774046ad344f5b1a7403101878976ecd7a10f3", size = 454792 },
+ { url = "https://files.pythonhosted.org/packages/75/b2/fbaec7c4455c604e29388d55599b99ebcc250a60050610fadde58932b7ee/cffi-1.17.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:706510fe141c86a69c8ddc029c7910003a17353970cff3b904ff0686a5927683", size = 478893 },
+ { url = "https://files.pythonhosted.org/packages/4f/b7/6e4a2162178bf1935c336d4da8a9352cccab4d3a5d7914065490f08c0690/cffi-1.17.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:de55b766c7aa2e2a3092c51e0483d700341182f08e67c63630d5b6f200bb28e5", size = 485810 },
+ { url = "https://files.pythonhosted.org/packages/c7/8a/1d0e4a9c26e54746dc08c2c6c037889124d4f59dffd853a659fa545f1b40/cffi-1.17.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c59d6e989d07460165cc5ad3c61f9fd8f1b4796eacbd81cee78957842b834af4", size = 471200 },
+ { url = "https://files.pythonhosted.org/packages/26/9f/1aab65a6c0db35f43c4d1b4f580e8df53914310afc10ae0397d29d697af4/cffi-1.17.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dd398dbc6773384a17fe0d3e7eeb8d1a21c2200473ee6806bb5e6a8e62bb73dd", size = 479447 },
+ { url = "https://files.pythonhosted.org/packages/5f/e4/fb8b3dd8dc0e98edf1135ff067ae070bb32ef9d509d6cb0f538cd6f7483f/cffi-1.17.1-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:3edc8d958eb099c634dace3c7e16560ae474aa3803a5df240542b305d14e14ed", size = 484358 },
+ { url = "https://files.pythonhosted.org/packages/f1/47/d7145bf2dc04684935d57d67dff9d6d795b2ba2796806bb109864be3a151/cffi-1.17.1-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:72e72408cad3d5419375fc87d289076ee319835bdfa2caad331e377589aebba9", size = 488469 },
+ { url = "https://files.pythonhosted.org/packages/bf/ee/f94057fa6426481d663b88637a9a10e859e492c73d0384514a17d78ee205/cffi-1.17.1-cp313-cp313-win32.whl", hash = "sha256:e03eab0a8677fa80d646b5ddece1cbeaf556c313dcfac435ba11f107ba117b5d", size = 172475 },
+ { url = "https://files.pythonhosted.org/packages/7c/fc/6a8cb64e5f0324877d503c854da15d76c1e50eb722e320b15345c4d0c6de/cffi-1.17.1-cp313-cp313-win_amd64.whl", hash = "sha256:f6a16c31041f09ead72d69f583767292f750d24913dadacf5756b966aacb3f1a", size = 182009 },
+ { url = "https://files.pythonhosted.org/packages/b9/ea/8bb50596b8ffbc49ddd7a1ad305035daa770202a6b782fc164647c2673ad/cffi-1.17.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:b2ab587605f4ba0bf81dc0cb08a41bd1c0a5906bd59243d56bad7668a6fc6c16", size = 182220 },
+ { url = "https://files.pythonhosted.org/packages/ae/11/e77c8cd24f58285a82c23af484cf5b124a376b32644e445960d1a4654c3a/cffi-1.17.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:28b16024becceed8c6dfbc75629e27788d8a3f9030691a1dbf9821a128b22c36", size = 178605 },
+ { url = "https://files.pythonhosted.org/packages/ed/65/25a8dc32c53bf5b7b6c2686b42ae2ad58743f7ff644844af7cdb29b49361/cffi-1.17.1-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1d599671f396c4723d016dbddb72fe8e0397082b0a77a4fab8028923bec050e8", size = 424910 },
+ { url = "https://files.pythonhosted.org/packages/42/7a/9d086fab7c66bd7c4d0f27c57a1b6b068ced810afc498cc8c49e0088661c/cffi-1.17.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ca74b8dbe6e8e8263c0ffd60277de77dcee6c837a3d0881d8c1ead7268c9e576", size = 447200 },
+ { url = "https://files.pythonhosted.org/packages/da/63/1785ced118ce92a993b0ec9e0d0ac8dc3e5dbfbcaa81135be56c69cabbb6/cffi-1.17.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f7f5baafcc48261359e14bcd6d9bff6d4b28d9103847c9e136694cb0501aef87", size = 454565 },
+ { url = "https://files.pythonhosted.org/packages/74/06/90b8a44abf3556599cdec107f7290277ae8901a58f75e6fe8f970cd72418/cffi-1.17.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:98e3969bcff97cae1b2def8ba499ea3d6f31ddfdb7635374834cf89a1a08ecf0", size = 435635 },
+ { url = "https://files.pythonhosted.org/packages/bd/62/a1f468e5708a70b1d86ead5bab5520861d9c7eacce4a885ded9faa7729c3/cffi-1.17.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cdf5ce3acdfd1661132f2a9c19cac174758dc2352bfe37d98aa7512c6b7178b3", size = 445218 },
+ { url = "https://files.pythonhosted.org/packages/5b/95/b34462f3ccb09c2594aa782d90a90b045de4ff1f70148ee79c69d37a0a5a/cffi-1.17.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:9755e4345d1ec879e3849e62222a18c7174d65a6a92d5b346b1863912168b595", size = 460486 },
+ { url = "https://files.pythonhosted.org/packages/fc/fc/a1e4bebd8d680febd29cf6c8a40067182b64f00c7d105f8f26b5bc54317b/cffi-1.17.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:f1e22e8c4419538cb197e4dd60acc919d7696e5ef98ee4da4e01d3f8cfa4cc5a", size = 437911 },
+ { url = "https://files.pythonhosted.org/packages/e6/c3/21cab7a6154b6a5ea330ae80de386e7665254835b9e98ecc1340b3a7de9a/cffi-1.17.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:c03e868a0b3bc35839ba98e74211ed2b05d2119be4e8a0f224fba9384f1fe02e", size = 460632 },
+ { url = "https://files.pythonhosted.org/packages/cb/b5/fd9f8b5a84010ca169ee49f4e4ad6f8c05f4e3545b72ee041dbbcb159882/cffi-1.17.1-cp39-cp39-win32.whl", hash = "sha256:e31ae45bc2e29f6b2abd0de1cc3b9d5205aa847cafaecb8af1476a609a2f6eb7", size = 171820 },
+ { url = "https://files.pythonhosted.org/packages/8c/52/b08750ce0bce45c143e1b5d7357ee8c55341b52bdef4b0f081af1eb248c2/cffi-1.17.1-cp39-cp39-win_amd64.whl", hash = "sha256:d016c76bdd850f3c626af19b0542c9677ba156e4ee4fccfdd7848803533ef662", size = 181290 },
+]
+
+[[package]]
+name = "charset-normalizer"
+version = "3.4.1"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/16/b0/572805e227f01586461c80e0fd25d65a2115599cc9dad142fee4b747c357/charset_normalizer-3.4.1.tar.gz", hash = "sha256:44251f18cd68a75b56585dd00dae26183e102cd5e0f9f1466e6df5da2ed64ea3", size = 123188 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/0d/58/5580c1716040bc89206c77d8f74418caf82ce519aae06450393ca73475d1/charset_normalizer-3.4.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:91b36a978b5ae0ee86c394f5a54d6ef44db1de0815eb43de826d41d21e4af3de", size = 198013 },
+ { url = "https://files.pythonhosted.org/packages/d0/11/00341177ae71c6f5159a08168bcb98c6e6d196d372c94511f9f6c9afe0c6/charset_normalizer-3.4.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7461baadb4dc00fd9e0acbe254e3d7d2112e7f92ced2adc96e54ef6501c5f176", size = 141285 },
+ { url = "https://files.pythonhosted.org/packages/01/09/11d684ea5819e5a8f5100fb0b38cf8d02b514746607934134d31233e02c8/charset_normalizer-3.4.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e218488cd232553829be0664c2292d3af2eeeb94b32bea483cf79ac6a694e037", size = 151449 },
+ { url = "https://files.pythonhosted.org/packages/08/06/9f5a12939db324d905dc1f70591ae7d7898d030d7662f0d426e2286f68c9/charset_normalizer-3.4.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:80ed5e856eb7f30115aaf94e4a08114ccc8813e6ed1b5efa74f9f82e8509858f", size = 143892 },
+ { url = "https://files.pythonhosted.org/packages/93/62/5e89cdfe04584cb7f4d36003ffa2936681b03ecc0754f8e969c2becb7e24/charset_normalizer-3.4.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b010a7a4fd316c3c484d482922d13044979e78d1861f0e0650423144c616a46a", size = 146123 },
+ { url = "https://files.pythonhosted.org/packages/a9/ac/ab729a15c516da2ab70a05f8722ecfccc3f04ed7a18e45c75bbbaa347d61/charset_normalizer-3.4.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4532bff1b8421fd0a320463030c7520f56a79c9024a4e88f01c537316019005a", size = 147943 },
+ { url = "https://files.pythonhosted.org/packages/03/d2/3f392f23f042615689456e9a274640c1d2e5dd1d52de36ab8f7955f8f050/charset_normalizer-3.4.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:d973f03c0cb71c5ed99037b870f2be986c3c05e63622c017ea9816881d2dd247", size = 142063 },
+ { url = "https://files.pythonhosted.org/packages/f2/e3/e20aae5e1039a2cd9b08d9205f52142329f887f8cf70da3650326670bddf/charset_normalizer-3.4.1-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:3a3bd0dcd373514dcec91c411ddb9632c0d7d92aed7093b8c3bbb6d69ca74408", size = 150578 },
+ { url = "https://files.pythonhosted.org/packages/8d/af/779ad72a4da0aed925e1139d458adc486e61076d7ecdcc09e610ea8678db/charset_normalizer-3.4.1-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:d9c3cdf5390dcd29aa8056d13e8e99526cda0305acc038b96b30352aff5ff2bb", size = 153629 },
+ { url = "https://files.pythonhosted.org/packages/c2/b6/7aa450b278e7aa92cf7732140bfd8be21f5f29d5bf334ae987c945276639/charset_normalizer-3.4.1-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:2bdfe3ac2e1bbe5b59a1a63721eb3b95fc9b6817ae4a46debbb4e11f6232428d", size = 150778 },
+ { url = "https://files.pythonhosted.org/packages/39/f4/d9f4f712d0951dcbfd42920d3db81b00dd23b6ab520419626f4023334056/charset_normalizer-3.4.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:eab677309cdb30d047996b36d34caeda1dc91149e4fdca0b1a039b3f79d9a807", size = 146453 },
+ { url = "https://files.pythonhosted.org/packages/49/2b/999d0314e4ee0cff3cb83e6bc9aeddd397eeed693edb4facb901eb8fbb69/charset_normalizer-3.4.1-cp310-cp310-win32.whl", hash = "sha256:c0429126cf75e16c4f0ad00ee0eae4242dc652290f940152ca8c75c3a4b6ee8f", size = 95479 },
+ { url = "https://files.pythonhosted.org/packages/2d/ce/3cbed41cff67e455a386fb5e5dd8906cdda2ed92fbc6297921f2e4419309/charset_normalizer-3.4.1-cp310-cp310-win_amd64.whl", hash = "sha256:9f0b8b1c6d84c8034a44893aba5e767bf9c7a211e313a9605d9c617d7083829f", size = 102790 },
+ { url = "https://files.pythonhosted.org/packages/72/80/41ef5d5a7935d2d3a773e3eaebf0a9350542f2cab4eac59a7a4741fbbbbe/charset_normalizer-3.4.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:8bfa33f4f2672964266e940dd22a195989ba31669bd84629f05fab3ef4e2d125", size = 194995 },
+ { url = "https://files.pythonhosted.org/packages/7a/28/0b9fefa7b8b080ec492110af6d88aa3dea91c464b17d53474b6e9ba5d2c5/charset_normalizer-3.4.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:28bf57629c75e810b6ae989f03c0828d64d6b26a5e205535585f96093e405ed1", size = 139471 },
+ { url = "https://files.pythonhosted.org/packages/71/64/d24ab1a997efb06402e3fc07317e94da358e2585165930d9d59ad45fcae2/charset_normalizer-3.4.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f08ff5e948271dc7e18a35641d2f11a4cd8dfd5634f55228b691e62b37125eb3", size = 149831 },
+ { url = "https://files.pythonhosted.org/packages/37/ed/be39e5258e198655240db5e19e0b11379163ad7070962d6b0c87ed2c4d39/charset_normalizer-3.4.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:234ac59ea147c59ee4da87a0c0f098e9c8d169f4dc2a159ef720f1a61bbe27cd", size = 142335 },
+ { url = "https://files.pythonhosted.org/packages/88/83/489e9504711fa05d8dde1574996408026bdbdbd938f23be67deebb5eca92/charset_normalizer-3.4.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fd4ec41f914fa74ad1b8304bbc634b3de73d2a0889bd32076342a573e0779e00", size = 143862 },
+ { url = "https://files.pythonhosted.org/packages/c6/c7/32da20821cf387b759ad24627a9aca289d2822de929b8a41b6241767b461/charset_normalizer-3.4.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:eea6ee1db730b3483adf394ea72f808b6e18cf3cb6454b4d86e04fa8c4327a12", size = 145673 },
+ { url = "https://files.pythonhosted.org/packages/68/85/f4288e96039abdd5aeb5c546fa20a37b50da71b5cf01e75e87f16cd43304/charset_normalizer-3.4.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:c96836c97b1238e9c9e3fe90844c947d5afbf4f4c92762679acfe19927d81d77", size = 140211 },
+ { url = "https://files.pythonhosted.org/packages/28/a3/a42e70d03cbdabc18997baf4f0227c73591a08041c149e710045c281f97b/charset_normalizer-3.4.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:4d86f7aff21ee58f26dcf5ae81a9addbd914115cdebcbb2217e4f0ed8982e146", size = 148039 },
+ { url = "https://files.pythonhosted.org/packages/85/e4/65699e8ab3014ecbe6f5c71d1a55d810fb716bbfd74f6283d5c2aa87febf/charset_normalizer-3.4.1-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:09b5e6733cbd160dcc09589227187e242a30a49ca5cefa5a7edd3f9d19ed53fd", size = 151939 },
+ { url = "https://files.pythonhosted.org/packages/b1/82/8e9fe624cc5374193de6860aba3ea8070f584c8565ee77c168ec13274bd2/charset_normalizer-3.4.1-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:5777ee0881f9499ed0f71cc82cf873d9a0ca8af166dfa0af8ec4e675b7df48e6", size = 149075 },
+ { url = "https://files.pythonhosted.org/packages/3d/7b/82865ba54c765560c8433f65e8acb9217cb839a9e32b42af4aa8e945870f/charset_normalizer-3.4.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:237bdbe6159cff53b4f24f397d43c6336c6b0b42affbe857970cefbb620911c8", size = 144340 },
+ { url = "https://files.pythonhosted.org/packages/b5/b6/9674a4b7d4d99a0d2df9b215da766ee682718f88055751e1e5e753c82db0/charset_normalizer-3.4.1-cp311-cp311-win32.whl", hash = "sha256:8417cb1f36cc0bc7eaba8ccb0e04d55f0ee52df06df3ad55259b9a323555fc8b", size = 95205 },
+ { url = "https://files.pythonhosted.org/packages/1e/ab/45b180e175de4402dcf7547e4fb617283bae54ce35c27930a6f35b6bef15/charset_normalizer-3.4.1-cp311-cp311-win_amd64.whl", hash = "sha256:d7f50a1f8c450f3925cb367d011448c39239bb3eb4117c36a6d354794de4ce76", size = 102441 },
+ { url = "https://files.pythonhosted.org/packages/0a/9a/dd1e1cdceb841925b7798369a09279bd1cf183cef0f9ddf15a3a6502ee45/charset_normalizer-3.4.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:73d94b58ec7fecbc7366247d3b0b10a21681004153238750bb67bd9012414545", size = 196105 },
+ { url = "https://files.pythonhosted.org/packages/d3/8c/90bfabf8c4809ecb648f39794cf2a84ff2e7d2a6cf159fe68d9a26160467/charset_normalizer-3.4.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dad3e487649f498dd991eeb901125411559b22e8d7ab25d3aeb1af367df5efd7", size = 140404 },
+ { url = "https://files.pythonhosted.org/packages/ad/8f/e410d57c721945ea3b4f1a04b74f70ce8fa800d393d72899f0a40526401f/charset_normalizer-3.4.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c30197aa96e8eed02200a83fba2657b4c3acd0f0aa4bdc9f6c1af8e8962e0757", size = 150423 },
+ { url = "https://files.pythonhosted.org/packages/f0/b8/e6825e25deb691ff98cf5c9072ee0605dc2acfca98af70c2d1b1bc75190d/charset_normalizer-3.4.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2369eea1ee4a7610a860d88f268eb39b95cb588acd7235e02fd5a5601773d4fa", size = 143184 },
+ { url = "https://files.pythonhosted.org/packages/3e/a2/513f6cbe752421f16d969e32f3583762bfd583848b763913ddab8d9bfd4f/charset_normalizer-3.4.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc2722592d8998c870fa4e290c2eec2c1569b87fe58618e67d38b4665dfa680d", size = 145268 },
+ { url = "https://files.pythonhosted.org/packages/74/94/8a5277664f27c3c438546f3eb53b33f5b19568eb7424736bdc440a88a31f/charset_normalizer-3.4.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ffc9202a29ab3920fa812879e95a9e78b2465fd10be7fcbd042899695d75e616", size = 147601 },
+ { url = "https://files.pythonhosted.org/packages/7c/5f/6d352c51ee763623a98e31194823518e09bfa48be2a7e8383cf691bbb3d0/charset_normalizer-3.4.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:804a4d582ba6e5b747c625bf1255e6b1507465494a40a2130978bda7b932c90b", size = 141098 },
+ { url = "https://files.pythonhosted.org/packages/78/d4/f5704cb629ba5ab16d1d3d741396aec6dc3ca2b67757c45b0599bb010478/charset_normalizer-3.4.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:0f55e69f030f7163dffe9fd0752b32f070566451afe180f99dbeeb81f511ad8d", size = 149520 },
+ { url = "https://files.pythonhosted.org/packages/c5/96/64120b1d02b81785f222b976c0fb79a35875457fa9bb40827678e54d1bc8/charset_normalizer-3.4.1-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:c4c3e6da02df6fa1410a7680bd3f63d4f710232d3139089536310d027950696a", size = 152852 },
+ { url = "https://files.pythonhosted.org/packages/84/c9/98e3732278a99f47d487fd3468bc60b882920cef29d1fa6ca460a1fdf4e6/charset_normalizer-3.4.1-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:5df196eb874dae23dcfb968c83d4f8fdccb333330fe1fc278ac5ceeb101003a9", size = 150488 },
+ { url = "https://files.pythonhosted.org/packages/13/0e/9c8d4cb99c98c1007cc11eda969ebfe837bbbd0acdb4736d228ccaabcd22/charset_normalizer-3.4.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:e358e64305fe12299a08e08978f51fc21fac060dcfcddd95453eabe5b93ed0e1", size = 146192 },
+ { url = "https://files.pythonhosted.org/packages/b2/21/2b6b5b860781a0b49427309cb8670785aa543fb2178de875b87b9cc97746/charset_normalizer-3.4.1-cp312-cp312-win32.whl", hash = "sha256:9b23ca7ef998bc739bf6ffc077c2116917eabcc901f88da1b9856b210ef63f35", size = 95550 },
+ { url = "https://files.pythonhosted.org/packages/21/5b/1b390b03b1d16c7e382b561c5329f83cc06623916aab983e8ab9239c7d5c/charset_normalizer-3.4.1-cp312-cp312-win_amd64.whl", hash = "sha256:6ff8a4a60c227ad87030d76e99cd1698345d4491638dfa6673027c48b3cd395f", size = 102785 },
+ { url = "https://files.pythonhosted.org/packages/38/94/ce8e6f63d18049672c76d07d119304e1e2d7c6098f0841b51c666e9f44a0/charset_normalizer-3.4.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:aabfa34badd18f1da5ec1bc2715cadc8dca465868a4e73a0173466b688f29dda", size = 195698 },
+ { url = "https://files.pythonhosted.org/packages/24/2e/dfdd9770664aae179a96561cc6952ff08f9a8cd09a908f259a9dfa063568/charset_normalizer-3.4.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:22e14b5d70560b8dd51ec22863f370d1e595ac3d024cb8ad7d308b4cd95f8313", size = 140162 },
+ { url = "https://files.pythonhosted.org/packages/24/4e/f646b9093cff8fc86f2d60af2de4dc17c759de9d554f130b140ea4738ca6/charset_normalizer-3.4.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8436c508b408b82d87dc5f62496973a1805cd46727c34440b0d29d8a2f50a6c9", size = 150263 },
+ { url = "https://files.pythonhosted.org/packages/5e/67/2937f8d548c3ef6e2f9aab0f6e21001056f692d43282b165e7c56023e6dd/charset_normalizer-3.4.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2d074908e1aecee37a7635990b2c6d504cd4766c7bc9fc86d63f9c09af3fa11b", size = 142966 },
+ { url = "https://files.pythonhosted.org/packages/52/ed/b7f4f07de100bdb95c1756d3a4d17b90c1a3c53715c1a476f8738058e0fa/charset_normalizer-3.4.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:955f8851919303c92343d2f66165294848d57e9bba6cf6e3625485a70a038d11", size = 144992 },
+ { url = "https://files.pythonhosted.org/packages/96/2c/d49710a6dbcd3776265f4c923bb73ebe83933dfbaa841c5da850fe0fd20b/charset_normalizer-3.4.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:44ecbf16649486d4aebafeaa7ec4c9fed8b88101f4dd612dcaf65d5e815f837f", size = 147162 },
+ { url = "https://files.pythonhosted.org/packages/b4/41/35ff1f9a6bd380303dea55e44c4933b4cc3c4850988927d4082ada230273/charset_normalizer-3.4.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:0924e81d3d5e70f8126529951dac65c1010cdf117bb75eb02dd12339b57749dd", size = 140972 },
+ { url = "https://files.pythonhosted.org/packages/fb/43/c6a0b685fe6910d08ba971f62cd9c3e862a85770395ba5d9cad4fede33ab/charset_normalizer-3.4.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:2967f74ad52c3b98de4c3b32e1a44e32975e008a9cd2a8cc8966d6a5218c5cb2", size = 149095 },
+ { url = "https://files.pythonhosted.org/packages/4c/ff/a9a504662452e2d2878512115638966e75633519ec11f25fca3d2049a94a/charset_normalizer-3.4.1-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:c75cb2a3e389853835e84a2d8fb2b81a10645b503eca9bcb98df6b5a43eb8886", size = 152668 },
+ { url = "https://files.pythonhosted.org/packages/6c/71/189996b6d9a4b932564701628af5cee6716733e9165af1d5e1b285c530ed/charset_normalizer-3.4.1-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:09b26ae6b1abf0d27570633b2b078a2a20419c99d66fb2823173d73f188ce601", size = 150073 },
+ { url = "https://files.pythonhosted.org/packages/e4/93/946a86ce20790e11312c87c75ba68d5f6ad2208cfb52b2d6a2c32840d922/charset_normalizer-3.4.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:fa88b843d6e211393a37219e6a1c1df99d35e8fd90446f1118f4216e307e48cd", size = 145732 },
+ { url = "https://files.pythonhosted.org/packages/cd/e5/131d2fb1b0dddafc37be4f3a2fa79aa4c037368be9423061dccadfd90091/charset_normalizer-3.4.1-cp313-cp313-win32.whl", hash = "sha256:eb8178fe3dba6450a3e024e95ac49ed3400e506fd4e9e5c32d30adda88cbd407", size = 95391 },
+ { url = "https://files.pythonhosted.org/packages/27/f2/4f9a69cc7712b9b5ad8fdb87039fd89abba997ad5cbe690d1835d40405b0/charset_normalizer-3.4.1-cp313-cp313-win_amd64.whl", hash = "sha256:b1ac5992a838106edb89654e0aebfc24f5848ae2547d22c2c3f66454daa11971", size = 102702 },
+ { url = "https://files.pythonhosted.org/packages/7f/c0/b913f8f02836ed9ab32ea643c6fe4d3325c3d8627cf6e78098671cafff86/charset_normalizer-3.4.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:b97e690a2118911e39b4042088092771b4ae3fc3aa86518f84b8cf6888dbdb41", size = 197867 },
+ { url = "https://files.pythonhosted.org/packages/0f/6c/2bee440303d705b6fb1e2ec789543edec83d32d258299b16eed28aad48e0/charset_normalizer-3.4.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:78baa6d91634dfb69ec52a463534bc0df05dbd546209b79a3880a34487f4b84f", size = 141385 },
+ { url = "https://files.pythonhosted.org/packages/3d/04/cb42585f07f6f9fd3219ffb6f37d5a39b4fd2db2355b23683060029c35f7/charset_normalizer-3.4.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1a2bc9f351a75ef49d664206d51f8e5ede9da246602dc2d2726837620ea034b2", size = 151367 },
+ { url = "https://files.pythonhosted.org/packages/54/54/2412a5b093acb17f0222de007cc129ec0e0df198b5ad2ce5699355269dfe/charset_normalizer-3.4.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:75832c08354f595c760a804588b9357d34ec00ba1c940c15e31e96d902093770", size = 143928 },
+ { url = "https://files.pythonhosted.org/packages/5a/6d/e2773862b043dcf8a221342954f375392bb2ce6487bcd9f2c1b34e1d6781/charset_normalizer-3.4.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0af291f4fe114be0280cdd29d533696a77b5b49cfde5467176ecab32353395c4", size = 146203 },
+ { url = "https://files.pythonhosted.org/packages/b9/f8/ca440ef60d8f8916022859885f231abb07ada3c347c03d63f283bec32ef5/charset_normalizer-3.4.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0167ddc8ab6508fe81860a57dd472b2ef4060e8d378f0cc555707126830f2537", size = 148082 },
+ { url = "https://files.pythonhosted.org/packages/04/d2/42fd330901aaa4b805a1097856c2edf5095e260a597f65def493f4b8c833/charset_normalizer-3.4.1-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:2a75d49014d118e4198bcee5ee0a6f25856b29b12dbf7cd012791f8a6cc5c496", size = 142053 },
+ { url = "https://files.pythonhosted.org/packages/9e/af/3a97a4fa3c53586f1910dadfc916e9c4f35eeada36de4108f5096cb7215f/charset_normalizer-3.4.1-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:363e2f92b0f0174b2f8238240a1a30142e3db7b957a5dd5689b0e75fb717cc78", size = 150625 },
+ { url = "https://files.pythonhosted.org/packages/26/ae/23d6041322a3556e4da139663d02fb1b3c59a23ab2e2b56432bd2ad63ded/charset_normalizer-3.4.1-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:ab36c8eb7e454e34e60eb55ca5d241a5d18b2c6244f6827a30e451c42410b5f7", size = 153549 },
+ { url = "https://files.pythonhosted.org/packages/94/22/b8f2081c6a77cb20d97e57e0b385b481887aa08019d2459dc2858ed64871/charset_normalizer-3.4.1-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:4c0907b1928a36d5a998d72d64d8eaa7244989f7aaaf947500d3a800c83a3fd6", size = 150945 },
+ { url = "https://files.pythonhosted.org/packages/c7/0b/c5ec5092747f801b8b093cdf5610e732b809d6cb11f4c51e35fc28d1d389/charset_normalizer-3.4.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:04432ad9479fa40ec0f387795ddad4437a2b50417c69fa275e212933519ff294", size = 146595 },
+ { url = "https://files.pythonhosted.org/packages/0c/5a/0b59704c38470df6768aa154cc87b1ac7c9bb687990a1559dc8765e8627e/charset_normalizer-3.4.1-cp39-cp39-win32.whl", hash = "sha256:3bed14e9c89dcb10e8f3a29f9ccac4955aebe93c71ae803af79265c9ca5644c5", size = 95453 },
+ { url = "https://files.pythonhosted.org/packages/85/2d/a9790237cb4d01a6d57afadc8573c8b73c609ade20b80f4cda30802009ee/charset_normalizer-3.4.1-cp39-cp39-win_amd64.whl", hash = "sha256:49402233c892a461407c512a19435d1ce275543138294f7ef013f0b63d5d3765", size = 102811 },
+ { url = "https://files.pythonhosted.org/packages/0e/f6/65ecc6878a89bb1c23a086ea335ad4bf21a588990c3f535a227b9eea9108/charset_normalizer-3.4.1-py3-none-any.whl", hash = "sha256:d98b1668f06378c6dbefec3b92299716b931cd4e6061f3c875a71ced1780ab85", size = 49767 },
+]
+
+[[package]]
+name = "click"
+version = "8.1.8"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "colorama", marker = "sys_platform == 'win32'" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/b9/2e/0090cbf739cee7d23781ad4b89a9894a41538e4fcf4c31dcdd705b78eb8b/click-8.1.8.tar.gz", hash = "sha256:ed53c9d8990d83c2a27deae68e4ee337473f6330c040a31d4225c9574d16096a", size = 226593 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/7e/d4/7ebdbd03970677812aac39c869717059dbb71a4cfc033ca6e5221787892c/click-8.1.8-py3-none-any.whl", hash = "sha256:63c132bbbed01578a06712a2d1f497bb62d9c1c0d329b7903a866228027263b2", size = 98188 },
+]
+
+[[package]]
+name = "colorama"
+version = "0.4.6"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/d8/53/6f443c9a4a8358a93a6792e2acffb9d9d5cb0a5cfd8802644b7b1c9a02e4/colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44", size = 27697 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6", size = 25335 },
+]
+
+[[package]]
+name = "comm"
+version = "0.2.2"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "traitlets" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/e9/a8/fb783cb0abe2b5fded9f55e5703015cdf1c9c85b3669087c538dd15a6a86/comm-0.2.2.tar.gz", hash = "sha256:3fd7a84065306e07bea1773df6eb8282de51ba82f77c72f9c85716ab11fe980e", size = 6210 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/e6/75/49e5bfe642f71f272236b5b2d2691cf915a7283cc0ceda56357b61daa538/comm-0.2.2-py3-none-any.whl", hash = "sha256:e6fb86cb70ff661ee8c9c14e7d36d6de3b4066f1441be4063df9c5009f0a64d3", size = 7180 },
+]
+
+[[package]]
+name = "coverage"
+version = "7.6.10"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/84/ba/ac14d281f80aab516275012e8875991bb06203957aa1e19950139238d658/coverage-7.6.10.tar.gz", hash = "sha256:7fb105327c8f8f0682e29843e2ff96af9dcbe5bab8eeb4b398c6a33a16d80a23", size = 803868 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/c5/12/2a2a923edf4ddabdffed7ad6da50d96a5c126dae7b80a33df7310e329a1e/coverage-7.6.10-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:5c912978f7fbf47ef99cec50c4401340436d200d41d714c7a4766f377c5b7b78", size = 207982 },
+ { url = "https://files.pythonhosted.org/packages/ca/49/6985dbca9c7be3f3cb62a2e6e492a0c88b65bf40579e16c71ae9c33c6b23/coverage-7.6.10-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a01ec4af7dfeb96ff0078ad9a48810bb0cc8abcb0115180c6013a6b26237626c", size = 208414 },
+ { url = "https://files.pythonhosted.org/packages/35/93/287e8f1d1ed2646f4e0b2605d14616c9a8a2697d0d1b453815eb5c6cebdb/coverage-7.6.10-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a3b204c11e2b2d883946fe1d97f89403aa1811df28ce0447439178cc7463448a", size = 236860 },
+ { url = "https://files.pythonhosted.org/packages/de/e1/cfdb5627a03567a10031acc629b75d45a4ca1616e54f7133ca1fa366050a/coverage-7.6.10-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:32ee6d8491fcfc82652a37109f69dee9a830e9379166cb73c16d8dc5c2915165", size = 234758 },
+ { url = "https://files.pythonhosted.org/packages/6d/85/fc0de2bcda3f97c2ee9fe8568f7d48f7279e91068958e5b2cc19e0e5f600/coverage-7.6.10-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:675cefc4c06e3b4c876b85bfb7c59c5e2218167bbd4da5075cbe3b5790a28988", size = 235920 },
+ { url = "https://files.pythonhosted.org/packages/79/73/ef4ea0105531506a6f4cf4ba571a214b14a884630b567ed65b3d9c1975e1/coverage-7.6.10-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:f4f620668dbc6f5e909a0946a877310fb3d57aea8198bde792aae369ee1c23b5", size = 234986 },
+ { url = "https://files.pythonhosted.org/packages/c6/4d/75afcfe4432e2ad0405c6f27adeb109ff8976c5e636af8604f94f29fa3fc/coverage-7.6.10-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:4eea95ef275de7abaef630c9b2c002ffbc01918b726a39f5a4353916ec72d2f3", size = 233446 },
+ { url = "https://files.pythonhosted.org/packages/86/5b/efee56a89c16171288cafff022e8af44f8f94075c2d8da563c3935212871/coverage-7.6.10-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:e2f0280519e42b0a17550072861e0bc8a80a0870de260f9796157d3fca2733c5", size = 234566 },
+ { url = "https://files.pythonhosted.org/packages/f2/db/67770cceb4a64d3198bf2aa49946f411b85ec6b0a9b489e61c8467a4253b/coverage-7.6.10-cp310-cp310-win32.whl", hash = "sha256:bc67deb76bc3717f22e765ab3e07ee9c7a5e26b9019ca19a3b063d9f4b874244", size = 210675 },
+ { url = "https://files.pythonhosted.org/packages/8d/27/e8bfc43f5345ec2c27bc8a1fa77cdc5ce9dcf954445e11f14bb70b889d14/coverage-7.6.10-cp310-cp310-win_amd64.whl", hash = "sha256:0f460286cb94036455e703c66988851d970fdfd8acc2a1122ab7f4f904e4029e", size = 211518 },
+ { url = "https://files.pythonhosted.org/packages/85/d2/5e175fcf6766cf7501a8541d81778fd2f52f4870100e791f5327fd23270b/coverage-7.6.10-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:ea3c8f04b3e4af80e17bab607c386a830ffc2fb88a5484e1df756478cf70d1d3", size = 208088 },
+ { url = "https://files.pythonhosted.org/packages/4b/6f/06db4dc8fca33c13b673986e20e466fd936235a6ec1f0045c3853ac1b593/coverage-7.6.10-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:507a20fc863cae1d5720797761b42d2d87a04b3e5aeb682ef3b7332e90598f43", size = 208536 },
+ { url = "https://files.pythonhosted.org/packages/0d/62/c6a0cf80318c1c1af376d52df444da3608eafc913b82c84a4600d8349472/coverage-7.6.10-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d37a84878285b903c0fe21ac8794c6dab58150e9359f1aaebbeddd6412d53132", size = 240474 },
+ { url = "https://files.pythonhosted.org/packages/a3/59/750adafc2e57786d2e8739a46b680d4fb0fbc2d57fbcb161290a9f1ecf23/coverage-7.6.10-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a534738b47b0de1995f85f582d983d94031dffb48ab86c95bdf88dc62212142f", size = 237880 },
+ { url = "https://files.pythonhosted.org/packages/2c/f8/ef009b3b98e9f7033c19deb40d629354aab1d8b2d7f9cfec284dbedf5096/coverage-7.6.10-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0d7a2bf79378d8fb8afaa994f91bfd8215134f8631d27eba3e0e2c13546ce994", size = 239750 },
+ { url = "https://files.pythonhosted.org/packages/a6/e2/6622f3b70f5f5b59f705e680dae6db64421af05a5d1e389afd24dae62e5b/coverage-7.6.10-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:6713ba4b4ebc330f3def51df1d5d38fad60b66720948112f114968feb52d3f99", size = 238642 },
+ { url = "https://files.pythonhosted.org/packages/2d/10/57ac3f191a3c95c67844099514ff44e6e19b2915cd1c22269fb27f9b17b6/coverage-7.6.10-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:ab32947f481f7e8c763fa2c92fd9f44eeb143e7610c4ca9ecd6a36adab4081bd", size = 237266 },
+ { url = "https://files.pythonhosted.org/packages/ee/2d/7016f4ad9d553cabcb7333ed78ff9d27248ec4eba8dd21fa488254dff894/coverage-7.6.10-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:7bbd8c8f1b115b892e34ba66a097b915d3871db7ce0e6b9901f462ff3a975377", size = 238045 },
+ { url = "https://files.pythonhosted.org/packages/a7/fe/45af5c82389a71e0cae4546413266d2195c3744849669b0bab4b5f2c75da/coverage-7.6.10-cp311-cp311-win32.whl", hash = "sha256:299e91b274c5c9cdb64cbdf1b3e4a8fe538a7a86acdd08fae52301b28ba297f8", size = 210647 },
+ { url = "https://files.pythonhosted.org/packages/db/11/3f8e803a43b79bc534c6a506674da9d614e990e37118b4506faf70d46ed6/coverage-7.6.10-cp311-cp311-win_amd64.whl", hash = "sha256:489a01f94aa581dbd961f306e37d75d4ba16104bbfa2b0edb21d29b73be83609", size = 211508 },
+ { url = "https://files.pythonhosted.org/packages/86/77/19d09ea06f92fdf0487499283b1b7af06bc422ea94534c8fe3a4cd023641/coverage-7.6.10-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:27c6e64726b307782fa5cbe531e7647aee385a29b2107cd87ba7c0105a5d3853", size = 208281 },
+ { url = "https://files.pythonhosted.org/packages/b6/67/5479b9f2f99fcfb49c0d5cf61912a5255ef80b6e80a3cddba39c38146cf4/coverage-7.6.10-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:c56e097019e72c373bae32d946ecf9858fda841e48d82df7e81c63ac25554078", size = 208514 },
+ { url = "https://files.pythonhosted.org/packages/15/d1/febf59030ce1c83b7331c3546d7317e5120c5966471727aa7ac157729c4b/coverage-7.6.10-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c7827a5bc7bdb197b9e066cdf650b2887597ad124dd99777332776f7b7c7d0d0", size = 241537 },
+ { url = "https://files.pythonhosted.org/packages/4b/7e/5ac4c90192130e7cf8b63153fe620c8bfd9068f89a6d9b5f26f1550f7a26/coverage-7.6.10-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:204a8238afe787323a8b47d8be4df89772d5c1e4651b9ffa808552bdf20e1d50", size = 238572 },
+ { url = "https://files.pythonhosted.org/packages/dc/03/0334a79b26ecf59958f2fe9dd1f5ab3e2f88db876f5071933de39af09647/coverage-7.6.10-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e67926f51821b8e9deb6426ff3164870976fe414d033ad90ea75e7ed0c2e5022", size = 240639 },
+ { url = "https://files.pythonhosted.org/packages/d7/45/8a707f23c202208d7b286d78ad6233f50dcf929319b664b6cc18a03c1aae/coverage-7.6.10-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:e78b270eadb5702938c3dbe9367f878249b5ef9a2fcc5360ac7bff694310d17b", size = 240072 },
+ { url = "https://files.pythonhosted.org/packages/66/02/603ce0ac2d02bc7b393279ef618940b4a0535b0868ee791140bda9ecfa40/coverage-7.6.10-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:714f942b9c15c3a7a5fe6876ce30af831c2ad4ce902410b7466b662358c852c0", size = 238386 },
+ { url = "https://files.pythonhosted.org/packages/04/62/4e6887e9be060f5d18f1dd58c2838b2d9646faf353232dec4e2d4b1c8644/coverage-7.6.10-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:abb02e2f5a3187b2ac4cd46b8ced85a0858230b577ccb2c62c81482ca7d18852", size = 240054 },
+ { url = "https://files.pythonhosted.org/packages/5c/74/83ae4151c170d8bd071924f212add22a0e62a7fe2b149edf016aeecad17c/coverage-7.6.10-cp312-cp312-win32.whl", hash = "sha256:55b201b97286cf61f5e76063f9e2a1d8d2972fc2fcfd2c1272530172fd28c359", size = 210904 },
+ { url = "https://files.pythonhosted.org/packages/c3/54/de0893186a221478f5880283119fc40483bc460b27c4c71d1b8bba3474b9/coverage-7.6.10-cp312-cp312-win_amd64.whl", hash = "sha256:e4ae5ac5e0d1e4edfc9b4b57b4cbecd5bc266a6915c500f358817a8496739247", size = 211692 },
+ { url = "https://files.pythonhosted.org/packages/25/6d/31883d78865529257bf847df5789e2ae80e99de8a460c3453dbfbe0db069/coverage-7.6.10-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:05fca8ba6a87aabdd2d30d0b6c838b50510b56cdcfc604d40760dae7153b73d9", size = 208308 },
+ { url = "https://files.pythonhosted.org/packages/70/22/3f2b129cc08de00c83b0ad6252e034320946abfc3e4235c009e57cfeee05/coverage-7.6.10-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:9e80eba8801c386f72e0712a0453431259c45c3249f0009aff537a517b52942b", size = 208565 },
+ { url = "https://files.pythonhosted.org/packages/97/0a/d89bc2d1cc61d3a8dfe9e9d75217b2be85f6c73ebf1b9e3c2f4e797f4531/coverage-7.6.10-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a372c89c939d57abe09e08c0578c1d212e7a678135d53aa16eec4430adc5e690", size = 241083 },
+ { url = "https://files.pythonhosted.org/packages/4c/81/6d64b88a00c7a7aaed3a657b8eaa0931f37a6395fcef61e53ff742b49c97/coverage-7.6.10-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ec22b5e7fe7a0fa8509181c4aac1db48f3dd4d3a566131b313d1efc102892c18", size = 238235 },
+ { url = "https://files.pythonhosted.org/packages/9a/0b/7797d4193f5adb4b837207ed87fecf5fc38f7cc612b369a8e8e12d9fa114/coverage-7.6.10-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:26bcf5c4df41cad1b19c84af71c22cbc9ea9a547fc973f1f2cc9a290002c8b3c", size = 240220 },
+ { url = "https://files.pythonhosted.org/packages/65/4d/6f83ca1bddcf8e51bf8ff71572f39a1c73c34cf50e752a952c34f24d0a60/coverage-7.6.10-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:4e4630c26b6084c9b3cb53b15bd488f30ceb50b73c35c5ad7871b869cb7365fd", size = 239847 },
+ { url = "https://files.pythonhosted.org/packages/30/9d/2470df6aa146aff4c65fee0f87f58d2164a67533c771c9cc12ffcdb865d5/coverage-7.6.10-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:2396e8116db77789f819d2bc8a7e200232b7a282c66e0ae2d2cd84581a89757e", size = 237922 },
+ { url = "https://files.pythonhosted.org/packages/08/dd/723fef5d901e6a89f2507094db66c091449c8ba03272861eaefa773ad95c/coverage-7.6.10-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:79109c70cc0882e4d2d002fe69a24aa504dec0cc17169b3c7f41a1d341a73694", size = 239783 },
+ { url = "https://files.pythonhosted.org/packages/3d/f7/64d3298b2baf261cb35466000628706ce20a82d42faf9b771af447cd2b76/coverage-7.6.10-cp313-cp313-win32.whl", hash = "sha256:9e1747bab246d6ff2c4f28b4d186b205adced9f7bd9dc362051cc37c4a0c7bd6", size = 210965 },
+ { url = "https://files.pythonhosted.org/packages/d5/58/ec43499a7fc681212fe7742fe90b2bc361cdb72e3181ace1604247a5b24d/coverage-7.6.10-cp313-cp313-win_amd64.whl", hash = "sha256:254f1a3b1eef5f7ed23ef265eaa89c65c8c5b6b257327c149db1ca9d4a35f25e", size = 211719 },
+ { url = "https://files.pythonhosted.org/packages/ab/c9/f2857a135bcff4330c1e90e7d03446b036b2363d4ad37eb5e3a47bbac8a6/coverage-7.6.10-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:2ccf240eb719789cedbb9fd1338055de2761088202a9a0b73032857e53f612fe", size = 209050 },
+ { url = "https://files.pythonhosted.org/packages/aa/b3/f840e5bd777d8433caa9e4a1eb20503495709f697341ac1a8ee6a3c906ad/coverage-7.6.10-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:0c807ca74d5a5e64427c8805de15b9ca140bba13572d6d74e262f46f50b13273", size = 209321 },
+ { url = "https://files.pythonhosted.org/packages/85/7d/125a5362180fcc1c03d91850fc020f3831d5cda09319522bcfa6b2b70be7/coverage-7.6.10-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2bcfa46d7709b5a7ffe089075799b902020b62e7ee56ebaed2f4bdac04c508d8", size = 252039 },
+ { url = "https://files.pythonhosted.org/packages/a9/9c/4358bf3c74baf1f9bddd2baf3756b54c07f2cfd2535f0a47f1e7757e54b3/coverage-7.6.10-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4e0de1e902669dccbf80b0415fb6b43d27edca2fbd48c74da378923b05316098", size = 247758 },
+ { url = "https://files.pythonhosted.org/packages/cf/c7/de3eb6fc5263b26fab5cda3de7a0f80e317597a4bad4781859f72885f300/coverage-7.6.10-cp313-cp313t-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3f7b444c42bbc533aaae6b5a2166fd1a797cdb5eb58ee51a92bee1eb94a1e1cb", size = 250119 },
+ { url = "https://files.pythonhosted.org/packages/3e/e6/43de91f8ba2ec9140c6a4af1102141712949903dc732cf739167cfa7a3bc/coverage-7.6.10-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:b330368cb99ef72fcd2dc3ed260adf67b31499584dc8a20225e85bfe6f6cfed0", size = 249597 },
+ { url = "https://files.pythonhosted.org/packages/08/40/61158b5499aa2adf9e37bc6d0117e8f6788625b283d51e7e0c53cf340530/coverage-7.6.10-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:9a7cfb50515f87f7ed30bc882f68812fd98bc2852957df69f3003d22a2aa0abf", size = 247473 },
+ { url = "https://files.pythonhosted.org/packages/50/69/b3f2416725621e9f112e74e8470793d5b5995f146f596f133678a633b77e/coverage-7.6.10-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:6f93531882a5f68c28090f901b1d135de61b56331bba82028489bc51bdd818d2", size = 248737 },
+ { url = "https://files.pythonhosted.org/packages/3c/6e/fe899fb937657db6df31cc3e61c6968cb56d36d7326361847440a430152e/coverage-7.6.10-cp313-cp313t-win32.whl", hash = "sha256:89d76815a26197c858f53c7f6a656686ec392b25991f9e409bcef020cd532312", size = 211611 },
+ { url = "https://files.pythonhosted.org/packages/1c/55/52f5e66142a9d7bc93a15192eba7a78513d2abf6b3558d77b4ca32f5f424/coverage-7.6.10-cp313-cp313t-win_amd64.whl", hash = "sha256:54a5f0f43950a36312155dae55c505a76cd7f2b12d26abeebbe7a0b36dbc868d", size = 212781 },
+ { url = "https://files.pythonhosted.org/packages/40/41/473617aadf9a1c15bc2d56be65d90d7c29bfa50a957a67ef96462f7ebf8e/coverage-7.6.10-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:656c82b8a0ead8bba147de9a89bda95064874c91a3ed43a00e687f23cc19d53a", size = 207978 },
+ { url = "https://files.pythonhosted.org/packages/10/f6/480586607768b39a30e6910a3c4522139094ac0f1677028e1f4823688957/coverage-7.6.10-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:ccc2b70a7ed475c68ceb548bf69cec1e27305c1c2606a5eb7c3afff56a1b3b27", size = 208415 },
+ { url = "https://files.pythonhosted.org/packages/f1/af/439bb760f817deff6f4d38fe7da08d9dd7874a560241f1945bc3b4446550/coverage-7.6.10-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a5e37dc41d57ceba70956fa2fc5b63c26dba863c946ace9705f8eca99daecdc4", size = 236452 },
+ { url = "https://files.pythonhosted.org/packages/d0/13/481f4ceffcabe29ee2332e60efb52e4694f54a402f3ada2bcec10bb32e43/coverage-7.6.10-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0aa9692b4fdd83a4647eeb7db46410ea1322b5ed94cd1715ef09d1d5922ba87f", size = 234374 },
+ { url = "https://files.pythonhosted.org/packages/c5/59/4607ea9d6b1b73e905c7656da08d0b00cdf6e59f2293ec259e8914160025/coverage-7.6.10-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aa744da1820678b475e4ba3dfd994c321c5b13381d1041fe9c608620e6676e25", size = 235505 },
+ { url = "https://files.pythonhosted.org/packages/85/60/d66365723b9b7f29464b11d024248ed3523ce5aab958e4ad8c43f3f4148b/coverage-7.6.10-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:c0b1818063dc9e9d838c09e3a473c1422f517889436dd980f5d721899e66f315", size = 234616 },
+ { url = "https://files.pythonhosted.org/packages/74/f8/2cf7a38e7d81b266f47dfcf137fecd8fa66c7bdbd4228d611628d8ca3437/coverage-7.6.10-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:59af35558ba08b758aec4d56182b222976330ef8d2feacbb93964f576a7e7a90", size = 233099 },
+ { url = "https://files.pythonhosted.org/packages/50/2b/bff6c1c6b63c4396ea7ecdbf8db1788b46046c681b8fcc6ec77db9f4ea49/coverage-7.6.10-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:7ed2f37cfce1ce101e6dffdfd1c99e729dd2ffc291d02d3e2d0af8b53d13840d", size = 234089 },
+ { url = "https://files.pythonhosted.org/packages/bf/b5/baace1c754d546a67779358341aa8d2f7118baf58cac235db457e1001d1b/coverage-7.6.10-cp39-cp39-win32.whl", hash = "sha256:4bcc276261505d82f0ad426870c3b12cb177752834a633e737ec5ee79bbdff18", size = 210701 },
+ { url = "https://files.pythonhosted.org/packages/b1/bf/9e1e95b8b20817398ecc5a1e8d3e05ff404e1b9fb2185cd71561698fe2a2/coverage-7.6.10-cp39-cp39-win_amd64.whl", hash = "sha256:457574f4599d2b00f7f637a0700a6422243b3565509457b2dbd3f50703e11f59", size = 211482 },
+ { url = "https://files.pythonhosted.org/packages/a1/70/de81bfec9ed38a64fc44a77c7665e20ca507fc3265597c28b0d989e4082e/coverage-7.6.10-pp39.pp310-none-any.whl", hash = "sha256:fd34e7b3405f0cc7ab03d54a334c17a9e802897580d964bd8c2001f4b9fd488f", size = 200223 },
+]
+
+[package.optional-dependencies]
+toml = [
+ { name = "tomli", marker = "python_full_version <= '3.11'" },
+]
+
+[[package]]
+name = "cryptography"
+version = "44.0.0"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "cffi", marker = "platform_python_implementation != 'PyPy'" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/91/4c/45dfa6829acffa344e3967d6006ee4ae8be57af746ae2eba1c431949b32c/cryptography-44.0.0.tar.gz", hash = "sha256:cd4e834f340b4293430701e772ec543b0fbe6c2dea510a5286fe0acabe153a02", size = 710657 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/7e/5b/3759e30a103144e29632e7cb72aec28cedc79e514b2ea8896bb17163c19b/cryptography-44.0.0-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b15492a11f9e1b62ba9d73c210e2416724633167de94607ec6069ef724fad092", size = 3922710 },
+ { url = "https://files.pythonhosted.org/packages/5f/58/3b14bf39f1a0cfd679e753e8647ada56cddbf5acebffe7db90e184c76168/cryptography-44.0.0-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:831c3c4d0774e488fdc83a1923b49b9957d33287de923d58ebd3cec47a0ae43f", size = 4137546 },
+ { url = "https://files.pythonhosted.org/packages/98/65/13d9e76ca19b0ba5603d71ac8424b5694415b348e719db277b5edc985ff5/cryptography-44.0.0-cp37-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:761817a3377ef15ac23cd7834715081791d4ec77f9297ee694ca1ee9c2c7e5eb", size = 3915420 },
+ { url = "https://files.pythonhosted.org/packages/b1/07/40fe09ce96b91fc9276a9ad272832ead0fddedcba87f1190372af8e3039c/cryptography-44.0.0-cp37-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:3c672a53c0fb4725a29c303be906d3c1fa99c32f58abe008a82705f9ee96f40b", size = 4154498 },
+ { url = "https://files.pythonhosted.org/packages/75/ea/af65619c800ec0a7e4034207aec543acdf248d9bffba0533342d1bd435e1/cryptography-44.0.0-cp37-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:4ac4c9f37eba52cb6fbeaf5b59c152ea976726b865bd4cf87883a7e7006cc543", size = 3932569 },
+ { url = "https://files.pythonhosted.org/packages/c7/af/d1deb0c04d59612e3d5e54203159e284d3e7a6921e565bb0eeb6269bdd8a/cryptography-44.0.0-cp37-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:ed3534eb1090483c96178fcb0f8893719d96d5274dfde98aa6add34614e97c8e", size = 4016721 },
+ { url = "https://files.pythonhosted.org/packages/bd/69/7ca326c55698d0688db867795134bdfac87136b80ef373aaa42b225d6dd5/cryptography-44.0.0-cp37-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:f3f6fdfa89ee2d9d496e2c087cebef9d4fcbb0ad63c40e821b39f74bf48d9c5e", size = 4240915 },
+ { url = "https://files.pythonhosted.org/packages/1a/07/5f165b6c65696ef75601b781a280fc3b33f1e0cd6aa5a92d9fb96c410e97/cryptography-44.0.0-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1923cb251c04be85eec9fda837661c67c1049063305d6be5721643c22dd4e2b7", size = 3922613 },
+ { url = "https://files.pythonhosted.org/packages/28/34/6b3ac1d80fc174812486561cf25194338151780f27e438526f9c64e16869/cryptography-44.0.0-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:404fdc66ee5f83a1388be54300ae978b2efd538018de18556dde92575e05defc", size = 4137925 },
+ { url = "https://files.pythonhosted.org/packages/d0/c7/c656eb08fd22255d21bc3129625ed9cd5ee305f33752ef2278711b3fa98b/cryptography-44.0.0-cp39-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:c5eb858beed7835e5ad1faba59e865109f3e52b3783b9ac21e7e47dc5554e289", size = 3915417 },
+ { url = "https://files.pythonhosted.org/packages/ef/82/72403624f197af0db6bac4e58153bc9ac0e6020e57234115db9596eee85d/cryptography-44.0.0-cp39-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:f53c2c87e0fb4b0c00fa9571082a057e37690a8f12233306161c8f4b819960b7", size = 4155160 },
+ { url = "https://files.pythonhosted.org/packages/a2/cd/2f3c440913d4329ade49b146d74f2e9766422e1732613f57097fea61f344/cryptography-44.0.0-cp39-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:9e6fc8a08e116fb7c7dd1f040074c9d7b51d74a8ea40d4df2fc7aa08b76b9e6c", size = 3932331 },
+ { url = "https://files.pythonhosted.org/packages/7f/df/8be88797f0a1cca6e255189a57bb49237402b1880d6e8721690c5603ac23/cryptography-44.0.0-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:d2436114e46b36d00f8b72ff57e598978b37399d2786fd39793c36c6d5cb1c64", size = 4017372 },
+ { url = "https://files.pythonhosted.org/packages/af/36/5ccc376f025a834e72b8e52e18746b927f34e4520487098e283a719c205e/cryptography-44.0.0-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:a01956ddfa0a6790d594f5b34fc1bfa6098aca434696a03cfdbe469b8ed79285", size = 4239657 },
+ { url = "https://files.pythonhosted.org/packages/1a/aa/ba8a7467c206cb7b62f09b4168da541b5109838627f582843bbbe0235e8e/cryptography-44.0.0-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:f677e1268c4e23420c3acade68fac427fffcb8d19d7df95ed7ad17cdef8404f4", size = 3850615 },
+ { url = "https://files.pythonhosted.org/packages/89/fa/b160e10a64cc395d090105be14f399b94e617c879efd401188ce0fea39ee/cryptography-44.0.0-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:f5e7cb1e5e56ca0933b4873c0220a78b773b24d40d186b6738080b73d3d0a756", size = 4081622 },
+ { url = "https://files.pythonhosted.org/packages/47/8f/20ff0656bb0cf7af26ec1d01f780c5cfbaa7666736063378c5f48558b515/cryptography-44.0.0-pp310-pypy310_pp73-manylinux_2_34_aarch64.whl", hash = "sha256:8b3e6eae66cf54701ee7d9c83c30ac0a1e3fa17be486033000f2a73a12ab507c", size = 3867546 },
+ { url = "https://files.pythonhosted.org/packages/38/d9/28edf32ee2fcdca587146bcde90102a7319b2f2c690edfa627e46d586050/cryptography-44.0.0-pp310-pypy310_pp73-manylinux_2_34_x86_64.whl", hash = "sha256:be4ce505894d15d5c5037167ffb7f0ae90b7be6f2a98f9a5c3442395501c32fa", size = 4090937 },
+]
+
+[[package]]
+name = "debugpy"
+version = "1.8.12"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/68/25/c74e337134edf55c4dfc9af579eccb45af2393c40960e2795a94351e8140/debugpy-1.8.12.tar.gz", hash = "sha256:646530b04f45c830ceae8e491ca1c9320a2d2f0efea3141487c82130aba70dce", size = 1641122 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/56/19/dd58334c0a1ec07babf80bf29fb8daf1a7ca4c1a3bbe61548e40616ac087/debugpy-1.8.12-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:a2ba7ffe58efeae5b8fad1165357edfe01464f9aef25e814e891ec690e7dd82a", size = 2076091 },
+ { url = "https://files.pythonhosted.org/packages/4c/37/bde1737da15f9617d11ab7b8d5267165f1b7dae116b2585a6643e89e1fa2/debugpy-1.8.12-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cbbd4149c4fc5e7d508ece083e78c17442ee13b0e69bfa6bd63003e486770f45", size = 3560717 },
+ { url = "https://files.pythonhosted.org/packages/d9/ca/bc67f5a36a7de072908bc9e1156c0f0b272a9a2224cf21540ab1ffd71a1f/debugpy-1.8.12-cp310-cp310-win32.whl", hash = "sha256:b202f591204023b3ce62ff9a47baa555dc00bb092219abf5caf0e3718ac20e7c", size = 5180672 },
+ { url = "https://files.pythonhosted.org/packages/c1/b9/e899c0a80dfa674dbc992f36f2b1453cd1ee879143cdb455bc04fce999da/debugpy-1.8.12-cp310-cp310-win_amd64.whl", hash = "sha256:9649eced17a98ce816756ce50433b2dd85dfa7bc92ceb60579d68c053f98dff9", size = 5212702 },
+ { url = "https://files.pythonhosted.org/packages/af/9f/5b8af282253615296264d4ef62d14a8686f0dcdebb31a669374e22fff0a4/debugpy-1.8.12-cp311-cp311-macosx_14_0_universal2.whl", hash = "sha256:36f4829839ef0afdfdd208bb54f4c3d0eea86106d719811681a8627ae2e53dd5", size = 2174643 },
+ { url = "https://files.pythonhosted.org/packages/ef/31/f9274dcd3b0f9f7d1e60373c3fa4696a585c55acb30729d313bb9d3bcbd1/debugpy-1.8.12-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a28ed481d530e3138553be60991d2d61103ce6da254e51547b79549675f539b7", size = 3133457 },
+ { url = "https://files.pythonhosted.org/packages/ab/ca/6ee59e9892e424477e0c76e3798046f1fd1288040b927319c7a7b0baa484/debugpy-1.8.12-cp311-cp311-win32.whl", hash = "sha256:4ad9a94d8f5c9b954e0e3b137cc64ef3f579d0df3c3698fe9c3734ee397e4abb", size = 5106220 },
+ { url = "https://files.pythonhosted.org/packages/d5/1a/8ab508ab05ede8a4eae3b139bbc06ea3ca6234f9e8c02713a044f253be5e/debugpy-1.8.12-cp311-cp311-win_amd64.whl", hash = "sha256:4703575b78dd697b294f8c65588dc86874ed787b7348c65da70cfc885efdf1e1", size = 5130481 },
+ { url = "https://files.pythonhosted.org/packages/ba/e6/0f876ecfe5831ebe4762b19214364753c8bc2b357d28c5d739a1e88325c7/debugpy-1.8.12-cp312-cp312-macosx_14_0_universal2.whl", hash = "sha256:7e94b643b19e8feb5215fa508aee531387494bf668b2eca27fa769ea11d9f498", size = 2500846 },
+ { url = "https://files.pythonhosted.org/packages/19/64/33f41653a701f3cd2cbff8b41ebaad59885b3428b5afd0d93d16012ecf17/debugpy-1.8.12-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:086b32e233e89a2740c1615c2f775c34ae951508b28b308681dbbb87bba97d06", size = 4222181 },
+ { url = "https://files.pythonhosted.org/packages/32/a6/02646cfe50bfacc9b71321c47dc19a46e35f4e0aceea227b6d205e900e34/debugpy-1.8.12-cp312-cp312-win32.whl", hash = "sha256:2ae5df899732a6051b49ea2632a9ea67f929604fd2b036613a9f12bc3163b92d", size = 5227017 },
+ { url = "https://files.pythonhosted.org/packages/da/a6/10056431b5c47103474312cf4a2ec1001f73e0b63b1216706d5fef2531eb/debugpy-1.8.12-cp312-cp312-win_amd64.whl", hash = "sha256:39dfbb6fa09f12fae32639e3286112fc35ae976114f1f3d37375f3130a820969", size = 5267555 },
+ { url = "https://files.pythonhosted.org/packages/cf/4d/7c3896619a8791effd5d8c31f0834471fc8f8fb3047ec4f5fc69dd1393dd/debugpy-1.8.12-cp313-cp313-macosx_14_0_universal2.whl", hash = "sha256:696d8ae4dff4cbd06bf6b10d671e088b66669f110c7c4e18a44c43cf75ce966f", size = 2485246 },
+ { url = "https://files.pythonhosted.org/packages/99/46/bc6dcfd7eb8cc969a5716d858e32485eb40c72c6a8dc88d1e3a4d5e95813/debugpy-1.8.12-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:898fba72b81a654e74412a67c7e0a81e89723cfe2a3ea6fcd3feaa3395138ca9", size = 4218616 },
+ { url = "https://files.pythonhosted.org/packages/03/dd/d7fcdf0381a9b8094da1f6a1c9f19fed493a4f8576a2682349b3a8b20ec7/debugpy-1.8.12-cp313-cp313-win32.whl", hash = "sha256:22a11c493c70413a01ed03f01c3c3a2fc4478fc6ee186e340487b2edcd6f4180", size = 5226540 },
+ { url = "https://files.pythonhosted.org/packages/25/bd/ecb98f5b5fc7ea0bfbb3c355bc1dd57c198a28780beadd1e19915bf7b4d9/debugpy-1.8.12-cp313-cp313-win_amd64.whl", hash = "sha256:fdb3c6d342825ea10b90e43d7f20f01535a72b3a1997850c0c3cefa5c27a4a2c", size = 5267134 },
+ { url = "https://files.pythonhosted.org/packages/89/37/a3333c5b69c086465ea3c073424ef2775e52a6c17276f642f64209c4a082/debugpy-1.8.12-cp39-cp39-macosx_14_0_x86_64.whl", hash = "sha256:b5c6c967d02fee30e157ab5227706f965d5c37679c687b1e7bbc5d9e7128bd41", size = 2077275 },
+ { url = "https://files.pythonhosted.org/packages/50/1d/99f6a0a78b4b513ff2b0d0e44c1e705f7ee34e3aba0e8add617d339d97dc/debugpy-1.8.12-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:88a77f422f31f170c4b7e9ca58eae2a6c8e04da54121900651dfa8e66c29901a", size = 3555956 },
+ { url = "https://files.pythonhosted.org/packages/b8/86/c624665aaa807d065da2016b05e9f2fb4fa56872d67a5fbd7751e77f7f88/debugpy-1.8.12-cp39-cp39-win32.whl", hash = "sha256:a4042edef80364239f5b7b5764e55fd3ffd40c32cf6753da9bda4ff0ac466018", size = 5181535 },
+ { url = "https://files.pythonhosted.org/packages/72/c7/d59a0f845ce1677b5c2bb170f08cc1cc3531625a5fdce9c67bd31116540a/debugpy-1.8.12-cp39-cp39-win_amd64.whl", hash = "sha256:f30b03b0f27608a0b26c75f0bb8a880c752c0e0b01090551b9d87c7d783e2069", size = 5213601 },
+ { url = "https://files.pythonhosted.org/packages/38/c4/5120ad36405c3008f451f94b8f92ef1805b1e516f6ff870f331ccb3c4cc0/debugpy-1.8.12-py2.py3-none-any.whl", hash = "sha256:274b6a2040349b5c9864e475284bce5bb062e63dce368a394b8cc865ae3b00c6", size = 5229490 },
+]
+
+[[package]]
+name = "decorator"
+version = "5.1.1"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/66/0c/8d907af351aa16b42caae42f9d6aa37b900c67308052d10fdce809f8d952/decorator-5.1.1.tar.gz", hash = "sha256:637996211036b6385ef91435e4fae22989472f9d571faba8927ba8253acbc330", size = 35016 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/d5/50/83c593b07763e1161326b3b8c6686f0f4b0f24d5526546bee538c89837d6/decorator-5.1.1-py3-none-any.whl", hash = "sha256:b8c3f85900b9dc423225913c5aace94729fe1fa9763b38939a95226f02d37186", size = 9073 },
+]
+
+[[package]]
+name = "distlib"
+version = "0.3.9"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/0d/dd/1bec4c5ddb504ca60fc29472f3d27e8d4da1257a854e1d96742f15c1d02d/distlib-0.3.9.tar.gz", hash = "sha256:a60f20dea646b8a33f3e7772f74dc0b2d0772d2837ee1342a00645c81edf9403", size = 613923 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/91/a1/cf2472db20f7ce4a6be1253a81cfdf85ad9c7885ffbed7047fb72c24cf87/distlib-0.3.9-py2.py3-none-any.whl", hash = "sha256:47f8c22fd27c27e25a65601af709b38e4f0a45ea4fc2e710f65755fa8caaaf87", size = 468973 },
+]
+
+[[package]]
+name = "docutils"
+version = "0.21.2"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/ae/ed/aefcc8cd0ba62a0560c3c18c33925362d46c6075480bfa4df87b28e169a9/docutils-0.21.2.tar.gz", hash = "sha256:3a6b18732edf182daa3cd12775bbb338cf5691468f91eeeb109deff6ebfa986f", size = 2204444 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/8f/d7/9322c609343d929e75e7e5e6255e614fcc67572cfd083959cdef3b7aad79/docutils-0.21.2-py3-none-any.whl", hash = "sha256:dafca5b9e384f0e419294eb4d2ff9fa826435bf15f15b7bd45723e8ad76811b2", size = 587408 },
+]
+
+[[package]]
+name = "duckdb"
+version = "1.1.3"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/a0/d7/ec014b351b6bb026d5f473b1d0ec6bd6ba40786b9abbf530b4c9041d9895/duckdb-1.1.3.tar.gz", hash = "sha256:68c3a46ab08836fe041d15dcbf838f74a990d551db47cb24ab1c4576fc19351c", size = 12240672 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/de/7e/aef0fa22a80939edb04f66152a1fd5ce7257931576be192a8068e74f0892/duckdb-1.1.3-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:1c0226dc43e2ee4cc3a5a4672fddb2d76fd2cf2694443f395c02dd1bea0b7fce", size = 15469781 },
+ { url = "https://files.pythonhosted.org/packages/38/22/df548714ddd915929ebbba9699e8614655ed93cd367f5849f6dbd1b3e160/duckdb-1.1.3-cp310-cp310-macosx_12_0_universal2.whl", hash = "sha256:7c71169fa804c0b65e49afe423ddc2dc83e198640e3b041028da8110f7cd16f7", size = 32313005 },
+ { url = "https://files.pythonhosted.org/packages/9f/38/8de640857f4c55df870faf025835e09c69222d365dc773507e934cee3376/duckdb-1.1.3-cp310-cp310-macosx_12_0_x86_64.whl", hash = "sha256:872d38b65b66e3219d2400c732585c5b4d11b13d7a36cd97908d7981526e9898", size = 16931481 },
+ { url = "https://files.pythonhosted.org/packages/41/9b/87fff1341a9f57ab75284d79f902fee8cd6ef3a9135af4c723c90384d307/duckdb-1.1.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:25fb02629418c0d4d94a2bc1776edaa33f6f6ccaa00bd84eb96ecb97ae4b50e9", size = 18491670 },
+ { url = "https://files.pythonhosted.org/packages/3e/ee/8f74ccecbafd14e257c634f0f2cdebbc35634d9d74f04bb7ad8a0e142bf8/duckdb-1.1.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9e3f5cd604e7c39527e6060f430769b72234345baaa0987f9500988b2814f5e4", size = 20144774 },
+ { url = "https://files.pythonhosted.org/packages/36/7b/edffb833b8569a7fc1799ceb4392911e0082f18a6076225441e954a95853/duckdb-1.1.3-cp310-cp310-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:08935700e49c187fe0e9b2b86b5aad8a2ccd661069053e38bfaed3b9ff795efd", size = 18287084 },
+ { url = "https://files.pythonhosted.org/packages/a9/ab/6367e8c98b3331260bb4389c6b80deef96614c1e21edcdba23a882e45ab0/duckdb-1.1.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:f9b47036945e1db32d70e414a10b1593aec641bd4c5e2056873d971cc21e978b", size = 21614877 },
+ { url = "https://files.pythonhosted.org/packages/03/d8/89b1c5f1dbd16342640742f6f6d3f1c827d1a1b966d674774ddfe6a385e2/duckdb-1.1.3-cp310-cp310-win_amd64.whl", hash = "sha256:35c420f58abc79a68a286a20fd6265636175fadeca1ce964fc8ef159f3acc289", size = 10954044 },
+ { url = "https://files.pythonhosted.org/packages/57/d0/96127582230183dc36f1209d5e8e67f54b3459b3b9794603305d816f350a/duckdb-1.1.3-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:4f0e2e5a6f5a53b79aee20856c027046fba1d73ada6178ed8467f53c3877d5e0", size = 15469495 },
+ { url = "https://files.pythonhosted.org/packages/70/07/b78b435f8fe85c23ee2d49a01dc9599bb4a272c40f2a6bf67ff75958bdad/duckdb-1.1.3-cp311-cp311-macosx_12_0_universal2.whl", hash = "sha256:911d58c22645bfca4a5a049ff53a0afd1537bc18fedb13bc440b2e5af3c46148", size = 32318595 },
+ { url = "https://files.pythonhosted.org/packages/6c/d8/253b3483fc554daf72503ba0f112404f75be6bbd7ca7047e804873cbb182/duckdb-1.1.3-cp311-cp311-macosx_12_0_x86_64.whl", hash = "sha256:c443d3d502335e69fc1e35295fcfd1108f72cb984af54c536adfd7875e79cee5", size = 16934057 },
+ { url = "https://files.pythonhosted.org/packages/f8/11/908a8fb73cef8304d3f4eab7f27cc489f6fd675f921d382c83c55253be86/duckdb-1.1.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0a55169d2d2e2e88077d91d4875104b58de45eff6a17a59c7dc41562c73df4be", size = 18498214 },
+ { url = "https://files.pythonhosted.org/packages/bf/56/f627b6fcd4aa34015a15449d852ccb78d7cc6eda654aa20c1d378e99fa76/duckdb-1.1.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9d0767ada9f06faa5afcf63eb7ba1befaccfbcfdac5ff86f0168c673dd1f47aa", size = 20149376 },
+ { url = "https://files.pythonhosted.org/packages/b5/1d/c318dada688119b9ca975d431f9b38bde8dda41b6d18cc06e0dc52123788/duckdb-1.1.3-cp311-cp311-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:51c6d79e05b4a0933672b1cacd6338f882158f45ef9903aef350c4427d9fc898", size = 18293289 },
+ { url = "https://files.pythonhosted.org/packages/37/8e/fd346444b270ffe52e06c1af1243eaae30ab651c1d59f51711e3502fd060/duckdb-1.1.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:183ac743f21c6a4d6adfd02b69013d5fd78e5e2cd2b4db023bc8a95457d4bc5d", size = 21622129 },
+ { url = "https://files.pythonhosted.org/packages/18/aa/804c1cf5077b6f17d752b23637d9ef53eaad77ea73ee43d4c12bff480e36/duckdb-1.1.3-cp311-cp311-win_amd64.whl", hash = "sha256:a30dd599b8090ea6eafdfb5a9f1b872d78bac318b6914ada2d35c7974d643640", size = 10954756 },
+ { url = "https://files.pythonhosted.org/packages/9b/ff/7ee500f4cff0d2a581c1afdf2c12f70ee3bf1a61041fea4d88934a35a7a3/duckdb-1.1.3-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:a433ae9e72c5f397c44abdaa3c781d94f94f4065bcbf99ecd39433058c64cb38", size = 15482881 },
+ { url = "https://files.pythonhosted.org/packages/28/16/dda10da6bde54562c3cb0002ca3b7678e3108fa73ac9b7509674a02c5249/duckdb-1.1.3-cp312-cp312-macosx_12_0_universal2.whl", hash = "sha256:d08308e0a46c748d9c30f1d67ee1143e9c5ea3fbcccc27a47e115b19e7e78aa9", size = 32349440 },
+ { url = "https://files.pythonhosted.org/packages/2e/c2/06f7f7a51a1843c9384e1637abb6bbebc29367710ffccc7e7e52d72b3dd9/duckdb-1.1.3-cp312-cp312-macosx_12_0_x86_64.whl", hash = "sha256:5d57776539211e79b11e94f2f6d63de77885f23f14982e0fac066f2885fcf3ff", size = 16953473 },
+ { url = "https://files.pythonhosted.org/packages/1a/84/9991221ef7dde79d85231f20646e1b12d645490cd8be055589276f62847e/duckdb-1.1.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e59087dbbb63705f2483544e01cccf07d5b35afa58be8931b224f3221361d537", size = 18491915 },
+ { url = "https://files.pythonhosted.org/packages/aa/76/330fe16f12b7ddda0c664ba9869f3afbc8773dbe17ae750121d407dc0f37/duckdb-1.1.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4ebf5f60ddbd65c13e77cddb85fe4af671d31b851f125a4d002a313696af43f1", size = 20150288 },
+ { url = "https://files.pythonhosted.org/packages/c4/88/e4b08b7a5d08c0f65f6c7a6594de64431ce7df38d7258511417ba7989ad3/duckdb-1.1.3-cp312-cp312-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e4ef7ba97a65bd39d66f2a7080e6fb60e7c3e41d4c1e19245f90f53b98e3ac32", size = 18296560 },
+ { url = "https://files.pythonhosted.org/packages/1a/32/011e6e3ce14375a1ba01a588c119ad82be757f847c6b60207e0762d9ec3a/duckdb-1.1.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:f58db1b65593ff796c8ea6e63e2e144c944dd3d51c8d8e40dffa7f41693d35d3", size = 21635270 },
+ { url = "https://files.pythonhosted.org/packages/f2/eb/58d4e0eccdc7b3523c062d008ad9eef28edccf88591d1a78659c809fe6e8/duckdb-1.1.3-cp312-cp312-win_amd64.whl", hash = "sha256:e86006958e84c5c02f08f9b96f4bc26990514eab329b1b4f71049b3727ce5989", size = 10955715 },
+ { url = "https://files.pythonhosted.org/packages/81/d1/2462492531d4715b2ede272a26519b37f21cf3f8c85b3eb88da5b7be81d8/duckdb-1.1.3-cp313-cp313-macosx_12_0_arm64.whl", hash = "sha256:0897f83c09356206ce462f62157ce064961a5348e31ccb2a557a7531d814e70e", size = 15483282 },
+ { url = "https://files.pythonhosted.org/packages/af/a5/ec595aa223b911a62f24393908a8eaf8e0ed1c7c07eca5008f22aab070bc/duckdb-1.1.3-cp313-cp313-macosx_12_0_universal2.whl", hash = "sha256:cddc6c1a3b91dcc5f32493231b3ba98f51e6d3a44fe02839556db2b928087378", size = 32350342 },
+ { url = "https://files.pythonhosted.org/packages/08/27/e35116ab1ada5e54e52424e52d16ee9ae82db129025294e19c1d48a8b2b1/duckdb-1.1.3-cp313-cp313-macosx_12_0_x86_64.whl", hash = "sha256:1d9ab6143e73bcf17d62566e368c23f28aa544feddfd2d8eb50ef21034286f24", size = 16953863 },
+ { url = "https://files.pythonhosted.org/packages/0d/ac/f2db3969a56cd96a3ba78b0fd161939322fb134bd07c98ecc7a7015d3efa/duckdb-1.1.3-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2f073d15d11a328f2e6d5964a704517e818e930800b7f3fa83adea47f23720d3", size = 18494301 },
+ { url = "https://files.pythonhosted.org/packages/cf/66/d0be7c9518b1b92185018bacd851f977a101c9818686f667bbf884abcfbc/duckdb-1.1.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d5724fd8a49e24d730be34846b814b98ba7c304ca904fbdc98b47fa95c0b0cee", size = 20150992 },
+ { url = "https://files.pythonhosted.org/packages/47/ae/c2df66e3716705f48775e692a1b8accbf3dc6e2c27a0ae307fb4b063e115/duckdb-1.1.3-cp313-cp313-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:51e7dbd968b393343b226ab3f3a7b5a68dee6d3fe59be9d802383bf916775cb8", size = 18297818 },
+ { url = "https://files.pythonhosted.org/packages/8e/7e/10310b754b7ec3349c411a0a88ecbf327c49b5714e3d35200e69c13fb093/duckdb-1.1.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:00cca22df96aa3473fe4584f84888e2cf1c516e8c2dd837210daec44eadba586", size = 21635169 },
+ { url = "https://files.pythonhosted.org/packages/83/be/46c0b89c9d4e1ba90af9bc184e88672c04d420d41342e4dc359c78d05981/duckdb-1.1.3-cp313-cp313-win_amd64.whl", hash = "sha256:77f26884c7b807c7edd07f95cf0b00e6d47f0de4a534ac1706a58f8bc70d0d31", size = 10955826 },
+ { url = "https://files.pythonhosted.org/packages/e5/c4/8a0f629aadfa8e09574e70ceb2d4fa2e81dc36b67d353806e14474983403/duckdb-1.1.3-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:09c68522c30fc38fc972b8a75e9201616b96ae6da3444585f14cf0d116008c95", size = 15470008 },
+ { url = "https://files.pythonhosted.org/packages/be/0c/9f85e133c2b84f87c70fc29cf89289f65602494f15304b392d82cb76aec4/duckdb-1.1.3-cp39-cp39-macosx_12_0_universal2.whl", hash = "sha256:8ee97ec337794c162c0638dda3b4a30a483d0587deda22d45e1909036ff0b739", size = 32312989 },
+ { url = "https://files.pythonhosted.org/packages/1a/ff/6abd85726dcb4df11c405f80038c0959df3a08d1c4dd6f36c046c8587e10/duckdb-1.1.3-cp39-cp39-macosx_12_0_x86_64.whl", hash = "sha256:a1f83c7217c188b7ab42e6a0963f42070d9aed114f6200e3c923c8899c090f16", size = 16931410 },
+ { url = "https://files.pythonhosted.org/packages/13/b1/478ceb0228fab92c1f6dd24c7bf0dcbbfd5c5ed690eb0492e72edc2cda0f/duckdb-1.1.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1aa3abec8e8995a03ff1a904b0e66282d19919f562dd0a1de02f23169eeec461", size = 18492142 },
+ { url = "https://files.pythonhosted.org/packages/e3/9e/e3995491d4c3bc6b3e3e0f3bad55902225c09f571e296c1eb093f33c5c75/duckdb-1.1.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:80158f4c7c7ada46245837d5b6869a336bbaa28436fbb0537663fa324a2750cd", size = 20144252 },
+ { url = "https://files.pythonhosted.org/packages/53/16/c79fe2111451f85c4c08b1d3e09da4e0b0bf67095fb5908da497ed1e87d8/duckdb-1.1.3-cp39-cp39-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:647f17bd126170d96a38a9a6f25fca47ebb0261e5e44881e3782989033c94686", size = 18288990 },
+ { url = "https://files.pythonhosted.org/packages/5a/ce/6cd14acc799501c44bbc0617a8fbc6769acd145a6aef0fc49bba9399fd8b/duckdb-1.1.3-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:252d9b17d354beb9057098d4e5d5698e091a4f4a0d38157daeea5fc0ec161670", size = 21599071 },
+ { url = "https://files.pythonhosted.org/packages/13/31/071c1ee0457caa93414b12c4204059823cbc20cf8ed4099a3e54919ea015/duckdb-1.1.3-cp39-cp39-win_amd64.whl", hash = "sha256:eeacb598120040e9591f5a4edecad7080853aa8ac27e62d280f151f8c862afa3", size = 10988880 },
+]
+
+[[package]]
+name = "exceptiongroup"
+version = "1.2.2"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/09/35/2495c4ac46b980e4ca1f6ad6db102322ef3ad2410b79fdde159a4b0f3b92/exceptiongroup-1.2.2.tar.gz", hash = "sha256:47c2edf7c6738fafb49fd34290706d1a1a2f4d1c6df275526b62cbb4aa5393cc", size = 28883 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/02/cc/b7e31358aac6ed1ef2bb790a9746ac2c69bcb3c8588b41616914eb106eaf/exceptiongroup-1.2.2-py3-none-any.whl", hash = "sha256:3111b9d131c238bec2f8f516e123e14ba243563fb135d3fe885990585aa7795b", size = 16453 },
+]
+
+[[package]]
+name = "execnet"
+version = "2.1.1"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/bb/ff/b4c0dc78fbe20c3e59c0c7334de0c27eb4001a2b2017999af398bf730817/execnet-2.1.1.tar.gz", hash = "sha256:5189b52c6121c24feae288166ab41b32549c7e2348652736540b9e6e7d4e72e3", size = 166524 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/43/09/2aea36ff60d16dd8879bdb2f5b3ee0ba8d08cbbdcdfe870e695ce3784385/execnet-2.1.1-py3-none-any.whl", hash = "sha256:26dee51f1b80cebd6d0ca8e74dd8745419761d3bef34163928cbebbdc4749fdc", size = 40612 },
+]
+
+[[package]]
+name = "executing"
+version = "2.1.0"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/8c/e3/7d45f492c2c4a0e8e0fad57d081a7c8a0286cdd86372b070cca1ec0caa1e/executing-2.1.0.tar.gz", hash = "sha256:8ea27ddd260da8150fa5a708269c4a10e76161e2496ec3e587da9e3c0fe4b9ab", size = 977485 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/b5/fd/afcd0496feca3276f509df3dbd5dae726fcc756f1a08d9e25abe1733f962/executing-2.1.0-py2.py3-none-any.whl", hash = "sha256:8d63781349375b5ebccc3142f4b30350c0cd9c79f921cde38be2be4637e98eaf", size = 25805 },
+]
+
+[[package]]
+name = "filelock"
+version = "3.16.1"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/9d/db/3ef5bb276dae18d6ec2124224403d1d67bccdbefc17af4cc8f553e341ab1/filelock-3.16.1.tar.gz", hash = "sha256:c249fbfcd5db47e5e2d6d62198e565475ee65e4831e2561c8e313fa7eb961435", size = 18037 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/b9/f8/feced7779d755758a52d1f6635d990b8d98dc0a29fa568bbe0625f18fdf3/filelock-3.16.1-py3-none-any.whl", hash = "sha256:2082e5703d51fbf98ea75855d9d5527e33d8ff23099bec374a134febee6946b0", size = 16163 },
+]
+
+[[package]]
+name = "geopandas"
+version = "1.0.1"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "numpy", version = "2.0.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" },
+ { name = "numpy", version = "2.2.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" },
+ { name = "packaging" },
+ { name = "pandas" },
+ { name = "pyogrio" },
+ { name = "pyproj", version = "3.6.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" },
+ { name = "pyproj", version = "3.7.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" },
+ { name = "shapely" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/39/08/2cf5d85356e45b10b8d066cf4c3ba1e9e3185423c48104eed87e8afd0455/geopandas-1.0.1.tar.gz", hash = "sha256:b8bf70a5534588205b7a56646e2082fb1de9a03599651b3d80c99ea4c2ca08ab", size = 317736 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/c4/64/7d344cfcef5efddf9cf32f59af7f855828e9d74b5f862eddf5bfd9f25323/geopandas-1.0.1-py3-none-any.whl", hash = "sha256:01e147d9420cc374d26f51fc23716ac307f32b49406e4bd8462c07e82ed1d3d6", size = 323587 },
+]
+
+[[package]]
+name = "h11"
+version = "0.14.0"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/f5/38/3af3d3633a34a3316095b39c8e8fb4853a28a536e55d347bd8d8e9a14b03/h11-0.14.0.tar.gz", hash = "sha256:8f19fbbe99e72420ff35c00b27a34cb9937e902a8b810e2c88300c6f0a3b699d", size = 100418 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/95/04/ff642e65ad6b90db43e668d70ffb6736436c7ce41fcc549f4e9472234127/h11-0.14.0-py3-none-any.whl", hash = "sha256:e3fe4ac4b851c468cc8363d500db52c2ead036020723024a109d37346efaa761", size = 58259 },
+]
+
+[[package]]
+name = "hatch"
+version = "1.14.0"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "click" },
+ { name = "hatchling" },
+ { name = "httpx" },
+ { name = "hyperlink" },
+ { name = "keyring" },
+ { name = "packaging" },
+ { name = "pexpect" },
+ { name = "platformdirs" },
+ { name = "rich" },
+ { name = "shellingham" },
+ { name = "tomli-w" },
+ { name = "tomlkit" },
+ { name = "userpath" },
+ { name = "uv" },
+ { name = "virtualenv" },
+ { name = "zstandard" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/bc/15/b4e3d50d8177e6e8a243b24d9819e3807f7bfd3b2bebe7b5aef32a9c79cb/hatch-1.14.0.tar.gz", hash = "sha256:351e41bc6c72bc93cb98651212226e495b43549eee27c487832e459e5d0f0eda", size = 5188143 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/85/c6/ad910cdb79600af0100b7c4f7093eb4b95a2b44e589e66b6b938b09cc6f9/hatch-1.14.0-py3-none-any.whl", hash = "sha256:b12c7a2f4aaf6db7180e35c476e1a2ad4ec7197c20c4332964599424d4918ded", size = 125763 },
+]
+
+[[package]]
+name = "hatchling"
+version = "1.27.0"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "packaging" },
+ { name = "pathspec" },
+ { name = "pluggy" },
+ { name = "tomli", marker = "python_full_version < '3.11'" },
+ { name = "trove-classifiers" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/8f/8a/cc1debe3514da292094f1c3a700e4ca25442489731ef7c0814358816bb03/hatchling-1.27.0.tar.gz", hash = "sha256:971c296d9819abb3811112fc52c7a9751c8d381898f36533bb16f9791e941fd6", size = 54983 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/08/e7/ae38d7a6dfba0533684e0b2136817d667588ae3ec984c1a4e5df5eb88482/hatchling-1.27.0-py3-none-any.whl", hash = "sha256:d3a2f3567c4f926ea39849cdf924c7e99e6686c9c8e288ae1037c8fa2a5d937b", size = 75794 },
+]
+
+[[package]]
+name = "httpcore"
+version = "1.0.7"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "certifi" },
+ { name = "h11" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/6a/41/d7d0a89eb493922c37d343b607bc1b5da7f5be7e383740b4753ad8943e90/httpcore-1.0.7.tar.gz", hash = "sha256:8551cb62a169ec7162ac7be8d4817d561f60e08eaa485234898414bb5a8a0b4c", size = 85196 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/87/f5/72347bc88306acb359581ac4d52f23c0ef445b57157adedb9aee0cd689d2/httpcore-1.0.7-py3-none-any.whl", hash = "sha256:a3fff8f43dc260d5bd363d9f9cf1830fa3a458b332856f34282de498ed420edd", size = 78551 },
+]
+
+[[package]]
+name = "httpx"
+version = "0.28.1"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "anyio" },
+ { name = "certifi" },
+ { name = "httpcore" },
+ { name = "idna" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/b1/df/48c586a5fe32a0f01324ee087459e112ebb7224f646c0b5023f5e79e9956/httpx-0.28.1.tar.gz", hash = "sha256:75e98c5f16b0f35b567856f597f06ff2270a374470a5c2392242528e3e3e42fc", size = 141406 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/2a/39/e50c7c3a983047577ee07d2a9e53faf5a69493943ec3f6a384bdc792deb2/httpx-0.28.1-py3-none-any.whl", hash = "sha256:d909fcccc110f8c7faf814ca82a9a4d816bc5a6dbfea25d6591d6985b8ba59ad", size = 73517 },
+]
+
+[[package]]
+name = "hyperlink"
+version = "21.0.0"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "idna" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/3a/51/1947bd81d75af87e3bb9e34593a4cf118115a8feb451ce7a69044ef1412e/hyperlink-21.0.0.tar.gz", hash = "sha256:427af957daa58bc909471c6c40f74c5450fa123dd093fc53efd2e91d2705a56b", size = 140743 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/6e/aa/8caf6a0a3e62863cbb9dab27135660acba46903b703e224f14f447e57934/hyperlink-21.0.0-py2.py3-none-any.whl", hash = "sha256:e6b14c37ecb73e89c77d78cdb4c2cc8f3fb59a885c5b3f819ff4ed80f25af1b4", size = 74638 },
+]
+
+[[package]]
+name = "idna"
+version = "3.10"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/f1/70/7703c29685631f5a7590aa73f1f1d3fa9a380e654b86af429e0934a32f7d/idna-3.10.tar.gz", hash = "sha256:12f65c9b470abda6dc35cf8e63cc574b1c52b11df2c86030af0ac09b01b13ea9", size = 190490 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/76/c6/c88e154df9c4e1a2a66ccf0005a88dfb2650c1dffb6f5ce603dfbd452ce3/idna-3.10-py3-none-any.whl", hash = "sha256:946d195a0d259cbba61165e88e65941f16e9b36ea6ddb97f00452bae8b1287d3", size = 70442 },
+]
+
+[[package]]
+name = "imagesize"
+version = "1.4.1"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/a7/84/62473fb57d61e31fef6e36d64a179c8781605429fd927b5dd608c997be31/imagesize-1.4.1.tar.gz", hash = "sha256:69150444affb9cb0d5cc5a92b3676f0b2fb7cd9ae39e947a5e11a36b4497cd4a", size = 1280026 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/ff/62/85c4c919272577931d407be5ba5d71c20f0b616d31a0befe0ae45bb79abd/imagesize-1.4.1-py2.py3-none-any.whl", hash = "sha256:0d8d18d08f840c19d0ee7ca1fd82490fdc3729b7ac93f49870406ddde8ef8d8b", size = 8769 },
+]
+
+[[package]]
+name = "importlib-metadata"
+version = "8.5.0"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "zipp", marker = "python_full_version < '3.12'" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/cd/12/33e59336dca5be0c398a7482335911a33aa0e20776128f038019f1a95f1b/importlib_metadata-8.5.0.tar.gz", hash = "sha256:71522656f0abace1d072b9e5481a48f07c138e00f079c38c8f883823f9c26bd7", size = 55304 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/a0/d9/a1e041c5e7caa9a05c925f4bdbdfb7f006d1f74996af53467bc394c97be7/importlib_metadata-8.5.0-py3-none-any.whl", hash = "sha256:45e54197d28b7a7f1559e60b95e7c567032b602131fbd588f1497f47880aa68b", size = 26514 },
+]
+
+[[package]]
+name = "iniconfig"
+version = "2.0.0"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/d7/4b/cbd8e699e64a6f16ca3a8220661b5f83792b3017d0f79807cb8708d33913/iniconfig-2.0.0.tar.gz", hash = "sha256:2d91e135bf72d31a410b17c16da610a82cb55f6b0477d1a902134b24a455b8b3", size = 4646 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/ef/a6/62565a6e1cf69e10f5727360368e451d4b7f58beeac6173dc9db836a5b46/iniconfig-2.0.0-py3-none-any.whl", hash = "sha256:b6a85871a79d2e3b22d2d1b94ac2824226a63c6b741c88f7ae975f18b6778374", size = 5892 },
+]
+
+[[package]]
+name = "ipykernel"
+version = "6.29.5"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "appnope", marker = "sys_platform == 'darwin'" },
+ { name = "comm" },
+ { name = "debugpy" },
+ { name = "ipython", version = "8.18.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" },
+ { name = "ipython", version = "8.31.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" },
+ { name = "jupyter-client" },
+ { name = "jupyter-core" },
+ { name = "matplotlib-inline" },
+ { name = "nest-asyncio" },
+ { name = "packaging" },
+ { name = "psutil" },
+ { name = "pyzmq" },
+ { name = "tornado" },
+ { name = "traitlets" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/e9/5c/67594cb0c7055dc50814b21731c22a601101ea3b1b50a9a1b090e11f5d0f/ipykernel-6.29.5.tar.gz", hash = "sha256:f093a22c4a40f8828f8e330a9c297cb93dcab13bd9678ded6de8e5cf81c56215", size = 163367 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/94/5c/368ae6c01c7628438358e6d337c19b05425727fbb221d2a3c4303c372f42/ipykernel-6.29.5-py3-none-any.whl", hash = "sha256:afdb66ba5aa354b09b91379bac28ae4afebbb30e8b39510c9690afb7a10421b5", size = 117173 },
+]
+
+[[package]]
+name = "ipython"
+version = "8.18.1"
+source = { registry = "https://pypi.org/simple" }
+resolution-markers = [
+ "python_full_version < '3.10'",
+]
+dependencies = [
+ { name = "colorama", marker = "python_full_version < '3.10' and sys_platform == 'win32'" },
+ { name = "decorator", marker = "python_full_version < '3.10'" },
+ { name = "exceptiongroup", marker = "python_full_version < '3.10'" },
+ { name = "jedi", marker = "python_full_version < '3.10'" },
+ { name = "matplotlib-inline", marker = "python_full_version < '3.10'" },
+ { name = "pexpect", marker = "python_full_version < '3.10' and sys_platform != 'win32'" },
+ { name = "prompt-toolkit", marker = "python_full_version < '3.10'" },
+ { name = "pygments", marker = "python_full_version < '3.10'" },
+ { name = "stack-data", marker = "python_full_version < '3.10'" },
+ { name = "traitlets", marker = "python_full_version < '3.10'" },
+ { name = "typing-extensions", marker = "python_full_version < '3.10'" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/b1/b9/3ba6c45a6df813c09a48bac313c22ff83efa26cbb55011218d925a46e2ad/ipython-8.18.1.tar.gz", hash = "sha256:ca6f079bb33457c66e233e4580ebfc4128855b4cf6370dddd73842a9563e8a27", size = 5486330 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/47/6b/d9fdcdef2eb6a23f391251fde8781c38d42acd82abe84d054cb74f7863b0/ipython-8.18.1-py3-none-any.whl", hash = "sha256:e8267419d72d81955ec1177f8a29aaa90ac80ad647499201119e2f05e99aa397", size = 808161 },
+]
+
+[package.optional-dependencies]
+kernel = [
+ { name = "ipykernel", marker = "python_full_version < '3.10'" },
+]
+
+[[package]]
+name = "ipython"
+version = "8.31.0"
+source = { registry = "https://pypi.org/simple" }
+resolution-markers = [
+ "python_full_version >= '3.12'",
+ "python_full_version == '3.11.*'",
+ "python_full_version == '3.10.*'",
+]
+dependencies = [
+ { name = "colorama", marker = "python_full_version >= '3.10' and sys_platform == 'win32'" },
+ { name = "decorator", marker = "python_full_version >= '3.10'" },
+ { name = "exceptiongroup", marker = "python_full_version == '3.10.*'" },
+ { name = "jedi", marker = "python_full_version >= '3.10'" },
+ { name = "matplotlib-inline", marker = "python_full_version >= '3.10'" },
+ { name = "pexpect", marker = "python_full_version >= '3.10' and sys_platform != 'emscripten' and sys_platform != 'win32'" },
+ { name = "prompt-toolkit", marker = "python_full_version >= '3.10'" },
+ { name = "pygments", marker = "python_full_version >= '3.10'" },
+ { name = "stack-data", marker = "python_full_version >= '3.10'" },
+ { name = "traitlets", marker = "python_full_version >= '3.10'" },
+ { name = "typing-extensions", marker = "python_full_version >= '3.10' and python_full_version < '3.12'" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/01/35/6f90fdddff7a08b7b715fccbd2427b5212c9525cd043d26fdc45bee0708d/ipython-8.31.0.tar.gz", hash = "sha256:b6a2274606bec6166405ff05e54932ed6e5cfecaca1fc05f2cacde7bb074d70b", size = 5501011 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/04/60/d0feb6b6d9fe4ab89fe8fe5b47cbf6cd936bfd9f1e7ffa9d0015425aeed6/ipython-8.31.0-py3-none-any.whl", hash = "sha256:46ec58f8d3d076a61d128fe517a51eb730e3aaf0c184ea8c17d16e366660c6a6", size = 821583 },
+]
+
+[package.optional-dependencies]
+kernel = [
+ { name = "ipykernel", marker = "python_full_version >= '3.10'" },
+]
+
+[[package]]
+name = "ipywidgets"
+version = "8.1.5"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "comm" },
+ { name = "ipython", version = "8.18.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" },
+ { name = "ipython", version = "8.31.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" },
+ { name = "jupyterlab-widgets" },
+ { name = "traitlets" },
+ { name = "widgetsnbextension" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/c7/4c/dab2a281b07596a5fc220d49827fe6c794c66f1493d7a74f1df0640f2cc5/ipywidgets-8.1.5.tar.gz", hash = "sha256:870e43b1a35656a80c18c9503bbf2d16802db1cb487eec6fab27d683381dde17", size = 116723 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/22/2d/9c0b76f2f9cc0ebede1b9371b6f317243028ed60b90705863d493bae622e/ipywidgets-8.1.5-py3-none-any.whl", hash = "sha256:3290f526f87ae6e77655555baba4f36681c555b8bdbbff430b70e52c34c86245", size = 139767 },
+]
+
+[[package]]
+name = "jaraco-classes"
+version = "3.4.0"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "more-itertools" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/06/c0/ed4a27bc5571b99e3cff68f8a9fa5b56ff7df1c2251cc715a652ddd26402/jaraco.classes-3.4.0.tar.gz", hash = "sha256:47a024b51d0239c0dd8c8540c6c7f484be3b8fcf0b2d85c13825780d3b3f3acd", size = 11780 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/7f/66/b15ce62552d84bbfcec9a4873ab79d993a1dd4edb922cbfccae192bd5b5f/jaraco.classes-3.4.0-py3-none-any.whl", hash = "sha256:f662826b6bed8cace05e7ff873ce0f9283b5c924470fe664fff1c2f00f581790", size = 6777 },
+]
+
+[[package]]
+name = "jaraco-context"
+version = "6.0.1"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "backports-tarfile", marker = "python_full_version < '3.12'" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/df/ad/f3777b81bf0b6e7bc7514a1656d3e637b2e8e15fab2ce3235730b3e7a4e6/jaraco_context-6.0.1.tar.gz", hash = "sha256:9bae4ea555cf0b14938dc0aee7c9f32ed303aa20a3b73e7dc80111628792d1b3", size = 13912 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/ff/db/0c52c4cf5e4bd9f5d7135ec7669a3a767af21b3a308e1ed3674881e52b62/jaraco.context-6.0.1-py3-none-any.whl", hash = "sha256:f797fc481b490edb305122c9181830a3a5b76d84ef6d1aef2fb9b47ab956f9e4", size = 6825 },
+]
+
+[[package]]
+name = "jaraco-functools"
+version = "4.1.0"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "more-itertools" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/ab/23/9894b3df5d0a6eb44611c36aec777823fc2e07740dabbd0b810e19594013/jaraco_functools-4.1.0.tar.gz", hash = "sha256:70f7e0e2ae076498e212562325e805204fc092d7b4c17e0e86c959e249701a9d", size = 19159 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/9f/4f/24b319316142c44283d7540e76c7b5a6dbd5db623abd86bb7b3491c21018/jaraco.functools-4.1.0-py3-none-any.whl", hash = "sha256:ad159f13428bc4acbf5541ad6dec511f91573b90fba04df61dafa2a1231cf649", size = 10187 },
+]
+
+[[package]]
+name = "jedi"
+version = "0.19.2"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "parso" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/72/3a/79a912fbd4d8dd6fbb02bf69afd3bb72cf0c729bb3063c6f4498603db17a/jedi-0.19.2.tar.gz", hash = "sha256:4770dc3de41bde3966b02eb84fbcf557fb33cce26ad23da12c742fb50ecb11f0", size = 1231287 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/c0/5a/9cac0c82afec3d09ccd97c8b6502d48f165f9124db81b4bcb90b4af974ee/jedi-0.19.2-py2.py3-none-any.whl", hash = "sha256:a8ef22bde8490f57fe5c7681a3c83cb58874daf72b4784de3cce5b6ef6edb5b9", size = 1572278 },
+]
+
+[[package]]
+name = "jeepney"
+version = "0.8.0"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/d6/f4/154cf374c2daf2020e05c3c6a03c91348d59b23c5366e968feb198306fdf/jeepney-0.8.0.tar.gz", hash = "sha256:5efe48d255973902f6badc3ce55e2aa6c5c3b3bc642059ef3a91247bcfcc5806", size = 106005 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/ae/72/2a1e2290f1ab1e06f71f3d0f1646c9e4634e70e1d37491535e19266e8dc9/jeepney-0.8.0-py3-none-any.whl", hash = "sha256:c0a454ad016ca575060802ee4d590dd912e35c122fa04e70306de3d076cce755", size = 48435 },
+]
+
+[[package]]
+name = "jinja2"
+version = "3.1.5"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "markupsafe" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/af/92/b3130cbbf5591acf9ade8708c365f3238046ac7cb8ccba6e81abccb0ccff/jinja2-3.1.5.tar.gz", hash = "sha256:8fefff8dc3034e27bb80d67c671eb8a9bc424c0ef4c0826edbff304cceff43bb", size = 244674 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/bd/0f/2ba5fbcd631e3e88689309dbe978c5769e883e4b84ebfe7da30b43275c5a/jinja2-3.1.5-py3-none-any.whl", hash = "sha256:aba0f4dc9ed8013c424088f68a5c226f7d6097ed89b246d7749c2ec4175c6adb", size = 134596 },
+]
+
+[[package]]
+name = "jsonschema"
+version = "4.23.0"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "attrs" },
+ { name = "jsonschema-specifications" },
+ { name = "referencing" },
+ { name = "rpds-py" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/38/2e/03362ee4034a4c917f697890ccd4aec0800ccf9ded7f511971c75451deec/jsonschema-4.23.0.tar.gz", hash = "sha256:d71497fef26351a33265337fa77ffeb82423f3ea21283cd9467bb03999266bc4", size = 325778 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/69/4a/4f9dbeb84e8850557c02365a0eee0649abe5eb1d84af92a25731c6c0f922/jsonschema-4.23.0-py3-none-any.whl", hash = "sha256:fbadb6f8b144a8f8cf9f0b89ba94501d143e50411a1278633f56a7acf7fd5566", size = 88462 },
+]
+
+[[package]]
+name = "jsonschema-specifications"
+version = "2024.10.1"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "referencing" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/10/db/58f950c996c793472e336ff3655b13fbcf1e3b359dcf52dcf3ed3b52c352/jsonschema_specifications-2024.10.1.tar.gz", hash = "sha256:0f38b83639958ce1152d02a7f062902c41c8fd20d558b0c34344292d417ae272", size = 15561 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/d1/0f/8910b19ac0670a0f80ce1008e5e751c4a57e14d2c4c13a482aa6079fa9d6/jsonschema_specifications-2024.10.1-py3-none-any.whl", hash = "sha256:a09a0680616357d9a0ecf05c12ad234479f549239d0f5b55f3deea67475da9bf", size = 18459 },
+]
+
+[[package]]
+name = "jupyter-client"
+version = "8.6.3"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "importlib-metadata", marker = "python_full_version < '3.10'" },
+ { name = "jupyter-core" },
+ { name = "python-dateutil" },
+ { name = "pyzmq" },
+ { name = "tornado" },
+ { name = "traitlets" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/71/22/bf9f12fdaeae18019a468b68952a60fe6dbab5d67cd2a103cac7659b41ca/jupyter_client-8.6.3.tar.gz", hash = "sha256:35b3a0947c4a6e9d589eb97d7d4cd5e90f910ee73101611f01283732bd6d9419", size = 342019 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/11/85/b0394e0b6fcccd2c1eeefc230978a6f8cb0c5df1e4cd3e7625735a0d7d1e/jupyter_client-8.6.3-py3-none-any.whl", hash = "sha256:e8a19cc986cc45905ac3362915f410f3af85424b4c0905e94fa5f2cb08e8f23f", size = 106105 },
+]
+
+[[package]]
+name = "jupyter-core"
+version = "5.7.2"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "platformdirs" },
+ { name = "pywin32", marker = "platform_python_implementation != 'PyPy' and sys_platform == 'win32'" },
+ { name = "traitlets" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/00/11/b56381fa6c3f4cc5d2cf54a7dbf98ad9aa0b339ef7a601d6053538b079a7/jupyter_core-5.7.2.tar.gz", hash = "sha256:aa5f8d32bbf6b431ac830496da7392035d6f61b4f54872f15c4bd2a9c3f536d9", size = 87629 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/c9/fb/108ecd1fe961941959ad0ee4e12ee7b8b1477247f30b1fdfd83ceaf017f0/jupyter_core-5.7.2-py3-none-any.whl", hash = "sha256:4f7315d2f6b4bcf2e3e7cb6e46772eba760ae459cd1f59d29eb57b0a01bd7409", size = 28965 },
+]
+
+[[package]]
+name = "jupyterlab-widgets"
+version = "3.0.13"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/59/73/fa26bbb747a9ea4fca6b01453aa22990d52ab62dd61384f1ac0dc9d4e7ba/jupyterlab_widgets-3.0.13.tar.gz", hash = "sha256:a2966d385328c1942b683a8cd96b89b8dd82c8b8f81dda902bb2bc06d46f5bed", size = 203556 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/a9/93/858e87edc634d628e5d752ba944c2833133a28fa87bb093e6832ced36a3e/jupyterlab_widgets-3.0.13-py3-none-any.whl", hash = "sha256:e3cda2c233ce144192f1e29914ad522b2f4c40e77214b0cc97377ca3d323db54", size = 214392 },
+]
+
+[[package]]
+name = "keyring"
+version = "25.6.0"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "importlib-metadata", marker = "python_full_version < '3.12'" },
+ { name = "jaraco-classes" },
+ { name = "jaraco-context" },
+ { name = "jaraco-functools" },
+ { name = "jeepney", marker = "sys_platform == 'linux'" },
+ { name = "pywin32-ctypes", marker = "sys_platform == 'win32'" },
+ { name = "secretstorage", marker = "sys_platform == 'linux'" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/70/09/d904a6e96f76ff214be59e7aa6ef7190008f52a0ab6689760a98de0bf37d/keyring-25.6.0.tar.gz", hash = "sha256:0b39998aa941431eb3d9b0d4b2460bc773b9df6fed7621c2dfb291a7e0187a66", size = 62750 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/d3/32/da7f44bcb1105d3e88a0b74ebdca50c59121d2ddf71c9e34ba47df7f3a56/keyring-25.6.0-py3-none-any.whl", hash = "sha256:552a3f7af126ece7ed5c89753650eec89c7eaae8617d0aa4d9ad2b75111266bd", size = 39085 },
+]
+
+[[package]]
+name = "markdown-it-py"
+version = "3.0.0"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "mdurl" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/38/71/3b932df36c1a044d397a1f92d1cf91ee0a503d91e470cbd670aa66b07ed0/markdown-it-py-3.0.0.tar.gz", hash = "sha256:e3f60a94fa066dc52ec76661e37c851cb232d92f9886b15cb560aaada2df8feb", size = 74596 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/42/d7/1ec15b46af6af88f19b8e5ffea08fa375d433c998b8a7639e76935c14f1f/markdown_it_py-3.0.0-py3-none-any.whl", hash = "sha256:355216845c60bd96232cd8d8c40e8f9765cc86f46880e43a8fd22dc1a1a8cab1", size = 87528 },
+]
+
+[[package]]
+name = "markupsafe"
+version = "3.0.2"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/b2/97/5d42485e71dfc078108a86d6de8fa46db44a1a9295e89c5d6d4a06e23a62/markupsafe-3.0.2.tar.gz", hash = "sha256:ee55d3edf80167e48ea11a923c7386f4669df67d7994554387f84e7d8b0a2bf0", size = 20537 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/04/90/d08277ce111dd22f77149fd1a5d4653eeb3b3eaacbdfcbae5afb2600eebd/MarkupSafe-3.0.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:7e94c425039cde14257288fd61dcfb01963e658efbc0ff54f5306b06054700f8", size = 14357 },
+ { url = "https://files.pythonhosted.org/packages/04/e1/6e2194baeae0bca1fae6629dc0cbbb968d4d941469cbab11a3872edff374/MarkupSafe-3.0.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9e2d922824181480953426608b81967de705c3cef4d1af983af849d7bd619158", size = 12393 },
+ { url = "https://files.pythonhosted.org/packages/1d/69/35fa85a8ece0a437493dc61ce0bb6d459dcba482c34197e3efc829aa357f/MarkupSafe-3.0.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:38a9ef736c01fccdd6600705b09dc574584b89bea478200c5fbf112a6b0d5579", size = 21732 },
+ { url = "https://files.pythonhosted.org/packages/22/35/137da042dfb4720b638d2937c38a9c2df83fe32d20e8c8f3185dbfef05f7/MarkupSafe-3.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bbcb445fa71794da8f178f0f6d66789a28d7319071af7a496d4d507ed566270d", size = 20866 },
+ { url = "https://files.pythonhosted.org/packages/29/28/6d029a903727a1b62edb51863232152fd335d602def598dade38996887f0/MarkupSafe-3.0.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:57cb5a3cf367aeb1d316576250f65edec5bb3be939e9247ae594b4bcbc317dfb", size = 20964 },
+ { url = "https://files.pythonhosted.org/packages/cc/cd/07438f95f83e8bc028279909d9c9bd39e24149b0d60053a97b2bc4f8aa51/MarkupSafe-3.0.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:3809ede931876f5b2ec92eef964286840ed3540dadf803dd570c3b7e13141a3b", size = 21977 },
+ { url = "https://files.pythonhosted.org/packages/29/01/84b57395b4cc062f9c4c55ce0df7d3108ca32397299d9df00fedd9117d3d/MarkupSafe-3.0.2-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:e07c3764494e3776c602c1e78e298937c3315ccc9043ead7e685b7f2b8d47b3c", size = 21366 },
+ { url = "https://files.pythonhosted.org/packages/bd/6e/61ebf08d8940553afff20d1fb1ba7294b6f8d279df9fd0c0db911b4bbcfd/MarkupSafe-3.0.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:b424c77b206d63d500bcb69fa55ed8d0e6a3774056bdc4839fc9298a7edca171", size = 21091 },
+ { url = "https://files.pythonhosted.org/packages/11/23/ffbf53694e8c94ebd1e7e491de185124277964344733c45481f32ede2499/MarkupSafe-3.0.2-cp310-cp310-win32.whl", hash = "sha256:fcabf5ff6eea076f859677f5f0b6b5c1a51e70a376b0579e0eadef8db48c6b50", size = 15065 },
+ { url = "https://files.pythonhosted.org/packages/44/06/e7175d06dd6e9172d4a69a72592cb3f7a996a9c396eee29082826449bbc3/MarkupSafe-3.0.2-cp310-cp310-win_amd64.whl", hash = "sha256:6af100e168aa82a50e186c82875a5893c5597a0c1ccdb0d8b40240b1f28b969a", size = 15514 },
+ { url = "https://files.pythonhosted.org/packages/6b/28/bbf83e3f76936960b850435576dd5e67034e200469571be53f69174a2dfd/MarkupSafe-3.0.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:9025b4018f3a1314059769c7bf15441064b2207cb3f065e6ea1e7359cb46db9d", size = 14353 },
+ { url = "https://files.pythonhosted.org/packages/6c/30/316d194b093cde57d448a4c3209f22e3046c5bb2fb0820b118292b334be7/MarkupSafe-3.0.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:93335ca3812df2f366e80509ae119189886b0f3c2b81325d39efdb84a1e2ae93", size = 12392 },
+ { url = "https://files.pythonhosted.org/packages/f2/96/9cdafba8445d3a53cae530aaf83c38ec64c4d5427d975c974084af5bc5d2/MarkupSafe-3.0.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2cb8438c3cbb25e220c2ab33bb226559e7afb3baec11c4f218ffa7308603c832", size = 23984 },
+ { url = "https://files.pythonhosted.org/packages/f1/a4/aefb044a2cd8d7334c8a47d3fb2c9f328ac48cb349468cc31c20b539305f/MarkupSafe-3.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a123e330ef0853c6e822384873bef7507557d8e4a082961e1defa947aa59ba84", size = 23120 },
+ { url = "https://files.pythonhosted.org/packages/8d/21/5e4851379f88f3fad1de30361db501300d4f07bcad047d3cb0449fc51f8c/MarkupSafe-3.0.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1e084f686b92e5b83186b07e8a17fc09e38fff551f3602b249881fec658d3eca", size = 23032 },
+ { url = "https://files.pythonhosted.org/packages/00/7b/e92c64e079b2d0d7ddf69899c98842f3f9a60a1ae72657c89ce2655c999d/MarkupSafe-3.0.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:d8213e09c917a951de9d09ecee036d5c7d36cb6cb7dbaece4c71a60d79fb9798", size = 24057 },
+ { url = "https://files.pythonhosted.org/packages/f9/ac/46f960ca323037caa0a10662ef97d0a4728e890334fc156b9f9e52bcc4ca/MarkupSafe-3.0.2-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:5b02fb34468b6aaa40dfc198d813a641e3a63b98c2b05a16b9f80b7ec314185e", size = 23359 },
+ { url = "https://files.pythonhosted.org/packages/69/84/83439e16197337b8b14b6a5b9c2105fff81d42c2a7c5b58ac7b62ee2c3b1/MarkupSafe-3.0.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:0bff5e0ae4ef2e1ae4fdf2dfd5b76c75e5c2fa4132d05fc1b0dabcd20c7e28c4", size = 23306 },
+ { url = "https://files.pythonhosted.org/packages/9a/34/a15aa69f01e2181ed8d2b685c0d2f6655d5cca2c4db0ddea775e631918cd/MarkupSafe-3.0.2-cp311-cp311-win32.whl", hash = "sha256:6c89876f41da747c8d3677a2b540fb32ef5715f97b66eeb0c6b66f5e3ef6f59d", size = 15094 },
+ { url = "https://files.pythonhosted.org/packages/da/b8/3a3bd761922d416f3dc5d00bfbed11f66b1ab89a0c2b6e887240a30b0f6b/MarkupSafe-3.0.2-cp311-cp311-win_amd64.whl", hash = "sha256:70a87b411535ccad5ef2f1df5136506a10775d267e197e4cf531ced10537bd6b", size = 15521 },
+ { url = "https://files.pythonhosted.org/packages/22/09/d1f21434c97fc42f09d290cbb6350d44eb12f09cc62c9476effdb33a18aa/MarkupSafe-3.0.2-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:9778bd8ab0a994ebf6f84c2b949e65736d5575320a17ae8984a77fab08db94cf", size = 14274 },
+ { url = "https://files.pythonhosted.org/packages/6b/b0/18f76bba336fa5aecf79d45dcd6c806c280ec44538b3c13671d49099fdd0/MarkupSafe-3.0.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:846ade7b71e3536c4e56b386c2a47adf5741d2d8b94ec9dc3e92e5e1ee1e2225", size = 12348 },
+ { url = "https://files.pythonhosted.org/packages/e0/25/dd5c0f6ac1311e9b40f4af06c78efde0f3b5cbf02502f8ef9501294c425b/MarkupSafe-3.0.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1c99d261bd2d5f6b59325c92c73df481e05e57f19837bdca8413b9eac4bd8028", size = 24149 },
+ { url = "https://files.pythonhosted.org/packages/f3/f0/89e7aadfb3749d0f52234a0c8c7867877876e0a20b60e2188e9850794c17/MarkupSafe-3.0.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e17c96c14e19278594aa4841ec148115f9c7615a47382ecb6b82bd8fea3ab0c8", size = 23118 },
+ { url = "https://files.pythonhosted.org/packages/d5/da/f2eeb64c723f5e3777bc081da884b414671982008c47dcc1873d81f625b6/MarkupSafe-3.0.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:88416bd1e65dcea10bc7569faacb2c20ce071dd1f87539ca2ab364bf6231393c", size = 22993 },
+ { url = "https://files.pythonhosted.org/packages/da/0e/1f32af846df486dce7c227fe0f2398dc7e2e51d4a370508281f3c1c5cddc/MarkupSafe-3.0.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:2181e67807fc2fa785d0592dc2d6206c019b9502410671cc905d132a92866557", size = 24178 },
+ { url = "https://files.pythonhosted.org/packages/c4/f6/bb3ca0532de8086cbff5f06d137064c8410d10779c4c127e0e47d17c0b71/MarkupSafe-3.0.2-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:52305740fe773d09cffb16f8ed0427942901f00adedac82ec8b67752f58a1b22", size = 23319 },
+ { url = "https://files.pythonhosted.org/packages/a2/82/8be4c96ffee03c5b4a034e60a31294daf481e12c7c43ab8e34a1453ee48b/MarkupSafe-3.0.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:ad10d3ded218f1039f11a75f8091880239651b52e9bb592ca27de44eed242a48", size = 23352 },
+ { url = "https://files.pythonhosted.org/packages/51/ae/97827349d3fcffee7e184bdf7f41cd6b88d9919c80f0263ba7acd1bbcb18/MarkupSafe-3.0.2-cp312-cp312-win32.whl", hash = "sha256:0f4ca02bea9a23221c0182836703cbf8930c5e9454bacce27e767509fa286a30", size = 15097 },
+ { url = "https://files.pythonhosted.org/packages/c1/80/a61f99dc3a936413c3ee4e1eecac96c0da5ed07ad56fd975f1a9da5bc630/MarkupSafe-3.0.2-cp312-cp312-win_amd64.whl", hash = "sha256:8e06879fc22a25ca47312fbe7c8264eb0b662f6db27cb2d3bbbc74b1df4b9b87", size = 15601 },
+ { url = "https://files.pythonhosted.org/packages/83/0e/67eb10a7ecc77a0c2bbe2b0235765b98d164d81600746914bebada795e97/MarkupSafe-3.0.2-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:ba9527cdd4c926ed0760bc301f6728ef34d841f405abf9d4f959c478421e4efd", size = 14274 },
+ { url = "https://files.pythonhosted.org/packages/2b/6d/9409f3684d3335375d04e5f05744dfe7e9f120062c9857df4ab490a1031a/MarkupSafe-3.0.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:f8b3d067f2e40fe93e1ccdd6b2e1d16c43140e76f02fb1319a05cf2b79d99430", size = 12352 },
+ { url = "https://files.pythonhosted.org/packages/d2/f5/6eadfcd3885ea85fe2a7c128315cc1bb7241e1987443d78c8fe712d03091/MarkupSafe-3.0.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:569511d3b58c8791ab4c2e1285575265991e6d8f8700c7be0e88f86cb0672094", size = 24122 },
+ { url = "https://files.pythonhosted.org/packages/0c/91/96cf928db8236f1bfab6ce15ad070dfdd02ed88261c2afafd4b43575e9e9/MarkupSafe-3.0.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:15ab75ef81add55874e7ab7055e9c397312385bd9ced94920f2802310c930396", size = 23085 },
+ { url = "https://files.pythonhosted.org/packages/c2/cf/c9d56af24d56ea04daae7ac0940232d31d5a8354f2b457c6d856b2057d69/MarkupSafe-3.0.2-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f3818cb119498c0678015754eba762e0d61e5b52d34c8b13d770f0719f7b1d79", size = 22978 },
+ { url = "https://files.pythonhosted.org/packages/2a/9f/8619835cd6a711d6272d62abb78c033bda638fdc54c4e7f4272cf1c0962b/MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:cdb82a876c47801bb54a690c5ae105a46b392ac6099881cdfb9f6e95e4014c6a", size = 24208 },
+ { url = "https://files.pythonhosted.org/packages/f9/bf/176950a1792b2cd2102b8ffeb5133e1ed984547b75db47c25a67d3359f77/MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:cabc348d87e913db6ab4aa100f01b08f481097838bdddf7c7a84b7575b7309ca", size = 23357 },
+ { url = "https://files.pythonhosted.org/packages/ce/4f/9a02c1d335caabe5c4efb90e1b6e8ee944aa245c1aaaab8e8a618987d816/MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:444dcda765c8a838eaae23112db52f1efaf750daddb2d9ca300bcae1039adc5c", size = 23344 },
+ { url = "https://files.pythonhosted.org/packages/ee/55/c271b57db36f748f0e04a759ace9f8f759ccf22b4960c270c78a394f58be/MarkupSafe-3.0.2-cp313-cp313-win32.whl", hash = "sha256:bcf3e58998965654fdaff38e58584d8937aa3096ab5354d493c77d1fdd66d7a1", size = 15101 },
+ { url = "https://files.pythonhosted.org/packages/29/88/07df22d2dd4df40aba9f3e402e6dc1b8ee86297dddbad4872bd5e7b0094f/MarkupSafe-3.0.2-cp313-cp313-win_amd64.whl", hash = "sha256:e6a2a455bd412959b57a172ce6328d2dd1f01cb2135efda2e4576e8a23fa3b0f", size = 15603 },
+ { url = "https://files.pythonhosted.org/packages/62/6a/8b89d24db2d32d433dffcd6a8779159da109842434f1dd2f6e71f32f738c/MarkupSafe-3.0.2-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:b5a6b3ada725cea8a5e634536b1b01c30bcdcd7f9c6fff4151548d5bf6b3a36c", size = 14510 },
+ { url = "https://files.pythonhosted.org/packages/7a/06/a10f955f70a2e5a9bf78d11a161029d278eeacbd35ef806c3fd17b13060d/MarkupSafe-3.0.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:a904af0a6162c73e3edcb969eeeb53a63ceeb5d8cf642fade7d39e7963a22ddb", size = 12486 },
+ { url = "https://files.pythonhosted.org/packages/34/cf/65d4a571869a1a9078198ca28f39fba5fbb910f952f9dbc5220afff9f5e6/MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4aa4e5faecf353ed117801a068ebab7b7e09ffb6e1d5e412dc852e0da018126c", size = 25480 },
+ { url = "https://files.pythonhosted.org/packages/0c/e3/90e9651924c430b885468b56b3d597cabf6d72be4b24a0acd1fa0e12af67/MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c0ef13eaeee5b615fb07c9a7dadb38eac06a0608b41570d8ade51c56539e509d", size = 23914 },
+ { url = "https://files.pythonhosted.org/packages/66/8c/6c7cf61f95d63bb866db39085150df1f2a5bd3335298f14a66b48e92659c/MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d16a81a06776313e817c951135cf7340a3e91e8c1ff2fac444cfd75fffa04afe", size = 23796 },
+ { url = "https://files.pythonhosted.org/packages/bb/35/cbe9238ec3f47ac9a7c8b3df7a808e7cb50fe149dc7039f5f454b3fba218/MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:6381026f158fdb7c72a168278597a5e3a5222e83ea18f543112b2662a9b699c5", size = 25473 },
+ { url = "https://files.pythonhosted.org/packages/e6/32/7621a4382488aa283cc05e8984a9c219abad3bca087be9ec77e89939ded9/MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:3d79d162e7be8f996986c064d1c7c817f6df3a77fe3d6859f6f9e7be4b8c213a", size = 24114 },
+ { url = "https://files.pythonhosted.org/packages/0d/80/0985960e4b89922cb5a0bac0ed39c5b96cbc1a536a99f30e8c220a996ed9/MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:131a3c7689c85f5ad20f9f6fb1b866f402c445b220c19fe4308c0b147ccd2ad9", size = 24098 },
+ { url = "https://files.pythonhosted.org/packages/82/78/fedb03c7d5380df2427038ec8d973587e90561b2d90cd472ce9254cf348b/MarkupSafe-3.0.2-cp313-cp313t-win32.whl", hash = "sha256:ba8062ed2cf21c07a9e295d5b8a2a5ce678b913b45fdf68c32d95d6c1291e0b6", size = 15208 },
+ { url = "https://files.pythonhosted.org/packages/4f/65/6079a46068dfceaeabb5dcad6d674f5f5c61a6fa5673746f42a9f4c233b3/MarkupSafe-3.0.2-cp313-cp313t-win_amd64.whl", hash = "sha256:e444a31f8db13eb18ada366ab3cf45fd4b31e4db1236a4448f68778c1d1a5a2f", size = 15739 },
+ { url = "https://files.pythonhosted.org/packages/a7/ea/9b1530c3fdeeca613faeb0fb5cbcf2389d816072fab72a71b45749ef6062/MarkupSafe-3.0.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:eaa0a10b7f72326f1372a713e73c3f739b524b3af41feb43e4921cb529f5929a", size = 14344 },
+ { url = "https://files.pythonhosted.org/packages/4b/c2/fbdbfe48848e7112ab05e627e718e854d20192b674952d9042ebd8c9e5de/MarkupSafe-3.0.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:48032821bbdf20f5799ff537c7ac3d1fba0ba032cfc06194faffa8cda8b560ff", size = 12389 },
+ { url = "https://files.pythonhosted.org/packages/f0/25/7a7c6e4dbd4f867d95d94ca15449e91e52856f6ed1905d58ef1de5e211d0/MarkupSafe-3.0.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1a9d3f5f0901fdec14d8d2f66ef7d035f2157240a433441719ac9a3fba440b13", size = 21607 },
+ { url = "https://files.pythonhosted.org/packages/53/8f/f339c98a178f3c1e545622206b40986a4c3307fe39f70ccd3d9df9a9e425/MarkupSafe-3.0.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:88b49a3b9ff31e19998750c38e030fc7bb937398b1f78cfa599aaef92d693144", size = 20728 },
+ { url = "https://files.pythonhosted.org/packages/1a/03/8496a1a78308456dbd50b23a385c69b41f2e9661c67ea1329849a598a8f9/MarkupSafe-3.0.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cfad01eed2c2e0c01fd0ecd2ef42c492f7f93902e39a42fc9ee1692961443a29", size = 20826 },
+ { url = "https://files.pythonhosted.org/packages/e6/cf/0a490a4bd363048c3022f2f475c8c05582179bb179defcee4766fb3dcc18/MarkupSafe-3.0.2-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:1225beacc926f536dc82e45f8a4d68502949dc67eea90eab715dea3a21c1b5f0", size = 21843 },
+ { url = "https://files.pythonhosted.org/packages/19/a3/34187a78613920dfd3cdf68ef6ce5e99c4f3417f035694074beb8848cd77/MarkupSafe-3.0.2-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:3169b1eefae027567d1ce6ee7cae382c57fe26e82775f460f0b2778beaad66c0", size = 21219 },
+ { url = "https://files.pythonhosted.org/packages/17/d8/5811082f85bb88410ad7e452263af048d685669bbbfb7b595e8689152498/MarkupSafe-3.0.2-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:eb7972a85c54febfb25b5c4b4f3af4dcc731994c7da0d8a0b4a6eb0640e1d178", size = 20946 },
+ { url = "https://files.pythonhosted.org/packages/7c/31/bd635fb5989440d9365c5e3c47556cfea121c7803f5034ac843e8f37c2f2/MarkupSafe-3.0.2-cp39-cp39-win32.whl", hash = "sha256:8c4e8c3ce11e1f92f6536ff07154f9d49677ebaaafc32db9db4620bc11ed480f", size = 15063 },
+ { url = "https://files.pythonhosted.org/packages/b3/73/085399401383ce949f727afec55ec3abd76648d04b9f22e1c0e99cb4bec3/MarkupSafe-3.0.2-cp39-cp39-win_amd64.whl", hash = "sha256:6e296a513ca3d94054c2c881cc913116e90fd030ad1c656b3869762b754f5f8a", size = 15506 },
+]
+
+[[package]]
+name = "matplotlib-inline"
+version = "0.1.7"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "traitlets" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/99/5b/a36a337438a14116b16480db471ad061c36c3694df7c2084a0da7ba538b7/matplotlib_inline-0.1.7.tar.gz", hash = "sha256:8423b23ec666be3d16e16b60bdd8ac4e86e840ebd1dd11a30b9f117f2fa0ab90", size = 8159 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/8f/8e/9ad090d3553c280a8060fbf6e24dc1c0c29704ee7d1c372f0c174aa59285/matplotlib_inline-0.1.7-py3-none-any.whl", hash = "sha256:df192d39a4ff8f21b1895d72e6a13f5fcc5099f00fa84384e0ea28c2cc0653ca", size = 9899 },
+]
+
+[[package]]
+name = "mdit-py-plugins"
+version = "0.4.2"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "markdown-it-py" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/19/03/a2ecab526543b152300717cf232bb4bb8605b6edb946c845016fa9c9c9fd/mdit_py_plugins-0.4.2.tar.gz", hash = "sha256:5f2cd1fdb606ddf152d37ec30e46101a60512bc0e5fa1a7002c36647b09e26b5", size = 43542 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/a7/f7/7782a043553ee469c1ff49cfa1cdace2d6bf99a1f333cf38676b3ddf30da/mdit_py_plugins-0.4.2-py3-none-any.whl", hash = "sha256:0c673c3f889399a33b95e88d2f0d111b4447bdfea7f237dab2d488f459835636", size = 55316 },
+]
+
+[[package]]
+name = "mdurl"
+version = "0.1.2"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/d6/54/cfe61301667036ec958cb99bd3efefba235e65cdeb9c84d24a8293ba1d90/mdurl-0.1.2.tar.gz", hash = "sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba", size = 8729 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl", hash = "sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8", size = 9979 },
+]
+
+[[package]]
+name = "mercantile"
+version = "1.2.1"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "click" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/d2/c6/87409bcb26fb68c393fa8cf58ba09363aa7298cfb438a0109b5cb14bc98b/mercantile-1.2.1.tar.gz", hash = "sha256:fa3c6db15daffd58454ac198b31887519a19caccee3f9d63d17ae7ff61b3b56b", size = 26352 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/b2/d6/de0cc74f8d36976aeca0dd2e9cbf711882ff8e177495115fd82459afdc4d/mercantile-1.2.1-py3-none-any.whl", hash = "sha256:30f457a73ee88261aab787b7069d85961a5703bb09dc57a170190bc042cd023f", size = 14779 },
+]
+
+[[package]]
+name = "mistune"
+version = "3.1.0"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "typing-extensions", marker = "python_full_version < '3.11'" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/79/6e/96fc7cb3288666c5de2c396eb0e338dc95f7a8e4920e43e38783a22d0084/mistune-3.1.0.tar.gz", hash = "sha256:dbcac2f78292b9dc066cd03b7a3a26b62d85f8159f2ea5fd28e55df79908d667", size = 94401 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/b4/b3/743ffc3f59da380da504d84ccd1faf9a857a1445991ff19bf2ec754163c2/mistune-3.1.0-py3-none-any.whl", hash = "sha256:b05198cf6d671b3deba6c87ec6cf0d4eb7b72c524636eddb6dbf13823b52cee1", size = 53694 },
+]
+
+[[package]]
+name = "more-itertools"
+version = "10.6.0"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/88/3b/7fa1fe835e2e93fd6d7b52b2f95ae810cf5ba133e1845f726f5a992d62c2/more-itertools-10.6.0.tar.gz", hash = "sha256:2cd7fad1009c31cc9fb6a035108509e6547547a7a738374f10bd49a09eb3ee3b", size = 125009 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/23/62/0fe302c6d1be1c777cab0616e6302478251dfbf9055ad426f5d0def75c89/more_itertools-10.6.0-py3-none-any.whl", hash = "sha256:6eb054cb4b6db1473f6e15fcc676a08e4732548acd47c708f0e179c2c7c01e89", size = 63038 },
+]
+
+[[package]]
+name = "mslex"
+version = "1.3.0"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/e0/97/7022667073c99a0fe028f2e34b9bf76b49a611afd21b02527fbfd92d4cd5/mslex-1.3.0.tar.gz", hash = "sha256:641c887d1d3db610eee2af37a8e5abda3f70b3006cdfd2d0d29dc0d1ae28a85d", size = 11583 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/64/f2/66bd65ca0139675a0d7b18f0bada6e12b51a984e41a76dbe44761bf1b3ee/mslex-1.3.0-py3-none-any.whl", hash = "sha256:c7074b347201b3466fc077c5692fbce9b5f62a63a51f537a53fbbd02eff2eea4", size = 7820 },
+]
+
+[[package]]
+name = "mypy"
+version = "1.14.1"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "mypy-extensions" },
+ { name = "tomli", marker = "python_full_version < '3.11'" },
+ { name = "typing-extensions" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/b9/eb/2c92d8ea1e684440f54fa49ac5d9a5f19967b7b472a281f419e69a8d228e/mypy-1.14.1.tar.gz", hash = "sha256:7ec88144fe9b510e8475ec2f5f251992690fcf89ccb4500b214b4226abcd32d6", size = 3216051 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/9b/7a/87ae2adb31d68402da6da1e5f30c07ea6063e9f09b5e7cfc9dfa44075e74/mypy-1.14.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:52686e37cf13d559f668aa398dd7ddf1f92c5d613e4f8cb262be2fb4fedb0fcb", size = 11211002 },
+ { url = "https://files.pythonhosted.org/packages/e1/23/eada4c38608b444618a132be0d199b280049ded278b24cbb9d3fc59658e4/mypy-1.14.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:1fb545ca340537d4b45d3eecdb3def05e913299ca72c290326be19b3804b39c0", size = 10358400 },
+ { url = "https://files.pythonhosted.org/packages/43/c9/d6785c6f66241c62fd2992b05057f404237deaad1566545e9f144ced07f5/mypy-1.14.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:90716d8b2d1f4cd503309788e51366f07c56635a3309b0f6a32547eaaa36a64d", size = 12095172 },
+ { url = "https://files.pythonhosted.org/packages/c3/62/daa7e787770c83c52ce2aaf1a111eae5893de9e004743f51bfcad9e487ec/mypy-1.14.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2ae753f5c9fef278bcf12e1a564351764f2a6da579d4a81347e1d5a15819997b", size = 12828732 },
+ { url = "https://files.pythonhosted.org/packages/1b/a2/5fb18318a3637f29f16f4e41340b795da14f4751ef4f51c99ff39ab62e52/mypy-1.14.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:e0fe0f5feaafcb04505bcf439e991c6d8f1bf8b15f12b05feeed96e9e7bf1427", size = 13012197 },
+ { url = "https://files.pythonhosted.org/packages/28/99/e153ce39105d164b5f02c06c35c7ba958aaff50a2babba7d080988b03fe7/mypy-1.14.1-cp310-cp310-win_amd64.whl", hash = "sha256:7d54bd85b925e501c555a3227f3ec0cfc54ee8b6930bd6141ec872d1c572f81f", size = 9780836 },
+ { url = "https://files.pythonhosted.org/packages/da/11/a9422850fd506edbcdc7f6090682ecceaf1f87b9dd847f9df79942da8506/mypy-1.14.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:f995e511de847791c3b11ed90084a7a0aafdc074ab88c5a9711622fe4751138c", size = 11120432 },
+ { url = "https://files.pythonhosted.org/packages/b6/9e/47e450fd39078d9c02d620545b2cb37993a8a8bdf7db3652ace2f80521ca/mypy-1.14.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:d64169ec3b8461311f8ce2fd2eb5d33e2d0f2c7b49116259c51d0d96edee48d1", size = 10279515 },
+ { url = "https://files.pythonhosted.org/packages/01/b5/6c8d33bd0f851a7692a8bfe4ee75eb82b6983a3cf39e5e32a5d2a723f0c1/mypy-1.14.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ba24549de7b89b6381b91fbc068d798192b1b5201987070319889e93038967a8", size = 12025791 },
+ { url = "https://files.pythonhosted.org/packages/f0/4c/e10e2c46ea37cab5c471d0ddaaa9a434dc1d28650078ac1b56c2d7b9b2e4/mypy-1.14.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:183cf0a45457d28ff9d758730cd0210419ac27d4d3f285beda038c9083363b1f", size = 12749203 },
+ { url = "https://files.pythonhosted.org/packages/88/55/beacb0c69beab2153a0f57671ec07861d27d735a0faff135a494cd4f5020/mypy-1.14.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:f2a0ecc86378f45347f586e4163d1769dd81c5a223d577fe351f26b179e148b1", size = 12885900 },
+ { url = "https://files.pythonhosted.org/packages/a2/75/8c93ff7f315c4d086a2dfcde02f713004357d70a163eddb6c56a6a5eff40/mypy-1.14.1-cp311-cp311-win_amd64.whl", hash = "sha256:ad3301ebebec9e8ee7135d8e3109ca76c23752bac1e717bc84cd3836b4bf3eae", size = 9777869 },
+ { url = "https://files.pythonhosted.org/packages/43/1b/b38c079609bb4627905b74fc6a49849835acf68547ac33d8ceb707de5f52/mypy-1.14.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:30ff5ef8519bbc2e18b3b54521ec319513a26f1bba19a7582e7b1f58a6e69f14", size = 11266668 },
+ { url = "https://files.pythonhosted.org/packages/6b/75/2ed0d2964c1ffc9971c729f7a544e9cd34b2cdabbe2d11afd148d7838aa2/mypy-1.14.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:cb9f255c18052343c70234907e2e532bc7e55a62565d64536dbc7706a20b78b9", size = 10254060 },
+ { url = "https://files.pythonhosted.org/packages/a1/5f/7b8051552d4da3c51bbe8fcafffd76a6823779101a2b198d80886cd8f08e/mypy-1.14.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8b4e3413e0bddea671012b063e27591b953d653209e7a4fa5e48759cda77ca11", size = 11933167 },
+ { url = "https://files.pythonhosted.org/packages/04/90/f53971d3ac39d8b68bbaab9a4c6c58c8caa4d5fd3d587d16f5927eeeabe1/mypy-1.14.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:553c293b1fbdebb6c3c4030589dab9fafb6dfa768995a453d8a5d3b23784af2e", size = 12864341 },
+ { url = "https://files.pythonhosted.org/packages/03/d2/8bc0aeaaf2e88c977db41583559319f1821c069e943ada2701e86d0430b7/mypy-1.14.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:fad79bfe3b65fe6a1efaed97b445c3d37f7be9fdc348bdb2d7cac75579607c89", size = 12972991 },
+ { url = "https://files.pythonhosted.org/packages/6f/17/07815114b903b49b0f2cf7499f1c130e5aa459411596668267535fe9243c/mypy-1.14.1-cp312-cp312-win_amd64.whl", hash = "sha256:8fa2220e54d2946e94ab6dbb3ba0a992795bd68b16dc852db33028df2b00191b", size = 9879016 },
+ { url = "https://files.pythonhosted.org/packages/9e/15/bb6a686901f59222275ab228453de741185f9d54fecbaacec041679496c6/mypy-1.14.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:92c3ed5afb06c3a8e188cb5da4984cab9ec9a77ba956ee419c68a388b4595255", size = 11252097 },
+ { url = "https://files.pythonhosted.org/packages/f8/b3/8b0f74dfd072c802b7fa368829defdf3ee1566ba74c32a2cb2403f68024c/mypy-1.14.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:dbec574648b3e25f43d23577309b16534431db4ddc09fda50841f1e34e64ed34", size = 10239728 },
+ { url = "https://files.pythonhosted.org/packages/c5/9b/4fd95ab20c52bb5b8c03cc49169be5905d931de17edfe4d9d2986800b52e/mypy-1.14.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8c6d94b16d62eb3e947281aa7347d78236688e21081f11de976376cf010eb31a", size = 11924965 },
+ { url = "https://files.pythonhosted.org/packages/56/9d/4a236b9c57f5d8f08ed346914b3f091a62dd7e19336b2b2a0d85485f82ff/mypy-1.14.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d4b19b03fdf54f3c5b2fa474c56b4c13c9dbfb9a2db4370ede7ec11a2c5927d9", size = 12867660 },
+ { url = "https://files.pythonhosted.org/packages/40/88/a61a5497e2f68d9027de2bb139c7bb9abaeb1be1584649fa9d807f80a338/mypy-1.14.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:0c911fde686394753fff899c409fd4e16e9b294c24bfd5e1ea4675deae1ac6fd", size = 12969198 },
+ { url = "https://files.pythonhosted.org/packages/54/da/3d6fc5d92d324701b0c23fb413c853892bfe0e1dbe06c9138037d459756b/mypy-1.14.1-cp313-cp313-win_amd64.whl", hash = "sha256:8b21525cb51671219f5307be85f7e646a153e5acc656e5cebf64bfa076c50107", size = 9885276 },
+ { url = "https://files.pythonhosted.org/packages/ca/1f/186d133ae2514633f8558e78cd658070ba686c0e9275c5a5c24a1e1f0d67/mypy-1.14.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:3888a1816d69f7ab92092f785a462944b3ca16d7c470d564165fe703b0970c35", size = 11200493 },
+ { url = "https://files.pythonhosted.org/packages/af/fc/4842485d034e38a4646cccd1369f6b1ccd7bc86989c52770d75d719a9941/mypy-1.14.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:46c756a444117c43ee984bd055db99e498bc613a70bbbc120272bd13ca579fbc", size = 10357702 },
+ { url = "https://files.pythonhosted.org/packages/b4/e6/457b83f2d701e23869cfec013a48a12638f75b9d37612a9ddf99072c1051/mypy-1.14.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:27fc248022907e72abfd8e22ab1f10e903915ff69961174784a3900a8cba9ad9", size = 12091104 },
+ { url = "https://files.pythonhosted.org/packages/f1/bf/76a569158db678fee59f4fd30b8e7a0d75bcbaeef49edd882a0d63af6d66/mypy-1.14.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:499d6a72fb7e5de92218db961f1a66d5f11783f9ae549d214617edab5d4dbdbb", size = 12830167 },
+ { url = "https://files.pythonhosted.org/packages/43/bc/0bc6b694b3103de9fed61867f1c8bd33336b913d16831431e7cb48ef1c92/mypy-1.14.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:57961db9795eb566dc1d1b4e9139ebc4c6b0cb6e7254ecde69d1552bf7613f60", size = 13013834 },
+ { url = "https://files.pythonhosted.org/packages/b0/79/5f5ec47849b6df1e6943d5fd8e6632fbfc04b4fd4acfa5a5a9535d11b4e2/mypy-1.14.1-cp39-cp39-win_amd64.whl", hash = "sha256:07ba89fdcc9451f2ebb02853deb6aaaa3d2239a236669a63ab3801bbf923ef5c", size = 9781231 },
+ { url = "https://files.pythonhosted.org/packages/a0/b5/32dd67b69a16d088e533962e5044e51004176a9952419de0370cdaead0f8/mypy-1.14.1-py3-none-any.whl", hash = "sha256:b66a60cc4073aeb8ae00057f9c1f64d49e90f918fbcef9a977eb121da8b8f1d1", size = 2752905 },
+]
+
+[[package]]
+name = "mypy-extensions"
+version = "1.0.0"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/98/a4/1ab47638b92648243faf97a5aeb6ea83059cc3624972ab6b8d2316078d3f/mypy_extensions-1.0.0.tar.gz", hash = "sha256:75dbf8955dc00442a438fc4d0666508a9a97b6bd41aa2f0ffe9d2f2725af0782", size = 4433 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/2a/e2/5d3f6ada4297caebe1a2add3b126fe800c96f56dbe5d1988a2cbe0b267aa/mypy_extensions-1.0.0-py3-none-any.whl", hash = "sha256:4392f6c0eb8a5668a69e23d168ffa70f0be9ccfd32b5cc2d26a34ae5b844552d", size = 4695 },
+]
+
+[[package]]
+name = "myst-parser"
+version = "3.0.1"
+source = { registry = "https://pypi.org/simple" }
+resolution-markers = [
+ "python_full_version < '3.10'",
+]
+dependencies = [
+ { name = "docutils", marker = "python_full_version < '3.10'" },
+ { name = "jinja2", marker = "python_full_version < '3.10'" },
+ { name = "markdown-it-py", marker = "python_full_version < '3.10'" },
+ { name = "mdit-py-plugins", marker = "python_full_version < '3.10'" },
+ { name = "pyyaml", marker = "python_full_version < '3.10'" },
+ { name = "sphinx", version = "7.4.7", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/49/64/e2f13dac02f599980798c01156393b781aec983b52a6e4057ee58f07c43a/myst_parser-3.0.1.tar.gz", hash = "sha256:88f0cb406cb363b077d176b51c476f62d60604d68a8dcdf4832e080441301a87", size = 92392 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/e2/de/21aa8394f16add8f7427f0a1326ccd2b3a2a8a3245c9252bc5ac034c6155/myst_parser-3.0.1-py3-none-any.whl", hash = "sha256:6457aaa33a5d474aca678b8ead9b3dc298e89c68e67012e73146ea6fd54babf1", size = 83163 },
+]
+
+[[package]]
+name = "myst-parser"
+version = "4.0.0"
+source = { registry = "https://pypi.org/simple" }
+resolution-markers = [
+ "python_full_version >= '3.12'",
+ "python_full_version == '3.11.*'",
+ "python_full_version == '3.10.*'",
+]
+dependencies = [
+ { name = "docutils", marker = "python_full_version >= '3.10'" },
+ { name = "jinja2", marker = "python_full_version >= '3.10'" },
+ { name = "markdown-it-py", marker = "python_full_version >= '3.10'" },
+ { name = "mdit-py-plugins", marker = "python_full_version >= '3.10'" },
+ { name = "pyyaml", marker = "python_full_version >= '3.10'" },
+ { name = "sphinx", version = "8.1.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/85/55/6d1741a1780e5e65038b74bce6689da15f620261c490c3511eb4c12bac4b/myst_parser-4.0.0.tar.gz", hash = "sha256:851c9dfb44e36e56d15d05e72f02b80da21a9e0d07cba96baf5e2d476bb91531", size = 93858 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/ca/b4/b036f8fdb667587bb37df29dc6644681dd78b7a2a6321a34684b79412b28/myst_parser-4.0.0-py3-none-any.whl", hash = "sha256:b9317997552424448c6096c2558872fdb6f81d3ecb3a40ce84a7518798f3f28d", size = 84563 },
+]
+
+[[package]]
+name = "narwhals"
+version = "1.22.0"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/26/2d/3047f817d6a1290b96851950101776d40671c309bed36429537b5cab5b94/narwhals-1.22.0.tar.gz", hash = "sha256:8e257c5af70a82382796706f39d681290f2c482812474524087f36cb69f9d2f1", size = 241780 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/17/d9/00a937201a3ca6e8b2ca29226935be53dd7bc9bee27cb8ba5b27efe11ccf/narwhals-1.22.0-py3-none-any.whl", hash = "sha256:5c931bf8696b6dec276f590f1bc5043080606b16ce86d85c9b550312c981970f", size = 297474 },
+]
+
+[[package]]
+name = "nest-asyncio"
+version = "1.6.0"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/83/f8/51569ac65d696c8ecbee95938f89d4abf00f47d58d48f6fbabfe8f0baefe/nest_asyncio-1.6.0.tar.gz", hash = "sha256:6f172d5449aca15afd6c646851f4e31e02c598d553a667e38cafa997cfec55fe", size = 7418 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/a0/c4/c2971a3ba4c6103a3d10c4b0f24f461ddc027f0f09763220cf35ca1401b3/nest_asyncio-1.6.0-py3-none-any.whl", hash = "sha256:87af6efd6b5e897c81050477ef65c62e2b2f35d51703cae01aff2905b1852e1c", size = 5195 },
+]
+
+[[package]]
+name = "numpy"
+version = "2.0.2"
+source = { registry = "https://pypi.org/simple" }
+resolution-markers = [
+ "python_full_version < '3.10'",
+]
+sdist = { url = "https://files.pythonhosted.org/packages/a9/75/10dd1f8116a8b796cb2c737b674e02d02e80454bda953fa7e65d8c12b016/numpy-2.0.2.tar.gz", hash = "sha256:883c987dee1880e2a864ab0dc9892292582510604156762362d9326444636e78", size = 18902015 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/21/91/3495b3237510f79f5d81f2508f9f13fea78ebfdf07538fc7444badda173d/numpy-2.0.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:51129a29dbe56f9ca83438b706e2e69a39892b5eda6cedcb6b0c9fdc9b0d3ece", size = 21165245 },
+ { url = "https://files.pythonhosted.org/packages/05/33/26178c7d437a87082d11019292dce6d3fe6f0e9026b7b2309cbf3e489b1d/numpy-2.0.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:f15975dfec0cf2239224d80e32c3170b1d168335eaedee69da84fbe9f1f9cd04", size = 13738540 },
+ { url = "https://files.pythonhosted.org/packages/ec/31/cc46e13bf07644efc7a4bf68df2df5fb2a1a88d0cd0da9ddc84dc0033e51/numpy-2.0.2-cp310-cp310-macosx_14_0_arm64.whl", hash = "sha256:8c5713284ce4e282544c68d1c3b2c7161d38c256d2eefc93c1d683cf47683e66", size = 5300623 },
+ { url = "https://files.pythonhosted.org/packages/6e/16/7bfcebf27bb4f9d7ec67332ffebee4d1bf085c84246552d52dbb548600e7/numpy-2.0.2-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:becfae3ddd30736fe1889a37f1f580e245ba79a5855bff5f2a29cb3ccc22dd7b", size = 6901774 },
+ { url = "https://files.pythonhosted.org/packages/f9/a3/561c531c0e8bf082c5bef509d00d56f82e0ea7e1e3e3a7fc8fa78742a6e5/numpy-2.0.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2da5960c3cf0df7eafefd806d4e612c5e19358de82cb3c343631188991566ccd", size = 13907081 },
+ { url = "https://files.pythonhosted.org/packages/fa/66/f7177ab331876200ac7563a580140643d1179c8b4b6a6b0fc9838de2a9b8/numpy-2.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:496f71341824ed9f3d2fd36cf3ac57ae2e0165c143b55c3a035ee219413f3318", size = 19523451 },
+ { url = "https://files.pythonhosted.org/packages/25/7f/0b209498009ad6453e4efc2c65bcdf0ae08a182b2b7877d7ab38a92dc542/numpy-2.0.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:a61ec659f68ae254e4d237816e33171497e978140353c0c2038d46e63282d0c8", size = 19927572 },
+ { url = "https://files.pythonhosted.org/packages/3e/df/2619393b1e1b565cd2d4c4403bdd979621e2c4dea1f8532754b2598ed63b/numpy-2.0.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:d731a1c6116ba289c1e9ee714b08a8ff882944d4ad631fd411106a30f083c326", size = 14400722 },
+ { url = "https://files.pythonhosted.org/packages/22/ad/77e921b9f256d5da36424ffb711ae79ca3f451ff8489eeca544d0701d74a/numpy-2.0.2-cp310-cp310-win32.whl", hash = "sha256:984d96121c9f9616cd33fbd0618b7f08e0cfc9600a7ee1d6fd9b239186d19d97", size = 6472170 },
+ { url = "https://files.pythonhosted.org/packages/10/05/3442317535028bc29cf0c0dd4c191a4481e8376e9f0db6bcf29703cadae6/numpy-2.0.2-cp310-cp310-win_amd64.whl", hash = "sha256:c7b0be4ef08607dd04da4092faee0b86607f111d5ae68036f16cc787e250a131", size = 15905558 },
+ { url = "https://files.pythonhosted.org/packages/8b/cf/034500fb83041aa0286e0fb16e7c76e5c8b67c0711bb6e9e9737a717d5fe/numpy-2.0.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:49ca4decb342d66018b01932139c0961a8f9ddc7589611158cb3c27cbcf76448", size = 21169137 },
+ { url = "https://files.pythonhosted.org/packages/4a/d9/32de45561811a4b87fbdee23b5797394e3d1504b4a7cf40c10199848893e/numpy-2.0.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:11a76c372d1d37437857280aa142086476136a8c0f373b2e648ab2c8f18fb195", size = 13703552 },
+ { url = "https://files.pythonhosted.org/packages/c1/ca/2f384720020c7b244d22508cb7ab23d95f179fcfff33c31a6eeba8d6c512/numpy-2.0.2-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:807ec44583fd708a21d4a11d94aedf2f4f3c3719035c76a2bbe1fe8e217bdc57", size = 5298957 },
+ { url = "https://files.pythonhosted.org/packages/0e/78/a3e4f9fb6aa4e6fdca0c5428e8ba039408514388cf62d89651aade838269/numpy-2.0.2-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:8cafab480740e22f8d833acefed5cc87ce276f4ece12fdaa2e8903db2f82897a", size = 6905573 },
+ { url = "https://files.pythonhosted.org/packages/a0/72/cfc3a1beb2caf4efc9d0b38a15fe34025230da27e1c08cc2eb9bfb1c7231/numpy-2.0.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a15f476a45e6e5a3a79d8a14e62161d27ad897381fecfa4a09ed5322f2085669", size = 13914330 },
+ { url = "https://files.pythonhosted.org/packages/ba/a8/c17acf65a931ce551fee11b72e8de63bf7e8a6f0e21add4c937c83563538/numpy-2.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:13e689d772146140a252c3a28501da66dfecd77490b498b168b501835041f951", size = 19534895 },
+ { url = "https://files.pythonhosted.org/packages/ba/86/8767f3d54f6ae0165749f84648da9dcc8cd78ab65d415494962c86fac80f/numpy-2.0.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:9ea91dfb7c3d1c56a0e55657c0afb38cf1eeae4544c208dc465c3c9f3a7c09f9", size = 19937253 },
+ { url = "https://files.pythonhosted.org/packages/df/87/f76450e6e1c14e5bb1eae6836478b1028e096fd02e85c1c37674606ab752/numpy-2.0.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:c1c9307701fec8f3f7a1e6711f9089c06e6284b3afbbcd259f7791282d660a15", size = 14414074 },
+ { url = "https://files.pythonhosted.org/packages/5c/ca/0f0f328e1e59f73754f06e1adfb909de43726d4f24c6a3f8805f34f2b0fa/numpy-2.0.2-cp311-cp311-win32.whl", hash = "sha256:a392a68bd329eafac5817e5aefeb39038c48b671afd242710b451e76090e81f4", size = 6470640 },
+ { url = "https://files.pythonhosted.org/packages/eb/57/3a3f14d3a759dcf9bf6e9eda905794726b758819df4663f217d658a58695/numpy-2.0.2-cp311-cp311-win_amd64.whl", hash = "sha256:286cd40ce2b7d652a6f22efdfc6d1edf879440e53e76a75955bc0c826c7e64dc", size = 15910230 },
+ { url = "https://files.pythonhosted.org/packages/45/40/2e117be60ec50d98fa08c2f8c48e09b3edea93cfcabd5a9ff6925d54b1c2/numpy-2.0.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:df55d490dea7934f330006d0f81e8551ba6010a5bf035a249ef61a94f21c500b", size = 20895803 },
+ { url = "https://files.pythonhosted.org/packages/46/92/1b8b8dee833f53cef3e0a3f69b2374467789e0bb7399689582314df02651/numpy-2.0.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:8df823f570d9adf0978347d1f926b2a867d5608f434a7cff7f7908c6570dcf5e", size = 13471835 },
+ { url = "https://files.pythonhosted.org/packages/7f/19/e2793bde475f1edaea6945be141aef6c8b4c669b90c90a300a8954d08f0a/numpy-2.0.2-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:9a92ae5c14811e390f3767053ff54eaee3bf84576d99a2456391401323f4ec2c", size = 5038499 },
+ { url = "https://files.pythonhosted.org/packages/e3/ff/ddf6dac2ff0dd50a7327bcdba45cb0264d0e96bb44d33324853f781a8f3c/numpy-2.0.2-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:a842d573724391493a97a62ebbb8e731f8a5dcc5d285dfc99141ca15a3302d0c", size = 6633497 },
+ { url = "https://files.pythonhosted.org/packages/72/21/67f36eac8e2d2cd652a2e69595a54128297cdcb1ff3931cfc87838874bd4/numpy-2.0.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c05e238064fc0610c840d1cf6a13bf63d7e391717d247f1bf0318172e759e692", size = 13621158 },
+ { url = "https://files.pythonhosted.org/packages/39/68/e9f1126d757653496dbc096cb429014347a36b228f5a991dae2c6b6cfd40/numpy-2.0.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0123ffdaa88fa4ab64835dcbde75dcdf89c453c922f18dced6e27c90d1d0ec5a", size = 19236173 },
+ { url = "https://files.pythonhosted.org/packages/d1/e9/1f5333281e4ebf483ba1c888b1d61ba7e78d7e910fdd8e6499667041cc35/numpy-2.0.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:96a55f64139912d61de9137f11bf39a55ec8faec288c75a54f93dfd39f7eb40c", size = 19634174 },
+ { url = "https://files.pythonhosted.org/packages/71/af/a469674070c8d8408384e3012e064299f7a2de540738a8e414dcfd639996/numpy-2.0.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:ec9852fb39354b5a45a80bdab5ac02dd02b15f44b3804e9f00c556bf24b4bded", size = 14099701 },
+ { url = "https://files.pythonhosted.org/packages/d0/3d/08ea9f239d0e0e939b6ca52ad403c84a2bce1bde301a8eb4888c1c1543f1/numpy-2.0.2-cp312-cp312-win32.whl", hash = "sha256:671bec6496f83202ed2d3c8fdc486a8fc86942f2e69ff0e986140339a63bcbe5", size = 6174313 },
+ { url = "https://files.pythonhosted.org/packages/b2/b5/4ac39baebf1fdb2e72585c8352c56d063b6126be9fc95bd2bb5ef5770c20/numpy-2.0.2-cp312-cp312-win_amd64.whl", hash = "sha256:cfd41e13fdc257aa5778496b8caa5e856dc4896d4ccf01841daee1d96465467a", size = 15606179 },
+ { url = "https://files.pythonhosted.org/packages/43/c1/41c8f6df3162b0c6ffd4437d729115704bd43363de0090c7f913cfbc2d89/numpy-2.0.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9059e10581ce4093f735ed23f3b9d283b9d517ff46009ddd485f1747eb22653c", size = 21169942 },
+ { url = "https://files.pythonhosted.org/packages/39/bc/fd298f308dcd232b56a4031fd6ddf11c43f9917fbc937e53762f7b5a3bb1/numpy-2.0.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:423e89b23490805d2a5a96fe40ec507407b8ee786d66f7328be214f9679df6dd", size = 13711512 },
+ { url = "https://files.pythonhosted.org/packages/96/ff/06d1aa3eeb1c614eda245c1ba4fb88c483bee6520d361641331872ac4b82/numpy-2.0.2-cp39-cp39-macosx_14_0_arm64.whl", hash = "sha256:2b2955fa6f11907cf7a70dab0d0755159bca87755e831e47932367fc8f2f2d0b", size = 5306976 },
+ { url = "https://files.pythonhosted.org/packages/2d/98/121996dcfb10a6087a05e54453e28e58694a7db62c5a5a29cee14c6e047b/numpy-2.0.2-cp39-cp39-macosx_14_0_x86_64.whl", hash = "sha256:97032a27bd9d8988b9a97a8c4d2c9f2c15a81f61e2f21404d7e8ef00cb5be729", size = 6906494 },
+ { url = "https://files.pythonhosted.org/packages/15/31/9dffc70da6b9bbf7968f6551967fc21156207366272c2a40b4ed6008dc9b/numpy-2.0.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1e795a8be3ddbac43274f18588329c72939870a16cae810c2b73461c40718ab1", size = 13912596 },
+ { url = "https://files.pythonhosted.org/packages/b9/14/78635daab4b07c0930c919d451b8bf8c164774e6a3413aed04a6d95758ce/numpy-2.0.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f26b258c385842546006213344c50655ff1555a9338e2e5e02a0756dc3e803dd", size = 19526099 },
+ { url = "https://files.pythonhosted.org/packages/26/4c/0eeca4614003077f68bfe7aac8b7496f04221865b3a5e7cb230c9d055afd/numpy-2.0.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:5fec9451a7789926bcf7c2b8d187292c9f93ea30284802a0ab3f5be8ab36865d", size = 19932823 },
+ { url = "https://files.pythonhosted.org/packages/f1/46/ea25b98b13dccaebddf1a803f8c748680d972e00507cd9bc6dcdb5aa2ac1/numpy-2.0.2-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:9189427407d88ff25ecf8f12469d4d39d35bee1db5d39fc5c168c6f088a6956d", size = 14404424 },
+ { url = "https://files.pythonhosted.org/packages/c8/a6/177dd88d95ecf07e722d21008b1b40e681a929eb9e329684d449c36586b2/numpy-2.0.2-cp39-cp39-win32.whl", hash = "sha256:905d16e0c60200656500c95b6b8dca5d109e23cb24abc701d41c02d74c6b3afa", size = 6476809 },
+ { url = "https://files.pythonhosted.org/packages/ea/2b/7fc9f4e7ae5b507c1a3a21f0f15ed03e794c1242ea8a242ac158beb56034/numpy-2.0.2-cp39-cp39-win_amd64.whl", hash = "sha256:a3f4ab0caa7f053f6797fcd4e1e25caee367db3112ef2b6ef82d749530768c73", size = 15911314 },
+ { url = "https://files.pythonhosted.org/packages/8f/3b/df5a870ac6a3be3a86856ce195ef42eec7ae50d2a202be1f5a4b3b340e14/numpy-2.0.2-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:7f0a0c6f12e07fa94133c8a67404322845220c06a9e80e85999afe727f7438b8", size = 21025288 },
+ { url = "https://files.pythonhosted.org/packages/2c/97/51af92f18d6f6f2d9ad8b482a99fb74e142d71372da5d834b3a2747a446e/numpy-2.0.2-pp39-pypy39_pp73-macosx_14_0_x86_64.whl", hash = "sha256:312950fdd060354350ed123c0e25a71327d3711584beaef30cdaa93320c392d4", size = 6762793 },
+ { url = "https://files.pythonhosted.org/packages/12/46/de1fbd0c1b5ccaa7f9a005b66761533e2f6a3e560096682683a223631fe9/numpy-2.0.2-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:26df23238872200f63518dd2aa984cfca675d82469535dc7162dc2ee52d9dd5c", size = 19334885 },
+ { url = "https://files.pythonhosted.org/packages/cc/dc/d330a6faefd92b446ec0f0dfea4c3207bb1fef3c4771d19cf4543efd2c78/numpy-2.0.2-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:a46288ec55ebbd58947d31d72be2c63cbf839f0a63b49cb755022310792a3385", size = 15828784 },
+]
+
+[[package]]
+name = "numpy"
+version = "2.2.1"
+source = { registry = "https://pypi.org/simple" }
+resolution-markers = [
+ "python_full_version >= '3.12'",
+ "python_full_version == '3.11.*'",
+ "python_full_version == '3.10.*'",
+]
+sdist = { url = "https://files.pythonhosted.org/packages/f2/a5/fdbf6a7871703df6160b5cf3dd774074b086d278172285c52c2758b76305/numpy-2.2.1.tar.gz", hash = "sha256:45681fd7128c8ad1c379f0ca0776a8b0c6583d2f69889ddac01559dfe4390918", size = 20227662 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/c7/c4/5588367dc9f91e1a813beb77de46ea8cab13f778e1b3a0e661ab031aba44/numpy-2.2.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:5edb4e4caf751c1518e6a26a83501fda79bff41cc59dac48d70e6d65d4ec4440", size = 21213214 },
+ { url = "https://files.pythonhosted.org/packages/d8/8b/32dd9f08419023a4cf856c5ad0b4eba9b830da85eafdef841a104c4fc05a/numpy-2.2.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:aa3017c40d513ccac9621a2364f939d39e550c542eb2a894b4c8da92b38896ab", size = 14352248 },
+ { url = "https://files.pythonhosted.org/packages/84/2d/0e895d02940ba6e12389f0ab5cac5afcf8dc2dc0ade4e8cad33288a721bd/numpy-2.2.1-cp310-cp310-macosx_14_0_arm64.whl", hash = "sha256:61048b4a49b1c93fe13426e04e04fdf5a03f456616f6e98c7576144677598675", size = 5391007 },
+ { url = "https://files.pythonhosted.org/packages/11/b9/7f1e64a0d46d9c2af6d17966f641fb12d5b8ea3003f31b2308f3e3b9a6aa/numpy-2.2.1-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:7671dc19c7019103ca44e8d94917eba8534c76133523ca8406822efdd19c9308", size = 6926174 },
+ { url = "https://files.pythonhosted.org/packages/2e/8c/043fa4418bc9364e364ab7aba8ff6ef5f6b9171ade22de8fbcf0e2fa4165/numpy-2.2.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4250888bcb96617e00bfa28ac24850a83c9f3a16db471eca2ee1f1714df0f957", size = 14330914 },
+ { url = "https://files.pythonhosted.org/packages/f7/b6/d8110985501ca8912dfc1c3bbef99d66e62d487f72e46b2337494df77364/numpy-2.2.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a7746f235c47abc72b102d3bce9977714c2444bdfaea7888d241b4c4bb6a78bf", size = 16379607 },
+ { url = "https://files.pythonhosted.org/packages/e2/57/bdca9fb8bdaa810c3a4ff2eb3231379b77f618a7c0d24be9f7070db50775/numpy-2.2.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:059e6a747ae84fce488c3ee397cee7e5f905fd1bda5fb18c66bc41807ff119b2", size = 15541760 },
+ { url = "https://files.pythonhosted.org/packages/97/55/3b9147b3cbc3b6b1abc2a411dec5337a46c873deca0dd0bf5bef9d0579cc/numpy-2.2.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:f62aa6ee4eb43b024b0e5a01cf65a0bb078ef8c395e8713c6e8a12a697144528", size = 18168476 },
+ { url = "https://files.pythonhosted.org/packages/00/e7/7c2cde16c9b87a8e14fdd262ca7849c4681cf48c8a774505f7e6f5e3b643/numpy-2.2.1-cp310-cp310-win32.whl", hash = "sha256:48fd472630715e1c1c89bf1feab55c29098cb403cc184b4859f9c86d4fcb6a95", size = 6570985 },
+ { url = "https://files.pythonhosted.org/packages/a1/a8/554b0e99fc4ac11ec481254781a10da180d0559c2ebf2c324232317349ee/numpy-2.2.1-cp310-cp310-win_amd64.whl", hash = "sha256:b541032178a718c165a49638d28272b771053f628382d5e9d1c93df23ff58dbf", size = 12913384 },
+ { url = "https://files.pythonhosted.org/packages/59/14/645887347124e101d983e1daf95b48dc3e136bf8525cb4257bf9eab1b768/numpy-2.2.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:40f9e544c1c56ba8f1cf7686a8c9b5bb249e665d40d626a23899ba6d5d9e1484", size = 21217379 },
+ { url = "https://files.pythonhosted.org/packages/9f/fd/2279000cf29f58ccfd3778cbf4670dfe3f7ce772df5e198c5abe9e88b7d7/numpy-2.2.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f9b57eaa3b0cd8db52049ed0330747b0364e899e8a606a624813452b8203d5f7", size = 14388520 },
+ { url = "https://files.pythonhosted.org/packages/58/b0/034eb5d5ba12d66ab658ff3455a31f20add0b78df8203c6a7451bd1bee21/numpy-2.2.1-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:bc8a37ad5b22c08e2dbd27df2b3ef7e5c0864235805b1e718a235bcb200cf1cb", size = 5389286 },
+ { url = "https://files.pythonhosted.org/packages/5d/69/6f3cccde92e82e7835fdb475c2bf439761cbf8a1daa7c07338e1e132dfec/numpy-2.2.1-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:9036d6365d13b6cbe8f27a0eaf73ddcc070cae584e5ff94bb45e3e9d729feab5", size = 6930345 },
+ { url = "https://files.pythonhosted.org/packages/d1/72/1cd38e91ab563e67f584293fcc6aca855c9ae46dba42e6b5ff4600022899/numpy-2.2.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:51faf345324db860b515d3f364eaa93d0e0551a88d6218a7d61286554d190d73", size = 14335748 },
+ { url = "https://files.pythonhosted.org/packages/f2/d4/f999444e86986f3533e7151c272bd8186c55dda554284def18557e013a2a/numpy-2.2.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:38efc1e56b73cc9b182fe55e56e63b044dd26a72128fd2fbd502f75555d92591", size = 16391057 },
+ { url = "https://files.pythonhosted.org/packages/99/7b/85cef6a3ae1b19542b7afd97d0b296526b6ef9e3c43ea0c4d9c4404fb2d0/numpy-2.2.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:31b89fa67a8042e96715c68e071a1200c4e172f93b0fbe01a14c0ff3ff820fc8", size = 15556943 },
+ { url = "https://files.pythonhosted.org/packages/69/7e/b83cc884c3508e91af78760f6b17ab46ad649831b1fa35acb3eb26d9e6d2/numpy-2.2.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:4c86e2a209199ead7ee0af65e1d9992d1dce7e1f63c4b9a616500f93820658d0", size = 18180785 },
+ { url = "https://files.pythonhosted.org/packages/b2/9f/eb4a9a38867de059dcd4b6e18d47c3867fbd3795d4c9557bb49278f94087/numpy-2.2.1-cp311-cp311-win32.whl", hash = "sha256:b34d87e8a3090ea626003f87f9392b3929a7bbf4104a05b6667348b6bd4bf1cd", size = 6568983 },
+ { url = "https://files.pythonhosted.org/packages/6d/1e/be3b9f3073da2f8c7fa361fcdc231b548266b0781029fdbaf75eeab997fd/numpy-2.2.1-cp311-cp311-win_amd64.whl", hash = "sha256:360137f8fb1b753c5cde3ac388597ad680eccbbbb3865ab65efea062c4a1fd16", size = 12917260 },
+ { url = "https://files.pythonhosted.org/packages/62/12/b928871c570d4a87ab13d2cc19f8817f17e340d5481621930e76b80ffb7d/numpy-2.2.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:694f9e921a0c8f252980e85bce61ebbd07ed2b7d4fa72d0e4246f2f8aa6642ab", size = 20909861 },
+ { url = "https://files.pythonhosted.org/packages/3d/c3/59df91ae1d8ad7c5e03efd63fd785dec62d96b0fe56d1f9ab600b55009af/numpy-2.2.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:3683a8d166f2692664262fd4900f207791d005fb088d7fdb973cc8d663626faa", size = 14095776 },
+ { url = "https://files.pythonhosted.org/packages/af/4e/8ed5868efc8e601fb69419644a280e9c482b75691466b73bfaab7d86922c/numpy-2.2.1-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:780077d95eafc2ccc3ced969db22377b3864e5b9a0ea5eb347cc93b3ea900315", size = 5126239 },
+ { url = "https://files.pythonhosted.org/packages/1a/74/dd0bbe650d7bc0014b051f092f2de65e34a8155aabb1287698919d124d7f/numpy-2.2.1-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:55ba24ebe208344aa7a00e4482f65742969a039c2acfcb910bc6fcd776eb4355", size = 6659296 },
+ { url = "https://files.pythonhosted.org/packages/7f/11/4ebd7a3f4a655764dc98481f97bd0a662fb340d1001be6050606be13e162/numpy-2.2.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9b1d07b53b78bf84a96898c1bc139ad7f10fda7423f5fd158fd0f47ec5e01ac7", size = 14047121 },
+ { url = "https://files.pythonhosted.org/packages/7f/a7/c1f1d978166eb6b98ad009503e4d93a8c1962d0eb14a885c352ee0276a54/numpy-2.2.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5062dc1a4e32a10dc2b8b13cedd58988261416e811c1dc4dbdea4f57eea61b0d", size = 16096599 },
+ { url = "https://files.pythonhosted.org/packages/3d/6d/0e22afd5fcbb4d8d0091f3f46bf4e8906399c458d4293da23292c0ba5022/numpy-2.2.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:fce4f615f8ca31b2e61aa0eb5865a21e14f5629515c9151850aa936c02a1ee51", size = 15243932 },
+ { url = "https://files.pythonhosted.org/packages/03/39/e4e5832820131ba424092b9610d996b37e5557180f8e2d6aebb05c31ae54/numpy-2.2.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:67d4cda6fa6ffa073b08c8372aa5fa767ceb10c9a0587c707505a6d426f4e046", size = 17861032 },
+ { url = "https://files.pythonhosted.org/packages/5f/8a/3794313acbf5e70df2d5c7d2aba8718676f8d054a05abe59e48417fb2981/numpy-2.2.1-cp312-cp312-win32.whl", hash = "sha256:32cb94448be47c500d2c7a95f93e2f21a01f1fd05dd2beea1ccd049bb6001cd2", size = 6274018 },
+ { url = "https://files.pythonhosted.org/packages/17/c1/c31d3637f2641e25c7a19adf2ae822fdaf4ddd198b05d79a92a9ce7cb63e/numpy-2.2.1-cp312-cp312-win_amd64.whl", hash = "sha256:ba5511d8f31c033a5fcbda22dd5c813630af98c70b2661f2d2c654ae3cdfcfc8", size = 12613843 },
+ { url = "https://files.pythonhosted.org/packages/20/d6/91a26e671c396e0c10e327b763485ee295f5a5a7a48c553f18417e5a0ed5/numpy-2.2.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:f1d09e520217618e76396377c81fba6f290d5f926f50c35f3a5f72b01a0da780", size = 20896464 },
+ { url = "https://files.pythonhosted.org/packages/8c/40/5792ccccd91d45e87d9e00033abc4f6ca8a828467b193f711139ff1f1cd9/numpy-2.2.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:3ecc47cd7f6ea0336042be87d9e7da378e5c7e9b3c8ad0f7c966f714fc10d821", size = 14111350 },
+ { url = "https://files.pythonhosted.org/packages/c0/2a/fb0a27f846cb857cef0c4c92bef89f133a3a1abb4e16bba1c4dace2e9b49/numpy-2.2.1-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:f419290bc8968a46c4933158c91a0012b7a99bb2e465d5ef5293879742f8797e", size = 5111629 },
+ { url = "https://files.pythonhosted.org/packages/eb/e5/8e81bb9d84db88b047baf4e8b681a3e48d6390bc4d4e4453eca428ecbb49/numpy-2.2.1-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:5b6c390bfaef8c45a260554888966618328d30e72173697e5cabe6b285fb2348", size = 6645865 },
+ { url = "https://files.pythonhosted.org/packages/7a/1a/a90ceb191dd2f9e2897c69dde93ccc2d57dd21ce2acbd7b0333e8eea4e8d/numpy-2.2.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:526fc406ab991a340744aad7e25251dd47a6720a685fa3331e5c59fef5282a59", size = 14043508 },
+ { url = "https://files.pythonhosted.org/packages/f1/5a/e572284c86a59dec0871a49cd4e5351e20b9c751399d5f1d79628c0542cb/numpy-2.2.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f74e6fdeb9a265624ec3a3918430205dff1df7e95a230779746a6af78bc615af", size = 16094100 },
+ { url = "https://files.pythonhosted.org/packages/0c/2c/a79d24f364788386d85899dd280a94f30b0950be4b4a545f4fa4ed1d4ca7/numpy-2.2.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:53c09385ff0b72ba79d8715683c1168c12e0b6e84fb0372e97553d1ea91efe51", size = 15239691 },
+ { url = "https://files.pythonhosted.org/packages/cf/79/1e20fd1c9ce5a932111f964b544facc5bb9bde7865f5b42f00b4a6a9192b/numpy-2.2.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:f3eac17d9ec51be534685ba877b6ab5edc3ab7ec95c8f163e5d7b39859524716", size = 17856571 },
+ { url = "https://files.pythonhosted.org/packages/be/5b/cc155e107f75d694f562bdc84a26cc930569f3dfdfbccb3420b626065777/numpy-2.2.1-cp313-cp313-win32.whl", hash = "sha256:9ad014faa93dbb52c80d8f4d3dcf855865c876c9660cb9bd7553843dd03a4b1e", size = 6270841 },
+ { url = "https://files.pythonhosted.org/packages/44/be/0e5cd009d2162e4138d79a5afb3b5d2341f0fe4777ab6e675aa3d4a42e21/numpy-2.2.1-cp313-cp313-win_amd64.whl", hash = "sha256:164a829b6aacf79ca47ba4814b130c4020b202522a93d7bff2202bfb33b61c60", size = 12606618 },
+ { url = "https://files.pythonhosted.org/packages/a8/87/04ddf02dd86fb17c7485a5f87b605c4437966d53de1e3745d450343a6f56/numpy-2.2.1-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:4dfda918a13cc4f81e9118dea249e192ab167a0bb1966272d5503e39234d694e", size = 20921004 },
+ { url = "https://files.pythonhosted.org/packages/6e/3e/d0e9e32ab14005425d180ef950badf31b862f3839c5b927796648b11f88a/numpy-2.2.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:733585f9f4b62e9b3528dd1070ec4f52b8acf64215b60a845fa13ebd73cd0712", size = 14119910 },
+ { url = "https://files.pythonhosted.org/packages/b5/5b/aa2d1905b04a8fb681e08742bb79a7bddfc160c7ce8e1ff6d5c821be0236/numpy-2.2.1-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:89b16a18e7bba224ce5114db863e7029803c179979e1af6ad6a6b11f70545008", size = 5153612 },
+ { url = "https://files.pythonhosted.org/packages/ce/35/6831808028df0648d9b43c5df7e1051129aa0d562525bacb70019c5f5030/numpy-2.2.1-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:676f4eebf6b2d430300f1f4f4c2461685f8269f94c89698d832cdf9277f30b84", size = 6668401 },
+ { url = "https://files.pythonhosted.org/packages/b1/38/10ef509ad63a5946cc042f98d838daebfe7eaf45b9daaf13df2086b15ff9/numpy-2.2.1-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:27f5cdf9f493b35f7e41e8368e7d7b4bbafaf9660cba53fb21d2cd174ec09631", size = 14014198 },
+ { url = "https://files.pythonhosted.org/packages/df/f8/c80968ae01df23e249ee0a4487fae55a4c0fe2f838dfe9cc907aa8aea0fa/numpy-2.2.1-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c1ad395cf254c4fbb5b2132fee391f361a6e8c1adbd28f2cd8e79308a615fe9d", size = 16076211 },
+ { url = "https://files.pythonhosted.org/packages/09/69/05c169376016a0b614b432967ac46ff14269eaffab80040ec03ae1ae8e2c/numpy-2.2.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:08ef779aed40dbc52729d6ffe7dd51df85796a702afbf68a4f4e41fafdc8bda5", size = 15220266 },
+ { url = "https://files.pythonhosted.org/packages/f1/ff/94a4ce67ea909f41cf7ea712aebbe832dc67decad22944a1020bb398a5ee/numpy-2.2.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:26c9c4382b19fcfbbed3238a14abf7ff223890ea1936b8890f058e7ba35e8d71", size = 17852844 },
+ { url = "https://files.pythonhosted.org/packages/46/72/8a5dbce4020dfc595592333ef2fbb0a187d084ca243b67766d29d03e0096/numpy-2.2.1-cp313-cp313t-win32.whl", hash = "sha256:93cf4e045bae74c90ca833cba583c14b62cb4ba2cba0abd2b141ab52548247e2", size = 6326007 },
+ { url = "https://files.pythonhosted.org/packages/7b/9c/4fce9cf39dde2562584e4cfd351a0140240f82c0e3569ce25a250f47037d/numpy-2.2.1-cp313-cp313t-win_amd64.whl", hash = "sha256:bff7d8ec20f5f42607599f9994770fa65d76edca264a87b5e4ea5629bce12268", size = 12693107 },
+ { url = "https://files.pythonhosted.org/packages/f1/65/d36a76b811ffe0a4515e290cb05cb0e22171b1b0f0db6bee9141cf023545/numpy-2.2.1-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:7ba9cc93a91d86365a5d270dee221fdc04fb68d7478e6bf6af650de78a8339e3", size = 21044672 },
+ { url = "https://files.pythonhosted.org/packages/aa/3f/b644199f165063154df486d95198d814578f13dd4d8c1651e075bf1cb8af/numpy-2.2.1-pp310-pypy310_pp73-macosx_14_0_x86_64.whl", hash = "sha256:3d03883435a19794e41f147612a77a8f56d4e52822337844fff3d4040a142964", size = 6789873 },
+ { url = "https://files.pythonhosted.org/packages/d7/df/2adb0bb98a3cbe8a6c3c6d1019aede1f1d8b83927ced228a46cc56c7a206/numpy-2.2.1-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4511d9e6071452b944207c8ce46ad2f897307910b402ea5fa975da32e0102800", size = 16194933 },
+ { url = "https://files.pythonhosted.org/packages/13/3e/1959d5219a9e6d200638d924cedda6a606392f7186a4ed56478252e70d55/numpy-2.2.1-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:5c5cc0cbabe9452038ed984d05ac87910f89370b9242371bd9079cb4af61811e", size = 12820057 },
+]
+
+[[package]]
+name = "numpydoc"
+version = "1.8.0"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "sphinx", version = "7.4.7", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" },
+ { name = "sphinx", version = "8.1.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" },
+ { name = "tabulate" },
+ { name = "tomli", marker = "python_full_version < '3.11'" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/ee/59/5d1d1afb0b9598e21e7cda477935188e39ef845bcf59cb65ac20845bfd45/numpydoc-1.8.0.tar.gz", hash = "sha256:022390ab7464a44f8737f79f8b31ce1d3cfa4b4af79ccaa1aac5e8368db587fb", size = 90445 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/6c/45/56d99ba9366476cd8548527667f01869279cedb9e66b28eb4dfb27701679/numpydoc-1.8.0-py3-none-any.whl", hash = "sha256:72024c7fd5e17375dec3608a27c03303e8ad00c81292667955c6fea7a3ccf541", size = 64003 },
+]
+
+[[package]]
+name = "packaging"
+version = "24.2"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/d0/63/68dbb6eb2de9cb10ee4c9c14a0148804425e13c4fb20d61cce69f53106da/packaging-24.2.tar.gz", hash = "sha256:c228a6dc5e932d346bc5739379109d49e8853dd8223571c7c5b55260edc0b97f", size = 163950 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/88/ef/eb23f262cca3c0c4eb7ab1933c3b1f03d021f2c48f54763065b6f0e321be/packaging-24.2-py3-none-any.whl", hash = "sha256:09abb1bccd265c01f4a3aa3f7a7db064b36514d2cba19a2f694fe6150451a759", size = 65451 },
+]
+
+[[package]]
+name = "pandas"
+version = "2.2.3"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "numpy", version = "2.0.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" },
+ { name = "numpy", version = "2.2.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" },
+ { name = "python-dateutil" },
+ { name = "pytz" },
+ { name = "tzdata" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/9c/d6/9f8431bacc2e19dca897724cd097b1bb224a6ad5433784a44b587c7c13af/pandas-2.2.3.tar.gz", hash = "sha256:4f18ba62b61d7e192368b84517265a99b4d7ee8912f8708660fb4a366cc82667", size = 4399213 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/aa/70/c853aec59839bceed032d52010ff5f1b8d87dc3114b762e4ba2727661a3b/pandas-2.2.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:1948ddde24197a0f7add2bdc4ca83bf2b1ef84a1bc8ccffd95eda17fd836ecb5", size = 12580827 },
+ { url = "https://files.pythonhosted.org/packages/99/f2/c4527768739ffa4469b2b4fff05aa3768a478aed89a2f271a79a40eee984/pandas-2.2.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:381175499d3802cde0eabbaf6324cce0c4f5d52ca6f8c377c29ad442f50f6348", size = 11303897 },
+ { url = "https://files.pythonhosted.org/packages/ed/12/86c1747ea27989d7a4064f806ce2bae2c6d575b950be087837bdfcabacc9/pandas-2.2.3-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:d9c45366def9a3dd85a6454c0e7908f2b3b8e9c138f5dc38fed7ce720d8453ed", size = 66480908 },
+ { url = "https://files.pythonhosted.org/packages/44/50/7db2cd5e6373ae796f0ddad3675268c8d59fb6076e66f0c339d61cea886b/pandas-2.2.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:86976a1c5b25ae3f8ccae3a5306e443569ee3c3faf444dfd0f41cda24667ad57", size = 13064210 },
+ { url = "https://files.pythonhosted.org/packages/61/61/a89015a6d5536cb0d6c3ba02cebed51a95538cf83472975275e28ebf7d0c/pandas-2.2.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:b8661b0238a69d7aafe156b7fa86c44b881387509653fdf857bebc5e4008ad42", size = 16754292 },
+ { url = "https://files.pythonhosted.org/packages/ce/0d/4cc7b69ce37fac07645a94e1d4b0880b15999494372c1523508511b09e40/pandas-2.2.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:37e0aced3e8f539eccf2e099f65cdb9c8aa85109b0be6e93e2baff94264bdc6f", size = 14416379 },
+ { url = "https://files.pythonhosted.org/packages/31/9e/6ebb433de864a6cd45716af52a4d7a8c3c9aaf3a98368e61db9e69e69a9c/pandas-2.2.3-cp310-cp310-win_amd64.whl", hash = "sha256:56534ce0746a58afaf7942ba4863e0ef81c9c50d3f0ae93e9497d6a41a057645", size = 11598471 },
+ { url = "https://files.pythonhosted.org/packages/a8/44/d9502bf0ed197ba9bf1103c9867d5904ddcaf869e52329787fc54ed70cc8/pandas-2.2.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:66108071e1b935240e74525006034333f98bcdb87ea116de573a6a0dccb6c039", size = 12602222 },
+ { url = "https://files.pythonhosted.org/packages/52/11/9eac327a38834f162b8250aab32a6781339c69afe7574368fffe46387edf/pandas-2.2.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:7c2875855b0ff77b2a64a0365e24455d9990730d6431b9e0ee18ad8acee13dbd", size = 11321274 },
+ { url = "https://files.pythonhosted.org/packages/45/fb/c4beeb084718598ba19aa9f5abbc8aed8b42f90930da861fcb1acdb54c3a/pandas-2.2.3-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:cd8d0c3be0515c12fed0bdbae072551c8b54b7192c7b1fda0ba56059a0179698", size = 15579836 },
+ { url = "https://files.pythonhosted.org/packages/cd/5f/4dba1d39bb9c38d574a9a22548c540177f78ea47b32f99c0ff2ec499fac5/pandas-2.2.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c124333816c3a9b03fbeef3a9f230ba9a737e9e5bb4060aa2107a86cc0a497fc", size = 13058505 },
+ { url = "https://files.pythonhosted.org/packages/b9/57/708135b90391995361636634df1f1130d03ba456e95bcf576fada459115a/pandas-2.2.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:63cc132e40a2e084cf01adf0775b15ac515ba905d7dcca47e9a251819c575ef3", size = 16744420 },
+ { url = "https://files.pythonhosted.org/packages/86/4a/03ed6b7ee323cf30404265c284cee9c65c56a212e0a08d9ee06984ba2240/pandas-2.2.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:29401dbfa9ad77319367d36940cd8a0b3a11aba16063e39632d98b0e931ddf32", size = 14440457 },
+ { url = "https://files.pythonhosted.org/packages/ed/8c/87ddf1fcb55d11f9f847e3c69bb1c6f8e46e2f40ab1a2d2abadb2401b007/pandas-2.2.3-cp311-cp311-win_amd64.whl", hash = "sha256:3fc6873a41186404dad67245896a6e440baacc92f5b716ccd1bc9ed2995ab2c5", size = 11617166 },
+ { url = "https://files.pythonhosted.org/packages/17/a3/fb2734118db0af37ea7433f57f722c0a56687e14b14690edff0cdb4b7e58/pandas-2.2.3-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:b1d432e8d08679a40e2a6d8b2f9770a5c21793a6f9f47fdd52c5ce1948a5a8a9", size = 12529893 },
+ { url = "https://files.pythonhosted.org/packages/e1/0c/ad295fd74bfac85358fd579e271cded3ac969de81f62dd0142c426b9da91/pandas-2.2.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:a5a1595fe639f5988ba6a8e5bc9649af3baf26df3998a0abe56c02609392e0a4", size = 11363475 },
+ { url = "https://files.pythonhosted.org/packages/c6/2a/4bba3f03f7d07207481fed47f5b35f556c7441acddc368ec43d6643c5777/pandas-2.2.3-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:5de54125a92bb4d1c051c0659e6fcb75256bf799a732a87184e5ea503965bce3", size = 15188645 },
+ { url = "https://files.pythonhosted.org/packages/38/f8/d8fddee9ed0d0c0f4a2132c1dfcf0e3e53265055da8df952a53e7eaf178c/pandas-2.2.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fffb8ae78d8af97f849404f21411c95062db1496aeb3e56f146f0355c9989319", size = 12739445 },
+ { url = "https://files.pythonhosted.org/packages/20/e8/45a05d9c39d2cea61ab175dbe6a2de1d05b679e8de2011da4ee190d7e748/pandas-2.2.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:6dfcb5ee8d4d50c06a51c2fffa6cff6272098ad6540aed1a76d15fb9318194d8", size = 16359235 },
+ { url = "https://files.pythonhosted.org/packages/1d/99/617d07a6a5e429ff90c90da64d428516605a1ec7d7bea494235e1c3882de/pandas-2.2.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:062309c1b9ea12a50e8ce661145c6aab431b1e99530d3cd60640e255778bd43a", size = 14056756 },
+ { url = "https://files.pythonhosted.org/packages/29/d4/1244ab8edf173a10fd601f7e13b9566c1b525c4f365d6bee918e68381889/pandas-2.2.3-cp312-cp312-win_amd64.whl", hash = "sha256:59ef3764d0fe818125a5097d2ae867ca3fa64df032331b7e0917cf5d7bf66b13", size = 11504248 },
+ { url = "https://files.pythonhosted.org/packages/64/22/3b8f4e0ed70644e85cfdcd57454686b9057c6c38d2f74fe4b8bc2527214a/pandas-2.2.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:f00d1345d84d8c86a63e476bb4955e46458b304b9575dcf71102b5c705320015", size = 12477643 },
+ { url = "https://files.pythonhosted.org/packages/e4/93/b3f5d1838500e22c8d793625da672f3eec046b1a99257666c94446969282/pandas-2.2.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:3508d914817e153ad359d7e069d752cdd736a247c322d932eb89e6bc84217f28", size = 11281573 },
+ { url = "https://files.pythonhosted.org/packages/f5/94/6c79b07f0e5aab1dcfa35a75f4817f5c4f677931d4234afcd75f0e6a66ca/pandas-2.2.3-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:22a9d949bfc9a502d320aa04e5d02feab689d61da4e7764b62c30b991c42c5f0", size = 15196085 },
+ { url = "https://files.pythonhosted.org/packages/e8/31/aa8da88ca0eadbabd0a639788a6da13bb2ff6edbbb9f29aa786450a30a91/pandas-2.2.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f3a255b2c19987fbbe62a9dfd6cff7ff2aa9ccab3fc75218fd4b7530f01efa24", size = 12711809 },
+ { url = "https://files.pythonhosted.org/packages/ee/7c/c6dbdb0cb2a4344cacfb8de1c5808ca885b2e4dcfde8008266608f9372af/pandas-2.2.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:800250ecdadb6d9c78eae4990da62743b857b470883fa27f652db8bdde7f6659", size = 16356316 },
+ { url = "https://files.pythonhosted.org/packages/57/b7/8b757e7d92023b832869fa8881a992696a0bfe2e26f72c9ae9f255988d42/pandas-2.2.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:6374c452ff3ec675a8f46fd9ab25c4ad0ba590b71cf0656f8b6daa5202bca3fb", size = 14022055 },
+ { url = "https://files.pythonhosted.org/packages/3b/bc/4b18e2b8c002572c5a441a64826252ce5da2aa738855747247a971988043/pandas-2.2.3-cp313-cp313-win_amd64.whl", hash = "sha256:61c5ad4043f791b61dd4752191d9f07f0ae412515d59ba8f005832a532f8736d", size = 11481175 },
+ { url = "https://files.pythonhosted.org/packages/76/a3/a5d88146815e972d40d19247b2c162e88213ef51c7c25993942c39dbf41d/pandas-2.2.3-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:3b71f27954685ee685317063bf13c7709a7ba74fc996b84fc6821c59b0f06468", size = 12615650 },
+ { url = "https://files.pythonhosted.org/packages/9c/8c/f0fd18f6140ddafc0c24122c8a964e48294acc579d47def376fef12bcb4a/pandas-2.2.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:38cf8125c40dae9d5acc10fa66af8ea6fdf760b2714ee482ca691fc66e6fcb18", size = 11290177 },
+ { url = "https://files.pythonhosted.org/packages/ed/f9/e995754eab9c0f14c6777401f7eece0943840b7a9fc932221c19d1abee9f/pandas-2.2.3-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:ba96630bc17c875161df3818780af30e43be9b166ce51c9a18c1feae342906c2", size = 14651526 },
+ { url = "https://files.pythonhosted.org/packages/25/b0/98d6ae2e1abac4f35230aa756005e8654649d305df9a28b16b9ae4353bff/pandas-2.2.3-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1db71525a1538b30142094edb9adc10be3f3e176748cd7acc2240c2f2e5aa3a4", size = 11871013 },
+ { url = "https://files.pythonhosted.org/packages/cc/57/0f72a10f9db6a4628744c8e8f0df4e6e21de01212c7c981d31e50ffc8328/pandas-2.2.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:15c0e1e02e93116177d29ff83e8b1619c93ddc9c49083f237d4312337a61165d", size = 15711620 },
+ { url = "https://files.pythonhosted.org/packages/ab/5f/b38085618b950b79d2d9164a711c52b10aefc0ae6833b96f626b7021b2ed/pandas-2.2.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:ad5b65698ab28ed8d7f18790a0dc58005c7629f227be9ecc1072aa74c0c1d43a", size = 13098436 },
+ { url = "https://files.pythonhosted.org/packages/ca/8c/8848a4c9b8fdf5a534fe2077af948bf53cd713d77ffbcd7bd15710348fd7/pandas-2.2.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:bc6b93f9b966093cb0fd62ff1a7e4c09e6d546ad7c1de191767baffc57628f39", size = 12595535 },
+ { url = "https://files.pythonhosted.org/packages/9c/b9/5cead4f63b6d31bdefeb21a679bc5a7f4aaf262ca7e07e2bc1c341b68470/pandas-2.2.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:5dbca4c1acd72e8eeef4753eeca07de9b1db4f398669d5994086f788a5d7cc30", size = 11319822 },
+ { url = "https://files.pythonhosted.org/packages/31/af/89e35619fb573366fa68dc26dad6ad2c08c17b8004aad6d98f1a31ce4bb3/pandas-2.2.3-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:8cd6d7cc958a3910f934ea8dbdf17b2364827bb4dafc38ce6eef6bb3d65ff09c", size = 15625439 },
+ { url = "https://files.pythonhosted.org/packages/3d/dd/bed19c2974296661493d7acc4407b1d2db4e2a482197df100f8f965b6225/pandas-2.2.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:99df71520d25fade9db7c1076ac94eb994f4d2673ef2aa2e86ee039b6746d20c", size = 13068928 },
+ { url = "https://files.pythonhosted.org/packages/31/a3/18508e10a31ea108d746c848b5a05c0711e0278fa0d6f1c52a8ec52b80a5/pandas-2.2.3-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:31d0ced62d4ea3e231a9f228366919a5ea0b07440d9d4dac345376fd8e1477ea", size = 16783266 },
+ { url = "https://files.pythonhosted.org/packages/c4/a5/3429bd13d82bebc78f4d78c3945efedef63a7cd0c15c17b2eeb838d1121f/pandas-2.2.3-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:7eee9e7cea6adf3e3d24e304ac6b8300646e2a5d1cd3a3c2abed9101b0846761", size = 14450871 },
+ { url = "https://files.pythonhosted.org/packages/2f/49/5c30646e96c684570925b772eac4eb0a8cb0ca590fa978f56c5d3ae73ea1/pandas-2.2.3-cp39-cp39-win_amd64.whl", hash = "sha256:4850ba03528b6dd51d6c5d273c46f183f39a9baf3f0143e566b89450965b105e", size = 11618011 },
+]
+
+[[package]]
+name = "pandas-stubs"
+version = "2.2.2.240807"
+source = { registry = "https://pypi.org/simple" }
+resolution-markers = [
+ "python_full_version < '3.10'",
+]
+dependencies = [
+ { name = "numpy", version = "2.0.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" },
+ { name = "types-pytz", marker = "python_full_version < '3.10'" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/1f/df/0da95bc75c76f1e012e0bc0b76da31faaf4254e94b9870f25e6311145e98/pandas_stubs-2.2.2.240807.tar.gz", hash = "sha256:64a559725a57a449f46225fbafc422520b7410bff9252b661a225b5559192a93", size = 103095 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/0a/f9/22c91632ea1b4c6165952f677bf9ad95f9ac36ffd7ef3e6450144e6d8b1a/pandas_stubs-2.2.2.240807-py3-none-any.whl", hash = "sha256:893919ad82be4275f0d07bb47a95d08bae580d3fdea308a7acfcb3f02e76186e", size = 157069 },
+]
+
+[[package]]
+name = "pandas-stubs"
+version = "2.2.3.241126"
+source = { registry = "https://pypi.org/simple" }
+resolution-markers = [
+ "python_full_version >= '3.12'",
+ "python_full_version == '3.11.*'",
+ "python_full_version == '3.10.*'",
+]
+dependencies = [
+ { name = "numpy", version = "2.2.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" },
+ { name = "types-pytz", marker = "python_full_version >= '3.10'" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/90/86/93c545d149c3e1fe1c4c55478cc3a69859d0ea3467e1d9892e9eb28cb1e7/pandas_stubs-2.2.3.241126.tar.gz", hash = "sha256:cf819383c6d9ae7d4dabf34cd47e1e45525bb2f312e6ad2939c2c204cb708acd", size = 104204 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/6f/ab/ed42acf15bab2e86e5c49fad4aa038315233c4c2d22f41b49faa4d837516/pandas_stubs-2.2.3.241126-py3-none-any.whl", hash = "sha256:74aa79c167af374fe97068acc90776c0ebec5266a6e5c69fe11e9c2cf51f2267", size = 158280 },
+]
+
+[[package]]
+name = "parso"
+version = "0.8.4"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/66/94/68e2e17afaa9169cf6412ab0f28623903be73d1b32e208d9e8e541bb086d/parso-0.8.4.tar.gz", hash = "sha256:eb3a7b58240fb99099a345571deecc0f9540ea5f4dd2fe14c2a99d6b281ab92d", size = 400609 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/c6/ac/dac4a63f978e4dcb3c6d3a78c4d8e0192a113d288502a1216950c41b1027/parso-0.8.4-py2.py3-none-any.whl", hash = "sha256:a418670a20291dacd2dddc80c377c5c3791378ee1e8d12bffc35420643d43f18", size = 103650 },
+]
+
+[[package]]
+name = "pathspec"
+version = "0.12.1"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/ca/bc/f35b8446f4531a7cb215605d100cd88b7ac6f44ab3fc94870c120ab3adbf/pathspec-0.12.1.tar.gz", hash = "sha256:a482d51503a1ab33b1c67a6c3813a26953dbdc71c31dacaef9a838c4e29f5712", size = 51043 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/cc/20/ff623b09d963f88bfde16306a54e12ee5ea43e9b597108672ff3a408aad6/pathspec-0.12.1-py3-none-any.whl", hash = "sha256:a0d503e138a4c123b27490a4f7beda6a01c6f288df0e4a8b79c7eb0dc7b4cc08", size = 31191 },
+]
+
+[[package]]
+name = "pexpect"
+version = "4.9.0"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "ptyprocess" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/42/92/cc564bf6381ff43ce1f4d06852fc19a2f11d180f23dc32d9588bee2f149d/pexpect-4.9.0.tar.gz", hash = "sha256:ee7d41123f3c9911050ea2c2dac107568dc43b2d3b0c7557a33212c398ead30f", size = 166450 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/9e/c3/059298687310d527a58bb01f3b1965787ee3b40dce76752eda8b44e9a2c5/pexpect-4.9.0-py2.py3-none-any.whl", hash = "sha256:7236d1e080e4936be2dc3e326cec0af72acf9212a7e1d060210e70a47e253523", size = 63772 },
+]
+
+[[package]]
+name = "pillow"
+version = "11.1.0"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/f3/af/c097e544e7bd278333db77933e535098c259609c4eb3b85381109602fb5b/pillow-11.1.0.tar.gz", hash = "sha256:368da70808b36d73b4b390a8ffac11069f8a5c85f29eff1f1b01bcf3ef5b2a20", size = 46742715 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/50/1c/2dcea34ac3d7bc96a1fd1bd0a6e06a57c67167fec2cff8d95d88229a8817/pillow-11.1.0-cp310-cp310-macosx_10_10_x86_64.whl", hash = "sha256:e1abe69aca89514737465752b4bcaf8016de61b3be1397a8fc260ba33321b3a8", size = 3229983 },
+ { url = "https://files.pythonhosted.org/packages/14/ca/6bec3df25e4c88432681de94a3531cc738bd85dea6c7aa6ab6f81ad8bd11/pillow-11.1.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c640e5a06869c75994624551f45e5506e4256562ead981cce820d5ab39ae2192", size = 3101831 },
+ { url = "https://files.pythonhosted.org/packages/d4/2c/668e18e5521e46eb9667b09e501d8e07049eb5bfe39d56be0724a43117e6/pillow-11.1.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a07dba04c5e22824816b2615ad7a7484432d7f540e6fa86af60d2de57b0fcee2", size = 4314074 },
+ { url = "https://files.pythonhosted.org/packages/02/80/79f99b714f0fc25f6a8499ecfd1f810df12aec170ea1e32a4f75746051ce/pillow-11.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e267b0ed063341f3e60acd25c05200df4193e15a4a5807075cd71225a2386e26", size = 4394933 },
+ { url = "https://files.pythonhosted.org/packages/81/aa/8d4ad25dc11fd10a2001d5b8a80fdc0e564ac33b293bdfe04ed387e0fd95/pillow-11.1.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:bd165131fd51697e22421d0e467997ad31621b74bfc0b75956608cb2906dda07", size = 4353349 },
+ { url = "https://files.pythonhosted.org/packages/84/7a/cd0c3eaf4a28cb2a74bdd19129f7726277a7f30c4f8424cd27a62987d864/pillow-11.1.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:abc56501c3fd148d60659aae0af6ddc149660469082859fa7b066a298bde9482", size = 4476532 },
+ { url = "https://files.pythonhosted.org/packages/8f/8b/a907fdd3ae8f01c7670dfb1499c53c28e217c338b47a813af8d815e7ce97/pillow-11.1.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:54ce1c9a16a9561b6d6d8cb30089ab1e5eb66918cb47d457bd996ef34182922e", size = 4279789 },
+ { url = "https://files.pythonhosted.org/packages/6f/9a/9f139d9e8cccd661c3efbf6898967a9a337eb2e9be2b454ba0a09533100d/pillow-11.1.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:73ddde795ee9b06257dac5ad42fcb07f3b9b813f8c1f7f870f402f4dc54b5269", size = 4413131 },
+ { url = "https://files.pythonhosted.org/packages/a8/68/0d8d461f42a3f37432203c8e6df94da10ac8081b6d35af1c203bf3111088/pillow-11.1.0-cp310-cp310-win32.whl", hash = "sha256:3a5fe20a7b66e8135d7fd617b13272626a28278d0e578c98720d9ba4b2439d49", size = 2291213 },
+ { url = "https://files.pythonhosted.org/packages/14/81/d0dff759a74ba87715509af9f6cb21fa21d93b02b3316ed43bda83664db9/pillow-11.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:b6123aa4a59d75f06e9dd3dac5bf8bc9aa383121bb3dd9a7a612e05eabc9961a", size = 2625725 },
+ { url = "https://files.pythonhosted.org/packages/ce/1f/8d50c096a1d58ef0584ddc37e6f602828515219e9d2428e14ce50f5ecad1/pillow-11.1.0-cp310-cp310-win_arm64.whl", hash = "sha256:a76da0a31da6fcae4210aa94fd779c65c75786bc9af06289cd1c184451ef7a65", size = 2375213 },
+ { url = "https://files.pythonhosted.org/packages/dd/d6/2000bfd8d5414fb70cbbe52c8332f2283ff30ed66a9cde42716c8ecbe22c/pillow-11.1.0-cp311-cp311-macosx_10_10_x86_64.whl", hash = "sha256:e06695e0326d05b06833b40b7ef477e475d0b1ba3a6d27da1bb48c23209bf457", size = 3229968 },
+ { url = "https://files.pythonhosted.org/packages/d9/45/3fe487010dd9ce0a06adf9b8ff4f273cc0a44536e234b0fad3532a42c15b/pillow-11.1.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:96f82000e12f23e4f29346e42702b6ed9a2f2fea34a740dd5ffffcc8c539eb35", size = 3101806 },
+ { url = "https://files.pythonhosted.org/packages/e3/72/776b3629c47d9d5f1c160113158a7a7ad177688d3a1159cd3b62ded5a33a/pillow-11.1.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a3cd561ded2cf2bbae44d4605837221b987c216cff94f49dfeed63488bb228d2", size = 4322283 },
+ { url = "https://files.pythonhosted.org/packages/e4/c2/e25199e7e4e71d64eeb869f5b72c7ddec70e0a87926398785ab944d92375/pillow-11.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f189805c8be5ca5add39e6f899e6ce2ed824e65fb45f3c28cb2841911da19070", size = 4402945 },
+ { url = "https://files.pythonhosted.org/packages/c1/ed/51d6136c9d5911f78632b1b86c45241c712c5a80ed7fa7f9120a5dff1eba/pillow-11.1.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:dd0052e9db3474df30433f83a71b9b23bd9e4ef1de13d92df21a52c0303b8ab6", size = 4361228 },
+ { url = "https://files.pythonhosted.org/packages/48/a4/fbfe9d5581d7b111b28f1d8c2762dee92e9821bb209af9fa83c940e507a0/pillow-11.1.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:837060a8599b8f5d402e97197d4924f05a2e0d68756998345c829c33186217b1", size = 4484021 },
+ { url = "https://files.pythonhosted.org/packages/39/db/0b3c1a5018117f3c1d4df671fb8e47d08937f27519e8614bbe86153b65a5/pillow-11.1.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:aa8dd43daa836b9a8128dbe7d923423e5ad86f50a7a14dc688194b7be5c0dea2", size = 4287449 },
+ { url = "https://files.pythonhosted.org/packages/d9/58/bc128da7fea8c89fc85e09f773c4901e95b5936000e6f303222490c052f3/pillow-11.1.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:0a2f91f8a8b367e7a57c6e91cd25af510168091fb89ec5146003e424e1558a96", size = 4419972 },
+ { url = "https://files.pythonhosted.org/packages/5f/bb/58f34379bde9fe197f51841c5bbe8830c28bbb6d3801f16a83b8f2ad37df/pillow-11.1.0-cp311-cp311-win32.whl", hash = "sha256:c12fc111ef090845de2bb15009372175d76ac99969bdf31e2ce9b42e4b8cd88f", size = 2291201 },
+ { url = "https://files.pythonhosted.org/packages/3a/c6/fce9255272bcf0c39e15abd2f8fd8429a954cf344469eaceb9d0d1366913/pillow-11.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:fbd43429d0d7ed6533b25fc993861b8fd512c42d04514a0dd6337fb3ccf22761", size = 2625686 },
+ { url = "https://files.pythonhosted.org/packages/c8/52/8ba066d569d932365509054859f74f2a9abee273edcef5cd75e4bc3e831e/pillow-11.1.0-cp311-cp311-win_arm64.whl", hash = "sha256:f7955ecf5609dee9442cbface754f2c6e541d9e6eda87fad7f7a989b0bdb9d71", size = 2375194 },
+ { url = "https://files.pythonhosted.org/packages/95/20/9ce6ed62c91c073fcaa23d216e68289e19d95fb8188b9fb7a63d36771db8/pillow-11.1.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:2062ffb1d36544d42fcaa277b069c88b01bb7298f4efa06731a7fd6cc290b81a", size = 3226818 },
+ { url = "https://files.pythonhosted.org/packages/b9/d8/f6004d98579a2596c098d1e30d10b248798cceff82d2b77aa914875bfea1/pillow-11.1.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:a85b653980faad27e88b141348707ceeef8a1186f75ecc600c395dcac19f385b", size = 3101662 },
+ { url = "https://files.pythonhosted.org/packages/08/d9/892e705f90051c7a2574d9f24579c9e100c828700d78a63239676f960b74/pillow-11.1.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9409c080586d1f683df3f184f20e36fb647f2e0bc3988094d4fd8c9f4eb1b3b3", size = 4329317 },
+ { url = "https://files.pythonhosted.org/packages/8c/aa/7f29711f26680eab0bcd3ecdd6d23ed6bce180d82e3f6380fb7ae35fcf3b/pillow-11.1.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7fdadc077553621911f27ce206ffcbec7d3f8d7b50e0da39f10997e8e2bb7f6a", size = 4412999 },
+ { url = "https://files.pythonhosted.org/packages/c8/c4/8f0fe3b9e0f7196f6d0bbb151f9fba323d72a41da068610c4c960b16632a/pillow-11.1.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:93a18841d09bcdd774dcdc308e4537e1f867b3dec059c131fde0327899734aa1", size = 4368819 },
+ { url = "https://files.pythonhosted.org/packages/38/0d/84200ed6a871ce386ddc82904bfadc0c6b28b0c0ec78176871a4679e40b3/pillow-11.1.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:9aa9aeddeed452b2f616ff5507459e7bab436916ccb10961c4a382cd3e03f47f", size = 4496081 },
+ { url = "https://files.pythonhosted.org/packages/84/9c/9bcd66f714d7e25b64118e3952d52841a4babc6d97b6d28e2261c52045d4/pillow-11.1.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:3cdcdb0b896e981678eee140d882b70092dac83ac1cdf6b3a60e2216a73f2b91", size = 4296513 },
+ { url = "https://files.pythonhosted.org/packages/db/61/ada2a226e22da011b45f7104c95ebda1b63dcbb0c378ad0f7c2a710f8fd2/pillow-11.1.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:36ba10b9cb413e7c7dfa3e189aba252deee0602c86c309799da5a74009ac7a1c", size = 4431298 },
+ { url = "https://files.pythonhosted.org/packages/e7/c4/fc6e86750523f367923522014b821c11ebc5ad402e659d8c9d09b3c9d70c/pillow-11.1.0-cp312-cp312-win32.whl", hash = "sha256:cfd5cd998c2e36a862d0e27b2df63237e67273f2fc78f47445b14e73a810e7e6", size = 2291630 },
+ { url = "https://files.pythonhosted.org/packages/08/5c/2104299949b9d504baf3f4d35f73dbd14ef31bbd1ddc2c1b66a5b7dfda44/pillow-11.1.0-cp312-cp312-win_amd64.whl", hash = "sha256:a697cd8ba0383bba3d2d3ada02b34ed268cb548b369943cd349007730c92bddf", size = 2626369 },
+ { url = "https://files.pythonhosted.org/packages/37/f3/9b18362206b244167c958984b57c7f70a0289bfb59a530dd8af5f699b910/pillow-11.1.0-cp312-cp312-win_arm64.whl", hash = "sha256:4dd43a78897793f60766563969442020e90eb7847463eca901e41ba186a7d4a5", size = 2375240 },
+ { url = "https://files.pythonhosted.org/packages/b3/31/9ca79cafdce364fd5c980cd3416c20ce1bebd235b470d262f9d24d810184/pillow-11.1.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:ae98e14432d458fc3de11a77ccb3ae65ddce70f730e7c76140653048c71bfcbc", size = 3226640 },
+ { url = "https://files.pythonhosted.org/packages/ac/0f/ff07ad45a1f172a497aa393b13a9d81a32e1477ef0e869d030e3c1532521/pillow-11.1.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:cc1331b6d5a6e144aeb5e626f4375f5b7ae9934ba620c0ac6b3e43d5e683a0f0", size = 3101437 },
+ { url = "https://files.pythonhosted.org/packages/08/2f/9906fca87a68d29ec4530be1f893149e0cb64a86d1f9f70a7cfcdfe8ae44/pillow-11.1.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:758e9d4ef15d3560214cddbc97b8ef3ef86ce04d62ddac17ad39ba87e89bd3b1", size = 4326605 },
+ { url = "https://files.pythonhosted.org/packages/b0/0f/f3547ee15b145bc5c8b336401b2d4c9d9da67da9dcb572d7c0d4103d2c69/pillow-11.1.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b523466b1a31d0dcef7c5be1f20b942919b62fd6e9a9be199d035509cbefc0ec", size = 4411173 },
+ { url = "https://files.pythonhosted.org/packages/b1/df/bf8176aa5db515c5de584c5e00df9bab0713548fd780c82a86cba2c2fedb/pillow-11.1.0-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:9044b5e4f7083f209c4e35aa5dd54b1dd5b112b108648f5c902ad586d4f945c5", size = 4369145 },
+ { url = "https://files.pythonhosted.org/packages/de/7c/7433122d1cfadc740f577cb55526fdc39129a648ac65ce64db2eb7209277/pillow-11.1.0-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:3764d53e09cdedd91bee65c2527815d315c6b90d7b8b79759cc48d7bf5d4f114", size = 4496340 },
+ { url = "https://files.pythonhosted.org/packages/25/46/dd94b93ca6bd555588835f2504bd90c00d5438fe131cf01cfa0c5131a19d/pillow-11.1.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:31eba6bbdd27dde97b0174ddf0297d7a9c3a507a8a1480e1e60ef914fe23d352", size = 4296906 },
+ { url = "https://files.pythonhosted.org/packages/a8/28/2f9d32014dfc7753e586db9add35b8a41b7a3b46540e965cb6d6bc607bd2/pillow-11.1.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:b5d658fbd9f0d6eea113aea286b21d3cd4d3fd978157cbf2447a6035916506d3", size = 4431759 },
+ { url = "https://files.pythonhosted.org/packages/33/48/19c2cbe7403870fbe8b7737d19eb013f46299cdfe4501573367f6396c775/pillow-11.1.0-cp313-cp313-win32.whl", hash = "sha256:f86d3a7a9af5d826744fabf4afd15b9dfef44fe69a98541f666f66fbb8d3fef9", size = 2291657 },
+ { url = "https://files.pythonhosted.org/packages/3b/ad/285c556747d34c399f332ba7c1a595ba245796ef3e22eae190f5364bb62b/pillow-11.1.0-cp313-cp313-win_amd64.whl", hash = "sha256:593c5fd6be85da83656b93ffcccc2312d2d149d251e98588b14fbc288fd8909c", size = 2626304 },
+ { url = "https://files.pythonhosted.org/packages/e5/7b/ef35a71163bf36db06e9c8729608f78dedf032fc8313d19bd4be5c2588f3/pillow-11.1.0-cp313-cp313-win_arm64.whl", hash = "sha256:11633d58b6ee5733bde153a8dafd25e505ea3d32e261accd388827ee987baf65", size = 2375117 },
+ { url = "https://files.pythonhosted.org/packages/79/30/77f54228401e84d6791354888549b45824ab0ffde659bafa67956303a09f/pillow-11.1.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:70ca5ef3b3b1c4a0812b5c63c57c23b63e53bc38e758b37a951e5bc466449861", size = 3230060 },
+ { url = "https://files.pythonhosted.org/packages/ce/b1/56723b74b07dd64c1010fee011951ea9c35a43d8020acd03111f14298225/pillow-11.1.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:8000376f139d4d38d6851eb149b321a52bb8893a88dae8ee7d95840431977081", size = 3106192 },
+ { url = "https://files.pythonhosted.org/packages/e1/cd/7bf7180e08f80a4dcc6b4c3a0aa9e0b0ae57168562726a05dc8aa8fa66b0/pillow-11.1.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9ee85f0696a17dd28fbcfceb59f9510aa71934b483d1f5601d1030c3c8304f3c", size = 4446805 },
+ { url = "https://files.pythonhosted.org/packages/97/42/87c856ea30c8ed97e8efbe672b58c8304dee0573f8c7cab62ae9e31db6ae/pillow-11.1.0-cp313-cp313t-manylinux_2_28_x86_64.whl", hash = "sha256:dd0e081319328928531df7a0e63621caf67652c8464303fd102141b785ef9547", size = 4530623 },
+ { url = "https://files.pythonhosted.org/packages/ff/41/026879e90c84a88e33fb00cc6bd915ac2743c67e87a18f80270dfe3c2041/pillow-11.1.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:e63e4e5081de46517099dc30abe418122f54531a6ae2ebc8680bcd7096860eab", size = 4465191 },
+ { url = "https://files.pythonhosted.org/packages/e5/fb/a7960e838bc5df57a2ce23183bfd2290d97c33028b96bde332a9057834d3/pillow-11.1.0-cp313-cp313t-win32.whl", hash = "sha256:dda60aa465b861324e65a78c9f5cf0f4bc713e4309f83bc387be158b077963d9", size = 2295494 },
+ { url = "https://files.pythonhosted.org/packages/d7/6c/6ec83ee2f6f0fda8d4cf89045c6be4b0373ebfc363ba8538f8c999f63fcd/pillow-11.1.0-cp313-cp313t-win_amd64.whl", hash = "sha256:ad5db5781c774ab9a9b2c4302bbf0c1014960a0a7be63278d13ae6fdf88126fe", size = 2631595 },
+ { url = "https://files.pythonhosted.org/packages/cf/6c/41c21c6c8af92b9fea313aa47c75de49e2f9a467964ee33eb0135d47eb64/pillow-11.1.0-cp313-cp313t-win_arm64.whl", hash = "sha256:67cd427c68926108778a9005f2a04adbd5e67c442ed21d95389fe1d595458756", size = 2377651 },
+ { url = "https://files.pythonhosted.org/packages/9a/1f/9df5ac77491fddd2e36c352d16976dc11fbe6ab842f5df85fd7e31b847b9/pillow-11.1.0-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:bf902d7413c82a1bfa08b06a070876132a5ae6b2388e2712aab3a7cbc02205c6", size = 3229995 },
+ { url = "https://files.pythonhosted.org/packages/a6/62/c7b359e924dca274173b04922ac06aa63614f7e934d132f2fe1d852509aa/pillow-11.1.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:c1eec9d950b6fe688edee07138993e54ee4ae634c51443cfb7c1e7613322718e", size = 3101890 },
+ { url = "https://files.pythonhosted.org/packages/7b/63/136f21340a434de895b62bcf2c386005a8aa24066c4facd619f5e0e9f283/pillow-11.1.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8e275ee4cb11c262bd108ab2081f750db2a1c0b8c12c1897f27b160c8bd57bbc", size = 4310366 },
+ { url = "https://files.pythonhosted.org/packages/f6/46/0bd0ca03d9d1164a7fa33d285ef6d1c438e963d0c8770e4c5b3737ef5abe/pillow-11.1.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4db853948ce4e718f2fc775b75c37ba2efb6aaea41a1a5fc57f0af59eee774b2", size = 4391582 },
+ { url = "https://files.pythonhosted.org/packages/0c/55/f182db572b28bd833b8e806f933f782ceb2df64c40e4d8bd3d4226a46eca/pillow-11.1.0-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:ab8a209b8485d3db694fa97a896d96dd6533d63c22829043fd9de627060beade", size = 4350278 },
+ { url = "https://files.pythonhosted.org/packages/75/fb/e330fdbbcbc4744214b5f53b84d9d8a9f4ffbebc2e9c2ac10475386e3296/pillow-11.1.0-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:54251ef02a2309b5eec99d151ebf5c9904b77976c8abdcbce7891ed22df53884", size = 4471768 },
+ { url = "https://files.pythonhosted.org/packages/eb/51/20ee6c4da4448d7a67ffb720a5fcdb965115a78e211a1f58f9845ae15f86/pillow-11.1.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:5bb94705aea800051a743aa4874bb1397d4695fb0583ba5e425ee0328757f196", size = 4276549 },
+ { url = "https://files.pythonhosted.org/packages/37/f2/a25c0bdaa6d6fd5cc3d4a6f65b5a7ea46e7af58bee00a98efe0a5af79c58/pillow-11.1.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:89dbdb3e6e9594d512780a5a1c42801879628b38e3efc7038094430844e271d8", size = 4409350 },
+ { url = "https://files.pythonhosted.org/packages/12/a7/06687947604cd3e47abeea1b78b65d34ffce7feab03cfe0dd985f115dca3/pillow-11.1.0-cp39-cp39-win32.whl", hash = "sha256:e5449ca63da169a2e6068dd0e2fcc8d91f9558aba89ff6d02121ca8ab11e79e5", size = 2291271 },
+ { url = "https://files.pythonhosted.org/packages/21/a6/f51d47675940b5c63b08ff0575b3518428b4acb891f88526fa4ee1edab6f/pillow-11.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:3362c6ca227e65c54bf71a5f88b3d4565ff1bcbc63ae72c34b07bbb1cc59a43f", size = 2625783 },
+ { url = "https://files.pythonhosted.org/packages/95/56/97750bd33e68648fa432dfadcb8ede7624bd905822d42262d34bcebdd9d7/pillow-11.1.0-cp39-cp39-win_arm64.whl", hash = "sha256:b20be51b37a75cc54c2c55def3fa2c65bb94ba859dde241cd0a4fd302de5ae0a", size = 2375193 },
+ { url = "https://files.pythonhosted.org/packages/fa/c5/389961578fb677b8b3244fcd934f720ed25a148b9a5cc81c91bdf59d8588/pillow-11.1.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:8c730dc3a83e5ac137fbc92dfcfe1511ce3b2b5d7578315b63dbbb76f7f51d90", size = 3198345 },
+ { url = "https://files.pythonhosted.org/packages/c4/fa/803c0e50ffee74d4b965229e816af55276eac1d5806712de86f9371858fd/pillow-11.1.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:7d33d2fae0e8b170b6a6c57400e077412240f6f5bb2a342cf1ee512a787942bb", size = 3072938 },
+ { url = "https://files.pythonhosted.org/packages/dc/67/2a3a5f8012b5d8c63fe53958ba906c1b1d0482ebed5618057ef4d22f8076/pillow-11.1.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a8d65b38173085f24bc07f8b6c505cbb7418009fa1a1fcb111b1f4961814a442", size = 3400049 },
+ { url = "https://files.pythonhosted.org/packages/e5/a0/514f0d317446c98c478d1872497eb92e7cde67003fed74f696441e647446/pillow-11.1.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:015c6e863faa4779251436db398ae75051469f7c903b043a48f078e437656f83", size = 3422431 },
+ { url = "https://files.pythonhosted.org/packages/cd/00/20f40a935514037b7d3f87adfc87d2c538430ea625b63b3af8c3f5578e72/pillow-11.1.0-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:d44ff19eea13ae4acdaaab0179fa68c0c6f2f45d66a4d8ec1eda7d6cecbcc15f", size = 3446208 },
+ { url = "https://files.pythonhosted.org/packages/28/3c/7de681727963043e093c72e6c3348411b0185eab3263100d4490234ba2f6/pillow-11.1.0-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:d3d8da4a631471dfaf94c10c85f5277b1f8e42ac42bade1ac67da4b4a7359b73", size = 3509746 },
+ { url = "https://files.pythonhosted.org/packages/41/67/936f9814bdd74b2dfd4822f1f7725ab5d8ff4103919a1664eb4874c58b2f/pillow-11.1.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:4637b88343166249fe8aa94e7c4a62a180c4b3898283bb5d3d2fd5fe10d8e4e0", size = 2626353 },
+]
+
+[[package]]
+name = "platformdirs"
+version = "4.3.6"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/13/fc/128cc9cb8f03208bdbf93d3aa862e16d376844a14f9a0ce5cf4507372de4/platformdirs-4.3.6.tar.gz", hash = "sha256:357fb2acbc885b0419afd3ce3ed34564c13c9b95c89360cd9563f73aa5e2b907", size = 21302 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/3c/a6/bc1012356d8ece4d66dd75c4b9fc6c1f6650ddd5991e421177d9f8f671be/platformdirs-4.3.6-py3-none-any.whl", hash = "sha256:73e575e1408ab8103900836b97580d5307456908a03e92031bab39e4554cc3fb", size = 18439 },
+]
+
+[[package]]
+name = "pluggy"
+version = "1.5.0"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/96/2d/02d4312c973c6050a18b314a5ad0b3210edb65a906f868e31c111dede4a6/pluggy-1.5.0.tar.gz", hash = "sha256:2cffa88e94fdc978c4c574f15f9e59b7f4201d439195c3715ca9e2486f1d0cf1", size = 67955 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/88/5f/e351af9a41f866ac3f1fac4ca0613908d9a41741cfcf2228f4ad853b697d/pluggy-1.5.0-py3-none-any.whl", hash = "sha256:44e1ad92c8ca002de6377e165f3e0f1be63266ab4d554740532335b9d75ea669", size = 20556 },
+]
+
+[[package]]
+name = "polars"
+version = "1.20.0"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/dd/8f/1005f24c8c413d8a393973fcb45e6085a2311bb513ee0c6674d438e99c31/polars-1.20.0.tar.gz", hash = "sha256:e8e9e3156fae02b58e276e5f2c16a5907a79b38617a9e2d731b533d87798f451", size = 4292434 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/93/ef/74d56f82bc2e7911276ffad8f24e7ae6f7a102ecab3b2e88b87e84243356/polars-1.20.0-cp39-abi3-macosx_10_12_x86_64.whl", hash = "sha256:9a313e10ea80b99a0d32bfb942b2260b9658155287b0c2ac5876323acaff4f2c", size = 32143323 },
+ { url = "https://files.pythonhosted.org/packages/dd/e1/51c7b2bc3037af89f1c109b61a2d2f44c411212df63dd0e9c6683b66d98e/polars-1.20.0-cp39-abi3-macosx_11_0_arm64.whl", hash = "sha256:4474bd004376599f7e4906bd350026cbbe805ba604121090578a97f63da15381", size = 28954418 },
+ { url = "https://files.pythonhosted.org/packages/2a/1a/862b8bf65182b261022292a1cd49728db876a1ef64ff377d6f7b17653886/polars-1.20.0-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4996e17cb6f57d9aeaf79f66c54ef2913cea7bd025410c076ef8c05d4f7d792a", size = 32850943 },
+ { url = "https://files.pythonhosted.org/packages/b7/33/1970863f0c1782a916299346d150c5bb8373d4e6827fabb8c37a0a2bcb8e/polars-1.20.0-cp39-abi3-manylinux_2_24_aarch64.whl", hash = "sha256:d488ffb92d4934d9c326fa2d0fb2e9a4e3c2c625c59f4a77a77e4acd4d5a0d66", size = 29885148 },
+ { url = "https://files.pythonhosted.org/packages/bb/2d/b29112da3e98ba55e8ba77f08a90312004d2e4be0fd6401ff7d5d71eae0a/polars-1.20.0-cp39-abi3-win_amd64.whl", hash = "sha256:5ce417d2b6d4f3b8f422fcb3482039e8076182cceacbd880175fe970c6f99c84", size = 32947632 },
+ { url = "https://files.pythonhosted.org/packages/60/da/245e5852342cab10c48dc788f7b3d39a1f926f783ea124f196ad783ea6aa/polars-1.20.0-cp39-abi3-win_arm64.whl", hash = "sha256:f474f3d65450138cd2dbab2d9b6041b8646c30fad0b28e6d62457788f994bf62", size = 29141207 },
+]
+
+[[package]]
+name = "prompt-toolkit"
+version = "3.0.48"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "wcwidth" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/2d/4f/feb5e137aff82f7c7f3248267b97451da3644f6cdc218edfe549fb354127/prompt_toolkit-3.0.48.tar.gz", hash = "sha256:d6623ab0477a80df74e646bdbc93621143f5caf104206aa29294d53de1a03d90", size = 424684 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/a9/6a/fd08d94654f7e67c52ca30523a178b3f8ccc4237fce4be90d39c938a831a/prompt_toolkit-3.0.48-py3-none-any.whl", hash = "sha256:f49a827f90062e411f1ce1f854f2aedb3c23353244f8108b89283587397ac10e", size = 386595 },
+]
+
+[[package]]
+name = "psutil"
+version = "6.1.1"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/1f/5a/07871137bb752428aa4b659f910b399ba6f291156bdea939be3e96cae7cb/psutil-6.1.1.tar.gz", hash = "sha256:cf8496728c18f2d0b45198f06895be52f36611711746b7f30c464b422b50e2f5", size = 508502 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/61/99/ca79d302be46f7bdd8321089762dd4476ee725fce16fc2b2e1dbba8cac17/psutil-6.1.1-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:fc0ed7fe2231a444fc219b9c42d0376e0a9a1a72f16c5cfa0f68d19f1a0663e8", size = 247511 },
+ { url = "https://files.pythonhosted.org/packages/0b/6b/73dbde0dd38f3782905d4587049b9be64d76671042fdcaf60e2430c6796d/psutil-6.1.1-cp36-abi3-macosx_11_0_arm64.whl", hash = "sha256:0bdd4eab935276290ad3cb718e9809412895ca6b5b334f5a9111ee6d9aff9377", size = 248985 },
+ { url = "https://files.pythonhosted.org/packages/17/38/c319d31a1d3f88c5b79c68b3116c129e5133f1822157dd6da34043e32ed6/psutil-6.1.1-cp36-abi3-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b6e06c20c05fe95a3d7302d74e7097756d4ba1247975ad6905441ae1b5b66003", size = 284488 },
+ { url = "https://files.pythonhosted.org/packages/9c/39/0f88a830a1c8a3aba27fededc642da37613c57cbff143412e3536f89784f/psutil-6.1.1-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:97f7cb9921fbec4904f522d972f0c0e1f4fabbdd4e0287813b21215074a0f160", size = 287477 },
+ { url = "https://files.pythonhosted.org/packages/47/da/99f4345d4ddf2845cb5b5bd0d93d554e84542d116934fde07a0c50bd4e9f/psutil-6.1.1-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:33431e84fee02bc84ea36d9e2c4a6d395d479c9dd9bba2376c1f6ee8f3a4e0b3", size = 289017 },
+ { url = "https://files.pythonhosted.org/packages/38/53/bd755c2896f4461fd4f36fa6a6dcb66a88a9e4b9fd4e5b66a77cf9d4a584/psutil-6.1.1-cp37-abi3-win32.whl", hash = "sha256:eaa912e0b11848c4d9279a93d7e2783df352b082f40111e078388701fd479e53", size = 250602 },
+ { url = "https://files.pythonhosted.org/packages/7b/d7/7831438e6c3ebbfa6e01a927127a6cb42ad3ab844247f3c5b96bea25d73d/psutil-6.1.1-cp37-abi3-win_amd64.whl", hash = "sha256:f35cfccb065fff93529d2afb4a2e89e363fe63ca1e4a5da22b603a85833c2649", size = 254444 },
+]
+
+[[package]]
+name = "psygnal"
+version = "0.11.1"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/bc/b0/194cfbcb76dbf9c4a1c4271ccc825b38406d20fb7f95fd18320c28708800/psygnal-0.11.1.tar.gz", hash = "sha256:f9b02ca246ab0adb108c4010b4a486e464f940543201074591e50370cd7b0cc0", size = 102103 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/92/bf/2dee9491518402489909c0613004d3a0f79672f27ce16aae774c5addc506/psygnal-0.11.1-cp310-cp310-macosx_10_16_arm64.whl", hash = "sha256:8d9187700fc608abefeb287bf2e0980a26c62471921ffd1a3cd223ccc554181b", size = 433484 },
+ { url = "https://files.pythonhosted.org/packages/66/0a/52b7e40f4c7ec82c9809c62e568ee9c117dd911d3f6f562ac3007a4ad969/psygnal-0.11.1-cp310-cp310-macosx_10_16_x86_64.whl", hash = "sha256:cec87aee468a1fe564094a64bc3c30edc86ce34d7bb37ab69332c7825b873396", size = 462250 },
+ { url = "https://files.pythonhosted.org/packages/c3/3f/ae610fd14cdbae8735344abfc7f67c76ff8bcf18e0e3c5f26a1ca590014e/psygnal-0.11.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7676e89225abc2f37ca7022c300ffd26fefaf21bdc894bc7c41dffbad5e969df", size = 727435 },
+ { url = "https://files.pythonhosted.org/packages/a5/93/8d91aef01261123640406d132add52973e16d74b6c6e63b6fb54cc261f1e/psygnal-0.11.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:c392f638aac2cdc4f13fffb904455224ae9b4dbb2f26d7f3264e4208fee5334d", size = 706104 },
+ { url = "https://files.pythonhosted.org/packages/a6/a8/ed06fe70c8bd03f02ab0c1df020f53f079a6dbae056eba0a91823c0d1242/psygnal-0.11.1-cp311-cp311-macosx_10_16_arm64.whl", hash = "sha256:3c04baec10f882cdf784a7312e23892416188417ad85607e6d1de2e8a9e70709", size = 427499 },
+ { url = "https://files.pythonhosted.org/packages/25/92/6dcab17c3bb91fa3f250ebdbb66de55332436da836c4c547c26e3942877e/psygnal-0.11.1-cp311-cp311-macosx_10_16_x86_64.whl", hash = "sha256:8f77317cbd11fbed5bfdd40ea41b4e551ee0cf37881cdbc325b67322af577485", size = 453373 },
+ { url = "https://files.pythonhosted.org/packages/84/6f/868f1d7d22c76b96e0c8a75f8eb196deaff83916ad2da7bd78d1d0f6a5df/psygnal-0.11.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:24e69ea57ee39e3677298f38a18828af87cdc0bf0aa64685d44259e608bae3ec", size = 717571 },
+ { url = "https://files.pythonhosted.org/packages/da/7d/24ca61d177b26e6ab89e9c520dca9c6341083920ab0ea8ac763a31b2b029/psygnal-0.11.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:d77f1a71fe9859c0335c87d92afe1b17c520a4137326810e94351839342d8fc7", size = 695336 },
+ { url = "https://files.pythonhosted.org/packages/33/5d/9b2d8f91a9198dda6ad0eaa276f975207b1314ac2d22a2f905f0a6e34524/psygnal-0.11.1-cp312-cp312-macosx_10_16_arm64.whl", hash = "sha256:0b55cb42e468f3a7de75392520778604fef2bc518b7df36c639b35ce4ed92016", size = 425244 },
+ { url = "https://files.pythonhosted.org/packages/c4/66/e1bd57a8efef6582141939876d014f86792adbbb8853bd475a1cbf3649ca/psygnal-0.11.1-cp312-cp312-macosx_10_16_x86_64.whl", hash = "sha256:c7dd3cf809c9c1127d90c6b11fbbd1eb2d66d512ccd4d5cab048786f13d11220", size = 444681 },
+ { url = "https://files.pythonhosted.org/packages/49/ad/8ee3f8ac1d59cf269ae2d55f7cac7c65fe3b3f41cada5d6a17bc2f4c5d6d/psygnal-0.11.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:885922a6e65ece9ff8ccf2b6810f435ca8067f410889f7a8fffb6b0d61421a0d", size = 743785 },
+ { url = "https://files.pythonhosted.org/packages/14/54/b29b854dff0e27bdaf42a7c1edc65f6d3ea35866e9d9250f1dbabf6381a0/psygnal-0.11.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:1c2388360a9ffcd1381e9b36d0f794287a270d58e69bf17658a194bbf86685c1", size = 725134 },
+ { url = "https://files.pythonhosted.org/packages/05/bd/134c50dea67e1adf510e89c055bc69ea1e6487dd68af10840c9443a0988d/psygnal-0.11.1-cp39-cp39-macosx_10_16_arm64.whl", hash = "sha256:c9dde42a2cdf34f9c5fe0cd7515e2ab1524e3207afb37d096733c7a3dcdf388a", size = 433826 },
+ { url = "https://files.pythonhosted.org/packages/b0/f8/db318ba1b1e1e31455e62b83fcf754a97d061ab59a3e1c11c612abe57e48/psygnal-0.11.1-cp39-cp39-macosx_10_16_x86_64.whl", hash = "sha256:c05f474b297e2577506b354132c3fed054f0444ccce6d431f299d3750c2ede4b", size = 462183 },
+ { url = "https://files.pythonhosted.org/packages/bc/0e/8bfb65ad186f36a52b2bfe6193f37f3b792f548d1ccfa302b5859bd8c648/psygnal-0.11.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:713dfb96a1315378ce9120376d975671ede3133de4985884a43d4b6b332faeee", size = 722929 },
+ { url = "https://files.pythonhosted.org/packages/b5/e3/ae3b178f0c0f9528a9b957f302800d65ddc6fcd47f18724006de6414fa85/psygnal-0.11.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:09c75d21eb090e2ffafb32893bc5d104b98ed237ed64bebccb45cca759c7dcf4", size = 700019 },
+ { url = "https://files.pythonhosted.org/packages/68/76/d5c5bf5a932ec2dcdc4a23565815a1cc5fd96b03b26ff3f647cdff5ea62c/psygnal-0.11.1-py3-none-any.whl", hash = "sha256:04255fe28828060a80320f8fda937c47bc0c21ca14f55a13eb7c494b165ea395", size = 76998 },
+]
+
+[[package]]
+name = "ptyprocess"
+version = "0.7.0"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/20/e5/16ff212c1e452235a90aeb09066144d0c5a6a8c0834397e03f5224495c4e/ptyprocess-0.7.0.tar.gz", hash = "sha256:5c5d0a3b48ceee0b48485e0c26037c0acd7d29765ca3fbb5cb3831d347423220", size = 70762 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/22/a6/858897256d0deac81a172289110f31629fc4cee19b6f01283303e18c8db3/ptyprocess-0.7.0-py2.py3-none-any.whl", hash = "sha256:4b41f3967fce3af57cc7e94b888626c18bf37a083e3651ca8feeb66d492fef35", size = 13993 },
+]
+
+[[package]]
+name = "pure-eval"
+version = "0.2.3"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/cd/05/0a34433a064256a578f1783a10da6df098ceaa4a57bbeaa96a6c0352786b/pure_eval-0.2.3.tar.gz", hash = "sha256:5f4e983f40564c576c7c8635ae88db5956bb2229d7e9237d03b3c0b0190eaf42", size = 19752 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/8e/37/efad0257dc6e593a18957422533ff0f87ede7c9c6ea010a2177d738fb82f/pure_eval-0.2.3-py3-none-any.whl", hash = "sha256:1db8e35b67b3d218d818ae653e27f06c3aa420901fa7b081ca98cbedc874e0d0", size = 11842 },
+]
+
+[[package]]
+name = "pyarrow"
+version = "19.0.0"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/7b/01/fe1fd04744c2aa038e5a11c7a4adb3d62bce09798695e54f7274b5977134/pyarrow-19.0.0.tar.gz", hash = "sha256:8d47c691765cf497aaeed4954d226568563f1b3b74ff61139f2d77876717084b", size = 1129096 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/1c/02/1ad80ffd3c558916858a49c83b6e494a9d93009bbebc603cf0cb8263bea7/pyarrow-19.0.0-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:c318eda14f6627966997a7d8c374a87d084a94e4e38e9abbe97395c215830e0c", size = 30686262 },
+ { url = "https://files.pythonhosted.org/packages/1b/f0/adab5f142eb8203db8bfbd3a816816e37a85423ae684567e7f3555658315/pyarrow-19.0.0-cp310-cp310-macosx_12_0_x86_64.whl", hash = "sha256:62ef8360ff256e960f57ce0299090fb86423afed5e46f18f1225f960e05aae3d", size = 32100005 },
+ { url = "https://files.pythonhosted.org/packages/94/8b/e674083610e5efc48d2f205c568d842cdfdf683d12f9ff0d546e38757722/pyarrow-19.0.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2795064647add0f16563e57e3d294dbfc067b723f0fd82ecd80af56dad15f503", size = 41144815 },
+ { url = "https://files.pythonhosted.org/packages/d5/fb/2726241a792b7f8a58789e5a63d1be9a5a4059206318fd0ff9485a578952/pyarrow-19.0.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a218670b26fb1bc74796458d97bcab072765f9b524f95b2fccad70158feb8b17", size = 42180380 },
+ { url = "https://files.pythonhosted.org/packages/7d/09/7aef12446d8e7002dfc07bb7bc71f594c1d5844ca78b364a49f07efb65b1/pyarrow-19.0.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:66732e39eaa2247996a6b04c8aa33e3503d351831424cdf8d2e9a0582ac54b34", size = 40515021 },
+ { url = "https://files.pythonhosted.org/packages/31/55/f05fc5608cc96060c2b24de505324d641888bd62d4eed2fa1dacd872a1e1/pyarrow-19.0.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:e675a3ad4732b92d72e4d24009707e923cab76b0d088e5054914f11a797ebe44", size = 42067488 },
+ { url = "https://files.pythonhosted.org/packages/f0/01/097653cec7a944c16313cb748a326771133c142034b252076bd84743b98d/pyarrow-19.0.0-cp310-cp310-win_amd64.whl", hash = "sha256:f094742275586cdd6b1a03655ccff3b24b2610c3af76f810356c4c71d24a2a6c", size = 25276726 },
+ { url = "https://files.pythonhosted.org/packages/82/42/fba3a35bef5833bf88ed35e6a810dc1781236e1d4f808d2df824a7d21819/pyarrow-19.0.0-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:8e3a839bf36ec03b4315dc924d36dcde5444a50066f1c10f8290293c0427b46a", size = 30711936 },
+ { url = "https://files.pythonhosted.org/packages/88/7a/0da93a3eaaf251a30e32f3221e874263cdcd366c2cd6b7c05293aad91152/pyarrow-19.0.0-cp311-cp311-macosx_12_0_x86_64.whl", hash = "sha256:ce42275097512d9e4e4a39aade58ef2b3798a93aa3026566b7892177c266f735", size = 32133182 },
+ { url = "https://files.pythonhosted.org/packages/2f/df/fe43b1c50d3100d0de53f988344118bc20362d0de005f8a407454fa565f8/pyarrow-19.0.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9348a0137568c45601b031a8d118275069435f151cbb77e6a08a27e8125f59d4", size = 41145489 },
+ { url = "https://files.pythonhosted.org/packages/45/bb/6f73b41b342a0342f2516a02db4aa97a4f9569cc35482a5c288090140cd4/pyarrow-19.0.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2a0144a712d990d60f7f42b7a31f0acaccf4c1e43e957f7b1ad58150d6f639c1", size = 42177823 },
+ { url = "https://files.pythonhosted.org/packages/23/7b/f038a96f421e453a71bd7a0f78d62b1b2ae9bcac06ed51179ca532e6a0a2/pyarrow-19.0.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:2a1a109dfda558eb011e5f6385837daffd920d54ca00669f7a11132d0b1e6042", size = 40530609 },
+ { url = "https://files.pythonhosted.org/packages/b8/39/a2a6714b471c000e6dd6af4495dce00d7d1332351b8e3170dfb9f91dad1f/pyarrow-19.0.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:be686bf625aa7b9bada18defb3a3ea3981c1099697239788ff111d87f04cd263", size = 42081534 },
+ { url = "https://files.pythonhosted.org/packages/6c/a3/8396fb06ca05d807e89980c177be26617aad15211ece3184e0caa730b8a6/pyarrow-19.0.0-cp311-cp311-win_amd64.whl", hash = "sha256:239ca66d9a05844bdf5af128861af525e14df3c9591bcc05bac25918e650d3a2", size = 25281090 },
+ { url = "https://files.pythonhosted.org/packages/bc/2e/152885f5ef421e80dae68b9c133ab261934f93a6d5e16b61d79c0ed597fb/pyarrow-19.0.0-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:a7bbe7109ab6198688b7079cbad5a8c22de4d47c4880d8e4847520a83b0d1b68", size = 30667964 },
+ { url = "https://files.pythonhosted.org/packages/80/c2/08bbee9a8610a47c9a1466845f405baf53a639ddd947c5133d8ba13544b6/pyarrow-19.0.0-cp312-cp312-macosx_12_0_x86_64.whl", hash = "sha256:4624c89d6f777c580e8732c27bb8e77fd1433b89707f17c04af7635dd9638351", size = 32125039 },
+ { url = "https://files.pythonhosted.org/packages/d2/56/06994df823212f5688d3c8bf4294928b12c9be36681872853655724d28c6/pyarrow-19.0.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2b6d3ce4288793350dc2d08d1e184fd70631ea22a4ff9ea5c4ff182130249d9b", size = 41140729 },
+ { url = "https://files.pythonhosted.org/packages/94/65/38ad577c98140a9db71e9e1e594b6adb58a7478a5afec6456a8ca2df7f70/pyarrow-19.0.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:450a7d27e840e4d9a384b5c77199d489b401529e75a3b7a3799d4cd7957f2f9c", size = 42202267 },
+ { url = "https://files.pythonhosted.org/packages/b6/1f/966b722251a7354114ccbb71cf1a83922023e69efd8945ebf628a851ec4c/pyarrow-19.0.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:a08e2a8a039a3f72afb67a6668180f09fddaa38fe0d21f13212b4aba4b5d2451", size = 40505858 },
+ { url = "https://files.pythonhosted.org/packages/3b/5e/6bc81aa7fc9affc7d1c03b912fbcc984ca56c2a18513684da267715dab7b/pyarrow-19.0.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:f43f5aef2a13d4d56adadae5720d1fed4c1356c993eda8b59dace4b5983843c1", size = 42084973 },
+ { url = "https://files.pythonhosted.org/packages/53/c3/2f56da818b6a4758cbd514957c67bd0f078ebffa5390ee2e2bf0f9e8defc/pyarrow-19.0.0-cp312-cp312-win_amd64.whl", hash = "sha256:2f672f5364b2d7829ef7c94be199bb88bf5661dd485e21d2d37de12ccb78a136", size = 25241976 },
+ { url = "https://files.pythonhosted.org/packages/f5/b9/ba07ed3dd6b6e4f379b78e9c47c50c8886e07862ab7fa6339ac38622d755/pyarrow-19.0.0-cp313-cp313-macosx_12_0_arm64.whl", hash = "sha256:cf3bf0ce511b833f7bc5f5bb3127ba731e97222023a444b7359f3a22e2a3b463", size = 30651291 },
+ { url = "https://files.pythonhosted.org/packages/ad/10/0d304243c8277035298a68a70807efb76199c6c929bb3363c92ac9be6a0d/pyarrow-19.0.0-cp313-cp313-macosx_12_0_x86_64.whl", hash = "sha256:4d8b0c0de0a73df1f1bf439af1b60f273d719d70648e898bc077547649bb8352", size = 32100461 },
+ { url = "https://files.pythonhosted.org/packages/8a/61/bcfc5182e11831bca3f849945b9b106e09fd10ded773dff466658e972a45/pyarrow-19.0.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a92aff08e23d281c69835e4a47b80569242a504095ef6a6223c1f6bb8883431d", size = 41132491 },
+ { url = "https://files.pythonhosted.org/packages/8e/87/2915a29049ec352dc69a967fbcbd76b0180319233de0daf8bd368df37099/pyarrow-19.0.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c3b78eff5968a1889a0f3bc81ca57e1e19b75f664d9c61a42a604bf9d8402aae", size = 42192529 },
+ { url = "https://files.pythonhosted.org/packages/48/18/44e5542b2707a8afaf78b5b88c608f261871ae77787eac07b7c679ca6f0f/pyarrow-19.0.0-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:b34d3bde38eba66190b215bae441646330f8e9da05c29e4b5dd3e41bde701098", size = 40495363 },
+ { url = "https://files.pythonhosted.org/packages/ba/d6/5096deb7599bbd20bc2768058fe23bc725b88eb41bee58303293583a2935/pyarrow-19.0.0-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:5418d4d0fab3a0ed497bad21d17a7973aad336d66ad4932a3f5f7480d4ca0c04", size = 42074075 },
+ { url = "https://files.pythonhosted.org/packages/2c/df/e3c839c04c284c9ec3d62b02a8c452b795d9b07b04079ab91ce33484d4c5/pyarrow-19.0.0-cp313-cp313-win_amd64.whl", hash = "sha256:e82c3d5e44e969c217827b780ed8faf7ac4c53f934ae9238872e749fa531f7c9", size = 25239803 },
+ { url = "https://files.pythonhosted.org/packages/6a/d3/a6d4088e906c7b5d47792256212606d2ae679046dc750eee0ae167338e5c/pyarrow-19.0.0-cp313-cp313t-macosx_12_0_arm64.whl", hash = "sha256:f208c3b58a6df3b239e0bb130e13bc7487ed14f39a9ff357b6415e3f6339b560", size = 30695401 },
+ { url = "https://files.pythonhosted.org/packages/94/25/70040fd0e397dd1b937f459eaeeec942a76027357491dca0ada09d1322af/pyarrow-19.0.0-cp313-cp313t-macosx_12_0_x86_64.whl", hash = "sha256:c751c1c93955b7a84c06794df46f1cec93e18610dcd5ab7d08e89a81df70a849", size = 32104680 },
+ { url = "https://files.pythonhosted.org/packages/4e/f9/92783290cc0d80ca16d34b0c126305bfacca4b87dd889c8f16c6ef2a8fd7/pyarrow-19.0.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b903afaa5df66d50fc38672ad095806443b05f202c792694f3a604ead7c6ea6e", size = 41076754 },
+ { url = "https://files.pythonhosted.org/packages/05/46/2c9870f50a495c72e2b8982ae29a9b1680707ea936edc0de444cec48f875/pyarrow-19.0.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a22a4bc0937856263df8b94f2f2781b33dd7f876f787ed746608e06902d691a5", size = 42163133 },
+ { url = "https://files.pythonhosted.org/packages/7b/2f/437922b902549228fb15814e8a26105bff2787ece466a8d886eb6699efad/pyarrow-19.0.0-cp313-cp313t-manylinux_2_28_aarch64.whl", hash = "sha256:5e8a28b918e2e878c918f6d89137386c06fe577cd08d73a6be8dafb317dc2d73", size = 40452210 },
+ { url = "https://files.pythonhosted.org/packages/36/ef/1d7975053af9d106da973bac142d0d4da71b7550a3576cc3e0b3f444d21a/pyarrow-19.0.0-cp313-cp313t-manylinux_2_28_x86_64.whl", hash = "sha256:29cd86c8001a94f768f79440bf83fee23963af5e7bc68ce3a7e5f120e17edf89", size = 42077618 },
+ { url = "https://files.pythonhosted.org/packages/59/13/e39417005ee632e131d0246cf5c1149618a55554ccdf2a4d887065e672a7/pyarrow-19.0.0-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:c0423393e4a07ff6fea08feb44153302dd261d0551cc3b538ea7a5dc853af43a", size = 30698254 },
+ { url = "https://files.pythonhosted.org/packages/06/87/1f9d7df296dd5c065e52ae3e9070dfe611f6bd97e90f28b6a45c410dcb67/pyarrow-19.0.0-cp39-cp39-macosx_12_0_x86_64.whl", hash = "sha256:718947fb6d82409013a74b176bf93e0f49ef952d8a2ecd068fecd192a97885b7", size = 32114467 },
+ { url = "https://files.pythonhosted.org/packages/b2/b1/9e7babf5d469bd35f1d062a04721ead72456101f6d851a2e8a43bb07a580/pyarrow-19.0.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3c1c162c4660e0978411a4761f91113dde8da3433683efa473501254563dcbe8", size = 41157781 },
+ { url = "https://files.pythonhosted.org/packages/9f/25/fa8e882a6c06e6d8dd640d3acce3912d7c39358940eb0c7b3c8b962457d0/pyarrow-19.0.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c73268cf557e688efb60f1ccbc7376f7e18cd8e2acae9e663e98b194c40c1a2d", size = 42190773 },
+ { url = "https://files.pythonhosted.org/packages/b8/d6/7fd60aa79cada815306d9804403386b06893ef63e73876174717a62002c4/pyarrow-19.0.0-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:edfe6d3916e915ada9acc4e48f6dafca7efdbad2e6283db6fd9385a1b23055f1", size = 40528310 },
+ { url = "https://files.pythonhosted.org/packages/0e/f1/c1ec7620a5768b8c7f9083572fda7b05b77ea083c3400fbd9e4ae40e63bd/pyarrow-19.0.0-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:da410b70a7ab8eb524112f037a7a35da7128b33d484f7671a264a4c224ac131d", size = 42080774 },
+ { url = "https://files.pythonhosted.org/packages/c4/28/c51c9af2703b5a592d1b66546611b24de8ca01e04c3f5da769c3318bca6c/pyarrow-19.0.0-cp39-cp39-win_amd64.whl", hash = "sha256:597360ffc71fc8cceea1aec1fb60cb510571a744fffc87db33d551d5de919bec", size = 25464978 },
+]
+
+[[package]]
+name = "pyarrow-stubs"
+version = "17.14"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "pyarrow" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/c2/4e/670cdad3694eb81d28936e69cacbe3775a71a86e10d49fb96ea7196eeb8b/pyarrow_stubs-17.14.tar.gz", hash = "sha256:278bad474eeaa0a300d030b0f85a4be335878c31d5dc8a836e695b24114e074e", size = 83437 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/db/ab/48a2edaa1748483786d34802110c3099f5bbf77f38b8670d3deb0d50e5be/pyarrow_stubs-17.14-py3-none-any.whl", hash = "sha256:bfebf760db2154cdb2c0fcb0e43024056d6f5a6f0b96b85a039ab224a13b43c8", size = 79854 },
+]
+
+[[package]]
+name = "pycparser"
+version = "2.22"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/1d/b2/31537cf4b1ca988837256c910a668b553fceb8f069bedc4b1c826024b52c/pycparser-2.22.tar.gz", hash = "sha256:491c8be9c040f5390f5bf44a5b07752bd07f56edf992381b05c701439eec10f6", size = 172736 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/13/a3/a812df4e2dd5696d1f351d58b8fe16a405b234ad2886a0dab9183fb78109/pycparser-2.22-py3-none-any.whl", hash = "sha256:c3702b6d3dd8c7abc1afa565d7e63d53a1d0bd86cdc24edd75470f4de499cfcc", size = 117552 },
+]
+
+[[package]]
+name = "pydata-sphinx-theme"
+version = "0.16.1"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "accessible-pygments" },
+ { name = "babel" },
+ { name = "beautifulsoup4" },
+ { name = "docutils" },
+ { name = "pygments" },
+ { name = "sphinx", version = "7.4.7", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" },
+ { name = "sphinx", version = "8.1.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" },
+ { name = "typing-extensions" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/00/20/bb50f9de3a6de69e6abd6b087b52fa2418a0418b19597601605f855ad044/pydata_sphinx_theme-0.16.1.tar.gz", hash = "sha256:a08b7f0b7f70387219dc659bff0893a7554d5eb39b59d3b8ef37b8401b7642d7", size = 2412693 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/e2/0d/8ba33fa83a7dcde13eb3c1c2a0c1cc29950a048bfed6d9b0d8b6bd710b4c/pydata_sphinx_theme-0.16.1-py3-none-any.whl", hash = "sha256:225331e8ac4b32682c18fcac5a57a6f717c4e632cea5dd0e247b55155faeccde", size = 6723264 },
+]
+
+[[package]]
+name = "pygments"
+version = "2.19.1"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/7c/2d/c3338d48ea6cc0feb8446d8e6937e1408088a72a39937982cc6111d17f84/pygments-2.19.1.tar.gz", hash = "sha256:61c16d2a8576dc0649d9f39e089b5f02bcd27fba10d8fb4dcc28173f7a45151f", size = 4968581 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/8a/0b/9fcc47d19c48b59121088dd6da2488a49d5f72dacf8262e2790a1d2c7d15/pygments-2.19.1-py3-none-any.whl", hash = "sha256:9ea1544ad55cecf4b8242fab6dd35a93bbce657034b0611ee383099054ab6d8c", size = 1225293 },
+]
+
+[[package]]
+name = "pyogrio"
+version = "0.10.0"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "certifi" },
+ { name = "numpy", version = "2.0.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" },
+ { name = "numpy", version = "2.2.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" },
+ { name = "packaging" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/a5/8f/5a784595524a79c269f2b1c880f4fdb152867df700c97005dda51997da02/pyogrio-0.10.0.tar.gz", hash = "sha256:ec051cb568324de878828fae96379b71858933413e185148acb6c162851ab23c", size = 281950 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/41/ea/cba24d241858a72b58d8fcd0ad2276f9631fd4528b3062157637e43581eb/pyogrio-0.10.0-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:046eeeae12a03a3ebc3dc5ff5a87664e4f5fc0a4fb1ea5d5c45d547fa941072b", size = 15083657 },
+ { url = "https://files.pythonhosted.org/packages/90/f8/a58795a2aee415c612aac8b425681d932b8983330884207fd1915d234d36/pyogrio-0.10.0-cp310-cp310-macosx_12_0_x86_64.whl", hash = "sha256:44380f4d9245c776f432526e29ce4d29238aea26adad991803c4f453474f51d3", size = 16457115 },
+ { url = "https://files.pythonhosted.org/packages/45/86/74c37e3d4d000bdcd91b25929fe4abc5ad6d93d5f5fbc59a4c7d4f0ed982/pyogrio-0.10.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:14fd3b72b4e2dc59e264607b265c742b0c5ec2ea9e748b115f742381b28dd373", size = 23721911 },
+ { url = "https://files.pythonhosted.org/packages/a6/07/35e4127a878ecdcbaaf46f0f2d068b385a454b5b0cab44ea901adc5888a0/pyogrio-0.10.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:1fea7892f4633cab04d13563e47ec2e87dc2b5cd71b9546018d123184528c151", size = 22941003 },
+ { url = "https://files.pythonhosted.org/packages/56/8b/67187ae03dce5cd6f5c5a2f41c405e77059f4cf498e0817b69cec094f022/pyogrio-0.10.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:3539596a76eb8a9d166d6f9d3f36731a8c5bd5c43901209d89dc66b9dc00f079", size = 23861913 },
+ { url = "https://files.pythonhosted.org/packages/75/ca/b31083da2e6c4b598b6609a98c655977189fe8982c36d98ea4789a938045/pyogrio-0.10.0-cp310-cp310-win_amd64.whl", hash = "sha256:eac90b2501656892c63bc500c12e71f3dbf7d66ddc5a7fb05cd480d25d1b7022", size = 16171065 },
+ { url = "https://files.pythonhosted.org/packages/8d/2c/c761e6adeb81bd4029a137b3240e7214a8c9aaf225883356196afd6ef9d8/pyogrio-0.10.0-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:5b1a51431a27a1cb3e4e19558939c1423106e06e7b67d6285f4fba9c2d0a91b9", size = 15083526 },
+ { url = "https://files.pythonhosted.org/packages/c3/e5/983aa9ddf2ff784e973d6b2ec3e874065d6655a5329ca26311b0f3b9f92f/pyogrio-0.10.0-cp311-cp311-macosx_12_0_x86_64.whl", hash = "sha256:216d69cd77b2b4a0c9d7d449bc239f8b77f3d73f4a05d9c738a0745b236902d8", size = 16457867 },
+ { url = "https://files.pythonhosted.org/packages/fa/9a/7103eee7aa3b6ec88e072ef18a05c3aae1ed96fe00009a7a5ce139b50f30/pyogrio-0.10.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a2f0b75f0077ce33256aec6278c2a9c3b79bf0637ddf4f93d3ab2609f0501d96", size = 23926332 },
+ { url = "https://files.pythonhosted.org/packages/8b/b2/2ca124343aba24b9a5dcd7c1f43da81e652849cfaf3110d3f507a80af0a1/pyogrio-0.10.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:0a47f702d29808c557d2ebea8542c23903f021eae44e16838adef2ab4281c71b", size = 23138693 },
+ { url = "https://files.pythonhosted.org/packages/ae/15/501aa4823c142232169d54255ab343f28c4ea9e7fa489b8433dcc873a942/pyogrio-0.10.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:11e6c71d12da6b445e77d0fc0198db1bd35a77e03a0685e45338cbab9ce02add", size = 24062952 },
+ { url = "https://files.pythonhosted.org/packages/94/8d/24f21e6a93ca418231aee3bddade7a0766c89c523832f29e08a8860f83e6/pyogrio-0.10.0-cp311-cp311-win_amd64.whl", hash = "sha256:d0d74e91a9c0ff2f9abe01b556ff663977193b2d6922208406172d0fc833beff", size = 16172573 },
+ { url = "https://files.pythonhosted.org/packages/b5/b5/3c5dfd0b50cbce6f3d4e42c0484647feb1809dbe20e225c4c6abd067e69f/pyogrio-0.10.0-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:2d6558b180e020f71ab7aa7f82d592ed3305c9f698d98f6d0a4637ec7a84c4ce", size = 15079211 },
+ { url = "https://files.pythonhosted.org/packages/b8/9a/1ba9c707a094976f343bd0177741eaba0e842fa05ecd8ab97192db4f2ec1/pyogrio-0.10.0-cp312-cp312-macosx_12_0_x86_64.whl", hash = "sha256:a99102037eead8ba491bc57825c1e395ee31c9956d7bff7b4a9e4fdbff3a13c2", size = 16442782 },
+ { url = "https://files.pythonhosted.org/packages/5e/bb/b4250746c2c85fea5004cae93e9e25ad01516e9e94e04de780a2e78139da/pyogrio-0.10.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3a4c373281d7cbf560c5b61f8f3c7442103ad7f1c7ac4ef3a84572ed7a5dd2f6", size = 23899832 },
+ { url = "https://files.pythonhosted.org/packages/bd/4c/79e47e40a8e54e79a45133786a0a58209534f580591c933d40c5ed314fe7/pyogrio-0.10.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:19f18411bdf836d24cdc08b9337eb3ec415e4ac4086ba64516b36b73a2e88622", size = 23081469 },
+ { url = "https://files.pythonhosted.org/packages/47/78/2b62c8a340bcb0ea56b9ddf2ef5fd3d1f101dc0e98816b9e6da87c5ac3b7/pyogrio-0.10.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:1abbcdd9876f30bebf1df8a0273f6cdeb29d03259290008275c7fddebe139f20", size = 24024758 },
+ { url = "https://files.pythonhosted.org/packages/43/97/34605480f06b0ad9611bf58a174eccc6f3673275f3d519cf763391892881/pyogrio-0.10.0-cp312-cp312-win_amd64.whl", hash = "sha256:2a3e09839590d71ff832aa95c4f23fa00a2c63c3de82c1fbd4fb8d265792acfc", size = 16160294 },
+ { url = "https://files.pythonhosted.org/packages/14/4a/4c8e4f5b9edbca46e0f8d6c1c0b56c0d4af0900c29f4bea22d37853c07f3/pyogrio-0.10.0-cp313-cp313-macosx_12_0_arm64.whl", hash = "sha256:c90478209537a31dcc65664a87a04c094bb0e08efe502908a6682b8cec0259bf", size = 15076879 },
+ { url = "https://files.pythonhosted.org/packages/5f/be/7db0644eef9ef3382518399aaf3332827c43018112d2a74f78784fd496ec/pyogrio-0.10.0-cp313-cp313-macosx_12_0_x86_64.whl", hash = "sha256:fec45e1963b7058e5a1aa98598aed07c0858512c833d6aad2c672c3ec98bbf04", size = 16440405 },
+ { url = "https://files.pythonhosted.org/packages/96/77/f199230ba86fe88b1f57e71428c169ed982de68a32d6082cd7c12d0f5d55/pyogrio-0.10.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:28cb139f8a5d0365ede602230104b407ae52bb6b55173c8d5a35424d28c4a2c5", size = 23871511 },
+ { url = "https://files.pythonhosted.org/packages/25/ac/ca483bec408b59c54f7129b0244cc9de21d8461aefe89ece7bd74ad33807/pyogrio-0.10.0-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:cea0187fcc2d574e52af8cfab041fa0a7ad71d5ef6b94b49a3f3d2a04534a27e", size = 23048830 },
+ { url = "https://files.pythonhosted.org/packages/d7/3e/c35f2d8dad95b24e568c468f09ff60fb61945065465e0ec7868400596566/pyogrio-0.10.0-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:7c02b207ea8cf09c501ea3e95d29152781a00d3c32267286bc36fa457c332205", size = 23996873 },
+ { url = "https://files.pythonhosted.org/packages/27/5d/0deb16d228362a097ee3258d0a887c9c0add4b9678bb4847b08a241e124d/pyogrio-0.10.0-cp313-cp313-win_amd64.whl", hash = "sha256:02e54bcfb305af75f829044b0045f74de31b77c2d6546f7aaf96822066147848", size = 16158260 },
+ { url = "https://files.pythonhosted.org/packages/ec/fe/ea995a55289a4c378a29130435a400d577bd151a518a5238fd5bc21fe09f/pyogrio-0.10.0-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:ea96a1338ed7991735b955d3f84ad5f71b3bc070b6a7a42449941aedecc71768", size = 15083868 },
+ { url = "https://files.pythonhosted.org/packages/07/1d/1bc2162a7d1cef13edcf645e562d047742dad68c4e933b757d4cf2837b00/pyogrio-0.10.0-cp39-cp39-macosx_12_0_x86_64.whl", hash = "sha256:32d349600561459791a43f528a92f3e9343a59bdc9bc30b1be9376f0b80cbf16", size = 16457256 },
+ { url = "https://files.pythonhosted.org/packages/20/7a/56ef1f49388244b5d9e4f22db58745fd329f441f87af71fce0bbd6ddd894/pyogrio-0.10.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:82f7bd6a87bd2e9484bcb4c87ab94eee4c2f573ad148707431c8b341d7f13d99", size = 23716062 },
+ { url = "https://files.pythonhosted.org/packages/1d/9f/3bb9a15fbe5f66907f957310b0f6d7191dfbfd9d9b31a361053d8d763bd5/pyogrio-0.10.0-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:6166ae81462c257ed8e151c404e316642703813cf771c95ef8e11dcdf2581e47", size = 22931000 },
+ { url = "https://files.pythonhosted.org/packages/76/9b/8974f77ded5661522023cfb7898d7851f9b1056f4bbaacc4de2812dbf7fd/pyogrio-0.10.0-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:22d57495e835fe51b88da43dfbda606c07e1f6c3b849af0c3cfc18e17467641c", size = 23854562 },
+ { url = "https://files.pythonhosted.org/packages/f8/14/aff4499cc544a02343043a16322b51dcc0ca947d21a96b7aacb1dd1b8e3a/pyogrio-0.10.0-cp39-cp39-win_amd64.whl", hash = "sha256:eea82171bfc07fc778b8dc87b0cdc9ac06c389bc56b0c0b6f34bf9e45fb78c0e", size = 16172207 },
+]
+
+[[package]]
+name = "pyproj"
+version = "3.6.1"
+source = { registry = "https://pypi.org/simple" }
+resolution-markers = [
+ "python_full_version < '3.10'",
+]
+dependencies = [
+ { name = "certifi", marker = "python_full_version < '3.10'" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/7d/84/2b39bbf888c753ea48b40d47511548c77aa03445465c35cc4c4e9649b643/pyproj-3.6.1.tar.gz", hash = "sha256:44aa7c704c2b7d8fb3d483bbf75af6cb2350d30a63b144279a09b75fead501bf", size = 225131 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/c5/32/63cf474f4a8d4804b3bdf7c16b8589f38142e8e2f8319dcea27e0bc21a87/pyproj-3.6.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:ab7aa4d9ff3c3acf60d4b285ccec134167a948df02347585fdd934ebad8811b4", size = 6142763 },
+ { url = "https://files.pythonhosted.org/packages/18/86/2e7cb9de40492f1bafbf11f4c9072edc394509a40b5e4c52f8139546f039/pyproj-3.6.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:4bc0472302919e59114aa140fd7213c2370d848a7249d09704f10f5b062031fe", size = 4877123 },
+ { url = "https://files.pythonhosted.org/packages/5e/c5/928d5a26995dbefbebd7507d982141cd9153bc7e4392b334fff722c4af12/pyproj-3.6.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5279586013b8d6582e22b6f9e30c49796966770389a9d5b85e25a4223286cd3f", size = 6190576 },
+ { url = "https://files.pythonhosted.org/packages/f6/2b/b60cf73b0720abca313bfffef34e34f7f7dae23852b2853cf0368d49426b/pyproj-3.6.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:80fafd1f3eb421694857f254a9bdbacd1eb22fc6c24ca74b136679f376f97d35", size = 8328075 },
+ { url = "https://files.pythonhosted.org/packages/d9/a8/7193f46032636be917bc775506ae987aad72c931b1f691b775ca812a2917/pyproj-3.6.1-cp310-cp310-win32.whl", hash = "sha256:c41e80ddee130450dcb8829af7118f1ab69eaf8169c4bf0ee8d52b72f098dc2f", size = 5635713 },
+ { url = "https://files.pythonhosted.org/packages/89/8f/27350c8fba71a37cd0d316f100fbd96bf139cc2b5ff1ab0dcbc7ac64010a/pyproj-3.6.1-cp310-cp310-win_amd64.whl", hash = "sha256:db3aedd458e7f7f21d8176f0a1d924f1ae06d725228302b872885a1c34f3119e", size = 6087932 },
+ { url = "https://files.pythonhosted.org/packages/84/a6/a300c1b14b2112e966e9f90b18f9c13b586bdcf417207cee913ae9005da3/pyproj-3.6.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:ebfbdbd0936e178091309f6cd4fcb4decd9eab12aa513cdd9add89efa3ec2882", size = 6147442 },
+ { url = "https://files.pythonhosted.org/packages/30/bd/b9bd3761f08754e8dbb34c5a647db2099b348ab5da338e90980caf280e37/pyproj-3.6.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:447db19c7efad70ff161e5e46a54ab9cc2399acebb656b6ccf63e4bc4a04b97a", size = 4880331 },
+ { url = "https://files.pythonhosted.org/packages/f4/0a/d82aeeb605b5d6870bc72307c3b5e044e632eb7720df8885e144f51a8eac/pyproj-3.6.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e7e13c40183884ec7f94eb8e0f622f08f1d5716150b8d7a134de48c6110fee85", size = 6192425 },
+ { url = "https://files.pythonhosted.org/packages/64/90/dfe5c00de1ca4dbb82606e79790659d4ed7f0ed8d372bccb3baca2a5abe0/pyproj-3.6.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:65ad699e0c830e2b8565afe42bd58cc972b47d829b2e0e48ad9638386d994915", size = 8571478 },
+ { url = "https://files.pythonhosted.org/packages/14/6d/ae373629a1723f0db80d7b8c93598b00d9ecb930ed9ebf4f35826a33e97c/pyproj-3.6.1-cp311-cp311-win32.whl", hash = "sha256:8b8acc31fb8702c54625f4d5a2a6543557bec3c28a0ef638778b7ab1d1772132", size = 5634575 },
+ { url = "https://files.pythonhosted.org/packages/79/95/eb68113c5b5737c342bde1bab92705dabe69c16299c5a122616e50f1fbd6/pyproj-3.6.1-cp311-cp311-win_amd64.whl", hash = "sha256:38a3361941eb72b82bd9a18f60c78b0df8408416f9340521df442cebfc4306e2", size = 6088494 },
+ { url = "https://files.pythonhosted.org/packages/0b/64/93232511a7906a492b1b7dfdfc17f4e95982d76a24ef4f86d18cfe7ae2c9/pyproj-3.6.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:1e9fbaf920f0f9b4ee62aab832be3ae3968f33f24e2e3f7fbb8c6728ef1d9746", size = 6135280 },
+ { url = "https://files.pythonhosted.org/packages/10/f2/b550b1f65cc7e51c9116b220b50aade60c439103432a3fd5b12efbc77e15/pyproj-3.6.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:6d227a865356f225591b6732430b1d1781e946893789a609bb34f59d09b8b0f8", size = 4880030 },
+ { url = "https://files.pythonhosted.org/packages/fe/4b/2f8f6f94643b9fe2083338eff294feda84d916409b5840b7a402d2be93f8/pyproj-3.6.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:83039e5ae04e5afc974f7d25ee0870a80a6bd6b7957c3aca5613ccbe0d3e72bf", size = 6184439 },
+ { url = "https://files.pythonhosted.org/packages/19/9b/c57569132174786aa3f72275ac306956859a639dad0ce8d95c8411ce8209/pyproj-3.6.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fffb059ba3bced6f6725961ba758649261d85ed6ce670d3e3b0a26e81cf1aa8d", size = 8660747 },
+ { url = "https://files.pythonhosted.org/packages/0e/ab/1c2159ec757677c5a6b8803f6be45c2b550dc42c84ec4a228dc219849bbb/pyproj-3.6.1-cp312-cp312-win32.whl", hash = "sha256:2d6ff73cc6dbbce3766b6c0bce70ce070193105d8de17aa2470009463682a8eb", size = 5626805 },
+ { url = "https://files.pythonhosted.org/packages/c7/f3/2f32fe143cd7ba1d4d68f1b6dce9ca402d909cbd5a5830e3a8fa3d1acbbf/pyproj-3.6.1-cp312-cp312-win_amd64.whl", hash = "sha256:7a27151ddad8e1439ba70c9b4b2b617b290c39395fa9ddb7411ebb0eb86d6fb0", size = 6079779 },
+ { url = "https://files.pythonhosted.org/packages/d7/50/d369bbe62d7a0d1e2cb40bc211da86a3f6e0f3c99f872957a72c3d5492d6/pyproj-3.6.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:4ba1f9b03d04d8cab24d6375609070580a26ce76eaed54631f03bab00a9c737b", size = 6144755 },
+ { url = "https://files.pythonhosted.org/packages/2c/c2/8d4f61065dfed965e53badd41201ad86a05af0c1bbc75dffb12ef0f5a7dd/pyproj-3.6.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:18faa54a3ca475bfe6255156f2f2874e9a1c8917b0004eee9f664b86ccc513d3", size = 4879187 },
+ { url = "https://files.pythonhosted.org/packages/31/38/2cf8777cb2d5622a78195e690281b7029098795fde4751aec8128238b8bb/pyproj-3.6.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fd43bd9a9b9239805f406fd82ba6b106bf4838d9ef37c167d3ed70383943ade1", size = 6192339 },
+ { url = "https://files.pythonhosted.org/packages/97/0a/b1525be9680369cc06dd288e12c59d24d5798b4afcdcf1b0915836e1caa6/pyproj-3.6.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:50100b2726a3ca946906cbaa789dd0749f213abf0cbb877e6de72ca7aa50e1ae", size = 8332638 },
+ { url = "https://files.pythonhosted.org/packages/8d/e8/e826e0a962f36bd925a933829cf6ef218efe2055db5ea292be40974a929d/pyproj-3.6.1-cp39-cp39-win32.whl", hash = "sha256:9274880263256f6292ff644ca92c46d96aa7e57a75c6df3f11d636ce845a1877", size = 5638159 },
+ { url = "https://files.pythonhosted.org/packages/43/d0/cbe29a4dcf38ee7e72bf695d0d3f2bee21b4f22ee6cf579ad974de9edfc8/pyproj-3.6.1-cp39-cp39-win_amd64.whl", hash = "sha256:36b64c2cb6ea1cc091f329c5bd34f9c01bb5da8c8e4492c709bda6a09f96808f", size = 6090565 },
+ { url = "https://files.pythonhosted.org/packages/43/28/e8d2ca71dd56c27cbe668e4226963d61956cded222a2e839e6fec1ab6d82/pyproj-3.6.1-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:fd93c1a0c6c4aedc77c0fe275a9f2aba4d59b8acf88cebfc19fe3c430cfabf4f", size = 6034252 },
+ { url = "https://files.pythonhosted.org/packages/cb/39/1ce27cb86f51a1f5aed3a1617802a6131b59ea78492141d1fbe36722595e/pyproj-3.6.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6420ea8e7d2a88cb148b124429fba8cd2e0fae700a2d96eab7083c0928a85110", size = 6386263 },
+]
+
+[[package]]
+name = "pyproj"
+version = "3.7.0"
+source = { registry = "https://pypi.org/simple" }
+resolution-markers = [
+ "python_full_version >= '3.12'",
+ "python_full_version == '3.11.*'",
+ "python_full_version == '3.10.*'",
+]
+dependencies = [
+ { name = "certifi", marker = "python_full_version >= '3.10'" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/47/c2/0572c8e31aebf0270f15f3368adebd10fc473de9f09567a0743a3bc41c8d/pyproj-3.7.0.tar.gz", hash = "sha256:bf658f4aaf815d9d03c8121650b6f0b8067265c36e31bc6660b98ef144d81813", size = 225577 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/e4/fa/8a769da6bb8e26b1028c19d048b88373a40bd8e17a893e07b9889d1aed03/pyproj-3.7.0-cp310-cp310-macosx_12_0_x86_64.whl", hash = "sha256:d5c7e7d24b967e328a5efd013f466804a1f226d1106ac7efc47dcc99360dbc8f", size = 6270121 },
+ { url = "https://files.pythonhosted.org/packages/82/65/ee312dc4cdd2499cc5984144e05c582604afd76ba01289d89d74b50ab654/pyproj-3.7.0-cp310-cp310-macosx_14_0_arm64.whl", hash = "sha256:448958c46bd3fe2da91c89ba551ac5835e63073ca861422c6eb1af89979dfab1", size = 4633387 },
+ { url = "https://files.pythonhosted.org/packages/f8/0d/d300194f021e3d56b30bb45bd19447bb00761c62f5342371bd389b774f82/pyproj-3.7.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f673ca345bb92afc93d4235938ca0c9a76237aa7addf42a95965c8dc8cad9b49", size = 6330358 },
+ { url = "https://files.pythonhosted.org/packages/52/30/c82c12cea9a5c17fac146212cd914ec587f646eef91986dcb7f629fe0f7f/pyproj-3.7.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ee60895f60cbd1a9c903ab2bc22adea63004296a1c28b8775a11cf50905cf085", size = 9227537 },
+ { url = "https://files.pythonhosted.org/packages/09/94/34bd5a5e637e8839beb17cc09410785bad24098ef01e52f66fe32bcf74fa/pyproj-3.7.0-cp310-cp310-win32.whl", hash = "sha256:0dd31b0740ee010934234f848d2d092c66146cb8d0ba009a64e41d192caa7686", size = 5822094 },
+ { url = "https://files.pythonhosted.org/packages/9e/04/33835c6ca0edf266b56495555c375994c42f914eb65a639b363d6f2c47f9/pyproj-3.7.0-cp310-cp310-win_amd64.whl", hash = "sha256:7943d85ba39e89c51b920339ff63162d63bf89da161f0acb6206b0d39b11661e", size = 6230436 },
+ { url = "https://files.pythonhosted.org/packages/e2/8f/15ff6ab10a08050e94afcd544962a1a930d0bb7ca102ad39795a847eb340/pyproj-3.7.0-cp311-cp311-macosx_12_0_x86_64.whl", hash = "sha256:e66d8d42dbdf232e121546c5a1dec097caf0454e4885c09a8e03cdcee0753c03", size = 6272213 },
+ { url = "https://files.pythonhosted.org/packages/2d/4d/610fe2a17de71b4fe210af69ce25f2d65379ba0a48299129894d0d0988ee/pyproj-3.7.0-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:7764b64a0aefe40134a2828b3a40be88f6c8b7832c45d8a9f2bd592ace4b2a3b", size = 4634548 },
+ { url = "https://files.pythonhosted.org/packages/d6/27/0327d0b0fcdfc4cf72696a2effca2963e524dcd846a0274ba503f8bf2648/pyproj-3.7.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:53c442c5081dc95346996f5c4323fde2caafc69c6e60b4707aa46e88244f1e04", size = 6333913 },
+ { url = "https://files.pythonhosted.org/packages/3c/e5/2cb256148c730b9c3f74bfb3c03904f5070499c6dcaea153073a9642c6c6/pyproj-3.7.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc5b305d4d5d7697885681d9b660623e328227612823d5c660e0a9566cb48838", size = 9460363 },
+ { url = "https://files.pythonhosted.org/packages/ba/a3/4aa1e8e78ad18aa170efd2c94c1931bf2a34c526683b874d06e40fa323f6/pyproj-3.7.0-cp311-cp311-win32.whl", hash = "sha256:de2b47d748dc41cccb6b3b713d4d7dc9aa1046a82141c8665026908726426abc", size = 5820551 },
+ { url = "https://files.pythonhosted.org/packages/26/0c/b084e8839a117eaad8cb4fbaa81bbb24c6f183de0ee95c6c4e2770ab6f09/pyproj-3.7.0-cp311-cp311-win_amd64.whl", hash = "sha256:38cba7c4c5679e40242dd959133e95b908d3b912dd66291094fd13510e8517ff", size = 6231788 },
+ { url = "https://files.pythonhosted.org/packages/bd/19/be806b711e9ebfb80411c653054157db128fffdd7f8493e3064136c8d880/pyproj-3.7.0-cp312-cp312-macosx_12_0_x86_64.whl", hash = "sha256:8cbec92bdd6e9933ca08795c12717d1384e9b51cf4b1acf0d753db255a75c51e", size = 6261400 },
+ { url = "https://files.pythonhosted.org/packages/99/3b/8497995e8cae0049d013679c6a7ac6c57b816d590c733a388748dafe5af5/pyproj-3.7.0-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:8c4a8e4d3ba76c3adac3c087544cf92f7f9a19ea34946904a13fca48cc1c0106", size = 4637848 },
+ { url = "https://files.pythonhosted.org/packages/ea/f7/2a5b46d6f8da913d58d44942ab06ca4803b5424b73259b15344cf90040f6/pyproj-3.7.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:82624fb42aa31f6b1a860fbc0316babd07fd712642bc31022df4e9b4056bf463", size = 6324856 },
+ { url = "https://files.pythonhosted.org/packages/36/83/c257771077bcf9da20d0e97abc834f9037c219986cc76d40183903a30464/pyproj-3.7.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:34e1bbb3f89c68d4a6835c40b2da8b27680eec60e8cc7cdb08c09bcc725b2b62", size = 9525831 },
+ { url = "https://files.pythonhosted.org/packages/d6/50/a635de79def69fe03cdef3a4bd3bec780c30987bce3a15dd7099afb2506f/pyproj-3.7.0-cp312-cp312-win32.whl", hash = "sha256:952515d5592167ad4436b355485f82acebed2a49b46722159e4584b75a763dd3", size = 5811864 },
+ { url = "https://files.pythonhosted.org/packages/a1/8b/96bc8c8f3eca4eb7fa3758fde0b755d1df30a19f494376e3ee8de1ef4e79/pyproj-3.7.0-cp312-cp312-win_amd64.whl", hash = "sha256:0692f806224e8ed82fe4acfa57268ff444fdaf9f330689f24c0d96e59480cce1", size = 6224720 },
+ { url = "https://files.pythonhosted.org/packages/bf/da/a17c452bea1ff4cd58d6dc573055b9c8fb6af114b7d2c694782aec770865/pyproj-3.7.0-cp313-cp313-macosx_12_0_x86_64.whl", hash = "sha256:94e8b903a9e83448fd2379c49dec3e8cd83c9ed36f54354e68b601cef56d5426", size = 6254898 },
+ { url = "https://files.pythonhosted.org/packages/c2/31/ab07b389f2caa527c95ab2ea1940d28879bd2a19e67b2529cb3e94648d26/pyproj-3.7.0-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:64cb5c17d6f6305a8b978a40f95560c87c5b363fcac40632337955664437875a", size = 4628612 },
+ { url = "https://files.pythonhosted.org/packages/1d/24/def3ded6529db3e3d8351ad73481730249ab57d8d876d502f86d7958ce06/pyproj-3.7.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2c54e9bdda7ab9c4a5af50f9d6e6ee7704e05fafd504896b96ed1208c7aea098", size = 6315895 },
+ { url = "https://files.pythonhosted.org/packages/dd/14/07314f78302105d199fb25e73376d723efe9c2ef3906463aae209913a6d3/pyproj-3.7.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:24fa4e9e0abba875f9524808410cc520067eaf38fd5549ed0ef7c43ac39923c9", size = 9466144 },
+ { url = "https://files.pythonhosted.org/packages/00/f2/2a116920db3496e3ff3c94d7d8d15da41374f35cfe1b9e79682eca500a61/pyproj-3.7.0-cp313-cp313-win32.whl", hash = "sha256:b9e8353fc3c79dc14d1f5ac758a1a6e4eee04102c3c0b138670f121f5ac52eb4", size = 5807180 },
+ { url = "https://files.pythonhosted.org/packages/f8/33/3c8c6302717096b54aa14ccbb271045ba04629e21cbf348f2f2dc94f69b4/pyproj-3.7.0-cp313-cp313-win_amd64.whl", hash = "sha256:10a8dc6ec61af97c89ff032647d743f8dc023645773da42ef43f7ae1125b3509", size = 6218036 },
+]
+
+[[package]]
+name = "pytest"
+version = "8.3.4"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "colorama", marker = "sys_platform == 'win32'" },
+ { name = "exceptiongroup", marker = "python_full_version < '3.11'" },
+ { name = "iniconfig" },
+ { name = "packaging" },
+ { name = "pluggy" },
+ { name = "tomli", marker = "python_full_version < '3.11'" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/05/35/30e0d83068951d90a01852cb1cef56e5d8a09d20c7f511634cc2f7e0372a/pytest-8.3.4.tar.gz", hash = "sha256:965370d062bce11e73868e0335abac31b4d3de0e82f4007408d242b4f8610761", size = 1445919 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/11/92/76a1c94d3afee238333bc0a42b82935dd8f9cf8ce9e336ff87ee14d9e1cf/pytest-8.3.4-py3-none-any.whl", hash = "sha256:50e16d954148559c9a74109af1eaf0c945ba2d8f30f0a3d3335edde19788b6f6", size = 343083 },
+]
+
+[[package]]
+name = "pytest-cov"
+version = "6.0.0"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "coverage", extra = ["toml"] },
+ { name = "pytest" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/be/45/9b538de8cef30e17c7b45ef42f538a94889ed6a16f2387a6c89e73220651/pytest-cov-6.0.0.tar.gz", hash = "sha256:fde0b595ca248bb8e2d76f020b465f3b107c9632e6a1d1705f17834c89dcadc0", size = 66945 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/36/3b/48e79f2cd6a61dbbd4807b4ed46cb564b4fd50a76166b1c4ea5c1d9e2371/pytest_cov-6.0.0-py3-none-any.whl", hash = "sha256:eee6f1b9e61008bd34975a4d5bab25801eb31898b032dd55addc93e96fcaaa35", size = 22949 },
+]
+
+[[package]]
+name = "pytest-xdist"
+version = "3.6.1"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "execnet" },
+ { name = "pytest" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/41/c4/3c310a19bc1f1e9ef50075582652673ef2bfc8cd62afef9585683821902f/pytest_xdist-3.6.1.tar.gz", hash = "sha256:ead156a4db231eec769737f57668ef58a2084a34b2e55c4a8fa20d861107300d", size = 84060 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/6d/82/1d96bf03ee4c0fdc3c0cbe61470070e659ca78dc0086fb88b66c185e2449/pytest_xdist-3.6.1-py3-none-any.whl", hash = "sha256:9ed4adfb68a016610848639bb7e02c9352d5d9f03d04809919e2dafc3be4cca7", size = 46108 },
+]
+
+[package.optional-dependencies]
+psutil = [
+ { name = "psutil" },
+]
+
+[[package]]
+name = "python-dateutil"
+version = "2.9.0.post0"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "six" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/66/c0/0c8b6ad9f17a802ee498c46e004a0eb49bc148f2fd230864601a86dcf6db/python-dateutil-2.9.0.post0.tar.gz", hash = "sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3", size = 342432 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/ec/57/56b9bcc3c9c6a792fcbaf139543cee77261f3651ca9da0c93f5c1221264b/python_dateutil-2.9.0.post0-py2.py3-none-any.whl", hash = "sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427", size = 229892 },
+]
+
+[[package]]
+name = "pytz"
+version = "2024.2"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/3a/31/3c70bf7603cc2dca0f19bdc53b4537a797747a58875b552c8c413d963a3f/pytz-2024.2.tar.gz", hash = "sha256:2aa355083c50a0f93fa581709deac0c9ad65cca8a9e9beac660adcbd493c798a", size = 319692 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/11/c3/005fcca25ce078d2cc29fd559379817424e94885510568bc1bc53d7d5846/pytz-2024.2-py2.py3-none-any.whl", hash = "sha256:31c7c1817eb7fae7ca4b8c7ee50c72f93aa2dd863de768e1ef4245d426aa0725", size = 508002 },
+]
+
+[[package]]
+name = "pywin32"
+version = "308"
+source = { registry = "https://pypi.org/simple" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/72/a6/3e9f2c474895c1bb61b11fa9640be00067b5c5b363c501ee9c3fa53aec01/pywin32-308-cp310-cp310-win32.whl", hash = "sha256:796ff4426437896550d2981b9c2ac0ffd75238ad9ea2d3bfa67a1abd546d262e", size = 5927028 },
+ { url = "https://files.pythonhosted.org/packages/d9/b4/84e2463422f869b4b718f79eb7530a4c1693e96b8a4e5e968de38be4d2ba/pywin32-308-cp310-cp310-win_amd64.whl", hash = "sha256:4fc888c59b3c0bef905ce7eb7e2106a07712015ea1c8234b703a088d46110e8e", size = 6558484 },
+ { url = "https://files.pythonhosted.org/packages/9f/8f/fb84ab789713f7c6feacaa08dad3ec8105b88ade8d1c4f0f0dfcaaa017d6/pywin32-308-cp310-cp310-win_arm64.whl", hash = "sha256:a5ab5381813b40f264fa3495b98af850098f814a25a63589a8e9eb12560f450c", size = 7971454 },
+ { url = "https://files.pythonhosted.org/packages/eb/e2/02652007469263fe1466e98439831d65d4ca80ea1a2df29abecedf7e47b7/pywin32-308-cp311-cp311-win32.whl", hash = "sha256:5d8c8015b24a7d6855b1550d8e660d8daa09983c80e5daf89a273e5c6fb5095a", size = 5928156 },
+ { url = "https://files.pythonhosted.org/packages/48/ef/f4fb45e2196bc7ffe09cad0542d9aff66b0e33f6c0954b43e49c33cad7bd/pywin32-308-cp311-cp311-win_amd64.whl", hash = "sha256:575621b90f0dc2695fec346b2d6302faebd4f0f45c05ea29404cefe35d89442b", size = 6559559 },
+ { url = "https://files.pythonhosted.org/packages/79/ef/68bb6aa865c5c9b11a35771329e95917b5559845bd75b65549407f9fc6b4/pywin32-308-cp311-cp311-win_arm64.whl", hash = "sha256:100a5442b7332070983c4cd03f2e906a5648a5104b8a7f50175f7906efd16bb6", size = 7972495 },
+ { url = "https://files.pythonhosted.org/packages/00/7c/d00d6bdd96de4344e06c4afbf218bc86b54436a94c01c71a8701f613aa56/pywin32-308-cp312-cp312-win32.whl", hash = "sha256:587f3e19696f4bf96fde9d8a57cec74a57021ad5f204c9e627e15c33ff568897", size = 5939729 },
+ { url = "https://files.pythonhosted.org/packages/21/27/0c8811fbc3ca188f93b5354e7c286eb91f80a53afa4e11007ef661afa746/pywin32-308-cp312-cp312-win_amd64.whl", hash = "sha256:00b3e11ef09ede56c6a43c71f2d31857cf7c54b0ab6e78ac659497abd2834f47", size = 6543015 },
+ { url = "https://files.pythonhosted.org/packages/9d/0f/d40f8373608caed2255781a3ad9a51d03a594a1248cd632d6a298daca693/pywin32-308-cp312-cp312-win_arm64.whl", hash = "sha256:9b4de86c8d909aed15b7011182c8cab38c8850de36e6afb1f0db22b8959e3091", size = 7976033 },
+ { url = "https://files.pythonhosted.org/packages/a9/a4/aa562d8935e3df5e49c161b427a3a2efad2ed4e9cf81c3de636f1fdddfd0/pywin32-308-cp313-cp313-win32.whl", hash = "sha256:1c44539a37a5b7b21d02ab34e6a4d314e0788f1690d65b48e9b0b89f31abbbed", size = 5938579 },
+ { url = "https://files.pythonhosted.org/packages/c7/50/b0efb8bb66210da67a53ab95fd7a98826a97ee21f1d22949863e6d588b22/pywin32-308-cp313-cp313-win_amd64.whl", hash = "sha256:fd380990e792eaf6827fcb7e187b2b4b1cede0585e3d0c9e84201ec27b9905e4", size = 6542056 },
+ { url = "https://files.pythonhosted.org/packages/26/df/2b63e3e4f2df0224f8aaf6d131f54fe4e8c96400eb9df563e2aae2e1a1f9/pywin32-308-cp313-cp313-win_arm64.whl", hash = "sha256:ef313c46d4c18dfb82a2431e3051ac8f112ccee1a34f29c263c583c568db63cd", size = 7974986 },
+ { url = "https://files.pythonhosted.org/packages/a8/41/ead05a7657ffdbb1edabb954ab80825c4f87a3de0285d59f8290457f9016/pywin32-308-cp39-cp39-win32.whl", hash = "sha256:7873ca4dc60ab3287919881a7d4f88baee4a6e639aa6962de25a98ba6b193341", size = 5991824 },
+ { url = "https://files.pythonhosted.org/packages/e4/cd/0838c9a6063bff2e9bac2388ae36524c26c50288b5d7b6aebb6cdf8d375d/pywin32-308-cp39-cp39-win_amd64.whl", hash = "sha256:71b3322d949b4cc20776436a9c9ba0eeedcbc9c650daa536df63f0ff111bb920", size = 6640327 },
+]
+
+[[package]]
+name = "pywin32-ctypes"
+version = "0.2.3"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/85/9f/01a1a99704853cb63f253eea009390c88e7131c67e66a0a02099a8c917cb/pywin32-ctypes-0.2.3.tar.gz", hash = "sha256:d162dc04946d704503b2edc4d55f3dba5c1d539ead017afa00142c38b9885755", size = 29471 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/de/3d/8161f7711c017e01ac9f008dfddd9410dff3674334c233bde66e7ba65bbf/pywin32_ctypes-0.2.3-py3-none-any.whl", hash = "sha256:8a1513379d709975552d202d942d9837758905c8d01eb82b8bcc30918929e7b8", size = 30756 },
+]
+
+[[package]]
+name = "pyyaml"
+version = "6.0.2"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/54/ed/79a089b6be93607fa5cdaedf301d7dfb23af5f25c398d5ead2525b063e17/pyyaml-6.0.2.tar.gz", hash = "sha256:d584d9ec91ad65861cc08d42e834324ef890a082e591037abe114850ff7bbc3e", size = 130631 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/9b/95/a3fac87cb7158e231b5a6012e438c647e1a87f09f8e0d123acec8ab8bf71/PyYAML-6.0.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0a9a2848a5b7feac301353437eb7d5957887edbf81d56e903999a75a3d743086", size = 184199 },
+ { url = "https://files.pythonhosted.org/packages/c7/7a/68bd47624dab8fd4afbfd3c48e3b79efe09098ae941de5b58abcbadff5cb/PyYAML-6.0.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:29717114e51c84ddfba879543fb232a6ed60086602313ca38cce623c1d62cfbf", size = 171758 },
+ { url = "https://files.pythonhosted.org/packages/49/ee/14c54df452143b9ee9f0f29074d7ca5516a36edb0b4cc40c3f280131656f/PyYAML-6.0.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8824b5a04a04a047e72eea5cec3bc266db09e35de6bdfe34c9436ac5ee27d237", size = 718463 },
+ { url = "https://files.pythonhosted.org/packages/4d/61/de363a97476e766574650d742205be468921a7b532aa2499fcd886b62530/PyYAML-6.0.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7c36280e6fb8385e520936c3cb3b8042851904eba0e58d277dca80a5cfed590b", size = 719280 },
+ { url = "https://files.pythonhosted.org/packages/6b/4e/1523cb902fd98355e2e9ea5e5eb237cbc5f3ad5f3075fa65087aa0ecb669/PyYAML-6.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ec031d5d2feb36d1d1a24380e4db6d43695f3748343d99434e6f5f9156aaa2ed", size = 751239 },
+ { url = "https://files.pythonhosted.org/packages/b7/33/5504b3a9a4464893c32f118a9cc045190a91637b119a9c881da1cf6b7a72/PyYAML-6.0.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:936d68689298c36b53b29f23c6dbb74de12b4ac12ca6cfe0e047bedceea56180", size = 695802 },
+ { url = "https://files.pythonhosted.org/packages/5c/20/8347dcabd41ef3a3cdc4f7b7a2aff3d06598c8779faa189cdbf878b626a4/PyYAML-6.0.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:23502f431948090f597378482b4812b0caae32c22213aecf3b55325e049a6c68", size = 720527 },
+ { url = "https://files.pythonhosted.org/packages/be/aa/5afe99233fb360d0ff37377145a949ae258aaab831bde4792b32650a4378/PyYAML-6.0.2-cp310-cp310-win32.whl", hash = "sha256:2e99c6826ffa974fe6e27cdb5ed0021786b03fc98e5ee3c5bfe1fd5015f42b99", size = 144052 },
+ { url = "https://files.pythonhosted.org/packages/b5/84/0fa4b06f6d6c958d207620fc60005e241ecedceee58931bb20138e1e5776/PyYAML-6.0.2-cp310-cp310-win_amd64.whl", hash = "sha256:a4d3091415f010369ae4ed1fc6b79def9416358877534caf6a0fdd2146c87a3e", size = 161774 },
+ { url = "https://files.pythonhosted.org/packages/f8/aa/7af4e81f7acba21a4c6be026da38fd2b872ca46226673c89a758ebdc4fd2/PyYAML-6.0.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:cc1c1159b3d456576af7a3e4d1ba7e6924cb39de8f67111c735f6fc832082774", size = 184612 },
+ { url = "https://files.pythonhosted.org/packages/8b/62/b9faa998fd185f65c1371643678e4d58254add437edb764a08c5a98fb986/PyYAML-6.0.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:1e2120ef853f59c7419231f3bf4e7021f1b936f6ebd222406c3b60212205d2ee", size = 172040 },
+ { url = "https://files.pythonhosted.org/packages/ad/0c/c804f5f922a9a6563bab712d8dcc70251e8af811fce4524d57c2c0fd49a4/PyYAML-6.0.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5d225db5a45f21e78dd9358e58a98702a0302f2659a3c6cd320564b75b86f47c", size = 736829 },
+ { url = "https://files.pythonhosted.org/packages/51/16/6af8d6a6b210c8e54f1406a6b9481febf9c64a3109c541567e35a49aa2e7/PyYAML-6.0.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5ac9328ec4831237bec75defaf839f7d4564be1e6b25ac710bd1a96321cc8317", size = 764167 },
+ { url = "https://files.pythonhosted.org/packages/75/e4/2c27590dfc9992f73aabbeb9241ae20220bd9452df27483b6e56d3975cc5/PyYAML-6.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3ad2a3decf9aaba3d29c8f537ac4b243e36bef957511b4766cb0057d32b0be85", size = 762952 },
+ { url = "https://files.pythonhosted.org/packages/9b/97/ecc1abf4a823f5ac61941a9c00fe501b02ac3ab0e373c3857f7d4b83e2b6/PyYAML-6.0.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:ff3824dc5261f50c9b0dfb3be22b4567a6f938ccce4587b38952d85fd9e9afe4", size = 735301 },
+ { url = "https://files.pythonhosted.org/packages/45/73/0f49dacd6e82c9430e46f4a027baa4ca205e8b0a9dce1397f44edc23559d/PyYAML-6.0.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:797b4f722ffa07cc8d62053e4cff1486fa6dc094105d13fea7b1de7d8bf71c9e", size = 756638 },
+ { url = "https://files.pythonhosted.org/packages/22/5f/956f0f9fc65223a58fbc14459bf34b4cc48dec52e00535c79b8db361aabd/PyYAML-6.0.2-cp311-cp311-win32.whl", hash = "sha256:11d8f3dd2b9c1207dcaf2ee0bbbfd5991f571186ec9cc78427ba5bd32afae4b5", size = 143850 },
+ { url = "https://files.pythonhosted.org/packages/ed/23/8da0bbe2ab9dcdd11f4f4557ccaf95c10b9811b13ecced089d43ce59c3c8/PyYAML-6.0.2-cp311-cp311-win_amd64.whl", hash = "sha256:e10ce637b18caea04431ce14fabcf5c64a1c61ec9c56b071a4b7ca131ca52d44", size = 161980 },
+ { url = "https://files.pythonhosted.org/packages/86/0c/c581167fc46d6d6d7ddcfb8c843a4de25bdd27e4466938109ca68492292c/PyYAML-6.0.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:c70c95198c015b85feafc136515252a261a84561b7b1d51e3384e0655ddf25ab", size = 183873 },
+ { url = "https://files.pythonhosted.org/packages/a8/0c/38374f5bb272c051e2a69281d71cba6fdb983413e6758b84482905e29a5d/PyYAML-6.0.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ce826d6ef20b1bc864f0a68340c8b3287705cae2f8b4b1d932177dcc76721725", size = 173302 },
+ { url = "https://files.pythonhosted.org/packages/c3/93/9916574aa8c00aa06bbac729972eb1071d002b8e158bd0e83a3b9a20a1f7/PyYAML-6.0.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1f71ea527786de97d1a0cc0eacd1defc0985dcf6b3f17bb77dcfc8c34bec4dc5", size = 739154 },
+ { url = "https://files.pythonhosted.org/packages/95/0f/b8938f1cbd09739c6da569d172531567dbcc9789e0029aa070856f123984/PyYAML-6.0.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9b22676e8097e9e22e36d6b7bda33190d0d400f345f23d4065d48f4ca7ae0425", size = 766223 },
+ { url = "https://files.pythonhosted.org/packages/b9/2b/614b4752f2e127db5cc206abc23a8c19678e92b23c3db30fc86ab731d3bd/PyYAML-6.0.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:80bab7bfc629882493af4aa31a4cfa43a4c57c83813253626916b8c7ada83476", size = 767542 },
+ { url = "https://files.pythonhosted.org/packages/d4/00/dd137d5bcc7efea1836d6264f049359861cf548469d18da90cd8216cf05f/PyYAML-6.0.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:0833f8694549e586547b576dcfaba4a6b55b9e96098b36cdc7ebefe667dfed48", size = 731164 },
+ { url = "https://files.pythonhosted.org/packages/c9/1f/4f998c900485e5c0ef43838363ba4a9723ac0ad73a9dc42068b12aaba4e4/PyYAML-6.0.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8b9c7197f7cb2738065c481a0461e50ad02f18c78cd75775628afb4d7137fb3b", size = 756611 },
+ { url = "https://files.pythonhosted.org/packages/df/d1/f5a275fdb252768b7a11ec63585bc38d0e87c9e05668a139fea92b80634c/PyYAML-6.0.2-cp312-cp312-win32.whl", hash = "sha256:ef6107725bd54b262d6dedcc2af448a266975032bc85ef0172c5f059da6325b4", size = 140591 },
+ { url = "https://files.pythonhosted.org/packages/0c/e8/4f648c598b17c3d06e8753d7d13d57542b30d56e6c2dedf9c331ae56312e/PyYAML-6.0.2-cp312-cp312-win_amd64.whl", hash = "sha256:7e7401d0de89a9a855c839bc697c079a4af81cf878373abd7dc625847d25cbd8", size = 156338 },
+ { url = "https://files.pythonhosted.org/packages/ef/e3/3af305b830494fa85d95f6d95ef7fa73f2ee1cc8ef5b495c7c3269fb835f/PyYAML-6.0.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:efdca5630322a10774e8e98e1af481aad470dd62c3170801852d752aa7a783ba", size = 181309 },
+ { url = "https://files.pythonhosted.org/packages/45/9f/3b1c20a0b7a3200524eb0076cc027a970d320bd3a6592873c85c92a08731/PyYAML-6.0.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:50187695423ffe49e2deacb8cd10510bc361faac997de9efef88badc3bb9e2d1", size = 171679 },
+ { url = "https://files.pythonhosted.org/packages/7c/9a/337322f27005c33bcb656c655fa78325b730324c78620e8328ae28b64d0c/PyYAML-6.0.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0ffe8360bab4910ef1b9e87fb812d8bc0a308b0d0eef8c8f44e0254ab3b07133", size = 733428 },
+ { url = "https://files.pythonhosted.org/packages/a3/69/864fbe19e6c18ea3cc196cbe5d392175b4cf3d5d0ac1403ec3f2d237ebb5/PyYAML-6.0.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:17e311b6c678207928d649faa7cb0d7b4c26a0ba73d41e99c4fff6b6c3276484", size = 763361 },
+ { url = "https://files.pythonhosted.org/packages/04/24/b7721e4845c2f162d26f50521b825fb061bc0a5afcf9a386840f23ea19fa/PyYAML-6.0.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:70b189594dbe54f75ab3a1acec5f1e3faa7e8cf2f1e08d9b561cb41b845f69d5", size = 759523 },
+ { url = "https://files.pythonhosted.org/packages/2b/b2/e3234f59ba06559c6ff63c4e10baea10e5e7df868092bf9ab40e5b9c56b6/PyYAML-6.0.2-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:41e4e3953a79407c794916fa277a82531dd93aad34e29c2a514c2c0c5fe971cc", size = 726660 },
+ { url = "https://files.pythonhosted.org/packages/fe/0f/25911a9f080464c59fab9027482f822b86bf0608957a5fcc6eaac85aa515/PyYAML-6.0.2-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:68ccc6023a3400877818152ad9a1033e3db8625d899c72eacb5a668902e4d652", size = 751597 },
+ { url = "https://files.pythonhosted.org/packages/14/0d/e2c3b43bbce3cf6bd97c840b46088a3031085179e596d4929729d8d68270/PyYAML-6.0.2-cp313-cp313-win32.whl", hash = "sha256:bc2fa7c6b47d6bc618dd7fb02ef6fdedb1090ec036abab80d4681424b84c1183", size = 140527 },
+ { url = "https://files.pythonhosted.org/packages/fa/de/02b54f42487e3d3c6efb3f89428677074ca7bf43aae402517bc7cca949f3/PyYAML-6.0.2-cp313-cp313-win_amd64.whl", hash = "sha256:8388ee1976c416731879ac16da0aff3f63b286ffdd57cdeb95f3f2e085687563", size = 156446 },
+ { url = "https://files.pythonhosted.org/packages/65/d8/b7a1db13636d7fb7d4ff431593c510c8b8fca920ade06ca8ef20015493c5/PyYAML-6.0.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:688ba32a1cffef67fd2e9398a2efebaea461578b0923624778664cc1c914db5d", size = 184777 },
+ { url = "https://files.pythonhosted.org/packages/0a/02/6ec546cd45143fdf9840b2c6be8d875116a64076218b61d68e12548e5839/PyYAML-6.0.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:a8786accb172bd8afb8be14490a16625cbc387036876ab6ba70912730faf8e1f", size = 172318 },
+ { url = "https://files.pythonhosted.org/packages/0e/9a/8cc68be846c972bda34f6c2a93abb644fb2476f4dcc924d52175786932c9/PyYAML-6.0.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d8e03406cac8513435335dbab54c0d385e4a49e4945d2909a581c83647ca0290", size = 720891 },
+ { url = "https://files.pythonhosted.org/packages/e9/6c/6e1b7f40181bc4805e2e07f4abc10a88ce4648e7e95ff1abe4ae4014a9b2/PyYAML-6.0.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f753120cb8181e736c57ef7636e83f31b9c0d1722c516f7e86cf15b7aa57ff12", size = 722614 },
+ { url = "https://files.pythonhosted.org/packages/3d/32/e7bd8535d22ea2874cef6a81021ba019474ace0d13a4819c2a4bce79bd6a/PyYAML-6.0.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3b1fdb9dc17f5a7677423d508ab4f243a726dea51fa5e70992e59a7411c89d19", size = 737360 },
+ { url = "https://files.pythonhosted.org/packages/d7/12/7322c1e30b9be969670b672573d45479edef72c9a0deac3bb2868f5d7469/PyYAML-6.0.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:0b69e4ce7a131fe56b7e4d770c67429700908fc0752af059838b1cfb41960e4e", size = 699006 },
+ { url = "https://files.pythonhosted.org/packages/82/72/04fcad41ca56491995076630c3ec1e834be241664c0c09a64c9a2589b507/PyYAML-6.0.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:a9f8c2e67970f13b16084e04f134610fd1d374bf477b17ec1599185cf611d725", size = 723577 },
+ { url = "https://files.pythonhosted.org/packages/ed/5e/46168b1f2757f1fcd442bc3029cd8767d88a98c9c05770d8b420948743bb/PyYAML-6.0.2-cp39-cp39-win32.whl", hash = "sha256:6395c297d42274772abc367baaa79683958044e5d3835486c16da75d2a694631", size = 144593 },
+ { url = "https://files.pythonhosted.org/packages/19/87/5124b1c1f2412bb95c59ec481eaf936cd32f0fe2a7b16b97b81c4c017a6a/PyYAML-6.0.2-cp39-cp39-win_amd64.whl", hash = "sha256:39693e1f8320ae4f43943590b49779ffb98acb81f788220ea932a6b6c51004d8", size = 162312 },
+]
+
+[[package]]
+name = "pyzmq"
+version = "26.2.0"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "cffi", marker = "implementation_name == 'pypy'" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/fd/05/bed626b9f7bb2322cdbbf7b4bd8f54b1b617b0d2ab2d3547d6e39428a48e/pyzmq-26.2.0.tar.gz", hash = "sha256:070672c258581c8e4f640b5159297580a9974b026043bd4ab0470be9ed324f1f", size = 271975 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/1f/a8/9837c39aba390eb7d01924ace49d761c8dbe7bc2d6082346d00c8332e431/pyzmq-26.2.0-cp310-cp310-macosx_10_15_universal2.whl", hash = "sha256:ddf33d97d2f52d89f6e6e7ae66ee35a4d9ca6f36eda89c24591b0c40205a3629", size = 1340058 },
+ { url = "https://files.pythonhosted.org/packages/a2/1f/a006f2e8e4f7d41d464272012695da17fb95f33b54342612a6890da96ff6/pyzmq-26.2.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:dacd995031a01d16eec825bf30802fceb2c3791ef24bcce48fa98ce40918c27b", size = 1008818 },
+ { url = "https://files.pythonhosted.org/packages/b6/09/b51b6683fde5ca04593a57bbe81788b6b43114d8f8ee4e80afc991e14760/pyzmq-26.2.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:89289a5ee32ef6c439086184529ae060c741334b8970a6855ec0b6ad3ff28764", size = 673199 },
+ { url = "https://files.pythonhosted.org/packages/c9/78/486f3e2e824f3a645238332bf5a4c4b4477c3063033a27c1e4052358dee2/pyzmq-26.2.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5506f06d7dc6ecf1efacb4a013b1f05071bb24b76350832c96449f4a2d95091c", size = 911762 },
+ { url = "https://files.pythonhosted.org/packages/5e/3b/2eb1667c9b866f53e76ee8b0c301b0469745a23bd5a87b7ee3d5dd9eb6e5/pyzmq-26.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8ea039387c10202ce304af74def5021e9adc6297067f3441d348d2b633e8166a", size = 868773 },
+ { url = "https://files.pythonhosted.org/packages/16/29/ca99b4598a9dc7e468b5417eda91f372b595be1e3eec9b7cbe8e5d3584e8/pyzmq-26.2.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:a2224fa4a4c2ee872886ed00a571f5e967c85e078e8e8c2530a2fb01b3309b88", size = 868834 },
+ { url = "https://files.pythonhosted.org/packages/ad/e5/9efaeb1d2f4f8c50da04144f639b042bc52869d3a206d6bf672ab3522163/pyzmq-26.2.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:28ad5233e9c3b52d76196c696e362508959741e1a005fb8fa03b51aea156088f", size = 1202861 },
+ { url = "https://files.pythonhosted.org/packages/c3/62/c721b5608a8ac0a69bb83cbb7d07a56f3ff00b3991a138e44198a16f94c7/pyzmq-26.2.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:1c17211bc037c7d88e85ed8b7d8f7e52db6dc8eca5590d162717c654550f7282", size = 1515304 },
+ { url = "https://files.pythonhosted.org/packages/87/84/e8bd321aa99b72f48d4606fc5a0a920154125bd0a4608c67eab742dab087/pyzmq-26.2.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:b8f86dd868d41bea9a5f873ee13bf5551c94cf6bc51baebc6f85075971fe6eea", size = 1414712 },
+ { url = "https://files.pythonhosted.org/packages/cd/cd/420e3fd1ac6977b008b72e7ad2dae6350cc84d4c5027fc390b024e61738f/pyzmq-26.2.0-cp310-cp310-win32.whl", hash = "sha256:46a446c212e58456b23af260f3d9fb785054f3e3653dbf7279d8f2b5546b21c2", size = 578113 },
+ { url = "https://files.pythonhosted.org/packages/5c/57/73930d56ed45ae0cb4946f383f985c855c9b3d4063f26416998f07523c0e/pyzmq-26.2.0-cp310-cp310-win_amd64.whl", hash = "sha256:49d34ab71db5a9c292a7644ce74190b1dd5a3475612eefb1f8be1d6961441971", size = 641631 },
+ { url = "https://files.pythonhosted.org/packages/61/d2/ae6ac5c397f1ccad59031c64beaafce7a0d6182e0452cc48f1c9c87d2dd0/pyzmq-26.2.0-cp310-cp310-win_arm64.whl", hash = "sha256:bfa832bfa540e5b5c27dcf5de5d82ebc431b82c453a43d141afb1e5d2de025fa", size = 543528 },
+ { url = "https://files.pythonhosted.org/packages/12/20/de7442172f77f7c96299a0ac70e7d4fb78cd51eca67aa2cf552b66c14196/pyzmq-26.2.0-cp311-cp311-macosx_10_15_universal2.whl", hash = "sha256:8f7e66c7113c684c2b3f1c83cdd3376103ee0ce4c49ff80a648643e57fb22218", size = 1340639 },
+ { url = "https://files.pythonhosted.org/packages/98/4d/5000468bd64c7910190ed0a6c76a1ca59a68189ec1f007c451dc181a22f4/pyzmq-26.2.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:3a495b30fc91db2db25120df5847d9833af237546fd59170701acd816ccc01c4", size = 1008710 },
+ { url = "https://files.pythonhosted.org/packages/e1/bf/c67fd638c2f9fbbab8090a3ee779370b97c82b84cc12d0c498b285d7b2c0/pyzmq-26.2.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:77eb0968da535cba0470a5165468b2cac7772cfb569977cff92e240f57e31bef", size = 673129 },
+ { url = "https://files.pythonhosted.org/packages/86/94/99085a3f492aa538161cbf27246e8886ff850e113e0c294a5b8245f13b52/pyzmq-26.2.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6ace4f71f1900a548f48407fc9be59c6ba9d9aaf658c2eea6cf2779e72f9f317", size = 910107 },
+ { url = "https://files.pythonhosted.org/packages/31/1d/346809e8a9b999646d03f21096428453465b1bca5cd5c64ecd048d9ecb01/pyzmq-26.2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:92a78853d7280bffb93df0a4a6a2498cba10ee793cc8076ef797ef2f74d107cf", size = 867960 },
+ { url = "https://files.pythonhosted.org/packages/ab/68/6fb6ae5551846ad5beca295b7bca32bf0a7ce19f135cb30e55fa2314e6b6/pyzmq-26.2.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:689c5d781014956a4a6de61d74ba97b23547e431e9e7d64f27d4922ba96e9d6e", size = 869204 },
+ { url = "https://files.pythonhosted.org/packages/0f/f9/18417771dee223ccf0f48e29adf8b4e25ba6d0e8285e33bcbce078070bc3/pyzmq-26.2.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:0aca98bc423eb7d153214b2df397c6421ba6373d3397b26c057af3c904452e37", size = 1203351 },
+ { url = "https://files.pythonhosted.org/packages/e0/46/f13e67fe0d4f8a2315782cbad50493de6203ea0d744610faf4d5f5b16e90/pyzmq-26.2.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:1f3496d76b89d9429a656293744ceca4d2ac2a10ae59b84c1da9b5165f429ad3", size = 1514204 },
+ { url = "https://files.pythonhosted.org/packages/50/11/ddcf7343b7b7a226e0fc7b68cbf5a5bb56291fac07f5c3023bb4c319ebb4/pyzmq-26.2.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:5c2b3bfd4b9689919db068ac6c9911f3fcb231c39f7dd30e3138be94896d18e6", size = 1414339 },
+ { url = "https://files.pythonhosted.org/packages/01/14/1c18d7d5b7be2708f513f37c61bfadfa62161c10624f8733f1c8451b3509/pyzmq-26.2.0-cp311-cp311-win32.whl", hash = "sha256:eac5174677da084abf378739dbf4ad245661635f1600edd1221f150b165343f4", size = 576928 },
+ { url = "https://files.pythonhosted.org/packages/3b/1b/0a540edd75a41df14ec416a9a500b9fec66e554aac920d4c58fbd5756776/pyzmq-26.2.0-cp311-cp311-win_amd64.whl", hash = "sha256:5a509df7d0a83a4b178d0f937ef14286659225ef4e8812e05580776c70e155d5", size = 642317 },
+ { url = "https://files.pythonhosted.org/packages/98/77/1cbfec0358078a4c5add529d8a70892db1be900980cdb5dd0898b3d6ab9d/pyzmq-26.2.0-cp311-cp311-win_arm64.whl", hash = "sha256:c0e6091b157d48cbe37bd67233318dbb53e1e6327d6fc3bb284afd585d141003", size = 543834 },
+ { url = "https://files.pythonhosted.org/packages/28/2f/78a766c8913ad62b28581777ac4ede50c6d9f249d39c2963e279524a1bbe/pyzmq-26.2.0-cp312-cp312-macosx_10_15_universal2.whl", hash = "sha256:ded0fc7d90fe93ae0b18059930086c51e640cdd3baebdc783a695c77f123dcd9", size = 1343105 },
+ { url = "https://files.pythonhosted.org/packages/b7/9c/4b1e2d3d4065be715e007fe063ec7885978fad285f87eae1436e6c3201f4/pyzmq-26.2.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:17bf5a931c7f6618023cdacc7081f3f266aecb68ca692adac015c383a134ca52", size = 1008365 },
+ { url = "https://files.pythonhosted.org/packages/4f/ef/5a23ec689ff36d7625b38d121ef15abfc3631a9aecb417baf7a4245e4124/pyzmq-26.2.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:55cf66647e49d4621a7e20c8d13511ef1fe1efbbccf670811864452487007e08", size = 665923 },
+ { url = "https://files.pythonhosted.org/packages/ae/61/d436461a47437d63c6302c90724cf0981883ec57ceb6073873f32172d676/pyzmq-26.2.0-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4661c88db4a9e0f958c8abc2b97472e23061f0bc737f6f6179d7a27024e1faa5", size = 903400 },
+ { url = "https://files.pythonhosted.org/packages/47/42/fc6d35ecefe1739a819afaf6f8e686f7f02a4dd241c78972d316f403474c/pyzmq-26.2.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ea7f69de383cb47522c9c208aec6dd17697db7875a4674c4af3f8cfdac0bdeae", size = 860034 },
+ { url = "https://files.pythonhosted.org/packages/07/3b/44ea6266a6761e9eefaa37d98fabefa112328808ac41aa87b4bbb668af30/pyzmq-26.2.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:7f98f6dfa8b8ccaf39163ce872bddacca38f6a67289116c8937a02e30bbe9711", size = 860579 },
+ { url = "https://files.pythonhosted.org/packages/38/6f/4df2014ab553a6052b0e551b37da55166991510f9e1002c89cab7ce3b3f2/pyzmq-26.2.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:e3e0210287329272539eea617830a6a28161fbbd8a3271bf4150ae3e58c5d0e6", size = 1196246 },
+ { url = "https://files.pythonhosted.org/packages/38/9d/ee240fc0c9fe9817f0c9127a43238a3e28048795483c403cc10720ddef22/pyzmq-26.2.0-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:6b274e0762c33c7471f1a7471d1a2085b1a35eba5cdc48d2ae319f28b6fc4de3", size = 1507441 },
+ { url = "https://files.pythonhosted.org/packages/85/4f/01711edaa58d535eac4a26c294c617c9a01f09857c0ce191fd574d06f359/pyzmq-26.2.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:29c6a4635eef69d68a00321e12a7d2559fe2dfccfa8efae3ffb8e91cd0b36a8b", size = 1406498 },
+ { url = "https://files.pythonhosted.org/packages/07/18/907134c85c7152f679ed744e73e645b365f3ad571f38bdb62e36f347699a/pyzmq-26.2.0-cp312-cp312-win32.whl", hash = "sha256:989d842dc06dc59feea09e58c74ca3e1678c812a4a8a2a419046d711031f69c7", size = 575533 },
+ { url = "https://files.pythonhosted.org/packages/ce/2c/a6f4a20202a4d3c582ad93f95ee78d79bbdc26803495aec2912b17dbbb6c/pyzmq-26.2.0-cp312-cp312-win_amd64.whl", hash = "sha256:2a50625acdc7801bc6f74698c5c583a491c61d73c6b7ea4dee3901bb99adb27a", size = 637768 },
+ { url = "https://files.pythonhosted.org/packages/5f/0e/eb16ff731632d30554bf5af4dbba3ffcd04518219d82028aea4ae1b02ca5/pyzmq-26.2.0-cp312-cp312-win_arm64.whl", hash = "sha256:4d29ab8592b6ad12ebbf92ac2ed2bedcfd1cec192d8e559e2e099f648570e19b", size = 540675 },
+ { url = "https://files.pythonhosted.org/packages/04/a7/0f7e2f6c126fe6e62dbae0bc93b1bd3f1099cf7fea47a5468defebe3f39d/pyzmq-26.2.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:9dd8cd1aeb00775f527ec60022004d030ddc51d783d056e3e23e74e623e33726", size = 1006564 },
+ { url = "https://files.pythonhosted.org/packages/31/b6/a187165c852c5d49f826a690857684333a6a4a065af0a6015572d2284f6a/pyzmq-26.2.0-cp313-cp313-macosx_10_15_universal2.whl", hash = "sha256:28c812d9757fe8acecc910c9ac9dafd2ce968c00f9e619db09e9f8f54c3a68a3", size = 1340447 },
+ { url = "https://files.pythonhosted.org/packages/68/ba/f4280c58ff71f321602a6e24fd19879b7e79793fb8ab14027027c0fb58ef/pyzmq-26.2.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4d80b1dd99c1942f74ed608ddb38b181b87476c6a966a88a950c7dee118fdf50", size = 665485 },
+ { url = "https://files.pythonhosted.org/packages/77/b5/c987a5c53c7d8704216f29fc3d810b32f156bcea488a940e330e1bcbb88d/pyzmq-26.2.0-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8c997098cc65e3208eca09303630e84d42718620e83b733d0fd69543a9cab9cb", size = 903484 },
+ { url = "https://files.pythonhosted.org/packages/29/c9/07da157d2db18c72a7eccef8e684cefc155b712a88e3d479d930aa9eceba/pyzmq-26.2.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7ad1bc8d1b7a18497dda9600b12dc193c577beb391beae5cd2349184db40f187", size = 859981 },
+ { url = "https://files.pythonhosted.org/packages/43/09/e12501bd0b8394b7d02c41efd35c537a1988da67fc9c745cae9c6c776d31/pyzmq-26.2.0-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:bea2acdd8ea4275e1278350ced63da0b166421928276c7c8e3f9729d7402a57b", size = 860334 },
+ { url = "https://files.pythonhosted.org/packages/eb/ff/f5ec1d455f8f7385cc0a8b2acd8c807d7fade875c14c44b85c1bddabae21/pyzmq-26.2.0-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:23f4aad749d13698f3f7b64aad34f5fc02d6f20f05999eebc96b89b01262fb18", size = 1196179 },
+ { url = "https://files.pythonhosted.org/packages/ec/8a/bb2ac43295b1950fe436a81fc5b298be0b96ac76fb029b514d3ed58f7b27/pyzmq-26.2.0-cp313-cp313-musllinux_1_1_i686.whl", hash = "sha256:a4f96f0d88accc3dbe4a9025f785ba830f968e21e3e2c6321ccdfc9aef755115", size = 1507668 },
+ { url = "https://files.pythonhosted.org/packages/a9/49/dbc284ebcfd2dca23f6349227ff1616a7ee2c4a35fe0a5d6c3deff2b4fed/pyzmq-26.2.0-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:ced65e5a985398827cc9276b93ef6dfabe0273c23de8c7931339d7e141c2818e", size = 1406539 },
+ { url = "https://files.pythonhosted.org/packages/00/68/093cdce3fe31e30a341d8e52a1ad86392e13c57970d722c1f62a1d1a54b6/pyzmq-26.2.0-cp313-cp313-win32.whl", hash = "sha256:31507f7b47cc1ead1f6e86927f8ebb196a0bab043f6345ce070f412a59bf87b5", size = 575567 },
+ { url = "https://files.pythonhosted.org/packages/92/ae/6cc4657148143412b5819b05e362ae7dd09fb9fe76e2a539dcff3d0386bc/pyzmq-26.2.0-cp313-cp313-win_amd64.whl", hash = "sha256:70fc7fcf0410d16ebdda9b26cbd8bf8d803d220a7f3522e060a69a9c87bf7bad", size = 637551 },
+ { url = "https://files.pythonhosted.org/packages/6c/67/fbff102e201688f97c8092e4c3445d1c1068c2f27bbd45a578df97ed5f94/pyzmq-26.2.0-cp313-cp313-win_arm64.whl", hash = "sha256:c3789bd5768ab5618ebf09cef6ec2b35fed88709b104351748a63045f0ff9797", size = 540378 },
+ { url = "https://files.pythonhosted.org/packages/3f/fe/2d998380b6e0122c6c4bdf9b6caf490831e5f5e2d08a203b5adff060c226/pyzmq-26.2.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:034da5fc55d9f8da09015d368f519478a52675e558c989bfcb5cf6d4e16a7d2a", size = 1007378 },
+ { url = "https://files.pythonhosted.org/packages/4a/f4/30d6e7157f12b3a0390bde94d6a8567cdb88846ed068a6e17238a4ccf600/pyzmq-26.2.0-cp313-cp313t-macosx_10_15_universal2.whl", hash = "sha256:c92d73464b886931308ccc45b2744e5968cbaade0b1d6aeb40d8ab537765f5bc", size = 1329532 },
+ { url = "https://files.pythonhosted.org/packages/82/86/3fe917870e15ee1c3ad48229a2a64458e36036e64b4afa9659045d82bfa8/pyzmq-26.2.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:794a4562dcb374f7dbbfb3f51d28fb40123b5a2abadee7b4091f93054909add5", size = 653242 },
+ { url = "https://files.pythonhosted.org/packages/50/2d/242e7e6ef6c8c19e6cb52d095834508cd581ffb925699fd3c640cdc758f1/pyzmq-26.2.0-cp313-cp313t-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:aee22939bb6075e7afededabad1a56a905da0b3c4e3e0c45e75810ebe3a52672", size = 888404 },
+ { url = "https://files.pythonhosted.org/packages/ac/11/7270566e1f31e4ea73c81ec821a4b1688fd551009a3d2bab11ec66cb1e8f/pyzmq-26.2.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2ae90ff9dad33a1cfe947d2c40cb9cb5e600d759ac4f0fd22616ce6540f72797", size = 845858 },
+ { url = "https://files.pythonhosted.org/packages/91/d5/72b38fbc69867795c8711bdd735312f9fef1e3d9204e2f63ab57085434b9/pyzmq-26.2.0-cp313-cp313t-manylinux_2_28_x86_64.whl", hash = "sha256:43a47408ac52647dfabbc66a25b05b6a61700b5165807e3fbd40063fcaf46386", size = 847375 },
+ { url = "https://files.pythonhosted.org/packages/dd/9a/10ed3c7f72b4c24e719c59359fbadd1a27556a28b36cdf1cd9e4fb7845d5/pyzmq-26.2.0-cp313-cp313t-musllinux_1_1_aarch64.whl", hash = "sha256:25bf2374a2a8433633c65ccb9553350d5e17e60c8eb4de4d92cc6bd60f01d306", size = 1183489 },
+ { url = "https://files.pythonhosted.org/packages/72/2d/8660892543fabf1fe41861efa222455811adac9f3c0818d6c3170a1153e3/pyzmq-26.2.0-cp313-cp313t-musllinux_1_1_i686.whl", hash = "sha256:007137c9ac9ad5ea21e6ad97d3489af654381324d5d3ba614c323f60dab8fae6", size = 1492932 },
+ { url = "https://files.pythonhosted.org/packages/7b/d6/32fd69744afb53995619bc5effa2a405ae0d343cd3e747d0fbc43fe894ee/pyzmq-26.2.0-cp313-cp313t-musllinux_1_1_x86_64.whl", hash = "sha256:470d4a4f6d48fb34e92d768b4e8a5cc3780db0d69107abf1cd7ff734b9766eb0", size = 1392485 },
+ { url = "https://files.pythonhosted.org/packages/ac/9e/ad5fbbe1bcc7a9d1e8c5f4f7de48f2c1dc481e151ef80cc1ce9a7fe67b55/pyzmq-26.2.0-cp39-cp39-macosx_10_15_universal2.whl", hash = "sha256:b1d464cb8d72bfc1a3adc53305a63a8e0cac6bc8c5a07e8ca190ab8d3faa43c2", size = 1341256 },
+ { url = "https://files.pythonhosted.org/packages/4c/d9/d7a8022108c214803a82b0b69d4885cee00933d21928f1f09dca371cf4bf/pyzmq-26.2.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:4da04c48873a6abdd71811c5e163bd656ee1b957971db7f35140a2d573f6949c", size = 1009385 },
+ { url = "https://files.pythonhosted.org/packages/ed/69/0529b59ac667ea8bfe8796ac71796b688fbb42ff78e06525dabfed3bc7ae/pyzmq-26.2.0-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:d049df610ac811dcffdc147153b414147428567fbbc8be43bb8885f04db39d98", size = 908009 },
+ { url = "https://files.pythonhosted.org/packages/6e/bd/3ff3e1172f12f55769793a3a334e956ec2886805ebfb2f64756b6b5c6a1a/pyzmq-26.2.0-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:05590cdbc6b902101d0e65d6a4780af14dc22914cc6ab995d99b85af45362cc9", size = 862078 },
+ { url = "https://files.pythonhosted.org/packages/c3/ec/ab13585c3a1f48e2874253844c47b194d56eb25c94718691349c646f336f/pyzmq-26.2.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c811cfcd6a9bf680236c40c6f617187515269ab2912f3d7e8c0174898e2519db", size = 673756 },
+ { url = "https://files.pythonhosted.org/packages/1e/be/febcd4b04dd50ee6d514dfbc33a3d5d9cb38ec9516e02bbfc929baa0f141/pyzmq-26.2.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:6835dd60355593de10350394242b5757fbbd88b25287314316f266e24c61d073", size = 1203684 },
+ { url = "https://files.pythonhosted.org/packages/16/28/304150e71afd2df3b82f52f66c0d8ab9ac6fe1f1ffdf92bad4c8cc91d557/pyzmq-26.2.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:bc6bee759a6bddea5db78d7dcd609397449cb2d2d6587f48f3ca613b19410cfc", size = 1515864 },
+ { url = "https://files.pythonhosted.org/packages/18/89/8d48d8cd505c12a1f5edee597cc32ffcedc65fd8d2603aebaaedc38a7041/pyzmq-26.2.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:c530e1eecd036ecc83c3407f77bb86feb79916d4a33d11394b8234f3bd35b940", size = 1415383 },
+ { url = "https://files.pythonhosted.org/packages/d4/7e/43a60c3b179f7da0cbc2b649bd2702fd6a39bff5f72aa38d6e1aeb00256d/pyzmq-26.2.0-cp39-cp39-win32.whl", hash = "sha256:367b4f689786fca726ef7a6c5ba606958b145b9340a5e4808132cc65759abd44", size = 578540 },
+ { url = "https://files.pythonhosted.org/packages/3a/55/8841dcd28f783ad06674c8fe8d7d72794b548d0bff8829aaafeb72e8b44d/pyzmq-26.2.0-cp39-cp39-win_amd64.whl", hash = "sha256:e6fa2e3e683f34aea77de8112f6483803c96a44fd726d7358b9888ae5bb394ec", size = 642147 },
+ { url = "https://files.pythonhosted.org/packages/b4/78/b3c31ccfcfcdd6ea50b6abc8f46a2a7aadb9c3d40531d1b908d834aaa12e/pyzmq-26.2.0-cp39-cp39-win_arm64.whl", hash = "sha256:7445be39143a8aa4faec43b076e06944b8f9d0701b669df4af200531b21e40bb", size = 543903 },
+ { url = "https://files.pythonhosted.org/packages/53/fb/36b2b2548286e9444e52fcd198760af99fd89102b5be50f0660fcfe902df/pyzmq-26.2.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:706e794564bec25819d21a41c31d4df2d48e1cc4b061e8d345d7fb4dd3e94072", size = 906955 },
+ { url = "https://files.pythonhosted.org/packages/77/8f/6ce54f8979a01656e894946db6299e2273fcee21c8e5fa57c6295ef11f57/pyzmq-26.2.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8b435f2753621cd36e7c1762156815e21c985c72b19135dac43a7f4f31d28dd1", size = 565701 },
+ { url = "https://files.pythonhosted.org/packages/ee/1c/bf8cd66730a866b16db8483286078892b7f6536f8c389fb46e4beba0a970/pyzmq-26.2.0-pp310-pypy310_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:160c7e0a5eb178011e72892f99f918c04a131f36056d10d9c1afb223fc952c2d", size = 794312 },
+ { url = "https://files.pythonhosted.org/packages/71/43/91fa4ff25bbfdc914ab6bafa0f03241d69370ef31a761d16bb859f346582/pyzmq-26.2.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2c4a71d5d6e7b28a47a394c0471b7e77a0661e2d651e7ae91e0cab0a587859ca", size = 752775 },
+ { url = "https://files.pythonhosted.org/packages/ec/d2/3b2ab40f455a256cb6672186bea95cd97b459ce4594050132d71e76f0d6f/pyzmq-26.2.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:90412f2db8c02a3864cbfc67db0e3dcdbda336acf1c469526d3e869394fe001c", size = 550762 },
+ { url = "https://files.pythonhosted.org/packages/6c/78/3096d72581365dfb0081ac9512a3b53672fa69854aa174d78636510c4db8/pyzmq-26.2.0-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:cdeabcff45d1c219636ee2e54d852262e5c2e085d6cb476d938aee8d921356b3", size = 906945 },
+ { url = "https://files.pythonhosted.org/packages/da/f2/8054574d77c269c31d055d4daf3d8407adf61ea384a50c8d14b158551d09/pyzmq-26.2.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:35cffef589bcdc587d06f9149f8d5e9e8859920a071df5a2671de2213bef592a", size = 565698 },
+ { url = "https://files.pythonhosted.org/packages/77/21/c3ad93236d1d60eea10b67528f55e7db115a9d32e2bf163fcf601f85e9cc/pyzmq-26.2.0-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:18c8dc3b7468d8b4bdf60ce9d7141897da103c7a4690157b32b60acb45e333e6", size = 794307 },
+ { url = "https://files.pythonhosted.org/packages/6a/49/e95b491724500fcb760178ce8db39b923429e328e57bcf9162e32c2c187c/pyzmq-26.2.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7133d0a1677aec369d67dd78520d3fa96dd7f3dcec99d66c1762870e5ea1a50a", size = 752769 },
+ { url = "https://files.pythonhosted.org/packages/9b/a9/50c9c06762b30792f71aaad8d1886748d39c4bffedc1171fbc6ad2b92d67/pyzmq-26.2.0-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:6a96179a24b14fa6428cbfc08641c779a53f8fcec43644030328f44034c7f1f4", size = 751338 },
+ { url = "https://files.pythonhosted.org/packages/ca/63/27e6142b4f67a442ee480986ca5b88edb01462dd2319843057683a5148bd/pyzmq-26.2.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:4f78c88905461a9203eac9faac157a2a0dbba84a0fd09fd29315db27be40af9f", size = 550757 },
+]
+
+[[package]]
+name = "referencing"
+version = "0.36.1"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "attrs" },
+ { name = "rpds-py" },
+ { name = "typing-extensions", marker = "python_full_version < '3.13'" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/27/32/fd98246df7a0f309b58cae68b10b6b219ef2eb66747f00dfb34422687087/referencing-0.36.1.tar.gz", hash = "sha256:ca2e6492769e3602957e9b831b94211599d2aade9477f5d44110d2530cf9aade", size = 74661 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/cc/fa/9f193ef0c9074b659009f06d7cbacc6f25b072044815bcf799b76533dbb8/referencing-0.36.1-py3-none-any.whl", hash = "sha256:363d9c65f080d0d70bc41c721dce3c7f3e77fc09f269cd5c8813da18069a6794", size = 26777 },
+]
+
+[[package]]
+name = "requests"
+version = "2.32.3"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "certifi" },
+ { name = "charset-normalizer" },
+ { name = "idna" },
+ { name = "urllib3" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/63/70/2bf7780ad2d390a8d301ad0b550f1581eadbd9a20f896afe06353c2a2913/requests-2.32.3.tar.gz", hash = "sha256:55365417734eb18255590a9ff9eb97e9e1da868d4ccd6402399eaf68af20a760", size = 131218 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/f9/9b/335f9764261e915ed497fcdeb11df5dfd6f7bf257d4a6a2a686d80da4d54/requests-2.32.3-py3-none-any.whl", hash = "sha256:70761cfe03c773ceb22aa2f671b4757976145175cdfca038c02654d061d6dcc6", size = 64928 },
+]
+
+[[package]]
+name = "rich"
+version = "13.9.4"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "markdown-it-py" },
+ { name = "pygments" },
+ { name = "typing-extensions", marker = "python_full_version < '3.11'" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/ab/3a/0316b28d0761c6734d6bc14e770d85506c986c85ffb239e688eeaab2c2bc/rich-13.9.4.tar.gz", hash = "sha256:439594978a49a09530cff7ebc4b5c7103ef57baf48d5ea3184f21d9a2befa098", size = 223149 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/19/71/39c7c0d87f8d4e6c020a393182060eaefeeae6c01dab6a84ec346f2567df/rich-13.9.4-py3-none-any.whl", hash = "sha256:6049d5e6ec054bf2779ab3358186963bac2ea89175919d699e378b99738c2a90", size = 242424 },
+]
+
+[[package]]
+name = "rpds-py"
+version = "0.22.3"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/01/80/cce854d0921ff2f0a9fa831ba3ad3c65cee3a46711addf39a2af52df2cfd/rpds_py-0.22.3.tar.gz", hash = "sha256:e32fee8ab45d3c2db6da19a5323bc3362237c8b653c70194414b892fd06a080d", size = 26771 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/42/2a/ead1d09e57449b99dcc190d8d2323e3a167421d8f8fdf0f217c6f6befe47/rpds_py-0.22.3-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:6c7b99ca52c2c1752b544e310101b98a659b720b21db00e65edca34483259967", size = 359514 },
+ { url = "https://files.pythonhosted.org/packages/8f/7e/1254f406b7793b586c68e217a6a24ec79040f85e030fff7e9049069284f4/rpds_py-0.22.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:be2eb3f2495ba669d2a985f9b426c1797b7d48d6963899276d22f23e33d47e37", size = 349031 },
+ { url = "https://files.pythonhosted.org/packages/aa/da/17c6a2c73730d426df53675ff9cc6653ac7a60b6438d03c18e1c822a576a/rpds_py-0.22.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:70eb60b3ae9245ddea20f8a4190bd79c705a22f8028aaf8bbdebe4716c3fab24", size = 381485 },
+ { url = "https://files.pythonhosted.org/packages/aa/13/2dbacd820466aa2a3c4b747afb18d71209523d353cf865bf8f4796c969ea/rpds_py-0.22.3-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:4041711832360a9b75cfb11b25a6a97c8fb49c07b8bd43d0d02b45d0b499a4ff", size = 386794 },
+ { url = "https://files.pythonhosted.org/packages/6d/62/96905d0a35ad4e4bc3c098b2f34b2e7266e211d08635baa690643d2227be/rpds_py-0.22.3-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:64607d4cbf1b7e3c3c8a14948b99345eda0e161b852e122c6bb71aab6d1d798c", size = 423523 },
+ { url = "https://files.pythonhosted.org/packages/eb/1b/d12770f2b6a9fc2c3ec0d810d7d440f6d465ccd8b7f16ae5385952c28b89/rpds_py-0.22.3-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:81e69b0a0e2537f26d73b4e43ad7bc8c8efb39621639b4434b76a3de50c6966e", size = 446695 },
+ { url = "https://files.pythonhosted.org/packages/4d/cf/96f1fd75512a017f8e07408b6d5dbeb492d9ed46bfe0555544294f3681b3/rpds_py-0.22.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc27863442d388870c1809a87507727b799c8460573cfbb6dc0eeaef5a11b5ec", size = 381959 },
+ { url = "https://files.pythonhosted.org/packages/ab/f0/d1c5b501c8aea85aeb938b555bfdf7612110a2f8cdc21ae0482c93dd0c24/rpds_py-0.22.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e79dd39f1e8c3504be0607e5fc6e86bb60fe3584bec8b782578c3b0fde8d932c", size = 410420 },
+ { url = "https://files.pythonhosted.org/packages/33/3b/45b6c58fb6aad5a569ae40fb890fc494c6b02203505a5008ee6dc68e65f7/rpds_py-0.22.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:e0fa2d4ec53dc51cf7d3bb22e0aa0143966119f42a0c3e4998293a3dd2856b09", size = 557620 },
+ { url = "https://files.pythonhosted.org/packages/83/62/3fdd2d3d47bf0bb9b931c4c73036b4ab3ec77b25e016ae26fab0f02be2af/rpds_py-0.22.3-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:fda7cb070f442bf80b642cd56483b5548e43d366fe3f39b98e67cce780cded00", size = 584202 },
+ { url = "https://files.pythonhosted.org/packages/04/f2/5dced98b64874b84ca824292f9cee2e3f30f3bcf231d15a903126684f74d/rpds_py-0.22.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:cff63a0272fcd259dcc3be1657b07c929c466b067ceb1c20060e8d10af56f5bf", size = 552787 },
+ { url = "https://files.pythonhosted.org/packages/67/13/2273dea1204eda0aea0ef55145da96a9aa28b3f88bb5c70e994f69eda7c3/rpds_py-0.22.3-cp310-cp310-win32.whl", hash = "sha256:9bd7228827ec7bb817089e2eb301d907c0d9827a9e558f22f762bb690b131652", size = 220088 },
+ { url = "https://files.pythonhosted.org/packages/4e/80/8c8176b67ad7f4a894967a7a4014ba039626d96f1d4874d53e409b58d69f/rpds_py-0.22.3-cp310-cp310-win_amd64.whl", hash = "sha256:9beeb01d8c190d7581a4d59522cd3d4b6887040dcfc744af99aa59fef3e041a8", size = 231737 },
+ { url = "https://files.pythonhosted.org/packages/15/ad/8d1ddf78f2805a71253fcd388017e7b4a0615c22c762b6d35301fef20106/rpds_py-0.22.3-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:d20cfb4e099748ea39e6f7b16c91ab057989712d31761d3300d43134e26e165f", size = 359773 },
+ { url = "https://files.pythonhosted.org/packages/c8/75/68c15732293a8485d79fe4ebe9045525502a067865fa4278f178851b2d87/rpds_py-0.22.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:68049202f67380ff9aa52f12e92b1c30115f32e6895cd7198fa2a7961621fc5a", size = 349214 },
+ { url = "https://files.pythonhosted.org/packages/3c/4c/7ce50f3070083c2e1b2bbd0fb7046f3da55f510d19e283222f8f33d7d5f4/rpds_py-0.22.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fb4f868f712b2dd4bcc538b0a0c1f63a2b1d584c925e69a224d759e7070a12d5", size = 380477 },
+ { url = "https://files.pythonhosted.org/packages/9a/e9/835196a69cb229d5c31c13b8ae603bd2da9a6695f35fe4270d398e1db44c/rpds_py-0.22.3-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:bc51abd01f08117283c5ebf64844a35144a0843ff7b2983e0648e4d3d9f10dbb", size = 386171 },
+ { url = "https://files.pythonhosted.org/packages/f9/8e/33fc4eba6683db71e91e6d594a2cf3a8fbceb5316629f0477f7ece5e3f75/rpds_py-0.22.3-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0f3cec041684de9a4684b1572fe28c7267410e02450f4561700ca5a3bc6695a2", size = 422676 },
+ { url = "https://files.pythonhosted.org/packages/37/47/2e82d58f8046a98bb9497a8319604c92b827b94d558df30877c4b3c6ccb3/rpds_py-0.22.3-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7ef9d9da710be50ff6809fed8f1963fecdfecc8b86656cadfca3bc24289414b0", size = 446152 },
+ { url = "https://files.pythonhosted.org/packages/e1/78/79c128c3e71abbc8e9739ac27af11dc0f91840a86fce67ff83c65d1ba195/rpds_py-0.22.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:59f4a79c19232a5774aee369a0c296712ad0e77f24e62cad53160312b1c1eaa1", size = 381300 },
+ { url = "https://files.pythonhosted.org/packages/c9/5b/2e193be0e8b228c1207f31fa3ea79de64dadb4f6a4833111af8145a6bc33/rpds_py-0.22.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:1a60bce91f81ddaac922a40bbb571a12c1070cb20ebd6d49c48e0b101d87300d", size = 409636 },
+ { url = "https://files.pythonhosted.org/packages/c2/3f/687c7100b762d62186a1c1100ffdf99825f6fa5ea94556844bbbd2d0f3a9/rpds_py-0.22.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:e89391e6d60251560f0a8f4bd32137b077a80d9b7dbe6d5cab1cd80d2746f648", size = 556708 },
+ { url = "https://files.pythonhosted.org/packages/8c/a2/c00cbc4b857e8b3d5e7f7fc4c81e23afd8c138b930f4f3ccf9a41a23e9e4/rpds_py-0.22.3-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:e3fb866d9932a3d7d0c82da76d816996d1667c44891bd861a0f97ba27e84fc74", size = 583554 },
+ { url = "https://files.pythonhosted.org/packages/d0/08/696c9872cf56effdad9ed617ac072f6774a898d46b8b8964eab39ec562d2/rpds_py-0.22.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:1352ae4f7c717ae8cba93421a63373e582d19d55d2ee2cbb184344c82d2ae55a", size = 552105 },
+ { url = "https://files.pythonhosted.org/packages/18/1f/4df560be1e994f5adf56cabd6c117e02de7c88ee238bb4ce03ed50da9d56/rpds_py-0.22.3-cp311-cp311-win32.whl", hash = "sha256:b0b4136a252cadfa1adb705bb81524eee47d9f6aab4f2ee4fa1e9d3cd4581f64", size = 220199 },
+ { url = "https://files.pythonhosted.org/packages/b8/1b/c29b570bc5db8237553002788dc734d6bd71443a2ceac2a58202ec06ef12/rpds_py-0.22.3-cp311-cp311-win_amd64.whl", hash = "sha256:8bd7c8cfc0b8247c8799080fbff54e0b9619e17cdfeb0478ba7295d43f635d7c", size = 231775 },
+ { url = "https://files.pythonhosted.org/packages/75/47/3383ee3bd787a2a5e65a9b9edc37ccf8505c0a00170e3a5e6ea5fbcd97f7/rpds_py-0.22.3-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:27e98004595899949bd7a7b34e91fa7c44d7a97c40fcaf1d874168bb652ec67e", size = 352334 },
+ { url = "https://files.pythonhosted.org/packages/40/14/aa6400fa8158b90a5a250a77f2077c0d0cd8a76fce31d9f2b289f04c6dec/rpds_py-0.22.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:1978d0021e943aae58b9b0b196fb4895a25cc53d3956b8e35e0b7682eefb6d56", size = 342111 },
+ { url = "https://files.pythonhosted.org/packages/7d/06/395a13bfaa8a28b302fb433fb285a67ce0ea2004959a027aea8f9c52bad4/rpds_py-0.22.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:655ca44a831ecb238d124e0402d98f6212ac527a0ba6c55ca26f616604e60a45", size = 384286 },
+ { url = "https://files.pythonhosted.org/packages/43/52/d8eeaffab047e6b7b7ef7f00d5ead074a07973968ffa2d5820fa131d7852/rpds_py-0.22.3-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:feea821ee2a9273771bae61194004ee2fc33f8ec7db08117ef9147d4bbcbca8e", size = 391739 },
+ { url = "https://files.pythonhosted.org/packages/83/31/52dc4bde85c60b63719610ed6f6d61877effdb5113a72007679b786377b8/rpds_py-0.22.3-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:22bebe05a9ffc70ebfa127efbc429bc26ec9e9b4ee4d15a740033efda515cf3d", size = 427306 },
+ { url = "https://files.pythonhosted.org/packages/70/d5/1bab8e389c2261dba1764e9e793ed6830a63f830fdbec581a242c7c46bda/rpds_py-0.22.3-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3af6e48651c4e0d2d166dc1b033b7042ea3f871504b6805ba5f4fe31581d8d38", size = 442717 },
+ { url = "https://files.pythonhosted.org/packages/82/a1/a45f3e30835b553379b3a56ea6c4eb622cf11e72008229af840e4596a8ea/rpds_py-0.22.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e67ba3c290821343c192f7eae1d8fd5999ca2dc99994114643e2f2d3e6138b15", size = 385721 },
+ { url = "https://files.pythonhosted.org/packages/a6/27/780c942de3120bdd4d0e69583f9c96e179dfff082f6ecbb46b8d6488841f/rpds_py-0.22.3-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:02fbb9c288ae08bcb34fb41d516d5eeb0455ac35b5512d03181d755d80810059", size = 415824 },
+ { url = "https://files.pythonhosted.org/packages/94/0b/aa0542ca88ad20ea719b06520f925bae348ea5c1fdf201b7e7202d20871d/rpds_py-0.22.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:f56a6b404f74ab372da986d240e2e002769a7d7102cc73eb238a4f72eec5284e", size = 561227 },
+ { url = "https://files.pythonhosted.org/packages/0d/92/3ed77d215f82c8f844d7f98929d56cc321bb0bcfaf8f166559b8ec56e5f1/rpds_py-0.22.3-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:0a0461200769ab3b9ab7e513f6013b7a97fdeee41c29b9db343f3c5a8e2b9e61", size = 587424 },
+ { url = "https://files.pythonhosted.org/packages/09/42/cacaeb047a22cab6241f107644f230e2935d4efecf6488859a7dd82fc47d/rpds_py-0.22.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:8633e471c6207a039eff6aa116e35f69f3156b3989ea3e2d755f7bc41754a4a7", size = 555953 },
+ { url = "https://files.pythonhosted.org/packages/e6/52/c921dc6d5f5d45b212a456c1f5b17df1a471127e8037eb0972379e39dff4/rpds_py-0.22.3-cp312-cp312-win32.whl", hash = "sha256:593eba61ba0c3baae5bc9be2f5232430453fb4432048de28399ca7376de9c627", size = 221339 },
+ { url = "https://files.pythonhosted.org/packages/f2/c7/f82b5be1e8456600395366f86104d1bd8d0faed3802ad511ef6d60c30d98/rpds_py-0.22.3-cp312-cp312-win_amd64.whl", hash = "sha256:d115bffdd417c6d806ea9069237a4ae02f513b778e3789a359bc5856e0404cc4", size = 235786 },
+ { url = "https://files.pythonhosted.org/packages/d0/bf/36d5cc1f2c609ae6e8bf0fc35949355ca9d8790eceb66e6385680c951e60/rpds_py-0.22.3-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:ea7433ce7e4bfc3a85654aeb6747babe3f66eaf9a1d0c1e7a4435bbdf27fea84", size = 351657 },
+ { url = "https://files.pythonhosted.org/packages/24/2a/f1e0fa124e300c26ea9382e59b2d582cba71cedd340f32d1447f4f29fa4e/rpds_py-0.22.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:6dd9412824c4ce1aca56c47b0991e65bebb7ac3f4edccfd3f156150c96a7bf25", size = 341829 },
+ { url = "https://files.pythonhosted.org/packages/cf/c2/0da1231dd16953845bed60d1a586fcd6b15ceaeb965f4d35cdc71f70f606/rpds_py-0.22.3-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:20070c65396f7373f5df4005862fa162db5d25d56150bddd0b3e8214e8ef45b4", size = 384220 },
+ { url = "https://files.pythonhosted.org/packages/c7/73/a4407f4e3a00a9d4b68c532bf2d873d6b562854a8eaff8faa6133b3588ec/rpds_py-0.22.3-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:0b09865a9abc0ddff4e50b5ef65467cd94176bf1e0004184eb915cbc10fc05c5", size = 391009 },
+ { url = "https://files.pythonhosted.org/packages/a9/c3/04b7353477ab360fe2563f5f0b176d2105982f97cd9ae80a9c5a18f1ae0f/rpds_py-0.22.3-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3453e8d41fe5f17d1f8e9c383a7473cd46a63661628ec58e07777c2fff7196dc", size = 426989 },
+ { url = "https://files.pythonhosted.org/packages/8d/e6/e4b85b722bcf11398e17d59c0f6049d19cd606d35363221951e6d625fcb0/rpds_py-0.22.3-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f5d36399a1b96e1a5fdc91e0522544580dbebeb1f77f27b2b0ab25559e103b8b", size = 441544 },
+ { url = "https://files.pythonhosted.org/packages/27/fc/403e65e56f65fff25f2973216974976d3f0a5c3f30e53758589b6dc9b79b/rpds_py-0.22.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:009de23c9c9ee54bf11303a966edf4d9087cd43a6003672e6aa7def643d06518", size = 385179 },
+ { url = "https://files.pythonhosted.org/packages/57/9b/2be9ff9700d664d51fd96b33d6595791c496d2778cb0b2a634f048437a55/rpds_py-0.22.3-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:1aef18820ef3e4587ebe8b3bc9ba6e55892a6d7b93bac6d29d9f631a3b4befbd", size = 415103 },
+ { url = "https://files.pythonhosted.org/packages/bb/a5/03c2ad8ca10994fcf22dd2150dd1d653bc974fa82d9a590494c84c10c641/rpds_py-0.22.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:f60bd8423be1d9d833f230fdbccf8f57af322d96bcad6599e5a771b151398eb2", size = 560916 },
+ { url = "https://files.pythonhosted.org/packages/ba/2e/be4fdfc8b5b576e588782b56978c5b702c5a2307024120d8aeec1ab818f0/rpds_py-0.22.3-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:62d9cfcf4948683a18a9aff0ab7e1474d407b7bab2ca03116109f8464698ab16", size = 587062 },
+ { url = "https://files.pythonhosted.org/packages/67/e0/2034c221937709bf9c542603d25ad43a68b4b0a9a0c0b06a742f2756eb66/rpds_py-0.22.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:9253fc214112405f0afa7db88739294295f0e08466987f1d70e29930262b4c8f", size = 555734 },
+ { url = "https://files.pythonhosted.org/packages/ea/ce/240bae07b5401a22482b58e18cfbabaa392409b2797da60223cca10d7367/rpds_py-0.22.3-cp313-cp313-win32.whl", hash = "sha256:fb0ba113b4983beac1a2eb16faffd76cb41e176bf58c4afe3e14b9c681f702de", size = 220663 },
+ { url = "https://files.pythonhosted.org/packages/cb/f0/d330d08f51126330467edae2fa4efa5cec8923c87551a79299380fdea30d/rpds_py-0.22.3-cp313-cp313-win_amd64.whl", hash = "sha256:c58e2339def52ef6b71b8f36d13c3688ea23fa093353f3a4fee2556e62086ec9", size = 235503 },
+ { url = "https://files.pythonhosted.org/packages/f7/c4/dbe1cc03df013bf2feb5ad00615038050e7859f381e96fb5b7b4572cd814/rpds_py-0.22.3-cp313-cp313t-macosx_10_12_x86_64.whl", hash = "sha256:f82a116a1d03628a8ace4859556fb39fd1424c933341a08ea3ed6de1edb0283b", size = 347698 },
+ { url = "https://files.pythonhosted.org/packages/a4/3a/684f66dd6b0f37499cad24cd1c0e523541fd768576fa5ce2d0a8799c3cba/rpds_py-0.22.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:3dfcbc95bd7992b16f3f7ba05af8a64ca694331bd24f9157b49dadeeb287493b", size = 337330 },
+ { url = "https://files.pythonhosted.org/packages/82/eb/e022c08c2ce2e8f7683baa313476492c0e2c1ca97227fe8a75d9f0181e95/rpds_py-0.22.3-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:59259dc58e57b10e7e18ce02c311804c10c5a793e6568f8af4dead03264584d1", size = 380022 },
+ { url = "https://files.pythonhosted.org/packages/e4/21/5a80e653e4c86aeb28eb4fea4add1f72e1787a3299687a9187105c3ee966/rpds_py-0.22.3-cp313-cp313t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5725dd9cc02068996d4438d397e255dcb1df776b7ceea3b9cb972bdb11260a83", size = 390754 },
+ { url = "https://files.pythonhosted.org/packages/37/a4/d320a04ae90f72d080b3d74597074e62be0a8ecad7d7321312dfe2dc5a6a/rpds_py-0.22.3-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:99b37292234e61325e7a5bb9689e55e48c3f5f603af88b1642666277a81f1fbd", size = 423840 },
+ { url = "https://files.pythonhosted.org/packages/87/70/674dc47d93db30a6624279284e5631be4c3a12a0340e8e4f349153546728/rpds_py-0.22.3-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:27b1d3b3915a99208fee9ab092b8184c420f2905b7d7feb4aeb5e4a9c509b8a1", size = 438970 },
+ { url = "https://files.pythonhosted.org/packages/3f/64/9500f4d66601d55cadd21e90784cfd5d5f4560e129d72e4339823129171c/rpds_py-0.22.3-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f612463ac081803f243ff13cccc648578e2279295048f2a8d5eb430af2bae6e3", size = 383146 },
+ { url = "https://files.pythonhosted.org/packages/4d/45/630327addb1d17173adcf4af01336fd0ee030c04798027dfcb50106001e0/rpds_py-0.22.3-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f73d3fef726b3243a811121de45193c0ca75f6407fe66f3f4e183c983573e130", size = 408294 },
+ { url = "https://files.pythonhosted.org/packages/5f/ef/8efb3373cee54ea9d9980b772e5690a0c9e9214045a4e7fa35046e399fee/rpds_py-0.22.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:3f21f0495edea7fdbaaa87e633a8689cd285f8f4af5c869f27bc8074638ad69c", size = 556345 },
+ { url = "https://files.pythonhosted.org/packages/54/01/151d3b9ef4925fc8f15bfb131086c12ec3c3d6dd4a4f7589c335bf8e85ba/rpds_py-0.22.3-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:1e9663daaf7a63ceccbbb8e3808fe90415b0757e2abddbfc2e06c857bf8c5e2b", size = 582292 },
+ { url = "https://files.pythonhosted.org/packages/30/89/35fc7a6cdf3477d441c7aca5e9bbf5a14e0f25152aed7f63f4e0b141045d/rpds_py-0.22.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:a76e42402542b1fae59798fab64432b2d015ab9d0c8c47ba7addddbaf7952333", size = 553855 },
+ { url = "https://files.pythonhosted.org/packages/8f/e0/830c02b2457c4bd20a8c5bb394d31d81f57fbefce2dbdd2e31feff4f7003/rpds_py-0.22.3-cp313-cp313t-win32.whl", hash = "sha256:69803198097467ee7282750acb507fba35ca22cc3b85f16cf45fb01cb9097730", size = 219100 },
+ { url = "https://files.pythonhosted.org/packages/f8/30/7ac943f69855c2db77407ae363484b915d861702dbba1aa82d68d57f42be/rpds_py-0.22.3-cp313-cp313t-win_amd64.whl", hash = "sha256:f5cf2a0c2bdadf3791b5c205d55a37a54025c6e18a71c71f82bb536cf9a454bf", size = 233794 },
+ { url = "https://files.pythonhosted.org/packages/db/0f/a8ad17ddac7c880f48d5da50733dd25bfc35ba2be1bec9f23453e8c7a123/rpds_py-0.22.3-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:378753b4a4de2a7b34063d6f95ae81bfa7b15f2c1a04a9518e8644e81807ebea", size = 359735 },
+ { url = "https://files.pythonhosted.org/packages/0c/41/430903669397ea3ee76865e0b53ea236e8dc0ffbecde47b2c4c783ad6759/rpds_py-0.22.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:3445e07bf2e8ecfeef6ef67ac83de670358abf2996916039b16a218e3d95e97e", size = 348724 },
+ { url = "https://files.pythonhosted.org/packages/c9/5c/3496f4f0ee818297544f2d5f641c49dde8ae156392e6834b79c0609ba006/rpds_py-0.22.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7b2513ba235829860b13faa931f3b6846548021846ac808455301c23a101689d", size = 381782 },
+ { url = "https://files.pythonhosted.org/packages/b6/dc/db0523ce0cd16ce579185cc9aa9141992de956d0a9c469ecfd1fb5d54ddc/rpds_py-0.22.3-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:eaf16ae9ae519a0e237a0f528fd9f0197b9bb70f40263ee57ae53c2b8d48aeb3", size = 387036 },
+ { url = "https://files.pythonhosted.org/packages/85/2a/9525c2427d2c257f877348918136a5d4e1b945c205a256e53bec61e54551/rpds_py-0.22.3-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:583f6a1993ca3369e0f80ba99d796d8e6b1a3a2a442dd4e1a79e652116413091", size = 424566 },
+ { url = "https://files.pythonhosted.org/packages/b9/1c/f8c012a39794b84069635709f559c0309103d5d74b3f5013916e6ca4f174/rpds_py-0.22.3-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4617e1915a539a0d9a9567795023de41a87106522ff83fbfaf1f6baf8e85437e", size = 447203 },
+ { url = "https://files.pythonhosted.org/packages/93/f5/c1c772364570d35b98ba64f36ec90c3c6d0b932bc4d8b9b4efef6dc64b07/rpds_py-0.22.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0c150c7a61ed4a4f4955a96626574e9baf1adf772c2fb61ef6a5027e52803543", size = 382283 },
+ { url = "https://files.pythonhosted.org/packages/10/06/f94f61313f94fc75c3c3aa74563f80bbd990e5b25a7c1a38cee7d5d0309b/rpds_py-0.22.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2fa4331c200c2521512595253f5bb70858b90f750d39b8cbfd67465f8d1b596d", size = 410022 },
+ { url = "https://files.pythonhosted.org/packages/3f/b0/37ab416a9528419920dfb64886c220f58fcbd66b978e0a91b66e9ee9a993/rpds_py-0.22.3-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:214b7a953d73b5e87f0ebece4a32a5bd83c60a3ecc9d4ec8f1dca968a2d91e99", size = 557817 },
+ { url = "https://files.pythonhosted.org/packages/2c/5d/9daa18adcd676dd3b2817c8a7cec3f3ebeeb0ce0d05a1b63bf994fc5114f/rpds_py-0.22.3-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:f47ad3d5f3258bd7058d2d506852217865afefe6153a36eb4b6928758041d831", size = 585099 },
+ { url = "https://files.pythonhosted.org/packages/41/3f/ad4e58035d3f848410aa3d59857b5f238bafab81c8b4a844281f80445d62/rpds_py-0.22.3-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:f276b245347e6e36526cbd4a266a417796fc531ddf391e43574cf6466c492520", size = 552818 },
+ { url = "https://files.pythonhosted.org/packages/b8/19/123acae8f4cab3c9463097c3ced3cc87c46f405056e249c874940e045309/rpds_py-0.22.3-cp39-cp39-win32.whl", hash = "sha256:bbb232860e3d03d544bc03ac57855cd82ddf19c7a07651a7c0fdb95e9efea8b9", size = 220246 },
+ { url = "https://files.pythonhosted.org/packages/8b/8d/9db93e48d96ace1f6713c71ce72e2d94b71d82156c37b6a54e0930486f00/rpds_py-0.22.3-cp39-cp39-win_amd64.whl", hash = "sha256:cfbc454a2880389dbb9b5b398e50d439e2e58669160f27b60e5eca11f68ae17c", size = 231932 },
+ { url = "https://files.pythonhosted.org/packages/8b/63/e29f8ee14fcf383574f73b6bbdcbec0fbc2e5fc36b4de44d1ac389b1de62/rpds_py-0.22.3-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:d48424e39c2611ee1b84ad0f44fb3b2b53d473e65de061e3f460fc0be5f1939d", size = 360786 },
+ { url = "https://files.pythonhosted.org/packages/d3/e0/771ee28b02a24e81c8c0e645796a371350a2bb6672753144f36ae2d2afc9/rpds_py-0.22.3-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:24e8abb5878e250f2eb0d7859a8e561846f98910326d06c0d51381fed59357bd", size = 350589 },
+ { url = "https://files.pythonhosted.org/packages/cf/49/abad4c4a1e6f3adf04785a99c247bfabe55ed868133e2d1881200aa5d381/rpds_py-0.22.3-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4b232061ca880db21fa14defe219840ad9b74b6158adb52ddf0e87bead9e8493", size = 381848 },
+ { url = "https://files.pythonhosted.org/packages/3a/7d/f4bc6d6fbe6af7a0d2b5f2ee77079efef7c8528712745659ec0026888998/rpds_py-0.22.3-pp310-pypy310_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ac0a03221cdb5058ce0167ecc92a8c89e8d0decdc9e99a2ec23380793c4dcb96", size = 387879 },
+ { url = "https://files.pythonhosted.org/packages/13/b0/575c797377fdcd26cedbb00a3324232e4cb2c5d121f6e4b0dbf8468b12ef/rpds_py-0.22.3-pp310-pypy310_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:eb0c341fa71df5a4595f9501df4ac5abfb5a09580081dffbd1ddd4654e6e9123", size = 423916 },
+ { url = "https://files.pythonhosted.org/packages/54/78/87157fa39d58f32a68d3326f8a81ad8fb99f49fe2aa7ad9a1b7d544f9478/rpds_py-0.22.3-pp310-pypy310_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:bf9db5488121b596dbfc6718c76092fda77b703c1f7533a226a5a9f65248f8ad", size = 448410 },
+ { url = "https://files.pythonhosted.org/packages/59/69/860f89996065a88be1b6ff2d60e96a02b920a262d8aadab99e7903986597/rpds_py-0.22.3-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0b8db6b5b2d4491ad5b6bdc2bc7c017eec108acbf4e6785f42a9eb0ba234f4c9", size = 382841 },
+ { url = "https://files.pythonhosted.org/packages/bd/d7/bc144e10d27e3cb350f98df2492a319edd3caaf52ddfe1293f37a9afbfd7/rpds_py-0.22.3-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:b3d504047aba448d70cf6fa22e06cb09f7cbd761939fdd47604f5e007675c24e", size = 409662 },
+ { url = "https://files.pythonhosted.org/packages/14/2a/6bed0b05233c291a94c7e89bc76ffa1c619d4e1979fbfe5d96024020c1fb/rpds_py-0.22.3-pp310-pypy310_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:e61b02c3f7a1e0b75e20c3978f7135fd13cb6cf551bf4a6d29b999a88830a338", size = 558221 },
+ { url = "https://files.pythonhosted.org/packages/11/23/cd8f566de444a137bc1ee5795e47069a947e60810ba4152886fe5308e1b7/rpds_py-0.22.3-pp310-pypy310_pp73-musllinux_1_2_i686.whl", hash = "sha256:e35ba67d65d49080e8e5a1dd40101fccdd9798adb9b050ff670b7d74fa41c566", size = 583780 },
+ { url = "https://files.pythonhosted.org/packages/8d/63/79c3602afd14d501f751e615a74a59040328da5ef29ed5754ae80d236b84/rpds_py-0.22.3-pp310-pypy310_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:26fd7cac7dd51011a245f29a2cc6489c4608b5a8ce8d75661bb4a1066c52dfbe", size = 553619 },
+ { url = "https://files.pythonhosted.org/packages/9f/2e/c5c1689e80298d4e94c75b70faada4c25445739d91b94c211244a3ed7ed1/rpds_py-0.22.3-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:177c7c0fce2855833819c98e43c262007f42ce86651ffbb84f37883308cb0e7d", size = 233338 },
+ { url = "https://files.pythonhosted.org/packages/bc/b7/d2c205723e3b4d75b03215694f0297a1b4b395bf834cb5896ad9bbb90f90/rpds_py-0.22.3-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:bb47271f60660803ad11f4c61b42242b8c1312a31c98c578f79ef9387bbde21c", size = 360594 },
+ { url = "https://files.pythonhosted.org/packages/d8/8f/c3515f5234cf6055046d4cfe9c80a3742a20acfa7d0b1b290f0d7f56a8db/rpds_py-0.22.3-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:70fb28128acbfd264eda9bf47015537ba3fe86e40d046eb2963d75024be4d055", size = 349594 },
+ { url = "https://files.pythonhosted.org/packages/6b/98/5b487cb06afc484befe350c87fda37f4ce11333f04f3380aba43dcf5bce2/rpds_py-0.22.3-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:44d61b4b7d0c2c9ac019c314e52d7cbda0ae31078aabd0f22e583af3e0d79723", size = 381138 },
+ { url = "https://files.pythonhosted.org/packages/5e/3a/12308d2c51b3fdfc173619943b7dc5ba41b4850c47112eeda38d9c54ed12/rpds_py-0.22.3-pp39-pypy39_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5f0e260eaf54380380ac3808aa4ebe2d8ca28b9087cf411649f96bad6900c728", size = 387828 },
+ { url = "https://files.pythonhosted.org/packages/17/b2/c242241ab5a2a206e093f24ccbfa519c4bbf10a762ac90bffe1766c225e0/rpds_py-0.22.3-pp39-pypy39_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b25bc607423935079e05619d7de556c91fb6adeae9d5f80868dde3468657994b", size = 424634 },
+ { url = "https://files.pythonhosted.org/packages/d5/c7/52a1b15012139f3ba740f291f1d03c6b632938ba61bc605f24c101952493/rpds_py-0.22.3-pp39-pypy39_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:fb6116dfb8d1925cbdb52595560584db42a7f664617a1f7d7f6e32f138cdf37d", size = 447862 },
+ { url = "https://files.pythonhosted.org/packages/55/3e/4d3ed8fd01bad77e8ed101116fe63b03f1011940d9596a8f4d82ac80cacd/rpds_py-0.22.3-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a63cbdd98acef6570c62b92a1e43266f9e8b21e699c363c0fef13bd530799c11", size = 382506 },
+ { url = "https://files.pythonhosted.org/packages/30/78/df59d6f92470a84369a3757abeae1cfd7f7239c8beb6d948949bf78317d2/rpds_py-0.22.3-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2b8f60e1b739a74bab7e01fcbe3dddd4657ec685caa04681df9d562ef15b625f", size = 410534 },
+ { url = "https://files.pythonhosted.org/packages/38/97/ea45d1edd9b753b20084b52dd5db6ee5e1ac3e036a27149972398a413858/rpds_py-0.22.3-pp39-pypy39_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:2e8b55d8517a2fda8d95cb45d62a5a8bbf9dd0ad39c5b25c8833efea07b880ca", size = 557453 },
+ { url = "https://files.pythonhosted.org/packages/08/cd/3a1b35eb9da27ffbb981cfffd32a01c7655c4431ccb278cb3064f8887462/rpds_py-0.22.3-pp39-pypy39_pp73-musllinux_1_2_i686.whl", hash = "sha256:2de29005e11637e7a2361fa151f780ff8eb2543a0da1413bb951e9f14b699ef3", size = 584412 },
+ { url = "https://files.pythonhosted.org/packages/87/91/31d1c5aeb1606f71188259e0ba6ed6f5c21a3c72f58b51db6a8bd0aa2b5d/rpds_py-0.22.3-pp39-pypy39_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:666ecce376999bf619756a24ce15bb14c5bfaf04bf00abc7e663ce17c3f34fe7", size = 553446 },
+ { url = "https://files.pythonhosted.org/packages/e7/ad/03b5ccd1ab492c9dece85b3bf1c96453ab8c47983936fae6880f688f60b3/rpds_py-0.22.3-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:5246b14ca64a8675e0a7161f7af68fe3e910e6b90542b4bfb5439ba752191df6", size = 233013 },
+]
+
+[[package]]
+name = "ruff"
+version = "0.9.2"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/80/63/77ecca9d21177600f551d1c58ab0e5a0b260940ea7312195bd2a4798f8a8/ruff-0.9.2.tar.gz", hash = "sha256:b5eceb334d55fae5f316f783437392642ae18e16dcf4f1858d55d3c2a0f8f5d0", size = 3553799 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/af/b9/0e168e4e7fb3af851f739e8f07889b91d1a33a30fca8c29fa3149d6b03ec/ruff-0.9.2-py3-none-linux_armv6l.whl", hash = "sha256:80605a039ba1454d002b32139e4970becf84b5fee3a3c3bf1c2af6f61a784347", size = 11652408 },
+ { url = "https://files.pythonhosted.org/packages/2c/22/08ede5db17cf701372a461d1cb8fdde037da1d4fa622b69ac21960e6237e/ruff-0.9.2-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:b9aab82bb20afd5f596527045c01e6ae25a718ff1784cb92947bff1f83068b00", size = 11587553 },
+ { url = "https://files.pythonhosted.org/packages/42/05/dedfc70f0bf010230229e33dec6e7b2235b2a1b8cbb2a991c710743e343f/ruff-0.9.2-py3-none-macosx_11_0_arm64.whl", hash = "sha256:fbd337bac1cfa96be615f6efcd4bc4d077edbc127ef30e2b8ba2a27e18c054d4", size = 11020755 },
+ { url = "https://files.pythonhosted.org/packages/df/9b/65d87ad9b2e3def67342830bd1af98803af731243da1255537ddb8f22209/ruff-0.9.2-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:82b35259b0cbf8daa22a498018e300b9bb0174c2bbb7bcba593935158a78054d", size = 11826502 },
+ { url = "https://files.pythonhosted.org/packages/93/02/f2239f56786479e1a89c3da9bc9391120057fc6f4a8266a5b091314e72ce/ruff-0.9.2-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:8b6a9701d1e371bf41dca22015c3f89769da7576884d2add7317ec1ec8cb9c3c", size = 11390562 },
+ { url = "https://files.pythonhosted.org/packages/c9/37/d3a854dba9931f8cb1b2a19509bfe59e00875f48ade632e95aefcb7a0aee/ruff-0.9.2-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9cc53e68b3c5ae41e8faf83a3b89f4a5d7b2cb666dff4b366bb86ed2a85b481f", size = 12548968 },
+ { url = "https://files.pythonhosted.org/packages/fa/c3/c7b812bb256c7a1d5553433e95980934ffa85396d332401f6b391d3c4569/ruff-0.9.2-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:8efd9da7a1ee314b910da155ca7e8953094a7c10d0c0a39bfde3fcfd2a015684", size = 13187155 },
+ { url = "https://files.pythonhosted.org/packages/bd/5a/3c7f9696a7875522b66aa9bba9e326e4e5894b4366bd1dc32aa6791cb1ff/ruff-0.9.2-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3292c5a22ea9a5f9a185e2d131dc7f98f8534a32fb6d2ee7b9944569239c648d", size = 12704674 },
+ { url = "https://files.pythonhosted.org/packages/be/d6/d908762257a96ce5912187ae9ae86792e677ca4f3dc973b71e7508ff6282/ruff-0.9.2-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1a605fdcf6e8b2d39f9436d343d1f0ff70c365a1e681546de0104bef81ce88df", size = 14529328 },
+ { url = "https://files.pythonhosted.org/packages/2d/c2/049f1e6755d12d9cd8823242fa105968f34ee4c669d04cac8cea51a50407/ruff-0.9.2-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c547f7f256aa366834829a08375c297fa63386cbe5f1459efaf174086b564247", size = 12385955 },
+ { url = "https://files.pythonhosted.org/packages/91/5a/a9bdb50e39810bd9627074e42743b00e6dc4009d42ae9f9351bc3dbc28e7/ruff-0.9.2-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:d18bba3d3353ed916e882521bc3e0af403949dbada344c20c16ea78f47af965e", size = 11810149 },
+ { url = "https://files.pythonhosted.org/packages/e5/fd/57df1a0543182f79a1236e82a79c68ce210efb00e97c30657d5bdb12b478/ruff-0.9.2-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:b338edc4610142355ccf6b87bd356729b62bf1bc152a2fad5b0c7dc04af77bfe", size = 11479141 },
+ { url = "https://files.pythonhosted.org/packages/dc/16/bc3fd1d38974f6775fc152a0554f8c210ff80f2764b43777163c3c45d61b/ruff-0.9.2-py3-none-musllinux_1_2_i686.whl", hash = "sha256:492a5e44ad9b22a0ea98cf72e40305cbdaf27fac0d927f8bc9e1df316dcc96eb", size = 12014073 },
+ { url = "https://files.pythonhosted.org/packages/47/6b/e4ca048a8f2047eb652e1e8c755f384d1b7944f69ed69066a37acd4118b0/ruff-0.9.2-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:af1e9e9fe7b1f767264d26b1075ac4ad831c7db976911fa362d09b2d0356426a", size = 12435758 },
+ { url = "https://files.pythonhosted.org/packages/c2/40/4d3d6c979c67ba24cf183d29f706051a53c36d78358036a9cd21421582ab/ruff-0.9.2-py3-none-win32.whl", hash = "sha256:71cbe22e178c5da20e1514e1e01029c73dc09288a8028a5d3446e6bba87a5145", size = 9796916 },
+ { url = "https://files.pythonhosted.org/packages/c3/ef/7f548752bdb6867e6939489c87fe4da489ab36191525fadc5cede2a6e8e2/ruff-0.9.2-py3-none-win_amd64.whl", hash = "sha256:c5e1d6abc798419cf46eed03f54f2e0c3adb1ad4b801119dedf23fcaf69b55b5", size = 10773080 },
+ { url = "https://files.pythonhosted.org/packages/0e/4e/33df635528292bd2d18404e4daabcd74ca8a9853b2e1df85ed3d32d24362/ruff-0.9.2-py3-none-win_arm64.whl", hash = "sha256:a1b63fa24149918f8b37cef2ee6fff81f24f0d74b6f0bdc37bc3e1f2143e41c6", size = 10001738 },
+]
+
+[[package]]
+name = "scipy"
+version = "1.13.1"
+source = { registry = "https://pypi.org/simple" }
+resolution-markers = [
+ "python_full_version < '3.10'",
+]
+dependencies = [
+ { name = "numpy", version = "2.0.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/ae/00/48c2f661e2816ccf2ecd77982f6605b2950afe60f60a52b4cbbc2504aa8f/scipy-1.13.1.tar.gz", hash = "sha256:095a87a0312b08dfd6a6155cbbd310a8c51800fc931b8c0b84003014b874ed3c", size = 57210720 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/33/59/41b2529908c002ade869623b87eecff3e11e3ce62e996d0bdcb536984187/scipy-1.13.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:20335853b85e9a49ff7572ab453794298bcf0354d8068c5f6775a0eabf350aca", size = 39328076 },
+ { url = "https://files.pythonhosted.org/packages/d5/33/f1307601f492f764062ce7dd471a14750f3360e33cd0f8c614dae208492c/scipy-1.13.1-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:d605e9c23906d1994f55ace80e0125c587f96c020037ea6aa98d01b4bd2e222f", size = 30306232 },
+ { url = "https://files.pythonhosted.org/packages/c0/66/9cd4f501dd5ea03e4a4572ecd874936d0da296bd04d1c45ae1a4a75d9c3a/scipy-1.13.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cfa31f1def5c819b19ecc3a8b52d28ffdcc7ed52bb20c9a7589669dd3c250989", size = 33743202 },
+ { url = "https://files.pythonhosted.org/packages/a3/ba/7255e5dc82a65adbe83771c72f384d99c43063648456796436c9a5585ec3/scipy-1.13.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f26264b282b9da0952a024ae34710c2aff7d27480ee91a2e82b7b7073c24722f", size = 38577335 },
+ { url = "https://files.pythonhosted.org/packages/49/a5/bb9ded8326e9f0cdfdc412eeda1054b914dfea952bda2097d174f8832cc0/scipy-1.13.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:eccfa1906eacc02de42d70ef4aecea45415f5be17e72b61bafcfd329bdc52e94", size = 38820728 },
+ { url = "https://files.pythonhosted.org/packages/12/30/df7a8fcc08f9b4a83f5f27cfaaa7d43f9a2d2ad0b6562cced433e5b04e31/scipy-1.13.1-cp310-cp310-win_amd64.whl", hash = "sha256:2831f0dc9c5ea9edd6e51e6e769b655f08ec6db6e2e10f86ef39bd32eb11da54", size = 46210588 },
+ { url = "https://files.pythonhosted.org/packages/b4/15/4a4bb1b15bbd2cd2786c4f46e76b871b28799b67891f23f455323a0cdcfb/scipy-1.13.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:27e52b09c0d3a1d5b63e1105f24177e544a222b43611aaf5bc44d4a0979e32f9", size = 39333805 },
+ { url = "https://files.pythonhosted.org/packages/ba/92/42476de1af309c27710004f5cdebc27bec62c204db42e05b23a302cb0c9a/scipy-1.13.1-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:54f430b00f0133e2224c3ba42b805bfd0086fe488835effa33fa291561932326", size = 30317687 },
+ { url = "https://files.pythonhosted.org/packages/80/ba/8be64fe225360a4beb6840f3cbee494c107c0887f33350d0a47d55400b01/scipy-1.13.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e89369d27f9e7b0884ae559a3a956e77c02114cc60a6058b4e5011572eea9299", size = 33694638 },
+ { url = "https://files.pythonhosted.org/packages/36/07/035d22ff9795129c5a847c64cb43c1fa9188826b59344fee28a3ab02e283/scipy-1.13.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a78b4b3345f1b6f68a763c6e25c0c9a23a9fd0f39f5f3d200efe8feda560a5fa", size = 38569931 },
+ { url = "https://files.pythonhosted.org/packages/d9/10/f9b43de37e5ed91facc0cfff31d45ed0104f359e4f9a68416cbf4e790241/scipy-1.13.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:45484bee6d65633752c490404513b9ef02475b4284c4cfab0ef946def50b3f59", size = 38838145 },
+ { url = "https://files.pythonhosted.org/packages/4a/48/4513a1a5623a23e95f94abd675ed91cfb19989c58e9f6f7d03990f6caf3d/scipy-1.13.1-cp311-cp311-win_amd64.whl", hash = "sha256:5713f62f781eebd8d597eb3f88b8bf9274e79eeabf63afb4a737abc6c84ad37b", size = 46196227 },
+ { url = "https://files.pythonhosted.org/packages/f2/7b/fb6b46fbee30fc7051913068758414f2721003a89dd9a707ad49174e3843/scipy-1.13.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:5d72782f39716b2b3509cd7c33cdc08c96f2f4d2b06d51e52fb45a19ca0c86a1", size = 39357301 },
+ { url = "https://files.pythonhosted.org/packages/dc/5a/2043a3bde1443d94014aaa41e0b50c39d046dda8360abd3b2a1d3f79907d/scipy-1.13.1-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:017367484ce5498445aade74b1d5ab377acdc65e27095155e448c88497755a5d", size = 30363348 },
+ { url = "https://files.pythonhosted.org/packages/e7/cb/26e4a47364bbfdb3b7fb3363be6d8a1c543bcd70a7753ab397350f5f189a/scipy-1.13.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:949ae67db5fa78a86e8fa644b9a6b07252f449dcf74247108c50e1d20d2b4627", size = 33406062 },
+ { url = "https://files.pythonhosted.org/packages/88/ab/6ecdc526d509d33814835447bbbeedbebdec7cca46ef495a61b00a35b4bf/scipy-1.13.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:de3ade0e53bc1f21358aa74ff4830235d716211d7d077e340c7349bc3542e884", size = 38218311 },
+ { url = "https://files.pythonhosted.org/packages/0b/00/9f54554f0f8318100a71515122d8f4f503b1a2c4b4cfab3b4b68c0eb08fa/scipy-1.13.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:2ac65fb503dad64218c228e2dc2d0a0193f7904747db43014645ae139c8fad16", size = 38442493 },
+ { url = "https://files.pythonhosted.org/packages/3e/df/963384e90733e08eac978cd103c34df181d1fec424de383cdc443f418dd4/scipy-1.13.1-cp312-cp312-win_amd64.whl", hash = "sha256:cdd7dacfb95fea358916410ec61bbc20440f7860333aee6d882bb8046264e949", size = 45910955 },
+ { url = "https://files.pythonhosted.org/packages/7f/29/c2ea58c9731b9ecb30b6738113a95d147e83922986b34c685b8f6eefde21/scipy-1.13.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:436bbb42a94a8aeef855d755ce5a465479c721e9d684de76bf61a62e7c2b81d5", size = 39352927 },
+ { url = "https://files.pythonhosted.org/packages/5c/c0/e71b94b20ccf9effb38d7147c0064c08c622309fd487b1b677771a97d18c/scipy-1.13.1-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:8335549ebbca860c52bf3d02f80784e91a004b71b059e3eea9678ba994796a24", size = 30324538 },
+ { url = "https://files.pythonhosted.org/packages/6d/0f/aaa55b06d474817cea311e7b10aab2ea1fd5d43bc6a2861ccc9caec9f418/scipy-1.13.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d533654b7d221a6a97304ab63c41c96473ff04459e404b83275b60aa8f4b7004", size = 33732190 },
+ { url = "https://files.pythonhosted.org/packages/35/f5/d0ad1a96f80962ba65e2ce1de6a1e59edecd1f0a7b55990ed208848012e0/scipy-1.13.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:637e98dcf185ba7f8e663e122ebf908c4702420477ae52a04f9908707456ba4d", size = 38612244 },
+ { url = "https://files.pythonhosted.org/packages/8d/02/1165905f14962174e6569076bcc3315809ae1291ed14de6448cc151eedfd/scipy-1.13.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:a014c2b3697bde71724244f63de2476925596c24285c7a637364761f8710891c", size = 38845637 },
+ { url = "https://files.pythonhosted.org/packages/3e/77/dab54fe647a08ee4253963bcd8f9cf17509c8ca64d6335141422fe2e2114/scipy-1.13.1-cp39-cp39-win_amd64.whl", hash = "sha256:392e4ec766654852c25ebad4f64e4e584cf19820b980bc04960bca0b0cd6eaa2", size = 46227440 },
+]
+
+[[package]]
+name = "scipy"
+version = "1.15.1"
+source = { registry = "https://pypi.org/simple" }
+resolution-markers = [
+ "python_full_version >= '3.12'",
+ "python_full_version == '3.11.*'",
+ "python_full_version == '3.10.*'",
+]
+dependencies = [
+ { name = "numpy", version = "2.2.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/76/c6/8eb0654ba0c7d0bb1bf67bf8fbace101a8e4f250f7722371105e8b6f68fc/scipy-1.15.1.tar.gz", hash = "sha256:033a75ddad1463970c96a88063a1df87ccfddd526437136b6ee81ff0312ebdf6", size = 59407493 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/86/53/b204ce5a4433f1864001b9d16f103b9c25f5002a602ae83585d0ea5f9c4a/scipy-1.15.1-cp310-cp310-macosx_10_13_x86_64.whl", hash = "sha256:c64ded12dcab08afff9e805a67ff4480f5e69993310e093434b10e85dc9d43e1", size = 41414518 },
+ { url = "https://files.pythonhosted.org/packages/c7/fc/54ffa7a8847f7f303197a6ba65a66104724beba2e38f328135a78f0dc480/scipy-1.15.1-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:5b190b935e7db569960b48840e5bef71dc513314cc4e79a1b7d14664f57fd4ff", size = 32519265 },
+ { url = "https://files.pythonhosted.org/packages/f1/77/a98b8ba03d6f371dc31a38719affd53426d4665729dcffbed4afe296784a/scipy-1.15.1-cp310-cp310-macosx_14_0_arm64.whl", hash = "sha256:4b17d4220df99bacb63065c76b0d1126d82bbf00167d1730019d2a30d6ae01ea", size = 24792859 },
+ { url = "https://files.pythonhosted.org/packages/a7/78/70bb9f0df7444b18b108580934bfef774822e28fd34a68e5c263c7d2828a/scipy-1.15.1-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:63b9b6cd0333d0eb1a49de6f834e8aeaefe438df8f6372352084535ad095219e", size = 27886506 },
+ { url = "https://files.pythonhosted.org/packages/14/a7/f40f6033e06de4176ddd6cc8c3ae9f10a226c3bca5d6b4ab883bc9914a14/scipy-1.15.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9f151e9fb60fbf8e52426132f473221a49362091ce7a5e72f8aa41f8e0da4f25", size = 38375041 },
+ { url = "https://files.pythonhosted.org/packages/17/03/390a1c5c61fd76b0fa4b3c5aa3bdd7e60f6c46f712924f1a9df5705ec046/scipy-1.15.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:21e10b1dd56ce92fba3e786007322542361984f8463c6d37f6f25935a5a6ef52", size = 40597556 },
+ { url = "https://files.pythonhosted.org/packages/4e/70/fa95b3ae026b97eeca58204a90868802e5155ac71b9d7bdee92b68115dd3/scipy-1.15.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:5dff14e75cdbcf07cdaa1c7707db6017d130f0af9ac41f6ce443a93318d6c6e0", size = 42938505 },
+ { url = "https://files.pythonhosted.org/packages/d6/07/427859116bdd71847c898180f01802691f203c3e2455a1eb496130ff07c5/scipy-1.15.1-cp310-cp310-win_amd64.whl", hash = "sha256:f82fcf4e5b377f819542fbc8541f7b5fbcf1c0017d0df0bc22c781bf60abc4d8", size = 43909663 },
+ { url = "https://files.pythonhosted.org/packages/8e/2e/7b71312da9c2dabff53e7c9a9d08231bc34d9d8fdabe88a6f1155b44591c/scipy-1.15.1-cp311-cp311-macosx_10_13_x86_64.whl", hash = "sha256:5bd8d27d44e2c13d0c1124e6a556454f52cd3f704742985f6b09e75e163d20d2", size = 41424362 },
+ { url = "https://files.pythonhosted.org/packages/81/8c/ab85f1aa1cc200c796532a385b6ebf6a81089747adc1da7482a062acc46c/scipy-1.15.1-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:be3deeb32844c27599347faa077b359584ba96664c5c79d71a354b80a0ad0ce0", size = 32535910 },
+ { url = "https://files.pythonhosted.org/packages/3b/9c/6f4b787058daa8d8da21ddff881b4320e28de4704a65ec147adb50cb2230/scipy-1.15.1-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:5eb0ca35d4b08e95da99a9f9c400dc9f6c21c424298a0ba876fdc69c7afacedf", size = 24809398 },
+ { url = "https://files.pythonhosted.org/packages/16/2b/949460a796df75fc7a1ee1becea202cf072edbe325ebe29f6d2029947aa7/scipy-1.15.1-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:74bb864ff7640dea310a1377d8567dc2cb7599c26a79ca852fc184cc851954ac", size = 27918045 },
+ { url = "https://files.pythonhosted.org/packages/5f/36/67fe249dd7ccfcd2a38b25a640e3af7e59d9169c802478b6035ba91dfd6d/scipy-1.15.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:667f950bf8b7c3a23b4199db24cb9bf7512e27e86d0e3813f015b74ec2c6e3df", size = 38332074 },
+ { url = "https://files.pythonhosted.org/packages/fc/da/452e1119e6f720df3feb588cce3c42c5e3d628d4bfd4aec097bd30b7de0c/scipy-1.15.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:395be70220d1189756068b3173853029a013d8c8dd5fd3d1361d505b2aa58fa7", size = 40588469 },
+ { url = "https://files.pythonhosted.org/packages/7f/71/5f94aceeac99a4941478af94fe9f459c6752d497035b6b0761a700f5f9ff/scipy-1.15.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:ce3a000cd28b4430426db2ca44d96636f701ed12e2b3ca1f2b1dd7abdd84b39a", size = 42965214 },
+ { url = "https://files.pythonhosted.org/packages/af/25/caa430865749d504271757cafd24066d596217e83326155993980bc22f97/scipy-1.15.1-cp311-cp311-win_amd64.whl", hash = "sha256:3fe1d95944f9cf6ba77aa28b82dd6bb2a5b52f2026beb39ecf05304b8392864b", size = 43896034 },
+ { url = "https://files.pythonhosted.org/packages/d8/6e/a9c42d0d39e09ed7fd203d0ac17adfea759cba61ab457671fe66e523dbec/scipy-1.15.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:c09aa9d90f3500ea4c9b393ee96f96b0ccb27f2f350d09a47f533293c78ea776", size = 41478318 },
+ { url = "https://files.pythonhosted.org/packages/04/ee/e3e535c81828618878a7433992fecc92fa4df79393f31a8fea1d05615091/scipy-1.15.1-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:0ac102ce99934b162914b1e4a6b94ca7da0f4058b6d6fd65b0cef330c0f3346f", size = 32596696 },
+ { url = "https://files.pythonhosted.org/packages/c4/5e/b1b0124be8e76f87115f16b8915003eec4b7060298117715baf13f51942c/scipy-1.15.1-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:09c52320c42d7f5c7748b69e9f0389266fd4f82cf34c38485c14ee976cb8cb04", size = 24870366 },
+ { url = "https://files.pythonhosted.org/packages/14/36/c00cb73eefda85946172c27913ab995c6ad4eee00fa4f007572e8c50cd51/scipy-1.15.1-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:cdde8414154054763b42b74fe8ce89d7f3d17a7ac5dd77204f0e142cdc9239e9", size = 28007461 },
+ { url = "https://files.pythonhosted.org/packages/68/94/aff5c51b3799349a9d1e67a056772a0f8a47db371e83b498d43467806557/scipy-1.15.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4c9d8fc81d6a3b6844235e6fd175ee1d4c060163905a2becce8e74cb0d7554ce", size = 38068174 },
+ { url = "https://files.pythonhosted.org/packages/b0/3c/0de11ca154e24a57b579fb648151d901326d3102115bc4f9a7a86526ce54/scipy-1.15.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0fb57b30f0017d4afa5fe5f5b150b8f807618819287c21cbe51130de7ccdaed2", size = 40249869 },
+ { url = "https://files.pythonhosted.org/packages/15/09/472e8d0a6b33199d1bb95e49bedcabc0976c3724edd9b0ef7602ccacf41e/scipy-1.15.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:491d57fe89927fa1aafbe260f4cfa5ffa20ab9f1435025045a5315006a91b8f5", size = 42629068 },
+ { url = "https://files.pythonhosted.org/packages/ff/ba/31c7a8131152822b3a2cdeba76398ffb404d81d640de98287d236da90c49/scipy-1.15.1-cp312-cp312-win_amd64.whl", hash = "sha256:900f3fa3db87257510f011c292a5779eb627043dd89731b9c461cd16ef76ab3d", size = 43621992 },
+ { url = "https://files.pythonhosted.org/packages/2b/bf/dd68965a4c5138a630eeed0baec9ae96e5d598887835bdde96cdd2fe4780/scipy-1.15.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:100193bb72fbff37dbd0bf14322314fc7cbe08b7ff3137f11a34d06dc0ee6b85", size = 41441136 },
+ { url = "https://files.pythonhosted.org/packages/ef/5e/4928581312922d7e4d416d74c416a660addec4dd5ea185401df2269ba5a0/scipy-1.15.1-cp313-cp313-macosx_12_0_arm64.whl", hash = "sha256:2114a08daec64980e4b4cbdf5bee90935af66d750146b1d2feb0d3ac30613692", size = 32533699 },
+ { url = "https://files.pythonhosted.org/packages/32/90/03f99c43041852837686898c66767787cd41c5843d7a1509c39ffef683e9/scipy-1.15.1-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:6b3e71893c6687fc5e29208d518900c24ea372a862854c9888368c0b267387ab", size = 24807289 },
+ { url = "https://files.pythonhosted.org/packages/9d/52/bfe82b42ae112eaba1af2f3e556275b8727d55ac6e4932e7aef337a9d9d4/scipy-1.15.1-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:837299eec3d19b7e042923448d17d95a86e43941104d33f00da7e31a0f715d3c", size = 27929844 },
+ { url = "https://files.pythonhosted.org/packages/f6/77/54ff610bad600462c313326acdb035783accc6a3d5f566d22757ad297564/scipy-1.15.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:82add84e8a9fb12af5c2c1a3a3f1cb51849d27a580cb9e6bd66226195142be6e", size = 38031272 },
+ { url = "https://files.pythonhosted.org/packages/f1/26/98585cbf04c7cf503d7eb0a1966df8a268154b5d923c5fe0c1ed13154c49/scipy-1.15.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:070d10654f0cb6abd295bc96c12656f948e623ec5f9a4eab0ddb1466c000716e", size = 40210217 },
+ { url = "https://files.pythonhosted.org/packages/fd/3f/3d2285eb6fece8bc5dbb2f9f94d61157d61d155e854fd5fea825b8218f12/scipy-1.15.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:55cc79ce4085c702ac31e49b1e69b27ef41111f22beafb9b49fea67142b696c4", size = 42587785 },
+ { url = "https://files.pythonhosted.org/packages/48/7d/5b5251984bf0160d6533695a74a5fddb1fa36edd6f26ffa8c871fbd4782a/scipy-1.15.1-cp313-cp313-win_amd64.whl", hash = "sha256:c352c1b6d7cac452534517e022f8f7b8d139cd9f27e6fbd9f3cbd0bfd39f5bef", size = 43640439 },
+ { url = "https://files.pythonhosted.org/packages/e7/b8/0e092f592d280496de52e152582030f8a270b194f87f890e1a97c5599b81/scipy-1.15.1-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:0458839c9f873062db69a03de9a9765ae2e694352c76a16be44f93ea45c28d2b", size = 41619862 },
+ { url = "https://files.pythonhosted.org/packages/f6/19/0b6e1173aba4db9e0b7aa27fe45019857fb90d6904038b83927cbe0a6c1d/scipy-1.15.1-cp313-cp313t-macosx_12_0_arm64.whl", hash = "sha256:af0b61c1de46d0565b4b39c6417373304c1d4f5220004058bdad3061c9fa8a95", size = 32610387 },
+ { url = "https://files.pythonhosted.org/packages/e7/02/754aae3bd1fa0f2479ade3cfdf1732ecd6b05853f63eee6066a32684563a/scipy-1.15.1-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:71ba9a76c2390eca6e359be81a3e879614af3a71dfdabb96d1d7ab33da6f2364", size = 24883814 },
+ { url = "https://files.pythonhosted.org/packages/1f/ac/d7906201604a2ea3b143bb0de51b3966f66441ba50b7dc182c4505b3edf9/scipy-1.15.1-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:14eaa373c89eaf553be73c3affb11ec6c37493b7eaaf31cf9ac5dffae700c2e0", size = 27944865 },
+ { url = "https://files.pythonhosted.org/packages/84/9d/8f539002b5e203723af6a6f513a45e0a7671e9dabeedb08f417ac17e4edc/scipy-1.15.1-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f735bc41bd1c792c96bc426dece66c8723283695f02df61dcc4d0a707a42fc54", size = 39883261 },
+ { url = "https://files.pythonhosted.org/packages/97/c0/62fd3bab828bcccc9b864c5997645a3b86372a35941cdaf677565c25c98d/scipy-1.15.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:2722a021a7929d21168830790202a75dbb20b468a8133c74a2c0230c72626b6c", size = 42093299 },
+ { url = "https://files.pythonhosted.org/packages/e4/1f/5d46a8d94e9f6d2c913cbb109e57e7eed914de38ea99e2c4d69a9fc93140/scipy-1.15.1-cp313-cp313t-win_amd64.whl", hash = "sha256:bc7136626261ac1ed988dca56cfc4ab5180f75e0ee52e58f1e6aa74b5f3eacd5", size = 43181730 },
+]
+
+[[package]]
+name = "secretstorage"
+version = "3.3.3"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "cryptography" },
+ { name = "jeepney" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/53/a4/f48c9d79cb507ed1373477dbceaba7401fd8a23af63b837fa61f1dcd3691/SecretStorage-3.3.3.tar.gz", hash = "sha256:2403533ef369eca6d2ba81718576c5e0f564d5cca1b58f73a8b23e7d4eeebd77", size = 19739 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/54/24/b4293291fa1dd830f353d2cb163295742fa87f179fcc8a20a306a81978b7/SecretStorage-3.3.3-py3-none-any.whl", hash = "sha256:f356e6628222568e3af06f2eba8df495efa13b3b63081dafd4f7d9a7b7bc9f99", size = 15221 },
+]
+
+[[package]]
+name = "shapely"
+version = "2.0.6"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "numpy", version = "2.0.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" },
+ { name = "numpy", version = "2.2.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/4a/89/0d20bac88016be35ff7d3c0c2ae64b477908f1b1dfa540c5d69ac7af07fe/shapely-2.0.6.tar.gz", hash = "sha256:997f6159b1484059ec239cacaa53467fd8b5564dabe186cd84ac2944663b0bf6", size = 282361 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/17/d4/f84bbbdb7771f5b9ade94db2398b256cf1471f1eb0ca8afbe0f6ca725d5a/shapely-2.0.6-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:29a34e068da2d321e926b5073539fd2a1d4429a2c656bd63f0bd4c8f5b236d0b", size = 1449635 },
+ { url = "https://files.pythonhosted.org/packages/03/10/bd6edb66ed0a845f0809f7ce653596f6fd9c6be675b3653872f47bf49f82/shapely-2.0.6-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e1c84c3f53144febf6af909d6b581bc05e8785d57e27f35ebaa5c1ab9baba13b", size = 1296756 },
+ { url = "https://files.pythonhosted.org/packages/af/09/6374c11cb493a9970e8c04d7be25f578a37f6494a2fecfbed3a447b16b2c/shapely-2.0.6-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2ad2fae12dca8d2b727fa12b007e46fbc522148a584f5d6546c539f3464dccde", size = 2381960 },
+ { url = "https://files.pythonhosted.org/packages/2b/a6/302e0d9c210ccf4d1ffadf7ab941797d3255dcd5f93daa73aaf116a4db39/shapely-2.0.6-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b3304883bd82d44be1b27a9d17f1167fda8c7f5a02a897958d86c59ec69b705e", size = 2468133 },
+ { url = "https://files.pythonhosted.org/packages/8c/be/e448681dc485f2931d4adee93d531fce93608a3ee59433303cc1a46e21a5/shapely-2.0.6-cp310-cp310-win32.whl", hash = "sha256:3ec3a0eab496b5e04633a39fa3d5eb5454628228201fb24903d38174ee34565e", size = 1294982 },
+ { url = "https://files.pythonhosted.org/packages/cd/4c/6f4a6fc085e3be01c4c9de0117a2d373bf9fec5f0426cf4d5c94090a5a4d/shapely-2.0.6-cp310-cp310-win_amd64.whl", hash = "sha256:28f87cdf5308a514763a5c38de295544cb27429cfa655d50ed8431a4796090c4", size = 1441141 },
+ { url = "https://files.pythonhosted.org/packages/37/15/269d8e1f7f658a37e61f7028683c546f520e4e7cedba1e32c77ff9d3a3c7/shapely-2.0.6-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:5aeb0f51a9db176da9a30cb2f4329b6fbd1e26d359012bb0ac3d3c7781667a9e", size = 1449578 },
+ { url = "https://files.pythonhosted.org/packages/37/63/e182e43081fffa0a2d970c480f2ef91647a6ab94098f61748c23c2a485f2/shapely-2.0.6-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:9a7a78b0d51257a367ee115f4d41ca4d46edbd0dd280f697a8092dd3989867b2", size = 1296792 },
+ { url = "https://files.pythonhosted.org/packages/6e/5a/d019f69449329dcd517355444fdb9ddd58bec5e080b8bdba007e8e4c546d/shapely-2.0.6-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f32c23d2f43d54029f986479f7c1f6e09c6b3a19353a3833c2ffb226fb63a855", size = 2443997 },
+ { url = "https://files.pythonhosted.org/packages/25/aa/53f145e5a610a49af9ac49f2f1be1ec8659ebd5c393d66ac94e57c83b00e/shapely-2.0.6-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b3dc9fb0eb56498912025f5eb352b5126f04801ed0e8bdbd867d21bdbfd7cbd0", size = 2528334 },
+ { url = "https://files.pythonhosted.org/packages/64/64/0c7b0a22b416d36f6296b92bb4219d82b53d0a7c47e16fd0a4c85f2f117c/shapely-2.0.6-cp311-cp311-win32.whl", hash = "sha256:d93b7e0e71c9f095e09454bf18dad5ea716fb6ced5df3cb044564a00723f339d", size = 1294669 },
+ { url = "https://files.pythonhosted.org/packages/b1/5a/6a67d929c467a1973b6bb9f0b00159cc343b02bf9a8d26db1abd2f87aa23/shapely-2.0.6-cp311-cp311-win_amd64.whl", hash = "sha256:c02eb6bf4cfb9fe6568502e85bb2647921ee49171bcd2d4116c7b3109724ef9b", size = 1442032 },
+ { url = "https://files.pythonhosted.org/packages/46/77/efd9f9d4b6a762f976f8b082f54c9be16f63050389500fb52e4f6cc07c1a/shapely-2.0.6-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:cec9193519940e9d1b86a3b4f5af9eb6910197d24af02f247afbfb47bcb3fab0", size = 1450326 },
+ { url = "https://files.pythonhosted.org/packages/68/53/5efa6e7a4036a94fe6276cf7bbb298afded51ca3396b03981ad680c8cc7d/shapely-2.0.6-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:83b94a44ab04a90e88be69e7ddcc6f332da7c0a0ebb1156e1c4f568bbec983c3", size = 1298480 },
+ { url = "https://files.pythonhosted.org/packages/88/a2/1be1db4fc262e536465a52d4f19d85834724fedf2299a1b9836bc82fe8fa/shapely-2.0.6-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:537c4b2716d22c92036d00b34aac9d3775e3691f80c7aa517c2c290351f42cd8", size = 2439311 },
+ { url = "https://files.pythonhosted.org/packages/d5/7d/9a57e187cbf2fbbbdfd4044a4f9ce141c8d221f9963750d3b001f0ec080d/shapely-2.0.6-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:98fea108334be345c283ce74bf064fa00cfdd718048a8af7343c59eb40f59726", size = 2524835 },
+ { url = "https://files.pythonhosted.org/packages/6d/0a/f407509ab56825f39bf8cfce1fb410238da96cf096809c3e404e5bc71ea1/shapely-2.0.6-cp312-cp312-win32.whl", hash = "sha256:42fd4cd4834747e4990227e4cbafb02242c0cffe9ce7ef9971f53ac52d80d55f", size = 1295613 },
+ { url = "https://files.pythonhosted.org/packages/7b/b3/857afd9dfbfc554f10d683ac412eac6fa260d1f4cd2967ecb655c57e831a/shapely-2.0.6-cp312-cp312-win_amd64.whl", hash = "sha256:665990c84aece05efb68a21b3523a6b2057e84a1afbef426ad287f0796ef8a48", size = 1442539 },
+ { url = "https://files.pythonhosted.org/packages/34/e8/d164ef5b0eab86088cde06dee8415519ffd5bb0dd1bd9d021e640e64237c/shapely-2.0.6-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:42805ef90783ce689a4dde2b6b2f261e2c52609226a0438d882e3ced40bb3013", size = 1445344 },
+ { url = "https://files.pythonhosted.org/packages/ce/e2/9fba7ac142f7831757a10852bfa465683724eadbc93d2d46f74a16f9af04/shapely-2.0.6-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:6d2cb146191a47bd0cee8ff5f90b47547b82b6345c0d02dd8b25b88b68af62d7", size = 1296182 },
+ { url = "https://files.pythonhosted.org/packages/cf/dc/790d4bda27d196cd56ec66975eaae3351c65614cafd0e16ddde39ec9fb92/shapely-2.0.6-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e3fdef0a1794a8fe70dc1f514440aa34426cc0ae98d9a1027fb299d45741c381", size = 2423426 },
+ { url = "https://files.pythonhosted.org/packages/af/b0/f8169f77eac7392d41e231911e0095eb1148b4d40c50ea9e34d999c89a7e/shapely-2.0.6-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2c665a0301c645615a107ff7f52adafa2153beab51daf34587170d85e8ba6805", size = 2513249 },
+ { url = "https://files.pythonhosted.org/packages/f6/1d/a8c0e9ab49ff2f8e4dedd71b0122eafb22a18ad7e9d256025e1f10c84704/shapely-2.0.6-cp313-cp313-win32.whl", hash = "sha256:0334bd51828f68cd54b87d80b3e7cee93f249d82ae55a0faf3ea21c9be7b323a", size = 1294848 },
+ { url = "https://files.pythonhosted.org/packages/23/38/2bc32dd1e7e67a471d4c60971e66df0bdace88656c47a9a728ace0091075/shapely-2.0.6-cp313-cp313-win_amd64.whl", hash = "sha256:d37d070da9e0e0f0a530a621e17c0b8c3c9d04105655132a87cfff8bd77cc4c2", size = 1441371 },
+ { url = "https://files.pythonhosted.org/packages/9d/6f/19fda412323f512e21b8888523596177070bca29a80d1b70f4b6a5e7869f/shapely-2.0.6-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:392f66f458a0a2c706254f473290418236e52aa4c9b476a072539d63a2460595", size = 1451236 },
+ { url = "https://files.pythonhosted.org/packages/bc/f5/5dfd13e90fe881560b4b1196e47fab48d6469c33d0b78d0f57a5e10bd409/shapely-2.0.6-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:eba5bae271d523c938274c61658ebc34de6c4b33fdf43ef7e938b5776388c1be", size = 1298209 },
+ { url = "https://files.pythonhosted.org/packages/76/89/6be88c828e2c671dfdd5b0c875d08c8573c6f1bac759f297b166e0b2c64c/shapely-2.0.6-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7060566bc4888b0c8ed14b5d57df8a0ead5c28f9b69fb6bed4476df31c51b0af", size = 2389098 },
+ { url = "https://files.pythonhosted.org/packages/a5/b2/6a4589439880244f86c1d3061efd91faf8ec21e646df18730810b6d59481/shapely-2.0.6-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b02154b3e9d076a29a8513dffcb80f047a5ea63c897c0cd3d3679f29363cf7e5", size = 2473382 },
+ { url = "https://files.pythonhosted.org/packages/42/dd/2a039361d249dc84f0470173356c36d74516fe2978dfdde98197618f4e5c/shapely-2.0.6-cp39-cp39-win32.whl", hash = "sha256:44246d30124a4f1a638a7d5419149959532b99dfa25b54393512e6acc9c211ac", size = 1296873 },
+ { url = "https://files.pythonhosted.org/packages/a7/68/0e4b9aab76d2b7f44013dc98aa16c7f9e33dd1b34088140fb15664967e8b/shapely-2.0.6-cp39-cp39-win_amd64.whl", hash = "sha256:2b542d7f1dbb89192d3512c52b679c822ba916f93479fa5d4fc2fe4fa0b3c9e8", size = 1442993 },
+]
+
+[[package]]
+name = "shellingham"
+version = "1.5.4"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/58/15/8b3609fd3830ef7b27b655beb4b4e9c62313a4e8da8c676e142cc210d58e/shellingham-1.5.4.tar.gz", hash = "sha256:8dbca0739d487e5bd35ab3ca4b36e11c4078f3a234bfce294b0a0291363404de", size = 10310 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/e0/f9/0595336914c5619e5f28a1fb793285925a8cd4b432c9da0a987836c7f822/shellingham-1.5.4-py2.py3-none-any.whl", hash = "sha256:7ecfff8f2fd72616f7481040475a65b2bf8af90a56c89140852d1120324e8686", size = 9755 },
+]
+
+[[package]]
+name = "six"
+version = "1.17.0"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/94/e7/b2c673351809dca68a0e064b6af791aa332cf192da575fd474ed7d6f16a2/six-1.17.0.tar.gz", hash = "sha256:ff70335d468e7eb6ec65b95b99d3a2836546063f63acc5171de367e834932a81", size = 34031 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/b7/ce/149a00dd41f10bc29e5921b496af8b574d8413afcd5e30dfa0ed46c2cc5e/six-1.17.0-py2.py3-none-any.whl", hash = "sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274", size = 11050 },
+]
+
+[[package]]
+name = "sniffio"
+version = "1.3.1"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/a2/87/a6771e1546d97e7e041b6ae58d80074f81b7d5121207425c964ddf5cfdbd/sniffio-1.3.1.tar.gz", hash = "sha256:f4324edc670a0f49750a81b895f35c3adb843cca46f0530f79fc1babb23789dc", size = 20372 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/e9/44/75a9c9421471a6c4805dbf2356f7c181a29c1879239abab1ea2cc8f38b40/sniffio-1.3.1-py3-none-any.whl", hash = "sha256:2f6da418d1f1e0fddd844478f41680e794e6051915791a034ff65e5f100525a2", size = 10235 },
+]
+
+[[package]]
+name = "snowballstemmer"
+version = "2.2.0"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/44/7b/af302bebf22c749c56c9c3e8ae13190b5b5db37a33d9068652e8f73b7089/snowballstemmer-2.2.0.tar.gz", hash = "sha256:09b16deb8547d3412ad7b590689584cd0fe25ec8db3be37788be3810cbf19cb1", size = 86699 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/ed/dc/c02e01294f7265e63a7315fe086dd1df7dacb9f840a804da846b96d01b96/snowballstemmer-2.2.0-py2.py3-none-any.whl", hash = "sha256:c8e1716e83cc398ae16824e5572ae04e0d9fc2c6b985fb0f900f5f0c96ecba1a", size = 93002 },
+]
+
+[[package]]
+name = "soupsieve"
+version = "2.6"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/d7/ce/fbaeed4f9fb8b2daa961f90591662df6a86c1abf25c548329a86920aedfb/soupsieve-2.6.tar.gz", hash = "sha256:e2e68417777af359ec65daac1057404a3c8a5455bb8abc36f1a9866ab1a51abb", size = 101569 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/d1/c2/fe97d779f3ef3b15f05c94a2f1e3d21732574ed441687474db9d342a7315/soupsieve-2.6-py3-none-any.whl", hash = "sha256:e72c4ff06e4fb6e4b5a9f0f55fe6e81514581fca1515028625d0f299c602ccc9", size = 36186 },
+]
+
+[[package]]
+name = "sphinx"
+version = "7.4.7"
+source = { registry = "https://pypi.org/simple" }
+resolution-markers = [
+ "python_full_version < '3.10'",
+]
+dependencies = [
+ { name = "alabaster", version = "0.7.16", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" },
+ { name = "babel", marker = "python_full_version < '3.10'" },
+ { name = "colorama", marker = "python_full_version < '3.10' and sys_platform == 'win32'" },
+ { name = "docutils", marker = "python_full_version < '3.10'" },
+ { name = "imagesize", marker = "python_full_version < '3.10'" },
+ { name = "importlib-metadata", marker = "python_full_version < '3.10'" },
+ { name = "jinja2", marker = "python_full_version < '3.10'" },
+ { name = "packaging", marker = "python_full_version < '3.10'" },
+ { name = "pygments", marker = "python_full_version < '3.10'" },
+ { name = "requests", marker = "python_full_version < '3.10'" },
+ { name = "snowballstemmer", marker = "python_full_version < '3.10'" },
+ { name = "sphinxcontrib-applehelp", marker = "python_full_version < '3.10'" },
+ { name = "sphinxcontrib-devhelp", marker = "python_full_version < '3.10'" },
+ { name = "sphinxcontrib-htmlhelp", marker = "python_full_version < '3.10'" },
+ { name = "sphinxcontrib-jsmath", marker = "python_full_version < '3.10'" },
+ { name = "sphinxcontrib-qthelp", marker = "python_full_version < '3.10'" },
+ { name = "sphinxcontrib-serializinghtml", marker = "python_full_version < '3.10'" },
+ { name = "tomli", marker = "python_full_version < '3.10'" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/5b/be/50e50cb4f2eff47df05673d361095cafd95521d2a22521b920c67a372dcb/sphinx-7.4.7.tar.gz", hash = "sha256:242f92a7ea7e6c5b406fdc2615413890ba9f699114a9c09192d7dfead2ee9cfe", size = 8067911 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/0d/ef/153f6803c5d5f8917dbb7f7fcf6d34a871ede3296fa89c2c703f5f8a6c8e/sphinx-7.4.7-py3-none-any.whl", hash = "sha256:c2419e2135d11f1951cd994d6eb18a1835bd8fdd8429f9ca375dc1f3281bd239", size = 3401624 },
+]
+
+[[package]]
+name = "sphinx"
+version = "8.1.3"
+source = { registry = "https://pypi.org/simple" }
+resolution-markers = [
+ "python_full_version >= '3.12'",
+ "python_full_version == '3.11.*'",
+ "python_full_version == '3.10.*'",
+]
+dependencies = [
+ { name = "alabaster", version = "1.0.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" },
+ { name = "babel", marker = "python_full_version >= '3.10'" },
+ { name = "colorama", marker = "python_full_version >= '3.10' and sys_platform == 'win32'" },
+ { name = "docutils", marker = "python_full_version >= '3.10'" },
+ { name = "imagesize", marker = "python_full_version >= '3.10'" },
+ { name = "jinja2", marker = "python_full_version >= '3.10'" },
+ { name = "packaging", marker = "python_full_version >= '3.10'" },
+ { name = "pygments", marker = "python_full_version >= '3.10'" },
+ { name = "requests", marker = "python_full_version >= '3.10'" },
+ { name = "snowballstemmer", marker = "python_full_version >= '3.10'" },
+ { name = "sphinxcontrib-applehelp", marker = "python_full_version >= '3.10'" },
+ { name = "sphinxcontrib-devhelp", marker = "python_full_version >= '3.10'" },
+ { name = "sphinxcontrib-htmlhelp", marker = "python_full_version >= '3.10'" },
+ { name = "sphinxcontrib-jsmath", marker = "python_full_version >= '3.10'" },
+ { name = "sphinxcontrib-qthelp", marker = "python_full_version >= '3.10'" },
+ { name = "sphinxcontrib-serializinghtml", marker = "python_full_version >= '3.10'" },
+ { name = "tomli", marker = "python_full_version == '3.10.*'" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/6f/6d/be0b61178fe2cdcb67e2a92fc9ebb488e3c51c4f74a36a7824c0adf23425/sphinx-8.1.3.tar.gz", hash = "sha256:43c1911eecb0d3e161ad78611bc905d1ad0e523e4ddc202a58a821773dc4c927", size = 8184611 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/26/60/1ddff83a56d33aaf6f10ec8ce84b4c007d9368b21008876fceda7e7381ef/sphinx-8.1.3-py3-none-any.whl", hash = "sha256:09719015511837b76bf6e03e42eb7595ac8c2e41eeb9c29c5b755c6b677992a2", size = 3487125 },
+]
+
+[[package]]
+name = "sphinx-copybutton"
+version = "0.5.2"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "sphinx", version = "7.4.7", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" },
+ { name = "sphinx", version = "8.1.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/fc/2b/a964715e7f5295f77509e59309959f4125122d648f86b4fe7d70ca1d882c/sphinx-copybutton-0.5.2.tar.gz", hash = "sha256:4cf17c82fb9646d1bc9ca92ac280813a3b605d8c421225fd9913154103ee1fbd", size = 23039 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/9e/48/1ea60e74949eecb12cdd6ac43987f9fd331156388dcc2319b45e2ebb81bf/sphinx_copybutton-0.5.2-py3-none-any.whl", hash = "sha256:fb543fd386d917746c9a2c50360c7905b605726b9355cd26e9974857afeae06e", size = 13343 },
+]
+
+[[package]]
+name = "sphinx-design"
+version = "0.6.1"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "sphinx", version = "7.4.7", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" },
+ { name = "sphinx", version = "8.1.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/2b/69/b34e0cb5336f09c6866d53b4a19d76c227cdec1bbc7ac4de63ca7d58c9c7/sphinx_design-0.6.1.tar.gz", hash = "sha256:b44eea3719386d04d765c1a8257caca2b3e6f8421d7b3a5e742c0fd45f84e632", size = 2193689 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/c6/43/65c0acbd8cc6f50195a3a1fc195c404988b15c67090e73c7a41a9f57d6bd/sphinx_design-0.6.1-py3-none-any.whl", hash = "sha256:b11f37db1a802a183d61b159d9a202314d4d2fe29c163437001324fe2f19549c", size = 2215338 },
+]
+
+[[package]]
+name = "sphinxcontrib-applehelp"
+version = "2.0.0"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/ba/6e/b837e84a1a704953c62ef8776d45c3e8d759876b4a84fe14eba2859106fe/sphinxcontrib_applehelp-2.0.0.tar.gz", hash = "sha256:2f29ef331735ce958efa4734873f084941970894c6090408b079c61b2e1c06d1", size = 20053 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/5d/85/9ebeae2f76e9e77b952f4b274c27238156eae7979c5421fba91a28f4970d/sphinxcontrib_applehelp-2.0.0-py3-none-any.whl", hash = "sha256:4cd3f0ec4ac5dd9c17ec65e9ab272c9b867ea77425228e68ecf08d6b28ddbdb5", size = 119300 },
+]
+
+[[package]]
+name = "sphinxcontrib-devhelp"
+version = "2.0.0"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/f6/d2/5beee64d3e4e747f316bae86b55943f51e82bb86ecd325883ef65741e7da/sphinxcontrib_devhelp-2.0.0.tar.gz", hash = "sha256:411f5d96d445d1d73bb5d52133377b4248ec79db5c793ce7dbe59e074b4dd1ad", size = 12967 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/35/7a/987e583882f985fe4d7323774889ec58049171828b58c2217e7f79cdf44e/sphinxcontrib_devhelp-2.0.0-py3-none-any.whl", hash = "sha256:aefb8b83854e4b0998877524d1029fd3e6879210422ee3780459e28a1f03a8a2", size = 82530 },
+]
+
+[[package]]
+name = "sphinxcontrib-htmlhelp"
+version = "2.1.0"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/43/93/983afd9aa001e5201eab16b5a444ed5b9b0a7a010541e0ddfbbfd0b2470c/sphinxcontrib_htmlhelp-2.1.0.tar.gz", hash = "sha256:c9e2916ace8aad64cc13a0d233ee22317f2b9025b9cf3295249fa985cc7082e9", size = 22617 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/0a/7b/18a8c0bcec9182c05a0b3ec2a776bba4ead82750a55ff798e8d406dae604/sphinxcontrib_htmlhelp-2.1.0-py3-none-any.whl", hash = "sha256:166759820b47002d22914d64a075ce08f4c46818e17cfc9470a9786b759b19f8", size = 98705 },
+]
+
+[[package]]
+name = "sphinxcontrib-jsmath"
+version = "1.0.1"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/b2/e8/9ed3830aeed71f17c026a07a5097edcf44b692850ef215b161b8ad875729/sphinxcontrib-jsmath-1.0.1.tar.gz", hash = "sha256:a9925e4a4587247ed2191a22df5f6970656cb8ca2bd6284309578f2153e0c4b8", size = 5787 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/c2/42/4c8646762ee83602e3fb3fbe774c2fac12f317deb0b5dbeeedd2d3ba4b77/sphinxcontrib_jsmath-1.0.1-py2.py3-none-any.whl", hash = "sha256:2ec2eaebfb78f3f2078e73666b1415417a116cc848b72e5172e596c871103178", size = 5071 },
+]
+
+[[package]]
+name = "sphinxcontrib-qthelp"
+version = "2.0.0"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/68/bc/9104308fc285eb3e0b31b67688235db556cd5b0ef31d96f30e45f2e51cae/sphinxcontrib_qthelp-2.0.0.tar.gz", hash = "sha256:4fe7d0ac8fc171045be623aba3e2a8f613f8682731f9153bb2e40ece16b9bbab", size = 17165 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/27/83/859ecdd180cacc13b1f7e857abf8582a64552ea7a061057a6c716e790fce/sphinxcontrib_qthelp-2.0.0-py3-none-any.whl", hash = "sha256:b18a828cdba941ccd6ee8445dbe72ffa3ef8cbe7505d8cd1fa0d42d3f2d5f3eb", size = 88743 },
+]
+
+[[package]]
+name = "sphinxcontrib-serializinghtml"
+version = "2.0.0"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/3b/44/6716b257b0aa6bfd51a1b31665d1c205fb12cb5ad56de752dfa15657de2f/sphinxcontrib_serializinghtml-2.0.0.tar.gz", hash = "sha256:e9d912827f872c029017a53f0ef2180b327c3f7fd23c87229f7a8e8b70031d4d", size = 16080 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/52/a7/d2782e4e3f77c8450f727ba74a8f12756d5ba823d81b941f1b04da9d033a/sphinxcontrib_serializinghtml-2.0.0-py3-none-any.whl", hash = "sha256:6e2cb0eef194e10c27ec0023bfeb25badbbb5868244cf5bc5bdc04e4464bf331", size = 92072 },
+]
+
+[[package]]
+name = "sphinxext-altair"
+version = "0.2.0"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "altair" },
+ { name = "docutils" },
+ { name = "jinja2" },
+ { name = "sphinx", version = "7.4.7", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" },
+ { name = "sphinx", version = "8.1.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/ea/2c/41b5f3079481f4e49a9451be1a429fda3dec1e51786875e104ef3c95d836/sphinxext_altair-0.2.0.tar.gz", hash = "sha256:eac920f97fdc9d44b669f442c24f6d96ea4f236179b96c25df41a8cd4385e5f6", size = 8648 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/81/c9/15bd3bf427be9dc4f4d06bb7fcc4b0b7fb82aef07e25c5026bb52c819380/sphinxext_altair-0.2.0-py3-none-any.whl", hash = "sha256:4a307add6a530586794ba80204d724305009b5f499782cf1f828af0fc1d056b9", size = 7786 },
+]
+
+[[package]]
+name = "stack-data"
+version = "0.6.3"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "asttokens" },
+ { name = "executing" },
+ { name = "pure-eval" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/28/e3/55dcc2cfbc3ca9c29519eb6884dd1415ecb53b0e934862d3559ddcb7e20b/stack_data-0.6.3.tar.gz", hash = "sha256:836a778de4fec4dcd1dcd89ed8abff8a221f58308462e1c4aa2a3cf30148f0b9", size = 44707 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/f1/7b/ce1eafaf1a76852e2ec9b22edecf1daa58175c090266e9f6c64afcd81d91/stack_data-0.6.3-py3-none-any.whl", hash = "sha256:d5558e0c25a4cb0853cddad3d77da9891a08cb85dd9f9f91b9f8cd66e511e695", size = 24521 },
+]
+
+[[package]]
+name = "tabulate"
+version = "0.9.0"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/ec/fe/802052aecb21e3797b8f7902564ab6ea0d60ff8ca23952079064155d1ae1/tabulate-0.9.0.tar.gz", hash = "sha256:0095b12bf5966de529c0feb1fa08671671b3368eec77d7ef7ab114be2c068b3c", size = 81090 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/40/44/4a5f08c96eb108af5cb50b41f76142f0afa346dfa99d5296fe7202a11854/tabulate-0.9.0-py3-none-any.whl", hash = "sha256:024ca478df22e9340661486f85298cff5f6dcdba14f3813e8830015b9ed1948f", size = 35252 },
+]
+
+[[package]]
+name = "taskipy"
+version = "1.14.1"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "colorama" },
+ { name = "mslex", marker = "sys_platform == 'win32'" },
+ { name = "psutil" },
+ { name = "tomli", marker = "python_full_version < '4.0'" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/c7/44/572261df3db9c6c3332f8618fafeb07a578fd18b06673c73f000f3586749/taskipy-1.14.1.tar.gz", hash = "sha256:410fbcf89692dfd4b9f39c2b49e1750b0a7b81affd0e2d7ea8c35f9d6a4774ed", size = 14475 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/55/97/4e4cfb1391c81e926bebe3d68d5231b5dbc3bb41c6ba48349e68a881462d/taskipy-1.14.1-py3-none-any.whl", hash = "sha256:6e361520f29a0fd2159848e953599f9c75b1d0b047461e4965069caeb94908f1", size = 13052 },
+]
+
+[[package]]
+name = "tomli"
+version = "2.2.1"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/18/87/302344fed471e44a87289cf4967697d07e532f2421fdaf868a303cbae4ff/tomli-2.2.1.tar.gz", hash = "sha256:cd45e1dc79c835ce60f7404ec8119f2eb06d38b1deba146f07ced3bbc44505ff", size = 17175 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/43/ca/75707e6efa2b37c77dadb324ae7d9571cb424e61ea73fad7c56c2d14527f/tomli-2.2.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:678e4fa69e4575eb77d103de3df8a895e1591b48e740211bd1067378c69e8249", size = 131077 },
+ { url = "https://files.pythonhosted.org/packages/c7/16/51ae563a8615d472fdbffc43a3f3d46588c264ac4f024f63f01283becfbb/tomli-2.2.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:023aa114dd824ade0100497eb2318602af309e5a55595f76b626d6d9f3b7b0a6", size = 123429 },
+ { url = "https://files.pythonhosted.org/packages/f1/dd/4f6cd1e7b160041db83c694abc78e100473c15d54620083dbd5aae7b990e/tomli-2.2.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ece47d672db52ac607a3d9599a9d48dcb2f2f735c6c2d1f34130085bb12b112a", size = 226067 },
+ { url = "https://files.pythonhosted.org/packages/a9/6b/c54ede5dc70d648cc6361eaf429304b02f2871a345bbdd51e993d6cdf550/tomli-2.2.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6972ca9c9cc9f0acaa56a8ca1ff51e7af152a9f87fb64623e31d5c83700080ee", size = 236030 },
+ { url = "https://files.pythonhosted.org/packages/1f/47/999514fa49cfaf7a92c805a86c3c43f4215621855d151b61c602abb38091/tomli-2.2.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c954d2250168d28797dd4e3ac5cf812a406cd5a92674ee4c8f123c889786aa8e", size = 240898 },
+ { url = "https://files.pythonhosted.org/packages/73/41/0a01279a7ae09ee1573b423318e7934674ce06eb33f50936655071d81a24/tomli-2.2.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:8dd28b3e155b80f4d54beb40a441d366adcfe740969820caf156c019fb5c7ec4", size = 229894 },
+ { url = "https://files.pythonhosted.org/packages/55/18/5d8bc5b0a0362311ce4d18830a5d28943667599a60d20118074ea1b01bb7/tomli-2.2.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:e59e304978767a54663af13c07b3d1af22ddee3bb2fb0618ca1593e4f593a106", size = 245319 },
+ { url = "https://files.pythonhosted.org/packages/92/a3/7ade0576d17f3cdf5ff44d61390d4b3febb8a9fc2b480c75c47ea048c646/tomli-2.2.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:33580bccab0338d00994d7f16f4c4ec25b776af3ffaac1ed74e0b3fc95e885a8", size = 238273 },
+ { url = "https://files.pythonhosted.org/packages/72/6f/fa64ef058ac1446a1e51110c375339b3ec6be245af9d14c87c4a6412dd32/tomli-2.2.1-cp311-cp311-win32.whl", hash = "sha256:465af0e0875402f1d226519c9904f37254b3045fc5084697cefb9bdde1ff99ff", size = 98310 },
+ { url = "https://files.pythonhosted.org/packages/6a/1c/4a2dcde4a51b81be3530565e92eda625d94dafb46dbeb15069df4caffc34/tomli-2.2.1-cp311-cp311-win_amd64.whl", hash = "sha256:2d0f2fdd22b02c6d81637a3c95f8cd77f995846af7414c5c4b8d0545afa1bc4b", size = 108309 },
+ { url = "https://files.pythonhosted.org/packages/52/e1/f8af4c2fcde17500422858155aeb0d7e93477a0d59a98e56cbfe75070fd0/tomli-2.2.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:4a8f6e44de52d5e6c657c9fe83b562f5f4256d8ebbfe4ff922c495620a7f6cea", size = 132762 },
+ { url = "https://files.pythonhosted.org/packages/03/b8/152c68bb84fc00396b83e7bbddd5ec0bd3dd409db4195e2a9b3e398ad2e3/tomli-2.2.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:8d57ca8095a641b8237d5b079147646153d22552f1c637fd3ba7f4b0b29167a8", size = 123453 },
+ { url = "https://files.pythonhosted.org/packages/c8/d6/fc9267af9166f79ac528ff7e8c55c8181ded34eb4b0e93daa767b8841573/tomli-2.2.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4e340144ad7ae1533cb897d406382b4b6fede8890a03738ff1683af800d54192", size = 233486 },
+ { url = "https://files.pythonhosted.org/packages/5c/51/51c3f2884d7bab89af25f678447ea7d297b53b5a3b5730a7cb2ef6069f07/tomli-2.2.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:db2b95f9de79181805df90bedc5a5ab4c165e6ec3fe99f970d0e302f384ad222", size = 242349 },
+ { url = "https://files.pythonhosted.org/packages/ab/df/bfa89627d13a5cc22402e441e8a931ef2108403db390ff3345c05253935e/tomli-2.2.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:40741994320b232529c802f8bc86da4e1aa9f413db394617b9a256ae0f9a7f77", size = 252159 },
+ { url = "https://files.pythonhosted.org/packages/9e/6e/fa2b916dced65763a5168c6ccb91066f7639bdc88b48adda990db10c8c0b/tomli-2.2.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:400e720fe168c0f8521520190686ef8ef033fb19fc493da09779e592861b78c6", size = 237243 },
+ { url = "https://files.pythonhosted.org/packages/b4/04/885d3b1f650e1153cbb93a6a9782c58a972b94ea4483ae4ac5cedd5e4a09/tomli-2.2.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:02abe224de6ae62c19f090f68da4e27b10af2b93213d36cf44e6e1c5abd19fdd", size = 259645 },
+ { url = "https://files.pythonhosted.org/packages/9c/de/6b432d66e986e501586da298e28ebeefd3edc2c780f3ad73d22566034239/tomli-2.2.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:b82ebccc8c8a36f2094e969560a1b836758481f3dc360ce9a3277c65f374285e", size = 244584 },
+ { url = "https://files.pythonhosted.org/packages/1c/9a/47c0449b98e6e7d1be6cbac02f93dd79003234ddc4aaab6ba07a9a7482e2/tomli-2.2.1-cp312-cp312-win32.whl", hash = "sha256:889f80ef92701b9dbb224e49ec87c645ce5df3fa2cc548664eb8a25e03127a98", size = 98875 },
+ { url = "https://files.pythonhosted.org/packages/ef/60/9b9638f081c6f1261e2688bd487625cd1e660d0a85bd469e91d8db969734/tomli-2.2.1-cp312-cp312-win_amd64.whl", hash = "sha256:7fc04e92e1d624a4a63c76474610238576942d6b8950a2d7f908a340494e67e4", size = 109418 },
+ { url = "https://files.pythonhosted.org/packages/04/90/2ee5f2e0362cb8a0b6499dc44f4d7d48f8fff06d28ba46e6f1eaa61a1388/tomli-2.2.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:f4039b9cbc3048b2416cc57ab3bda989a6fcf9b36cf8937f01a6e731b64f80d7", size = 132708 },
+ { url = "https://files.pythonhosted.org/packages/c0/ec/46b4108816de6b385141f082ba99e315501ccd0a2ea23db4a100dd3990ea/tomli-2.2.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:286f0ca2ffeeb5b9bd4fcc8d6c330534323ec51b2f52da063b11c502da16f30c", size = 123582 },
+ { url = "https://files.pythonhosted.org/packages/a0/bd/b470466d0137b37b68d24556c38a0cc819e8febe392d5b199dcd7f578365/tomli-2.2.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a92ef1a44547e894e2a17d24e7557a5e85a9e1d0048b0b5e7541f76c5032cb13", size = 232543 },
+ { url = "https://files.pythonhosted.org/packages/d9/e5/82e80ff3b751373f7cead2815bcbe2d51c895b3c990686741a8e56ec42ab/tomli-2.2.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9316dc65bed1684c9a98ee68759ceaed29d229e985297003e494aa825ebb0281", size = 241691 },
+ { url = "https://files.pythonhosted.org/packages/05/7e/2a110bc2713557d6a1bfb06af23dd01e7dde52b6ee7dadc589868f9abfac/tomli-2.2.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e85e99945e688e32d5a35c1ff38ed0b3f41f43fad8df0bdf79f72b2ba7bc5272", size = 251170 },
+ { url = "https://files.pythonhosted.org/packages/64/7b/22d713946efe00e0adbcdfd6d1aa119ae03fd0b60ebed51ebb3fa9f5a2e5/tomli-2.2.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:ac065718db92ca818f8d6141b5f66369833d4a80a9d74435a268c52bdfa73140", size = 236530 },
+ { url = "https://files.pythonhosted.org/packages/38/31/3a76f67da4b0cf37b742ca76beaf819dca0ebef26d78fc794a576e08accf/tomli-2.2.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:d920f33822747519673ee656a4b6ac33e382eca9d331c87770faa3eef562aeb2", size = 258666 },
+ { url = "https://files.pythonhosted.org/packages/07/10/5af1293da642aded87e8a988753945d0cf7e00a9452d3911dd3bb354c9e2/tomli-2.2.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:a198f10c4d1b1375d7687bc25294306e551bf1abfa4eace6650070a5c1ae2744", size = 243954 },
+ { url = "https://files.pythonhosted.org/packages/5b/b9/1ed31d167be802da0fc95020d04cd27b7d7065cc6fbefdd2f9186f60d7bd/tomli-2.2.1-cp313-cp313-win32.whl", hash = "sha256:d3f5614314d758649ab2ab3a62d4f2004c825922f9e370b29416484086b264ec", size = 98724 },
+ { url = "https://files.pythonhosted.org/packages/c7/32/b0963458706accd9afcfeb867c0f9175a741bf7b19cd424230714d722198/tomli-2.2.1-cp313-cp313-win_amd64.whl", hash = "sha256:a38aa0308e754b0e3c67e344754dff64999ff9b513e691d0e786265c93583c69", size = 109383 },
+ { url = "https://files.pythonhosted.org/packages/6e/c2/61d3e0f47e2b74ef40a68b9e6ad5984f6241a942f7cd3bbfbdbd03861ea9/tomli-2.2.1-py3-none-any.whl", hash = "sha256:cb55c73c5f4408779d0cf3eef9f762b9c9f147a77de7b258bef0a5628adc85cc", size = 14257 },
+]
+
+[[package]]
+name = "tomli-w"
+version = "1.2.0"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/19/75/241269d1da26b624c0d5e110e8149093c759b7a286138f4efd61a60e75fe/tomli_w-1.2.0.tar.gz", hash = "sha256:2dd14fac5a47c27be9cd4c976af5a12d87fb1f0b4512f81d69cce3b35ae25021", size = 7184 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/c7/18/c86eb8e0202e32dd3df50d43d7ff9854f8e0603945ff398974c1d91ac1ef/tomli_w-1.2.0-py3-none-any.whl", hash = "sha256:188306098d013b691fcadc011abd66727d3c414c571bb01b1a174ba8c983cf90", size = 6675 },
+]
+
+[[package]]
+name = "tomlkit"
+version = "0.13.2"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/b1/09/a439bec5888f00a54b8b9f05fa94d7f901d6735ef4e55dcec9bc37b5d8fa/tomlkit-0.13.2.tar.gz", hash = "sha256:fff5fe59a87295b278abd31bec92c15d9bc4a06885ab12bcea52c71119392e79", size = 192885 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/f9/b6/a447b5e4ec71e13871be01ba81f5dfc9d0af7e473da256ff46bc0e24026f/tomlkit-0.13.2-py3-none-any.whl", hash = "sha256:7a974427f6e119197f670fbbbeae7bef749a6c14e793db934baefc1b5f03efde", size = 37955 },
+]
+
+[[package]]
+name = "tornado"
+version = "6.4.2"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/59/45/a0daf161f7d6f36c3ea5fc0c2de619746cc3dd4c76402e9db545bd920f63/tornado-6.4.2.tar.gz", hash = "sha256:92bad5b4746e9879fd7bf1eb21dce4e3fc5128d71601f80005afa39237ad620b", size = 501135 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/26/7e/71f604d8cea1b58f82ba3590290b66da1e72d840aeb37e0d5f7291bd30db/tornado-6.4.2-cp38-abi3-macosx_10_9_universal2.whl", hash = "sha256:e828cce1123e9e44ae2a50a9de3055497ab1d0aeb440c5ac23064d9e44880da1", size = 436299 },
+ { url = "https://files.pythonhosted.org/packages/96/44/87543a3b99016d0bf54fdaab30d24bf0af2e848f1d13d34a3a5380aabe16/tornado-6.4.2-cp38-abi3-macosx_10_9_x86_64.whl", hash = "sha256:072ce12ada169c5b00b7d92a99ba089447ccc993ea2143c9ede887e0937aa803", size = 434253 },
+ { url = "https://files.pythonhosted.org/packages/cb/fb/fdf679b4ce51bcb7210801ef4f11fdac96e9885daa402861751353beea6e/tornado-6.4.2-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1a017d239bd1bb0919f72af256a970624241f070496635784d9bf0db640d3fec", size = 437602 },
+ { url = "https://files.pythonhosted.org/packages/4f/3b/e31aeffffc22b475a64dbeb273026a21b5b566f74dee48742817626c47dc/tornado-6.4.2-cp38-abi3-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c36e62ce8f63409301537222faffcef7dfc5284f27eec227389f2ad11b09d946", size = 436972 },
+ { url = "https://files.pythonhosted.org/packages/22/55/b78a464de78051a30599ceb6983b01d8f732e6f69bf37b4ed07f642ac0fc/tornado-6.4.2-cp38-abi3-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bca9eb02196e789c9cb5c3c7c0f04fb447dc2adffd95265b2c7223a8a615ccbf", size = 437173 },
+ { url = "https://files.pythonhosted.org/packages/79/5e/be4fb0d1684eb822c9a62fb18a3e44a06188f78aa466b2ad991d2ee31104/tornado-6.4.2-cp38-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:304463bd0772442ff4d0f5149c6f1c2135a1fae045adf070821c6cdc76980634", size = 437892 },
+ { url = "https://files.pythonhosted.org/packages/f5/33/4f91fdd94ea36e1d796147003b490fe60a0215ac5737b6f9c65e160d4fe0/tornado-6.4.2-cp38-abi3-musllinux_1_2_i686.whl", hash = "sha256:c82c46813ba483a385ab2a99caeaedf92585a1f90defb5693351fa7e4ea0bf73", size = 437334 },
+ { url = "https://files.pythonhosted.org/packages/2b/ae/c1b22d4524b0e10da2f29a176fb2890386f7bd1f63aacf186444873a88a0/tornado-6.4.2-cp38-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:932d195ca9015956fa502c6b56af9eb06106140d844a335590c1ec7f5277d10c", size = 437261 },
+ { url = "https://files.pythonhosted.org/packages/b5/25/36dbd49ab6d179bcfc4c6c093a51795a4f3bed380543a8242ac3517a1751/tornado-6.4.2-cp38-abi3-win32.whl", hash = "sha256:2876cef82e6c5978fde1e0d5b1f919d756968d5b4282418f3146b79b58556482", size = 438463 },
+ { url = "https://files.pythonhosted.org/packages/61/cc/58b1adeb1bb46228442081e746fcdbc4540905c87e8add7c277540934edb/tornado-6.4.2-cp38-abi3-win_amd64.whl", hash = "sha256:908b71bf3ff37d81073356a5fadcc660eb10c1476ee6e2725588626ce7e5ca38", size = 438907 },
+]
+
+[[package]]
+name = "traitlets"
+version = "5.14.3"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/eb/79/72064e6a701c2183016abbbfedaba506d81e30e232a68c9f0d6f6fcd1574/traitlets-5.14.3.tar.gz", hash = "sha256:9ed0579d3502c94b4b3732ac120375cda96f923114522847de4b3bb98b96b6b7", size = 161621 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/00/c0/8f5d070730d7836adc9c9b6408dec68c6ced86b304a9b26a14df072a6e8c/traitlets-5.14.3-py3-none-any.whl", hash = "sha256:b74e89e397b1ed28cc831db7aea759ba6640cb3de13090ca145426688ff1ac4f", size = 85359 },
+]
+
+[[package]]
+name = "trove-classifiers"
+version = "2025.1.15.22"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/f3/cb/8f6a91c74049180e395590901834d68bef5d6a2ce4c9ca9792cfadc1b9b4/trove_classifiers-2025.1.15.22.tar.gz", hash = "sha256:90af74358d3a01b3532bc7b3c88d8c6a094c2fd50a563d13d9576179326d7ed9", size = 16236 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/2b/c5/6422dbc59954389b20b2aba85b737ab4a552e357e7ea14b52f40312e7c84/trove_classifiers-2025.1.15.22-py3-none-any.whl", hash = "sha256:5f19c789d4f17f501d36c94dbbf969fb3e8c2784d008e6f5164dd2c3d6a2b07c", size = 13610 },
+]
+
+[[package]]
+name = "types-jsonschema"
+version = "4.23.0.20241208"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "referencing" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/ad/e6/9e5cd771687086844caa43dbb211ec0d1cfa899d17c110f3220efcd46e83/types_jsonschema-4.23.0.20241208.tar.gz", hash = "sha256:e8b15ad01f290ecf6aea53f93fbdf7d4730e4600313e89e8a7f95622f7e87b7c", size = 14770 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/91/64/4b2fba8b7cb0104ba013f2a1bf6f39a98e927e14befe1ef947d373b25218/types_jsonschema-4.23.0.20241208-py3-none-any.whl", hash = "sha256:87934bd9231c99d8eff94cacfc06ba668f7973577a9bd9e1f9de957c5737313e", size = 15021 },
+]
+
+[[package]]
+name = "types-pytz"
+version = "2024.2.0.20241221"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/54/26/516311b02b5a215e721155fb65db8a965d061372e388d6125ebce8d674b0/types_pytz-2024.2.0.20241221.tar.gz", hash = "sha256:06d7cde9613e9f7504766a0554a270c369434b50e00975b3a4a0f6eed0f2c1a9", size = 10213 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/74/db/c92ca6920cccd9c2998b013601542e2ac5e59bc805bcff94c94ad254b7df/types_pytz-2024.2.0.20241221-py3-none-any.whl", hash = "sha256:8fc03195329c43637ed4f593663df721fef919b60a969066e22606edf0b53ad5", size = 10008 },
+]
+
+[[package]]
+name = "types-setuptools"
+version = "75.8.0.20250110"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/f7/42/5713e90d4f9683f2301d900f33e4fc2405ad8ac224dda30f6cb7f4cd215b/types_setuptools-75.8.0.20250110.tar.gz", hash = "sha256:96f7ec8bbd6e0a54ea180d66ad68ad7a1d7954e7281a710ea2de75e355545271", size = 48185 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/cf/a3/dbfd106751b11c728cec21cc62cbfe7ff7391b935c4b6e8f0bdc2e6fd541/types_setuptools-75.8.0.20250110-py3-none-any.whl", hash = "sha256:a9f12980bbf9bcdc23ecd80755789085bad6bfce4060c2275bc2b4ca9f2bc480", size = 71521 },
+]
+
+[[package]]
+name = "typing-extensions"
+version = "4.12.2"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/df/db/f35a00659bc03fec321ba8bce9420de607a1d37f8342eee1863174c69557/typing_extensions-4.12.2.tar.gz", hash = "sha256:1a7ead55c7e559dd4dee8856e3a88b41225abfe1ce8df57b7c13915fe121ffb8", size = 85321 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/26/9f/ad63fc0248c5379346306f8668cda6e2e2e9c95e01216d2b8ffd9ff037d0/typing_extensions-4.12.2-py3-none-any.whl", hash = "sha256:04e5ca0351e0f3f85c6853954072df659d0d13fac324d0072316b67d7794700d", size = 37438 },
+]
+
+[[package]]
+name = "tzdata"
+version = "2024.2"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/e1/34/943888654477a574a86a98e9896bae89c7aa15078ec29f490fef2f1e5384/tzdata-2024.2.tar.gz", hash = "sha256:7d85cc416e9382e69095b7bdf4afd9e3880418a2413feec7069d533d6b4e31cc", size = 193282 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/a6/ab/7e5f53c3b9d14972843a647d8d7a853969a58aecc7559cb3267302c94774/tzdata-2024.2-py2.py3-none-any.whl", hash = "sha256:a48093786cdcde33cad18c2555e8532f34422074448fbc874186f0abd79565cd", size = 346586 },
+]
+
+[[package]]
+name = "urllib3"
+version = "2.3.0"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/aa/63/e53da845320b757bf29ef6a9062f5c669fe997973f966045cb019c3f4b66/urllib3-2.3.0.tar.gz", hash = "sha256:f8c5449b3cf0861679ce7e0503c7b44b5ec981bec0d1d3795a07f1ba96f0204d", size = 307268 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/c8/19/4ec628951a74043532ca2cf5d97b7b14863931476d117c471e8e2b1eb39f/urllib3-2.3.0-py3-none-any.whl", hash = "sha256:1cee9ad369867bfdbbb48b7dd50374c0967a0bb7710050facf0dd6911440e3df", size = 128369 },
+]
+
+[[package]]
+name = "userpath"
+version = "1.9.2"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "click" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/d5/b7/30753098208505d7ff9be5b3a32112fb8a4cb3ddfccbbb7ba9973f2e29ff/userpath-1.9.2.tar.gz", hash = "sha256:6c52288dab069257cc831846d15d48133522455d4677ee69a9781f11dbefd815", size = 11140 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/43/99/3ec6335ded5b88c2f7ed25c56ffd952546f7ed007ffb1e1539dc3b57015a/userpath-1.9.2-py3-none-any.whl", hash = "sha256:2cbf01a23d655a1ff8fc166dfb78da1b641d1ceabf0fe5f970767d380b14e89d", size = 9065 },
+]
+
+[[package]]
+name = "uv"
+version = "0.5.20"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/0b/61/4cc21e8e79cebb4e49a6ca214a0647b00f49cb585886e0bf5e2490fe9e7c/uv-0.5.20.tar.gz", hash = "sha256:896305cc0d1f5fc5db97ed8e028c2fe236f6e0900bc72469d61ad97bc7ec5124", size = 2629688 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/8b/22/a3f24aa6f405756f69b0eb1b974bf0e9d9c744f1effc3e82d56ce46b5519/uv-0.5.20-py3-none-linux_armv6l.whl", hash = "sha256:c299d2c7aa04803c16ed5378e4b5dbfcc57eb6a40962f1141520eb43c0ecd291", size = 15138092 },
+ { url = "https://files.pythonhosted.org/packages/e6/a5/f413ece0d351dbd2ab9067b42d111e7da6b3f133074ef245eb202891183e/uv-0.5.20-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:0c73540d6afb923ea64a5a54ddd34fec191f91c4b1071bf65a2ea7b05a854017", size = 15318120 },
+ { url = "https://files.pythonhosted.org/packages/d8/bf/b2cf36530206fc46533e6b384756043c3c04acbe930ac1f5498b825fbea9/uv-0.5.20-py3-none-macosx_11_0_arm64.whl", hash = "sha256:e3b38c2d5c14847fb68cf7c88bfee3e09dd170e1b229441cee40c98ce5f56c5e", size = 14206329 },
+ { url = "https://files.pythonhosted.org/packages/b4/38/d8f48e30d5a32fd8610fdf5fde1b96a7f9ae89799a5baabaf633e5ea0483/uv-0.5.20-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.musllinux_1_1_aarch64.whl", hash = "sha256:ffce28f4b460f88f6e30d2a42874ee4d0e0daafe3d0436cda91ed05b130d7c90", size = 14701677 },
+ { url = "https://files.pythonhosted.org/packages/d0/9d/c0b865134b23e724cf02accdb93de3469808ffe34b9805a31ed9a483e339/uv-0.5.20-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:3010eb9611f89f4d6fa681c406269c59c0faf3446bb9ef01abcfb7da600a88e7", size = 14885382 },
+ { url = "https://files.pythonhosted.org/packages/11/29/05af45986c7f0591b3c4a31c63e2d2d6dab3b3603a2ec50ee9e5b0c835b1/uv-0.5.20-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b1541a67de42e64d9ff594b9a21ec238681ff0e40b2f90c1ecabcac71c7e622c", size = 15666066 },
+ { url = "https://files.pythonhosted.org/packages/d0/88/6d7b5ac6f8c78fe92c4a29d82d9b66c2b0b3177345d29f65fa15842cc1fd/uv-0.5.20-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:4c23cde62f48b19a0dc6922f5c144b02c0c21b1c2e2606be872fc656e95a25e1", size = 16576104 },
+ { url = "https://files.pythonhosted.org/packages/f9/14/d833b564f16d0723015687580f834a3531e64f7c79d4ad14034357496bc7/uv-0.5.20-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:bbdc9f82cdcb539549654c85aada1c583fe18235666316599648657ff497f266", size = 16304628 },
+ { url = "https://files.pythonhosted.org/packages/58/f7/8c7cc0378d0c02f4a95910de96b37b0163fc09a847948676f6d139b6bdd3/uv-0.5.20-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:180b03d8fe0712297235498944252af19265aab396d22aef3783e963cfbfbcaf", size = 20571845 },
+ { url = "https://files.pythonhosted.org/packages/04/60/83b8185a23384ffcee4c07a8a2f5892b957b8c68aceba2b9832fab49b137/uv-0.5.20-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6c337f7e029dc8faf020dd76847ea084591ea96fd5f40ddb5117214ecb12a9e6", size = 15959564 },
+ { url = "https://files.pythonhosted.org/packages/ad/29/cdda048af5c2aa2adcce6d133af217253cd76509d09b3b766762e2524758/uv-0.5.20-py3-none-manylinux_2_28_aarch64.whl", hash = "sha256:a4049cb7de46bd36d3b770ae3203e36d1db406ddc048bcd509578fd1d1072a38", size = 14966373 },
+ { url = "https://files.pythonhosted.org/packages/3d/a2/71e9b149ed36613c99b78a643237b471244071359f0e5d8d5e08230d7ea0/uv-0.5.20-py3-none-musllinux_1_1_armv7l.whl", hash = "sha256:2f84a5df76bdb31fa76a4b85bcdb86fae9a4418ad9067d2909c58917663fb743", size = 14855088 },
+ { url = "https://files.pythonhosted.org/packages/54/a1/0d02aad39ccf64095d020759375014eaea6b885cd9ecde52d0d4843567f2/uv-0.5.20-py3-none-musllinux_1_1_i686.whl", hash = "sha256:32d8685d262fca595a027ceca584549b0fe87b89be114e500f5af1de0fad2f1d", size = 15315996 },
+ { url = "https://files.pythonhosted.org/packages/54/86/5746288daaedc86da54da1fe1fe1440e01d0acd833995b8e784dba75f85d/uv-0.5.20-py3-none-musllinux_1_1_x86_64.whl", hash = "sha256:5af0ae866b0a9f2d7e8c0220401c585de69f5ebc157a582e8cb1014b16da1ef7", size = 16087766 },
+ { url = "https://files.pythonhosted.org/packages/97/3d/1a48ad47d29a8a6f07990eb1d50029f8d7a30a5dead0fd50d9cd47ee283f/uv-0.5.20-py3-none-win32.whl", hash = "sha256:880bc5afdfaaf5329318d897bec9cd860d00c2b2f2ab8979c438862a0c2ed81b", size = 15200613 },
+ { url = "https://files.pythonhosted.org/packages/d9/e7/cad364f24fcb03ff23e4b750d8934e62010fd520955ba64f8e763c1a70b6/uv-0.5.20-py3-none-win_amd64.whl", hash = "sha256:ae9a69696e75d4b8d08dadda84b3e1b914167b2a19cd4c7c746f8c2c2c5ab55a", size = 16560303 },
+]
+
+[[package]]
+name = "vega-datasets"
+version = "0.9.0"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "pandas" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/8f/a0/ce608d9a5b82fce2ebaa2311136b1e1d1dc2807f501bbdfa56bd174fff76/vega_datasets-0.9.0.tar.gz", hash = "sha256:9dbe9834208e8ec32ab44970df315de9102861e4cda13d8e143aab7a80d93fc0", size = 215013 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/e6/9f/ca52771fe972e0dcc5167fedb609940e01516066938ff2ee28b273ae4f29/vega_datasets-0.9.0-py3-none-any.whl", hash = "sha256:3d7c63917be6ca9b154b565f4779a31fedce57b01b5b9d99d8a34a7608062a1d", size = 210822 },
+]
+
+[[package]]
+name = "vegafusion"
+version = "2.0.1"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "arro3-core" },
+ { name = "narwhals" },
+ { name = "packaging" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/38/a3/7cb762181a2118ab8943d12f1f8a9f85ad0236e399f1b1bdfd0fe471aa6a/vegafusion-2.0.1.tar.gz", hash = "sha256:2d7c41844643beaaab43af46f5cffeb44a963db2d75ecaa267f652f4e716988d", size = 6721316 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/53/82/6d99eca345220d9fee23913394bae07ddf45029d3366e649d1b5dddb111e/vegafusion-2.0.1-cp39-abi3-macosx_10_12_x86_64.whl", hash = "sha256:dcec2f97c564276d429ff1d0ba6f9f5b254089703d909479307c0971b1a46d99", size = 20604733 },
+ { url = "https://files.pythonhosted.org/packages/e3/25/c78aa5b7bd72eec2724071a4b6daba89e1c076746144c3b9c8e54a63a8ee/vegafusion-2.0.1-cp39-abi3-macosx_11_0_arm64.whl", hash = "sha256:21be9d05dd65bd5f9c0077ccef117818280cc807568bd54661ed0b414d440664", size = 18949783 },
+ { url = "https://files.pythonhosted.org/packages/0c/a0/31bb67d9fb03fd4d4596f32ee3c1838ec75514f910e11a51769c3ba656bf/vegafusion-2.0.1-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:58c02357aa1f4d8fe526546f8d175d3befc7abcb3347948c8d21a3e2bd68ddba", size = 21679790 },
+ { url = "https://files.pythonhosted.org/packages/2a/79/8a8adc84b91b163addd0d018e2d9eb7a98e1e7576afe54a800025e07c0f5/vegafusion-2.0.1-cp39-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:36cb84020726ffaba92a235e23b048bc49c1736f90fc8f44bb5cdf00b75a7b15", size = 20457099 },
+ { url = "https://files.pythonhosted.org/packages/71/8f/0c927a5840938132666dce7f997600644efd0448a6ed046ef4d7cc0c7f50/vegafusion-2.0.1-cp39-abi3-win_amd64.whl", hash = "sha256:f1b1240b80c860a0d384fadcf33ecfce39e70a33eb565222f6e9c5d42cbf55f5", size = 21234505 },
+]
+
+[[package]]
+name = "virtualenv"
+version = "20.29.0"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "distlib" },
+ { name = "filelock" },
+ { name = "platformdirs" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/5a/5d/8d625ebddf9d31c301f85125b78002d4e4401fe1c15c04dca58a54a3056a/virtualenv-20.29.0.tar.gz", hash = "sha256:6345e1ff19d4b1296954cee076baaf58ff2a12a84a338c62b02eda39f20aa982", size = 7658081 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/f0/d3/12687ab375bb0e077ea802a5128f7b45eb5de7a7c6cb576ccf9dd59ff80a/virtualenv-20.29.0-py3-none-any.whl", hash = "sha256:c12311863497992dc4b8644f8ea82d3b35bb7ef8ee82e6630d76d0197c39baf9", size = 4282443 },
+]
+
+[[package]]
+name = "vl-convert-python"
+version = "1.7.0"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/e6/f1/43803e91e12d4ab697eedc5e14029d1630daea0c81abc6321b96a31a7dc0/vl_convert_python-1.7.0.tar.gz", hash = "sha256:bc9e1f8ca0d8d3b3789c66e37cd6a8cf0a83406427d5143133346c2b5004485b", size = 4719466 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/e2/1c/b0dc67d9e51eb9d14c35c79e033a680a92418edd12a3879bb50aade597a1/vl_convert_python-1.7.0-cp37-abi3-macosx_10_12_x86_64.whl", hash = "sha256:90fba4356bd621bd31e72507a55e26dd13ebe79efa784715743116109afd0d47", size = 28233538 },
+ { url = "https://files.pythonhosted.org/packages/dc/50/4b8b500f0b3c0b24ef3bec01563de412e95dbf27cfe53e403e6fa8514525/vl_convert_python-1.7.0-cp37-abi3-macosx_11_0_arm64.whl", hash = "sha256:51f99c58b1d0d74126455ece7d41972740cb4430b8dfdf7e0908270eed5be32d", size = 26940338 },
+ { url = "https://files.pythonhosted.org/packages/95/0f/139568d71fadcb1be697acd2ccd0b79bd1553ca833d4448312191cd33654/vl_convert_python-1.7.0-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:962100d7670b9d35f9bb9745cdf590412f62f57c134b4a142340ba93a4dbddba", size = 29124271 },
+ { url = "https://files.pythonhosted.org/packages/91/3c/c34e52138fa38eb6059cdb2c603ba1433decf4f97cb89e767c04a9605eff/vl_convert_python-1.7.0-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8b50c492b640abb89a54a71e2c26f0f2d2c1cedc42030cc55bcc202670334724", size = 30089941 },
+ { url = "https://files.pythonhosted.org/packages/ae/e2/c4a3fff3efcfeebaab554c9c4b027e875fd339da7f619b144765353a60d1/vl_convert_python-1.7.0-cp37-abi3-win_amd64.whl", hash = "sha256:285bbadb1ce8a922c87f6e75a9544fe10a652d37bd4c1519fb93f90bab381588", size = 29796401 },
+]
+
+[[package]]
+name = "wcwidth"
+version = "0.2.13"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/6c/63/53559446a878410fc5a5974feb13d31d78d752eb18aeba59c7fef1af7598/wcwidth-0.2.13.tar.gz", hash = "sha256:72ea0c06399eb286d978fdedb6923a9eb47e1c486ce63e9b4e64fc18303972b5", size = 101301 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/fd/84/fd2ba7aafacbad3c4201d395674fc6348826569da3c0937e75505ead3528/wcwidth-0.2.13-py2.py3-none-any.whl", hash = "sha256:3da69048e4540d84af32131829ff948f1e022c1c6bdb8d6102117aac784f6859", size = 34166 },
+]
+
+[[package]]
+name = "widgetsnbextension"
+version = "4.0.13"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/56/fc/238c424fd7f4ebb25f8b1da9a934a3ad7c848286732ae04263661eb0fc03/widgetsnbextension-4.0.13.tar.gz", hash = "sha256:ffcb67bc9febd10234a362795f643927f4e0c05d9342c727b65d2384f8feacb6", size = 1164730 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/21/02/88b65cc394961a60c43c70517066b6b679738caf78506a5da7b88ffcb643/widgetsnbextension-4.0.13-py3-none-any.whl", hash = "sha256:74b2692e8500525cc38c2b877236ba51d34541e6385eeed5aec15a70f88a6c71", size = 2335872 },
+]
+
+[[package]]
+name = "xyzservices"
+version = "2024.9.0"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/a0/16/ae87cbd2d6bfc40a419077521c35aadf5121725b7bee3d7c51b56f50958b/xyzservices-2024.9.0.tar.gz", hash = "sha256:68fb8353c9dbba4f1ff6c0f2e5e4e596bb9e1db7f94f4f7dfbcb26e25aa66fde", size = 1131900 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/4c/d3/e07ce413d16ef64e885bea37551eac4c5ca3ddd440933f9c94594273d0d9/xyzservices-2024.9.0-py3-none-any.whl", hash = "sha256:776ae82b78d6e5ca63dd6a94abb054df8130887a4a308473b54a6bd364de8644", size = 85130 },
+]
+
+[[package]]
+name = "zipp"
+version = "3.21.0"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/3f/50/bad581df71744867e9468ebd0bcd6505de3b275e06f202c2cb016e3ff56f/zipp-3.21.0.tar.gz", hash = "sha256:2c9958f6430a2040341a52eb608ed6dd93ef4392e02ffe219417c1b28b5dd1f4", size = 24545 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/b7/1a/7e4798e9339adc931158c9d69ecc34f5e6791489d469f5e50ec15e35f458/zipp-3.21.0-py3-none-any.whl", hash = "sha256:ac1bbe05fd2991f160ebce24ffbac5f6d11d83dc90891255885223d42b3cd931", size = 9630 },
+]
+
+[[package]]
+name = "zstandard"
+version = "0.23.0"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "cffi", marker = "platform_python_implementation == 'PyPy'" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/ed/f6/2ac0287b442160a89d726b17a9184a4c615bb5237db763791a7fd16d9df1/zstandard-0.23.0.tar.gz", hash = "sha256:b2d8c62d08e7255f68f7a740bae85b3c9b8e5466baa9cbf7f57f1cde0ac6bc09", size = 681701 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/2a/55/bd0487e86679db1823fc9ee0d8c9c78ae2413d34c0b461193b5f4c31d22f/zstandard-0.23.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:bf0a05b6059c0528477fba9054d09179beb63744355cab9f38059548fedd46a9", size = 788701 },
+ { url = "https://files.pythonhosted.org/packages/e1/8a/ccb516b684f3ad987dfee27570d635822e3038645b1a950c5e8022df1145/zstandard-0.23.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:fc9ca1c9718cb3b06634c7c8dec57d24e9438b2aa9a0f02b8bb36bf478538880", size = 633678 },
+ { url = "https://files.pythonhosted.org/packages/12/89/75e633d0611c028e0d9af6df199423bf43f54bea5007e6718ab7132e234c/zstandard-0.23.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:77da4c6bfa20dd5ea25cbf12c76f181a8e8cd7ea231c673828d0386b1740b8dc", size = 4941098 },
+ { url = "https://files.pythonhosted.org/packages/4a/7a/bd7f6a21802de358b63f1ee636ab823711c25ce043a3e9f043b4fcb5ba32/zstandard-0.23.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b2170c7e0367dde86a2647ed5b6f57394ea7f53545746104c6b09fc1f4223573", size = 5308798 },
+ { url = "https://files.pythonhosted.org/packages/79/3b/775f851a4a65013e88ca559c8ae42ac1352db6fcd96b028d0df4d7d1d7b4/zstandard-0.23.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c16842b846a8d2a145223f520b7e18b57c8f476924bda92aeee3a88d11cfc391", size = 5341840 },
+ { url = "https://files.pythonhosted.org/packages/09/4f/0cc49570141dd72d4d95dd6fcf09328d1b702c47a6ec12fbed3b8aed18a5/zstandard-0.23.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:157e89ceb4054029a289fb504c98c6a9fe8010f1680de0201b3eb5dc20aa6d9e", size = 5440337 },
+ { url = "https://files.pythonhosted.org/packages/e7/7c/aaa7cd27148bae2dc095191529c0570d16058c54c4597a7d118de4b21676/zstandard-0.23.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:203d236f4c94cd8379d1ea61db2fce20730b4c38d7f1c34506a31b34edc87bdd", size = 4861182 },
+ { url = "https://files.pythonhosted.org/packages/ac/eb/4b58b5c071d177f7dc027129d20bd2a44161faca6592a67f8fcb0b88b3ae/zstandard-0.23.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:dc5d1a49d3f8262be192589a4b72f0d03b72dcf46c51ad5852a4fdc67be7b9e4", size = 4932936 },
+ { url = "https://files.pythonhosted.org/packages/44/f9/21a5fb9bb7c9a274b05ad700a82ad22ce82f7ef0f485980a1e98ed6e8c5f/zstandard-0.23.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:752bf8a74412b9892f4e5b58f2f890a039f57037f52c89a740757ebd807f33ea", size = 5464705 },
+ { url = "https://files.pythonhosted.org/packages/49/74/b7b3e61db3f88632776b78b1db597af3f44c91ce17d533e14a25ce6a2816/zstandard-0.23.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:80080816b4f52a9d886e67f1f96912891074903238fe54f2de8b786f86baded2", size = 4857882 },
+ { url = "https://files.pythonhosted.org/packages/4a/7f/d8eb1cb123d8e4c541d4465167080bec88481ab54cd0b31eb4013ba04b95/zstandard-0.23.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:84433dddea68571a6d6bd4fbf8ff398236031149116a7fff6f777ff95cad3df9", size = 4697672 },
+ { url = "https://files.pythonhosted.org/packages/5e/05/f7dccdf3d121309b60342da454d3e706453a31073e2c4dac8e1581861e44/zstandard-0.23.0-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:ab19a2d91963ed9e42b4e8d77cd847ae8381576585bad79dbd0a8837a9f6620a", size = 5206043 },
+ { url = "https://files.pythonhosted.org/packages/86/9d/3677a02e172dccd8dd3a941307621c0cbd7691d77cb435ac3c75ab6a3105/zstandard-0.23.0-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:59556bf80a7094d0cfb9f5e50bb2db27fefb75d5138bb16fb052b61b0e0eeeb0", size = 5667390 },
+ { url = "https://files.pythonhosted.org/packages/41/7e/0012a02458e74a7ba122cd9cafe491facc602c9a17f590367da369929498/zstandard-0.23.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:27d3ef2252d2e62476389ca8f9b0cf2bbafb082a3b6bfe9d90cbcbb5529ecf7c", size = 5198901 },
+ { url = "https://files.pythonhosted.org/packages/65/3a/8f715b97bd7bcfc7342d8adcd99a026cb2fb550e44866a3b6c348e1b0f02/zstandard-0.23.0-cp310-cp310-win32.whl", hash = "sha256:5d41d5e025f1e0bccae4928981e71b2334c60f580bdc8345f824e7c0a4c2a813", size = 430596 },
+ { url = "https://files.pythonhosted.org/packages/19/b7/b2b9eca5e5a01111e4fe8a8ffb56bdcdf56b12448a24effe6cfe4a252034/zstandard-0.23.0-cp310-cp310-win_amd64.whl", hash = "sha256:519fbf169dfac1222a76ba8861ef4ac7f0530c35dd79ba5727014613f91613d4", size = 495498 },
+ { url = "https://files.pythonhosted.org/packages/9e/40/f67e7d2c25a0e2dc1744dd781110b0b60306657f8696cafb7ad7579469bd/zstandard-0.23.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:34895a41273ad33347b2fc70e1bff4240556de3c46c6ea430a7ed91f9042aa4e", size = 788699 },
+ { url = "https://files.pythonhosted.org/packages/e8/46/66d5b55f4d737dd6ab75851b224abf0afe5774976fe511a54d2eb9063a41/zstandard-0.23.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:77ea385f7dd5b5676d7fd943292ffa18fbf5c72ba98f7d09fc1fb9e819b34c23", size = 633681 },
+ { url = "https://files.pythonhosted.org/packages/63/b6/677e65c095d8e12b66b8f862b069bcf1f1d781b9c9c6f12eb55000d57583/zstandard-0.23.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:983b6efd649723474f29ed42e1467f90a35a74793437d0bc64a5bf482bedfa0a", size = 4944328 },
+ { url = "https://files.pythonhosted.org/packages/59/cc/e76acb4c42afa05a9d20827116d1f9287e9c32b7ad58cc3af0721ce2b481/zstandard-0.23.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:80a539906390591dd39ebb8d773771dc4db82ace6372c4d41e2d293f8e32b8db", size = 5311955 },
+ { url = "https://files.pythonhosted.org/packages/78/e4/644b8075f18fc7f632130c32e8f36f6dc1b93065bf2dd87f03223b187f26/zstandard-0.23.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:445e4cb5048b04e90ce96a79b4b63140e3f4ab5f662321975679b5f6360b90e2", size = 5344944 },
+ { url = "https://files.pythonhosted.org/packages/76/3f/dbafccf19cfeca25bbabf6f2dd81796b7218f768ec400f043edc767015a6/zstandard-0.23.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fd30d9c67d13d891f2360b2a120186729c111238ac63b43dbd37a5a40670b8ca", size = 5442927 },
+ { url = "https://files.pythonhosted.org/packages/0c/c3/d24a01a19b6733b9f218e94d1a87c477d523237e07f94899e1c10f6fd06c/zstandard-0.23.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d20fd853fbb5807c8e84c136c278827b6167ded66c72ec6f9a14b863d809211c", size = 4864910 },
+ { url = "https://files.pythonhosted.org/packages/1c/a9/cf8f78ead4597264f7618d0875be01f9bc23c9d1d11afb6d225b867cb423/zstandard-0.23.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:ed1708dbf4d2e3a1c5c69110ba2b4eb6678262028afd6c6fbcc5a8dac9cda68e", size = 4935544 },
+ { url = "https://files.pythonhosted.org/packages/2c/96/8af1e3731b67965fb995a940c04a2c20997a7b3b14826b9d1301cf160879/zstandard-0.23.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:be9b5b8659dff1f913039c2feee1aca499cfbc19e98fa12bc85e037c17ec6ca5", size = 5467094 },
+ { url = "https://files.pythonhosted.org/packages/ff/57/43ea9df642c636cb79f88a13ab07d92d88d3bfe3e550b55a25a07a26d878/zstandard-0.23.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:65308f4b4890aa12d9b6ad9f2844b7ee42c7f7a4fd3390425b242ffc57498f48", size = 4860440 },
+ { url = "https://files.pythonhosted.org/packages/46/37/edb78f33c7f44f806525f27baa300341918fd4c4af9472fbc2c3094be2e8/zstandard-0.23.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:98da17ce9cbf3bfe4617e836d561e433f871129e3a7ac16d6ef4c680f13a839c", size = 4700091 },
+ { url = "https://files.pythonhosted.org/packages/c1/f1/454ac3962671a754f3cb49242472df5c2cced4eb959ae203a377b45b1a3c/zstandard-0.23.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:8ed7d27cb56b3e058d3cf684d7200703bcae623e1dcc06ed1e18ecda39fee003", size = 5208682 },
+ { url = "https://files.pythonhosted.org/packages/85/b2/1734b0fff1634390b1b887202d557d2dd542de84a4c155c258cf75da4773/zstandard-0.23.0-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:b69bb4f51daf461b15e7b3db033160937d3ff88303a7bc808c67bbc1eaf98c78", size = 5669707 },
+ { url = "https://files.pythonhosted.org/packages/52/5a/87d6971f0997c4b9b09c495bf92189fb63de86a83cadc4977dc19735f652/zstandard-0.23.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:034b88913ecc1b097f528e42b539453fa82c3557e414b3de9d5632c80439a473", size = 5201792 },
+ { url = "https://files.pythonhosted.org/packages/79/02/6f6a42cc84459d399bd1a4e1adfc78d4dfe45e56d05b072008d10040e13b/zstandard-0.23.0-cp311-cp311-win32.whl", hash = "sha256:f2d4380bf5f62daabd7b751ea2339c1a21d1c9463f1feb7fc2bdcea2c29c3160", size = 430586 },
+ { url = "https://files.pythonhosted.org/packages/be/a2/4272175d47c623ff78196f3c10e9dc7045c1b9caf3735bf041e65271eca4/zstandard-0.23.0-cp311-cp311-win_amd64.whl", hash = "sha256:62136da96a973bd2557f06ddd4e8e807f9e13cbb0bfb9cc06cfe6d98ea90dfe0", size = 495420 },
+ { url = "https://files.pythonhosted.org/packages/7b/83/f23338c963bd9de687d47bf32efe9fd30164e722ba27fb59df33e6b1719b/zstandard-0.23.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:b4567955a6bc1b20e9c31612e615af6b53733491aeaa19a6b3b37f3b65477094", size = 788713 },
+ { url = "https://files.pythonhosted.org/packages/5b/b3/1a028f6750fd9227ee0b937a278a434ab7f7fdc3066c3173f64366fe2466/zstandard-0.23.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:1e172f57cd78c20f13a3415cc8dfe24bf388614324d25539146594c16d78fcc8", size = 633459 },
+ { url = "https://files.pythonhosted.org/packages/26/af/36d89aae0c1f95a0a98e50711bc5d92c144939efc1f81a2fcd3e78d7f4c1/zstandard-0.23.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b0e166f698c5a3e914947388c162be2583e0c638a4703fc6a543e23a88dea3c1", size = 4945707 },
+ { url = "https://files.pythonhosted.org/packages/cd/2e/2051f5c772f4dfc0aae3741d5fc72c3dcfe3aaeb461cc231668a4db1ce14/zstandard-0.23.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:12a289832e520c6bd4dcaad68e944b86da3bad0d339ef7989fb7e88f92e96072", size = 5306545 },
+ { url = "https://files.pythonhosted.org/packages/0a/9e/a11c97b087f89cab030fa71206963090d2fecd8eb83e67bb8f3ffb84c024/zstandard-0.23.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d50d31bfedd53a928fed6707b15a8dbeef011bb6366297cc435accc888b27c20", size = 5337533 },
+ { url = "https://files.pythonhosted.org/packages/fc/79/edeb217c57fe1bf16d890aa91a1c2c96b28c07b46afed54a5dcf310c3f6f/zstandard-0.23.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:72c68dda124a1a138340fb62fa21b9bf4848437d9ca60bd35db36f2d3345f373", size = 5436510 },
+ { url = "https://files.pythonhosted.org/packages/81/4f/c21383d97cb7a422ddf1ae824b53ce4b51063d0eeb2afa757eb40804a8ef/zstandard-0.23.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:53dd9d5e3d29f95acd5de6802e909ada8d8d8cfa37a3ac64836f3bc4bc5512db", size = 4859973 },
+ { url = "https://files.pythonhosted.org/packages/ab/15/08d22e87753304405ccac8be2493a495f529edd81d39a0870621462276ef/zstandard-0.23.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:6a41c120c3dbc0d81a8e8adc73312d668cd34acd7725f036992b1b72d22c1772", size = 4936968 },
+ { url = "https://files.pythonhosted.org/packages/eb/fa/f3670a597949fe7dcf38119a39f7da49a8a84a6f0b1a2e46b2f71a0ab83f/zstandard-0.23.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:40b33d93c6eddf02d2c19f5773196068d875c41ca25730e8288e9b672897c105", size = 5467179 },
+ { url = "https://files.pythonhosted.org/packages/4e/a9/dad2ab22020211e380adc477a1dbf9f109b1f8d94c614944843e20dc2a99/zstandard-0.23.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:9206649ec587e6b02bd124fb7799b86cddec350f6f6c14bc82a2b70183e708ba", size = 4848577 },
+ { url = "https://files.pythonhosted.org/packages/08/03/dd28b4484b0770f1e23478413e01bee476ae8227bbc81561f9c329e12564/zstandard-0.23.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:76e79bc28a65f467e0409098fa2c4376931fd3207fbeb6b956c7c476d53746dd", size = 4693899 },
+ { url = "https://files.pythonhosted.org/packages/2b/64/3da7497eb635d025841e958bcd66a86117ae320c3b14b0ae86e9e8627518/zstandard-0.23.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:66b689c107857eceabf2cf3d3fc699c3c0fe8ccd18df2219d978c0283e4c508a", size = 5199964 },
+ { url = "https://files.pythonhosted.org/packages/43/a4/d82decbab158a0e8a6ebb7fc98bc4d903266bce85b6e9aaedea1d288338c/zstandard-0.23.0-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:9c236e635582742fee16603042553d276cca506e824fa2e6489db04039521e90", size = 5655398 },
+ { url = "https://files.pythonhosted.org/packages/f2/61/ac78a1263bc83a5cf29e7458b77a568eda5a8f81980691bbc6eb6a0d45cc/zstandard-0.23.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:a8fffdbd9d1408006baaf02f1068d7dd1f016c6bcb7538682622c556e7b68e35", size = 5191313 },
+ { url = "https://files.pythonhosted.org/packages/e7/54/967c478314e16af5baf849b6ee9d6ea724ae5b100eb506011f045d3d4e16/zstandard-0.23.0-cp312-cp312-win32.whl", hash = "sha256:dc1d33abb8a0d754ea4763bad944fd965d3d95b5baef6b121c0c9013eaf1907d", size = 430877 },
+ { url = "https://files.pythonhosted.org/packages/75/37/872d74bd7739639c4553bf94c84af7d54d8211b626b352bc57f0fd8d1e3f/zstandard-0.23.0-cp312-cp312-win_amd64.whl", hash = "sha256:64585e1dba664dc67c7cdabd56c1e5685233fbb1fc1966cfba2a340ec0dfff7b", size = 495595 },
+ { url = "https://files.pythonhosted.org/packages/80/f1/8386f3f7c10261fe85fbc2c012fdb3d4db793b921c9abcc995d8da1b7a80/zstandard-0.23.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:576856e8594e6649aee06ddbfc738fec6a834f7c85bf7cadd1c53d4a58186ef9", size = 788975 },
+ { url = "https://files.pythonhosted.org/packages/16/e8/cbf01077550b3e5dc86089035ff8f6fbbb312bc0983757c2d1117ebba242/zstandard-0.23.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:38302b78a850ff82656beaddeb0bb989a0322a8bbb1bf1ab10c17506681d772a", size = 633448 },
+ { url = "https://files.pythonhosted.org/packages/06/27/4a1b4c267c29a464a161aeb2589aff212b4db653a1d96bffe3598f3f0d22/zstandard-0.23.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d2240ddc86b74966c34554c49d00eaafa8200a18d3a5b6ffbf7da63b11d74ee2", size = 4945269 },
+ { url = "https://files.pythonhosted.org/packages/7c/64/d99261cc57afd9ae65b707e38045ed8269fbdae73544fd2e4a4d50d0ed83/zstandard-0.23.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2ef230a8fd217a2015bc91b74f6b3b7d6522ba48be29ad4ea0ca3a3775bf7dd5", size = 5306228 },
+ { url = "https://files.pythonhosted.org/packages/7a/cf/27b74c6f22541f0263016a0fd6369b1b7818941de639215c84e4e94b2a1c/zstandard-0.23.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:774d45b1fac1461f48698a9d4b5fa19a69d47ece02fa469825b442263f04021f", size = 5336891 },
+ { url = "https://files.pythonhosted.org/packages/fa/18/89ac62eac46b69948bf35fcd90d37103f38722968e2981f752d69081ec4d/zstandard-0.23.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6f77fa49079891a4aab203d0b1744acc85577ed16d767b52fc089d83faf8d8ed", size = 5436310 },
+ { url = "https://files.pythonhosted.org/packages/a8/a8/5ca5328ee568a873f5118d5b5f70d1f36c6387716efe2e369010289a5738/zstandard-0.23.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ac184f87ff521f4840e6ea0b10c0ec90c6b1dcd0bad2f1e4a9a1b4fa177982ea", size = 4859912 },
+ { url = "https://files.pythonhosted.org/packages/ea/ca/3781059c95fd0868658b1cf0440edd832b942f84ae60685d0cfdb808bca1/zstandard-0.23.0-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:c363b53e257246a954ebc7c488304b5592b9c53fbe74d03bc1c64dda153fb847", size = 4936946 },
+ { url = "https://files.pythonhosted.org/packages/ce/11/41a58986f809532742c2b832c53b74ba0e0a5dae7e8ab4642bf5876f35de/zstandard-0.23.0-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:e7792606d606c8df5277c32ccb58f29b9b8603bf83b48639b7aedf6df4fe8171", size = 5466994 },
+ { url = "https://files.pythonhosted.org/packages/83/e3/97d84fe95edd38d7053af05159465d298c8b20cebe9ccb3d26783faa9094/zstandard-0.23.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:a0817825b900fcd43ac5d05b8b3079937073d2b1ff9cf89427590718b70dd840", size = 4848681 },
+ { url = "https://files.pythonhosted.org/packages/6e/99/cb1e63e931de15c88af26085e3f2d9af9ce53ccafac73b6e48418fd5a6e6/zstandard-0.23.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:9da6bc32faac9a293ddfdcb9108d4b20416219461e4ec64dfea8383cac186690", size = 4694239 },
+ { url = "https://files.pythonhosted.org/packages/ab/50/b1e703016eebbc6501fc92f34db7b1c68e54e567ef39e6e59cf5fb6f2ec0/zstandard-0.23.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:fd7699e8fd9969f455ef2926221e0233f81a2542921471382e77a9e2f2b57f4b", size = 5200149 },
+ { url = "https://files.pythonhosted.org/packages/aa/e0/932388630aaba70197c78bdb10cce2c91fae01a7e553b76ce85471aec690/zstandard-0.23.0-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:d477ed829077cd945b01fc3115edd132c47e6540ddcd96ca169facff28173057", size = 5655392 },
+ { url = "https://files.pythonhosted.org/packages/02/90/2633473864f67a15526324b007a9f96c96f56d5f32ef2a56cc12f9548723/zstandard-0.23.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:fa6ce8b52c5987b3e34d5674b0ab529a4602b632ebab0a93b07bfb4dfc8f8a33", size = 5191299 },
+ { url = "https://files.pythonhosted.org/packages/b0/4c/315ca5c32da7e2dc3455f3b2caee5c8c2246074a61aac6ec3378a97b7136/zstandard-0.23.0-cp313-cp313-win32.whl", hash = "sha256:a9b07268d0c3ca5c170a385a0ab9fb7fdd9f5fd866be004c4ea39e44edce47dd", size = 430862 },
+ { url = "https://files.pythonhosted.org/packages/a2/bf/c6aaba098e2d04781e8f4f7c0ba3c7aa73d00e4c436bcc0cf059a66691d1/zstandard-0.23.0-cp313-cp313-win_amd64.whl", hash = "sha256:f3513916e8c645d0610815c257cbfd3242adfd5c4cfa78be514e5a3ebb42a41b", size = 495578 },
+ { url = "https://files.pythonhosted.org/packages/fb/96/4fcafeb7e013a2386d22f974b5b97a0b9a65004ed58c87ae001599bfbd48/zstandard-0.23.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:3aa014d55c3af933c1315eb4bb06dd0459661cc0b15cd61077afa6489bec63bb", size = 788697 },
+ { url = "https://files.pythonhosted.org/packages/83/ff/a52ce725be69b86a2967ecba0497a8184540cc284c0991125515449e54e2/zstandard-0.23.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:0a7f0804bb3799414af278e9ad51be25edf67f78f916e08afdb983e74161b916", size = 633679 },
+ { url = "https://files.pythonhosted.org/packages/34/0f/3dc62db122f6a9c481c335fff6fc9f4e88d8f6e2d47321ee3937328addb4/zstandard-0.23.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fb2b1ecfef1e67897d336de3a0e3f52478182d6a47eda86cbd42504c5cbd009a", size = 4940416 },
+ { url = "https://files.pythonhosted.org/packages/1d/e5/9fe0dd8c85fdc2f635e6660d07872a5dc4b366db566630161e39f9f804e1/zstandard-0.23.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:837bb6764be6919963ef41235fd56a6486b132ea64afe5fafb4cb279ac44f259", size = 5307693 },
+ { url = "https://files.pythonhosted.org/packages/73/bf/fe62c0cd865c171ee8ed5bc83174b5382a2cb729c8d6162edfb99a83158b/zstandard-0.23.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1516c8c37d3a053b01c1c15b182f3b5f5eef19ced9b930b684a73bad121addf4", size = 5341236 },
+ { url = "https://files.pythonhosted.org/packages/39/86/4fe79b30c794286110802a6cd44a73b6a314ac8196b9338c0fbd78c2407d/zstandard-0.23.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:48ef6a43b1846f6025dde6ed9fee0c24e1149c1c25f7fb0a0585572b2f3adc58", size = 5439101 },
+ { url = "https://files.pythonhosted.org/packages/72/ed/cacec235c581ebf8c608c7fb3d4b6b70d1b490d0e5128ea6996f809ecaef/zstandard-0.23.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:11e3bf3c924853a2d5835b24f03eeba7fc9b07d8ca499e247e06ff5676461a15", size = 4860320 },
+ { url = "https://files.pythonhosted.org/packages/f6/1e/2c589a2930f93946b132fc852c574a19d5edc23fad2b9e566f431050c7ec/zstandard-0.23.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:2fb4535137de7e244c230e24f9d1ec194f61721c86ebea04e1581d9d06ea1269", size = 4931933 },
+ { url = "https://files.pythonhosted.org/packages/8e/f5/30eadde3686d902b5d4692bb5f286977cbc4adc082145eb3f49d834b2eae/zstandard-0.23.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:8c24f21fa2af4bb9f2c492a86fe0c34e6d2c63812a839590edaf177b7398f700", size = 5463878 },
+ { url = "https://files.pythonhosted.org/packages/e0/c8/8aed1f0ab9854ef48e5ad4431367fcb23ce73f0304f7b72335a8edc66556/zstandard-0.23.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:a8c86881813a78a6f4508ef9daf9d4995b8ac2d147dcb1a450448941398091c9", size = 4857192 },
+ { url = "https://files.pythonhosted.org/packages/a8/c6/55e666cfbcd032b9e271865e8578fec56e5594d4faeac379d371526514f5/zstandard-0.23.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:fe3b385d996ee0822fd46528d9f0443b880d4d05528fd26a9119a54ec3f91c69", size = 4696513 },
+ { url = "https://files.pythonhosted.org/packages/dc/bd/720b65bea63ec9de0ac7414c33b9baf271c8de8996e5ff324dc93fc90ff1/zstandard-0.23.0-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:82d17e94d735c99621bf8ebf9995f870a6b3e6d14543b99e201ae046dfe7de70", size = 5204823 },
+ { url = "https://files.pythonhosted.org/packages/d8/40/d678db1556e3941d330cd4e95623a63ef235b18547da98fa184cbc028ecf/zstandard-0.23.0-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:c7c517d74bea1a6afd39aa612fa025e6b8011982a0897768a2f7c8ab4ebb78a2", size = 5666490 },
+ { url = "https://files.pythonhosted.org/packages/ed/cc/c89329723d7515898a1fc7ef5d251264078548c505719d13e9511800a103/zstandard-0.23.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:1fd7e0f1cfb70eb2f95a19b472ee7ad6d9a0a992ec0ae53286870c104ca939e5", size = 5196622 },
+ { url = "https://files.pythonhosted.org/packages/78/4c/634289d41e094327a94500dfc919e58841b10ea3a9efdfafbac614797ec2/zstandard-0.23.0-cp39-cp39-win32.whl", hash = "sha256:43da0f0092281bf501f9c5f6f3b4c975a8a0ea82de49ba3f7100e64d422a1274", size = 430620 },
+ { url = "https://files.pythonhosted.org/packages/a2/e2/0b0c5a0f4f7699fecd92c1ba6278ef9b01f2b0b0dd46f62bfc6729c05659/zstandard-0.23.0-cp39-cp39-win_amd64.whl", hash = "sha256:f8346bfa098532bc1fb6c7ef06783e969d87a99dd1d2a5a18a892c1d7a643c58", size = 495528 },
+]