From 0e3354832e8e9dfcbe6fc3dfeb67e3a062564428 Mon Sep 17 00:00:00 2001 From: Birger Moell Date: Thu, 14 Mar 2024 10:40:28 +0100 Subject: [PATCH 01/50] WIP depth guided stable diffusion --- .../depth_guided_stable_diffusion/README.md | 95 ++++++++++++++++++- 1 file changed, 90 insertions(+), 5 deletions(-) diff --git a/examples/python/depth_guided_stable_diffusion/README.md b/examples/python/depth_guided_stable_diffusion/README.md index 815b8c36ea4d..db6ab074917e 100644 --- a/examples/python/depth_guided_stable_diffusion/README.md +++ b/examples/python/depth_guided_stable_diffusion/README.md @@ -1,26 +1,111 @@ - - Depth-guided stable diffusion screenshot + Depth-guided stable diffusion example -A more elaborate example running Depth Guided Stable Diffusion 2.0. +Leverage [Depth Guided Stable Diffusion](https://github.com/Stability-AI/stablediffusion?tab=readme-ov-file#depth-conditional-stable-diffusion) to generate images with enhanced depth perception. This method integrates depth maps to guide the Stable Diffusion model, creating more visually compelling and contextually accurate images. + +## Used Rerun Types +[`Image`](https://www.rerun.io/docs/reference/types/archetypes/image), [`Tensor`](https://www.rerun.io/docs/reference/types/archetypes/tensor), [`DepthImage`](https://www.rerun.io/docs/reference/types/archetypes/depth_image) + +## Background +Depth Guided Stable Diffusion enriches the image generation process by incorporating depth information, providing a unique way to control the spatial composition of generated images. This approach allows for more nuanced and layered creations, making it especially useful for scenes requiring a sense of three-dimensionality. + +# Logging and Visualizing with Rerun +The visualizations in this example were created with the Rerun SDK, demonstrating the integration of depth information in the Stable Diffusion image generation process. Here is the code for generating the visualisation in Rerun. + +## Prompt +Visualising the prompt and negative prompt +```python +rr.log("prompt/text", rr.TextLog(prompt)) +rr.log("prompt/text_negative", rr.TextLog(negative_prompt)) +``` + +## Text +Visualisiong the text input ids the text attention mask and the unconditional input ids +```python +rr.log("prompt/text_input/ids", rr.Tensor(text_input_ids)) +rr.log("prompt/text_input/attention_mask", rr.Tensor(text_inputs.attention_mask)) +rr.log("prompt/uncond_input/ids", rr.Tensor(uncond_input.input_ids)) +``` -For more info see [here](https://github.com/Stability-AI/stablediffusion). +## Text embeddings +Visualising the text embeddings +```python +rr.log("prompt/text_embeddings", rr.Tensor(text_embeddings)) +rr.log("prompt/uncond_embeddings", rr.Tensor(uncond_embeddings)) +``` + +## Depth map +Visualising the pixel values of the depth estimation, estimated depth image, interpolated depth image and normalized depth image +```python +rr.log("depth/input_preprocessed", rr.Tensor(pixel_values)) +rr.log("depth/estimated", rr.DepthImage(depth_map)) +rr.log("depth/interpolated", rr.DepthImage(depth_map)) +rr.log("depth/normalized", rr.DepthImage(depth_map)) +``` + +## Latents +Log the latents, the representation of the images in the format used by the diffusion model. +```python +rr.log("diffusion/latents", rr.Tensor(latents, dim_names=["b", "c", "h", "w"])) +``` + +## Denoising loop +For each step in the denoising loop we createa a time sequence and log the model input, noise predictions, latents and image. This make is possible for us to see all denoising steps in the Rerun viewer. +```python +rr.set_time_sequence("step", i) +rr.set_time_sequence("timestep", t) +rr.log("diffusion/latent_model_input", rr.Tensor(latent_model_input)) +rr.log("diffusion/noise_pred", rr.Tensor(noise_pred, dim_names=["b", "c", "h", "w"])) +rr.log("diffusion/latents", rr.Tensor(latents, dim_names=["b", "c", "h", "w"])) +rr.log("image/diffused", rr.Image(image)) +``` +## Diffused image +Finally we log the diffused image generated by the model + +```python + rr.log("image/diffused", rr.Image(image_8)) +``` + +# Run the Code + +To run this example, make sure you have the Rerun repository checked out and the latest SDK installed: +```bash +# Setup +pip install --upgrade rerun-sdk # install the latest Rerun SDK +git clone git@github.com:rerun-io/rerun.git # Clone the repository +cd rerun +git checkout latest # Check out the commit matching the latest SDK release +``` + +Install the necessary libraries specified in the requirements file: ```bash pip install -r examples/python/depth_guided_stable_diffusion/requirements.txt +``` + +To run this example use +```bash python examples/python/depth_guided_stable_diffusion/main.py ``` +You can specify your own image and prompts using +```bash +python examples/python/depth_guided_stable_diffusion/main.py [--img-path IMG_PATH] [--depth-map-path DEPTH_MAP_PATH] [--prompt PROMPT] +````` + + + From dcb430561b662e4b33b71973dfc4f85247dfd73e Mon Sep 17 00:00:00 2001 From: Birger Moell Date: Thu, 14 Mar 2024 10:40:49 +0100 Subject: [PATCH 02/50] Spelling --- examples/python/depth_guided_stable_diffusion/README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/examples/python/depth_guided_stable_diffusion/README.md b/examples/python/depth_guided_stable_diffusion/README.md index db6ab074917e..853a8a0875f4 100644 --- a/examples/python/depth_guided_stable_diffusion/README.md +++ b/examples/python/depth_guided_stable_diffusion/README.md @@ -64,7 +64,7 @@ rr.log("diffusion/latents", rr.Tensor(latents, dim_names=["b", "c", "h", "w"])) ``` ## Denoising loop -For each step in the denoising loop we createa a time sequence and log the model input, noise predictions, latents and image. This make is possible for us to see all denoising steps in the Rerun viewer. +For each step in the denoising loop we createa a time sequence and log the latent model input, noise predictions, latents and image. This make is possible for us to see all denoising steps in the Rerun viewer. ```python rr.set_time_sequence("step", i) rr.set_time_sequence("timestep", t) @@ -78,7 +78,7 @@ rr.log("image/diffused", rr.Image(image)) Finally we log the diffused image generated by the model ```python - rr.log("image/diffused", rr.Image(image_8)) +rr.log("image/diffused", rr.Image(image_8)) ``` # Run the Code From 114978a8406af363bb6da8731cb1332aca67b0aa Mon Sep 17 00:00:00 2001 From: Birger Moell Date: Thu, 14 Mar 2024 10:58:05 +0100 Subject: [PATCH 03/50] Updated copy with more explanations --- examples/python/depth_guided_stable_diffusion/README.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/examples/python/depth_guided_stable_diffusion/README.md b/examples/python/depth_guided_stable_diffusion/README.md index 853a8a0875f4..4629dbbf3fdb 100644 --- a/examples/python/depth_guided_stable_diffusion/README.md +++ b/examples/python/depth_guided_stable_diffusion/README.md @@ -34,7 +34,7 @@ rr.log("prompt/text_negative", rr.TextLog(negative_prompt)) ``` ## Text -Visualisiong the text input ids the text attention mask and the unconditional input ids +Visualisiong the text input ids, the text attention mask and the unconditional input ids ```python rr.log("prompt/text_input/ids", rr.Tensor(text_input_ids)) rr.log("prompt/text_input/attention_mask", rr.Tensor(text_inputs.attention_mask)) @@ -42,7 +42,7 @@ rr.log("prompt/uncond_input/ids", rr.Tensor(uncond_input.input_ids)) ``` ## Text embeddings -Visualising the text embeddings +Visualising the text embeddings. The text embeddings are generated in response to the specific prompts used while the unconditional text embeddings represent a neutral or baseline state without specific input conditions. ```python rr.log("prompt/text_embeddings", rr.Tensor(text_embeddings)) rr.log("prompt/uncond_embeddings", rr.Tensor(uncond_embeddings)) @@ -64,7 +64,7 @@ rr.log("diffusion/latents", rr.Tensor(latents, dim_names=["b", "c", "h", "w"])) ``` ## Denoising loop -For each step in the denoising loop we createa a time sequence and log the latent model input, noise predictions, latents and image. This make is possible for us to see all denoising steps in the Rerun viewer. +For each step in the denoising loop we set a time sequence with step and timestep and log the latent model input, noise predictions, latents and image. This make is possible for us to see all denoising steps in the Rerun viewer. ```python rr.set_time_sequence("step", i) rr.set_time_sequence("timestep", t) @@ -75,7 +75,7 @@ rr.log("image/diffused", rr.Image(image)) ``` ## Diffused image -Finally we log the diffused image generated by the model +Finally we log the diffused image generated by the model. ```python rr.log("image/diffused", rr.Image(image_8)) From fad5244ea04e3fc947d1d06fc2d91c131058a245 Mon Sep 17 00:00:00 2001 From: Antoine Beyeler <49431240+abey79@users.noreply.github.com> Date: Thu, 14 Mar 2024 15:45:56 +0100 Subject: [PATCH 04/50] Add some common artefact directories to `.prettierignore` (#5504) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ### What ☝🏻 ### Checklist * [x] I have read and agree to [Contributor Guide](https://github.com/rerun-io/rerun/blob/main/CONTRIBUTING.md) and the [Code of Conduct](https://github.com/rerun-io/rerun/blob/main/CODE_OF_CONDUCT.md) * [x] I've included a screenshot or gif (if applicable) * [x] I have tested the web demo (if applicable): * Using newly built examples: [app.rerun.io](https://app.rerun.io/pr/5504/index.html) * Using examples from latest `main` build: [app.rerun.io](https://app.rerun.io/pr/5504/index.html?manifest_url=https://app.rerun.io/version/main/examples_manifest.json) * Using full set of examples from `nightly` build: [app.rerun.io](https://app.rerun.io/pr/5504/index.html?manifest_url=https://app.rerun.io/version/nightly/examples_manifest.json) * [x] The PR title and labels are set such as to maximize their usefulness for the next release's CHANGELOG * [x] If applicable, add a new check to the [release checklist](https://github.com/rerun-io/rerun/blob/main/tests/python/release_checklist)! - [PR Build Summary](https://build.rerun.io/pr/5504) - [Docs preview](https://rerun.io/preview/db14a2752fdfd217c4e035ccd8e4ba758b7872f2/docs) - [Examples preview](https://rerun.io/preview/db14a2752fdfd217c4e035ccd8e4ba758b7872f2/examples) - [Recent benchmark results](https://build.rerun.io/graphs/crates.html) - [Wasm size tracking](https://build.rerun.io/graphs/sizes.html) --- .prettierignore | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/.prettierignore b/.prettierignore index 3778b915682d..0f5da258e2e1 100644 --- a/.prettierignore +++ b/.prettierignore @@ -8,3 +8,10 @@ web_viewer/re_viewer.js crates/re_web_viewer_server/web_viewer/re_viewer.js .pixi +/.nox +/build +/compare_screenshot +**/target +**/target_ra +**/target_wasm +**/venv* From d77e0255c7d96658089e21c824288f7dd6bcb581 Mon Sep 17 00:00:00 2001 From: Jeremy Leibs Date: Thu, 14 Mar 2024 11:16:25 -0400 Subject: [PATCH 05/50] Add the remaining space views and name them consistently (#5498) ### What Just lots of boiler plate with some name changes. Also split the apy.py file into a few sub-modules because it was getting large. All SpaceViews now end in View. - Spatial2DView - Spatial3DView - BarChartView - TensorView - TextDocumentView - TextLogView - TimeSeriesView Testing it out on the plots example: ![image](https://github.com/rerun-io/rerun/assets/3312232/97890949-de50-464e-b640-014f151177b5) ### Checklist * [x] I have read and agree to [Contributor Guide](https://github.com/rerun-io/rerun/blob/main/CONTRIBUTING.md) and the [Code of Conduct](https://github.com/rerun-io/rerun/blob/main/CODE_OF_CONDUCT.md) * [x] I've included a screenshot or gif (if applicable) * [x] I have tested the web demo (if applicable): * Using newly built examples: [app.rerun.io](https://app.rerun.io/pr/5498/index.html) * Using examples from latest `main` build: [app.rerun.io](https://app.rerun.io/pr/5498/index.html?manifest_url=https://app.rerun.io/version/main/examples_manifest.json) * Using full set of examples from `nightly` build: [app.rerun.io](https://app.rerun.io/pr/5498/index.html?manifest_url=https://app.rerun.io/version/nightly/examples_manifest.json) * [x] The PR title and labels are set such as to maximize their usefulness for the next release's CHANGELOG * [x] If applicable, add a new check to the [release checklist](https://github.com/rerun-io/rerun/blob/main/tests/python/release_checklist)! - [PR Build Summary](https://build.rerun.io/pr/5498) - [Docs preview](https://rerun.io/preview/bcbce7510db61092c96237a2668518ba564f0227/docs) - [Examples preview](https://rerun.io/preview/bcbce7510db61092c96237a2668518ba564f0227/examples) - [Recent benchmark results](https://build.rerun.io/graphs/crates.html) - [Wasm size tracking](https://build.rerun.io/graphs/sizes.html) --- examples/python/blueprint/main.py | 6 +- .../rerun_sdk/rerun/blueprint/__init__.py | 25 ++- rerun_py/rerun_sdk/rerun/blueprint/api.py | 144 +------------- .../rerun_sdk/rerun/blueprint/containers.py | 97 ++++++++++ .../rerun_sdk/rerun/blueprint/space_views.py | 179 ++++++++++++++++++ tests/python/blueprint/main.py | 27 ++- 6 files changed, 317 insertions(+), 161 deletions(-) create mode 100644 rerun_py/rerun_sdk/rerun/blueprint/containers.py create mode 100644 rerun_py/rerun_sdk/rerun/blueprint/space_views.py diff --git a/examples/python/blueprint/main.py b/examples/python/blueprint/main.py index 51fd984dd1a1..401cc955fdfa 100755 --- a/examples/python/blueprint/main.py +++ b/examples/python/blueprint/main.py @@ -6,7 +6,7 @@ import numpy as np import rerun as rr # pip install rerun-sdk -from rerun.blueprint.api import Blueprint, BlueprintPanel, Grid, SelectionPanel, Spatial2D, TimePanel, Viewport +from rerun.blueprint import Blueprint, BlueprintPanel, Grid, SelectionPanel, Spatial2DView, TimePanel, Viewport def main() -> None: @@ -28,8 +28,8 @@ def main() -> None: blueprint = Blueprint( Viewport( Grid( - Spatial2D(name="Rect 0", origin="/", contents=["image", "rect/0"]), - Spatial2D(name="Rect 1", origin="/", contents=["image", "rect/1"]), + Spatial2DView(name="Rect 0", origin="/", contents=["image", "rect/0"]), + Spatial2DView(name="Rect 1", origin="/", contents=["image", "rect/1"]), ), auto_space_views=args.auto_space_views, ), diff --git a/rerun_py/rerun_sdk/rerun/blueprint/__init__.py b/rerun_py/rerun_sdk/rerun/blueprint/__init__.py index 6a5d18c1059d..84a4b7063359 100644 --- a/rerun_py/rerun_sdk/rerun/blueprint/__init__.py +++ b/rerun_py/rerun_sdk/rerun/blueprint/__init__.py @@ -2,6 +2,7 @@ __all__ = [ "archetypes", + "BarChartView", "Blueprint", "BlueprintLike", "BlueprintPanel", @@ -10,10 +11,14 @@ "Grid", "Horizontal", "SelectionPanel", - "Spatial2D", - "Spatial3D", + "Spatial2DView", + "Spatial3DView", "Tabs", + "TensorView", + "TextDocumentView", + "TextLogView", "TimePanel", + "TimeSeriesView", "Vertical", "Viewport", ] @@ -23,13 +28,17 @@ Blueprint, BlueprintLike, BlueprintPanel, - Grid, - Horizontal, SelectionPanel, - Spatial2D, - Spatial3D, - Tabs, TimePanel, - Vertical, Viewport, ) +from .containers import Grid, Horizontal, Vertical +from .space_views import ( + BarChartView, + Spatial2DView, + Spatial3DView, + TensorView, + TextDocumentView, + TextLogView, + TimeSeriesView, +) diff --git a/rerun_py/rerun_sdk/rerun/blueprint/api.py b/rerun_py/rerun_sdk/rerun/blueprint/api.py index 5b76a5ed9621..6bea25e2a582 100644 --- a/rerun_py/rerun_sdk/rerun/blueprint/api.py +++ b/rerun_py/rerun_sdk/rerun/blueprint/api.py @@ -11,7 +11,7 @@ from ..recording_stream import RecordingStream from .archetypes import ContainerBlueprint, PanelBlueprint, SpaceViewBlueprint, SpaceViewContents, ViewportBlueprint from .components import ColumnShareArrayLike, RowShareArrayLike -from .components.container_kind import ContainerKind, ContainerKindLike +from .components.container_kind import ContainerKindLike SpaceViewContentsLike = Union[str, Sequence[str], Utf8Like, SpaceViewContents] @@ -70,6 +70,8 @@ def blueprint_path(self) -> str: def to_viewport(self) -> Viewport: """Convert this space view to a viewport.""" + from .containers import Grid + return Viewport(Grid(self)) def to_blueprint(self) -> Blueprint: @@ -112,56 +114,6 @@ def _iter_space_views(self) -> Iterable[bytes]: return [self.id.bytes] -class Spatial3D(SpaceView): - """A Spatial 3D space view.""" - - def __init__( - self, *, origin: EntityPathLike = "/", contents: SpaceViewContentsLike = "/**", name: Utf8Like | None = None - ): - """ - Construct a blueprint for a new 3D space view. - - Parameters - ---------- - origin - The `EntityPath` to use as the origin of this space view. All other entities will be transformed - to be displayed relative to this origin. - contents - The contents of the space view. Most commonly specified as a query expression. The individual - sub-expressions must either be newline separate, or provided as a list of strings. - See: [rerun.blueprint.components.QueryExpression][]. - name - The name of the space view. - - """ - super().__init__(class_identifier="3D", origin=origin, contents=contents, name=name) - - -class Spatial2D(SpaceView): - """A Spatial 2D space view.""" - - def __init__( - self, *, origin: EntityPathLike = "/", contents: SpaceViewContentsLike = "/**", name: Utf8Like | None = None - ): - """ - Construct a blueprint for a new 2D space view. - - Parameters - ---------- - origin - The `EntityPath` to use as the origin of this space view. All other entities will be transformed - to be displayed relative to this origin. - contents - The contents of the space view. Most commonly specified as a query expression. The individual - sub-expressions must either be newline separate, or provided as a list of strings. - See: [rerun.blueprint.components.QueryExpression][]. - name - The name of the space view. - - """ - super().__init__(class_identifier="2D", origin=origin, contents=contents, name=name) - - class Container: """ Base class for all container types. @@ -252,96 +204,6 @@ def _iter_space_views(self) -> Iterable[bytes]: return itertools.chain.from_iterable(sub._iter_space_views() for sub in self.contents) -class Horizontal(Container): - """A horizontal container.""" - - def __init__(self, *contents: Container | SpaceView, column_shares: Optional[ColumnShareArrayLike] = None): - """ - Construct a new horizontal container. - - Parameters - ---------- - *contents: - All positional arguments are the contents of the container, which may be either other containers or space views. - column_shares - The layout shares of the columns in the container. The share is used to determine what fraction of the total width each - column should take up. The column with index `i` will take up the fraction `shares[i] / total_shares`. - - """ - super().__init__(*contents, kind=ContainerKind.Horizontal, column_shares=column_shares) - - -class Vertical(Container): - """A vertical container.""" - - def __init__(self, *contents: Container | SpaceView, row_shares: Optional[RowShareArrayLike] = None): - """ - Construct a new vertical container. - - Parameters - ---------- - *contents: - All positional arguments are the contents of the container, which may be either other containers or space views. - row_shares - The layout shares of the rows in the container. The share is used to determine what fraction of the total height each - row should take up. The ros with index `i` will take up the fraction `shares[i] / total_shares`. - - """ - super().__init__(*contents, kind=ContainerKind.Vertical, row_shares=row_shares) - - -class Grid(Container): - """A grid container.""" - - def __init__( - self, - *contents: Container | SpaceView, - column_shares: Optional[ColumnShareArrayLike] = None, - row_shares: Optional[RowShareArrayLike] = None, - grid_columns: Optional[int] = None, - ): - """ - Construct a new grid container. - - Parameters - ---------- - *contents: - All positional arguments are the contents of the container, which may be either other containers or space views. - column_shares - The layout shares of the columns in the container. The share is used to determine what fraction of the total width each - column should take up. The column with index `i` will take up the fraction `shares[i] / total_shares`. - row_shares - The layout shares of the rows in the container. The share is used to determine what fraction of the total height each - row should take up. The ros with index `i` will take up the fraction `shares[i] / total_shares`. - grid_columns - The number of columns in the grid. - - """ - super().__init__( - *contents, - kind=ContainerKind.Grid, - column_shares=column_shares, - row_shares=row_shares, - grid_columns=grid_columns, - ) - - -class Tabs(Container): - """A tab container.""" - - def __init__(self, *contents: Container | SpaceView): - """ - Construct a new tab container. - - Parameters - ---------- - *contents: - All positional arguments are the contents of the container, which may be either other containers or space views. - - """ - super().__init__(*contents, kind=ContainerKind.Tabs) - - class Viewport: """ The top-level description of the Viewport. diff --git a/rerun_py/rerun_sdk/rerun/blueprint/containers.py b/rerun_py/rerun_sdk/rerun/blueprint/containers.py new file mode 100644 index 000000000000..db47f5a1fdba --- /dev/null +++ b/rerun_py/rerun_sdk/rerun/blueprint/containers.py @@ -0,0 +1,97 @@ +from __future__ import annotations + +from typing import Optional + +from .api import Container, SpaceView +from .components import ColumnShareArrayLike, RowShareArrayLike +from .components.container_kind import ContainerKind + + +class Horizontal(Container): + """A horizontal container.""" + + def __init__(self, *contents: Container | SpaceView, column_shares: Optional[ColumnShareArrayLike] = None): + """ + Construct a new horizontal container. + + Parameters + ---------- + *contents: + All positional arguments are the contents of the container, which may be either other containers or space views. + column_shares + The layout shares of the columns in the container. The share is used to determine what fraction of the total width each + column should take up. The column with index `i` will take up the fraction `shares[i] / total_shares`. + + """ + super().__init__(*contents, kind=ContainerKind.Horizontal, column_shares=column_shares) + + +class Vertical(Container): + """A vertical container.""" + + def __init__(self, *contents: Container | SpaceView, row_shares: Optional[RowShareArrayLike] = None): + """ + Construct a new vertical container. + + Parameters + ---------- + *contents: + All positional arguments are the contents of the container, which may be either other containers or space views. + row_shares + The layout shares of the rows in the container. The share is used to determine what fraction of the total height each + row should take up. The ros with index `i` will take up the fraction `shares[i] / total_shares`. + + """ + super().__init__(*contents, kind=ContainerKind.Vertical, row_shares=row_shares) + + +class Grid(Container): + """A grid container.""" + + def __init__( + self, + *contents: Container | SpaceView, + column_shares: Optional[ColumnShareArrayLike] = None, + row_shares: Optional[RowShareArrayLike] = None, + grid_columns: Optional[int] = None, + ): + """ + Construct a new grid container. + + Parameters + ---------- + *contents: + All positional arguments are the contents of the container, which may be either other containers or space views. + column_shares + The layout shares of the columns in the container. The share is used to determine what fraction of the total width each + column should take up. The column with index `i` will take up the fraction `shares[i] / total_shares`. + row_shares + The layout shares of the rows in the container. The share is used to determine what fraction of the total height each + row should take up. The ros with index `i` will take up the fraction `shares[i] / total_shares`. + grid_columns + The number of columns in the grid. + + """ + super().__init__( + *contents, + kind=ContainerKind.Grid, + column_shares=column_shares, + row_shares=row_shares, + grid_columns=grid_columns, + ) + + +class Tabs(Container): + """A tab container.""" + + def __init__(self, *contents: Container | SpaceView): + """ + Construct a new tab container. + + Parameters + ---------- + *contents: + All positional arguments are the contents of the container, which may be either other containers or space views. + + """ + super().__init__(*contents, kind=ContainerKind.Tabs) diff --git a/rerun_py/rerun_sdk/rerun/blueprint/space_views.py b/rerun_py/rerun_sdk/rerun/blueprint/space_views.py new file mode 100644 index 000000000000..80df3a462adf --- /dev/null +++ b/rerun_py/rerun_sdk/rerun/blueprint/space_views.py @@ -0,0 +1,179 @@ +from __future__ import annotations + +from ..datatypes import EntityPathLike, Utf8Like +from .api import SpaceView, SpaceViewContentsLike + + +class BarChartView(SpaceView): + """A bar chart view.""" + + def __init__( + self, *, origin: EntityPathLike = "/", contents: SpaceViewContentsLike = "/**", name: Utf8Like | None = None + ): + """ + Construct a blueprint for a new bar chart view. + + Parameters + ---------- + origin + The `EntityPath` to use as the origin of this view. All other entities will be transformed + to be displayed relative to this origin. + contents + The contents of the view. Most commonly specified as a query expression. The individual + sub-expressions must either be newline separate, or provided as a list of strings. + See: [rerun.blueprint.components.QueryExpression][]. + name + The name of the view. + + """ + super().__init__(class_identifier="Bar Chart", origin=origin, contents=contents, name=name) + + +class Spatial2DView(SpaceView): + """A Spatial 2D view.""" + + def __init__( + self, *, origin: EntityPathLike = "/", contents: SpaceViewContentsLike = "/**", name: Utf8Like | None = None + ): + """ + Construct a blueprint for a new spatial 2D view. + + Parameters + ---------- + origin + The `EntityPath` to use as the origin of this view. All other entities will be transformed + to be displayed relative to this origin. + contents + The contents of the view. Most commonly specified as a query expression. The individual + sub-expressions must either be newline separate, or provided as a list of strings. + See: [rerun.blueprint.components.QueryExpression][]. + name + The name of the view. + + """ + super().__init__(class_identifier="2D", origin=origin, contents=contents, name=name) + + +class Spatial3DView(SpaceView): + """A Spatial 3D view.""" + + def __init__( + self, *, origin: EntityPathLike = "/", contents: SpaceViewContentsLike = "/**", name: Utf8Like | None = None + ): + """ + Construct a blueprint for a new spatial 3D view. + + Parameters + ---------- + origin + The `EntityPath` to use as the origin of this view. All other entities will be transformed + to be displayed relative to this origin. + contents + The contents of the view. Most commonly specified as a query expression. The individual + sub-expressions must either be newline separate, or provided as a list of strings. + See: [rerun.blueprint.components.QueryExpression][]. + name + The name of the view. + + """ + super().__init__(class_identifier="3D", origin=origin, contents=contents, name=name) + + +class TensorView(SpaceView): + """A tensor view.""" + + def __init__( + self, *, origin: EntityPathLike = "/", contents: SpaceViewContentsLike = "/**", name: Utf8Like | None = None + ): + """ + Construct a blueprint for a new tensor view. + + Parameters + ---------- + origin + The `EntityPath` to use as the origin of this view. All other entities will be transformed + to be displayed relative to this origin. + contents + The contents of the view. Most commonly specified as a query expression. The individual + sub-expressions must either be newline separate, or provided as a list of strings. + See: [rerun.blueprint.components.QueryExpression][]. + name + The name of the view. + + """ + super().__init__(class_identifier="Tensor", origin=origin, contents=contents, name=name) + + +class TextDocumentView(SpaceView): + """A text document view.""" + + def __init__( + self, *, origin: EntityPathLike = "/", contents: SpaceViewContentsLike = "/**", name: Utf8Like | None = None + ): + """ + Construct a blueprint for a new text document view. + + Parameters + ---------- + origin + The `EntityPath` to use as the origin of this view. All other entities will be transformed + to be displayed relative to this origin. + contents + The contents of the view. Most commonly specified as a query expression. The individual + sub-expressions must either be newline separate, or provided as a list of strings. + See: [rerun.blueprint.components.QueryExpression][]. + name + The name of the view. + + """ + super().__init__(class_identifier="Text Document", origin=origin, contents=contents, name=name) + + +class TextLogView(SpaceView): + """A text log view.""" + + def __init__( + self, *, origin: EntityPathLike = "/", contents: SpaceViewContentsLike = "/**", name: Utf8Like | None = None + ): + """ + Construct a blueprint for a new text log view. + + Parameters + ---------- + origin + The `EntityPath` to use as the origin of this view. All other entities will be transformed + to be displayed relative to this origin. + contents + The contents of the view. Most commonly specified as a query expression. The individual + sub-expressions must either be newline separate, or provided as a list of strings. + See: [rerun.blueprint.components.QueryExpression][]. + name + The name of the view. + + """ + super().__init__(class_identifier="TextLog", origin=origin, contents=contents, name=name) + + +class TimeSeriesView(SpaceView): + """A time series view.""" + + def __init__( + self, *, origin: EntityPathLike = "/", contents: SpaceViewContentsLike = "/**", name: Utf8Like | None = None + ): + """ + Construct a blueprint for a new time series view. + + Parameters + ---------- + origin + The `EntityPath` to use as the origin of this view. All other entities will be transformed + to be displayed relative to this origin. + contents + The contents of the view. Most commonly specified as a query expression. The individual + sub-expressions must either be newline separate, or provided as a list of strings. + See: [rerun.blueprint.components.QueryExpression][]. + name + The name of the view. + + """ + super().__init__(class_identifier="Time Series", origin=origin, contents=contents, name=name) diff --git a/tests/python/blueprint/main.py b/tests/python/blueprint/main.py index 3d431a2678f5..73723bea1d9c 100644 --- a/tests/python/blueprint/main.py +++ b/tests/python/blueprint/main.py @@ -2,24 +2,33 @@ import rerun as rr from numpy.random import default_rng -from rerun.blueprint import Blueprint, Grid, Horizontal, Spatial2D, Spatial3D, Tabs, Vertical, Viewport -from rerun.blueprint.api import TimePanel +from rerun.blueprint import ( + Blueprint, + Grid, + Horizontal, + Spatial2DView, + Spatial3DView, + Tabs, + TimePanel, + Vertical, + Viewport, +) if __name__ == "__main__": blueprint = Blueprint( Viewport( Vertical( - Spatial3D(origin="/test1"), + Spatial3DView(origin="/test1"), Horizontal( Tabs( - Spatial3D(origin="/test1"), - Spatial2D(origin="/test2"), + Spatial3DView(origin="/test1"), + Spatial2DView(origin="/test2"), ), Grid( - Spatial3D(origin="/test1"), - Spatial2D(origin="/test2"), - Spatial3D(origin="/test1"), - Spatial2D(origin="/test2"), + Spatial3DView(origin="/test1"), + Spatial2DView(origin="/test2"), + Spatial3DView(origin="/test1"), + Spatial2DView(origin="/test2"), grid_columns=3, column_shares=[1, 1, 1], ), From 045923a9f30fdcca909674ffca1f780b5a553ece Mon Sep 17 00:00:00 2001 From: Emil Ernerfeldt Date: Thu, 14 Mar 2024 16:33:00 +0100 Subject: [PATCH 06/50] Rename `.blueprint` extension to `.rbl` (#5506) ### What Three letters is common. You can read it as "Rerun Blueprint Layout" or maybe "Rerun BLuprint". Can be pronounced as "rebel" ### Checklist * [x] I have read and agree to [Contributor Guide](https://github.com/rerun-io/rerun/blob/main/CONTRIBUTING.md) and the [Code of Conduct](https://github.com/rerun-io/rerun/blob/main/CODE_OF_CONDUCT.md) * [x] I've included a screenshot or gif (if applicable) * [x] I have tested the web demo (if applicable): * Using newly built examples: [app.rerun.io](https://app.rerun.io/pr/5506/index.html) * Using examples from latest `main` build: [app.rerun.io](https://app.rerun.io/pr/5506/index.html?manifest_url=https://app.rerun.io/version/main/examples_manifest.json) * Using full set of examples from `nightly` build: [app.rerun.io](https://app.rerun.io/pr/5506/index.html?manifest_url=https://app.rerun.io/version/nightly/examples_manifest.json) * [x] The PR title and labels are set such as to maximize their usefulness for the next release's CHANGELOG * [x] If applicable, add a new check to the [release checklist](https://github.com/rerun-io/rerun/blob/main/tests/python/release_checklist)! - [PR Build Summary](https://build.rerun.io/pr/5506) - [Docs preview](https://rerun.io/preview/d8af706a0b2ee89c43bfd2ccbc2de9779b9b5e14/docs) - [Examples preview](https://rerun.io/preview/d8af706a0b2ee89c43bfd2ccbc2de9779b9b5e14/examples) - [Recent benchmark results](https://build.rerun.io/graphs/crates.html) - [Wasm size tracking](https://build.rerun.io/graphs/sizes.html) --- crates/re_log_encoding/src/decoder/mod.rs | 2 +- crates/re_ui/src/command.rs | 2 +- crates/re_viewer/src/app.rs | 2 +- crates/re_viewer/src/saving.rs | 4 ++-- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/crates/re_log_encoding/src/decoder/mod.rs b/crates/re_log_encoding/src/decoder/mod.rs index 48eb1f42fb44..fc278988e430 100644 --- a/crates/re_log_encoding/src/decoder/mod.rs +++ b/crates/re_log_encoding/src/decoder/mod.rs @@ -22,7 +22,7 @@ pub enum VersionPolicy { /// Return [`DecodeError::IncompatibleRerunVersion`] if the versions aren't compatible. /// - /// We usually use this for tests, and for loading `.blueprint` files. + /// We usually use this for tests, and for loading `.rbl` blueprint files. Error, } diff --git a/crates/re_ui/src/command.rs b/crates/re_ui/src/command.rs index 3e95bbb9f54c..918d875442b1 100644 --- a/crates/re_ui/src/command.rs +++ b/crates/re_ui/src/command.rs @@ -101,7 +101,7 @@ impl UICommand { "Save data for the current loop selection to a Rerun data file (.rrd)", ), - Self::SaveBlueprint => ("Save blueprint…", "Save the current viewer setup as a Rerun blueprint file (.blueprint)"), + Self::SaveBlueprint => ("Save blueprint…", "Save the current viewer setup as a Rerun blueprint file (.rbl)"), Self::Open => ("Open…", "Open any supported files (.rrd, images, meshes, …)"), diff --git a/crates/re_viewer/src/app.rs b/crates/re_viewer/src/app.rs index a4b90289bf5f..1faf301ecbff 100644 --- a/crates/re_viewer/src/app.rs +++ b/crates/re_viewer/src/app.rs @@ -1541,7 +1541,7 @@ fn save_blueprint(app: &mut App, store_context: Option<&StoreContext<'_>>) { let entity_db = store_context.blueprint; let file_name = format!( - "{}.blueprint", + "{}.rbl", crate::saving::sanitize_app_id(&store_context.app_id) ); let title = "Save blueprint"; diff --git a/crates/re_viewer/src/saving.rs b/crates/re_viewer/src/saving.rs index 9788934e2127..1cd59e2dfeb4 100644 --- a/crates/re_viewer/src/saving.rs +++ b/crates/re_viewer/src/saving.rs @@ -37,7 +37,7 @@ pub fn default_blueprint_path(app_id: &ApplicationId) -> anyhow::Result MAX_PATH { anyhow::bail!( @@ -56,7 +56,7 @@ pub fn default_blueprint_path(app_id: &ApplicationId) -> anyhow::Result Date: Thu, 14 Mar 2024 11:41:56 -0400 Subject: [PATCH 07/50] Add support for active_tab (#5499) ### What Referring to an object created in the same constructor is somewhat awkward. Forcing users to create the object out-of-line so they can assign it to a variable and then refer to it is just a pain. Specifying a name or index seems like a convenient middle ground. Example ```python Tabs( BarChartView(name="Bar Chart", origin="/bar_chart", contents=["/bar_chart/**"]), TimeSeriesView(name="Curves", origin="/curves", contents=["/curves/**"]), TimeSeriesView(name="Trig", origin="/trig", contents=["/trig/**"]), TimeSeriesView(name="Classification", origin="/classification", contents=["/classification/**"]), active_tab="Curves", ), ``` ### Checklist * [x] I have read and agree to [Contributor Guide](https://github.com/rerun-io/rerun/blob/main/CONTRIBUTING.md) and the [Code of Conduct](https://github.com/rerun-io/rerun/blob/main/CODE_OF_CONDUCT.md) * [x] I've included a screenshot or gif (if applicable) * [x] I have tested the web demo (if applicable): * Using newly built examples: [app.rerun.io](https://app.rerun.io/pr/5499/index.html) * Using examples from latest `main` build: [app.rerun.io](https://app.rerun.io/pr/5499/index.html?manifest_url=https://app.rerun.io/version/main/examples_manifest.json) * Using full set of examples from `nightly` build: [app.rerun.io](https://app.rerun.io/pr/5499/index.html?manifest_url=https://app.rerun.io/version/nightly/examples_manifest.json) * [x] The PR title and labels are set such as to maximize their usefulness for the next release's CHANGELOG * [x] If applicable, add a new check to the [release checklist](https://github.com/rerun-io/rerun/blob/main/tests/python/release_checklist)! - [PR Build Summary](https://build.rerun.io/pr/5499) - [Docs preview](https://rerun.io/preview/4c45a10b77cb3dd4794ca2d2ac8267e3d9230606/docs) - [Examples preview](https://rerun.io/preview/4c45a10b77cb3dd4794ca2d2ac8267e3d9230606/examples) - [Recent benchmark results](https://build.rerun.io/graphs/crates.html) - [Wasm size tracking](https://build.rerun.io/graphs/sizes.html) --- rerun_py/rerun_sdk/rerun/blueprint/api.py | 14 +++++++++++++- rerun_py/rerun_sdk/rerun/blueprint/containers.py | 6 ++++-- rerun_py/rerun_sdk/rerun/script_helpers.py | 7 +++++-- 3 files changed, 22 insertions(+), 5 deletions(-) diff --git a/rerun_py/rerun_sdk/rerun/blueprint/api.py b/rerun_py/rerun_sdk/rerun/blueprint/api.py index 6bea25e2a582..ae031e3ded94 100644 --- a/rerun_py/rerun_sdk/rerun/blueprint/api.py +++ b/rerun_py/rerun_sdk/rerun/blueprint/api.py @@ -134,6 +134,7 @@ def __init__( column_shares: Optional[ColumnShareArrayLike] = None, row_shares: Optional[RowShareArrayLike] = None, grid_columns: Optional[int] = None, + active_tab: Optional[int | str] = None, ): """ Construct a new container. @@ -155,6 +156,8 @@ def __init__( This is only applicable to `Vertical` or `Grid` containers. grid_columns The number of columns in the grid. This is only applicable to `Grid` containers. + active_tab + The active tab in the container. This is only applicable to `Tabs` containers. """ self.id = uuid.uuid4() @@ -163,6 +166,7 @@ def __init__( self.column_shares = column_shares self.row_shares = row_shares self.grid_columns = grid_columns + self.active_tab = active_tab def blueprint_path(self) -> str: """ @@ -183,8 +187,15 @@ def to_blueprint(self) -> Blueprint: def _log_to_stream(self, stream: RecordingStream) -> None: """Internal method to convert to an archetype and log to the stream.""" - for sub in self.contents: + active_tab_path = None + + for i, sub in enumerate(self.contents): sub._log_to_stream(stream) + if i == self.active_tab or (isinstance(sub, SpaceView) and sub.name == self.active_tab): + active_tab_path = sub.blueprint_path() + + if self.active_tab is not None and active_tab_path is None: + raise ValueError(f"Active tab '{self.active_tab}' not found in the container contents.") arch = ContainerBlueprint( container_kind=self.kind, @@ -193,6 +204,7 @@ def _log_to_stream(self, stream: RecordingStream) -> None: row_shares=self.row_shares, visible=True, grid_columns=self.grid_columns, + active_tab=active_tab_path, ) stream.log(self.blueprint_path(), arch) # type: ignore[attr-defined] diff --git a/rerun_py/rerun_sdk/rerun/blueprint/containers.py b/rerun_py/rerun_sdk/rerun/blueprint/containers.py index db47f5a1fdba..243201151c37 100644 --- a/rerun_py/rerun_sdk/rerun/blueprint/containers.py +++ b/rerun_py/rerun_sdk/rerun/blueprint/containers.py @@ -84,7 +84,7 @@ def __init__( class Tabs(Container): """A tab container.""" - def __init__(self, *contents: Container | SpaceView): + def __init__(self, *contents: Container | SpaceView, active_tab: Optional[int | str] = None): """ Construct a new tab container. @@ -92,6 +92,8 @@ def __init__(self, *contents: Container | SpaceView): ---------- *contents: All positional arguments are the contents of the container, which may be either other containers or space views. + active_tab: + The index or name of the active tab. """ - super().__init__(*contents, kind=ContainerKind.Tabs) + super().__init__(*contents, kind=ContainerKind.Tabs, active_tab=active_tab) diff --git a/rerun_py/rerun_sdk/rerun/script_helpers.py b/rerun_py/rerun_sdk/rerun/script_helpers.py index d4542a7e9362..86d48e01338d 100644 --- a/rerun_py/rerun_sdk/rerun/script_helpers.py +++ b/rerun_py/rerun_sdk/rerun/script_helpers.py @@ -65,6 +65,7 @@ def script_setup( args: Namespace, application_id: str, recording_id: str | UUID | None = None, + blueprint: rr.blueprint.Blueprint | None = None, ) -> RecordingStream: """ Run common Rerun script setup actions. Connect to the viewer if necessary. @@ -86,6 +87,8 @@ def script_setup( processes to log to the same Rerun instance (and be part of the same recording), you will need to manually assign them all the same recording_id. Any random UUIDv4 will work, or copy the recording id for the parent process. + blueprint : Optional[rr.blueprint.Blueprint] + An optional blueprint to use for the viewer. """ rr.init( @@ -106,11 +109,11 @@ def script_setup( # Send logging data to separate `rerun` process. # You can omit the argument to connect to the default address, # which is `127.0.0.1:9876`. - rec.connect(args.addr) # type: ignore[attr-defined] + rec.connect(args.addr, blueprint=blueprint) # type: ignore[attr-defined] elif args.save is not None: rec.save(args.save) # type: ignore[attr-defined] elif not args.headless: - rec.spawn() # type: ignore[attr-defined] + rec.spawn(blueprint=blueprint) # type: ignore[attr-defined] return rec From 56bb2eaee98741f1a58306323a31d1d114c9b5e4 Mon Sep 17 00:00:00 2001 From: Antoine Beyeler <49431240+abey79@users.noreply.github.com> Date: Thu, 14 Mar 2024 17:32:19 +0100 Subject: [PATCH 08/50] Build CLI for Linux ARM64 (#5503) ### What Add support for building a Linux ARM64 version of the CLI in our build system. - Follow-up to https://github.com/rerun-io/rerun/pull/5489 - Part of #4136 This PR introduces ugly work-around to be cleaned when our pixi deps support linux-aarch64: - https://github.com/rerun-io/rerun/issues/5507 ### Checklist * [x] I have read and agree to [Contributor Guide](https://github.com/rerun-io/rerun/blob/main/CONTRIBUTING.md) and the [Code of Conduct](https://github.com/rerun-io/rerun/blob/main/CODE_OF_CONDUCT.md) * [x] I've included a screenshot or gif (if applicable) * [x] I have tested the web demo (if applicable): * Using newly built examples: [app.rerun.io](https://app.rerun.io/pr/5503/index.html) * Using examples from latest `main` build: [app.rerun.io](https://app.rerun.io/pr/5503/index.html?manifest_url=https://app.rerun.io/version/main/examples_manifest.json) * Using full set of examples from `nightly` build: [app.rerun.io](https://app.rerun.io/pr/5503/index.html?manifest_url=https://app.rerun.io/version/nightly/examples_manifest.json) * [x] The PR title and labels are set such as to maximize their usefulness for the next release's CHANGELOG * [x] If applicable, add a new check to the [release checklist](https://github.com/rerun-io/rerun/blob/main/tests/python/release_checklist)! - [PR Build Summary](https://build.rerun.io/pr/5503) - [Docs preview](https://rerun.io/preview/65c8082ad0c5482bad9167e8620490494f80637e/docs) - [Examples preview](https://rerun.io/preview/65c8082ad0c5482bad9167e8620490494f80637e/examples) - [Recent benchmark results](https://build.rerun.io/graphs/crates.html) - [Wasm size tracking](https://build.rerun.io/graphs/sizes.html) --------- Co-authored-by: Andreas Reich --- .github/workflows/on_push_main.yml | 46 +++++++++++-------- .../reusable_build_and_upload_rerun_c.yml | 1 + .../reusable_build_and_upload_rerun_cli.yml | 39 ++++++++++++---- scripts/ci/sync_release_assets.py | 24 ++++++---- 4 files changed, 74 insertions(+), 36 deletions(-) diff --git a/.github/workflows/on_push_main.yml b/.github/workflows/on_push_main.yml index 101cfaa4935c..9e29139a2863 100644 --- a/.github/workflows/on_push_main.yml +++ b/.github/workflows/on_push_main.yml @@ -162,40 +162,49 @@ jobs: # ----------------------------------------------------------------------------------- # Build rerun-cli (rerun binaries): - build-rerun-cli-and-upload-linux: + build-rerun-cli-and-upload-linux-arm64: + needs: [checks] + name: "Linux-arm64: Build & Upload rerun-cli" + uses: ./.github/workflows/reusable_build_and_upload_rerun_cli.yml + with: + CONCURRENCY: push-linux-arm64-${{ github.ref_name }} + PLATFORM: linux-arm64 + secrets: inherit + + build-rerun-cli-and-upload-linux-x64: needs: [checks] name: "Linux-x64: Build & Upload rerun-cli" uses: ./.github/workflows/reusable_build_and_upload_rerun_cli.yml with: - CONCURRENCY: push-linux-${{ github.ref_name }} - PLATFORM: linux + CONCURRENCY: push-linux-x64-${{ github.ref_name }} + PLATFORM: linux-x64 secrets: inherit - build-rerun-cli-and-upload-macos-intel: + build-rerun-cli-and-upload-macos-x64: needs: [checks] - name: "Mac-Intel: Build & Upload rerun-cli" + name: "Mac-x64: Build & Upload rerun-cli" uses: ./.github/workflows/reusable_build_and_upload_rerun_cli.yml with: - CONCURRENCY: push-macos-intel-${{ github.ref_name }} - PLATFORM: macos-intel + CONCURRENCY: push-macos-x64-${{ github.ref_name }} + PLATFORM: macos-x64 secrets: inherit - build-rerun-cli-and-upload-macos-arm: + build-rerun-cli-and-upload-macos-arm64: needs: [checks] - name: "Mac-Arm: Build & Upload rerun-cli" + name: "Mac-arm64: Build & Upload rerun-cli" uses: ./.github/workflows/reusable_build_and_upload_rerun_cli.yml with: - CONCURRENCY: push-macos-arm-${{ github.ref_name }} - PLATFORM: macos-arm + CONCURRENCY: push-macos-arm64-${{ github.ref_name }} + PLATFORM: macos-arm64 secrets: inherit - build-rerun-cli-and-upload-windows: + build-rerun-cli-and-upload-windows-x64: needs: [checks] name: "Windows-x64: Build & Upload rerun-cli" uses: ./.github/workflows/reusable_build_and_upload_rerun_cli.yml with: - CONCURRENCY: push-windows-${{ github.ref_name }} - PLATFORM: windows + CONCURRENCY: push-windows-x64-${{ github.ref_name }} + PLATFORM: windows-x64 secrets: inherit # ----------------------------------------------------------------------------------- @@ -305,10 +314,11 @@ jobs: build-rerun_c-and-upload-macos-x64, build-rerun_c-and-upload-macos-arm64, build-rerun_c-and-upload-windows-x64, - build-rerun-cli-and-upload-linux, - build-rerun-cli-and-upload-macos-intel, - build-rerun-cli-and-upload-macos-arm, - build-rerun-cli-and-upload-windows, + build-rerun-cli-and-upload-linux-x64, + build-rerun-cli-and-upload-linux-arm64, + build-rerun-cli-and-upload-macos-x64, + build-rerun-cli-and-upload-macos-arm64, + build-rerun-cli-and-upload-windows-x64, bundle-and-upload-rerun_cpp, ] runs-on: "ubuntu-latest" diff --git a/.github/workflows/reusable_build_and_upload_rerun_c.yml b/.github/workflows/reusable_build_and_upload_rerun_c.yml index 28bed0855d01..ffb07202f703 100644 --- a/.github/workflows/reusable_build_and_upload_rerun_c.yml +++ b/.github/workflows/reusable_build_and_upload_rerun_c.yml @@ -39,6 +39,7 @@ on: required: false type: string default: "adhoc" + description: "Concurrency group to use" concurrency: group: ${{ inputs.CONCURRENCY }}-build-rerun_c diff --git a/.github/workflows/reusable_build_and_upload_rerun_cli.yml b/.github/workflows/reusable_build_and_upload_rerun_cli.yml index 3df8a86aeb93..3c73ab51c177 100644 --- a/.github/workflows/reusable_build_and_upload_rerun_cli.yml +++ b/.github/workflows/reusable_build_and_upload_rerun_cli.yml @@ -21,22 +21,25 @@ on: workflow_dispatch: inputs: ADHOC_NAME: - required: true + required: false type: string + default: "" description: "Name of the adhoc build, used for upload directory" PLATFORM: type: choice options: - - linux - - windows - - macos-arm - - macos-intel + - linux-arm64 + - linux-x64 + - windows-x64 + - macos-arm64 + - macos-x64 description: "Platform to build for" required: true CONCURRENCY: required: false type: string default: "adhoc" + description: "Concurrency group to use" concurrency: group: ${{ inputs.CONCURRENCY }}-build-rerun-cli @@ -71,25 +74,31 @@ jobs: shell: bash run: | case "${{ inputs.PLATFORM }}" in - linux) + linux-arm64) + runner="buildjet-8vcpu-ubuntu-2204-arm" + target="aarch64-unknown-linux-gnu" + container="null" + bin_name="rerun" + ;; + linux-x64) runner="ubuntu-latest-16-cores" target="x86_64-unknown-linux-gnu" container="{'image': 'rerunio/ci_docker:0.11.0'}" bin_name="rerun" ;; - windows) + windows-x64) runner="windows-latest-8-cores" target="x86_64-pc-windows-msvc" container="null" bin_name="rerun.exe" ;; - macos-arm) + macos-arm64) runner="macos-latest-large" # See https://github.blog/2023-10-02-introducing-the-new-apple-silicon-powered-m1-macos-larger-runner-for-github-actions/ target="aarch64-apple-darwin" container="null" bin_name="rerun" ;; - macos-intel) + macos-x64) runner="macos-latest-large" # See https://github.blog/2023-10-02-introducing-the-new-apple-silicon-powered-m1-macos-larger-runner-for-github-actions/ target="x86_64-apple-darwin" container="null" @@ -138,16 +147,26 @@ jobs: targets: ${{ needs.set-config.outputs.TARGET }} - uses: prefix-dev/setup-pixi@v0.4.1 + if: ${{ inputs.PLATFORM != 'linux-arm64' }} # TODO(#5507): see below with: pixi-version: v0.13.0 - name: Build web-viewer (release) + if: ${{ inputs.PLATFORM != 'linux-arm64' }} # TODO(#5507): see below shell: bash run: | pixi run cargo run --locked -p re_build_web_viewer -- --release + # TODO(#5507): supress this workaround when pixi dependencies are available on linux-arm64 + - name: Build web-viewer (release, Linux ARM64) + if: ${{ inputs.PLATFORM == 'linux-arm64' }} + shell: bash + run: | + sudo apt-get install binaryen + cargo run --locked -p re_build_web_viewer -- --release + # This does not run in the pixi environment, doing so - # causes it to select the wrong compiler on macos-arm + # causes it to select the wrong compiler on macos-arm64 - name: Build rerun-cli shell: bash env: diff --git a/scripts/ci/sync_release_assets.py b/scripts/ci/sync_release_assets.py index 7cb7dc8cf1f2..d75f262a5d4f 100644 --- a/scripts/ci/sync_release_assets.py +++ b/scripts/ci/sync_release_assets.py @@ -96,19 +96,23 @@ def fetch_binary_assets( rerun_c_blobs = [ ( f"rerun_c-{tag}-x86_64-pc-windows-msvc.lib", - f"commit/{commit_short}/rerun_c/windows/rerun_c.lib", + f"commit/{commit_short}/rerun_c/windows-x64/rerun_c.lib", ), ( f"librerun_c-{tag}-x86_64-unknown-linux-gnu.a", - f"commit/{commit_short}/rerun_c/linux/librerun_c.a", + f"commit/{commit_short}/rerun_c/linux-x64/librerun_c.a", + ), + ( + f"librerun_c-{tag}-aarch64-unknown-linux-gnu.a", + f"commit/{commit_short}/rerun_c/linux-arm64/librerun_c.a", ), ( f"librerun_c-{tag}-aarch64-apple-darwin.a", - f"commit/{commit_short}/rerun_c/macos-arm/librerun_c.a", + f"commit/{commit_short}/rerun_c/macos-arm64/librerun_c.a", ), ( f"librerun_c-{tag}-x86_64-apple-darwin.a", - f"commit/{commit_short}/rerun_c/macos-intel/librerun_c.a", + f"commit/{commit_short}/rerun_c/macos-x64/librerun_c.a", ), ] for name, blob_url in rerun_c_blobs: @@ -139,19 +143,23 @@ def fetch_binary_assets( rerun_cli_blobs = [ ( f"rerun-cli-{tag}-x86_64-pc-windows-msvc.exe", - f"commit/{commit_short}/rerun-cli/windows/rerun.exe", + f"commit/{commit_short}/rerun-cli/windows-x64/rerun.exe", ), ( f"rerun-cli-{tag}-x86_64-unknown-linux-gnu", - f"commit/{commit_short}/rerun-cli/linux/rerun", + f"commit/{commit_short}/rerun-cli/linux-x64/rerun", + ), + ( + f"rerun-cli-{tag}-aarch64-unknown-linux-gnu", + f"commit/{commit_short}/rerun-cli/linux-arm64/rerun", ), ( f"rerun-cli-{tag}-aarch64-apple-darwin", - f"commit/{commit_short}/rerun-cli/macos-arm/rerun", + f"commit/{commit_short}/rerun-cli/macos-arm64/rerun", ), ( f"rerun-cli-{tag}-x86_64-apple-darwin", - f"commit/{commit_short}/rerun-cli/macos-intel/rerun", + f"commit/{commit_short}/rerun-cli/macos-x64/rerun", ), ] for name, blob_url in rerun_cli_blobs: From ded377098c0d8c84ee0afcae2b8739df5f40f508 Mon Sep 17 00:00:00 2001 From: Jeremy Leibs Date: Thu, 14 Mar 2024 15:02:35 -0400 Subject: [PATCH 09/50] Add missing Tabs import to blueprint/__init__.py (#5515) ### What ### Checklist * [x] I have read and agree to [Contributor Guide](https://github.com/rerun-io/rerun/blob/main/CONTRIBUTING.md) and the [Code of Conduct](https://github.com/rerun-io/rerun/blob/main/CODE_OF_CONDUCT.md) * [x] I've included a screenshot or gif (if applicable) * [x] I have tested the web demo (if applicable): * Using newly built examples: [app.rerun.io](https://app.rerun.io/pr/{{pr.number}}/index.html) * Using examples from latest `main` build: [app.rerun.io](https://app.rerun.io/pr/{{pr.number}}/index.html?manifest_url=https://app.rerun.io/version/main/examples_manifest.json) * Using full set of examples from `nightly` build: [app.rerun.io](https://app.rerun.io/pr/{{pr.number}}/index.html?manifest_url=https://app.rerun.io/version/nightly/examples_manifest.json) * [x] The PR title and labels are set such as to maximize their usefulness for the next release's CHANGELOG * [x] If applicable, add a new check to the [release checklist](https://github.com/rerun-io/rerun/blob/main/tests/python/release_checklist)! - [PR Build Summary](https://build.rerun.io/pr/{{ pr.number }}) - [Docs preview](https://rerun.io/preview/{{ pr.commit }}/docs) - [Examples preview](https://rerun.io/preview/{{ pr.commit }}/examples) - [Recent benchmark results](https://build.rerun.io/graphs/crates.html) - [Wasm size tracking](https://build.rerun.io/graphs/sizes.html) --- rerun_py/rerun_sdk/rerun/blueprint/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rerun_py/rerun_sdk/rerun/blueprint/__init__.py b/rerun_py/rerun_sdk/rerun/blueprint/__init__.py index 84a4b7063359..0924e508e31a 100644 --- a/rerun_py/rerun_sdk/rerun/blueprint/__init__.py +++ b/rerun_py/rerun_sdk/rerun/blueprint/__init__.py @@ -32,7 +32,7 @@ TimePanel, Viewport, ) -from .containers import Grid, Horizontal, Vertical +from .containers import Grid, Horizontal, Tabs, Vertical from .space_views import ( BarChartView, Spatial2DView, From 8fad2caac682a100cd03b7febe415b7191f69db0 Mon Sep 17 00:00:00 2001 From: Andreas Reich Date: Fri, 15 Mar 2024 08:40:35 +0100 Subject: [PATCH 10/50] Use blueprint in arkit_scenes demo, leveraging the viewer's ability to re-project 3D->2D (#5510) ### What * Part of #3412 Removes a lot of code from the arkit demo and makes it look a little bit nicer (beyond the 2d reprojections looking broken before!): * two tabs for 2D, one with depth one with rgb * named space views ![image](https://github.com/rerun-io/rerun/assets/1220815/eb7616da-ed6f-45bc-93ca-9453fdf5be17) ### Checklist * [x] I have read and agree to [Contributor Guide](https://github.com/rerun-io/rerun/blob/main/CONTRIBUTING.md) and the [Code of Conduct](https://github.com/rerun-io/rerun/blob/main/CODE_OF_CONDUCT.md) * [x] I've included a screenshot or gif (if applicable) * [x] I have tested the web demo (if applicable): * Using newly built examples: [app.rerun.io](https://app.rerun.io/pr/5510/index.html) * Using examples from latest `main` build: [app.rerun.io](https://app.rerun.io/pr/5510/index.html?manifest_url=https://app.rerun.io/version/main/examples_manifest.json) * Using full set of examples from `nightly` build: [app.rerun.io](https://app.rerun.io/pr/5510/index.html?manifest_url=https://app.rerun.io/version/nightly/examples_manifest.json) * [x] The PR title and labels are set such as to maximize their usefulness for the next release's CHANGELOG * [x] If applicable, add a new check to the [release checklist](https://github.com/rerun-io/rerun/blob/main/tests/python/release_checklist)! - [PR Build Summary](https://build.rerun.io/pr/5510) - [Docs preview](https://rerun.io/preview/f2544987580d94f0d912eeaa224a98d46745f2a4/docs) - [Examples preview](https://rerun.io/preview/f2544987580d94f0d912eeaa224a98d46745f2a4/examples) - [Recent benchmark results](https://build.rerun.io/graphs/crates.html) - [Wasm size tracking](https://build.rerun.io/graphs/sizes.html) --- examples/python/arkit_scenes/main.py | 233 +++--------------- pixi.toml | 3 +- .../rerun_sdk/rerun/blueprint/.gitattributes | 11 - rerun_py/rerun_sdk/rerun/script_helpers.py | 4 +- .../tests/unit/test_container_blueprint.py | 4 +- 5 files changed, 47 insertions(+), 208 deletions(-) delete mode 100644 rerun_py/rerun_sdk/rerun/blueprint/.gitattributes diff --git a/examples/python/arkit_scenes/main.py b/examples/python/arkit_scenes/main.py index 6d166b30ed5d..8f0b0046591e 100755 --- a/examples/python/arkit_scenes/main.py +++ b/examples/python/arkit_scenes/main.py @@ -8,10 +8,9 @@ from typing import Any, Tuple import cv2 -import matplotlib.pyplot as plt import numpy as np -import numpy.typing as npt import rerun as rr # pip install rerun-sdk +import rerun.blueprint as rbl import trimesh from download_dataset import AVAILABLE_RECORDINGS, ensure_recording_available from scipy.spatial.transform import Rotation as R @@ -84,6 +83,9 @@ bounding box is logged as a separate entity to the common [world/annotations](recording://world/annotations) parent. """.strip() +lowres_posed_entity_path = "world/camera_lowres" +highres_entity_path = "world/camera_highres" + def load_json(js_path: Path) -> dict[str, Any]: with open(js_path) as f: @@ -91,29 +93,18 @@ def load_json(js_path: Path) -> dict[str, Any]: return json_data -def log_annotated_bboxes(annotation: dict[str, Any]) -> tuple[npt.NDArray[np.float64], list[str], list[Color]]: +def log_annotated_bboxes(annotation: dict[str, Any]) -> None: """ Logs annotated oriented bounding boxes to Rerun. - We currently calculate and return the 3D bounding boxes keypoints, labels, and colors for each object to log them in - each camera frame TODO(#3412): once resolved this can be removed. - annotation json file | |-- label: object name of bounding box | |-- axesLengths[x, y, z]: size of the origin bounding-box before transforming | |-- centroid[]: the translation matrix (1,3) of bounding-box | |-- normalizedAxes[]: the rotation matrix (3,3) of bounding-box """ - bbox_list = [] - bbox_labels = [] - num_objects = len(annotation["data"]) - # Generate a color per object that can be reused across both 3D obb and their 2D projections - # TODO(#3412, #1728): once resolved this can be removed - color_positions = np.linspace(0, 1, num_objects) - colormap = plt.colormaps["viridis"] - colors = [colormap(pos) for pos in color_positions] - - for i, label_info in enumerate(annotation["data"]): + + for label_info in annotation["data"]: uid = label_info["uid"] label = label_info["label"] @@ -130,184 +121,25 @@ def log_annotated_bboxes(annotation: dict[str, Any]) -> tuple[npt.NDArray[np.flo centers=centroid, rotations=rr.Quaternion(xyzw=rot.as_quat()), labels=label, - colors=colors[i], ), timeless=True, ) - box3d = compute_box_3d(half_size, centroid, rotation) - bbox_list.append(box3d) - bbox_labels.append(label) - bboxes_3d = np.array(bbox_list) - return bboxes_3d, bbox_labels, colors - - -def compute_box_3d( - half_size: npt.NDArray[np.float64], transform: npt.NDArray[np.float64], rotation: npt.NDArray[np.float64] -) -> npt.NDArray[np.float64]: - """ - Given obb compute 3D keypoints of the box. - - TODO(#3412): once resolved this can be removed - """ - length, height, width = half_size.tolist() - center = np.reshape(transform, (-1, 3)) - center = center.reshape(3) - x_corners = [length, length, -length, -length, length, length, -length, -length] - y_corners = [height, -height, -height, height, height, -height, -height, height] - z_corners = [width, width, width, width, -width, -width, -width, -width] - corners_3d = np.dot(np.transpose(rotation), np.vstack([x_corners, y_corners, z_corners])) - - corners_3d[0, :] += center[0] - corners_3d[1, :] += center[1] - corners_3d[2, :] += center[2] - bbox3d_raw = np.transpose(corners_3d) - return bbox3d_raw - - -def log_line_segments(entity_path: str, bboxes_2d_filtered: npt.NDArray[np.float64], color: Color, label: str) -> None: - """ - Generates line segments for each object's bounding box in 2D. - - Box corner order that we return is of the format below: - 6 -------- 7 - /| /| - 5 -------- 4 . - | | | | - . 2 -------- 3 - |/ |/ - 1 -------- 0 - - TODO(#3412): once resolved this can be removed - - :param bboxes_2d_filtered: - A numpy array of shape (8, 2), representing the filtered 2D keypoints of the 3D bounding boxes. - :return: A numpy array of shape (24, 2), representing the line segments for each object's bounding boxes. - Even and odd indices represent the start and end points of each line segment respectively. - """ - - # Calculate the centroid of the 2D keypoints - valid_points = bboxes_2d_filtered[~np.isnan(bboxes_2d_filtered).any(axis=1)] - - # log centroid and add label so that object label is visible in the 2D view - if valid_points.size > 0: - centroid = valid_points.mean(axis=0) - rr.log(f"{entity_path}/centroid", rr.Points2D(centroid, colors=color, labels=label)) - else: - pass - - segments = [ - # bottom of bbox - [bboxes_2d_filtered[0], bboxes_2d_filtered[1]], - [bboxes_2d_filtered[1], bboxes_2d_filtered[2]], - [bboxes_2d_filtered[2], bboxes_2d_filtered[3]], - [bboxes_2d_filtered[3], bboxes_2d_filtered[0]], - # top of bbox - [bboxes_2d_filtered[4], bboxes_2d_filtered[5]], - [bboxes_2d_filtered[5], bboxes_2d_filtered[6]], - [bboxes_2d_filtered[6], bboxes_2d_filtered[7]], - [bboxes_2d_filtered[7], bboxes_2d_filtered[4]], - # sides of bbox - [bboxes_2d_filtered[0], bboxes_2d_filtered[4]], - [bboxes_2d_filtered[1], bboxes_2d_filtered[5]], - [bboxes_2d_filtered[2], bboxes_2d_filtered[6]], - [bboxes_2d_filtered[3], bboxes_2d_filtered[7]], - ] - - rr.log(entity_path, rr.LineStrips2D(segments, colors=color)) - - -def project_3d_bboxes_to_2d_keypoints( - bboxes_3d: npt.NDArray[np.float64], - camera_from_world: rr.TranslationRotationScale3D, - intrinsic: npt.NDArray[np.float64], - img_width: int, - img_height: int, -) -> npt.NDArray[np.float64]: - """ - Returns 2D keypoints of the 3D bounding box in the camera view. - - TODO(#3412): once resolved this can be removed - Args: - bboxes_3d: (nObjects, 8, 3) containing the 3D bounding box keypoints in world frame. - camera_from_world: Tuple containing the camera translation and rotation_quaternion in world frame. - intrinsic: (3,3) containing the camera intrinsic matrix. - img_width: Width of the image. - img_height: Height of the image. - - Returns - ------- - bboxes_2d_filtered: - A numpy array of shape (nObjects, 8, 2), representing the 2D keypoints of the 3D bounding boxes. That - are within the image frame. - - """ - - translation, rotation_q = camera_from_world.translation, camera_from_world.rotation - # We know we stored the rotation as a quaternion, so extract it again. - # TODO(#3467): This shouldn't directly access rotation.inner - rotation = R.from_quat(rotation_q.inner) # type: ignore[union-attr] - - # Transform 3D keypoints from world to camera frame - world_to_camera_rotation = rotation.as_matrix() - world_to_camera_translation = np.array(translation).reshape(3, 1) - # Tile translation to match bounding box shape, (nObjects, 1, 3) - world_to_camera_translation_tiled = np.tile(world_to_camera_translation.T, (bboxes_3d.shape[0], 1, 1)) - # Transform 3D bounding box keypoints from world to camera frame to filter out points behind the camera - camera_points = ( - np.einsum("ij,afj->afi", world_to_camera_rotation, bboxes_3d[..., :3]) + world_to_camera_translation_tiled - ) - # Check if the points are in front of the camera - depth_mask = camera_points[..., 2] > 0 - # convert to transformation matrix shape of (3, 4) - world_to_camera = np.hstack([world_to_camera_rotation, world_to_camera_translation]) - transformation_matrix = intrinsic @ world_to_camera - # add batch dimension to match bounding box shape, (nObjects, 3, 4) - transformation_matrix = np.tile(transformation_matrix, (bboxes_3d.shape[0], 1, 1)) - # bboxes_3d: [nObjects, 8, 3] -> [nObjects, 8, 4] to allow for batch projection - bboxes_3d = np.concatenate([bboxes_3d, np.ones((bboxes_3d.shape[0], bboxes_3d.shape[1], 1))], axis=-1) - # Apply depth mask to filter out points behind the camera - bboxes_3d[~depth_mask] = np.nan - # batch projection of points using einsum - bboxes_2d = np.einsum("vab,fnb->vfna", transformation_matrix, bboxes_3d) - bboxes_2d = bboxes_2d[..., :2] / bboxes_2d[..., 2:] - # nViews irrelevant, squeeze out - bboxes_2d = bboxes_2d[0] - - # Filter out keypoints that are not within the frame - mask_x = (bboxes_2d[:, :, 0] >= 0) & (bboxes_2d[:, :, 0] < img_width) - mask_y = (bboxes_2d[:, :, 1] >= 0) & (bboxes_2d[:, :, 1] < img_height) - mask = mask_x & mask_y - bboxes_2d_filtered = np.where(mask[..., np.newaxis], bboxes_2d, np.nan) - - return bboxes_2d_filtered - def log_camera( intri_path: Path, frame_id: str, poses_from_traj: dict[str, rr.TranslationRotationScale3D], entity_id: str, - bboxes: npt.NDArray[np.float64], - bbox_labels: list[str], - colors: list[Color], ) -> None: """Logs camera transform and 3D bounding boxes in the image frame.""" w, h, fx, fy, cx, cy = np.loadtxt(intri_path) intrinsic = np.array([[fx, 0, cx], [0, fy, cy], [0, 0, 1]]) camera_from_world = poses_from_traj[frame_id] - # TODO(#3412): once resolved this can be removed - # Project 3D bounding boxes into 2D image - bboxes_2d = project_3d_bboxes_to_2d_keypoints(bboxes, camera_from_world, intrinsic, img_width=w, img_height=h) - # clear previous centroid labels rr.log(f"{entity_id}/bbox-2D-segments", rr.Clear(recursive=True)) - # Log line segments for each bounding box in the image - for i, (label, bbox_2d) in enumerate(zip(bbox_labels, bboxes_2d)): - log_line_segments(f"{entity_id}/bbox-2D-segments/{label}", bbox_2d.reshape(-1, 2), colors[i], label) - # pathlib makes it easy to get the parent, but log methods requires a string rr.log(entity_id, rr.Transform3D(transform=camera_from_world)) rr.log(entity_id, rr.Pinhole(image_from_camera=intrinsic, resolution=[w, h])) @@ -430,10 +262,7 @@ def log_arkit(recording_path: Path, include_highres: bool) -> None: # load the obb annotations and log them in the world frame bbox_annotations_path = recording_path / f"{recording_path.stem}_3dod_annotation.json" annotation = load_json(bbox_annotations_path) - bboxes_3d, bbox_labels, colors_list = log_annotated_bboxes(annotation) - - lowres_posed_entity_id = "world/camera_lowres" - highres_entity_id = "world/camera_highres" + log_annotated_bboxes(annotation) print("Processing frames…") for frame_timestamp in tqdm(lowres_frame_ids): @@ -453,14 +282,11 @@ def log_arkit(recording_path: Path, include_highres: bool) -> None: lowres_intri_path, frame_timestamp, camera_from_world_dict, - lowres_posed_entity_id, - bboxes_3d, - bbox_labels, - colors_list, + lowres_posed_entity_path, ) - rr.log(f"{lowres_posed_entity_id}/rgb", rr.Image(rgb).compress(jpeg_quality=95)) - rr.log(f"{lowres_posed_entity_id}/depth", rr.DepthImage(depth, meter=1000)) + rr.log(f"{lowres_posed_entity_path}/rgb", rr.Image(rgb).compress(jpeg_quality=95)) + rr.log(f"{lowres_posed_entity_path}/depth", rr.DepthImage(depth, meter=1000)) # log the high res camera if high_res_exists: @@ -472,10 +298,7 @@ def log_arkit(recording_path: Path, include_highres: bool) -> None: highres_intri_path, closest_lowres_frame_id, camera_from_world_dict, - highres_entity_id, - bboxes_3d, - bbox_labels, - colors_list, + highres_entity_path, ) # load the highres image and depth if they exist @@ -484,8 +307,8 @@ def log_arkit(recording_path: Path, include_highres: bool) -> None: highres_rgb = cv2.cvtColor(highres_bgr, cv2.COLOR_BGR2RGB) - rr.log(f"{highres_entity_id}/rgb", rr.Image(highres_rgb).compress(jpeg_quality=75)) - rr.log(f"{highres_entity_id}/depth", rr.DepthImage(highres_depth, meter=1000)) + rr.log(f"{highres_entity_path}/rgb", rr.Image(highres_rgb).compress(jpeg_quality=75)) + rr.log(f"{highres_entity_path}/depth", rr.DepthImage(highres_depth, meter=1000)) def main() -> None: @@ -505,7 +328,33 @@ def main() -> None: rr.script_add_args(parser) args = parser.parse_args() - rr.script_setup(args, "rerun_example_arkit_scenes") + primary_camera_entity = highres_entity_path if args.include_highres else lowres_posed_entity_path + + rr.script_setup( + args, + "rerun_example_arkit_scenes", + blueprint=rbl.Horizontal( + rbl.Spatial3DView(name="3D"), + rbl.Vertical( + rbl.Tabs( + # Note that we re-project the annotations into the 2D views: + # For this to work, the origin of the 2D views has to be a pinhole camera, + # this way the viewer knows how to project the 3D annotations into the 2D views. + rbl.Spatial2DView( + name="RGB", + origin=primary_camera_entity, + contents=[f"{primary_camera_entity}/rgb", "/world/annotations/**"], + ), + rbl.Spatial2DView( + name="Depth", + origin=primary_camera_entity, + contents=[f"{primary_camera_entity}/depth", "/world/annotations/**"], + ), + ), + rbl.TextDocumentView(name="Readme"), + ), + ), + ) recording_path = ensure_recording_available(args.video_id, args.include_highres) log_arkit(recording_path, args.include_highres) diff --git a/pixi.toml b/pixi.toml index 27a4b5a6773a..b24f5bf5c0ac 100644 --- a/pixi.toml +++ b/pixi.toml @@ -77,13 +77,14 @@ lint-rs-all = "cargo fmt --check" lint-py-fmt-check = "ruff format --check --config rerun_py/pyproject.toml" lint-py-blackdoc = "blackdoc --check" lint-py-mypy = "mypy --install-types --non-interactive --no-warn-unused-ignore" -lint-py-ruff = "ruff check --config rerun_py/pyproject.toml" +lint-py-ruff = "ruff format --check --config rerun_py/pyproject.toml" lint-taplo = "taplo fmt --check --diff" lint-typos = "typos" misc-fmt = "prettier --write '**/*.{yml,yaml,js,css,html}'" misc-fmt-check = "prettier --check '**/*.{yml,yaml,js,css,html}'" toml-fmt = "taplo fmt" +ruff-fmt = "ruff format --config rerun_py/pyproject.toml ." ruff-fix = "ruff --fix --config rerun_py/pyproject.toml ." py-build = "maturin develop --manifest-path rerun_py/Cargo.toml --extras=tests" diff --git a/rerun_py/rerun_sdk/rerun/blueprint/.gitattributes b/rerun_py/rerun_sdk/rerun/blueprint/.gitattributes deleted file mode 100644 index 988541d69fd9..000000000000 --- a/rerun_py/rerun_sdk/rerun/blueprint/.gitattributes +++ /dev/null @@ -1,11 +0,0 @@ -# DO NOT EDIT! This file is generated by crates/re_types_builder/src/lib.rs - -.gitattributes linguist-generated=true -__init__.py linguist-generated=true -auto_space_views.py linguist-generated=true -entity_properties_component.py linguist-generated=true -panel_view.py linguist-generated=true -query_expressions.py linguist-generated=true -space_view_component.py linguist-generated=true -space_view_maximized.py linguist-generated=true -viewport_layout.py linguist-generated=true diff --git a/rerun_py/rerun_sdk/rerun/script_helpers.py b/rerun_py/rerun_sdk/rerun/script_helpers.py index 86d48e01338d..666ac742a392 100644 --- a/rerun_py/rerun_sdk/rerun/script_helpers.py +++ b/rerun_py/rerun_sdk/rerun/script_helpers.py @@ -65,7 +65,7 @@ def script_setup( args: Namespace, application_id: str, recording_id: str | UUID | None = None, - blueprint: rr.blueprint.Blueprint | None = None, + blueprint: rr.blueprint.BlueprintLike | None = None, ) -> RecordingStream: """ Run common Rerun script setup actions. Connect to the viewer if necessary. @@ -87,7 +87,7 @@ def script_setup( processes to log to the same Rerun instance (and be part of the same recording), you will need to manually assign them all the same recording_id. Any random UUIDv4 will work, or copy the recording id for the parent process. - blueprint : Optional[rr.blueprint.Blueprint] + blueprint : Optional[rr.blueprint.BlueprintLike] An optional blueprint to use for the viewer. """ diff --git a/rerun_py/tests/unit/test_container_blueprint.py b/rerun_py/tests/unit/test_container_blueprint.py index ad5739c67799..a16c762bc13a 100644 --- a/rerun_py/tests/unit/test_container_blueprint.py +++ b/rerun_py/tests/unit/test_container_blueprint.py @@ -1,7 +1,7 @@ from __future__ import annotations import itertools -from typing import Optional, cast +from typing import Any, Optional, Sequence, cast from rerun.blueprint.archetypes.container_blueprint import ContainerBlueprint from rerun.blueprint.components.active_tab import ActiveTab, ActiveTabBatch @@ -30,7 +30,7 @@ def test_container_blueprint() -> None: "my container", ] - contents_arrays = [ + contents_arrays: Sequence[Any] = [ None, [], ["space_view/1234", "container/5678"], From 33c53da38c7a6c220a6bb5e17d97bcb51b040c19 Mon Sep 17 00:00:00 2001 From: Antoine Beyeler <49431240+abey79@users.noreply.github.com> Date: Fri, 15 Mar 2024 09:33:40 +0100 Subject: [PATCH 11/50] Add `workflow_dispatch` to reusable_build_and_upload_wheels.yml (#5522) ### What I need that to test https://github.com/rerun-io/rerun/pull/5511 ### Checklist * [x] I have read and agree to [Contributor Guide](https://github.com/rerun-io/rerun/blob/main/CONTRIBUTING.md) and the [Code of Conduct](https://github.com/rerun-io/rerun/blob/main/CODE_OF_CONDUCT.md) * [x] I've included a screenshot or gif (if applicable) * [x] I have tested the web demo (if applicable): * Using newly built examples: [app.rerun.io](https://app.rerun.io/pr/{{pr.number}}/index.html) * Using examples from latest `main` build: [app.rerun.io](https://app.rerun.io/pr/{{pr.number}}/index.html?manifest_url=https://app.rerun.io/version/main/examples_manifest.json) * Using full set of examples from `nightly` build: [app.rerun.io](https://app.rerun.io/pr/{{pr.number}}/index.html?manifest_url=https://app.rerun.io/version/nightly/examples_manifest.json) * [x] The PR title and labels are set such as to maximize their usefulness for the next release's CHANGELOG * [x] If applicable, add a new check to the [release checklist](https://github.com/rerun-io/rerun/blob/main/tests/python/release_checklist)! - [PR Build Summary](https://build.rerun.io/pr/{{ pr.number }}) - [Docs preview](https://rerun.io/preview/{{ pr.commit }}/docs) - [Examples preview](https://rerun.io/preview/{{ pr.commit }}/examples) - [Recent benchmark results](https://build.rerun.io/graphs/crates.html) - [Wasm size tracking](https://build.rerun.io/graphs/sizes.html) --- .../reusable_build_and_upload_wheels.yml | 35 +++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/.github/workflows/reusable_build_and_upload_wheels.yml b/.github/workflows/reusable_build_and_upload_wheels.yml index 78f54e6a3438..137e39c9895c 100644 --- a/.github/workflows/reusable_build_and_upload_wheels.yml +++ b/.github/workflows/reusable_build_and_upload_wheels.yml @@ -22,6 +22,41 @@ on: type: string default: "" + workflow_dispatch: + inputs: + PLATFORM: + type: choice + options: + - linux-arm64 + - linux-x64 + - windows-x64 + - macos-arm64 + - macos-x64 + description: "Platform to build for" + required: true + MODE: + type: choice + required: false + options: + - pypi + - pr + description: "The build mode (`pypi` includes the web viewer, `pr` does not)" + CONCURRENCY: + required: false + type: string + default: "adhoc" + description: "Concurrency group to use" + WHEEL_ARTIFACT_NAME: + required: false + type: string + default: "" + description: "If set, will be saved under that name in the workflow artifacts" + RELEASE_COMMIT: + required: false + type: string + default: "" + description: "Release commit" + concurrency: group: ${{ inputs.CONCURRENCY }}-build-wheels cancel-in-progress: true From a79520e2b3cb5b3f6a1b39aacb414320d5005c0e Mon Sep 17 00:00:00 2001 From: Emil Ernerfeldt Date: Fri, 15 Mar 2024 10:24:20 +0100 Subject: [PATCH 12/50] Support loading `.bpl` blueprint files (#5513) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ### What * Part of https://github.com/rerun-io/rerun/issues/5294 This implements loading of blueprint files (.rbl) on native and on web, using either drag-and-drop of the `Open…` command. One shortcoming of the approach in this PR is documented here: * https://github.com/rerun-io/rerun/issues/5514 ### Checklist * [x] I have read and agree to [Contributor Guide](https://github.com/rerun-io/rerun/blob/main/CONTRIBUTING.md) and the [Code of Conduct](https://github.com/rerun-io/rerun/blob/main/CODE_OF_CONDUCT.md) * [x] I've included a screenshot or gif (if applicable) * [x] I have tested the web demo (if applicable): * Using newly built examples: [app.rerun.io](https://app.rerun.io/pr/5513/index.html) * Using examples from latest `main` build: [app.rerun.io](https://app.rerun.io/pr/5513/index.html?manifest_url=https://app.rerun.io/version/main/examples_manifest.json) * Using full set of examples from `nightly` build: [app.rerun.io](https://app.rerun.io/pr/5513/index.html?manifest_url=https://app.rerun.io/version/nightly/examples_manifest.json) * [x] The PR title and labels are set such as to maximize their usefulness for the next release's CHANGELOG * [x] If applicable, add a new check to the [release checklist](https://github.com/rerun-io/rerun/blob/main/tests/python/release_checklist)! - [PR Build Summary](https://build.rerun.io/pr/5513) - [Docs preview](https://rerun.io/preview/9b3e7d9aed9113d340516caed9d87897c8ae8abb/docs) - [Examples preview](https://rerun.io/preview/9b3e7d9aed9113d340516caed9d87897c8ae8abb/examples) - [Recent benchmark results](https://build.rerun.io/graphs/crates.html) - [Wasm size tracking](https://build.rerun.io/graphs/sizes.html) --- .../src/data_loader/loader_rrd.rs | 6 +- crates/re_data_source/src/data_source.rs | 18 +++ crates/re_data_source/src/lib.rs | 13 +- crates/re_data_source/src/load_file.rs | 4 +- crates/re_entity_db/src/entity_db.rs | 9 +- crates/re_log_types/src/lib.rs | 11 ++ crates/re_viewer/src/app.rs | 140 +++++++++++------- crates/re_viewer/src/app_state.rs | 2 +- crates/re_viewer/src/store_hub.rs | 49 ++++-- crates/re_viewport/src/container.rs | 1 + 10 files changed, 172 insertions(+), 81 deletions(-) diff --git a/crates/re_data_source/src/data_loader/loader_rrd.rs b/crates/re_data_source/src/data_loader/loader_rrd.rs index 78b90bc10d66..a6f89c7dce3f 100644 --- a/crates/re_data_source/src/data_loader/loader_rrd.rs +++ b/crates/re_data_source/src/data_loader/loader_rrd.rs @@ -24,7 +24,8 @@ impl crate::DataLoader for RrdLoader { re_tracing::profile_function!(filepath.display().to_string()); let extension = crate::extension(&filepath); - if extension != "rrd" { + if !matches!(extension.as_str(), "rbl" | "rrd") { + // NOTE: blueprints and recordings has the same file format return Err(crate::DataLoaderError::Incompatible(filepath.clone())); } @@ -66,7 +67,8 @@ impl crate::DataLoader for RrdLoader { re_tracing::profile_function!(filepath.display().to_string()); let extension = crate::extension(&filepath); - if extension != "rrd" { + if !matches!(extension.as_str(), "rbl" | "rrd") { + // NOTE: blueprints and recordings has the same file format return Err(crate::DataLoaderError::Incompatible(filepath)); } diff --git a/crates/re_data_source/src/data_source.rs b/crates/re_data_source/src/data_source.rs index b8a334119ec1..d2728bde1f42 100644 --- a/crates/re_data_source/src/data_source.rs +++ b/crates/re_data_source/src/data_source.rs @@ -108,6 +108,24 @@ impl DataSource { } } + pub fn file_name(&self) -> Option { + match self { + DataSource::RrdHttpUrl(url) => url.split('/').last().map(|r| r.to_owned()), + #[cfg(not(target_arch = "wasm32"))] + DataSource::FilePath(_, path) => { + path.file_name().map(|s| s.to_string_lossy().to_string()) + } + DataSource::FileContents(_, file_contents) => Some(file_contents.name.clone()), + DataSource::WebSocketAddr(_) => None, + #[cfg(not(target_arch = "wasm32"))] + DataSource::Stdin => None, + } + } + + pub fn is_blueprint(&self) -> Option { + self.file_name().map(|name| name.ends_with(".rbl")) + } + /// Stream the data from the given data source. /// /// Will do minimal checks (e.g. that the file exists), for synchronous errors, diff --git a/crates/re_data_source/src/lib.rs b/crates/re_data_source/src/lib.rs index cfa37dab6875..0caba04b91ff 100644 --- a/crates/re_data_source/src/lib.rs +++ b/crates/re_data_source/src/lib.rs @@ -38,12 +38,21 @@ pub use self::load_file::load_from_path; /// This is what you get when loading a file on Web, or when using drag-n-drop. // // TODO(#4554): drag-n-drop streaming support -#[derive(Clone, Debug)] +#[derive(Clone)] pub struct FileContents { pub name: String, pub bytes: std::sync::Arc<[u8]>, } +impl std::fmt::Debug for FileContents { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + f.debug_struct("FileContents") + .field("name", &self.name) + .field("bytes", &format_args!("{} bytes", self.bytes.len())) + .finish() + } +} + // …given that all feature flags are turned on for the `image` crate. pub const SUPPORTED_IMAGE_EXTENSIONS: &[&str] = &[ "avif", "bmp", "dds", "exr", "farbfeld", "ff", "gif", "hdr", "ico", "jpeg", "jpg", "pam", @@ -55,7 +64,7 @@ pub const SUPPORTED_MESH_EXTENSIONS: &[&str] = &["glb", "gltf", "obj", "stl"]; // TODO(#4532): `.ply` data loader should support 2D point cloud & meshes pub const SUPPORTED_POINT_CLOUD_EXTENSIONS: &[&str] = &["ply"]; -pub const SUPPORTED_RERUN_EXTENSIONS: &[&str] = &["rrd"]; +pub const SUPPORTED_RERUN_EXTENSIONS: &[&str] = &["rbl", "rrd"]; // TODO(#4555): Add catch-all builtin `DataLoader` for text files pub const SUPPORTED_TEXT_EXTENSIONS: &[&str] = &["txt", "md"]; diff --git a/crates/re_data_source/src/load_file.rs b/crates/re_data_source/src/load_file.rs index b49572d8a344..158ec9028365 100644 --- a/crates/re_data_source/src/load_file.rs +++ b/crates/re_data_source/src/load_file.rs @@ -34,7 +34,7 @@ pub fn load_from_path( re_log::info!("Loading {path:?}…"); - let data = load(settings, path, None)?; + let rx = load(settings, path, None)?; // TODO(cmc): should we always unconditionally set store info though? // If we reach this point, then at least one compatible `DataLoader` has been found. @@ -45,7 +45,7 @@ pub fn load_from_path( } } - send(&settings.store_id, data, tx); + send(&settings.store_id, rx, tx); Ok(()) } diff --git a/crates/re_entity_db/src/entity_db.rs b/crates/re_entity_db/src/entity_db.rs index adb947d05d18..f27a2e5d38bf 100644 --- a/crates/re_entity_db/src/entity_db.rs +++ b/crates/re_entity_db/src/entity_db.rs @@ -82,9 +82,6 @@ fn insert_row_with_retries( /// /// NOTE: all mutation is to be done via public functions! pub struct EntityDb { - /// The [`StoreId`] for this log. - store_id: StoreId, - /// Set by whomever created this [`EntityDb`]. pub data_source: Option, @@ -126,7 +123,6 @@ impl EntityDb { ); let query_caches = re_query_cache::Caches::new(&data_store); Self { - store_id: store_id.clone(), data_source: None, set_store_info: None, last_modified_at: web_time::Instant::now(), @@ -193,11 +189,11 @@ impl EntityDb { } pub fn store_kind(&self) -> StoreKind { - self.store_id.kind + self.store_id().kind } pub fn store_id(&self) -> &StoreId { - &self.store_id + self.data_store.id() } pub fn timelines(&self) -> impl ExactSizeIterator { @@ -486,7 +482,6 @@ impl EntityDb { re_tracing::profile_function!(); let Self { - store_id: _, data_source: _, set_store_info: _, last_modified_at: _, diff --git a/crates/re_log_types/src/lib.rs b/crates/re_log_types/src/lib.rs index 0bc8f6a350b5..b1950ce26fea 100644 --- a/crates/re_log_types/src/lib.rs +++ b/crates/re_log_types/src/lib.rs @@ -227,6 +227,17 @@ impl LogMsg { Self::ArrowMsg(store_id, _) => store_id, } } + + pub fn set_store_id(&mut self, new_store_id: StoreId) { + match self { + LogMsg::SetStoreInfo(store_info) => { + store_info.info.store_id = new_store_id; + } + LogMsg::ArrowMsg(msg_store_id, _) => { + *msg_store_id = new_store_id; + } + } + } } impl_into_enum!(SetStoreInfo, LogMsg, SetStoreInfo); diff --git a/crates/re_viewer/src/app.rs b/crates/re_viewer/src/app.rs index 1faf301ecbff..7f96af6d2380 100644 --- a/crates/re_viewer/src/app.rs +++ b/crates/re_viewer/src/app.rs @@ -1,3 +1,5 @@ +use itertools::Itertools as _; + use re_data_source::{DataSource, FileContents}; use re_entity_db::entity_db::EntityDb; use re_log_types::{FileSource, LogMsg, StoreKind}; @@ -366,7 +368,7 @@ impl App { SystemCommand::LoadStoreDb(entity_db) => { let store_id = entity_db.store_id().clone(); - store_hub.insert_recording(entity_db); + store_hub.insert_entity_db(entity_db); store_hub.set_recording_id(store_id); } @@ -443,18 +445,24 @@ impl App { ) { match cmd { UICommand::SaveRecording => { - save_recording(self, store_context, None); + if let Err(err) = save_recording(self, store_context, None) { + re_log::error!("Failed to save recording: {err}"); + } } UICommand::SaveRecordingSelection => { - save_recording( + if let Err(err) = save_recording( self, store_context, self.state.loop_selection(store_context), - ); + ) { + re_log::error!("Failed to save recording: {err}"); + } } UICommand::SaveBlueprint => { - save_blueprint(self, store_context); + if let Err(err) = save_blueprint(self, store_context) { + re_log::error!("Failed to save blueprint: {err}"); + } } #[cfg(not(target_arch = "wasm32"))] @@ -934,7 +942,39 @@ impl App { if let Some(err) = err { re_log::warn!("Data source {} has left unexpectedly: {err}", msg.source); } else { - re_log::debug!("Data source {} has left", msg.source); + re_log::debug!("Data source {} has finished", msg.source); + + // This could be the signal that we finished loading a blueprint. + // In that case, we want to make it the default. + // We wait with activaing blueprints until they are fully loaded, + // so that we don't run heuristics on half-loaded blueprints. + + let blueprints = store_hub + .entity_dbs_from_channel_source(&channel_source) + .filter_map(|entity_db| { + if let Some(store_info) = entity_db.store_info() { + match store_info.store_id.kind { + StoreKind::Recording => { + // Recordings become active as soon as we start streaming them. + } + StoreKind::Blueprint => { + return Some(store_info.clone()); + } + } + } + None + }) + .collect_vec(); + + for re_log_types::StoreInfo { + store_id, + application_id, + .. + } in blueprints + { + re_log::debug!("Activating newly loaded blueprint"); + store_hub.set_blueprint_for_app_id(store_id, application_id); + } } continue; } @@ -942,6 +982,11 @@ impl App { let store_id = msg.store_id(); + if store_hub.is_active_blueprint(store_id) { + // TODO(#5514): handle loading of active blueprints. + re_log::warn_once!("Loading a blueprint {store_id} that is active. See https://github.com/rerun-io/rerun/issues/5514 for details."); + } + let entity_db = store_hub.entity_db_mut(store_id); if entity_db.data_source.is_none() { @@ -952,8 +997,8 @@ impl App { re_log::error_once!("Failed to add incoming msg: {err}"); }; - // Set the recording-id after potentially creating the store in the - // hub. This ordering is important because the `StoreHub` internally + // Set the recording-id after potentially creating the store in the hub. + // This ordering is important because the `StoreHub` internally // updates the app-id when changing the recording. if let LogMsg::SetStoreInfo(msg) = &msg { match msg.info.store_id.kind { @@ -961,19 +1006,18 @@ impl App { re_log::debug!("Opening a new recording: {:?}", msg.info); store_hub.set_recording_id(store_id.clone()); } - StoreKind::Blueprint => { - re_log::debug!("Opening a new blueprint: {:?}", msg.info); - store_hub.set_blueprint_for_app_id( - store_id.clone(), - msg.info.application_id.clone(), - ); + // We wait with activaing blueprints until they are fully loaded, + // so that we don't run heuristics on half-loaded blueprints. + // TODO(#5297): heed special "end-of-blueprint" message to activate blueprint. + // Otherwise on a mixed connection (SDK sending both blueprint and recording) + // the blueprint won't be activated until the whole _recording_ has finished loading. } } } // Do analytics after ingesting the new message, - // because thats when the `entity_db.store_info` is set, + // because that's when the `entity_db.store_info` is set, // which we use in the analytics call. let entity_db = store_hub.entity_db_mut(store_id); let is_new_store = matches!(&msg, LogMsg::SetStoreInfo(_msg)); @@ -1508,11 +1552,10 @@ fn save_recording( app: &mut App, store_context: Option<&StoreContext<'_>>, loop_selection: Option<(re_entity_db::Timeline, re_log_types::TimeRangeF)>, -) { +) -> anyhow::Result<()> { let Some(entity_db) = store_context.as_ref().and_then(|view| view.recording) else { // NOTE: Can only happen if saving through the command palette. - re_log::error!("No recording data to save"); - return; + anyhow::bail!("No recording data to save"); }; let file_name = "data.rrd"; @@ -1523,29 +1566,36 @@ fn save_recording( "Save recording" }; - save_entity_db( - app, - file_name.to_owned(), - title.to_owned(), - entity_db, - loop_selection, - ); + save_entity_db(app, file_name.to_owned(), title.to_owned(), || { + entity_db.to_messages(loop_selection) + }) } -fn save_blueprint(app: &mut App, store_context: Option<&StoreContext<'_>>) { +fn save_blueprint(app: &mut App, store_context: Option<&StoreContext<'_>>) -> anyhow::Result<()> { let Some(store_context) = store_context else { - re_log::error!("No blueprint to save"); - return; + anyhow::bail!("No blueprint to save"); }; - let entity_db = store_context.blueprint; + re_tracing::profile_function!(); + + // We change the recording id to a new random one, + // otherwise when saving and loading a blueprint file, we can end up + // in a situation where the store_id we're loading is the same as the currently active one, + // which mean they will merge in a strange way. + // This is also related to https://github.com/rerun-io/rerun/issues/5295 + let new_store_id = re_log_types::StoreId::random(StoreKind::Blueprint); + let mut messages = store_context.blueprint.to_messages(None)?; + for message in &mut messages { + message.set_store_id(new_store_id.clone()); + } let file_name = format!( "{}.rbl", crate::saving::sanitize_app_id(&store_context.app_id) ); let title = "Save blueprint"; - save_entity_db(app, file_name, title.to_owned(), entity_db, None); + + save_entity_db(app, file_name, title.to_owned(), || Ok(messages)) } #[allow(clippy::needless_pass_by_ref_mut)] // `app` is only used on native @@ -1553,21 +1603,14 @@ fn save_entity_db( #[allow(unused_variables)] app: &mut App, // only used on native file_name: String, title: String, - entity_db: &EntityDb, - loop_selection: Option<(re_log_types::Timeline, re_log_types::TimeRangeF)>, -) { + to_log_messages: impl FnOnce() -> re_log_types::DataTableResult>, +) -> anyhow::Result<()> { re_tracing::profile_function!(); // Web #[cfg(target_arch = "wasm32")] { - let messages = match entity_db.to_messages(loop_selection) { - Ok(messages) => messages, - Err(err) => { - re_log::error!("File saving failed: {err}"); - return; - } - }; + let messages = to_log_messages()?; wasm_bindgen_futures::spawn_local(async move { if let Err(err) = async_save_dialog(&file_name, &title, &messages).await { @@ -1587,22 +1630,15 @@ fn save_entity_db( .save_file() }; if let Some(path) = path { - let messages = match entity_db.to_messages(loop_selection) { - Ok(messages) => messages, - Err(err) => { - re_log::error!("File saving failed: {err}"); - return; - } - }; - if let Err(err) = app.background_tasks.spawn_file_saver(move || { + let messages = to_log_messages()?; + app.background_tasks.spawn_file_saver(move || { crate::saving::encode_to_file(&path, messages.iter())?; Ok(path) - }) { - // NOTE: Can only happen if saving through the command palette. - re_log::error!("File saving failed: {err}"); - } + })?; } } + + Ok(()) } #[cfg(target_arch = "wasm32")] diff --git a/crates/re_viewer/src/app_state.rs b/crates/re_viewer/src/app_state.rs index fc94eb3d1cad..4678373d7049 100644 --- a/crates/re_viewer/src/app_state.rs +++ b/crates/re_viewer/src/app_state.rs @@ -431,7 +431,7 @@ impl AppState { re_tracing::profile_function!(); self.recording_configs - .retain(|store_id, _| store_hub.contains_recording(store_id)); + .retain(|store_id, _| store_hub.contains_store(store_id)); } /// Returns the blueprint query that should be used for generating the current diff --git a/crates/re_viewer/src/store_hub.rs b/crates/re_viewer/src/store_hub.rs index 41ff28ecdfd3..93c558fbf02c 100644 --- a/crates/re_viewer/src/store_hub.rs +++ b/crates/re_viewer/src/store_hub.rs @@ -173,14 +173,22 @@ impl StoreHub { /// Change which blueprint is active for a given [`ApplicationId`] #[inline] pub fn set_blueprint_for_app_id(&mut self, blueprint_id: StoreId, app_id: ApplicationId) { - re_log::debug!("Switching blueprint for {app_id:?} to {blueprint_id:?}"); + re_log::debug!("Switching blueprint for {app_id} to {blueprint_id}"); self.blueprint_by_app_id.insert(app_id, blueprint_id); } + /// Is the given blueprint id the active blueprint for any app id? + pub fn is_active_blueprint(&self, blueprint_id: &StoreId) -> bool { + self.blueprint_by_app_id + .values() + .any(|id| id == blueprint_id) + } + /// Clear the current blueprint pub fn clear_current_blueprint(&mut self) { if let Some(app_id) = &self.selected_application_id { if let Some(blueprint_id) = self.blueprint_by_app_id.remove(app_id) { + re_log::debug!("Clearing blueprint for {app_id}: {blueprint_id}"); self.store_bundle.remove(&blueprint_id); } } @@ -193,12 +201,12 @@ impl StoreHub { } } - /// Insert a new recording into the [`StoreHub`]. + /// Insert a new recording or blueprint into the [`StoreHub`]. /// /// Note that the recording is not automatically made active. Use [`StoreHub::set_recording_id`] /// if needed. - pub fn insert_recording(&mut self, entity_db: EntityDb) { - self.store_bundle.insert_recording(entity_db); + pub fn insert_entity_db(&mut self, entity_db: EntityDb) { + self.store_bundle.insert_entity_db(entity_db); } /// Mutable access to a [`EntityDb`] by id @@ -271,9 +279,19 @@ impl StoreHub { .and_then(|id| self.store_bundle.recording(id)) } - /// Check whether the [`StoreHub`] contains the referenced recording - pub fn contains_recording(&self, id: &StoreId) -> bool { - self.store_bundle.contains_recording(id) + /// Check whether the [`StoreHub`] contains the referenced store (recording or blueprint). + pub fn contains_store(&self, id: &StoreId) -> bool { + self.store_bundle.contains_store(id) + } + + pub fn entity_dbs_from_channel_source<'a>( + &'a self, + source: &'a re_smart_channel::SmartChannelSource, + ) -> impl Iterator + 'a { + self.store_bundle + .entity_dbs + .values() + .filter(move |db| db.data_source.as_ref() == Some(source)) } /// Remove any recordings with a network source pointing at this `uri`. @@ -382,7 +400,7 @@ impl StoreHub { // We found the blueprint we were looking for; make it active. // borrow-checker won't let us just call `self.set_blueprint_for_app_id` re_log::debug!( - "Switching blueprint for {app_id:?} to {:?}", + "Switching blueprint for {app_id} to {} loaded from {blueprint_path:?}", store.store_id(), ); self.blueprint_by_app_id @@ -490,9 +508,10 @@ impl StoreBundle { /// Returns either a recording or blueprint [`EntityDb`]. /// One is created if it doesn't already exist. pub fn entity_db_entry(&mut self, id: &StoreId) -> &mut EntityDb { - self.entity_dbs - .entry(id.clone()) - .or_insert_with(|| EntityDb::new(id.clone())) + self.entity_dbs.entry(id.clone()).or_insert_with(|| { + re_log::debug!("Creating new store: {id}"); + EntityDb::new(id.clone()) + }) } /// All loaded [`EntityDb`], both recordings and blueprints, in arbitrary order. @@ -554,8 +573,7 @@ impl StoreBundle { // -- - pub fn contains_recording(&self, id: &StoreId) -> bool { - debug_assert_eq!(id.kind, StoreKind::Recording); + pub fn contains_store(&self, id: &StoreId) -> bool { self.entity_dbs.contains_key(id) } @@ -577,8 +595,7 @@ impl StoreBundle { .or_insert_with(|| EntityDb::new(id.clone())) } - pub fn insert_recording(&mut self, entity_db: EntityDb) { - debug_assert_eq!(entity_db.store_kind(), StoreKind::Recording); + pub fn insert_entity_db(&mut self, entity_db: EntityDb) { self.entity_dbs .insert(entity_db.store_id().clone(), entity_db); } @@ -629,6 +646,8 @@ impl StoreBundle { let mut blueprint_db = EntityDb::new(id.clone()); + re_log::debug!("Creating a new blueprint {id}"); + blueprint_db.set_store_info(re_log_types::SetStoreInfo { row_id: re_log_types::RowId::new(), info: re_log_types::StoreInfo { diff --git a/crates/re_viewport/src/container.rs b/crates/re_viewport/src/container.rs index c463575479bd..dff9e5dd92d3 100644 --- a/crates/re_viewport/src/container.rs +++ b/crates/re_viewport/src/container.rs @@ -1,5 +1,6 @@ use ahash::HashMap; use egui_tiles::TileId; + use re_data_store::LatestAtQuery; use re_entity_db::EntityDb; use re_log::ResultExt; From c8d6edf59bd496b523a5dbf9506d11c6951743a6 Mon Sep 17 00:00:00 2001 From: Andreas Reich Date: Fri, 15 Mar 2024 10:33:29 +0100 Subject: [PATCH 13/50] Allow hiding/showing entity subtrees under shown/hidden parent tree (#5508) ### What * Fixes #5464 * using the design we agreed upon that doesn't use tristate buttons in the blueprint panel * Next step on #5463 * Fixes #5396 * Fixes #3194 The title describes the main effect this has on what Rerun can do compared to the previous release. But the real star of the show is that visible is now a component, not part of `EntityProperties`. @ reviewer: Please take your time and explore the behavior both on blueprint panel and selection panel, there's a surprising amount of nuance in here. For instance there's extra logic for allowing you to go back to a clean slate with ui interactions - for instance hiding & unhiding an item that doesn't receive any parent overrides will remove the visibility override completely as the default value for visibility is 'true'. You can now hide/show under a shown/hidden parent tree: https://github.com/rerun-io/rerun/assets/1220815/f412cac5-2db6-43d0-9b02-d2269cb60824 We're able to keep track of where an override comes from, this is exposed in the selection panels' tooltip: ![image](https://github.com/rerun-io/rerun/assets/1220815/ef7794ac-07c8-4930-ba92-11a45f91f6fe) ### Checklist * [x] I have read and agree to [Contributor Guide](https://github.com/rerun-io/rerun/blob/main/CONTRIBUTING.md) and the [Code of Conduct](https://github.com/rerun-io/rerun/blob/main/CODE_OF_CONDUCT.md) * [x] I've included a screenshot or gif (if applicable) * [x] I have tested the web demo (if applicable): * Using newly built examples: [app.rerun.io](https://app.rerun.io/pr/5508/index.html) * Using examples from latest `main` build: [app.rerun.io](https://app.rerun.io/pr/5508/index.html?manifest_url=https://app.rerun.io/version/main/examples_manifest.json) * Using full set of examples from `nightly` build: [app.rerun.io](https://app.rerun.io/pr/5508/index.html?manifest_url=https://app.rerun.io/version/nightly/examples_manifest.json) * [x] The PR title and labels are set such as to maximize their usefulness for the next release's CHANGELOG * [x] If applicable, add a new check to the [release checklist](https://github.com/rerun-io/rerun/blob/main/tests/python/release_checklist)! - [PR Build Summary](https://build.rerun.io/pr/5508) - [Docs preview](https://rerun.io/preview/a09f77a2233fd101a4c5a94703f7726a920a18c6/docs) - [Examples preview](https://rerun.io/preview/a09f77a2233fd101a4c5a94703f7726a920a18c6/examples) - [Recent benchmark results](https://build.rerun.io/graphs/crates.html) - [Wasm size tracking](https://build.rerun.io/graphs/sizes.html) --- crates/re_entity_db/src/entity_properties.rs | 8 +- crates/re_space_view/src/data_query.rs | 9 +- crates/re_space_view/src/space_view.rs | 36 +-- .../re_space_view/src/space_view_contents.rs | 22 +- .../src/visualizer_system.rs | 2 +- .../src/space_view_class.rs | 2 +- .../src/contexts/depth_offsets.rs | 2 +- .../src/visualizers/cameras.rs | 2 +- .../src/visualizers/entity_iterator.rs | 6 +- .../src/visualizers/transform3d_arrows.rs | 2 +- .../src/visualizer_system.rs | 2 +- .../src/visualizer_system.rs | 2 +- .../src/visualizer_system.rs | 2 +- .../src/legacy_visualizer_system.rs | 19 +- .../src/line_visualizer_system.rs | 14 +- .../src/overrides.rs | 28 +-- .../src/point_visualizer_system.rs | 16 +- .../rerun/blueprint/components/visible.fbs | 2 +- .../re_types/src/blueprint/components/mod.rs | 1 + .../src/blueprint/components/visible.rs | 2 +- .../src/blueprint/components/visible_ext.rs | 7 + crates/re_ui/src/lib.rs | 17 +- crates/re_viewer/src/ui/override_ui.rs | 29 +-- crates/re_viewer/src/ui/selection_panel.rs | 53 ++++- .../src/blueprint_helpers.rs | 13 +- crates/re_viewer_context/src/lib.rs | 17 +- .../re_viewer_context/src/space_view/mod.rs | 3 +- .../src/space_view/view_query.rs | 219 ++++++++++++++---- .../src/context_menu/actions/show_hide.rs | 31 ++- .../re_viewport/src/viewport_blueprint_ui.rs | 37 ++- .../color_coordinates_visualizer_system.rs | 2 +- 31 files changed, 388 insertions(+), 219 deletions(-) create mode 100644 crates/re_types/src/blueprint/components/visible_ext.rs diff --git a/crates/re_entity_db/src/entity_properties.rs b/crates/re_entity_db/src/entity_properties.rs index 4e7e0d1e2d38..02f6e29325a1 100644 --- a/crates/re_entity_db/src/entity_properties.rs +++ b/crates/re_entity_db/src/entity_properties.rs @@ -94,7 +94,6 @@ impl FromIterator<(EntityPath, EntityProperties)> for EntityPropertyMap { #[cfg_attr(feature = "serde", derive(serde::Deserialize, serde::Serialize))] #[cfg_attr(feature = "serde", serde(default))] pub struct EntityProperties { - pub visible: bool, pub visible_history: re_query::ExtraQueryHistory, pub interactive: bool, @@ -144,7 +143,6 @@ pub struct EntityProperties { impl Default for EntityProperties { fn default() -> Self { Self { - visible: true, visible_history: re_query::ExtraQueryHistory::default(), interactive: true, color_mapper: EditableAutoValue::default(), @@ -166,7 +164,6 @@ impl EntityProperties { /// Multiply/and these together. pub fn with_child(&self, child: &Self) -> Self { Self { - visible: self.visible && child.visible, visible_history: self.visible_history.with_child(&child.visible_history), interactive: self.interactive && child.interactive, @@ -211,7 +208,6 @@ impl EntityProperties { /// loaded from the Blueprint store where the Auto values are not up-to-date. pub fn merge_with(&self, other: &Self) -> Self { Self { - visible: other.visible, visible_history: self.visible_history.with_child(&other.visible_history), interactive: other.interactive, @@ -250,7 +246,6 @@ impl EntityProperties { /// Determine whether this `EntityProperty` has user-edits relative to another `EntityProperty` pub fn has_edits(&self, other: &Self) -> bool { let Self { - visible, visible_history, interactive, color_mapper, @@ -265,8 +260,7 @@ impl EntityProperties { time_series_aggregator, } = self; - visible != &other.visible - || visible_history != &other.visible_history + visible_history != &other.visible_history || interactive != &other.interactive || color_mapper.has_edits(&other.color_mapper) || pinhole_image_plane_distance.has_edits(&other.pinhole_image_plane_distance) diff --git a/crates/re_space_view/src/data_query.rs b/crates/re_space_view/src/data_query.rs index ea9771817509..7cf3fcb141fd 100644 --- a/crates/re_space_view/src/data_query.rs +++ b/crates/re_space_view/src/data_query.rs @@ -1,9 +1,10 @@ -use ahash::HashMap; +use nohash_hasher::IntMap; use re_entity_db::{external::re_data_store::LatestAtQuery, EntityProperties, EntityPropertyMap}; -use re_log_types::{EntityPath, StoreKind}; use re_types::ComponentName; -use re_viewer_context::{DataQueryResult, PerVisualizer, StoreContext, VisualizableEntities}; +use re_viewer_context::{ + DataQueryResult, OverridePath, PerVisualizer, StoreContext, VisualizableEntities, +}; pub struct EntityOverrideContext { pub root: EntityProperties, @@ -11,7 +12,7 @@ pub struct EntityOverrideContext { pub recursive: EntityPropertyMap, /// Base component overrides that are inherited by all entities. - pub root_component_overrides: HashMap, + pub root_component_overrides: IntMap, } /// Trait for resolving properties needed by most implementations of [`DataQuery`] diff --git a/crates/re_space_view/src/space_view.rs b/crates/re_space_view/src/space_view.rs index c30be095628e..821f62597b96 100644 --- a/crates/re_space_view/src/space_view.rs +++ b/crates/re_space_view/src/space_view.rs @@ -446,7 +446,7 @@ impl SpaceViewBlueprint { accumulated_properties, individual_properties, recursive_properties: Default::default(), - component_overrides: Default::default(), + resolved_component_overrides: Default::default(), recursive_override_path: entity_path.clone(), individual_override_path: entity_path, }), @@ -464,8 +464,8 @@ mod tests { }; use re_types::{archetypes::Points3D, ComponentBatch, ComponentName, Loggable as _}; use re_viewer_context::{ - blueprint_timeline, IndicatedEntities, PerVisualizer, SpaceViewClassRegistry, StoreContext, - VisualizableEntities, + blueprint_timeline, IndicatedEntities, OverridePath, PerVisualizer, SpaceViewClassRegistry, + StoreContext, VisualizableEntities, }; use std::collections::HashMap; @@ -582,9 +582,9 @@ mod tests { ); } - // Now, override visibility on parent individually. + // Now, override interactive on parent individually. let mut overrides = parent.individual_properties().cloned().unwrap_or_default(); - overrides.visible = false; + overrides.interactive = false; save_override( overrides, @@ -593,7 +593,7 @@ mod tests { ); } - // Parent is not visible, but children are + // Parent is not interactive, but children are { let ctx = StoreContext { app_id: re_log_types::ApplicationId::unknown(), @@ -622,18 +622,18 @@ mod tests { .lookup_result_by_path(&EntityPath::from("parent/skip/child2")) .unwrap(); - assert!(!parent.accumulated_properties().visible); + assert!(!parent.accumulated_properties().interactive); for result in [child1, child2] { - assert!(result.accumulated_properties().visible); + assert!(result.accumulated_properties().interactive); } - // Override visibility on parent recursively. + // Override interactivity on parent recursively. let mut overrides = parent_group .individual_properties() .cloned() .unwrap_or_default(); - overrides.visible = false; + overrides.interactive = false; save_override( overrides, @@ -642,7 +642,7 @@ mod tests { ); } - // Nobody is visible + // Nobody is interactive { let ctx = StoreContext { app_id: re_log_types::ApplicationId::unknown(), @@ -668,11 +668,11 @@ mod tests { .unwrap(); for result in [parent, child1, child2] { - assert!(!result.accumulated_properties().visible); + assert!(!result.accumulated_properties().interactive); } } - // Override visible range on root + // Override interactive range on root { let root = space_view.root_data_result( &StoreContext { @@ -694,7 +694,7 @@ mod tests { ); } - // Everyone has visible history + // Everyone has interactive history { let ctx = StoreContext { app_id: re_log_types::ApplicationId::unknown(), @@ -736,7 +736,7 @@ mod tests { ); } - // Child2 has its own visible history + // Child2 has its own interactive history { let ctx = StoreContext { app_id: re_log_types::ApplicationId::unknown(), @@ -1042,13 +1042,13 @@ mod tests { query_result.tree.visit(&mut |node| { let result = &node.data_result; if let Some(property_overrides) = &result.property_overrides { - if !property_overrides.component_overrides.is_empty() { + if !property_overrides.resolved_component_overrides.is_empty() { visited.insert( result.entity_path.clone(), property_overrides - .component_overrides + .resolved_component_overrides .iter() - .map(|(component_name, (store_kind, path))| { + .map(|(component_name, OverridePath { store_kind, path })| { assert_eq!(store_kind, &StoreKind::Blueprint); (*component_name, path.clone()) }) diff --git a/crates/re_space_view/src/space_view_contents.rs b/crates/re_space_view/src/space_view_contents.rs index 773a59e71517..c999d337e276 100644 --- a/crates/re_space_view/src/space_view_contents.rs +++ b/crates/re_space_view/src/space_view_contents.rs @@ -1,4 +1,4 @@ -use ahash::HashMap; +use nohash_hasher::IntMap; use slotmap::SlotMap; use smallvec::SmallVec; @@ -6,7 +6,7 @@ use re_entity_db::{ external::re_data_store::LatestAtQuery, EntityDb, EntityProperties, EntityPropertiesComponent, EntityPropertyMap, EntityTree, }; -use re_log_types::{path::RuleEffect, EntityPath, EntityPathFilter, EntityPathRule, StoreKind}; +use re_log_types::{path::RuleEffect, EntityPath, EntityPathFilter, EntityPathRule}; use re_types::{ blueprint::{archetypes as blueprint_archetypes, components::QueryExpression}, Archetype as _, @@ -14,8 +14,8 @@ use re_types::{ use re_types_core::{components::VisualizerOverrides, ComponentName}; use re_viewer_context::{ DataQueryResult, DataResult, DataResultHandle, DataResultNode, DataResultTree, - IndicatedEntities, PerVisualizer, PropertyOverrides, SpaceViewClassIdentifier, SpaceViewId, - StoreContext, ViewerContext, VisualizableEntities, + IndicatedEntities, OverridePath, PerVisualizer, PropertyOverrides, SpaceViewClassIdentifier, + SpaceViewId, StoreContext, ViewerContext, VisualizableEntities, }; use crate::{ @@ -340,7 +340,7 @@ impl DataQueryPropertyResolver<'_> { .space_view .root_data_result(ctx, query) .property_overrides - .map(|p| (p.accumulated_properties, p.component_overrides)) + .map(|p| (p.accumulated_properties, p.resolved_component_overrides)) .unwrap_or_default(); for prefix in &self.default_stack { @@ -416,7 +416,7 @@ impl DataQueryPropertyResolver<'_> { query_result: &mut DataQueryResult, override_context: &EntityOverrideContext, accumulated: &EntityProperties, - recursive_property_overrides: &HashMap, + recursive_property_overrides: &IntMap, handle: DataResultHandle, ) { if let Some((child_handles, accumulated, recursive_property_overrides)) = @@ -493,7 +493,7 @@ impl DataQueryPropertyResolver<'_> { if !component_data.is_empty() { recursive_property_overrides.to_mut().insert( *component, - (StoreKind::Blueprint, recursive_override_path.clone()), + OverridePath::blueprint_path(recursive_override_path.clone()), ); } } @@ -502,7 +502,7 @@ impl DataQueryPropertyResolver<'_> { // Then, gather individual overrides - these may override the recursive ones again, // but recursive overrides are still inherited to children. - let mut component_overrides = (*recursive_property_overrides).clone(); + let mut resolved_component_overrides = (*recursive_property_overrides).clone(); if let Some(individual_override_subtree) = ctx.blueprint.tree().subtree(&individual_override_path) { @@ -514,9 +514,9 @@ impl DataQueryPropertyResolver<'_> { .and_then(|(_, _, cells)| cells[0].clone()) { if !component_data.is_empty() { - component_overrides.insert( + resolved_component_overrides.insert( *component, - (StoreKind::Blueprint, individual_override_path.clone()), + OverridePath::blueprint_path(individual_override_path.clone()), ); } } @@ -527,7 +527,7 @@ impl DataQueryPropertyResolver<'_> { accumulated_properties, individual_properties: individual_properties.cloned(), recursive_properties: recursive_properties.cloned(), - component_overrides, + resolved_component_overrides, recursive_override_path, individual_override_path, }); diff --git a/crates/re_space_view_bar_chart/src/visualizer_system.rs b/crates/re_space_view_bar_chart/src/visualizer_system.rs index 834a29dd3c9e..ef93f0024656 100644 --- a/crates/re_space_view_bar_chart/src/visualizer_system.rs +++ b/crates/re_space_view_bar_chart/src/visualizer_system.rs @@ -50,7 +50,7 @@ impl VisualizerSystem for BarChartVisualizerSystem { let store = ctx.entity_db.store(); - for data_result in query.iter_visible_data_results(Self::identifier()) { + for data_result in query.iter_visible_data_results(ctx, Self::identifier()) { let query = LatestAtQuery::new(query.timeline, query.latest_at); let tensor = store.query_latest_component::( &data_result.entity_path, diff --git a/crates/re_space_view_dataframe/src/space_view_class.rs b/crates/re_space_view_dataframe/src/space_view_class.rs index 99e1c0b75fb3..82454150c679 100644 --- a/crates/re_space_view_dataframe/src/space_view_class.rs +++ b/crates/re_space_view_dataframe/src/space_view_class.rs @@ -81,7 +81,7 @@ impl SpaceViewClass for DataframeSpaceView { // These are the entity paths whose content we must display. let sorted_entity_paths: BTreeSet<_> = query .iter_all_data_results() - .filter(|data_result| data_result.accumulated_properties().visible) + .filter(|data_result| data_result.is_visible(ctx)) .map(|data_result| &data_result.entity_path) .cloned() .collect(); diff --git a/crates/re_space_view_spatial/src/contexts/depth_offsets.rs b/crates/re_space_view_spatial/src/contexts/depth_offsets.rs index b70714c07252..736192b302dd 100644 --- a/crates/re_space_view_spatial/src/contexts/depth_offsets.rs +++ b/crates/re_space_view_spatial/src/contexts/depth_offsets.rs @@ -48,7 +48,7 @@ impl ViewContextSystem for EntityDepthOffsets { // Use a BTreeSet for entity hashes to get a stable order. let mut entities_per_draw_order = BTreeMap::>::new(); - for data_result in query.iter_visible_data_results(Self::identifier()) { + for data_result in query.iter_visible_data_results(ctx, Self::identifier()) { if let Some(draw_order) = store .query_latest_component::(&data_result.entity_path, &ctx.current_query()) { diff --git a/crates/re_space_view_spatial/src/visualizers/cameras.rs b/crates/re_space_view_spatial/src/visualizers/cameras.rs index 002ab4949852..f9e79bc524b9 100644 --- a/crates/re_space_view_spatial/src/visualizers/cameras.rs +++ b/crates/re_space_view_spatial/src/visualizers/cameras.rs @@ -213,7 +213,7 @@ impl VisualizerSystem for CamerasVisualizer { let mut line_builder = re_renderer::LineDrawableBuilder::new(ctx.render_ctx); line_builder.radius_boost_in_ui_points_for_outlines(SIZE_BOOST_IN_POINTS_FOR_LINE_OUTLINES); - for data_result in query.iter_visible_data_results(Self::identifier()) { + for data_result in query.iter_visible_data_results(ctx, Self::identifier()) { let time_query = re_data_store::LatestAtQuery::new(query.timeline, query.latest_at); if let Some(pinhole) = query_pinhole(store, &time_query, &data_result.entity_path) { diff --git a/crates/re_space_view_spatial/src/visualizers/entity_iterator.rs b/crates/re_space_view_spatial/src/visualizers/entity_iterator.rs index 4f407245832b..986c40c7db18 100644 --- a/crates/re_space_view_spatial/src/visualizers/entity_iterator.rs +++ b/crates/re_space_view_spatial/src/visualizers/entity_iterator.rs @@ -42,7 +42,7 @@ where let annotations = view_ctx.get::()?; let counter = view_ctx.get::()?; - for data_result in query.iter_visible_data_results(System::identifier()) { + for data_result in query.iter_visible_data_results(ctx, System::identifier()) { // The transform that considers pinholes only makes sense if this is a 3D space-view let world_from_entity = if view_ctx.space_view_class_identifier() == SpatialSpaceView3D::identifier() { @@ -151,7 +151,7 @@ macro_rules! impl_process_archetype { let annotations = view_ctx.get::()?; let counter = view_ctx.get::()?; - for data_result in query.iter_visible_data_results(S::identifier()) { + for data_result in query.iter_visible_data_results(ctx, S::identifier()) { // The transform that considers pinholes only makes sense if this is a 3D space-view let world_from_entity = if view_ctx.space_view_class_identifier() == SpatialSpaceView3D::identifier() { transforms.reference_from_entity(&data_result.entity_path) @@ -256,7 +256,7 @@ pub fn count_instances_in_archetype_views< let mut num_instances = 0; - for data_result in query.iter_visible_data_results(System::identifier()) { + for data_result in query.iter_visible_data_results(ctx, System::identifier()) { match query_archetype_with_history::( ctx.entity_db.store(), &query.timeline, diff --git a/crates/re_space_view_spatial/src/visualizers/transform3d_arrows.rs b/crates/re_space_view_spatial/src/visualizers/transform3d_arrows.rs index be5bc096f315..bcb11e63061c 100644 --- a/crates/re_space_view_spatial/src/visualizers/transform3d_arrows.rs +++ b/crates/re_space_view_spatial/src/visualizers/transform3d_arrows.rs @@ -61,7 +61,7 @@ impl VisualizerSystem for Transform3DArrowsVisualizer { let mut line_builder = re_renderer::LineDrawableBuilder::new(ctx.render_ctx); line_builder.radius_boost_in_ui_points_for_outlines(SIZE_BOOST_IN_POINTS_FOR_LINE_OUTLINES); - for data_result in query.iter_visible_data_results(Self::identifier()) { + for data_result in query.iter_visible_data_results(ctx, Self::identifier()) { if !*data_result.accumulated_properties().transform_3d_visible { continue; } diff --git a/crates/re_space_view_tensor/src/visualizer_system.rs b/crates/re_space_view_tensor/src/visualizer_system.rs index e690df2e84d1..55559fc1797b 100644 --- a/crates/re_space_view_tensor/src/visualizer_system.rs +++ b/crates/re_space_view_tensor/src/visualizer_system.rs @@ -48,7 +48,7 @@ impl VisualizerSystem for TensorSystem { re_tracing::profile_function!(); let store = ctx.entity_db.store(); - for data_result in query.iter_visible_data_results(Self::identifier()) { + for data_result in query.iter_visible_data_results(ctx, Self::identifier()) { let timeline_query = LatestAtQuery::new(query.timeline, query.latest_at); if let Some(tensor) = store diff --git a/crates/re_space_view_text_document/src/visualizer_system.rs b/crates/re_space_view_text_document/src/visualizer_system.rs index f121ff40fcab..b0f55e9cf04f 100644 --- a/crates/re_space_view_text_document/src/visualizer_system.rs +++ b/crates/re_space_view_text_document/src/visualizer_system.rs @@ -44,7 +44,7 @@ impl VisualizerSystem for TextDocumentSystem { let timeline_query = LatestAtQuery::new(query.timeline, query.latest_at); - for data_result in query.iter_visible_data_results(Self::identifier()) { + for data_result in query.iter_visible_data_results(ctx, Self::identifier()) { // TODO(#3320): this match can go away once the issue is resolved match query_archetype::( store, diff --git a/crates/re_space_view_text_log/src/visualizer_system.rs b/crates/re_space_view_text_log/src/visualizer_system.rs index 42fe24acf1ee..192d051668f6 100644 --- a/crates/re_space_view_text_log/src/visualizer_system.rs +++ b/crates/re_space_view_text_log/src/visualizer_system.rs @@ -53,7 +53,7 @@ impl VisualizerSystem for TextLogSystem { let query_caches = ctx.entity_db.query_caches(); let store = ctx.entity_db.store(); - for data_result in query.iter_visible_data_results(Self::identifier()) { + for data_result in query.iter_visible_data_results(ctx, Self::identifier()) { re_tracing::profile_scope!("primary", &data_result.entity_path.to_string()); // We want everything, for all times: diff --git a/crates/re_space_view_time_series/src/legacy_visualizer_system.rs b/crates/re_space_view_time_series/src/legacy_visualizer_system.rs index 4d4b6d65b85a..6d71a991ed03 100644 --- a/crates/re_space_view_time_series/src/legacy_visualizer_system.rs +++ b/crates/re_space_view_time_series/src/legacy_visualizer_system.rs @@ -10,7 +10,7 @@ use re_viewer_context::{ }; use crate::{ - overrides::{initial_override_color, lookup_override}, + overrides::initial_override_color, util::{determine_plot_bounds_and_time_per_pixel, determine_time_range, points_to_series}, PlotPoint, PlotPointAttrs, PlotSeries, PlotSeriesKind, ScatterAttrs, }; @@ -57,7 +57,7 @@ impl VisualizerSystem for LegacyTimeSeriesSystem { ctx, &query.latest_at_query(), query - .iter_visible_data_results(Self::identifier()) + .iter_visible_data_results(ctx, Self::identifier()) .map(|data| &data.entity_path), ); @@ -102,7 +102,7 @@ impl LegacyTimeSeriesSystem { let (plot_bounds, time_per_pixel) = determine_plot_bounds_and_time_per_pixel(ctx, query); // TODO(cmc): this should be thread-pooled in case there are a gazillon series in the same plot… - for data_result in query.iter_visible_data_results(Self::identifier()) { + for data_result in query.iter_visible_data_results(ctx, Self::identifier()) { let annotations = self.annotation_map.find(&data_result.entity_path); let annotation_info = annotations .resolved_class_description(None) @@ -111,11 +111,14 @@ impl LegacyTimeSeriesSystem { const DEFAULT_RADIUS: f32 = 0.75; - let override_color = lookup_override::(data_result, ctx).map(|c| c.to_array()); - let override_label = lookup_override::(data_result, ctx).map(|t| t.0); - let override_scattered = - lookup_override::(data_result, ctx).map(|s| s.0); - let override_radius = lookup_override::(data_result, ctx).map(|r| r.0); + let override_color = data_result + .lookup_override::(ctx) + .map(|c| c.to_array()); + let override_label = data_result.lookup_override::(ctx).map(|t| t.0); + let override_scattered = data_result + .lookup_override::(ctx) + .map(|s| s.0); + let override_radius = data_result.lookup_override::(ctx).map(|r| r.0); // All the default values for a `PlotPoint`, accounting for both overrides and default // values. diff --git a/crates/re_space_view_time_series/src/line_visualizer_system.rs b/crates/re_space_view_time_series/src/line_visualizer_system.rs index 92b1dba52471..5672f84770f5 100644 --- a/crates/re_space_view_time_series/src/line_visualizer_system.rs +++ b/crates/re_space_view_time_series/src/line_visualizer_system.rs @@ -15,7 +15,7 @@ use crate::overrides::initial_override_color; use crate::util::{ determine_plot_bounds_and_time_per_pixel, determine_time_range, points_to_series, }; -use crate::{overrides::lookup_override, PlotPoint, PlotPointAttrs, PlotSeries, PlotSeriesKind}; +use crate::{PlotPoint, PlotPointAttrs, PlotSeries, PlotSeriesKind}; /// The system for rendering [`SeriesLine`] archetypes. #[derive(Default, Debug)] @@ -56,7 +56,7 @@ impl VisualizerSystem for SeriesLineSystem { ctx, &query.latest_at_query(), query - .iter_visible_data_results(Self::identifier()) + .iter_visible_data_results(ctx, Self::identifier()) .map(|data| &data.entity_path), ); @@ -98,7 +98,7 @@ impl SeriesLineSystem { let (plot_bounds, time_per_pixel) = determine_plot_bounds_and_time_per_pixel(ctx, query); - let data_results = query.iter_visible_data_results(Self::identifier()); + let data_results = query.iter_visible_data_results(ctx, Self::identifier()); let parallel_loading = false; // TODO(emilk): enable parallel loading when it is faster, because right now it is often slower. if parallel_loading { @@ -162,9 +162,11 @@ fn load_series( .resolved_class_description(None) .annotation_info(); let default_color = DefaultColor::EntityPath(&data_result.entity_path); - let override_color = lookup_override::(data_result, ctx).map(|c| c.to_array()); - let override_series_name = lookup_override::(data_result, ctx).map(|t| t.0); - let override_stroke_width = lookup_override::(data_result, ctx).map(|r| r.0); + let override_color = data_result + .lookup_override::(ctx) + .map(|c| c.to_array()); + let override_series_name = data_result.lookup_override::(ctx).map(|t| t.0); + let override_stroke_width = data_result.lookup_override::(ctx).map(|r| r.0); // All the default values for a `PlotPoint`, accounting for both overrides and default // values. diff --git a/crates/re_space_view_time_series/src/overrides.rs b/crates/re_space_view_time_series/src/overrides.rs index 397d764915f5..d2f0afc9e8fd 100644 --- a/crates/re_space_view_time_series/src/overrides.rs +++ b/crates/re_space_view_time_series/src/overrides.rs @@ -1,28 +1,6 @@ -use re_log_types::{EntityPath, StoreKind}; -use re_types::{components::Color, Component}; -use re_viewer_context::{DefaultColor, ResolvedAnnotationInfo, ViewerContext}; - -pub fn lookup_override( - data_result: &re_viewer_context::DataResult, - ctx: &ViewerContext<'_>, -) -> Option { - data_result - .property_overrides - .as_ref() - .and_then(|p| p.component_overrides.get(&C::name())) - .and_then(|(store_kind, path)| match store_kind { - StoreKind::Blueprint => ctx - .store_context - .blueprint - .store() - .query_latest_component::(path, ctx.blueprint_query), - StoreKind::Recording => ctx - .entity_db - .store() - .query_latest_component::(path, &ctx.current_query()), - }) - .map(|c| c.value) -} +use re_log_types::EntityPath; +use re_types::components::Color; +use re_viewer_context::{DefaultColor, ResolvedAnnotationInfo}; pub fn initial_override_color(entity_path: &EntityPath) -> Color { let default_color = DefaultColor::EntityPath(entity_path); diff --git a/crates/re_space_view_time_series/src/point_visualizer_system.rs b/crates/re_space_view_time_series/src/point_visualizer_system.rs index 90ee4ce60e9d..f0b612798773 100644 --- a/crates/re_space_view_time_series/src/point_visualizer_system.rs +++ b/crates/re_space_view_time_series/src/point_visualizer_system.rs @@ -16,7 +16,7 @@ use crate::util::{ determine_plot_bounds_and_time_per_pixel, determine_time_range, points_to_series, }; use crate::ScatterAttrs; -use crate::{overrides::lookup_override, PlotPoint, PlotPointAttrs, PlotSeries, PlotSeriesKind}; +use crate::{PlotPoint, PlotPointAttrs, PlotSeries, PlotSeriesKind}; /// The system for rendering [`SeriesPoint`] archetypes. #[derive(Default, Debug)] @@ -60,7 +60,7 @@ impl VisualizerSystem for SeriesPointSystem { ctx, &query.latest_at_query(), query - .iter_visible_data_results(Self::identifier()) + .iter_visible_data_results(ctx, Self::identifier()) .map(|data| &data.entity_path), ); @@ -106,17 +106,19 @@ impl SeriesPointSystem { let (plot_bounds, time_per_pixel) = determine_plot_bounds_and_time_per_pixel(ctx, query); // TODO(cmc): this should be thread-pooled in case there are a gazillon series in the same plot… - for data_result in query.iter_visible_data_results(Self::identifier()) { + for data_result in query.iter_visible_data_results(ctx, Self::identifier()) { let annotations = self.annotation_map.find(&data_result.entity_path); let annotation_info = annotations .resolved_class_description(None) .annotation_info(); let default_color = DefaultColor::EntityPath(&data_result.entity_path); - let override_color = lookup_override::(data_result, ctx).map(|c| c.to_array()); - let override_series_name = lookup_override::(data_result, ctx).map(|t| t.0); - let override_marker_size = lookup_override::(data_result, ctx).map(|r| r.0); - let override_marker = lookup_override::(data_result, ctx); + let override_color = data_result + .lookup_override::(ctx) + .map(|c| c.to_array()); + let override_series_name = data_result.lookup_override::(ctx).map(|t| t.0); + let override_marker_size = data_result.lookup_override::(ctx).map(|r| r.0); + let override_marker = data_result.lookup_override::(ctx); // All the default values for a `PlotPoint`, accounting for both overrides and default // values. diff --git a/crates/re_types/definitions/rerun/blueprint/components/visible.fbs b/crates/re_types/definitions/rerun/blueprint/components/visible.fbs index 992d11f53f6b..ee11f7651d5d 100644 --- a/crates/re_types/definitions/rerun/blueprint/components/visible.fbs +++ b/crates/re_types/definitions/rerun/blueprint/components/visible.fbs @@ -14,7 +14,7 @@ struct Visible ( "attr.arrow.transparent", "attr.rerun.scope": "blueprint", "attr.python.aliases": "bool", - "attr.rust.derive": "Copy, Default, PartialEq, Eq, PartialOrd, Ord", + "attr.rust.derive": "Copy, PartialEq, Eq, PartialOrd, Ord", "attr.rust.repr": "transparent", "attr.rust.tuple_struct" ) { diff --git a/crates/re_types/src/blueprint/components/mod.rs b/crates/re_types/src/blueprint/components/mod.rs index 554e1ae416dc..0b873668d40b 100644 --- a/crates/re_types/src/blueprint/components/mod.rs +++ b/crates/re_types/src/blueprint/components/mod.rs @@ -14,6 +14,7 @@ mod space_view_class; mod space_view_origin; mod viewer_recommendation_hash; mod visible; +mod visible_ext; pub use self::active_tab::ActiveTab; pub use self::background3d_kind::Background3DKind; diff --git a/crates/re_types/src/blueprint/components/visible.rs b/crates/re_types/src/blueprint/components/visible.rs index 7c671219a95e..20887b57cb2a 100644 --- a/crates/re_types/src/blueprint/components/visible.rs +++ b/crates/re_types/src/blueprint/components/visible.rs @@ -22,7 +22,7 @@ use ::re_types_core::{ComponentBatch, MaybeOwnedComponentBatch}; use ::re_types_core::{DeserializationError, DeserializationResult}; /// **Component**: Whether the container, space view, entity or instance is currently visible. -#[derive(Clone, Debug, Copy, Default, PartialEq, Eq, PartialOrd, Ord)] +#[derive(Clone, Debug, Copy, PartialEq, Eq, PartialOrd, Ord)] #[repr(transparent)] pub struct Visible(pub bool); diff --git a/crates/re_types/src/blueprint/components/visible_ext.rs b/crates/re_types/src/blueprint/components/visible_ext.rs new file mode 100644 index 000000000000..777ab528f2c0 --- /dev/null +++ b/crates/re_types/src/blueprint/components/visible_ext.rs @@ -0,0 +1,7 @@ +use super::Visible; + +impl Default for Visible { + fn default() -> Self { + Self(true) + } +} diff --git a/crates/re_ui/src/lib.rs b/crates/re_ui/src/lib.rs index 55b8d179050f..18cd4abf257d 100644 --- a/crates/re_ui/src/lib.rs +++ b/crates/re_ui/src/lib.rs @@ -65,7 +65,7 @@ pub enum LabelStyle { use crate::list_item::ListItem; use egui::emath::{Rangef, Rot2}; use egui::epaint::util::FloatOrd; -use egui::{pos2, Align2, CollapsingResponse, Color32, Mesh, NumExt, Rect, Shape, Vec2}; +use egui::{pos2, Align2, CollapsingResponse, Color32, Mesh, NumExt, Rect, Shape, Vec2, Widget}; #[derive(Clone)] pub struct ReUi { @@ -431,6 +431,17 @@ impl ReUi { ui: &mut egui::Ui, selected: &mut bool, text: impl Into, + ) -> egui::Response { + self.checkbox_indeterminate(ui, selected, text, false) + } + + #[allow(clippy::unused_self)] + pub fn checkbox_indeterminate( + &self, + ui: &mut egui::Ui, + selected: &mut bool, + text: impl Into, + indeterminate: bool, ) -> egui::Response { ui.scope(|ui| { ui.visuals_mut().widgets.hovered.expansion = 0.0; @@ -438,7 +449,9 @@ impl ReUi { ui.visuals_mut().widgets.open.expansion = 0.0; // NOLINT - ui.checkbox(selected, text) + egui::Checkbox::new(selected, text) + .indeterminate(indeterminate) + .ui(ui) }) .inner } diff --git a/crates/re_viewer/src/ui/override_ui.rs b/crates/re_viewer/src/ui/override_ui.rs index 3b3f2b711035..ff055faf55b4 100644 --- a/crates/re_viewer/src/ui/override_ui.rs +++ b/crates/re_viewer/src/ui/override_ui.rs @@ -13,8 +13,8 @@ use re_types_core::{ ComponentName, }; use re_viewer_context::{ - blueprint_timepoint_for_writes, DataResult, SystemCommand, SystemCommandSender as _, - UiVerbosity, ViewSystemIdentifier, ViewerContext, + blueprint_timepoint_for_writes, DataResult, OverridePath, SystemCommand, + SystemCommandSender as _, UiVerbosity, ViewSystemIdentifier, ViewerContext, }; pub fn override_ui( @@ -48,7 +48,7 @@ pub fn override_ui( let active_overrides: BTreeSet = data_result .property_overrides .as_ref() - .map(|props| props.component_overrides.keys().cloned().collect()) + .map(|props| props.resolved_component_overrides.keys().cloned().collect()) .unwrap_or_default(); let view_systems = ctx @@ -95,7 +95,7 @@ pub fn override_ui( }; let components: Vec<_> = overrides - .component_overrides + .resolved_component_overrides .into_iter() .sorted_by_key(|(c, _)| *c) .filter(|(c, _)| component_to_vis.contains_key(c) && is_component_visible_in_ui(c)) @@ -111,7 +111,7 @@ pub fn override_ui( re_ui::ReUi::setup_table_body(&mut body); let row_height = re_ui::ReUi::table_line_height(); body.rows(row_height, components.len(), |mut row| { - if let Some((component_name, (store_kind, entity_path))) = + if let Some((component_name, OverridePath { store_kind, path })) = components.get(row.index()) { // Remove button @@ -124,7 +124,6 @@ pub fn override_ui( // Note: need to use the blueprint store since the data might // not exist in the recording store. ctx.save_empty_blueprint_component_name( - ctx.store_context.blueprint.store(), &overrides.individual_override_path, *component_name, ); @@ -143,19 +142,11 @@ pub fn override_ui( StoreKind::Blueprint => { let store = ctx.store_context.blueprint.store(); let query = ctx.blueprint_query; - get_component_with_instances( - store, - query, - entity_path, - *component_name, - ) + get_component_with_instances(store, query, path, *component_name) + } + StoreKind::Recording => { + get_component_with_instances(store, &query, path, *component_name) } - StoreKind::Recording => get_component_with_instances( - store, - &query, - entity_path, - *component_name, - ), }; if let Some((_, _, component_data)) = component_data { @@ -165,7 +156,7 @@ pub fn override_ui( UiVerbosity::Small, &query, store, - entity_path, + path, &overrides.individual_override_path, &component_data, instance_key, diff --git a/crates/re_viewer/src/ui/selection_panel.rs b/crates/re_viewer/src/ui/selection_panel.rs index ac19c50af1c8..8151e04222bd 100644 --- a/crates/re_viewer/src/ui/selection_panel.rs +++ b/crates/re_viewer/src/ui/selection_panel.rs @@ -17,8 +17,8 @@ use re_types::{ use re_ui::list_item::ListItem; use re_ui::{ReUi, SyntaxHighlighting as _}; use re_viewer_context::{ - gpu_bridge::colormap_dropdown_button_ui, ContainerId, HoverHighlight, Item, SpaceViewClass, - SpaceViewClassIdentifier, SpaceViewId, UiVerbosity, ViewerContext, + gpu_bridge::colormap_dropdown_button_ui, ContainerId, DataQueryResult, HoverHighlight, Item, + SpaceViewClass, SpaceViewClassIdentifier, SpaceViewId, UiVerbosity, ViewerContext, }; use re_viewport::{ context_menu_ui_for_item, icon_for_container_kind, space_view_name_style, Contents, @@ -911,8 +911,9 @@ fn blueprint_ui_for_data_result( entity_props_ui( ctx, ui, + ctx.lookup_query_result(*space_view_id), &space_view_class, - Some(entity_path), + entity_path, &mut props, data_result.accumulated_properties(), ); @@ -1068,13 +1069,45 @@ The last rule matching `/world/house` is `+ /world/**`, so it is included. fn entity_props_ui( ctx: &ViewerContext<'_>, ui: &mut egui::Ui, + query_result: &DataQueryResult, space_view_class: &SpaceViewClassIdentifier, - entity_path: Option<&EntityPath>, + entity_path: &EntityPath, entity_props: &mut EntityProperties, resolved_entity_props: &EntityProperties, ) { + use re_types::blueprint::components::Visible; + use re_types::Loggable as _; + let re_ui = ctx.re_ui; - re_ui.checkbox(ui, &mut entity_props.visible, "Visible"); + let Some(data_result) = query_result.tree.lookup_result_by_path(entity_path) else { + return; + }; + + { + let visible_before = data_result.lookup_override_or_default::(ctx); + let mut visible = visible_before; + + let override_source = + data_result.component_override_source(&query_result.tree, &Visible::name()); + let is_inherited = + override_source.is_some() && override_source.as_ref() != Some(entity_path); + + ui.horizontal(|ui| { + re_ui.checkbox(ui, &mut visible.0, "Visible"); + if is_inherited { + ui.label("(inherited)"); + } + }); + + if visible_before != visible { + data_result.save_recursive_override_or_clear_if_redundant( + ctx, + &query_result.tree, + &visible, + ); + } + } + re_ui .checkbox(ui, &mut entity_props.interactive, "Interactive") .on_hover_text("If disabled, the entity will not react to any mouse interaction"); @@ -1084,7 +1117,7 @@ fn entity_props_ui( ui, space_view_class, false, - entity_path, + Some(entity_path), &mut entity_props.visible_history, &resolved_entity_props.visible_history, ); @@ -1094,11 +1127,9 @@ fn entity_props_ui( .show(ui, |ui| { // TODO(wumpf): It would be nice to only show pinhole & depth properties in the context of a 3D view. // if *view_state.state_spatial.nav_mode.get() == SpatialNavigationMode::ThreeD { - if let Some(entity_path) = entity_path { - pinhole_props_ui(ctx, ui, entity_path, entity_props); - depth_props_ui(ctx, ui, entity_path, entity_props); - transform3d_visualization_ui(ctx, ui, entity_path, entity_props); - } + pinhole_props_ui(ctx, ui, entity_path, entity_props); + depth_props_ui(ctx, ui, entity_path, entity_props); + transform3d_visualization_ui(ctx, ui, entity_path, entity_props); }); } diff --git a/crates/re_viewer_context/src/blueprint_helpers.rs b/crates/re_viewer_context/src/blueprint_helpers.rs index 4af906b6bad1..a23caa52f9d4 100644 --- a/crates/re_viewer_context/src/blueprint_helpers.rs +++ b/crates/re_viewer_context/src/blueprint_helpers.rs @@ -59,6 +59,13 @@ impl ViewerContext<'_> { let num_instances = components.num_instances() as u32; let timepoint = blueprint_timepoint_for_writes(); + re_log::trace!( + "Writing {} components of type {:?} to {:?}", + num_instances, + components.name(), + entity_path + ); + let data_row_result = if num_instances == 1 { let mut splat_cell: DataCell = [InstanceKey::SPLAT].into(); splat_cell.compute_size_bytes(); @@ -105,11 +112,11 @@ impl ViewerContext<'_> { /// Helper to save a component to the blueprint store. pub fn save_empty_blueprint_component_name( &self, - store: &re_data_store::DataStore, entity_path: &EntityPath, component_name: ComponentName, ) { - let Some(datatype) = store.lookup_datatype(&component_name) else { + let blueprint = &self.store_context.blueprint; + let Some(datatype) = blueprint.store().lookup_datatype(&component_name) else { re_log::error_once!( "Tried to clear a component with unknown type: {}", component_name @@ -130,7 +137,7 @@ impl ViewerContext<'_> { Ok(row) => self .command_sender .send_system(SystemCommand::UpdateBlueprint( - self.store_context.blueprint.store_id().clone(), + blueprint.store_id().clone(), vec![row], )), Err(err) => { diff --git a/crates/re_viewer_context/src/lib.rs b/crates/re_viewer_context/src/lib.rs index 868c5d2fa7e6..a4f40d6ea3f7 100644 --- a/crates/re_viewer_context/src/lib.rs +++ b/crates/re_viewer_context/src/lib.rs @@ -45,14 +45,15 @@ pub use selection_state::{ Selection, SelectionHighlight, }; pub use space_view::{ - DataResult, IdentifiedViewSystem, PerSystemDataResults, PerSystemEntities, PropertyOverrides, - RecommendedSpaceView, SmallVisualizerSet, SpaceViewClass, SpaceViewClassIdentifier, - SpaceViewClassLayoutPriority, SpaceViewClassRegistry, SpaceViewClassRegistryError, - SpaceViewEntityHighlight, SpaceViewHighlights, SpaceViewOutlineMasks, SpaceViewSpawnHeuristics, - SpaceViewState, SpaceViewStateExt, SpaceViewSystemExecutionError, SpaceViewSystemRegistrator, - SystemExecutionOutput, ViewContextCollection, ViewContextSystem, ViewQuery, - ViewSystemIdentifier, VisualizableFilterContext, VisualizerAdditionalApplicabilityFilter, - VisualizerCollection, VisualizerQueryInfo, VisualizerSystem, + DataResult, IdentifiedViewSystem, OverridePath, PerSystemDataResults, PerSystemEntities, + PropertyOverrides, RecommendedSpaceView, SmallVisualizerSet, SpaceViewClass, + SpaceViewClassIdentifier, SpaceViewClassLayoutPriority, SpaceViewClassRegistry, + SpaceViewClassRegistryError, SpaceViewEntityHighlight, SpaceViewHighlights, + SpaceViewOutlineMasks, SpaceViewSpawnHeuristics, SpaceViewState, SpaceViewStateExt, + SpaceViewSystemExecutionError, SpaceViewSystemRegistrator, SystemExecutionOutput, + ViewContextCollection, ViewContextSystem, ViewQuery, ViewSystemIdentifier, + VisualizableFilterContext, VisualizerAdditionalApplicabilityFilter, VisualizerCollection, + VisualizerQueryInfo, VisualizerSystem, }; pub use store_context::StoreContext; pub use tensor::{TensorDecodeCache, TensorStats, TensorStatsCache}; diff --git a/crates/re_viewer_context/src/space_view/mod.rs b/crates/re_viewer_context/src/space_view/mod.rs index f5d557acd190..df6bc0a3cff1 100644 --- a/crates/re_viewer_context/src/space_view/mod.rs +++ b/crates/re_viewer_context/src/space_view/mod.rs @@ -29,7 +29,8 @@ pub use spawn_heuristics::{RecommendedSpaceView, SpaceViewSpawnHeuristics}; pub use system_execution_output::SystemExecutionOutput; pub use view_context_system::{ViewContextCollection, ViewContextSystem}; pub use view_query::{ - DataResult, PerSystemDataResults, PropertyOverrides, SmallVisualizerSet, ViewQuery, + DataResult, OverridePath, PerSystemDataResults, PropertyOverrides, SmallVisualizerSet, + ViewQuery, }; pub use visualizer_entity_subscriber::VisualizerAdditionalApplicabilityFilter; pub use visualizer_system::{VisualizerCollection, VisualizerQueryInfo, VisualizerSystem}; diff --git a/crates/re_viewer_context/src/space_view/view_query.rs b/crates/re_viewer_context/src/space_view/view_query.rs index 07d09d3da24f..9847cc516536 100644 --- a/crates/re_viewer_context/src/space_view/view_query.rs +++ b/crates/re_viewer_context/src/space_view/view_query.rs @@ -1,19 +1,37 @@ use std::collections::BTreeMap; -use ahash::HashMap; use itertools::Itertools; +use nohash_hasher::IntMap; use once_cell::sync::Lazy; + use re_data_store::LatestAtQuery; use re_entity_db::{EntityPath, EntityProperties, EntityPropertiesComponent, TimeInt, Timeline}; -use re_log_types::{DataCell, DataRow, RowId, StoreKind}; -use re_types::{ComponentName, Loggable}; +use re_log_types::StoreKind; +use re_types::ComponentName; use smallvec::SmallVec; use crate::{ - blueprint_timepoint_for_writes, SpaceViewHighlights, SpaceViewId, SystemCommand, - SystemCommandSender as _, ViewSystemIdentifier, ViewerContext, + DataResultTree, SpaceViewHighlights, SpaceViewId, ViewSystemIdentifier, ViewerContext, }; +/// Path to a specific entity in a specific store used for overrides. +#[derive(Clone, Debug, PartialEq, Eq, Hash)] +pub struct OverridePath { + // NOTE: StoreKind is easier to work with than a `StoreId`` or full `DataStore` but + // might still be ambiguous when we have multiple stores active at a time. + pub store_kind: StoreKind, + pub path: EntityPath, +} + +impl OverridePath { + pub fn blueprint_path(path: EntityPath) -> Self { + Self { + store_kind: StoreKind::Blueprint, + path, + } + } +} + #[derive(Clone, Debug, PartialEq)] pub struct PropertyOverrides { /// The accumulated properties (including any hierarchical flattening) to apply. @@ -28,10 +46,14 @@ pub struct PropertyOverrides { pub recursive_properties: Option, /// An alternative store and entity path to use for the specified component. - // NOTE: StoreKind is easier to work with than a `StoreId`` or full `DataStore` but - // might still be ambiguous when we have multiple stores active at a time. + /// + /// These are resolved overrides, i.e. the result of recursive override propagation + individual overrides. // TODO(jleibs): Consider something like `tinymap` for this. - pub component_overrides: HashMap, + // TODO(andreas): Should be a `Cow` to not do as many clones. + // TODO(andreas): Track recursive vs resolved (== individual + recursive) overrides. + // Recursive here meaning inherited + own recursive, i.e. not just what's on the path. + // What is logged on *this* entity can be inferred from walking up the tree. + pub resolved_component_overrides: IntMap, /// `EntityPath` in the Blueprint store where updated overrides should be written back /// for properties that apply recursively. @@ -91,6 +113,64 @@ impl DataResult { .map(|p| &p.individual_override_path) } + /// Saves a recursive override OR clears both (!) individual & recursive overrides if the override is due to a parent recursive override or a default value. + // TODO(andreas): Does not take individual overrides into account yet. + // TODO(andreas): This should have a unit test, but the delayed override write makes it hard to test. + pub fn save_recursive_override_or_clear_if_redundant( + &self, + ctx: &ViewerContext<'_>, + data_result_tree: &DataResultTree, + desired_override: &C, + ) { + re_tracing::profile_function!(); + + // TODO(jleibs): Make it impossible for this to happen with different type structure + // This should never happen unless we're doing something with a partially processed + // query. + let (Some(recursive_override_path), Some(individual_override_path)) = ( + self.recursive_override_path(), + self.individual_override_path(), + ) else { + re_log::warn!( + "Tried to save override for {:?} but it has no override path", + self.entity_path + ); + return; + }; + + if let Some(current_resolved_override) = self.lookup_override::(ctx) { + // Do nothing if the resolved override is already the same as the new override. + if ¤t_resolved_override == desired_override { + return; + } + + // TODO(andreas): Assumes this is a recursive override + let parent_recursive_override = self + .entity_path + .parent() + .and_then(|parent_path| data_result_tree.lookup_result_by_path(&parent_path)) + .and_then(|data_result| data_result.lookup_override::(ctx)); + + // If the parent has a recursive override that is the same as the new override, + // clear both individual and recursive override at the current path. + // (at least one of them has to be set, otherwise the current resolved override would be the same as the desired override) + // + // Another case for clearing + if parent_recursive_override.as_ref() == Some(desired_override) + || (parent_recursive_override.is_none() && desired_override == &C::default()) + { + // TODO(andreas): It might be that only either of these two are necessary, in that case we shouldn't clear both. + ctx.save_empty_blueprint_component::(recursive_override_path); + ctx.save_empty_blueprint_component::(individual_override_path); + } else { + ctx.save_blueprint_component(recursive_override_path, desired_override); + } + } else { + // No override at all so far, simply set it. + ctx.save_blueprint_component(recursive_override_path, desired_override); + } + } + /// Write the [`EntityProperties`] for this result back to the Blueprint store on the recursive override. /// /// Setting `new_recursive_props` to `None` will always clear the override. @@ -145,44 +225,20 @@ impl DataResult { return; }; - let cell = match new_individual_props { + match new_individual_props { None => { - re_log::debug!("Clearing {:?}", override_path); - - Some(DataCell::from_arrow_empty( - EntityPropertiesComponent::name(), - EntityPropertiesComponent::arrow_datatype(), - )) + ctx.save_empty_blueprint_component::(override_path); } Some(props) => { // A value of `None` in the data store means "use the default value", so if // the properties are `None`, we only must save if `props` is different // from the default. if props.has_edits(properties.unwrap_or(&DEFAULT_PROPS)) { - re_log::debug!("Overriding {:?} with {:?}", override_path, props); - let component = EntityPropertiesComponent(props); - - Some(DataCell::from([component])) - } else { - None + ctx.save_blueprint_component(override_path, &component); } } }; - - if let Some(cell) = cell { - let timepoint = blueprint_timepoint_for_writes(); - - let row = - DataRow::from_cells1_sized(RowId::new(), override_path.clone(), timepoint, 1, cell) - .unwrap(); - - ctx.command_sender - .send_system(SystemCommand::UpdateBlueprint( - ctx.store_context.blueprint.store_id().clone(), - vec![row], - )); - } } #[inline] @@ -214,6 +270,87 @@ impl DataResult { .as_ref() .and_then(|p| p.individual_properties.as_ref()) } + + pub fn lookup_override(&self, ctx: &ViewerContext<'_>) -> Option { + self.property_overrides + .as_ref() + .and_then(|p| p.resolved_component_overrides.get(&C::name())) + .and_then(|OverridePath { store_kind, path }| match store_kind { + StoreKind::Blueprint => ctx + .store_context + .blueprint + .store() + .query_latest_component::(path, ctx.blueprint_query), + StoreKind::Recording => ctx + .entity_db + .store() + .query_latest_component::(path, &ctx.current_query()), + }) + .map(|c| c.value) + } + + #[inline] + pub fn lookup_override_or_default( + &self, + ctx: &ViewerContext<'_>, + ) -> C { + self.lookup_override(ctx).unwrap_or_default() + } + + /// Returns from which entity path an override originates from. + /// + /// Returns None if there was no override at all. + /// Note that if this returns the current path, the override might be either an individual or recursive override. + #[inline] + pub fn component_override_source( + &self, + result_tree: &DataResultTree, + component_name: &ComponentName, + ) -> Option { + re_tracing::profile_function!(); + + // If we don't have a resolved override, clearly nothing overrode this. + let active_override = self + .property_overrides + .as_ref() + .and_then(|p| p.resolved_component_overrides.get(component_name))?; + + // Walk up the tree to find the highest ancestor which has a matching override. + // This must be the ancestor we inherited the override from. Note that `active_override` + // is a `(StoreKind, EntityPath)`, not a value. + let mut override_source = self.entity_path.clone(); + while let Some(parent_path) = override_source.parent() { + if result_tree + .lookup_result_by_path(&parent_path) + .and_then(|data_result| data_result.property_overrides.as_ref()) + .map_or(true, |property_overrides| { + // TODO(andreas): Assumes all overrides are recursive which is not true, + // This should access `recursive_component_overrides` instead. + property_overrides + .resolved_component_overrides + .get(component_name) + != Some(active_override) + }) + { + break; + } + + override_source = parent_path; + } + + Some(override_source) + } + + /// Shorthand for checking for visibility on data overrides. + /// + /// Note that this won't check if the data store has visibility logged. + // TODO(andreas): Should this be possible? + // TODO(andreas): Should the result be cached, this might be a very common operation? + #[inline] + pub fn is_visible(&self, ctx: &ViewerContext<'_>) -> bool { + self.lookup_override_or_default::(ctx) + .0 + } } pub type PerSystemDataResults<'a> = BTreeMap>; @@ -244,17 +381,21 @@ pub struct ViewQuery<'s> { impl<'s> ViewQuery<'s> { /// Iter over all of the currently visible [`DataResult`]s for a given `ViewSystem` - pub fn iter_visible_data_results( - &self, + pub fn iter_visible_data_results<'a>( + &'a self, + ctx: &'a ViewerContext<'a>, system: ViewSystemIdentifier, - ) -> impl Iterator { + ) -> impl Iterator + where + 's: 'a, + { self.per_system_data_results.get(&system).map_or( itertools::Either::Left(std::iter::empty()), |results| { itertools::Either::Right( results .iter() - .filter(|result| result.accumulated_properties().visible) + .filter(|result| result.is_visible(ctx)) .copied(), ) }, diff --git a/crates/re_viewport/src/context_menu/actions/show_hide.rs b/crates/re_viewport/src/context_menu/actions/show_hide.rs index f3319805ab55..b4488c42eb32 100644 --- a/crates/re_viewport/src/context_menu/actions/show_hide.rs +++ b/crates/re_viewport/src/context_menu/actions/show_hide.rs @@ -125,11 +125,7 @@ fn data_result_visible( query_result .tree .lookup_result_by_path(&instance_path.entity_path) - .map(|data_result| { - data_result - .recursive_properties() - .map_or(true, |prop| prop.visible) - }) + .map(|data_result| data_result.is_visible(ctx.viewer_context)) }) .flatten() } @@ -140,17 +136,18 @@ fn set_data_result_visible( instance_path: &InstancePath, visible: bool, ) { - let query_result = ctx.viewer_context.lookup_query_result(*space_view_id); - if let Some(data_result) = query_result - .tree - .lookup_result_by_path(&instance_path.entity_path) - { - let mut recursive_properties = data_result - .recursive_properties() - .cloned() - .unwrap_or_default(); - recursive_properties.visible = visible; - - data_result.save_recursive_override(ctx.viewer_context, Some(recursive_properties)); + if let Some(query_result) = ctx.viewer_context.query_results.get(space_view_id) { + if let Some(data_result) = query_result + .tree + .lookup_result_by_path(&instance_path.entity_path) + { + data_result.save_recursive_override_or_clear_if_redundant( + ctx.viewer_context, + &query_result.tree, + &re_types::blueprint::components::Visible(visible), + ); + } + } else { + re_log::error!("No query available for space view {:?}", space_view_id); } } diff --git a/crates/re_viewport/src/viewport_blueprint_ui.rs b/crates/re_viewport/src/viewport_blueprint_ui.rs index 293eb6863ee4..588fefd8c047 100644 --- a/crates/re_viewport/src/viewport_blueprint_ui.rs +++ b/crates/re_viewport/src/viewport_blueprint_ui.rs @@ -7,6 +7,7 @@ use re_entity_db::InstancePath; use re_log_types::EntityPath; use re_log_types::EntityPathRule; use re_space_view::{SpaceViewBlueprint, SpaceViewName}; +use re_types::blueprint::components::Visible; use re_ui::{drag_and_drop::DropTarget, list_item::ListItem, ReUi}; use re_viewer_context::{CollapseScope, DataResultTree}; use re_viewer_context::{ @@ -539,12 +540,7 @@ impl Viewport<'_, '_> { let is_item_hovered = ctx.selection_state().highlight_for_ui_element(&item) == HoverHighlight::Hovered; - let visible = - data_result_node.map_or(false, |n| n.data_result.accumulated_properties().visible); - let mut recursive_properties = data_result_node - .and_then(|n| n.data_result.recursive_properties()) - .cloned() - .unwrap_or_default(); + let visible = data_result_node.map_or(false, |n| n.data_result.is_visible(ctx)); let item_label = if entity_path.is_root() { "/ (root)".to_owned() @@ -573,12 +569,20 @@ impl Viewport<'_, '_> { .subdued(subdued) .force_hovered(is_item_hovered) .with_buttons(|re_ui: &_, ui: &mut egui::Ui| { - let vis_response = visibility_button_ui( - re_ui, - ui, - space_view_visible, - &mut recursive_properties.visible, - ); + let mut visible_after = visible; + let vis_response = + visibility_button_ui(re_ui, ui, space_view_visible, &mut visible_after); + if visible_after != visible { + if let Some(data_result_node) = data_result_node { + data_result_node + .data_result + .save_recursive_override_or_clear_if_redundant( + ctx, + &query_result.tree, + &Visible(visible_after), + ); + } + } let response = remove_button_ui( re_ui, @@ -602,7 +606,7 @@ impl Viewport<'_, '_> { let default_open = entity_path.starts_with(&space_view.space_origin) && Self::default_open_for_data_result(node); - let response = list_item + list_item .show_collapsing( ui, CollapseScope::BlueprintTree.data_result(space_view.id, entity_path.clone()), @@ -634,12 +638,7 @@ impl Viewport<'_, '_> { } }, ) - .item_response; - - node.data_result - .save_recursive_override(ctx, Some(recursive_properties)); - - response + .item_response } else { list_item.show(ui) }; diff --git a/examples/rust/custom_space_view/src/color_coordinates_visualizer_system.rs b/examples/rust/custom_space_view/src/color_coordinates_visualizer_system.rs index 690af975e98a..4d072495bf04 100644 --- a/examples/rust/custom_space_view/src/color_coordinates_visualizer_system.rs +++ b/examples/rust/custom_space_view/src/color_coordinates_visualizer_system.rs @@ -54,7 +54,7 @@ impl VisualizerSystem for InstanceColorSystem { _view_ctx: &ViewContextCollection, ) -> Result, SpaceViewSystemExecutionError> { // For each entity in the space view that should be displayed with the `InstanceColorSystem`… - for data_result in query.iter_visible_data_results(Self::identifier()) { + for data_result in query.iter_visible_data_results(ctx, Self::identifier()) { // …gather all colors and their instance ids. if let Ok(arch_view) = query_archetype::( ctx.entity_db.store(), From 458862b792297fce037301d013d9f44a6eebc6cf Mon Sep 17 00:00:00 2001 From: Jeremy Leibs Date: Fri, 15 Mar 2024 07:59:06 -0400 Subject: [PATCH 14/50] Convert the SpaceViewArchetype to use QueryExpression as a batch (#5516) ### What Working with lists of query expressions is generally much more ergonomic than wrangling newline separated strings in the blueprint APIs. ### Checklist * [x] I have read and agree to [Contributor Guide](https://github.com/rerun-io/rerun/blob/main/CONTRIBUTING.md) and the [Code of Conduct](https://github.com/rerun-io/rerun/blob/main/CODE_OF_CONDUCT.md) * [x] I've included a screenshot or gif (if applicable) * [x] I have tested the web demo (if applicable): * Using newly built examples: [app.rerun.io](https://app.rerun.io/pr/5516/index.html) * Using examples from latest `main` build: [app.rerun.io](https://app.rerun.io/pr/5516/index.html?manifest_url=https://app.rerun.io/version/main/examples_manifest.json) * Using full set of examples from `nightly` build: [app.rerun.io](https://app.rerun.io/pr/5516/index.html?manifest_url=https://app.rerun.io/version/nightly/examples_manifest.json) * [x] The PR title and labels are set such as to maximize their usefulness for the next release's CHANGELOG * [x] If applicable, add a new check to the [release checklist](https://github.com/rerun-io/rerun/blob/main/tests/python/release_checklist)! - [PR Build Summary](https://build.rerun.io/pr/5516) - [Docs preview](https://rerun.io/preview/8adae8bec4acb3de40258d08819073ec5e6b82fa/docs) - [Examples preview](https://rerun.io/preview/8adae8bec4acb3de40258d08819073ec5e6b82fa/examples) - [Recent benchmark results](https://build.rerun.io/graphs/crates.html) - [Wasm size tracking](https://build.rerun.io/graphs/sizes.html) --- .../src/path/entity_path_filter.rs | 34 +++++++--- .../re_space_view/src/space_view_contents.rs | 13 +++- .../archetypes/space_view_contents.fbs | 36 ++++++++++- .../blueprint/components/query_expression.fbs | 31 ++------- .../archetypes/space_view_contents.rs | 64 +++++++++++++++---- .../blueprint/components/query_expression.rs | 31 ++------- .../archetypes/space_view_contents.hpp | 38 ++++++++++- .../blueprint/components/query_expression.hpp | 31 ++------- rerun_py/rerun_sdk/rerun/blueprint/api.py | 22 ++----- .../archetypes/space_view_contents.py | 40 +++++++++++- .../blueprint/components/query_expression.py | 31 ++------- .../tests/unit/test_space_view_contents.py | 18 ++++-- 12 files changed, 227 insertions(+), 162 deletions(-) diff --git a/crates/re_log_types/src/path/entity_path_filter.rs b/crates/re_log_types/src/path/entity_path_filter.rs index b555d45023a3..7bd5fe36918d 100644 --- a/crates/re_log_types/src/path/entity_path_filter.rs +++ b/crates/re_log_types/src/path/entity_path_filter.rs @@ -1,5 +1,7 @@ use std::collections::BTreeMap; +use itertools::Itertools as _; + use crate::EntityPath; /// A way to filter a set of `EntityPath`s. @@ -101,10 +103,22 @@ impl EntityPathFilter { /// /// Conflicting rules are resolved by the last rule. pub fn parse_forgiving(rules: &str) -> Self { + Self::from_query_expressions(rules.split('\n')) + } + + /// Build a filter from a list of query expressions. + /// + /// Each item in the iterator should be a query expression. + /// + /// The first character should be `+` or `-`. If missing, `+` is assumed. + /// The rest of the expression is trimmed and treated as an entity path. + /// + /// Conflicting rules are resolved by the last rule. + pub fn from_query_expressions<'a>(rules: impl IntoIterator) -> Self { let mut filter = Self::default(); for line in rules - .split('\n') + .into_iter() .map(|line| line.trim()) .filter(|line| !line.is_empty()) { @@ -140,9 +154,9 @@ impl EntityPathFilter { self.rules.insert(rule, effect); } - pub fn formatted(&self) -> String { - let mut s = String::new(); - for (rule, effect) in &self.rules { + pub fn iter_expressions(&self) -> impl Iterator + '_ { + self.rules.iter().map(|(rule, effect)| { + let mut s = String::new(); s.push_str(match effect { RuleEffect::Include => "+ ", RuleEffect::Exclude => "- ", @@ -156,12 +170,12 @@ impl EntityPathFilter { s.push_str("/**"); } } - s.push('\n'); - } - if s.ends_with('\n') { - s.pop(); - } - s + s + }) + } + + pub fn formatted(&self) -> String { + self.iter_expressions().join("\n") } /// Find the most specific matching rule and return its effect. diff --git a/crates/re_space_view/src/space_view_contents.rs b/crates/re_space_view/src/space_view_contents.rs index c999d337e276..f885865edfa3 100644 --- a/crates/re_space_view/src/space_view_contents.rs +++ b/crates/re_space_view/src/space_view_contents.rs @@ -112,7 +112,9 @@ impl SpaceViewContents { Default::default() }); - let entity_path_filter = EntityPathFilter::parse_forgiving(query.0.as_str()); + let query = query.iter().map(|qe| qe.0.as_str()); + + let entity_path_filter = EntityPathFilter::from_query_expressions(query); Self { blueprint_entity_path, @@ -130,7 +132,9 @@ impl SpaceViewContents { pub fn save_to_blueprint_store(&self, ctx: &ViewerContext<'_>) { ctx.save_blueprint_archetype( self.blueprint_entity_path.clone(), - &blueprint_archetypes::SpaceViewContents::new(self.entity_path_filter.formatted()), + &blueprint_archetypes::SpaceViewContents::new( + self.entity_path_filter.iter_expressions(), + ), ); } @@ -145,7 +149,10 @@ impl SpaceViewContents { ctx.save_blueprint_component( &self.blueprint_entity_path, - &QueryExpression(new_entity_path_filter.formatted().into()), + &new_entity_path_filter + .iter_expressions() + .map(|s| QueryExpression(s.into())) + .collect::>(), ); } diff --git a/crates/re_types/definitions/rerun/blueprint/archetypes/space_view_contents.fbs b/crates/re_types/definitions/rerun/blueprint/archetypes/space_view_contents.fbs index e8da863a7cfb..95250bf0558b 100644 --- a/crates/re_types/definitions/rerun/blueprint/archetypes/space_view_contents.fbs +++ b/crates/re_types/definitions/rerun/blueprint/archetypes/space_view_contents.fbs @@ -8,14 +8,48 @@ namespace rerun.blueprint.archetypes; // --- /// The contents of a `SpaceView`. +/// +/// The contents are found by combining a collection of `QueryExpression`s. +/// +/// ```diff +/// + /world/** # add everything… +/// - /world/roads/** # …but remove all roads… +/// + /world/roads/main # …but show main road +/// ``` +/// +/// If there is multiple matching rules, the most specific rule wins. +/// If there are multiple rules of the same specificity, the last one wins. +/// If no rules match, the path is excluded. +/// +/// The `/**` suffix matches the whole subtree, i.e. self and any child, recursively +/// (`/world/**` matches both `/world` and `/world/car/driver`). +/// Other uses of `*` are not (yet) supported. +/// +/// Internally, `EntityPathFilter` sorts the rule by entity path, with recursive coming before non-recursive. +/// This means the last matching rule is also the most specific one. For instance: +/// ```diff +/// + /world/** +/// - /world +/// - /world/car/** +/// + /world/car/driver +/// ``` +/// +/// The last rule matching `/world/car/driver` is `+ /world/car/driver`, so it is included. +/// The last rule matching `/world/car/hood` is `- /world/car/**`, so it is excluded. +/// The last rule matching `/world` is `- /world`, so it is excluded. +/// The last rule matching `/world/house` is `+ /world/**`, so it is included. +/// +/// Unstable. Used for the ongoing blueprint experimentations. table SpaceViewContents ( "attr.rerun.scope": "blueprint", "attr.rust.derive": "Default" ) { // --- Required --- + // --- Optional --- + /// The `QueryExpression` that populates the contents for the `SpaceView`. /// /// They determine which entities are part of the spaceview. - query: rerun.blueprint.components.QueryExpression ("attr.rerun.component_required", order: 1000); + query: [rerun.blueprint.components.QueryExpression] ("attr.rerun.component_optional", order: 1000); } diff --git a/crates/re_types/definitions/rerun/blueprint/components/query_expression.fbs b/crates/re_types/definitions/rerun/blueprint/components/query_expression.fbs index 01d98798b5f8..12efe195ed8c 100644 --- a/crates/re_types/definitions/rerun/blueprint/components/query_expression.fbs +++ b/crates/re_types/definitions/rerun/blueprint/components/query_expression.fbs @@ -8,40 +8,17 @@ include "rerun/attributes.fbs"; namespace rerun.blueprint.components; // --- -/// A way to filter a set of `EntityPath`s. +/// An individual `QueryExpression` used to filter a set of `EntityPath`s. /// -/// This implements as simple set of include/exclude rules: +/// Each expression is either an inclusion or an exclusion expression. +/// Inclusions start with an optional `+` and exclusions must start with a `-`. /// -/// ```diff -/// + /world/** # add everything… -/// - /world/roads/** # …but remove all roads… -/// + /world/roads/main # …but show main road -/// ``` -/// -/// If there is multiple matching rules, the most specific rule wins. -/// If there are multiple rules of the same specificity, the last one wins. -/// If no rules match, the path is excluded. +/// Multiple expressions are combined together as part of `SpaceViewContents`. /// /// The `/**` suffix matches the whole subtree, i.e. self and any child, recursively /// (`/world/**` matches both `/world` and `/world/car/driver`). /// Other uses of `*` are not (yet) supported. /// -/// Internally, `EntityPathFilter` sorts the rule by entity path, with recursive coming before non-recursive. -/// This means the last matching rule is also the most specific one. -/// For instance: -/// -/// ```diff -/// + /world/** -/// - /world -/// - /world/car/** -/// + /world/car/driver -/// ``` -/// -/// The last rule matching `/world/car/driver` is `+ /world/car/driver`, so it is included. -/// The last rule matching `/world/car/hood` is `- /world/car/**`, so it is excluded. -/// The last rule matching `/world` is `- /world`, so it is excluded. -/// The last rule matching `/world/house` is `+ /world/**`, so it is included. -/// /// Unstable. Used for the ongoing blueprint experimentations. table QueryExpression ( "attr.rerun.scope": "blueprint", diff --git a/crates/re_types/src/blueprint/archetypes/space_view_contents.rs b/crates/re_types/src/blueprint/archetypes/space_view_contents.rs index 45a696c086cb..d2bae9513ae3 100644 --- a/crates/re_types/src/blueprint/archetypes/space_view_contents.rs +++ b/crates/re_types/src/blueprint/archetypes/space_view_contents.rs @@ -22,12 +22,44 @@ use ::re_types_core::{ComponentBatch, MaybeOwnedComponentBatch}; use ::re_types_core::{DeserializationError, DeserializationResult}; /// **Archetype**: The contents of a `SpaceView`. +/// +/// The contents are found by combining a collection of `QueryExpression`s. +/// +/// ```diff +/// + /world/** # add everything… +/// - /world/roads/** # …but remove all roads… +/// + /world/roads/main # …but show main road +/// ``` +/// +/// If there is multiple matching rules, the most specific rule wins. +/// If there are multiple rules of the same specificity, the last one wins. +/// If no rules match, the path is excluded. +/// +/// The `/**` suffix matches the whole subtree, i.e. self and any child, recursively +/// (`/world/**` matches both `/world` and `/world/car/driver`). +/// Other uses of `*` are not (yet) supported. +/// +/// Internally, `EntityPathFilter` sorts the rule by entity path, with recursive coming before non-recursive. +/// This means the last matching rule is also the most specific one. For instance: +/// ```diff +/// + /world/** +/// - /world +/// - /world/car/** +/// + /world/car/driver +/// ``` +/// +/// The last rule matching `/world/car/driver` is `+ /world/car/driver`, so it is included. +/// The last rule matching `/world/car/hood` is `- /world/car/**`, so it is excluded. +/// The last rule matching `/world` is `- /world`, so it is excluded. +/// The last rule matching `/world/house` is `+ /world/**`, so it is included. +/// +/// Unstable. Used for the ongoing blueprint experimentations. #[derive(Clone, Debug, Default)] pub struct SpaceViewContents { /// The `QueryExpression` that populates the contents for the `SpaceView`. /// /// They determine which entities are part of the spaceview. - pub query: crate::blueprint::components::QueryExpression, + pub query: Vec, } impl ::re_types_core::SizeBytes for SpaceViewContents { @@ -38,24 +70,29 @@ impl ::re_types_core::SizeBytes for SpaceViewContents { #[inline] fn is_pod() -> bool { - ::is_pod() + >::is_pod() } } -static REQUIRED_COMPONENTS: once_cell::sync::Lazy<[ComponentName; 1usize]> = - once_cell::sync::Lazy::new(|| ["rerun.blueprint.components.QueryExpression".into()]); +static REQUIRED_COMPONENTS: once_cell::sync::Lazy<[ComponentName; 0usize]> = + once_cell::sync::Lazy::new(|| []); static RECOMMENDED_COMPONENTS: once_cell::sync::Lazy<[ComponentName; 1usize]> = once_cell::sync::Lazy::new(|| ["rerun.blueprint.components.SpaceViewContentsIndicator".into()]); -static OPTIONAL_COMPONENTS: once_cell::sync::Lazy<[ComponentName; 1usize]> = - once_cell::sync::Lazy::new(|| ["rerun.components.InstanceKey".into()]); +static OPTIONAL_COMPONENTS: once_cell::sync::Lazy<[ComponentName; 2usize]> = + once_cell::sync::Lazy::new(|| { + [ + "rerun.blueprint.components.QueryExpression".into(), + "rerun.components.InstanceKey".into(), + ] + }); static ALL_COMPONENTS: once_cell::sync::Lazy<[ComponentName; 3usize]> = once_cell::sync::Lazy::new(|| { [ - "rerun.blueprint.components.QueryExpression".into(), "rerun.blueprint.components.SpaceViewContentsIndicator".into(), + "rerun.blueprint.components.QueryExpression".into(), "rerun.components.InstanceKey".into(), ] }); @@ -119,9 +156,8 @@ impl ::re_types_core::Archetype for SpaceViewContents { ::from_arrow_opt(&**array) .with_context("rerun.blueprint.archetypes.SpaceViewContents#query")? .into_iter() - .next() - .flatten() - .ok_or_else(DeserializationError::missing_data) + .map(|v| v.ok_or_else(DeserializationError::missing_data)) + .collect::>>() .with_context("rerun.blueprint.archetypes.SpaceViewContents#query")? }; Ok(Self { query }) @@ -143,14 +179,16 @@ impl ::re_types_core::AsComponents for SpaceViewContents { #[inline] fn num_instances(&self) -> usize { - 1 + 0 } } impl SpaceViewContents { - pub fn new(query: impl Into) -> Self { + pub fn new( + query: impl IntoIterator>, + ) -> Self { Self { - query: query.into(), + query: query.into_iter().map(Into::into).collect(), } } } diff --git a/crates/re_types/src/blueprint/components/query_expression.rs b/crates/re_types/src/blueprint/components/query_expression.rs index 98c0961e7200..fb0dddbec79c 100644 --- a/crates/re_types/src/blueprint/components/query_expression.rs +++ b/crates/re_types/src/blueprint/components/query_expression.rs @@ -21,40 +21,17 @@ use ::re_types_core::SerializationResult; use ::re_types_core::{ComponentBatch, MaybeOwnedComponentBatch}; use ::re_types_core::{DeserializationError, DeserializationResult}; -/// **Component**: A way to filter a set of `EntityPath`s. +/// **Component**: An individual `QueryExpression` used to filter a set of `EntityPath`s. /// -/// This implements as simple set of include/exclude rules: +/// Each expression is either an inclusion or an exclusion expression. +/// Inclusions start with an optional `+` and exclusions must start with a `-`. /// -/// ```diff -/// + /world/** # add everything… -/// - /world/roads/** # …but remove all roads… -/// + /world/roads/main # …but show main road -/// ``` -/// -/// If there is multiple matching rules, the most specific rule wins. -/// If there are multiple rules of the same specificity, the last one wins. -/// If no rules match, the path is excluded. +/// Multiple expressions are combined together as part of `SpaceViewContents`. /// /// The `/**` suffix matches the whole subtree, i.e. self and any child, recursively /// (`/world/**` matches both `/world` and `/world/car/driver`). /// Other uses of `*` are not (yet) supported. /// -/// Internally, `EntityPathFilter` sorts the rule by entity path, with recursive coming before non-recursive. -/// This means the last matching rule is also the most specific one. -/// For instance: -/// -/// ```diff -/// + /world/** -/// - /world -/// - /world/car/** -/// + /world/car/driver -/// ``` -/// -/// The last rule matching `/world/car/driver` is `+ /world/car/driver`, so it is included. -/// The last rule matching `/world/car/hood` is `- /world/car/**`, so it is excluded. -/// The last rule matching `/world` is `- /world`, so it is excluded. -/// The last rule matching `/world/house` is `+ /world/**`, so it is included. -/// /// Unstable. Used for the ongoing blueprint experimentations. #[derive(Clone, Debug, Default, PartialEq, Eq, PartialOrd, Ord)] #[repr(transparent)] diff --git a/rerun_cpp/src/rerun/blueprint/archetypes/space_view_contents.hpp b/rerun_cpp/src/rerun/blueprint/archetypes/space_view_contents.hpp index 3a7eeb186f0c..53ffc874c3d6 100644 --- a/rerun_cpp/src/rerun/blueprint/archetypes/space_view_contents.hpp +++ b/rerun_cpp/src/rerun/blueprint/archetypes/space_view_contents.hpp @@ -15,11 +15,43 @@ namespace rerun::blueprint::archetypes { /// **Archetype**: The contents of a `SpaceView`. + /// + /// The contents are found by combining a collection of `QueryExpression`s. + /// + /// ```diff + /// + /world/** # add everything… + /// - /world/roads/** # …but remove all roads… + /// + /world/roads/main # …but show main road + /// ``` + /// + /// If there is multiple matching rules, the most specific rule wins. + /// If there are multiple rules of the same specificity, the last one wins. + /// If no rules match, the path is excluded. + /// + /// The `/**` suffix matches the whole subtree, i.e. self and any child, recursively + /// (`/world/**` matches both `/world` and `/world/car/driver`). + /// Other uses of `*` are not (yet) supported. + /// + /// Internally, `EntityPathFilter` sorts the rule by entity path, with recursive coming before non-recursive. + /// This means the last matching rule is also the most specific one. For instance: + /// ```diff + /// + /world/** + /// - /world + /// - /world/car/** + /// + /world/car/driver + /// ``` + /// + /// The last rule matching `/world/car/driver` is `+ /world/car/driver`, so it is included. + /// The last rule matching `/world/car/hood` is `- /world/car/**`, so it is excluded. + /// The last rule matching `/world` is `- /world`, so it is excluded. + /// The last rule matching `/world/house` is `+ /world/**`, so it is included. + /// + /// Unstable. Used for the ongoing blueprint experimentations. struct SpaceViewContents { /// The `QueryExpression` that populates the contents for the `SpaceView`. /// /// They determine which entities are part of the spaceview. - rerun::blueprint::components::QueryExpression query; + Collection query; public: static constexpr const char IndicatorComponentName[] = @@ -32,12 +64,12 @@ namespace rerun::blueprint::archetypes { SpaceViewContents() = default; SpaceViewContents(SpaceViewContents&& other) = default; - explicit SpaceViewContents(rerun::blueprint::components::QueryExpression _query) + explicit SpaceViewContents(Collection _query) : query(std::move(_query)) {} /// Returns the number of primary instances of this archetype. size_t num_instances() const { - return 1; + return query.size(); } }; diff --git a/rerun_cpp/src/rerun/blueprint/components/query_expression.hpp b/rerun_cpp/src/rerun/blueprint/components/query_expression.hpp index cf4b3e3a8277..2ed83df16a81 100644 --- a/rerun_cpp/src/rerun/blueprint/components/query_expression.hpp +++ b/rerun_cpp/src/rerun/blueprint/components/query_expression.hpp @@ -18,40 +18,17 @@ namespace arrow { } // namespace arrow namespace rerun::blueprint::components { - /// **Component**: A way to filter a set of `EntityPath`s. + /// **Component**: An individual `QueryExpression` used to filter a set of `EntityPath`s. /// - /// This implements as simple set of include/exclude rules: + /// Each expression is either an inclusion or an exclusion expression. + /// Inclusions start with an optional `+` and exclusions must start with a `-`. /// - /// ```diff - /// + /world/** # add everything… - /// - /world/roads/** # …but remove all roads… - /// + /world/roads/main # …but show main road - /// ``` - /// - /// If there is multiple matching rules, the most specific rule wins. - /// If there are multiple rules of the same specificity, the last one wins. - /// If no rules match, the path is excluded. + /// Multiple expressions are combined together as part of `SpaceViewContents`. /// /// The `/**` suffix matches the whole subtree, i.e. self and any child, recursively /// (`/world/**` matches both `/world` and `/world/car/driver`). /// Other uses of `*` are not (yet) supported. /// - /// Internally, `EntityPathFilter` sorts the rule by entity path, with recursive coming before non-recursive. - /// This means the last matching rule is also the most specific one. - /// For instance: - /// - /// ```diff - /// + /world/** - /// - /world - /// - /world/car/** - /// + /world/car/driver - /// ``` - /// - /// The last rule matching `/world/car/driver` is `+ /world/car/driver`, so it is included. - /// The last rule matching `/world/car/hood` is `- /world/car/**`, so it is excluded. - /// The last rule matching `/world` is `- /world`, so it is excluded. - /// The last rule matching `/world/house` is `+ /world/**`, so it is included. - /// /// Unstable. Used for the ongoing blueprint experimentations. struct QueryExpression { rerun::datatypes::Utf8 filter; diff --git a/rerun_py/rerun_sdk/rerun/blueprint/api.py b/rerun_py/rerun_sdk/rerun/blueprint/api.py index ae031e3ded94..3b5696df18b6 100644 --- a/rerun_py/rerun_sdk/rerun/blueprint/api.py +++ b/rerun_py/rerun_sdk/rerun/blueprint/api.py @@ -2,18 +2,18 @@ import itertools import uuid -from typing import Iterable, Optional, Sequence, Union +from typing import Iterable, Optional, Union import rerun_bindings as bindings -from ..datatypes import EntityPathLike, Utf8Like +from ..datatypes import EntityPathLike, Utf8ArrayLike, Utf8Like from ..recording import MemoryRecording from ..recording_stream import RecordingStream from .archetypes import ContainerBlueprint, PanelBlueprint, SpaceViewBlueprint, SpaceViewContents, ViewportBlueprint from .components import ColumnShareArrayLike, RowShareArrayLike from .components.container_kind import ContainerKindLike -SpaceViewContentsLike = Union[str, Sequence[str], Utf8Like, SpaceViewContents] +SpaceViewContentsLike = Union[Utf8ArrayLike, SpaceViewContents] class SpaceView: @@ -80,21 +80,11 @@ def to_blueprint(self) -> Blueprint: def _log_to_stream(self, stream: RecordingStream) -> None: """Internal method to convert to an archetype and log to the stream.""" - # Handle the cases for SpaceViewContentsLike - # TODO(#5483): Move this into a QueryExpressionExt class. - # This is a little bit tricky since QueryExpression is a delegating component for Utf8, - # and delegating components make extending things in this way a bit more complicated. - if isinstance(self.contents, str): - # str - contents = SpaceViewContents(query=self.contents) - elif isinstance(self.contents, Sequence) and len(self.contents) > 0 and isinstance(self.contents[0], str): - # list[str] - contents = SpaceViewContents(query="\n".join(self.contents)) - elif isinstance(self.contents, SpaceViewContents): - # SpaceViewContents + if isinstance(self.contents, SpaceViewContents): + # If contents is already a SpaceViewContents, we can just use it directly contents = self.contents else: - # Anything else we let SpaceViewContents handle + # Otherwise we delegate to the SpaceViewContents constructor contents = SpaceViewContents(query=self.contents) # type: ignore[arg-type] stream.log(self.blueprint_path() + "/SpaceViewContents", contents) # type: ignore[attr-defined] diff --git a/rerun_py/rerun_sdk/rerun/blueprint/archetypes/space_view_contents.py b/rerun_py/rerun_sdk/rerun/blueprint/archetypes/space_view_contents.py index 3f38a598acbe..dd1ee215cc54 100644 --- a/rerun_py/rerun_sdk/rerun/blueprint/archetypes/space_view_contents.py +++ b/rerun_py/rerun_sdk/rerun/blueprint/archetypes/space_view_contents.py @@ -19,9 +19,43 @@ @define(str=False, repr=False, init=False) class SpaceViewContents(Archetype): - """**Archetype**: The contents of a `SpaceView`.""" - - def __init__(self: Any, query: datatypes.Utf8Like): + """ + **Archetype**: The contents of a `SpaceView`. + + The contents are found by combining a collection of `QueryExpression`s. + + ```diff + + /world/** # add everything… + - /world/roads/** # …but remove all roads… + + /world/roads/main # …but show main road + ``` + + If there is multiple matching rules, the most specific rule wins. + If there are multiple rules of the same specificity, the last one wins. + If no rules match, the path is excluded. + + The `/**` suffix matches the whole subtree, i.e. self and any child, recursively + (`/world/**` matches both `/world` and `/world/car/driver`). + Other uses of `*` are not (yet) supported. + + Internally, `EntityPathFilter` sorts the rule by entity path, with recursive coming before non-recursive. + This means the last matching rule is also the most specific one. For instance: + ```diff + + /world/** + - /world + - /world/car/** + + /world/car/driver + ``` + + The last rule matching `/world/car/driver` is `+ /world/car/driver`, so it is included. + The last rule matching `/world/car/hood` is `- /world/car/**`, so it is excluded. + The last rule matching `/world` is `- /world`, so it is excluded. + The last rule matching `/world/house` is `+ /world/**`, so it is included. + + Unstable. Used for the ongoing blueprint experimentations. + """ + + def __init__(self: Any, query: datatypes.Utf8ArrayLike): """ Create a new instance of the SpaceViewContents archetype. diff --git a/rerun_py/rerun_sdk/rerun/blueprint/components/query_expression.py b/rerun_py/rerun_sdk/rerun/blueprint/components/query_expression.py index 063e11ffbff8..ab9a59cfd592 100644 --- a/rerun_py/rerun_sdk/rerun/blueprint/components/query_expression.py +++ b/rerun_py/rerun_sdk/rerun/blueprint/components/query_expression.py @@ -13,40 +13,17 @@ class QueryExpression(datatypes.Utf8): """ - **Component**: A way to filter a set of `EntityPath`s. + **Component**: An individual `QueryExpression` used to filter a set of `EntityPath`s. - This implements as simple set of include/exclude rules: + Each expression is either an inclusion or an exclusion expression. + Inclusions start with an optional `+` and exclusions must start with a `-`. - ```diff - + /world/** # add everything… - - /world/roads/** # …but remove all roads… - + /world/roads/main # …but show main road - ``` - - If there is multiple matching rules, the most specific rule wins. - If there are multiple rules of the same specificity, the last one wins. - If no rules match, the path is excluded. + Multiple expressions are combined together as part of `SpaceViewContents`. The `/**` suffix matches the whole subtree, i.e. self and any child, recursively (`/world/**` matches both `/world` and `/world/car/driver`). Other uses of `*` are not (yet) supported. - Internally, `EntityPathFilter` sorts the rule by entity path, with recursive coming before non-recursive. - This means the last matching rule is also the most specific one. - For instance: - - ```diff - + /world/** - - /world - - /world/car/** - + /world/car/driver - ``` - - The last rule matching `/world/car/driver` is `+ /world/car/driver`, so it is included. - The last rule matching `/world/car/hood` is `- /world/car/**`, so it is excluded. - The last rule matching `/world` is `- /world`, so it is excluded. - The last rule matching `/world/house` is `+ /world/**`, so it is included. - Unstable. Used for the ongoing blueprint experimentations. """ diff --git a/rerun_py/tests/unit/test_space_view_contents.py b/rerun_py/tests/unit/test_space_view_contents.py index 36ead02d1e83..4ed50b269959 100644 --- a/rerun_py/tests/unit/test_space_view_contents.py +++ b/rerun_py/tests/unit/test_space_view_contents.py @@ -5,11 +5,20 @@ from rerun.blueprint.archetypes.space_view_contents import SpaceViewContents from rerun.blueprint.components.query_expression import QueryExpression, QueryExpressionBatch -from rerun.datatypes.utf8 import Utf8Like +from rerun.datatypes.utf8 import Utf8ArrayLike def test_space_view_contents() -> None: - query_array = ["+ /**\n- /robot", QueryExpression("+ /**\n- /robot")] + query_array = [ + [ + "+ /**", + "- /robot", + ], + [ + QueryExpression("+ /**"), + QueryExpression("- /robot"), + ], + ] all_arrays = itertools.zip_longest( query_array, @@ -19,7 +28,7 @@ def test_space_view_contents() -> None: # query = query if query is not None else query_array[-1] # mypy can't track types properly through itertools zip so re-cast - query = cast(Utf8Like, query) + query = cast(Utf8ArrayLike, query) print( "rr.SpaceViewContents(\n", @@ -29,7 +38,6 @@ def test_space_view_contents() -> None: arch = SpaceViewContents( query, ) - print(f"{arch}\n") # Equality checks on some of these are a bit silly, but at least they test out that the serialization code runs without problems. - assert arch.query == QueryExpressionBatch("+ /**\n- /robot") + assert arch.query == QueryExpressionBatch(["+ /**", "- /robot"]) From 1509aae72e1d30f974355624bd0433754cffe7b9 Mon Sep 17 00:00:00 2001 From: Jeremy Leibs Date: Fri, 15 Mar 2024 10:24:35 -0400 Subject: [PATCH 15/50] Fix the names of the links in types.md (#5526) ### What Some names that never got updated. ### Checklist * [x] I have read and agree to [Contributor Guide](https://github.com/rerun-io/rerun/blob/main/CONTRIBUTING.md) and the [Code of Conduct](https://github.com/rerun-io/rerun/blob/main/CODE_OF_CONDUCT.md) * [x] I've included a screenshot or gif (if applicable) * [x] I have tested the web demo (if applicable): * Using newly built examples: [app.rerun.io](https://app.rerun.io/pr/5526/index.html) * Using examples from latest `main` build: [app.rerun.io](https://app.rerun.io/pr/5526/index.html?manifest_url=https://app.rerun.io/version/main/examples_manifest.json) * Using full set of examples from `nightly` build: [app.rerun.io](https://app.rerun.io/pr/5526/index.html?manifest_url=https://app.rerun.io/version/nightly/examples_manifest.json) * [x] The PR title and labels are set such as to maximize their usefulness for the next release's CHANGELOG * [x] If applicable, add a new check to the [release checklist](https://github.com/rerun-io/rerun/blob/main/tests/python/release_checklist)! - [PR Build Summary](https://build.rerun.io/pr/5526) - [Docs preview](https://rerun.io/preview/926bf84385cac680b0d98a59977a0e1676fb3513/docs) - [Examples preview](https://rerun.io/preview/926bf84385cac680b0d98a59977a0e1676fb3513/examples) - [Recent benchmark results](https://build.rerun.io/graphs/crates.html) - [Wasm size tracking](https://build.rerun.io/graphs/sizes.html) --- docs/content/reference/types.md | 57 +++++++++++++++++---------------- 1 file changed, 30 insertions(+), 27 deletions(-) diff --git a/docs/content/reference/types.md b/docs/content/reference/types.md index b2057e0c9da5..d6286a445256 100644 --- a/docs/content/reference/types.md +++ b/docs/content/reference/types.md @@ -12,49 +12,52 @@ For more information on the relationship between **archetypes** and **components on [Entities and Components](../concepts/entity-component.md). ## Spatial **Archetypes** + The spatial archetypes represent 2D and 3D spatial data. These types have some notion of a coordinate system and generally support spatial transformations. These types can be visualized by 2D and 3D space views. To visualize a 2D entity in a 3D space view it must be under a pinhole transformation. To visualize a 3D entity in a 2D space view, the 2D's origin must be at a pinhole transform and all 3D objects are above it. -* [Arrow3D](types/archetypes/arrows3d.md) -* [Asset](types/archetypes/asset3d.md) -* [Box2D](types/archetypes/boxes2d.md) -* [Box3D](types/archetypes/boxes3d.md) -* [LineStrip2D](types/archetypes/line_strips2d.md) -* [LineStrip3D](types/archetypes/line_strips3d.md) -* [Mesh](types/archetypes/mesh3d.md) -* [Point2D](types/archetypes/points2d.md) -* [Point3D](types/archetypes/points3d.md) +- [Arrows3D](types/archetypes/arrows3d.md) +- [Asset3D](types/archetypes/asset3d.md) +- [Boxes2D](types/archetypes/boxes2d.md) +- [Boxes3D](types/archetypes/boxes3d.md) +- [LineStrips2D](types/archetypes/line_strips2d.md) +- [LineStrips3D](types/archetypes/line_strips3d.md) +- [Mesh3D](types/archetypes/mesh3d.md) +- [Points2D](types/archetypes/points2d.md) +- [Points3D](types/archetypes/points3d.md) ### Spatial transformations -* [Transform3D](types/archetypes/transform3d.md) -* [Pinhole](types/archetypes/pinhole.md) -* [DisconnectedSpace](types/archetypes/disconnected_space.md): disconnect an entity path from its parent. - +- [Transform3D](types/archetypes/transform3d.md) +- [Pinhole](types/archetypes/pinhole.md) +- [DisconnectedSpace](types/archetypes/disconnected_space.md): disconnect an entity path from its parent. ## Image & Tensor **Archetypes** + Image and tensor archetypes all build on top of a common tensor component. The tensor component is a multi-dimensional generic container for arrays of data. Images are restricted to tensors of rank 2 or rank 3; these can be viewed in the `Spatial` space view. Generic tensors of greater rank can only be viewed in the specialized `Tensor` space view. -* [Image](types/archetypes/image.md) -* [DepthImage](types/archetypes/depth_image.md) -* [SegmentationImage](types/archetypes/segmentation_image.md) -* [Tensor](types/archetypes/tensor.md) + +- [Image](types/archetypes/image.md) +- [DepthImage](types/archetypes/depth_image.md) +- [SegmentationImage](types/archetypes/segmentation_image.md) +- [Tensor](types/archetypes/tensor.md) ## Time Series **Archetypes** -* [Scalar](types/archetypes/scalar.md): a single scalar / metric value. -* [SeriesPoint](types/archetypes/series_point.md): define the style properties for a point series in a chart. -* [SeriesLine](types/archetypes/series_line.md): define the style properties for a line series in a chart. -* [TimeSeriesScalar (deprecated)](types/archetypes/time_series_scalar.md): a single scalar / metric value as well as styling options. Can be viewed in the `TimeSeries` space view. + +- [Scalar](types/archetypes/scalar.md): a single scalar / metric value. +- [SeriesPoint](types/archetypes/series_point.md): define the style properties for a point series in a chart. +- [SeriesLine](types/archetypes/series_line.md): define the style properties for a line series in a chart. +- [TimeSeriesScalar (deprecated)](types/archetypes/time_series_scalar.md): a single scalar / metric value as well as styling options. Can be viewed in the `TimeSeries` space view. ## Other **Archetypes** -* [AnnotationContext](types/archetypes/annotation_context.md): not viewed directly, but provides classes, labels, and connectivity information for other entities. -* [BarChart](types/archetypes/bar_chart.md): data displayed in a `BarChart` space view. -* [Clear](types/archetypes/clear.md): clear all components of an entity. -* [TextDocument](types/archetypes/text_document.md): text displayed in a `TextDocument` space view. -* [TextLog](types/archetypes/text_log.md): a log entry in a `TextLog` space view. -* [ViewCoordinates](types/archetypes/view_coordinates.md): determines how we interpret the coordinate system of an entity/space. +- [AnnotationContext](types/archetypes/annotation_context.md): not viewed directly, but provides classes, labels, and connectivity information for other entities. +- [BarChart](types/archetypes/bar_chart.md): data displayed in a `BarChart` space view. +- [Clear](types/archetypes/clear.md): clear all components of an entity. +- [TextDocument](types/archetypes/text_document.md): text displayed in a `TextDocument` space view. +- [TextLog](types/archetypes/text_log.md): a log entry in a `TextLog` space view. +- [ViewCoordinates](types/archetypes/view_coordinates.md): determines how we interpret the coordinate system of an entity/space. From ce407eb3480fb19a84d956fa283e1eb650831b1f Mon Sep 17 00:00:00 2001 From: Jeremy Leibs Date: Fri, 15 Mar 2024 10:49:40 -0400 Subject: [PATCH 16/50] Introduce basic support for $origin substitution in EntityPathFilter (#5517) ### What - Initial implementation of: https://github.com/rerun-io/rerun/issues/5288 - Builds on top of: https://github.com/rerun-io/rerun/pull/5516 This is a very dumb first stab at doing variable substitution. - Rather than parse the string to extract potential `$vars` it uses the input environment and blindly tries to substitute all the vars it knows about (currently only `origin`). - The biggest downside of this is we get no feedback when a variable fails to substitute. - There's just enough future complexity handling edge-cases (e.g. mismatched `{`, variable-termination, nested substitutions, etc.) that it might be worth pulling in a proper utility library, though I don't know if there's an obvious rust ecosystem choice here. Working through this uncovered some complexities regarding what we store in different parts of the blueprint. For example, if we do the full substitution immediately when construction the EntityPathFilter, then we can't use that Filter to re-create the query with the variable substitutions. Additionally, we need to know about these substitutions all the way back when evaluating whether we want to keep RecommendedSpaceViews because we need the substitutions applied to do the overlap-checking. I suspect the direction we might want to go in is to split EntityPathFilter into a non-substituted representation, from which we can create a version that executes the substitutions, but I'm not yet sure what the storage should look like. For example, do we just create full `EntityPath`s that contain EntityPathParts with "$origin" in them and then run the substitution on the EntityPath? ### Checklist * [x] I have read and agree to [Contributor Guide](https://github.com/rerun-io/rerun/blob/main/CONTRIBUTING.md) and the [Code of Conduct](https://github.com/rerun-io/rerun/blob/main/CODE_OF_CONDUCT.md) * [x] I've included a screenshot or gif (if applicable) * [x] I have tested the web demo (if applicable): * Using newly built examples: [app.rerun.io](https://app.rerun.io/pr/5517/index.html) * Using examples from latest `main` build: [app.rerun.io](https://app.rerun.io/pr/5517/index.html?manifest_url=https://app.rerun.io/version/main/examples_manifest.json) * Using full set of examples from `nightly` build: [app.rerun.io](https://app.rerun.io/pr/5517/index.html?manifest_url=https://app.rerun.io/version/nightly/examples_manifest.json) * [x] The PR title and labels are set such as to maximize their usefulness for the next release's CHANGELOG * [x] If applicable, add a new check to the [release checklist](https://github.com/rerun-io/rerun/blob/main/tests/python/release_checklist)! - [PR Build Summary](https://build.rerun.io/pr/5517) - [Docs preview](https://rerun.io/preview/82c517d5786790176b78fdfbff4a5e261a25f7f0/docs) - [Examples preview](https://rerun.io/preview/82c517d5786790176b78fdfbff4a5e261a25f7f0/examples) - [Recent benchmark results](https://build.rerun.io/graphs/crates.html) - [Wasm size tracking](https://build.rerun.io/graphs/sizes.html) --- .../src/path/entity_path_filter.rs | 137 +++++++++++++++--- crates/re_log_types/src/path/mod.rs | 2 +- crates/re_space_view/src/heuristics.rs | 6 +- crates/re_space_view/src/space_view.rs | 48 +++--- .../re_space_view/src/space_view_contents.rs | 11 +- .../src/space_view_2d.rs | 14 +- .../src/space_view_3d.rs | 15 +- .../src/space_view_class.rs | 7 +- .../src/space_view_class.rs | 12 +- crates/re_viewer/src/ui/selection_panel.rs | 2 +- .../src/space_view/spawn_heuristics.rs | 32 +++- .../src/add_space_view_or_container_modal.rs | 7 +- .../actions/add_entities_to_new_space_view.rs | 19 ++- .../context_menu/actions/add_space_view.rs | 6 +- .../re_viewport/src/space_view_heuristics.rs | 8 +- crates/re_viewport/src/viewport_blueprint.rs | 6 +- examples/python/plots/main.py | 20 ++- .../src/color_coordinates_space_view.rs | 7 +- .../rerun_sdk/rerun/blueprint/space_views.py | 42 +++++- 19 files changed, 266 insertions(+), 135 deletions(-) diff --git a/crates/re_log_types/src/path/entity_path_filter.rs b/crates/re_log_types/src/path/entity_path_filter.rs index 7bd5fe36918d..779e0a9fadc5 100644 --- a/crates/re_log_types/src/path/entity_path_filter.rs +++ b/crates/re_log_types/src/path/entity_path_filter.rs @@ -1,9 +1,21 @@ use std::collections::BTreeMap; +use ahash::HashMap; use itertools::Itertools as _; use crate::EntityPath; +/// A set of substitutions for entity paths. +#[derive(Default)] +pub struct EntityPathSubs(pub HashMap); + +impl EntityPathSubs { + /// Create a new set of substitutions from a single origin. + pub fn new_with_origin(origin: &EntityPath) -> Self { + Self(std::iter::once(("origin".to_owned(), origin.to_string())).collect()) + } +} + /// A way to filter a set of `EntityPath`s. /// /// This implements as simple set of include/exclude rules: @@ -54,14 +66,26 @@ impl std::fmt::Debug for EntityPathFilter { } } -#[derive(Clone, Debug, PartialEq, Eq)] +#[derive(Clone, Debug)] pub struct EntityPathRule { + // We need to store the raw expression to be able to round-trip the filter + // when it contains substitutions. + pub raw_expression: String, + pub path: EntityPath, /// If true, ALSO include children and grandchildren of this path (recursive rule). pub include_subtree: bool, } +impl PartialEq for EntityPathRule { + fn eq(&self, other: &Self) -> bool { + self.raw_expression == other.raw_expression + } +} + +impl Eq for EntityPathRule {} + #[derive(Clone, Copy, Debug, PartialEq, Eq)] pub enum RuleEffect { Include, @@ -102,8 +126,8 @@ impl EntityPathFilter { /// The rest of the line is trimmed and treated as an entity path. /// /// Conflicting rules are resolved by the last rule. - pub fn parse_forgiving(rules: &str) -> Self { - Self::from_query_expressions(rules.split('\n')) + pub fn parse_forgiving(rules: &str, subst_env: &EntityPathSubs) -> Self { + Self::from_query_expressions(rules.split('\n'), subst_env) } /// Build a filter from a list of query expressions. @@ -114,7 +138,10 @@ impl EntityPathFilter { /// The rest of the expression is trimmed and treated as an entity path. /// /// Conflicting rules are resolved by the last rule. - pub fn from_query_expressions<'a>(rules: impl IntoIterator) -> Self { + pub fn from_query_expressions<'a>( + rules: impl IntoIterator, + subst_env: &EntityPathSubs, + ) -> Self { let mut filter = Self::default(); for line in rules @@ -128,7 +155,7 @@ impl EntityPathFilter { _ => (RuleEffect::Include, line), }; - let rule = EntityPathRule::parse_forgiving(path_pattern); + let rule = EntityPathRule::parse_forgiving(path_pattern, subst_env); filter.add_rule(effect, rule); } @@ -161,15 +188,7 @@ impl EntityPathFilter { RuleEffect::Include => "+ ", RuleEffect::Exclude => "- ", }); - if rule.path.is_root() && rule.include_subtree { - // needs special casing, otherwise we end up with `//**` - s.push_str("/**"); - } else { - s.push_str(&rule.path.to_string()); - if rule.include_subtree { - s.push_str("/**"); - } - } + s.push_str(&rule.raw_expression); s }) } @@ -360,6 +379,7 @@ impl EntityPathRule { #[inline] pub fn exact(path: EntityPath) -> Self { Self { + raw_expression: path.to_string(), path, include_subtree: false, } @@ -369,26 +389,40 @@ impl EntityPathRule { #[inline] pub fn including_subtree(path: EntityPath) -> Self { Self { + raw_expression: format!("{path}/**",), path, include_subtree: true, } } - pub fn parse_forgiving(expression: &str) -> Self { - let expression = expression.trim(); + pub fn parse_forgiving(expression: &str, subst_env: &EntityPathSubs) -> Self { + let raw_expression = expression.trim().to_owned(); + + // TODO(#5528): This is a very naive implementation of variable substitution. + // unclear if we want to do this here, push this down into `EntityPath::parse`, + // or even supported deferred evaluation on the `EntityPath` itself. + let mut expression_sub = raw_expression.clone(); + for (key, value) in &subst_env.0 { + expression_sub = expression_sub.replace(format!("${key}").as_str(), value); + expression_sub = expression_sub.replace(format!("${{{key}}}").as_str(), value); + } + if expression == "/**" { Self { + raw_expression, path: EntityPath::root(), include_subtree: true, } - } else if let Some(path) = expression.strip_suffix("/**") { + } else if let Some(path) = expression_sub.strip_suffix("/**") { Self { + raw_expression, path: EntityPath::parse_forgiving(path), include_subtree: true, } } else { Self { - path: EntityPath::parse_forgiving(expression), + raw_expression, + path: EntityPath::parse_forgiving(&expression_sub), include_subtree: false, } } @@ -421,10 +455,12 @@ impl std::cmp::PartialOrd for EntityPathRule { #[cfg(test)] mod tests { - use crate::{EntityPath, EntityPathFilter, EntityPathRule, RuleEffect}; + use crate::{EntityPath, EntityPathFilter, EntityPathRule, EntityPathSubs, RuleEffect}; #[test] fn test_rule_order() { + let subst_env = Default::default(); + use std::cmp::Ordering; fn check_total_order(rules: &[EntityPathRule]) { @@ -459,12 +495,14 @@ mod tests { "/world/car/driver", "/x/y/z", ]; - let rules = rules.map(EntityPathRule::parse_forgiving); + let rules = rules.map(|rule| EntityPathRule::parse_forgiving(rule, &subst_env)); check_total_order(&rules); } #[test] fn test_entity_path_filter() { + let subst_env = Default::default(); + let filter = EntityPathFilter::parse_forgiving( r#" + /world/** @@ -472,6 +510,7 @@ mod tests { - /world/car/** + /world/car/driver "#, + &subst_env, ); for (path, expected_effect) in [ @@ -491,13 +530,59 @@ mod tests { } assert_eq!( - EntityPathFilter::parse_forgiving("/**").formatted(), + EntityPathFilter::parse_forgiving("/**", &subst_env).formatted(), + "+ /**" + ); + } + + #[test] + fn test_entity_path_filter_subs() { + // Make sure we use a string longer than `$origin` here. + // We can't do in-place substitution. + let subst_env = EntityPathSubs::new_with_origin(&EntityPath::from("/annoyingly/long/path")); + + let filter = EntityPathFilter::parse_forgiving( + r#" + + $origin/** + - $origin + - $origin/car/** + + $origin/car/driver + "#, + &subst_env, + ); + + for (path, expected_effect) in [ + ("/unworldly", None), + ("/annoyingly/long/path", Some(RuleEffect::Exclude)), + ("/annoyingly/long/path/house", Some(RuleEffect::Include)), + ("/annoyingly/long/path/car", Some(RuleEffect::Exclude)), + ("/annoyingly/long/path/car/hood", Some(RuleEffect::Exclude)), + ( + "/annoyingly/long/path/car/driver", + Some(RuleEffect::Include), + ), + ( + "/annoyingly/long/path/car/driver/head", + Some(RuleEffect::Exclude), + ), + ] { + assert_eq!( + filter.most_specific_match(&EntityPath::from(path)), + expected_effect, + "path: {path:?}", + ); + } + + assert_eq!( + EntityPathFilter::parse_forgiving("/**", &subst_env).formatted(), "+ /**" ); } #[test] fn test_entity_path_filter_subtree() { + let subst_env = Default::default(); + let filter = EntityPathFilter::parse_forgiving( r#" + /world/** @@ -507,6 +592,7 @@ mod tests { - /world/city - /world/houses/** "#, + &subst_env, ); for (path, expected) in [ @@ -533,6 +619,8 @@ mod tests { #[test] fn test_is_superset_of() { + let subst_env = Default::default(); + struct TestCase { filter: &'static str, contains: Vec<&'static str>, @@ -594,9 +682,9 @@ mod tests { ]; for case in &cases { - let filter = EntityPathFilter::parse_forgiving(case.filter); + let filter = EntityPathFilter::parse_forgiving(case.filter, &subst_env); for contains in &case.contains { - let contains_filter = EntityPathFilter::parse_forgiving(contains); + let contains_filter = EntityPathFilter::parse_forgiving(contains, &subst_env); assert!( filter.is_superset_of(&contains_filter), "Expected {:?} to fully contain {:?}, but it didn't", @@ -605,7 +693,8 @@ mod tests { ); } for not_contains in &case.not_contains { - let not_contains_filter = EntityPathFilter::parse_forgiving(not_contains); + let not_contains_filter = + EntityPathFilter::parse_forgiving(not_contains, &subst_env); assert!( !filter.is_superset_of(¬_contains_filter), "Expected {:?} to NOT fully contain {:?}, but it did", diff --git a/crates/re_log_types/src/path/mod.rs b/crates/re_log_types/src/path/mod.rs index 0ba2fe95aa98..fa394a720003 100644 --- a/crates/re_log_types/src/path/mod.rs +++ b/crates/re_log_types/src/path/mod.rs @@ -14,7 +14,7 @@ mod parse_path; pub use component_path::ComponentPath; pub use data_path::DataPath; pub use entity_path::{EntityPath, EntityPathHash}; -pub use entity_path_filter::{EntityPathFilter, EntityPathRule, RuleEffect}; +pub use entity_path_filter::{EntityPathFilter, EntityPathRule, EntityPathSubs, RuleEffect}; pub use entity_path_part::EntityPathPart; pub use parse_path::PathParseError; diff --git a/crates/re_space_view/src/heuristics.rs b/crates/re_space_view/src/heuristics.rs index cce353e33a97..264ccfb51d84 100644 --- a/crates/re_space_view/src/heuristics.rs +++ b/crates/re_space_view/src/heuristics.rs @@ -1,4 +1,3 @@ -use re_log_types::EntityPathFilter; use re_viewer_context::{ ApplicableEntities, IdentifiedViewSystem, RecommendedSpaceView, SpaceViewClass, SpaceViewSpawnHeuristics, ViewerContext, VisualizerSystem, @@ -44,10 +43,7 @@ where { None } else { - Some(RecommendedSpaceView { - root: entity.clone(), - query_filter: EntityPathFilter::single_entity_filter(entity), - }) + Some(RecommendedSpaceView::new_single_entity(entity.clone())) } }) .collect(); diff --git a/crates/re_space_view/src/space_view.rs b/crates/re_space_view/src/space_view.rs index 821f62597b96..18d39498c7c8 100644 --- a/crates/re_space_view/src/space_view.rs +++ b/crates/re_space_view/src/space_view.rs @@ -4,7 +4,7 @@ use re_entity_db::{EntityDb, EntityPath, EntityProperties, VisibleHistory}; use re_entity_db::{EntityPropertiesComponent, EntityPropertyMap}; use crate::SpaceViewContents; -use re_log_types::{DataRow, EntityPathFilter, RowId}; +use re_log_types::{DataRow, EntityPathSubs, RowId}; use re_query::query_archetype; use re_types::blueprint::archetypes as blueprint_archetypes; use re_types::{ @@ -15,8 +15,9 @@ use re_types_core::archetypes::Clear; use re_types_core::Archetype as _; use re_viewer_context::{ blueprint_timepoint_for_writes, DataResult, PerSystemEntities, PropertyOverrides, - SpaceViewClass, SpaceViewClassIdentifier, SpaceViewId, SpaceViewState, StoreContext, - SystemCommand, SystemCommandSender as _, SystemExecutionOutput, ViewQuery, ViewerContext, + RecommendedSpaceView, SpaceViewClass, SpaceViewClassIdentifier, SpaceViewId, SpaceViewState, + StoreContext, SystemCommand, SystemCommandSender as _, SystemExecutionOutput, ViewQuery, + ViewerContext, }; // ---------------------------------------------------------------------------- @@ -80,8 +81,7 @@ impl SpaceViewBlueprint { /// must call [`Self::save_to_blueprint_store`]. pub fn new( space_view_class: SpaceViewClassIdentifier, - space_path: &EntityPath, - content: EntityPathFilter, + recommended: RecommendedSpaceView, ) -> Self { let id = SpaceViewId::random(); @@ -89,8 +89,8 @@ impl SpaceViewBlueprint { display_name: None, class_identifier: space_view_class, id, - space_origin: space_path.clone(), - contents: SpaceViewContents::new(id, space_view_class, content), + space_origin: recommended.origin, + contents: SpaceViewContents::new(id, space_view_class, recommended.query_filter), visible: true, pending_writes: Default::default(), } @@ -165,8 +165,15 @@ impl SpaceViewBlueprint { let class_identifier: SpaceViewClassIdentifier = class_identifier.0.as_str().into(); let display_name = display_name.map(|v| v.0.to_string()); - let content = - SpaceViewContents::from_db_or_default(id, blueprint_db, query, class_identifier); + let space_env = EntityPathSubs::new_with_origin(&space_origin); + + let content = SpaceViewContents::from_db_or_default( + id, + blueprint_db, + query, + class_identifier, + &space_env, + ); let visible = visible.map_or(true, |v| v.0); Some(Self { @@ -460,7 +467,7 @@ mod tests { use re_entity_db::EntityDb; use re_log_types::{ example_components::{MyColor, MyLabel, MyPoint}, - DataCell, DataRow, EntityPathFilter, RowId, StoreId, StoreKind, TimePoint, + DataCell, DataRow, RowId, StoreId, StoreKind, TimePoint, }; use re_types::{archetypes::Points3D, ComponentBatch, ComponentName, Loggable as _}; use re_viewer_context::{ @@ -503,18 +510,13 @@ mod tests { recording.add_data_row(row).ok(); } - let space_view = SpaceViewBlueprint::new( - "3D".into(), - &EntityPath::root(), - EntityPathFilter::parse_forgiving( - r" - + parent - + parent/skip/child1 - + parent/skip/child2 - ", - ), + let recommended = RecommendedSpaceView::new( + EntityPath::root(), + ["+ parent", "+ parent/skip/child1", "+ parent/skip/child2"], ); + let space_view = SpaceViewBlueprint::new("3D".into(), recommended); + let auto_properties = Default::default(); let mut visualizable_entities = PerVisualizer::::default(); @@ -810,11 +812,7 @@ mod tests { } // Basic blueprint - a single space view that queries everything. - let space_view = SpaceViewBlueprint::new( - "3D".into(), - &EntityPath::root(), - EntityPathFilter::parse_forgiving("+ /**"), - ); + let space_view = SpaceViewBlueprint::new("3D".into(), RecommendedSpaceView::root()); let individual_override_root = space_view .contents .blueprint_entity_path diff --git a/crates/re_space_view/src/space_view_contents.rs b/crates/re_space_view/src/space_view_contents.rs index f885865edfa3..ab75c2ea9922 100644 --- a/crates/re_space_view/src/space_view_contents.rs +++ b/crates/re_space_view/src/space_view_contents.rs @@ -6,7 +6,9 @@ use re_entity_db::{ external::re_data_store::LatestAtQuery, EntityDb, EntityProperties, EntityPropertiesComponent, EntityPropertyMap, EntityTree, }; -use re_log_types::{path::RuleEffect, EntityPath, EntityPathFilter, EntityPathRule}; +use re_log_types::{ + path::RuleEffect, EntityPath, EntityPathFilter, EntityPathRule, EntityPathSubs, +}; use re_types::{ blueprint::{archetypes as blueprint_archetypes, components::QueryExpression}, Archetype as _, @@ -97,6 +99,7 @@ impl SpaceViewContents { blueprint_db: &EntityDb, query: &LatestAtQuery, space_view_class_identifier: SpaceViewClassIdentifier, + space_env: &EntityPathSubs, ) -> Self { let (contents, blueprint_entity_path) = query_space_view_sub_archetype::< blueprint_archetypes::SpaceViewContents, @@ -114,7 +117,7 @@ impl SpaceViewContents { let query = query.iter().map(|qe| qe.0.as_str()); - let entity_path_filter = EntityPathFilter::from_query_expressions(query); + let entity_path_filter = EntityPathFilter::from_query_expressions(query, space_env); Self { blueprint_entity_path, @@ -596,6 +599,8 @@ mod tests { #[test] fn test_query_results() { + let space_env = Default::default(); + let mut recording = EntityDb::new(StoreId::random(re_log_types::StoreKind::Recording)); let blueprint = EntityDb::new(StoreId::random(re_log_types::StoreKind::Blueprint)); @@ -729,7 +734,7 @@ mod tests { let contents = SpaceViewContents::new( SpaceViewId::random(), "3D".into(), - EntityPathFilter::parse_forgiving(filter), + EntityPathFilter::parse_forgiving(filter, &space_env), ); let query_result = diff --git a/crates/re_space_view_spatial/src/space_view_2d.rs b/crates/re_space_view_spatial/src/space_view_2d.rs index 5287d841bbcf..3141b66c504c 100644 --- a/crates/re_space_view_spatial/src/space_view_2d.rs +++ b/crates/re_space_view_spatial/src/space_view_2d.rs @@ -2,7 +2,7 @@ use ahash::HashSet; use nohash_hasher::{IntMap, IntSet}; use re_entity_db::{EntityDb, EntityProperties, EntityTree}; -use re_log_types::{EntityPath, EntityPathFilter}; +use re_log_types::EntityPath; use re_types::{ archetypes::{DepthImage, Image}, Archetype, ComponentName, @@ -387,10 +387,9 @@ fn recommended_space_views_with_image_splits( // If the root also had a visualizable entity, give it its own space. // TODO(jleibs): Maybe merge this entity into each child if entities.contains(recommended_root) { - recommended.push(RecommendedSpaceView { - root: recommended_root.clone(), - query_filter: EntityPathFilter::single_entity_filter(recommended_root), - }); + recommended.push(RecommendedSpaceView::new_single_entity( + recommended_root.clone(), + )); } // And then recurse into the children @@ -413,9 +412,6 @@ fn recommended_space_views_with_image_splits( } } else { // Otherwise we can use the space as it is - recommended.push(RecommendedSpaceView { - root: recommended_root.clone(), - query_filter: EntityPathFilter::subtree_entity_filter(recommended_root), - }); + recommended.push(RecommendedSpaceView::new_subtree(recommended_root.clone())); } } diff --git a/crates/re_space_view_spatial/src/space_view_3d.rs b/crates/re_space_view_spatial/src/space_view_3d.rs index 91ca48b5d86d..19287fd40a20 100644 --- a/crates/re_space_view_spatial/src/space_view_3d.rs +++ b/crates/re_space_view_spatial/src/space_view_3d.rs @@ -1,7 +1,7 @@ use itertools::Itertools; use nohash_hasher::IntSet; use re_entity_db::{EntityDb, EntityProperties}; -use re_log_types::{EntityPath, EntityPathFilter}; +use re_log_types::EntityPath; use re_space_view::query_space_view_sub_archetype; use re_types::{ blueprint::{archetypes::Background3D, components::Background3DKind}, @@ -220,7 +220,7 @@ impl SpaceViewClass for SpatialSpaceView3D { // // An exception to this rule is not to create a view there if this is already _also_ a subspace root. // (e.g. this also has a camera or a `disconnect` logged there) - let mut roots = subspace + let mut origins = subspace .heuristic_hints .iter() .filter(|(path, hint)| { @@ -232,18 +232,15 @@ impl SpaceViewClass for SpatialSpaceView3D { // If there's no view coordinates or there are still some entities not covered, // create a view at the subspace origin. - if !roots.iter().contains(&subspace.origin) + if !origins.iter().contains(&subspace.origin) && indicated_entities .intersection(&subspace.entities) - .any(|e| roots.iter().all(|root| !e.starts_with(root))) + .any(|e| origins.iter().all(|origin| !e.starts_with(origin))) { - roots.push(subspace.origin.clone()); + origins.push(subspace.origin.clone()); } - Some(roots.into_iter().map(|root| RecommendedSpaceView { - query_filter: EntityPathFilter::subtree_entity_filter(&root), - root, - })) + Some(origins.into_iter().map(RecommendedSpaceView::new_subtree)) } }) .flatten() diff --git a/crates/re_space_view_text_log/src/space_view_class.rs b/crates/re_space_view_text_log/src/space_view_class.rs index 57758d354d70..c4da833d154e 100644 --- a/crates/re_space_view_text_log/src/space_view_class.rs +++ b/crates/re_space_view_text_log/src/space_view_class.rs @@ -2,7 +2,7 @@ use re_entity_db::EntityProperties; use std::collections::BTreeMap; use re_data_ui::item_ui; -use re_log_types::{EntityPath, EntityPathFilter, TimePoint, Timeline}; +use re_log_types::{EntityPath, TimePoint, Timeline}; use re_types::components::TextLogLevel; use re_viewer_context::{ level_to_rich_text, IdentifiedViewSystem as _, RecommendedSpaceView, SpaceViewClass, @@ -91,10 +91,7 @@ impl SpaceViewClass for TextSpaceView { SpaceViewSpawnHeuristics::default() } else { SpaceViewSpawnHeuristics { - recommended_space_views: vec![RecommendedSpaceView { - root: EntityPath::root(), - query_filter: EntityPathFilter::subtree_entity_filter(&EntityPath::root()), - }], + recommended_space_views: vec![RecommendedSpaceView::root()], } } } diff --git a/crates/re_space_view_time_series/src/space_view_class.rs b/crates/re_space_view_time_series/src/space_view_class.rs index bd45d955f9ae..1b76b4a2f2fc 100644 --- a/crates/re_space_view_time_series/src/space_view_class.rs +++ b/crates/re_space_view_time_series/src/space_view_class.rs @@ -4,7 +4,7 @@ use egui_plot::{Legend, Line, Plot, PlotPoint, Points}; use re_data_store::TimeType; use re_format::next_grid_tick_magnitude_ns; -use re_log_types::{EntityPath, EntityPathFilter, TimeZone}; +use re_log_types::{EntityPath, TimeZone}; use re_space_view::{controls, query_space_view_sub_archetype_or_default}; use re_types::blueprint::components::Corner2D; use re_types::components::Range1D; @@ -223,10 +223,7 @@ It can greatly improve performance (and readability) in such situations as it pr .any(|(_, subtree)| indicated_entities.contains(&subtree.path)) { return SpaceViewSpawnHeuristics { - recommended_space_views: vec![RecommendedSpaceView { - root: EntityPath::root(), - query_filter: EntityPathFilter::subtree_entity_filter(&EntityPath::root()), - }], + recommended_space_views: vec![RecommendedSpaceView::root()], }; } @@ -242,10 +239,7 @@ It can greatly improve performance (and readability) in such situations as it pr .into_iter() .map(|path_part| { let entity = EntityPath::new(vec![path_part.clone()]); - RecommendedSpaceView { - query_filter: EntityPathFilter::subtree_entity_filter(&entity), - root: entity, - } + RecommendedSpaceView::new_subtree(entity) }) .collect(); diff --git a/crates/re_viewer/src/ui/selection_panel.rs b/crates/re_viewer/src/ui/selection_panel.rs index 8151e04222bd..7368804694ba 100644 --- a/crates/re_viewer/src/ui/selection_panel.rs +++ b/crates/re_viewer/src/ui/selection_panel.rs @@ -1058,7 +1058,7 @@ The last rule matching `/world/house` is `+ /world/**`, so it is included. } // Apply the edit. - let new_filter = EntityPathFilter::parse_forgiving(&filter_string); + let new_filter = EntityPathFilter::parse_forgiving(&filter_string, &Default::default()); if &new_filter == filter { None // no change } else { diff --git a/crates/re_viewer_context/src/space_view/spawn_heuristics.rs b/crates/re_viewer_context/src/space_view/spawn_heuristics.rs index 628987c1603f..6d5e3302d0ea 100644 --- a/crates/re_viewer_context/src/space_view/spawn_heuristics.rs +++ b/crates/re_viewer_context/src/space_view/spawn_heuristics.rs @@ -1,9 +1,9 @@ -use re_log_types::{EntityPath, EntityPathFilter}; +use re_log_types::{EntityPath, EntityPathFilter, EntityPathSubs}; /// Properties of a space view that as recommended to be spawned by default via space view spawn heuristics. -#[derive(Hash, Debug)] +#[derive(Hash, Debug, Clone)] pub struct RecommendedSpaceView { - pub root: EntityPath, + pub origin: EntityPath, pub query_filter: EntityPathFilter, } @@ -17,3 +17,29 @@ pub struct SpaceViewSpawnHeuristics { /// The recommended space views to spawn pub recommended_space_views: Vec, } + +impl RecommendedSpaceView { + #[inline] + pub fn new<'a>(origin: EntityPath, expressions: impl IntoIterator) -> Self { + let space_env = EntityPathSubs::new_with_origin(&origin); + Self { + origin, + query_filter: EntityPathFilter::from_query_expressions(expressions, &space_env), + } + } + + #[inline] + pub fn new_subtree(origin: EntityPath) -> Self { + Self::new(origin, std::iter::once("$origin/**")) + } + + #[inline] + pub fn new_single_entity(origin: EntityPath) -> Self { + Self::new(origin, std::iter::once("$origin")) + } + + #[inline] + pub fn root() -> Self { + Self::new_subtree(EntityPath::root()) + } +} diff --git a/crates/re_viewport/src/add_space_view_or_container_modal.rs b/crates/re_viewport/src/add_space_view_or_container_modal.rs index c47135041530..cfda7c7f900d 100644 --- a/crates/re_viewport/src/add_space_view_or_container_modal.rs +++ b/crates/re_viewport/src/add_space_view_or_container_modal.rs @@ -4,10 +4,9 @@ use itertools::Itertools; use crate::container::blueprint_id_to_tile_id; use crate::{icon_for_container_kind, ViewportBlueprint}; -use re_log_types::EntityPath; use re_space_view::SpaceViewBlueprint; use re_ui::ReUi; -use re_viewer_context::{ContainerId, ViewerContext}; +use re_viewer_context::{ContainerId, RecommendedSpaceView, ViewerContext}; #[derive(Default)] pub struct AddSpaceViewOrContainerModal { @@ -112,9 +111,7 @@ fn modal_ui( .space_view_class_registry .iter_registry() .sorted_by_key(|entry| entry.class.display_name()) - .map(|entry| { - SpaceViewBlueprint::new(entry.identifier, &EntityPath::root(), Default::default()) - }) + .map(|entry| SpaceViewBlueprint::new(entry.identifier, RecommendedSpaceView::root())) { let icon = space_view.class(ctx.space_view_class_registry).icon(); let title = space_view diff --git a/crates/re_viewport/src/context_menu/actions/add_entities_to_new_space_view.rs b/crates/re_viewport/src/context_menu/actions/add_entities_to_new_space_view.rs index 9d3d386f68e7..0378902a6296 100644 --- a/crates/re_viewport/src/context_menu/actions/add_entities_to_new_space_view.rs +++ b/crates/re_viewport/src/context_menu/actions/add_entities_to_new_space_view.rs @@ -4,7 +4,7 @@ use nohash_hasher::IntSet; use re_log_types::{EntityPath, EntityPathFilter, EntityPathRule, RuleEffect}; use re_space_view::{determine_visualizable_entities, SpaceViewBlueprint}; -use re_viewer_context::{Item, SpaceViewClassIdentifier}; +use re_viewer_context::{Item, RecommendedSpaceView, SpaceViewClassIdentifier}; use crate::context_menu::{ContextMenuAction, ContextMenuContext}; @@ -149,15 +149,22 @@ fn create_space_view_for_selected_entities( let mut filter = EntityPathFilter::default(); - for path in entities_of_interest { - filter.add_rule(RuleEffect::Include, EntityPathRule::including_subtree(path)); - } - let target_container_id = ctx .clicked_item_enclosing_container_id_and_position() .map(|(id, _)| id); - let space_view = SpaceViewBlueprint::new(identifier, &origin, filter); + // Note that these entity paths will always be absolute, rather than + // relative to the origin. This makes sense since if you create a view and + // then change the origin you likely wanted those entities to still be there. + for path in entities_of_interest { + filter.add_rule(RuleEffect::Include, EntityPathRule::including_subtree(path)); + } + let recommended = RecommendedSpaceView { + origin, + query_filter: filter, + }; + + let space_view = SpaceViewBlueprint::new(identifier, recommended); let new_space_view = ctx.viewport_blueprint.add_space_views( std::iter::once(space_view), diff --git a/crates/re_viewport/src/context_menu/actions/add_space_view.rs b/crates/re_viewport/src/context_menu/actions/add_space_view.rs index 03e548967420..51b8da5ff5c1 100644 --- a/crates/re_viewport/src/context_menu/actions/add_space_view.rs +++ b/crates/re_viewport/src/context_menu/actions/add_space_view.rs @@ -1,6 +1,5 @@ -use re_log_types::{EntityPath, EntityPathFilter}; use re_space_view::SpaceViewBlueprint; -use re_viewer_context::{ContainerId, Item, SpaceViewClassIdentifier}; +use re_viewer_context::{ContainerId, Item, RecommendedSpaceView, SpaceViewClassIdentifier}; use crate::context_menu::{ContextMenuAction, ContextMenuContext}; @@ -21,8 +20,7 @@ impl ContextMenuAction for AddSpaceViewAction { } fn process_container(&self, ctx: &ContextMenuContext<'_>, container_id: &ContainerId) { - let space_view = - SpaceViewBlueprint::new(self.0, &EntityPath::root(), EntityPathFilter::default()); + let space_view = SpaceViewBlueprint::new(self.0, RecommendedSpaceView::root()); ctx.viewport_blueprint.add_space_views( std::iter::once(space_view), diff --git a/crates/re_viewport/src/space_view_heuristics.rs b/crates/re_viewport/src/space_view_heuristics.rs index 592c0109b7e5..c6f74bf3c0a6 100644 --- a/crates/re_viewport/src/space_view_heuristics.rs +++ b/crates/re_viewport/src/space_view_heuristics.rs @@ -16,13 +16,7 @@ pub fn default_created_space_views(ctx: &ViewerContext<'_>) -> Vec None: rr.script_add_args(parser) args = parser.parse_args() - rr.script_setup(args, "rerun_example_plot") + blueprint = rrb.Blueprint( + rrb.Horizontal( + rrb.Grid( + rrb.BarChartView(name="Bar Chart", origin="/bar_chart"), + rrb.TimeSeriesView(name="Curves", origin="/curves"), + rrb.TimeSeriesView(name="Trig", origin="/trig"), + rrb.TimeSeriesView(name="Classification", origin="/classification"), + ), + rrb.TextDocumentView(name="Description", origin="/description"), + column_shares=[2, 1], + ), + rrb.SelectionPanel(expanded=False), + rrb.TimePanel(expanded=False), + ) + + rr.script_setup(args, "rerun_example_plot", blueprint=blueprint) rr.log("description", rr.TextDocument(DESCRIPTION, media_type=rr.MediaType.MARKDOWN), timeless=True) log_bar_chart() diff --git a/examples/rust/custom_space_view/src/color_coordinates_space_view.rs b/examples/rust/custom_space_view/src/color_coordinates_space_view.rs index 4d44316603a2..c1151493a22c 100644 --- a/examples/rust/custom_space_view/src/color_coordinates_space_view.rs +++ b/examples/rust/custom_space_view/src/color_coordinates_space_view.rs @@ -2,7 +2,7 @@ use re_viewer::external::{ egui, re_data_ui::{item_ui, DataUi}, re_entity_db::{EntityProperties, InstancePath}, - re_log_types::{EntityPath, EntityPathFilter}, + re_log_types::EntityPath, re_ui, re_viewer_context::{ HoverHighlight, IdentifiedViewSystem as _, Item, RecommendedSpaceView, SelectionHighlight, @@ -115,10 +115,7 @@ impl SpaceViewClass for ColorCoordinatesSpaceView { SpaceViewSpawnHeuristics::default() } else { SpaceViewSpawnHeuristics { - recommended_space_views: vec![RecommendedSpaceView { - root: EntityPath::root(), - query_filter: EntityPathFilter::subtree_entity_filter(&EntityPath::root()), - }], + recommended_space_views: vec![RecommendedSpaceView::root()], } } } diff --git a/rerun_py/rerun_sdk/rerun/blueprint/space_views.py b/rerun_py/rerun_sdk/rerun/blueprint/space_views.py index 80df3a462adf..c9d127d5947b 100644 --- a/rerun_py/rerun_sdk/rerun/blueprint/space_views.py +++ b/rerun_py/rerun_sdk/rerun/blueprint/space_views.py @@ -8,7 +8,11 @@ class BarChartView(SpaceView): """A bar chart view.""" def __init__( - self, *, origin: EntityPathLike = "/", contents: SpaceViewContentsLike = "/**", name: Utf8Like | None = None + self, + *, + origin: EntityPathLike = "/", + contents: SpaceViewContentsLike = "$origin/**", + name: Utf8Like | None = None, ): """ Construct a blueprint for a new bar chart view. @@ -33,7 +37,11 @@ class Spatial2DView(SpaceView): """A Spatial 2D view.""" def __init__( - self, *, origin: EntityPathLike = "/", contents: SpaceViewContentsLike = "/**", name: Utf8Like | None = None + self, + *, + origin: EntityPathLike = "/", + contents: SpaceViewContentsLike = "$origin/**", + name: Utf8Like | None = None, ): """ Construct a blueprint for a new spatial 2D view. @@ -58,7 +66,11 @@ class Spatial3DView(SpaceView): """A Spatial 3D view.""" def __init__( - self, *, origin: EntityPathLike = "/", contents: SpaceViewContentsLike = "/**", name: Utf8Like | None = None + self, + *, + origin: EntityPathLike = "/", + contents: SpaceViewContentsLike = "$origin/**", + name: Utf8Like | None = None, ): """ Construct a blueprint for a new spatial 3D view. @@ -83,7 +95,11 @@ class TensorView(SpaceView): """A tensor view.""" def __init__( - self, *, origin: EntityPathLike = "/", contents: SpaceViewContentsLike = "/**", name: Utf8Like | None = None + self, + *, + origin: EntityPathLike = "/", + contents: SpaceViewContentsLike = "$origin/**", + name: Utf8Like | None = None, ): """ Construct a blueprint for a new tensor view. @@ -108,7 +124,11 @@ class TextDocumentView(SpaceView): """A text document view.""" def __init__( - self, *, origin: EntityPathLike = "/", contents: SpaceViewContentsLike = "/**", name: Utf8Like | None = None + self, + *, + origin: EntityPathLike = "/", + contents: SpaceViewContentsLike = "$origin/**", + name: Utf8Like | None = None, ): """ Construct a blueprint for a new text document view. @@ -133,7 +153,11 @@ class TextLogView(SpaceView): """A text log view.""" def __init__( - self, *, origin: EntityPathLike = "/", contents: SpaceViewContentsLike = "/**", name: Utf8Like | None = None + self, + *, + origin: EntityPathLike = "/", + contents: SpaceViewContentsLike = "$origin/**", + name: Utf8Like | None = None, ): """ Construct a blueprint for a new text log view. @@ -158,7 +182,11 @@ class TimeSeriesView(SpaceView): """A time series view.""" def __init__( - self, *, origin: EntityPathLike = "/", contents: SpaceViewContentsLike = "/**", name: Utf8Like | None = None + self, + *, + origin: EntityPathLike = "/", + contents: SpaceViewContentsLike = "$origin/**", + name: Utf8Like | None = None, ): """ Construct a blueprint for a new time series view. From dab0322e98e570d5d673109e1922da8895109e9e Mon Sep 17 00:00:00 2001 From: Jeremy Leibs Date: Fri, 15 Mar 2024 12:30:20 -0400 Subject: [PATCH 17/50] Switch the blueprint timeline from seconds to sequence (#5539) ### What - Resolves: https://github.com/rerun-io/rerun/issues/5222 Confirmed working in blueprint inspector: ![image](https://github.com/rerun-io/rerun/assets/3312232/0f0a1a73-5f89-4f3d-859a-4263ba7f3ed8) ### Checklist * [x] I have read and agree to [Contributor Guide](https://github.com/rerun-io/rerun/blob/main/CONTRIBUTING.md) and the [Code of Conduct](https://github.com/rerun-io/rerun/blob/main/CODE_OF_CONDUCT.md) * [x] I've included a screenshot or gif (if applicable) * [x] I have tested the web demo (if applicable): * Using newly built examples: [app.rerun.io](https://app.rerun.io/pr/5539/index.html) * Using examples from latest `main` build: [app.rerun.io](https://app.rerun.io/pr/5539/index.html?manifest_url=https://app.rerun.io/version/main/examples_manifest.json) * Using full set of examples from `nightly` build: [app.rerun.io](https://app.rerun.io/pr/5539/index.html?manifest_url=https://app.rerun.io/version/nightly/examples_manifest.json) * [x] The PR title and labels are set such as to maximize their usefulness for the next release's CHANGELOG * [x] If applicable, add a new check to the [release checklist](https://github.com/rerun-io/rerun/blob/main/tests/python/release_checklist)! - [PR Build Summary](https://build.rerun.io/pr/5539) - [Docs preview](https://rerun.io/preview/53c919201d689b77aac31aa8a226f0422262ea66/docs) - [Examples preview](https://rerun.io/preview/53c919201d689b77aac31aa8a226f0422262ea66/examples) - [Recent benchmark results](https://build.rerun.io/graphs/crates.html) - [Wasm size tracking](https://build.rerun.io/graphs/sizes.html) --- crates/re_space_view/src/space_view.rs | 14 ++++---- crates/re_viewer/src/app_blueprint.rs | 14 ++++---- crates/re_viewer/src/ui/override_ui.rs | 6 ++-- .../src/blueprint_helpers.rs | 33 +++++++++++++------ crates/re_viewer_context/src/lib.rs | 2 +- crates/re_viewport/src/container.rs | 6 ++-- crates/re_viewport/src/viewport_blueprint.rs | 2 +- rerun_py/rerun_sdk/rerun/blueprint/api.py | 3 +- 8 files changed, 45 insertions(+), 35 deletions(-) diff --git a/crates/re_space_view/src/space_view.rs b/crates/re_space_view/src/space_view.rs index 18d39498c7c8..02804b85b60b 100644 --- a/crates/re_space_view/src/space_view.rs +++ b/crates/re_space_view/src/space_view.rs @@ -14,10 +14,9 @@ use re_types::{ use re_types_core::archetypes::Clear; use re_types_core::Archetype as _; use re_viewer_context::{ - blueprint_timepoint_for_writes, DataResult, PerSystemEntities, PropertyOverrides, - RecommendedSpaceView, SpaceViewClass, SpaceViewClassIdentifier, SpaceViewId, SpaceViewState, - StoreContext, SystemCommand, SystemCommandSender as _, SystemExecutionOutput, ViewQuery, - ViewerContext, + DataResult, PerSystemEntities, PropertyOverrides, RecommendedSpaceView, SpaceViewClass, + SpaceViewClassIdentifier, SpaceViewId, SpaceViewState, StoreContext, SystemCommand, + SystemCommandSender as _, SystemExecutionOutput, ViewQuery, ViewerContext, }; // ---------------------------------------------------------------------------- @@ -194,7 +193,7 @@ impl SpaceViewBlueprint { /// Otherwise, incremental calls to `set_` functions will write just the necessary component /// update directly to the store. pub fn save_to_blueprint_store(&self, ctx: &ViewerContext<'_>) { - let timepoint = blueprint_timepoint_for_writes(); + let timepoint = ctx.store_context.blueprint_timepoint_for_writes(); let Self { id, @@ -237,8 +236,9 @@ impl SpaceViewBlueprint { /// Creates a new [`SpaceViewBlueprint`] with the same contents, but a different [`SpaceViewId`] /// /// Also duplicates all the queries in the space view. - pub fn duplicate(&self, blueprint: &EntityDb, query: &LatestAtQuery) -> Self { + pub fn duplicate(&self, store_context: &StoreContext<'_>, query: &LatestAtQuery) -> Self { let mut pending_writes = Vec::new(); + let blueprint = store_context.blueprint; let current_path = self.entity_path(); let new_id = SpaceViewId::random(); @@ -256,7 +256,7 @@ impl SpaceViewBlueprint { if let Ok(row) = DataRow::from_cells( RowId::new(), - blueprint_timepoint_for_writes(), + store_context.blueprint_timepoint_for_writes(), sub_path, 1, info.components diff --git a/crates/re_viewer/src/app_blueprint.rs b/crates/re_viewer/src/app_blueprint.rs index 395bcad6acbb..949532cbd46d 100644 --- a/crates/re_viewer/src/app_blueprint.rs +++ b/crates/re_viewer/src/app_blueprint.rs @@ -2,9 +2,7 @@ use re_data_store::LatestAtQuery; use re_entity_db::EntityDb; use re_log_types::{DataRow, EntityPath, RowId, TimePoint}; use re_types::blueprint::components::PanelExpanded; -use re_viewer_context::{ - blueprint_timepoint_for_writes, CommandSender, StoreContext, SystemCommand, SystemCommandSender, -}; +use re_viewer_context::{CommandSender, StoreContext, SystemCommand, SystemCommandSender}; pub const BLUEPRINT_PANEL_PATH: &str = "blueprint_panel"; pub const SELECTION_PANEL_PATH: &str = "selection_panel"; @@ -12,7 +10,7 @@ pub const TIME_PANEL_PATH: &str = "time_panel"; /// Blueprint for top-level application pub struct AppBlueprint<'a> { - blueprint_db: Option<&'a EntityDb>, + store_ctx: Option<&'a StoreContext<'a>>, is_narrow_screen: bool, pub blueprint_panel_expanded: bool, pub selection_panel_expanded: bool, @@ -28,7 +26,7 @@ impl<'a> AppBlueprint<'a> { let blueprint_db = store_ctx.map(|ctx| ctx.blueprint); let screen_size = egui_ctx.screen_rect().size(); let mut ret = Self { - blueprint_db, + store_ctx, is_narrow_screen: screen_size.x < 600.0, blueprint_panel_expanded: screen_size.x > 750.0, selection_panel_expanded: screen_size.x > 1000.0, @@ -111,10 +109,10 @@ impl<'a> AppBlueprint<'a> { is_expanded: bool, command_sender: &CommandSender, ) { - if let Some(blueprint_db) = self.blueprint_db { + if let Some(store_ctx) = self.store_ctx { let entity_path = EntityPath::from(panel_name); - let timepoint = blueprint_timepoint_for_writes(); + let timepoint = store_ctx.blueprint_timepoint_for_writes(); let component = PanelExpanded(is_expanded.into()); @@ -123,7 +121,7 @@ impl<'a> AppBlueprint<'a> { .unwrap(); // Can only fail if we have the wrong number of instances for the component, and we don't command_sender.send_system(SystemCommand::UpdateBlueprint( - blueprint_db.store_id().clone(), + store_ctx.blueprint.store_id().clone(), vec![row], )); } diff --git a/crates/re_viewer/src/ui/override_ui.rs b/crates/re_viewer/src/ui/override_ui.rs index ff055faf55b4..41c110c9d858 100644 --- a/crates/re_viewer/src/ui/override_ui.rs +++ b/crates/re_viewer/src/ui/override_ui.rs @@ -13,8 +13,8 @@ use re_types_core::{ ComponentName, }; use re_viewer_context::{ - blueprint_timepoint_for_writes, DataResult, OverridePath, SystemCommand, - SystemCommandSender as _, UiVerbosity, ViewSystemIdentifier, ViewerContext, + DataResult, OverridePath, SystemCommand, SystemCommandSender as _, UiVerbosity, + ViewSystemIdentifier, ViewerContext, }; pub fn override_ui( @@ -267,7 +267,7 @@ pub fn add_new_override( match DataRow::from_cells( RowId::new(), - blueprint_timepoint_for_writes(), + ctx.store_context.blueprint_timepoint_for_writes(), override_path.clone(), 1, [splat_cell, initial_data], diff --git a/crates/re_viewer_context/src/blueprint_helpers.rs b/crates/re_viewer_context/src/blueprint_helpers.rs index a23caa52f9d4..e818b0e0ae95 100644 --- a/crates/re_viewer_context/src/blueprint_helpers.rs +++ b/crates/re_viewer_context/src/blueprint_helpers.rs @@ -1,22 +1,35 @@ -use re_log_types::{DataCell, DataRow, EntityPath, RowId, Time, TimePoint, Timeline}; +use re_log_types::{DataCell, DataRow, EntityPath, RowId, TimePoint, Timeline}; use re_types::{components::InstanceKey, AsComponents, ComponentBatch, ComponentName}; -use crate::{SystemCommand, SystemCommandSender as _, ViewerContext}; +use crate::{StoreContext, SystemCommand, SystemCommandSender as _, ViewerContext}; #[inline] pub fn blueprint_timeline() -> Timeline { - Timeline::new_temporal("blueprint") + Timeline::new_sequence("blueprint") } -/// The timepoint to use when writing an update to the blueprint. -#[inline] -pub fn blueprint_timepoint_for_writes() -> TimePoint { - TimePoint::from([(blueprint_timeline(), Time::now().into())]) +impl StoreContext<'_> { + /// The timepoint to use when writing an update to the blueprint. + #[inline] + pub fn blueprint_timepoint_for_writes(&self) -> TimePoint { + let timeline = blueprint_timeline(); + + let mut max_time = self + .blueprint + .times_per_timeline() + .get(&timeline) + .and_then(|times| times.last_key_value()) + .map_or(0.into(), |(time, _)| *time); + + max_time += 1.into(); + + TimePoint::from([(timeline, max_time)]) + } } impl ViewerContext<'_> { pub fn save_blueprint_archetype(&self, entity_path: EntityPath, components: &dyn AsComponents) { - let timepoint = blueprint_timepoint_for_writes(); + let timepoint = self.store_context.blueprint_timepoint_for_writes(); let data_row = match DataRow::from_archetype(RowId::new(), timepoint.clone(), entity_path, components) @@ -57,7 +70,7 @@ impl ViewerContext<'_> { data_cell.compute_size_bytes(); let num_instances = components.num_instances() as u32; - let timepoint = blueprint_timepoint_for_writes(); + let timepoint = self.store_context.blueprint_timepoint_for_writes(); re_log::trace!( "Writing {} components of type {:?} to {:?}", @@ -124,7 +137,7 @@ impl ViewerContext<'_> { return; }; - let timepoint = blueprint_timepoint_for_writes(); + let timepoint = self.store_context.blueprint_timepoint_for_writes(); let cell = DataCell::from_arrow_empty(component_name, datatype.clone()); match DataRow::from_cells1( diff --git a/crates/re_viewer_context/src/lib.rs b/crates/re_viewer_context/src/lib.rs index a4f40d6ea3f7..44d4b95371ec 100644 --- a/crates/re_viewer_context/src/lib.rs +++ b/crates/re_viewer_context/src/lib.rs @@ -29,7 +29,7 @@ pub use annotations::{ AnnotationMap, Annotations, ResolvedAnnotationInfo, ResolvedAnnotationInfos, }; pub use app_options::AppOptions; -pub use blueprint_helpers::{blueprint_timeline, blueprint_timepoint_for_writes}; +pub use blueprint_helpers::blueprint_timeline; pub use blueprint_id::{BlueprintId, BlueprintIdRegistry, ContainerId, SpaceViewId}; pub use caches::{Cache, Caches}; pub use collapsed_id::{CollapseItem, CollapseScope, CollapsedId}; diff --git a/crates/re_viewport/src/container.rs b/crates/re_viewport/src/container.rs index dff9e5dd92d3..7e5d3f2d287c 100644 --- a/crates/re_viewport/src/container.rs +++ b/crates/re_viewport/src/container.rs @@ -9,8 +9,8 @@ use re_query::query_archetype; use re_types::blueprint::components::Visible; use re_types_core::archetypes::Clear; use re_viewer_context::{ - blueprint_timepoint_for_writes, BlueprintId, BlueprintIdRegistry, ContainerId, Item, - SpaceViewId, SystemCommand, SystemCommandSender as _, ViewerContext, + BlueprintId, BlueprintIdRegistry, ContainerId, Item, SpaceViewId, SystemCommand, + SystemCommandSender as _, ViewerContext, }; use crate::blueprint::components::GridColumns; @@ -218,7 +218,7 @@ impl ContainerBlueprint { /// Otherwise, incremental calls to `set_` functions will write just the necessary component /// update directly to the store. pub fn save_to_blueprint_store(&self, ctx: &ViewerContext<'_>) { - let timepoint = blueprint_timepoint_for_writes(); + let timepoint = ctx.store_context.blueprint_timepoint_for_writes(); let Self { id, diff --git a/crates/re_viewport/src/viewport_blueprint.rs b/crates/re_viewport/src/viewport_blueprint.rs index fdcfa3ec2320..fda7eccd491b 100644 --- a/crates/re_viewport/src/viewport_blueprint.rs +++ b/crates/re_viewport/src/viewport_blueprint.rs @@ -237,7 +237,7 @@ impl ViewportBlueprint { ) -> Option { let space_view = self.space_view(space_view_id)?; - let new_space_view = space_view.duplicate(ctx.store_context.blueprint, ctx.blueprint_query); + let new_space_view = space_view.duplicate(ctx.store_context, ctx.blueprint_query); let new_space_view_id = new_space_view.id; let parent_and_pos = diff --git a/rerun_py/rerun_sdk/rerun/blueprint/api.py b/rerun_py/rerun_sdk/rerun/blueprint/api.py index 3b5696df18b6..b106feb23f3d 100644 --- a/rerun_py/rerun_sdk/rerun/blueprint/api.py +++ b/rerun_py/rerun_sdk/rerun/blueprint/api.py @@ -456,8 +456,7 @@ def create_in_memory_blueprint(*, application_id: str, blueprint: BlueprintLike) ) ) - # TODO(jleibs): This should use a monotonic seq - blueprint_stream.set_time_seconds("blueprint", 1) # type: ignore[attr-defined] + blueprint_stream.set_time_sequence("blueprint", 0) # type: ignore[attr-defined] blueprint._log_to_stream(blueprint_stream) From 4982c01087fd3af57e6d141b979a8c4cff61a772 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20Proch=C3=A1zka?= Date: Sun, 17 Mar 2024 19:48:36 +0100 Subject: [PATCH 18/50] Docs inline viewer infrastructure (#5438) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Snippets™️ (formerly known as "code examples" or "doc examples") are now built on CI together with Examples™️, and uploaded to the same place. Also includes some changes to example screenshots (adding `data-inline-viewer` attributes), and updating the egui rev to fix a bug - Blocked by https://github.com/emilk/egui/pull/4169 ### Checklist * [x] I have read and agree to [Contributor Guide](https://github.com/rerun-io/rerun/blob/main/CONTRIBUTING.md) and the [Code of Conduct](https://github.com/rerun-io/rerun/blob/main/CODE_OF_CONDUCT.md) * [x] I've included a screenshot or gif (if applicable) * [x] I have tested the web demo (if applicable): * Using newly built examples: [app.rerun.io](https://app.rerun.io/pr/5438/index.html) * Using examples from latest `main` build: [app.rerun.io](https://app.rerun.io/pr/5438/index.html?manifest_url=https://app.rerun.io/version/main/examples_manifest.json) * Using full set of examples from `nightly` build: [app.rerun.io](https://app.rerun.io/pr/5438/index.html?manifest_url=https://app.rerun.io/version/nightly/examples_manifest.json) * [x] The PR title and labels are set such as to maximize their usefulness for the next release's CHANGELOG * [x] If applicable, add a new check to the [release checklist](https://github.com/rerun-io/rerun/blob/main/tests/python/release_checklist)! - [PR Build Summary](https://build.rerun.io/pr/5438) - [Docs preview](https://rerun.io/preview/27f898acc6efda581ce2a4f540f73dc68ef50578/docs) - [Examples preview](https://rerun.io/preview/27f898acc6efda581ce2a4f540f73dc68ef50578/examples) - [Recent benchmark results](https://build.rerun.io/graphs/crates.html) - [Wasm size tracking](https://build.rerun.io/graphs/sizes.html) --- .github/actions/deploy-vercel/action.yml | 4 + .github/actions/deploy-vercel/index.mjs | 26 ++- .github/workflows/contrib_rerun_py.yml | 4 +- .github/workflows/reusable_build_examples.yml | 6 + .github/workflows/reusable_deploy_docs.yml | 1 + .github/workflows/reusable_test_wheels.yml | 4 +- CMakeLists.txt | 2 +- Cargo.lock | 44 ++--- Cargo.toml | 16 +- crates/re_build_examples/src/lib.rs | 37 ++++ crates/re_build_examples/src/main.rs | 2 + crates/re_build_examples/src/rrd.rs | 41 +--- crates/re_build_examples/src/snippets.rs | 182 ++++++++++++++++++ crates/re_types/src/lib.rs | 2 +- .../src/bin/build_re_types.rs | 4 +- crates/re_types_builder/src/codegen/common.rs | 8 +- .../re_types_builder/src/codegen/cpp/mod.rs | 4 +- .../re_types_builder/src/codegen/docs/mod.rs | 2 +- .../src/codegen/python/mod.rs | 6 +- .../re_types_builder/src/codegen/rust/api.rs | 4 +- crates/re_types_builder/src/lib.rs | 9 +- .../quick_start_connect.cpp | 2 +- .../quick_start_guides/quick_start_connect.py | 2 +- .../quick_start_guides/quick_start_connect.rs | 2 +- .../quick_start_guides/quick_start_spawn.cpp | 18 +- .../quick_start_guides/quick_start_spawn.py | 2 +- .../quick_start_guides/quick_start_spawn.rs | 2 +- .../src/ui/welcome_screen/welcome_section.rs | 24 +-- docs/README.md | 41 ++-- docs/code-examples/src/lib.rs | 5 - docs/code-examples/src/main.rs | 6 - docs/content/concepts/annotation-context.md | 2 +- docs/content/concepts/entity-component.md | 6 +- docs/content/concepts/timelines.md | 2 +- docs/content/howto/extend/custom-data.md | 2 +- docs/content/howto/open-any-file.md | 2 +- docs/content/howto/shared-recordings.md | 2 +- docs/content/howto/using-native-loggers.md | 2 +- .../reference/migration/migration-0-9.md | 2 +- .../content/reference/sdk-logging-controls.md | 2 +- .../types/archetypes/annotation_context.md | 6 +- .../reference/types/archetypes/arrows2d.md | 2 +- .../reference/types/archetypes/arrows3d.md | 2 +- .../reference/types/archetypes/asset3d.md | 4 +- .../reference/types/archetypes/bar_chart.md | 2 +- .../reference/types/archetypes/boxes2d.md | 2 +- .../reference/types/archetypes/boxes3d.md | 4 +- .../reference/types/archetypes/clear.md | 4 +- .../reference/types/archetypes/depth_image.md | 4 +- .../types/archetypes/disconnected_space.md | 2 +- .../reference/types/archetypes/image.md | 2 +- .../types/archetypes/line_strips2d.md | 6 +- .../types/archetypes/line_strips3d.md | 6 +- .../reference/types/archetypes/mesh3d.md | 4 +- .../reference/types/archetypes/pinhole.md | 4 +- .../reference/types/archetypes/points2d.md | 4 +- .../reference/types/archetypes/points3d.md | 4 +- .../reference/types/archetypes/scalar.md | 4 +- .../types/archetypes/segmentation_image.md | 2 +- .../reference/types/archetypes/series_line.md | 2 +- .../types/archetypes/series_point.md | 2 +- .../reference/types/archetypes/tensor.md | 2 +- .../types/archetypes/text_document.md | 2 +- .../reference/types/archetypes/text_log.md | 2 +- .../types/archetypes/time_series_scalar.md | 4 +- .../reference/types/archetypes/transform3d.md | 2 +- .../types/archetypes/view_coordinates.md | 2 +- .../CMakeLists.txt | 4 +- docs/{code-examples => snippets}/Cargo.toml | 2 +- docs/{code-examples => snippets}/README.md | 12 +- .../all/annotation-context/example.py | 0 .../all/annotation-context/example.rs | 0 .../all/annotation_context_connections.cpp | 0 .../all/annotation_context_connections.py | 0 .../all/annotation_context_connections.rs | 0 .../all/annotation_context_rects.cpp | 0 .../all/annotation_context_rects.py | 0 .../all/annotation_context_rects.rs | 0 .../all/annotation_context_segmentation.cpp | 0 .../all/annotation_context_segmentation.py | 0 .../all/annotation_context_segmentation.rs | 0 .../all/any_values.py | 0 .../all/arrow2d_simple.cpp | 0 .../all/arrow2d_simple.py | 0 .../all/arrow2d_simple.rs | 0 .../all/arrow3d_simple.cpp | 0 .../all/arrow3d_simple.py | 0 .../all/arrow3d_simple.rs | 0 .../all/asset3d_out_of_tree.cpp | 0 .../all/asset3d_out_of_tree.py | 0 .../all/asset3d_out_of_tree.rs | 0 .../all/asset3d_simple.cpp | 0 .../all/asset3d_simple.py | 0 .../all/asset3d_simple.rs | 0 .../all/bar_chart.cpp | 0 .../all/bar_chart.py | 0 .../all/bar_chart.rs | 0 .../all/box2d_simple.cpp | 0 .../all/box2d_simple.py | 0 .../all/box2d_simple.rs | 0 .../all/box3d_batch.cpp | 0 .../all/box3d_batch.py | 0 .../all/box3d_batch.rs | 0 .../all/box3d_simple.cpp | 0 .../all/box3d_simple.py | 0 .../all/box3d_simple.rs | 0 .../all/clear_recursive.cpp | 0 .../all/clear_recursive.py | 0 .../all/clear_recursive.rs | 0 .../all/clear_simple.cpp | 0 .../all/clear_simple.py | 0 .../all/clear_simple.rs | 0 .../all/custom-recording-id/example.cpp | 0 .../all/custom-recording-id/example.py | 0 .../all/custom-recording-id/example.rs | 0 .../all/custom_data.cpp | 0 .../all/custom_data.py | 0 .../all/custom_data.rs | 0 .../all/default-off-session/example.py | 0 .../all/default-off-session/example.rs | 0 .../all/depth_image_3d.cpp | 0 .../all/depth_image_3d.py | 0 .../all/depth_image_3d.rs | 0 .../all/depth_image_simple.cpp | 0 .../all/depth_image_simple.py | 0 .../all/depth_image_simple.rs | 0 .../all/disconnected_space.cpp | 0 .../all/disconnected_space.py | 0 .../all/disconnected_space.rs | 0 .../all/entity_path.cpp | 0 .../all/entity_path.py | 0 .../all/entity_path.rs | 0 .../all/extra_values.py | 0 .../all/image_advanced.py | 0 .../all/image_simple.cpp | 0 .../all/image_simple.py | 0 .../all/image_simple.rs | 0 .../all/line_segments2d_simple.cpp | 0 .../all/line_segments2d_simple.py | 0 .../all/line_segments2d_simple.rs | 0 .../all/line_segments3d_simple.cpp | 0 .../all/line_segments3d_simple.py | 0 .../all/line_segments3d_simple.rs | 0 .../all/line_strip2d_batch.cpp | 0 .../all/line_strip2d_batch.py | 0 .../all/line_strip2d_batch.rs | 0 .../all/line_strip2d_simple.cpp | 0 .../all/line_strip2d_simple.py | 0 .../all/line_strip2d_simple.rs | 0 .../all/line_strip3d_batch.cpp | 0 .../all/line_strip3d_batch.py | 0 .../all/line_strip3d_batch.rs | 0 .../all/line_strip3d_simple.cpp | 0 .../all/line_strip3d_simple.py | 0 .../all/line_strip3d_simple.rs | 0 .../all/log-file/example.cpp | 0 .../all/log-file/example.py | 0 .../all/log-file/example.rs | 0 .../all/log_line.py | 0 .../all/log_line.rs | 0 .../all/manual_indicator.cpp | 0 .../all/manual_indicator.py | 0 .../all/manual_indicator.rs | 0 .../all/mesh3d_indexed.cpp | 0 .../all/mesh3d_indexed.py | 0 .../all/mesh3d_indexed.rs | 0 .../all/mesh3d_partial_updates.cpp | 0 .../all/mesh3d_partial_updates.py | 0 .../all/mesh3d_partial_updates.rs | 0 .../all/mesh3d_simple.cpp | 0 .../all/mesh3d_simple.py | 0 .../all/mesh3d_simple.rs | 0 .../all/pinhole_perspective.cpp | 0 .../all/pinhole_perspective.py | 0 .../all/pinhole_perspective.rs | 0 .../all/pinhole_simple.cpp | 0 .../all/pinhole_simple.py | 0 .../all/pinhole_simple.rs | 0 .../all/point2d_random.cpp | 0 .../all/point2d_random.py | 0 .../all/point2d_random.rs | 0 .../all/point2d_simple.cpp | 0 .../all/point2d_simple.py | 0 .../all/point2d_simple.rs | 0 .../all/point3d_random.cpp | 0 .../all/point3d_random.py | 0 .../all/point3d_random.rs | 0 .../all/point3d_simple.cpp | 0 .../all/point3d_simple.py | 0 .../all/point3d_simple.rs | 0 .../all/quick_start_connect.cpp | 0 .../all/quick_start_connect.py | 0 .../all/quick_start_connect.rs | 0 .../all/quick_start_spawn.cpp | 0 .../all/quick_start_spawn.py | 0 .../all/quick_start_spawn.rs | 0 .../all/scalar_multiple_plots.cpp | 0 .../all/scalar_multiple_plots.py | 0 .../all/scalar_multiple_plots.rs | 0 .../all/scalar_simple.cpp | 0 .../all/scalar_simple.py | 0 .../all/scalar_simple.rs | 0 .../all/segmentation_image_simple.cpp | 0 .../all/segmentation_image_simple.py | 0 .../all/segmentation_image_simple.rs | 0 .../all/series_line_style.cpp | 0 .../all/series_line_style.py | 0 .../all/series_line_style.rs | 0 .../all/series_point_style.cpp | 0 .../all/series_point_style.py | 0 .../all/series_point_style.rs | 0 .../all/tensor_simple.cpp | 0 .../all/tensor_simple.py | 0 .../all/tensor_simple.rs | 0 .../all/text_document.cpp | 0 .../all/text_document.py | 0 .../all/text_document.rs | 0 .../all/text_log.cpp | 0 .../all/text_log.py | 0 .../all/text_log.rs | 0 .../all/text_log_integration.cpp | 0 .../all/text_log_integration.py | 0 .../all/text_log_integration.rs | 0 .../all/timelines_example.cpp | 0 .../all/timelines_example.py | 0 .../all/timelines_example.rs | 0 .../all/transform3d_simple.cpp | 0 .../all/transform3d_simple.py | 0 .../all/transform3d_simple.rs | 0 .../all/view_coordinates_simple.cpp | 0 .../all/view_coordinates_simple.py | 0 .../all/view_coordinates_simple.rs | 0 docs/{code-examples => snippets}/build.rs | 2 +- .../compare_snippet_output.py} | 85 +++----- docs/snippets/snippets.toml | 90 +++++++++ .../src/examples/.gitignore | 0 docs/snippets/src/lib.rs | 5 + docs/snippets/src/main.rs | 6 + examples/python/arkit_scenes/README.md | 2 +- .../depth_guided_stable_diffusion/README.md | 2 +- .../python/detect_and_track_objects/README.md | 2 +- examples/python/dicom_mri/README.md | 2 +- examples/python/dna/README.md | 3 +- examples/python/human_pose_tracking/README.md | 2 +- examples/python/incremental_logging/README.md | 2 +- examples/python/nuscenes/README.md | 2 +- .../open_photogrammetry_format/README.md | 2 +- examples/python/plots/README.md | 2 +- examples/python/raw_mesh/README.md | 2 +- examples/python/rgbd/README.md | 2 +- .../python/segment_anything_model/README.md | 2 +- .../python/structure_from_motion/README.md | 2 +- justfile | 8 +- noxfile.py | 2 +- pixi.toml | 2 +- rerun_py/pyproject.toml | 6 +- .../build_screenshot_compare.py | 41 ++-- 257 files changed, 589 insertions(+), 325 deletions(-) create mode 100644 crates/re_build_examples/src/snippets.rs mode change 100644 => 120000 crates/re_viewer/data/quick_start_guides/quick_start_spawn.cpp delete mode 100644 docs/code-examples/src/lib.rs delete mode 100644 docs/code-examples/src/main.rs rename docs/{code-examples => snippets}/CMakeLists.txt (91%) rename docs/{code-examples => snippets}/Cargo.toml (94%) rename docs/{code-examples => snippets}/README.md (62%) rename docs/{code-examples => snippets}/all/annotation-context/example.py (100%) rename docs/{code-examples => snippets}/all/annotation-context/example.rs (100%) rename docs/{code-examples => snippets}/all/annotation_context_connections.cpp (100%) rename docs/{code-examples => snippets}/all/annotation_context_connections.py (100%) rename docs/{code-examples => snippets}/all/annotation_context_connections.rs (100%) rename docs/{code-examples => snippets}/all/annotation_context_rects.cpp (100%) rename docs/{code-examples => snippets}/all/annotation_context_rects.py (100%) rename docs/{code-examples => snippets}/all/annotation_context_rects.rs (100%) rename docs/{code-examples => snippets}/all/annotation_context_segmentation.cpp (100%) rename docs/{code-examples => snippets}/all/annotation_context_segmentation.py (100%) rename docs/{code-examples => snippets}/all/annotation_context_segmentation.rs (100%) rename docs/{code-examples => snippets}/all/any_values.py (100%) rename docs/{code-examples => snippets}/all/arrow2d_simple.cpp (100%) rename docs/{code-examples => snippets}/all/arrow2d_simple.py (100%) rename docs/{code-examples => snippets}/all/arrow2d_simple.rs (100%) rename docs/{code-examples => snippets}/all/arrow3d_simple.cpp (100%) rename docs/{code-examples => snippets}/all/arrow3d_simple.py (100%) rename docs/{code-examples => snippets}/all/arrow3d_simple.rs (100%) rename docs/{code-examples => snippets}/all/asset3d_out_of_tree.cpp (100%) rename docs/{code-examples => snippets}/all/asset3d_out_of_tree.py (100%) rename docs/{code-examples => snippets}/all/asset3d_out_of_tree.rs (100%) rename docs/{code-examples => snippets}/all/asset3d_simple.cpp (100%) rename docs/{code-examples => snippets}/all/asset3d_simple.py (100%) rename docs/{code-examples => snippets}/all/asset3d_simple.rs (100%) rename docs/{code-examples => snippets}/all/bar_chart.cpp (100%) rename docs/{code-examples => snippets}/all/bar_chart.py (100%) rename docs/{code-examples => snippets}/all/bar_chart.rs (100%) rename docs/{code-examples => snippets}/all/box2d_simple.cpp (100%) rename docs/{code-examples => snippets}/all/box2d_simple.py (100%) rename docs/{code-examples => snippets}/all/box2d_simple.rs (100%) rename docs/{code-examples => snippets}/all/box3d_batch.cpp (100%) rename docs/{code-examples => snippets}/all/box3d_batch.py (100%) rename docs/{code-examples => snippets}/all/box3d_batch.rs (100%) rename docs/{code-examples => snippets}/all/box3d_simple.cpp (100%) rename docs/{code-examples => snippets}/all/box3d_simple.py (100%) rename docs/{code-examples => snippets}/all/box3d_simple.rs (100%) rename docs/{code-examples => snippets}/all/clear_recursive.cpp (100%) rename docs/{code-examples => snippets}/all/clear_recursive.py (100%) rename docs/{code-examples => snippets}/all/clear_recursive.rs (100%) rename docs/{code-examples => snippets}/all/clear_simple.cpp (100%) rename docs/{code-examples => snippets}/all/clear_simple.py (100%) rename docs/{code-examples => snippets}/all/clear_simple.rs (100%) rename docs/{code-examples => snippets}/all/custom-recording-id/example.cpp (100%) rename docs/{code-examples => snippets}/all/custom-recording-id/example.py (100%) rename docs/{code-examples => snippets}/all/custom-recording-id/example.rs (100%) rename docs/{code-examples => snippets}/all/custom_data.cpp (100%) rename docs/{code-examples => snippets}/all/custom_data.py (100%) rename docs/{code-examples => snippets}/all/custom_data.rs (100%) rename docs/{code-examples => snippets}/all/default-off-session/example.py (100%) rename docs/{code-examples => snippets}/all/default-off-session/example.rs (100%) rename docs/{code-examples => snippets}/all/depth_image_3d.cpp (100%) rename docs/{code-examples => snippets}/all/depth_image_3d.py (100%) rename docs/{code-examples => snippets}/all/depth_image_3d.rs (100%) rename docs/{code-examples => snippets}/all/depth_image_simple.cpp (100%) rename docs/{code-examples => snippets}/all/depth_image_simple.py (100%) rename docs/{code-examples => snippets}/all/depth_image_simple.rs (100%) rename docs/{code-examples => snippets}/all/disconnected_space.cpp (100%) rename docs/{code-examples => snippets}/all/disconnected_space.py (100%) rename docs/{code-examples => snippets}/all/disconnected_space.rs (100%) rename docs/{code-examples => snippets}/all/entity_path.cpp (100%) rename docs/{code-examples => snippets}/all/entity_path.py (100%) rename docs/{code-examples => snippets}/all/entity_path.rs (100%) rename docs/{code-examples => snippets}/all/extra_values.py (100%) rename docs/{code-examples => snippets}/all/image_advanced.py (100%) rename docs/{code-examples => snippets}/all/image_simple.cpp (100%) rename docs/{code-examples => snippets}/all/image_simple.py (100%) rename docs/{code-examples => snippets}/all/image_simple.rs (100%) rename docs/{code-examples => snippets}/all/line_segments2d_simple.cpp (100%) rename docs/{code-examples => snippets}/all/line_segments2d_simple.py (100%) rename docs/{code-examples => snippets}/all/line_segments2d_simple.rs (100%) rename docs/{code-examples => snippets}/all/line_segments3d_simple.cpp (100%) rename docs/{code-examples => snippets}/all/line_segments3d_simple.py (100%) rename docs/{code-examples => snippets}/all/line_segments3d_simple.rs (100%) rename docs/{code-examples => snippets}/all/line_strip2d_batch.cpp (100%) rename docs/{code-examples => snippets}/all/line_strip2d_batch.py (100%) rename docs/{code-examples => snippets}/all/line_strip2d_batch.rs (100%) rename docs/{code-examples => snippets}/all/line_strip2d_simple.cpp (100%) rename docs/{code-examples => snippets}/all/line_strip2d_simple.py (100%) rename docs/{code-examples => snippets}/all/line_strip2d_simple.rs (100%) rename docs/{code-examples => snippets}/all/line_strip3d_batch.cpp (100%) rename docs/{code-examples => snippets}/all/line_strip3d_batch.py (100%) rename docs/{code-examples => snippets}/all/line_strip3d_batch.rs (100%) rename docs/{code-examples => snippets}/all/line_strip3d_simple.cpp (100%) rename docs/{code-examples => snippets}/all/line_strip3d_simple.py (100%) rename docs/{code-examples => snippets}/all/line_strip3d_simple.rs (100%) rename docs/{code-examples => snippets}/all/log-file/example.cpp (100%) rename docs/{code-examples => snippets}/all/log-file/example.py (100%) rename docs/{code-examples => snippets}/all/log-file/example.rs (100%) rename docs/{code-examples => snippets}/all/log_line.py (100%) rename docs/{code-examples => snippets}/all/log_line.rs (100%) rename docs/{code-examples => snippets}/all/manual_indicator.cpp (100%) rename docs/{code-examples => snippets}/all/manual_indicator.py (100%) rename docs/{code-examples => snippets}/all/manual_indicator.rs (100%) rename docs/{code-examples => snippets}/all/mesh3d_indexed.cpp (100%) rename docs/{code-examples => snippets}/all/mesh3d_indexed.py (100%) rename docs/{code-examples => snippets}/all/mesh3d_indexed.rs (100%) rename docs/{code-examples => snippets}/all/mesh3d_partial_updates.cpp (100%) rename docs/{code-examples => snippets}/all/mesh3d_partial_updates.py (100%) rename docs/{code-examples => snippets}/all/mesh3d_partial_updates.rs (100%) rename docs/{code-examples => snippets}/all/mesh3d_simple.cpp (100%) rename docs/{code-examples => snippets}/all/mesh3d_simple.py (100%) rename docs/{code-examples => snippets}/all/mesh3d_simple.rs (100%) rename docs/{code-examples => snippets}/all/pinhole_perspective.cpp (100%) rename docs/{code-examples => snippets}/all/pinhole_perspective.py (100%) rename docs/{code-examples => snippets}/all/pinhole_perspective.rs (100%) rename docs/{code-examples => snippets}/all/pinhole_simple.cpp (100%) rename docs/{code-examples => snippets}/all/pinhole_simple.py (100%) rename docs/{code-examples => snippets}/all/pinhole_simple.rs (100%) rename docs/{code-examples => snippets}/all/point2d_random.cpp (100%) rename docs/{code-examples => snippets}/all/point2d_random.py (100%) rename docs/{code-examples => snippets}/all/point2d_random.rs (100%) rename docs/{code-examples => snippets}/all/point2d_simple.cpp (100%) rename docs/{code-examples => snippets}/all/point2d_simple.py (100%) rename docs/{code-examples => snippets}/all/point2d_simple.rs (100%) rename docs/{code-examples => snippets}/all/point3d_random.cpp (100%) rename docs/{code-examples => snippets}/all/point3d_random.py (100%) rename docs/{code-examples => snippets}/all/point3d_random.rs (100%) rename docs/{code-examples => snippets}/all/point3d_simple.cpp (100%) rename docs/{code-examples => snippets}/all/point3d_simple.py (100%) rename docs/{code-examples => snippets}/all/point3d_simple.rs (100%) rename docs/{code-examples => snippets}/all/quick_start_connect.cpp (100%) rename docs/{code-examples => snippets}/all/quick_start_connect.py (100%) rename docs/{code-examples => snippets}/all/quick_start_connect.rs (100%) rename docs/{code-examples => snippets}/all/quick_start_spawn.cpp (100%) rename docs/{code-examples => snippets}/all/quick_start_spawn.py (100%) rename docs/{code-examples => snippets}/all/quick_start_spawn.rs (100%) rename docs/{code-examples => snippets}/all/scalar_multiple_plots.cpp (100%) rename docs/{code-examples => snippets}/all/scalar_multiple_plots.py (100%) rename docs/{code-examples => snippets}/all/scalar_multiple_plots.rs (100%) rename docs/{code-examples => snippets}/all/scalar_simple.cpp (100%) rename docs/{code-examples => snippets}/all/scalar_simple.py (100%) rename docs/{code-examples => snippets}/all/scalar_simple.rs (100%) rename docs/{code-examples => snippets}/all/segmentation_image_simple.cpp (100%) rename docs/{code-examples => snippets}/all/segmentation_image_simple.py (100%) rename docs/{code-examples => snippets}/all/segmentation_image_simple.rs (100%) rename docs/{code-examples => snippets}/all/series_line_style.cpp (100%) rename docs/{code-examples => snippets}/all/series_line_style.py (100%) rename docs/{code-examples => snippets}/all/series_line_style.rs (100%) rename docs/{code-examples => snippets}/all/series_point_style.cpp (100%) rename docs/{code-examples => snippets}/all/series_point_style.py (100%) rename docs/{code-examples => snippets}/all/series_point_style.rs (100%) rename docs/{code-examples => snippets}/all/tensor_simple.cpp (100%) rename docs/{code-examples => snippets}/all/tensor_simple.py (100%) rename docs/{code-examples => snippets}/all/tensor_simple.rs (100%) rename docs/{code-examples => snippets}/all/text_document.cpp (100%) rename docs/{code-examples => snippets}/all/text_document.py (100%) rename docs/{code-examples => snippets}/all/text_document.rs (100%) rename docs/{code-examples => snippets}/all/text_log.cpp (100%) rename docs/{code-examples => snippets}/all/text_log.py (100%) rename docs/{code-examples => snippets}/all/text_log.rs (100%) rename docs/{code-examples => snippets}/all/text_log_integration.cpp (100%) rename docs/{code-examples => snippets}/all/text_log_integration.py (100%) rename docs/{code-examples => snippets}/all/text_log_integration.rs (100%) rename docs/{code-examples => snippets}/all/timelines_example.cpp (100%) rename docs/{code-examples => snippets}/all/timelines_example.py (100%) rename docs/{code-examples => snippets}/all/timelines_example.rs (100%) rename docs/{code-examples => snippets}/all/transform3d_simple.cpp (100%) rename docs/{code-examples => snippets}/all/transform3d_simple.py (100%) rename docs/{code-examples => snippets}/all/transform3d_simple.rs (100%) rename docs/{code-examples => snippets}/all/view_coordinates_simple.cpp (100%) rename docs/{code-examples => snippets}/all/view_coordinates_simple.py (100%) rename docs/{code-examples => snippets}/all/view_coordinates_simple.rs (100%) rename docs/{code-examples => snippets}/build.rs (98%) rename docs/{code-examples/compare_code_example_output.py => snippets/compare_snippet_output.py} (67%) create mode 100644 docs/snippets/snippets.toml rename docs/{code-examples => snippets}/src/examples/.gitignore (100%) create mode 100644 docs/snippets/src/lib.rs create mode 100644 docs/snippets/src/main.rs diff --git a/.github/actions/deploy-vercel/action.yml b/.github/actions/deploy-vercel/action.yml index c1e7d29bc86b..9f2d084a0d2c 100644 --- a/.github/actions/deploy-vercel/action.yml +++ b/.github/actions/deploy-vercel/action.yml @@ -22,6 +22,10 @@ inputs: description: "Release commit to update the deployment to" type: string required: true + release_version: + description: "Which release version to update the deployment to" + type: string + required: true runs: using: "node20" diff --git a/.github/actions/deploy-vercel/index.mjs b/.github/actions/deploy-vercel/index.mjs index 825a88ae8f1d..43b8bbb0fe85 100644 --- a/.github/actions/deploy-vercel/index.mjs +++ b/.github/actions/deploy-vercel/index.mjs @@ -8,6 +8,7 @@ const token = getRequiredInput("vercel_token"); const teamName = getRequiredInput("vercel_team_name"); const projectName = getRequiredInput("vercel_project_name"); const releaseCommit = getRequiredInput("release_commit"); +const releaseVersion = getRequiredInput("release_version"); const client = new Client(token); @@ -25,21 +26,38 @@ assert(project, `failed to get project "${projectName}"`); info`Fetching latest production deployment`; const productionDeployments = await client.deployments(team.id, project.id); const latestProductionDeployment = productionDeployments[0]; -assert(latestProductionDeployment, `failed to get latest production deployment`); +assert( + latestProductionDeployment, + `failed to get latest production deployment`, +); +const environment = await client.envs(team.id, project.id); const RELEASE_COMMIT_KEY = "RELEASE_COMMIT"; +const RELEASE_VERSION_KEY = "RELEASE_VERSION"; info`Fetching "${RELEASE_COMMIT_KEY}" env var`; -const environment = await client.envs(team.id, project.id); -const releaseCommitEnv = environment.find((env) => env.key === RELEASE_COMMIT_KEY); +const releaseCommitEnv = environment.find( + (env) => env.key === RELEASE_COMMIT_KEY, +); assert(releaseCommitEnv, `failed to get "${RELEASE_COMMIT_KEY}" env var`); +info`Fetching "${RELEASE_VERSION_KEY}" env var`; +const releaseVersionEnv = environment.find( + (env) => env.key === RELEASE_VERSION_KEY, +); +assert(releaseVersionEnv, `failed to get "${RELEASE_VERSION_KEY}" env var`); + info`Setting "${RELEASE_COMMIT_KEY}" env to "${releaseCommit}"`; await client.setEnv(team.id, project.id, releaseCommitEnv.id, { key: RELEASE_COMMIT_KEY, value: releaseCommit, }); +info`Setting "${RELEASE_VERSION_KEY}" env to "${releaseVersion}"`; +await client.setEnv(team.id, project.id, releaseVersionEnv.id, { + key: RELEASE_VERSION_KEY, + value: releaseVersion, +}); + info`Triggering redeploy`; await client.redeploy(team.id, latestProductionDeployment.uid, "landing"); - diff --git a/.github/workflows/contrib_rerun_py.yml b/.github/workflows/contrib_rerun_py.yml index bc1a458ddb04..f0b7b1517c68 100644 --- a/.github/workflows/contrib_rerun_py.yml +++ b/.github/workflows/contrib_rerun_py.yml @@ -112,13 +112,13 @@ jobs: run: | RUST_LOG=debug tests/roundtrips.py --release --target x86_64-unknown-linux-gnu --no-py-build - - name: Run docs/code-examples/compare_code_example_output.py + - name: Run docs/snippets/compare_snippet_output.py shell: bash # --release so we can inherit from some of the artifacts that maturin has just built before # --target x86_64-unknown-linux-gnu because otherwise cargo loses the target cache… even though this is the target anyhow… # --no-py-build because rerun-sdk is already built and installed run: | - RUST_LOG=debug docs/code-examples/compare_code_example_output.py --release --target x86_64-unknown-linux-gnu --no-py-build + RUST_LOG=debug docs/snippets/compare_snippet_output.py --release --target x86_64-unknown-linux-gnu --no-py-build - name: Cache RRD dataset id: dataset diff --git a/.github/workflows/reusable_build_examples.yml b/.github/workflows/reusable_build_examples.yml index 768c648c103b..2aa2df31bdd6 100644 --- a/.github/workflows/reusable_build_examples.yml +++ b/.github/workflows/reusable_build_examples.yml @@ -93,6 +93,12 @@ jobs: --channel ${{ inputs.CHANNEL }} \ example_data + - name: Build snippets + shell: bash + run: | + pixi run build-examples snippets \ + example_data/snippets + - name: Upload assets uses: actions/upload-artifact@v3 with: diff --git a/.github/workflows/reusable_deploy_docs.yml b/.github/workflows/reusable_deploy_docs.yml index 1bafd93a59bc..7536ec162887 100644 --- a/.github/workflows/reusable_deploy_docs.yml +++ b/.github/workflows/reusable_deploy_docs.yml @@ -261,3 +261,4 @@ jobs: vercel_team_name: ${{ vars.VERCEL_TEAM_NAME }} vercel_project_name: ${{ vars.VERCEL_PROJECT_NAME }} release_commit: ${{ inputs.RELEASE_COMMIT }} + release_version: ${{ inputs.RELEASE_VERSION }} diff --git a/.github/workflows/reusable_test_wheels.yml b/.github/workflows/reusable_test_wheels.yml index 552609dab0ce..33228b2d1d94 100644 --- a/.github/workflows/reusable_test_wheels.yml +++ b/.github/workflows/reusable_test_wheels.yml @@ -195,11 +195,11 @@ jobs: run: | RUST_LOG=debug tests/roundtrips.py --release --target x86_64-unknown-linux-gnu --no-py-build - - name: Run docs/code-examples/compare_code_example_output.py + - name: Run docs/snippets/compare_snippet_output.py if: ${{ inputs.PLATFORM != 'windows' }} shell: bash # --release so we can inherit from some of the artifacts that maturin has just built before # --target x86_64-unknown-linux-gnu because otherwise cargo loses the target cache… even though this is the target anyhow… # --no-py-build because rerun-sdk is already built and installed run: | - RUST_LOG=debug docs/code-examples/compare_code_example_output.py --release --target x86_64-unknown-linux-gnu --no-py-build + RUST_LOG=debug docs/snippets/compare_snippet_output.py --release --target x86_64-unknown-linux-gnu --no-py-build diff --git a/CMakeLists.txt b/CMakeLists.txt index fc2b6f6a93ef..c9918f250cdb 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -157,4 +157,4 @@ add_subdirectory(crates/rerun_c) # The Rerun C SDK library, must be included bef add_subdirectory(rerun_cpp) # The Rerun C++ SDK library. add_subdirectory(examples/cpp) add_subdirectory(tests/cpp) -add_subdirectory(docs/code-examples) +add_subdirectory(docs/snippets) diff --git a/Cargo.lock b/Cargo.lock index dec4be2dc83a..f112875bcd7e 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1094,18 +1094,6 @@ dependencies = [ "objc", ] -[[package]] -name = "code_examples" -version = "0.15.0-alpha.2" -dependencies = [ - "itertools 0.12.0", - "ndarray", - "rand", - "re_build_tools", - "rerun", - "rust-format", -] - [[package]] name = "codespan-reporting" version = "0.11.1" @@ -1567,7 +1555,7 @@ checksum = "68b0cf012f1230e43cd00ebb729c6bb58707ecfa8ad08b52ef3a4ccd2697fc30" [[package]] name = "ecolor" version = "0.26.2" -source = "git+https://github.com/emilk/egui.git?rev=0afbefc884cc6d8ada9c60461b1b7c89415270b1#0afbefc884cc6d8ada9c60461b1b7c89415270b1" +source = "git+https://github.com/emilk/egui.git?rev=bf7ffb982a6e8c0a40d0871c38bccacef9ee8efb#bf7ffb982a6e8c0a40d0871c38bccacef9ee8efb" dependencies = [ "bytemuck", "serde", @@ -1576,7 +1564,7 @@ dependencies = [ [[package]] name = "eframe" version = "0.26.2" -source = "git+https://github.com/emilk/egui.git?rev=0afbefc884cc6d8ada9c60461b1b7c89415270b1#0afbefc884cc6d8ada9c60461b1b7c89415270b1" +source = "git+https://github.com/emilk/egui.git?rev=bf7ffb982a6e8c0a40d0871c38bccacef9ee8efb#bf7ffb982a6e8c0a40d0871c38bccacef9ee8efb" dependencies = [ "bytemuck", "cocoa", @@ -1611,7 +1599,7 @@ dependencies = [ [[package]] name = "egui" version = "0.26.2" -source = "git+https://github.com/emilk/egui.git?rev=0afbefc884cc6d8ada9c60461b1b7c89415270b1#0afbefc884cc6d8ada9c60461b1b7c89415270b1" +source = "git+https://github.com/emilk/egui.git?rev=bf7ffb982a6e8c0a40d0871c38bccacef9ee8efb#bf7ffb982a6e8c0a40d0871c38bccacef9ee8efb" dependencies = [ "accesskit", "ahash", @@ -1627,7 +1615,7 @@ dependencies = [ [[package]] name = "egui-wgpu" version = "0.26.2" -source = "git+https://github.com/emilk/egui.git?rev=0afbefc884cc6d8ada9c60461b1b7c89415270b1#0afbefc884cc6d8ada9c60461b1b7c89415270b1" +source = "git+https://github.com/emilk/egui.git?rev=bf7ffb982a6e8c0a40d0871c38bccacef9ee8efb#bf7ffb982a6e8c0a40d0871c38bccacef9ee8efb" dependencies = [ "bytemuck", "document-features", @@ -1645,7 +1633,7 @@ dependencies = [ [[package]] name = "egui-winit" version = "0.26.2" -source = "git+https://github.com/emilk/egui.git?rev=0afbefc884cc6d8ada9c60461b1b7c89415270b1#0afbefc884cc6d8ada9c60461b1b7c89415270b1" +source = "git+https://github.com/emilk/egui.git?rev=bf7ffb982a6e8c0a40d0871c38bccacef9ee8efb#bf7ffb982a6e8c0a40d0871c38bccacef9ee8efb" dependencies = [ "accesskit_winit", "arboard", @@ -1674,7 +1662,7 @@ dependencies = [ [[package]] name = "egui_extras" version = "0.26.2" -source = "git+https://github.com/emilk/egui.git?rev=0afbefc884cc6d8ada9c60461b1b7c89415270b1#0afbefc884cc6d8ada9c60461b1b7c89415270b1" +source = "git+https://github.com/emilk/egui.git?rev=bf7ffb982a6e8c0a40d0871c38bccacef9ee8efb#bf7ffb982a6e8c0a40d0871c38bccacef9ee8efb" dependencies = [ "egui", "ehttp", @@ -1689,7 +1677,7 @@ dependencies = [ [[package]] name = "egui_glow" version = "0.26.2" -source = "git+https://github.com/emilk/egui.git?rev=0afbefc884cc6d8ada9c60461b1b7c89415270b1#0afbefc884cc6d8ada9c60461b1b7c89415270b1" +source = "git+https://github.com/emilk/egui.git?rev=bf7ffb982a6e8c0a40d0871c38bccacef9ee8efb#bf7ffb982a6e8c0a40d0871c38bccacef9ee8efb" dependencies = [ "bytemuck", "egui", @@ -1706,7 +1694,7 @@ dependencies = [ [[package]] name = "egui_plot" version = "0.26.2" -source = "git+https://github.com/emilk/egui.git?rev=0afbefc884cc6d8ada9c60461b1b7c89415270b1#0afbefc884cc6d8ada9c60461b1b7c89415270b1" +source = "git+https://github.com/emilk/egui.git?rev=bf7ffb982a6e8c0a40d0871c38bccacef9ee8efb#bf7ffb982a6e8c0a40d0871c38bccacef9ee8efb" dependencies = [ "egui", ] @@ -1748,7 +1736,7 @@ checksum = "a26ae43d7bcc3b814de94796a5e736d4029efb0ee900c12e2d54c993ad1a1e07" [[package]] name = "emath" version = "0.26.2" -source = "git+https://github.com/emilk/egui.git?rev=0afbefc884cc6d8ada9c60461b1b7c89415270b1#0afbefc884cc6d8ada9c60461b1b7c89415270b1" +source = "git+https://github.com/emilk/egui.git?rev=bf7ffb982a6e8c0a40d0871c38bccacef9ee8efb#bf7ffb982a6e8c0a40d0871c38bccacef9ee8efb" dependencies = [ "bytemuck", "serde", @@ -1849,7 +1837,7 @@ dependencies = [ [[package]] name = "epaint" version = "0.26.2" -source = "git+https://github.com/emilk/egui.git?rev=0afbefc884cc6d8ada9c60461b1b7c89415270b1#0afbefc884cc6d8ada9c60461b1b7c89415270b1" +source = "git+https://github.com/emilk/egui.git?rev=bf7ffb982a6e8c0a40d0871c38bccacef9ee8efb#bf7ffb982a6e8c0a40d0871c38bccacef9ee8efb" dependencies = [ "ab_glyph", "ahash", @@ -6046,6 +6034,18 @@ dependencies = [ "serde", ] +[[package]] +name = "snippets" +version = "0.15.0-alpha.2" +dependencies = [ + "itertools 0.12.0", + "ndarray", + "rand", + "re_build_tools", + "rerun", + "rust-format", +] + [[package]] name = "socket2" version = "0.4.9" diff --git a/Cargo.toml b/Cargo.toml index 855e85452a46..d1c981ffb0a6 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -2,7 +2,7 @@ resolver = "2" members = [ "crates/*", - "docs/code-examples", + "docs/snippets", "examples/rust/*", "rerun_py", "run_wasm", @@ -283,13 +283,13 @@ debug = true # As a last resport, patch with a commit to our own repository. # ALWAYS document what PR the commit hash is part of, or when it was merged into the upstream trunk. -ecolor = { git = "https://github.com/emilk/egui.git", rev = "0afbefc884cc6d8ada9c60461b1b7c89415270b1" } # egui master 2024-03-13 -eframe = { git = "https://github.com/emilk/egui.git", rev = "0afbefc884cc6d8ada9c60461b1b7c89415270b1" } # egui master 2024-03-13 -egui = { git = "https://github.com/emilk/egui.git", rev = "0afbefc884cc6d8ada9c60461b1b7c89415270b1" } # egui master 2024-03-13 -egui_extras = { git = "https://github.com/emilk/egui.git", rev = "0afbefc884cc6d8ada9c60461b1b7c89415270b1" } # egui master 2024-03-13 -egui_plot = { git = "https://github.com/emilk/egui.git", rev = "0afbefc884cc6d8ada9c60461b1b7c89415270b1" } # egui master 2024-03-13 -egui-wgpu = { git = "https://github.com/emilk/egui.git", rev = "0afbefc884cc6d8ada9c60461b1b7c89415270b1" } # egui master 2024-03-13 -emath = { git = "https://github.com/emilk/egui.git", rev = "0afbefc884cc6d8ada9c60461b1b7c89415270b1" } # egui master 2024-03-13 +ecolor = { git = "https://github.com/emilk/egui.git", rev = "bf7ffb982a6e8c0a40d0871c38bccacef9ee8efb" } # egui master 2024-03-15 +eframe = { git = "https://github.com/emilk/egui.git", rev = "bf7ffb982a6e8c0a40d0871c38bccacef9ee8efb" } # egui master 2024-03-15 +egui = { git = "https://github.com/emilk/egui.git", rev = "bf7ffb982a6e8c0a40d0871c38bccacef9ee8efb" } # egui master 2024-03-15 +egui_extras = { git = "https://github.com/emilk/egui.git", rev = "bf7ffb982a6e8c0a40d0871c38bccacef9ee8efb" } # egui master 2024-03-15 +egui_plot = { git = "https://github.com/emilk/egui.git", rev = "bf7ffb982a6e8c0a40d0871c38bccacef9ee8efb" } # egui master 2024-03-15 +egui-wgpu = { git = "https://github.com/emilk/egui.git", rev = "bf7ffb982a6e8c0a40d0871c38bccacef9ee8efb" } # egui master 2024-03-15 +emath = { git = "https://github.com/emilk/egui.git", rev = "bf7ffb982a6e8c0a40d0871c38bccacef9ee8efb" } # egui master 2024-03-15 # Useful while developing: # ecolor = { path = "../../egui/crates/ecolor" } diff --git a/crates/re_build_examples/src/lib.rs b/crates/re_build_examples/src/lib.rs index 854e650bccbf..5f3784bdbdb6 100644 --- a/crates/re_build_examples/src/lib.rs +++ b/crates/re_build_examples/src/lib.rs @@ -3,5 +3,42 @@ pub mod example; pub mod manifest; pub mod rrd; +pub mod snippets; + +use std::io::stdout; +use std::io::IsTerminal; +use std::process::Command; +use std::process::Output; +use std::time::Duration; pub use example::{Channel, Example}; +use indicatif::MultiProgress; +use indicatif::ProgressBar; + +fn wait_for_output( + mut cmd: Command, + name: &str, + progress: &MultiProgress, +) -> anyhow::Result { + let progress = progress.add(ProgressBar::new_spinner().with_message(name.to_owned())); + progress.enable_steady_tick(Duration::from_millis(100)); + + let output = cmd.output()?; + + let elapsed = progress.elapsed().as_secs_f64(); + let tick = if output.status.success() { + "✔" + } else { + "✘" + }; + let message = format!("{tick} {name} ({elapsed:.3}s)"); + + if stdout().is_terminal() { + progress.set_message(message); + progress.finish(); + } else { + println!("{message}"); + } + + Ok(output) +} diff --git a/crates/re_build_examples/src/main.rs b/crates/re_build_examples/src/main.rs index 01e75eb618ec..b4adb0725684 100644 --- a/crates/re_build_examples/src/main.rs +++ b/crates/re_build_examples/src/main.rs @@ -21,6 +21,7 @@ fn main() -> anyhow::Result<()> { match args.cmd { Cmd::Rrd(cmd) => cmd.run(), Cmd::Manifest(cmd) => cmd.run(), + Cmd::Snippets(cmd) => cmd.run(), } } @@ -36,4 +37,5 @@ struct Args { enum Cmd { Rrd(rrd::Rrd), Manifest(manifest::Manifest), + Snippets(snippets::Snippets), } diff --git a/crates/re_build_examples/src/rrd.rs b/crates/re_build_examples/src/rrd.rs index d1b6f74c9cd1..fba6886ec4d4 100644 --- a/crates/re_build_examples/src/rrd.rs +++ b/crates/re_build_examples/src/rrd.rs @@ -1,16 +1,12 @@ +use crate::wait_for_output; use crate::{Channel, Example}; use indicatif::MultiProgress; -use indicatif::ProgressBar; use rayon::prelude::IntoParallelIterator; use rayon::prelude::ParallelIterator; use std::fs::create_dir_all; -use std::io::stdout; -use std::io::IsTerminal; use std::path::Path; use std::path::PathBuf; use std::process::Command; -use std::process::Output; -use std::time::Duration; /// Collect examples in the repository and run them to produce `.rrd` files. #[derive(argh::FromArgs)] @@ -75,12 +71,7 @@ impl Rrd { } } -trait Build { - /// Returns the path to the resulting `.rrd` file. - fn build(self, progress: &MultiProgress, output_dir: &Path) -> anyhow::Result; -} - -impl Build for Example { +impl Example { fn build(self, progress: &MultiProgress, output_dir: &Path) -> anyhow::Result { let rrd_path = output_dir.join(&self.name).with_extension("rrd"); @@ -118,31 +109,3 @@ impl Build for Example { } } } - -fn wait_for_output( - mut cmd: Command, - name: &str, - progress: &MultiProgress, -) -> anyhow::Result { - let progress = progress.add(ProgressBar::new_spinner().with_message(name.to_owned())); - progress.enable_steady_tick(Duration::from_millis(100)); - - let output = cmd.output()?; - - let elapsed = progress.elapsed().as_secs_f64(); - let tick = if output.status.success() { - "✔" - } else { - "✘" - }; - let message = format!("{tick} {name} ({elapsed:.3}s)"); - - if stdout().is_terminal() { - progress.set_message(message); - progress.finish(); - } else { - println!("{message}"); - } - - Ok(output) -} diff --git a/crates/re_build_examples/src/snippets.rs b/crates/re_build_examples/src/snippets.rs new file mode 100644 index 000000000000..ecbd9e568327 --- /dev/null +++ b/crates/re_build_examples/src/snippets.rs @@ -0,0 +1,182 @@ +use std::collections::HashMap; +use std::ffi::OsStr; +use std::fs::create_dir_all; +use std::fs::read_dir; +use std::fs::read_to_string; +use std::path::Path; +use std::path::PathBuf; +use std::process::Command; + +use indicatif::MultiProgress; +use rayon::prelude::IntoParallelIterator; +use rayon::prelude::ParallelIterator; + +use crate::wait_for_output; + +/// Collect code snippets from `docs/snippets` in the repository and run them to produce `.rrd` files. +#[derive(argh::FromArgs)] +#[argh(subcommand, name = "snippets")] +pub struct Snippets { + #[argh(positional, description = "directory to output `rrd` files into")] + output_dir: PathBuf, +} + +impl Snippets { + pub fn run(self) -> anyhow::Result<()> { + create_dir_all(&self.output_dir)?; + + let snippets_dir = re_build_tools::cargo_metadata()? + .workspace_root + .join("docs/snippets"); + + println!("Reading config…"); + let config = read_to_string(snippets_dir.join("snippets.toml"))?; + let config: Config = toml::from_str(&config)?; + + println!("Collecting snippets…"); + let mut snippets = vec![]; + for snippet in read_dir(snippets_dir.join("all"))? { + let snippet = snippet?; + let meta = snippet.metadata()?; + let path = snippet.path(); + let name = path.file_stem().and_then(OsStr::to_str).unwrap().to_owned(); + + if meta.is_dir() { + println!( + "Skipping {}: directories are implicitly opt-out", + path.display() + ); + continue; + } + + // We only run python examples, because: + // - Each snippet should already be available in each language + // - Python is the easiest to run + if !path.extension().is_some_and(|p| p == "py") { + println!("Skipping {}: not a python example", path.display()); + continue; + } + + if config.opt_out.run.contains_key(&name) { + println!( + "Skipping {}: explicit opt-out in `snippets.toml`", + path.display() + ); + continue; + } + + println!("Adding {}", path.display()); + let extra_args: Vec = config + .extra_args + .get(&name) + .cloned() + .unwrap_or_default() + .into_iter() + .map(|value| value.replace("$config_dir", snippets_dir.as_str())) + .collect(); + snippets.push(Snippet { + extra_args, + name, + path, + }); + } + + println!("Running {} snippets…", snippets.len()); + let progress = MultiProgress::new(); + let results: Vec> = snippets + .into_par_iter() + .map(|example| example.build(&progress, &self.output_dir)) + .collect(); + + let mut failed = false; + for result in results { + match result { + Ok(rrd_path) => { + if let Ok(metadata) = std::fs::metadata(&rrd_path) { + println!( + "Output: {} ({})", + rrd_path.display(), + re_format::format_bytes(metadata.len() as _) + ); + } else { + eprintln!("Missing rrd at {}", rrd_path.display()); + failed = true; + } + } + Err(err) => { + eprintln!("{err}"); + failed = true; + } + } + } + if failed { + anyhow::bail!("Failed to run some examples"); + } + + Ok(()) + } +} + +#[derive(Debug)] +struct Snippet { + path: PathBuf, + name: String, + extra_args: Vec, +} + +impl Snippet { + fn build(self, progress: &MultiProgress, output_dir: &Path) -> anyhow::Result { + let rrd_path = output_dir.join(&self.name).with_extension("rrd"); + + let mut cmd = Command::new("python3"); + cmd.arg(&self.path); + cmd.args(&self.extra_args); + + let final_args = cmd + .get_args() + .map(|arg| arg.to_string_lossy().to_string()) + .collect::>(); + + cmd.envs([ + ("RERUN_FLUSH_NUM_ROWS", "0"), + ("RERUN_STRICT", "1"), + ("RERUN_PANIC_ON_WARN", "1"), + ( + "_RERUN_TEST_FORCE_SAVE", + rrd_path.to_string_lossy().as_ref(), + ), + ]); + + let output = wait_for_output(cmd, &self.name, progress)?; + + if output.status.success() { + Ok(rrd_path) + } else { + anyhow::bail!( + "Failed to run `python3 {}`: \ + \nstdout: \ + \n{} \ + \nstderr: \ + \n{}", + final_args.join(" "), + String::from_utf8(output.stdout)?, + String::from_utf8(output.stderr)?, + ); + } + } +} + +/// See `docs/snippets/snippets.toml` for more info +#[derive(serde::Deserialize)] +struct Config { + opt_out: OptOut, + + /// example name -> args + extra_args: HashMap>, +} + +#[derive(serde::Deserialize)] +struct OptOut { + /// example name -> languages + run: HashMap>, +} diff --git a/crates/re_types/src/lib.rs b/crates/re_types/src/lib.rs index c78ed6f89a2e..a826d99724e0 100644 --- a/crates/re_types/src/lib.rs +++ b/crates/re_types/src/lib.rs @@ -100,7 +100,7 @@ //! //! ### Examples //! -//! You can add an example to `docs/code-examples/all`, and then include its source code in +//! You can add an example to `docs/snippets/all`, and then include its source code in //! the docs using the `\example` tag. The example will also be included in the list of //! examples for type's generated docs. //! diff --git a/crates/re_types_builder/src/bin/build_re_types.rs b/crates/re_types_builder/src/bin/build_re_types.rs index a32175d30aab..0cb5e2ef9f87 100644 --- a/crates/re_types_builder/src/bin/build_re_types.rs +++ b/crates/re_types_builder/src/bin/build_re_types.rs @@ -13,7 +13,7 @@ use camino::Utf8Path; const RE_TYPES_SOURCE_HASH_PATH: &str = "crates/re_types/source_hash.txt"; const DEFINITIONS_DIR_PATH: &str = "crates/re_types/definitions"; const ENTRYPOINT_PATH: &str = "crates/re_types/definitions/rerun/archetypes.fbs"; -const DOC_EXAMPLES_DIR_PATH: &str = "docs/code-examples/all"; +const SNIPPETS_DIR_PATH: &str = "docs/snippets/all"; const CPP_OUTPUT_DIR_PATH: &str = "rerun_cpp"; const PYTHON_OUTPUT_DIR_PATH: &str = "rerun_py/rerun_sdk/rerun"; const PYTHON_TESTING_OUTPUT_DIR_PATH: &str = "rerun_py/tests/test_types"; @@ -84,7 +84,7 @@ fn main() { let new_hash = compute_re_types_hash(&SourceLocations { definitions_dir: DEFINITIONS_DIR_PATH, - doc_examples_dir: DOC_EXAMPLES_DIR_PATH, + snippets_dir: SNIPPETS_DIR_PATH, python_output_dir: PYTHON_OUTPUT_DIR_PATH, cpp_output_dir: CPP_OUTPUT_DIR_PATH, }); diff --git a/crates/re_types_builder/src/codegen/common.rs b/crates/re_types_builder/src/codegen/common.rs index 8ed35fed7089..19118a4d0734 100644 --- a/crates/re_types_builder/src/codegen/common.rs +++ b/crates/re_types_builder/src/codegen/common.rs @@ -45,7 +45,7 @@ pub fn get_documentation(docs: &Docs, tags: &[&str]) -> Vec { pub struct ExampleInfo<'a> { /// The snake_case name of the example. /// - /// Used with `code-example:`, `std::fs::read_to_string`, etc. + /// Used with `snippet:`, `std::fs::read_to_string`, etc. pub name: &'a str, /// The human-readable name of the example. @@ -242,7 +242,7 @@ pub struct Example<'a> { pub lines: Vec, } -pub fn collect_examples_for_api_docs<'a>( +pub fn collect_snippets_for_api_docs<'a>( docs: &'a Docs, extension: &str, required: bool, @@ -250,7 +250,7 @@ pub fn collect_examples_for_api_docs<'a>( let mut out = Vec::new(); if let Some(examples) = docs.tagged_docs.get("example") { - let base_path = crate::rerun_workspace_path().join("docs/code-examples/all"); + let base_path = crate::rerun_workspace_path().join("docs/snippets/all"); for base @ ExampleInfo { name, @@ -267,7 +267,7 @@ pub fn collect_examples_for_api_docs<'a>( Ok(content) => content, Err(_) if !required => continue, Err(err) => { - return Err(err).with_context(|| format!("couldn't open code example {path:?}")) + return Err(err).with_context(|| format!("couldn't open snippet {path:?}")) } }; let mut content = content diff --git a/crates/re_types_builder/src/codegen/cpp/mod.rs b/crates/re_types_builder/src/codegen/cpp/mod.rs index 5ba80026e1a6..4201060ce9cc 100644 --- a/crates/re_types_builder/src/codegen/cpp/mod.rs +++ b/crates/re_types_builder/src/codegen/cpp/mod.rs @@ -12,7 +12,7 @@ use quote::{format_ident, quote}; use rayon::prelude::*; use crate::{ - codegen::{autogen_warning, common::collect_examples_for_api_docs}, + codegen::{autogen_warning, common::collect_snippets_for_api_docs}, format_path, objects::ObjectClass, ArrowRegistry, Docs, ElementType, GeneratedFiles, Object, ObjectField, ObjectKind, Objects, @@ -2199,7 +2199,7 @@ fn lines_from_docs(docs: &Docs) -> Vec { let mut lines = crate::codegen::get_documentation(docs, &["cpp", "c++"]); let required = true; - let examples = collect_examples_for_api_docs(docs, "cpp", required).unwrap_or_default(); + let examples = collect_snippets_for_api_docs(docs, "cpp", required).unwrap_or_default(); if !examples.is_empty() { lines.push(String::new()); let section_title = if examples.len() == 1 { diff --git a/crates/re_types_builder/src/codegen/docs/mod.rs b/crates/re_types_builder/src/codegen/docs/mod.rs index d130f828335c..d695c838031c 100644 --- a/crates/re_types_builder/src/codegen/docs/mod.rs +++ b/crates/re_types_builder/src/codegen/docs/mod.rs @@ -454,7 +454,7 @@ fn write_example_list(o: &mut String, examples: &[ExampleInfo<'_>]) { let title = title.unwrap_or(name); putln!(o, "### {title}"); putln!(o); - putln!(o, "code-example: {name}"); + putln!(o, "snippet: {name}"); if let Some(image_url) = image { putln!(o); for line in image_url.image_stack() { diff --git a/crates/re_types_builder/src/codegen/python/mod.rs b/crates/re_types_builder/src/codegen/python/mod.rs index d15afd942e12..41769667124e 100644 --- a/crates/re_types_builder/src/codegen/python/mod.rs +++ b/crates/re_types_builder/src/codegen/python/mod.rs @@ -10,7 +10,7 @@ use unindent::unindent; use crate::{ codegen::{ autogen_warning, - common::{collect_examples_for_api_docs, Example}, + common::{collect_snippets_for_api_docs, Example}, StringExt as _, }, format_path, @@ -1156,7 +1156,7 @@ fn quote_obj_docs(obj: &Object) -> String { fn lines_from_docs(docs: &Docs) -> Vec { let mut lines = crate::codegen::get_documentation(docs, &["py", "python"]); - let examples = collect_examples_for_api_docs(docs, "py", true).unwrap(); + let examples = collect_snippets_for_api_docs(docs, "py", true).unwrap(); if !examples.is_empty() { lines.push(String::new()); let (section_title, divider) = if examples.len() == 1 { @@ -1212,7 +1212,7 @@ fn quote_doc_from_fields(objects: &Objects, fields: &Vec) -> String } } - let examples = collect_examples_for_api_docs(&field.docs, "py", true).unwrap(); + let examples = collect_snippets_for_api_docs(&field.docs, "py", true).unwrap(); if !examples.is_empty() { content.push(String::new()); // blank line between docs and examples quote_examples(examples, &mut lines); diff --git a/crates/re_types_builder/src/codegen/rust/api.rs b/crates/re_types_builder/src/codegen/rust/api.rs index 19ff35b6ee31..61d9f4b5fe8b 100644 --- a/crates/re_types_builder/src/codegen/rust/api.rs +++ b/crates/re_types_builder/src/codegen/rust/api.rs @@ -9,7 +9,7 @@ use quote::{format_ident, quote}; use crate::{ codegen::{ autogen_warning, - common::{collect_examples_for_api_docs, ExampleInfo}, + common::{collect_snippets_for_api_docs, ExampleInfo}, rust::{ arrow::ArrowDataTypeTokenizer, deserializer::{ @@ -716,7 +716,7 @@ fn quote_obj_docs(reporter: &Reporter, obj: &Object) -> TokenStream { fn doc_as_lines(reporter: &Reporter, virtpath: &str, fqname: &str, docs: &Docs) -> Vec { let mut lines = crate::codegen::get_documentation(docs, &["rs", "rust"]); - let examples = collect_examples_for_api_docs(docs, "rs", true) + let examples = collect_snippets_for_api_docs(docs, "rs", true) .map_err(|err| reporter.error(virtpath, fqname, err)) .unwrap_or_default(); diff --git a/crates/re_types_builder/src/lib.rs b/crates/re_types_builder/src/lib.rs index 0c9f573eabaf..17d6b1615fb7 100644 --- a/crates/re_types_builder/src/lib.rs +++ b/crates/re_types_builder/src/lib.rs @@ -328,7 +328,7 @@ pub fn compute_re_types_builder_hash() -> String { pub struct SourceLocations<'a> { pub definitions_dir: &'a str, - pub doc_examples_dir: &'a str, + pub snippets_dir: &'a str, pub python_output_dir: &'a str, pub cpp_output_dir: &'a str, } @@ -341,8 +341,7 @@ pub fn compute_re_types_hash(locations: &SourceLocations<'_>) -> String { // code generator itself! let re_types_builder_hash = compute_re_types_builder_hash(); let definitions_hash = compute_dir_hash(locations.definitions_dir, Some(&["fbs"])); - let doc_examples_hash = - compute_dir_hash(locations.doc_examples_dir, Some(&["rs", "py", "cpp"])); + let snippets_hash = compute_dir_hash(locations.snippets_dir, Some(&["rs", "py", "cpp"])); let python_extensions_hash = compute_dir_filtered_hash(locations.python_output_dir, |path| { path.to_str().unwrap().ends_with("_ext.py") }); @@ -353,14 +352,14 @@ pub fn compute_re_types_hash(locations: &SourceLocations<'_>) -> String { let new_hash = compute_strings_hash(&[ &re_types_builder_hash, &definitions_hash, - &doc_examples_hash, + &snippets_hash, &python_extensions_hash, &cpp_extensions_hash, ]); re_log::debug!("re_types_builder_hash: {re_types_builder_hash:?}"); re_log::debug!("definitions_hash: {definitions_hash:?}"); - re_log::debug!("doc_examples_hash: {doc_examples_hash:?}"); + re_log::debug!("snippets_hash: {snippets_hash:?}"); re_log::debug!("python_extensions_hash: {python_extensions_hash:?}"); re_log::debug!("cpp_extensions_hash: {cpp_extensions_hash:?}"); re_log::debug!("new_hash: {new_hash:?}"); diff --git a/crates/re_viewer/data/quick_start_guides/quick_start_connect.cpp b/crates/re_viewer/data/quick_start_guides/quick_start_connect.cpp index 6e50ed1f948e..3c5c90aea114 120000 --- a/crates/re_viewer/data/quick_start_guides/quick_start_connect.cpp +++ b/crates/re_viewer/data/quick_start_guides/quick_start_connect.cpp @@ -1 +1 @@ -../../../../docs/code-examples/all/quick_start_connect.cpp \ No newline at end of file +../../../../docs/snippets/all/quick_start_connect.cpp \ No newline at end of file diff --git a/crates/re_viewer/data/quick_start_guides/quick_start_connect.py b/crates/re_viewer/data/quick_start_guides/quick_start_connect.py index f319284a41ce..f0ecdce5c83b 120000 --- a/crates/re_viewer/data/quick_start_guides/quick_start_connect.py +++ b/crates/re_viewer/data/quick_start_guides/quick_start_connect.py @@ -1 +1 @@ -../../../../docs/code-examples/all/quick_start_connect.py \ No newline at end of file +../../../../docs/snippets/all/quick_start_connect.py \ No newline at end of file diff --git a/crates/re_viewer/data/quick_start_guides/quick_start_connect.rs b/crates/re_viewer/data/quick_start_guides/quick_start_connect.rs index f6e9d25d3ac9..9f4151700f0e 120000 --- a/crates/re_viewer/data/quick_start_guides/quick_start_connect.rs +++ b/crates/re_viewer/data/quick_start_guides/quick_start_connect.rs @@ -1 +1 @@ -../../../../docs/code-examples/all/quick_start_connect.rs \ No newline at end of file +../../../../docs/snippets/all/quick_start_connect.rs \ No newline at end of file diff --git a/crates/re_viewer/data/quick_start_guides/quick_start_spawn.cpp b/crates/re_viewer/data/quick_start_guides/quick_start_spawn.cpp deleted file mode 100644 index f0efac3d862f..000000000000 --- a/crates/re_viewer/data/quick_start_guides/quick_start_spawn.cpp +++ /dev/null @@ -1,17 +0,0 @@ -#include -#include - -using namespace rerun::demo; - -int main() { - // Create a new `RecordingStream` which sends data over TCP to the viewer process. - const auto rec = rerun::RecordingStream("rerun_example_demo"); - rec.spawn().exit_on_failure(); - - // Create some data using the `grid` utility function. - std::vector points = grid3d(-10.f, 10.f, 10); - std::vector colors = grid3d(0, 255, 10); - - // Log the "my_points" entity with our data, using the `Points3D` archetype. - rec.log("my_points", rerun::Points3D(points).with_colors(colors).with_radii({0.5f})); -} diff --git a/crates/re_viewer/data/quick_start_guides/quick_start_spawn.cpp b/crates/re_viewer/data/quick_start_guides/quick_start_spawn.cpp new file mode 120000 index 000000000000..e0f604450ea1 --- /dev/null +++ b/crates/re_viewer/data/quick_start_guides/quick_start_spawn.cpp @@ -0,0 +1 @@ +../../../../docs/snippets/all/quick_start_spawn.cpp \ No newline at end of file diff --git a/crates/re_viewer/data/quick_start_guides/quick_start_spawn.py b/crates/re_viewer/data/quick_start_guides/quick_start_spawn.py index f6eb369d0a16..b182333cc341 120000 --- a/crates/re_viewer/data/quick_start_guides/quick_start_spawn.py +++ b/crates/re_viewer/data/quick_start_guides/quick_start_spawn.py @@ -1 +1 @@ -../../../../docs/code-examples/all/quick_start_spawn.py \ No newline at end of file +../../../../docs/snippets/all/quick_start_spawn.py \ No newline at end of file diff --git a/crates/re_viewer/data/quick_start_guides/quick_start_spawn.rs b/crates/re_viewer/data/quick_start_guides/quick_start_spawn.rs index 36e9929496ed..09f65ff09b03 120000 --- a/crates/re_viewer/data/quick_start_guides/quick_start_spawn.rs +++ b/crates/re_viewer/data/quick_start_guides/quick_start_spawn.rs @@ -1 +1 @@ -../../../../docs/code-examples/all/quick_start_spawn.rs \ No newline at end of file +../../../../docs/snippets/all/quick_start_spawn.rs \ No newline at end of file diff --git a/crates/re_viewer/src/ui/welcome_screen/welcome_section.rs b/crates/re_viewer/src/ui/welcome_screen/welcome_section.rs index c7176b96d845..56bbc564a6af 100644 --- a/crates/re_viewer/src/ui/welcome_screen/welcome_section.rs +++ b/crates/re_viewer/src/ui/welcome_screen/welcome_section.rs @@ -23,17 +23,17 @@ const RUST_SPAWN_MARKDOWN: &str = include_str!("../../../data/quick_start_guides const HOW_DOES_IT_WORK_MARKDOWN: &str = include_str!("../../../data/quick_start_guides/how_does_it_work.md"); -const CPP_CONNECT_CODE_EXAMPLE: &str = +const CPP_CONNECT_SNIPPET: &str = include_str!("../../../data/quick_start_guides/quick_start_connect.cpp"); -const CPP_SPAWN_CODE_EXAMPLE: &str = +const CPP_SPAWN_SNIPPET: &str = include_str!("../../../data/quick_start_guides/quick_start_spawn.cpp"); -const PYTHON_CONNECT_CODE_EXAMPLE: &str = +const PYTHON_CONNECT_SNIPPET: &str = include_str!("../../../data/quick_start_guides/quick_start_connect.py"); -const PYTHON_SPAWN_CODE_EXAMPLE: &str = +const PYTHON_SPAWN_SNIPPET: &str = include_str!("../../../data/quick_start_guides/quick_start_spawn.py"); -const RUST_CONNECT_CODE_EXAMPLE: &str = +const RUST_CONNECT_SNIPPET: &str = include_str!("../../../data/quick_start_guides/quick_start_connect.rs"); -const RUST_SPAWN_CODE_EXAMPLE: &str = +const RUST_SPAWN_SNIPPET: &str = include_str!("../../../data/quick_start_guides/quick_start_spawn.rs"); struct Placeholder<'a> { @@ -48,27 +48,27 @@ const PLACEHOLDERS: &[Placeholder<'_>] = &[ }, Placeholder { key: "EXAMPLE_CODE_CPP_CONNECT", - value: CPP_CONNECT_CODE_EXAMPLE, + value: CPP_CONNECT_SNIPPET, }, Placeholder { key: "EXAMPLE_CODE_CPP_SPAWN", - value: CPP_SPAWN_CODE_EXAMPLE, + value: CPP_SPAWN_SNIPPET, }, Placeholder { key: "EXAMPLE_CODE_PYTHON_CONNECT", - value: PYTHON_CONNECT_CODE_EXAMPLE, + value: PYTHON_CONNECT_SNIPPET, }, Placeholder { key: "EXAMPLE_CODE_PYTHON_SPAWN", - value: PYTHON_SPAWN_CODE_EXAMPLE, + value: PYTHON_SPAWN_SNIPPET, }, Placeholder { key: "EXAMPLE_CODE_RUST_CONNECT", - value: RUST_CONNECT_CODE_EXAMPLE, + value: RUST_CONNECT_SNIPPET, }, Placeholder { key: "EXAMPLE_CODE_RUST_SPAWN", - value: RUST_SPAWN_CODE_EXAMPLE, + value: RUST_SPAWN_SNIPPET, }, ]; diff --git a/docs/README.md b/docs/README.md index e12be7f6f3fd..046f27b98d65 100644 --- a/docs/README.md +++ b/docs/README.md @@ -12,18 +12,7 @@ until the next time we roll out a site-update. We will generally to do this at l The site documentation lives in Markdown files inside [`/content`](./content). -The entry point to the documentation is [`/content/index.md`](./content/index.md) - -Code examples can be rendered in multiple languages by placing them in `code-examples/all`, like so: - -``` -/docs - /code-examples - /all - /my-example - /example.py - /example.rs -``` +The entry point to the documentation is [`/content/index.md`](./content/index.md). ## Special syntax @@ -38,9 +27,31 @@ order: 6 ``` -### Code Examples +### Snippets + +Snippets are small, self-contained code examples. + +To ensure all the code blocks in our documentation contain valid code, we give each one a name, and move it into `snippets/all`: +``` +/docs + /snippets + /all + /my-example + /example.py +``` + +Each snippet can and should be written in all our supported languages: +``` +/docs + /snippets + /all + /my-example + /example.cpp + /example.py + /example.rs +``` -Code-examples can be referenced in Markdown using this syntax: +Once the snippet is in `snippet/all`, it may be referenced in a documentation Markdown file using this syntax: ``` -code-example: my-example +snippet: my-example ``` diff --git a/docs/code-examples/src/lib.rs b/docs/code-examples/src/lib.rs deleted file mode 100644 index e9cf2fdc39f4..000000000000 --- a/docs/code-examples/src/lib.rs +++ /dev/null @@ -1,5 +0,0 @@ -//! Code examples that we show in documentation. - -mod examples; - -pub use examples::run; diff --git a/docs/code-examples/src/main.rs b/docs/code-examples/src/main.rs deleted file mode 100644 index 9d76de6ccb01..000000000000 --- a/docs/code-examples/src/main.rs +++ /dev/null @@ -1,6 +0,0 @@ -//! Code examples that we show in documentation. - -pub fn main() { - // Call into the generated code. - code_examples::run(); -} diff --git a/docs/content/concepts/annotation-context.md b/docs/content/concepts/annotation-context.md index 15d93033642c..06d983d1dda9 100644 --- a/docs/content/concepts/annotation-context.md +++ b/docs/content/concepts/annotation-context.md @@ -56,7 +56,7 @@ Annotation contexts are logged with: * Python: 🐍[`rr.AnnotationContext`](https://ref.rerun.io/docs/python/stable/common/archetypes/#rerun.archetypes.AnnotationContext) * Rust: 🦀[`rerun::AnnotationContext`](https://docs.rs/rerun/latest/rerun/archetypes/struct.AnnotationContext.html#) -code-example: annotation-context +snippet: annotation-context ## Affected Entities diff --git a/docs/content/concepts/entity-component.md b/docs/content/concepts/entity-component.md index 39ea923160d7..a03c2103fb9b 100644 --- a/docs/content/concepts/entity-component.md +++ b/docs/content/concepts/entity-component.md @@ -52,15 +52,15 @@ own set of components, bypassing archetypes altogether. In Python, the [rr.AnyValues](https://ref.rerun.io/docs/python/stable/common/custom_data/#rerun.AnyValues) helper object can be used to add custom component(s) to an archetype: -code-example: extra_values +snippet: extra_values It can also be used log an entirely custom set of components: -code-example: any_values +snippet: any_values For more complex use-cases, custom objects implementing the `rr.AsComponents` protocol can be used. For Rust, the `rerun::AsComponents` trait must be implemented: -code-example: custom_data +snippet: custom_data ### Empty Entities diff --git a/docs/content/concepts/timelines.md b/docs/content/concepts/timelines.md index 82a94ac6d95f..7237c1d408be 100644 --- a/docs/content/concepts/timelines.md +++ b/docs/content/concepts/timelines.md @@ -10,7 +10,7 @@ By default, each log is added to the `log_time` timeline, with a timestamp assig You can use the _set time_ functions (Python reference: [set_time_sequence](https://ref.rerun.io/docs/python/stable/common/logging_functions/#rerun.set_time_sequence), [set_time_seconds](https://ref.rerun.io/docs/python/stable/common/logging_functions/#rerun.set_time_seconds), [set_time_nanos](https://ref.rerun.io/docs/python/stable/common/logging_functions/#rerun.set_time_nanos)) to associate logs with other timestamps on other timelines. For example: -code-example: timelines_example +snippet: timelines_example This will add the logged points to the timelines `log_time`, `frame_idx`, and `sensor_time`. You can then choose which timeline you want to organize your data along in the expanded timeline view in the bottom of the Rerun Viewer. diff --git a/docs/content/howto/extend/custom-data.md b/docs/content/howto/extend/custom-data.md index 9b2342ca43bb..564bfef1854d 100644 --- a/docs/content/howto/extend/custom-data.md +++ b/docs/content/howto/extend/custom-data.md @@ -40,7 +40,7 @@ You can also define and log your own custom archetypes and components completely In this example we extend the Rerun Points3D archetype with custom confidence and indicator components. -code-example: custom_data +snippet: custom_data diff --git a/docs/content/howto/open-any-file.md b/docs/content/howto/open-any-file.md index 380bb427d1ce..b1cb45618dfa 100644 --- a/docs/content/howto/open-any-file.md +++ b/docs/content/howto/open-any-file.md @@ -29,7 +29,7 @@ To log the contents of a file from the SDK you can use the `log_file_from_path` Note: when calling these APIs from the SDK, the data will be loaded by the process running the SDK, not the Viewer! -code-example: log-file +snippet: log-file ## Adding support for arbitrary filetypes diff --git a/docs/content/howto/shared-recordings.md b/docs/content/howto/shared-recordings.md index 70f4be2f72c4..582f3caaabdf 100644 --- a/docs/content/howto/shared-recordings.md +++ b/docs/content/howto/shared-recordings.md @@ -12,7 +12,7 @@ All that matter is that they share the same Recording ID. By default, Rerun generates a random Recording ID everytime you start a new logging session, but you can override that behavior, e.g.: -code-example: custom-recording-id +snippet: custom-recording-id It's up to you to decide where each recording ends up: - all processes could stream their share of the data in real-time to a Rerun Viewer, diff --git a/docs/content/howto/using-native-loggers.md b/docs/content/howto/using-native-loggers.md index 133ef25c3251..3dcd8b919038 100644 --- a/docs/content/howto/using-native-loggers.md +++ b/docs/content/howto/using-native-loggers.md @@ -8,7 +8,7 @@ The Rerun SDK implements the native logging interfaces of its supported host lan The details of how to achieve that vary language by language, see the snippets below. -code-example: text_log_integration +snippet: text_log_integration diff --git a/docs/content/reference/migration/migration-0-9.md b/docs/content/reference/migration/migration-0-9.md index 290c64e36f94..3b18d7a4e1d2 100644 --- a/docs/content/reference/migration/migration-0-9.md +++ b/docs/content/reference/migration/migration-0-9.md @@ -16,7 +16,7 @@ API has been replaced by one (or more) new Archetypes. You can find more informa In practice, the changes are mostly demonstrated in the following example: -code-example: log_line +snippet: log_line Note that for any Archetype that supports batching the object names are now plural. For example, points are now logged with the `Points3D` archetype. Even if you are logging a single point, under the hood it is always implemented as a diff --git a/docs/content/reference/sdk-logging-controls.md b/docs/content/reference/sdk-logging-controls.md index 3421823bb301..99d5e5efc03b 100644 --- a/docs/content/reference/sdk-logging-controls.md +++ b/docs/content/reference/sdk-logging-controls.md @@ -24,7 +24,7 @@ The `RERUN` environment variable is read once during SDK initialization. The acc The "default-on" behavior can also be changed to a "default-off" behavior: -code-example: default-off-session +snippet: default-off-session ## Dynamically turn logging on/off diff --git a/docs/content/reference/types/archetypes/annotation_context.md b/docs/content/reference/types/archetypes/annotation_context.md index cb033f0749c0..3dff9cc93a10 100644 --- a/docs/content/reference/types/archetypes/annotation_context.md +++ b/docs/content/reference/types/archetypes/annotation_context.md @@ -23,7 +23,7 @@ path. ### Rectangles -code-example: annotation_context_rects +snippet: annotation_context_rects
@@ -37,7 +37,7 @@ code-example: annotation_context_rects ### Segmentation -code-example: annotation_context_segmentation +snippet: annotation_context_segmentation
@@ -51,7 +51,7 @@ code-example: annotation_context_segmentation ### Connections -code-example: annotation_context_connections +snippet: annotation_context_connections
diff --git a/docs/content/reference/types/archetypes/arrows2d.md b/docs/content/reference/types/archetypes/arrows2d.md index de57d50d492a..b0231ca8b43f 100644 --- a/docs/content/reference/types/archetypes/arrows2d.md +++ b/docs/content/reference/types/archetypes/arrows2d.md @@ -21,7 +21,7 @@ title: "Arrows2D" ### Simple batch of 2D Arrows -code-example: arrow2d_simple +snippet: arrow2d_simple
diff --git a/docs/content/reference/types/archetypes/arrows3d.md b/docs/content/reference/types/archetypes/arrows3d.md index 4c4d3f7a6edf..3699afc0fbb7 100644 --- a/docs/content/reference/types/archetypes/arrows3d.md +++ b/docs/content/reference/types/archetypes/arrows3d.md @@ -21,7 +21,7 @@ title: "Arrows3D" ### Simple batch of 3D Arrows -code-example: arrow3d_simple +snippet: arrow3d_simple
diff --git a/docs/content/reference/types/archetypes/asset3d.md b/docs/content/reference/types/archetypes/asset3d.md index e133d0ee2279..75e5f4188533 100644 --- a/docs/content/reference/types/archetypes/asset3d.md +++ b/docs/content/reference/types/archetypes/asset3d.md @@ -21,7 +21,7 @@ A prepacked 3D asset (`.gltf`, `.glb`, `.obj`, `.stl`, etc.). ### Simple 3D asset -code-example: asset3d_simple +snippet: asset3d_simple
@@ -35,5 +35,5 @@ code-example: asset3d_simple ### 3D asset with out-of-tree transform -code-example: asset3d_out_of_tree +snippet: asset3d_out_of_tree diff --git a/docs/content/reference/types/archetypes/bar_chart.md b/docs/content/reference/types/archetypes/bar_chart.md index fa8c13e47149..5a37a466ff3f 100644 --- a/docs/content/reference/types/archetypes/bar_chart.md +++ b/docs/content/reference/types/archetypes/bar_chart.md @@ -21,7 +21,7 @@ The x values will be the indices of the array, and the bar heights will be the p ### Simple bar chart -code-example: bar_chart +snippet: bar_chart
diff --git a/docs/content/reference/types/archetypes/boxes2d.md b/docs/content/reference/types/archetypes/boxes2d.md index 2c7ec33ef287..5da8ad3f9434 100644 --- a/docs/content/reference/types/archetypes/boxes2d.md +++ b/docs/content/reference/types/archetypes/boxes2d.md @@ -21,7 +21,7 @@ title: "Boxes2D" ### Simple 2D boxes -code-example: box2d_simple +snippet: box2d_simple
diff --git a/docs/content/reference/types/archetypes/boxes3d.md b/docs/content/reference/types/archetypes/boxes3d.md index 74d984ac87c9..741c5c4c7b66 100644 --- a/docs/content/reference/types/archetypes/boxes3d.md +++ b/docs/content/reference/types/archetypes/boxes3d.md @@ -21,7 +21,7 @@ title: "Boxes3D" ### Simple 3D boxes -code-example: box3d_simple +snippet: box3d_simple
@@ -35,7 +35,7 @@ code-example: box3d_simple ### Batch of 3D boxes -code-example: box3d_batch +snippet: box3d_batch
diff --git a/docs/content/reference/types/archetypes/clear.md b/docs/content/reference/types/archetypes/clear.md index 4fb3f64715dc..ef0787e47d1b 100644 --- a/docs/content/reference/types/archetypes/clear.md +++ b/docs/content/reference/types/archetypes/clear.md @@ -27,7 +27,7 @@ data (i.e. discontinuous lines). ### Flat -code-example: clear_simple +snippet: clear_simple
@@ -41,5 +41,5 @@ code-example: clear_simple ### Recursive -code-example: clear_recursive +snippet: clear_recursive diff --git a/docs/content/reference/types/archetypes/depth_image.md b/docs/content/reference/types/archetypes/depth_image.md index 945ec6532ed6..8017e1e822ee 100644 --- a/docs/content/reference/types/archetypes/depth_image.md +++ b/docs/content/reference/types/archetypes/depth_image.md @@ -22,7 +22,7 @@ Each pixel corresponds to a depth value in units specified by `meter`. ### Simple example -code-example: depth_image_simple +snippet: depth_image_simple
@@ -36,7 +36,7 @@ code-example: depth_image_simple ### Depth to 3D example -code-example: depth_image_3d +snippet: depth_image_3d
diff --git a/docs/content/reference/types/archetypes/disconnected_space.md b/docs/content/reference/types/archetypes/disconnected_space.md index 3e446c0e674b..a53a280c0a49 100644 --- a/docs/content/reference/types/archetypes/disconnected_space.md +++ b/docs/content/reference/types/archetypes/disconnected_space.md @@ -22,7 +22,7 @@ This is useful for specifying that a subgraph is independent of the rest of the ### Disconnected Space -code-example: disconnected_space +snippet: disconnected_space
diff --git a/docs/content/reference/types/archetypes/image.md b/docs/content/reference/types/archetypes/image.md index 2ce162be3af0..8e323397c58a 100644 --- a/docs/content/reference/types/archetypes/image.md +++ b/docs/content/reference/types/archetypes/image.md @@ -27,7 +27,7 @@ Leading and trailing unit-dimensions are ignored, so that ### image_simple -code-example: image_simple +snippet: image_simple
diff --git a/docs/content/reference/types/archetypes/line_strips2d.md b/docs/content/reference/types/archetypes/line_strips2d.md index af824655a864..faefdf1201c2 100644 --- a/docs/content/reference/types/archetypes/line_strips2d.md +++ b/docs/content/reference/types/archetypes/line_strips2d.md @@ -21,7 +21,7 @@ title: "LineStrips2D" ### line_strip2d_simple -code-example: line_strip2d_simple +snippet: line_strip2d_simple
@@ -35,7 +35,7 @@ code-example: line_strip2d_simple ### line_segments2d_simple -code-example: line_segments2d_simple +snippet: line_segments2d_simple
@@ -49,7 +49,7 @@ code-example: line_segments2d_simple ### line_strip2d_batch -code-example: line_strip2d_batch +snippet: line_strip2d_batch
diff --git a/docs/content/reference/types/archetypes/line_strips3d.md b/docs/content/reference/types/archetypes/line_strips3d.md index 0614898946d6..a2e8d1dbebaa 100644 --- a/docs/content/reference/types/archetypes/line_strips3d.md +++ b/docs/content/reference/types/archetypes/line_strips3d.md @@ -21,7 +21,7 @@ title: "LineStrips3D" ### Simple example -code-example: line_strip3d_simple +snippet: line_strip3d_simple
@@ -35,7 +35,7 @@ code-example: line_strip3d_simple ### Many individual segments -code-example: line_segments3d_simple +snippet: line_segments3d_simple
@@ -49,7 +49,7 @@ code-example: line_segments3d_simple ### Many strips -code-example: line_strip3d_batch +snippet: line_strip3d_batch
diff --git a/docs/content/reference/types/archetypes/mesh3d.md b/docs/content/reference/types/archetypes/mesh3d.md index 0dd58af4f9e7..4d3c0443a236 100644 --- a/docs/content/reference/types/archetypes/mesh3d.md +++ b/docs/content/reference/types/archetypes/mesh3d.md @@ -21,7 +21,7 @@ A 3D triangle mesh as specified by its per-mesh and per-vertex properties. ### Simple indexed 3D mesh -code-example: mesh3d_indexed +snippet: mesh3d_indexed
@@ -35,7 +35,7 @@ code-example: mesh3d_indexed ### 3D mesh with partial updates -code-example: mesh3d_partial_updates +snippet: mesh3d_partial_updates
diff --git a/docs/content/reference/types/archetypes/pinhole.md b/docs/content/reference/types/archetypes/pinhole.md index f7d0e2b0fdf5..9c124df7762e 100644 --- a/docs/content/reference/types/archetypes/pinhole.md +++ b/docs/content/reference/types/archetypes/pinhole.md @@ -21,7 +21,7 @@ Camera perspective projection (a.k.a. intrinsics). ### Simple Pinhole Camera -code-example: pinhole_simple +snippet: pinhole_simple
@@ -35,7 +35,7 @@ code-example: pinhole_simple ### Perspective Pinhole Camera -code-example: pinhole_perspective +snippet: pinhole_perspective
diff --git a/docs/content/reference/types/archetypes/points2d.md b/docs/content/reference/types/archetypes/points2d.md index 136de1aa2dc1..032d67924eab 100644 --- a/docs/content/reference/types/archetypes/points2d.md +++ b/docs/content/reference/types/archetypes/points2d.md @@ -21,7 +21,7 @@ A 2D point cloud with positions and optional colors, radii, labels, etc. ### Simple 2D points -code-example: point2d_simple +snippet: point2d_simple
@@ -35,7 +35,7 @@ code-example: point2d_simple ### Randomly distributed 2D points with varying color and radius -code-example: point2d_random +snippet: point2d_random
diff --git a/docs/content/reference/types/archetypes/points3d.md b/docs/content/reference/types/archetypes/points3d.md index f084417090cd..e5717824498e 100644 --- a/docs/content/reference/types/archetypes/points3d.md +++ b/docs/content/reference/types/archetypes/points3d.md @@ -21,7 +21,7 @@ A 3D point cloud with positions and optional colors, radii, labels, etc. ### Simple 3D points -code-example: point3d_simple +snippet: point3d_simple
@@ -35,7 +35,7 @@ code-example: point3d_simple ### Randomly distributed 3D points with varying color and radius -code-example: point3d_random +snippet: point3d_random
diff --git a/docs/content/reference/types/archetypes/scalar.md b/docs/content/reference/types/archetypes/scalar.md index 0faef1724e79..246d1f88e8eb 100644 --- a/docs/content/reference/types/archetypes/scalar.md +++ b/docs/content/reference/types/archetypes/scalar.md @@ -25,7 +25,7 @@ the plot-specific archetypes through the blueprint. ### Simple line plot -code-example: scalar_simple +snippet: scalar_simple
@@ -39,7 +39,7 @@ code-example: scalar_simple ### Multiple time series plots -code-example: scalar_multiple_plots +snippet: scalar_multiple_plots
diff --git a/docs/content/reference/types/archetypes/segmentation_image.md b/docs/content/reference/types/archetypes/segmentation_image.md index f093fcb8d15d..39c943f9d5b2 100644 --- a/docs/content/reference/types/archetypes/segmentation_image.md +++ b/docs/content/reference/types/archetypes/segmentation_image.md @@ -28,7 +28,7 @@ Leading and trailing unit-dimensions are ignored, so that ### Simple segmentation image -code-example: segmentation_image_simple +snippet: segmentation_image_simple
diff --git a/docs/content/reference/types/archetypes/series_line.md b/docs/content/reference/types/archetypes/series_line.md index ad4aef8bd2ec..940acd5bca52 100644 --- a/docs/content/reference/types/archetypes/series_line.md +++ b/docs/content/reference/types/archetypes/series_line.md @@ -21,7 +21,7 @@ the `Scalar` archetype. ### Series Line -code-example: series_line_style +snippet: series_line_style
diff --git a/docs/content/reference/types/archetypes/series_point.md b/docs/content/reference/types/archetypes/series_point.md index 6e77a30f87d4..6e3761c346eb 100644 --- a/docs/content/reference/types/archetypes/series_point.md +++ b/docs/content/reference/types/archetypes/series_point.md @@ -21,7 +21,7 @@ the `Scalar` archetype. ### Series Point -code-example: series_point_style +snippet: series_point_style
diff --git a/docs/content/reference/types/archetypes/tensor.md b/docs/content/reference/types/archetypes/tensor.md index ab2a7a436978..a11008eb9fb9 100644 --- a/docs/content/reference/types/archetypes/tensor.md +++ b/docs/content/reference/types/archetypes/tensor.md @@ -17,7 +17,7 @@ A generic n-dimensional Tensor. ### Simple Tensor -code-example: tensor_simple +snippet: tensor_simple
diff --git a/docs/content/reference/types/archetypes/text_document.md b/docs/content/reference/types/archetypes/text_document.md index 80d53aebc46f..a52953b8e34c 100644 --- a/docs/content/reference/types/archetypes/text_document.md +++ b/docs/content/reference/types/archetypes/text_document.md @@ -21,7 +21,7 @@ Supports raw text and markdown. ### Markdown text document -code-example: text_document +snippet: text_document
diff --git a/docs/content/reference/types/archetypes/text_log.md b/docs/content/reference/types/archetypes/text_log.md index be884751fe2d..f3d2506631d9 100644 --- a/docs/content/reference/types/archetypes/text_log.md +++ b/docs/content/reference/types/archetypes/text_log.md @@ -21,7 +21,7 @@ A log entry in a text log, comprised of a text body and its log level. ### text_log_integration -code-example: text_log_integration +snippet: text_log_integration
diff --git a/docs/content/reference/types/archetypes/time_series_scalar.md b/docs/content/reference/types/archetypes/time_series_scalar.md index a25e3a40b550..982a179e99a7 100644 --- a/docs/content/reference/types/archetypes/time_series_scalar.md +++ b/docs/content/reference/types/archetypes/time_series_scalar.md @@ -30,7 +30,7 @@ This archetype is in the process of being deprecated. Prefer usage of ### Simple line plot -code-example: scalar_simple +snippet: scalar_simple
@@ -44,7 +44,7 @@ code-example: scalar_simple ### Multiple time series plots -code-example: scalar_multiple_plots +snippet: scalar_multiple_plots
diff --git a/docs/content/reference/types/archetypes/transform3d.md b/docs/content/reference/types/archetypes/transform3d.md index d94e480c015d..188dfe9c1241 100644 --- a/docs/content/reference/types/archetypes/transform3d.md +++ b/docs/content/reference/types/archetypes/transform3d.md @@ -17,7 +17,7 @@ A 3D transform. ### Variety of 3D transforms -code-example: transform3d_simple +snippet: transform3d_simple
diff --git a/docs/content/reference/types/archetypes/view_coordinates.md b/docs/content/reference/types/archetypes/view_coordinates.md index c456f7652f1e..3277a337ab43 100644 --- a/docs/content/reference/types/archetypes/view_coordinates.md +++ b/docs/content/reference/types/archetypes/view_coordinates.md @@ -24,7 +24,7 @@ down, and the Z axis points forward. ### View coordinates for adjusting the eye camera -code-example: view_coordinates_simple +snippet: view_coordinates_simple
diff --git a/docs/code-examples/CMakeLists.txt b/docs/snippets/CMakeLists.txt similarity index 91% rename from docs/code-examples/CMakeLists.txt rename to docs/snippets/CMakeLists.txt index fc91f67ec1b0..d7dde4a3eaa6 100644 --- a/docs/code-examples/CMakeLists.txt +++ b/docs/snippets/CMakeLists.txt @@ -6,7 +6,7 @@ file(GLOB sources_list true ${CMAKE_CURRENT_SOURCE_DIR}/all/*.cpp) # TODO(ab): incomplete code, need hideable stubs, see https://github.com/rerun-io/landing/issues/515 list(REMOVE_ITEM sources_list ${CMAKE_CURRENT_SOURCE_DIR}/all/timelines_example.cpp) -add_custom_target(doc_examples) +add_custom_target(snippets) foreach(SOURCE_PATH ${sources_list}) get_filename_component(SOURCE_NAME ${SOURCE_PATH} NAME_WLE) @@ -22,7 +22,7 @@ foreach(SOURCE_PATH ${sources_list}) rerun_strict_warning_settings(${EXAMPLE_TARGET}) target_link_libraries(${EXAMPLE_TARGET} PRIVATE rerun_sdk) - add_dependencies(doc_examples ${EXAMPLE_TARGET}) + add_dependencies(snippets ${EXAMPLE_TARGET}) endforeach() # `text_log_integration` uses `loguru` as the example text logging library. diff --git a/docs/code-examples/Cargo.toml b/docs/snippets/Cargo.toml similarity index 94% rename from docs/code-examples/Cargo.toml rename to docs/snippets/Cargo.toml index a5b4bab365a5..f69cb77e0f25 100644 --- a/docs/code-examples/Cargo.toml +++ b/docs/snippets/Cargo.toml @@ -1,5 +1,5 @@ [package] -name = "code_examples" +name = "snippets" version.workspace = true edition.workspace = true rust-version.workspace = true diff --git a/docs/code-examples/README.md b/docs/snippets/README.md similarity index 62% rename from docs/code-examples/README.md rename to docs/snippets/README.md index 708032925555..510d504a6962 100644 --- a/docs/code-examples/README.md +++ b/docs/snippets/README.md @@ -9,22 +9,22 @@ Most of these examples are automatically used as docstrings for the `Archetype` You can run each example individually using the following: - **C++**: - - `pixi run cpp-build-doc-examples` to compile all examples - - `./build/docs/code-examples/all/` to run, e.g. `./build/docs/code-examples/all/point3d_random` + - `pixi run cpp-build-snippets` to compile all examples + - `./build/docs/snippets/all/` to run, e.g. `./build/docs/snippets/all/point3d_random` - **Python**: `python .py`, e.g. `python point3d_random.py`. -- **Rust**: `cargo run -p code_examples -- [args]`, e.g. `cargo run -p code_examples -- point3d_random`. +- **Rust**: `cargo run -p snippets -- [args]`, e.g. `cargo run -p snippets -- point3d_random`. ## Comparison test -The script `compare_code_example_output.py` execute the same logging commands from all 3 SDKs, save the results to distinct rrd files, and finally compare these rrd files. +The script `compare_snippet_output.py` execute the same logging commands from all 3 SDKs, save the results to distinct rrd files, and finally compare these rrd files. These tests are then automatically run by the CI, which will loudly complain if the resulting rrd files don't match. These tests check that A) all of our SDKs yield the exact same data when used the same way and B) act as regression tests, relying on the fact that it is extremely unlikely that all supported languages break in the exact same way at the exact same time. ### Usage -To run the comparison tests, check out `./docs/code-examples/compare_code_example_output.py --help`. -`./docs/code-examples/compare_code_example_output.py` is a valid invocation that will build all 3 SDKs and run all tests for all of them. +To run the comparison tests, check out `./docs/snippets/compare_snippet_output.py --help`. +`./docs/snippets/compare_snippet_output.py` is a valid invocation that will build all 3 SDKs and run all tests for all of them. ### Implementing new tests diff --git a/docs/code-examples/all/annotation-context/example.py b/docs/snippets/all/annotation-context/example.py similarity index 100% rename from docs/code-examples/all/annotation-context/example.py rename to docs/snippets/all/annotation-context/example.py diff --git a/docs/code-examples/all/annotation-context/example.rs b/docs/snippets/all/annotation-context/example.rs similarity index 100% rename from docs/code-examples/all/annotation-context/example.rs rename to docs/snippets/all/annotation-context/example.rs diff --git a/docs/code-examples/all/annotation_context_connections.cpp b/docs/snippets/all/annotation_context_connections.cpp similarity index 100% rename from docs/code-examples/all/annotation_context_connections.cpp rename to docs/snippets/all/annotation_context_connections.cpp diff --git a/docs/code-examples/all/annotation_context_connections.py b/docs/snippets/all/annotation_context_connections.py similarity index 100% rename from docs/code-examples/all/annotation_context_connections.py rename to docs/snippets/all/annotation_context_connections.py diff --git a/docs/code-examples/all/annotation_context_connections.rs b/docs/snippets/all/annotation_context_connections.rs similarity index 100% rename from docs/code-examples/all/annotation_context_connections.rs rename to docs/snippets/all/annotation_context_connections.rs diff --git a/docs/code-examples/all/annotation_context_rects.cpp b/docs/snippets/all/annotation_context_rects.cpp similarity index 100% rename from docs/code-examples/all/annotation_context_rects.cpp rename to docs/snippets/all/annotation_context_rects.cpp diff --git a/docs/code-examples/all/annotation_context_rects.py b/docs/snippets/all/annotation_context_rects.py similarity index 100% rename from docs/code-examples/all/annotation_context_rects.py rename to docs/snippets/all/annotation_context_rects.py diff --git a/docs/code-examples/all/annotation_context_rects.rs b/docs/snippets/all/annotation_context_rects.rs similarity index 100% rename from docs/code-examples/all/annotation_context_rects.rs rename to docs/snippets/all/annotation_context_rects.rs diff --git a/docs/code-examples/all/annotation_context_segmentation.cpp b/docs/snippets/all/annotation_context_segmentation.cpp similarity index 100% rename from docs/code-examples/all/annotation_context_segmentation.cpp rename to docs/snippets/all/annotation_context_segmentation.cpp diff --git a/docs/code-examples/all/annotation_context_segmentation.py b/docs/snippets/all/annotation_context_segmentation.py similarity index 100% rename from docs/code-examples/all/annotation_context_segmentation.py rename to docs/snippets/all/annotation_context_segmentation.py diff --git a/docs/code-examples/all/annotation_context_segmentation.rs b/docs/snippets/all/annotation_context_segmentation.rs similarity index 100% rename from docs/code-examples/all/annotation_context_segmentation.rs rename to docs/snippets/all/annotation_context_segmentation.rs diff --git a/docs/code-examples/all/any_values.py b/docs/snippets/all/any_values.py similarity index 100% rename from docs/code-examples/all/any_values.py rename to docs/snippets/all/any_values.py diff --git a/docs/code-examples/all/arrow2d_simple.cpp b/docs/snippets/all/arrow2d_simple.cpp similarity index 100% rename from docs/code-examples/all/arrow2d_simple.cpp rename to docs/snippets/all/arrow2d_simple.cpp diff --git a/docs/code-examples/all/arrow2d_simple.py b/docs/snippets/all/arrow2d_simple.py similarity index 100% rename from docs/code-examples/all/arrow2d_simple.py rename to docs/snippets/all/arrow2d_simple.py diff --git a/docs/code-examples/all/arrow2d_simple.rs b/docs/snippets/all/arrow2d_simple.rs similarity index 100% rename from docs/code-examples/all/arrow2d_simple.rs rename to docs/snippets/all/arrow2d_simple.rs diff --git a/docs/code-examples/all/arrow3d_simple.cpp b/docs/snippets/all/arrow3d_simple.cpp similarity index 100% rename from docs/code-examples/all/arrow3d_simple.cpp rename to docs/snippets/all/arrow3d_simple.cpp diff --git a/docs/code-examples/all/arrow3d_simple.py b/docs/snippets/all/arrow3d_simple.py similarity index 100% rename from docs/code-examples/all/arrow3d_simple.py rename to docs/snippets/all/arrow3d_simple.py diff --git a/docs/code-examples/all/arrow3d_simple.rs b/docs/snippets/all/arrow3d_simple.rs similarity index 100% rename from docs/code-examples/all/arrow3d_simple.rs rename to docs/snippets/all/arrow3d_simple.rs diff --git a/docs/code-examples/all/asset3d_out_of_tree.cpp b/docs/snippets/all/asset3d_out_of_tree.cpp similarity index 100% rename from docs/code-examples/all/asset3d_out_of_tree.cpp rename to docs/snippets/all/asset3d_out_of_tree.cpp diff --git a/docs/code-examples/all/asset3d_out_of_tree.py b/docs/snippets/all/asset3d_out_of_tree.py similarity index 100% rename from docs/code-examples/all/asset3d_out_of_tree.py rename to docs/snippets/all/asset3d_out_of_tree.py diff --git a/docs/code-examples/all/asset3d_out_of_tree.rs b/docs/snippets/all/asset3d_out_of_tree.rs similarity index 100% rename from docs/code-examples/all/asset3d_out_of_tree.rs rename to docs/snippets/all/asset3d_out_of_tree.rs diff --git a/docs/code-examples/all/asset3d_simple.cpp b/docs/snippets/all/asset3d_simple.cpp similarity index 100% rename from docs/code-examples/all/asset3d_simple.cpp rename to docs/snippets/all/asset3d_simple.cpp diff --git a/docs/code-examples/all/asset3d_simple.py b/docs/snippets/all/asset3d_simple.py similarity index 100% rename from docs/code-examples/all/asset3d_simple.py rename to docs/snippets/all/asset3d_simple.py diff --git a/docs/code-examples/all/asset3d_simple.rs b/docs/snippets/all/asset3d_simple.rs similarity index 100% rename from docs/code-examples/all/asset3d_simple.rs rename to docs/snippets/all/asset3d_simple.rs diff --git a/docs/code-examples/all/bar_chart.cpp b/docs/snippets/all/bar_chart.cpp similarity index 100% rename from docs/code-examples/all/bar_chart.cpp rename to docs/snippets/all/bar_chart.cpp diff --git a/docs/code-examples/all/bar_chart.py b/docs/snippets/all/bar_chart.py similarity index 100% rename from docs/code-examples/all/bar_chart.py rename to docs/snippets/all/bar_chart.py diff --git a/docs/code-examples/all/bar_chart.rs b/docs/snippets/all/bar_chart.rs similarity index 100% rename from docs/code-examples/all/bar_chart.rs rename to docs/snippets/all/bar_chart.rs diff --git a/docs/code-examples/all/box2d_simple.cpp b/docs/snippets/all/box2d_simple.cpp similarity index 100% rename from docs/code-examples/all/box2d_simple.cpp rename to docs/snippets/all/box2d_simple.cpp diff --git a/docs/code-examples/all/box2d_simple.py b/docs/snippets/all/box2d_simple.py similarity index 100% rename from docs/code-examples/all/box2d_simple.py rename to docs/snippets/all/box2d_simple.py diff --git a/docs/code-examples/all/box2d_simple.rs b/docs/snippets/all/box2d_simple.rs similarity index 100% rename from docs/code-examples/all/box2d_simple.rs rename to docs/snippets/all/box2d_simple.rs diff --git a/docs/code-examples/all/box3d_batch.cpp b/docs/snippets/all/box3d_batch.cpp similarity index 100% rename from docs/code-examples/all/box3d_batch.cpp rename to docs/snippets/all/box3d_batch.cpp diff --git a/docs/code-examples/all/box3d_batch.py b/docs/snippets/all/box3d_batch.py similarity index 100% rename from docs/code-examples/all/box3d_batch.py rename to docs/snippets/all/box3d_batch.py diff --git a/docs/code-examples/all/box3d_batch.rs b/docs/snippets/all/box3d_batch.rs similarity index 100% rename from docs/code-examples/all/box3d_batch.rs rename to docs/snippets/all/box3d_batch.rs diff --git a/docs/code-examples/all/box3d_simple.cpp b/docs/snippets/all/box3d_simple.cpp similarity index 100% rename from docs/code-examples/all/box3d_simple.cpp rename to docs/snippets/all/box3d_simple.cpp diff --git a/docs/code-examples/all/box3d_simple.py b/docs/snippets/all/box3d_simple.py similarity index 100% rename from docs/code-examples/all/box3d_simple.py rename to docs/snippets/all/box3d_simple.py diff --git a/docs/code-examples/all/box3d_simple.rs b/docs/snippets/all/box3d_simple.rs similarity index 100% rename from docs/code-examples/all/box3d_simple.rs rename to docs/snippets/all/box3d_simple.rs diff --git a/docs/code-examples/all/clear_recursive.cpp b/docs/snippets/all/clear_recursive.cpp similarity index 100% rename from docs/code-examples/all/clear_recursive.cpp rename to docs/snippets/all/clear_recursive.cpp diff --git a/docs/code-examples/all/clear_recursive.py b/docs/snippets/all/clear_recursive.py similarity index 100% rename from docs/code-examples/all/clear_recursive.py rename to docs/snippets/all/clear_recursive.py diff --git a/docs/code-examples/all/clear_recursive.rs b/docs/snippets/all/clear_recursive.rs similarity index 100% rename from docs/code-examples/all/clear_recursive.rs rename to docs/snippets/all/clear_recursive.rs diff --git a/docs/code-examples/all/clear_simple.cpp b/docs/snippets/all/clear_simple.cpp similarity index 100% rename from docs/code-examples/all/clear_simple.cpp rename to docs/snippets/all/clear_simple.cpp diff --git a/docs/code-examples/all/clear_simple.py b/docs/snippets/all/clear_simple.py similarity index 100% rename from docs/code-examples/all/clear_simple.py rename to docs/snippets/all/clear_simple.py diff --git a/docs/code-examples/all/clear_simple.rs b/docs/snippets/all/clear_simple.rs similarity index 100% rename from docs/code-examples/all/clear_simple.rs rename to docs/snippets/all/clear_simple.rs diff --git a/docs/code-examples/all/custom-recording-id/example.cpp b/docs/snippets/all/custom-recording-id/example.cpp similarity index 100% rename from docs/code-examples/all/custom-recording-id/example.cpp rename to docs/snippets/all/custom-recording-id/example.cpp diff --git a/docs/code-examples/all/custom-recording-id/example.py b/docs/snippets/all/custom-recording-id/example.py similarity index 100% rename from docs/code-examples/all/custom-recording-id/example.py rename to docs/snippets/all/custom-recording-id/example.py diff --git a/docs/code-examples/all/custom-recording-id/example.rs b/docs/snippets/all/custom-recording-id/example.rs similarity index 100% rename from docs/code-examples/all/custom-recording-id/example.rs rename to docs/snippets/all/custom-recording-id/example.rs diff --git a/docs/code-examples/all/custom_data.cpp b/docs/snippets/all/custom_data.cpp similarity index 100% rename from docs/code-examples/all/custom_data.cpp rename to docs/snippets/all/custom_data.cpp diff --git a/docs/code-examples/all/custom_data.py b/docs/snippets/all/custom_data.py similarity index 100% rename from docs/code-examples/all/custom_data.py rename to docs/snippets/all/custom_data.py diff --git a/docs/code-examples/all/custom_data.rs b/docs/snippets/all/custom_data.rs similarity index 100% rename from docs/code-examples/all/custom_data.rs rename to docs/snippets/all/custom_data.rs diff --git a/docs/code-examples/all/default-off-session/example.py b/docs/snippets/all/default-off-session/example.py similarity index 100% rename from docs/code-examples/all/default-off-session/example.py rename to docs/snippets/all/default-off-session/example.py diff --git a/docs/code-examples/all/default-off-session/example.rs b/docs/snippets/all/default-off-session/example.rs similarity index 100% rename from docs/code-examples/all/default-off-session/example.rs rename to docs/snippets/all/default-off-session/example.rs diff --git a/docs/code-examples/all/depth_image_3d.cpp b/docs/snippets/all/depth_image_3d.cpp similarity index 100% rename from docs/code-examples/all/depth_image_3d.cpp rename to docs/snippets/all/depth_image_3d.cpp diff --git a/docs/code-examples/all/depth_image_3d.py b/docs/snippets/all/depth_image_3d.py similarity index 100% rename from docs/code-examples/all/depth_image_3d.py rename to docs/snippets/all/depth_image_3d.py diff --git a/docs/code-examples/all/depth_image_3d.rs b/docs/snippets/all/depth_image_3d.rs similarity index 100% rename from docs/code-examples/all/depth_image_3d.rs rename to docs/snippets/all/depth_image_3d.rs diff --git a/docs/code-examples/all/depth_image_simple.cpp b/docs/snippets/all/depth_image_simple.cpp similarity index 100% rename from docs/code-examples/all/depth_image_simple.cpp rename to docs/snippets/all/depth_image_simple.cpp diff --git a/docs/code-examples/all/depth_image_simple.py b/docs/snippets/all/depth_image_simple.py similarity index 100% rename from docs/code-examples/all/depth_image_simple.py rename to docs/snippets/all/depth_image_simple.py diff --git a/docs/code-examples/all/depth_image_simple.rs b/docs/snippets/all/depth_image_simple.rs similarity index 100% rename from docs/code-examples/all/depth_image_simple.rs rename to docs/snippets/all/depth_image_simple.rs diff --git a/docs/code-examples/all/disconnected_space.cpp b/docs/snippets/all/disconnected_space.cpp similarity index 100% rename from docs/code-examples/all/disconnected_space.cpp rename to docs/snippets/all/disconnected_space.cpp diff --git a/docs/code-examples/all/disconnected_space.py b/docs/snippets/all/disconnected_space.py similarity index 100% rename from docs/code-examples/all/disconnected_space.py rename to docs/snippets/all/disconnected_space.py diff --git a/docs/code-examples/all/disconnected_space.rs b/docs/snippets/all/disconnected_space.rs similarity index 100% rename from docs/code-examples/all/disconnected_space.rs rename to docs/snippets/all/disconnected_space.rs diff --git a/docs/code-examples/all/entity_path.cpp b/docs/snippets/all/entity_path.cpp similarity index 100% rename from docs/code-examples/all/entity_path.cpp rename to docs/snippets/all/entity_path.cpp diff --git a/docs/code-examples/all/entity_path.py b/docs/snippets/all/entity_path.py similarity index 100% rename from docs/code-examples/all/entity_path.py rename to docs/snippets/all/entity_path.py diff --git a/docs/code-examples/all/entity_path.rs b/docs/snippets/all/entity_path.rs similarity index 100% rename from docs/code-examples/all/entity_path.rs rename to docs/snippets/all/entity_path.rs diff --git a/docs/code-examples/all/extra_values.py b/docs/snippets/all/extra_values.py similarity index 100% rename from docs/code-examples/all/extra_values.py rename to docs/snippets/all/extra_values.py diff --git a/docs/code-examples/all/image_advanced.py b/docs/snippets/all/image_advanced.py similarity index 100% rename from docs/code-examples/all/image_advanced.py rename to docs/snippets/all/image_advanced.py diff --git a/docs/code-examples/all/image_simple.cpp b/docs/snippets/all/image_simple.cpp similarity index 100% rename from docs/code-examples/all/image_simple.cpp rename to docs/snippets/all/image_simple.cpp diff --git a/docs/code-examples/all/image_simple.py b/docs/snippets/all/image_simple.py similarity index 100% rename from docs/code-examples/all/image_simple.py rename to docs/snippets/all/image_simple.py diff --git a/docs/code-examples/all/image_simple.rs b/docs/snippets/all/image_simple.rs similarity index 100% rename from docs/code-examples/all/image_simple.rs rename to docs/snippets/all/image_simple.rs diff --git a/docs/code-examples/all/line_segments2d_simple.cpp b/docs/snippets/all/line_segments2d_simple.cpp similarity index 100% rename from docs/code-examples/all/line_segments2d_simple.cpp rename to docs/snippets/all/line_segments2d_simple.cpp diff --git a/docs/code-examples/all/line_segments2d_simple.py b/docs/snippets/all/line_segments2d_simple.py similarity index 100% rename from docs/code-examples/all/line_segments2d_simple.py rename to docs/snippets/all/line_segments2d_simple.py diff --git a/docs/code-examples/all/line_segments2d_simple.rs b/docs/snippets/all/line_segments2d_simple.rs similarity index 100% rename from docs/code-examples/all/line_segments2d_simple.rs rename to docs/snippets/all/line_segments2d_simple.rs diff --git a/docs/code-examples/all/line_segments3d_simple.cpp b/docs/snippets/all/line_segments3d_simple.cpp similarity index 100% rename from docs/code-examples/all/line_segments3d_simple.cpp rename to docs/snippets/all/line_segments3d_simple.cpp diff --git a/docs/code-examples/all/line_segments3d_simple.py b/docs/snippets/all/line_segments3d_simple.py similarity index 100% rename from docs/code-examples/all/line_segments3d_simple.py rename to docs/snippets/all/line_segments3d_simple.py diff --git a/docs/code-examples/all/line_segments3d_simple.rs b/docs/snippets/all/line_segments3d_simple.rs similarity index 100% rename from docs/code-examples/all/line_segments3d_simple.rs rename to docs/snippets/all/line_segments3d_simple.rs diff --git a/docs/code-examples/all/line_strip2d_batch.cpp b/docs/snippets/all/line_strip2d_batch.cpp similarity index 100% rename from docs/code-examples/all/line_strip2d_batch.cpp rename to docs/snippets/all/line_strip2d_batch.cpp diff --git a/docs/code-examples/all/line_strip2d_batch.py b/docs/snippets/all/line_strip2d_batch.py similarity index 100% rename from docs/code-examples/all/line_strip2d_batch.py rename to docs/snippets/all/line_strip2d_batch.py diff --git a/docs/code-examples/all/line_strip2d_batch.rs b/docs/snippets/all/line_strip2d_batch.rs similarity index 100% rename from docs/code-examples/all/line_strip2d_batch.rs rename to docs/snippets/all/line_strip2d_batch.rs diff --git a/docs/code-examples/all/line_strip2d_simple.cpp b/docs/snippets/all/line_strip2d_simple.cpp similarity index 100% rename from docs/code-examples/all/line_strip2d_simple.cpp rename to docs/snippets/all/line_strip2d_simple.cpp diff --git a/docs/code-examples/all/line_strip2d_simple.py b/docs/snippets/all/line_strip2d_simple.py similarity index 100% rename from docs/code-examples/all/line_strip2d_simple.py rename to docs/snippets/all/line_strip2d_simple.py diff --git a/docs/code-examples/all/line_strip2d_simple.rs b/docs/snippets/all/line_strip2d_simple.rs similarity index 100% rename from docs/code-examples/all/line_strip2d_simple.rs rename to docs/snippets/all/line_strip2d_simple.rs diff --git a/docs/code-examples/all/line_strip3d_batch.cpp b/docs/snippets/all/line_strip3d_batch.cpp similarity index 100% rename from docs/code-examples/all/line_strip3d_batch.cpp rename to docs/snippets/all/line_strip3d_batch.cpp diff --git a/docs/code-examples/all/line_strip3d_batch.py b/docs/snippets/all/line_strip3d_batch.py similarity index 100% rename from docs/code-examples/all/line_strip3d_batch.py rename to docs/snippets/all/line_strip3d_batch.py diff --git a/docs/code-examples/all/line_strip3d_batch.rs b/docs/snippets/all/line_strip3d_batch.rs similarity index 100% rename from docs/code-examples/all/line_strip3d_batch.rs rename to docs/snippets/all/line_strip3d_batch.rs diff --git a/docs/code-examples/all/line_strip3d_simple.cpp b/docs/snippets/all/line_strip3d_simple.cpp similarity index 100% rename from docs/code-examples/all/line_strip3d_simple.cpp rename to docs/snippets/all/line_strip3d_simple.cpp diff --git a/docs/code-examples/all/line_strip3d_simple.py b/docs/snippets/all/line_strip3d_simple.py similarity index 100% rename from docs/code-examples/all/line_strip3d_simple.py rename to docs/snippets/all/line_strip3d_simple.py diff --git a/docs/code-examples/all/line_strip3d_simple.rs b/docs/snippets/all/line_strip3d_simple.rs similarity index 100% rename from docs/code-examples/all/line_strip3d_simple.rs rename to docs/snippets/all/line_strip3d_simple.rs diff --git a/docs/code-examples/all/log-file/example.cpp b/docs/snippets/all/log-file/example.cpp similarity index 100% rename from docs/code-examples/all/log-file/example.cpp rename to docs/snippets/all/log-file/example.cpp diff --git a/docs/code-examples/all/log-file/example.py b/docs/snippets/all/log-file/example.py similarity index 100% rename from docs/code-examples/all/log-file/example.py rename to docs/snippets/all/log-file/example.py diff --git a/docs/code-examples/all/log-file/example.rs b/docs/snippets/all/log-file/example.rs similarity index 100% rename from docs/code-examples/all/log-file/example.rs rename to docs/snippets/all/log-file/example.rs diff --git a/docs/code-examples/all/log_line.py b/docs/snippets/all/log_line.py similarity index 100% rename from docs/code-examples/all/log_line.py rename to docs/snippets/all/log_line.py diff --git a/docs/code-examples/all/log_line.rs b/docs/snippets/all/log_line.rs similarity index 100% rename from docs/code-examples/all/log_line.rs rename to docs/snippets/all/log_line.rs diff --git a/docs/code-examples/all/manual_indicator.cpp b/docs/snippets/all/manual_indicator.cpp similarity index 100% rename from docs/code-examples/all/manual_indicator.cpp rename to docs/snippets/all/manual_indicator.cpp diff --git a/docs/code-examples/all/manual_indicator.py b/docs/snippets/all/manual_indicator.py similarity index 100% rename from docs/code-examples/all/manual_indicator.py rename to docs/snippets/all/manual_indicator.py diff --git a/docs/code-examples/all/manual_indicator.rs b/docs/snippets/all/manual_indicator.rs similarity index 100% rename from docs/code-examples/all/manual_indicator.rs rename to docs/snippets/all/manual_indicator.rs diff --git a/docs/code-examples/all/mesh3d_indexed.cpp b/docs/snippets/all/mesh3d_indexed.cpp similarity index 100% rename from docs/code-examples/all/mesh3d_indexed.cpp rename to docs/snippets/all/mesh3d_indexed.cpp diff --git a/docs/code-examples/all/mesh3d_indexed.py b/docs/snippets/all/mesh3d_indexed.py similarity index 100% rename from docs/code-examples/all/mesh3d_indexed.py rename to docs/snippets/all/mesh3d_indexed.py diff --git a/docs/code-examples/all/mesh3d_indexed.rs b/docs/snippets/all/mesh3d_indexed.rs similarity index 100% rename from docs/code-examples/all/mesh3d_indexed.rs rename to docs/snippets/all/mesh3d_indexed.rs diff --git a/docs/code-examples/all/mesh3d_partial_updates.cpp b/docs/snippets/all/mesh3d_partial_updates.cpp similarity index 100% rename from docs/code-examples/all/mesh3d_partial_updates.cpp rename to docs/snippets/all/mesh3d_partial_updates.cpp diff --git a/docs/code-examples/all/mesh3d_partial_updates.py b/docs/snippets/all/mesh3d_partial_updates.py similarity index 100% rename from docs/code-examples/all/mesh3d_partial_updates.py rename to docs/snippets/all/mesh3d_partial_updates.py diff --git a/docs/code-examples/all/mesh3d_partial_updates.rs b/docs/snippets/all/mesh3d_partial_updates.rs similarity index 100% rename from docs/code-examples/all/mesh3d_partial_updates.rs rename to docs/snippets/all/mesh3d_partial_updates.rs diff --git a/docs/code-examples/all/mesh3d_simple.cpp b/docs/snippets/all/mesh3d_simple.cpp similarity index 100% rename from docs/code-examples/all/mesh3d_simple.cpp rename to docs/snippets/all/mesh3d_simple.cpp diff --git a/docs/code-examples/all/mesh3d_simple.py b/docs/snippets/all/mesh3d_simple.py similarity index 100% rename from docs/code-examples/all/mesh3d_simple.py rename to docs/snippets/all/mesh3d_simple.py diff --git a/docs/code-examples/all/mesh3d_simple.rs b/docs/snippets/all/mesh3d_simple.rs similarity index 100% rename from docs/code-examples/all/mesh3d_simple.rs rename to docs/snippets/all/mesh3d_simple.rs diff --git a/docs/code-examples/all/pinhole_perspective.cpp b/docs/snippets/all/pinhole_perspective.cpp similarity index 100% rename from docs/code-examples/all/pinhole_perspective.cpp rename to docs/snippets/all/pinhole_perspective.cpp diff --git a/docs/code-examples/all/pinhole_perspective.py b/docs/snippets/all/pinhole_perspective.py similarity index 100% rename from docs/code-examples/all/pinhole_perspective.py rename to docs/snippets/all/pinhole_perspective.py diff --git a/docs/code-examples/all/pinhole_perspective.rs b/docs/snippets/all/pinhole_perspective.rs similarity index 100% rename from docs/code-examples/all/pinhole_perspective.rs rename to docs/snippets/all/pinhole_perspective.rs diff --git a/docs/code-examples/all/pinhole_simple.cpp b/docs/snippets/all/pinhole_simple.cpp similarity index 100% rename from docs/code-examples/all/pinhole_simple.cpp rename to docs/snippets/all/pinhole_simple.cpp diff --git a/docs/code-examples/all/pinhole_simple.py b/docs/snippets/all/pinhole_simple.py similarity index 100% rename from docs/code-examples/all/pinhole_simple.py rename to docs/snippets/all/pinhole_simple.py diff --git a/docs/code-examples/all/pinhole_simple.rs b/docs/snippets/all/pinhole_simple.rs similarity index 100% rename from docs/code-examples/all/pinhole_simple.rs rename to docs/snippets/all/pinhole_simple.rs diff --git a/docs/code-examples/all/point2d_random.cpp b/docs/snippets/all/point2d_random.cpp similarity index 100% rename from docs/code-examples/all/point2d_random.cpp rename to docs/snippets/all/point2d_random.cpp diff --git a/docs/code-examples/all/point2d_random.py b/docs/snippets/all/point2d_random.py similarity index 100% rename from docs/code-examples/all/point2d_random.py rename to docs/snippets/all/point2d_random.py diff --git a/docs/code-examples/all/point2d_random.rs b/docs/snippets/all/point2d_random.rs similarity index 100% rename from docs/code-examples/all/point2d_random.rs rename to docs/snippets/all/point2d_random.rs diff --git a/docs/code-examples/all/point2d_simple.cpp b/docs/snippets/all/point2d_simple.cpp similarity index 100% rename from docs/code-examples/all/point2d_simple.cpp rename to docs/snippets/all/point2d_simple.cpp diff --git a/docs/code-examples/all/point2d_simple.py b/docs/snippets/all/point2d_simple.py similarity index 100% rename from docs/code-examples/all/point2d_simple.py rename to docs/snippets/all/point2d_simple.py diff --git a/docs/code-examples/all/point2d_simple.rs b/docs/snippets/all/point2d_simple.rs similarity index 100% rename from docs/code-examples/all/point2d_simple.rs rename to docs/snippets/all/point2d_simple.rs diff --git a/docs/code-examples/all/point3d_random.cpp b/docs/snippets/all/point3d_random.cpp similarity index 100% rename from docs/code-examples/all/point3d_random.cpp rename to docs/snippets/all/point3d_random.cpp diff --git a/docs/code-examples/all/point3d_random.py b/docs/snippets/all/point3d_random.py similarity index 100% rename from docs/code-examples/all/point3d_random.py rename to docs/snippets/all/point3d_random.py diff --git a/docs/code-examples/all/point3d_random.rs b/docs/snippets/all/point3d_random.rs similarity index 100% rename from docs/code-examples/all/point3d_random.rs rename to docs/snippets/all/point3d_random.rs diff --git a/docs/code-examples/all/point3d_simple.cpp b/docs/snippets/all/point3d_simple.cpp similarity index 100% rename from docs/code-examples/all/point3d_simple.cpp rename to docs/snippets/all/point3d_simple.cpp diff --git a/docs/code-examples/all/point3d_simple.py b/docs/snippets/all/point3d_simple.py similarity index 100% rename from docs/code-examples/all/point3d_simple.py rename to docs/snippets/all/point3d_simple.py diff --git a/docs/code-examples/all/point3d_simple.rs b/docs/snippets/all/point3d_simple.rs similarity index 100% rename from docs/code-examples/all/point3d_simple.rs rename to docs/snippets/all/point3d_simple.rs diff --git a/docs/code-examples/all/quick_start_connect.cpp b/docs/snippets/all/quick_start_connect.cpp similarity index 100% rename from docs/code-examples/all/quick_start_connect.cpp rename to docs/snippets/all/quick_start_connect.cpp diff --git a/docs/code-examples/all/quick_start_connect.py b/docs/snippets/all/quick_start_connect.py similarity index 100% rename from docs/code-examples/all/quick_start_connect.py rename to docs/snippets/all/quick_start_connect.py diff --git a/docs/code-examples/all/quick_start_connect.rs b/docs/snippets/all/quick_start_connect.rs similarity index 100% rename from docs/code-examples/all/quick_start_connect.rs rename to docs/snippets/all/quick_start_connect.rs diff --git a/docs/code-examples/all/quick_start_spawn.cpp b/docs/snippets/all/quick_start_spawn.cpp similarity index 100% rename from docs/code-examples/all/quick_start_spawn.cpp rename to docs/snippets/all/quick_start_spawn.cpp diff --git a/docs/code-examples/all/quick_start_spawn.py b/docs/snippets/all/quick_start_spawn.py similarity index 100% rename from docs/code-examples/all/quick_start_spawn.py rename to docs/snippets/all/quick_start_spawn.py diff --git a/docs/code-examples/all/quick_start_spawn.rs b/docs/snippets/all/quick_start_spawn.rs similarity index 100% rename from docs/code-examples/all/quick_start_spawn.rs rename to docs/snippets/all/quick_start_spawn.rs diff --git a/docs/code-examples/all/scalar_multiple_plots.cpp b/docs/snippets/all/scalar_multiple_plots.cpp similarity index 100% rename from docs/code-examples/all/scalar_multiple_plots.cpp rename to docs/snippets/all/scalar_multiple_plots.cpp diff --git a/docs/code-examples/all/scalar_multiple_plots.py b/docs/snippets/all/scalar_multiple_plots.py similarity index 100% rename from docs/code-examples/all/scalar_multiple_plots.py rename to docs/snippets/all/scalar_multiple_plots.py diff --git a/docs/code-examples/all/scalar_multiple_plots.rs b/docs/snippets/all/scalar_multiple_plots.rs similarity index 100% rename from docs/code-examples/all/scalar_multiple_plots.rs rename to docs/snippets/all/scalar_multiple_plots.rs diff --git a/docs/code-examples/all/scalar_simple.cpp b/docs/snippets/all/scalar_simple.cpp similarity index 100% rename from docs/code-examples/all/scalar_simple.cpp rename to docs/snippets/all/scalar_simple.cpp diff --git a/docs/code-examples/all/scalar_simple.py b/docs/snippets/all/scalar_simple.py similarity index 100% rename from docs/code-examples/all/scalar_simple.py rename to docs/snippets/all/scalar_simple.py diff --git a/docs/code-examples/all/scalar_simple.rs b/docs/snippets/all/scalar_simple.rs similarity index 100% rename from docs/code-examples/all/scalar_simple.rs rename to docs/snippets/all/scalar_simple.rs diff --git a/docs/code-examples/all/segmentation_image_simple.cpp b/docs/snippets/all/segmentation_image_simple.cpp similarity index 100% rename from docs/code-examples/all/segmentation_image_simple.cpp rename to docs/snippets/all/segmentation_image_simple.cpp diff --git a/docs/code-examples/all/segmentation_image_simple.py b/docs/snippets/all/segmentation_image_simple.py similarity index 100% rename from docs/code-examples/all/segmentation_image_simple.py rename to docs/snippets/all/segmentation_image_simple.py diff --git a/docs/code-examples/all/segmentation_image_simple.rs b/docs/snippets/all/segmentation_image_simple.rs similarity index 100% rename from docs/code-examples/all/segmentation_image_simple.rs rename to docs/snippets/all/segmentation_image_simple.rs diff --git a/docs/code-examples/all/series_line_style.cpp b/docs/snippets/all/series_line_style.cpp similarity index 100% rename from docs/code-examples/all/series_line_style.cpp rename to docs/snippets/all/series_line_style.cpp diff --git a/docs/code-examples/all/series_line_style.py b/docs/snippets/all/series_line_style.py similarity index 100% rename from docs/code-examples/all/series_line_style.py rename to docs/snippets/all/series_line_style.py diff --git a/docs/code-examples/all/series_line_style.rs b/docs/snippets/all/series_line_style.rs similarity index 100% rename from docs/code-examples/all/series_line_style.rs rename to docs/snippets/all/series_line_style.rs diff --git a/docs/code-examples/all/series_point_style.cpp b/docs/snippets/all/series_point_style.cpp similarity index 100% rename from docs/code-examples/all/series_point_style.cpp rename to docs/snippets/all/series_point_style.cpp diff --git a/docs/code-examples/all/series_point_style.py b/docs/snippets/all/series_point_style.py similarity index 100% rename from docs/code-examples/all/series_point_style.py rename to docs/snippets/all/series_point_style.py diff --git a/docs/code-examples/all/series_point_style.rs b/docs/snippets/all/series_point_style.rs similarity index 100% rename from docs/code-examples/all/series_point_style.rs rename to docs/snippets/all/series_point_style.rs diff --git a/docs/code-examples/all/tensor_simple.cpp b/docs/snippets/all/tensor_simple.cpp similarity index 100% rename from docs/code-examples/all/tensor_simple.cpp rename to docs/snippets/all/tensor_simple.cpp diff --git a/docs/code-examples/all/tensor_simple.py b/docs/snippets/all/tensor_simple.py similarity index 100% rename from docs/code-examples/all/tensor_simple.py rename to docs/snippets/all/tensor_simple.py diff --git a/docs/code-examples/all/tensor_simple.rs b/docs/snippets/all/tensor_simple.rs similarity index 100% rename from docs/code-examples/all/tensor_simple.rs rename to docs/snippets/all/tensor_simple.rs diff --git a/docs/code-examples/all/text_document.cpp b/docs/snippets/all/text_document.cpp similarity index 100% rename from docs/code-examples/all/text_document.cpp rename to docs/snippets/all/text_document.cpp diff --git a/docs/code-examples/all/text_document.py b/docs/snippets/all/text_document.py similarity index 100% rename from docs/code-examples/all/text_document.py rename to docs/snippets/all/text_document.py diff --git a/docs/code-examples/all/text_document.rs b/docs/snippets/all/text_document.rs similarity index 100% rename from docs/code-examples/all/text_document.rs rename to docs/snippets/all/text_document.rs diff --git a/docs/code-examples/all/text_log.cpp b/docs/snippets/all/text_log.cpp similarity index 100% rename from docs/code-examples/all/text_log.cpp rename to docs/snippets/all/text_log.cpp diff --git a/docs/code-examples/all/text_log.py b/docs/snippets/all/text_log.py similarity index 100% rename from docs/code-examples/all/text_log.py rename to docs/snippets/all/text_log.py diff --git a/docs/code-examples/all/text_log.rs b/docs/snippets/all/text_log.rs similarity index 100% rename from docs/code-examples/all/text_log.rs rename to docs/snippets/all/text_log.rs diff --git a/docs/code-examples/all/text_log_integration.cpp b/docs/snippets/all/text_log_integration.cpp similarity index 100% rename from docs/code-examples/all/text_log_integration.cpp rename to docs/snippets/all/text_log_integration.cpp diff --git a/docs/code-examples/all/text_log_integration.py b/docs/snippets/all/text_log_integration.py similarity index 100% rename from docs/code-examples/all/text_log_integration.py rename to docs/snippets/all/text_log_integration.py diff --git a/docs/code-examples/all/text_log_integration.rs b/docs/snippets/all/text_log_integration.rs similarity index 100% rename from docs/code-examples/all/text_log_integration.rs rename to docs/snippets/all/text_log_integration.rs diff --git a/docs/code-examples/all/timelines_example.cpp b/docs/snippets/all/timelines_example.cpp similarity index 100% rename from docs/code-examples/all/timelines_example.cpp rename to docs/snippets/all/timelines_example.cpp diff --git a/docs/code-examples/all/timelines_example.py b/docs/snippets/all/timelines_example.py similarity index 100% rename from docs/code-examples/all/timelines_example.py rename to docs/snippets/all/timelines_example.py diff --git a/docs/code-examples/all/timelines_example.rs b/docs/snippets/all/timelines_example.rs similarity index 100% rename from docs/code-examples/all/timelines_example.rs rename to docs/snippets/all/timelines_example.rs diff --git a/docs/code-examples/all/transform3d_simple.cpp b/docs/snippets/all/transform3d_simple.cpp similarity index 100% rename from docs/code-examples/all/transform3d_simple.cpp rename to docs/snippets/all/transform3d_simple.cpp diff --git a/docs/code-examples/all/transform3d_simple.py b/docs/snippets/all/transform3d_simple.py similarity index 100% rename from docs/code-examples/all/transform3d_simple.py rename to docs/snippets/all/transform3d_simple.py diff --git a/docs/code-examples/all/transform3d_simple.rs b/docs/snippets/all/transform3d_simple.rs similarity index 100% rename from docs/code-examples/all/transform3d_simple.rs rename to docs/snippets/all/transform3d_simple.rs diff --git a/docs/code-examples/all/view_coordinates_simple.cpp b/docs/snippets/all/view_coordinates_simple.cpp similarity index 100% rename from docs/code-examples/all/view_coordinates_simple.cpp rename to docs/snippets/all/view_coordinates_simple.cpp diff --git a/docs/code-examples/all/view_coordinates_simple.py b/docs/snippets/all/view_coordinates_simple.py similarity index 100% rename from docs/code-examples/all/view_coordinates_simple.py rename to docs/snippets/all/view_coordinates_simple.py diff --git a/docs/code-examples/all/view_coordinates_simple.rs b/docs/snippets/all/view_coordinates_simple.rs similarity index 100% rename from docs/code-examples/all/view_coordinates_simple.rs rename to docs/snippets/all/view_coordinates_simple.rs diff --git a/docs/code-examples/build.rs b/docs/snippets/build.rs similarity index 98% rename from docs/code-examples/build.rs rename to docs/snippets/build.rs index 485dd44e612d..ca96022f5515 100644 --- a/docs/code-examples/build.rs +++ b/docs/snippets/build.rs @@ -1,4 +1,4 @@ -//! Finds all the `*.rs` files in `docs/code-examples/all`, +//! Finds all the `*.rs` files in `docs/snippets/all`, //! copies them to `src/examples` (with slight modifications), and generate a `examples/mod.rs` for them. //! //! The reason we combine all the examples into a single binary diff --git a/docs/code-examples/compare_code_example_output.py b/docs/snippets/compare_snippet_output.py similarity index 67% rename from docs/code-examples/compare_code_example_output.py rename to docs/snippets/compare_snippet_output.py index fb0372a736f7..87636afe74a8 100755 --- a/docs/code-examples/compare_code_example_output.py +++ b/docs/snippets/compare_snippet_output.py @@ -1,6 +1,6 @@ #!/usr/bin/env python3 -"""Runs all our code-examples, for all our languages, and compares the .rrd they output.""" +"""Runs all our snippets, for all our languages, and compares the .rrd they output.""" from __future__ import annotations @@ -11,54 +11,27 @@ import time from os import listdir from os.path import isfile, join +from pathlib import Path + +import tomlkit sys.path.append(os.path.dirname(os.path.realpath(__file__)) + "/../../scripts/") from roundtrip_utils import roundtrip_env, run, run_comparison # noqa -# fmt: off - -# These entries won't run at all. -# -# You should only ever use this if the test isn't implemented and cannot yet be implemented -# for one or more specific SDKs. -opt_out_run = { - "any_values": ["cpp", "rust"], # Not yet implemented - "extra_values": ["cpp", "rust"], # Missing examples - "image_advanced": ["cpp", "rust"], # Missing examples - "log_line": ["cpp", "rust", "py"], # Not a complete example -- just a single log line - "timelines_example": ["py", "cpp", "rust"], # TODO(ab): incomplete code, need hideable stubs, see https://github.com/rerun-io/landing/issues/515 - - # This is this script, it's not an example. - "roundtrips": ["cpp", "py", "rust"], -} - -# These entries will run but their results won't be compared to the baseline. -# -# You should only ever use this if the test cannot yet be implemented in a way that yields the right -# data, but you still want to check whether the test runs properly and outputs _something_. -opt_out_compare = { - "arrow3d_simple": ["cpp", "py", "rust"], # TODO(#3206): examples use different RNGs - "asset3d_out_of_tree": ["cpp", "py", "rust"], # float issues since calculation is done slightly differently (also, Python uses doubles) - "mesh3d_partial_updates": ["cpp", "py", "rust"], # float precision issues - "pinhole_simple": ["cpp", "py", "rust"], # TODO(#3206): examples use different RNGs - "point2d_random": ["cpp", "py", "rust"], # TODO(#3206): examples use different RNGs - "point3d_random": ["cpp", "py", "rust"], # TODO(#3206): examples use different RNGs - "quick_start_connect": ["cpp", "py", "rust"], # These example don't have exactly the same implementation. - "quick_start_spawn": ["cpp", "py", "rust"], # These example don't have exactly the same implementation. - "scalar_multiple_plots": ["cpp"], # trigonometric functions have slightly different outcomes - "tensor_simple": ["cpp", "py", "rust"], # TODO(#3206): examples use different RNGs - "text_log_integration": ["cpp", "py", "rust"], # The entity path will differ because the Rust code is part of a library - "series_point_style": ["cpp", "py", "rust"], # TODO(#5116): trigonometric functions have slightly different outcomes - "series_line_style": ["cpp", "py", "rust"], # TODO(#5116):trigonometric functions have slightly different outcomes +config_path = Path(__file__).parent / "snippets.toml" +config = tomlkit.loads(config_path.read_text()) +OPT_OUT_RUN = config["opt_out"]["run"] +OPT_OUT_COMPARE = config["opt_out"]["compare"] +EXTRA_ARGS = { + name: [arg.replace("$config_dir", str(Path(__file__).parent.absolute())) for arg in args] + for name, args in config["extra_args"].items() } -extra_args = { +EXTRA_ARGS = { "asset3d_simple": [f"{os.path.dirname(__file__)}/../assets/cube.glb"], "asset3d_out_of_tree": [f"{os.path.dirname(__file__)}/../assets/cube.glb"], } -# fmt: on - def main() -> None: parser = argparse.ArgumentParser(description="Run end-to-end cross-language roundtrip tests for all API examples") @@ -108,7 +81,7 @@ def main() -> None: print("----------------------------------------------------------") print("Build rerun_c & rerun_cpp…") start_time = time.time() - run(["pixi", "run", "cpp-build-doc-examples"]) + run(["pixi", "run", "cpp-build-snippets"]) elapsed = time.time() - start_time print(f"rerun-sdk for C++ built in {elapsed:.1f} seconds") print("") @@ -139,7 +112,7 @@ def main() -> None: if not args.no_cpp_build: print(f"Running {len(examples)} C++ examples…") for example in examples: - example_opt_out_entirely = opt_out_run.get(example, []) + example_opt_out_entirely = OPT_OUT_RUN.get(example, []) if "cpp" in example_opt_out_entirely: continue run_example(example, "cpp", args) @@ -148,7 +121,7 @@ def main() -> None: with multiprocessing.Pool() as pool: jobs = [] for example in examples: - example_opt_out_entirely = opt_out_run.get(example, []) + example_opt_out_entirely = OPT_OUT_RUN.get(example, []) for language in active_languages: if language in example_opt_out_entirely or language == "cpp": # cpp already processed in series. continue @@ -166,15 +139,15 @@ def main() -> None: print("----------------------------------------------------------") print(f"Comparing example '{example}'…") - example_opt_out_entirely = opt_out_run.get(example, []) - example_opt_out_compare = opt_out_compare.get(example, []) + example_opt_out_entirely = OPT_OUT_RUN.get(example, []) + example_opt_out_compare = OPT_OUT_COMPARE.get(example, []) if "rust" in example_opt_out_entirely: continue # No baseline to compare against - cpp_output_path = f"docs/code-examples/all/{example}_cpp.rrd" - python_output_path = f"docs/code-examples/all/{example}_py.rrd" - rust_output_path = f"docs/code-examples/all/{example}_rust.rrd" + cpp_output_path = f"docs/snippets/all/{example}_cpp.rrd" + python_output_path = f"docs/snippets/all/{example}_py.rrd" + rust_output_path = f"docs/snippets/all/{example}_rust.rrd" if "cpp" in active_languages and "cpp" not in example_opt_out_entirely and "cpp" not in example_opt_out_compare: run_comparison(cpp_output_path, rust_output_path, args.full_dump) @@ -202,15 +175,15 @@ def run_example(example: str, language: str, args: argparse.Namespace) -> None: def run_roundtrip_python(example: str) -> str: - main_path = f"docs/code-examples/all/{example}.py" - output_path = f"docs/code-examples/all/{example}_py.rrd" + main_path = f"docs/snippets/all/{example}.py" + output_path = f"docs/snippets/all/{example}_py.rrd" # sys.executable: the absolute path of the executable binary for the Python interpreter python_executable = sys.executable if python_executable is None: python_executable = "python3" - cmd = [python_executable, main_path] + (extra_args.get(example) or []) + cmd = [python_executable, main_path] + (EXTRA_ARGS.get(example) or []) env = roundtrip_env(save_path=output_path) run(cmd, env=env, timeout=30) @@ -219,9 +192,9 @@ def run_roundtrip_python(example: str) -> str: def run_roundtrip_rust(example: str, release: bool, target: str | None, target_dir: str | None) -> str: - output_path = f"docs/code-examples/all/{example}_rust.rrd" + output_path = f"docs/snippets/all/{example}_rust.rrd" - cmd = ["cargo", "run", "--quiet", "-p", "code_examples"] + cmd = ["cargo", "run", "--quiet", "-p", "snippets"] if target is not None: cmd += ["--target", target] @@ -234,8 +207,8 @@ def run_roundtrip_rust(example: str, release: bool, target: str | None, target_d cmd += ["--", example] - if extra_args.get(example): - cmd += extra_args[example] + if EXTRA_ARGS.get(example): + cmd += EXTRA_ARGS[example] env = roundtrip_env(save_path=output_path) run(cmd, env=env, timeout=12000) @@ -244,9 +217,9 @@ def run_roundtrip_rust(example: str, release: bool, target: str | None, target_d def run_roundtrip_cpp(example: str, release: bool) -> str: - output_path = f"docs/code-examples/all/{example}_cpp.rrd" + output_path = f"docs/snippets/all/{example}_cpp.rrd" - cmd = [f"./build/debug/docs/code-examples/{example}"] + (extra_args.get(example) or []) + cmd = [f"./build/debug/docs/snippets/{example}"] + (EXTRA_ARGS.get(example) or []) env = roundtrip_env(save_path=output_path) run(cmd, env=env, timeout=12000) diff --git a/docs/snippets/snippets.toml b/docs/snippets/snippets.toml new file mode 100644 index 000000000000..7f918fa81cf6 --- /dev/null +++ b/docs/snippets/snippets.toml @@ -0,0 +1,90 @@ +# This file is read in `compare_snippet_output.py` and the `snippets` command in `re_build_examples`. + +# These entries won't run at all. +# +# You should only ever use this if the test isn't implemented and cannot yet be implemented +# for one or more specific SDKs. +[opt_out.run] +any_values = ["cpp", "rust"] # Not yet implemented +extra_values = ["cpp", "rust"] # Missing examples +image_advanced = ["cpp", "rust"] # Missing examples +log_line = [ # Not a complete example -- just a single log line + "cpp", + "rust", + "py", +] +timelines_example = [ # TODO(ab): incomplete code, need hideable stubs, see https://github.com/rerun-io/landing/issues/515 + "py", + "cpp", + "rust", +] + +# This is this script, it's not an example. +roundtrips = ["cpp", "py", "rust"] + + +# These entries will run but their results won't be compared to the baseline. +# +# You should only ever use this if the test cannot yet be implemented in a way that yields the right +# data, but you still want to check whether the test runs properly and outputs _something_. +[opt_out.compare] +arrow3d_simple = [ # TODO(#3206): examples use different RNGs + "cpp", + "py", + "rust", +] +asset3d_out_of_tree = [ # float issues since calculation is done slightly differently (also, Python uses doubles) + "cpp", + "py", + "rust", +] +mesh3d_partial_updates = ["cpp", "py", "rust"] # float precision issues +pinhole_simple = [ # TODO(#3206): examples use different RNGs + "cpp", + "py", + "rust", +] +point2d_random = [ # TODO(#3206): examples use different RNGs + "cpp", + "py", + "rust", +] +point3d_random = [ # TODO(#3206): examples use different RNGs + "cpp", + "py", + "rust", +] +quick_start_connect = [ # These example don't have exactly the same implementation. + "cpp", + "py", + "rust", +] +quick_start_spawn = [ # These example don't have exactly the same implementation. + "cpp", + "py", + "rust", +] +scalar_multiple_plots = [ # trigonometric functions have slightly different outcomes + "cpp", +] +tensor_simple = ["cpp", "py", "rust"] # TODO(#3206): examples use different RNGs +text_log_integration = [ # The entity path will differ because the Rust code is part of a library + "cpp", + "py", + "rust", +] +series_point_style = [ # TODO(#5116): trigonometric functions have slightly different outcomes + "cpp", + "py", + "rust", +] +series_line_style = [ # TODO(#5116):trigonometric functions have slightly different outcomes + "cpp", + "py", + "rust", +] + +# `$config_dir` will be replaced with the absolute path of `docs/snippets`. +[extra_args] +asset3d_simple = ["$config_dir/assets/cube.glb"] +asset3d_out_of_tree = ["$config_dir/assets/cube.glb"] diff --git a/docs/code-examples/src/examples/.gitignore b/docs/snippets/src/examples/.gitignore similarity index 100% rename from docs/code-examples/src/examples/.gitignore rename to docs/snippets/src/examples/.gitignore diff --git a/docs/snippets/src/lib.rs b/docs/snippets/src/lib.rs new file mode 100644 index 000000000000..0caa1b4e110d --- /dev/null +++ b/docs/snippets/src/lib.rs @@ -0,0 +1,5 @@ +//! Snippets that we show in documentation. + +mod examples; + +pub use examples::run; diff --git a/docs/snippets/src/main.rs b/docs/snippets/src/main.rs new file mode 100644 index 000000000000..14149bea60a3 --- /dev/null +++ b/docs/snippets/src/main.rs @@ -0,0 +1,6 @@ +//! Snippets that we show in documentation. + +pub fn main() { + // Call into the generated code. + snippets::run(); +} diff --git a/examples/python/arkit_scenes/README.md b/examples/python/arkit_scenes/README.md index 22d158b98227..b4bbf5038515 100644 --- a/examples/python/arkit_scenes/README.md +++ b/examples/python/arkit_scenes/README.md @@ -8,7 +8,7 @@ channel = "main" --> - + diff --git a/examples/python/depth_guided_stable_diffusion/README.md b/examples/python/depth_guided_stable_diffusion/README.md index 815b8c36ea4d..eeae6dfaf07f 100644 --- a/examples/python/depth_guided_stable_diffusion/README.md +++ b/examples/python/depth_guided_stable_diffusion/README.md @@ -7,7 +7,7 @@ channel = "nightly" --> - + diff --git a/examples/python/detect_and_track_objects/README.md b/examples/python/detect_and_track_objects/README.md index 6a175696e3ce..b721c6d84f20 100644 --- a/examples/python/detect_and_track_objects/README.md +++ b/examples/python/detect_and_track_objects/README.md @@ -8,7 +8,7 @@ channel = "release" --> - + diff --git a/examples/python/dicom_mri/README.md b/examples/python/dicom_mri/README.md index f91da8201fa1..0cbd8d9b510b 100644 --- a/examples/python/dicom_mri/README.md +++ b/examples/python/dicom_mri/README.md @@ -8,7 +8,7 @@ channel = "main" --> - + diff --git a/examples/python/dna/README.md b/examples/python/dna/README.md index 6c93c016bef2..0539c8463edd 100644 --- a/examples/python/dna/README.md +++ b/examples/python/dna/README.md @@ -7,8 +7,7 @@ thumbnail_dimensions = [480, 285] channel = "main" --> - - + diff --git a/examples/python/human_pose_tracking/README.md b/examples/python/human_pose_tracking/README.md index 7d6705cf5fc4..09d41b873476 100644 --- a/examples/python/human_pose_tracking/README.md +++ b/examples/python/human_pose_tracking/README.md @@ -7,7 +7,7 @@ thumbnail_dimensions = [480, 272] channel = "main" --> - + diff --git a/examples/python/incremental_logging/README.md b/examples/python/incremental_logging/README.md index 09ac14766431..96f8bae946c5 100644 --- a/examples/python/incremental_logging/README.md +++ b/examples/python/incremental_logging/README.md @@ -7,7 +7,7 @@ thumbnail_dimensions = [480, 301] --> - + diff --git a/examples/python/nuscenes/README.md b/examples/python/nuscenes/README.md index 1ba1dbff0959..e383da597eb1 100644 --- a/examples/python/nuscenes/README.md +++ b/examples/python/nuscenes/README.md @@ -8,7 +8,7 @@ channel = "release" build_args = ["--seconds=5"] --> - + diff --git a/examples/python/open_photogrammetry_format/README.md b/examples/python/open_photogrammetry_format/README.md index 953fce825834..98d5dc4799b1 100644 --- a/examples/python/open_photogrammetry_format/README.md +++ b/examples/python/open_photogrammetry_format/README.md @@ -8,7 +8,7 @@ channel = "release" build_args = ["--jpeg-quality=50"] --> - + diff --git a/examples/python/plots/README.md b/examples/python/plots/README.md index c2be11144c3a..2db5f09adf8c 100644 --- a/examples/python/plots/README.md +++ b/examples/python/plots/README.md @@ -8,7 +8,7 @@ channel = "main" --> - + diff --git a/examples/python/raw_mesh/README.md b/examples/python/raw_mesh/README.md index aebb1b32b709..b42f6ebd9b67 100644 --- a/examples/python/raw_mesh/README.md +++ b/examples/python/raw_mesh/README.md @@ -7,7 +7,7 @@ thumbnail_dimensions = [480, 296] channel = "release" --> - + diff --git a/examples/python/rgbd/README.md b/examples/python/rgbd/README.md index e6d9d6e83508..7cdcd283c91b 100644 --- a/examples/python/rgbd/README.md +++ b/examples/python/rgbd/README.md @@ -8,7 +8,7 @@ channel = "release" build_args = ["--frames=300"] --> - + diff --git a/examples/python/segment_anything_model/README.md b/examples/python/segment_anything_model/README.md index 0b926e155dfa..e0a8ef776694 100644 --- a/examples/python/segment_anything_model/README.md +++ b/examples/python/segment_anything_model/README.md @@ -8,7 +8,7 @@ channel = "release" --> - + diff --git a/examples/python/structure_from_motion/README.md b/examples/python/structure_from_motion/README.md index f94d45189412..ea26881ef83b 100644 --- a/examples/python/structure_from_motion/README.md +++ b/examples/python/structure_from_motion/README.md @@ -9,7 +9,7 @@ build_args = ["--dataset=colmap_fiat", "--resize=800x600"] --> - + diff --git a/justfile b/justfile index 2eebc65976d8..d69e6d958176 100644 --- a/justfile +++ b/justfile @@ -46,9 +46,9 @@ cpp-build: cpp-build-examples: pixi run cpp-build-examples -# Build all our C++ api doc examples. -cpp-build-doc-examples: - pixi run cpp-build-doc-examples +# Build all our C++ snippets. +cpp-build-snippets: + pixi run cpp-build-snippets # Run our C++ tests cpp-test: @@ -118,7 +118,7 @@ py-format: # NOTE: we need both `ruff check --fix` and `ruff format` in that order: https://twitter.com/charliermarsh/status/1717229721954799727 ruff check --fix --config rerun_py/pyproject.toml {{py_folders}} ruff format --config rerun_py/pyproject.toml {{py_folders}} - blackdoc {{py_folders}} # Format code examples in docstring. Hopefully `ruff` can do this soon: https://github.com/astral-sh/ruff/issues/7146 + blackdoc {{py_folders}} # Format snippets in docstring. Hopefully `ruff` can do this soon: https://github.com/astral-sh/ruff/issues/7146 # Check that all the requirements.txt files for all the examples are correct py-requirements: diff --git a/noxfile.py b/noxfile.py index ca52b8948568..2bfc7935a701 100644 --- a/noxfile.py +++ b/noxfile.py @@ -68,6 +68,6 @@ def roundtrips(session: nox.Session) -> None: extra_args.extend(session.posargs) session.run("python", "tests/roundtrips.py", "--no-py-build", *extra_args) - session.run("python", "docs/code-examples/compare_code_example_output.py", "--no-py-build", *extra_args) + session.run("python", "docs/snippets/compare_snippet_output.py", "--no-py-build", *extra_args) roundtrip_cpp_built = True diff --git a/pixi.toml b/pixi.toml index b24f5bf5c0ac..50e264179e07 100644 --- a/pixi.toml +++ b/pixi.toml @@ -126,7 +126,7 @@ cpp-build-roundtrips = { cmd = "cmake --build build/debug --config Debug --targe cpp-build-examples = { cmd = "cmake --build build/debug --config Debug --target examples", depends_on = [ "cpp-prepare", ] } -cpp-build-doc-examples = { cmd = "cmake --build build/debug --config Debug --target doc_examples", depends_on = [ +cpp-build-snippets = { cmd = "cmake --build build/debug --config Debug --target snippets", depends_on = [ "cpp-prepare", ] } cpp-build-log-benchmark = { cmd = "cmake --build build/release --config Release --target log_benchmark", depends_on = [ diff --git a/rerun_py/pyproject.toml b/rerun_py/pyproject.toml index 82efd7e03f73..4c9126eb6ffb 100644 --- a/rerun_py/pyproject.toml +++ b/rerun_py/pyproject.toml @@ -53,10 +53,10 @@ extend-exclude = [ "target/", # Intentionally uses ''' instead of """ so we can embed it in a docstring in the Python API docs. - "docs/code-examples/all/text_document.py", + "docs/snippets/all/text_document.py", # TODO(#4047): incomplete example snippet - "docs/code-examples/all/timelines_example.py", + "docs/snippets/all/timelines_example.py", # generated "examples/python/objectron/proto/objectron/proto.py", @@ -108,7 +108,7 @@ lint.select = [ ] [tool.ruff.lint.per-file-ignores] -"docs/code-examples/all/*" = [ +"docs/snippets/all/*" = [ # Missing required import: `from __future__ import annotations` "I002", ] diff --git a/scripts/screenshot_compare/build_screenshot_compare.py b/scripts/screenshot_compare/build_screenshot_compare.py index c62bd3016c46..38e334f7e03f 100755 --- a/scripts/screenshot_compare/build_screenshot_compare.py +++ b/scripts/screenshot_compare/build_screenshot_compare.py @@ -7,7 +7,7 @@ them side-by-side. It pulls from the following sources: - The screenshots listed in .fbs files (crates/re_types/definitions/rerun/**/*.fbs), - and the corresponding code examples in the docs (docs/code-examples/*.rs) + and the corresponding snippets in the docs (docs/snippets/*.rs) - The `app.rerun.io` examples, as built by the `re_build_examples` script. The comparisons are generated in the `compare_screenshot` directory. Use the `--serve` @@ -43,7 +43,7 @@ INDEX_TEMPLATE = Template((TEMPLATE_DIR / "index.html").read_text()) EXAMPLE_TEMPLATE = Template((TEMPLATE_DIR / "example.html").read_text()) RERUN_DIR = SCRIPT_DIR_PATH.parent.parent -CODE_EXAMPLE_DIR = RERUN_DIR / "docs" / "code-examples" +SNIPPETS_DIR = RERUN_DIR / "docs" / "snippets" def measure_thumbnail(url: str) -> Any: @@ -95,13 +95,13 @@ def build_python_sdk() -> None: # ==================================================================================================== -# CODE EXAMPLES +# SNIPPETS # -# We scrape FBS for screenshot URL and generate the corresponding code examples RRD with roundtrips.py +# We scrape FBS for screenshot URL and generate the corresponding snippets RRD with roundtrips.py # ==================================================================================================== -def extract_code_example_urls_from_fbs() -> dict[str, str]: +def extract_snippet_urls_from_fbs() -> dict[str, str]: fbs_path = SCRIPT_DIR_PATH.parent.parent / "crates" / "re_types" / "definitions" / "rerun" urls = {} @@ -120,27 +120,27 @@ def extract_code_example_urls_from_fbs() -> dict[str, str]: return urls -CODE_EXAMPLE_URLS = extract_code_example_urls_from_fbs() +SNIPPET_URLS = extract_snippet_urls_from_fbs() -def build_code_examples() -> None: +def build_snippets() -> None: cmd = [ - str(CODE_EXAMPLE_DIR / "roundtrips.py"), + str(SNIPPETS_DIR / "roundtrips.py"), "--no-py", "--no-cpp", "--no-py-build", "--no-cpp-build", ] - for name in CODE_EXAMPLE_URLS.keys(): + for name in SNIPPET_URLS.keys(): run(cmd + [name], cwd=RERUN_DIR) -def collect_code_examples() -> Iterable[Example]: - for name in sorted(CODE_EXAMPLE_URLS.keys()): - rrd = CODE_EXAMPLE_DIR / f"{name}_rust.rrd" +def collect_snippets() -> Iterable[Example]: + for name in sorted(SNIPPET_URLS.keys()): + rrd = SNIPPETS_DIR / f"{name}_rust.rrd" assert rrd.exists(), f"Missing {rrd} for {name}" - yield Example(name=name, title=name, rrd=rrd, screenshot_url=CODE_EXAMPLE_URLS[name]) + yield Example(name=name, title=name, rrd=rrd, screenshot_url=SNIPPET_URLS[name]) # ==================================================================================================== @@ -150,7 +150,7 @@ def collect_code_examples() -> Iterable[Example]: # ==================================================================================================== -def build_demo_examples() -> None: +def build_examples() -> None: # fmt: off cmd = [ "cargo", "run", "--locked", @@ -168,7 +168,7 @@ def build_demo_examples() -> None: # fmt: on -def collect_demo_examples() -> Iterable[Example]: +def collect_examples() -> Iterable[Example]: example_dir = RERUN_DIR / "example_data" assert example_dir.exists(), "Examples have not been built yet." @@ -187,11 +187,6 @@ def collect_demo_examples() -> Iterable[Example]: ) -def collect_examples() -> Iterable[Example]: - yield from collect_code_examples() - yield from collect_demo_examples() - - def render_index(examples: list[Example]) -> None: BASE_PATH.mkdir(exist_ok=True) @@ -262,10 +257,10 @@ def main() -> None: build_python_sdk() if not args.skip_example_build: - build_code_examples() - build_demo_examples() + build_snippets() + build_examples() - examples = list(collect_examples()) + examples = list(collect_snippets()) + list(collect_examples()) assert len(examples) > 0, "No examples found" render_index(examples) From 83491b272f92777e350d0ce8ec564bebb05ecdd1 Mon Sep 17 00:00:00 2001 From: Emil Ernerfeldt Date: Mon, 18 Mar 2024 09:42:28 +0100 Subject: [PATCH 19/50] Support loading multiple recordings and/or blueprints in web-viewer (#5548) ### What * Closes https://github.com/rerun-io/rerun/issues/5294 This adds support for passing multiple .rrd and/or .rbl files to the web-viewer by repeating the `url` query parameter. ### TODO * [x] Test this ### Checklist * [x] I have read and agree to [Contributor Guide](https://github.com/rerun-io/rerun/blob/main/CONTRIBUTING.md) and the [Code of Conduct](https://github.com/rerun-io/rerun/blob/main/CODE_OF_CONDUCT.md) * [x] I've included a screenshot or gif (if applicable) * [x] I have tested the web demo (if applicable): * Using newly built examples: [app.rerun.io](https://app.rerun.io/pr/5548/index.html) * Using examples from latest `main` build: [app.rerun.io](https://app.rerun.io/pr/5548/index.html?manifest_url=https://app.rerun.io/version/main/examples_manifest.json) * Using full set of examples from `nightly` build: [app.rerun.io](https://app.rerun.io/pr/5548/index.html?manifest_url=https://app.rerun.io/version/nightly/examples_manifest.json) * [x] The PR title and labels are set such as to maximize their usefulness for the next release's CHANGELOG * [x] If applicable, add a new check to the [release checklist](https://github.com/rerun-io/rerun/blob/main/tests/python/release_checklist)! - [PR Build Summary](https://build.rerun.io/pr/5548) - [Docs preview](https://rerun.io/preview/62af0e20b1216c2dfc66806d8470966259606981/docs) - [Examples preview](https://rerun.io/preview/62af0e20b1216c2dfc66806d8470966259606981/examples) - [Recent benchmark results](https://build.rerun.io/graphs/crates.html) - [Wasm size tracking](https://build.rerun.io/graphs/sizes.html) --- Cargo.lock | 20 ++++---- Cargo.toml | 14 +++--- crates/re_data_source/src/data_source.rs | 7 ++- crates/re_viewer/src/app.rs | 1 + crates/re_viewer/src/web.rs | 59 +++++++++++++----------- 5 files changed, 56 insertions(+), 45 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index f112875bcd7e..4f315aca96a8 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1555,7 +1555,7 @@ checksum = "68b0cf012f1230e43cd00ebb729c6bb58707ecfa8ad08b52ef3a4ccd2697fc30" [[package]] name = "ecolor" version = "0.26.2" -source = "git+https://github.com/emilk/egui.git?rev=bf7ffb982a6e8c0a40d0871c38bccacef9ee8efb#bf7ffb982a6e8c0a40d0871c38bccacef9ee8efb" +source = "git+https://github.com/emilk/egui.git?rev=820fa3c43a2d20e140bc4525e0a1405e7420bb66#820fa3c43a2d20e140bc4525e0a1405e7420bb66" dependencies = [ "bytemuck", "serde", @@ -1564,7 +1564,7 @@ dependencies = [ [[package]] name = "eframe" version = "0.26.2" -source = "git+https://github.com/emilk/egui.git?rev=bf7ffb982a6e8c0a40d0871c38bccacef9ee8efb#bf7ffb982a6e8c0a40d0871c38bccacef9ee8efb" +source = "git+https://github.com/emilk/egui.git?rev=820fa3c43a2d20e140bc4525e0a1405e7420bb66#820fa3c43a2d20e140bc4525e0a1405e7420bb66" dependencies = [ "bytemuck", "cocoa", @@ -1599,7 +1599,7 @@ dependencies = [ [[package]] name = "egui" version = "0.26.2" -source = "git+https://github.com/emilk/egui.git?rev=bf7ffb982a6e8c0a40d0871c38bccacef9ee8efb#bf7ffb982a6e8c0a40d0871c38bccacef9ee8efb" +source = "git+https://github.com/emilk/egui.git?rev=820fa3c43a2d20e140bc4525e0a1405e7420bb66#820fa3c43a2d20e140bc4525e0a1405e7420bb66" dependencies = [ "accesskit", "ahash", @@ -1615,7 +1615,7 @@ dependencies = [ [[package]] name = "egui-wgpu" version = "0.26.2" -source = "git+https://github.com/emilk/egui.git?rev=bf7ffb982a6e8c0a40d0871c38bccacef9ee8efb#bf7ffb982a6e8c0a40d0871c38bccacef9ee8efb" +source = "git+https://github.com/emilk/egui.git?rev=820fa3c43a2d20e140bc4525e0a1405e7420bb66#820fa3c43a2d20e140bc4525e0a1405e7420bb66" dependencies = [ "bytemuck", "document-features", @@ -1633,7 +1633,7 @@ dependencies = [ [[package]] name = "egui-winit" version = "0.26.2" -source = "git+https://github.com/emilk/egui.git?rev=bf7ffb982a6e8c0a40d0871c38bccacef9ee8efb#bf7ffb982a6e8c0a40d0871c38bccacef9ee8efb" +source = "git+https://github.com/emilk/egui.git?rev=820fa3c43a2d20e140bc4525e0a1405e7420bb66#820fa3c43a2d20e140bc4525e0a1405e7420bb66" dependencies = [ "accesskit_winit", "arboard", @@ -1662,7 +1662,7 @@ dependencies = [ [[package]] name = "egui_extras" version = "0.26.2" -source = "git+https://github.com/emilk/egui.git?rev=bf7ffb982a6e8c0a40d0871c38bccacef9ee8efb#bf7ffb982a6e8c0a40d0871c38bccacef9ee8efb" +source = "git+https://github.com/emilk/egui.git?rev=820fa3c43a2d20e140bc4525e0a1405e7420bb66#820fa3c43a2d20e140bc4525e0a1405e7420bb66" dependencies = [ "egui", "ehttp", @@ -1677,7 +1677,7 @@ dependencies = [ [[package]] name = "egui_glow" version = "0.26.2" -source = "git+https://github.com/emilk/egui.git?rev=bf7ffb982a6e8c0a40d0871c38bccacef9ee8efb#bf7ffb982a6e8c0a40d0871c38bccacef9ee8efb" +source = "git+https://github.com/emilk/egui.git?rev=820fa3c43a2d20e140bc4525e0a1405e7420bb66#820fa3c43a2d20e140bc4525e0a1405e7420bb66" dependencies = [ "bytemuck", "egui", @@ -1694,7 +1694,7 @@ dependencies = [ [[package]] name = "egui_plot" version = "0.26.2" -source = "git+https://github.com/emilk/egui.git?rev=bf7ffb982a6e8c0a40d0871c38bccacef9ee8efb#bf7ffb982a6e8c0a40d0871c38bccacef9ee8efb" +source = "git+https://github.com/emilk/egui.git?rev=820fa3c43a2d20e140bc4525e0a1405e7420bb66#820fa3c43a2d20e140bc4525e0a1405e7420bb66" dependencies = [ "egui", ] @@ -1736,7 +1736,7 @@ checksum = "a26ae43d7bcc3b814de94796a5e736d4029efb0ee900c12e2d54c993ad1a1e07" [[package]] name = "emath" version = "0.26.2" -source = "git+https://github.com/emilk/egui.git?rev=bf7ffb982a6e8c0a40d0871c38bccacef9ee8efb#bf7ffb982a6e8c0a40d0871c38bccacef9ee8efb" +source = "git+https://github.com/emilk/egui.git?rev=820fa3c43a2d20e140bc4525e0a1405e7420bb66#820fa3c43a2d20e140bc4525e0a1405e7420bb66" dependencies = [ "bytemuck", "serde", @@ -1837,7 +1837,7 @@ dependencies = [ [[package]] name = "epaint" version = "0.26.2" -source = "git+https://github.com/emilk/egui.git?rev=bf7ffb982a6e8c0a40d0871c38bccacef9ee8efb#bf7ffb982a6e8c0a40d0871c38bccacef9ee8efb" +source = "git+https://github.com/emilk/egui.git?rev=820fa3c43a2d20e140bc4525e0a1405e7420bb66#820fa3c43a2d20e140bc4525e0a1405e7420bb66" dependencies = [ "ab_glyph", "ahash", diff --git a/Cargo.toml b/Cargo.toml index d1c981ffb0a6..2a4110640321 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -283,13 +283,13 @@ debug = true # As a last resport, patch with a commit to our own repository. # ALWAYS document what PR the commit hash is part of, or when it was merged into the upstream trunk. -ecolor = { git = "https://github.com/emilk/egui.git", rev = "bf7ffb982a6e8c0a40d0871c38bccacef9ee8efb" } # egui master 2024-03-15 -eframe = { git = "https://github.com/emilk/egui.git", rev = "bf7ffb982a6e8c0a40d0871c38bccacef9ee8efb" } # egui master 2024-03-15 -egui = { git = "https://github.com/emilk/egui.git", rev = "bf7ffb982a6e8c0a40d0871c38bccacef9ee8efb" } # egui master 2024-03-15 -egui_extras = { git = "https://github.com/emilk/egui.git", rev = "bf7ffb982a6e8c0a40d0871c38bccacef9ee8efb" } # egui master 2024-03-15 -egui_plot = { git = "https://github.com/emilk/egui.git", rev = "bf7ffb982a6e8c0a40d0871c38bccacef9ee8efb" } # egui master 2024-03-15 -egui-wgpu = { git = "https://github.com/emilk/egui.git", rev = "bf7ffb982a6e8c0a40d0871c38bccacef9ee8efb" } # egui master 2024-03-15 -emath = { git = "https://github.com/emilk/egui.git", rev = "bf7ffb982a6e8c0a40d0871c38bccacef9ee8efb" } # egui master 2024-03-15 +ecolor = { git = "https://github.com/emilk/egui.git", rev = "820fa3c43a2d20e140bc4525e0a1405e7420bb66" } # egui master 2024-03-17 +eframe = { git = "https://github.com/emilk/egui.git", rev = "820fa3c43a2d20e140bc4525e0a1405e7420bb66" } # egui master 2024-03-17 +egui = { git = "https://github.com/emilk/egui.git", rev = "820fa3c43a2d20e140bc4525e0a1405e7420bb66" } # egui master 2024-03-17 +egui_extras = { git = "https://github.com/emilk/egui.git", rev = "820fa3c43a2d20e140bc4525e0a1405e7420bb66" } # egui master 2024-03-17 +egui_plot = { git = "https://github.com/emilk/egui.git", rev = "820fa3c43a2d20e140bc4525e0a1405e7420bb66" } # egui master 2024-03-17 +egui-wgpu = { git = "https://github.com/emilk/egui.git", rev = "820fa3c43a2d20e140bc4525e0a1405e7420bb66" } # egui master 2024-03-17 +emath = { git = "https://github.com/emilk/egui.git", rev = "820fa3c43a2d20e140bc4525e0a1405e7420bb66" } # egui master 2024-03-17 # Useful while developing: # ecolor = { path = "../../egui/crates/ecolor" } diff --git a/crates/re_data_source/src/data_source.rs b/crates/re_data_source/src/data_source.rs index d2728bde1f42..c842fd894b43 100644 --- a/crates/re_data_source/src/data_source.rs +++ b/crates/re_data_source/src/data_source.rs @@ -10,6 +10,8 @@ use anyhow::Context as _; #[derive(Debug, Clone)] pub enum DataSource { /// A remote RRD file, served over http. + /// + /// Could be either an `.rrd` recording or a `.rbl` blueprint. RrdHttpUrl(String), /// A path to a local file. @@ -86,7 +88,7 @@ impl DataSource { DataSource::FilePath(file_source, path) } else if uri.starts_with("http://") || uri.starts_with("https://") - || (uri.starts_with("www.") && uri.ends_with(".rrd")) + || (uri.starts_with("www.") && (uri.ends_with(".rrd") || uri.ends_with(".rbl"))) { DataSource::RrdHttpUrl(uri) } else if uri.starts_with("ws://") || uri.starts_with("wss://") { @@ -95,7 +97,7 @@ impl DataSource { // Now we are into heuristics territory: } else if looks_like_a_file_path(&uri) { DataSource::FilePath(file_source, path) - } else if uri.ends_with(".rrd") { + } else if uri.ends_with(".rrd") || uri.ends_with(".rbl") { DataSource::RrdHttpUrl(uri) } else { // If this is sometyhing like `foo.com` we can't know what it is until we connect to it. @@ -234,6 +236,7 @@ fn test_data_source_from_uri() { "https://foo.zip", "example.zip/foo.rrd", "www.foo.zip/foo.rrd", + "www.foo.zip/blueprint.rbl", ]; let ws = ["ws://foo.zip", "wss://foo.zip", "127.0.0.1"]; diff --git a/crates/re_viewer/src/app.rs b/crates/re_viewer/src/app.rs index 7f96af6d2380..15a4983bd69f 100644 --- a/crates/re_viewer/src/app.rs +++ b/crates/re_viewer/src/app.rs @@ -263,6 +263,7 @@ impl App { } pub fn set_examples_manifest_url(&mut self, url: String) { + re_log::info!("Using manifest_url={url:?}"); self.state .set_examples_manifest_url(&self.re_ui.egui_ctx, url); } diff --git a/crates/re_viewer/src/web.rs b/crates/re_viewer/src/web.rs index 85b76d7a5db0..3fade48b17d9 100644 --- a/crates/re_viewer/src/web.rs +++ b/crates/re_viewer/src/web.rs @@ -133,22 +133,21 @@ fn create_app( let query_map = &cc.integration_info.web_info.location.query_map; - let manifest_url = match &manifest_url { - Some(url) => Some(url.as_str()), - None => query_map.get("manifest_url").map(String::as_str), - }; - if let Some(url) = manifest_url { - app.set_examples_manifest_url(url.into()); - re_log::info!("Using manifest_url={url:?}"); + if let Some(manifest_url) = manifest_url { + app.set_examples_manifest_url(manifest_url.into()); + } else { + for url in query_map.get("manifest_url").into_iter().flatten() { + app.set_examples_manifest_url(url.clone()); + } } - let url = match &url { - Some(url) => Some(url.as_str()), - None => query_map.get("url").map(String::as_str), - }; if let Some(url) = url { - let rx = url_to_receiver(url, egui_ctx.clone()); - app.add_receiver(rx); + app.add_receiver(url_to_receiver(url, egui_ctx)); + } else { + // NOTE: we support passing in multiple urls to multiple different recorording, blueprints, etc + for url in query_map.get("url").into_iter().flatten() { + app.add_receiver(url_to_receiver(url, egui_ctx.clone())); + } } app @@ -223,6 +222,8 @@ pub fn set_email(email: String) { enum EndpointCategory { /// Could be a local path (`/foo.rrd`) or a remote url (`http://foo.com/bar.rrd`). + /// + /// Could be a link to either an `.rrd` recording or a `.rbl` blueprint. HttpRrd(String), /// A remote Rerun server. @@ -233,7 +234,7 @@ enum EndpointCategory { } fn categorize_uri(uri: &str) -> EndpointCategory { - if uri.starts_with("http") || uri.ends_with(".rrd") { + if uri.starts_with("http") || uri.ends_with(".rrd") || uri.ends_with(".rbl") { EndpointCategory::HttpRrd(uri.into()) } else if uri.starts_with("ws:") || uri.starts_with("wss:") { EndpointCategory::WebSocket(uri.into()) @@ -261,21 +262,27 @@ fn get_persist_state(info: &eframe::IntegrationInfo) -> bool { fn get_query_bool(info: &eframe::IntegrationInfo, key: &str, default: bool) -> bool { let default_int = default as i32; - match info - .web_info - .location - .query_map - .get(key) - .map(String::as_str) - { - Some("0") => false, - Some("1") => true, - Some(other) => { + + if let Some(values) = info.web_info.location.query_map.get(key) { + if values.len() == 1 { + match values[0].as_str() { + "0" => false, + "1" => true, + other => { + re_log::warn!( + "Unexpected value for '{key}' query: {other:?}. Expected either '0' or '1'. Defaulting to '{default_int}'." + ); + default + } + } + } else { re_log::warn!( - "Unexpected value for '{key}' query: {other:?}. Expected either '0' or '1'. Defaulting to '{default_int}'." + "Found {} values for '{key}' query. Expected one or none. Defaulting to '{default_int}'.", + values.len() ); default } - _ => default, + } else { + default } } From 61b5e9e2aa7661749124a832cc691f3f6880e511 Mon Sep 17 00:00:00 2001 From: Emil Ernerfeldt Date: Mon, 18 Mar 2024 09:42:36 +0100 Subject: [PATCH 20/50] Activate blueprint as soon as it has finished transmitting (#5529) ### What * Closes https://github.com/rerun-io/rerun/issues/5297 ### Checklist * [x] I have read and agree to [Contributor Guide](https://github.com/rerun-io/rerun/blob/main/CONTRIBUTING.md) and the [Code of Conduct](https://github.com/rerun-io/rerun/blob/main/CODE_OF_CONDUCT.md) * [x] I've included a screenshot or gif (if applicable) * [x] I have tested the web demo (if applicable): * Using newly built examples: [app.rerun.io](https://app.rerun.io/pr/5529/index.html) * Using examples from latest `main` build: [app.rerun.io](https://app.rerun.io/pr/5529/index.html?manifest_url=https://app.rerun.io/version/main/examples_manifest.json) * Using full set of examples from `nightly` build: [app.rerun.io](https://app.rerun.io/pr/5529/index.html?manifest_url=https://app.rerun.io/version/nightly/examples_manifest.json) * [x] The PR title and labels are set such as to maximize their usefulness for the next release's CHANGELOG * [x] If applicable, add a new check to the [release checklist](https://github.com/rerun-io/rerun/blob/main/tests/python/release_checklist)! - [PR Build Summary](https://build.rerun.io/pr/5529) - [Docs preview](https://rerun.io/preview/d2d0b7e00a7ad3c8ef5ced1744605977f302760c/docs) - [Examples preview](https://rerun.io/preview/d2d0b7e00a7ad3c8ef5ced1744605977f302760c/examples) - [Recent benchmark results](https://build.rerun.io/graphs/crates.html) - [Wasm size tracking](https://build.rerun.io/graphs/sizes.html) --- crates/re_data_ui/src/log_msg.rs | 3 ++ crates/re_entity_db/src/entity_db.rs | 4 ++ crates/re_log_types/src/lib.rs | 11 +++++- crates/re_sdk/src/recording_stream.rs | 27 ++++++++++---- crates/re_sdk_comms/src/server.rs | 2 +- crates/re_viewer/src/app.rs | 53 ++++++++++++++++++++------- crates/rerun/src/run.rs | 5 +++ 7 files changed, 80 insertions(+), 25 deletions(-) diff --git a/crates/re_data_ui/src/log_msg.rs b/crates/re_data_ui/src/log_msg.rs index 19643fd0f9e0..9abc4f29a76c 100644 --- a/crates/re_data_ui/src/log_msg.rs +++ b/crates/re_data_ui/src/log_msg.rs @@ -16,6 +16,9 @@ impl DataUi for LogMsg { match self { LogMsg::SetStoreInfo(msg) => msg.data_ui(ctx, ui, verbosity, query, store), LogMsg::ArrowMsg(_, msg) => msg.data_ui(ctx, ui, verbosity, query, store), + LogMsg::ActivateStore(store_id) => { + ui.label(format!("ActivateStore({store_id})")); + } } } } diff --git a/crates/re_entity_db/src/entity_db.rs b/crates/re_entity_db/src/entity_db.rs index f27a2e5d38bf..b2f60470fbcd 100644 --- a/crates/re_entity_db/src/entity_db.rs +++ b/crates/re_entity_db/src/entity_db.rs @@ -273,6 +273,10 @@ impl EntityDb { let table = DataTable::from_arrow_msg(arrow_msg)?; self.add_data_table(table)?; } + + LogMsg::ActivateStore(_) => { + // Not for us to handle + } } Ok(()) diff --git a/crates/re_log_types/src/lib.rs b/crates/re_log_types/src/lib.rs index b1950ce26fea..0606d24f6cbf 100644 --- a/crates/re_log_types/src/lib.rs +++ b/crates/re_log_types/src/lib.rs @@ -218,13 +218,20 @@ pub enum LogMsg { /// Log an entity using an [`ArrowMsg`]. ArrowMsg(StoreId, ArrowMsg), + + /// Send after all messages in a blueprint to signal that the blueprint is complete. + /// + /// This is so that the viewer can wait with activating the blueprint until it is + /// fully transmitted. Showing a half-transmitted blueprint can cause confusion, + /// and also lead to problems with space-view heuristics. + ActivateStore(StoreId), } impl LogMsg { pub fn store_id(&self) -> &StoreId { match self { Self::SetStoreInfo(msg) => &msg.info.store_id, - Self::ArrowMsg(store_id, _) => store_id, + Self::ArrowMsg(store_id, _) | Self::ActivateStore(store_id) => store_id, } } @@ -233,7 +240,7 @@ impl LogMsg { LogMsg::SetStoreInfo(store_info) => { store_info.info.store_id = new_store_id; } - LogMsg::ArrowMsg(msg_store_id, _) => { + LogMsg::ArrowMsg(msg_store_id, _) | LogMsg::ActivateStore(msg_store_id) => { *msg_store_id = new_store_id; } } diff --git a/crates/re_sdk/src/recording_stream.rs b/crates/re_sdk/src/recording_stream.rs index c0b1a0cf1cf9..35f0ff073e46 100644 --- a/crates/re_sdk/src/recording_stream.rs +++ b/crates/re_sdk/src/recording_stream.rs @@ -1554,9 +1554,20 @@ impl RecordingStream { // If a blueprint was provided, send it first. if let Some(blueprint) = blueprint { + let mut store_id = None; for msg in blueprint { + if store_id.is_none() { + store_id = Some(msg.store_id().clone()); + } sink.send(msg); } + if let Some(store_id) = store_id { + // Let the viewer know that the blueprint has been fully received, + // and that it can now be activated. + // We don't want to activate half-loaded blueprints, because that can be confusing, + // and can also lead to problems with space-view heuristics. + sink.send(LogMsg::ActivateStore(store_id)); + } } self.set_sink(Box::new(sink)); @@ -2048,7 +2059,7 @@ mod tests { assert!(msg.row_id != RowId::ZERO); similar_asserts::assert_eq!(store_info, msg.info); } - LogMsg::ArrowMsg { .. } => panic!("expected SetStoreInfo"), + _ => panic!("expected SetStoreInfo"), } // Second message should be a set_store_info resulting from the later sink swap from @@ -2059,7 +2070,7 @@ mod tests { assert!(msg.row_id != RowId::ZERO); similar_asserts::assert_eq!(store_info, msg.info); } - LogMsg::ArrowMsg { .. } => panic!("expected SetStoreInfo"), + _ => panic!("expected SetStoreInfo"), } // Third message is the batched table itself, which was sent as a result of the implicit @@ -2076,7 +2087,7 @@ mod tests { similar_asserts::assert_eq!(table, got); } - LogMsg::SetStoreInfo { .. } => panic!("expected ArrowMsg"), + _ => panic!("expected ArrowMsg"), } // That's all. @@ -2115,7 +2126,7 @@ mod tests { assert!(msg.row_id != RowId::ZERO); similar_asserts::assert_eq!(store_info, msg.info); } - LogMsg::ArrowMsg { .. } => panic!("expected SetStoreInfo"), + _ => panic!("expected SetStoreInfo"), } // Second message should be a set_store_info resulting from the later sink swap from @@ -2126,7 +2137,7 @@ mod tests { assert!(msg.row_id != RowId::ZERO); similar_asserts::assert_eq!(store_info, msg.info); } - LogMsg::ArrowMsg { .. } => panic!("expected SetStoreInfo"), + _ => panic!("expected SetStoreInfo"), } let mut rows = { @@ -2150,7 +2161,7 @@ mod tests { similar_asserts::assert_eq!(expected, got); } - LogMsg::SetStoreInfo { .. } => panic!("expected ArrowMsg"), + _ => panic!("expected ArrowMsg"), } }; @@ -2195,7 +2206,7 @@ mod tests { assert!(msg.row_id != RowId::ZERO); similar_asserts::assert_eq!(store_info, msg.info); } - LogMsg::ArrowMsg { .. } => panic!("expected SetStoreInfo"), + _ => panic!("expected SetStoreInfo"), } // MemorySinkStorage transparently handles flushing during `take()`! @@ -2213,7 +2224,7 @@ mod tests { similar_asserts::assert_eq!(table, got); } - LogMsg::SetStoreInfo { .. } => panic!("expected ArrowMsg"), + _ => panic!("expected ArrowMsg"), } // That's all. diff --git a/crates/re_sdk_comms/src/server.rs b/crates/re_sdk_comms/src/server.rs index 7254f782a024..f74033f6c9dc 100644 --- a/crates/re_sdk_comms/src/server.rs +++ b/crates/re_sdk_comms/src/server.rs @@ -249,7 +249,7 @@ impl CongestionManager { #[allow(clippy::match_same_arms)] match msg { // we don't want to drop any of these - LogMsg::SetStoreInfo(_) => true, + LogMsg::SetStoreInfo(_) | LogMsg::ActivateStore(_) => true, LogMsg::ArrowMsg(_, arrow_msg) => self.should_send_time_point(&arrow_msg.timepoint_max), } diff --git a/crates/re_viewer/src/app.rs b/crates/re_viewer/src/app.rs index 15a4983bd69f..df008fb327a5 100644 --- a/crates/re_viewer/src/app.rs +++ b/crates/re_viewer/src/app.rs @@ -949,6 +949,7 @@ impl App { // In that case, we want to make it the default. // We wait with activaing blueprints until they are fully loaded, // so that we don't run heuristics on half-loaded blueprints. + // This is a fallback in case `LogMsg::ActivateStore` isn't sent (for whatever reason). let blueprints = store_hub .entity_dbs_from_channel_source(&channel_source) @@ -998,21 +999,45 @@ impl App { re_log::error_once!("Failed to add incoming msg: {err}"); }; - // Set the recording-id after potentially creating the store in the hub. - // This ordering is important because the `StoreHub` internally - // updates the app-id when changing the recording. - if let LogMsg::SetStoreInfo(msg) = &msg { - match msg.info.store_id.kind { - StoreKind::Recording => { - re_log::debug!("Opening a new recording: {:?}", msg.info); - store_hub.set_recording_id(store_id.clone()); + match &msg { + LogMsg::SetStoreInfo(_) => { + // Set the recording-id after potentially creating the store in the hub. + // This ordering is important because the `StoreHub` internally + // updates the app-id when changing the recording. + match store_id.kind { + StoreKind::Recording => { + re_log::debug!("Opening a new recording: {store_id}"); + store_hub.set_recording_id(store_id.clone()); + } + StoreKind::Blueprint => { + // We wait with activaing blueprints until they are fully loaded, + // so that we don't run heuristics on half-loaded blueprints. + // TODO(#5297): heed special "end-of-blueprint" message to activate blueprint. + // Otherwise on a mixed connection (SDK sending both blueprint and recording) + // the blueprint won't be activated until the whole _recording_ has finished loading. + } } - StoreKind::Blueprint => { - // We wait with activaing blueprints until they are fully loaded, - // so that we don't run heuristics on half-loaded blueprints. - // TODO(#5297): heed special "end-of-blueprint" message to activate blueprint. - // Otherwise on a mixed connection (SDK sending both blueprint and recording) - // the blueprint won't be activated until the whole _recording_ has finished loading. + } + + LogMsg::ArrowMsg(_, _) => { + // Andled by EntityDb::add + } + + LogMsg::ActivateStore(store_id) => { + match store_id.kind { + StoreKind::Recording => { + re_log::debug!("Opening a new recording: {store_id}"); + store_hub.set_recording_id(store_id.clone()); + } + StoreKind::Blueprint => { + re_log::debug!("Activating newly loaded blueprint"); + if let Some(info) = entity_db.store_info() { + let app_id = info.application_id.clone(); + store_hub.set_blueprint_for_app_id(store_id.clone(), app_id); + } else { + re_log::warn!("Got ActivateStore message without first receiving a SetStoreInfo"); + } + } } } } diff --git a/crates/rerun/src/run.rs b/crates/rerun/src/run.rs index c571bd2b4b1c..9437471ab927 100644 --- a/crates/rerun/src/run.rs +++ b/crates/rerun/src/run.rs @@ -532,6 +532,7 @@ impl PrintCommand { let SetStoreInfo { row_id: _, info } = msg; println!("{info:#?}"); } + LogMsg::ArrowMsg(_row_id, arrow_msg) => { let mut table = DataTable::from_arrow_msg(&arrow_msg).context("Decode arrow message")?; @@ -557,6 +558,10 @@ impl PrintCommand { ); } } + + LogMsg::ActivateStore(store_id) => { + println!("ActivateStore({store_id})"); + } } } Ok(()) From 7fc4299017b92150f8b6cdb3933b43fa16330038 Mon Sep 17 00:00:00 2001 From: Emil Ernerfeldt Date: Mon, 18 Mar 2024 10:28:16 +0100 Subject: [PATCH 21/50] Make arrow null fields nullable in C++ (#5551) * Closes #5459 ### Checklist * [x] I have read and agree to [Contributor Guide](https://github.com/rerun-io/rerun/blob/main/CONTRIBUTING.md) and the [Code of Conduct](https://github.com/rerun-io/rerun/blob/main/CODE_OF_CONDUCT.md) * [x] I've included a screenshot or gif (if applicable) * [x] I have tested the web demo (if applicable): * Using newly built examples: [app.rerun.io](https://app.rerun.io/pr/5551/index.html) * Using examples from latest `main` build: [app.rerun.io](https://app.rerun.io/pr/5551/index.html?manifest_url=https://app.rerun.io/version/main/examples_manifest.json) * Using full set of examples from `nightly` build: [app.rerun.io](https://app.rerun.io/pr/5551/index.html?manifest_url=https://app.rerun.io/version/nightly/examples_manifest.json) * [x] The PR title and labels are set such as to maximize their usefulness for the next release's CHANGELOG * [x] If applicable, add a new check to the [release checklist](https://github.com/rerun-io/rerun/blob/main/tests/python/release_checklist)! - [PR Build Summary](https://build.rerun.io/pr/5551) - [Docs preview](https://rerun.io/preview/4fdba96c770a32dad1a69dbbfad20c5b0a73abf8/docs) - [Examples preview](https://rerun.io/preview/4fdba96c770a32dad1a69dbbfad20c5b0a73abf8/examples) - [Recent benchmark results](https://build.rerun.io/graphs/crates.html) - [Wasm size tracking](https://build.rerun.io/graphs/sizes.html) --- .../re_types_builder/src/codegen/cpp/mod.rs | 6 +++--- crates/re_types_builder/src/objects.rs | 6 +++--- .../components/background3d_kind.cpp | 6 +++--- .../blueprint/components/container_kind.cpp | 8 ++++---- .../rerun/blueprint/components/corner2d.cpp | 8 ++++---- .../src/rerun/components/marker_shape.cpp | 20 +++++++++---------- .../tests/generated/components/enum_test.cpp | 12 +++++------ 7 files changed, 33 insertions(+), 33 deletions(-) diff --git a/crates/re_types_builder/src/codegen/cpp/mod.rs b/crates/re_types_builder/src/codegen/cpp/mod.rs index 4201060ce9cc..0ff49abf78c1 100644 --- a/crates/re_types_builder/src/codegen/cpp/mod.rs +++ b/crates/re_types_builder/src/codegen/cpp/mod.rs @@ -2345,7 +2345,7 @@ fn quote_arrow_field_type( ) -> TokenStream { let name = &field.name; let datatype = quote_arrow_data_type(&field.typ, objects, includes, false); - let is_nullable = field.is_nullable; + let is_nullable = field.is_nullable || field.typ == Type::Unit; // null type is always nullable quote! { arrow::field(#name, #datatype, #is_nullable) @@ -2359,9 +2359,9 @@ fn quote_arrow_elem_type( ) -> TokenStream { let typ: Type = elem_type.clone().into(); let datatype = quote_arrow_data_type(&typ, objects, includes, false); - + let is_nullable = typ == Type::Unit; // null type must be nullable quote! { - arrow::field("item", #datatype, false) + arrow::field("item", #datatype, #is_nullable) } } diff --git a/crates/re_types_builder/src/objects.rs b/crates/re_types_builder/src/objects.rs index 5efea2bf04da..e332fb9e89ca 100644 --- a/crates/re_types_builder/src/objects.rs +++ b/crates/re_types_builder/src/objects.rs @@ -798,7 +798,7 @@ impl ObjectField { let typ = Type::from_raw_type(&virtpath, enums, objs, field.type_(), &attrs); let order = attrs.get::(&fqname, crate::ATTR_ORDER); - let is_nullable = attrs.has(crate::ATTR_NULLABLE); + let is_nullable = attrs.has(crate::ATTR_NULLABLE) || typ == Type::Unit; // null type is always nullable let is_deprecated = field.deprecated(); Self { @@ -852,8 +852,8 @@ impl ObjectField { &attrs, ); - let is_nullable = attrs.has(crate::ATTR_NULLABLE); - // TODO(cmc): not sure about this, but fbs unions are a bit weird that way + let is_nullable = attrs.has(crate::ATTR_NULLABLE) || typ == Type::Unit; // null type is always nullable + let is_deprecated = false; if attrs.has(crate::ATTR_ORDER) { diff --git a/rerun_cpp/src/rerun/blueprint/components/background3d_kind.cpp b/rerun_cpp/src/rerun/blueprint/components/background3d_kind.cpp index 465e5963c081..7a99c3460f99 100644 --- a/rerun_cpp/src/rerun/blueprint/components/background3d_kind.cpp +++ b/rerun_cpp/src/rerun/blueprint/components/background3d_kind.cpp @@ -11,9 +11,9 @@ namespace rerun { Loggable::arrow_datatype() { static const auto datatype = arrow::sparse_union({ arrow::field("_null_markers", arrow::null(), true, nullptr), - arrow::field("GradientDark", arrow::null(), false), - arrow::field("GradientBright", arrow::null(), false), - arrow::field("SolidColor", arrow::null(), false), + arrow::field("GradientDark", arrow::null(), true), + arrow::field("GradientBright", arrow::null(), true), + arrow::field("SolidColor", arrow::null(), true), }); return datatype; } diff --git a/rerun_cpp/src/rerun/blueprint/components/container_kind.cpp b/rerun_cpp/src/rerun/blueprint/components/container_kind.cpp index 84651d071328..dec91deb4b2e 100644 --- a/rerun_cpp/src/rerun/blueprint/components/container_kind.cpp +++ b/rerun_cpp/src/rerun/blueprint/components/container_kind.cpp @@ -11,10 +11,10 @@ namespace rerun { Loggable::arrow_datatype() { static const auto datatype = arrow::sparse_union({ arrow::field("_null_markers", arrow::null(), true, nullptr), - arrow::field("Tabs", arrow::null(), false), - arrow::field("Horizontal", arrow::null(), false), - arrow::field("Vertical", arrow::null(), false), - arrow::field("Grid", arrow::null(), false), + arrow::field("Tabs", arrow::null(), true), + arrow::field("Horizontal", arrow::null(), true), + arrow::field("Vertical", arrow::null(), true), + arrow::field("Grid", arrow::null(), true), }); return datatype; } diff --git a/rerun_cpp/src/rerun/blueprint/components/corner2d.cpp b/rerun_cpp/src/rerun/blueprint/components/corner2d.cpp index 20390a943227..abc6f3e33d6e 100644 --- a/rerun_cpp/src/rerun/blueprint/components/corner2d.cpp +++ b/rerun_cpp/src/rerun/blueprint/components/corner2d.cpp @@ -11,10 +11,10 @@ namespace rerun { Loggable::arrow_datatype() { static const auto datatype = arrow::sparse_union({ arrow::field("_null_markers", arrow::null(), true, nullptr), - arrow::field("LeftTop", arrow::null(), false), - arrow::field("RightTop", arrow::null(), false), - arrow::field("LeftBottom", arrow::null(), false), - arrow::field("RightBottom", arrow::null(), false), + arrow::field("LeftTop", arrow::null(), true), + arrow::field("RightTop", arrow::null(), true), + arrow::field("LeftBottom", arrow::null(), true), + arrow::field("RightBottom", arrow::null(), true), }); return datatype; } diff --git a/rerun_cpp/src/rerun/components/marker_shape.cpp b/rerun_cpp/src/rerun/components/marker_shape.cpp index d105942e2021..0c94783c9748 100644 --- a/rerun_cpp/src/rerun/components/marker_shape.cpp +++ b/rerun_cpp/src/rerun/components/marker_shape.cpp @@ -10,16 +10,16 @@ namespace rerun { const std::shared_ptr& Loggable::arrow_datatype() { static const auto datatype = arrow::sparse_union({ arrow::field("_null_markers", arrow::null(), true, nullptr), - arrow::field("Circle", arrow::null(), false), - arrow::field("Diamond", arrow::null(), false), - arrow::field("Square", arrow::null(), false), - arrow::field("Cross", arrow::null(), false), - arrow::field("Plus", arrow::null(), false), - arrow::field("Up", arrow::null(), false), - arrow::field("Down", arrow::null(), false), - arrow::field("Left", arrow::null(), false), - arrow::field("Right", arrow::null(), false), - arrow::field("Asterisk", arrow::null(), false), + arrow::field("Circle", arrow::null(), true), + arrow::field("Diamond", arrow::null(), true), + arrow::field("Square", arrow::null(), true), + arrow::field("Cross", arrow::null(), true), + arrow::field("Plus", arrow::null(), true), + arrow::field("Up", arrow::null(), true), + arrow::field("Down", arrow::null(), true), + arrow::field("Left", arrow::null(), true), + arrow::field("Right", arrow::null(), true), + arrow::field("Asterisk", arrow::null(), true), }); return datatype; } diff --git a/rerun_cpp/tests/generated/components/enum_test.cpp b/rerun_cpp/tests/generated/components/enum_test.cpp index 4a6dba776640..6e49ee6a4d35 100644 --- a/rerun_cpp/tests/generated/components/enum_test.cpp +++ b/rerun_cpp/tests/generated/components/enum_test.cpp @@ -10,12 +10,12 @@ namespace rerun { const std::shared_ptr& Loggable::arrow_datatype() { static const auto datatype = arrow::sparse_union({ arrow::field("_null_markers", arrow::null(), true, nullptr), - arrow::field("Up", arrow::null(), false), - arrow::field("Down", arrow::null(), false), - arrow::field("Right", arrow::null(), false), - arrow::field("Left", arrow::null(), false), - arrow::field("Forward", arrow::null(), false), - arrow::field("Back", arrow::null(), false), + arrow::field("Up", arrow::null(), true), + arrow::field("Down", arrow::null(), true), + arrow::field("Right", arrow::null(), true), + arrow::field("Left", arrow::null(), true), + arrow::field("Forward", arrow::null(), true), + arrow::field("Back", arrow::null(), true), }); return datatype; } From 3bf45c4dbe8e6f0a5a0725d5e2d424aeccf04cba Mon Sep 17 00:00:00 2001 From: Andreas Reich Date: Mon, 18 Mar 2024 10:42:28 +0100 Subject: [PATCH 22/50] Fewer cpp files: Inline forward serialization of transparent components to their respective datatypes (#5544) ### What * don't generate `fill_arrow_array_builder_method` if it's not needed * inline fully transparent components whose serialization is implemented by a datatypes (that's most of them!) -> removes lots of cpp files, thus cutting down compile times and amount of code @ reviewer: all the interesting changes are `crates/re_types_builder/src/codegen/cpp/mod.rs`, everything else is just an example ### Checklist * [x] I have read and agree to [Contributor Guide](https://github.com/rerun-io/rerun/blob/main/CONTRIBUTING.md) and the [Code of Conduct](https://github.com/rerun-io/rerun/blob/main/CODE_OF_CONDUCT.md) * [x] I've included a screenshot or gif (if applicable) * [x] I have tested the web demo (if applicable): * Using newly built examples: [app.rerun.io](https://app.rerun.io/pr/5544/index.html) * Using examples from latest `main` build: [app.rerun.io](https://app.rerun.io/pr/5544/index.html?manifest_url=https://app.rerun.io/version/main/examples_manifest.json) * Using full set of examples from `nightly` build: [app.rerun.io](https://app.rerun.io/pr/5544/index.html?manifest_url=https://app.rerun.io/version/nightly/examples_manifest.json) * [x] The PR title and labels are set such as to maximize their usefulness for the next release's CHANGELOG * [x] If applicable, add a new check to the [release checklist](https://github.com/rerun-io/rerun/blob/main/tests/python/release_checklist)! - [PR Build Summary](https://build.rerun.io/pr/5544) - [Docs preview](https://rerun.io/preview/fd6c99047b0a4b6c32a022073eb646e4fffbcd68/docs) - [Examples preview](https://rerun.io/preview/fd6c99047b0a4b6c32a022073eb646e4fffbcd68/examples) - [Recent benchmark results](https://build.rerun.io/graphs/crates.html) - [Wasm size tracking](https://build.rerun.io/graphs/sizes.html) --- .../re_types_builder/src/codegen/cpp/mod.rs | 237 ++++++++++++------ .../rerun/blueprint/components/.gitattributes | 10 - .../rerun/blueprint/components/active_tab.cpp | 55 ---- .../rerun/blueprint/components/active_tab.hpp | 23 +- .../blueprint/components/auto_layout.cpp | 40 +-- .../blueprint/components/auto_layout.hpp | 10 +- .../blueprint/components/auto_space_views.cpp | 44 ++-- .../blueprint/components/auto_space_views.hpp | 10 +- .../components/background3d_kind.cpp | 46 ++-- .../components/background3d_kind.hpp | 10 +- .../blueprint/components/column_share.cpp | 40 +-- .../blueprint/components/column_share.hpp | 10 +- .../blueprint/components/container_kind.cpp | 44 ++-- .../blueprint/components/container_kind.hpp | 10 +- .../rerun/blueprint/components/corner2d.cpp | 40 +-- .../rerun/blueprint/components/corner2d.hpp | 10 +- .../entity_properties_component.cpp | 44 ++-- .../entity_properties_component.hpp | 10 +- .../blueprint/components/grid_columns.cpp | 40 +-- .../blueprint/components/grid_columns.hpp | 10 +- .../blueprint/components/included_content.cpp | 58 ----- .../blueprint/components/included_content.hpp | 28 +-- .../components/included_space_view.cpp | 58 ----- .../components/included_space_view.hpp | 28 +-- .../components/lock_range_during_zoom.cpp | 46 ++-- .../components/lock_range_during_zoom.hpp | 10 +- .../blueprint/components/panel_expanded.cpp | 57 ----- .../blueprint/components/panel_expanded.hpp | 23 +- .../blueprint/components/query_expression.cpp | 58 ----- .../blueprint/components/query_expression.hpp | 23 +- .../blueprint/components/root_container.cpp | 57 ----- .../blueprint/components/root_container.hpp | 23 +- .../rerun/blueprint/components/row_share.cpp | 40 +-- .../rerun/blueprint/components/row_share.hpp | 10 +- .../blueprint/components/space_view_class.cpp | 57 ----- .../blueprint/components/space_view_class.hpp | 23 +- .../components/space_view_maximized.cpp | 58 ----- .../components/space_view_maximized.hpp | 28 +-- .../components/space_view_origin.cpp | 58 ----- .../components/space_view_origin.hpp | 28 +-- .../components/viewer_recommendation_hash.cpp | 60 ----- .../components/viewer_recommendation_hash.hpp | 30 +-- .../rerun/blueprint/components/visible.cpp | 40 +-- .../rerun/blueprint/components/visible.hpp | 10 +- rerun_cpp/src/rerun/components/.gitattributes | 22 -- .../rerun/components/annotation_context.cpp | 40 +-- .../rerun/components/annotation_context.hpp | 10 +- rerun_cpp/src/rerun/components/blob.cpp | 40 +-- rerun_cpp/src/rerun/components/blob.hpp | 10 +- rerun_cpp/src/rerun/components/class_id.cpp | 51 ---- rerun_cpp/src/rerun/components/class_id.hpp | 27 +- .../rerun/components/clear_is_recursive.cpp | 40 +-- .../rerun/components/clear_is_recursive.hpp | 10 +- rerun_cpp/src/rerun/components/color.cpp | 51 ---- rerun_cpp/src/rerun/components/color.hpp | 27 +- .../src/rerun/components/depth_meter.cpp | 40 +-- .../src/rerun/components/depth_meter.hpp | 10 +- .../rerun/components/disconnected_space.cpp | 40 +-- .../rerun/components/disconnected_space.hpp | 10 +- rerun_cpp/src/rerun/components/draw_order.cpp | 40 +-- rerun_cpp/src/rerun/components/draw_order.hpp | 10 +- .../src/rerun/components/half_sizes2d.cpp | 52 ---- .../src/rerun/components/half_sizes2d.hpp | 23 +- .../src/rerun/components/half_sizes3d.cpp | 52 ---- .../src/rerun/components/half_sizes3d.hpp | 23 +- .../src/rerun/components/instance_key.cpp | 40 +-- .../src/rerun/components/instance_key.hpp | 10 +- .../src/rerun/components/keypoint_id.cpp | 51 ---- .../src/rerun/components/keypoint_id.hpp | 28 +-- .../src/rerun/components/line_strip2d.cpp | 40 +-- .../src/rerun/components/line_strip2d.hpp | 10 +- .../src/rerun/components/line_strip3d.cpp | 40 +-- .../src/rerun/components/line_strip3d.hpp | 10 +- .../src/rerun/components/marker_shape.cpp | 40 +-- .../src/rerun/components/marker_shape.hpp | 10 +- .../src/rerun/components/marker_size.cpp | 40 +-- .../src/rerun/components/marker_size.hpp | 10 +- rerun_cpp/src/rerun/components/material.cpp | 51 ---- rerun_cpp/src/rerun/components/material.hpp | 25 +- rerun_cpp/src/rerun/components/media_type.cpp | 51 ---- rerun_cpp/src/rerun/components/media_type.hpp | 23 +- .../src/rerun/components/mesh_properties.cpp | 54 ---- .../src/rerun/components/mesh_properties.hpp | 26 +- rerun_cpp/src/rerun/components/name.cpp | 51 ---- rerun_cpp/src/rerun/components/name.hpp | 22 +- .../components/out_of_tree_transform3d.cpp | 55 ---- .../components/out_of_tree_transform3d.hpp | 28 +-- .../rerun/components/pinhole_projection.cpp | 53 ---- .../rerun/components/pinhole_projection.hpp | 26 +- rerun_cpp/src/rerun/components/position2d.cpp | 52 ---- rerun_cpp/src/rerun/components/position2d.hpp | 23 +- rerun_cpp/src/rerun/components/position3d.cpp | 52 ---- rerun_cpp/src/rerun/components/position3d.hpp | 23 +- rerun_cpp/src/rerun/components/radius.cpp | 40 +-- rerun_cpp/src/rerun/components/radius.hpp | 10 +- rerun_cpp/src/rerun/components/range1d.cpp | 40 +-- rerun_cpp/src/rerun/components/range1d.hpp | 10 +- rerun_cpp/src/rerun/components/resolution.cpp | 52 ---- rerun_cpp/src/rerun/components/resolution.hpp | 26 +- rerun_cpp/src/rerun/components/rotation3d.cpp | 52 ---- rerun_cpp/src/rerun/components/rotation3d.hpp | 26 +- rerun_cpp/src/rerun/components/scalar.cpp | 40 +-- rerun_cpp/src/rerun/components/scalar.hpp | 10 +- .../rerun/components/scalar_scattering.cpp | 40 +-- .../rerun/components/scalar_scattering.hpp | 10 +- .../src/rerun/components/stroke_width.cpp | 40 +-- .../src/rerun/components/stroke_width.hpp | 10 +- .../src/rerun/components/tensor_data.cpp | 51 ---- .../src/rerun/components/tensor_data.hpp | 26 +- rerun_cpp/src/rerun/components/texcoord2d.cpp | 52 ---- rerun_cpp/src/rerun/components/texcoord2d.hpp | 23 +- rerun_cpp/src/rerun/components/text.cpp | 51 ---- rerun_cpp/src/rerun/components/text.hpp | 22 +- .../src/rerun/components/text_log_level.cpp | 51 ---- .../src/rerun/components/text_log_level.hpp | 23 +- .../src/rerun/components/transform3d.cpp | 52 ---- .../src/rerun/components/transform3d.hpp | 26 +- rerun_cpp/src/rerun/components/vector2d.cpp | 52 ---- rerun_cpp/src/rerun/components/vector2d.hpp | 23 +- rerun_cpp/src/rerun/components/vector3d.cpp | 52 ---- rerun_cpp/src/rerun/components/vector3d.hpp | 23 +- .../src/rerun/components/view_coordinates.cpp | 40 +-- .../src/rerun/components/view_coordinates.hpp | 10 +- .../rerun/components/visualizer_overrides.cpp | 40 +-- .../rerun/components/visualizer_overrides.hpp | 10 +- rerun_cpp/src/rerun/datatypes/angle.cpp | 40 +-- rerun_cpp/src/rerun/datatypes/angle.hpp | 10 +- .../src/rerun/datatypes/annotation_info.cpp | 40 +-- .../src/rerun/datatypes/annotation_info.hpp | 10 +- rerun_cpp/src/rerun/datatypes/bool.cpp | 40 +-- rerun_cpp/src/rerun/datatypes/bool.hpp | 10 +- .../src/rerun/datatypes/class_description.cpp | 40 +-- .../src/rerun/datatypes/class_description.hpp | 10 +- .../datatypes/class_description_map_elem.cpp | 40 +-- .../datatypes/class_description_map_elem.hpp | 10 +- rerun_cpp/src/rerun/datatypes/class_id.cpp | 40 +-- rerun_cpp/src/rerun/datatypes/class_id.hpp | 10 +- rerun_cpp/src/rerun/datatypes/entity_path.cpp | 40 +-- rerun_cpp/src/rerun/datatypes/entity_path.hpp | 10 +- rerun_cpp/src/rerun/datatypes/float32.cpp | 40 +-- rerun_cpp/src/rerun/datatypes/float32.hpp | 10 +- rerun_cpp/src/rerun/datatypes/keypoint_id.cpp | 40 +-- rerun_cpp/src/rerun/datatypes/keypoint_id.hpp | 10 +- .../src/rerun/datatypes/keypoint_pair.cpp | 40 +-- .../src/rerun/datatypes/keypoint_pair.hpp | 10 +- rerun_cpp/src/rerun/datatypes/mat3x3.cpp | 40 +-- rerun_cpp/src/rerun/datatypes/mat3x3.hpp | 10 +- rerun_cpp/src/rerun/datatypes/mat4x4.cpp | 40 +-- rerun_cpp/src/rerun/datatypes/mat4x4.hpp | 10 +- rerun_cpp/src/rerun/datatypes/material.cpp | 40 +-- rerun_cpp/src/rerun/datatypes/material.hpp | 10 +- .../src/rerun/datatypes/mesh_properties.cpp | 40 +-- .../src/rerun/datatypes/mesh_properties.hpp | 10 +- rerun_cpp/src/rerun/datatypes/quaternion.cpp | 40 +-- rerun_cpp/src/rerun/datatypes/quaternion.hpp | 10 +- rerun_cpp/src/rerun/datatypes/rgba32.cpp | 40 +-- rerun_cpp/src/rerun/datatypes/rgba32.hpp | 10 +- rerun_cpp/src/rerun/datatypes/rotation3d.cpp | 40 +-- rerun_cpp/src/rerun/datatypes/rotation3d.hpp | 10 +- .../rerun/datatypes/rotation_axis_angle.cpp | 40 +-- .../rerun/datatypes/rotation_axis_angle.hpp | 10 +- rerun_cpp/src/rerun/datatypes/scale3d.cpp | 40 +-- rerun_cpp/src/rerun/datatypes/scale3d.hpp | 10 +- .../src/rerun/datatypes/tensor_buffer.cpp | 40 +-- .../src/rerun/datatypes/tensor_buffer.hpp | 10 +- rerun_cpp/src/rerun/datatypes/tensor_data.cpp | 40 +-- rerun_cpp/src/rerun/datatypes/tensor_data.hpp | 10 +- .../src/rerun/datatypes/tensor_dimension.cpp | 40 +-- .../src/rerun/datatypes/tensor_dimension.hpp | 10 +- rerun_cpp/src/rerun/datatypes/transform3d.cpp | 40 +-- rerun_cpp/src/rerun/datatypes/transform3d.hpp | 10 +- .../datatypes/translation_and_mat3x3.cpp | 40 +-- .../datatypes/translation_and_mat3x3.hpp | 10 +- .../translation_rotation_scale3d.cpp | 44 ++-- .../translation_rotation_scale3d.hpp | 10 +- rerun_cpp/src/rerun/datatypes/uint32.cpp | 40 +-- rerun_cpp/src/rerun/datatypes/uint32.hpp | 10 +- rerun_cpp/src/rerun/datatypes/uint64.cpp | 40 +-- rerun_cpp/src/rerun/datatypes/uint64.hpp | 10 +- rerun_cpp/src/rerun/datatypes/utf8.cpp | 40 +-- rerun_cpp/src/rerun/datatypes/utf8.hpp | 10 +- rerun_cpp/src/rerun/datatypes/uuid.cpp | 40 +-- rerun_cpp/src/rerun/datatypes/uuid.hpp | 10 +- rerun_cpp/src/rerun/datatypes/uvec2d.cpp | 40 +-- rerun_cpp/src/rerun/datatypes/uvec2d.hpp | 10 +- rerun_cpp/src/rerun/datatypes/uvec3d.cpp | 40 +-- rerun_cpp/src/rerun/datatypes/uvec3d.hpp | 10 +- rerun_cpp/src/rerun/datatypes/uvec4d.cpp | 40 +-- rerun_cpp/src/rerun/datatypes/uvec4d.hpp | 10 +- rerun_cpp/src/rerun/datatypes/vec2d.cpp | 40 +-- rerun_cpp/src/rerun/datatypes/vec2d.hpp | 10 +- rerun_cpp/src/rerun/datatypes/vec3d.cpp | 40 +-- rerun_cpp/src/rerun/datatypes/vec3d.hpp | 10 +- rerun_cpp/src/rerun/datatypes/vec4d.cpp | 40 +-- rerun_cpp/src/rerun/datatypes/vec4d.hpp | 10 +- .../tests/generated/components/.gitattributes | 7 - .../generated/components/affix_fuzzer1.cpp | 51 ---- .../generated/components/affix_fuzzer1.hpp | 26 +- .../generated/components/affix_fuzzer10.cpp | 40 +-- .../generated/components/affix_fuzzer10.hpp | 10 +- .../generated/components/affix_fuzzer11.cpp | 40 +-- .../generated/components/affix_fuzzer11.hpp | 10 +- .../generated/components/affix_fuzzer12.cpp | 40 +-- .../generated/components/affix_fuzzer12.hpp | 10 +- .../generated/components/affix_fuzzer13.cpp | 40 +-- .../generated/components/affix_fuzzer13.hpp | 10 +- .../generated/components/affix_fuzzer14.cpp | 52 ---- .../generated/components/affix_fuzzer14.hpp | 26 +- .../generated/components/affix_fuzzer15.cpp | 34 +-- .../generated/components/affix_fuzzer15.hpp | 10 +- .../generated/components/affix_fuzzer16.cpp | 40 +-- .../generated/components/affix_fuzzer16.hpp | 10 +- .../generated/components/affix_fuzzer17.cpp | 40 +-- .../generated/components/affix_fuzzer17.hpp | 10 +- .../generated/components/affix_fuzzer18.cpp | 40 +-- .../generated/components/affix_fuzzer18.hpp | 10 +- .../generated/components/affix_fuzzer19.cpp | 52 ---- .../generated/components/affix_fuzzer19.hpp | 26 +- .../generated/components/affix_fuzzer2.cpp | 51 ---- .../generated/components/affix_fuzzer2.hpp | 26 +- .../generated/components/affix_fuzzer20.cpp | 52 ---- .../generated/components/affix_fuzzer20.hpp | 26 +- .../generated/components/affix_fuzzer21.cpp | 52 ---- .../generated/components/affix_fuzzer21.hpp | 26 +- .../generated/components/affix_fuzzer22.cpp | 34 +-- .../generated/components/affix_fuzzer22.hpp | 10 +- .../generated/components/affix_fuzzer3.cpp | 51 ---- .../generated/components/affix_fuzzer3.hpp | 26 +- .../generated/components/affix_fuzzer4.cpp | 32 +-- .../generated/components/affix_fuzzer4.hpp | 10 +- .../generated/components/affix_fuzzer5.cpp | 32 +-- .../generated/components/affix_fuzzer5.hpp | 10 +- .../generated/components/affix_fuzzer6.cpp | 32 +-- .../generated/components/affix_fuzzer6.hpp | 10 +- .../generated/components/affix_fuzzer7.cpp | 40 +-- .../generated/components/affix_fuzzer7.hpp | 10 +- .../generated/components/affix_fuzzer8.cpp | 40 +-- .../generated/components/affix_fuzzer8.hpp | 10 +- .../generated/components/affix_fuzzer9.cpp | 40 +-- .../generated/components/affix_fuzzer9.hpp | 10 +- .../tests/generated/components/enum_test.cpp | 40 +-- .../tests/generated/components/enum_test.hpp | 10 +- .../generated/datatypes/affix_fuzzer1.cpp | 40 +-- .../generated/datatypes/affix_fuzzer1.hpp | 10 +- .../generated/datatypes/affix_fuzzer2.cpp | 40 +-- .../generated/datatypes/affix_fuzzer2.hpp | 10 +- .../generated/datatypes/affix_fuzzer20.cpp | 40 +-- .../generated/datatypes/affix_fuzzer20.hpp | 10 +- .../generated/datatypes/affix_fuzzer21.cpp | 40 +-- .../generated/datatypes/affix_fuzzer21.hpp | 10 +- .../generated/datatypes/affix_fuzzer22.cpp | 40 +-- .../generated/datatypes/affix_fuzzer22.hpp | 10 +- .../generated/datatypes/affix_fuzzer3.cpp | 40 +-- .../generated/datatypes/affix_fuzzer3.hpp | 10 +- .../generated/datatypes/affix_fuzzer4.cpp | 40 +-- .../generated/datatypes/affix_fuzzer4.hpp | 10 +- .../generated/datatypes/affix_fuzzer5.cpp | 40 +-- .../generated/datatypes/affix_fuzzer5.hpp | 10 +- .../generated/datatypes/flattened_scalar.cpp | 40 +-- .../generated/datatypes/flattened_scalar.hpp | 10 +- .../datatypes/primitive_component.cpp | 40 +-- .../datatypes/primitive_component.hpp | 10 +- .../generated/datatypes/string_component.cpp | 40 +-- .../generated/datatypes/string_component.hpp | 10 +- 264 files changed, 2779 insertions(+), 5098 deletions(-) delete mode 100644 rerun_cpp/src/rerun/blueprint/components/active_tab.cpp delete mode 100644 rerun_cpp/src/rerun/blueprint/components/included_content.cpp delete mode 100644 rerun_cpp/src/rerun/blueprint/components/included_space_view.cpp delete mode 100644 rerun_cpp/src/rerun/blueprint/components/panel_expanded.cpp delete mode 100644 rerun_cpp/src/rerun/blueprint/components/query_expression.cpp delete mode 100644 rerun_cpp/src/rerun/blueprint/components/root_container.cpp delete mode 100644 rerun_cpp/src/rerun/blueprint/components/space_view_class.cpp delete mode 100644 rerun_cpp/src/rerun/blueprint/components/space_view_maximized.cpp delete mode 100644 rerun_cpp/src/rerun/blueprint/components/space_view_origin.cpp delete mode 100644 rerun_cpp/src/rerun/blueprint/components/viewer_recommendation_hash.cpp delete mode 100644 rerun_cpp/src/rerun/components/class_id.cpp delete mode 100644 rerun_cpp/src/rerun/components/color.cpp delete mode 100644 rerun_cpp/src/rerun/components/half_sizes2d.cpp delete mode 100644 rerun_cpp/src/rerun/components/half_sizes3d.cpp delete mode 100644 rerun_cpp/src/rerun/components/keypoint_id.cpp delete mode 100644 rerun_cpp/src/rerun/components/material.cpp delete mode 100644 rerun_cpp/src/rerun/components/media_type.cpp delete mode 100644 rerun_cpp/src/rerun/components/mesh_properties.cpp delete mode 100644 rerun_cpp/src/rerun/components/name.cpp delete mode 100644 rerun_cpp/src/rerun/components/out_of_tree_transform3d.cpp delete mode 100644 rerun_cpp/src/rerun/components/pinhole_projection.cpp delete mode 100644 rerun_cpp/src/rerun/components/position2d.cpp delete mode 100644 rerun_cpp/src/rerun/components/position3d.cpp delete mode 100644 rerun_cpp/src/rerun/components/resolution.cpp delete mode 100644 rerun_cpp/src/rerun/components/rotation3d.cpp delete mode 100644 rerun_cpp/src/rerun/components/tensor_data.cpp delete mode 100644 rerun_cpp/src/rerun/components/texcoord2d.cpp delete mode 100644 rerun_cpp/src/rerun/components/text.cpp delete mode 100644 rerun_cpp/src/rerun/components/text_log_level.cpp delete mode 100644 rerun_cpp/src/rerun/components/transform3d.cpp delete mode 100644 rerun_cpp/src/rerun/components/vector2d.cpp delete mode 100644 rerun_cpp/src/rerun/components/vector3d.cpp delete mode 100644 rerun_cpp/tests/generated/components/affix_fuzzer1.cpp delete mode 100644 rerun_cpp/tests/generated/components/affix_fuzzer14.cpp delete mode 100644 rerun_cpp/tests/generated/components/affix_fuzzer19.cpp delete mode 100644 rerun_cpp/tests/generated/components/affix_fuzzer2.cpp delete mode 100644 rerun_cpp/tests/generated/components/affix_fuzzer20.cpp delete mode 100644 rerun_cpp/tests/generated/components/affix_fuzzer21.cpp delete mode 100644 rerun_cpp/tests/generated/components/affix_fuzzer3.cpp diff --git a/crates/re_types_builder/src/codegen/cpp/mod.rs b/crates/re_types_builder/src/codegen/cpp/mod.rs index 0ff49abf78c1..697546ab5146 100644 --- a/crates/re_types_builder/src/codegen/cpp/mod.rs +++ b/crates/re_types_builder/src/codegen/cpp/mod.rs @@ -241,7 +241,11 @@ fn generate_object_files( let (hpp, cpp) = generate_hpp_cpp(objects, obj, hpp_includes, &hpp_type_extensions)?; - for (extension, tokens) in [("hpp", hpp), ("cpp", cpp)] { + for (extension, tokens) in [("hpp", Some(hpp)), ("cpp", cpp)] { + let Some(tokens) = tokens else { + continue; + }; + let mut contents = string_from_token_stream(&tokens, obj.relative_filepath()); if let Some(hpp_extension_string) = &hpp_extension_string { contents = contents.replace( @@ -348,7 +352,7 @@ fn generate_hpp_cpp( obj: &Object, hpp_includes: Includes, hpp_type_extensions: &TokenStream, -) -> Result<(TokenStream, TokenStream)> { +) -> Result<(TokenStream, Option)> { let QuotedObject { hpp, cpp } = QuotedObject::new(objects, obj, hpp_includes, hpp_type_extensions)?; let snake_case_name = obj.snake_case_name(); @@ -360,10 +364,12 @@ fn generate_hpp_cpp( #pragma_once #hpp }; - let cpp = quote! { - #hash include #header_file_name #NEWLINE_TOKEN #NEWLINE_TOKEN - #cpp - }; + let cpp = cpp.map(|cpp| { + quote! { + #hash include #header_file_name #NEWLINE_TOKEN #NEWLINE_TOKEN + #cpp + } + }); Ok((hpp, cpp)) } @@ -377,7 +383,7 @@ fn pragma_once() -> TokenStream { struct QuotedObject { hpp: TokenStream, - cpp: TokenStream, + cpp: Option, } impl QuotedObject { @@ -637,7 +643,10 @@ impl QuotedObject { #deprecation_ignore_end }; - Self { hpp, cpp } + Self { + hpp, + cpp: Some(cpp), + } } fn from_struct( @@ -714,9 +723,6 @@ impl QuotedObject { } let methods_hpp = methods.iter().map(|m| m.to_hpp_tokens()); - let methods_cpp = methods - .iter() - .map(|m| m.to_cpp_tokens("e!(#type_ident))); let (hpp_loggable, cpp_loggable) = quote_loggable_hpp_and_cpp( obj, @@ -748,14 +754,23 @@ impl QuotedObject { #hpp_loggable }; - let cpp = quote! { - #cpp_includes - namespace rerun::#quoted_namespace { - #(#methods_cpp)* - } + let cpp = if cpp_loggable.is_some() || methods.iter().any(|m| !m.inline) { + let methods_cpp = methods + .iter() + .map(|m| m.to_cpp_tokens("e!(#type_ident))); - #cpp_loggable + Some(quote! { + #cpp_includes + + namespace rerun::#quoted_namespace { + #(#methods_cpp)* + } + + #cpp_loggable + }) + } else { + None }; Self { hpp, cpp } @@ -1157,7 +1172,10 @@ impl QuotedObject { #cpp_loggable }; - Self { hpp, cpp } + Self { + hpp, + cpp: Some(cpp), + } } // C-style enum @@ -1229,7 +1247,10 @@ impl QuotedObject { #cpp_loggable }; - Self { hpp, cpp } + Self { + hpp, + cpp: Some(cpp), + } } } @@ -1323,6 +1344,16 @@ fn add_copy_assignment_and_constructor( methods } +/// If the type forwards to another rerun defined type, returns the fully qualified name of that type. +fn transparent_forwarded_fqname(obj: &Object) -> Option<&str> { + if obj.is_arrow_transparent() && obj.fields.len() == 1 && !obj.fields[0].is_nullable { + if let Type::Object(fqname) = &obj.fields[0].typ { + return Some(fqname); + } + } + None +} + fn arrow_data_type_method( obj: &Object, objects: &Objects, @@ -1331,15 +1362,35 @@ fn arrow_data_type_method( hpp_declarations: &mut ForwardDecls, ) -> Method { hpp_includes.insert_system("memory"); // std::shared_ptr - cpp_includes.insert_system("arrow/type_fwd.h"); - hpp_declarations.insert("arrow", ForwardDecl::Class(format_ident!("DataType"))); - let quoted_datatype = quote_arrow_data_type( - &Type::Object(obj.fqname.clone()), - objects, - cpp_includes, - true, - ); + let (inline, definition_body) = + if let Some(forwarded_fqname) = transparent_forwarded_fqname(obj) { + let forwarded_type = quote_fqname_as_type_path(hpp_includes, forwarded_fqname); + ( + true, + quote! { + return Loggable<#forwarded_type>::arrow_datatype(); + }, + ) + } else { + cpp_includes.insert_system("arrow/type_fwd.h"); + hpp_declarations.insert("arrow", ForwardDecl::Class(format_ident!("DataType"))); + + let quoted_datatype = quote_arrow_data_type( + &Type::Object(obj.fqname.clone()), + objects, + cpp_includes, + true, + ); + + ( + false, + quote! { + static const auto datatype = #quoted_datatype; + return datatype; + }, + ) + }; Method { docs: "Returns the arrow data type this type corresponds to.".into(), @@ -1348,11 +1399,8 @@ fn arrow_data_type_method( return_type: quote! { const std::shared_ptr& }, name_and_parameters: quote! { arrow_datatype() }, }, - definition_body: quote! { - static const auto datatype = #quoted_datatype; - return datatype; - }, - inline: false, + definition_body, + inline, } } @@ -1405,17 +1453,10 @@ fn to_arrow_method( declarations: &mut ForwardDecls, ) -> Method { hpp_includes.insert_system("memory"); // std::shared_ptr - hpp_includes.insert_rerun("result.hpp"); - declarations.insert("arrow", ForwardDecl::Class(format_ident!("Array"))); - - let todo_pool = quote_comment("TODO(andreas): Allow configuring the memory pool."); - - // Only need this in the cpp file where we don't need to forward declare the arrow builder type. - let arrow_builder_type = - arrow_array_builder_type_object(obj, objects, &mut ForwardDecls::default()); let type_ident = obj.ident(); let namespace_ident = obj.namespace_ident(); + let quoted_namespace = if let Some(scope) = obj.scope() { let scope = format_ident!("{}", scope); quote! { #scope::#namespace_ident} @@ -1423,6 +1464,52 @@ fn to_arrow_method( quote! {#namespace_ident} }; + let (inline, definition_body) = if let Some(forwarded_fqname) = + transparent_forwarded_fqname(obj) + { + let forwarded_type = quote_fqname_as_type_path(hpp_includes, forwarded_fqname); + let field_name = format_ident!("{}", obj.fields[0].snake_case_name()); + + ( + true, + quote! { + return Loggable<#forwarded_type>::to_arrow(&instances->#field_name, num_instances); + }, + ) + } else { + hpp_includes.insert_rerun("result.hpp"); + declarations.insert("arrow", ForwardDecl::Class(format_ident!("Array"))); + + let todo_pool = quote_comment("TODO(andreas): Allow configuring the memory pool."); + + // Only need this in the cpp file where we don't need to forward declare the arrow builder type. + let arrow_builder_type = + arrow_array_builder_type_object(obj, objects, &mut ForwardDecls::default()); + + ( + false, + quote! { + #NEWLINE_TOKEN + #todo_pool + arrow::MemoryPool* pool = arrow::default_memory_pool(); + auto datatype = arrow_datatype(); + #NEWLINE_TOKEN + #NEWLINE_TOKEN + ARROW_ASSIGN_OR_RAISE(auto builder, arrow::MakeBuilder(datatype, pool)) + if (instances && num_instances > 0) { + RR_RETURN_NOT_OK(Loggable<#quoted_namespace::#type_ident>::fill_arrow_array_builder( + static_cast(builder.get()), + instances, + num_instances + )); + } + std::shared_ptr array; + ARROW_RETURN_NOT_OK(builder->Finish(&array)); + return array; + }, + ) + }; + Method { docs: format!( "Serializes an array of `rerun::{quoted_namespace}::{type_ident}` into an arrow array." @@ -1435,26 +1522,8 @@ fn to_arrow_method( to_arrow(const #quoted_namespace::#type_ident* instances, size_t num_instances) }, }, - definition_body: quote! { - #NEWLINE_TOKEN - #todo_pool - arrow::MemoryPool* pool = arrow::default_memory_pool(); - auto datatype = arrow_datatype(); - #NEWLINE_TOKEN - #NEWLINE_TOKEN - ARROW_ASSIGN_OR_RAISE(auto builder, arrow::MakeBuilder(datatype, pool)) - if (instances && num_instances > 0) { - RR_RETURN_NOT_OK(Loggable<#quoted_namespace::#type_ident>::fill_arrow_array_builder( - static_cast(builder.get()), - instances, - num_instances - )); - } - std::shared_ptr array; - ARROW_RETURN_NOT_OK(builder->Finish(&array)); - return array; - }, - inline: false, + definition_body, + inline, } } @@ -2371,7 +2440,7 @@ fn quote_loggable_hpp_and_cpp( hpp_includes: &mut Includes, cpp_includes: &mut Includes, hpp_declarations: &mut ForwardDecls, -) -> (TokenStream, TokenStream) { +) -> (TokenStream, Option) { assert!(obj.kind != ObjectKind::Archetype); let namespace_ident = obj.namespace_ident(); @@ -2385,14 +2454,38 @@ fn quote_loggable_hpp_and_cpp( }; let fqname = &obj.fqname; + let loggable_type_name = quote! { Loggable<#quoted_namespace::#type_ident> }; - let methods = vec![ + let mut methods = vec![ arrow_data_type_method(obj, objects, hpp_includes, cpp_includes, hpp_declarations), - fill_arrow_array_builder_method(obj, cpp_includes, hpp_declarations, objects), to_arrow_method(obj, objects, hpp_includes, hpp_declarations), ]; - let loggable_type_name = quote! { Loggable<#quoted_namespace::#type_ident> }; + let predeclarations_and_static_assertions = if let Some(forwarded_fqname) = + transparent_forwarded_fqname(obj) + { + // We only actually need `to_arrow`, everything else is just nice to have. + + let forwarded_type = quote_fqname_as_type_path(hpp_includes, forwarded_fqname); + + // Don't to pre-declare `Loggable` if we're forwarding to another type - it's already known in this case. + quote! { static_assert(sizeof(#forwarded_type) == sizeof(#quoted_namespace::#type_ident)); } + } else { + // `fill_arrow_array_builder_method` is used as a utility to implement `to_arrow`. + // We only need it if we're not forwarding to another type. + methods.push(fill_arrow_array_builder_method( + obj, + cpp_includes, + hpp_declarations, + objects, + )); + + quote! { + // Instead of including loggable.hpp, simply re-declare the template since it's trivial + template + struct Loggable; + } + }; let methods_hpp = methods.iter().map(|m| m.to_hpp_tokens()); let methods_cpp = methods.iter().map(|m| m.to_cpp_tokens(&loggable_type_name)); @@ -2400,9 +2493,7 @@ fn quote_loggable_hpp_and_cpp( let hpp = quote! { namespace rerun { - // Instead of including loggable.hpp, simply re-declare the template since it's trivial - template - struct Loggable; + #predeclarations_and_static_assertions #hide_from_docs_comment template<> @@ -2415,10 +2506,14 @@ fn quote_loggable_hpp_and_cpp( } }; - let cpp = quote! { - namespace rerun { - #(#methods_cpp)* - } + let cpp = if methods.iter().any(|m| !m.inline) { + Some(quote! { + namespace rerun { + #(#methods_cpp)* + } + }) + } else { + None }; (hpp, cpp) diff --git a/rerun_cpp/src/rerun/blueprint/components/.gitattributes b/rerun_cpp/src/rerun/blueprint/components/.gitattributes index a77b30d84754..c013fc7cd820 100644 --- a/rerun_cpp/src/rerun/blueprint/components/.gitattributes +++ b/rerun_cpp/src/rerun/blueprint/components/.gitattributes @@ -1,7 +1,6 @@ # DO NOT EDIT! This file is generated by crates/re_types_builder/src/lib.rs .gitattributes linguist-generated=true -active_tab.cpp linguist-generated=true active_tab.hpp linguist-generated=true auto_layout.cpp linguist-generated=true auto_layout.hpp linguist-generated=true @@ -19,27 +18,18 @@ entity_properties_component.cpp linguist-generated=true entity_properties_component.hpp linguist-generated=true grid_columns.cpp linguist-generated=true grid_columns.hpp linguist-generated=true -included_content.cpp linguist-generated=true included_content.hpp linguist-generated=true -included_space_view.cpp linguist-generated=true included_space_view.hpp linguist-generated=true lock_range_during_zoom.cpp linguist-generated=true lock_range_during_zoom.hpp linguist-generated=true -panel_expanded.cpp linguist-generated=true panel_expanded.hpp linguist-generated=true -query_expression.cpp linguist-generated=true query_expression.hpp linguist-generated=true -root_container.cpp linguist-generated=true root_container.hpp linguist-generated=true row_share.cpp linguist-generated=true row_share.hpp linguist-generated=true -space_view_class.cpp linguist-generated=true space_view_class.hpp linguist-generated=true -space_view_maximized.cpp linguist-generated=true space_view_maximized.hpp linguist-generated=true -space_view_origin.cpp linguist-generated=true space_view_origin.hpp linguist-generated=true -viewer_recommendation_hash.cpp linguist-generated=true viewer_recommendation_hash.hpp linguist-generated=true visible.cpp linguist-generated=true visible.hpp linguist-generated=true diff --git a/rerun_cpp/src/rerun/blueprint/components/active_tab.cpp b/rerun_cpp/src/rerun/blueprint/components/active_tab.cpp deleted file mode 100644 index 2598fc7be74b..000000000000 --- a/rerun_cpp/src/rerun/blueprint/components/active_tab.cpp +++ /dev/null @@ -1,55 +0,0 @@ -// DO NOT EDIT! This file was auto-generated by crates/re_types_builder/src/codegen/cpp/mod.rs -// Based on "crates/re_types/definitions/rerun/blueprint/components/active_tab.fbs". - -#include "active_tab.hpp" - -#include "../../datatypes/entity_path.hpp" - -#include -#include - -namespace rerun::blueprint::components {} - -namespace rerun { - const std::shared_ptr& - Loggable::arrow_datatype() { - static const auto datatype = Loggable::arrow_datatype(); - return datatype; - } - - rerun::Error Loggable::fill_arrow_array_builder( - arrow::StringBuilder* builder, const blueprint::components::ActiveTab* elements, - size_t num_elements - ) { - static_assert( - sizeof(rerun::datatypes::EntityPath) == sizeof(blueprint::components::ActiveTab) - ); - RR_RETURN_NOT_OK(Loggable::fill_arrow_array_builder( - builder, - reinterpret_cast(elements), - num_elements - )); - - return Error::ok(); - } - - Result> Loggable::to_arrow( - const blueprint::components::ActiveTab* instances, size_t num_instances - ) { - // TODO(andreas): Allow configuring the memory pool. - arrow::MemoryPool* pool = arrow::default_memory_pool(); - auto datatype = arrow_datatype(); - - ARROW_ASSIGN_OR_RAISE(auto builder, arrow::MakeBuilder(datatype, pool)) - if (instances && num_instances > 0) { - RR_RETURN_NOT_OK(Loggable::fill_arrow_array_builder( - static_cast(builder.get()), - instances, - num_instances - )); - } - std::shared_ptr array; - ARROW_RETURN_NOT_OK(builder->Finish(&array)); - return array; - } -} // namespace rerun diff --git a/rerun_cpp/src/rerun/blueprint/components/active_tab.hpp b/rerun_cpp/src/rerun/blueprint/components/active_tab.hpp index a93295153a0d..545dbb4dee7c 100644 --- a/rerun_cpp/src/rerun/blueprint/components/active_tab.hpp +++ b/rerun_cpp/src/rerun/blueprint/components/active_tab.hpp @@ -11,12 +11,6 @@ #include #include -namespace arrow { - class Array; - class DataType; - class StringBuilder; -} // namespace arrow - namespace rerun::blueprint::components { /// **Component**: The active tab in a tabbed container. struct ActiveTab { @@ -50,8 +44,7 @@ namespace rerun::blueprint::components { } // namespace rerun::blueprint::components namespace rerun { - template - struct Loggable; + static_assert(sizeof(rerun::datatypes::EntityPath) == sizeof(blueprint::components::ActiveTab)); /// \private template <> @@ -59,17 +52,15 @@ namespace rerun { static constexpr const char Name[] = "rerun.blueprint.components.ActiveTab"; /// Returns the arrow data type this type corresponds to. - static const std::shared_ptr& arrow_datatype(); - - /// Fills an arrow array builder with an array of this type. - static rerun::Error fill_arrow_array_builder( - arrow::StringBuilder* builder, const blueprint::components::ActiveTab* elements, - size_t num_elements - ); + static const std::shared_ptr& arrow_datatype() { + return Loggable::arrow_datatype(); + } /// Serializes an array of `rerun::blueprint:: components::ActiveTab` into an arrow array. static Result> to_arrow( const blueprint::components::ActiveTab* instances, size_t num_instances - ); + ) { + return Loggable::to_arrow(&instances->tab, num_instances); + } }; } // namespace rerun diff --git a/rerun_cpp/src/rerun/blueprint/components/auto_layout.cpp b/rerun_cpp/src/rerun/blueprint/components/auto_layout.cpp index 0394e3ad9259..c211bd24ac10 100644 --- a/rerun_cpp/src/rerun/blueprint/components/auto_layout.cpp +++ b/rerun_cpp/src/rerun/blueprint/components/auto_layout.cpp @@ -15,6 +15,26 @@ namespace rerun { return datatype; } + Result> Loggable::to_arrow( + const blueprint::components::AutoLayout* instances, size_t num_instances + ) { + // TODO(andreas): Allow configuring the memory pool. + arrow::MemoryPool* pool = arrow::default_memory_pool(); + auto datatype = arrow_datatype(); + + ARROW_ASSIGN_OR_RAISE(auto builder, arrow::MakeBuilder(datatype, pool)) + if (instances && num_instances > 0) { + RR_RETURN_NOT_OK(Loggable::fill_arrow_array_builder( + static_cast(builder.get()), + instances, + num_instances + )); + } + std::shared_ptr array; + ARROW_RETURN_NOT_OK(builder->Finish(&array)); + return array; + } + rerun::Error Loggable::fill_arrow_array_builder( arrow::BooleanBuilder* builder, const blueprint::components::AutoLayout* elements, size_t num_elements @@ -37,24 +57,4 @@ namespace rerun { return Error::ok(); } - - Result> Loggable::to_arrow( - const blueprint::components::AutoLayout* instances, size_t num_instances - ) { - // TODO(andreas): Allow configuring the memory pool. - arrow::MemoryPool* pool = arrow::default_memory_pool(); - auto datatype = arrow_datatype(); - - ARROW_ASSIGN_OR_RAISE(auto builder, arrow::MakeBuilder(datatype, pool)) - if (instances && num_instances > 0) { - RR_RETURN_NOT_OK(Loggable::fill_arrow_array_builder( - static_cast(builder.get()), - instances, - num_instances - )); - } - std::shared_ptr array; - ARROW_RETURN_NOT_OK(builder->Finish(&array)); - return array; - } } // namespace rerun diff --git a/rerun_cpp/src/rerun/blueprint/components/auto_layout.hpp b/rerun_cpp/src/rerun/blueprint/components/auto_layout.hpp index de68d0c26711..5d9536882109 100644 --- a/rerun_cpp/src/rerun/blueprint/components/auto_layout.hpp +++ b/rerun_cpp/src/rerun/blueprint/components/auto_layout.hpp @@ -45,15 +45,15 @@ namespace rerun { /// Returns the arrow data type this type corresponds to. static const std::shared_ptr& arrow_datatype(); + /// Serializes an array of `rerun::blueprint:: components::AutoLayout` into an arrow array. + static Result> to_arrow( + const blueprint::components::AutoLayout* instances, size_t num_instances + ); + /// Fills an arrow array builder with an array of this type. static rerun::Error fill_arrow_array_builder( arrow::BooleanBuilder* builder, const blueprint::components::AutoLayout* elements, size_t num_elements ); - - /// Serializes an array of `rerun::blueprint:: components::AutoLayout` into an arrow array. - static Result> to_arrow( - const blueprint::components::AutoLayout* instances, size_t num_instances - ); }; } // namespace rerun diff --git a/rerun_cpp/src/rerun/blueprint/components/auto_space_views.cpp b/rerun_cpp/src/rerun/blueprint/components/auto_space_views.cpp index 2acadde9fc13..4c5dee19ad18 100644 --- a/rerun_cpp/src/rerun/blueprint/components/auto_space_views.cpp +++ b/rerun_cpp/src/rerun/blueprint/components/auto_space_views.cpp @@ -15,6 +15,28 @@ namespace rerun { return datatype; } + Result> Loggable::to_arrow( + const blueprint::components::AutoSpaceViews* instances, size_t num_instances + ) { + // TODO(andreas): Allow configuring the memory pool. + arrow::MemoryPool* pool = arrow::default_memory_pool(); + auto datatype = arrow_datatype(); + + ARROW_ASSIGN_OR_RAISE(auto builder, arrow::MakeBuilder(datatype, pool)) + if (instances && num_instances > 0) { + RR_RETURN_NOT_OK( + Loggable::fill_arrow_array_builder( + static_cast(builder.get()), + instances, + num_instances + ) + ); + } + std::shared_ptr array; + ARROW_RETURN_NOT_OK(builder->Finish(&array)); + return array; + } + rerun::Error Loggable::fill_arrow_array_builder( arrow::BooleanBuilder* builder, const blueprint::components::AutoSpaceViews* elements, size_t num_elements @@ -37,26 +59,4 @@ namespace rerun { return Error::ok(); } - - Result> Loggable::to_arrow( - const blueprint::components::AutoSpaceViews* instances, size_t num_instances - ) { - // TODO(andreas): Allow configuring the memory pool. - arrow::MemoryPool* pool = arrow::default_memory_pool(); - auto datatype = arrow_datatype(); - - ARROW_ASSIGN_OR_RAISE(auto builder, arrow::MakeBuilder(datatype, pool)) - if (instances && num_instances > 0) { - RR_RETURN_NOT_OK( - Loggable::fill_arrow_array_builder( - static_cast(builder.get()), - instances, - num_instances - ) - ); - } - std::shared_ptr array; - ARROW_RETURN_NOT_OK(builder->Finish(&array)); - return array; - } } // namespace rerun diff --git a/rerun_cpp/src/rerun/blueprint/components/auto_space_views.hpp b/rerun_cpp/src/rerun/blueprint/components/auto_space_views.hpp index 3ea401ebb02c..c4e520a722f9 100644 --- a/rerun_cpp/src/rerun/blueprint/components/auto_space_views.hpp +++ b/rerun_cpp/src/rerun/blueprint/components/auto_space_views.hpp @@ -45,15 +45,15 @@ namespace rerun { /// Returns the arrow data type this type corresponds to. static const std::shared_ptr& arrow_datatype(); + /// Serializes an array of `rerun::blueprint:: components::AutoSpaceViews` into an arrow array. + static Result> to_arrow( + const blueprint::components::AutoSpaceViews* instances, size_t num_instances + ); + /// Fills an arrow array builder with an array of this type. static rerun::Error fill_arrow_array_builder( arrow::BooleanBuilder* builder, const blueprint::components::AutoSpaceViews* elements, size_t num_elements ); - - /// Serializes an array of `rerun::blueprint:: components::AutoSpaceViews` into an arrow array. - static Result> to_arrow( - const blueprint::components::AutoSpaceViews* instances, size_t num_instances - ); }; } // namespace rerun diff --git a/rerun_cpp/src/rerun/blueprint/components/background3d_kind.cpp b/rerun_cpp/src/rerun/blueprint/components/background3d_kind.cpp index 7a99c3460f99..7d6c7e969104 100644 --- a/rerun_cpp/src/rerun/blueprint/components/background3d_kind.cpp +++ b/rerun_cpp/src/rerun/blueprint/components/background3d_kind.cpp @@ -18,29 +18,6 @@ namespace rerun { return datatype; } - rerun::Error Loggable::fill_arrow_array_builder( - arrow::SparseUnionBuilder* builder, const blueprint::components::Background3DKind* elements, - size_t num_elements - ) { - if (builder == nullptr) { - return rerun::Error(ErrorCode::UnexpectedNullArgument, "Passed array builder is null."); - } - if (elements == nullptr) { - return rerun::Error( - ErrorCode::UnexpectedNullArgument, - "Cannot serialize null pointer to arrow array." - ); - } - - ARROW_RETURN_NOT_OK(builder->Reserve(static_cast(num_elements))); - for (size_t elem_idx = 0; elem_idx < num_elements; elem_idx += 1) { - const auto variant = elements[elem_idx]; - ARROW_RETURN_NOT_OK(builder->Append(static_cast(variant))); - } - - return Error::ok(); - } - Result> Loggable::to_arrow( const blueprint::components::Background3DKind* instances, size_t num_instances @@ -63,4 +40,27 @@ namespace rerun { ARROW_RETURN_NOT_OK(builder->Finish(&array)); return array; } + + rerun::Error Loggable::fill_arrow_array_builder( + arrow::SparseUnionBuilder* builder, const blueprint::components::Background3DKind* elements, + size_t num_elements + ) { + if (builder == nullptr) { + return rerun::Error(ErrorCode::UnexpectedNullArgument, "Passed array builder is null."); + } + if (elements == nullptr) { + return rerun::Error( + ErrorCode::UnexpectedNullArgument, + "Cannot serialize null pointer to arrow array." + ); + } + + ARROW_RETURN_NOT_OK(builder->Reserve(static_cast(num_elements))); + for (size_t elem_idx = 0; elem_idx < num_elements; elem_idx += 1) { + const auto variant = elements[elem_idx]; + ARROW_RETURN_NOT_OK(builder->Append(static_cast(variant))); + } + + return Error::ok(); + } } // namespace rerun diff --git a/rerun_cpp/src/rerun/blueprint/components/background3d_kind.hpp b/rerun_cpp/src/rerun/blueprint/components/background3d_kind.hpp index 41c1235f6537..17af1c8a3ea2 100644 --- a/rerun_cpp/src/rerun/blueprint/components/background3d_kind.hpp +++ b/rerun_cpp/src/rerun/blueprint/components/background3d_kind.hpp @@ -41,15 +41,15 @@ namespace rerun { /// Returns the arrow data type this type corresponds to. static const std::shared_ptr& arrow_datatype(); + /// Serializes an array of `rerun::blueprint:: components::Background3DKind` into an arrow array. + static Result> to_arrow( + const blueprint::components::Background3DKind* instances, size_t num_instances + ); + /// Fills an arrow array builder with an array of this type. static rerun::Error fill_arrow_array_builder( arrow::SparseUnionBuilder* builder, const blueprint::components::Background3DKind* elements, size_t num_elements ); - - /// Serializes an array of `rerun::blueprint:: components::Background3DKind` into an arrow array. - static Result> to_arrow( - const blueprint::components::Background3DKind* instances, size_t num_instances - ); }; } // namespace rerun diff --git a/rerun_cpp/src/rerun/blueprint/components/column_share.cpp b/rerun_cpp/src/rerun/blueprint/components/column_share.cpp index 3cb9767d36b0..65287e8e8115 100644 --- a/rerun_cpp/src/rerun/blueprint/components/column_share.cpp +++ b/rerun_cpp/src/rerun/blueprint/components/column_share.cpp @@ -15,6 +15,26 @@ namespace rerun { return datatype; } + Result> Loggable::to_arrow( + const blueprint::components::ColumnShare* instances, size_t num_instances + ) { + // TODO(andreas): Allow configuring the memory pool. + arrow::MemoryPool* pool = arrow::default_memory_pool(); + auto datatype = arrow_datatype(); + + ARROW_ASSIGN_OR_RAISE(auto builder, arrow::MakeBuilder(datatype, pool)) + if (instances && num_instances > 0) { + RR_RETURN_NOT_OK(Loggable::fill_arrow_array_builder( + static_cast(builder.get()), + instances, + num_instances + )); + } + std::shared_ptr array; + ARROW_RETURN_NOT_OK(builder->Finish(&array)); + return array; + } + rerun::Error Loggable::fill_arrow_array_builder( arrow::FloatBuilder* builder, const blueprint::components::ColumnShare* elements, size_t num_elements @@ -36,24 +56,4 @@ namespace rerun { return Error::ok(); } - - Result> Loggable::to_arrow( - const blueprint::components::ColumnShare* instances, size_t num_instances - ) { - // TODO(andreas): Allow configuring the memory pool. - arrow::MemoryPool* pool = arrow::default_memory_pool(); - auto datatype = arrow_datatype(); - - ARROW_ASSIGN_OR_RAISE(auto builder, arrow::MakeBuilder(datatype, pool)) - if (instances && num_instances > 0) { - RR_RETURN_NOT_OK(Loggable::fill_arrow_array_builder( - static_cast(builder.get()), - instances, - num_instances - )); - } - std::shared_ptr array; - ARROW_RETURN_NOT_OK(builder->Finish(&array)); - return array; - } } // namespace rerun diff --git a/rerun_cpp/src/rerun/blueprint/components/column_share.hpp b/rerun_cpp/src/rerun/blueprint/components/column_share.hpp index e49e3bfaa020..a3fdf109717e 100644 --- a/rerun_cpp/src/rerun/blueprint/components/column_share.hpp +++ b/rerun_cpp/src/rerun/blueprint/components/column_share.hpp @@ -49,15 +49,15 @@ namespace rerun { /// Returns the arrow data type this type corresponds to. static const std::shared_ptr& arrow_datatype(); + /// Serializes an array of `rerun::blueprint:: components::ColumnShare` into an arrow array. + static Result> to_arrow( + const blueprint::components::ColumnShare* instances, size_t num_instances + ); + /// Fills an arrow array builder with an array of this type. static rerun::Error fill_arrow_array_builder( arrow::FloatBuilder* builder, const blueprint::components::ColumnShare* elements, size_t num_elements ); - - /// Serializes an array of `rerun::blueprint:: components::ColumnShare` into an arrow array. - static Result> to_arrow( - const blueprint::components::ColumnShare* instances, size_t num_instances - ); }; } // namespace rerun diff --git a/rerun_cpp/src/rerun/blueprint/components/container_kind.cpp b/rerun_cpp/src/rerun/blueprint/components/container_kind.cpp index dec91deb4b2e..ef9d182851fa 100644 --- a/rerun_cpp/src/rerun/blueprint/components/container_kind.cpp +++ b/rerun_cpp/src/rerun/blueprint/components/container_kind.cpp @@ -19,6 +19,28 @@ namespace rerun { return datatype; } + Result> Loggable::to_arrow( + const blueprint::components::ContainerKind* instances, size_t num_instances + ) { + // TODO(andreas): Allow configuring the memory pool. + arrow::MemoryPool* pool = arrow::default_memory_pool(); + auto datatype = arrow_datatype(); + + ARROW_ASSIGN_OR_RAISE(auto builder, arrow::MakeBuilder(datatype, pool)) + if (instances && num_instances > 0) { + RR_RETURN_NOT_OK( + Loggable::fill_arrow_array_builder( + static_cast(builder.get()), + instances, + num_instances + ) + ); + } + std::shared_ptr array; + ARROW_RETURN_NOT_OK(builder->Finish(&array)); + return array; + } + rerun::Error Loggable::fill_arrow_array_builder( arrow::SparseUnionBuilder* builder, const blueprint::components::ContainerKind* elements, size_t num_elements @@ -41,26 +63,4 @@ namespace rerun { return Error::ok(); } - - Result> Loggable::to_arrow( - const blueprint::components::ContainerKind* instances, size_t num_instances - ) { - // TODO(andreas): Allow configuring the memory pool. - arrow::MemoryPool* pool = arrow::default_memory_pool(); - auto datatype = arrow_datatype(); - - ARROW_ASSIGN_OR_RAISE(auto builder, arrow::MakeBuilder(datatype, pool)) - if (instances && num_instances > 0) { - RR_RETURN_NOT_OK( - Loggable::fill_arrow_array_builder( - static_cast(builder.get()), - instances, - num_instances - ) - ); - } - std::shared_ptr array; - ARROW_RETURN_NOT_OK(builder->Finish(&array)); - return array; - } } // namespace rerun diff --git a/rerun_cpp/src/rerun/blueprint/components/container_kind.hpp b/rerun_cpp/src/rerun/blueprint/components/container_kind.hpp index e8c94d219a3e..467e24b7eb00 100644 --- a/rerun_cpp/src/rerun/blueprint/components/container_kind.hpp +++ b/rerun_cpp/src/rerun/blueprint/components/container_kind.hpp @@ -40,15 +40,15 @@ namespace rerun { /// Returns the arrow data type this type corresponds to. static const std::shared_ptr& arrow_datatype(); + /// Serializes an array of `rerun::blueprint:: components::ContainerKind` into an arrow array. + static Result> to_arrow( + const blueprint::components::ContainerKind* instances, size_t num_instances + ); + /// Fills an arrow array builder with an array of this type. static rerun::Error fill_arrow_array_builder( arrow::SparseUnionBuilder* builder, const blueprint::components::ContainerKind* elements, size_t num_elements ); - - /// Serializes an array of `rerun::blueprint:: components::ContainerKind` into an arrow array. - static Result> to_arrow( - const blueprint::components::ContainerKind* instances, size_t num_instances - ); }; } // namespace rerun diff --git a/rerun_cpp/src/rerun/blueprint/components/corner2d.cpp b/rerun_cpp/src/rerun/blueprint/components/corner2d.cpp index abc6f3e33d6e..0ae2cc542621 100644 --- a/rerun_cpp/src/rerun/blueprint/components/corner2d.cpp +++ b/rerun_cpp/src/rerun/blueprint/components/corner2d.cpp @@ -19,6 +19,26 @@ namespace rerun { return datatype; } + Result> Loggable::to_arrow( + const blueprint::components::Corner2D* instances, size_t num_instances + ) { + // TODO(andreas): Allow configuring the memory pool. + arrow::MemoryPool* pool = arrow::default_memory_pool(); + auto datatype = arrow_datatype(); + + ARROW_ASSIGN_OR_RAISE(auto builder, arrow::MakeBuilder(datatype, pool)) + if (instances && num_instances > 0) { + RR_RETURN_NOT_OK(Loggable::fill_arrow_array_builder( + static_cast(builder.get()), + instances, + num_instances + )); + } + std::shared_ptr array; + ARROW_RETURN_NOT_OK(builder->Finish(&array)); + return array; + } + rerun::Error Loggable::fill_arrow_array_builder( arrow::SparseUnionBuilder* builder, const blueprint::components::Corner2D* elements, size_t num_elements @@ -41,24 +61,4 @@ namespace rerun { return Error::ok(); } - - Result> Loggable::to_arrow( - const blueprint::components::Corner2D* instances, size_t num_instances - ) { - // TODO(andreas): Allow configuring the memory pool. - arrow::MemoryPool* pool = arrow::default_memory_pool(); - auto datatype = arrow_datatype(); - - ARROW_ASSIGN_OR_RAISE(auto builder, arrow::MakeBuilder(datatype, pool)) - if (instances && num_instances > 0) { - RR_RETURN_NOT_OK(Loggable::fill_arrow_array_builder( - static_cast(builder.get()), - instances, - num_instances - )); - } - std::shared_ptr array; - ARROW_RETURN_NOT_OK(builder->Finish(&array)); - return array; - } } // namespace rerun diff --git a/rerun_cpp/src/rerun/blueprint/components/corner2d.hpp b/rerun_cpp/src/rerun/blueprint/components/corner2d.hpp index dc5ad66be1ed..2f7559b458f4 100644 --- a/rerun_cpp/src/rerun/blueprint/components/corner2d.hpp +++ b/rerun_cpp/src/rerun/blueprint/components/corner2d.hpp @@ -40,15 +40,15 @@ namespace rerun { /// Returns the arrow data type this type corresponds to. static const std::shared_ptr& arrow_datatype(); + /// Serializes an array of `rerun::blueprint:: components::Corner2D` into an arrow array. + static Result> to_arrow( + const blueprint::components::Corner2D* instances, size_t num_instances + ); + /// Fills an arrow array builder with an array of this type. static rerun::Error fill_arrow_array_builder( arrow::SparseUnionBuilder* builder, const blueprint::components::Corner2D* elements, size_t num_elements ); - - /// Serializes an array of `rerun::blueprint:: components::Corner2D` into an arrow array. - static Result> to_arrow( - const blueprint::components::Corner2D* instances, size_t num_instances - ); }; } // namespace rerun diff --git a/rerun_cpp/src/rerun/blueprint/components/entity_properties_component.cpp b/rerun_cpp/src/rerun/blueprint/components/entity_properties_component.cpp index dd83bf101300..a427b42010cf 100644 --- a/rerun_cpp/src/rerun/blueprint/components/entity_properties_component.cpp +++ b/rerun_cpp/src/rerun/blueprint/components/entity_properties_component.cpp @@ -15,6 +15,28 @@ namespace rerun { return datatype; } + Result> + Loggable::to_arrow( + const blueprint::components::EntityPropertiesComponent* instances, size_t num_instances + ) { + // TODO(andreas): Allow configuring the memory pool. + arrow::MemoryPool* pool = arrow::default_memory_pool(); + auto datatype = arrow_datatype(); + + ARROW_ASSIGN_OR_RAISE(auto builder, arrow::MakeBuilder(datatype, pool)) + if (instances && num_instances > 0) { + RR_RETURN_NOT_OK(Loggable:: + fill_arrow_array_builder( + static_cast(builder.get()), + instances, + num_instances + )); + } + std::shared_ptr array; + ARROW_RETURN_NOT_OK(builder->Finish(&array)); + return array; + } + rerun::Error Loggable::fill_arrow_array_builder( arrow::ListBuilder* builder, @@ -46,26 +68,4 @@ namespace rerun { return Error::ok(); } - - Result> - Loggable::to_arrow( - const blueprint::components::EntityPropertiesComponent* instances, size_t num_instances - ) { - // TODO(andreas): Allow configuring the memory pool. - arrow::MemoryPool* pool = arrow::default_memory_pool(); - auto datatype = arrow_datatype(); - - ARROW_ASSIGN_OR_RAISE(auto builder, arrow::MakeBuilder(datatype, pool)) - if (instances && num_instances > 0) { - RR_RETURN_NOT_OK(Loggable:: - fill_arrow_array_builder( - static_cast(builder.get()), - instances, - num_instances - )); - } - std::shared_ptr array; - ARROW_RETURN_NOT_OK(builder->Finish(&array)); - return array; - } } // namespace rerun diff --git a/rerun_cpp/src/rerun/blueprint/components/entity_properties_component.hpp b/rerun_cpp/src/rerun/blueprint/components/entity_properties_component.hpp index 66c58b6dbdb8..bf2af30ef06f 100644 --- a/rerun_cpp/src/rerun/blueprint/components/entity_properties_component.hpp +++ b/rerun_cpp/src/rerun/blueprint/components/entity_properties_component.hpp @@ -47,15 +47,15 @@ namespace rerun { /// Returns the arrow data type this type corresponds to. static const std::shared_ptr& arrow_datatype(); + /// Serializes an array of `rerun::blueprint:: components::EntityPropertiesComponent` into an arrow array. + static Result> to_arrow( + const blueprint::components::EntityPropertiesComponent* instances, size_t num_instances + ); + /// Fills an arrow array builder with an array of this type. static rerun::Error fill_arrow_array_builder( arrow::ListBuilder* builder, const blueprint::components::EntityPropertiesComponent* elements, size_t num_elements ); - - /// Serializes an array of `rerun::blueprint:: components::EntityPropertiesComponent` into an arrow array. - static Result> to_arrow( - const blueprint::components::EntityPropertiesComponent* instances, size_t num_instances - ); }; } // namespace rerun diff --git a/rerun_cpp/src/rerun/blueprint/components/grid_columns.cpp b/rerun_cpp/src/rerun/blueprint/components/grid_columns.cpp index b3f8a8c07a72..0162fc86dbb4 100644 --- a/rerun_cpp/src/rerun/blueprint/components/grid_columns.cpp +++ b/rerun_cpp/src/rerun/blueprint/components/grid_columns.cpp @@ -15,6 +15,26 @@ namespace rerun { return datatype; } + Result> Loggable::to_arrow( + const blueprint::components::GridColumns* instances, size_t num_instances + ) { + // TODO(andreas): Allow configuring the memory pool. + arrow::MemoryPool* pool = arrow::default_memory_pool(); + auto datatype = arrow_datatype(); + + ARROW_ASSIGN_OR_RAISE(auto builder, arrow::MakeBuilder(datatype, pool)) + if (instances && num_instances > 0) { + RR_RETURN_NOT_OK(Loggable::fill_arrow_array_builder( + static_cast(builder.get()), + instances, + num_instances + )); + } + std::shared_ptr array; + ARROW_RETURN_NOT_OK(builder->Finish(&array)); + return array; + } + rerun::Error Loggable::fill_arrow_array_builder( arrow::UInt32Builder* builder, const blueprint::components::GridColumns* elements, size_t num_elements @@ -36,24 +56,4 @@ namespace rerun { return Error::ok(); } - - Result> Loggable::to_arrow( - const blueprint::components::GridColumns* instances, size_t num_instances - ) { - // TODO(andreas): Allow configuring the memory pool. - arrow::MemoryPool* pool = arrow::default_memory_pool(); - auto datatype = arrow_datatype(); - - ARROW_ASSIGN_OR_RAISE(auto builder, arrow::MakeBuilder(datatype, pool)) - if (instances && num_instances > 0) { - RR_RETURN_NOT_OK(Loggable::fill_arrow_array_builder( - static_cast(builder.get()), - instances, - num_instances - )); - } - std::shared_ptr array; - ARROW_RETURN_NOT_OK(builder->Finish(&array)); - return array; - } } // namespace rerun diff --git a/rerun_cpp/src/rerun/blueprint/components/grid_columns.hpp b/rerun_cpp/src/rerun/blueprint/components/grid_columns.hpp index 6ec32f4508c3..ac0e56eb5d71 100644 --- a/rerun_cpp/src/rerun/blueprint/components/grid_columns.hpp +++ b/rerun_cpp/src/rerun/blueprint/components/grid_columns.hpp @@ -49,15 +49,15 @@ namespace rerun { /// Returns the arrow data type this type corresponds to. static const std::shared_ptr& arrow_datatype(); + /// Serializes an array of `rerun::blueprint:: components::GridColumns` into an arrow array. + static Result> to_arrow( + const blueprint::components::GridColumns* instances, size_t num_instances + ); + /// Fills an arrow array builder with an array of this type. static rerun::Error fill_arrow_array_builder( arrow::UInt32Builder* builder, const blueprint::components::GridColumns* elements, size_t num_elements ); - - /// Serializes an array of `rerun::blueprint:: components::GridColumns` into an arrow array. - static Result> to_arrow( - const blueprint::components::GridColumns* instances, size_t num_instances - ); }; } // namespace rerun diff --git a/rerun_cpp/src/rerun/blueprint/components/included_content.cpp b/rerun_cpp/src/rerun/blueprint/components/included_content.cpp deleted file mode 100644 index 6dde7e9a1399..000000000000 --- a/rerun_cpp/src/rerun/blueprint/components/included_content.cpp +++ /dev/null @@ -1,58 +0,0 @@ -// DO NOT EDIT! This file was auto-generated by crates/re_types_builder/src/codegen/cpp/mod.rs -// Based on "crates/re_types/definitions/rerun/blueprint/components/included_content.fbs". - -#include "included_content.hpp" - -#include "../../datatypes/entity_path.hpp" - -#include -#include - -namespace rerun::blueprint::components {} - -namespace rerun { - const std::shared_ptr& - Loggable::arrow_datatype() { - static const auto datatype = Loggable::arrow_datatype(); - return datatype; - } - - rerun::Error Loggable::fill_arrow_array_builder( - arrow::StringBuilder* builder, const blueprint::components::IncludedContent* elements, - size_t num_elements - ) { - static_assert( - sizeof(rerun::datatypes::EntityPath) == sizeof(blueprint::components::IncludedContent) - ); - RR_RETURN_NOT_OK(Loggable::fill_arrow_array_builder( - builder, - reinterpret_cast(elements), - num_elements - )); - - return Error::ok(); - } - - Result> - Loggable::to_arrow( - const blueprint::components::IncludedContent* instances, size_t num_instances - ) { - // TODO(andreas): Allow configuring the memory pool. - arrow::MemoryPool* pool = arrow::default_memory_pool(); - auto datatype = arrow_datatype(); - - ARROW_ASSIGN_OR_RAISE(auto builder, arrow::MakeBuilder(datatype, pool)) - if (instances && num_instances > 0) { - RR_RETURN_NOT_OK( - Loggable::fill_arrow_array_builder( - static_cast(builder.get()), - instances, - num_instances - ) - ); - } - std::shared_ptr array; - ARROW_RETURN_NOT_OK(builder->Finish(&array)); - return array; - } -} // namespace rerun diff --git a/rerun_cpp/src/rerun/blueprint/components/included_content.hpp b/rerun_cpp/src/rerun/blueprint/components/included_content.hpp index aaf1e2e7b5eb..20c143348e04 100644 --- a/rerun_cpp/src/rerun/blueprint/components/included_content.hpp +++ b/rerun_cpp/src/rerun/blueprint/components/included_content.hpp @@ -11,12 +11,6 @@ #include #include -namespace arrow { - class Array; - class DataType; - class StringBuilder; -} // namespace arrow - namespace rerun::blueprint::components { /// **Component**: All the contents in the container. struct IncludedContent { @@ -51,8 +45,9 @@ namespace rerun::blueprint::components { } // namespace rerun::blueprint::components namespace rerun { - template - struct Loggable; + static_assert( + sizeof(rerun::datatypes::EntityPath) == sizeof(blueprint::components::IncludedContent) + ); /// \private template <> @@ -60,17 +55,18 @@ namespace rerun { static constexpr const char Name[] = "rerun.blueprint.components.IncludedContent"; /// Returns the arrow data type this type corresponds to. - static const std::shared_ptr& arrow_datatype(); - - /// Fills an arrow array builder with an array of this type. - static rerun::Error fill_arrow_array_builder( - arrow::StringBuilder* builder, const blueprint::components::IncludedContent* elements, - size_t num_elements - ); + static const std::shared_ptr& arrow_datatype() { + return Loggable::arrow_datatype(); + } /// Serializes an array of `rerun::blueprint:: components::IncludedContent` into an arrow array. static Result> to_arrow( const blueprint::components::IncludedContent* instances, size_t num_instances - ); + ) { + return Loggable::to_arrow( + &instances->contents, + num_instances + ); + } }; } // namespace rerun diff --git a/rerun_cpp/src/rerun/blueprint/components/included_space_view.cpp b/rerun_cpp/src/rerun/blueprint/components/included_space_view.cpp deleted file mode 100644 index 5b36afd60486..000000000000 --- a/rerun_cpp/src/rerun/blueprint/components/included_space_view.cpp +++ /dev/null @@ -1,58 +0,0 @@ -// DO NOT EDIT! This file was auto-generated by crates/re_types_builder/src/codegen/cpp/mod.rs -// Based on "crates/re_types/definitions/rerun/blueprint/components/included_space_view.fbs". - -#include "included_space_view.hpp" - -#include "../../datatypes/uuid.hpp" - -#include -#include - -namespace rerun::blueprint::components {} - -namespace rerun { - const std::shared_ptr& - Loggable::arrow_datatype() { - static const auto datatype = Loggable::arrow_datatype(); - return datatype; - } - - rerun::Error Loggable::fill_arrow_array_builder( - arrow::FixedSizeListBuilder* builder, - const blueprint::components::IncludedSpaceView* elements, size_t num_elements - ) { - static_assert( - sizeof(rerun::datatypes::Uuid) == sizeof(blueprint::components::IncludedSpaceView) - ); - RR_RETURN_NOT_OK(Loggable::fill_arrow_array_builder( - builder, - reinterpret_cast(elements), - num_elements - )); - - return Error::ok(); - } - - Result> - Loggable::to_arrow( - const blueprint::components::IncludedSpaceView* instances, size_t num_instances - ) { - // TODO(andreas): Allow configuring the memory pool. - arrow::MemoryPool* pool = arrow::default_memory_pool(); - auto datatype = arrow_datatype(); - - ARROW_ASSIGN_OR_RAISE(auto builder, arrow::MakeBuilder(datatype, pool)) - if (instances && num_instances > 0) { - RR_RETURN_NOT_OK( - Loggable::fill_arrow_array_builder( - static_cast(builder.get()), - instances, - num_instances - ) - ); - } - std::shared_ptr array; - ARROW_RETURN_NOT_OK(builder->Finish(&array)); - return array; - } -} // namespace rerun diff --git a/rerun_cpp/src/rerun/blueprint/components/included_space_view.hpp b/rerun_cpp/src/rerun/blueprint/components/included_space_view.hpp index 401f17fe69a0..b55cd76bc089 100644 --- a/rerun_cpp/src/rerun/blueprint/components/included_space_view.hpp +++ b/rerun_cpp/src/rerun/blueprint/components/included_space_view.hpp @@ -10,12 +10,6 @@ #include #include -namespace arrow { - class Array; - class DataType; - class FixedSizeListBuilder; -} // namespace arrow - namespace rerun::blueprint::components { /// **Component**: The id of a `SpaceView`. /// @@ -48,8 +42,9 @@ namespace rerun::blueprint::components { } // namespace rerun::blueprint::components namespace rerun { - template - struct Loggable; + static_assert( + sizeof(rerun::datatypes::Uuid) == sizeof(blueprint::components::IncludedSpaceView) + ); /// \private template <> @@ -57,17 +52,18 @@ namespace rerun { static constexpr const char Name[] = "rerun.blueprint.components.IncludedSpaceView"; /// Returns the arrow data type this type corresponds to. - static const std::shared_ptr& arrow_datatype(); - - /// Fills an arrow array builder with an array of this type. - static rerun::Error fill_arrow_array_builder( - arrow::FixedSizeListBuilder* builder, - const blueprint::components::IncludedSpaceView* elements, size_t num_elements - ); + static const std::shared_ptr& arrow_datatype() { + return Loggable::arrow_datatype(); + } /// Serializes an array of `rerun::blueprint:: components::IncludedSpaceView` into an arrow array. static Result> to_arrow( const blueprint::components::IncludedSpaceView* instances, size_t num_instances - ); + ) { + return Loggable::to_arrow( + &instances->space_view_id, + num_instances + ); + } }; } // namespace rerun diff --git a/rerun_cpp/src/rerun/blueprint/components/lock_range_during_zoom.cpp b/rerun_cpp/src/rerun/blueprint/components/lock_range_during_zoom.cpp index 83d7029f2a11..f44feac14b8e 100644 --- a/rerun_cpp/src/rerun/blueprint/components/lock_range_during_zoom.cpp +++ b/rerun_cpp/src/rerun/blueprint/components/lock_range_during_zoom.cpp @@ -15,29 +15,6 @@ namespace rerun { return datatype; } - rerun::Error Loggable::fill_arrow_array_builder( - arrow::BooleanBuilder* builder, const blueprint::components::LockRangeDuringZoom* elements, - size_t num_elements - ) { - if (builder == nullptr) { - return rerun::Error(ErrorCode::UnexpectedNullArgument, "Passed array builder is null."); - } - if (elements == nullptr) { - return rerun::Error( - ErrorCode::UnexpectedNullArgument, - "Cannot serialize null pointer to arrow array." - ); - } - - static_assert(sizeof(*elements) == sizeof(elements->lock_range)); - ARROW_RETURN_NOT_OK(builder->AppendValues( - reinterpret_cast(&elements->lock_range), - static_cast(num_elements) - )); - - return Error::ok(); - } - Result> Loggable::to_arrow( const blueprint::components::LockRangeDuringZoom* instances, size_t num_instances @@ -60,4 +37,27 @@ namespace rerun { ARROW_RETURN_NOT_OK(builder->Finish(&array)); return array; } + + rerun::Error Loggable::fill_arrow_array_builder( + arrow::BooleanBuilder* builder, const blueprint::components::LockRangeDuringZoom* elements, + size_t num_elements + ) { + if (builder == nullptr) { + return rerun::Error(ErrorCode::UnexpectedNullArgument, "Passed array builder is null."); + } + if (elements == nullptr) { + return rerun::Error( + ErrorCode::UnexpectedNullArgument, + "Cannot serialize null pointer to arrow array." + ); + } + + static_assert(sizeof(*elements) == sizeof(elements->lock_range)); + ARROW_RETURN_NOT_OK(builder->AppendValues( + reinterpret_cast(&elements->lock_range), + static_cast(num_elements) + )); + + return Error::ok(); + } } // namespace rerun diff --git a/rerun_cpp/src/rerun/blueprint/components/lock_range_during_zoom.hpp b/rerun_cpp/src/rerun/blueprint/components/lock_range_during_zoom.hpp index 42b598553f23..820ea6487f27 100644 --- a/rerun_cpp/src/rerun/blueprint/components/lock_range_during_zoom.hpp +++ b/rerun_cpp/src/rerun/blueprint/components/lock_range_during_zoom.hpp @@ -45,15 +45,15 @@ namespace rerun { /// Returns the arrow data type this type corresponds to. static const std::shared_ptr& arrow_datatype(); + /// Serializes an array of `rerun::blueprint:: components::LockRangeDuringZoom` into an arrow array. + static Result> to_arrow( + const blueprint::components::LockRangeDuringZoom* instances, size_t num_instances + ); + /// Fills an arrow array builder with an array of this type. static rerun::Error fill_arrow_array_builder( arrow::BooleanBuilder* builder, const blueprint::components::LockRangeDuringZoom* elements, size_t num_elements ); - - /// Serializes an array of `rerun::blueprint:: components::LockRangeDuringZoom` into an arrow array. - static Result> to_arrow( - const blueprint::components::LockRangeDuringZoom* instances, size_t num_instances - ); }; } // namespace rerun diff --git a/rerun_cpp/src/rerun/blueprint/components/panel_expanded.cpp b/rerun_cpp/src/rerun/blueprint/components/panel_expanded.cpp deleted file mode 100644 index de51eb1f8191..000000000000 --- a/rerun_cpp/src/rerun/blueprint/components/panel_expanded.cpp +++ /dev/null @@ -1,57 +0,0 @@ -// DO NOT EDIT! This file was auto-generated by crates/re_types_builder/src/codegen/cpp/mod.rs -// Based on "crates/re_types/definitions/rerun/blueprint/components/panel_expanded.fbs". - -#include "panel_expanded.hpp" - -#include "../../datatypes/bool.hpp" - -#include -#include - -namespace rerun::blueprint::components {} - -namespace rerun { - const std::shared_ptr& - Loggable::arrow_datatype() { - static const auto datatype = Loggable::arrow_datatype(); - return datatype; - } - - rerun::Error Loggable::fill_arrow_array_builder( - arrow::BooleanBuilder* builder, const blueprint::components::PanelExpanded* elements, - size_t num_elements - ) { - static_assert( - sizeof(rerun::datatypes::Bool) == sizeof(blueprint::components::PanelExpanded) - ); - RR_RETURN_NOT_OK(Loggable::fill_arrow_array_builder( - builder, - reinterpret_cast(elements), - num_elements - )); - - return Error::ok(); - } - - Result> Loggable::to_arrow( - const blueprint::components::PanelExpanded* instances, size_t num_instances - ) { - // TODO(andreas): Allow configuring the memory pool. - arrow::MemoryPool* pool = arrow::default_memory_pool(); - auto datatype = arrow_datatype(); - - ARROW_ASSIGN_OR_RAISE(auto builder, arrow::MakeBuilder(datatype, pool)) - if (instances && num_instances > 0) { - RR_RETURN_NOT_OK( - Loggable::fill_arrow_array_builder( - static_cast(builder.get()), - instances, - num_instances - ) - ); - } - std::shared_ptr array; - ARROW_RETURN_NOT_OK(builder->Finish(&array)); - return array; - } -} // namespace rerun diff --git a/rerun_cpp/src/rerun/blueprint/components/panel_expanded.hpp b/rerun_cpp/src/rerun/blueprint/components/panel_expanded.hpp index aa5f694cdd1d..f3c9b4387f3f 100644 --- a/rerun_cpp/src/rerun/blueprint/components/panel_expanded.hpp +++ b/rerun_cpp/src/rerun/blueprint/components/panel_expanded.hpp @@ -9,12 +9,6 @@ #include #include -namespace arrow { - class Array; - class BooleanBuilder; - class DataType; -} // namespace arrow - namespace rerun::blueprint::components { /// **Component**: Whether an application panel is expanded or not. struct PanelExpanded { @@ -45,8 +39,7 @@ namespace rerun::blueprint::components { } // namespace rerun::blueprint::components namespace rerun { - template - struct Loggable; + static_assert(sizeof(rerun::datatypes::Bool) == sizeof(blueprint::components::PanelExpanded)); /// \private template <> @@ -54,17 +47,15 @@ namespace rerun { static constexpr const char Name[] = "rerun.blueprint.components.PanelExpanded"; /// Returns the arrow data type this type corresponds to. - static const std::shared_ptr& arrow_datatype(); - - /// Fills an arrow array builder with an array of this type. - static rerun::Error fill_arrow_array_builder( - arrow::BooleanBuilder* builder, const blueprint::components::PanelExpanded* elements, - size_t num_elements - ); + static const std::shared_ptr& arrow_datatype() { + return Loggable::arrow_datatype(); + } /// Serializes an array of `rerun::blueprint:: components::PanelExpanded` into an arrow array. static Result> to_arrow( const blueprint::components::PanelExpanded* instances, size_t num_instances - ); + ) { + return Loggable::to_arrow(&instances->expanded, num_instances); + } }; } // namespace rerun diff --git a/rerun_cpp/src/rerun/blueprint/components/query_expression.cpp b/rerun_cpp/src/rerun/blueprint/components/query_expression.cpp deleted file mode 100644 index 34ef4f9c584d..000000000000 --- a/rerun_cpp/src/rerun/blueprint/components/query_expression.cpp +++ /dev/null @@ -1,58 +0,0 @@ -// DO NOT EDIT! This file was auto-generated by crates/re_types_builder/src/codegen/cpp/mod.rs -// Based on "crates/re_types/definitions/rerun/blueprint/components/query_expression.fbs". - -#include "query_expression.hpp" - -#include "../../datatypes/utf8.hpp" - -#include -#include - -namespace rerun::blueprint::components {} - -namespace rerun { - const std::shared_ptr& - Loggable::arrow_datatype() { - static const auto datatype = Loggable::arrow_datatype(); - return datatype; - } - - rerun::Error Loggable::fill_arrow_array_builder( - arrow::StringBuilder* builder, const blueprint::components::QueryExpression* elements, - size_t num_elements - ) { - static_assert( - sizeof(rerun::datatypes::Utf8) == sizeof(blueprint::components::QueryExpression) - ); - RR_RETURN_NOT_OK(Loggable::fill_arrow_array_builder( - builder, - reinterpret_cast(elements), - num_elements - )); - - return Error::ok(); - } - - Result> - Loggable::to_arrow( - const blueprint::components::QueryExpression* instances, size_t num_instances - ) { - // TODO(andreas): Allow configuring the memory pool. - arrow::MemoryPool* pool = arrow::default_memory_pool(); - auto datatype = arrow_datatype(); - - ARROW_ASSIGN_OR_RAISE(auto builder, arrow::MakeBuilder(datatype, pool)) - if (instances && num_instances > 0) { - RR_RETURN_NOT_OK( - Loggable::fill_arrow_array_builder( - static_cast(builder.get()), - instances, - num_instances - ) - ); - } - std::shared_ptr array; - ARROW_RETURN_NOT_OK(builder->Finish(&array)); - return array; - } -} // namespace rerun diff --git a/rerun_cpp/src/rerun/blueprint/components/query_expression.hpp b/rerun_cpp/src/rerun/blueprint/components/query_expression.hpp index 2ed83df16a81..5d9042ab6dcd 100644 --- a/rerun_cpp/src/rerun/blueprint/components/query_expression.hpp +++ b/rerun_cpp/src/rerun/blueprint/components/query_expression.hpp @@ -11,12 +11,6 @@ #include #include -namespace arrow { - class Array; - class DataType; - class StringBuilder; -} // namespace arrow - namespace rerun::blueprint::components { /// **Component**: An individual `QueryExpression` used to filter a set of `EntityPath`s. /// @@ -58,8 +52,7 @@ namespace rerun::blueprint::components { } // namespace rerun::blueprint::components namespace rerun { - template - struct Loggable; + static_assert(sizeof(rerun::datatypes::Utf8) == sizeof(blueprint::components::QueryExpression)); /// \private template <> @@ -67,17 +60,15 @@ namespace rerun { static constexpr const char Name[] = "rerun.blueprint.components.QueryExpression"; /// Returns the arrow data type this type corresponds to. - static const std::shared_ptr& arrow_datatype(); - - /// Fills an arrow array builder with an array of this type. - static rerun::Error fill_arrow_array_builder( - arrow::StringBuilder* builder, const blueprint::components::QueryExpression* elements, - size_t num_elements - ); + static const std::shared_ptr& arrow_datatype() { + return Loggable::arrow_datatype(); + } /// Serializes an array of `rerun::blueprint:: components::QueryExpression` into an arrow array. static Result> to_arrow( const blueprint::components::QueryExpression* instances, size_t num_instances - ); + ) { + return Loggable::to_arrow(&instances->filter, num_instances); + } }; } // namespace rerun diff --git a/rerun_cpp/src/rerun/blueprint/components/root_container.cpp b/rerun_cpp/src/rerun/blueprint/components/root_container.cpp deleted file mode 100644 index b65f5a5a0bbc..000000000000 --- a/rerun_cpp/src/rerun/blueprint/components/root_container.cpp +++ /dev/null @@ -1,57 +0,0 @@ -// DO NOT EDIT! This file was auto-generated by crates/re_types_builder/src/codegen/cpp/mod.rs -// Based on "crates/re_types/definitions/rerun/blueprint/components/root_container.fbs". - -#include "root_container.hpp" - -#include "../../datatypes/uuid.hpp" - -#include -#include - -namespace rerun::blueprint::components {} - -namespace rerun { - const std::shared_ptr& - Loggable::arrow_datatype() { - static const auto datatype = Loggable::arrow_datatype(); - return datatype; - } - - rerun::Error Loggable::fill_arrow_array_builder( - arrow::FixedSizeListBuilder* builder, const blueprint::components::RootContainer* elements, - size_t num_elements - ) { - static_assert( - sizeof(rerun::datatypes::Uuid) == sizeof(blueprint::components::RootContainer) - ); - RR_RETURN_NOT_OK(Loggable::fill_arrow_array_builder( - builder, - reinterpret_cast(elements), - num_elements - )); - - return Error::ok(); - } - - Result> Loggable::to_arrow( - const blueprint::components::RootContainer* instances, size_t num_instances - ) { - // TODO(andreas): Allow configuring the memory pool. - arrow::MemoryPool* pool = arrow::default_memory_pool(); - auto datatype = arrow_datatype(); - - ARROW_ASSIGN_OR_RAISE(auto builder, arrow::MakeBuilder(datatype, pool)) - if (instances && num_instances > 0) { - RR_RETURN_NOT_OK( - Loggable::fill_arrow_array_builder( - static_cast(builder.get()), - instances, - num_instances - ) - ); - } - std::shared_ptr array; - ARROW_RETURN_NOT_OK(builder->Finish(&array)); - return array; - } -} // namespace rerun diff --git a/rerun_cpp/src/rerun/blueprint/components/root_container.hpp b/rerun_cpp/src/rerun/blueprint/components/root_container.hpp index 737f64a5329b..4cd35245c149 100644 --- a/rerun_cpp/src/rerun/blueprint/components/root_container.hpp +++ b/rerun_cpp/src/rerun/blueprint/components/root_container.hpp @@ -10,12 +10,6 @@ #include #include -namespace arrow { - class Array; - class DataType; - class FixedSizeListBuilder; -} // namespace arrow - namespace rerun::blueprint::components { /// **Component**: The container that sits at the root of a viewport. struct RootContainer { @@ -47,8 +41,7 @@ namespace rerun::blueprint::components { } // namespace rerun::blueprint::components namespace rerun { - template - struct Loggable; + static_assert(sizeof(rerun::datatypes::Uuid) == sizeof(blueprint::components::RootContainer)); /// \private template <> @@ -56,17 +49,15 @@ namespace rerun { static constexpr const char Name[] = "rerun.blueprint.components.RootContainer"; /// Returns the arrow data type this type corresponds to. - static const std::shared_ptr& arrow_datatype(); - - /// Fills an arrow array builder with an array of this type. - static rerun::Error fill_arrow_array_builder( - arrow::FixedSizeListBuilder* builder, - const blueprint::components::RootContainer* elements, size_t num_elements - ); + static const std::shared_ptr& arrow_datatype() { + return Loggable::arrow_datatype(); + } /// Serializes an array of `rerun::blueprint:: components::RootContainer` into an arrow array. static Result> to_arrow( const blueprint::components::RootContainer* instances, size_t num_instances - ); + ) { + return Loggable::to_arrow(&instances->id, num_instances); + } }; } // namespace rerun diff --git a/rerun_cpp/src/rerun/blueprint/components/row_share.cpp b/rerun_cpp/src/rerun/blueprint/components/row_share.cpp index ba736265da07..da42c70284f9 100644 --- a/rerun_cpp/src/rerun/blueprint/components/row_share.cpp +++ b/rerun_cpp/src/rerun/blueprint/components/row_share.cpp @@ -15,6 +15,26 @@ namespace rerun { return datatype; } + Result> Loggable::to_arrow( + const blueprint::components::RowShare* instances, size_t num_instances + ) { + // TODO(andreas): Allow configuring the memory pool. + arrow::MemoryPool* pool = arrow::default_memory_pool(); + auto datatype = arrow_datatype(); + + ARROW_ASSIGN_OR_RAISE(auto builder, arrow::MakeBuilder(datatype, pool)) + if (instances && num_instances > 0) { + RR_RETURN_NOT_OK(Loggable::fill_arrow_array_builder( + static_cast(builder.get()), + instances, + num_instances + )); + } + std::shared_ptr array; + ARROW_RETURN_NOT_OK(builder->Finish(&array)); + return array; + } + rerun::Error Loggable::fill_arrow_array_builder( arrow::FloatBuilder* builder, const blueprint::components::RowShare* elements, size_t num_elements @@ -36,24 +56,4 @@ namespace rerun { return Error::ok(); } - - Result> Loggable::to_arrow( - const blueprint::components::RowShare* instances, size_t num_instances - ) { - // TODO(andreas): Allow configuring the memory pool. - arrow::MemoryPool* pool = arrow::default_memory_pool(); - auto datatype = arrow_datatype(); - - ARROW_ASSIGN_OR_RAISE(auto builder, arrow::MakeBuilder(datatype, pool)) - if (instances && num_instances > 0) { - RR_RETURN_NOT_OK(Loggable::fill_arrow_array_builder( - static_cast(builder.get()), - instances, - num_instances - )); - } - std::shared_ptr array; - ARROW_RETURN_NOT_OK(builder->Finish(&array)); - return array; - } } // namespace rerun diff --git a/rerun_cpp/src/rerun/blueprint/components/row_share.hpp b/rerun_cpp/src/rerun/blueprint/components/row_share.hpp index bdc840d932a1..4a9e53724f76 100644 --- a/rerun_cpp/src/rerun/blueprint/components/row_share.hpp +++ b/rerun_cpp/src/rerun/blueprint/components/row_share.hpp @@ -49,15 +49,15 @@ namespace rerun { /// Returns the arrow data type this type corresponds to. static const std::shared_ptr& arrow_datatype(); + /// Serializes an array of `rerun::blueprint:: components::RowShare` into an arrow array. + static Result> to_arrow( + const blueprint::components::RowShare* instances, size_t num_instances + ); + /// Fills an arrow array builder with an array of this type. static rerun::Error fill_arrow_array_builder( arrow::FloatBuilder* builder, const blueprint::components::RowShare* elements, size_t num_elements ); - - /// Serializes an array of `rerun::blueprint:: components::RowShare` into an arrow array. - static Result> to_arrow( - const blueprint::components::RowShare* instances, size_t num_instances - ); }; } // namespace rerun diff --git a/rerun_cpp/src/rerun/blueprint/components/space_view_class.cpp b/rerun_cpp/src/rerun/blueprint/components/space_view_class.cpp deleted file mode 100644 index 2badc811cb5c..000000000000 --- a/rerun_cpp/src/rerun/blueprint/components/space_view_class.cpp +++ /dev/null @@ -1,57 +0,0 @@ -// DO NOT EDIT! This file was auto-generated by crates/re_types_builder/src/codegen/cpp/mod.rs -// Based on "crates/re_types/definitions/rerun/blueprint/components/space_view_class.fbs". - -#include "space_view_class.hpp" - -#include "../../datatypes/utf8.hpp" - -#include -#include - -namespace rerun::blueprint::components {} - -namespace rerun { - const std::shared_ptr& - Loggable::arrow_datatype() { - static const auto datatype = Loggable::arrow_datatype(); - return datatype; - } - - rerun::Error Loggable::fill_arrow_array_builder( - arrow::StringBuilder* builder, const blueprint::components::SpaceViewClass* elements, - size_t num_elements - ) { - static_assert( - sizeof(rerun::datatypes::Utf8) == sizeof(blueprint::components::SpaceViewClass) - ); - RR_RETURN_NOT_OK(Loggable::fill_arrow_array_builder( - builder, - reinterpret_cast(elements), - num_elements - )); - - return Error::ok(); - } - - Result> Loggable::to_arrow( - const blueprint::components::SpaceViewClass* instances, size_t num_instances - ) { - // TODO(andreas): Allow configuring the memory pool. - arrow::MemoryPool* pool = arrow::default_memory_pool(); - auto datatype = arrow_datatype(); - - ARROW_ASSIGN_OR_RAISE(auto builder, arrow::MakeBuilder(datatype, pool)) - if (instances && num_instances > 0) { - RR_RETURN_NOT_OK( - Loggable::fill_arrow_array_builder( - static_cast(builder.get()), - instances, - num_instances - ) - ); - } - std::shared_ptr array; - ARROW_RETURN_NOT_OK(builder->Finish(&array)); - return array; - } -} // namespace rerun diff --git a/rerun_cpp/src/rerun/blueprint/components/space_view_class.hpp b/rerun_cpp/src/rerun/blueprint/components/space_view_class.hpp index 428aa26db77c..5f7ed62a5da7 100644 --- a/rerun_cpp/src/rerun/blueprint/components/space_view_class.hpp +++ b/rerun_cpp/src/rerun/blueprint/components/space_view_class.hpp @@ -11,12 +11,6 @@ #include #include -namespace arrow { - class Array; - class DataType; - class StringBuilder; -} // namespace arrow - namespace rerun::blueprint::components { /// **Component**: The class of a `SpaceView`. struct SpaceViewClass { @@ -47,8 +41,7 @@ namespace rerun::blueprint::components { } // namespace rerun::blueprint::components namespace rerun { - template - struct Loggable; + static_assert(sizeof(rerun::datatypes::Utf8) == sizeof(blueprint::components::SpaceViewClass)); /// \private template <> @@ -56,17 +49,15 @@ namespace rerun { static constexpr const char Name[] = "rerun.blueprint.components.SpaceViewClass"; /// Returns the arrow data type this type corresponds to. - static const std::shared_ptr& arrow_datatype(); - - /// Fills an arrow array builder with an array of this type. - static rerun::Error fill_arrow_array_builder( - arrow::StringBuilder* builder, const blueprint::components::SpaceViewClass* elements, - size_t num_elements - ); + static const std::shared_ptr& arrow_datatype() { + return Loggable::arrow_datatype(); + } /// Serializes an array of `rerun::blueprint:: components::SpaceViewClass` into an arrow array. static Result> to_arrow( const blueprint::components::SpaceViewClass* instances, size_t num_instances - ); + ) { + return Loggable::to_arrow(&instances->value, num_instances); + } }; } // namespace rerun diff --git a/rerun_cpp/src/rerun/blueprint/components/space_view_maximized.cpp b/rerun_cpp/src/rerun/blueprint/components/space_view_maximized.cpp deleted file mode 100644 index 245206f2539c..000000000000 --- a/rerun_cpp/src/rerun/blueprint/components/space_view_maximized.cpp +++ /dev/null @@ -1,58 +0,0 @@ -// DO NOT EDIT! This file was auto-generated by crates/re_types_builder/src/codegen/cpp/mod.rs -// Based on "crates/re_types/definitions/rerun/blueprint/components/space_view_maximized.fbs". - -#include "space_view_maximized.hpp" - -#include "../../datatypes/uuid.hpp" - -#include -#include - -namespace rerun::blueprint::components {} - -namespace rerun { - const std::shared_ptr& - Loggable::arrow_datatype() { - static const auto datatype = Loggable::arrow_datatype(); - return datatype; - } - - rerun::Error Loggable::fill_arrow_array_builder( - arrow::FixedSizeListBuilder* builder, - const blueprint::components::SpaceViewMaximized* elements, size_t num_elements - ) { - static_assert( - sizeof(rerun::datatypes::Uuid) == sizeof(blueprint::components::SpaceViewMaximized) - ); - RR_RETURN_NOT_OK(Loggable::fill_arrow_array_builder( - builder, - reinterpret_cast(elements), - num_elements - )); - - return Error::ok(); - } - - Result> - Loggable::to_arrow( - const blueprint::components::SpaceViewMaximized* instances, size_t num_instances - ) { - // TODO(andreas): Allow configuring the memory pool. - arrow::MemoryPool* pool = arrow::default_memory_pool(); - auto datatype = arrow_datatype(); - - ARROW_ASSIGN_OR_RAISE(auto builder, arrow::MakeBuilder(datatype, pool)) - if (instances && num_instances > 0) { - RR_RETURN_NOT_OK( - Loggable::fill_arrow_array_builder( - static_cast(builder.get()), - instances, - num_instances - ) - ); - } - std::shared_ptr array; - ARROW_RETURN_NOT_OK(builder->Finish(&array)); - return array; - } -} // namespace rerun diff --git a/rerun_cpp/src/rerun/blueprint/components/space_view_maximized.hpp b/rerun_cpp/src/rerun/blueprint/components/space_view_maximized.hpp index f3d5579b4a94..525a1323b604 100644 --- a/rerun_cpp/src/rerun/blueprint/components/space_view_maximized.hpp +++ b/rerun_cpp/src/rerun/blueprint/components/space_view_maximized.hpp @@ -10,12 +10,6 @@ #include #include -namespace arrow { - class Array; - class DataType; - class FixedSizeListBuilder; -} // namespace arrow - namespace rerun::blueprint::components { /// **Component**: Whether a space view is maximized. /// @@ -48,8 +42,9 @@ namespace rerun::blueprint::components { } // namespace rerun::blueprint::components namespace rerun { - template - struct Loggable; + static_assert( + sizeof(rerun::datatypes::Uuid) == sizeof(blueprint::components::SpaceViewMaximized) + ); /// \private template <> @@ -57,17 +52,18 @@ namespace rerun { static constexpr const char Name[] = "rerun.blueprint.components.SpaceViewMaximized"; /// Returns the arrow data type this type corresponds to. - static const std::shared_ptr& arrow_datatype(); - - /// Fills an arrow array builder with an array of this type. - static rerun::Error fill_arrow_array_builder( - arrow::FixedSizeListBuilder* builder, - const blueprint::components::SpaceViewMaximized* elements, size_t num_elements - ); + static const std::shared_ptr& arrow_datatype() { + return Loggable::arrow_datatype(); + } /// Serializes an array of `rerun::blueprint:: components::SpaceViewMaximized` into an arrow array. static Result> to_arrow( const blueprint::components::SpaceViewMaximized* instances, size_t num_instances - ); + ) { + return Loggable::to_arrow( + &instances->space_view_id, + num_instances + ); + } }; } // namespace rerun diff --git a/rerun_cpp/src/rerun/blueprint/components/space_view_origin.cpp b/rerun_cpp/src/rerun/blueprint/components/space_view_origin.cpp deleted file mode 100644 index 6dd4fab09f27..000000000000 --- a/rerun_cpp/src/rerun/blueprint/components/space_view_origin.cpp +++ /dev/null @@ -1,58 +0,0 @@ -// DO NOT EDIT! This file was auto-generated by crates/re_types_builder/src/codegen/cpp/mod.rs -// Based on "crates/re_types/definitions/rerun/blueprint/components/space_view_origin.fbs". - -#include "space_view_origin.hpp" - -#include "../../datatypes/entity_path.hpp" - -#include -#include - -namespace rerun::blueprint::components {} - -namespace rerun { - const std::shared_ptr& - Loggable::arrow_datatype() { - static const auto datatype = Loggable::arrow_datatype(); - return datatype; - } - - rerun::Error Loggable::fill_arrow_array_builder( - arrow::StringBuilder* builder, const blueprint::components::SpaceViewOrigin* elements, - size_t num_elements - ) { - static_assert( - sizeof(rerun::datatypes::EntityPath) == sizeof(blueprint::components::SpaceViewOrigin) - ); - RR_RETURN_NOT_OK(Loggable::fill_arrow_array_builder( - builder, - reinterpret_cast(elements), - num_elements - )); - - return Error::ok(); - } - - Result> - Loggable::to_arrow( - const blueprint::components::SpaceViewOrigin* instances, size_t num_instances - ) { - // TODO(andreas): Allow configuring the memory pool. - arrow::MemoryPool* pool = arrow::default_memory_pool(); - auto datatype = arrow_datatype(); - - ARROW_ASSIGN_OR_RAISE(auto builder, arrow::MakeBuilder(datatype, pool)) - if (instances && num_instances > 0) { - RR_RETURN_NOT_OK( - Loggable::fill_arrow_array_builder( - static_cast(builder.get()), - instances, - num_instances - ) - ); - } - std::shared_ptr array; - ARROW_RETURN_NOT_OK(builder->Finish(&array)); - return array; - } -} // namespace rerun diff --git a/rerun_cpp/src/rerun/blueprint/components/space_view_origin.hpp b/rerun_cpp/src/rerun/blueprint/components/space_view_origin.hpp index b2c819486292..6bbb9459b379 100644 --- a/rerun_cpp/src/rerun/blueprint/components/space_view_origin.hpp +++ b/rerun_cpp/src/rerun/blueprint/components/space_view_origin.hpp @@ -11,12 +11,6 @@ #include #include -namespace arrow { - class Array; - class DataType; - class StringBuilder; -} // namespace arrow - namespace rerun::blueprint::components { /// **Component**: The origin of a `SpaceView`. struct SpaceViewOrigin { @@ -47,8 +41,9 @@ namespace rerun::blueprint::components { } // namespace rerun::blueprint::components namespace rerun { - template - struct Loggable; + static_assert( + sizeof(rerun::datatypes::EntityPath) == sizeof(blueprint::components::SpaceViewOrigin) + ); /// \private template <> @@ -56,17 +51,18 @@ namespace rerun { static constexpr const char Name[] = "rerun.blueprint.components.SpaceViewOrigin"; /// Returns the arrow data type this type corresponds to. - static const std::shared_ptr& arrow_datatype(); - - /// Fills an arrow array builder with an array of this type. - static rerun::Error fill_arrow_array_builder( - arrow::StringBuilder* builder, const blueprint::components::SpaceViewOrigin* elements, - size_t num_elements - ); + static const std::shared_ptr& arrow_datatype() { + return Loggable::arrow_datatype(); + } /// Serializes an array of `rerun::blueprint:: components::SpaceViewOrigin` into an arrow array. static Result> to_arrow( const blueprint::components::SpaceViewOrigin* instances, size_t num_instances - ); + ) { + return Loggable::to_arrow( + &instances->value, + num_instances + ); + } }; } // namespace rerun diff --git a/rerun_cpp/src/rerun/blueprint/components/viewer_recommendation_hash.cpp b/rerun_cpp/src/rerun/blueprint/components/viewer_recommendation_hash.cpp deleted file mode 100644 index b92576dc9b6a..000000000000 --- a/rerun_cpp/src/rerun/blueprint/components/viewer_recommendation_hash.cpp +++ /dev/null @@ -1,60 +0,0 @@ -// DO NOT EDIT! This file was auto-generated by crates/re_types_builder/src/codegen/cpp/mod.rs -// Based on "crates/re_types/definitions/rerun/blueprint/components/viewer_recommendation_hash.fbs". - -#include "viewer_recommendation_hash.hpp" - -#include "../../datatypes/uint64.hpp" - -#include -#include - -namespace rerun::blueprint::components {} - -namespace rerun { - const std::shared_ptr& - Loggable::arrow_datatype() { - static const auto datatype = Loggable::arrow_datatype(); - return datatype; - } - - rerun::Error - Loggable::fill_arrow_array_builder( - arrow::UInt64Builder* builder, - const blueprint::components::ViewerRecommendationHash* elements, size_t num_elements - ) { - static_assert( - sizeof(rerun::datatypes::UInt64) == - sizeof(blueprint::components::ViewerRecommendationHash) - ); - RR_RETURN_NOT_OK(Loggable::fill_arrow_array_builder( - builder, - reinterpret_cast(elements), - num_elements - )); - - return Error::ok(); - } - - Result> - Loggable::to_arrow( - const blueprint::components::ViewerRecommendationHash* instances, size_t num_instances - ) { - // TODO(andreas): Allow configuring the memory pool. - arrow::MemoryPool* pool = arrow::default_memory_pool(); - auto datatype = arrow_datatype(); - - ARROW_ASSIGN_OR_RAISE(auto builder, arrow::MakeBuilder(datatype, pool)) - if (instances && num_instances > 0) { - RR_RETURN_NOT_OK( - Loggable::fill_arrow_array_builder( - static_cast(builder.get()), - instances, - num_instances - ) - ); - } - std::shared_ptr array; - ARROW_RETURN_NOT_OK(builder->Finish(&array)); - return array; - } -} // namespace rerun diff --git a/rerun_cpp/src/rerun/blueprint/components/viewer_recommendation_hash.hpp b/rerun_cpp/src/rerun/blueprint/components/viewer_recommendation_hash.hpp index c342c6285abe..b18d76ce8d15 100644 --- a/rerun_cpp/src/rerun/blueprint/components/viewer_recommendation_hash.hpp +++ b/rerun_cpp/src/rerun/blueprint/components/viewer_recommendation_hash.hpp @@ -9,17 +9,6 @@ #include #include -namespace arrow { - /// \private - template - class NumericBuilder; - - class Array; - class DataType; - class UInt64Type; - using UInt64Builder = NumericBuilder; -} // namespace arrow - namespace rerun::blueprint::components { /// **Component**: Hash of a viewer recommendation. /// @@ -52,8 +41,9 @@ namespace rerun::blueprint::components { } // namespace rerun::blueprint::components namespace rerun { - template - struct Loggable; + static_assert( + sizeof(rerun::datatypes::UInt64) == sizeof(blueprint::components::ViewerRecommendationHash) + ); /// \private template <> @@ -61,17 +51,15 @@ namespace rerun { static constexpr const char Name[] = "rerun.blueprint.components.ViewerRecommendationHash"; /// Returns the arrow data type this type corresponds to. - static const std::shared_ptr& arrow_datatype(); - - /// Fills an arrow array builder with an array of this type. - static rerun::Error fill_arrow_array_builder( - arrow::UInt64Builder* builder, - const blueprint::components::ViewerRecommendationHash* elements, size_t num_elements - ); + static const std::shared_ptr& arrow_datatype() { + return Loggable::arrow_datatype(); + } /// Serializes an array of `rerun::blueprint:: components::ViewerRecommendationHash` into an arrow array. static Result> to_arrow( const blueprint::components::ViewerRecommendationHash* instances, size_t num_instances - ); + ) { + return Loggable::to_arrow(&instances->value, num_instances); + } }; } // namespace rerun diff --git a/rerun_cpp/src/rerun/blueprint/components/visible.cpp b/rerun_cpp/src/rerun/blueprint/components/visible.cpp index 32a6f4af43fb..808af8c61bc5 100644 --- a/rerun_cpp/src/rerun/blueprint/components/visible.cpp +++ b/rerun_cpp/src/rerun/blueprint/components/visible.cpp @@ -15,6 +15,26 @@ namespace rerun { return datatype; } + Result> Loggable::to_arrow( + const blueprint::components::Visible* instances, size_t num_instances + ) { + // TODO(andreas): Allow configuring the memory pool. + arrow::MemoryPool* pool = arrow::default_memory_pool(); + auto datatype = arrow_datatype(); + + ARROW_ASSIGN_OR_RAISE(auto builder, arrow::MakeBuilder(datatype, pool)) + if (instances && num_instances > 0) { + RR_RETURN_NOT_OK(Loggable::fill_arrow_array_builder( + static_cast(builder.get()), + instances, + num_instances + )); + } + std::shared_ptr array; + ARROW_RETURN_NOT_OK(builder->Finish(&array)); + return array; + } + rerun::Error Loggable::fill_arrow_array_builder( arrow::BooleanBuilder* builder, const blueprint::components::Visible* elements, size_t num_elements @@ -37,24 +57,4 @@ namespace rerun { return Error::ok(); } - - Result> Loggable::to_arrow( - const blueprint::components::Visible* instances, size_t num_instances - ) { - // TODO(andreas): Allow configuring the memory pool. - arrow::MemoryPool* pool = arrow::default_memory_pool(); - auto datatype = arrow_datatype(); - - ARROW_ASSIGN_OR_RAISE(auto builder, arrow::MakeBuilder(datatype, pool)) - if (instances && num_instances > 0) { - RR_RETURN_NOT_OK(Loggable::fill_arrow_array_builder( - static_cast(builder.get()), - instances, - num_instances - )); - } - std::shared_ptr array; - ARROW_RETURN_NOT_OK(builder->Finish(&array)); - return array; - } } // namespace rerun diff --git a/rerun_cpp/src/rerun/blueprint/components/visible.hpp b/rerun_cpp/src/rerun/blueprint/components/visible.hpp index f980d8a0666a..510a46cacf34 100644 --- a/rerun_cpp/src/rerun/blueprint/components/visible.hpp +++ b/rerun_cpp/src/rerun/blueprint/components/visible.hpp @@ -43,15 +43,15 @@ namespace rerun { /// Returns the arrow data type this type corresponds to. static const std::shared_ptr& arrow_datatype(); + /// Serializes an array of `rerun::blueprint:: components::Visible` into an arrow array. + static Result> to_arrow( + const blueprint::components::Visible* instances, size_t num_instances + ); + /// Fills an arrow array builder with an array of this type. static rerun::Error fill_arrow_array_builder( arrow::BooleanBuilder* builder, const blueprint::components::Visible* elements, size_t num_elements ); - - /// Serializes an array of `rerun::blueprint:: components::Visible` into an arrow array. - static Result> to_arrow( - const blueprint::components::Visible* instances, size_t num_instances - ); }; } // namespace rerun diff --git a/rerun_cpp/src/rerun/components/.gitattributes b/rerun_cpp/src/rerun/components/.gitattributes index aa8ff1fc3a6a..c6655108354f 100644 --- a/rerun_cpp/src/rerun/components/.gitattributes +++ b/rerun_cpp/src/rerun/components/.gitattributes @@ -5,11 +5,9 @@ annotation_context.cpp linguist-generated=true annotation_context.hpp linguist-generated=true blob.cpp linguist-generated=true blob.hpp linguist-generated=true -class_id.cpp linguist-generated=true class_id.hpp linguist-generated=true clear_is_recursive.cpp linguist-generated=true clear_is_recursive.hpp linguist-generated=true -color.cpp linguist-generated=true color.hpp linguist-generated=true depth_meter.cpp linguist-generated=true depth_meter.hpp linguist-generated=true @@ -17,13 +15,10 @@ disconnected_space.cpp linguist-generated=true disconnected_space.hpp linguist-generated=true draw_order.cpp linguist-generated=true draw_order.hpp linguist-generated=true -half_sizes2d.cpp linguist-generated=true half_sizes2d.hpp linguist-generated=true -half_sizes3d.cpp linguist-generated=true half_sizes3d.hpp linguist-generated=true instance_key.cpp linguist-generated=true instance_key.hpp linguist-generated=true -keypoint_id.cpp linguist-generated=true keypoint_id.hpp linguist-generated=true line_strip2d.cpp linguist-generated=true line_strip2d.hpp linguist-generated=true @@ -33,29 +28,19 @@ marker_shape.cpp linguist-generated=true marker_shape.hpp linguist-generated=true marker_size.cpp linguist-generated=true marker_size.hpp linguist-generated=true -material.cpp linguist-generated=true material.hpp linguist-generated=true -media_type.cpp linguist-generated=true media_type.hpp linguist-generated=true -mesh_properties.cpp linguist-generated=true mesh_properties.hpp linguist-generated=true -name.cpp linguist-generated=true name.hpp linguist-generated=true -out_of_tree_transform3d.cpp linguist-generated=true out_of_tree_transform3d.hpp linguist-generated=true -pinhole_projection.cpp linguist-generated=true pinhole_projection.hpp linguist-generated=true -position2d.cpp linguist-generated=true position2d.hpp linguist-generated=true -position3d.cpp linguist-generated=true position3d.hpp linguist-generated=true radius.cpp linguist-generated=true radius.hpp linguist-generated=true range1d.cpp linguist-generated=true range1d.hpp linguist-generated=true -resolution.cpp linguist-generated=true resolution.hpp linguist-generated=true -rotation3d.cpp linguist-generated=true rotation3d.hpp linguist-generated=true scalar.cpp linguist-generated=true scalar.hpp linguist-generated=true @@ -63,19 +48,12 @@ scalar_scattering.cpp linguist-generated=true scalar_scattering.hpp linguist-generated=true stroke_width.cpp linguist-generated=true stroke_width.hpp linguist-generated=true -tensor_data.cpp linguist-generated=true tensor_data.hpp linguist-generated=true -texcoord2d.cpp linguist-generated=true texcoord2d.hpp linguist-generated=true -text.cpp linguist-generated=true text.hpp linguist-generated=true -text_log_level.cpp linguist-generated=true text_log_level.hpp linguist-generated=true -transform3d.cpp linguist-generated=true transform3d.hpp linguist-generated=true -vector2d.cpp linguist-generated=true vector2d.hpp linguist-generated=true -vector3d.cpp linguist-generated=true vector3d.hpp linguist-generated=true view_coordinates.cpp linguist-generated=true view_coordinates.hpp linguist-generated=true diff --git a/rerun_cpp/src/rerun/components/annotation_context.cpp b/rerun_cpp/src/rerun/components/annotation_context.cpp index a8c018c50d65..435a547ca46a 100644 --- a/rerun_cpp/src/rerun/components/annotation_context.cpp +++ b/rerun_cpp/src/rerun/components/annotation_context.cpp @@ -21,6 +21,26 @@ namespace rerun { return datatype; } + Result> Loggable::to_arrow( + const components::AnnotationContext* instances, size_t num_instances + ) { + // TODO(andreas): Allow configuring the memory pool. + arrow::MemoryPool* pool = arrow::default_memory_pool(); + auto datatype = arrow_datatype(); + + ARROW_ASSIGN_OR_RAISE(auto builder, arrow::MakeBuilder(datatype, pool)) + if (instances && num_instances > 0) { + RR_RETURN_NOT_OK(Loggable::fill_arrow_array_builder( + static_cast(builder.get()), + instances, + num_instances + )); + } + std::shared_ptr array; + ARROW_RETURN_NOT_OK(builder->Finish(&array)); + return array; + } + rerun::Error Loggable::fill_arrow_array_builder( arrow::ListBuilder* builder, const components::AnnotationContext* elements, size_t num_elements @@ -55,24 +75,4 @@ namespace rerun { return Error::ok(); } - - Result> Loggable::to_arrow( - const components::AnnotationContext* instances, size_t num_instances - ) { - // TODO(andreas): Allow configuring the memory pool. - arrow::MemoryPool* pool = arrow::default_memory_pool(); - auto datatype = arrow_datatype(); - - ARROW_ASSIGN_OR_RAISE(auto builder, arrow::MakeBuilder(datatype, pool)) - if (instances && num_instances > 0) { - RR_RETURN_NOT_OK(Loggable::fill_arrow_array_builder( - static_cast(builder.get()), - instances, - num_instances - )); - } - std::shared_ptr array; - ARROW_RETURN_NOT_OK(builder->Finish(&array)); - return array; - } } // namespace rerun diff --git a/rerun_cpp/src/rerun/components/annotation_context.hpp b/rerun_cpp/src/rerun/components/annotation_context.hpp index aab641675dd4..841066ea72eb 100644 --- a/rerun_cpp/src/rerun/components/annotation_context.hpp +++ b/rerun_cpp/src/rerun/components/annotation_context.hpp @@ -84,15 +84,15 @@ namespace rerun { /// Returns the arrow data type this type corresponds to. static const std::shared_ptr& arrow_datatype(); + /// Serializes an array of `rerun::components::AnnotationContext` into an arrow array. + static Result> to_arrow( + const components::AnnotationContext* instances, size_t num_instances + ); + /// Fills an arrow array builder with an array of this type. static rerun::Error fill_arrow_array_builder( arrow::ListBuilder* builder, const components::AnnotationContext* elements, size_t num_elements ); - - /// Serializes an array of `rerun::components::AnnotationContext` into an arrow array. - static Result> to_arrow( - const components::AnnotationContext* instances, size_t num_instances - ); }; } // namespace rerun diff --git a/rerun_cpp/src/rerun/components/blob.cpp b/rerun_cpp/src/rerun/components/blob.cpp index 34c97610fa51..50be1471dba0 100644 --- a/rerun_cpp/src/rerun/components/blob.cpp +++ b/rerun_cpp/src/rerun/components/blob.cpp @@ -14,6 +14,26 @@ namespace rerun { return datatype; } + Result> Loggable::to_arrow( + const components::Blob* instances, size_t num_instances + ) { + // TODO(andreas): Allow configuring the memory pool. + arrow::MemoryPool* pool = arrow::default_memory_pool(); + auto datatype = arrow_datatype(); + + ARROW_ASSIGN_OR_RAISE(auto builder, arrow::MakeBuilder(datatype, pool)) + if (instances && num_instances > 0) { + RR_RETURN_NOT_OK(Loggable::fill_arrow_array_builder( + static_cast(builder.get()), + instances, + num_instances + )); + } + std::shared_ptr array; + ARROW_RETURN_NOT_OK(builder->Finish(&array)); + return array; + } + rerun::Error Loggable::fill_arrow_array_builder( arrow::ListBuilder* builder, const components::Blob* elements, size_t num_elements ) { @@ -43,24 +63,4 @@ namespace rerun { return Error::ok(); } - - Result> Loggable::to_arrow( - const components::Blob* instances, size_t num_instances - ) { - // TODO(andreas): Allow configuring the memory pool. - arrow::MemoryPool* pool = arrow::default_memory_pool(); - auto datatype = arrow_datatype(); - - ARROW_ASSIGN_OR_RAISE(auto builder, arrow::MakeBuilder(datatype, pool)) - if (instances && num_instances > 0) { - RR_RETURN_NOT_OK(Loggable::fill_arrow_array_builder( - static_cast(builder.get()), - instances, - num_instances - )); - } - std::shared_ptr array; - ARROW_RETURN_NOT_OK(builder->Finish(&array)); - return array; - } } // namespace rerun diff --git a/rerun_cpp/src/rerun/components/blob.hpp b/rerun_cpp/src/rerun/components/blob.hpp index 0db18fa147a9..8b94d9dfb989 100644 --- a/rerun_cpp/src/rerun/components/blob.hpp +++ b/rerun_cpp/src/rerun/components/blob.hpp @@ -45,14 +45,14 @@ namespace rerun { /// Returns the arrow data type this type corresponds to. static const std::shared_ptr& arrow_datatype(); - /// Fills an arrow array builder with an array of this type. - static rerun::Error fill_arrow_array_builder( - arrow::ListBuilder* builder, const components::Blob* elements, size_t num_elements - ); - /// Serializes an array of `rerun::components::Blob` into an arrow array. static Result> to_arrow( const components::Blob* instances, size_t num_instances ); + + /// Fills an arrow array builder with an array of this type. + static rerun::Error fill_arrow_array_builder( + arrow::ListBuilder* builder, const components::Blob* elements, size_t num_elements + ); }; } // namespace rerun diff --git a/rerun_cpp/src/rerun/components/class_id.cpp b/rerun_cpp/src/rerun/components/class_id.cpp deleted file mode 100644 index 8aedab263c8d..000000000000 --- a/rerun_cpp/src/rerun/components/class_id.cpp +++ /dev/null @@ -1,51 +0,0 @@ -// DO NOT EDIT! This file was auto-generated by crates/re_types_builder/src/codegen/cpp/mod.rs -// Based on "crates/re_types/definitions/rerun/components/class_id.fbs". - -#include "class_id.hpp" - -#include "../datatypes/class_id.hpp" - -#include -#include - -namespace rerun::components {} - -namespace rerun { - const std::shared_ptr& Loggable::arrow_datatype() { - static const auto datatype = Loggable::arrow_datatype(); - return datatype; - } - - rerun::Error Loggable::fill_arrow_array_builder( - arrow::UInt16Builder* builder, const components::ClassId* elements, size_t num_elements - ) { - static_assert(sizeof(rerun::datatypes::ClassId) == sizeof(components::ClassId)); - RR_RETURN_NOT_OK(Loggable::fill_arrow_array_builder( - builder, - reinterpret_cast(elements), - num_elements - )); - - return Error::ok(); - } - - Result> Loggable::to_arrow( - const components::ClassId* instances, size_t num_instances - ) { - // TODO(andreas): Allow configuring the memory pool. - arrow::MemoryPool* pool = arrow::default_memory_pool(); - auto datatype = arrow_datatype(); - - ARROW_ASSIGN_OR_RAISE(auto builder, arrow::MakeBuilder(datatype, pool)) - if (instances && num_instances > 0) { - RR_RETURN_NOT_OK(Loggable::fill_arrow_array_builder( - static_cast(builder.get()), - instances, - num_instances - )); - } - std::shared_ptr array; - ARROW_RETURN_NOT_OK(builder->Finish(&array)); - return array; - } -} // namespace rerun diff --git a/rerun_cpp/src/rerun/components/class_id.hpp b/rerun_cpp/src/rerun/components/class_id.hpp index 033488e4f982..3da93fb40e95 100644 --- a/rerun_cpp/src/rerun/components/class_id.hpp +++ b/rerun_cpp/src/rerun/components/class_id.hpp @@ -9,17 +9,6 @@ #include #include -namespace arrow { - /// \private - template - class NumericBuilder; - - class Array; - class DataType; - class UInt16Type; - using UInt16Builder = NumericBuilder; -} // namespace arrow - namespace rerun::components { /// **Component**: A 16-bit ID representing a type of semantic class. struct ClassId { @@ -50,8 +39,7 @@ namespace rerun::components { } // namespace rerun::components namespace rerun { - template - struct Loggable; + static_assert(sizeof(rerun::datatypes::ClassId) == sizeof(components::ClassId)); /// \private template <> @@ -59,16 +47,15 @@ namespace rerun { static constexpr const char Name[] = "rerun.components.ClassId"; /// Returns the arrow data type this type corresponds to. - static const std::shared_ptr& arrow_datatype(); - - /// Fills an arrow array builder with an array of this type. - static rerun::Error fill_arrow_array_builder( - arrow::UInt16Builder* builder, const components::ClassId* elements, size_t num_elements - ); + static const std::shared_ptr& arrow_datatype() { + return Loggable::arrow_datatype(); + } /// Serializes an array of `rerun::components::ClassId` into an arrow array. static Result> to_arrow( const components::ClassId* instances, size_t num_instances - ); + ) { + return Loggable::to_arrow(&instances->id, num_instances); + } }; } // namespace rerun diff --git a/rerun_cpp/src/rerun/components/clear_is_recursive.cpp b/rerun_cpp/src/rerun/components/clear_is_recursive.cpp index 4eb6614791c8..ad36c3bafa59 100644 --- a/rerun_cpp/src/rerun/components/clear_is_recursive.cpp +++ b/rerun_cpp/src/rerun/components/clear_is_recursive.cpp @@ -15,6 +15,26 @@ namespace rerun { return datatype; } + Result> Loggable::to_arrow( + const components::ClearIsRecursive* instances, size_t num_instances + ) { + // TODO(andreas): Allow configuring the memory pool. + arrow::MemoryPool* pool = arrow::default_memory_pool(); + auto datatype = arrow_datatype(); + + ARROW_ASSIGN_OR_RAISE(auto builder, arrow::MakeBuilder(datatype, pool)) + if (instances && num_instances > 0) { + RR_RETURN_NOT_OK(Loggable::fill_arrow_array_builder( + static_cast(builder.get()), + instances, + num_instances + )); + } + std::shared_ptr array; + ARROW_RETURN_NOT_OK(builder->Finish(&array)); + return array; + } + rerun::Error Loggable::fill_arrow_array_builder( arrow::BooleanBuilder* builder, const components::ClearIsRecursive* elements, size_t num_elements @@ -37,24 +57,4 @@ namespace rerun { return Error::ok(); } - - Result> Loggable::to_arrow( - const components::ClearIsRecursive* instances, size_t num_instances - ) { - // TODO(andreas): Allow configuring the memory pool. - arrow::MemoryPool* pool = arrow::default_memory_pool(); - auto datatype = arrow_datatype(); - - ARROW_ASSIGN_OR_RAISE(auto builder, arrow::MakeBuilder(datatype, pool)) - if (instances && num_instances > 0) { - RR_RETURN_NOT_OK(Loggable::fill_arrow_array_builder( - static_cast(builder.get()), - instances, - num_instances - )); - } - std::shared_ptr array; - ARROW_RETURN_NOT_OK(builder->Finish(&array)); - return array; - } } // namespace rerun diff --git a/rerun_cpp/src/rerun/components/clear_is_recursive.hpp b/rerun_cpp/src/rerun/components/clear_is_recursive.hpp index 58c96eb05502..7862eac2cd2c 100644 --- a/rerun_cpp/src/rerun/components/clear_is_recursive.hpp +++ b/rerun_cpp/src/rerun/components/clear_is_recursive.hpp @@ -44,15 +44,15 @@ namespace rerun { /// Returns the arrow data type this type corresponds to. static const std::shared_ptr& arrow_datatype(); + /// Serializes an array of `rerun::components::ClearIsRecursive` into an arrow array. + static Result> to_arrow( + const components::ClearIsRecursive* instances, size_t num_instances + ); + /// Fills an arrow array builder with an array of this type. static rerun::Error fill_arrow_array_builder( arrow::BooleanBuilder* builder, const components::ClearIsRecursive* elements, size_t num_elements ); - - /// Serializes an array of `rerun::components::ClearIsRecursive` into an arrow array. - static Result> to_arrow( - const components::ClearIsRecursive* instances, size_t num_instances - ); }; } // namespace rerun diff --git a/rerun_cpp/src/rerun/components/color.cpp b/rerun_cpp/src/rerun/components/color.cpp deleted file mode 100644 index 4a336d839698..000000000000 --- a/rerun_cpp/src/rerun/components/color.cpp +++ /dev/null @@ -1,51 +0,0 @@ -// DO NOT EDIT! This file was auto-generated by crates/re_types_builder/src/codegen/cpp/mod.rs -// Based on "crates/re_types/definitions/rerun/components/color.fbs". - -#include "color.hpp" - -#include "../datatypes/rgba32.hpp" - -#include -#include - -namespace rerun::components {} - -namespace rerun { - const std::shared_ptr& Loggable::arrow_datatype() { - static const auto datatype = Loggable::arrow_datatype(); - return datatype; - } - - rerun::Error Loggable::fill_arrow_array_builder( - arrow::UInt32Builder* builder, const components::Color* elements, size_t num_elements - ) { - static_assert(sizeof(rerun::datatypes::Rgba32) == sizeof(components::Color)); - RR_RETURN_NOT_OK(Loggable::fill_arrow_array_builder( - builder, - reinterpret_cast(elements), - num_elements - )); - - return Error::ok(); - } - - Result> Loggable::to_arrow( - const components::Color* instances, size_t num_instances - ) { - // TODO(andreas): Allow configuring the memory pool. - arrow::MemoryPool* pool = arrow::default_memory_pool(); - auto datatype = arrow_datatype(); - - ARROW_ASSIGN_OR_RAISE(auto builder, arrow::MakeBuilder(datatype, pool)) - if (instances && num_instances > 0) { - RR_RETURN_NOT_OK(Loggable::fill_arrow_array_builder( - static_cast(builder.get()), - instances, - num_instances - )); - } - std::shared_ptr array; - ARROW_RETURN_NOT_OK(builder->Finish(&array)); - return array; - } -} // namespace rerun diff --git a/rerun_cpp/src/rerun/components/color.hpp b/rerun_cpp/src/rerun/components/color.hpp index 5b823032ca9c..3478072deff6 100644 --- a/rerun_cpp/src/rerun/components/color.hpp +++ b/rerun_cpp/src/rerun/components/color.hpp @@ -9,17 +9,6 @@ #include #include -namespace arrow { - /// \private - template - class NumericBuilder; - - class Array; - class DataType; - class UInt32Type; - using UInt32Builder = NumericBuilder; -} // namespace arrow - namespace rerun::components { /// **Component**: An RGBA color with unmultiplied/separate alpha, in sRGB gamma space with linear alpha. /// @@ -75,8 +64,7 @@ namespace rerun::components { } // namespace rerun::components namespace rerun { - template - struct Loggable; + static_assert(sizeof(rerun::datatypes::Rgba32) == sizeof(components::Color)); /// \private template <> @@ -84,16 +72,15 @@ namespace rerun { static constexpr const char Name[] = "rerun.components.Color"; /// Returns the arrow data type this type corresponds to. - static const std::shared_ptr& arrow_datatype(); - - /// Fills an arrow array builder with an array of this type. - static rerun::Error fill_arrow_array_builder( - arrow::UInt32Builder* builder, const components::Color* elements, size_t num_elements - ); + static const std::shared_ptr& arrow_datatype() { + return Loggable::arrow_datatype(); + } /// Serializes an array of `rerun::components::Color` into an arrow array. static Result> to_arrow( const components::Color* instances, size_t num_instances - ); + ) { + return Loggable::to_arrow(&instances->rgba, num_instances); + } }; } // namespace rerun diff --git a/rerun_cpp/src/rerun/components/depth_meter.cpp b/rerun_cpp/src/rerun/components/depth_meter.cpp index 71e6b78599e1..8d1ff567c255 100644 --- a/rerun_cpp/src/rerun/components/depth_meter.cpp +++ b/rerun_cpp/src/rerun/components/depth_meter.cpp @@ -14,6 +14,26 @@ namespace rerun { return datatype; } + Result> Loggable::to_arrow( + const components::DepthMeter* instances, size_t num_instances + ) { + // TODO(andreas): Allow configuring the memory pool. + arrow::MemoryPool* pool = arrow::default_memory_pool(); + auto datatype = arrow_datatype(); + + ARROW_ASSIGN_OR_RAISE(auto builder, arrow::MakeBuilder(datatype, pool)) + if (instances && num_instances > 0) { + RR_RETURN_NOT_OK(Loggable::fill_arrow_array_builder( + static_cast(builder.get()), + instances, + num_instances + )); + } + std::shared_ptr array; + ARROW_RETURN_NOT_OK(builder->Finish(&array)); + return array; + } + rerun::Error Loggable::fill_arrow_array_builder( arrow::FloatBuilder* builder, const components::DepthMeter* elements, size_t num_elements ) { @@ -34,24 +54,4 @@ namespace rerun { return Error::ok(); } - - Result> Loggable::to_arrow( - const components::DepthMeter* instances, size_t num_instances - ) { - // TODO(andreas): Allow configuring the memory pool. - arrow::MemoryPool* pool = arrow::default_memory_pool(); - auto datatype = arrow_datatype(); - - ARROW_ASSIGN_OR_RAISE(auto builder, arrow::MakeBuilder(datatype, pool)) - if (instances && num_instances > 0) { - RR_RETURN_NOT_OK(Loggable::fill_arrow_array_builder( - static_cast(builder.get()), - instances, - num_instances - )); - } - std::shared_ptr array; - ARROW_RETURN_NOT_OK(builder->Finish(&array)); - return array; - } } // namespace rerun diff --git a/rerun_cpp/src/rerun/components/depth_meter.hpp b/rerun_cpp/src/rerun/components/depth_meter.hpp index cb3a53eaf449..016b633e0991 100644 --- a/rerun_cpp/src/rerun/components/depth_meter.hpp +++ b/rerun_cpp/src/rerun/components/depth_meter.hpp @@ -48,15 +48,15 @@ namespace rerun { /// Returns the arrow data type this type corresponds to. static const std::shared_ptr& arrow_datatype(); + /// Serializes an array of `rerun::components::DepthMeter` into an arrow array. + static Result> to_arrow( + const components::DepthMeter* instances, size_t num_instances + ); + /// Fills an arrow array builder with an array of this type. static rerun::Error fill_arrow_array_builder( arrow::FloatBuilder* builder, const components::DepthMeter* elements, size_t num_elements ); - - /// Serializes an array of `rerun::components::DepthMeter` into an arrow array. - static Result> to_arrow( - const components::DepthMeter* instances, size_t num_instances - ); }; } // namespace rerun diff --git a/rerun_cpp/src/rerun/components/disconnected_space.cpp b/rerun_cpp/src/rerun/components/disconnected_space.cpp index 11c762d21514..cc879960f41a 100644 --- a/rerun_cpp/src/rerun/components/disconnected_space.cpp +++ b/rerun_cpp/src/rerun/components/disconnected_space.cpp @@ -15,6 +15,26 @@ namespace rerun { return datatype; } + Result> Loggable::to_arrow( + const components::DisconnectedSpace* instances, size_t num_instances + ) { + // TODO(andreas): Allow configuring the memory pool. + arrow::MemoryPool* pool = arrow::default_memory_pool(); + auto datatype = arrow_datatype(); + + ARROW_ASSIGN_OR_RAISE(auto builder, arrow::MakeBuilder(datatype, pool)) + if (instances && num_instances > 0) { + RR_RETURN_NOT_OK(Loggable::fill_arrow_array_builder( + static_cast(builder.get()), + instances, + num_instances + )); + } + std::shared_ptr array; + ARROW_RETURN_NOT_OK(builder->Finish(&array)); + return array; + } + rerun::Error Loggable::fill_arrow_array_builder( arrow::BooleanBuilder* builder, const components::DisconnectedSpace* elements, size_t num_elements @@ -37,24 +57,4 @@ namespace rerun { return Error::ok(); } - - Result> Loggable::to_arrow( - const components::DisconnectedSpace* instances, size_t num_instances - ) { - // TODO(andreas): Allow configuring the memory pool. - arrow::MemoryPool* pool = arrow::default_memory_pool(); - auto datatype = arrow_datatype(); - - ARROW_ASSIGN_OR_RAISE(auto builder, arrow::MakeBuilder(datatype, pool)) - if (instances && num_instances > 0) { - RR_RETURN_NOT_OK(Loggable::fill_arrow_array_builder( - static_cast(builder.get()), - instances, - num_instances - )); - } - std::shared_ptr array; - ARROW_RETURN_NOT_OK(builder->Finish(&array)); - return array; - } } // namespace rerun diff --git a/rerun_cpp/src/rerun/components/disconnected_space.hpp b/rerun_cpp/src/rerun/components/disconnected_space.hpp index f2ffb2a87295..d6201da79e89 100644 --- a/rerun_cpp/src/rerun/components/disconnected_space.hpp +++ b/rerun_cpp/src/rerun/components/disconnected_space.hpp @@ -49,15 +49,15 @@ namespace rerun { /// Returns the arrow data type this type corresponds to. static const std::shared_ptr& arrow_datatype(); + /// Serializes an array of `rerun::components::DisconnectedSpace` into an arrow array. + static Result> to_arrow( + const components::DisconnectedSpace* instances, size_t num_instances + ); + /// Fills an arrow array builder with an array of this type. static rerun::Error fill_arrow_array_builder( arrow::BooleanBuilder* builder, const components::DisconnectedSpace* elements, size_t num_elements ); - - /// Serializes an array of `rerun::components::DisconnectedSpace` into an arrow array. - static Result> to_arrow( - const components::DisconnectedSpace* instances, size_t num_instances - ); }; } // namespace rerun diff --git a/rerun_cpp/src/rerun/components/draw_order.cpp b/rerun_cpp/src/rerun/components/draw_order.cpp index 714fcf7f8b76..7001c1ea4e7b 100644 --- a/rerun_cpp/src/rerun/components/draw_order.cpp +++ b/rerun_cpp/src/rerun/components/draw_order.cpp @@ -14,6 +14,26 @@ namespace rerun { return datatype; } + Result> Loggable::to_arrow( + const components::DrawOrder* instances, size_t num_instances + ) { + // TODO(andreas): Allow configuring the memory pool. + arrow::MemoryPool* pool = arrow::default_memory_pool(); + auto datatype = arrow_datatype(); + + ARROW_ASSIGN_OR_RAISE(auto builder, arrow::MakeBuilder(datatype, pool)) + if (instances && num_instances > 0) { + RR_RETURN_NOT_OK(Loggable::fill_arrow_array_builder( + static_cast(builder.get()), + instances, + num_instances + )); + } + std::shared_ptr array; + ARROW_RETURN_NOT_OK(builder->Finish(&array)); + return array; + } + rerun::Error Loggable::fill_arrow_array_builder( arrow::FloatBuilder* builder, const components::DrawOrder* elements, size_t num_elements ) { @@ -34,24 +54,4 @@ namespace rerun { return Error::ok(); } - - Result> Loggable::to_arrow( - const components::DrawOrder* instances, size_t num_instances - ) { - // TODO(andreas): Allow configuring the memory pool. - arrow::MemoryPool* pool = arrow::default_memory_pool(); - auto datatype = arrow_datatype(); - - ARROW_ASSIGN_OR_RAISE(auto builder, arrow::MakeBuilder(datatype, pool)) - if (instances && num_instances > 0) { - RR_RETURN_NOT_OK(Loggable::fill_arrow_array_builder( - static_cast(builder.get()), - instances, - num_instances - )); - } - std::shared_ptr array; - ARROW_RETURN_NOT_OK(builder->Finish(&array)); - return array; - } } // namespace rerun diff --git a/rerun_cpp/src/rerun/components/draw_order.hpp b/rerun_cpp/src/rerun/components/draw_order.hpp index 0f2ad957b8fb..a5c07fed17d9 100644 --- a/rerun_cpp/src/rerun/components/draw_order.hpp +++ b/rerun_cpp/src/rerun/components/draw_order.hpp @@ -54,14 +54,14 @@ namespace rerun { /// Returns the arrow data type this type corresponds to. static const std::shared_ptr& arrow_datatype(); - /// Fills an arrow array builder with an array of this type. - static rerun::Error fill_arrow_array_builder( - arrow::FloatBuilder* builder, const components::DrawOrder* elements, size_t num_elements - ); - /// Serializes an array of `rerun::components::DrawOrder` into an arrow array. static Result> to_arrow( const components::DrawOrder* instances, size_t num_instances ); + + /// Fills an arrow array builder with an array of this type. + static rerun::Error fill_arrow_array_builder( + arrow::FloatBuilder* builder, const components::DrawOrder* elements, size_t num_elements + ); }; } // namespace rerun diff --git a/rerun_cpp/src/rerun/components/half_sizes2d.cpp b/rerun_cpp/src/rerun/components/half_sizes2d.cpp deleted file mode 100644 index 0263a1942048..000000000000 --- a/rerun_cpp/src/rerun/components/half_sizes2d.cpp +++ /dev/null @@ -1,52 +0,0 @@ -// DO NOT EDIT! This file was auto-generated by crates/re_types_builder/src/codegen/cpp/mod.rs -// Based on "crates/re_types/definitions/rerun/components/half_sizes2d.fbs". - -#include "half_sizes2d.hpp" - -#include "../datatypes/vec2d.hpp" - -#include -#include - -namespace rerun::components {} - -namespace rerun { - const std::shared_ptr& Loggable::arrow_datatype() { - static const auto datatype = Loggable::arrow_datatype(); - return datatype; - } - - rerun::Error Loggable::fill_arrow_array_builder( - arrow::FixedSizeListBuilder* builder, const components::HalfSizes2D* elements, - size_t num_elements - ) { - static_assert(sizeof(rerun::datatypes::Vec2D) == sizeof(components::HalfSizes2D)); - RR_RETURN_NOT_OK(Loggable::fill_arrow_array_builder( - builder, - reinterpret_cast(elements), - num_elements - )); - - return Error::ok(); - } - - Result> Loggable::to_arrow( - const components::HalfSizes2D* instances, size_t num_instances - ) { - // TODO(andreas): Allow configuring the memory pool. - arrow::MemoryPool* pool = arrow::default_memory_pool(); - auto datatype = arrow_datatype(); - - ARROW_ASSIGN_OR_RAISE(auto builder, arrow::MakeBuilder(datatype, pool)) - if (instances && num_instances > 0) { - RR_RETURN_NOT_OK(Loggable::fill_arrow_array_builder( - static_cast(builder.get()), - instances, - num_instances - )); - } - std::shared_ptr array; - ARROW_RETURN_NOT_OK(builder->Finish(&array)); - return array; - } -} // namespace rerun diff --git a/rerun_cpp/src/rerun/components/half_sizes2d.hpp b/rerun_cpp/src/rerun/components/half_sizes2d.hpp index a25fe228f376..e74e8f4d4bb0 100644 --- a/rerun_cpp/src/rerun/components/half_sizes2d.hpp +++ b/rerun_cpp/src/rerun/components/half_sizes2d.hpp @@ -10,12 +10,6 @@ #include #include -namespace arrow { - class Array; - class DataType; - class FixedSizeListBuilder; -} // namespace arrow - namespace rerun::components { /// **Component**: Half-sizes (extents) of a 2D box along its local axis, starting at its local origin/center. /// @@ -63,8 +57,7 @@ namespace rerun::components { } // namespace rerun::components namespace rerun { - template - struct Loggable; + static_assert(sizeof(rerun::datatypes::Vec2D) == sizeof(components::HalfSizes2D)); /// \private template <> @@ -72,17 +65,15 @@ namespace rerun { static constexpr const char Name[] = "rerun.components.HalfSizes2D"; /// Returns the arrow data type this type corresponds to. - static const std::shared_ptr& arrow_datatype(); - - /// Fills an arrow array builder with an array of this type. - static rerun::Error fill_arrow_array_builder( - arrow::FixedSizeListBuilder* builder, const components::HalfSizes2D* elements, - size_t num_elements - ); + static const std::shared_ptr& arrow_datatype() { + return Loggable::arrow_datatype(); + } /// Serializes an array of `rerun::components::HalfSizes2D` into an arrow array. static Result> to_arrow( const components::HalfSizes2D* instances, size_t num_instances - ); + ) { + return Loggable::to_arrow(&instances->xy, num_instances); + } }; } // namespace rerun diff --git a/rerun_cpp/src/rerun/components/half_sizes3d.cpp b/rerun_cpp/src/rerun/components/half_sizes3d.cpp deleted file mode 100644 index 01c1c5c8c125..000000000000 --- a/rerun_cpp/src/rerun/components/half_sizes3d.cpp +++ /dev/null @@ -1,52 +0,0 @@ -// DO NOT EDIT! This file was auto-generated by crates/re_types_builder/src/codegen/cpp/mod.rs -// Based on "crates/re_types/definitions/rerun/components/half_sizes3d.fbs". - -#include "half_sizes3d.hpp" - -#include "../datatypes/vec3d.hpp" - -#include -#include - -namespace rerun::components {} - -namespace rerun { - const std::shared_ptr& Loggable::arrow_datatype() { - static const auto datatype = Loggable::arrow_datatype(); - return datatype; - } - - rerun::Error Loggable::fill_arrow_array_builder( - arrow::FixedSizeListBuilder* builder, const components::HalfSizes3D* elements, - size_t num_elements - ) { - static_assert(sizeof(rerun::datatypes::Vec3D) == sizeof(components::HalfSizes3D)); - RR_RETURN_NOT_OK(Loggable::fill_arrow_array_builder( - builder, - reinterpret_cast(elements), - num_elements - )); - - return Error::ok(); - } - - Result> Loggable::to_arrow( - const components::HalfSizes3D* instances, size_t num_instances - ) { - // TODO(andreas): Allow configuring the memory pool. - arrow::MemoryPool* pool = arrow::default_memory_pool(); - auto datatype = arrow_datatype(); - - ARROW_ASSIGN_OR_RAISE(auto builder, arrow::MakeBuilder(datatype, pool)) - if (instances && num_instances > 0) { - RR_RETURN_NOT_OK(Loggable::fill_arrow_array_builder( - static_cast(builder.get()), - instances, - num_instances - )); - } - std::shared_ptr array; - ARROW_RETURN_NOT_OK(builder->Finish(&array)); - return array; - } -} // namespace rerun diff --git a/rerun_cpp/src/rerun/components/half_sizes3d.hpp b/rerun_cpp/src/rerun/components/half_sizes3d.hpp index 0a5742dbe574..255c5ee61a80 100644 --- a/rerun_cpp/src/rerun/components/half_sizes3d.hpp +++ b/rerun_cpp/src/rerun/components/half_sizes3d.hpp @@ -10,12 +10,6 @@ #include #include -namespace arrow { - class Array; - class DataType; - class FixedSizeListBuilder; -} // namespace arrow - namespace rerun::components { /// **Component**: Half-sizes (extents) of a 3D box along its local axis, starting at its local origin/center. /// @@ -67,8 +61,7 @@ namespace rerun::components { } // namespace rerun::components namespace rerun { - template - struct Loggable; + static_assert(sizeof(rerun::datatypes::Vec3D) == sizeof(components::HalfSizes3D)); /// \private template <> @@ -76,17 +69,15 @@ namespace rerun { static constexpr const char Name[] = "rerun.components.HalfSizes3D"; /// Returns the arrow data type this type corresponds to. - static const std::shared_ptr& arrow_datatype(); - - /// Fills an arrow array builder with an array of this type. - static rerun::Error fill_arrow_array_builder( - arrow::FixedSizeListBuilder* builder, const components::HalfSizes3D* elements, - size_t num_elements - ); + static const std::shared_ptr& arrow_datatype() { + return Loggable::arrow_datatype(); + } /// Serializes an array of `rerun::components::HalfSizes3D` into an arrow array. static Result> to_arrow( const components::HalfSizes3D* instances, size_t num_instances - ); + ) { + return Loggable::to_arrow(&instances->xyz, num_instances); + } }; } // namespace rerun diff --git a/rerun_cpp/src/rerun/components/instance_key.cpp b/rerun_cpp/src/rerun/components/instance_key.cpp index 96c5514efd5b..c912980cce2b 100644 --- a/rerun_cpp/src/rerun/components/instance_key.cpp +++ b/rerun_cpp/src/rerun/components/instance_key.cpp @@ -14,6 +14,26 @@ namespace rerun { return datatype; } + Result> Loggable::to_arrow( + const components::InstanceKey* instances, size_t num_instances + ) { + // TODO(andreas): Allow configuring the memory pool. + arrow::MemoryPool* pool = arrow::default_memory_pool(); + auto datatype = arrow_datatype(); + + ARROW_ASSIGN_OR_RAISE(auto builder, arrow::MakeBuilder(datatype, pool)) + if (instances && num_instances > 0) { + RR_RETURN_NOT_OK(Loggable::fill_arrow_array_builder( + static_cast(builder.get()), + instances, + num_instances + )); + } + std::shared_ptr array; + ARROW_RETURN_NOT_OK(builder->Finish(&array)); + return array; + } + rerun::Error Loggable::fill_arrow_array_builder( arrow::UInt64Builder* builder, const components::InstanceKey* elements, size_t num_elements ) { @@ -34,24 +54,4 @@ namespace rerun { return Error::ok(); } - - Result> Loggable::to_arrow( - const components::InstanceKey* instances, size_t num_instances - ) { - // TODO(andreas): Allow configuring the memory pool. - arrow::MemoryPool* pool = arrow::default_memory_pool(); - auto datatype = arrow_datatype(); - - ARROW_ASSIGN_OR_RAISE(auto builder, arrow::MakeBuilder(datatype, pool)) - if (instances && num_instances > 0) { - RR_RETURN_NOT_OK(Loggable::fill_arrow_array_builder( - static_cast(builder.get()), - instances, - num_instances - )); - } - std::shared_ptr array; - ARROW_RETURN_NOT_OK(builder->Finish(&array)); - return array; - } } // namespace rerun diff --git a/rerun_cpp/src/rerun/components/instance_key.hpp b/rerun_cpp/src/rerun/components/instance_key.hpp index ab3d8d6c2c72..c3d92a4bcf82 100644 --- a/rerun_cpp/src/rerun/components/instance_key.hpp +++ b/rerun_cpp/src/rerun/components/instance_key.hpp @@ -48,15 +48,15 @@ namespace rerun { /// Returns the arrow data type this type corresponds to. static const std::shared_ptr& arrow_datatype(); + /// Serializes an array of `rerun::components::InstanceKey` into an arrow array. + static Result> to_arrow( + const components::InstanceKey* instances, size_t num_instances + ); + /// Fills an arrow array builder with an array of this type. static rerun::Error fill_arrow_array_builder( arrow::UInt64Builder* builder, const components::InstanceKey* elements, size_t num_elements ); - - /// Serializes an array of `rerun::components::InstanceKey` into an arrow array. - static Result> to_arrow( - const components::InstanceKey* instances, size_t num_instances - ); }; } // namespace rerun diff --git a/rerun_cpp/src/rerun/components/keypoint_id.cpp b/rerun_cpp/src/rerun/components/keypoint_id.cpp deleted file mode 100644 index b4c0b8706cf7..000000000000 --- a/rerun_cpp/src/rerun/components/keypoint_id.cpp +++ /dev/null @@ -1,51 +0,0 @@ -// DO NOT EDIT! This file was auto-generated by crates/re_types_builder/src/codegen/cpp/mod.rs -// Based on "crates/re_types/definitions/rerun/components/keypoint_id.fbs". - -#include "keypoint_id.hpp" - -#include "../datatypes/keypoint_id.hpp" - -#include -#include - -namespace rerun::components {} - -namespace rerun { - const std::shared_ptr& Loggable::arrow_datatype() { - static const auto datatype = Loggable::arrow_datatype(); - return datatype; - } - - rerun::Error Loggable::fill_arrow_array_builder( - arrow::UInt16Builder* builder, const components::KeypointId* elements, size_t num_elements - ) { - static_assert(sizeof(rerun::datatypes::KeypointId) == sizeof(components::KeypointId)); - RR_RETURN_NOT_OK(Loggable::fill_arrow_array_builder( - builder, - reinterpret_cast(elements), - num_elements - )); - - return Error::ok(); - } - - Result> Loggable::to_arrow( - const components::KeypointId* instances, size_t num_instances - ) { - // TODO(andreas): Allow configuring the memory pool. - arrow::MemoryPool* pool = arrow::default_memory_pool(); - auto datatype = arrow_datatype(); - - ARROW_ASSIGN_OR_RAISE(auto builder, arrow::MakeBuilder(datatype, pool)) - if (instances && num_instances > 0) { - RR_RETURN_NOT_OK(Loggable::fill_arrow_array_builder( - static_cast(builder.get()), - instances, - num_instances - )); - } - std::shared_ptr array; - ARROW_RETURN_NOT_OK(builder->Finish(&array)); - return array; - } -} // namespace rerun diff --git a/rerun_cpp/src/rerun/components/keypoint_id.hpp b/rerun_cpp/src/rerun/components/keypoint_id.hpp index 644f3a456839..7a2f7d5c17ac 100644 --- a/rerun_cpp/src/rerun/components/keypoint_id.hpp +++ b/rerun_cpp/src/rerun/components/keypoint_id.hpp @@ -9,17 +9,6 @@ #include #include -namespace arrow { - /// \private - template - class NumericBuilder; - - class Array; - class DataType; - class UInt16Type; - using UInt16Builder = NumericBuilder; -} // namespace arrow - namespace rerun::components { /// **Component**: A 16-bit ID representing a type of semantic keypoint within a class. struct KeypointId { @@ -50,8 +39,7 @@ namespace rerun::components { } // namespace rerun::components namespace rerun { - template - struct Loggable; + static_assert(sizeof(rerun::datatypes::KeypointId) == sizeof(components::KeypointId)); /// \private template <> @@ -59,17 +47,15 @@ namespace rerun { static constexpr const char Name[] = "rerun.components.KeypointId"; /// Returns the arrow data type this type corresponds to. - static const std::shared_ptr& arrow_datatype(); - - /// Fills an arrow array builder with an array of this type. - static rerun::Error fill_arrow_array_builder( - arrow::UInt16Builder* builder, const components::KeypointId* elements, - size_t num_elements - ); + static const std::shared_ptr& arrow_datatype() { + return Loggable::arrow_datatype(); + } /// Serializes an array of `rerun::components::KeypointId` into an arrow array. static Result> to_arrow( const components::KeypointId* instances, size_t num_instances - ); + ) { + return Loggable::to_arrow(&instances->id, num_instances); + } }; } // namespace rerun diff --git a/rerun_cpp/src/rerun/components/line_strip2d.cpp b/rerun_cpp/src/rerun/components/line_strip2d.cpp index 43873719f4c5..12c48e0cf59e 100644 --- a/rerun_cpp/src/rerun/components/line_strip2d.cpp +++ b/rerun_cpp/src/rerun/components/line_strip2d.cpp @@ -18,6 +18,26 @@ namespace rerun { return datatype; } + Result> Loggable::to_arrow( + const components::LineStrip2D* instances, size_t num_instances + ) { + // TODO(andreas): Allow configuring the memory pool. + arrow::MemoryPool* pool = arrow::default_memory_pool(); + auto datatype = arrow_datatype(); + + ARROW_ASSIGN_OR_RAISE(auto builder, arrow::MakeBuilder(datatype, pool)) + if (instances && num_instances > 0) { + RR_RETURN_NOT_OK(Loggable::fill_arrow_array_builder( + static_cast(builder.get()), + instances, + num_instances + )); + } + std::shared_ptr array; + ARROW_RETURN_NOT_OK(builder->Finish(&array)); + return array; + } + rerun::Error Loggable::fill_arrow_array_builder( arrow::ListBuilder* builder, const components::LineStrip2D* elements, size_t num_elements ) { @@ -49,24 +69,4 @@ namespace rerun { return Error::ok(); } - - Result> Loggable::to_arrow( - const components::LineStrip2D* instances, size_t num_instances - ) { - // TODO(andreas): Allow configuring the memory pool. - arrow::MemoryPool* pool = arrow::default_memory_pool(); - auto datatype = arrow_datatype(); - - ARROW_ASSIGN_OR_RAISE(auto builder, arrow::MakeBuilder(datatype, pool)) - if (instances && num_instances > 0) { - RR_RETURN_NOT_OK(Loggable::fill_arrow_array_builder( - static_cast(builder.get()), - instances, - num_instances - )); - } - std::shared_ptr array; - ARROW_RETURN_NOT_OK(builder->Finish(&array)); - return array; - } } // namespace rerun diff --git a/rerun_cpp/src/rerun/components/line_strip2d.hpp b/rerun_cpp/src/rerun/components/line_strip2d.hpp index 96fab3837bae..7b6b482d7d4f 100644 --- a/rerun_cpp/src/rerun/components/line_strip2d.hpp +++ b/rerun_cpp/src/rerun/components/line_strip2d.hpp @@ -58,15 +58,15 @@ namespace rerun { /// Returns the arrow data type this type corresponds to. static const std::shared_ptr& arrow_datatype(); + /// Serializes an array of `rerun::components::LineStrip2D` into an arrow array. + static Result> to_arrow( + const components::LineStrip2D* instances, size_t num_instances + ); + /// Fills an arrow array builder with an array of this type. static rerun::Error fill_arrow_array_builder( arrow::ListBuilder* builder, const components::LineStrip2D* elements, size_t num_elements ); - - /// Serializes an array of `rerun::components::LineStrip2D` into an arrow array. - static Result> to_arrow( - const components::LineStrip2D* instances, size_t num_instances - ); }; } // namespace rerun diff --git a/rerun_cpp/src/rerun/components/line_strip3d.cpp b/rerun_cpp/src/rerun/components/line_strip3d.cpp index 4940300a67c4..394acde9668e 100644 --- a/rerun_cpp/src/rerun/components/line_strip3d.cpp +++ b/rerun_cpp/src/rerun/components/line_strip3d.cpp @@ -18,6 +18,26 @@ namespace rerun { return datatype; } + Result> Loggable::to_arrow( + const components::LineStrip3D* instances, size_t num_instances + ) { + // TODO(andreas): Allow configuring the memory pool. + arrow::MemoryPool* pool = arrow::default_memory_pool(); + auto datatype = arrow_datatype(); + + ARROW_ASSIGN_OR_RAISE(auto builder, arrow::MakeBuilder(datatype, pool)) + if (instances && num_instances > 0) { + RR_RETURN_NOT_OK(Loggable::fill_arrow_array_builder( + static_cast(builder.get()), + instances, + num_instances + )); + } + std::shared_ptr array; + ARROW_RETURN_NOT_OK(builder->Finish(&array)); + return array; + } + rerun::Error Loggable::fill_arrow_array_builder( arrow::ListBuilder* builder, const components::LineStrip3D* elements, size_t num_elements ) { @@ -49,24 +69,4 @@ namespace rerun { return Error::ok(); } - - Result> Loggable::to_arrow( - const components::LineStrip3D* instances, size_t num_instances - ) { - // TODO(andreas): Allow configuring the memory pool. - arrow::MemoryPool* pool = arrow::default_memory_pool(); - auto datatype = arrow_datatype(); - - ARROW_ASSIGN_OR_RAISE(auto builder, arrow::MakeBuilder(datatype, pool)) - if (instances && num_instances > 0) { - RR_RETURN_NOT_OK(Loggable::fill_arrow_array_builder( - static_cast(builder.get()), - instances, - num_instances - )); - } - std::shared_ptr array; - ARROW_RETURN_NOT_OK(builder->Finish(&array)); - return array; - } } // namespace rerun diff --git a/rerun_cpp/src/rerun/components/line_strip3d.hpp b/rerun_cpp/src/rerun/components/line_strip3d.hpp index 19d073ddf816..0cce36238f7d 100644 --- a/rerun_cpp/src/rerun/components/line_strip3d.hpp +++ b/rerun_cpp/src/rerun/components/line_strip3d.hpp @@ -58,15 +58,15 @@ namespace rerun { /// Returns the arrow data type this type corresponds to. static const std::shared_ptr& arrow_datatype(); + /// Serializes an array of `rerun::components::LineStrip3D` into an arrow array. + static Result> to_arrow( + const components::LineStrip3D* instances, size_t num_instances + ); + /// Fills an arrow array builder with an array of this type. static rerun::Error fill_arrow_array_builder( arrow::ListBuilder* builder, const components::LineStrip3D* elements, size_t num_elements ); - - /// Serializes an array of `rerun::components::LineStrip3D` into an arrow array. - static Result> to_arrow( - const components::LineStrip3D* instances, size_t num_instances - ); }; } // namespace rerun diff --git a/rerun_cpp/src/rerun/components/marker_shape.cpp b/rerun_cpp/src/rerun/components/marker_shape.cpp index 0c94783c9748..c8f38822498a 100644 --- a/rerun_cpp/src/rerun/components/marker_shape.cpp +++ b/rerun_cpp/src/rerun/components/marker_shape.cpp @@ -24,6 +24,26 @@ namespace rerun { return datatype; } + Result> Loggable::to_arrow( + const components::MarkerShape* instances, size_t num_instances + ) { + // TODO(andreas): Allow configuring the memory pool. + arrow::MemoryPool* pool = arrow::default_memory_pool(); + auto datatype = arrow_datatype(); + + ARROW_ASSIGN_OR_RAISE(auto builder, arrow::MakeBuilder(datatype, pool)) + if (instances && num_instances > 0) { + RR_RETURN_NOT_OK(Loggable::fill_arrow_array_builder( + static_cast(builder.get()), + instances, + num_instances + )); + } + std::shared_ptr array; + ARROW_RETURN_NOT_OK(builder->Finish(&array)); + return array; + } + rerun::Error Loggable::fill_arrow_array_builder( arrow::SparseUnionBuilder* builder, const components::MarkerShape* elements, size_t num_elements @@ -46,24 +66,4 @@ namespace rerun { return Error::ok(); } - - Result> Loggable::to_arrow( - const components::MarkerShape* instances, size_t num_instances - ) { - // TODO(andreas): Allow configuring the memory pool. - arrow::MemoryPool* pool = arrow::default_memory_pool(); - auto datatype = arrow_datatype(); - - ARROW_ASSIGN_OR_RAISE(auto builder, arrow::MakeBuilder(datatype, pool)) - if (instances && num_instances > 0) { - RR_RETURN_NOT_OK(Loggable::fill_arrow_array_builder( - static_cast(builder.get()), - instances, - num_instances - )); - } - std::shared_ptr array; - ARROW_RETURN_NOT_OK(builder->Finish(&array)); - return array; - } } // namespace rerun diff --git a/rerun_cpp/src/rerun/components/marker_shape.hpp b/rerun_cpp/src/rerun/components/marker_shape.hpp index 8d09bd1e5fe5..d1508f483dcb 100644 --- a/rerun_cpp/src/rerun/components/marker_shape.hpp +++ b/rerun_cpp/src/rerun/components/marker_shape.hpp @@ -52,15 +52,15 @@ namespace rerun { /// Returns the arrow data type this type corresponds to. static const std::shared_ptr& arrow_datatype(); + /// Serializes an array of `rerun::components::MarkerShape` into an arrow array. + static Result> to_arrow( + const components::MarkerShape* instances, size_t num_instances + ); + /// Fills an arrow array builder with an array of this type. static rerun::Error fill_arrow_array_builder( arrow::SparseUnionBuilder* builder, const components::MarkerShape* elements, size_t num_elements ); - - /// Serializes an array of `rerun::components::MarkerShape` into an arrow array. - static Result> to_arrow( - const components::MarkerShape* instances, size_t num_instances - ); }; } // namespace rerun diff --git a/rerun_cpp/src/rerun/components/marker_size.cpp b/rerun_cpp/src/rerun/components/marker_size.cpp index 608d0914cdf8..4f2811b47bfd 100644 --- a/rerun_cpp/src/rerun/components/marker_size.cpp +++ b/rerun_cpp/src/rerun/components/marker_size.cpp @@ -14,6 +14,26 @@ namespace rerun { return datatype; } + Result> Loggable::to_arrow( + const components::MarkerSize* instances, size_t num_instances + ) { + // TODO(andreas): Allow configuring the memory pool. + arrow::MemoryPool* pool = arrow::default_memory_pool(); + auto datatype = arrow_datatype(); + + ARROW_ASSIGN_OR_RAISE(auto builder, arrow::MakeBuilder(datatype, pool)) + if (instances && num_instances > 0) { + RR_RETURN_NOT_OK(Loggable::fill_arrow_array_builder( + static_cast(builder.get()), + instances, + num_instances + )); + } + std::shared_ptr array; + ARROW_RETURN_NOT_OK(builder->Finish(&array)); + return array; + } + rerun::Error Loggable::fill_arrow_array_builder( arrow::FloatBuilder* builder, const components::MarkerSize* elements, size_t num_elements ) { @@ -34,24 +54,4 @@ namespace rerun { return Error::ok(); } - - Result> Loggable::to_arrow( - const components::MarkerSize* instances, size_t num_instances - ) { - // TODO(andreas): Allow configuring the memory pool. - arrow::MemoryPool* pool = arrow::default_memory_pool(); - auto datatype = arrow_datatype(); - - ARROW_ASSIGN_OR_RAISE(auto builder, arrow::MakeBuilder(datatype, pool)) - if (instances && num_instances > 0) { - RR_RETURN_NOT_OK(Loggable::fill_arrow_array_builder( - static_cast(builder.get()), - instances, - num_instances - )); - } - std::shared_ptr array; - ARROW_RETURN_NOT_OK(builder->Finish(&array)); - return array; - } } // namespace rerun diff --git a/rerun_cpp/src/rerun/components/marker_size.hpp b/rerun_cpp/src/rerun/components/marker_size.hpp index 7f78a40fbda2..178245496809 100644 --- a/rerun_cpp/src/rerun/components/marker_size.hpp +++ b/rerun_cpp/src/rerun/components/marker_size.hpp @@ -48,15 +48,15 @@ namespace rerun { /// Returns the arrow data type this type corresponds to. static const std::shared_ptr& arrow_datatype(); + /// Serializes an array of `rerun::components::MarkerSize` into an arrow array. + static Result> to_arrow( + const components::MarkerSize* instances, size_t num_instances + ); + /// Fills an arrow array builder with an array of this type. static rerun::Error fill_arrow_array_builder( arrow::FloatBuilder* builder, const components::MarkerSize* elements, size_t num_elements ); - - /// Serializes an array of `rerun::components::MarkerSize` into an arrow array. - static Result> to_arrow( - const components::MarkerSize* instances, size_t num_instances - ); }; } // namespace rerun diff --git a/rerun_cpp/src/rerun/components/material.cpp b/rerun_cpp/src/rerun/components/material.cpp deleted file mode 100644 index e7dccda5d31c..000000000000 --- a/rerun_cpp/src/rerun/components/material.cpp +++ /dev/null @@ -1,51 +0,0 @@ -// DO NOT EDIT! This file was auto-generated by crates/re_types_builder/src/codegen/cpp/mod.rs -// Based on "crates/re_types/definitions/rerun/components/material.fbs". - -#include "material.hpp" - -#include "../datatypes/material.hpp" - -#include -#include - -namespace rerun::components {} - -namespace rerun { - const std::shared_ptr& Loggable::arrow_datatype() { - static const auto datatype = Loggable::arrow_datatype(); - return datatype; - } - - rerun::Error Loggable::fill_arrow_array_builder( - arrow::StructBuilder* builder, const components::Material* elements, size_t num_elements - ) { - static_assert(sizeof(rerun::datatypes::Material) == sizeof(components::Material)); - RR_RETURN_NOT_OK(Loggable::fill_arrow_array_builder( - builder, - reinterpret_cast(elements), - num_elements - )); - - return Error::ok(); - } - - Result> Loggable::to_arrow( - const components::Material* instances, size_t num_instances - ) { - // TODO(andreas): Allow configuring the memory pool. - arrow::MemoryPool* pool = arrow::default_memory_pool(); - auto datatype = arrow_datatype(); - - ARROW_ASSIGN_OR_RAISE(auto builder, arrow::MakeBuilder(datatype, pool)) - if (instances && num_instances > 0) { - RR_RETURN_NOT_OK(Loggable::fill_arrow_array_builder( - static_cast(builder.get()), - instances, - num_instances - )); - } - std::shared_ptr array; - ARROW_RETURN_NOT_OK(builder->Finish(&array)); - return array; - } -} // namespace rerun diff --git a/rerun_cpp/src/rerun/components/material.hpp b/rerun_cpp/src/rerun/components/material.hpp index dfe861f11724..1549193f0f3c 100644 --- a/rerun_cpp/src/rerun/components/material.hpp +++ b/rerun_cpp/src/rerun/components/material.hpp @@ -11,12 +11,6 @@ #include #include -namespace arrow { - class Array; - class DataType; - class StructBuilder; -} // namespace arrow - namespace rerun::components { /// **Component**: Material properties of a mesh. struct Material { @@ -55,8 +49,7 @@ namespace rerun::components { } // namespace rerun::components namespace rerun { - template - struct Loggable; + static_assert(sizeof(rerun::datatypes::Material) == sizeof(components::Material)); /// \private template <> @@ -64,16 +57,18 @@ namespace rerun { static constexpr const char Name[] = "rerun.components.Material"; /// Returns the arrow data type this type corresponds to. - static const std::shared_ptr& arrow_datatype(); - - /// Fills an arrow array builder with an array of this type. - static rerun::Error fill_arrow_array_builder( - arrow::StructBuilder* builder, const components::Material* elements, size_t num_elements - ); + static const std::shared_ptr& arrow_datatype() { + return Loggable::arrow_datatype(); + } /// Serializes an array of `rerun::components::Material` into an arrow array. static Result> to_arrow( const components::Material* instances, size_t num_instances - ); + ) { + return Loggable::to_arrow( + &instances->material, + num_instances + ); + } }; } // namespace rerun diff --git a/rerun_cpp/src/rerun/components/media_type.cpp b/rerun_cpp/src/rerun/components/media_type.cpp deleted file mode 100644 index fddc1f4e1be9..000000000000 --- a/rerun_cpp/src/rerun/components/media_type.cpp +++ /dev/null @@ -1,51 +0,0 @@ -// DO NOT EDIT! This file was auto-generated by crates/re_types_builder/src/codegen/cpp/mod.rs -// Based on "crates/re_types/definitions/rerun/components/media_type.fbs". - -#include "media_type.hpp" - -#include "../datatypes/utf8.hpp" - -#include -#include - -namespace rerun::components {} - -namespace rerun { - const std::shared_ptr& Loggable::arrow_datatype() { - static const auto datatype = Loggable::arrow_datatype(); - return datatype; - } - - rerun::Error Loggable::fill_arrow_array_builder( - arrow::StringBuilder* builder, const components::MediaType* elements, size_t num_elements - ) { - static_assert(sizeof(rerun::datatypes::Utf8) == sizeof(components::MediaType)); - RR_RETURN_NOT_OK(Loggable::fill_arrow_array_builder( - builder, - reinterpret_cast(elements), - num_elements - )); - - return Error::ok(); - } - - Result> Loggable::to_arrow( - const components::MediaType* instances, size_t num_instances - ) { - // TODO(andreas): Allow configuring the memory pool. - arrow::MemoryPool* pool = arrow::default_memory_pool(); - auto datatype = arrow_datatype(); - - ARROW_ASSIGN_OR_RAISE(auto builder, arrow::MakeBuilder(datatype, pool)) - if (instances && num_instances > 0) { - RR_RETURN_NOT_OK(Loggable::fill_arrow_array_builder( - static_cast(builder.get()), - instances, - num_instances - )); - } - std::shared_ptr array; - ARROW_RETURN_NOT_OK(builder->Finish(&array)); - return array; - } -} // namespace rerun diff --git a/rerun_cpp/src/rerun/components/media_type.hpp b/rerun_cpp/src/rerun/components/media_type.hpp index cb613d9d066a..51c63d5f1d27 100644 --- a/rerun_cpp/src/rerun/components/media_type.hpp +++ b/rerun_cpp/src/rerun/components/media_type.hpp @@ -11,12 +11,6 @@ #include #include -namespace arrow { - class Array; - class DataType; - class StringBuilder; -} // namespace arrow - namespace rerun::components { /// **Component**: A standardized media type (RFC2046, formerly known as MIME types), encoded as a utf8 string. /// @@ -100,8 +94,7 @@ namespace rerun::components { } // namespace rerun::components namespace rerun { - template - struct Loggable; + static_assert(sizeof(rerun::datatypes::Utf8) == sizeof(components::MediaType)); /// \private template <> @@ -109,17 +102,15 @@ namespace rerun { static constexpr const char Name[] = "rerun.components.MediaType"; /// Returns the arrow data type this type corresponds to. - static const std::shared_ptr& arrow_datatype(); - - /// Fills an arrow array builder with an array of this type. - static rerun::Error fill_arrow_array_builder( - arrow::StringBuilder* builder, const components::MediaType* elements, - size_t num_elements - ); + static const std::shared_ptr& arrow_datatype() { + return Loggable::arrow_datatype(); + } /// Serializes an array of `rerun::components::MediaType` into an arrow array. static Result> to_arrow( const components::MediaType* instances, size_t num_instances - ); + ) { + return Loggable::to_arrow(&instances->value, num_instances); + } }; } // namespace rerun diff --git a/rerun_cpp/src/rerun/components/mesh_properties.cpp b/rerun_cpp/src/rerun/components/mesh_properties.cpp deleted file mode 100644 index d31591039ff0..000000000000 --- a/rerun_cpp/src/rerun/components/mesh_properties.cpp +++ /dev/null @@ -1,54 +0,0 @@ -// DO NOT EDIT! This file was auto-generated by crates/re_types_builder/src/codegen/cpp/mod.rs -// Based on "crates/re_types/definitions/rerun/components/mesh_properties.fbs". - -#include "mesh_properties.hpp" - -#include "../datatypes/mesh_properties.hpp" - -#include -#include - -namespace rerun::components {} - -namespace rerun { - const std::shared_ptr& Loggable::arrow_datatype() { - static const auto datatype = Loggable::arrow_datatype(); - return datatype; - } - - rerun::Error Loggable::fill_arrow_array_builder( - arrow::StructBuilder* builder, const components::MeshProperties* elements, - size_t num_elements - ) { - static_assert( - sizeof(rerun::datatypes::MeshProperties) == sizeof(components::MeshProperties) - ); - RR_RETURN_NOT_OK(Loggable::fill_arrow_array_builder( - builder, - reinterpret_cast(elements), - num_elements - )); - - return Error::ok(); - } - - Result> Loggable::to_arrow( - const components::MeshProperties* instances, size_t num_instances - ) { - // TODO(andreas): Allow configuring the memory pool. - arrow::MemoryPool* pool = arrow::default_memory_pool(); - auto datatype = arrow_datatype(); - - ARROW_ASSIGN_OR_RAISE(auto builder, arrow::MakeBuilder(datatype, pool)) - if (instances && num_instances > 0) { - RR_RETURN_NOT_OK(Loggable::fill_arrow_array_builder( - static_cast(builder.get()), - instances, - num_instances - )); - } - std::shared_ptr array; - ARROW_RETURN_NOT_OK(builder->Finish(&array)); - return array; - } -} // namespace rerun diff --git a/rerun_cpp/src/rerun/components/mesh_properties.hpp b/rerun_cpp/src/rerun/components/mesh_properties.hpp index 98a8e5070b76..c40a9f7ea734 100644 --- a/rerun_cpp/src/rerun/components/mesh_properties.hpp +++ b/rerun_cpp/src/rerun/components/mesh_properties.hpp @@ -12,12 +12,6 @@ #include #include -namespace arrow { - class Array; - class DataType; - class StructBuilder; -} // namespace arrow - namespace rerun::components { /// **Component**: Optional triangle indices for a mesh. struct MeshProperties { @@ -56,8 +50,7 @@ namespace rerun::components { } // namespace rerun::components namespace rerun { - template - struct Loggable; + static_assert(sizeof(rerun::datatypes::MeshProperties) == sizeof(components::MeshProperties)); /// \private template <> @@ -65,17 +58,18 @@ namespace rerun { static constexpr const char Name[] = "rerun.components.MeshProperties"; /// Returns the arrow data type this type corresponds to. - static const std::shared_ptr& arrow_datatype(); - - /// Fills an arrow array builder with an array of this type. - static rerun::Error fill_arrow_array_builder( - arrow::StructBuilder* builder, const components::MeshProperties* elements, - size_t num_elements - ); + static const std::shared_ptr& arrow_datatype() { + return Loggable::arrow_datatype(); + } /// Serializes an array of `rerun::components::MeshProperties` into an arrow array. static Result> to_arrow( const components::MeshProperties* instances, size_t num_instances - ); + ) { + return Loggable::to_arrow( + &instances->props, + num_instances + ); + } }; } // namespace rerun diff --git a/rerun_cpp/src/rerun/components/name.cpp b/rerun_cpp/src/rerun/components/name.cpp deleted file mode 100644 index 7f8aa817f2e6..000000000000 --- a/rerun_cpp/src/rerun/components/name.cpp +++ /dev/null @@ -1,51 +0,0 @@ -// DO NOT EDIT! This file was auto-generated by crates/re_types_builder/src/codegen/cpp/mod.rs -// Based on "crates/re_types/definitions/rerun/components/name.fbs". - -#include "name.hpp" - -#include "../datatypes/utf8.hpp" - -#include -#include - -namespace rerun::components {} - -namespace rerun { - const std::shared_ptr& Loggable::arrow_datatype() { - static const auto datatype = Loggable::arrow_datatype(); - return datatype; - } - - rerun::Error Loggable::fill_arrow_array_builder( - arrow::StringBuilder* builder, const components::Name* elements, size_t num_elements - ) { - static_assert(sizeof(rerun::datatypes::Utf8) == sizeof(components::Name)); - RR_RETURN_NOT_OK(Loggable::fill_arrow_array_builder( - builder, - reinterpret_cast(elements), - num_elements - )); - - return Error::ok(); - } - - Result> Loggable::to_arrow( - const components::Name* instances, size_t num_instances - ) { - // TODO(andreas): Allow configuring the memory pool. - arrow::MemoryPool* pool = arrow::default_memory_pool(); - auto datatype = arrow_datatype(); - - ARROW_ASSIGN_OR_RAISE(auto builder, arrow::MakeBuilder(datatype, pool)) - if (instances && num_instances > 0) { - RR_RETURN_NOT_OK(Loggable::fill_arrow_array_builder( - static_cast(builder.get()), - instances, - num_instances - )); - } - std::shared_ptr array; - ARROW_RETURN_NOT_OK(builder->Finish(&array)); - return array; - } -} // namespace rerun diff --git a/rerun_cpp/src/rerun/components/name.hpp b/rerun_cpp/src/rerun/components/name.hpp index de9c3312eca4..fca48489ca70 100644 --- a/rerun_cpp/src/rerun/components/name.hpp +++ b/rerun_cpp/src/rerun/components/name.hpp @@ -11,12 +11,6 @@ #include #include -namespace arrow { - class Array; - class DataType; - class StringBuilder; -} // namespace arrow - namespace rerun::components { /// **Component**: A display name, typically for an entity or a item like a plot series. struct Name { @@ -57,8 +51,7 @@ namespace rerun::components { } // namespace rerun::components namespace rerun { - template - struct Loggable; + static_assert(sizeof(rerun::datatypes::Utf8) == sizeof(components::Name)); /// \private template <> @@ -66,16 +59,15 @@ namespace rerun { static constexpr const char Name[] = "rerun.components.Name"; /// Returns the arrow data type this type corresponds to. - static const std::shared_ptr& arrow_datatype(); - - /// Fills an arrow array builder with an array of this type. - static rerun::Error fill_arrow_array_builder( - arrow::StringBuilder* builder, const components::Name* elements, size_t num_elements - ); + static const std::shared_ptr& arrow_datatype() { + return Loggable::arrow_datatype(); + } /// Serializes an array of `rerun::components::Name` into an arrow array. static Result> to_arrow( const components::Name* instances, size_t num_instances - ); + ) { + return Loggable::to_arrow(&instances->value, num_instances); + } }; } // namespace rerun diff --git a/rerun_cpp/src/rerun/components/out_of_tree_transform3d.cpp b/rerun_cpp/src/rerun/components/out_of_tree_transform3d.cpp deleted file mode 100644 index aa69bf473822..000000000000 --- a/rerun_cpp/src/rerun/components/out_of_tree_transform3d.cpp +++ /dev/null @@ -1,55 +0,0 @@ -// DO NOT EDIT! This file was auto-generated by crates/re_types_builder/src/codegen/cpp/mod.rs -// Based on "crates/re_types/definitions/rerun/components/out_of_tree_transform3d.fbs". - -#include "out_of_tree_transform3d.hpp" - -#include "../datatypes/transform3d.hpp" - -#include -#include - -namespace rerun::components {} - -namespace rerun { - const std::shared_ptr& - Loggable::arrow_datatype() { - static const auto datatype = Loggable::arrow_datatype(); - return datatype; - } - - rerun::Error Loggable::fill_arrow_array_builder( - arrow::DenseUnionBuilder* builder, const components::OutOfTreeTransform3D* elements, - size_t num_elements - ) { - static_assert( - sizeof(rerun::datatypes::Transform3D) == sizeof(components::OutOfTreeTransform3D) - ); - RR_RETURN_NOT_OK(Loggable::fill_arrow_array_builder( - builder, - reinterpret_cast(elements), - num_elements - )); - - return Error::ok(); - } - - Result> Loggable::to_arrow( - const components::OutOfTreeTransform3D* instances, size_t num_instances - ) { - // TODO(andreas): Allow configuring the memory pool. - arrow::MemoryPool* pool = arrow::default_memory_pool(); - auto datatype = arrow_datatype(); - - ARROW_ASSIGN_OR_RAISE(auto builder, arrow::MakeBuilder(datatype, pool)) - if (instances && num_instances > 0) { - RR_RETURN_NOT_OK(Loggable::fill_arrow_array_builder( - static_cast(builder.get()), - instances, - num_instances - )); - } - std::shared_ptr array; - ARROW_RETURN_NOT_OK(builder->Finish(&array)); - return array; - } -} // namespace rerun diff --git a/rerun_cpp/src/rerun/components/out_of_tree_transform3d.hpp b/rerun_cpp/src/rerun/components/out_of_tree_transform3d.hpp index 00e8f7e57cc7..d84c7f59a386 100644 --- a/rerun_cpp/src/rerun/components/out_of_tree_transform3d.hpp +++ b/rerun_cpp/src/rerun/components/out_of_tree_transform3d.hpp @@ -9,12 +9,6 @@ #include #include -namespace arrow { - class Array; - class DataType; - class DenseUnionBuilder; -} // namespace arrow - namespace rerun::components { /// **Component**: An out-of-tree affine transform between two 3D spaces, represented in a given direction. /// @@ -41,8 +35,9 @@ namespace rerun::components { } // namespace rerun::components namespace rerun { - template - struct Loggable; + static_assert( + sizeof(rerun::datatypes::Transform3D) == sizeof(components::OutOfTreeTransform3D) + ); /// \private template <> @@ -50,17 +45,18 @@ namespace rerun { static constexpr const char Name[] = "rerun.components.OutOfTreeTransform3D"; /// Returns the arrow data type this type corresponds to. - static const std::shared_ptr& arrow_datatype(); - - /// Fills an arrow array builder with an array of this type. - static rerun::Error fill_arrow_array_builder( - arrow::DenseUnionBuilder* builder, const components::OutOfTreeTransform3D* elements, - size_t num_elements - ); + static const std::shared_ptr& arrow_datatype() { + return Loggable::arrow_datatype(); + } /// Serializes an array of `rerun::components::OutOfTreeTransform3D` into an arrow array. static Result> to_arrow( const components::OutOfTreeTransform3D* instances, size_t num_instances - ); + ) { + return Loggable::to_arrow( + &instances->repr, + num_instances + ); + } }; } // namespace rerun diff --git a/rerun_cpp/src/rerun/components/pinhole_projection.cpp b/rerun_cpp/src/rerun/components/pinhole_projection.cpp deleted file mode 100644 index 8acae569a288..000000000000 --- a/rerun_cpp/src/rerun/components/pinhole_projection.cpp +++ /dev/null @@ -1,53 +0,0 @@ -// DO NOT EDIT! This file was auto-generated by crates/re_types_builder/src/codegen/cpp/mod.rs -// Based on "crates/re_types/definitions/rerun/components/pinhole_projection.fbs". - -#include "pinhole_projection.hpp" - -#include "../datatypes/mat3x3.hpp" - -#include -#include - -namespace rerun::components {} - -namespace rerun { - const std::shared_ptr& Loggable::arrow_datatype( - ) { - static const auto datatype = Loggable::arrow_datatype(); - return datatype; - } - - rerun::Error Loggable::fill_arrow_array_builder( - arrow::FixedSizeListBuilder* builder, const components::PinholeProjection* elements, - size_t num_elements - ) { - static_assert(sizeof(rerun::datatypes::Mat3x3) == sizeof(components::PinholeProjection)); - RR_RETURN_NOT_OK(Loggable::fill_arrow_array_builder( - builder, - reinterpret_cast(elements), - num_elements - )); - - return Error::ok(); - } - - Result> Loggable::to_arrow( - const components::PinholeProjection* instances, size_t num_instances - ) { - // TODO(andreas): Allow configuring the memory pool. - arrow::MemoryPool* pool = arrow::default_memory_pool(); - auto datatype = arrow_datatype(); - - ARROW_ASSIGN_OR_RAISE(auto builder, arrow::MakeBuilder(datatype, pool)) - if (instances && num_instances > 0) { - RR_RETURN_NOT_OK(Loggable::fill_arrow_array_builder( - static_cast(builder.get()), - instances, - num_instances - )); - } - std::shared_ptr array; - ARROW_RETURN_NOT_OK(builder->Finish(&array)); - return array; - } -} // namespace rerun diff --git a/rerun_cpp/src/rerun/components/pinhole_projection.hpp b/rerun_cpp/src/rerun/components/pinhole_projection.hpp index 37f20bf011c7..ae1c5a7722ae 100644 --- a/rerun_cpp/src/rerun/components/pinhole_projection.hpp +++ b/rerun_cpp/src/rerun/components/pinhole_projection.hpp @@ -10,12 +10,6 @@ #include #include -namespace arrow { - class Array; - class DataType; - class FixedSizeListBuilder; -} // namespace arrow - namespace rerun::components { /// **Component**: Camera projection, from image coordinates to view coordinates. /// @@ -65,8 +59,7 @@ namespace rerun::components { } // namespace rerun::components namespace rerun { - template - struct Loggable; + static_assert(sizeof(rerun::datatypes::Mat3x3) == sizeof(components::PinholeProjection)); /// \private template <> @@ -74,17 +67,18 @@ namespace rerun { static constexpr const char Name[] = "rerun.components.PinholeProjection"; /// Returns the arrow data type this type corresponds to. - static const std::shared_ptr& arrow_datatype(); - - /// Fills an arrow array builder with an array of this type. - static rerun::Error fill_arrow_array_builder( - arrow::FixedSizeListBuilder* builder, const components::PinholeProjection* elements, - size_t num_elements - ); + static const std::shared_ptr& arrow_datatype() { + return Loggable::arrow_datatype(); + } /// Serializes an array of `rerun::components::PinholeProjection` into an arrow array. static Result> to_arrow( const components::PinholeProjection* instances, size_t num_instances - ); + ) { + return Loggable::to_arrow( + &instances->image_from_camera, + num_instances + ); + } }; } // namespace rerun diff --git a/rerun_cpp/src/rerun/components/position2d.cpp b/rerun_cpp/src/rerun/components/position2d.cpp deleted file mode 100644 index 82e70c1c1ae2..000000000000 --- a/rerun_cpp/src/rerun/components/position2d.cpp +++ /dev/null @@ -1,52 +0,0 @@ -// DO NOT EDIT! This file was auto-generated by crates/re_types_builder/src/codegen/cpp/mod.rs -// Based on "crates/re_types/definitions/rerun/components/position2d.fbs". - -#include "position2d.hpp" - -#include "../datatypes/vec2d.hpp" - -#include -#include - -namespace rerun::components {} - -namespace rerun { - const std::shared_ptr& Loggable::arrow_datatype() { - static const auto datatype = Loggable::arrow_datatype(); - return datatype; - } - - rerun::Error Loggable::fill_arrow_array_builder( - arrow::FixedSizeListBuilder* builder, const components::Position2D* elements, - size_t num_elements - ) { - static_assert(sizeof(rerun::datatypes::Vec2D) == sizeof(components::Position2D)); - RR_RETURN_NOT_OK(Loggable::fill_arrow_array_builder( - builder, - reinterpret_cast(elements), - num_elements - )); - - return Error::ok(); - } - - Result> Loggable::to_arrow( - const components::Position2D* instances, size_t num_instances - ) { - // TODO(andreas): Allow configuring the memory pool. - arrow::MemoryPool* pool = arrow::default_memory_pool(); - auto datatype = arrow_datatype(); - - ARROW_ASSIGN_OR_RAISE(auto builder, arrow::MakeBuilder(datatype, pool)) - if (instances && num_instances > 0) { - RR_RETURN_NOT_OK(Loggable::fill_arrow_array_builder( - static_cast(builder.get()), - instances, - num_instances - )); - } - std::shared_ptr array; - ARROW_RETURN_NOT_OK(builder->Finish(&array)); - return array; - } -} // namespace rerun diff --git a/rerun_cpp/src/rerun/components/position2d.hpp b/rerun_cpp/src/rerun/components/position2d.hpp index db6b3746b0d9..03cb29195604 100644 --- a/rerun_cpp/src/rerun/components/position2d.hpp +++ b/rerun_cpp/src/rerun/components/position2d.hpp @@ -10,12 +10,6 @@ #include #include -namespace arrow { - class Array; - class DataType; - class FixedSizeListBuilder; -} // namespace arrow - namespace rerun::components { /// **Component**: A position in 2D space. struct Position2D { @@ -60,8 +54,7 @@ namespace rerun::components { } // namespace rerun::components namespace rerun { - template - struct Loggable; + static_assert(sizeof(rerun::datatypes::Vec2D) == sizeof(components::Position2D)); /// \private template <> @@ -69,17 +62,15 @@ namespace rerun { static constexpr const char Name[] = "rerun.components.Position2D"; /// Returns the arrow data type this type corresponds to. - static const std::shared_ptr& arrow_datatype(); - - /// Fills an arrow array builder with an array of this type. - static rerun::Error fill_arrow_array_builder( - arrow::FixedSizeListBuilder* builder, const components::Position2D* elements, - size_t num_elements - ); + static const std::shared_ptr& arrow_datatype() { + return Loggable::arrow_datatype(); + } /// Serializes an array of `rerun::components::Position2D` into an arrow array. static Result> to_arrow( const components::Position2D* instances, size_t num_instances - ); + ) { + return Loggable::to_arrow(&instances->xy, num_instances); + } }; } // namespace rerun diff --git a/rerun_cpp/src/rerun/components/position3d.cpp b/rerun_cpp/src/rerun/components/position3d.cpp deleted file mode 100644 index 56f30ac7920c..000000000000 --- a/rerun_cpp/src/rerun/components/position3d.cpp +++ /dev/null @@ -1,52 +0,0 @@ -// DO NOT EDIT! This file was auto-generated by crates/re_types_builder/src/codegen/cpp/mod.rs -// Based on "crates/re_types/definitions/rerun/components/position3d.fbs". - -#include "position3d.hpp" - -#include "../datatypes/vec3d.hpp" - -#include -#include - -namespace rerun::components {} - -namespace rerun { - const std::shared_ptr& Loggable::arrow_datatype() { - static const auto datatype = Loggable::arrow_datatype(); - return datatype; - } - - rerun::Error Loggable::fill_arrow_array_builder( - arrow::FixedSizeListBuilder* builder, const components::Position3D* elements, - size_t num_elements - ) { - static_assert(sizeof(rerun::datatypes::Vec3D) == sizeof(components::Position3D)); - RR_RETURN_NOT_OK(Loggable::fill_arrow_array_builder( - builder, - reinterpret_cast(elements), - num_elements - )); - - return Error::ok(); - } - - Result> Loggable::to_arrow( - const components::Position3D* instances, size_t num_instances - ) { - // TODO(andreas): Allow configuring the memory pool. - arrow::MemoryPool* pool = arrow::default_memory_pool(); - auto datatype = arrow_datatype(); - - ARROW_ASSIGN_OR_RAISE(auto builder, arrow::MakeBuilder(datatype, pool)) - if (instances && num_instances > 0) { - RR_RETURN_NOT_OK(Loggable::fill_arrow_array_builder( - static_cast(builder.get()), - instances, - num_instances - )); - } - std::shared_ptr array; - ARROW_RETURN_NOT_OK(builder->Finish(&array)); - return array; - } -} // namespace rerun diff --git a/rerun_cpp/src/rerun/components/position3d.hpp b/rerun_cpp/src/rerun/components/position3d.hpp index bfb5b75fef45..65b818afd79a 100644 --- a/rerun_cpp/src/rerun/components/position3d.hpp +++ b/rerun_cpp/src/rerun/components/position3d.hpp @@ -10,12 +10,6 @@ #include #include -namespace arrow { - class Array; - class DataType; - class FixedSizeListBuilder; -} // namespace arrow - namespace rerun::components { /// **Component**: A position in 3D space. struct Position3D { @@ -64,8 +58,7 @@ namespace rerun::components { } // namespace rerun::components namespace rerun { - template - struct Loggable; + static_assert(sizeof(rerun::datatypes::Vec3D) == sizeof(components::Position3D)); /// \private template <> @@ -73,17 +66,15 @@ namespace rerun { static constexpr const char Name[] = "rerun.components.Position3D"; /// Returns the arrow data type this type corresponds to. - static const std::shared_ptr& arrow_datatype(); - - /// Fills an arrow array builder with an array of this type. - static rerun::Error fill_arrow_array_builder( - arrow::FixedSizeListBuilder* builder, const components::Position3D* elements, - size_t num_elements - ); + static const std::shared_ptr& arrow_datatype() { + return Loggable::arrow_datatype(); + } /// Serializes an array of `rerun::components::Position3D` into an arrow array. static Result> to_arrow( const components::Position3D* instances, size_t num_instances - ); + ) { + return Loggable::to_arrow(&instances->xyz, num_instances); + } }; } // namespace rerun diff --git a/rerun_cpp/src/rerun/components/radius.cpp b/rerun_cpp/src/rerun/components/radius.cpp index 3a1e8f2b3c44..dfa23ce443b5 100644 --- a/rerun_cpp/src/rerun/components/radius.cpp +++ b/rerun_cpp/src/rerun/components/radius.cpp @@ -14,6 +14,26 @@ namespace rerun { return datatype; } + Result> Loggable::to_arrow( + const components::Radius* instances, size_t num_instances + ) { + // TODO(andreas): Allow configuring the memory pool. + arrow::MemoryPool* pool = arrow::default_memory_pool(); + auto datatype = arrow_datatype(); + + ARROW_ASSIGN_OR_RAISE(auto builder, arrow::MakeBuilder(datatype, pool)) + if (instances && num_instances > 0) { + RR_RETURN_NOT_OK(Loggable::fill_arrow_array_builder( + static_cast(builder.get()), + instances, + num_instances + )); + } + std::shared_ptr array; + ARROW_RETURN_NOT_OK(builder->Finish(&array)); + return array; + } + rerun::Error Loggable::fill_arrow_array_builder( arrow::FloatBuilder* builder, const components::Radius* elements, size_t num_elements ) { @@ -34,24 +54,4 @@ namespace rerun { return Error::ok(); } - - Result> Loggable::to_arrow( - const components::Radius* instances, size_t num_instances - ) { - // TODO(andreas): Allow configuring the memory pool. - arrow::MemoryPool* pool = arrow::default_memory_pool(); - auto datatype = arrow_datatype(); - - ARROW_ASSIGN_OR_RAISE(auto builder, arrow::MakeBuilder(datatype, pool)) - if (instances && num_instances > 0) { - RR_RETURN_NOT_OK(Loggable::fill_arrow_array_builder( - static_cast(builder.get()), - instances, - num_instances - )); - } - std::shared_ptr array; - ARROW_RETURN_NOT_OK(builder->Finish(&array)); - return array; - } } // namespace rerun diff --git a/rerun_cpp/src/rerun/components/radius.hpp b/rerun_cpp/src/rerun/components/radius.hpp index e95ada701c2f..2de85bfdad94 100644 --- a/rerun_cpp/src/rerun/components/radius.hpp +++ b/rerun_cpp/src/rerun/components/radius.hpp @@ -48,14 +48,14 @@ namespace rerun { /// Returns the arrow data type this type corresponds to. static const std::shared_ptr& arrow_datatype(); - /// Fills an arrow array builder with an array of this type. - static rerun::Error fill_arrow_array_builder( - arrow::FloatBuilder* builder, const components::Radius* elements, size_t num_elements - ); - /// Serializes an array of `rerun::components::Radius` into an arrow array. static Result> to_arrow( const components::Radius* instances, size_t num_instances ); + + /// Fills an arrow array builder with an array of this type. + static rerun::Error fill_arrow_array_builder( + arrow::FloatBuilder* builder, const components::Radius* elements, size_t num_elements + ); }; } // namespace rerun diff --git a/rerun_cpp/src/rerun/components/range1d.cpp b/rerun_cpp/src/rerun/components/range1d.cpp index 6f35a2a82715..01bb5228f1fa 100644 --- a/rerun_cpp/src/rerun/components/range1d.cpp +++ b/rerun_cpp/src/rerun/components/range1d.cpp @@ -15,6 +15,26 @@ namespace rerun { return datatype; } + Result> Loggable::to_arrow( + const components::Range1D* instances, size_t num_instances + ) { + // TODO(andreas): Allow configuring the memory pool. + arrow::MemoryPool* pool = arrow::default_memory_pool(); + auto datatype = arrow_datatype(); + + ARROW_ASSIGN_OR_RAISE(auto builder, arrow::MakeBuilder(datatype, pool)) + if (instances && num_instances > 0) { + RR_RETURN_NOT_OK(Loggable::fill_arrow_array_builder( + static_cast(builder.get()), + instances, + num_instances + )); + } + std::shared_ptr array; + ARROW_RETURN_NOT_OK(builder->Finish(&array)); + return array; + } + rerun::Error Loggable::fill_arrow_array_builder( arrow::FixedSizeListBuilder* builder, const components::Range1D* elements, size_t num_elements @@ -41,24 +61,4 @@ namespace rerun { return Error::ok(); } - - Result> Loggable::to_arrow( - const components::Range1D* instances, size_t num_instances - ) { - // TODO(andreas): Allow configuring the memory pool. - arrow::MemoryPool* pool = arrow::default_memory_pool(); - auto datatype = arrow_datatype(); - - ARROW_ASSIGN_OR_RAISE(auto builder, arrow::MakeBuilder(datatype, pool)) - if (instances && num_instances > 0) { - RR_RETURN_NOT_OK(Loggable::fill_arrow_array_builder( - static_cast(builder.get()), - instances, - num_instances - )); - } - std::shared_ptr array; - ARROW_RETURN_NOT_OK(builder->Finish(&array)); - return array; - } } // namespace rerun diff --git a/rerun_cpp/src/rerun/components/range1d.hpp b/rerun_cpp/src/rerun/components/range1d.hpp index 17279a212530..874fafbf18e4 100644 --- a/rerun_cpp/src/rerun/components/range1d.hpp +++ b/rerun_cpp/src/rerun/components/range1d.hpp @@ -44,15 +44,15 @@ namespace rerun { /// Returns the arrow data type this type corresponds to. static const std::shared_ptr& arrow_datatype(); + /// Serializes an array of `rerun::components::Range1D` into an arrow array. + static Result> to_arrow( + const components::Range1D* instances, size_t num_instances + ); + /// Fills an arrow array builder with an array of this type. static rerun::Error fill_arrow_array_builder( arrow::FixedSizeListBuilder* builder, const components::Range1D* elements, size_t num_elements ); - - /// Serializes an array of `rerun::components::Range1D` into an arrow array. - static Result> to_arrow( - const components::Range1D* instances, size_t num_instances - ); }; } // namespace rerun diff --git a/rerun_cpp/src/rerun/components/resolution.cpp b/rerun_cpp/src/rerun/components/resolution.cpp deleted file mode 100644 index db08075008a8..000000000000 --- a/rerun_cpp/src/rerun/components/resolution.cpp +++ /dev/null @@ -1,52 +0,0 @@ -// DO NOT EDIT! This file was auto-generated by crates/re_types_builder/src/codegen/cpp/mod.rs -// Based on "crates/re_types/definitions/rerun/components/resolution.fbs". - -#include "resolution.hpp" - -#include "../datatypes/vec2d.hpp" - -#include -#include - -namespace rerun::components {} - -namespace rerun { - const std::shared_ptr& Loggable::arrow_datatype() { - static const auto datatype = Loggable::arrow_datatype(); - return datatype; - } - - rerun::Error Loggable::fill_arrow_array_builder( - arrow::FixedSizeListBuilder* builder, const components::Resolution* elements, - size_t num_elements - ) { - static_assert(sizeof(rerun::datatypes::Vec2D) == sizeof(components::Resolution)); - RR_RETURN_NOT_OK(Loggable::fill_arrow_array_builder( - builder, - reinterpret_cast(elements), - num_elements - )); - - return Error::ok(); - } - - Result> Loggable::to_arrow( - const components::Resolution* instances, size_t num_instances - ) { - // TODO(andreas): Allow configuring the memory pool. - arrow::MemoryPool* pool = arrow::default_memory_pool(); - auto datatype = arrow_datatype(); - - ARROW_ASSIGN_OR_RAISE(auto builder, arrow::MakeBuilder(datatype, pool)) - if (instances && num_instances > 0) { - RR_RETURN_NOT_OK(Loggable::fill_arrow_array_builder( - static_cast(builder.get()), - instances, - num_instances - )); - } - std::shared_ptr array; - ARROW_RETURN_NOT_OK(builder->Finish(&array)); - return array; - } -} // namespace rerun diff --git a/rerun_cpp/src/rerun/components/resolution.hpp b/rerun_cpp/src/rerun/components/resolution.hpp index 97415d075f5a..609e20117d4f 100644 --- a/rerun_cpp/src/rerun/components/resolution.hpp +++ b/rerun_cpp/src/rerun/components/resolution.hpp @@ -10,12 +10,6 @@ #include #include -namespace arrow { - class Array; - class DataType; - class FixedSizeListBuilder; -} // namespace arrow - namespace rerun::components { /// **Component**: Pixel resolution width & height, e.g. of a camera sensor. /// @@ -60,8 +54,7 @@ namespace rerun::components { } // namespace rerun::components namespace rerun { - template - struct Loggable; + static_assert(sizeof(rerun::datatypes::Vec2D) == sizeof(components::Resolution)); /// \private template <> @@ -69,17 +62,18 @@ namespace rerun { static constexpr const char Name[] = "rerun.components.Resolution"; /// Returns the arrow data type this type corresponds to. - static const std::shared_ptr& arrow_datatype(); - - /// Fills an arrow array builder with an array of this type. - static rerun::Error fill_arrow_array_builder( - arrow::FixedSizeListBuilder* builder, const components::Resolution* elements, - size_t num_elements - ); + static const std::shared_ptr& arrow_datatype() { + return Loggable::arrow_datatype(); + } /// Serializes an array of `rerun::components::Resolution` into an arrow array. static Result> to_arrow( const components::Resolution* instances, size_t num_instances - ); + ) { + return Loggable::to_arrow( + &instances->resolution, + num_instances + ); + } }; } // namespace rerun diff --git a/rerun_cpp/src/rerun/components/rotation3d.cpp b/rerun_cpp/src/rerun/components/rotation3d.cpp deleted file mode 100644 index d451df9adead..000000000000 --- a/rerun_cpp/src/rerun/components/rotation3d.cpp +++ /dev/null @@ -1,52 +0,0 @@ -// DO NOT EDIT! This file was auto-generated by crates/re_types_builder/src/codegen/cpp/mod.rs -// Based on "crates/re_types/definitions/rerun/components/rotation3d.fbs". - -#include "rotation3d.hpp" - -#include "../datatypes/rotation3d.hpp" - -#include -#include - -namespace rerun::components {} - -namespace rerun { - const std::shared_ptr& Loggable::arrow_datatype() { - static const auto datatype = Loggable::arrow_datatype(); - return datatype; - } - - rerun::Error Loggable::fill_arrow_array_builder( - arrow::DenseUnionBuilder* builder, const components::Rotation3D* elements, - size_t num_elements - ) { - static_assert(sizeof(rerun::datatypes::Rotation3D) == sizeof(components::Rotation3D)); - RR_RETURN_NOT_OK(Loggable::fill_arrow_array_builder( - builder, - reinterpret_cast(elements), - num_elements - )); - - return Error::ok(); - } - - Result> Loggable::to_arrow( - const components::Rotation3D* instances, size_t num_instances - ) { - // TODO(andreas): Allow configuring the memory pool. - arrow::MemoryPool* pool = arrow::default_memory_pool(); - auto datatype = arrow_datatype(); - - ARROW_ASSIGN_OR_RAISE(auto builder, arrow::MakeBuilder(datatype, pool)) - if (instances && num_instances > 0) { - RR_RETURN_NOT_OK(Loggable::fill_arrow_array_builder( - static_cast(builder.get()), - instances, - num_instances - )); - } - std::shared_ptr array; - ARROW_RETURN_NOT_OK(builder->Finish(&array)); - return array; - } -} // namespace rerun diff --git a/rerun_cpp/src/rerun/components/rotation3d.hpp b/rerun_cpp/src/rerun/components/rotation3d.hpp index 24fd8fd79ef7..ada3dab95177 100644 --- a/rerun_cpp/src/rerun/components/rotation3d.hpp +++ b/rerun_cpp/src/rerun/components/rotation3d.hpp @@ -9,12 +9,6 @@ #include #include -namespace arrow { - class Array; - class DataType; - class DenseUnionBuilder; -} // namespace arrow - namespace rerun::components { /// **Component**: A 3D rotation, represented either by a quaternion or a rotation around axis. struct Rotation3D { @@ -50,8 +44,7 @@ namespace rerun::components { } // namespace rerun::components namespace rerun { - template - struct Loggable; + static_assert(sizeof(rerun::datatypes::Rotation3D) == sizeof(components::Rotation3D)); /// \private template <> @@ -59,17 +52,18 @@ namespace rerun { static constexpr const char Name[] = "rerun.components.Rotation3D"; /// Returns the arrow data type this type corresponds to. - static const std::shared_ptr& arrow_datatype(); - - /// Fills an arrow array builder with an array of this type. - static rerun::Error fill_arrow_array_builder( - arrow::DenseUnionBuilder* builder, const components::Rotation3D* elements, - size_t num_elements - ); + static const std::shared_ptr& arrow_datatype() { + return Loggable::arrow_datatype(); + } /// Serializes an array of `rerun::components::Rotation3D` into an arrow array. static Result> to_arrow( const components::Rotation3D* instances, size_t num_instances - ); + ) { + return Loggable::to_arrow( + &instances->repr, + num_instances + ); + } }; } // namespace rerun diff --git a/rerun_cpp/src/rerun/components/scalar.cpp b/rerun_cpp/src/rerun/components/scalar.cpp index 58ba72656271..a1caa04a506b 100644 --- a/rerun_cpp/src/rerun/components/scalar.cpp +++ b/rerun_cpp/src/rerun/components/scalar.cpp @@ -14,6 +14,26 @@ namespace rerun { return datatype; } + Result> Loggable::to_arrow( + const components::Scalar* instances, size_t num_instances + ) { + // TODO(andreas): Allow configuring the memory pool. + arrow::MemoryPool* pool = arrow::default_memory_pool(); + auto datatype = arrow_datatype(); + + ARROW_ASSIGN_OR_RAISE(auto builder, arrow::MakeBuilder(datatype, pool)) + if (instances && num_instances > 0) { + RR_RETURN_NOT_OK(Loggable::fill_arrow_array_builder( + static_cast(builder.get()), + instances, + num_instances + )); + } + std::shared_ptr array; + ARROW_RETURN_NOT_OK(builder->Finish(&array)); + return array; + } + rerun::Error Loggable::fill_arrow_array_builder( arrow::DoubleBuilder* builder, const components::Scalar* elements, size_t num_elements ) { @@ -34,24 +54,4 @@ namespace rerun { return Error::ok(); } - - Result> Loggable::to_arrow( - const components::Scalar* instances, size_t num_instances - ) { - // TODO(andreas): Allow configuring the memory pool. - arrow::MemoryPool* pool = arrow::default_memory_pool(); - auto datatype = arrow_datatype(); - - ARROW_ASSIGN_OR_RAISE(auto builder, arrow::MakeBuilder(datatype, pool)) - if (instances && num_instances > 0) { - RR_RETURN_NOT_OK(Loggable::fill_arrow_array_builder( - static_cast(builder.get()), - instances, - num_instances - )); - } - std::shared_ptr array; - ARROW_RETURN_NOT_OK(builder->Finish(&array)); - return array; - } } // namespace rerun diff --git a/rerun_cpp/src/rerun/components/scalar.hpp b/rerun_cpp/src/rerun/components/scalar.hpp index 7037bd2de538..a0c628d64125 100644 --- a/rerun_cpp/src/rerun/components/scalar.hpp +++ b/rerun_cpp/src/rerun/components/scalar.hpp @@ -50,14 +50,14 @@ namespace rerun { /// Returns the arrow data type this type corresponds to. static const std::shared_ptr& arrow_datatype(); - /// Fills an arrow array builder with an array of this type. - static rerun::Error fill_arrow_array_builder( - arrow::DoubleBuilder* builder, const components::Scalar* elements, size_t num_elements - ); - /// Serializes an array of `rerun::components::Scalar` into an arrow array. static Result> to_arrow( const components::Scalar* instances, size_t num_instances ); + + /// Fills an arrow array builder with an array of this type. + static rerun::Error fill_arrow_array_builder( + arrow::DoubleBuilder* builder, const components::Scalar* elements, size_t num_elements + ); }; } // namespace rerun diff --git a/rerun_cpp/src/rerun/components/scalar_scattering.cpp b/rerun_cpp/src/rerun/components/scalar_scattering.cpp index 1114744b5fef..757732c059d8 100644 --- a/rerun_cpp/src/rerun/components/scalar_scattering.cpp +++ b/rerun_cpp/src/rerun/components/scalar_scattering.cpp @@ -15,6 +15,26 @@ namespace rerun { return datatype; } + Result> Loggable::to_arrow( + const components::ScalarScattering* instances, size_t num_instances + ) { + // TODO(andreas): Allow configuring the memory pool. + arrow::MemoryPool* pool = arrow::default_memory_pool(); + auto datatype = arrow_datatype(); + + ARROW_ASSIGN_OR_RAISE(auto builder, arrow::MakeBuilder(datatype, pool)) + if (instances && num_instances > 0) { + RR_RETURN_NOT_OK(Loggable::fill_arrow_array_builder( + static_cast(builder.get()), + instances, + num_instances + )); + } + std::shared_ptr array; + ARROW_RETURN_NOT_OK(builder->Finish(&array)); + return array; + } + rerun::Error Loggable::fill_arrow_array_builder( arrow::BooleanBuilder* builder, const components::ScalarScattering* elements, size_t num_elements @@ -37,24 +57,4 @@ namespace rerun { return Error::ok(); } - - Result> Loggable::to_arrow( - const components::ScalarScattering* instances, size_t num_instances - ) { - // TODO(andreas): Allow configuring the memory pool. - arrow::MemoryPool* pool = arrow::default_memory_pool(); - auto datatype = arrow_datatype(); - - ARROW_ASSIGN_OR_RAISE(auto builder, arrow::MakeBuilder(datatype, pool)) - if (instances && num_instances > 0) { - RR_RETURN_NOT_OK(Loggable::fill_arrow_array_builder( - static_cast(builder.get()), - instances, - num_instances - )); - } - std::shared_ptr array; - ARROW_RETURN_NOT_OK(builder->Finish(&array)); - return array; - } } // namespace rerun diff --git a/rerun_cpp/src/rerun/components/scalar_scattering.hpp b/rerun_cpp/src/rerun/components/scalar_scattering.hpp index 4b459530d9a9..8125a85a7dfe 100644 --- a/rerun_cpp/src/rerun/components/scalar_scattering.hpp +++ b/rerun_cpp/src/rerun/components/scalar_scattering.hpp @@ -43,15 +43,15 @@ namespace rerun { /// Returns the arrow data type this type corresponds to. static const std::shared_ptr& arrow_datatype(); + /// Serializes an array of `rerun::components::ScalarScattering` into an arrow array. + static Result> to_arrow( + const components::ScalarScattering* instances, size_t num_instances + ); + /// Fills an arrow array builder with an array of this type. static rerun::Error fill_arrow_array_builder( arrow::BooleanBuilder* builder, const components::ScalarScattering* elements, size_t num_elements ); - - /// Serializes an array of `rerun::components::ScalarScattering` into an arrow array. - static Result> to_arrow( - const components::ScalarScattering* instances, size_t num_instances - ); }; } // namespace rerun diff --git a/rerun_cpp/src/rerun/components/stroke_width.cpp b/rerun_cpp/src/rerun/components/stroke_width.cpp index 842a1cf077b8..6925f383d2e9 100644 --- a/rerun_cpp/src/rerun/components/stroke_width.cpp +++ b/rerun_cpp/src/rerun/components/stroke_width.cpp @@ -14,6 +14,26 @@ namespace rerun { return datatype; } + Result> Loggable::to_arrow( + const components::StrokeWidth* instances, size_t num_instances + ) { + // TODO(andreas): Allow configuring the memory pool. + arrow::MemoryPool* pool = arrow::default_memory_pool(); + auto datatype = arrow_datatype(); + + ARROW_ASSIGN_OR_RAISE(auto builder, arrow::MakeBuilder(datatype, pool)) + if (instances && num_instances > 0) { + RR_RETURN_NOT_OK(Loggable::fill_arrow_array_builder( + static_cast(builder.get()), + instances, + num_instances + )); + } + std::shared_ptr array; + ARROW_RETURN_NOT_OK(builder->Finish(&array)); + return array; + } + rerun::Error Loggable::fill_arrow_array_builder( arrow::FloatBuilder* builder, const components::StrokeWidth* elements, size_t num_elements ) { @@ -34,24 +54,4 @@ namespace rerun { return Error::ok(); } - - Result> Loggable::to_arrow( - const components::StrokeWidth* instances, size_t num_instances - ) { - // TODO(andreas): Allow configuring the memory pool. - arrow::MemoryPool* pool = arrow::default_memory_pool(); - auto datatype = arrow_datatype(); - - ARROW_ASSIGN_OR_RAISE(auto builder, arrow::MakeBuilder(datatype, pool)) - if (instances && num_instances > 0) { - RR_RETURN_NOT_OK(Loggable::fill_arrow_array_builder( - static_cast(builder.get()), - instances, - num_instances - )); - } - std::shared_ptr array; - ARROW_RETURN_NOT_OK(builder->Finish(&array)); - return array; - } } // namespace rerun diff --git a/rerun_cpp/src/rerun/components/stroke_width.hpp b/rerun_cpp/src/rerun/components/stroke_width.hpp index a0576fba9f34..960d2c136607 100644 --- a/rerun_cpp/src/rerun/components/stroke_width.hpp +++ b/rerun_cpp/src/rerun/components/stroke_width.hpp @@ -48,15 +48,15 @@ namespace rerun { /// Returns the arrow data type this type corresponds to. static const std::shared_ptr& arrow_datatype(); + /// Serializes an array of `rerun::components::StrokeWidth` into an arrow array. + static Result> to_arrow( + const components::StrokeWidth* instances, size_t num_instances + ); + /// Fills an arrow array builder with an array of this type. static rerun::Error fill_arrow_array_builder( arrow::FloatBuilder* builder, const components::StrokeWidth* elements, size_t num_elements ); - - /// Serializes an array of `rerun::components::StrokeWidth` into an arrow array. - static Result> to_arrow( - const components::StrokeWidth* instances, size_t num_instances - ); }; } // namespace rerun diff --git a/rerun_cpp/src/rerun/components/tensor_data.cpp b/rerun_cpp/src/rerun/components/tensor_data.cpp deleted file mode 100644 index 01dfe22bd1d0..000000000000 --- a/rerun_cpp/src/rerun/components/tensor_data.cpp +++ /dev/null @@ -1,51 +0,0 @@ -// DO NOT EDIT! This file was auto-generated by crates/re_types_builder/src/codegen/cpp/mod.rs -// Based on "crates/re_types/definitions/rerun/components/tensor_data.fbs". - -#include "tensor_data.hpp" - -#include "../datatypes/tensor_data.hpp" - -#include -#include - -namespace rerun::components {} - -namespace rerun { - const std::shared_ptr& Loggable::arrow_datatype() { - static const auto datatype = Loggable::arrow_datatype(); - return datatype; - } - - rerun::Error Loggable::fill_arrow_array_builder( - arrow::StructBuilder* builder, const components::TensorData* elements, size_t num_elements - ) { - static_assert(sizeof(rerun::datatypes::TensorData) == sizeof(components::TensorData)); - RR_RETURN_NOT_OK(Loggable::fill_arrow_array_builder( - builder, - reinterpret_cast(elements), - num_elements - )); - - return Error::ok(); - } - - Result> Loggable::to_arrow( - const components::TensorData* instances, size_t num_instances - ) { - // TODO(andreas): Allow configuring the memory pool. - arrow::MemoryPool* pool = arrow::default_memory_pool(); - auto datatype = arrow_datatype(); - - ARROW_ASSIGN_OR_RAISE(auto builder, arrow::MakeBuilder(datatype, pool)) - if (instances && num_instances > 0) { - RR_RETURN_NOT_OK(Loggable::fill_arrow_array_builder( - static_cast(builder.get()), - instances, - num_instances - )); - } - std::shared_ptr array; - ARROW_RETURN_NOT_OK(builder->Finish(&array)); - return array; - } -} // namespace rerun diff --git a/rerun_cpp/src/rerun/components/tensor_data.hpp b/rerun_cpp/src/rerun/components/tensor_data.hpp index 6fe507f4b1d7..b3f5a5e75cbc 100644 --- a/rerun_cpp/src/rerun/components/tensor_data.hpp +++ b/rerun_cpp/src/rerun/components/tensor_data.hpp @@ -10,12 +10,6 @@ #include #include -namespace arrow { - class Array; - class DataType; - class StructBuilder; -} // namespace arrow - namespace rerun::components { /// **Component**: A multi-dimensional `Tensor` of data. /// @@ -73,8 +67,7 @@ namespace rerun::components { } // namespace rerun::components namespace rerun { - template - struct Loggable; + static_assert(sizeof(rerun::datatypes::TensorData) == sizeof(components::TensorData)); /// \private template <> @@ -82,17 +75,18 @@ namespace rerun { static constexpr const char Name[] = "rerun.components.TensorData"; /// Returns the arrow data type this type corresponds to. - static const std::shared_ptr& arrow_datatype(); - - /// Fills an arrow array builder with an array of this type. - static rerun::Error fill_arrow_array_builder( - arrow::StructBuilder* builder, const components::TensorData* elements, - size_t num_elements - ); + static const std::shared_ptr& arrow_datatype() { + return Loggable::arrow_datatype(); + } /// Serializes an array of `rerun::components::TensorData` into an arrow array. static Result> to_arrow( const components::TensorData* instances, size_t num_instances - ); + ) { + return Loggable::to_arrow( + &instances->data, + num_instances + ); + } }; } // namespace rerun diff --git a/rerun_cpp/src/rerun/components/texcoord2d.cpp b/rerun_cpp/src/rerun/components/texcoord2d.cpp deleted file mode 100644 index b462646d8168..000000000000 --- a/rerun_cpp/src/rerun/components/texcoord2d.cpp +++ /dev/null @@ -1,52 +0,0 @@ -// DO NOT EDIT! This file was auto-generated by crates/re_types_builder/src/codegen/cpp/mod.rs -// Based on "crates/re_types/definitions/rerun/components/texcoord2d.fbs". - -#include "texcoord2d.hpp" - -#include "../datatypes/vec2d.hpp" - -#include -#include - -namespace rerun::components {} - -namespace rerun { - const std::shared_ptr& Loggable::arrow_datatype() { - static const auto datatype = Loggable::arrow_datatype(); - return datatype; - } - - rerun::Error Loggable::fill_arrow_array_builder( - arrow::FixedSizeListBuilder* builder, const components::Texcoord2D* elements, - size_t num_elements - ) { - static_assert(sizeof(rerun::datatypes::Vec2D) == sizeof(components::Texcoord2D)); - RR_RETURN_NOT_OK(Loggable::fill_arrow_array_builder( - builder, - reinterpret_cast(elements), - num_elements - )); - - return Error::ok(); - } - - Result> Loggable::to_arrow( - const components::Texcoord2D* instances, size_t num_instances - ) { - // TODO(andreas): Allow configuring the memory pool. - arrow::MemoryPool* pool = arrow::default_memory_pool(); - auto datatype = arrow_datatype(); - - ARROW_ASSIGN_OR_RAISE(auto builder, arrow::MakeBuilder(datatype, pool)) - if (instances && num_instances > 0) { - RR_RETURN_NOT_OK(Loggable::fill_arrow_array_builder( - static_cast(builder.get()), - instances, - num_instances - )); - } - std::shared_ptr array; - ARROW_RETURN_NOT_OK(builder->Finish(&array)); - return array; - } -} // namespace rerun diff --git a/rerun_cpp/src/rerun/components/texcoord2d.hpp b/rerun_cpp/src/rerun/components/texcoord2d.hpp index 34101cec6967..ecc635e43ee0 100644 --- a/rerun_cpp/src/rerun/components/texcoord2d.hpp +++ b/rerun_cpp/src/rerun/components/texcoord2d.hpp @@ -10,12 +10,6 @@ #include #include -namespace arrow { - class Array; - class DataType; - class FixedSizeListBuilder; -} // namespace arrow - namespace rerun::components { /// **Component**: A 2D texture UV coordinate. /// @@ -75,8 +69,7 @@ namespace rerun::components { } // namespace rerun::components namespace rerun { - template - struct Loggable; + static_assert(sizeof(rerun::datatypes::Vec2D) == sizeof(components::Texcoord2D)); /// \private template <> @@ -84,17 +77,15 @@ namespace rerun { static constexpr const char Name[] = "rerun.components.Texcoord2D"; /// Returns the arrow data type this type corresponds to. - static const std::shared_ptr& arrow_datatype(); - - /// Fills an arrow array builder with an array of this type. - static rerun::Error fill_arrow_array_builder( - arrow::FixedSizeListBuilder* builder, const components::Texcoord2D* elements, - size_t num_elements - ); + static const std::shared_ptr& arrow_datatype() { + return Loggable::arrow_datatype(); + } /// Serializes an array of `rerun::components::Texcoord2D` into an arrow array. static Result> to_arrow( const components::Texcoord2D* instances, size_t num_instances - ); + ) { + return Loggable::to_arrow(&instances->uv, num_instances); + } }; } // namespace rerun diff --git a/rerun_cpp/src/rerun/components/text.cpp b/rerun_cpp/src/rerun/components/text.cpp deleted file mode 100644 index 8214878892ee..000000000000 --- a/rerun_cpp/src/rerun/components/text.cpp +++ /dev/null @@ -1,51 +0,0 @@ -// DO NOT EDIT! This file was auto-generated by crates/re_types_builder/src/codegen/cpp/mod.rs -// Based on "crates/re_types/definitions/rerun/components/text.fbs". - -#include "text.hpp" - -#include "../datatypes/utf8.hpp" - -#include -#include - -namespace rerun::components {} - -namespace rerun { - const std::shared_ptr& Loggable::arrow_datatype() { - static const auto datatype = Loggable::arrow_datatype(); - return datatype; - } - - rerun::Error Loggable::fill_arrow_array_builder( - arrow::StringBuilder* builder, const components::Text* elements, size_t num_elements - ) { - static_assert(sizeof(rerun::datatypes::Utf8) == sizeof(components::Text)); - RR_RETURN_NOT_OK(Loggable::fill_arrow_array_builder( - builder, - reinterpret_cast(elements), - num_elements - )); - - return Error::ok(); - } - - Result> Loggable::to_arrow( - const components::Text* instances, size_t num_instances - ) { - // TODO(andreas): Allow configuring the memory pool. - arrow::MemoryPool* pool = arrow::default_memory_pool(); - auto datatype = arrow_datatype(); - - ARROW_ASSIGN_OR_RAISE(auto builder, arrow::MakeBuilder(datatype, pool)) - if (instances && num_instances > 0) { - RR_RETURN_NOT_OK(Loggable::fill_arrow_array_builder( - static_cast(builder.get()), - instances, - num_instances - )); - } - std::shared_ptr array; - ARROW_RETURN_NOT_OK(builder->Finish(&array)); - return array; - } -} // namespace rerun diff --git a/rerun_cpp/src/rerun/components/text.hpp b/rerun_cpp/src/rerun/components/text.hpp index baa00d127a70..c788f61b55b4 100644 --- a/rerun_cpp/src/rerun/components/text.hpp +++ b/rerun_cpp/src/rerun/components/text.hpp @@ -11,12 +11,6 @@ #include #include -namespace arrow { - class Array; - class DataType; - class StringBuilder; -} // namespace arrow - namespace rerun::components { /// **Component**: A string of text, e.g. for labels and text documents. struct Text { @@ -57,8 +51,7 @@ namespace rerun::components { } // namespace rerun::components namespace rerun { - template - struct Loggable; + static_assert(sizeof(rerun::datatypes::Utf8) == sizeof(components::Text)); /// \private template <> @@ -66,16 +59,15 @@ namespace rerun { static constexpr const char Name[] = "rerun.components.Text"; /// Returns the arrow data type this type corresponds to. - static const std::shared_ptr& arrow_datatype(); - - /// Fills an arrow array builder with an array of this type. - static rerun::Error fill_arrow_array_builder( - arrow::StringBuilder* builder, const components::Text* elements, size_t num_elements - ); + static const std::shared_ptr& arrow_datatype() { + return Loggable::arrow_datatype(); + } /// Serializes an array of `rerun::components::Text` into an arrow array. static Result> to_arrow( const components::Text* instances, size_t num_instances - ); + ) { + return Loggable::to_arrow(&instances->value, num_instances); + } }; } // namespace rerun diff --git a/rerun_cpp/src/rerun/components/text_log_level.cpp b/rerun_cpp/src/rerun/components/text_log_level.cpp deleted file mode 100644 index 428a9150887b..000000000000 --- a/rerun_cpp/src/rerun/components/text_log_level.cpp +++ /dev/null @@ -1,51 +0,0 @@ -// DO NOT EDIT! This file was auto-generated by crates/re_types_builder/src/codegen/cpp/mod.rs -// Based on "crates/re_types/definitions/rerun/components/text_log_level.fbs". - -#include "text_log_level.hpp" - -#include "../datatypes/utf8.hpp" - -#include -#include - -namespace rerun::components {} - -namespace rerun { - const std::shared_ptr& Loggable::arrow_datatype() { - static const auto datatype = Loggable::arrow_datatype(); - return datatype; - } - - rerun::Error Loggable::fill_arrow_array_builder( - arrow::StringBuilder* builder, const components::TextLogLevel* elements, size_t num_elements - ) { - static_assert(sizeof(rerun::datatypes::Utf8) == sizeof(components::TextLogLevel)); - RR_RETURN_NOT_OK(Loggable::fill_arrow_array_builder( - builder, - reinterpret_cast(elements), - num_elements - )); - - return Error::ok(); - } - - Result> Loggable::to_arrow( - const components::TextLogLevel* instances, size_t num_instances - ) { - // TODO(andreas): Allow configuring the memory pool. - arrow::MemoryPool* pool = arrow::default_memory_pool(); - auto datatype = arrow_datatype(); - - ARROW_ASSIGN_OR_RAISE(auto builder, arrow::MakeBuilder(datatype, pool)) - if (instances && num_instances > 0) { - RR_RETURN_NOT_OK(Loggable::fill_arrow_array_builder( - static_cast(builder.get()), - instances, - num_instances - )); - } - std::shared_ptr array; - ARROW_RETURN_NOT_OK(builder->Finish(&array)); - return array; - } -} // namespace rerun diff --git a/rerun_cpp/src/rerun/components/text_log_level.hpp b/rerun_cpp/src/rerun/components/text_log_level.hpp index 4f29060f3812..d26158b72ef4 100644 --- a/rerun_cpp/src/rerun/components/text_log_level.hpp +++ b/rerun_cpp/src/rerun/components/text_log_level.hpp @@ -11,12 +11,6 @@ #include #include -namespace arrow { - class Array; - class DataType; - class StringBuilder; -} // namespace arrow - namespace rerun::components { /// **Component**: The severity level of a text log message. /// @@ -83,8 +77,7 @@ namespace rerun::components { } // namespace rerun::components namespace rerun { - template - struct Loggable; + static_assert(sizeof(rerun::datatypes::Utf8) == sizeof(components::TextLogLevel)); /// \private template <> @@ -92,17 +85,15 @@ namespace rerun { static constexpr const char Name[] = "rerun.components.TextLogLevel"; /// Returns the arrow data type this type corresponds to. - static const std::shared_ptr& arrow_datatype(); - - /// Fills an arrow array builder with an array of this type. - static rerun::Error fill_arrow_array_builder( - arrow::StringBuilder* builder, const components::TextLogLevel* elements, - size_t num_elements - ); + static const std::shared_ptr& arrow_datatype() { + return Loggable::arrow_datatype(); + } /// Serializes an array of `rerun::components::TextLogLevel` into an arrow array. static Result> to_arrow( const components::TextLogLevel* instances, size_t num_instances - ); + ) { + return Loggable::to_arrow(&instances->value, num_instances); + } }; } // namespace rerun diff --git a/rerun_cpp/src/rerun/components/transform3d.cpp b/rerun_cpp/src/rerun/components/transform3d.cpp deleted file mode 100644 index 2bcd61bf69fc..000000000000 --- a/rerun_cpp/src/rerun/components/transform3d.cpp +++ /dev/null @@ -1,52 +0,0 @@ -// DO NOT EDIT! This file was auto-generated by crates/re_types_builder/src/codegen/cpp/mod.rs -// Based on "crates/re_types/definitions/rerun/components/transform3d.fbs". - -#include "transform3d.hpp" - -#include "../datatypes/transform3d.hpp" - -#include -#include - -namespace rerun::components {} - -namespace rerun { - const std::shared_ptr& Loggable::arrow_datatype() { - static const auto datatype = Loggable::arrow_datatype(); - return datatype; - } - - rerun::Error Loggable::fill_arrow_array_builder( - arrow::DenseUnionBuilder* builder, const components::Transform3D* elements, - size_t num_elements - ) { - static_assert(sizeof(rerun::datatypes::Transform3D) == sizeof(components::Transform3D)); - RR_RETURN_NOT_OK(Loggable::fill_arrow_array_builder( - builder, - reinterpret_cast(elements), - num_elements - )); - - return Error::ok(); - } - - Result> Loggable::to_arrow( - const components::Transform3D* instances, size_t num_instances - ) { - // TODO(andreas): Allow configuring the memory pool. - arrow::MemoryPool* pool = arrow::default_memory_pool(); - auto datatype = arrow_datatype(); - - ARROW_ASSIGN_OR_RAISE(auto builder, arrow::MakeBuilder(datatype, pool)) - if (instances && num_instances > 0) { - RR_RETURN_NOT_OK(Loggable::fill_arrow_array_builder( - static_cast(builder.get()), - instances, - num_instances - )); - } - std::shared_ptr array; - ARROW_RETURN_NOT_OK(builder->Finish(&array)); - return array; - } -} // namespace rerun diff --git a/rerun_cpp/src/rerun/components/transform3d.hpp b/rerun_cpp/src/rerun/components/transform3d.hpp index 3d29d6f59ea0..cbe1121ce920 100644 --- a/rerun_cpp/src/rerun/components/transform3d.hpp +++ b/rerun_cpp/src/rerun/components/transform3d.hpp @@ -9,12 +9,6 @@ #include #include -namespace arrow { - class Array; - class DataType; - class DenseUnionBuilder; -} // namespace arrow - namespace rerun::components { /// **Component**: An affine transform between two 3D spaces, represented in a given direction. struct Transform3D { @@ -39,8 +33,7 @@ namespace rerun::components { } // namespace rerun::components namespace rerun { - template - struct Loggable; + static_assert(sizeof(rerun::datatypes::Transform3D) == sizeof(components::Transform3D)); /// \private template <> @@ -48,17 +41,18 @@ namespace rerun { static constexpr const char Name[] = "rerun.components.Transform3D"; /// Returns the arrow data type this type corresponds to. - static const std::shared_ptr& arrow_datatype(); - - /// Fills an arrow array builder with an array of this type. - static rerun::Error fill_arrow_array_builder( - arrow::DenseUnionBuilder* builder, const components::Transform3D* elements, - size_t num_elements - ); + static const std::shared_ptr& arrow_datatype() { + return Loggable::arrow_datatype(); + } /// Serializes an array of `rerun::components::Transform3D` into an arrow array. static Result> to_arrow( const components::Transform3D* instances, size_t num_instances - ); + ) { + return Loggable::to_arrow( + &instances->repr, + num_instances + ); + } }; } // namespace rerun diff --git a/rerun_cpp/src/rerun/components/vector2d.cpp b/rerun_cpp/src/rerun/components/vector2d.cpp deleted file mode 100644 index 5a5c0210317c..000000000000 --- a/rerun_cpp/src/rerun/components/vector2d.cpp +++ /dev/null @@ -1,52 +0,0 @@ -// DO NOT EDIT! This file was auto-generated by crates/re_types_builder/src/codegen/cpp/mod.rs -// Based on "crates/re_types/definitions/rerun/components/vector2d.fbs". - -#include "vector2d.hpp" - -#include "../datatypes/vec2d.hpp" - -#include -#include - -namespace rerun::components {} - -namespace rerun { - const std::shared_ptr& Loggable::arrow_datatype() { - static const auto datatype = Loggable::arrow_datatype(); - return datatype; - } - - rerun::Error Loggable::fill_arrow_array_builder( - arrow::FixedSizeListBuilder* builder, const components::Vector2D* elements, - size_t num_elements - ) { - static_assert(sizeof(rerun::datatypes::Vec2D) == sizeof(components::Vector2D)); - RR_RETURN_NOT_OK(Loggable::fill_arrow_array_builder( - builder, - reinterpret_cast(elements), - num_elements - )); - - return Error::ok(); - } - - Result> Loggable::to_arrow( - const components::Vector2D* instances, size_t num_instances - ) { - // TODO(andreas): Allow configuring the memory pool. - arrow::MemoryPool* pool = arrow::default_memory_pool(); - auto datatype = arrow_datatype(); - - ARROW_ASSIGN_OR_RAISE(auto builder, arrow::MakeBuilder(datatype, pool)) - if (instances && num_instances > 0) { - RR_RETURN_NOT_OK(Loggable::fill_arrow_array_builder( - static_cast(builder.get()), - instances, - num_instances - )); - } - std::shared_ptr array; - ARROW_RETURN_NOT_OK(builder->Finish(&array)); - return array; - } -} // namespace rerun diff --git a/rerun_cpp/src/rerun/components/vector2d.hpp b/rerun_cpp/src/rerun/components/vector2d.hpp index fadc46f62d15..65bc9aeffd7e 100644 --- a/rerun_cpp/src/rerun/components/vector2d.hpp +++ b/rerun_cpp/src/rerun/components/vector2d.hpp @@ -10,12 +10,6 @@ #include #include -namespace arrow { - class Array; - class DataType; - class FixedSizeListBuilder; -} // namespace arrow - namespace rerun::components { /// **Component**: A vector in 2D space. struct Vector2D { @@ -63,8 +57,7 @@ namespace rerun::components { } // namespace rerun::components namespace rerun { - template - struct Loggable; + static_assert(sizeof(rerun::datatypes::Vec2D) == sizeof(components::Vector2D)); /// \private template <> @@ -72,17 +65,15 @@ namespace rerun { static constexpr const char Name[] = "rerun.components.Vector2D"; /// Returns the arrow data type this type corresponds to. - static const std::shared_ptr& arrow_datatype(); - - /// Fills an arrow array builder with an array of this type. - static rerun::Error fill_arrow_array_builder( - arrow::FixedSizeListBuilder* builder, const components::Vector2D* elements, - size_t num_elements - ); + static const std::shared_ptr& arrow_datatype() { + return Loggable::arrow_datatype(); + } /// Serializes an array of `rerun::components::Vector2D` into an arrow array. static Result> to_arrow( const components::Vector2D* instances, size_t num_instances - ); + ) { + return Loggable::to_arrow(&instances->vector, num_instances); + } }; } // namespace rerun diff --git a/rerun_cpp/src/rerun/components/vector3d.cpp b/rerun_cpp/src/rerun/components/vector3d.cpp deleted file mode 100644 index 422d60a133db..000000000000 --- a/rerun_cpp/src/rerun/components/vector3d.cpp +++ /dev/null @@ -1,52 +0,0 @@ -// DO NOT EDIT! This file was auto-generated by crates/re_types_builder/src/codegen/cpp/mod.rs -// Based on "crates/re_types/definitions/rerun/components/vector3d.fbs". - -#include "vector3d.hpp" - -#include "../datatypes/vec3d.hpp" - -#include -#include - -namespace rerun::components {} - -namespace rerun { - const std::shared_ptr& Loggable::arrow_datatype() { - static const auto datatype = Loggable::arrow_datatype(); - return datatype; - } - - rerun::Error Loggable::fill_arrow_array_builder( - arrow::FixedSizeListBuilder* builder, const components::Vector3D* elements, - size_t num_elements - ) { - static_assert(sizeof(rerun::datatypes::Vec3D) == sizeof(components::Vector3D)); - RR_RETURN_NOT_OK(Loggable::fill_arrow_array_builder( - builder, - reinterpret_cast(elements), - num_elements - )); - - return Error::ok(); - } - - Result> Loggable::to_arrow( - const components::Vector3D* instances, size_t num_instances - ) { - // TODO(andreas): Allow configuring the memory pool. - arrow::MemoryPool* pool = arrow::default_memory_pool(); - auto datatype = arrow_datatype(); - - ARROW_ASSIGN_OR_RAISE(auto builder, arrow::MakeBuilder(datatype, pool)) - if (instances && num_instances > 0) { - RR_RETURN_NOT_OK(Loggable::fill_arrow_array_builder( - static_cast(builder.get()), - instances, - num_instances - )); - } - std::shared_ptr array; - ARROW_RETURN_NOT_OK(builder->Finish(&array)); - return array; - } -} // namespace rerun diff --git a/rerun_cpp/src/rerun/components/vector3d.hpp b/rerun_cpp/src/rerun/components/vector3d.hpp index 3e30e05c9f37..96c55af07c86 100644 --- a/rerun_cpp/src/rerun/components/vector3d.hpp +++ b/rerun_cpp/src/rerun/components/vector3d.hpp @@ -10,12 +10,6 @@ #include #include -namespace arrow { - class Array; - class DataType; - class FixedSizeListBuilder; -} // namespace arrow - namespace rerun::components { /// **Component**: A vector in 3D space. struct Vector3D { @@ -67,8 +61,7 @@ namespace rerun::components { } // namespace rerun::components namespace rerun { - template - struct Loggable; + static_assert(sizeof(rerun::datatypes::Vec3D) == sizeof(components::Vector3D)); /// \private template <> @@ -76,17 +69,15 @@ namespace rerun { static constexpr const char Name[] = "rerun.components.Vector3D"; /// Returns the arrow data type this type corresponds to. - static const std::shared_ptr& arrow_datatype(); - - /// Fills an arrow array builder with an array of this type. - static rerun::Error fill_arrow_array_builder( - arrow::FixedSizeListBuilder* builder, const components::Vector3D* elements, - size_t num_elements - ); + static const std::shared_ptr& arrow_datatype() { + return Loggable::arrow_datatype(); + } /// Serializes an array of `rerun::components::Vector3D` into an arrow array. static Result> to_arrow( const components::Vector3D* instances, size_t num_instances - ); + ) { + return Loggable::to_arrow(&instances->vector, num_instances); + } }; } // namespace rerun diff --git a/rerun_cpp/src/rerun/components/view_coordinates.cpp b/rerun_cpp/src/rerun/components/view_coordinates.cpp index b587dba4d725..78db36544098 100644 --- a/rerun_cpp/src/rerun/components/view_coordinates.cpp +++ b/rerun_cpp/src/rerun/components/view_coordinates.cpp @@ -16,6 +16,26 @@ namespace rerun { return datatype; } + Result> Loggable::to_arrow( + const components::ViewCoordinates* instances, size_t num_instances + ) { + // TODO(andreas): Allow configuring the memory pool. + arrow::MemoryPool* pool = arrow::default_memory_pool(); + auto datatype = arrow_datatype(); + + ARROW_ASSIGN_OR_RAISE(auto builder, arrow::MakeBuilder(datatype, pool)) + if (instances && num_instances > 0) { + RR_RETURN_NOT_OK(Loggable::fill_arrow_array_builder( + static_cast(builder.get()), + instances, + num_instances + )); + } + std::shared_ptr array; + ARROW_RETURN_NOT_OK(builder->Finish(&array)); + return array; + } + rerun::Error Loggable::fill_arrow_array_builder( arrow::FixedSizeListBuilder* builder, const components::ViewCoordinates* elements, size_t num_elements @@ -42,24 +62,4 @@ namespace rerun { return Error::ok(); } - - Result> Loggable::to_arrow( - const components::ViewCoordinates* instances, size_t num_instances - ) { - // TODO(andreas): Allow configuring the memory pool. - arrow::MemoryPool* pool = arrow::default_memory_pool(); - auto datatype = arrow_datatype(); - - ARROW_ASSIGN_OR_RAISE(auto builder, arrow::MakeBuilder(datatype, pool)) - if (instances && num_instances > 0) { - RR_RETURN_NOT_OK(Loggable::fill_arrow_array_builder( - static_cast(builder.get()), - instances, - num_instances - )); - } - std::shared_ptr array; - ARROW_RETURN_NOT_OK(builder->Finish(&array)); - return array; - } } // namespace rerun diff --git a/rerun_cpp/src/rerun/components/view_coordinates.hpp b/rerun_cpp/src/rerun/components/view_coordinates.hpp index 0fe2b86191e7..f06fa7d28db4 100644 --- a/rerun_cpp/src/rerun/components/view_coordinates.hpp +++ b/rerun_cpp/src/rerun/components/view_coordinates.hpp @@ -144,15 +144,15 @@ namespace rerun { /// Returns the arrow data type this type corresponds to. static const std::shared_ptr& arrow_datatype(); + /// Serializes an array of `rerun::components::ViewCoordinates` into an arrow array. + static Result> to_arrow( + const components::ViewCoordinates* instances, size_t num_instances + ); + /// Fills an arrow array builder with an array of this type. static rerun::Error fill_arrow_array_builder( arrow::FixedSizeListBuilder* builder, const components::ViewCoordinates* elements, size_t num_elements ); - - /// Serializes an array of `rerun::components::ViewCoordinates` into an arrow array. - static Result> to_arrow( - const components::ViewCoordinates* instances, size_t num_instances - ); }; } // namespace rerun diff --git a/rerun_cpp/src/rerun/components/visualizer_overrides.cpp b/rerun_cpp/src/rerun/components/visualizer_overrides.cpp index f8f1181e523c..758042b5dd24 100644 --- a/rerun_cpp/src/rerun/components/visualizer_overrides.cpp +++ b/rerun_cpp/src/rerun/components/visualizer_overrides.cpp @@ -15,6 +15,26 @@ namespace rerun { return datatype; } + Result> Loggable::to_arrow( + const components::VisualizerOverrides* instances, size_t num_instances + ) { + // TODO(andreas): Allow configuring the memory pool. + arrow::MemoryPool* pool = arrow::default_memory_pool(); + auto datatype = arrow_datatype(); + + ARROW_ASSIGN_OR_RAISE(auto builder, arrow::MakeBuilder(datatype, pool)) + if (instances && num_instances > 0) { + RR_RETURN_NOT_OK(Loggable::fill_arrow_array_builder( + static_cast(builder.get()), + instances, + num_instances + )); + } + std::shared_ptr array; + ARROW_RETURN_NOT_OK(builder->Finish(&array)); + return array; + } + rerun::Error Loggable::fill_arrow_array_builder( arrow::ListBuilder* builder, const components::VisualizerOverrides* elements, size_t num_elements @@ -43,24 +63,4 @@ namespace rerun { return Error::ok(); } - - Result> Loggable::to_arrow( - const components::VisualizerOverrides* instances, size_t num_instances - ) { - // TODO(andreas): Allow configuring the memory pool. - arrow::MemoryPool* pool = arrow::default_memory_pool(); - auto datatype = arrow_datatype(); - - ARROW_ASSIGN_OR_RAISE(auto builder, arrow::MakeBuilder(datatype, pool)) - if (instances && num_instances > 0) { - RR_RETURN_NOT_OK(Loggable::fill_arrow_array_builder( - static_cast(builder.get()), - instances, - num_instances - )); - } - std::shared_ptr array; - ARROW_RETURN_NOT_OK(builder->Finish(&array)); - return array; - } } // namespace rerun diff --git a/rerun_cpp/src/rerun/components/visualizer_overrides.hpp b/rerun_cpp/src/rerun/components/visualizer_overrides.hpp index 9e06a1d3d9c8..c38ebca1600b 100644 --- a/rerun_cpp/src/rerun/components/visualizer_overrides.hpp +++ b/rerun_cpp/src/rerun/components/visualizer_overrides.hpp @@ -46,15 +46,15 @@ namespace rerun { /// Returns the arrow data type this type corresponds to. static const std::shared_ptr& arrow_datatype(); + /// Serializes an array of `rerun::components::VisualizerOverrides` into an arrow array. + static Result> to_arrow( + const components::VisualizerOverrides* instances, size_t num_instances + ); + /// Fills an arrow array builder with an array of this type. static rerun::Error fill_arrow_array_builder( arrow::ListBuilder* builder, const components::VisualizerOverrides* elements, size_t num_elements ); - - /// Serializes an array of `rerun::components::VisualizerOverrides` into an arrow array. - static Result> to_arrow( - const components::VisualizerOverrides* instances, size_t num_instances - ); }; } // namespace rerun diff --git a/rerun_cpp/src/rerun/datatypes/angle.cpp b/rerun_cpp/src/rerun/datatypes/angle.cpp index cf54c6868a26..1f7d22dff114 100644 --- a/rerun_cpp/src/rerun/datatypes/angle.cpp +++ b/rerun_cpp/src/rerun/datatypes/angle.cpp @@ -18,6 +18,26 @@ namespace rerun { return datatype; } + Result> Loggable::to_arrow( + const datatypes::Angle* instances, size_t num_instances + ) { + // TODO(andreas): Allow configuring the memory pool. + arrow::MemoryPool* pool = arrow::default_memory_pool(); + auto datatype = arrow_datatype(); + + ARROW_ASSIGN_OR_RAISE(auto builder, arrow::MakeBuilder(datatype, pool)) + if (instances && num_instances > 0) { + RR_RETURN_NOT_OK(Loggable::fill_arrow_array_builder( + static_cast(builder.get()), + instances, + num_instances + )); + } + std::shared_ptr array; + ARROW_RETURN_NOT_OK(builder->Finish(&array)); + return array; + } + rerun::Error Loggable::fill_arrow_array_builder( arrow::DenseUnionBuilder* builder, const datatypes::Angle* elements, size_t num_elements ) { @@ -64,24 +84,4 @@ namespace rerun { return Error::ok(); } - - Result> Loggable::to_arrow( - const datatypes::Angle* instances, size_t num_instances - ) { - // TODO(andreas): Allow configuring the memory pool. - arrow::MemoryPool* pool = arrow::default_memory_pool(); - auto datatype = arrow_datatype(); - - ARROW_ASSIGN_OR_RAISE(auto builder, arrow::MakeBuilder(datatype, pool)) - if (instances && num_instances > 0) { - RR_RETURN_NOT_OK(Loggable::fill_arrow_array_builder( - static_cast(builder.get()), - instances, - num_instances - )); - } - std::shared_ptr array; - ARROW_RETURN_NOT_OK(builder->Finish(&array)); - return array; - } } // namespace rerun diff --git a/rerun_cpp/src/rerun/datatypes/angle.hpp b/rerun_cpp/src/rerun/datatypes/angle.hpp index c8a67fb1b386..8a907dd04158 100644 --- a/rerun_cpp/src/rerun/datatypes/angle.hpp +++ b/rerun_cpp/src/rerun/datatypes/angle.hpp @@ -142,14 +142,14 @@ namespace rerun { /// Returns the arrow data type this type corresponds to. static const std::shared_ptr& arrow_datatype(); - /// Fills an arrow array builder with an array of this type. - static rerun::Error fill_arrow_array_builder( - arrow::DenseUnionBuilder* builder, const datatypes::Angle* elements, size_t num_elements - ); - /// Serializes an array of `rerun::datatypes::Angle` into an arrow array. static Result> to_arrow( const datatypes::Angle* instances, size_t num_instances ); + + /// Fills an arrow array builder with an array of this type. + static rerun::Error fill_arrow_array_builder( + arrow::DenseUnionBuilder* builder, const datatypes::Angle* elements, size_t num_elements + ); }; } // namespace rerun diff --git a/rerun_cpp/src/rerun/datatypes/annotation_info.cpp b/rerun_cpp/src/rerun/datatypes/annotation_info.cpp index 289f4be1894e..2d6c14064de0 100644 --- a/rerun_cpp/src/rerun/datatypes/annotation_info.cpp +++ b/rerun_cpp/src/rerun/datatypes/annotation_info.cpp @@ -21,6 +21,26 @@ namespace rerun { return datatype; } + Result> Loggable::to_arrow( + const datatypes::AnnotationInfo* instances, size_t num_instances + ) { + // TODO(andreas): Allow configuring the memory pool. + arrow::MemoryPool* pool = arrow::default_memory_pool(); + auto datatype = arrow_datatype(); + + ARROW_ASSIGN_OR_RAISE(auto builder, arrow::MakeBuilder(datatype, pool)) + if (instances && num_instances > 0) { + RR_RETURN_NOT_OK(Loggable::fill_arrow_array_builder( + static_cast(builder.get()), + instances, + num_instances + )); + } + std::shared_ptr array; + ARROW_RETURN_NOT_OK(builder->Finish(&array)); + return array; + } + rerun::Error Loggable::fill_arrow_array_builder( arrow::StructBuilder* builder, const datatypes::AnnotationInfo* elements, size_t num_elements @@ -78,24 +98,4 @@ namespace rerun { return Error::ok(); } - - Result> Loggable::to_arrow( - const datatypes::AnnotationInfo* instances, size_t num_instances - ) { - // TODO(andreas): Allow configuring the memory pool. - arrow::MemoryPool* pool = arrow::default_memory_pool(); - auto datatype = arrow_datatype(); - - ARROW_ASSIGN_OR_RAISE(auto builder, arrow::MakeBuilder(datatype, pool)) - if (instances && num_instances > 0) { - RR_RETURN_NOT_OK(Loggable::fill_arrow_array_builder( - static_cast(builder.get()), - instances, - num_instances - )); - } - std::shared_ptr array; - ARROW_RETURN_NOT_OK(builder->Finish(&array)); - return array; - } } // namespace rerun diff --git a/rerun_cpp/src/rerun/datatypes/annotation_info.hpp b/rerun_cpp/src/rerun/datatypes/annotation_info.hpp index b05e28c22352..719196731ec7 100644 --- a/rerun_cpp/src/rerun/datatypes/annotation_info.hpp +++ b/rerun_cpp/src/rerun/datatypes/annotation_info.hpp @@ -61,15 +61,15 @@ namespace rerun { /// Returns the arrow data type this type corresponds to. static const std::shared_ptr& arrow_datatype(); + /// Serializes an array of `rerun::datatypes::AnnotationInfo` into an arrow array. + static Result> to_arrow( + const datatypes::AnnotationInfo* instances, size_t num_instances + ); + /// Fills an arrow array builder with an array of this type. static rerun::Error fill_arrow_array_builder( arrow::StructBuilder* builder, const datatypes::AnnotationInfo* elements, size_t num_elements ); - - /// Serializes an array of `rerun::datatypes::AnnotationInfo` into an arrow array. - static Result> to_arrow( - const datatypes::AnnotationInfo* instances, size_t num_instances - ); }; } // namespace rerun diff --git a/rerun_cpp/src/rerun/datatypes/bool.cpp b/rerun_cpp/src/rerun/datatypes/bool.cpp index b01282f23e30..5c8622cfa362 100644 --- a/rerun_cpp/src/rerun/datatypes/bool.cpp +++ b/rerun_cpp/src/rerun/datatypes/bool.cpp @@ -14,6 +14,26 @@ namespace rerun { return datatype; } + Result> Loggable::to_arrow( + const datatypes::Bool* instances, size_t num_instances + ) { + // TODO(andreas): Allow configuring the memory pool. + arrow::MemoryPool* pool = arrow::default_memory_pool(); + auto datatype = arrow_datatype(); + + ARROW_ASSIGN_OR_RAISE(auto builder, arrow::MakeBuilder(datatype, pool)) + if (instances && num_instances > 0) { + RR_RETURN_NOT_OK(Loggable::fill_arrow_array_builder( + static_cast(builder.get()), + instances, + num_instances + )); + } + std::shared_ptr array; + ARROW_RETURN_NOT_OK(builder->Finish(&array)); + return array; + } + rerun::Error Loggable::fill_arrow_array_builder( arrow::BooleanBuilder* builder, const datatypes::Bool* elements, size_t num_elements ) { @@ -35,24 +55,4 @@ namespace rerun { return Error::ok(); } - - Result> Loggable::to_arrow( - const datatypes::Bool* instances, size_t num_instances - ) { - // TODO(andreas): Allow configuring the memory pool. - arrow::MemoryPool* pool = arrow::default_memory_pool(); - auto datatype = arrow_datatype(); - - ARROW_ASSIGN_OR_RAISE(auto builder, arrow::MakeBuilder(datatype, pool)) - if (instances && num_instances > 0) { - RR_RETURN_NOT_OK(Loggable::fill_arrow_array_builder( - static_cast(builder.get()), - instances, - num_instances - )); - } - std::shared_ptr array; - ARROW_RETURN_NOT_OK(builder->Finish(&array)); - return array; - } } // namespace rerun diff --git a/rerun_cpp/src/rerun/datatypes/bool.hpp b/rerun_cpp/src/rerun/datatypes/bool.hpp index 00aeb20814e1..5b192ee0eeb6 100644 --- a/rerun_cpp/src/rerun/datatypes/bool.hpp +++ b/rerun_cpp/src/rerun/datatypes/bool.hpp @@ -43,14 +43,14 @@ namespace rerun { /// Returns the arrow data type this type corresponds to. static const std::shared_ptr& arrow_datatype(); - /// Fills an arrow array builder with an array of this type. - static rerun::Error fill_arrow_array_builder( - arrow::BooleanBuilder* builder, const datatypes::Bool* elements, size_t num_elements - ); - /// Serializes an array of `rerun::datatypes::Bool` into an arrow array. static Result> to_arrow( const datatypes::Bool* instances, size_t num_instances ); + + /// Fills an arrow array builder with an array of this type. + static rerun::Error fill_arrow_array_builder( + arrow::BooleanBuilder* builder, const datatypes::Bool* elements, size_t num_elements + ); }; } // namespace rerun diff --git a/rerun_cpp/src/rerun/datatypes/class_description.cpp b/rerun_cpp/src/rerun/datatypes/class_description.cpp index a7bc14380117..52fbaa797864 100644 --- a/rerun_cpp/src/rerun/datatypes/class_description.cpp +++ b/rerun_cpp/src/rerun/datatypes/class_description.cpp @@ -42,6 +42,26 @@ namespace rerun { return datatype; } + Result> Loggable::to_arrow( + const datatypes::ClassDescription* instances, size_t num_instances + ) { + // TODO(andreas): Allow configuring the memory pool. + arrow::MemoryPool* pool = arrow::default_memory_pool(); + auto datatype = arrow_datatype(); + + ARROW_ASSIGN_OR_RAISE(auto builder, arrow::MakeBuilder(datatype, pool)) + if (instances && num_instances > 0) { + RR_RETURN_NOT_OK(Loggable::fill_arrow_array_builder( + static_cast(builder.get()), + instances, + num_instances + )); + } + std::shared_ptr array; + ARROW_RETURN_NOT_OK(builder->Finish(&array)); + return array; + } + rerun::Error Loggable::fill_arrow_array_builder( arrow::StructBuilder* builder, const datatypes::ClassDescription* elements, size_t num_elements @@ -113,24 +133,4 @@ namespace rerun { return Error::ok(); } - - Result> Loggable::to_arrow( - const datatypes::ClassDescription* instances, size_t num_instances - ) { - // TODO(andreas): Allow configuring the memory pool. - arrow::MemoryPool* pool = arrow::default_memory_pool(); - auto datatype = arrow_datatype(); - - ARROW_ASSIGN_OR_RAISE(auto builder, arrow::MakeBuilder(datatype, pool)) - if (instances && num_instances > 0) { - RR_RETURN_NOT_OK(Loggable::fill_arrow_array_builder( - static_cast(builder.get()), - instances, - num_instances - )); - } - std::shared_ptr array; - ARROW_RETURN_NOT_OK(builder->Finish(&array)); - return array; - } } // namespace rerun diff --git a/rerun_cpp/src/rerun/datatypes/class_description.hpp b/rerun_cpp/src/rerun/datatypes/class_description.hpp index ceb111e926be..8d6db97d2666 100644 --- a/rerun_cpp/src/rerun/datatypes/class_description.hpp +++ b/rerun_cpp/src/rerun/datatypes/class_description.hpp @@ -77,15 +77,15 @@ namespace rerun { /// Returns the arrow data type this type corresponds to. static const std::shared_ptr& arrow_datatype(); + /// Serializes an array of `rerun::datatypes::ClassDescription` into an arrow array. + static Result> to_arrow( + const datatypes::ClassDescription* instances, size_t num_instances + ); + /// Fills an arrow array builder with an array of this type. static rerun::Error fill_arrow_array_builder( arrow::StructBuilder* builder, const datatypes::ClassDescription* elements, size_t num_elements ); - - /// Serializes an array of `rerun::datatypes::ClassDescription` into an arrow array. - static Result> to_arrow( - const datatypes::ClassDescription* instances, size_t num_instances - ); }; } // namespace rerun diff --git a/rerun_cpp/src/rerun/datatypes/class_description_map_elem.cpp b/rerun_cpp/src/rerun/datatypes/class_description_map_elem.cpp index e79bbdd5976f..a4d43ba5c3fc 100644 --- a/rerun_cpp/src/rerun/datatypes/class_description_map_elem.cpp +++ b/rerun_cpp/src/rerun/datatypes/class_description_map_elem.cpp @@ -25,6 +25,26 @@ namespace rerun { return datatype; } + Result> Loggable::to_arrow( + const datatypes::ClassDescriptionMapElem* instances, size_t num_instances + ) { + // TODO(andreas): Allow configuring the memory pool. + arrow::MemoryPool* pool = arrow::default_memory_pool(); + auto datatype = arrow_datatype(); + + ARROW_ASSIGN_OR_RAISE(auto builder, arrow::MakeBuilder(datatype, pool)) + if (instances && num_instances > 0) { + RR_RETURN_NOT_OK(Loggable::fill_arrow_array_builder( + static_cast(builder.get()), + instances, + num_instances + )); + } + std::shared_ptr array; + ARROW_RETURN_NOT_OK(builder->Finish(&array)); + return array; + } + rerun::Error Loggable::fill_arrow_array_builder( arrow::StructBuilder* builder, const datatypes::ClassDescriptionMapElem* elements, size_t num_elements @@ -67,24 +87,4 @@ namespace rerun { return Error::ok(); } - - Result> Loggable::to_arrow( - const datatypes::ClassDescriptionMapElem* instances, size_t num_instances - ) { - // TODO(andreas): Allow configuring the memory pool. - arrow::MemoryPool* pool = arrow::default_memory_pool(); - auto datatype = arrow_datatype(); - - ARROW_ASSIGN_OR_RAISE(auto builder, arrow::MakeBuilder(datatype, pool)) - if (instances && num_instances > 0) { - RR_RETURN_NOT_OK(Loggable::fill_arrow_array_builder( - static_cast(builder.get()), - instances, - num_instances - )); - } - std::shared_ptr array; - ARROW_RETURN_NOT_OK(builder->Finish(&array)); - return array; - } } // namespace rerun diff --git a/rerun_cpp/src/rerun/datatypes/class_description_map_elem.hpp b/rerun_cpp/src/rerun/datatypes/class_description_map_elem.hpp index 2906bdd6f9ff..ff57a039a30a 100644 --- a/rerun_cpp/src/rerun/datatypes/class_description_map_elem.hpp +++ b/rerun_cpp/src/rerun/datatypes/class_description_map_elem.hpp @@ -51,15 +51,15 @@ namespace rerun { /// Returns the arrow data type this type corresponds to. static const std::shared_ptr& arrow_datatype(); + /// Serializes an array of `rerun::datatypes::ClassDescriptionMapElem` into an arrow array. + static Result> to_arrow( + const datatypes::ClassDescriptionMapElem* instances, size_t num_instances + ); + /// Fills an arrow array builder with an array of this type. static rerun::Error fill_arrow_array_builder( arrow::StructBuilder* builder, const datatypes::ClassDescriptionMapElem* elements, size_t num_elements ); - - /// Serializes an array of `rerun::datatypes::ClassDescriptionMapElem` into an arrow array. - static Result> to_arrow( - const datatypes::ClassDescriptionMapElem* instances, size_t num_instances - ); }; } // namespace rerun diff --git a/rerun_cpp/src/rerun/datatypes/class_id.cpp b/rerun_cpp/src/rerun/datatypes/class_id.cpp index 0ce034b1d7f8..571ef1b016d2 100644 --- a/rerun_cpp/src/rerun/datatypes/class_id.cpp +++ b/rerun_cpp/src/rerun/datatypes/class_id.cpp @@ -14,26 +14,6 @@ namespace rerun { return datatype; } - rerun::Error Loggable::fill_arrow_array_builder( - arrow::UInt16Builder* builder, const datatypes::ClassId* elements, size_t num_elements - ) { - if (builder == nullptr) { - return rerun::Error(ErrorCode::UnexpectedNullArgument, "Passed array builder is null."); - } - if (elements == nullptr) { - return rerun::Error( - ErrorCode::UnexpectedNullArgument, - "Cannot serialize null pointer to arrow array." - ); - } - - static_assert(sizeof(*elements) == sizeof(elements->id)); - ARROW_RETURN_NOT_OK(builder->AppendValues(&elements->id, static_cast(num_elements)) - ); - - return Error::ok(); - } - Result> Loggable::to_arrow( const datatypes::ClassId* instances, size_t num_instances ) { @@ -53,4 +33,24 @@ namespace rerun { ARROW_RETURN_NOT_OK(builder->Finish(&array)); return array; } + + rerun::Error Loggable::fill_arrow_array_builder( + arrow::UInt16Builder* builder, const datatypes::ClassId* elements, size_t num_elements + ) { + if (builder == nullptr) { + return rerun::Error(ErrorCode::UnexpectedNullArgument, "Passed array builder is null."); + } + if (elements == nullptr) { + return rerun::Error( + ErrorCode::UnexpectedNullArgument, + "Cannot serialize null pointer to arrow array." + ); + } + + static_assert(sizeof(*elements) == sizeof(elements->id)); + ARROW_RETURN_NOT_OK(builder->AppendValues(&elements->id, static_cast(num_elements)) + ); + + return Error::ok(); + } } // namespace rerun diff --git a/rerun_cpp/src/rerun/datatypes/class_id.hpp b/rerun_cpp/src/rerun/datatypes/class_id.hpp index dc97a0b13c37..99a79a9c12eb 100644 --- a/rerun_cpp/src/rerun/datatypes/class_id.hpp +++ b/rerun_cpp/src/rerun/datatypes/class_id.hpp @@ -48,14 +48,14 @@ namespace rerun { /// Returns the arrow data type this type corresponds to. static const std::shared_ptr& arrow_datatype(); - /// Fills an arrow array builder with an array of this type. - static rerun::Error fill_arrow_array_builder( - arrow::UInt16Builder* builder, const datatypes::ClassId* elements, size_t num_elements - ); - /// Serializes an array of `rerun::datatypes::ClassId` into an arrow array. static Result> to_arrow( const datatypes::ClassId* instances, size_t num_instances ); + + /// Fills an arrow array builder with an array of this type. + static rerun::Error fill_arrow_array_builder( + arrow::UInt16Builder* builder, const datatypes::ClassId* elements, size_t num_elements + ); }; } // namespace rerun diff --git a/rerun_cpp/src/rerun/datatypes/entity_path.cpp b/rerun_cpp/src/rerun/datatypes/entity_path.cpp index 3e909dc9d7b4..b8e6f1afd3d7 100644 --- a/rerun_cpp/src/rerun/datatypes/entity_path.cpp +++ b/rerun_cpp/src/rerun/datatypes/entity_path.cpp @@ -14,6 +14,26 @@ namespace rerun { return datatype; } + Result> Loggable::to_arrow( + const datatypes::EntityPath* instances, size_t num_instances + ) { + // TODO(andreas): Allow configuring the memory pool. + arrow::MemoryPool* pool = arrow::default_memory_pool(); + auto datatype = arrow_datatype(); + + ARROW_ASSIGN_OR_RAISE(auto builder, arrow::MakeBuilder(datatype, pool)) + if (instances && num_instances > 0) { + RR_RETURN_NOT_OK(Loggable::fill_arrow_array_builder( + static_cast(builder.get()), + instances, + num_instances + )); + } + std::shared_ptr array; + ARROW_RETURN_NOT_OK(builder->Finish(&array)); + return array; + } + rerun::Error Loggable::fill_arrow_array_builder( arrow::StringBuilder* builder, const datatypes::EntityPath* elements, size_t num_elements ) { @@ -34,24 +54,4 @@ namespace rerun { return Error::ok(); } - - Result> Loggable::to_arrow( - const datatypes::EntityPath* instances, size_t num_instances - ) { - // TODO(andreas): Allow configuring the memory pool. - arrow::MemoryPool* pool = arrow::default_memory_pool(); - auto datatype = arrow_datatype(); - - ARROW_ASSIGN_OR_RAISE(auto builder, arrow::MakeBuilder(datatype, pool)) - if (instances && num_instances > 0) { - RR_RETURN_NOT_OK(Loggable::fill_arrow_array_builder( - static_cast(builder.get()), - instances, - num_instances - )); - } - std::shared_ptr array; - ARROW_RETURN_NOT_OK(builder->Finish(&array)); - return array; - } } // namespace rerun diff --git a/rerun_cpp/src/rerun/datatypes/entity_path.hpp b/rerun_cpp/src/rerun/datatypes/entity_path.hpp index c459109f2fb1..05e9f35e74dd 100644 --- a/rerun_cpp/src/rerun/datatypes/entity_path.hpp +++ b/rerun_cpp/src/rerun/datatypes/entity_path.hpp @@ -45,15 +45,15 @@ namespace rerun { /// Returns the arrow data type this type corresponds to. static const std::shared_ptr& arrow_datatype(); + /// Serializes an array of `rerun::datatypes::EntityPath` into an arrow array. + static Result> to_arrow( + const datatypes::EntityPath* instances, size_t num_instances + ); + /// Fills an arrow array builder with an array of this type. static rerun::Error fill_arrow_array_builder( arrow::StringBuilder* builder, const datatypes::EntityPath* elements, size_t num_elements ); - - /// Serializes an array of `rerun::datatypes::EntityPath` into an arrow array. - static Result> to_arrow( - const datatypes::EntityPath* instances, size_t num_instances - ); }; } // namespace rerun diff --git a/rerun_cpp/src/rerun/datatypes/float32.cpp b/rerun_cpp/src/rerun/datatypes/float32.cpp index cff26a171c7e..2fc5d21152bc 100644 --- a/rerun_cpp/src/rerun/datatypes/float32.cpp +++ b/rerun_cpp/src/rerun/datatypes/float32.cpp @@ -14,6 +14,26 @@ namespace rerun { return datatype; } + Result> Loggable::to_arrow( + const datatypes::Float32* instances, size_t num_instances + ) { + // TODO(andreas): Allow configuring the memory pool. + arrow::MemoryPool* pool = arrow::default_memory_pool(); + auto datatype = arrow_datatype(); + + ARROW_ASSIGN_OR_RAISE(auto builder, arrow::MakeBuilder(datatype, pool)) + if (instances && num_instances > 0) { + RR_RETURN_NOT_OK(Loggable::fill_arrow_array_builder( + static_cast(builder.get()), + instances, + num_instances + )); + } + std::shared_ptr array; + ARROW_RETURN_NOT_OK(builder->Finish(&array)); + return array; + } + rerun::Error Loggable::fill_arrow_array_builder( arrow::FloatBuilder* builder, const datatypes::Float32* elements, size_t num_elements ) { @@ -34,24 +54,4 @@ namespace rerun { return Error::ok(); } - - Result> Loggable::to_arrow( - const datatypes::Float32* instances, size_t num_instances - ) { - // TODO(andreas): Allow configuring the memory pool. - arrow::MemoryPool* pool = arrow::default_memory_pool(); - auto datatype = arrow_datatype(); - - ARROW_ASSIGN_OR_RAISE(auto builder, arrow::MakeBuilder(datatype, pool)) - if (instances && num_instances > 0) { - RR_RETURN_NOT_OK(Loggable::fill_arrow_array_builder( - static_cast(builder.get()), - instances, - num_instances - )); - } - std::shared_ptr array; - ARROW_RETURN_NOT_OK(builder->Finish(&array)); - return array; - } } // namespace rerun diff --git a/rerun_cpp/src/rerun/datatypes/float32.hpp b/rerun_cpp/src/rerun/datatypes/float32.hpp index 78023580e5ec..53a94384c861 100644 --- a/rerun_cpp/src/rerun/datatypes/float32.hpp +++ b/rerun_cpp/src/rerun/datatypes/float32.hpp @@ -48,14 +48,14 @@ namespace rerun { /// Returns the arrow data type this type corresponds to. static const std::shared_ptr& arrow_datatype(); - /// Fills an arrow array builder with an array of this type. - static rerun::Error fill_arrow_array_builder( - arrow::FloatBuilder* builder, const datatypes::Float32* elements, size_t num_elements - ); - /// Serializes an array of `rerun::datatypes::Float32` into an arrow array. static Result> to_arrow( const datatypes::Float32* instances, size_t num_instances ); + + /// Fills an arrow array builder with an array of this type. + static rerun::Error fill_arrow_array_builder( + arrow::FloatBuilder* builder, const datatypes::Float32* elements, size_t num_elements + ); }; } // namespace rerun diff --git a/rerun_cpp/src/rerun/datatypes/keypoint_id.cpp b/rerun_cpp/src/rerun/datatypes/keypoint_id.cpp index d332124953d2..e514969d844d 100644 --- a/rerun_cpp/src/rerun/datatypes/keypoint_id.cpp +++ b/rerun_cpp/src/rerun/datatypes/keypoint_id.cpp @@ -14,26 +14,6 @@ namespace rerun { return datatype; } - rerun::Error Loggable::fill_arrow_array_builder( - arrow::UInt16Builder* builder, const datatypes::KeypointId* elements, size_t num_elements - ) { - if (builder == nullptr) { - return rerun::Error(ErrorCode::UnexpectedNullArgument, "Passed array builder is null."); - } - if (elements == nullptr) { - return rerun::Error( - ErrorCode::UnexpectedNullArgument, - "Cannot serialize null pointer to arrow array." - ); - } - - static_assert(sizeof(*elements) == sizeof(elements->id)); - ARROW_RETURN_NOT_OK(builder->AppendValues(&elements->id, static_cast(num_elements)) - ); - - return Error::ok(); - } - Result> Loggable::to_arrow( const datatypes::KeypointId* instances, size_t num_instances ) { @@ -53,4 +33,24 @@ namespace rerun { ARROW_RETURN_NOT_OK(builder->Finish(&array)); return array; } + + rerun::Error Loggable::fill_arrow_array_builder( + arrow::UInt16Builder* builder, const datatypes::KeypointId* elements, size_t num_elements + ) { + if (builder == nullptr) { + return rerun::Error(ErrorCode::UnexpectedNullArgument, "Passed array builder is null."); + } + if (elements == nullptr) { + return rerun::Error( + ErrorCode::UnexpectedNullArgument, + "Cannot serialize null pointer to arrow array." + ); + } + + static_assert(sizeof(*elements) == sizeof(elements->id)); + ARROW_RETURN_NOT_OK(builder->AppendValues(&elements->id, static_cast(num_elements)) + ); + + return Error::ok(); + } } // namespace rerun diff --git a/rerun_cpp/src/rerun/datatypes/keypoint_id.hpp b/rerun_cpp/src/rerun/datatypes/keypoint_id.hpp index 54ec16f8225a..7d4f0fa2fd67 100644 --- a/rerun_cpp/src/rerun/datatypes/keypoint_id.hpp +++ b/rerun_cpp/src/rerun/datatypes/keypoint_id.hpp @@ -48,15 +48,15 @@ namespace rerun { /// Returns the arrow data type this type corresponds to. static const std::shared_ptr& arrow_datatype(); + /// Serializes an array of `rerun::datatypes::KeypointId` into an arrow array. + static Result> to_arrow( + const datatypes::KeypointId* instances, size_t num_instances + ); + /// Fills an arrow array builder with an array of this type. static rerun::Error fill_arrow_array_builder( arrow::UInt16Builder* builder, const datatypes::KeypointId* elements, size_t num_elements ); - - /// Serializes an array of `rerun::datatypes::KeypointId` into an arrow array. - static Result> to_arrow( - const datatypes::KeypointId* instances, size_t num_instances - ); }; } // namespace rerun diff --git a/rerun_cpp/src/rerun/datatypes/keypoint_pair.cpp b/rerun_cpp/src/rerun/datatypes/keypoint_pair.cpp index a482280e58a6..a88803daf9b9 100644 --- a/rerun_cpp/src/rerun/datatypes/keypoint_pair.cpp +++ b/rerun_cpp/src/rerun/datatypes/keypoint_pair.cpp @@ -27,6 +27,26 @@ namespace rerun { return datatype; } + Result> Loggable::to_arrow( + const datatypes::KeypointPair* instances, size_t num_instances + ) { + // TODO(andreas): Allow configuring the memory pool. + arrow::MemoryPool* pool = arrow::default_memory_pool(); + auto datatype = arrow_datatype(); + + ARROW_ASSIGN_OR_RAISE(auto builder, arrow::MakeBuilder(datatype, pool)) + if (instances && num_instances > 0) { + RR_RETURN_NOT_OK(Loggable::fill_arrow_array_builder( + static_cast(builder.get()), + instances, + num_instances + )); + } + std::shared_ptr array; + ARROW_RETURN_NOT_OK(builder->Finish(&array)); + return array; + } + rerun::Error Loggable::fill_arrow_array_builder( arrow::StructBuilder* builder, const datatypes::KeypointPair* elements, size_t num_elements ) { @@ -66,24 +86,4 @@ namespace rerun { return Error::ok(); } - - Result> Loggable::to_arrow( - const datatypes::KeypointPair* instances, size_t num_instances - ) { - // TODO(andreas): Allow configuring the memory pool. - arrow::MemoryPool* pool = arrow::default_memory_pool(); - auto datatype = arrow_datatype(); - - ARROW_ASSIGN_OR_RAISE(auto builder, arrow::MakeBuilder(datatype, pool)) - if (instances && num_instances > 0) { - RR_RETURN_NOT_OK(Loggable::fill_arrow_array_builder( - static_cast(builder.get()), - instances, - num_instances - )); - } - std::shared_ptr array; - ARROW_RETURN_NOT_OK(builder->Finish(&array)); - return array; - } } // namespace rerun diff --git a/rerun_cpp/src/rerun/datatypes/keypoint_pair.hpp b/rerun_cpp/src/rerun/datatypes/keypoint_pair.hpp index 9c22323ccf77..25d68451eaea 100644 --- a/rerun_cpp/src/rerun/datatypes/keypoint_pair.hpp +++ b/rerun_cpp/src/rerun/datatypes/keypoint_pair.hpp @@ -50,15 +50,15 @@ namespace rerun { /// Returns the arrow data type this type corresponds to. static const std::shared_ptr& arrow_datatype(); + /// Serializes an array of `rerun::datatypes::KeypointPair` into an arrow array. + static Result> to_arrow( + const datatypes::KeypointPair* instances, size_t num_instances + ); + /// Fills an arrow array builder with an array of this type. static rerun::Error fill_arrow_array_builder( arrow::StructBuilder* builder, const datatypes::KeypointPair* elements, size_t num_elements ); - - /// Serializes an array of `rerun::datatypes::KeypointPair` into an arrow array. - static Result> to_arrow( - const datatypes::KeypointPair* instances, size_t num_instances - ); }; } // namespace rerun diff --git a/rerun_cpp/src/rerun/datatypes/mat3x3.cpp b/rerun_cpp/src/rerun/datatypes/mat3x3.cpp index 021b75e17225..cf3198d77471 100644 --- a/rerun_cpp/src/rerun/datatypes/mat3x3.cpp +++ b/rerun_cpp/src/rerun/datatypes/mat3x3.cpp @@ -15,6 +15,26 @@ namespace rerun { return datatype; } + Result> Loggable::to_arrow( + const datatypes::Mat3x3* instances, size_t num_instances + ) { + // TODO(andreas): Allow configuring the memory pool. + arrow::MemoryPool* pool = arrow::default_memory_pool(); + auto datatype = arrow_datatype(); + + ARROW_ASSIGN_OR_RAISE(auto builder, arrow::MakeBuilder(datatype, pool)) + if (instances && num_instances > 0) { + RR_RETURN_NOT_OK(Loggable::fill_arrow_array_builder( + static_cast(builder.get()), + instances, + num_instances + )); + } + std::shared_ptr array; + ARROW_RETURN_NOT_OK(builder->Finish(&array)); + return array; + } + rerun::Error Loggable::fill_arrow_array_builder( arrow::FixedSizeListBuilder* builder, const datatypes::Mat3x3* elements, size_t num_elements ) { @@ -40,24 +60,4 @@ namespace rerun { return Error::ok(); } - - Result> Loggable::to_arrow( - const datatypes::Mat3x3* instances, size_t num_instances - ) { - // TODO(andreas): Allow configuring the memory pool. - arrow::MemoryPool* pool = arrow::default_memory_pool(); - auto datatype = arrow_datatype(); - - ARROW_ASSIGN_OR_RAISE(auto builder, arrow::MakeBuilder(datatype, pool)) - if (instances && num_instances > 0) { - RR_RETURN_NOT_OK(Loggable::fill_arrow_array_builder( - static_cast(builder.get()), - instances, - num_instances - )); - } - std::shared_ptr array; - ARROW_RETURN_NOT_OK(builder->Finish(&array)); - return array; - } } // namespace rerun diff --git a/rerun_cpp/src/rerun/datatypes/mat3x3.hpp b/rerun_cpp/src/rerun/datatypes/mat3x3.hpp index 20b27d2c2656..6ba35081b6b6 100644 --- a/rerun_cpp/src/rerun/datatypes/mat3x3.hpp +++ b/rerun_cpp/src/rerun/datatypes/mat3x3.hpp @@ -88,15 +88,15 @@ namespace rerun { /// Returns the arrow data type this type corresponds to. static const std::shared_ptr& arrow_datatype(); + /// Serializes an array of `rerun::datatypes::Mat3x3` into an arrow array. + static Result> to_arrow( + const datatypes::Mat3x3* instances, size_t num_instances + ); + /// Fills an arrow array builder with an array of this type. static rerun::Error fill_arrow_array_builder( arrow::FixedSizeListBuilder* builder, const datatypes::Mat3x3* elements, size_t num_elements ); - - /// Serializes an array of `rerun::datatypes::Mat3x3` into an arrow array. - static Result> to_arrow( - const datatypes::Mat3x3* instances, size_t num_instances - ); }; } // namespace rerun diff --git a/rerun_cpp/src/rerun/datatypes/mat4x4.cpp b/rerun_cpp/src/rerun/datatypes/mat4x4.cpp index f8af413c7cc8..2073fc3fe341 100644 --- a/rerun_cpp/src/rerun/datatypes/mat4x4.cpp +++ b/rerun_cpp/src/rerun/datatypes/mat4x4.cpp @@ -15,6 +15,26 @@ namespace rerun { return datatype; } + Result> Loggable::to_arrow( + const datatypes::Mat4x4* instances, size_t num_instances + ) { + // TODO(andreas): Allow configuring the memory pool. + arrow::MemoryPool* pool = arrow::default_memory_pool(); + auto datatype = arrow_datatype(); + + ARROW_ASSIGN_OR_RAISE(auto builder, arrow::MakeBuilder(datatype, pool)) + if (instances && num_instances > 0) { + RR_RETURN_NOT_OK(Loggable::fill_arrow_array_builder( + static_cast(builder.get()), + instances, + num_instances + )); + } + std::shared_ptr array; + ARROW_RETURN_NOT_OK(builder->Finish(&array)); + return array; + } + rerun::Error Loggable::fill_arrow_array_builder( arrow::FixedSizeListBuilder* builder, const datatypes::Mat4x4* elements, size_t num_elements ) { @@ -40,24 +60,4 @@ namespace rerun { return Error::ok(); } - - Result> Loggable::to_arrow( - const datatypes::Mat4x4* instances, size_t num_instances - ) { - // TODO(andreas): Allow configuring the memory pool. - arrow::MemoryPool* pool = arrow::default_memory_pool(); - auto datatype = arrow_datatype(); - - ARROW_ASSIGN_OR_RAISE(auto builder, arrow::MakeBuilder(datatype, pool)) - if (instances && num_instances > 0) { - RR_RETURN_NOT_OK(Loggable::fill_arrow_array_builder( - static_cast(builder.get()), - instances, - num_instances - )); - } - std::shared_ptr array; - ARROW_RETURN_NOT_OK(builder->Finish(&array)); - return array; - } } // namespace rerun diff --git a/rerun_cpp/src/rerun/datatypes/mat4x4.hpp b/rerun_cpp/src/rerun/datatypes/mat4x4.hpp index 39bb1cc5f29b..4c5da8272c68 100644 --- a/rerun_cpp/src/rerun/datatypes/mat4x4.hpp +++ b/rerun_cpp/src/rerun/datatypes/mat4x4.hpp @@ -103,15 +103,15 @@ namespace rerun { /// Returns the arrow data type this type corresponds to. static const std::shared_ptr& arrow_datatype(); + /// Serializes an array of `rerun::datatypes::Mat4x4` into an arrow array. + static Result> to_arrow( + const datatypes::Mat4x4* instances, size_t num_instances + ); + /// Fills an arrow array builder with an array of this type. static rerun::Error fill_arrow_array_builder( arrow::FixedSizeListBuilder* builder, const datatypes::Mat4x4* elements, size_t num_elements ); - - /// Serializes an array of `rerun::datatypes::Mat4x4` into an arrow array. - static Result> to_arrow( - const datatypes::Mat4x4* instances, size_t num_instances - ); }; } // namespace rerun diff --git a/rerun_cpp/src/rerun/datatypes/material.cpp b/rerun_cpp/src/rerun/datatypes/material.cpp index 9512650af0c8..a15929d97704 100644 --- a/rerun_cpp/src/rerun/datatypes/material.cpp +++ b/rerun_cpp/src/rerun/datatypes/material.cpp @@ -22,6 +22,26 @@ namespace rerun { return datatype; } + Result> Loggable::to_arrow( + const datatypes::Material* instances, size_t num_instances + ) { + // TODO(andreas): Allow configuring the memory pool. + arrow::MemoryPool* pool = arrow::default_memory_pool(); + auto datatype = arrow_datatype(); + + ARROW_ASSIGN_OR_RAISE(auto builder, arrow::MakeBuilder(datatype, pool)) + if (instances && num_instances > 0) { + RR_RETURN_NOT_OK(Loggable::fill_arrow_array_builder( + static_cast(builder.get()), + instances, + num_instances + )); + } + std::shared_ptr array; + ARROW_RETURN_NOT_OK(builder->Finish(&array)); + return array; + } + rerun::Error Loggable::fill_arrow_array_builder( arrow::StructBuilder* builder, const datatypes::Material* elements, size_t num_elements ) { @@ -55,24 +75,4 @@ namespace rerun { return Error::ok(); } - - Result> Loggable::to_arrow( - const datatypes::Material* instances, size_t num_instances - ) { - // TODO(andreas): Allow configuring the memory pool. - arrow::MemoryPool* pool = arrow::default_memory_pool(); - auto datatype = arrow_datatype(); - - ARROW_ASSIGN_OR_RAISE(auto builder, arrow::MakeBuilder(datatype, pool)) - if (instances && num_instances > 0) { - RR_RETURN_NOT_OK(Loggable::fill_arrow_array_builder( - static_cast(builder.get()), - instances, - num_instances - )); - } - std::shared_ptr array; - ARROW_RETURN_NOT_OK(builder->Finish(&array)); - return array; - } } // namespace rerun diff --git a/rerun_cpp/src/rerun/datatypes/material.hpp b/rerun_cpp/src/rerun/datatypes/material.hpp index efd12166804e..e5cea5ef3377 100644 --- a/rerun_cpp/src/rerun/datatypes/material.hpp +++ b/rerun_cpp/src/rerun/datatypes/material.hpp @@ -54,14 +54,14 @@ namespace rerun { /// Returns the arrow data type this type corresponds to. static const std::shared_ptr& arrow_datatype(); - /// Fills an arrow array builder with an array of this type. - static rerun::Error fill_arrow_array_builder( - arrow::StructBuilder* builder, const datatypes::Material* elements, size_t num_elements - ); - /// Serializes an array of `rerun::datatypes::Material` into an arrow array. static Result> to_arrow( const datatypes::Material* instances, size_t num_instances ); + + /// Fills an arrow array builder with an array of this type. + static rerun::Error fill_arrow_array_builder( + arrow::StructBuilder* builder, const datatypes::Material* elements, size_t num_elements + ); }; } // namespace rerun diff --git a/rerun_cpp/src/rerun/datatypes/mesh_properties.cpp b/rerun_cpp/src/rerun/datatypes/mesh_properties.cpp index 5782e0b3e70e..680705aabe3e 100644 --- a/rerun_cpp/src/rerun/datatypes/mesh_properties.cpp +++ b/rerun_cpp/src/rerun/datatypes/mesh_properties.cpp @@ -20,6 +20,26 @@ namespace rerun { return datatype; } + Result> Loggable::to_arrow( + const datatypes::MeshProperties* instances, size_t num_instances + ) { + // TODO(andreas): Allow configuring the memory pool. + arrow::MemoryPool* pool = arrow::default_memory_pool(); + auto datatype = arrow_datatype(); + + ARROW_ASSIGN_OR_RAISE(auto builder, arrow::MakeBuilder(datatype, pool)) + if (instances && num_instances > 0) { + RR_RETURN_NOT_OK(Loggable::fill_arrow_array_builder( + static_cast(builder.get()), + instances, + num_instances + )); + } + std::shared_ptr array; + ARROW_RETURN_NOT_OK(builder->Finish(&array)); + return array; + } + rerun::Error Loggable::fill_arrow_array_builder( arrow::StructBuilder* builder, const datatypes::MeshProperties* elements, size_t num_elements @@ -58,24 +78,4 @@ namespace rerun { return Error::ok(); } - - Result> Loggable::to_arrow( - const datatypes::MeshProperties* instances, size_t num_instances - ) { - // TODO(andreas): Allow configuring the memory pool. - arrow::MemoryPool* pool = arrow::default_memory_pool(); - auto datatype = arrow_datatype(); - - ARROW_ASSIGN_OR_RAISE(auto builder, arrow::MakeBuilder(datatype, pool)) - if (instances && num_instances > 0) { - RR_RETURN_NOT_OK(Loggable::fill_arrow_array_builder( - static_cast(builder.get()), - instances, - num_instances - )); - } - std::shared_ptr array; - ARROW_RETURN_NOT_OK(builder->Finish(&array)); - return array; - } } // namespace rerun diff --git a/rerun_cpp/src/rerun/datatypes/mesh_properties.hpp b/rerun_cpp/src/rerun/datatypes/mesh_properties.hpp index bb51d2b66cd9..2ef25850a818 100644 --- a/rerun_cpp/src/rerun/datatypes/mesh_properties.hpp +++ b/rerun_cpp/src/rerun/datatypes/mesh_properties.hpp @@ -50,15 +50,15 @@ namespace rerun { /// Returns the arrow data type this type corresponds to. static const std::shared_ptr& arrow_datatype(); + /// Serializes an array of `rerun::datatypes::MeshProperties` into an arrow array. + static Result> to_arrow( + const datatypes::MeshProperties* instances, size_t num_instances + ); + /// Fills an arrow array builder with an array of this type. static rerun::Error fill_arrow_array_builder( arrow::StructBuilder* builder, const datatypes::MeshProperties* elements, size_t num_elements ); - - /// Serializes an array of `rerun::datatypes::MeshProperties` into an arrow array. - static Result> to_arrow( - const datatypes::MeshProperties* instances, size_t num_instances - ); }; } // namespace rerun diff --git a/rerun_cpp/src/rerun/datatypes/quaternion.cpp b/rerun_cpp/src/rerun/datatypes/quaternion.cpp index 836c091c704d..ec89930612a7 100644 --- a/rerun_cpp/src/rerun/datatypes/quaternion.cpp +++ b/rerun_cpp/src/rerun/datatypes/quaternion.cpp @@ -15,6 +15,26 @@ namespace rerun { return datatype; } + Result> Loggable::to_arrow( + const datatypes::Quaternion* instances, size_t num_instances + ) { + // TODO(andreas): Allow configuring the memory pool. + arrow::MemoryPool* pool = arrow::default_memory_pool(); + auto datatype = arrow_datatype(); + + ARROW_ASSIGN_OR_RAISE(auto builder, arrow::MakeBuilder(datatype, pool)) + if (instances && num_instances > 0) { + RR_RETURN_NOT_OK(Loggable::fill_arrow_array_builder( + static_cast(builder.get()), + instances, + num_instances + )); + } + std::shared_ptr array; + ARROW_RETURN_NOT_OK(builder->Finish(&array)); + return array; + } + rerun::Error Loggable::fill_arrow_array_builder( arrow::FixedSizeListBuilder* builder, const datatypes::Quaternion* elements, size_t num_elements @@ -41,24 +61,4 @@ namespace rerun { return Error::ok(); } - - Result> Loggable::to_arrow( - const datatypes::Quaternion* instances, size_t num_instances - ) { - // TODO(andreas): Allow configuring the memory pool. - arrow::MemoryPool* pool = arrow::default_memory_pool(); - auto datatype = arrow_datatype(); - - ARROW_ASSIGN_OR_RAISE(auto builder, arrow::MakeBuilder(datatype, pool)) - if (instances && num_instances > 0) { - RR_RETURN_NOT_OK(Loggable::fill_arrow_array_builder( - static_cast(builder.get()), - instances, - num_instances - )); - } - std::shared_ptr array; - ARROW_RETURN_NOT_OK(builder->Finish(&array)); - return array; - } } // namespace rerun diff --git a/rerun_cpp/src/rerun/datatypes/quaternion.hpp b/rerun_cpp/src/rerun/datatypes/quaternion.hpp index 683400158ca2..a23032eec45b 100644 --- a/rerun_cpp/src/rerun/datatypes/quaternion.hpp +++ b/rerun_cpp/src/rerun/datatypes/quaternion.hpp @@ -93,15 +93,15 @@ namespace rerun { /// Returns the arrow data type this type corresponds to. static const std::shared_ptr& arrow_datatype(); + /// Serializes an array of `rerun::datatypes::Quaternion` into an arrow array. + static Result> to_arrow( + const datatypes::Quaternion* instances, size_t num_instances + ); + /// Fills an arrow array builder with an array of this type. static rerun::Error fill_arrow_array_builder( arrow::FixedSizeListBuilder* builder, const datatypes::Quaternion* elements, size_t num_elements ); - - /// Serializes an array of `rerun::datatypes::Quaternion` into an arrow array. - static Result> to_arrow( - const datatypes::Quaternion* instances, size_t num_instances - ); }; } // namespace rerun diff --git a/rerun_cpp/src/rerun/datatypes/rgba32.cpp b/rerun_cpp/src/rerun/datatypes/rgba32.cpp index cae995bc5637..0103ec7bff78 100644 --- a/rerun_cpp/src/rerun/datatypes/rgba32.cpp +++ b/rerun_cpp/src/rerun/datatypes/rgba32.cpp @@ -14,6 +14,26 @@ namespace rerun { return datatype; } + Result> Loggable::to_arrow( + const datatypes::Rgba32* instances, size_t num_instances + ) { + // TODO(andreas): Allow configuring the memory pool. + arrow::MemoryPool* pool = arrow::default_memory_pool(); + auto datatype = arrow_datatype(); + + ARROW_ASSIGN_OR_RAISE(auto builder, arrow::MakeBuilder(datatype, pool)) + if (instances && num_instances > 0) { + RR_RETURN_NOT_OK(Loggable::fill_arrow_array_builder( + static_cast(builder.get()), + instances, + num_instances + )); + } + std::shared_ptr array; + ARROW_RETURN_NOT_OK(builder->Finish(&array)); + return array; + } + rerun::Error Loggable::fill_arrow_array_builder( arrow::UInt32Builder* builder, const datatypes::Rgba32* elements, size_t num_elements ) { @@ -34,24 +54,4 @@ namespace rerun { return Error::ok(); } - - Result> Loggable::to_arrow( - const datatypes::Rgba32* instances, size_t num_instances - ) { - // TODO(andreas): Allow configuring the memory pool. - arrow::MemoryPool* pool = arrow::default_memory_pool(); - auto datatype = arrow_datatype(); - - ARROW_ASSIGN_OR_RAISE(auto builder, arrow::MakeBuilder(datatype, pool)) - if (instances && num_instances > 0) { - RR_RETURN_NOT_OK(Loggable::fill_arrow_array_builder( - static_cast(builder.get()), - instances, - num_instances - )); - } - std::shared_ptr array; - ARROW_RETURN_NOT_OK(builder->Finish(&array)); - return array; - } } // namespace rerun diff --git a/rerun_cpp/src/rerun/datatypes/rgba32.hpp b/rerun_cpp/src/rerun/datatypes/rgba32.hpp index 0f7c0621c86b..9094866a7f50 100644 --- a/rerun_cpp/src/rerun/datatypes/rgba32.hpp +++ b/rerun_cpp/src/rerun/datatypes/rgba32.hpp @@ -80,14 +80,14 @@ namespace rerun { /// Returns the arrow data type this type corresponds to. static const std::shared_ptr& arrow_datatype(); - /// Fills an arrow array builder with an array of this type. - static rerun::Error fill_arrow_array_builder( - arrow::UInt32Builder* builder, const datatypes::Rgba32* elements, size_t num_elements - ); - /// Serializes an array of `rerun::datatypes::Rgba32` into an arrow array. static Result> to_arrow( const datatypes::Rgba32* instances, size_t num_instances ); + + /// Fills an arrow array builder with an array of this type. + static rerun::Error fill_arrow_array_builder( + arrow::UInt32Builder* builder, const datatypes::Rgba32* elements, size_t num_elements + ); }; } // namespace rerun diff --git a/rerun_cpp/src/rerun/datatypes/rotation3d.cpp b/rerun_cpp/src/rerun/datatypes/rotation3d.cpp index 925c4f285ca1..eb5710f3e8be 100644 --- a/rerun_cpp/src/rerun/datatypes/rotation3d.cpp +++ b/rerun_cpp/src/rerun/datatypes/rotation3d.cpp @@ -29,6 +29,26 @@ namespace rerun { return datatype; } + Result> Loggable::to_arrow( + const datatypes::Rotation3D* instances, size_t num_instances + ) { + // TODO(andreas): Allow configuring the memory pool. + arrow::MemoryPool* pool = arrow::default_memory_pool(); + auto datatype = arrow_datatype(); + + ARROW_ASSIGN_OR_RAISE(auto builder, arrow::MakeBuilder(datatype, pool)) + if (instances && num_instances > 0) { + RR_RETURN_NOT_OK(Loggable::fill_arrow_array_builder( + static_cast(builder.get()), + instances, + num_instances + )); + } + std::shared_ptr array; + ARROW_RETURN_NOT_OK(builder->Finish(&array)); + return array; + } + rerun::Error Loggable::fill_arrow_array_builder( arrow::DenseUnionBuilder* builder, const datatypes::Rotation3D* elements, size_t num_elements @@ -84,24 +104,4 @@ namespace rerun { return Error::ok(); } - - Result> Loggable::to_arrow( - const datatypes::Rotation3D* instances, size_t num_instances - ) { - // TODO(andreas): Allow configuring the memory pool. - arrow::MemoryPool* pool = arrow::default_memory_pool(); - auto datatype = arrow_datatype(); - - ARROW_ASSIGN_OR_RAISE(auto builder, arrow::MakeBuilder(datatype, pool)) - if (instances && num_instances > 0) { - RR_RETURN_NOT_OK(Loggable::fill_arrow_array_builder( - static_cast(builder.get()), - instances, - num_instances - )); - } - std::shared_ptr array; - ARROW_RETURN_NOT_OK(builder->Finish(&array)); - return array; - } } // namespace rerun diff --git a/rerun_cpp/src/rerun/datatypes/rotation3d.hpp b/rerun_cpp/src/rerun/datatypes/rotation3d.hpp index de2d1daf6af1..ca22e66a0e05 100644 --- a/rerun_cpp/src/rerun/datatypes/rotation3d.hpp +++ b/rerun_cpp/src/rerun/datatypes/rotation3d.hpp @@ -163,15 +163,15 @@ namespace rerun { /// Returns the arrow data type this type corresponds to. static const std::shared_ptr& arrow_datatype(); + /// Serializes an array of `rerun::datatypes::Rotation3D` into an arrow array. + static Result> to_arrow( + const datatypes::Rotation3D* instances, size_t num_instances + ); + /// Fills an arrow array builder with an array of this type. static rerun::Error fill_arrow_array_builder( arrow::DenseUnionBuilder* builder, const datatypes::Rotation3D* elements, size_t num_elements ); - - /// Serializes an array of `rerun::datatypes::Rotation3D` into an arrow array. - static Result> to_arrow( - const datatypes::Rotation3D* instances, size_t num_instances - ); }; } // namespace rerun diff --git a/rerun_cpp/src/rerun/datatypes/rotation_axis_angle.cpp b/rerun_cpp/src/rerun/datatypes/rotation_axis_angle.cpp index ed0772ff0627..3de614e63a5b 100644 --- a/rerun_cpp/src/rerun/datatypes/rotation_axis_angle.cpp +++ b/rerun_cpp/src/rerun/datatypes/rotation_axis_angle.cpp @@ -21,6 +21,26 @@ namespace rerun { return datatype; } + Result> Loggable::to_arrow( + const datatypes::RotationAxisAngle* instances, size_t num_instances + ) { + // TODO(andreas): Allow configuring the memory pool. + arrow::MemoryPool* pool = arrow::default_memory_pool(); + auto datatype = arrow_datatype(); + + ARROW_ASSIGN_OR_RAISE(auto builder, arrow::MakeBuilder(datatype, pool)) + if (instances && num_instances > 0) { + RR_RETURN_NOT_OK(Loggable::fill_arrow_array_builder( + static_cast(builder.get()), + instances, + num_instances + )); + } + std::shared_ptr array; + ARROW_RETURN_NOT_OK(builder->Finish(&array)); + return array; + } + rerun::Error Loggable::fill_arrow_array_builder( arrow::StructBuilder* builder, const datatypes::RotationAxisAngle* elements, size_t num_elements @@ -62,24 +82,4 @@ namespace rerun { return Error::ok(); } - - Result> Loggable::to_arrow( - const datatypes::RotationAxisAngle* instances, size_t num_instances - ) { - // TODO(andreas): Allow configuring the memory pool. - arrow::MemoryPool* pool = arrow::default_memory_pool(); - auto datatype = arrow_datatype(); - - ARROW_ASSIGN_OR_RAISE(auto builder, arrow::MakeBuilder(datatype, pool)) - if (instances && num_instances > 0) { - RR_RETURN_NOT_OK(Loggable::fill_arrow_array_builder( - static_cast(builder.get()), - instances, - num_instances - )); - } - std::shared_ptr array; - ARROW_RETURN_NOT_OK(builder->Finish(&array)); - return array; - } } // namespace rerun diff --git a/rerun_cpp/src/rerun/datatypes/rotation_axis_angle.hpp b/rerun_cpp/src/rerun/datatypes/rotation_axis_angle.hpp index 106f5c65515c..3a7236f9a1d6 100644 --- a/rerun_cpp/src/rerun/datatypes/rotation_axis_angle.hpp +++ b/rerun_cpp/src/rerun/datatypes/rotation_axis_angle.hpp @@ -51,15 +51,15 @@ namespace rerun { /// Returns the arrow data type this type corresponds to. static const std::shared_ptr& arrow_datatype(); + /// Serializes an array of `rerun::datatypes::RotationAxisAngle` into an arrow array. + static Result> to_arrow( + const datatypes::RotationAxisAngle* instances, size_t num_instances + ); + /// Fills an arrow array builder with an array of this type. static rerun::Error fill_arrow_array_builder( arrow::StructBuilder* builder, const datatypes::RotationAxisAngle* elements, size_t num_elements ); - - /// Serializes an array of `rerun::datatypes::RotationAxisAngle` into an arrow array. - static Result> to_arrow( - const datatypes::RotationAxisAngle* instances, size_t num_instances - ); }; } // namespace rerun diff --git a/rerun_cpp/src/rerun/datatypes/scale3d.cpp b/rerun_cpp/src/rerun/datatypes/scale3d.cpp index 3f6affba3e49..c058ede21d0c 100644 --- a/rerun_cpp/src/rerun/datatypes/scale3d.cpp +++ b/rerun_cpp/src/rerun/datatypes/scale3d.cpp @@ -20,6 +20,26 @@ namespace rerun { return datatype; } + Result> Loggable::to_arrow( + const datatypes::Scale3D* instances, size_t num_instances + ) { + // TODO(andreas): Allow configuring the memory pool. + arrow::MemoryPool* pool = arrow::default_memory_pool(); + auto datatype = arrow_datatype(); + + ARROW_ASSIGN_OR_RAISE(auto builder, arrow::MakeBuilder(datatype, pool)) + if (instances && num_instances > 0) { + RR_RETURN_NOT_OK(Loggable::fill_arrow_array_builder( + static_cast(builder.get()), + instances, + num_instances + )); + } + std::shared_ptr array; + ARROW_RETURN_NOT_OK(builder->Finish(&array)); + return array; + } + rerun::Error Loggable::fill_arrow_array_builder( arrow::DenseUnionBuilder* builder, const datatypes::Scale3D* elements, size_t num_elements ) { @@ -68,24 +88,4 @@ namespace rerun { return Error::ok(); } - - Result> Loggable::to_arrow( - const datatypes::Scale3D* instances, size_t num_instances - ) { - // TODO(andreas): Allow configuring the memory pool. - arrow::MemoryPool* pool = arrow::default_memory_pool(); - auto datatype = arrow_datatype(); - - ARROW_ASSIGN_OR_RAISE(auto builder, arrow::MakeBuilder(datatype, pool)) - if (instances && num_instances > 0) { - RR_RETURN_NOT_OK(Loggable::fill_arrow_array_builder( - static_cast(builder.get()), - instances, - num_instances - )); - } - std::shared_ptr array; - ARROW_RETURN_NOT_OK(builder->Finish(&array)); - return array; - } } // namespace rerun diff --git a/rerun_cpp/src/rerun/datatypes/scale3d.hpp b/rerun_cpp/src/rerun/datatypes/scale3d.hpp index c91b8c658c7a..0eef794b0328 100644 --- a/rerun_cpp/src/rerun/datatypes/scale3d.hpp +++ b/rerun_cpp/src/rerun/datatypes/scale3d.hpp @@ -157,15 +157,15 @@ namespace rerun { /// Returns the arrow data type this type corresponds to. static const std::shared_ptr& arrow_datatype(); + /// Serializes an array of `rerun::datatypes::Scale3D` into an arrow array. + static Result> to_arrow( + const datatypes::Scale3D* instances, size_t num_instances + ); + /// Fills an arrow array builder with an array of this type. static rerun::Error fill_arrow_array_builder( arrow::DenseUnionBuilder* builder, const datatypes::Scale3D* elements, size_t num_elements ); - - /// Serializes an array of `rerun::datatypes::Scale3D` into an arrow array. - static Result> to_arrow( - const datatypes::Scale3D* instances, size_t num_instances - ); }; } // namespace rerun diff --git a/rerun_cpp/src/rerun/datatypes/tensor_buffer.cpp b/rerun_cpp/src/rerun/datatypes/tensor_buffer.cpp index 01e8afa174d1..4c67308ed438 100644 --- a/rerun_cpp/src/rerun/datatypes/tensor_buffer.cpp +++ b/rerun_cpp/src/rerun/datatypes/tensor_buffer.cpp @@ -30,6 +30,26 @@ namespace rerun { return datatype; } + Result> Loggable::to_arrow( + const datatypes::TensorBuffer* instances, size_t num_instances + ) { + // TODO(andreas): Allow configuring the memory pool. + arrow::MemoryPool* pool = arrow::default_memory_pool(); + auto datatype = arrow_datatype(); + + ARROW_ASSIGN_OR_RAISE(auto builder, arrow::MakeBuilder(datatype, pool)) + if (instances && num_instances > 0) { + RR_RETURN_NOT_OK(Loggable::fill_arrow_array_builder( + static_cast(builder.get()), + instances, + num_instances + )); + } + std::shared_ptr array; + ARROW_RETURN_NOT_OK(builder->Finish(&array)); + return array; + } + rerun::Error Loggable::fill_arrow_array_builder( arrow::DenseUnionBuilder* builder, const datatypes::TensorBuffer* elements, size_t num_elements @@ -218,24 +238,4 @@ namespace rerun { return Error::ok(); } - - Result> Loggable::to_arrow( - const datatypes::TensorBuffer* instances, size_t num_instances - ) { - // TODO(andreas): Allow configuring the memory pool. - arrow::MemoryPool* pool = arrow::default_memory_pool(); - auto datatype = arrow_datatype(); - - ARROW_ASSIGN_OR_RAISE(auto builder, arrow::MakeBuilder(datatype, pool)) - if (instances && num_instances > 0) { - RR_RETURN_NOT_OK(Loggable::fill_arrow_array_builder( - static_cast(builder.get()), - instances, - num_instances - )); - } - std::shared_ptr array; - ARROW_RETURN_NOT_OK(builder->Finish(&array)); - return array; - } } // namespace rerun diff --git a/rerun_cpp/src/rerun/datatypes/tensor_buffer.hpp b/rerun_cpp/src/rerun/datatypes/tensor_buffer.hpp index 5ab09be65e90..9d73a88eac21 100644 --- a/rerun_cpp/src/rerun/datatypes/tensor_buffer.hpp +++ b/rerun_cpp/src/rerun/datatypes/tensor_buffer.hpp @@ -584,15 +584,15 @@ namespace rerun { /// Returns the arrow data type this type corresponds to. static const std::shared_ptr& arrow_datatype(); + /// Serializes an array of `rerun::datatypes::TensorBuffer` into an arrow array. + static Result> to_arrow( + const datatypes::TensorBuffer* instances, size_t num_instances + ); + /// Fills an arrow array builder with an array of this type. static rerun::Error fill_arrow_array_builder( arrow::DenseUnionBuilder* builder, const datatypes::TensorBuffer* elements, size_t num_elements ); - - /// Serializes an array of `rerun::datatypes::TensorBuffer` into an arrow array. - static Result> to_arrow( - const datatypes::TensorBuffer* instances, size_t num_instances - ); }; } // namespace rerun diff --git a/rerun_cpp/src/rerun/datatypes/tensor_data.cpp b/rerun_cpp/src/rerun/datatypes/tensor_data.cpp index 71b592957914..77446b8c2fed 100644 --- a/rerun_cpp/src/rerun/datatypes/tensor_data.cpp +++ b/rerun_cpp/src/rerun/datatypes/tensor_data.cpp @@ -32,6 +32,26 @@ namespace rerun { return datatype; } + Result> Loggable::to_arrow( + const datatypes::TensorData* instances, size_t num_instances + ) { + // TODO(andreas): Allow configuring the memory pool. + arrow::MemoryPool* pool = arrow::default_memory_pool(); + auto datatype = arrow_datatype(); + + ARROW_ASSIGN_OR_RAISE(auto builder, arrow::MakeBuilder(datatype, pool)) + if (instances && num_instances > 0) { + RR_RETURN_NOT_OK(Loggable::fill_arrow_array_builder( + static_cast(builder.get()), + instances, + num_instances + )); + } + std::shared_ptr array; + ARROW_RETURN_NOT_OK(builder->Finish(&array)); + return array; + } + rerun::Error Loggable::fill_arrow_array_builder( arrow::StructBuilder* builder, const datatypes::TensorData* elements, size_t num_elements ) { @@ -80,24 +100,4 @@ namespace rerun { return Error::ok(); } - - Result> Loggable::to_arrow( - const datatypes::TensorData* instances, size_t num_instances - ) { - // TODO(andreas): Allow configuring the memory pool. - arrow::MemoryPool* pool = arrow::default_memory_pool(); - auto datatype = arrow_datatype(); - - ARROW_ASSIGN_OR_RAISE(auto builder, arrow::MakeBuilder(datatype, pool)) - if (instances && num_instances > 0) { - RR_RETURN_NOT_OK(Loggable::fill_arrow_array_builder( - static_cast(builder.get()), - instances, - num_instances - )); - } - std::shared_ptr array; - ARROW_RETURN_NOT_OK(builder->Finish(&array)); - return array; - } } // namespace rerun diff --git a/rerun_cpp/src/rerun/datatypes/tensor_data.hpp b/rerun_cpp/src/rerun/datatypes/tensor_data.hpp index 560853cf8d3a..ec8c20e75b52 100644 --- a/rerun_cpp/src/rerun/datatypes/tensor_data.hpp +++ b/rerun_cpp/src/rerun/datatypes/tensor_data.hpp @@ -80,15 +80,15 @@ namespace rerun { /// Returns the arrow data type this type corresponds to. static const std::shared_ptr& arrow_datatype(); + /// Serializes an array of `rerun::datatypes::TensorData` into an arrow array. + static Result> to_arrow( + const datatypes::TensorData* instances, size_t num_instances + ); + /// Fills an arrow array builder with an array of this type. static rerun::Error fill_arrow_array_builder( arrow::StructBuilder* builder, const datatypes::TensorData* elements, size_t num_elements ); - - /// Serializes an array of `rerun::datatypes::TensorData` into an arrow array. - static Result> to_arrow( - const datatypes::TensorData* instances, size_t num_instances - ); }; } // namespace rerun diff --git a/rerun_cpp/src/rerun/datatypes/tensor_dimension.cpp b/rerun_cpp/src/rerun/datatypes/tensor_dimension.cpp index 6958f78c49e3..357ced695a2e 100644 --- a/rerun_cpp/src/rerun/datatypes/tensor_dimension.cpp +++ b/rerun_cpp/src/rerun/datatypes/tensor_dimension.cpp @@ -17,6 +17,26 @@ namespace rerun { return datatype; } + Result> Loggable::to_arrow( + const datatypes::TensorDimension* instances, size_t num_instances + ) { + // TODO(andreas): Allow configuring the memory pool. + arrow::MemoryPool* pool = arrow::default_memory_pool(); + auto datatype = arrow_datatype(); + + ARROW_ASSIGN_OR_RAISE(auto builder, arrow::MakeBuilder(datatype, pool)) + if (instances && num_instances > 0) { + RR_RETURN_NOT_OK(Loggable::fill_arrow_array_builder( + static_cast(builder.get()), + instances, + num_instances + )); + } + std::shared_ptr array; + ARROW_RETURN_NOT_OK(builder->Finish(&array)); + return array; + } + rerun::Error Loggable::fill_arrow_array_builder( arrow::StructBuilder* builder, const datatypes::TensorDimension* elements, size_t num_elements @@ -54,24 +74,4 @@ namespace rerun { return Error::ok(); } - - Result> Loggable::to_arrow( - const datatypes::TensorDimension* instances, size_t num_instances - ) { - // TODO(andreas): Allow configuring the memory pool. - arrow::MemoryPool* pool = arrow::default_memory_pool(); - auto datatype = arrow_datatype(); - - ARROW_ASSIGN_OR_RAISE(auto builder, arrow::MakeBuilder(datatype, pool)) - if (instances && num_instances > 0) { - RR_RETURN_NOT_OK(Loggable::fill_arrow_array_builder( - static_cast(builder.get()), - instances, - num_instances - )); - } - std::shared_ptr array; - ARROW_RETURN_NOT_OK(builder->Finish(&array)); - return array; - } } // namespace rerun diff --git a/rerun_cpp/src/rerun/datatypes/tensor_dimension.hpp b/rerun_cpp/src/rerun/datatypes/tensor_dimension.hpp index 5d0866ca3549..027fabcbe952 100644 --- a/rerun_cpp/src/rerun/datatypes/tensor_dimension.hpp +++ b/rerun_cpp/src/rerun/datatypes/tensor_dimension.hpp @@ -51,15 +51,15 @@ namespace rerun { /// Returns the arrow data type this type corresponds to. static const std::shared_ptr& arrow_datatype(); + /// Serializes an array of `rerun::datatypes::TensorDimension` into an arrow array. + static Result> to_arrow( + const datatypes::TensorDimension* instances, size_t num_instances + ); + /// Fills an arrow array builder with an array of this type. static rerun::Error fill_arrow_array_builder( arrow::StructBuilder* builder, const datatypes::TensorDimension* elements, size_t num_elements ); - - /// Serializes an array of `rerun::datatypes::TensorDimension` into an arrow array. - static Result> to_arrow( - const datatypes::TensorDimension* instances, size_t num_instances - ); }; } // namespace rerun diff --git a/rerun_cpp/src/rerun/datatypes/transform3d.cpp b/rerun_cpp/src/rerun/datatypes/transform3d.cpp index ee5059d76f73..e3e4bd7edcac 100644 --- a/rerun_cpp/src/rerun/datatypes/transform3d.cpp +++ b/rerun_cpp/src/rerun/datatypes/transform3d.cpp @@ -29,6 +29,26 @@ namespace rerun { return datatype; } + Result> Loggable::to_arrow( + const datatypes::Transform3D* instances, size_t num_instances + ) { + // TODO(andreas): Allow configuring the memory pool. + arrow::MemoryPool* pool = arrow::default_memory_pool(); + auto datatype = arrow_datatype(); + + ARROW_ASSIGN_OR_RAISE(auto builder, arrow::MakeBuilder(datatype, pool)) + if (instances && num_instances > 0) { + RR_RETURN_NOT_OK(Loggable::fill_arrow_array_builder( + static_cast(builder.get()), + instances, + num_instances + )); + } + std::shared_ptr array; + ARROW_RETURN_NOT_OK(builder->Finish(&array)); + return array; + } + rerun::Error Loggable::fill_arrow_array_builder( arrow::DenseUnionBuilder* builder, const datatypes::Transform3D* elements, size_t num_elements @@ -85,24 +105,4 @@ namespace rerun { return Error::ok(); } - - Result> Loggable::to_arrow( - const datatypes::Transform3D* instances, size_t num_instances - ) { - // TODO(andreas): Allow configuring the memory pool. - arrow::MemoryPool* pool = arrow::default_memory_pool(); - auto datatype = arrow_datatype(); - - ARROW_ASSIGN_OR_RAISE(auto builder, arrow::MakeBuilder(datatype, pool)) - if (instances && num_instances > 0) { - RR_RETURN_NOT_OK(Loggable::fill_arrow_array_builder( - static_cast(builder.get()), - instances, - num_instances - )); - } - std::shared_ptr array; - ARROW_RETURN_NOT_OK(builder->Finish(&array)); - return array; - } } // namespace rerun diff --git a/rerun_cpp/src/rerun/datatypes/transform3d.hpp b/rerun_cpp/src/rerun/datatypes/transform3d.hpp index 893972ed86b7..d55fa89e42bd 100644 --- a/rerun_cpp/src/rerun/datatypes/transform3d.hpp +++ b/rerun_cpp/src/rerun/datatypes/transform3d.hpp @@ -159,15 +159,15 @@ namespace rerun { /// Returns the arrow data type this type corresponds to. static const std::shared_ptr& arrow_datatype(); + /// Serializes an array of `rerun::datatypes::Transform3D` into an arrow array. + static Result> to_arrow( + const datatypes::Transform3D* instances, size_t num_instances + ); + /// Fills an arrow array builder with an array of this type. static rerun::Error fill_arrow_array_builder( arrow::DenseUnionBuilder* builder, const datatypes::Transform3D* elements, size_t num_elements ); - - /// Serializes an array of `rerun::datatypes::Transform3D` into an arrow array. - static Result> to_arrow( - const datatypes::Transform3D* instances, size_t num_instances - ); }; } // namespace rerun diff --git a/rerun_cpp/src/rerun/datatypes/translation_and_mat3x3.cpp b/rerun_cpp/src/rerun/datatypes/translation_and_mat3x3.cpp index abcbafe65587..f11058df7356 100644 --- a/rerun_cpp/src/rerun/datatypes/translation_and_mat3x3.cpp +++ b/rerun_cpp/src/rerun/datatypes/translation_and_mat3x3.cpp @@ -22,6 +22,26 @@ namespace rerun { return datatype; } + Result> Loggable::to_arrow( + const datatypes::TranslationAndMat3x3* instances, size_t num_instances + ) { + // TODO(andreas): Allow configuring the memory pool. + arrow::MemoryPool* pool = arrow::default_memory_pool(); + auto datatype = arrow_datatype(); + + ARROW_ASSIGN_OR_RAISE(auto builder, arrow::MakeBuilder(datatype, pool)) + if (instances && num_instances > 0) { + RR_RETURN_NOT_OK(Loggable::fill_arrow_array_builder( + static_cast(builder.get()), + instances, + num_instances + )); + } + std::shared_ptr array; + ARROW_RETURN_NOT_OK(builder->Finish(&array)); + return array; + } + rerun::Error Loggable::fill_arrow_array_builder( arrow::StructBuilder* builder, const datatypes::TranslationAndMat3x3* elements, size_t num_elements @@ -81,24 +101,4 @@ namespace rerun { return Error::ok(); } - - Result> Loggable::to_arrow( - const datatypes::TranslationAndMat3x3* instances, size_t num_instances - ) { - // TODO(andreas): Allow configuring the memory pool. - arrow::MemoryPool* pool = arrow::default_memory_pool(); - auto datatype = arrow_datatype(); - - ARROW_ASSIGN_OR_RAISE(auto builder, arrow::MakeBuilder(datatype, pool)) - if (instances && num_instances > 0) { - RR_RETURN_NOT_OK(Loggable::fill_arrow_array_builder( - static_cast(builder.get()), - instances, - num_instances - )); - } - std::shared_ptr array; - ARROW_RETURN_NOT_OK(builder->Finish(&array)); - return array; - } } // namespace rerun diff --git a/rerun_cpp/src/rerun/datatypes/translation_and_mat3x3.hpp b/rerun_cpp/src/rerun/datatypes/translation_and_mat3x3.hpp index ac308985a501..bd535dfe2d0e 100644 --- a/rerun_cpp/src/rerun/datatypes/translation_and_mat3x3.hpp +++ b/rerun_cpp/src/rerun/datatypes/translation_and_mat3x3.hpp @@ -85,15 +85,15 @@ namespace rerun { /// Returns the arrow data type this type corresponds to. static const std::shared_ptr& arrow_datatype(); + /// Serializes an array of `rerun::datatypes::TranslationAndMat3x3` into an arrow array. + static Result> to_arrow( + const datatypes::TranslationAndMat3x3* instances, size_t num_instances + ); + /// Fills an arrow array builder with an array of this type. static rerun::Error fill_arrow_array_builder( arrow::StructBuilder* builder, const datatypes::TranslationAndMat3x3* elements, size_t num_elements ); - - /// Serializes an array of `rerun::datatypes::TranslationAndMat3x3` into an arrow array. - static Result> to_arrow( - const datatypes::TranslationAndMat3x3* instances, size_t num_instances - ); }; } // namespace rerun diff --git a/rerun_cpp/src/rerun/datatypes/translation_rotation_scale3d.cpp b/rerun_cpp/src/rerun/datatypes/translation_rotation_scale3d.cpp index 01ffa5ab0238..9cb528ee4ad9 100644 --- a/rerun_cpp/src/rerun/datatypes/translation_rotation_scale3d.cpp +++ b/rerun_cpp/src/rerun/datatypes/translation_rotation_scale3d.cpp @@ -28,6 +28,28 @@ namespace rerun { return datatype; } + Result> Loggable::to_arrow( + const datatypes::TranslationRotationScale3D* instances, size_t num_instances + ) { + // TODO(andreas): Allow configuring the memory pool. + arrow::MemoryPool* pool = arrow::default_memory_pool(); + auto datatype = arrow_datatype(); + + ARROW_ASSIGN_OR_RAISE(auto builder, arrow::MakeBuilder(datatype, pool)) + if (instances && num_instances > 0) { + RR_RETURN_NOT_OK( + Loggable::fill_arrow_array_builder( + static_cast(builder.get()), + instances, + num_instances + ) + ); + } + std::shared_ptr array; + ARROW_RETURN_NOT_OK(builder->Finish(&array)); + return array; + } + rerun::Error Loggable::fill_arrow_array_builder( arrow::StructBuilder* builder, const datatypes::TranslationRotationScale3D* elements, size_t num_elements @@ -104,26 +126,4 @@ namespace rerun { return Error::ok(); } - - Result> Loggable::to_arrow( - const datatypes::TranslationRotationScale3D* instances, size_t num_instances - ) { - // TODO(andreas): Allow configuring the memory pool. - arrow::MemoryPool* pool = arrow::default_memory_pool(); - auto datatype = arrow_datatype(); - - ARROW_ASSIGN_OR_RAISE(auto builder, arrow::MakeBuilder(datatype, pool)) - if (instances && num_instances > 0) { - RR_RETURN_NOT_OK( - Loggable::fill_arrow_array_builder( - static_cast(builder.get()), - instances, - num_instances - ) - ); - } - std::shared_ptr array; - ARROW_RETURN_NOT_OK(builder->Finish(&array)); - return array; - } } // namespace rerun diff --git a/rerun_cpp/src/rerun/datatypes/translation_rotation_scale3d.hpp b/rerun_cpp/src/rerun/datatypes/translation_rotation_scale3d.hpp index 8d0d670db401..ef36c3c31c9c 100644 --- a/rerun_cpp/src/rerun/datatypes/translation_rotation_scale3d.hpp +++ b/rerun_cpp/src/rerun/datatypes/translation_rotation_scale3d.hpp @@ -210,15 +210,15 @@ namespace rerun { /// Returns the arrow data type this type corresponds to. static const std::shared_ptr& arrow_datatype(); + /// Serializes an array of `rerun::datatypes::TranslationRotationScale3D` into an arrow array. + static Result> to_arrow( + const datatypes::TranslationRotationScale3D* instances, size_t num_instances + ); + /// Fills an arrow array builder with an array of this type. static rerun::Error fill_arrow_array_builder( arrow::StructBuilder* builder, const datatypes::TranslationRotationScale3D* elements, size_t num_elements ); - - /// Serializes an array of `rerun::datatypes::TranslationRotationScale3D` into an arrow array. - static Result> to_arrow( - const datatypes::TranslationRotationScale3D* instances, size_t num_instances - ); }; } // namespace rerun diff --git a/rerun_cpp/src/rerun/datatypes/uint32.cpp b/rerun_cpp/src/rerun/datatypes/uint32.cpp index 880bbaa8a28b..dc8cb0ab8dad 100644 --- a/rerun_cpp/src/rerun/datatypes/uint32.cpp +++ b/rerun_cpp/src/rerun/datatypes/uint32.cpp @@ -14,6 +14,26 @@ namespace rerun { return datatype; } + Result> Loggable::to_arrow( + const datatypes::UInt32* instances, size_t num_instances + ) { + // TODO(andreas): Allow configuring the memory pool. + arrow::MemoryPool* pool = arrow::default_memory_pool(); + auto datatype = arrow_datatype(); + + ARROW_ASSIGN_OR_RAISE(auto builder, arrow::MakeBuilder(datatype, pool)) + if (instances && num_instances > 0) { + RR_RETURN_NOT_OK(Loggable::fill_arrow_array_builder( + static_cast(builder.get()), + instances, + num_instances + )); + } + std::shared_ptr array; + ARROW_RETURN_NOT_OK(builder->Finish(&array)); + return array; + } + rerun::Error Loggable::fill_arrow_array_builder( arrow::UInt32Builder* builder, const datatypes::UInt32* elements, size_t num_elements ) { @@ -34,24 +54,4 @@ namespace rerun { return Error::ok(); } - - Result> Loggable::to_arrow( - const datatypes::UInt32* instances, size_t num_instances - ) { - // TODO(andreas): Allow configuring the memory pool. - arrow::MemoryPool* pool = arrow::default_memory_pool(); - auto datatype = arrow_datatype(); - - ARROW_ASSIGN_OR_RAISE(auto builder, arrow::MakeBuilder(datatype, pool)) - if (instances && num_instances > 0) { - RR_RETURN_NOT_OK(Loggable::fill_arrow_array_builder( - static_cast(builder.get()), - instances, - num_instances - )); - } - std::shared_ptr array; - ARROW_RETURN_NOT_OK(builder->Finish(&array)); - return array; - } } // namespace rerun diff --git a/rerun_cpp/src/rerun/datatypes/uint32.hpp b/rerun_cpp/src/rerun/datatypes/uint32.hpp index cd64724dcbe3..015b8ffd4ba4 100644 --- a/rerun_cpp/src/rerun/datatypes/uint32.hpp +++ b/rerun_cpp/src/rerun/datatypes/uint32.hpp @@ -48,14 +48,14 @@ namespace rerun { /// Returns the arrow data type this type corresponds to. static const std::shared_ptr& arrow_datatype(); - /// Fills an arrow array builder with an array of this type. - static rerun::Error fill_arrow_array_builder( - arrow::UInt32Builder* builder, const datatypes::UInt32* elements, size_t num_elements - ); - /// Serializes an array of `rerun::datatypes::UInt32` into an arrow array. static Result> to_arrow( const datatypes::UInt32* instances, size_t num_instances ); + + /// Fills an arrow array builder with an array of this type. + static rerun::Error fill_arrow_array_builder( + arrow::UInt32Builder* builder, const datatypes::UInt32* elements, size_t num_elements + ); }; } // namespace rerun diff --git a/rerun_cpp/src/rerun/datatypes/uint64.cpp b/rerun_cpp/src/rerun/datatypes/uint64.cpp index 4aa873041cae..1d7c7eed2507 100644 --- a/rerun_cpp/src/rerun/datatypes/uint64.cpp +++ b/rerun_cpp/src/rerun/datatypes/uint64.cpp @@ -14,6 +14,26 @@ namespace rerun { return datatype; } + Result> Loggable::to_arrow( + const datatypes::UInt64* instances, size_t num_instances + ) { + // TODO(andreas): Allow configuring the memory pool. + arrow::MemoryPool* pool = arrow::default_memory_pool(); + auto datatype = arrow_datatype(); + + ARROW_ASSIGN_OR_RAISE(auto builder, arrow::MakeBuilder(datatype, pool)) + if (instances && num_instances > 0) { + RR_RETURN_NOT_OK(Loggable::fill_arrow_array_builder( + static_cast(builder.get()), + instances, + num_instances + )); + } + std::shared_ptr array; + ARROW_RETURN_NOT_OK(builder->Finish(&array)); + return array; + } + rerun::Error Loggable::fill_arrow_array_builder( arrow::UInt64Builder* builder, const datatypes::UInt64* elements, size_t num_elements ) { @@ -34,24 +54,4 @@ namespace rerun { return Error::ok(); } - - Result> Loggable::to_arrow( - const datatypes::UInt64* instances, size_t num_instances - ) { - // TODO(andreas): Allow configuring the memory pool. - arrow::MemoryPool* pool = arrow::default_memory_pool(); - auto datatype = arrow_datatype(); - - ARROW_ASSIGN_OR_RAISE(auto builder, arrow::MakeBuilder(datatype, pool)) - if (instances && num_instances > 0) { - RR_RETURN_NOT_OK(Loggable::fill_arrow_array_builder( - static_cast(builder.get()), - instances, - num_instances - )); - } - std::shared_ptr array; - ARROW_RETURN_NOT_OK(builder->Finish(&array)); - return array; - } } // namespace rerun diff --git a/rerun_cpp/src/rerun/datatypes/uint64.hpp b/rerun_cpp/src/rerun/datatypes/uint64.hpp index 9886a239d1a6..1326cd612474 100644 --- a/rerun_cpp/src/rerun/datatypes/uint64.hpp +++ b/rerun_cpp/src/rerun/datatypes/uint64.hpp @@ -48,14 +48,14 @@ namespace rerun { /// Returns the arrow data type this type corresponds to. static const std::shared_ptr& arrow_datatype(); - /// Fills an arrow array builder with an array of this type. - static rerun::Error fill_arrow_array_builder( - arrow::UInt64Builder* builder, const datatypes::UInt64* elements, size_t num_elements - ); - /// Serializes an array of `rerun::datatypes::UInt64` into an arrow array. static Result> to_arrow( const datatypes::UInt64* instances, size_t num_instances ); + + /// Fills an arrow array builder with an array of this type. + static rerun::Error fill_arrow_array_builder( + arrow::UInt64Builder* builder, const datatypes::UInt64* elements, size_t num_elements + ); }; } // namespace rerun diff --git a/rerun_cpp/src/rerun/datatypes/utf8.cpp b/rerun_cpp/src/rerun/datatypes/utf8.cpp index f3da93e4560f..72b5c71f2e99 100644 --- a/rerun_cpp/src/rerun/datatypes/utf8.cpp +++ b/rerun_cpp/src/rerun/datatypes/utf8.cpp @@ -14,6 +14,26 @@ namespace rerun { return datatype; } + Result> Loggable::to_arrow( + const datatypes::Utf8* instances, size_t num_instances + ) { + // TODO(andreas): Allow configuring the memory pool. + arrow::MemoryPool* pool = arrow::default_memory_pool(); + auto datatype = arrow_datatype(); + + ARROW_ASSIGN_OR_RAISE(auto builder, arrow::MakeBuilder(datatype, pool)) + if (instances && num_instances > 0) { + RR_RETURN_NOT_OK(Loggable::fill_arrow_array_builder( + static_cast(builder.get()), + instances, + num_instances + )); + } + std::shared_ptr array; + ARROW_RETURN_NOT_OK(builder->Finish(&array)); + return array; + } + rerun::Error Loggable::fill_arrow_array_builder( arrow::StringBuilder* builder, const datatypes::Utf8* elements, size_t num_elements ) { @@ -34,24 +54,4 @@ namespace rerun { return Error::ok(); } - - Result> Loggable::to_arrow( - const datatypes::Utf8* instances, size_t num_instances - ) { - // TODO(andreas): Allow configuring the memory pool. - arrow::MemoryPool* pool = arrow::default_memory_pool(); - auto datatype = arrow_datatype(); - - ARROW_ASSIGN_OR_RAISE(auto builder, arrow::MakeBuilder(datatype, pool)) - if (instances && num_instances > 0) { - RR_RETURN_NOT_OK(Loggable::fill_arrow_array_builder( - static_cast(builder.get()), - instances, - num_instances - )); - } - std::shared_ptr array; - ARROW_RETURN_NOT_OK(builder->Finish(&array)); - return array; - } } // namespace rerun diff --git a/rerun_cpp/src/rerun/datatypes/utf8.hpp b/rerun_cpp/src/rerun/datatypes/utf8.hpp index 14e3a41e89ea..130e63bdce8f 100644 --- a/rerun_cpp/src/rerun/datatypes/utf8.hpp +++ b/rerun_cpp/src/rerun/datatypes/utf8.hpp @@ -55,14 +55,14 @@ namespace rerun { /// Returns the arrow data type this type corresponds to. static const std::shared_ptr& arrow_datatype(); - /// Fills an arrow array builder with an array of this type. - static rerun::Error fill_arrow_array_builder( - arrow::StringBuilder* builder, const datatypes::Utf8* elements, size_t num_elements - ); - /// Serializes an array of `rerun::datatypes::Utf8` into an arrow array. static Result> to_arrow( const datatypes::Utf8* instances, size_t num_instances ); + + /// Fills an arrow array builder with an array of this type. + static rerun::Error fill_arrow_array_builder( + arrow::StringBuilder* builder, const datatypes::Utf8* elements, size_t num_elements + ); }; } // namespace rerun diff --git a/rerun_cpp/src/rerun/datatypes/uuid.cpp b/rerun_cpp/src/rerun/datatypes/uuid.cpp index 5814dad69ae9..e7fcde504d84 100644 --- a/rerun_cpp/src/rerun/datatypes/uuid.cpp +++ b/rerun_cpp/src/rerun/datatypes/uuid.cpp @@ -15,6 +15,26 @@ namespace rerun { return datatype; } + Result> Loggable::to_arrow( + const datatypes::Uuid* instances, size_t num_instances + ) { + // TODO(andreas): Allow configuring the memory pool. + arrow::MemoryPool* pool = arrow::default_memory_pool(); + auto datatype = arrow_datatype(); + + ARROW_ASSIGN_OR_RAISE(auto builder, arrow::MakeBuilder(datatype, pool)) + if (instances && num_instances > 0) { + RR_RETURN_NOT_OK(Loggable::fill_arrow_array_builder( + static_cast(builder.get()), + instances, + num_instances + )); + } + std::shared_ptr array; + ARROW_RETURN_NOT_OK(builder->Finish(&array)); + return array; + } + rerun::Error Loggable::fill_arrow_array_builder( arrow::FixedSizeListBuilder* builder, const datatypes::Uuid* elements, size_t num_elements ) { @@ -40,24 +60,4 @@ namespace rerun { return Error::ok(); } - - Result> Loggable::to_arrow( - const datatypes::Uuid* instances, size_t num_instances - ) { - // TODO(andreas): Allow configuring the memory pool. - arrow::MemoryPool* pool = arrow::default_memory_pool(); - auto datatype = arrow_datatype(); - - ARROW_ASSIGN_OR_RAISE(auto builder, arrow::MakeBuilder(datatype, pool)) - if (instances && num_instances > 0) { - RR_RETURN_NOT_OK(Loggable::fill_arrow_array_builder( - static_cast(builder.get()), - instances, - num_instances - )); - } - std::shared_ptr array; - ARROW_RETURN_NOT_OK(builder->Finish(&array)); - return array; - } } // namespace rerun diff --git a/rerun_cpp/src/rerun/datatypes/uuid.hpp b/rerun_cpp/src/rerun/datatypes/uuid.hpp index 0bbe56de8396..30328284ded6 100644 --- a/rerun_cpp/src/rerun/datatypes/uuid.hpp +++ b/rerun_cpp/src/rerun/datatypes/uuid.hpp @@ -44,15 +44,15 @@ namespace rerun { /// Returns the arrow data type this type corresponds to. static const std::shared_ptr& arrow_datatype(); + /// Serializes an array of `rerun::datatypes::Uuid` into an arrow array. + static Result> to_arrow( + const datatypes::Uuid* instances, size_t num_instances + ); + /// Fills an arrow array builder with an array of this type. static rerun::Error fill_arrow_array_builder( arrow::FixedSizeListBuilder* builder, const datatypes::Uuid* elements, size_t num_elements ); - - /// Serializes an array of `rerun::datatypes::Uuid` into an arrow array. - static Result> to_arrow( - const datatypes::Uuid* instances, size_t num_instances - ); }; } // namespace rerun diff --git a/rerun_cpp/src/rerun/datatypes/uvec2d.cpp b/rerun_cpp/src/rerun/datatypes/uvec2d.cpp index 1f342126f60f..09b50101c574 100644 --- a/rerun_cpp/src/rerun/datatypes/uvec2d.cpp +++ b/rerun_cpp/src/rerun/datatypes/uvec2d.cpp @@ -15,6 +15,26 @@ namespace rerun { return datatype; } + Result> Loggable::to_arrow( + const datatypes::UVec2D* instances, size_t num_instances + ) { + // TODO(andreas): Allow configuring the memory pool. + arrow::MemoryPool* pool = arrow::default_memory_pool(); + auto datatype = arrow_datatype(); + + ARROW_ASSIGN_OR_RAISE(auto builder, arrow::MakeBuilder(datatype, pool)) + if (instances && num_instances > 0) { + RR_RETURN_NOT_OK(Loggable::fill_arrow_array_builder( + static_cast(builder.get()), + instances, + num_instances + )); + } + std::shared_ptr array; + ARROW_RETURN_NOT_OK(builder->Finish(&array)); + return array; + } + rerun::Error Loggable::fill_arrow_array_builder( arrow::FixedSizeListBuilder* builder, const datatypes::UVec2D* elements, size_t num_elements ) { @@ -40,24 +60,4 @@ namespace rerun { return Error::ok(); } - - Result> Loggable::to_arrow( - const datatypes::UVec2D* instances, size_t num_instances - ) { - // TODO(andreas): Allow configuring the memory pool. - arrow::MemoryPool* pool = arrow::default_memory_pool(); - auto datatype = arrow_datatype(); - - ARROW_ASSIGN_OR_RAISE(auto builder, arrow::MakeBuilder(datatype, pool)) - if (instances && num_instances > 0) { - RR_RETURN_NOT_OK(Loggable::fill_arrow_array_builder( - static_cast(builder.get()), - instances, - num_instances - )); - } - std::shared_ptr array; - ARROW_RETURN_NOT_OK(builder->Finish(&array)); - return array; - } } // namespace rerun diff --git a/rerun_cpp/src/rerun/datatypes/uvec2d.hpp b/rerun_cpp/src/rerun/datatypes/uvec2d.hpp index 50b800ff0d70..b1805d7c17bb 100644 --- a/rerun_cpp/src/rerun/datatypes/uvec2d.hpp +++ b/rerun_cpp/src/rerun/datatypes/uvec2d.hpp @@ -44,15 +44,15 @@ namespace rerun { /// Returns the arrow data type this type corresponds to. static const std::shared_ptr& arrow_datatype(); + /// Serializes an array of `rerun::datatypes::UVec2D` into an arrow array. + static Result> to_arrow( + const datatypes::UVec2D* instances, size_t num_instances + ); + /// Fills an arrow array builder with an array of this type. static rerun::Error fill_arrow_array_builder( arrow::FixedSizeListBuilder* builder, const datatypes::UVec2D* elements, size_t num_elements ); - - /// Serializes an array of `rerun::datatypes::UVec2D` into an arrow array. - static Result> to_arrow( - const datatypes::UVec2D* instances, size_t num_instances - ); }; } // namespace rerun diff --git a/rerun_cpp/src/rerun/datatypes/uvec3d.cpp b/rerun_cpp/src/rerun/datatypes/uvec3d.cpp index 1e7466bc67ff..5415cbe5eb75 100644 --- a/rerun_cpp/src/rerun/datatypes/uvec3d.cpp +++ b/rerun_cpp/src/rerun/datatypes/uvec3d.cpp @@ -15,6 +15,26 @@ namespace rerun { return datatype; } + Result> Loggable::to_arrow( + const datatypes::UVec3D* instances, size_t num_instances + ) { + // TODO(andreas): Allow configuring the memory pool. + arrow::MemoryPool* pool = arrow::default_memory_pool(); + auto datatype = arrow_datatype(); + + ARROW_ASSIGN_OR_RAISE(auto builder, arrow::MakeBuilder(datatype, pool)) + if (instances && num_instances > 0) { + RR_RETURN_NOT_OK(Loggable::fill_arrow_array_builder( + static_cast(builder.get()), + instances, + num_instances + )); + } + std::shared_ptr array; + ARROW_RETURN_NOT_OK(builder->Finish(&array)); + return array; + } + rerun::Error Loggable::fill_arrow_array_builder( arrow::FixedSizeListBuilder* builder, const datatypes::UVec3D* elements, size_t num_elements ) { @@ -40,24 +60,4 @@ namespace rerun { return Error::ok(); } - - Result> Loggable::to_arrow( - const datatypes::UVec3D* instances, size_t num_instances - ) { - // TODO(andreas): Allow configuring the memory pool. - arrow::MemoryPool* pool = arrow::default_memory_pool(); - auto datatype = arrow_datatype(); - - ARROW_ASSIGN_OR_RAISE(auto builder, arrow::MakeBuilder(datatype, pool)) - if (instances && num_instances > 0) { - RR_RETURN_NOT_OK(Loggable::fill_arrow_array_builder( - static_cast(builder.get()), - instances, - num_instances - )); - } - std::shared_ptr array; - ARROW_RETURN_NOT_OK(builder->Finish(&array)); - return array; - } } // namespace rerun diff --git a/rerun_cpp/src/rerun/datatypes/uvec3d.hpp b/rerun_cpp/src/rerun/datatypes/uvec3d.hpp index 83a4f7651326..0ca22e82f87d 100644 --- a/rerun_cpp/src/rerun/datatypes/uvec3d.hpp +++ b/rerun_cpp/src/rerun/datatypes/uvec3d.hpp @@ -44,15 +44,15 @@ namespace rerun { /// Returns the arrow data type this type corresponds to. static const std::shared_ptr& arrow_datatype(); + /// Serializes an array of `rerun::datatypes::UVec3D` into an arrow array. + static Result> to_arrow( + const datatypes::UVec3D* instances, size_t num_instances + ); + /// Fills an arrow array builder with an array of this type. static rerun::Error fill_arrow_array_builder( arrow::FixedSizeListBuilder* builder, const datatypes::UVec3D* elements, size_t num_elements ); - - /// Serializes an array of `rerun::datatypes::UVec3D` into an arrow array. - static Result> to_arrow( - const datatypes::UVec3D* instances, size_t num_instances - ); }; } // namespace rerun diff --git a/rerun_cpp/src/rerun/datatypes/uvec4d.cpp b/rerun_cpp/src/rerun/datatypes/uvec4d.cpp index 23a2427838e4..b589acff0eb3 100644 --- a/rerun_cpp/src/rerun/datatypes/uvec4d.cpp +++ b/rerun_cpp/src/rerun/datatypes/uvec4d.cpp @@ -15,6 +15,26 @@ namespace rerun { return datatype; } + Result> Loggable::to_arrow( + const datatypes::UVec4D* instances, size_t num_instances + ) { + // TODO(andreas): Allow configuring the memory pool. + arrow::MemoryPool* pool = arrow::default_memory_pool(); + auto datatype = arrow_datatype(); + + ARROW_ASSIGN_OR_RAISE(auto builder, arrow::MakeBuilder(datatype, pool)) + if (instances && num_instances > 0) { + RR_RETURN_NOT_OK(Loggable::fill_arrow_array_builder( + static_cast(builder.get()), + instances, + num_instances + )); + } + std::shared_ptr array; + ARROW_RETURN_NOT_OK(builder->Finish(&array)); + return array; + } + rerun::Error Loggable::fill_arrow_array_builder( arrow::FixedSizeListBuilder* builder, const datatypes::UVec4D* elements, size_t num_elements ) { @@ -40,24 +60,4 @@ namespace rerun { return Error::ok(); } - - Result> Loggable::to_arrow( - const datatypes::UVec4D* instances, size_t num_instances - ) { - // TODO(andreas): Allow configuring the memory pool. - arrow::MemoryPool* pool = arrow::default_memory_pool(); - auto datatype = arrow_datatype(); - - ARROW_ASSIGN_OR_RAISE(auto builder, arrow::MakeBuilder(datatype, pool)) - if (instances && num_instances > 0) { - RR_RETURN_NOT_OK(Loggable::fill_arrow_array_builder( - static_cast(builder.get()), - instances, - num_instances - )); - } - std::shared_ptr array; - ARROW_RETURN_NOT_OK(builder->Finish(&array)); - return array; - } } // namespace rerun diff --git a/rerun_cpp/src/rerun/datatypes/uvec4d.hpp b/rerun_cpp/src/rerun/datatypes/uvec4d.hpp index aea1a45b8362..8869e44e86a9 100644 --- a/rerun_cpp/src/rerun/datatypes/uvec4d.hpp +++ b/rerun_cpp/src/rerun/datatypes/uvec4d.hpp @@ -44,15 +44,15 @@ namespace rerun { /// Returns the arrow data type this type corresponds to. static const std::shared_ptr& arrow_datatype(); + /// Serializes an array of `rerun::datatypes::UVec4D` into an arrow array. + static Result> to_arrow( + const datatypes::UVec4D* instances, size_t num_instances + ); + /// Fills an arrow array builder with an array of this type. static rerun::Error fill_arrow_array_builder( arrow::FixedSizeListBuilder* builder, const datatypes::UVec4D* elements, size_t num_elements ); - - /// Serializes an array of `rerun::datatypes::UVec4D` into an arrow array. - static Result> to_arrow( - const datatypes::UVec4D* instances, size_t num_instances - ); }; } // namespace rerun diff --git a/rerun_cpp/src/rerun/datatypes/vec2d.cpp b/rerun_cpp/src/rerun/datatypes/vec2d.cpp index dc5782703263..fcbf2cd825ba 100644 --- a/rerun_cpp/src/rerun/datatypes/vec2d.cpp +++ b/rerun_cpp/src/rerun/datatypes/vec2d.cpp @@ -15,6 +15,26 @@ namespace rerun { return datatype; } + Result> Loggable::to_arrow( + const datatypes::Vec2D* instances, size_t num_instances + ) { + // TODO(andreas): Allow configuring the memory pool. + arrow::MemoryPool* pool = arrow::default_memory_pool(); + auto datatype = arrow_datatype(); + + ARROW_ASSIGN_OR_RAISE(auto builder, arrow::MakeBuilder(datatype, pool)) + if (instances && num_instances > 0) { + RR_RETURN_NOT_OK(Loggable::fill_arrow_array_builder( + static_cast(builder.get()), + instances, + num_instances + )); + } + std::shared_ptr array; + ARROW_RETURN_NOT_OK(builder->Finish(&array)); + return array; + } + rerun::Error Loggable::fill_arrow_array_builder( arrow::FixedSizeListBuilder* builder, const datatypes::Vec2D* elements, size_t num_elements ) { @@ -40,24 +60,4 @@ namespace rerun { return Error::ok(); } - - Result> Loggable::to_arrow( - const datatypes::Vec2D* instances, size_t num_instances - ) { - // TODO(andreas): Allow configuring the memory pool. - arrow::MemoryPool* pool = arrow::default_memory_pool(); - auto datatype = arrow_datatype(); - - ARROW_ASSIGN_OR_RAISE(auto builder, arrow::MakeBuilder(datatype, pool)) - if (instances && num_instances > 0) { - RR_RETURN_NOT_OK(Loggable::fill_arrow_array_builder( - static_cast(builder.get()), - instances, - num_instances - )); - } - std::shared_ptr array; - ARROW_RETURN_NOT_OK(builder->Finish(&array)); - return array; - } } // namespace rerun diff --git a/rerun_cpp/src/rerun/datatypes/vec2d.hpp b/rerun_cpp/src/rerun/datatypes/vec2d.hpp index bf8778aea650..69345a538783 100644 --- a/rerun_cpp/src/rerun/datatypes/vec2d.hpp +++ b/rerun_cpp/src/rerun/datatypes/vec2d.hpp @@ -61,15 +61,15 @@ namespace rerun { /// Returns the arrow data type this type corresponds to. static const std::shared_ptr& arrow_datatype(); + /// Serializes an array of `rerun::datatypes::Vec2D` into an arrow array. + static Result> to_arrow( + const datatypes::Vec2D* instances, size_t num_instances + ); + /// Fills an arrow array builder with an array of this type. static rerun::Error fill_arrow_array_builder( arrow::FixedSizeListBuilder* builder, const datatypes::Vec2D* elements, size_t num_elements ); - - /// Serializes an array of `rerun::datatypes::Vec2D` into an arrow array. - static Result> to_arrow( - const datatypes::Vec2D* instances, size_t num_instances - ); }; } // namespace rerun diff --git a/rerun_cpp/src/rerun/datatypes/vec3d.cpp b/rerun_cpp/src/rerun/datatypes/vec3d.cpp index 3a6c0805f2ca..e3cce4021973 100644 --- a/rerun_cpp/src/rerun/datatypes/vec3d.cpp +++ b/rerun_cpp/src/rerun/datatypes/vec3d.cpp @@ -15,6 +15,26 @@ namespace rerun { return datatype; } + Result> Loggable::to_arrow( + const datatypes::Vec3D* instances, size_t num_instances + ) { + // TODO(andreas): Allow configuring the memory pool. + arrow::MemoryPool* pool = arrow::default_memory_pool(); + auto datatype = arrow_datatype(); + + ARROW_ASSIGN_OR_RAISE(auto builder, arrow::MakeBuilder(datatype, pool)) + if (instances && num_instances > 0) { + RR_RETURN_NOT_OK(Loggable::fill_arrow_array_builder( + static_cast(builder.get()), + instances, + num_instances + )); + } + std::shared_ptr array; + ARROW_RETURN_NOT_OK(builder->Finish(&array)); + return array; + } + rerun::Error Loggable::fill_arrow_array_builder( arrow::FixedSizeListBuilder* builder, const datatypes::Vec3D* elements, size_t num_elements ) { @@ -40,24 +60,4 @@ namespace rerun { return Error::ok(); } - - Result> Loggable::to_arrow( - const datatypes::Vec3D* instances, size_t num_instances - ) { - // TODO(andreas): Allow configuring the memory pool. - arrow::MemoryPool* pool = arrow::default_memory_pool(); - auto datatype = arrow_datatype(); - - ARROW_ASSIGN_OR_RAISE(auto builder, arrow::MakeBuilder(datatype, pool)) - if (instances && num_instances > 0) { - RR_RETURN_NOT_OK(Loggable::fill_arrow_array_builder( - static_cast(builder.get()), - instances, - num_instances - )); - } - std::shared_ptr array; - ARROW_RETURN_NOT_OK(builder->Finish(&array)); - return array; - } } // namespace rerun diff --git a/rerun_cpp/src/rerun/datatypes/vec3d.hpp b/rerun_cpp/src/rerun/datatypes/vec3d.hpp index 90c6164042c8..e97e579393d2 100644 --- a/rerun_cpp/src/rerun/datatypes/vec3d.hpp +++ b/rerun_cpp/src/rerun/datatypes/vec3d.hpp @@ -65,15 +65,15 @@ namespace rerun { /// Returns the arrow data type this type corresponds to. static const std::shared_ptr& arrow_datatype(); + /// Serializes an array of `rerun::datatypes::Vec3D` into an arrow array. + static Result> to_arrow( + const datatypes::Vec3D* instances, size_t num_instances + ); + /// Fills an arrow array builder with an array of this type. static rerun::Error fill_arrow_array_builder( arrow::FixedSizeListBuilder* builder, const datatypes::Vec3D* elements, size_t num_elements ); - - /// Serializes an array of `rerun::datatypes::Vec3D` into an arrow array. - static Result> to_arrow( - const datatypes::Vec3D* instances, size_t num_instances - ); }; } // namespace rerun diff --git a/rerun_cpp/src/rerun/datatypes/vec4d.cpp b/rerun_cpp/src/rerun/datatypes/vec4d.cpp index 6d1f78219358..935cf311fb77 100644 --- a/rerun_cpp/src/rerun/datatypes/vec4d.cpp +++ b/rerun_cpp/src/rerun/datatypes/vec4d.cpp @@ -15,6 +15,26 @@ namespace rerun { return datatype; } + Result> Loggable::to_arrow( + const datatypes::Vec4D* instances, size_t num_instances + ) { + // TODO(andreas): Allow configuring the memory pool. + arrow::MemoryPool* pool = arrow::default_memory_pool(); + auto datatype = arrow_datatype(); + + ARROW_ASSIGN_OR_RAISE(auto builder, arrow::MakeBuilder(datatype, pool)) + if (instances && num_instances > 0) { + RR_RETURN_NOT_OK(Loggable::fill_arrow_array_builder( + static_cast(builder.get()), + instances, + num_instances + )); + } + std::shared_ptr array; + ARROW_RETURN_NOT_OK(builder->Finish(&array)); + return array; + } + rerun::Error Loggable::fill_arrow_array_builder( arrow::FixedSizeListBuilder* builder, const datatypes::Vec4D* elements, size_t num_elements ) { @@ -40,24 +60,4 @@ namespace rerun { return Error::ok(); } - - Result> Loggable::to_arrow( - const datatypes::Vec4D* instances, size_t num_instances - ) { - // TODO(andreas): Allow configuring the memory pool. - arrow::MemoryPool* pool = arrow::default_memory_pool(); - auto datatype = arrow_datatype(); - - ARROW_ASSIGN_OR_RAISE(auto builder, arrow::MakeBuilder(datatype, pool)) - if (instances && num_instances > 0) { - RR_RETURN_NOT_OK(Loggable::fill_arrow_array_builder( - static_cast(builder.get()), - instances, - num_instances - )); - } - std::shared_ptr array; - ARROW_RETURN_NOT_OK(builder->Finish(&array)); - return array; - } } // namespace rerun diff --git a/rerun_cpp/src/rerun/datatypes/vec4d.hpp b/rerun_cpp/src/rerun/datatypes/vec4d.hpp index ac1ec0a70ef8..51df14bb518e 100644 --- a/rerun_cpp/src/rerun/datatypes/vec4d.hpp +++ b/rerun_cpp/src/rerun/datatypes/vec4d.hpp @@ -69,15 +69,15 @@ namespace rerun { /// Returns the arrow data type this type corresponds to. static const std::shared_ptr& arrow_datatype(); + /// Serializes an array of `rerun::datatypes::Vec4D` into an arrow array. + static Result> to_arrow( + const datatypes::Vec4D* instances, size_t num_instances + ); + /// Fills an arrow array builder with an array of this type. static rerun::Error fill_arrow_array_builder( arrow::FixedSizeListBuilder* builder, const datatypes::Vec4D* elements, size_t num_elements ); - - /// Serializes an array of `rerun::datatypes::Vec4D` into an arrow array. - static Result> to_arrow( - const datatypes::Vec4D* instances, size_t num_instances - ); }; } // namespace rerun diff --git a/rerun_cpp/tests/generated/components/.gitattributes b/rerun_cpp/tests/generated/components/.gitattributes index 57f71720efaf..ce1387003057 100644 --- a/rerun_cpp/tests/generated/components/.gitattributes +++ b/rerun_cpp/tests/generated/components/.gitattributes @@ -1,7 +1,6 @@ # DO NOT EDIT! This file is generated by crates/re_types_builder/src/lib.rs .gitattributes linguist-generated=true -affix_fuzzer1.cpp linguist-generated=true affix_fuzzer1.hpp linguist-generated=true affix_fuzzer10.cpp linguist-generated=true affix_fuzzer10.hpp linguist-generated=true @@ -11,7 +10,6 @@ affix_fuzzer12.cpp linguist-generated=true affix_fuzzer12.hpp linguist-generated=true affix_fuzzer13.cpp linguist-generated=true affix_fuzzer13.hpp linguist-generated=true -affix_fuzzer14.cpp linguist-generated=true affix_fuzzer14.hpp linguist-generated=true affix_fuzzer15.cpp linguist-generated=true affix_fuzzer15.hpp linguist-generated=true @@ -21,17 +19,12 @@ affix_fuzzer17.cpp linguist-generated=true affix_fuzzer17.hpp linguist-generated=true affix_fuzzer18.cpp linguist-generated=true affix_fuzzer18.hpp linguist-generated=true -affix_fuzzer19.cpp linguist-generated=true affix_fuzzer19.hpp linguist-generated=true -affix_fuzzer2.cpp linguist-generated=true affix_fuzzer2.hpp linguist-generated=true -affix_fuzzer20.cpp linguist-generated=true affix_fuzzer20.hpp linguist-generated=true -affix_fuzzer21.cpp linguist-generated=true affix_fuzzer21.hpp linguist-generated=true affix_fuzzer22.cpp linguist-generated=true affix_fuzzer22.hpp linguist-generated=true -affix_fuzzer3.cpp linguist-generated=true affix_fuzzer3.hpp linguist-generated=true affix_fuzzer4.cpp linguist-generated=true affix_fuzzer4.hpp linguist-generated=true diff --git a/rerun_cpp/tests/generated/components/affix_fuzzer1.cpp b/rerun_cpp/tests/generated/components/affix_fuzzer1.cpp deleted file mode 100644 index 560cf159a674..000000000000 --- a/rerun_cpp/tests/generated/components/affix_fuzzer1.cpp +++ /dev/null @@ -1,51 +0,0 @@ -// DO NOT EDIT! This file was auto-generated by crates/re_types_builder/src/codegen/cpp/mod.rs -// Based on "crates/re_types/definitions/rerun/testing/components/fuzzy.fbs". - -#include "affix_fuzzer1.hpp" - -#include "../datatypes/affix_fuzzer1.hpp" - -#include -#include - -namespace rerun::components {} - -namespace rerun { - const std::shared_ptr& Loggable::arrow_datatype() { - static const auto datatype = Loggable::arrow_datatype(); - return datatype; - } - - rerun::Error Loggable::fill_arrow_array_builder( - arrow::StructBuilder* builder, const components::AffixFuzzer1* elements, size_t num_elements - ) { - static_assert(sizeof(rerun::datatypes::AffixFuzzer1) == sizeof(components::AffixFuzzer1)); - RR_RETURN_NOT_OK(Loggable::fill_arrow_array_builder( - builder, - reinterpret_cast(elements), - num_elements - )); - - return Error::ok(); - } - - Result> Loggable::to_arrow( - const components::AffixFuzzer1* instances, size_t num_instances - ) { - // TODO(andreas): Allow configuring the memory pool. - arrow::MemoryPool* pool = arrow::default_memory_pool(); - auto datatype = arrow_datatype(); - - ARROW_ASSIGN_OR_RAISE(auto builder, arrow::MakeBuilder(datatype, pool)) - if (instances && num_instances > 0) { - RR_RETURN_NOT_OK(Loggable::fill_arrow_array_builder( - static_cast(builder.get()), - instances, - num_instances - )); - } - std::shared_ptr array; - ARROW_RETURN_NOT_OK(builder->Finish(&array)); - return array; - } -} // namespace rerun diff --git a/rerun_cpp/tests/generated/components/affix_fuzzer1.hpp b/rerun_cpp/tests/generated/components/affix_fuzzer1.hpp index 49709bed41d5..e8b79b21ee18 100644 --- a/rerun_cpp/tests/generated/components/affix_fuzzer1.hpp +++ b/rerun_cpp/tests/generated/components/affix_fuzzer1.hpp @@ -10,12 +10,6 @@ #include #include -namespace arrow { - class Array; - class DataType; - class StructBuilder; -} // namespace arrow - namespace rerun::components { struct AffixFuzzer1 { rerun::datatypes::AffixFuzzer1 single_required; @@ -39,8 +33,7 @@ namespace rerun::components { } // namespace rerun::components namespace rerun { - template - struct Loggable; + static_assert(sizeof(rerun::datatypes::AffixFuzzer1) == sizeof(components::AffixFuzzer1)); /// \private template <> @@ -48,17 +41,18 @@ namespace rerun { static constexpr const char Name[] = "rerun.testing.components.AffixFuzzer1"; /// Returns the arrow data type this type corresponds to. - static const std::shared_ptr& arrow_datatype(); - - /// Fills an arrow array builder with an array of this type. - static rerun::Error fill_arrow_array_builder( - arrow::StructBuilder* builder, const components::AffixFuzzer1* elements, - size_t num_elements - ); + static const std::shared_ptr& arrow_datatype() { + return Loggable::arrow_datatype(); + } /// Serializes an array of `rerun::components::AffixFuzzer1` into an arrow array. static Result> to_arrow( const components::AffixFuzzer1* instances, size_t num_instances - ); + ) { + return Loggable::to_arrow( + &instances->single_required, + num_instances + ); + } }; } // namespace rerun diff --git a/rerun_cpp/tests/generated/components/affix_fuzzer10.cpp b/rerun_cpp/tests/generated/components/affix_fuzzer10.cpp index 802721af27a6..f29c4a983ea5 100644 --- a/rerun_cpp/tests/generated/components/affix_fuzzer10.cpp +++ b/rerun_cpp/tests/generated/components/affix_fuzzer10.cpp @@ -14,6 +14,26 @@ namespace rerun { return datatype; } + Result> Loggable::to_arrow( + const components::AffixFuzzer10* instances, size_t num_instances + ) { + // TODO(andreas): Allow configuring the memory pool. + arrow::MemoryPool* pool = arrow::default_memory_pool(); + auto datatype = arrow_datatype(); + + ARROW_ASSIGN_OR_RAISE(auto builder, arrow::MakeBuilder(datatype, pool)) + if (instances && num_instances > 0) { + RR_RETURN_NOT_OK(Loggable::fill_arrow_array_builder( + static_cast(builder.get()), + instances, + num_instances + )); + } + std::shared_ptr array; + ARROW_RETURN_NOT_OK(builder->Finish(&array)); + return array; + } + rerun::Error Loggable::fill_arrow_array_builder( arrow::StringBuilder* builder, const components::AffixFuzzer10* elements, size_t num_elements @@ -40,24 +60,4 @@ namespace rerun { return Error::ok(); } - - Result> Loggable::to_arrow( - const components::AffixFuzzer10* instances, size_t num_instances - ) { - // TODO(andreas): Allow configuring the memory pool. - arrow::MemoryPool* pool = arrow::default_memory_pool(); - auto datatype = arrow_datatype(); - - ARROW_ASSIGN_OR_RAISE(auto builder, arrow::MakeBuilder(datatype, pool)) - if (instances && num_instances > 0) { - RR_RETURN_NOT_OK(Loggable::fill_arrow_array_builder( - static_cast(builder.get()), - instances, - num_instances - )); - } - std::shared_ptr array; - ARROW_RETURN_NOT_OK(builder->Finish(&array)); - return array; - } } // namespace rerun diff --git a/rerun_cpp/tests/generated/components/affix_fuzzer10.hpp b/rerun_cpp/tests/generated/components/affix_fuzzer10.hpp index be6eb3e5e3b3..4ac4b9646e58 100644 --- a/rerun_cpp/tests/generated/components/affix_fuzzer10.hpp +++ b/rerun_cpp/tests/generated/components/affix_fuzzer10.hpp @@ -45,15 +45,15 @@ namespace rerun { /// Returns the arrow data type this type corresponds to. static const std::shared_ptr& arrow_datatype(); + /// Serializes an array of `rerun::components::AffixFuzzer10` into an arrow array. + static Result> to_arrow( + const components::AffixFuzzer10* instances, size_t num_instances + ); + /// Fills an arrow array builder with an array of this type. static rerun::Error fill_arrow_array_builder( arrow::StringBuilder* builder, const components::AffixFuzzer10* elements, size_t num_elements ); - - /// Serializes an array of `rerun::components::AffixFuzzer10` into an arrow array. - static Result> to_arrow( - const components::AffixFuzzer10* instances, size_t num_instances - ); }; } // namespace rerun diff --git a/rerun_cpp/tests/generated/components/affix_fuzzer11.cpp b/rerun_cpp/tests/generated/components/affix_fuzzer11.cpp index 2b6e72ef7303..dc44a5f59ee0 100644 --- a/rerun_cpp/tests/generated/components/affix_fuzzer11.cpp +++ b/rerun_cpp/tests/generated/components/affix_fuzzer11.cpp @@ -14,6 +14,26 @@ namespace rerun { return datatype; } + Result> Loggable::to_arrow( + const components::AffixFuzzer11* instances, size_t num_instances + ) { + // TODO(andreas): Allow configuring the memory pool. + arrow::MemoryPool* pool = arrow::default_memory_pool(); + auto datatype = arrow_datatype(); + + ARROW_ASSIGN_OR_RAISE(auto builder, arrow::MakeBuilder(datatype, pool)) + if (instances && num_instances > 0) { + RR_RETURN_NOT_OK(Loggable::fill_arrow_array_builder( + static_cast(builder.get()), + instances, + num_instances + )); + } + std::shared_ptr array; + ARROW_RETURN_NOT_OK(builder->Finish(&array)); + return array; + } + rerun::Error Loggable::fill_arrow_array_builder( arrow::ListBuilder* builder, const components::AffixFuzzer11* elements, size_t num_elements ) { @@ -47,24 +67,4 @@ namespace rerun { return Error::ok(); } - - Result> Loggable::to_arrow( - const components::AffixFuzzer11* instances, size_t num_instances - ) { - // TODO(andreas): Allow configuring the memory pool. - arrow::MemoryPool* pool = arrow::default_memory_pool(); - auto datatype = arrow_datatype(); - - ARROW_ASSIGN_OR_RAISE(auto builder, arrow::MakeBuilder(datatype, pool)) - if (instances && num_instances > 0) { - RR_RETURN_NOT_OK(Loggable::fill_arrow_array_builder( - static_cast(builder.get()), - instances, - num_instances - )); - } - std::shared_ptr array; - ARROW_RETURN_NOT_OK(builder->Finish(&array)); - return array; - } } // namespace rerun diff --git a/rerun_cpp/tests/generated/components/affix_fuzzer11.hpp b/rerun_cpp/tests/generated/components/affix_fuzzer11.hpp index 5f97c75bf997..6e0c12d2e35d 100644 --- a/rerun_cpp/tests/generated/components/affix_fuzzer11.hpp +++ b/rerun_cpp/tests/generated/components/affix_fuzzer11.hpp @@ -45,15 +45,15 @@ namespace rerun { /// Returns the arrow data type this type corresponds to. static const std::shared_ptr& arrow_datatype(); + /// Serializes an array of `rerun::components::AffixFuzzer11` into an arrow array. + static Result> to_arrow( + const components::AffixFuzzer11* instances, size_t num_instances + ); + /// Fills an arrow array builder with an array of this type. static rerun::Error fill_arrow_array_builder( arrow::ListBuilder* builder, const components::AffixFuzzer11* elements, size_t num_elements ); - - /// Serializes an array of `rerun::components::AffixFuzzer11` into an arrow array. - static Result> to_arrow( - const components::AffixFuzzer11* instances, size_t num_instances - ); }; } // namespace rerun diff --git a/rerun_cpp/tests/generated/components/affix_fuzzer12.cpp b/rerun_cpp/tests/generated/components/affix_fuzzer12.cpp index 99583da21d37..d59f0da2fece 100644 --- a/rerun_cpp/tests/generated/components/affix_fuzzer12.cpp +++ b/rerun_cpp/tests/generated/components/affix_fuzzer12.cpp @@ -14,6 +14,26 @@ namespace rerun { return datatype; } + Result> Loggable::to_arrow( + const components::AffixFuzzer12* instances, size_t num_instances + ) { + // TODO(andreas): Allow configuring the memory pool. + arrow::MemoryPool* pool = arrow::default_memory_pool(); + auto datatype = arrow_datatype(); + + ARROW_ASSIGN_OR_RAISE(auto builder, arrow::MakeBuilder(datatype, pool)) + if (instances && num_instances > 0) { + RR_RETURN_NOT_OK(Loggable::fill_arrow_array_builder( + static_cast(builder.get()), + instances, + num_instances + )); + } + std::shared_ptr array; + ARROW_RETURN_NOT_OK(builder->Finish(&array)); + return array; + } + rerun::Error Loggable::fill_arrow_array_builder( arrow::ListBuilder* builder, const components::AffixFuzzer12* elements, size_t num_elements ) { @@ -42,24 +62,4 @@ namespace rerun { return Error::ok(); } - - Result> Loggable::to_arrow( - const components::AffixFuzzer12* instances, size_t num_instances - ) { - // TODO(andreas): Allow configuring the memory pool. - arrow::MemoryPool* pool = arrow::default_memory_pool(); - auto datatype = arrow_datatype(); - - ARROW_ASSIGN_OR_RAISE(auto builder, arrow::MakeBuilder(datatype, pool)) - if (instances && num_instances > 0) { - RR_RETURN_NOT_OK(Loggable::fill_arrow_array_builder( - static_cast(builder.get()), - instances, - num_instances - )); - } - std::shared_ptr array; - ARROW_RETURN_NOT_OK(builder->Finish(&array)); - return array; - } } // namespace rerun diff --git a/rerun_cpp/tests/generated/components/affix_fuzzer12.hpp b/rerun_cpp/tests/generated/components/affix_fuzzer12.hpp index b6c871e41238..67eb0b0f9f51 100644 --- a/rerun_cpp/tests/generated/components/affix_fuzzer12.hpp +++ b/rerun_cpp/tests/generated/components/affix_fuzzer12.hpp @@ -45,15 +45,15 @@ namespace rerun { /// Returns the arrow data type this type corresponds to. static const std::shared_ptr& arrow_datatype(); + /// Serializes an array of `rerun::components::AffixFuzzer12` into an arrow array. + static Result> to_arrow( + const components::AffixFuzzer12* instances, size_t num_instances + ); + /// Fills an arrow array builder with an array of this type. static rerun::Error fill_arrow_array_builder( arrow::ListBuilder* builder, const components::AffixFuzzer12* elements, size_t num_elements ); - - /// Serializes an array of `rerun::components::AffixFuzzer12` into an arrow array. - static Result> to_arrow( - const components::AffixFuzzer12* instances, size_t num_instances - ); }; } // namespace rerun diff --git a/rerun_cpp/tests/generated/components/affix_fuzzer13.cpp b/rerun_cpp/tests/generated/components/affix_fuzzer13.cpp index af289b73fa32..704ebab1b261 100644 --- a/rerun_cpp/tests/generated/components/affix_fuzzer13.cpp +++ b/rerun_cpp/tests/generated/components/affix_fuzzer13.cpp @@ -14,6 +14,26 @@ namespace rerun { return datatype; } + Result> Loggable::to_arrow( + const components::AffixFuzzer13* instances, size_t num_instances + ) { + // TODO(andreas): Allow configuring the memory pool. + arrow::MemoryPool* pool = arrow::default_memory_pool(); + auto datatype = arrow_datatype(); + + ARROW_ASSIGN_OR_RAISE(auto builder, arrow::MakeBuilder(datatype, pool)) + if (instances && num_instances > 0) { + RR_RETURN_NOT_OK(Loggable::fill_arrow_array_builder( + static_cast(builder.get()), + instances, + num_instances + )); + } + std::shared_ptr array; + ARROW_RETURN_NOT_OK(builder->Finish(&array)); + return array; + } + rerun::Error Loggable::fill_arrow_array_builder( arrow::ListBuilder* builder, const components::AffixFuzzer13* elements, size_t num_elements ) { @@ -47,24 +67,4 @@ namespace rerun { return Error::ok(); } - - Result> Loggable::to_arrow( - const components::AffixFuzzer13* instances, size_t num_instances - ) { - // TODO(andreas): Allow configuring the memory pool. - arrow::MemoryPool* pool = arrow::default_memory_pool(); - auto datatype = arrow_datatype(); - - ARROW_ASSIGN_OR_RAISE(auto builder, arrow::MakeBuilder(datatype, pool)) - if (instances && num_instances > 0) { - RR_RETURN_NOT_OK(Loggable::fill_arrow_array_builder( - static_cast(builder.get()), - instances, - num_instances - )); - } - std::shared_ptr array; - ARROW_RETURN_NOT_OK(builder->Finish(&array)); - return array; - } } // namespace rerun diff --git a/rerun_cpp/tests/generated/components/affix_fuzzer13.hpp b/rerun_cpp/tests/generated/components/affix_fuzzer13.hpp index d660a53c00c0..fd0b77e38ea8 100644 --- a/rerun_cpp/tests/generated/components/affix_fuzzer13.hpp +++ b/rerun_cpp/tests/generated/components/affix_fuzzer13.hpp @@ -48,15 +48,15 @@ namespace rerun { /// Returns the arrow data type this type corresponds to. static const std::shared_ptr& arrow_datatype(); + /// Serializes an array of `rerun::components::AffixFuzzer13` into an arrow array. + static Result> to_arrow( + const components::AffixFuzzer13* instances, size_t num_instances + ); + /// Fills an arrow array builder with an array of this type. static rerun::Error fill_arrow_array_builder( arrow::ListBuilder* builder, const components::AffixFuzzer13* elements, size_t num_elements ); - - /// Serializes an array of `rerun::components::AffixFuzzer13` into an arrow array. - static Result> to_arrow( - const components::AffixFuzzer13* instances, size_t num_instances - ); }; } // namespace rerun diff --git a/rerun_cpp/tests/generated/components/affix_fuzzer14.cpp b/rerun_cpp/tests/generated/components/affix_fuzzer14.cpp deleted file mode 100644 index c63ce249ffe0..000000000000 --- a/rerun_cpp/tests/generated/components/affix_fuzzer14.cpp +++ /dev/null @@ -1,52 +0,0 @@ -// DO NOT EDIT! This file was auto-generated by crates/re_types_builder/src/codegen/cpp/mod.rs -// Based on "crates/re_types/definitions/rerun/testing/components/fuzzy.fbs". - -#include "affix_fuzzer14.hpp" - -#include "../datatypes/affix_fuzzer3.hpp" - -#include -#include - -namespace rerun::components {} - -namespace rerun { - const std::shared_ptr& Loggable::arrow_datatype() { - static const auto datatype = Loggable::arrow_datatype(); - return datatype; - } - - rerun::Error Loggable::fill_arrow_array_builder( - arrow::DenseUnionBuilder* builder, const components::AffixFuzzer14* elements, - size_t num_elements - ) { - static_assert(sizeof(rerun::datatypes::AffixFuzzer3) == sizeof(components::AffixFuzzer14)); - RR_RETURN_NOT_OK(Loggable::fill_arrow_array_builder( - builder, - reinterpret_cast(elements), - num_elements - )); - - return Error::ok(); - } - - Result> Loggable::to_arrow( - const components::AffixFuzzer14* instances, size_t num_instances - ) { - // TODO(andreas): Allow configuring the memory pool. - arrow::MemoryPool* pool = arrow::default_memory_pool(); - auto datatype = arrow_datatype(); - - ARROW_ASSIGN_OR_RAISE(auto builder, arrow::MakeBuilder(datatype, pool)) - if (instances && num_instances > 0) { - RR_RETURN_NOT_OK(Loggable::fill_arrow_array_builder( - static_cast(builder.get()), - instances, - num_instances - )); - } - std::shared_ptr array; - ARROW_RETURN_NOT_OK(builder->Finish(&array)); - return array; - } -} // namespace rerun diff --git a/rerun_cpp/tests/generated/components/affix_fuzzer14.hpp b/rerun_cpp/tests/generated/components/affix_fuzzer14.hpp index edc82924979d..84e1629d6858 100644 --- a/rerun_cpp/tests/generated/components/affix_fuzzer14.hpp +++ b/rerun_cpp/tests/generated/components/affix_fuzzer14.hpp @@ -10,12 +10,6 @@ #include #include -namespace arrow { - class Array; - class DataType; - class DenseUnionBuilder; -} // namespace arrow - namespace rerun::components { struct AffixFuzzer14 { rerun::datatypes::AffixFuzzer3 single_required_union; @@ -39,8 +33,7 @@ namespace rerun::components { } // namespace rerun::components namespace rerun { - template - struct Loggable; + static_assert(sizeof(rerun::datatypes::AffixFuzzer3) == sizeof(components::AffixFuzzer14)); /// \private template <> @@ -48,17 +41,18 @@ namespace rerun { static constexpr const char Name[] = "rerun.testing.components.AffixFuzzer14"; /// Returns the arrow data type this type corresponds to. - static const std::shared_ptr& arrow_datatype(); - - /// Fills an arrow array builder with an array of this type. - static rerun::Error fill_arrow_array_builder( - arrow::DenseUnionBuilder* builder, const components::AffixFuzzer14* elements, - size_t num_elements - ); + static const std::shared_ptr& arrow_datatype() { + return Loggable::arrow_datatype(); + } /// Serializes an array of `rerun::components::AffixFuzzer14` into an arrow array. static Result> to_arrow( const components::AffixFuzzer14* instances, size_t num_instances - ); + ) { + return Loggable::to_arrow( + &instances->single_required_union, + num_instances + ); + } }; } // namespace rerun diff --git a/rerun_cpp/tests/generated/components/affix_fuzzer15.cpp b/rerun_cpp/tests/generated/components/affix_fuzzer15.cpp index 8721eb6510c9..c57b88ac7cb4 100644 --- a/rerun_cpp/tests/generated/components/affix_fuzzer15.cpp +++ b/rerun_cpp/tests/generated/components/affix_fuzzer15.cpp @@ -16,23 +16,6 @@ namespace rerun { return datatype; } - rerun::Error Loggable::fill_arrow_array_builder( - arrow::DenseUnionBuilder* builder, const components::AffixFuzzer15* elements, - size_t num_elements - ) { - (void)builder; - (void)elements; - (void)num_elements; - if (true) { - return rerun::Error( - ErrorCode::NotImplemented, - "TODO(andreas) Handle nullable extensions" - ); - } - - return Error::ok(); - } - Result> Loggable::to_arrow( const components::AffixFuzzer15* instances, size_t num_instances ) { @@ -52,4 +35,21 @@ namespace rerun { ARROW_RETURN_NOT_OK(builder->Finish(&array)); return array; } + + rerun::Error Loggable::fill_arrow_array_builder( + arrow::DenseUnionBuilder* builder, const components::AffixFuzzer15* elements, + size_t num_elements + ) { + (void)builder; + (void)elements; + (void)num_elements; + if (true) { + return rerun::Error( + ErrorCode::NotImplemented, + "TODO(andreas) Handle nullable extensions" + ); + } + + return Error::ok(); + } } // namespace rerun diff --git a/rerun_cpp/tests/generated/components/affix_fuzzer15.hpp b/rerun_cpp/tests/generated/components/affix_fuzzer15.hpp index e20cba371a1e..bef43ae34b0a 100644 --- a/rerun_cpp/tests/generated/components/affix_fuzzer15.hpp +++ b/rerun_cpp/tests/generated/components/affix_fuzzer15.hpp @@ -53,15 +53,15 @@ namespace rerun { /// Returns the arrow data type this type corresponds to. static const std::shared_ptr& arrow_datatype(); + /// Serializes an array of `rerun::components::AffixFuzzer15` into an arrow array. + static Result> to_arrow( + const components::AffixFuzzer15* instances, size_t num_instances + ); + /// Fills an arrow array builder with an array of this type. static rerun::Error fill_arrow_array_builder( arrow::DenseUnionBuilder* builder, const components::AffixFuzzer15* elements, size_t num_elements ); - - /// Serializes an array of `rerun::components::AffixFuzzer15` into an arrow array. - static Result> to_arrow( - const components::AffixFuzzer15* instances, size_t num_instances - ); }; } // namespace rerun diff --git a/rerun_cpp/tests/generated/components/affix_fuzzer16.cpp b/rerun_cpp/tests/generated/components/affix_fuzzer16.cpp index 9517cec76869..170a12c38a12 100644 --- a/rerun_cpp/tests/generated/components/affix_fuzzer16.cpp +++ b/rerun_cpp/tests/generated/components/affix_fuzzer16.cpp @@ -18,6 +18,26 @@ namespace rerun { return datatype; } + Result> Loggable::to_arrow( + const components::AffixFuzzer16* instances, size_t num_instances + ) { + // TODO(andreas): Allow configuring the memory pool. + arrow::MemoryPool* pool = arrow::default_memory_pool(); + auto datatype = arrow_datatype(); + + ARROW_ASSIGN_OR_RAISE(auto builder, arrow::MakeBuilder(datatype, pool)) + if (instances && num_instances > 0) { + RR_RETURN_NOT_OK(Loggable::fill_arrow_array_builder( + static_cast(builder.get()), + instances, + num_instances + )); + } + std::shared_ptr array; + ARROW_RETURN_NOT_OK(builder->Finish(&array)); + return array; + } + rerun::Error Loggable::fill_arrow_array_builder( arrow::ListBuilder* builder, const components::AffixFuzzer16* elements, size_t num_elements ) { @@ -49,24 +69,4 @@ namespace rerun { return Error::ok(); } - - Result> Loggable::to_arrow( - const components::AffixFuzzer16* instances, size_t num_instances - ) { - // TODO(andreas): Allow configuring the memory pool. - arrow::MemoryPool* pool = arrow::default_memory_pool(); - auto datatype = arrow_datatype(); - - ARROW_ASSIGN_OR_RAISE(auto builder, arrow::MakeBuilder(datatype, pool)) - if (instances && num_instances > 0) { - RR_RETURN_NOT_OK(Loggable::fill_arrow_array_builder( - static_cast(builder.get()), - instances, - num_instances - )); - } - std::shared_ptr array; - ARROW_RETURN_NOT_OK(builder->Finish(&array)); - return array; - } } // namespace rerun diff --git a/rerun_cpp/tests/generated/components/affix_fuzzer16.hpp b/rerun_cpp/tests/generated/components/affix_fuzzer16.hpp index 5febd65b9473..083568bce67c 100644 --- a/rerun_cpp/tests/generated/components/affix_fuzzer16.hpp +++ b/rerun_cpp/tests/generated/components/affix_fuzzer16.hpp @@ -48,15 +48,15 @@ namespace rerun { /// Returns the arrow data type this type corresponds to. static const std::shared_ptr& arrow_datatype(); + /// Serializes an array of `rerun::components::AffixFuzzer16` into an arrow array. + static Result> to_arrow( + const components::AffixFuzzer16* instances, size_t num_instances + ); + /// Fills an arrow array builder with an array of this type. static rerun::Error fill_arrow_array_builder( arrow::ListBuilder* builder, const components::AffixFuzzer16* elements, size_t num_elements ); - - /// Serializes an array of `rerun::components::AffixFuzzer16` into an arrow array. - static Result> to_arrow( - const components::AffixFuzzer16* instances, size_t num_instances - ); }; } // namespace rerun diff --git a/rerun_cpp/tests/generated/components/affix_fuzzer17.cpp b/rerun_cpp/tests/generated/components/affix_fuzzer17.cpp index c7ace54e8822..5fec0dfa3f5d 100644 --- a/rerun_cpp/tests/generated/components/affix_fuzzer17.cpp +++ b/rerun_cpp/tests/generated/components/affix_fuzzer17.cpp @@ -18,6 +18,26 @@ namespace rerun { return datatype; } + Result> Loggable::to_arrow( + const components::AffixFuzzer17* instances, size_t num_instances + ) { + // TODO(andreas): Allow configuring the memory pool. + arrow::MemoryPool* pool = arrow::default_memory_pool(); + auto datatype = arrow_datatype(); + + ARROW_ASSIGN_OR_RAISE(auto builder, arrow::MakeBuilder(datatype, pool)) + if (instances && num_instances > 0) { + RR_RETURN_NOT_OK(Loggable::fill_arrow_array_builder( + static_cast(builder.get()), + instances, + num_instances + )); + } + std::shared_ptr array; + ARROW_RETURN_NOT_OK(builder->Finish(&array)); + return array; + } + rerun::Error Loggable::fill_arrow_array_builder( arrow::ListBuilder* builder, const components::AffixFuzzer17* elements, size_t num_elements ) { @@ -55,24 +75,4 @@ namespace rerun { return Error::ok(); } - - Result> Loggable::to_arrow( - const components::AffixFuzzer17* instances, size_t num_instances - ) { - // TODO(andreas): Allow configuring the memory pool. - arrow::MemoryPool* pool = arrow::default_memory_pool(); - auto datatype = arrow_datatype(); - - ARROW_ASSIGN_OR_RAISE(auto builder, arrow::MakeBuilder(datatype, pool)) - if (instances && num_instances > 0) { - RR_RETURN_NOT_OK(Loggable::fill_arrow_array_builder( - static_cast(builder.get()), - instances, - num_instances - )); - } - std::shared_ptr array; - ARROW_RETURN_NOT_OK(builder->Finish(&array)); - return array; - } } // namespace rerun diff --git a/rerun_cpp/tests/generated/components/affix_fuzzer17.hpp b/rerun_cpp/tests/generated/components/affix_fuzzer17.hpp index aafce9c411b7..5343a93e97ef 100644 --- a/rerun_cpp/tests/generated/components/affix_fuzzer17.hpp +++ b/rerun_cpp/tests/generated/components/affix_fuzzer17.hpp @@ -51,15 +51,15 @@ namespace rerun { /// Returns the arrow data type this type corresponds to. static const std::shared_ptr& arrow_datatype(); + /// Serializes an array of `rerun::components::AffixFuzzer17` into an arrow array. + static Result> to_arrow( + const components::AffixFuzzer17* instances, size_t num_instances + ); + /// Fills an arrow array builder with an array of this type. static rerun::Error fill_arrow_array_builder( arrow::ListBuilder* builder, const components::AffixFuzzer17* elements, size_t num_elements ); - - /// Serializes an array of `rerun::components::AffixFuzzer17` into an arrow array. - static Result> to_arrow( - const components::AffixFuzzer17* instances, size_t num_instances - ); }; } // namespace rerun diff --git a/rerun_cpp/tests/generated/components/affix_fuzzer18.cpp b/rerun_cpp/tests/generated/components/affix_fuzzer18.cpp index 29d9405d7e13..efc00931c9fd 100644 --- a/rerun_cpp/tests/generated/components/affix_fuzzer18.cpp +++ b/rerun_cpp/tests/generated/components/affix_fuzzer18.cpp @@ -18,6 +18,26 @@ namespace rerun { return datatype; } + Result> Loggable::to_arrow( + const components::AffixFuzzer18* instances, size_t num_instances + ) { + // TODO(andreas): Allow configuring the memory pool. + arrow::MemoryPool* pool = arrow::default_memory_pool(); + auto datatype = arrow_datatype(); + + ARROW_ASSIGN_OR_RAISE(auto builder, arrow::MakeBuilder(datatype, pool)) + if (instances && num_instances > 0) { + RR_RETURN_NOT_OK(Loggable::fill_arrow_array_builder( + static_cast(builder.get()), + instances, + num_instances + )); + } + std::shared_ptr array; + ARROW_RETURN_NOT_OK(builder->Finish(&array)); + return array; + } + rerun::Error Loggable::fill_arrow_array_builder( arrow::ListBuilder* builder, const components::AffixFuzzer18* elements, size_t num_elements ) { @@ -55,24 +75,4 @@ namespace rerun { return Error::ok(); } - - Result> Loggable::to_arrow( - const components::AffixFuzzer18* instances, size_t num_instances - ) { - // TODO(andreas): Allow configuring the memory pool. - arrow::MemoryPool* pool = arrow::default_memory_pool(); - auto datatype = arrow_datatype(); - - ARROW_ASSIGN_OR_RAISE(auto builder, arrow::MakeBuilder(datatype, pool)) - if (instances && num_instances > 0) { - RR_RETURN_NOT_OK(Loggable::fill_arrow_array_builder( - static_cast(builder.get()), - instances, - num_instances - )); - } - std::shared_ptr array; - ARROW_RETURN_NOT_OK(builder->Finish(&array)); - return array; - } } // namespace rerun diff --git a/rerun_cpp/tests/generated/components/affix_fuzzer18.hpp b/rerun_cpp/tests/generated/components/affix_fuzzer18.hpp index 62654f1286fb..cc5e948a644f 100644 --- a/rerun_cpp/tests/generated/components/affix_fuzzer18.hpp +++ b/rerun_cpp/tests/generated/components/affix_fuzzer18.hpp @@ -51,15 +51,15 @@ namespace rerun { /// Returns the arrow data type this type corresponds to. static const std::shared_ptr& arrow_datatype(); + /// Serializes an array of `rerun::components::AffixFuzzer18` into an arrow array. + static Result> to_arrow( + const components::AffixFuzzer18* instances, size_t num_instances + ); + /// Fills an arrow array builder with an array of this type. static rerun::Error fill_arrow_array_builder( arrow::ListBuilder* builder, const components::AffixFuzzer18* elements, size_t num_elements ); - - /// Serializes an array of `rerun::components::AffixFuzzer18` into an arrow array. - static Result> to_arrow( - const components::AffixFuzzer18* instances, size_t num_instances - ); }; } // namespace rerun diff --git a/rerun_cpp/tests/generated/components/affix_fuzzer19.cpp b/rerun_cpp/tests/generated/components/affix_fuzzer19.cpp deleted file mode 100644 index a1d137975059..000000000000 --- a/rerun_cpp/tests/generated/components/affix_fuzzer19.cpp +++ /dev/null @@ -1,52 +0,0 @@ -// DO NOT EDIT! This file was auto-generated by crates/re_types_builder/src/codegen/cpp/mod.rs -// Based on "crates/re_types/definitions/rerun/testing/components/fuzzy.fbs". - -#include "affix_fuzzer19.hpp" - -#include "../datatypes/affix_fuzzer5.hpp" - -#include -#include - -namespace rerun::components {} - -namespace rerun { - const std::shared_ptr& Loggable::arrow_datatype() { - static const auto datatype = Loggable::arrow_datatype(); - return datatype; - } - - rerun::Error Loggable::fill_arrow_array_builder( - arrow::StructBuilder* builder, const components::AffixFuzzer19* elements, - size_t num_elements - ) { - static_assert(sizeof(rerun::datatypes::AffixFuzzer5) == sizeof(components::AffixFuzzer19)); - RR_RETURN_NOT_OK(Loggable::fill_arrow_array_builder( - builder, - reinterpret_cast(elements), - num_elements - )); - - return Error::ok(); - } - - Result> Loggable::to_arrow( - const components::AffixFuzzer19* instances, size_t num_instances - ) { - // TODO(andreas): Allow configuring the memory pool. - arrow::MemoryPool* pool = arrow::default_memory_pool(); - auto datatype = arrow_datatype(); - - ARROW_ASSIGN_OR_RAISE(auto builder, arrow::MakeBuilder(datatype, pool)) - if (instances && num_instances > 0) { - RR_RETURN_NOT_OK(Loggable::fill_arrow_array_builder( - static_cast(builder.get()), - instances, - num_instances - )); - } - std::shared_ptr array; - ARROW_RETURN_NOT_OK(builder->Finish(&array)); - return array; - } -} // namespace rerun diff --git a/rerun_cpp/tests/generated/components/affix_fuzzer19.hpp b/rerun_cpp/tests/generated/components/affix_fuzzer19.hpp index 93d25280593b..7ca8ec015866 100644 --- a/rerun_cpp/tests/generated/components/affix_fuzzer19.hpp +++ b/rerun_cpp/tests/generated/components/affix_fuzzer19.hpp @@ -12,12 +12,6 @@ #include #include -namespace arrow { - class Array; - class DataType; - class StructBuilder; -} // namespace arrow - namespace rerun::components { struct AffixFuzzer19 { rerun::datatypes::AffixFuzzer5 just_a_table_nothing_shady; @@ -51,8 +45,7 @@ namespace rerun::components { } // namespace rerun::components namespace rerun { - template - struct Loggable; + static_assert(sizeof(rerun::datatypes::AffixFuzzer5) == sizeof(components::AffixFuzzer19)); /// \private template <> @@ -60,17 +53,18 @@ namespace rerun { static constexpr const char Name[] = "rerun.testing.components.AffixFuzzer19"; /// Returns the arrow data type this type corresponds to. - static const std::shared_ptr& arrow_datatype(); - - /// Fills an arrow array builder with an array of this type. - static rerun::Error fill_arrow_array_builder( - arrow::StructBuilder* builder, const components::AffixFuzzer19* elements, - size_t num_elements - ); + static const std::shared_ptr& arrow_datatype() { + return Loggable::arrow_datatype(); + } /// Serializes an array of `rerun::components::AffixFuzzer19` into an arrow array. static Result> to_arrow( const components::AffixFuzzer19* instances, size_t num_instances - ); + ) { + return Loggable::to_arrow( + &instances->just_a_table_nothing_shady, + num_instances + ); + } }; } // namespace rerun diff --git a/rerun_cpp/tests/generated/components/affix_fuzzer2.cpp b/rerun_cpp/tests/generated/components/affix_fuzzer2.cpp deleted file mode 100644 index 0322452b2343..000000000000 --- a/rerun_cpp/tests/generated/components/affix_fuzzer2.cpp +++ /dev/null @@ -1,51 +0,0 @@ -// DO NOT EDIT! This file was auto-generated by crates/re_types_builder/src/codegen/cpp/mod.rs -// Based on "crates/re_types/definitions/rerun/testing/components/fuzzy.fbs". - -#include "affix_fuzzer2.hpp" - -#include "../datatypes/affix_fuzzer1.hpp" - -#include -#include - -namespace rerun::components {} - -namespace rerun { - const std::shared_ptr& Loggable::arrow_datatype() { - static const auto datatype = Loggable::arrow_datatype(); - return datatype; - } - - rerun::Error Loggable::fill_arrow_array_builder( - arrow::StructBuilder* builder, const components::AffixFuzzer2* elements, size_t num_elements - ) { - static_assert(sizeof(rerun::datatypes::AffixFuzzer1) == sizeof(components::AffixFuzzer2)); - RR_RETURN_NOT_OK(Loggable::fill_arrow_array_builder( - builder, - reinterpret_cast(elements), - num_elements - )); - - return Error::ok(); - } - - Result> Loggable::to_arrow( - const components::AffixFuzzer2* instances, size_t num_instances - ) { - // TODO(andreas): Allow configuring the memory pool. - arrow::MemoryPool* pool = arrow::default_memory_pool(); - auto datatype = arrow_datatype(); - - ARROW_ASSIGN_OR_RAISE(auto builder, arrow::MakeBuilder(datatype, pool)) - if (instances && num_instances > 0) { - RR_RETURN_NOT_OK(Loggable::fill_arrow_array_builder( - static_cast(builder.get()), - instances, - num_instances - )); - } - std::shared_ptr array; - ARROW_RETURN_NOT_OK(builder->Finish(&array)); - return array; - } -} // namespace rerun diff --git a/rerun_cpp/tests/generated/components/affix_fuzzer2.hpp b/rerun_cpp/tests/generated/components/affix_fuzzer2.hpp index 11d843acd322..8e77e3ee7dd6 100644 --- a/rerun_cpp/tests/generated/components/affix_fuzzer2.hpp +++ b/rerun_cpp/tests/generated/components/affix_fuzzer2.hpp @@ -10,12 +10,6 @@ #include #include -namespace arrow { - class Array; - class DataType; - class StructBuilder; -} // namespace arrow - namespace rerun::components { struct AffixFuzzer2 { rerun::datatypes::AffixFuzzer1 single_required; @@ -39,8 +33,7 @@ namespace rerun::components { } // namespace rerun::components namespace rerun { - template - struct Loggable; + static_assert(sizeof(rerun::datatypes::AffixFuzzer1) == sizeof(components::AffixFuzzer2)); /// \private template <> @@ -48,17 +41,18 @@ namespace rerun { static constexpr const char Name[] = "rerun.testing.components.AffixFuzzer2"; /// Returns the arrow data type this type corresponds to. - static const std::shared_ptr& arrow_datatype(); - - /// Fills an arrow array builder with an array of this type. - static rerun::Error fill_arrow_array_builder( - arrow::StructBuilder* builder, const components::AffixFuzzer2* elements, - size_t num_elements - ); + static const std::shared_ptr& arrow_datatype() { + return Loggable::arrow_datatype(); + } /// Serializes an array of `rerun::components::AffixFuzzer2` into an arrow array. static Result> to_arrow( const components::AffixFuzzer2* instances, size_t num_instances - ); + ) { + return Loggable::to_arrow( + &instances->single_required, + num_instances + ); + } }; } // namespace rerun diff --git a/rerun_cpp/tests/generated/components/affix_fuzzer20.cpp b/rerun_cpp/tests/generated/components/affix_fuzzer20.cpp deleted file mode 100644 index a4d7fc2d1dd6..000000000000 --- a/rerun_cpp/tests/generated/components/affix_fuzzer20.cpp +++ /dev/null @@ -1,52 +0,0 @@ -// DO NOT EDIT! This file was auto-generated by crates/re_types_builder/src/codegen/cpp/mod.rs -// Based on "crates/re_types/definitions/rerun/testing/components/fuzzy.fbs". - -#include "affix_fuzzer20.hpp" - -#include "../datatypes/affix_fuzzer20.hpp" - -#include -#include - -namespace rerun::components {} - -namespace rerun { - const std::shared_ptr& Loggable::arrow_datatype() { - static const auto datatype = Loggable::arrow_datatype(); - return datatype; - } - - rerun::Error Loggable::fill_arrow_array_builder( - arrow::StructBuilder* builder, const components::AffixFuzzer20* elements, - size_t num_elements - ) { - static_assert(sizeof(rerun::datatypes::AffixFuzzer20) == sizeof(components::AffixFuzzer20)); - RR_RETURN_NOT_OK(Loggable::fill_arrow_array_builder( - builder, - reinterpret_cast(elements), - num_elements - )); - - return Error::ok(); - } - - Result> Loggable::to_arrow( - const components::AffixFuzzer20* instances, size_t num_instances - ) { - // TODO(andreas): Allow configuring the memory pool. - arrow::MemoryPool* pool = arrow::default_memory_pool(); - auto datatype = arrow_datatype(); - - ARROW_ASSIGN_OR_RAISE(auto builder, arrow::MakeBuilder(datatype, pool)) - if (instances && num_instances > 0) { - RR_RETURN_NOT_OK(Loggable::fill_arrow_array_builder( - static_cast(builder.get()), - instances, - num_instances - )); - } - std::shared_ptr array; - ARROW_RETURN_NOT_OK(builder->Finish(&array)); - return array; - } -} // namespace rerun diff --git a/rerun_cpp/tests/generated/components/affix_fuzzer20.hpp b/rerun_cpp/tests/generated/components/affix_fuzzer20.hpp index 11819e4b8a11..9f234f684382 100644 --- a/rerun_cpp/tests/generated/components/affix_fuzzer20.hpp +++ b/rerun_cpp/tests/generated/components/affix_fuzzer20.hpp @@ -10,12 +10,6 @@ #include #include -namespace arrow { - class Array; - class DataType; - class StructBuilder; -} // namespace arrow - namespace rerun::components { struct AffixFuzzer20 { rerun::datatypes::AffixFuzzer20 nested_transparent; @@ -39,8 +33,7 @@ namespace rerun::components { } // namespace rerun::components namespace rerun { - template - struct Loggable; + static_assert(sizeof(rerun::datatypes::AffixFuzzer20) == sizeof(components::AffixFuzzer20)); /// \private template <> @@ -48,17 +41,18 @@ namespace rerun { static constexpr const char Name[] = "rerun.testing.components.AffixFuzzer20"; /// Returns the arrow data type this type corresponds to. - static const std::shared_ptr& arrow_datatype(); - - /// Fills an arrow array builder with an array of this type. - static rerun::Error fill_arrow_array_builder( - arrow::StructBuilder* builder, const components::AffixFuzzer20* elements, - size_t num_elements - ); + static const std::shared_ptr& arrow_datatype() { + return Loggable::arrow_datatype(); + } /// Serializes an array of `rerun::components::AffixFuzzer20` into an arrow array. static Result> to_arrow( const components::AffixFuzzer20* instances, size_t num_instances - ); + ) { + return Loggable::to_arrow( + &instances->nested_transparent, + num_instances + ); + } }; } // namespace rerun diff --git a/rerun_cpp/tests/generated/components/affix_fuzzer21.cpp b/rerun_cpp/tests/generated/components/affix_fuzzer21.cpp deleted file mode 100644 index 59080ae202ab..000000000000 --- a/rerun_cpp/tests/generated/components/affix_fuzzer21.cpp +++ /dev/null @@ -1,52 +0,0 @@ -// DO NOT EDIT! This file was auto-generated by crates/re_types_builder/src/codegen/cpp/mod.rs -// Based on "crates/re_types/definitions/rerun/testing/components/fuzzy.fbs". - -#include "affix_fuzzer21.hpp" - -#include "../datatypes/affix_fuzzer21.hpp" - -#include -#include - -namespace rerun::components {} - -namespace rerun { - const std::shared_ptr& Loggable::arrow_datatype() { - static const auto datatype = Loggable::arrow_datatype(); - return datatype; - } - - rerun::Error Loggable::fill_arrow_array_builder( - arrow::StructBuilder* builder, const components::AffixFuzzer21* elements, - size_t num_elements - ) { - static_assert(sizeof(rerun::datatypes::AffixFuzzer21) == sizeof(components::AffixFuzzer21)); - RR_RETURN_NOT_OK(Loggable::fill_arrow_array_builder( - builder, - reinterpret_cast(elements), - num_elements - )); - - return Error::ok(); - } - - Result> Loggable::to_arrow( - const components::AffixFuzzer21* instances, size_t num_instances - ) { - // TODO(andreas): Allow configuring the memory pool. - arrow::MemoryPool* pool = arrow::default_memory_pool(); - auto datatype = arrow_datatype(); - - ARROW_ASSIGN_OR_RAISE(auto builder, arrow::MakeBuilder(datatype, pool)) - if (instances && num_instances > 0) { - RR_RETURN_NOT_OK(Loggable::fill_arrow_array_builder( - static_cast(builder.get()), - instances, - num_instances - )); - } - std::shared_ptr array; - ARROW_RETURN_NOT_OK(builder->Finish(&array)); - return array; - } -} // namespace rerun diff --git a/rerun_cpp/tests/generated/components/affix_fuzzer21.hpp b/rerun_cpp/tests/generated/components/affix_fuzzer21.hpp index 0f003d9edb58..1c156173723b 100644 --- a/rerun_cpp/tests/generated/components/affix_fuzzer21.hpp +++ b/rerun_cpp/tests/generated/components/affix_fuzzer21.hpp @@ -10,12 +10,6 @@ #include #include -namespace arrow { - class Array; - class DataType; - class StructBuilder; -} // namespace arrow - namespace rerun::components { struct AffixFuzzer21 { rerun::datatypes::AffixFuzzer21 nested_halves; @@ -39,8 +33,7 @@ namespace rerun::components { } // namespace rerun::components namespace rerun { - template - struct Loggable; + static_assert(sizeof(rerun::datatypes::AffixFuzzer21) == sizeof(components::AffixFuzzer21)); /// \private template <> @@ -48,17 +41,18 @@ namespace rerun { static constexpr const char Name[] = "rerun.testing.components.AffixFuzzer21"; /// Returns the arrow data type this type corresponds to. - static const std::shared_ptr& arrow_datatype(); - - /// Fills an arrow array builder with an array of this type. - static rerun::Error fill_arrow_array_builder( - arrow::StructBuilder* builder, const components::AffixFuzzer21* elements, - size_t num_elements - ); + static const std::shared_ptr& arrow_datatype() { + return Loggable::arrow_datatype(); + } /// Serializes an array of `rerun::components::AffixFuzzer21` into an arrow array. static Result> to_arrow( const components::AffixFuzzer21* instances, size_t num_instances - ); + ) { + return Loggable::to_arrow( + &instances->nested_halves, + num_instances + ); + } }; } // namespace rerun diff --git a/rerun_cpp/tests/generated/components/affix_fuzzer22.cpp b/rerun_cpp/tests/generated/components/affix_fuzzer22.cpp index 262f30ff2771..14639eb55526 100644 --- a/rerun_cpp/tests/generated/components/affix_fuzzer22.cpp +++ b/rerun_cpp/tests/generated/components/affix_fuzzer22.cpp @@ -16,23 +16,6 @@ namespace rerun { return datatype; } - rerun::Error Loggable::fill_arrow_array_builder( - arrow::StructBuilder* builder, const components::AffixFuzzer22* elements, - size_t num_elements - ) { - (void)builder; - (void)elements; - (void)num_elements; - if (true) { - return rerun::Error( - ErrorCode::NotImplemented, - "TODO(andreas) Handle nullable extensions" - ); - } - - return Error::ok(); - } - Result> Loggable::to_arrow( const components::AffixFuzzer22* instances, size_t num_instances ) { @@ -52,4 +35,21 @@ namespace rerun { ARROW_RETURN_NOT_OK(builder->Finish(&array)); return array; } + + rerun::Error Loggable::fill_arrow_array_builder( + arrow::StructBuilder* builder, const components::AffixFuzzer22* elements, + size_t num_elements + ) { + (void)builder; + (void)elements; + (void)num_elements; + if (true) { + return rerun::Error( + ErrorCode::NotImplemented, + "TODO(andreas) Handle nullable extensions" + ); + } + + return Error::ok(); + } } // namespace rerun diff --git a/rerun_cpp/tests/generated/components/affix_fuzzer22.hpp b/rerun_cpp/tests/generated/components/affix_fuzzer22.hpp index 752e4b9ff016..a88fa3e25e28 100644 --- a/rerun_cpp/tests/generated/components/affix_fuzzer22.hpp +++ b/rerun_cpp/tests/generated/components/affix_fuzzer22.hpp @@ -61,15 +61,15 @@ namespace rerun { /// Returns the arrow data type this type corresponds to. static const std::shared_ptr& arrow_datatype(); + /// Serializes an array of `rerun::components::AffixFuzzer22` into an arrow array. + static Result> to_arrow( + const components::AffixFuzzer22* instances, size_t num_instances + ); + /// Fills an arrow array builder with an array of this type. static rerun::Error fill_arrow_array_builder( arrow::StructBuilder* builder, const components::AffixFuzzer22* elements, size_t num_elements ); - - /// Serializes an array of `rerun::components::AffixFuzzer22` into an arrow array. - static Result> to_arrow( - const components::AffixFuzzer22* instances, size_t num_instances - ); }; } // namespace rerun diff --git a/rerun_cpp/tests/generated/components/affix_fuzzer3.cpp b/rerun_cpp/tests/generated/components/affix_fuzzer3.cpp deleted file mode 100644 index 2a0cf09e81ad..000000000000 --- a/rerun_cpp/tests/generated/components/affix_fuzzer3.cpp +++ /dev/null @@ -1,51 +0,0 @@ -// DO NOT EDIT! This file was auto-generated by crates/re_types_builder/src/codegen/cpp/mod.rs -// Based on "crates/re_types/definitions/rerun/testing/components/fuzzy.fbs". - -#include "affix_fuzzer3.hpp" - -#include "../datatypes/affix_fuzzer1.hpp" - -#include -#include - -namespace rerun::components {} - -namespace rerun { - const std::shared_ptr& Loggable::arrow_datatype() { - static const auto datatype = Loggable::arrow_datatype(); - return datatype; - } - - rerun::Error Loggable::fill_arrow_array_builder( - arrow::StructBuilder* builder, const components::AffixFuzzer3* elements, size_t num_elements - ) { - static_assert(sizeof(rerun::datatypes::AffixFuzzer1) == sizeof(components::AffixFuzzer3)); - RR_RETURN_NOT_OK(Loggable::fill_arrow_array_builder( - builder, - reinterpret_cast(elements), - num_elements - )); - - return Error::ok(); - } - - Result> Loggable::to_arrow( - const components::AffixFuzzer3* instances, size_t num_instances - ) { - // TODO(andreas): Allow configuring the memory pool. - arrow::MemoryPool* pool = arrow::default_memory_pool(); - auto datatype = arrow_datatype(); - - ARROW_ASSIGN_OR_RAISE(auto builder, arrow::MakeBuilder(datatype, pool)) - if (instances && num_instances > 0) { - RR_RETURN_NOT_OK(Loggable::fill_arrow_array_builder( - static_cast(builder.get()), - instances, - num_instances - )); - } - std::shared_ptr array; - ARROW_RETURN_NOT_OK(builder->Finish(&array)); - return array; - } -} // namespace rerun diff --git a/rerun_cpp/tests/generated/components/affix_fuzzer3.hpp b/rerun_cpp/tests/generated/components/affix_fuzzer3.hpp index ae2cf4b6ab6a..4729969aaf00 100644 --- a/rerun_cpp/tests/generated/components/affix_fuzzer3.hpp +++ b/rerun_cpp/tests/generated/components/affix_fuzzer3.hpp @@ -10,12 +10,6 @@ #include #include -namespace arrow { - class Array; - class DataType; - class StructBuilder; -} // namespace arrow - namespace rerun::components { struct AffixFuzzer3 { rerun::datatypes::AffixFuzzer1 single_required; @@ -39,8 +33,7 @@ namespace rerun::components { } // namespace rerun::components namespace rerun { - template - struct Loggable; + static_assert(sizeof(rerun::datatypes::AffixFuzzer1) == sizeof(components::AffixFuzzer3)); /// \private template <> @@ -48,17 +41,18 @@ namespace rerun { static constexpr const char Name[] = "rerun.testing.components.AffixFuzzer3"; /// Returns the arrow data type this type corresponds to. - static const std::shared_ptr& arrow_datatype(); - - /// Fills an arrow array builder with an array of this type. - static rerun::Error fill_arrow_array_builder( - arrow::StructBuilder* builder, const components::AffixFuzzer3* elements, - size_t num_elements - ); + static const std::shared_ptr& arrow_datatype() { + return Loggable::arrow_datatype(); + } /// Serializes an array of `rerun::components::AffixFuzzer3` into an arrow array. static Result> to_arrow( const components::AffixFuzzer3* instances, size_t num_instances - ); + ) { + return Loggable::to_arrow( + &instances->single_required, + num_instances + ); + } }; } // namespace rerun diff --git a/rerun_cpp/tests/generated/components/affix_fuzzer4.cpp b/rerun_cpp/tests/generated/components/affix_fuzzer4.cpp index 7c442a4c385c..74d54523c0a0 100644 --- a/rerun_cpp/tests/generated/components/affix_fuzzer4.cpp +++ b/rerun_cpp/tests/generated/components/affix_fuzzer4.cpp @@ -16,22 +16,6 @@ namespace rerun { return datatype; } - rerun::Error Loggable::fill_arrow_array_builder( - arrow::StructBuilder* builder, const components::AffixFuzzer4* elements, size_t num_elements - ) { - (void)builder; - (void)elements; - (void)num_elements; - if (true) { - return rerun::Error( - ErrorCode::NotImplemented, - "TODO(andreas) Handle nullable extensions" - ); - } - - return Error::ok(); - } - Result> Loggable::to_arrow( const components::AffixFuzzer4* instances, size_t num_instances ) { @@ -51,4 +35,20 @@ namespace rerun { ARROW_RETURN_NOT_OK(builder->Finish(&array)); return array; } + + rerun::Error Loggable::fill_arrow_array_builder( + arrow::StructBuilder* builder, const components::AffixFuzzer4* elements, size_t num_elements + ) { + (void)builder; + (void)elements; + (void)num_elements; + if (true) { + return rerun::Error( + ErrorCode::NotImplemented, + "TODO(andreas) Handle nullable extensions" + ); + } + + return Error::ok(); + } } // namespace rerun diff --git a/rerun_cpp/tests/generated/components/affix_fuzzer4.hpp b/rerun_cpp/tests/generated/components/affix_fuzzer4.hpp index ed30b1c556ca..f2275c5ecc19 100644 --- a/rerun_cpp/tests/generated/components/affix_fuzzer4.hpp +++ b/rerun_cpp/tests/generated/components/affix_fuzzer4.hpp @@ -51,15 +51,15 @@ namespace rerun { /// Returns the arrow data type this type corresponds to. static const std::shared_ptr& arrow_datatype(); + /// Serializes an array of `rerun::components::AffixFuzzer4` into an arrow array. + static Result> to_arrow( + const components::AffixFuzzer4* instances, size_t num_instances + ); + /// Fills an arrow array builder with an array of this type. static rerun::Error fill_arrow_array_builder( arrow::StructBuilder* builder, const components::AffixFuzzer4* elements, size_t num_elements ); - - /// Serializes an array of `rerun::components::AffixFuzzer4` into an arrow array. - static Result> to_arrow( - const components::AffixFuzzer4* instances, size_t num_instances - ); }; } // namespace rerun diff --git a/rerun_cpp/tests/generated/components/affix_fuzzer5.cpp b/rerun_cpp/tests/generated/components/affix_fuzzer5.cpp index d36b5485a404..d7a8bd739a4c 100644 --- a/rerun_cpp/tests/generated/components/affix_fuzzer5.cpp +++ b/rerun_cpp/tests/generated/components/affix_fuzzer5.cpp @@ -16,22 +16,6 @@ namespace rerun { return datatype; } - rerun::Error Loggable::fill_arrow_array_builder( - arrow::StructBuilder* builder, const components::AffixFuzzer5* elements, size_t num_elements - ) { - (void)builder; - (void)elements; - (void)num_elements; - if (true) { - return rerun::Error( - ErrorCode::NotImplemented, - "TODO(andreas) Handle nullable extensions" - ); - } - - return Error::ok(); - } - Result> Loggable::to_arrow( const components::AffixFuzzer5* instances, size_t num_instances ) { @@ -51,4 +35,20 @@ namespace rerun { ARROW_RETURN_NOT_OK(builder->Finish(&array)); return array; } + + rerun::Error Loggable::fill_arrow_array_builder( + arrow::StructBuilder* builder, const components::AffixFuzzer5* elements, size_t num_elements + ) { + (void)builder; + (void)elements; + (void)num_elements; + if (true) { + return rerun::Error( + ErrorCode::NotImplemented, + "TODO(andreas) Handle nullable extensions" + ); + } + + return Error::ok(); + } } // namespace rerun diff --git a/rerun_cpp/tests/generated/components/affix_fuzzer5.hpp b/rerun_cpp/tests/generated/components/affix_fuzzer5.hpp index a79a6cbb8346..a361c2533852 100644 --- a/rerun_cpp/tests/generated/components/affix_fuzzer5.hpp +++ b/rerun_cpp/tests/generated/components/affix_fuzzer5.hpp @@ -51,15 +51,15 @@ namespace rerun { /// Returns the arrow data type this type corresponds to. static const std::shared_ptr& arrow_datatype(); + /// Serializes an array of `rerun::components::AffixFuzzer5` into an arrow array. + static Result> to_arrow( + const components::AffixFuzzer5* instances, size_t num_instances + ); + /// Fills an arrow array builder with an array of this type. static rerun::Error fill_arrow_array_builder( arrow::StructBuilder* builder, const components::AffixFuzzer5* elements, size_t num_elements ); - - /// Serializes an array of `rerun::components::AffixFuzzer5` into an arrow array. - static Result> to_arrow( - const components::AffixFuzzer5* instances, size_t num_instances - ); }; } // namespace rerun diff --git a/rerun_cpp/tests/generated/components/affix_fuzzer6.cpp b/rerun_cpp/tests/generated/components/affix_fuzzer6.cpp index 3b986cdf7cbc..6032468ba14a 100644 --- a/rerun_cpp/tests/generated/components/affix_fuzzer6.cpp +++ b/rerun_cpp/tests/generated/components/affix_fuzzer6.cpp @@ -16,22 +16,6 @@ namespace rerun { return datatype; } - rerun::Error Loggable::fill_arrow_array_builder( - arrow::StructBuilder* builder, const components::AffixFuzzer6* elements, size_t num_elements - ) { - (void)builder; - (void)elements; - (void)num_elements; - if (true) { - return rerun::Error( - ErrorCode::NotImplemented, - "TODO(andreas) Handle nullable extensions" - ); - } - - return Error::ok(); - } - Result> Loggable::to_arrow( const components::AffixFuzzer6* instances, size_t num_instances ) { @@ -51,4 +35,20 @@ namespace rerun { ARROW_RETURN_NOT_OK(builder->Finish(&array)); return array; } + + rerun::Error Loggable::fill_arrow_array_builder( + arrow::StructBuilder* builder, const components::AffixFuzzer6* elements, size_t num_elements + ) { + (void)builder; + (void)elements; + (void)num_elements; + if (true) { + return rerun::Error( + ErrorCode::NotImplemented, + "TODO(andreas) Handle nullable extensions" + ); + } + + return Error::ok(); + } } // namespace rerun diff --git a/rerun_cpp/tests/generated/components/affix_fuzzer6.hpp b/rerun_cpp/tests/generated/components/affix_fuzzer6.hpp index 7ab19340eb6a..88fc39e9d1e0 100644 --- a/rerun_cpp/tests/generated/components/affix_fuzzer6.hpp +++ b/rerun_cpp/tests/generated/components/affix_fuzzer6.hpp @@ -51,15 +51,15 @@ namespace rerun { /// Returns the arrow data type this type corresponds to. static const std::shared_ptr& arrow_datatype(); + /// Serializes an array of `rerun::components::AffixFuzzer6` into an arrow array. + static Result> to_arrow( + const components::AffixFuzzer6* instances, size_t num_instances + ); + /// Fills an arrow array builder with an array of this type. static rerun::Error fill_arrow_array_builder( arrow::StructBuilder* builder, const components::AffixFuzzer6* elements, size_t num_elements ); - - /// Serializes an array of `rerun::components::AffixFuzzer6` into an arrow array. - static Result> to_arrow( - const components::AffixFuzzer6* instances, size_t num_instances - ); }; } // namespace rerun diff --git a/rerun_cpp/tests/generated/components/affix_fuzzer7.cpp b/rerun_cpp/tests/generated/components/affix_fuzzer7.cpp index 03314c7cbf70..036f8f0df314 100644 --- a/rerun_cpp/tests/generated/components/affix_fuzzer7.cpp +++ b/rerun_cpp/tests/generated/components/affix_fuzzer7.cpp @@ -18,6 +18,26 @@ namespace rerun { return datatype; } + Result> Loggable::to_arrow( + const components::AffixFuzzer7* instances, size_t num_instances + ) { + // TODO(andreas): Allow configuring the memory pool. + arrow::MemoryPool* pool = arrow::default_memory_pool(); + auto datatype = arrow_datatype(); + + ARROW_ASSIGN_OR_RAISE(auto builder, arrow::MakeBuilder(datatype, pool)) + if (instances && num_instances > 0) { + RR_RETURN_NOT_OK(Loggable::fill_arrow_array_builder( + static_cast(builder.get()), + instances, + num_instances + )); + } + std::shared_ptr array; + ARROW_RETURN_NOT_OK(builder->Finish(&array)); + return array; + } + rerun::Error Loggable::fill_arrow_array_builder( arrow::ListBuilder* builder, const components::AffixFuzzer7* elements, size_t num_elements ) { @@ -55,24 +75,4 @@ namespace rerun { return Error::ok(); } - - Result> Loggable::to_arrow( - const components::AffixFuzzer7* instances, size_t num_instances - ) { - // TODO(andreas): Allow configuring the memory pool. - arrow::MemoryPool* pool = arrow::default_memory_pool(); - auto datatype = arrow_datatype(); - - ARROW_ASSIGN_OR_RAISE(auto builder, arrow::MakeBuilder(datatype, pool)) - if (instances && num_instances > 0) { - RR_RETURN_NOT_OK(Loggable::fill_arrow_array_builder( - static_cast(builder.get()), - instances, - num_instances - )); - } - std::shared_ptr array; - ARROW_RETURN_NOT_OK(builder->Finish(&array)); - return array; - } } // namespace rerun diff --git a/rerun_cpp/tests/generated/components/affix_fuzzer7.hpp b/rerun_cpp/tests/generated/components/affix_fuzzer7.hpp index 84a735a0851e..60211aa0236b 100644 --- a/rerun_cpp/tests/generated/components/affix_fuzzer7.hpp +++ b/rerun_cpp/tests/generated/components/affix_fuzzer7.hpp @@ -50,15 +50,15 @@ namespace rerun { /// Returns the arrow data type this type corresponds to. static const std::shared_ptr& arrow_datatype(); + /// Serializes an array of `rerun::components::AffixFuzzer7` into an arrow array. + static Result> to_arrow( + const components::AffixFuzzer7* instances, size_t num_instances + ); + /// Fills an arrow array builder with an array of this type. static rerun::Error fill_arrow_array_builder( arrow::ListBuilder* builder, const components::AffixFuzzer7* elements, size_t num_elements ); - - /// Serializes an array of `rerun::components::AffixFuzzer7` into an arrow array. - static Result> to_arrow( - const components::AffixFuzzer7* instances, size_t num_instances - ); }; } // namespace rerun diff --git a/rerun_cpp/tests/generated/components/affix_fuzzer8.cpp b/rerun_cpp/tests/generated/components/affix_fuzzer8.cpp index 704c1ccc40bd..d5f582915fa7 100644 --- a/rerun_cpp/tests/generated/components/affix_fuzzer8.cpp +++ b/rerun_cpp/tests/generated/components/affix_fuzzer8.cpp @@ -14,6 +14,26 @@ namespace rerun { return datatype; } + Result> Loggable::to_arrow( + const components::AffixFuzzer8* instances, size_t num_instances + ) { + // TODO(andreas): Allow configuring the memory pool. + arrow::MemoryPool* pool = arrow::default_memory_pool(); + auto datatype = arrow_datatype(); + + ARROW_ASSIGN_OR_RAISE(auto builder, arrow::MakeBuilder(datatype, pool)) + if (instances && num_instances > 0) { + RR_RETURN_NOT_OK(Loggable::fill_arrow_array_builder( + static_cast(builder.get()), + instances, + num_instances + )); + } + std::shared_ptr array; + ARROW_RETURN_NOT_OK(builder->Finish(&array)); + return array; + } + rerun::Error Loggable::fill_arrow_array_builder( arrow::FloatBuilder* builder, const components::AffixFuzzer8* elements, size_t num_elements ) { @@ -39,24 +59,4 @@ namespace rerun { return Error::ok(); } - - Result> Loggable::to_arrow( - const components::AffixFuzzer8* instances, size_t num_instances - ) { - // TODO(andreas): Allow configuring the memory pool. - arrow::MemoryPool* pool = arrow::default_memory_pool(); - auto datatype = arrow_datatype(); - - ARROW_ASSIGN_OR_RAISE(auto builder, arrow::MakeBuilder(datatype, pool)) - if (instances && num_instances > 0) { - RR_RETURN_NOT_OK(Loggable::fill_arrow_array_builder( - static_cast(builder.get()), - instances, - num_instances - )); - } - std::shared_ptr array; - ARROW_RETURN_NOT_OK(builder->Finish(&array)); - return array; - } } // namespace rerun diff --git a/rerun_cpp/tests/generated/components/affix_fuzzer8.hpp b/rerun_cpp/tests/generated/components/affix_fuzzer8.hpp index 47e4ed0c6e78..b9e48f54cf29 100644 --- a/rerun_cpp/tests/generated/components/affix_fuzzer8.hpp +++ b/rerun_cpp/tests/generated/components/affix_fuzzer8.hpp @@ -48,15 +48,15 @@ namespace rerun { /// Returns the arrow data type this type corresponds to. static const std::shared_ptr& arrow_datatype(); + /// Serializes an array of `rerun::components::AffixFuzzer8` into an arrow array. + static Result> to_arrow( + const components::AffixFuzzer8* instances, size_t num_instances + ); + /// Fills an arrow array builder with an array of this type. static rerun::Error fill_arrow_array_builder( arrow::FloatBuilder* builder, const components::AffixFuzzer8* elements, size_t num_elements ); - - /// Serializes an array of `rerun::components::AffixFuzzer8` into an arrow array. - static Result> to_arrow( - const components::AffixFuzzer8* instances, size_t num_instances - ); }; } // namespace rerun diff --git a/rerun_cpp/tests/generated/components/affix_fuzzer9.cpp b/rerun_cpp/tests/generated/components/affix_fuzzer9.cpp index bc47e005af4a..b38865650fd6 100644 --- a/rerun_cpp/tests/generated/components/affix_fuzzer9.cpp +++ b/rerun_cpp/tests/generated/components/affix_fuzzer9.cpp @@ -14,6 +14,26 @@ namespace rerun { return datatype; } + Result> Loggable::to_arrow( + const components::AffixFuzzer9* instances, size_t num_instances + ) { + // TODO(andreas): Allow configuring the memory pool. + arrow::MemoryPool* pool = arrow::default_memory_pool(); + auto datatype = arrow_datatype(); + + ARROW_ASSIGN_OR_RAISE(auto builder, arrow::MakeBuilder(datatype, pool)) + if (instances && num_instances > 0) { + RR_RETURN_NOT_OK(Loggable::fill_arrow_array_builder( + static_cast(builder.get()), + instances, + num_instances + )); + } + std::shared_ptr array; + ARROW_RETURN_NOT_OK(builder->Finish(&array)); + return array; + } + rerun::Error Loggable::fill_arrow_array_builder( arrow::StringBuilder* builder, const components::AffixFuzzer9* elements, size_t num_elements ) { @@ -34,24 +54,4 @@ namespace rerun { return Error::ok(); } - - Result> Loggable::to_arrow( - const components::AffixFuzzer9* instances, size_t num_instances - ) { - // TODO(andreas): Allow configuring the memory pool. - arrow::MemoryPool* pool = arrow::default_memory_pool(); - auto datatype = arrow_datatype(); - - ARROW_ASSIGN_OR_RAISE(auto builder, arrow::MakeBuilder(datatype, pool)) - if (instances && num_instances > 0) { - RR_RETURN_NOT_OK(Loggable::fill_arrow_array_builder( - static_cast(builder.get()), - instances, - num_instances - )); - } - std::shared_ptr array; - ARROW_RETURN_NOT_OK(builder->Finish(&array)); - return array; - } } // namespace rerun diff --git a/rerun_cpp/tests/generated/components/affix_fuzzer9.hpp b/rerun_cpp/tests/generated/components/affix_fuzzer9.hpp index ffef331faa8c..1f0000c56671 100644 --- a/rerun_cpp/tests/generated/components/affix_fuzzer9.hpp +++ b/rerun_cpp/tests/generated/components/affix_fuzzer9.hpp @@ -44,15 +44,15 @@ namespace rerun { /// Returns the arrow data type this type corresponds to. static const std::shared_ptr& arrow_datatype(); + /// Serializes an array of `rerun::components::AffixFuzzer9` into an arrow array. + static Result> to_arrow( + const components::AffixFuzzer9* instances, size_t num_instances + ); + /// Fills an arrow array builder with an array of this type. static rerun::Error fill_arrow_array_builder( arrow::StringBuilder* builder, const components::AffixFuzzer9* elements, size_t num_elements ); - - /// Serializes an array of `rerun::components::AffixFuzzer9` into an arrow array. - static Result> to_arrow( - const components::AffixFuzzer9* instances, size_t num_instances - ); }; } // namespace rerun diff --git a/rerun_cpp/tests/generated/components/enum_test.cpp b/rerun_cpp/tests/generated/components/enum_test.cpp index 6e49ee6a4d35..21d298a88f98 100644 --- a/rerun_cpp/tests/generated/components/enum_test.cpp +++ b/rerun_cpp/tests/generated/components/enum_test.cpp @@ -20,6 +20,26 @@ namespace rerun { return datatype; } + Result> Loggable::to_arrow( + const components::EnumTest* instances, size_t num_instances + ) { + // TODO(andreas): Allow configuring the memory pool. + arrow::MemoryPool* pool = arrow::default_memory_pool(); + auto datatype = arrow_datatype(); + + ARROW_ASSIGN_OR_RAISE(auto builder, arrow::MakeBuilder(datatype, pool)) + if (instances && num_instances > 0) { + RR_RETURN_NOT_OK(Loggable::fill_arrow_array_builder( + static_cast(builder.get()), + instances, + num_instances + )); + } + std::shared_ptr array; + ARROW_RETURN_NOT_OK(builder->Finish(&array)); + return array; + } + rerun::Error Loggable::fill_arrow_array_builder( arrow::SparseUnionBuilder* builder, const components::EnumTest* elements, size_t num_elements @@ -42,24 +62,4 @@ namespace rerun { return Error::ok(); } - - Result> Loggable::to_arrow( - const components::EnumTest* instances, size_t num_instances - ) { - // TODO(andreas): Allow configuring the memory pool. - arrow::MemoryPool* pool = arrow::default_memory_pool(); - auto datatype = arrow_datatype(); - - ARROW_ASSIGN_OR_RAISE(auto builder, arrow::MakeBuilder(datatype, pool)) - if (instances && num_instances > 0) { - RR_RETURN_NOT_OK(Loggable::fill_arrow_array_builder( - static_cast(builder.get()), - instances, - num_instances - )); - } - std::shared_ptr array; - ARROW_RETURN_NOT_OK(builder->Finish(&array)); - return array; - } } // namespace rerun diff --git a/rerun_cpp/tests/generated/components/enum_test.hpp b/rerun_cpp/tests/generated/components/enum_test.hpp index efe3e5db4827..88b8e46d41a0 100644 --- a/rerun_cpp/tests/generated/components/enum_test.hpp +++ b/rerun_cpp/tests/generated/components/enum_test.hpp @@ -49,15 +49,15 @@ namespace rerun { /// Returns the arrow data type this type corresponds to. static const std::shared_ptr& arrow_datatype(); + /// Serializes an array of `rerun::components::EnumTest` into an arrow array. + static Result> to_arrow( + const components::EnumTest* instances, size_t num_instances + ); + /// Fills an arrow array builder with an array of this type. static rerun::Error fill_arrow_array_builder( arrow::SparseUnionBuilder* builder, const components::EnumTest* elements, size_t num_elements ); - - /// Serializes an array of `rerun::components::EnumTest` into an arrow array. - static Result> to_arrow( - const components::EnumTest* instances, size_t num_instances - ); }; } // namespace rerun diff --git a/rerun_cpp/tests/generated/datatypes/affix_fuzzer1.cpp b/rerun_cpp/tests/generated/datatypes/affix_fuzzer1.cpp index d3f6acdd3a0d..427721e1da88 100644 --- a/rerun_cpp/tests/generated/datatypes/affix_fuzzer1.cpp +++ b/rerun_cpp/tests/generated/datatypes/affix_fuzzer1.cpp @@ -42,6 +42,26 @@ namespace rerun { return datatype; } + Result> Loggable::to_arrow( + const datatypes::AffixFuzzer1* instances, size_t num_instances + ) { + // TODO(andreas): Allow configuring the memory pool. + arrow::MemoryPool* pool = arrow::default_memory_pool(); + auto datatype = arrow_datatype(); + + ARROW_ASSIGN_OR_RAISE(auto builder, arrow::MakeBuilder(datatype, pool)) + if (instances && num_instances > 0) { + RR_RETURN_NOT_OK(Loggable::fill_arrow_array_builder( + static_cast(builder.get()), + instances, + num_instances + )); + } + std::shared_ptr array; + ARROW_RETURN_NOT_OK(builder->Finish(&array)); + return array; + } + rerun::Error Loggable::fill_arrow_array_builder( arrow::StructBuilder* builder, const datatypes::AffixFuzzer1* elements, size_t num_elements ) { @@ -184,24 +204,4 @@ namespace rerun { return Error::ok(); } - - Result> Loggable::to_arrow( - const datatypes::AffixFuzzer1* instances, size_t num_instances - ) { - // TODO(andreas): Allow configuring the memory pool. - arrow::MemoryPool* pool = arrow::default_memory_pool(); - auto datatype = arrow_datatype(); - - ARROW_ASSIGN_OR_RAISE(auto builder, arrow::MakeBuilder(datatype, pool)) - if (instances && num_instances > 0) { - RR_RETURN_NOT_OK(Loggable::fill_arrow_array_builder( - static_cast(builder.get()), - instances, - num_instances - )); - } - std::shared_ptr array; - ARROW_RETURN_NOT_OK(builder->Finish(&array)); - return array; - } } // namespace rerun diff --git a/rerun_cpp/tests/generated/datatypes/affix_fuzzer1.hpp b/rerun_cpp/tests/generated/datatypes/affix_fuzzer1.hpp index 2b9258b54703..cd13b39ecc42 100644 --- a/rerun_cpp/tests/generated/datatypes/affix_fuzzer1.hpp +++ b/rerun_cpp/tests/generated/datatypes/affix_fuzzer1.hpp @@ -55,15 +55,15 @@ namespace rerun { /// Returns the arrow data type this type corresponds to. static const std::shared_ptr& arrow_datatype(); + /// Serializes an array of `rerun::datatypes::AffixFuzzer1` into an arrow array. + static Result> to_arrow( + const datatypes::AffixFuzzer1* instances, size_t num_instances + ); + /// Fills an arrow array builder with an array of this type. static rerun::Error fill_arrow_array_builder( arrow::StructBuilder* builder, const datatypes::AffixFuzzer1* elements, size_t num_elements ); - - /// Serializes an array of `rerun::datatypes::AffixFuzzer1` into an arrow array. - static Result> to_arrow( - const datatypes::AffixFuzzer1* instances, size_t num_instances - ); }; } // namespace rerun diff --git a/rerun_cpp/tests/generated/datatypes/affix_fuzzer2.cpp b/rerun_cpp/tests/generated/datatypes/affix_fuzzer2.cpp index 1d07c46e2aab..53624e07c005 100644 --- a/rerun_cpp/tests/generated/datatypes/affix_fuzzer2.cpp +++ b/rerun_cpp/tests/generated/datatypes/affix_fuzzer2.cpp @@ -14,6 +14,26 @@ namespace rerun { return datatype; } + Result> Loggable::to_arrow( + const datatypes::AffixFuzzer2* instances, size_t num_instances + ) { + // TODO(andreas): Allow configuring the memory pool. + arrow::MemoryPool* pool = arrow::default_memory_pool(); + auto datatype = arrow_datatype(); + + ARROW_ASSIGN_OR_RAISE(auto builder, arrow::MakeBuilder(datatype, pool)) + if (instances && num_instances > 0) { + RR_RETURN_NOT_OK(Loggable::fill_arrow_array_builder( + static_cast(builder.get()), + instances, + num_instances + )); + } + std::shared_ptr array; + ARROW_RETURN_NOT_OK(builder->Finish(&array)); + return array; + } + rerun::Error Loggable::fill_arrow_array_builder( arrow::FloatBuilder* builder, const datatypes::AffixFuzzer2* elements, size_t num_elements ) { @@ -39,24 +59,4 @@ namespace rerun { return Error::ok(); } - - Result> Loggable::to_arrow( - const datatypes::AffixFuzzer2* instances, size_t num_instances - ) { - // TODO(andreas): Allow configuring the memory pool. - arrow::MemoryPool* pool = arrow::default_memory_pool(); - auto datatype = arrow_datatype(); - - ARROW_ASSIGN_OR_RAISE(auto builder, arrow::MakeBuilder(datatype, pool)) - if (instances && num_instances > 0) { - RR_RETURN_NOT_OK(Loggable::fill_arrow_array_builder( - static_cast(builder.get()), - instances, - num_instances - )); - } - std::shared_ptr array; - ARROW_RETURN_NOT_OK(builder->Finish(&array)); - return array; - } } // namespace rerun diff --git a/rerun_cpp/tests/generated/datatypes/affix_fuzzer2.hpp b/rerun_cpp/tests/generated/datatypes/affix_fuzzer2.hpp index 5a569fd419c0..bc2659ff6536 100644 --- a/rerun_cpp/tests/generated/datatypes/affix_fuzzer2.hpp +++ b/rerun_cpp/tests/generated/datatypes/affix_fuzzer2.hpp @@ -48,15 +48,15 @@ namespace rerun { /// Returns the arrow data type this type corresponds to. static const std::shared_ptr& arrow_datatype(); + /// Serializes an array of `rerun::datatypes::AffixFuzzer2` into an arrow array. + static Result> to_arrow( + const datatypes::AffixFuzzer2* instances, size_t num_instances + ); + /// Fills an arrow array builder with an array of this type. static rerun::Error fill_arrow_array_builder( arrow::FloatBuilder* builder, const datatypes::AffixFuzzer2* elements, size_t num_elements ); - - /// Serializes an array of `rerun::datatypes::AffixFuzzer2` into an arrow array. - static Result> to_arrow( - const datatypes::AffixFuzzer2* instances, size_t num_instances - ); }; } // namespace rerun diff --git a/rerun_cpp/tests/generated/datatypes/affix_fuzzer20.cpp b/rerun_cpp/tests/generated/datatypes/affix_fuzzer20.cpp index 1612e23d47c2..423d3cd9da2b 100644 --- a/rerun_cpp/tests/generated/datatypes/affix_fuzzer20.cpp +++ b/rerun_cpp/tests/generated/datatypes/affix_fuzzer20.cpp @@ -24,6 +24,26 @@ namespace rerun { return datatype; } + Result> Loggable::to_arrow( + const datatypes::AffixFuzzer20* instances, size_t num_instances + ) { + // TODO(andreas): Allow configuring the memory pool. + arrow::MemoryPool* pool = arrow::default_memory_pool(); + auto datatype = arrow_datatype(); + + ARROW_ASSIGN_OR_RAISE(auto builder, arrow::MakeBuilder(datatype, pool)) + if (instances && num_instances > 0) { + RR_RETURN_NOT_OK(Loggable::fill_arrow_array_builder( + static_cast(builder.get()), + instances, + num_instances + )); + } + std::shared_ptr array; + ARROW_RETURN_NOT_OK(builder->Finish(&array)); + return array; + } + rerun::Error Loggable::fill_arrow_array_builder( arrow::StructBuilder* builder, const datatypes::AffixFuzzer20* elements, size_t num_elements ) { @@ -67,24 +87,4 @@ namespace rerun { return Error::ok(); } - - Result> Loggable::to_arrow( - const datatypes::AffixFuzzer20* instances, size_t num_instances - ) { - // TODO(andreas): Allow configuring the memory pool. - arrow::MemoryPool* pool = arrow::default_memory_pool(); - auto datatype = arrow_datatype(); - - ARROW_ASSIGN_OR_RAISE(auto builder, arrow::MakeBuilder(datatype, pool)) - if (instances && num_instances > 0) { - RR_RETURN_NOT_OK(Loggable::fill_arrow_array_builder( - static_cast(builder.get()), - instances, - num_instances - )); - } - std::shared_ptr array; - ARROW_RETURN_NOT_OK(builder->Finish(&array)); - return array; - } } // namespace rerun diff --git a/rerun_cpp/tests/generated/datatypes/affix_fuzzer20.hpp b/rerun_cpp/tests/generated/datatypes/affix_fuzzer20.hpp index 87ab4122d26e..d74c987c3e54 100644 --- a/rerun_cpp/tests/generated/datatypes/affix_fuzzer20.hpp +++ b/rerun_cpp/tests/generated/datatypes/affix_fuzzer20.hpp @@ -39,15 +39,15 @@ namespace rerun { /// Returns the arrow data type this type corresponds to. static const std::shared_ptr& arrow_datatype(); + /// Serializes an array of `rerun::datatypes::AffixFuzzer20` into an arrow array. + static Result> to_arrow( + const datatypes::AffixFuzzer20* instances, size_t num_instances + ); + /// Fills an arrow array builder with an array of this type. static rerun::Error fill_arrow_array_builder( arrow::StructBuilder* builder, const datatypes::AffixFuzzer20* elements, size_t num_elements ); - - /// Serializes an array of `rerun::datatypes::AffixFuzzer20` into an arrow array. - static Result> to_arrow( - const datatypes::AffixFuzzer20* instances, size_t num_instances - ); }; } // namespace rerun diff --git a/rerun_cpp/tests/generated/datatypes/affix_fuzzer21.cpp b/rerun_cpp/tests/generated/datatypes/affix_fuzzer21.cpp index b2adc03028ec..e064544b3425 100644 --- a/rerun_cpp/tests/generated/datatypes/affix_fuzzer21.cpp +++ b/rerun_cpp/tests/generated/datatypes/affix_fuzzer21.cpp @@ -21,6 +21,26 @@ namespace rerun { return datatype; } + Result> Loggable::to_arrow( + const datatypes::AffixFuzzer21* instances, size_t num_instances + ) { + // TODO(andreas): Allow configuring the memory pool. + arrow::MemoryPool* pool = arrow::default_memory_pool(); + auto datatype = arrow_datatype(); + + ARROW_ASSIGN_OR_RAISE(auto builder, arrow::MakeBuilder(datatype, pool)) + if (instances && num_instances > 0) { + RR_RETURN_NOT_OK(Loggable::fill_arrow_array_builder( + static_cast(builder.get()), + instances, + num_instances + )); + } + std::shared_ptr array; + ARROW_RETURN_NOT_OK(builder->Finish(&array)); + return array; + } + rerun::Error Loggable::fill_arrow_array_builder( arrow::StructBuilder* builder, const datatypes::AffixFuzzer21* elements, size_t num_elements ) { @@ -64,24 +84,4 @@ namespace rerun { return Error::ok(); } - - Result> Loggable::to_arrow( - const datatypes::AffixFuzzer21* instances, size_t num_instances - ) { - // TODO(andreas): Allow configuring the memory pool. - arrow::MemoryPool* pool = arrow::default_memory_pool(); - auto datatype = arrow_datatype(); - - ARROW_ASSIGN_OR_RAISE(auto builder, arrow::MakeBuilder(datatype, pool)) - if (instances && num_instances > 0) { - RR_RETURN_NOT_OK(Loggable::fill_arrow_array_builder( - static_cast(builder.get()), - instances, - num_instances - )); - } - std::shared_ptr array; - ARROW_RETURN_NOT_OK(builder->Finish(&array)); - return array; - } } // namespace rerun diff --git a/rerun_cpp/tests/generated/datatypes/affix_fuzzer21.hpp b/rerun_cpp/tests/generated/datatypes/affix_fuzzer21.hpp index b836c07e0cb3..533040bfd1fe 100644 --- a/rerun_cpp/tests/generated/datatypes/affix_fuzzer21.hpp +++ b/rerun_cpp/tests/generated/datatypes/affix_fuzzer21.hpp @@ -38,15 +38,15 @@ namespace rerun { /// Returns the arrow data type this type corresponds to. static const std::shared_ptr& arrow_datatype(); + /// Serializes an array of `rerun::datatypes::AffixFuzzer21` into an arrow array. + static Result> to_arrow( + const datatypes::AffixFuzzer21* instances, size_t num_instances + ); + /// Fills an arrow array builder with an array of this type. static rerun::Error fill_arrow_array_builder( arrow::StructBuilder* builder, const datatypes::AffixFuzzer21* elements, size_t num_elements ); - - /// Serializes an array of `rerun::datatypes::AffixFuzzer21` into an arrow array. - static Result> to_arrow( - const datatypes::AffixFuzzer21* instances, size_t num_instances - ); }; } // namespace rerun diff --git a/rerun_cpp/tests/generated/datatypes/affix_fuzzer22.cpp b/rerun_cpp/tests/generated/datatypes/affix_fuzzer22.cpp index 22db4f2b1ecb..fea3b46609ba 100644 --- a/rerun_cpp/tests/generated/datatypes/affix_fuzzer22.cpp +++ b/rerun_cpp/tests/generated/datatypes/affix_fuzzer22.cpp @@ -20,6 +20,26 @@ namespace rerun { return datatype; } + Result> Loggable::to_arrow( + const datatypes::AffixFuzzer22* instances, size_t num_instances + ) { + // TODO(andreas): Allow configuring the memory pool. + arrow::MemoryPool* pool = arrow::default_memory_pool(); + auto datatype = arrow_datatype(); + + ARROW_ASSIGN_OR_RAISE(auto builder, arrow::MakeBuilder(datatype, pool)) + if (instances && num_instances > 0) { + RR_RETURN_NOT_OK(Loggable::fill_arrow_array_builder( + static_cast(builder.get()), + instances, + num_instances + )); + } + std::shared_ptr array; + ARROW_RETURN_NOT_OK(builder->Finish(&array)); + return array; + } + rerun::Error Loggable::fill_arrow_array_builder( arrow::StructBuilder* builder, const datatypes::AffixFuzzer22* elements, size_t num_elements ) { @@ -50,24 +70,4 @@ namespace rerun { return Error::ok(); } - - Result> Loggable::to_arrow( - const datatypes::AffixFuzzer22* instances, size_t num_instances - ) { - // TODO(andreas): Allow configuring the memory pool. - arrow::MemoryPool* pool = arrow::default_memory_pool(); - auto datatype = arrow_datatype(); - - ARROW_ASSIGN_OR_RAISE(auto builder, arrow::MakeBuilder(datatype, pool)) - if (instances && num_instances > 0) { - RR_RETURN_NOT_OK(Loggable::fill_arrow_array_builder( - static_cast(builder.get()), - instances, - num_instances - )); - } - std::shared_ptr array; - ARROW_RETURN_NOT_OK(builder->Finish(&array)); - return array; - } } // namespace rerun diff --git a/rerun_cpp/tests/generated/datatypes/affix_fuzzer22.hpp b/rerun_cpp/tests/generated/datatypes/affix_fuzzer22.hpp index d90ab9e3abaa..d43c819bed92 100644 --- a/rerun_cpp/tests/generated/datatypes/affix_fuzzer22.hpp +++ b/rerun_cpp/tests/generated/datatypes/affix_fuzzer22.hpp @@ -43,15 +43,15 @@ namespace rerun { /// Returns the arrow data type this type corresponds to. static const std::shared_ptr& arrow_datatype(); + /// Serializes an array of `rerun::datatypes::AffixFuzzer22` into an arrow array. + static Result> to_arrow( + const datatypes::AffixFuzzer22* instances, size_t num_instances + ); + /// Fills an arrow array builder with an array of this type. static rerun::Error fill_arrow_array_builder( arrow::StructBuilder* builder, const datatypes::AffixFuzzer22* elements, size_t num_elements ); - - /// Serializes an array of `rerun::datatypes::AffixFuzzer22` into an arrow array. - static Result> to_arrow( - const datatypes::AffixFuzzer22* instances, size_t num_instances - ); }; } // namespace rerun diff --git a/rerun_cpp/tests/generated/datatypes/affix_fuzzer3.cpp b/rerun_cpp/tests/generated/datatypes/affix_fuzzer3.cpp index 90344d710ab6..a0387ac838b8 100644 --- a/rerun_cpp/tests/generated/datatypes/affix_fuzzer3.cpp +++ b/rerun_cpp/tests/generated/datatypes/affix_fuzzer3.cpp @@ -34,6 +34,26 @@ namespace rerun { return datatype; } + Result> Loggable::to_arrow( + const datatypes::AffixFuzzer3* instances, size_t num_instances + ) { + // TODO(andreas): Allow configuring the memory pool. + arrow::MemoryPool* pool = arrow::default_memory_pool(); + auto datatype = arrow_datatype(); + + ARROW_ASSIGN_OR_RAISE(auto builder, arrow::MakeBuilder(datatype, pool)) + if (instances && num_instances > 0) { + RR_RETURN_NOT_OK(Loggable::fill_arrow_array_builder( + static_cast(builder.get()), + instances, + num_instances + )); + } + std::shared_ptr array; + ARROW_RETURN_NOT_OK(builder->Finish(&array)); + return array; + } + rerun::Error Loggable::fill_arrow_array_builder( arrow::DenseUnionBuilder* builder, const datatypes::AffixFuzzer3* elements, size_t num_elements @@ -102,24 +122,4 @@ namespace rerun { return Error::ok(); } - - Result> Loggable::to_arrow( - const datatypes::AffixFuzzer3* instances, size_t num_instances - ) { - // TODO(andreas): Allow configuring the memory pool. - arrow::MemoryPool* pool = arrow::default_memory_pool(); - auto datatype = arrow_datatype(); - - ARROW_ASSIGN_OR_RAISE(auto builder, arrow::MakeBuilder(datatype, pool)) - if (instances && num_instances > 0) { - RR_RETURN_NOT_OK(Loggable::fill_arrow_array_builder( - static_cast(builder.get()), - instances, - num_instances - )); - } - std::shared_ptr array; - ARROW_RETURN_NOT_OK(builder->Finish(&array)); - return array; - } } // namespace rerun diff --git a/rerun_cpp/tests/generated/datatypes/affix_fuzzer3.hpp b/rerun_cpp/tests/generated/datatypes/affix_fuzzer3.hpp index 1e5446762d3d..ab0fd0e499fe 100644 --- a/rerun_cpp/tests/generated/datatypes/affix_fuzzer3.hpp +++ b/rerun_cpp/tests/generated/datatypes/affix_fuzzer3.hpp @@ -218,15 +218,15 @@ namespace rerun { /// Returns the arrow data type this type corresponds to. static const std::shared_ptr& arrow_datatype(); + /// Serializes an array of `rerun::datatypes::AffixFuzzer3` into an arrow array. + static Result> to_arrow( + const datatypes::AffixFuzzer3* instances, size_t num_instances + ); + /// Fills an arrow array builder with an array of this type. static rerun::Error fill_arrow_array_builder( arrow::DenseUnionBuilder* builder, const datatypes::AffixFuzzer3* elements, size_t num_elements ); - - /// Serializes an array of `rerun::datatypes::AffixFuzzer3` into an arrow array. - static Result> to_arrow( - const datatypes::AffixFuzzer3* instances, size_t num_instances - ); }; } // namespace rerun diff --git a/rerun_cpp/tests/generated/datatypes/affix_fuzzer4.cpp b/rerun_cpp/tests/generated/datatypes/affix_fuzzer4.cpp index d464eb45d4de..32677fa7fc1a 100644 --- a/rerun_cpp/tests/generated/datatypes/affix_fuzzer4.cpp +++ b/rerun_cpp/tests/generated/datatypes/affix_fuzzer4.cpp @@ -41,6 +41,26 @@ namespace rerun { return datatype; } + Result> Loggable::to_arrow( + const datatypes::AffixFuzzer4* instances, size_t num_instances + ) { + // TODO(andreas): Allow configuring the memory pool. + arrow::MemoryPool* pool = arrow::default_memory_pool(); + auto datatype = arrow_datatype(); + + ARROW_ASSIGN_OR_RAISE(auto builder, arrow::MakeBuilder(datatype, pool)) + if (instances && num_instances > 0) { + RR_RETURN_NOT_OK(Loggable::fill_arrow_array_builder( + static_cast(builder.get()), + instances, + num_instances + )); + } + std::shared_ptr array; + ARROW_RETURN_NOT_OK(builder->Finish(&array)); + return array; + } + rerun::Error Loggable::fill_arrow_array_builder( arrow::DenseUnionBuilder* builder, const datatypes::AffixFuzzer4* elements, size_t num_elements @@ -103,24 +123,4 @@ namespace rerun { return Error::ok(); } - - Result> Loggable::to_arrow( - const datatypes::AffixFuzzer4* instances, size_t num_instances - ) { - // TODO(andreas): Allow configuring the memory pool. - arrow::MemoryPool* pool = arrow::default_memory_pool(); - auto datatype = arrow_datatype(); - - ARROW_ASSIGN_OR_RAISE(auto builder, arrow::MakeBuilder(datatype, pool)) - if (instances && num_instances > 0) { - RR_RETURN_NOT_OK(Loggable::fill_arrow_array_builder( - static_cast(builder.get()), - instances, - num_instances - )); - } - std::shared_ptr array; - ARROW_RETURN_NOT_OK(builder->Finish(&array)); - return array; - } } // namespace rerun diff --git a/rerun_cpp/tests/generated/datatypes/affix_fuzzer4.hpp b/rerun_cpp/tests/generated/datatypes/affix_fuzzer4.hpp index a3f7d2dcaac3..8f029e6ea2c2 100644 --- a/rerun_cpp/tests/generated/datatypes/affix_fuzzer4.hpp +++ b/rerun_cpp/tests/generated/datatypes/affix_fuzzer4.hpp @@ -208,15 +208,15 @@ namespace rerun { /// Returns the arrow data type this type corresponds to. static const std::shared_ptr& arrow_datatype(); + /// Serializes an array of `rerun::datatypes::AffixFuzzer4` into an arrow array. + static Result> to_arrow( + const datatypes::AffixFuzzer4* instances, size_t num_instances + ); + /// Fills an arrow array builder with an array of this type. static rerun::Error fill_arrow_array_builder( arrow::DenseUnionBuilder* builder, const datatypes::AffixFuzzer4* elements, size_t num_elements ); - - /// Serializes an array of `rerun::datatypes::AffixFuzzer4` into an arrow array. - static Result> to_arrow( - const datatypes::AffixFuzzer4* instances, size_t num_instances - ); }; } // namespace rerun diff --git a/rerun_cpp/tests/generated/datatypes/affix_fuzzer5.cpp b/rerun_cpp/tests/generated/datatypes/affix_fuzzer5.cpp index b81ed3261a50..c3302d22215f 100644 --- a/rerun_cpp/tests/generated/datatypes/affix_fuzzer5.cpp +++ b/rerun_cpp/tests/generated/datatypes/affix_fuzzer5.cpp @@ -22,6 +22,26 @@ namespace rerun { return datatype; } + Result> Loggable::to_arrow( + const datatypes::AffixFuzzer5* instances, size_t num_instances + ) { + // TODO(andreas): Allow configuring the memory pool. + arrow::MemoryPool* pool = arrow::default_memory_pool(); + auto datatype = arrow_datatype(); + + ARROW_ASSIGN_OR_RAISE(auto builder, arrow::MakeBuilder(datatype, pool)) + if (instances && num_instances > 0) { + RR_RETURN_NOT_OK(Loggable::fill_arrow_array_builder( + static_cast(builder.get()), + instances, + num_instances + )); + } + std::shared_ptr array; + ARROW_RETURN_NOT_OK(builder->Finish(&array)); + return array; + } + rerun::Error Loggable::fill_arrow_array_builder( arrow::StructBuilder* builder, const datatypes::AffixFuzzer5* elements, size_t num_elements ) { @@ -57,24 +77,4 @@ namespace rerun { return Error::ok(); } - - Result> Loggable::to_arrow( - const datatypes::AffixFuzzer5* instances, size_t num_instances - ) { - // TODO(andreas): Allow configuring the memory pool. - arrow::MemoryPool* pool = arrow::default_memory_pool(); - auto datatype = arrow_datatype(); - - ARROW_ASSIGN_OR_RAISE(auto builder, arrow::MakeBuilder(datatype, pool)) - if (instances && num_instances > 0) { - RR_RETURN_NOT_OK(Loggable::fill_arrow_array_builder( - static_cast(builder.get()), - instances, - num_instances - )); - } - std::shared_ptr array; - ARROW_RETURN_NOT_OK(builder->Finish(&array)); - return array; - } } // namespace rerun diff --git a/rerun_cpp/tests/generated/datatypes/affix_fuzzer5.hpp b/rerun_cpp/tests/generated/datatypes/affix_fuzzer5.hpp index fc6ea5b4445a..d240b3b35a56 100644 --- a/rerun_cpp/tests/generated/datatypes/affix_fuzzer5.hpp +++ b/rerun_cpp/tests/generated/datatypes/affix_fuzzer5.hpp @@ -47,15 +47,15 @@ namespace rerun { /// Returns the arrow data type this type corresponds to. static const std::shared_ptr& arrow_datatype(); + /// Serializes an array of `rerun::datatypes::AffixFuzzer5` into an arrow array. + static Result> to_arrow( + const datatypes::AffixFuzzer5* instances, size_t num_instances + ); + /// Fills an arrow array builder with an array of this type. static rerun::Error fill_arrow_array_builder( arrow::StructBuilder* builder, const datatypes::AffixFuzzer5* elements, size_t num_elements ); - - /// Serializes an array of `rerun::datatypes::AffixFuzzer5` into an arrow array. - static Result> to_arrow( - const datatypes::AffixFuzzer5* instances, size_t num_instances - ); }; } // namespace rerun diff --git a/rerun_cpp/tests/generated/datatypes/flattened_scalar.cpp b/rerun_cpp/tests/generated/datatypes/flattened_scalar.cpp index 4d5c8dc245c9..09cfad272c3c 100644 --- a/rerun_cpp/tests/generated/datatypes/flattened_scalar.cpp +++ b/rerun_cpp/tests/generated/datatypes/flattened_scalar.cpp @@ -16,6 +16,26 @@ namespace rerun { return datatype; } + Result> Loggable::to_arrow( + const datatypes::FlattenedScalar* instances, size_t num_instances + ) { + // TODO(andreas): Allow configuring the memory pool. + arrow::MemoryPool* pool = arrow::default_memory_pool(); + auto datatype = arrow_datatype(); + + ARROW_ASSIGN_OR_RAISE(auto builder, arrow::MakeBuilder(datatype, pool)) + if (instances && num_instances > 0) { + RR_RETURN_NOT_OK(Loggable::fill_arrow_array_builder( + static_cast(builder.get()), + instances, + num_instances + )); + } + std::shared_ptr array; + ARROW_RETURN_NOT_OK(builder->Finish(&array)); + return array; + } + rerun::Error Loggable::fill_arrow_array_builder( arrow::StructBuilder* builder, const datatypes::FlattenedScalar* elements, size_t num_elements @@ -41,24 +61,4 @@ namespace rerun { return Error::ok(); } - - Result> Loggable::to_arrow( - const datatypes::FlattenedScalar* instances, size_t num_instances - ) { - // TODO(andreas): Allow configuring the memory pool. - arrow::MemoryPool* pool = arrow::default_memory_pool(); - auto datatype = arrow_datatype(); - - ARROW_ASSIGN_OR_RAISE(auto builder, arrow::MakeBuilder(datatype, pool)) - if (instances && num_instances > 0) { - RR_RETURN_NOT_OK(Loggable::fill_arrow_array_builder( - static_cast(builder.get()), - instances, - num_instances - )); - } - std::shared_ptr array; - ARROW_RETURN_NOT_OK(builder->Finish(&array)); - return array; - } } // namespace rerun diff --git a/rerun_cpp/tests/generated/datatypes/flattened_scalar.hpp b/rerun_cpp/tests/generated/datatypes/flattened_scalar.hpp index 4a6ee8fc1938..bd7ceed85db2 100644 --- a/rerun_cpp/tests/generated/datatypes/flattened_scalar.hpp +++ b/rerun_cpp/tests/generated/datatypes/flattened_scalar.hpp @@ -41,15 +41,15 @@ namespace rerun { /// Returns the arrow data type this type corresponds to. static const std::shared_ptr& arrow_datatype(); + /// Serializes an array of `rerun::datatypes::FlattenedScalar` into an arrow array. + static Result> to_arrow( + const datatypes::FlattenedScalar* instances, size_t num_instances + ); + /// Fills an arrow array builder with an array of this type. static rerun::Error fill_arrow_array_builder( arrow::StructBuilder* builder, const datatypes::FlattenedScalar* elements, size_t num_elements ); - - /// Serializes an array of `rerun::datatypes::FlattenedScalar` into an arrow array. - static Result> to_arrow( - const datatypes::FlattenedScalar* instances, size_t num_instances - ); }; } // namespace rerun diff --git a/rerun_cpp/tests/generated/datatypes/primitive_component.cpp b/rerun_cpp/tests/generated/datatypes/primitive_component.cpp index afa72757c5a6..18384a342742 100644 --- a/rerun_cpp/tests/generated/datatypes/primitive_component.cpp +++ b/rerun_cpp/tests/generated/datatypes/primitive_component.cpp @@ -15,6 +15,26 @@ namespace rerun { return datatype; } + Result> Loggable::to_arrow( + const datatypes::PrimitiveComponent* instances, size_t num_instances + ) { + // TODO(andreas): Allow configuring the memory pool. + arrow::MemoryPool* pool = arrow::default_memory_pool(); + auto datatype = arrow_datatype(); + + ARROW_ASSIGN_OR_RAISE(auto builder, arrow::MakeBuilder(datatype, pool)) + if (instances && num_instances > 0) { + RR_RETURN_NOT_OK(Loggable::fill_arrow_array_builder( + static_cast(builder.get()), + instances, + num_instances + )); + } + std::shared_ptr array; + ARROW_RETURN_NOT_OK(builder->Finish(&array)); + return array; + } + rerun::Error Loggable::fill_arrow_array_builder( arrow::UInt32Builder* builder, const datatypes::PrimitiveComponent* elements, size_t num_elements @@ -36,24 +56,4 @@ namespace rerun { return Error::ok(); } - - Result> Loggable::to_arrow( - const datatypes::PrimitiveComponent* instances, size_t num_instances - ) { - // TODO(andreas): Allow configuring the memory pool. - arrow::MemoryPool* pool = arrow::default_memory_pool(); - auto datatype = arrow_datatype(); - - ARROW_ASSIGN_OR_RAISE(auto builder, arrow::MakeBuilder(datatype, pool)) - if (instances && num_instances > 0) { - RR_RETURN_NOT_OK(Loggable::fill_arrow_array_builder( - static_cast(builder.get()), - instances, - num_instances - )); - } - std::shared_ptr array; - ARROW_RETURN_NOT_OK(builder->Finish(&array)); - return array; - } } // namespace rerun diff --git a/rerun_cpp/tests/generated/datatypes/primitive_component.hpp b/rerun_cpp/tests/generated/datatypes/primitive_component.hpp index 050f573c9c40..2960b4b08f02 100644 --- a/rerun_cpp/tests/generated/datatypes/primitive_component.hpp +++ b/rerun_cpp/tests/generated/datatypes/primitive_component.hpp @@ -46,15 +46,15 @@ namespace rerun { /// Returns the arrow data type this type corresponds to. static const std::shared_ptr& arrow_datatype(); + /// Serializes an array of `rerun::datatypes::PrimitiveComponent` into an arrow array. + static Result> to_arrow( + const datatypes::PrimitiveComponent* instances, size_t num_instances + ); + /// Fills an arrow array builder with an array of this type. static rerun::Error fill_arrow_array_builder( arrow::UInt32Builder* builder, const datatypes::PrimitiveComponent* elements, size_t num_elements ); - - /// Serializes an array of `rerun::datatypes::PrimitiveComponent` into an arrow array. - static Result> to_arrow( - const datatypes::PrimitiveComponent* instances, size_t num_instances - ); }; } // namespace rerun diff --git a/rerun_cpp/tests/generated/datatypes/string_component.cpp b/rerun_cpp/tests/generated/datatypes/string_component.cpp index c0fbb28ac950..f57d85be7e6c 100644 --- a/rerun_cpp/tests/generated/datatypes/string_component.cpp +++ b/rerun_cpp/tests/generated/datatypes/string_component.cpp @@ -14,6 +14,26 @@ namespace rerun { return datatype; } + Result> Loggable::to_arrow( + const datatypes::StringComponent* instances, size_t num_instances + ) { + // TODO(andreas): Allow configuring the memory pool. + arrow::MemoryPool* pool = arrow::default_memory_pool(); + auto datatype = arrow_datatype(); + + ARROW_ASSIGN_OR_RAISE(auto builder, arrow::MakeBuilder(datatype, pool)) + if (instances && num_instances > 0) { + RR_RETURN_NOT_OK(Loggable::fill_arrow_array_builder( + static_cast(builder.get()), + instances, + num_instances + )); + } + std::shared_ptr array; + ARROW_RETURN_NOT_OK(builder->Finish(&array)); + return array; + } + rerun::Error Loggable::fill_arrow_array_builder( arrow::StringBuilder* builder, const datatypes::StringComponent* elements, size_t num_elements @@ -35,24 +55,4 @@ namespace rerun { return Error::ok(); } - - Result> Loggable::to_arrow( - const datatypes::StringComponent* instances, size_t num_instances - ) { - // TODO(andreas): Allow configuring the memory pool. - arrow::MemoryPool* pool = arrow::default_memory_pool(); - auto datatype = arrow_datatype(); - - ARROW_ASSIGN_OR_RAISE(auto builder, arrow::MakeBuilder(datatype, pool)) - if (instances && num_instances > 0) { - RR_RETURN_NOT_OK(Loggable::fill_arrow_array_builder( - static_cast(builder.get()), - instances, - num_instances - )); - } - std::shared_ptr array; - ARROW_RETURN_NOT_OK(builder->Finish(&array)); - return array; - } } // namespace rerun diff --git a/rerun_cpp/tests/generated/datatypes/string_component.hpp b/rerun_cpp/tests/generated/datatypes/string_component.hpp index 981e7e4843ed..8f9caa6ef4b7 100644 --- a/rerun_cpp/tests/generated/datatypes/string_component.hpp +++ b/rerun_cpp/tests/generated/datatypes/string_component.hpp @@ -43,15 +43,15 @@ namespace rerun { /// Returns the arrow data type this type corresponds to. static const std::shared_ptr& arrow_datatype(); + /// Serializes an array of `rerun::datatypes::StringComponent` into an arrow array. + static Result> to_arrow( + const datatypes::StringComponent* instances, size_t num_instances + ); + /// Fills an arrow array builder with an array of this type. static rerun::Error fill_arrow_array_builder( arrow::StringBuilder* builder, const datatypes::StringComponent* elements, size_t num_elements ); - - /// Serializes an array of `rerun::datatypes::StringComponent` into an arrow array. - static Result> to_arrow( - const datatypes::StringComponent* instances, size_t num_instances - ); }; } // namespace rerun From 39797ff9e23c88baabcb869bc8b66f88fedcc205 Mon Sep 17 00:00:00 2001 From: Silvio Traversaro Date: Mon, 18 Mar 2024 10:47:36 +0100 Subject: [PATCH 23/50] Fix RERUN_C_BUILD_ARTIFACT path value if CARGO_BUILD_TARGET env variable is set (#5547) ### What When building the conda-forge package for the C++ bindings for rerun-sdk, I encountered a failure of the following type (see https://github.com/conda-forge/staged-recipes/pull/25648#issuecomment-2000481352): ~~~ [307/532] Linking CXX shared library rerun_cpp/librerun_sdk.so FAILED: rerun_cpp/librerun_sdk.so : && $BUILD_PREFIX/bin/x86_64-conda-linux-gnu-c++ -fPIC -fvisibility-inlines-hidden -fmessage-length=0 -march=nocona -mtune=haswell -ftree-vectorize -fPIC -fstack-protector-strong -fno-plt -O2 -ffunction-sections -pipe -isystem $PREFIX/include -fdebug-prefix-map=$SRC_DIR=/usr/local/src/conda/librerun-sdk-0.14.1 -fdebug-prefix-map=$PREFIX=/usr/local/src/conda-prefix -O3 -DNDEBUG -Wl,-O2 -Wl,--sort-common -Wl,--as-needed -Wl,-z,relro -Wl,-z,now -Wl,--disable-new-dtags -Wl,--gc-sections -Wl,--allow-shlib-undefined -Wl,-rpath,$PREFIX/lib -Wl,-rpath-link,$PREFIX/lib -L$PREFIX/lib -shared -Wl,-soname,librerun_sdk.so -o rerun_cpp/librerun_sdk.so rerun_cpp/CMakeFiles/rerun_sdk.dir/src/rerun/archetypes/annotation_context.cpp.o rerun_cpp/CMakeFiles/rerun_sdk.dir/src/rerun/archetypes/arrows2d.cpp.o rerun_cpp/CMakeFiles/rerun_sdk.dir/src/rerun/archetypes/arrows2d_ext.cpp.o rerun_cpp/CMakeFiles/rerun_sdk.dir/src/rerun/archetypes/arrows3d.cpp.o rerun_cpp/CMakeFiles/rerun_sdk.dir/src/rerun/archetypes/arrows3d_ext.cpp.o rerun_cpp/CMakeFiles/rerun_sdk.dir/src/rerun/archetypes/asset3d.cpp.o rerun_cpp/CMakeFiles/rerun_sdk.dir/src/rerun/archetypes/asset3d_ext.cpp.o rerun_cpp/CMakeFiles/rerun_sdk.dir/src/rerun/archetypes/bar_chart.cpp.o rerun_cpp/CMakeFiles/rerun_sdk.dir/src/rerun/archetypes/bar_chart_ext.cpp.o rerun_cpp/CMakeFiles/rerun_sdk.dir/src/rerun/archetypes/boxes2d.cpp.o rerun_cpp/CMakeFiles/rerun_sdk.dir/src/rerun/archetypes/boxes2d_ext.cpp.o rerun_cpp/CMakeFiles/rerun_sdk.dir/src/rerun/archetypes/boxes3d.cpp.o rerun_cpp/CMakeFiles/rerun_sdk.dir/src/rerun/archetypes/boxes3d_ext.cpp.o rerun_cpp/CMakeFiles/rerun_sdk.dir/src/rerun/archetypes/clear.cpp.o rerun_cpp/CMakeFiles/rerun_sdk.dir/src/rerun/archetypes/clear_ext.cpp.o rerun_cpp/CMakeFiles/rerun_sdk.dir/src/rerun/archetypes/depth_image.cpp.o rerun_cpp/CMakeFiles/rerun_sdk.dir/src/rerun/archetypes/depth_image_ext.cpp.o rerun_cpp/CMakeFiles/rerun_sdk.dir/src/rerun/archetypes/disconnected_space.cpp.o rerun_cpp/CMakeFiles/rerun_sdk.dir/src/rerun/archetypes/image.cpp.o rerun_cpp/CMakeFiles/rerun_sdk.dir/src/rerun/archetypes/image_ext.cpp.o rerun_cpp/CMakeFiles/rerun_sdk.dir/src/rerun/archetypes/line_strips2d.cpp.o rerun_cpp/CMakeFiles/rerun_sdk.dir/src/rerun/archetypes/line_strips3d.cpp.o rerun_cpp/CMakeFiles/rerun_sdk.dir/src/rerun/archetypes/mesh3d.cpp.o rerun_cpp/CMakeFiles/rerun_sdk.dir/src/rerun/archetypes/pinhole.cpp.o rerun_cpp/CMakeFiles/rerun_sdk.dir/src/rerun/archetypes/pinhole_ext.cpp.o rerun_cpp/CMakeFiles/rerun_sdk.dir/src/rerun/archetypes/points2d.cpp.o rerun_cpp/CMakeFiles/rerun_sdk.dir/src/rerun/archetypes/points3d.cpp.o rerun_cpp/CMakeFiles/rerun_sdk.dir/src/rerun/archetypes/scalar.cpp.o rerun_cpp/CMakeFiles/rerun_sdk.dir/src/rerun/archetypes/segmentation_image.cpp.o rerun_cpp/CMakeFiles/rerun_sdk.dir/src/rerun/archetypes/segmentation_image_ext.cpp.o rerun_cpp/CMakeFiles/rerun_sdk.dir/src/rerun/archetypes/series_line.cpp.o rerun_cpp/CMakeFiles/rerun_sdk.dir/src/rerun/archetypes/series_point.cpp.o rerun_cpp/CMakeFiles/rerun_sdk.dir/src/rerun/archetypes/tensor.cpp.o rerun_cpp/CMakeFiles/rerun_sdk.dir/src/rerun/archetypes/tensor_ext.cpp.o rerun_cpp/CMakeFiles/rerun_sdk.dir/src/rerun/archetypes/text_document.cpp.o rerun_cpp/CMakeFiles/rerun_sdk.dir/src/rerun/archetypes/text_log.cpp.o rerun_cpp/CMakeFiles/rerun_sdk.dir/src/rerun/archetypes/time_series_scalar.cpp.o rerun_cpp/CMakeFiles/rerun_sdk.dir/src/rerun/archetypes/transform3d.cpp.o rerun_cpp/CMakeFiles/rerun_sdk.dir/src/rerun/archetypes/transform3d_ext.cpp.o rerun_cpp/CMakeFiles/rerun_sdk.dir/src/rerun/archetypes/view_coordinates.cpp.o rerun_cpp/CMakeFiles/rerun_sdk.dir/src/rerun/archetypes/view_coordinates_ext.cpp.o rerun_cpp/CMakeFiles/rerun_sdk.dir/src/rerun/blueprint/archetypes/container_blueprint.cpp.o rerun_cpp/CMakeFiles/rerun_sdk.dir/src/rerun/blueprint/archetypes/plot_legend.cpp.o rerun_cpp/CMakeFiles/rerun_sdk.dir/src/rerun/blueprint/archetypes/scalar_axis.cpp.o rerun_cpp/CMakeFiles/rerun_sdk.dir/src/rerun/blueprint/archetypes/space_view_blueprint.cpp.o rerun_cpp/CMakeFiles/rerun_sdk.dir/src/rerun/blueprint/archetypes/viewport_blueprint.cpp.o rerun_cpp/CMakeFiles/rerun_sdk.dir/src/rerun/blueprint/components/active_tab.cpp.o rerun_cpp/CMakeFiles/rerun_sdk.dir/src/rerun/blueprint/components/auto_layout.cpp.o rerun_cpp/CMakeFiles/rerun_sdk.dir/src/rerun/blueprint/components/auto_space_views.cpp.o rerun_cpp/CMakeFiles/rerun_sdk.dir/src/rerun/blueprint/components/column_shares.cpp.o rerun_cpp/CMakeFiles/rerun_sdk.dir/src/rerun/blueprint/components/container_kind.cpp.o rerun_cpp/CMakeFiles/rerun_sdk.dir/src/rerun/blueprint/components/corner2d.cpp.o rerun_cpp/CMakeFiles/rerun_sdk.dir/src/rerun/blueprint/components/entities_determined_by_user.cpp.o rerun_cpp/CMakeFiles/rerun_sdk.dir/src/rerun/blueprint/components/entity_properties_component.cpp.o rerun_cpp/CMakeFiles/rerun_sdk.dir/src/rerun/blueprint/components/grid_columns.cpp.o rerun_cpp/CMakeFiles/rerun_sdk.dir/src/rerun/blueprint/components/included_contents.cpp.o rerun_cpp/CMakeFiles/rerun_sdk.dir/src/rerun/blueprint/components/included_queries.cpp.o rerun_cpp/CMakeFiles/rerun_sdk.dir/src/rerun/blueprint/components/included_space_views.cpp.o rerun_cpp/CMakeFiles/rerun_sdk.dir/src/rerun/blueprint/components/lock_range_during_zoom.cpp.o rerun_cpp/CMakeFiles/rerun_sdk.dir/src/rerun/blueprint/components/panel_view.cpp.o rerun_cpp/CMakeFiles/rerun_sdk.dir/src/rerun/blueprint/components/query_expressions.cpp.o rerun_cpp/CMakeFiles/rerun_sdk.dir/src/rerun/blueprint/components/root_container.cpp.o rerun_cpp/CMakeFiles/rerun_sdk.dir/src/rerun/blueprint/components/row_shares.cpp.o rerun_cpp/CMakeFiles/rerun_sdk.dir/src/rerun/blueprint/components/space_view_class.cpp.o rerun_cpp/CMakeFiles/rerun_sdk.dir/src/rerun/blueprint/components/space_view_maximized.cpp.o rerun_cpp/CMakeFiles/rerun_sdk.dir/src/rerun/blueprint/components/space_view_origin.cpp.o rerun_cpp/CMakeFiles/rerun_sdk.dir/src/rerun/blueprint/components/viewport_layout.cpp.o rerun_cpp/CMakeFiles/rerun_sdk.dir/src/rerun/blueprint/components/visible.cpp.o rerun_cpp/CMakeFiles/rerun_sdk.dir/src/rerun/blueprint/datatypes/legend.cpp.o rerun_cpp/CMakeFiles/rerun_sdk.dir/src/rerun/component_type.cpp.o rerun_cpp/CMakeFiles/rerun_sdk.dir/src/rerun/components/annotation_context.cpp.o rerun_cpp/CMakeFiles/rerun_sdk.dir/src/rerun/components/annotation_context_ext.cpp.o rerun_cpp/CMakeFiles/rerun_sdk.dir/src/rerun/components/blob.cpp.o rerun_cpp/CMakeFiles/rerun_sdk.dir/src/rerun/components/class_id.cpp.o rerun_cpp/CMakeFiles/rerun_sdk.dir/src/rerun/components/clear_is_recursive.cpp.o rerun_cpp/CMakeFiles/rerun_sdk.dir/src/rerun/components/color.cpp.o rerun_cpp/CMakeFiles/rerun_sdk.dir/src/rerun/components/color_ext.cpp.o rerun_cpp/CMakeFiles/rerun_sdk.dir/src/rerun/components/depth_meter.cpp.o rerun_cpp/CMakeFiles/rerun_sdk.dir/src/rerun/components/disconnected_space.cpp.o rerun_cpp/CMakeFiles/rerun_sdk.dir/src/rerun/components/draw_order.cpp.o rerun_cpp/CMakeFiles/rerun_sdk.dir/src/rerun/components/half_sizes2d.cpp.o rerun_cpp/CMakeFiles/rerun_sdk.dir/src/rerun/components/half_sizes2d_ext.cpp.o rerun_cpp/CMakeFiles/rerun_sdk.dir/src/rerun/components/half_sizes3d.cpp.o rerun_cpp/CMakeFiles/rerun_sdk.dir/src/rerun/components/half_sizes3d_ext.cpp.o rerun_cpp/CMakeFiles/rerun_sdk.dir/src/rerun/components/instance_key.cpp.o rerun_cpp/CMakeFiles/rerun_sdk.dir/src/rerun/components/keypoint_id.cpp.o rerun_cpp/CMakeFiles/rerun_sdk.dir/src/rerun/components/line_strip2d.cpp.o rerun_cpp/CMakeFiles/rerun_sdk.dir/src/rerun/components/line_strip3d.cpp.o rerun_cpp/CMakeFiles/rerun_sdk.dir/src/rerun/components/marker_shape.cpp.o rerun_cpp/CMakeFiles/rerun_sdk.dir/src/rerun/components/marker_shape_ext.cpp.o rerun_cpp/CMakeFiles/rerun_sdk.dir/src/rerun/components/marker_size.cpp.o rerun_cpp/CMakeFiles/rerun_sdk.dir/src/rerun/components/material.cpp.o rerun_cpp/CMakeFiles/rerun_sdk.dir/src/rerun/components/material_ext.cpp.o rerun_cpp/CMakeFiles/rerun_sdk.dir/src/rerun/components/media_type.cpp.o rerun_cpp/CMakeFiles/rerun_sdk.dir/src/rerun/components/media_type_ext.cpp.o rerun_cpp/CMakeFiles/rerun_sdk.dir/src/rerun/components/mesh_properties.cpp.o rerun_cpp/CMakeFiles/rerun_sdk.dir/src/rerun/components/mesh_properties_ext.cpp.o rerun_cpp/CMakeFiles/rerun_sdk.dir/src/rerun/components/name.cpp.o rerun_cpp/CMakeFiles/rerun_sdk.dir/src/rerun/components/name_ext.cpp.o rerun_cpp/CMakeFiles/rerun_sdk.dir/src/rerun/components/out_of_tree_transform3d.cpp.o rerun_cpp/CMakeFiles/rerun_sdk.dir/src/rerun/components/pinhole_projection.cpp.o rerun_cpp/CMakeFiles/rerun_sdk.dir/src/rerun/components/pinhole_projection_ext.cpp.o rerun_cpp/CMakeFiles/rerun_sdk.dir/src/rerun/components/position2d.cpp.o rerun_cpp/CMakeFiles/rerun_sdk.dir/src/rerun/components/position2d_ext.cpp.o rerun_cpp/CMakeFiles/rerun_sdk.dir/src/rerun/components/position3d.cpp.o rerun_cpp/CMakeFiles/rerun_sdk.dir/src/rerun/components/position3d_ext.cpp.o rerun_cpp/CMakeFiles/rerun_sdk.dir/src/rerun/components/radius.cpp.o rerun_cpp/CMakeFiles/rerun_sdk.dir/src/rerun/components/range1d.cpp.o rerun_cpp/CMakeFiles/rerun_sdk.dir/src/rerun/components/resolution.cpp.o rerun_cpp/CMakeFiles/rerun_sdk.dir/src/rerun/components/resolution_ext.cpp.o rerun_cpp/CMakeFiles/rerun_sdk.dir/src/rerun/components/rotation3d.cpp.o rerun_cpp/CMakeFiles/rerun_sdk.dir/src/rerun/components/rotation3d_ext.cpp.o rerun_cpp/CMakeFiles/rerun_sdk.dir/src/rerun/components/scalar.cpp.o rerun_cpp/CMakeFiles/rerun_sdk.dir/src/rerun/components/scalar_scattering.cpp.o rerun_cpp/CMakeFiles/rerun_sdk.dir/src/rerun/components/stroke_width.cpp.o rerun_cpp/CMakeFiles/rerun_sdk.dir/src/rerun/components/tensor_data.cpp.o rerun_cpp/CMakeFiles/rerun_sdk.dir/src/rerun/components/tensor_data_ext.cpp.o rerun_cpp/CMakeFiles/rerun_sdk.dir/src/rerun/components/texcoord2d.cpp.o rerun_cpp/CMakeFiles/rerun_sdk.dir/src/rerun/components/texcoord2d_ext.cpp.o rerun_cpp/CMakeFiles/rerun_sdk.dir/src/rerun/components/text.cpp.o rerun_cpp/CMakeFiles/rerun_sdk.dir/src/rerun/components/text_ext.cpp.o rerun_cpp/CMakeFiles/rerun_sdk.dir/src/rerun/components/text_log_level.cpp.o rerun_cpp/CMakeFiles/rerun_sdk.dir/src/rerun/components/text_log_level_ext.cpp.o rerun_cpp/CMakeFiles/rerun_sdk.dir/src/rerun/components/transform3d.cpp.o rerun_cpp/CMakeFiles/rerun_sdk.dir/src/rerun/components/vector2d.cpp.o rerun_cpp/CMakeFiles/rerun_sdk.dir/src/rerun/components/vector2d_ext.cpp.o rerun_cpp/CMakeFiles/rerun_sdk.dir/src/rerun/components/vector3d.cpp.o rerun_cpp/CMakeFiles/rerun_sdk.dir/src/rerun/components/vector3d_ext.cpp.o rerun_cpp/CMakeFiles/rerun_sdk.dir/src/rerun/components/view_coordinates.cpp.o rerun_cpp/CMakeFiles/rerun_sdk.dir/src/rerun/components/view_coordinates_ext.cpp.o rerun_cpp/CMakeFiles/rerun_sdk.dir/src/rerun/components/visualizer_overrides.cpp.o rerun_cpp/CMakeFiles/rerun_sdk.dir/src/rerun/config.cpp.o rerun_cpp/CMakeFiles/rerun_sdk.dir/src/rerun/data_cell.cpp.o rerun_cpp/CMakeFiles/rerun_sdk.dir/src/rerun/datatypes/angle.cpp.o rerun_cpp/CMakeFiles/rerun_sdk.dir/src/rerun/datatypes/annotation_info.cpp.o rerun_cpp/CMakeFiles/rerun_sdk.dir/src/rerun/datatypes/annotation_info_ext.cpp.o rerun_cpp/CMakeFiles/rerun_sdk.dir/src/rerun/datatypes/class_description.cpp.o rerun_cpp/CMakeFiles/rerun_sdk.dir/src/rerun/datatypes/class_description_ext.cpp.o rerun_cpp/CMakeFiles/rerun_sdk.dir/src/rerun/datatypes/class_description_map_elem.cpp.o rerun_cpp/CMakeFiles/rerun_sdk.dir/src/rerun/datatypes/class_description_map_elem_ext.cpp.o rerun_cpp/CMakeFiles/rerun_sdk.dir/src/rerun/datatypes/class_id.cpp.o rerun_cpp/CMakeFiles/rerun_sdk.dir/src/rerun/datatypes/entity_path.cpp.o rerun_cpp/CMakeFiles/rerun_sdk.dir/src/rerun/datatypes/float32.cpp.o rerun_cpp/CMakeFiles/rerun_sdk.dir/src/rerun/datatypes/keypoint_id.cpp.o rerun_cpp/CMakeFiles/rerun_sdk.dir/src/rerun/datatypes/keypoint_pair.cpp.o rerun_cpp/CMakeFiles/rerun_sdk.dir/src/rerun/datatypes/keypoint_pair_ext.cpp.o rerun_cpp/CMakeFiles/rerun_sdk.dir/src/rerun/datatypes/mat3x3.cpp.o rerun_cpp/CMakeFiles/rerun_sdk.dir/src/rerun/datatypes/mat3x3_ext.cpp.o rerun_cpp/CMakeFiles/rerun_sdk.dir/src/rerun/datatypes/mat4x4.cpp.o rerun_cpp/CMakeFiles/rerun_sdk.dir/src/rerun/datatypes/mat4x4_ext.cpp.o rerun_cpp/CMakeFiles/rerun_sdk.dir/src/rerun/datatypes/material.cpp.o rerun_cpp/CMakeFiles/rerun_sdk.dir/src/rerun/datatypes/mesh_properties.cpp.o rerun_cpp/CMakeFiles/rerun_sdk.dir/src/rerun/datatypes/quaternion.cpp.o rerun_cpp/CMakeFiles/rerun_sdk.dir/src/rerun/datatypes/quaternion_ext.cpp.o rerun_cpp/CMakeFiles/rerun_sdk.dir/src/rerun/datatypes/rgba32.cpp.o rerun_cpp/CMakeFiles/rerun_sdk.dir/src/rerun/datatypes/rgba32_ext.cpp.o rerun_cpp/CMakeFiles/rerun_sdk.dir/src/rerun/datatypes/rotation3d.cpp.o rerun_cpp/CMakeFiles/rerun_sdk.dir/src/rerun/datatypes/rotation3d_ext.cpp.o rerun_cpp/CMakeFiles/rerun_sdk.dir/src/rerun/datatypes/rotation_axis_angle.cpp.o rerun_cpp/CMakeFiles/rerun_sdk.dir/src/rerun/datatypes/rotation_axis_angle_ext.cpp.o rerun_cpp/CMakeFiles/rerun_sdk.dir/src/rerun/datatypes/scale3d.cpp.o rerun_cpp/CMakeFiles/rerun_sdk.dir/src/rerun/datatypes/tensor_buffer.cpp.o rerun_cpp/CMakeFiles/rerun_sdk.dir/src/rerun/datatypes/tensor_buffer_ext.cpp.o rerun_cpp/CMakeFiles/rerun_sdk.dir/src/rerun/datatypes/tensor_data.cpp.o rerun_cpp/CMakeFiles/rerun_sdk.dir/src/rerun/datatypes/tensor_data_ext.cpp.o rerun_cpp/CMakeFiles/rerun_sdk.dir/src/rerun/datatypes/tensor_dimension.cpp.o rerun_cpp/CMakeFiles/rerun_sdk.dir/src/rerun/datatypes/tensor_dimension_ext.cpp.o rerun_cpp/CMakeFiles/rerun_sdk.dir/src/rerun/datatypes/transform3d.cpp.o rerun_cpp/CMakeFiles/rerun_sdk.dir/src/rerun/datatypes/translation_and_mat3x3.cpp.o rerun_cpp/CMakeFiles/rerun_sdk.dir/src/rerun/datatypes/translation_and_mat3x3_ext.cpp.o rerun_cpp/CMakeFiles/rerun_sdk.dir/src/rerun/datatypes/translation_rotation_scale3d.cpp.o rerun_cpp/CMakeFiles/rerun_sdk.dir/src/rerun/datatypes/translation_rotation_scale3d_ext.cpp.o rerun_cpp/CMakeFiles/rerun_sdk.dir/src/rerun/datatypes/uint32.cpp.o rerun_cpp/CMakeFiles/rerun_sdk.dir/src/rerun/datatypes/utf8.cpp.o rerun_cpp/CMakeFiles/rerun_sdk.dir/src/rerun/datatypes/utf8_ext.cpp.o rerun_cpp/CMakeFiles/rerun_sdk.dir/src/rerun/datatypes/uuid.cpp.o rerun_cpp/CMakeFiles/rerun_sdk.dir/src/rerun/datatypes/uvec2d.cpp.o rerun_cpp/CMakeFiles/rerun_sdk.dir/src/rerun/datatypes/uvec3d.cpp.o rerun_cpp/CMakeFiles/rerun_sdk.dir/src/rerun/datatypes/uvec4d.cpp.o rerun_cpp/CMakeFiles/rerun_sdk.dir/src/rerun/datatypes/vec2d.cpp.o rerun_cpp/CMakeFiles/rerun_sdk.dir/src/rerun/datatypes/vec2d_ext.cpp.o rerun_cpp/CMakeFiles/rerun_sdk.dir/src/rerun/datatypes/vec3d.cpp.o rerun_cpp/CMakeFiles/rerun_sdk.dir/src/rerun/datatypes/vec3d_ext.cpp.o rerun_cpp/CMakeFiles/rerun_sdk.dir/src/rerun/datatypes/vec4d.cpp.o rerun_cpp/CMakeFiles/rerun_sdk.dir/src/rerun/datatypes/vec4d_ext.cpp.o rerun_cpp/CMakeFiles/rerun_sdk.dir/src/rerun/demo_utils.cpp.o rerun_cpp/CMakeFiles/rerun_sdk.dir/src/rerun/entity_path.cpp.o rerun_cpp/CMakeFiles/rerun_sdk.dir/src/rerun/error.cpp.o rerun_cpp/CMakeFiles/rerun_sdk.dir/src/rerun/indicator_component.cpp.o rerun_cpp/CMakeFiles/rerun_sdk.dir/src/rerun/recording_stream.cpp.o rerun_cpp/CMakeFiles/rerun_sdk.dir/src/rerun/sdk_info.cpp.o rerun_cpp/CMakeFiles/rerun_sdk.dir/src/rerun/spawn.cpp.o rerun_cpp/CMakeFiles/rerun_sdk.dir/src/rerun/spawn_options.cpp.o rerun_cpp/CMakeFiles/rerun_sdk.dir/src/rerun/string_utils.cpp.o $SRC_DIR/crates/rerun_c/../../target/release/librerun_c.a $PREFIX/lib/libarrow.so.1200.1.0 -lm -ldl -pthread && : $BUILD_PREFIX/bin/../lib/gcc/x86_64-conda-linux-gnu/12.3.0/../../../../x86_64-conda-linux-gnu/bin/ld: cannot find $SRC_DIR/crates/rerun_c/../../target/release/librerun_c.a: No such file or directory collect2: error: ld returned 1 exit status ~~~ It turned out that this was due to some rust activation script in conda-forge, that defined the `CARGO_BUILD_TARGET` env variable, and that apparently changed the location of the `librerun_c.a` library generated by cargo. To handle this, I modified the CMake code as reported in this PR. If the `CARGO_BUILD_TARGET` env variable is not defined, `$ENV{CARGO_BUILD_TARGET}` evalutes to an empty string, and the behaviour is exactly the same that you have before this PR. I am not sure if it make sense to have this patch upstream, but I guess even to just ask that it was more efficient to open a PR rather than to open an issue to ask if it could make sense to open a PR. If you think it is better no to have this change upstream, feel free to close the PR, we can just keep the patch locally in https://github.com/conda-forge/librerun-sdk-feedstock/blob/main/recipe/fixrerun_c_location.patch . ### Checklist * [x] I have read and agree to [Contributor Guide](https://github.com/rerun-io/rerun/blob/main/CONTRIBUTING.md) and the [Code of Conduct](https://github.com/rerun-io/rerun/blob/main/CODE_OF_CONDUCT.md) * [x] I've included a screenshot or gif (if applicable) * [x] I have tested the web demo (if applicable): * Using newly built examples: [app.rerun.io](https://app.rerun.io/pr/5547/index.html) * Using examples from latest `main` build: [app.rerun.io](https://app.rerun.io/pr/5547/index.html?manifest_url=https://app.rerun.io/version/main/examples_manifest.json) * Using full set of examples from `nightly` build: [app.rerun.io](https://app.rerun.io/pr/5547/index.html?manifest_url=https://app.rerun.io/version/nightly/examples_manifest.json) * [x] The PR title and labels are set such as to maximize their usefulness for the next release's CHANGELOG * [x] If applicable, add a new check to the [release checklist](https://github.com/rerun-io/rerun/blob/main/tests/python/release_checklist)! - [PR Build Summary](https://build.rerun.io/pr/5547) - [Docs preview](https://rerun.io/preview/3af4793c662b313c1cc14062566eca05e4e34dda/docs) - [Examples preview](https://rerun.io/preview/3af4793c662b313c1cc14062566eca05e4e34dda/examples) - [Recent benchmark results](https://build.rerun.io/graphs/crates.html) - [Wasm size tracking](https://build.rerun.io/graphs/sizes.html) --- crates/rerun_c/CMakeLists.txt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/crates/rerun_c/CMakeLists.txt b/crates/rerun_c/CMakeLists.txt index 5c030a692d5f..1f8f0deacf00 100644 --- a/crates/rerun_c/CMakeLists.txt +++ b/crates/rerun_c/CMakeLists.txt @@ -2,11 +2,11 @@ # Determine Rust's librerun path. if(APPLE) - set(RERUN_C_BUILD_ARTIFACT ${CMAKE_CURRENT_SOURCE_DIR}/../../target/release/librerun_c.a) + set(RERUN_C_BUILD_ARTIFACT ${CMAKE_CURRENT_SOURCE_DIR}/../../target/$ENV{CARGO_BUILD_TARGET}/release/librerun_c.a) elseif(UNIX) # if(LINUX) # CMake 3.25 - set(RERUN_C_BUILD_ARTIFACT ${CMAKE_CURRENT_SOURCE_DIR}/../../target/release/librerun_c.a) + set(RERUN_C_BUILD_ARTIFACT ${CMAKE_CURRENT_SOURCE_DIR}/../../target/$ENV{CARGO_BUILD_TARGET}/release/librerun_c.a) elseif(WIN32) - set(RERUN_C_BUILD_ARTIFACT ${CMAKE_CURRENT_SOURCE_DIR}/../../target/release/rerun_c.lib) + set(RERUN_C_BUILD_ARTIFACT ${CMAKE_CURRENT_SOURCE_DIR}/../../target/$ENV{CARGO_BUILD_TARGET}/release/rerun_c.lib) else() message(FATAL_ERROR "Unsupported platform.") endif() From 253b7205b287f4af2401bfb60e5779adfc125f94 Mon Sep 17 00:00:00 2001 From: Andreas Reich Date: Mon, 18 Mar 2024 11:00:27 +0100 Subject: [PATCH 24/50] Remove what's left of setup_dev.sh & setup.sh (#5552) ### What Almost everything has been taken over by `pixi` by now and these outdated / partially broken scripts keep confusing new-comers to the repo, so at this point they're clearly doing more bad than good. * Fixes #5545 * Fixes #4170 * There's still some stuff that should be moved to pixi but that's better covered by #3717 ### Checklist * [x] I have read and agree to [Contributor Guide](https://github.com/rerun-io/rerun/blob/main/CONTRIBUTING.md) and the [Code of Conduct](https://github.com/rerun-io/rerun/blob/main/CODE_OF_CONDUCT.md) * [x] I've included a screenshot or gif (if applicable) * [x] I have tested the web demo (if applicable): * Using newly built examples: [app.rerun.io](https://app.rerun.io/pr/5552/index.html) * Using examples from latest `main` build: [app.rerun.io](https://app.rerun.io/pr/5552/index.html?manifest_url=https://app.rerun.io/version/main/examples_manifest.json) * Using full set of examples from `nightly` build: [app.rerun.io](https://app.rerun.io/pr/5552/index.html?manifest_url=https://app.rerun.io/version/nightly/examples_manifest.json) * [x] The PR title and labels are set such as to maximize their usefulness for the next release's CHANGELOG * [x] If applicable, add a new check to the [release checklist](https://github.com/rerun-io/rerun/blob/main/tests/python/release_checklist)! - [PR Build Summary](https://build.rerun.io/pr/5552) - [Docs preview](https://rerun.io/preview/8da4ef3b503b5459274c73ea40bc0926b61dbae9/docs) - [Examples preview](https://rerun.io/preview/8da4ef3b503b5459274c73ea40bc0926b61dbae9/examples) - [Recent benchmark results](https://build.rerun.io/graphs/crates.html) - [Wasm size tracking](https://build.rerun.io/graphs/sizes.html) --------- Co-authored-by: Emil Ernerfeldt --- BUILD.md | 14 ++++++----- ci_docker/Dockerfile | 1 - scripts/setup.sh | 60 -------------------------------------------- scripts/setup_dev.sh | 40 ----------------------------- 4 files changed, 8 insertions(+), 107 deletions(-) delete mode 100755 scripts/setup.sh delete mode 100755 scripts/setup_dev.sh diff --git a/BUILD.md b/BUILD.md index 533f464f7a1a..e9a11cbabc69 100644 --- a/BUILD.md +++ b/BUILD.md @@ -23,12 +23,6 @@ cd rerun Now install the `pixi` package manager: -Finally, run the following script to install the dependencies and CLI tools needed for Rerun's build environment: - -```sh -./scripts/setup_dev.sh -``` - Make sure `cargo --version` prints `1.74.0` once you are done. If you are using an Apple-silicon Mac (M1, M2), make sure `rustc -vV` outputs `host: aarch64-apple-darwin`. If not, this should fix it: @@ -37,6 +31,14 @@ If you are using an Apple-silicon Mac (M1, M2), make sure `rustc -vV` outputs `h rustup set default-host aarch64-apple-darwin && rustup install 1.74.0 ``` +Additionally, we use [cargo-cranky](https://github.com/ericseppanen/cargo-cranky) for defining which Clippy lints are active and [cargo-deny](https://github.com/EmbarkStudios/cargo-deny) for linting crate versions. +You don't need to install these for building, but it's highly recommended when contributing changes to +Rust code. +```sh +cargo install cargo-cranky +cargo install --locked cargo-deny +``` + ## Building and running the viewer Use this command for building and running the viewer: diff --git a/ci_docker/Dockerfile b/ci_docker/Dockerfile index 68d94fc8fb96..e5e4acfab46f 100644 --- a/ci_docker/Dockerfile +++ b/ci_docker/Dockerfile @@ -6,7 +6,6 @@ LABEL version="0.11.0" LABEL description="Docker image used for the CI of https://github.com/rerun-io/rerun" # Install the ubuntu package dependencies -# This mirrors scripts/setup.sh ENV DEBIAN_FRONTEND=noninteractive RUN set -eux; \ apt-get update; \ diff --git a/scripts/setup.sh b/scripts/setup.sh deleted file mode 100755 index c70b90de0823..000000000000 --- a/scripts/setup.sh +++ /dev/null @@ -1,60 +0,0 @@ -#!/usr/bin/env bash -# Setup required to build rerun. -# This file is largly mirrored in ci_docker/Dockerfile. - -set -eu -script_path=$( cd "$(dirname "${BASH_SOURCE[0]}")" ; pwd -P ) -cd "$script_path/.." -set -x - -# eframe dependencies needed on run on Linux and Fedora Rawhide: -if [ -x "$(command -v apt-get)" ]; then - sudo apt-get -y install \ - libatk-bridge2.0 \ - libfontconfig1-dev \ - libfreetype6-dev \ - libglib2.0-dev \ - libgtk-3-dev \ - libssl-dev \ - libxcb-render0-dev \ - libxcb-shape0-dev \ - libxcb-xfixes0-dev \ - libxkbcommon-dev \ - patchelf -elif [ -x "$(command -v dnf)" ]; then - sudo dnf install \ - clang \ - clang-devel \ - clang-tools-extra \ - libxcb-devel \ - libxkbcommon-devel \ - openssl-devel \ - pkg-config -fi - -# C++ SDK requires `cmake` and `apache-arrow` -# Note that this may look different for different package managers. -# If you have issues installing arrow, check https://arrow.apache.org/install/ -packagesNeeded='cmake apache-arrow' -if [ -x "$(command -v brew)" ]; then brew install $packagesNeeded -elif [ -x "$(command -v port)" ]; then sudo port install $packagesNeeded -elif [ -x "$(command -v apt-get)" ]; then - sudo apt-get install -y -V ca-certificates lsb-release wget - wget https://apache.jfrog.io/artifactory/arrow/$(lsb_release --id --short | tr 'A-Z' 'a-z')/apache-arrow-apt-source-latest-$(lsb_release --codename --short).deb - sudo apt-get install -y -V ./apache-arrow-apt-source-latest-$(lsb_release --codename --short).deb - sudo apt-get update - sudo apt-get -y install 'cmake libarrow-dev' -elif [ -x "$(command -v dnf)" ]; then sudo dnf install $packagesNeeded -elif [ -x "$(command -v zypper)" ]; then sudo zypper install $packagesNeeded -elif [ -x "$(command -v apk)" ]; then sudo apk add --no-cache $packagesNeeded -elif [ -x "$(command -v winget)" ]; then sudo winget add --no-cache $packagesNeeded -elif [ -x "$(command -v pacman)" ]; then sudo pacman -S 'cmake arrow' -else - echo "FAILED TO INSTALL PACKAGE: Package manager not found. You must manually install: $packagesNeeded">&2; - exit 1 -fi - -# Needed to compile and check the code: -rustup install 1.74.0 - -echo "setup.sh completed!" diff --git a/scripts/setup_dev.sh b/scripts/setup_dev.sh deleted file mode 100755 index 85163008b7f2..000000000000 --- a/scripts/setup_dev.sh +++ /dev/null @@ -1,40 +0,0 @@ -#!/usr/bin/env bash -# Run all the setup required to work as a developer in the rerun repository. - -set -eu -script_path=$( cd "$(dirname "${BASH_SOURCE[0]}")" ; pwd -P ) -cd "$script_path/.." -set -x - -./scripts/setup.sh - -# Install -curl -fsSL https://pixi.sh/install.sh | bash - -cargo install cargo-cranky # Uses lints defined in Cranky.toml. See https://github.com/ericseppanen/cargo-cranky -cargo install --locked cargo-deny # https://github.com/EmbarkStudios/cargo-deny -cargo install just # https://github.com/casey/just - a command runner - - -packagesNeeded='pngcrush pipx clang-format flatbuffers' -if [ -x "$(command -v brew)" ]; then brew install $packagesNeeded -elif [ -x "$(command -v port)" ]; then sudo port install $packagesNeeded -elif [ -x "$(command -v apt-get)" ]; then sudo apt-get -y install $packagesNeeded -elif [ -x "$(command -v dnf)" ]; then sudo dnf install $packagesNeeded -elif [ -x "$(command -v zypper)" ]; then sudo zypper install $packagesNeeded -elif [ -x "$(command -v apk)" ]; then sudo apk add --no-cache $packagesNeeded -elif [ -x "$(command -v winget)" ]; then sudo winget add --no-cache $packagesNeeded -elif [ -x "$(command -v pacman)" ]; then sudo pacman -S $packagesNeeded -else - echo "FAILED TO INSTALL PACKAGE: Package manager not found. You must manually install: $packagesNeeded">&2; - exit 1 -fi - -# ensure pipx is on the path -pipx ensurepath - -# install nox for python testing automation -# https://nox.thea.codes/en/stable/ -pipx install nox - -echo "setup_dev.sh completed!" From 300d82a5bab15f2fad5d338fc69e49952ef7e26b Mon Sep 17 00:00:00 2001 From: Antoine Beyeler <49431240+abey79@users.noreply.github.com> Date: Mon, 18 Mar 2024 11:20:55 +0100 Subject: [PATCH 25/50] Automatically expand and scroll the streams tree when focusing on an item (#5494) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ### What - Follow up to #5482 - Fixes #5232 This PR adds support for expanding and scrolling to the focus item in the Streams view. It also adds expanding/scrolling the Blueprint tree when focusing on a component. - Blocked on https://github.com/emilk/egui/pull/4174 TODO: - [x] update egui commit once ☝🏻 is merged https://github.com/rerun-io/rerun/assets/49431240/55c2959f-bb9b-4f67-b20b-06ba82175d71 ### Checklist * [x] I have read and agree to [Contributor Guide](https://github.com/rerun-io/rerun/blob/main/CONTRIBUTING.md) and the [Code of Conduct](https://github.com/rerun-io/rerun/blob/main/CODE_OF_CONDUCT.md) * [x] I've included a screenshot or gif (if applicable) * [x] I have tested the web demo (if applicable): * Using newly built examples: [app.rerun.io](https://app.rerun.io/pr/5494/index.html) * Using examples from latest `main` build: [app.rerun.io](https://app.rerun.io/pr/5494/index.html?manifest_url=https://app.rerun.io/version/main/examples_manifest.json) * Using full set of examples from `nightly` build: [app.rerun.io](https://app.rerun.io/pr/5494/index.html?manifest_url=https://app.rerun.io/version/nightly/examples_manifest.json) * [x] The PR title and labels are set such as to maximize their usefulness for the next release's CHANGELOG * [x] If applicable, add a new check to the [release checklist](https://github.com/rerun-io/rerun/blob/main/tests/python/release_checklist)! - [PR Build Summary](https://build.rerun.io/pr/5494) - [Docs preview](https://rerun.io/preview/e879778c92dd2e50eb05bc6fdefee9ac79b93872/docs) - [Examples preview](https://rerun.io/preview/e879778c92dd2e50eb05bc6fdefee9ac79b93872/examples) - [Recent benchmark results](https://build.rerun.io/graphs/crates.html) - [Wasm size tracking](https://build.rerun.io/graphs/sizes.html) --- crates/re_time_panel/src/lib.rs | 21 ++++++++++++++++++ .../re_viewport/src/viewport_blueprint_ui.rs | 22 +++++++++++++++---- tests/python/release_checklist/check_focus.py | 6 +++-- 3 files changed, 43 insertions(+), 6 deletions(-) diff --git a/crates/re_time_panel/src/lib.rs b/crates/re_time_panel/src/lib.rs index 9521a2f911a0..64a4ffd9d262 100644 --- a/crates/re_time_panel/src/lib.rs +++ b/crates/re_time_panel/src/lib.rs @@ -584,6 +584,18 @@ impl TimePanel { clip_rect.max.x = tree_max_y; ui.set_clip_rect(clip_rect); + // expand if children is focused + let focused_entity_path = ctx + .focused_item + .as_ref() + .and_then(|item| item.entity_path()); + + if focused_entity_path.is_some_and(|entity_path| entity_path.is_descendant_of(&tree.path)) { + CollapseScope::StreamsTree + .entity(tree.path.clone()) + .set_open(ui.ctx(), true); + } + let re_ui::list_item::ShowCollapsingResponse { item_response: response, body_response, @@ -625,6 +637,15 @@ impl TimePanel { ); }); + if Some(&tree.path) == focused_entity_path { + // Scroll only if the entity isn't already visible. This is important because that's what + // happens when double-clicking an entity _in the blueprint tree_. In such case, it would be + // annoying to induce a scroll motion. + if !ui.clip_rect().contains_rect(response.rect) { + response.scroll_to_me(Some(egui::Align::Center)); + } + } + context_menu_ui_for_item( ctx, viewport_blueprint, diff --git a/crates/re_viewport/src/viewport_blueprint_ui.rs b/crates/re_viewport/src/viewport_blueprint_ui.rs index 588fefd8c047..382e62c8880e 100644 --- a/crates/re_viewport/src/viewport_blueprint_ui.rs +++ b/crates/re_viewport/src/viewport_blueprint_ui.rs @@ -64,7 +64,10 @@ impl Viewport<'_, '_> { .auto_shrink([true, false]) .show(ui, |ui| { ctx.re_ui.panel_content(ui, |_, ui| { - self.state.blueprint_tree_scroll_to_item = self.handle_focused_item(ctx, ui); + self.state.blueprint_tree_scroll_to_item = ctx + .focused_item + .as_ref() + .and_then(|item| self.handle_focused_item(ctx, ui, item)); self.root_container_tree_ui(ctx, ui); @@ -86,8 +89,12 @@ impl Viewport<'_, '_> { } /// Expend all required items and compute which item we should scroll to. - fn handle_focused_item(&self, ctx: &ViewerContext<'_>, ui: &egui::Ui) -> Option { - let focused_item = ctx.focused_item.as_ref()?; + fn handle_focused_item( + &self, + ctx: &ViewerContext<'_>, + ui: &egui::Ui, + focused_item: &Item, + ) -> Option { match focused_item { Item::Container(container_id) => { self.expand_all_contents_until(ui.ctx(), &Contents::Container(*container_id)); @@ -129,8 +136,15 @@ impl Viewport<'_, '_> { res } + Item::ComponentPath(component_path) => self.handle_focused_item( + ctx, + ui, + &Item::InstancePath(InstancePath::entity_splat( + component_path.entity_path.clone(), + )), + ), - Item::StoreId(_) | Item::ComponentPath(_) => None, + Item::StoreId(_) => None, } } diff --git a/tests/python/release_checklist/check_focus.py b/tests/python/release_checklist/check_focus.py index f2d1bf5a34cd..2f4a711e957e 100644 --- a/tests/python/release_checklist/check_focus.py +++ b/tests/python/release_checklist/check_focus.py @@ -19,8 +19,10 @@ ## Checks -- Collapse all in the blueprint tree. -- Double-click on the box in the first space view, check corresponding space view expands. +- Collapse all in the blueprint tree and the streams view +- Double-click on the box in the first space view + - check corresponding space view expands and scrolls + - check the streams view expands and scrolls - Collapse all in the blueprint tree. - Double-click on the leaf "boxes3d" entity in the streams view, check both space views expand. """ From 1a7951037691f479d5a27b7fa0516a76f7f67f24 Mon Sep 17 00:00:00 2001 From: Andreas Reich Date: Mon, 18 Mar 2024 11:50:47 +0100 Subject: [PATCH 26/50] Visible Range as a component override / fix non-inheriting visual range regression (#5538) ### What * next step on #5463 Fixes the "Visual Range does not inherit" regression we got when removing groups. Does this by moving the visual time range out of `EntityProperties`. I kept all the previous data structures and convert from and to avoid even deeper changes than already necessary. This PR explicitly aims at getting 0.14 time range behavior back, the ui is expected to behave exactly as it did before. ![image](https://github.com/rerun-io/rerun/assets/1220815/1ac1223c-3bc4-44d9-bf08-1ab2cd394fbe) (much same) ### Checklist * [x] I have read and agree to [Contributor Guide](https://github.com/rerun-io/rerun/blob/main/CONTRIBUTING.md) and the [Code of Conduct](https://github.com/rerun-io/rerun/blob/main/CODE_OF_CONDUCT.md) * [x] I've included a screenshot or gif (if applicable) * [x] I have tested the web demo (if applicable): * Using newly built examples: [app.rerun.io](https://app.rerun.io/pr/5538/index.html) * Using examples from latest `main` build: [app.rerun.io](https://app.rerun.io/pr/5538/index.html?manifest_url=https://app.rerun.io/version/main/examples_manifest.json) * Using full set of examples from `nightly` build: [app.rerun.io](https://app.rerun.io/pr/5538/index.html?manifest_url=https://app.rerun.io/version/nightly/examples_manifest.json) * [x] The PR title and labels are set such as to maximize their usefulness for the next release's CHANGELOG * [x] If applicable, add a new check to the [release checklist](https://github.com/rerun-io/rerun/blob/main/tests/python/release_checklist)! - [PR Build Summary](https://build.rerun.io/pr/5538) - [Docs preview](https://rerun.io/preview/477bfed3dd24a6cf61a5867e309ed41d9ea7eab8/docs) - [Examples preview](https://rerun.io/preview/477bfed3dd24a6cf61a5867e309ed41d9ea7eab8/examples) - [Recent benchmark results](https://build.rerun.io/graphs/crates.html) - [Wasm size tracking](https://build.rerun.io/graphs/sizes.html) --- crates/re_entity_db/src/entity_properties.rs | 8 +- .../re_log_types/src/time_point/time_int.rs | 7 + crates/re_query/src/util.rs | 17 - crates/re_space_view/src/lib.rs | 5 + crates/re_space_view/src/space_view.rs | 178 +++------ crates/re_space_view/src/visual_time_range.rs | 114 ++++++ .../src/visualizers/entity_iterator.rs | 13 +- .../src/legacy_visualizer_system.rs | 1 + .../src/line_visualizer_system.rs | 1 + .../src/point_visualizer_system.rs | 1 + crates/re_space_view_time_series/src/util.rs | 32 +- .../re_types/definitions/rerun/blueprint.fbs | 3 + .../components/visible_time_range.fbs | 20 ++ .../datatypes/visible_time_range.fbs | 58 +++ .../re_types/definitions/rerun/datatypes.fbs | 5 +- .../definitions/rerun/datatypes/time_int.fbs | 19 + .../src/blueprint/components/.gitattributes | 1 + .../re_types/src/blueprint/components/mod.rs | 3 + .../components/visible_time_range.rs | 153 ++++++++ .../components/visible_time_range_ext.rs | 6 + .../src/blueprint/datatypes/.gitattributes | 4 +- .../re_types/src/blueprint/datatypes/mod.rs | 10 +- .../blueprint/datatypes/visible_time_range.rs | 340 ++++++++++++++++++ ...gend.rs => visible_time_range_boundary.rs} | 194 +++++----- .../visible_time_range_boundary_ext.rs | 47 +++ .../visible_time_range_boundary_kind.rs | 166 +++++++++ .../datatypes/visible_time_range_ext.rs | 17 + .../src/codegen/python/mod.rs | 2 +- .../src/datatypes/.gitattributes | 1 + crates/re_types_core/src/datatypes/mod.rs | 3 + .../re_types_core/src/datatypes/time_int.rs | 131 +++++++ .../src/datatypes/time_int_ext.rs | 6 + .../src/blueprint/validation_gen/mod.rs | 2 + crates/re_viewer/src/ui/selection_panel.rs | 51 +-- crates/re_viewer/src/ui/visible_history.rs | 155 ++++---- .../src/space_view/view_query.rs | 52 ++- docs/content/reference/types/datatypes.md | 1 + .../reference/types/datatypes/.gitattributes | 1 + .../reference/types/datatypes/time_int.md | 16 + rerun_cpp/src/rerun/blueprint/.gitattributes | 1 + rerun_cpp/src/rerun/blueprint/components.hpp | 1 + .../rerun/blueprint/components/.gitattributes | 1 + .../components/visible_time_range.hpp | 60 ++++ rerun_cpp/src/rerun/blueprint/datatypes.hpp | 7 + .../rerun/blueprint/datatypes/.gitattributes | 8 +- .../src/rerun/blueprint/datatypes/legend.cpp | 78 ---- .../datatypes/visible_time_range.cpp | 124 +++++++ .../datatypes/visible_time_range.hpp | 61 ++++ .../datatypes/visible_time_range_boundary.cpp | 91 +++++ ...nd.hpp => visible_time_range_boundary.hpp} | 45 ++- .../visible_time_range_boundary_kind.cpp | 67 ++++ .../visible_time_range_boundary_kind.hpp | 57 +++ rerun_cpp/src/rerun/datatypes.hpp | 1 + rerun_cpp/src/rerun/datatypes/.gitattributes | 2 + rerun_cpp/src/rerun/datatypes/time_int.cpp | 57 +++ rerun_cpp/src/rerun/datatypes/time_int.hpp | 61 ++++ .../rerun/blueprint/components/.gitattributes | 1 + .../rerun/blueprint/components/__init__.py | 4 + .../components/visible_time_range.py | 28 ++ .../rerun/blueprint/datatypes/.gitattributes | 4 +- .../rerun/blueprint/datatypes/__init__.py | 42 ++- .../rerun/blueprint/datatypes/legend.py | 92 ----- .../blueprint/datatypes/visible_time_range.py | 194 ++++++++++ .../datatypes/visible_time_range_boundary.py | 104 ++++++ .../visible_time_range_boundary_kind.py | 105 ++++++ .../rerun_sdk/rerun/datatypes/.gitattributes | 1 + .../rerun_sdk/rerun/datatypes/__init__.py | 6 + .../rerun_sdk/rerun/datatypes/time_int.py | 59 +++ 68 files changed, 2616 insertions(+), 590 deletions(-) create mode 100644 crates/re_space_view/src/visual_time_range.rs create mode 100644 crates/re_types/definitions/rerun/blueprint/components/visible_time_range.fbs create mode 100644 crates/re_types/definitions/rerun/blueprint/datatypes/visible_time_range.fbs create mode 100644 crates/re_types/definitions/rerun/datatypes/time_int.fbs create mode 100644 crates/re_types/src/blueprint/components/visible_time_range.rs create mode 100644 crates/re_types/src/blueprint/components/visible_time_range_ext.rs create mode 100644 crates/re_types/src/blueprint/datatypes/visible_time_range.rs rename crates/re_types/src/blueprint/datatypes/{legend.rs => visible_time_range_boundary.rs} (53%) create mode 100644 crates/re_types/src/blueprint/datatypes/visible_time_range_boundary_ext.rs create mode 100644 crates/re_types/src/blueprint/datatypes/visible_time_range_boundary_kind.rs create mode 100644 crates/re_types/src/blueprint/datatypes/visible_time_range_ext.rs create mode 100644 crates/re_types_core/src/datatypes/time_int.rs create mode 100644 crates/re_types_core/src/datatypes/time_int_ext.rs create mode 100644 docs/content/reference/types/datatypes/time_int.md create mode 100644 rerun_cpp/src/rerun/blueprint/components/visible_time_range.hpp create mode 100644 rerun_cpp/src/rerun/blueprint/datatypes.hpp delete mode 100644 rerun_cpp/src/rerun/blueprint/datatypes/legend.cpp create mode 100644 rerun_cpp/src/rerun/blueprint/datatypes/visible_time_range.cpp create mode 100644 rerun_cpp/src/rerun/blueprint/datatypes/visible_time_range.hpp create mode 100644 rerun_cpp/src/rerun/blueprint/datatypes/visible_time_range_boundary.cpp rename rerun_cpp/src/rerun/blueprint/datatypes/{legend.hpp => visible_time_range_boundary.hpp} (55%) create mode 100644 rerun_cpp/src/rerun/blueprint/datatypes/visible_time_range_boundary_kind.cpp create mode 100644 rerun_cpp/src/rerun/blueprint/datatypes/visible_time_range_boundary_kind.hpp create mode 100644 rerun_cpp/src/rerun/datatypes/time_int.cpp create mode 100644 rerun_cpp/src/rerun/datatypes/time_int.hpp create mode 100644 rerun_py/rerun_sdk/rerun/blueprint/components/visible_time_range.py delete mode 100644 rerun_py/rerun_sdk/rerun/blueprint/datatypes/legend.py create mode 100644 rerun_py/rerun_sdk/rerun/blueprint/datatypes/visible_time_range.py create mode 100644 rerun_py/rerun_sdk/rerun/blueprint/datatypes/visible_time_range_boundary.py create mode 100644 rerun_py/rerun_sdk/rerun/blueprint/datatypes/visible_time_range_boundary_kind.py create mode 100644 rerun_py/rerun_sdk/rerun/datatypes/time_int.py diff --git a/crates/re_entity_db/src/entity_properties.rs b/crates/re_entity_db/src/entity_properties.rs index 02f6e29325a1..fb50dc0d39bc 100644 --- a/crates/re_entity_db/src/entity_properties.rs +++ b/crates/re_entity_db/src/entity_properties.rs @@ -94,7 +94,6 @@ impl FromIterator<(EntityPath, EntityProperties)> for EntityPropertyMap { #[cfg_attr(feature = "serde", derive(serde::Deserialize, serde::Serialize))] #[cfg_attr(feature = "serde", serde(default))] pub struct EntityProperties { - pub visible_history: re_query::ExtraQueryHistory, pub interactive: bool, /// What kind of color mapping should be applied (none, map, texture, transfer..)? @@ -143,7 +142,6 @@ pub struct EntityProperties { impl Default for EntityProperties { fn default() -> Self { Self { - visible_history: re_query::ExtraQueryHistory::default(), interactive: true, color_mapper: EditableAutoValue::default(), pinhole_image_plane_distance: EditableAutoValue::Auto(1.0), @@ -164,7 +162,6 @@ impl EntityProperties { /// Multiply/and these together. pub fn with_child(&self, child: &Self) -> Self { Self { - visible_history: self.visible_history.with_child(&child.visible_history), interactive: self.interactive && child.interactive, color_mapper: self.color_mapper.or(&child.color_mapper).clone(), @@ -208,7 +205,6 @@ impl EntityProperties { /// loaded from the Blueprint store where the Auto values are not up-to-date. pub fn merge_with(&self, other: &Self) -> Self { Self { - visible_history: self.visible_history.with_child(&other.visible_history), interactive: other.interactive, color_mapper: other.color_mapper.or(&self.color_mapper).clone(), @@ -246,7 +242,6 @@ impl EntityProperties { /// Determine whether this `EntityProperty` has user-edits relative to another `EntityProperty` pub fn has_edits(&self, other: &Self) -> bool { let Self { - visible_history, interactive, color_mapper, pinhole_image_plane_distance, @@ -260,8 +255,7 @@ impl EntityProperties { time_series_aggregator, } = self; - visible_history != &other.visible_history - || interactive != &other.interactive + interactive != &other.interactive || color_mapper.has_edits(&other.color_mapper) || pinhole_image_plane_distance.has_edits(&other.pinhole_image_plane_distance) || backproject_depth.has_edits(&other.backproject_depth) diff --git a/crates/re_log_types/src/time_point/time_int.rs b/crates/re_log_types/src/time_point/time_int.rs index fa633336323a..de13e0d624df 100644 --- a/crates/re_log_types/src/time_point/time_int.rs +++ b/crates/re_log_types/src/time_point/time_int.rs @@ -113,6 +113,13 @@ impl From for Duration { } } +impl From for re_types_core::datatypes::TimeInt { + #[inline] + fn from(int: TimeInt) -> Self { + Self(int.as_i64()) + } +} + impl std::ops::Neg for TimeInt { type Output = Self; diff --git a/crates/re_query/src/util.rs b/crates/re_query/src/util.rs index d1c72298bdf9..11cfe034e48f 100644 --- a/crates/re_query/src/util.rs +++ b/crates/re_query/src/util.rs @@ -11,7 +11,6 @@ use crate::{query_archetype, range::range_archetype, ArchetypeView}; /// For [`VisibleHistoryBoundary::RelativeToTimeCursor`] and [`VisibleHistoryBoundary::Absolute`], /// the value are either nanos or frames, depending on the type of timeline. #[derive(Clone, Copy, Debug, PartialEq, Eq)] -#[cfg_attr(feature = "serde", derive(serde::Deserialize, serde::Serialize))] pub enum VisibleHistoryBoundary { /// Boundary is a value relative to the time cursor RelativeToTimeCursor(i64), @@ -36,7 +35,6 @@ impl Default for VisibleHistoryBoundary { /// Visible history bounds. #[derive(Clone, Copy, Default, Debug, PartialEq, Eq)] -#[cfg_attr(feature = "serde", derive(serde::Deserialize, serde::Serialize))] pub struct VisibleHistory { /// Low time boundary. pub from: VisibleHistoryBoundary, @@ -99,8 +97,6 @@ impl VisibleHistory { /// When showing an entity in the history view, add this much history to it. #[derive(Clone, Copy, Default, Debug, PartialEq, Eq)] -#[cfg_attr(feature = "serde", derive(serde::Deserialize, serde::Serialize))] -#[cfg_attr(feature = "serde", serde(default))] pub struct ExtraQueryHistory { /// Is the feature enabled? pub enabled: bool, @@ -112,19 +108,6 @@ pub struct ExtraQueryHistory { pub sequences: VisibleHistory, } -impl ExtraQueryHistory { - /// Multiply/and these together. - pub fn with_child(&self, child: &Self) -> Self { - if child.enabled { - *child - } else if self.enabled { - *self - } else { - Self::default() - } - } -} - // --- pub fn query_archetype_with_history<'a, A: Archetype + 'a, const N: usize>( diff --git a/crates/re_space_view/src/lib.rs b/crates/re_space_view/src/lib.rs index dea050e7ca05..fc879706ef7d 100644 --- a/crates/re_space_view/src/lib.rs +++ b/crates/re_space_view/src/lib.rs @@ -9,6 +9,7 @@ mod screenshot; mod space_view; mod space_view_contents; mod sub_archetypes; // TODO(andreas): better name before `sub_archetype` sticks around? +mod visual_time_range; mod visualizable; pub use data_query::{DataQuery, EntityOverrideContext, PropertyResolver}; @@ -20,6 +21,10 @@ pub use sub_archetypes::{ entity_path_for_space_view_sub_archetype, query_space_view_sub_archetype, query_space_view_sub_archetype_or_default, }; +pub use visual_time_range::{ + default_time_range, query_visual_history, time_range_boundary_to_visible_history_boundary, + visible_history_boundary_to_time_range_boundary, visible_time_range_to_time_range, +}; pub use visualizable::determine_visualizable_entities; // ----------- diff --git a/crates/re_space_view/src/space_view.rs b/crates/re_space_view/src/space_view.rs index 02804b85b60b..4b8dc2214af7 100644 --- a/crates/re_space_view/src/space_view.rs +++ b/crates/re_space_view/src/space_view.rs @@ -1,9 +1,9 @@ use itertools::{FoldWhile, Itertools}; -use re_data_store::LatestAtQuery; -use re_entity_db::{EntityDb, EntityPath, EntityProperties, VisibleHistory}; -use re_entity_db::{EntityPropertiesComponent, EntityPropertyMap}; +use nohash_hasher::IntMap; use crate::SpaceViewContents; +use re_data_store::LatestAtQuery; +use re_entity_db::{EntityDb, EntityPath, EntityPropertiesComponent, EntityPropertyMap}; use re_log_types::{DataRow, EntityPathSubs, RowId}; use re_query::query_archetype; use re_types::blueprint::archetypes as blueprint_archetypes; @@ -14,9 +14,9 @@ use re_types::{ use re_types_core::archetypes::Clear; use re_types_core::Archetype as _; use re_viewer_context::{ - DataResult, PerSystemEntities, PropertyOverrides, RecommendedSpaceView, SpaceViewClass, - SpaceViewClassIdentifier, SpaceViewId, SpaceViewState, StoreContext, SystemCommand, - SystemCommandSender as _, SystemExecutionOutput, ViewQuery, ViewerContext, + DataResult, OverridePath, PerSystemEntities, PropertyOverrides, RecommendedSpaceView, + SpaceViewClass, SpaceViewClassIdentifier, SpaceViewId, SpaceViewState, StoreContext, + SystemCommand, SystemCommandSender as _, SystemExecutionOutput, ViewQuery, ViewerContext, }; // ---------------------------------------------------------------------------- @@ -416,46 +416,56 @@ impl SpaceViewBlueprint { } pub fn root_data_result(&self, ctx: &StoreContext<'_>, query: &LatestAtQuery) -> DataResult { - let entity_path = self.entity_path(); - - let is_time_series = self.class_identifier == "Time Series"; + let base_override_root = self.entity_path(); + let individual_override_path = + base_override_root.join(&DataResult::INDIVIDUAL_OVERRIDES_PREFIX.into()); + let recursive_override_path = + base_override_root.join(&DataResult::RECURSIVE_OVERRIDES_PREFIX.into()); - let mut individual_properties = ctx + let individual_properties = ctx .blueprint .store() - .query_latest_component_quiet::(&self.entity_path(), query) + .query_latest_component_quiet::( + &individual_override_path, + query, + ) .map(|result| result.value.0); + let accumulated_properties = individual_properties.clone().unwrap_or_default(); - // TODO(#4194): this should come from delegation to the space-view-class - if individual_properties.is_none() && is_time_series { - let mut time_series_defaults = EntityProperties::default(); - time_series_defaults.visible_history.nanos = VisibleHistory::ALL; - time_series_defaults.visible_history.sequences = VisibleHistory::ALL; - individual_properties = Some(time_series_defaults); - } - - let mut accumulated_properties = individual_properties.clone().unwrap_or_default(); - - if is_time_series { - // TODO(#4194): enabled == false means use defaults - if !accumulated_properties.visible_history.enabled { - accumulated_properties.visible_history.enabled = true; - accumulated_properties.visible_history.nanos = VisibleHistory::ALL; - accumulated_properties.visible_history.sequences = VisibleHistory::ALL; + // Gather recursive component overrides. + // Ignore individual overrides on SpaceView root. + let mut recursive_component_overrides = IntMap::default(); + if let Some(recursive_override_subtree) = + ctx.blueprint.tree().subtree(&recursive_override_path) + { + for component in recursive_override_subtree.entity.components.keys() { + if let Some(component_data) = ctx + .blueprint + .store() + .latest_at(query, &recursive_override_path, *component, &[*component]) + .and_then(|(_, _, cells)| cells[0].clone()) + { + if !component_data.is_empty() { + recursive_component_overrides.insert( + *component, + OverridePath::blueprint_path(recursive_override_path.clone()), + ); + } + } } } DataResult { - entity_path: entity_path.clone(), + entity_path: base_override_root, visualizers: Default::default(), tree_prefix_only: false, property_overrides: Some(PropertyOverrides { accumulated_properties, individual_properties, recursive_properties: Default::default(), - resolved_component_overrides: Default::default(), - recursive_override_path: entity_path.clone(), - individual_override_path: entity_path, + resolved_component_overrides: recursive_component_overrides, + recursive_override_path, + individual_override_path, }), } } @@ -464,7 +474,7 @@ impl SpaceViewBlueprint { #[cfg(test)] mod tests { use crate::data_query::{DataQuery, PropertyResolver}; - use re_entity_db::EntityDb; + use re_entity_db::{EntityDb, EntityProperties, EntityPropertiesComponent}; use re_log_types::{ example_components::{MyColor, MyLabel, MyPoint}, DataCell, DataRow, RowId, StoreId, StoreKind, TimePoint, @@ -673,110 +683,6 @@ mod tests { assert!(!result.accumulated_properties().interactive); } } - - // Override interactive range on root - { - let root = space_view.root_data_result( - &StoreContext { - app_id: re_log_types::ApplicationId::unknown(), - blueprint: &blueprint, - recording: Some(&recording), - all_recordings: vec![], - }, - &blueprint_query, - ); - let mut overrides = root.individual_properties().cloned().unwrap_or_default(); - overrides.visible_history.enabled = true; - overrides.visible_history.nanos = VisibleHistory::ALL; - - save_override( - overrides, - root.recursive_override_path().unwrap(), - &mut blueprint, - ); - } - - // Everyone has interactive history - { - let ctx = StoreContext { - app_id: re_log_types::ApplicationId::unknown(), - blueprint: &blueprint, - recording: Some(&recording), - all_recordings: vec![], - }; - let mut query_result = contents.execute_query(&ctx, &visualizable_entities); - resolver.update_overrides(&ctx, &blueprint_query, &mut query_result); - - let parent = query_result - .tree - .lookup_result_by_path(&EntityPath::from("parent")) - .unwrap(); - let child1 = query_result - .tree - .lookup_result_by_path(&EntityPath::from("parent/skip/child1")) - .unwrap(); - let child2 = query_result - .tree - .lookup_result_by_path(&EntityPath::from("parent/skip/child2")) - .unwrap(); - - for result in [parent, child1, child2] { - assert!(result.accumulated_properties().visible_history.enabled); - assert_eq!( - result.accumulated_properties().visible_history.nanos, - VisibleHistory::ALL - ); - } - - let mut overrides = child2.individual_properties().cloned().unwrap_or_default(); - overrides.visible_history.enabled = true; - - save_override( - overrides, - child2.individual_override_path().unwrap(), - &mut blueprint, - ); - } - - // Child2 has its own interactive history - { - let ctx = StoreContext { - app_id: re_log_types::ApplicationId::unknown(), - blueprint: &blueprint, - recording: Some(&recording), - all_recordings: vec![], - }; - - let mut query_result = contents.execute_query(&ctx, &visualizable_entities); - resolver.update_overrides(&ctx, &blueprint_query, &mut query_result); - - let parent = query_result - .tree - .lookup_result_by_path(&EntityPath::from("parent")) - .unwrap(); - let child1 = query_result - .tree - .lookup_result_by_path(&EntityPath::from("parent/skip/child1")) - .unwrap(); - let child2 = query_result - .tree - .lookup_result_by_path(&EntityPath::from("parent/skip/child2")) - .unwrap(); - - for result in [parent, child1] { - assert!(result.accumulated_properties().visible_history.enabled); - assert_eq!( - result.accumulated_properties().visible_history.nanos, - VisibleHistory::ALL - ); - } - - assert!(child2.accumulated_properties().visible_history.enabled); - assert_eq!( - child2.accumulated_properties().visible_history.nanos, - VisibleHistory::OFF - ); - } } #[test] diff --git a/crates/re_space_view/src/visual_time_range.rs b/crates/re_space_view/src/visual_time_range.rs new file mode 100644 index 000000000000..b07261f7b4f9 --- /dev/null +++ b/crates/re_space_view/src/visual_time_range.rs @@ -0,0 +1,114 @@ +//! For the most part this module bridges older visual history types to the newer +//! visual range types that are defined in the `re_types` crate. +//! +//! Historically there was a special `EntityProperty` bag that was used to store the visual history. +//! Now, visual history makes use of the component override system (components stored at special paths in the blueprint store). +//! +//! The intent is to eventually remove the old types, but this bridge here is there in order +//! to reduce the amount of changes in code that is likely to be refactored soon anyways. + +use re_log_types::TimeRange; +use re_query::{ExtraQueryHistory, VisibleHistory, VisibleHistoryBoundary}; +use re_types::blueprint::{ + components::VisibleTimeRange, + datatypes::{VisibleTimeRangeBoundary, VisibleTimeRangeBoundaryKind}, +}; +use re_viewer_context::{SpaceViewClassIdentifier, ViewerContext}; + +pub fn time_range_boundary_to_visible_history_boundary( + boundary: &VisibleTimeRangeBoundary, +) -> VisibleHistoryBoundary { + match boundary.kind { + VisibleTimeRangeBoundaryKind::RelativeToTimeCursor => { + VisibleHistoryBoundary::RelativeToTimeCursor(boundary.time.0) + } + VisibleTimeRangeBoundaryKind::Absolute => VisibleHistoryBoundary::Absolute(boundary.time.0), + VisibleTimeRangeBoundaryKind::Infinite => VisibleHistoryBoundary::Infinite, + } +} + +pub fn visible_history_boundary_to_time_range_boundary( + boundary: &VisibleHistoryBoundary, +) -> VisibleTimeRangeBoundary { + match boundary { + VisibleHistoryBoundary::RelativeToTimeCursor(v) => VisibleTimeRangeBoundary { + kind: VisibleTimeRangeBoundaryKind::RelativeToTimeCursor, + time: (*v).into(), + }, + VisibleHistoryBoundary::Absolute(v) => VisibleTimeRangeBoundary { + kind: VisibleTimeRangeBoundaryKind::Absolute, + time: (*v).into(), + }, + VisibleHistoryBoundary::Infinite => VisibleTimeRangeBoundary { + kind: VisibleTimeRangeBoundaryKind::Infinite, + time: 0.into(), + }, + } +} + +pub fn visible_time_range_to_time_range( + range: &VisibleTimeRange, + time_type: re_log_types::TimeType, + cursor: re_log_types::TimeInt, +) -> re_log_types::TimeRange { + let cursor = cursor.as_i64().into(); + + let mut min = match time_type { + re_log_types::TimeType::Sequence => range.0.from_sequence.start_boundary_time(cursor).0, + re_log_types::TimeType::Time => range.0.from_time.start_boundary_time(cursor).0, + }; + let mut max = match time_type { + re_log_types::TimeType::Sequence => range.0.to_sequence.end_boundary_time(cursor).0, + re_log_types::TimeType::Time => range.0.to_time.end_boundary_time(cursor).0, + }; + + if min > max { + std::mem::swap(&mut min, &mut max); + } + + TimeRange::new(min.into(), max.into()) +} + +pub fn query_visual_history( + ctx: &ViewerContext<'_>, + data_result: &re_viewer_context::DataResult, +) -> ExtraQueryHistory { + let visual_time_range_component = + data_result.lookup_override::(ctx); + if let Some(visual_time_range_component) = visual_time_range_component { + ExtraQueryHistory { + enabled: true, + nanos: VisibleHistory { + from: time_range_boundary_to_visible_history_boundary( + &visual_time_range_component.0.from_time, + ), + to: time_range_boundary_to_visible_history_boundary( + &visual_time_range_component.0.to_time, + ), + }, + sequences: VisibleHistory { + from: time_range_boundary_to_visible_history_boundary( + &visual_time_range_component.0.from_sequence, + ), + to: time_range_boundary_to_visible_history_boundary( + &visual_time_range_component.0.to_sequence, + ), + }, + } + } else { + ExtraQueryHistory { + enabled: false, + nanos: VisibleHistory::default(), + sequences: VisibleHistory::default(), + } + } +} + +// TODO(#4194): this should come from delegation to the space-view-class +pub fn default_time_range(class_identifier: SpaceViewClassIdentifier) -> VisibleTimeRange { + if class_identifier == "Time Series" { + VisibleTimeRange::EVERYTHING.clone() + } else { + VisibleTimeRange::EMPTY.clone() + } +} diff --git a/crates/re_space_view_spatial/src/visualizers/entity_iterator.rs b/crates/re_space_view_spatial/src/visualizers/entity_iterator.rs index 986c40c7db18..8b37590166dc 100644 --- a/crates/re_space_view_spatial/src/visualizers/entity_iterator.rs +++ b/crates/re_space_view_spatial/src/visualizers/entity_iterator.rs @@ -2,6 +2,7 @@ use re_entity_db::EntityProperties; use re_log_types::{EntityPath, RowId, TimeInt}; use re_query::{query_archetype_with_history, ArchetypeView, QueryError}; use re_renderer::DepthOffset; +use re_space_view::query_visual_history; use re_types::{components::InstanceKey, Archetype, Component}; use re_viewer_context::{ IdentifiedViewSystem, SpaceViewClass, SpaceViewSystemExecutionError, ViewContextCollection, @@ -71,11 +72,13 @@ where space_view_class_identifier: view_ctx.space_view_class_identifier(), }; + let extra_history = query_visual_history(ctx, data_result); + match query_archetype_with_history::( ctx.entity_db.store(), &query.timeline, &query.latest_at, - &data_result.accumulated_properties().visible_history, + &extra_history, &data_result.entity_path, ) .and_then(|arch_views| { @@ -179,11 +182,13 @@ macro_rules! impl_process_archetype { space_view_class_identifier: view_ctx.space_view_class_identifier(), }; + let extra_history = query_visual_history(ctx, data_result); + match ctx.entity_db.query_caches().[]::( ctx.entity_db.store(), &query.timeline, &query.latest_at, - &data_result.accumulated_properties().visible_history, + &extra_history, &data_result.entity_path, |(t, keys, $($pov,)+ $($comp,)*)| { counter @@ -257,11 +262,13 @@ pub fn count_instances_in_archetype_views< let mut num_instances = 0; for data_result in query.iter_visible_data_results(ctx, System::identifier()) { + let extra_history = query_visual_history(ctx, data_result); + match query_archetype_with_history::( ctx.entity_db.store(), &query.timeline, &query.latest_at, - &data_result.accumulated_properties().visible_history, + &extra_history, &data_result.entity_path, ) .map(|arch_views| { diff --git a/crates/re_space_view_time_series/src/legacy_visualizer_system.rs b/crates/re_space_view_time_series/src/legacy_visualizer_system.rs index 6d71a991ed03..bd9753f1d33c 100644 --- a/crates/re_space_view_time_series/src/legacy_visualizer_system.rs +++ b/crates/re_space_view_time_series/src/legacy_visualizer_system.rs @@ -140,6 +140,7 @@ impl LegacyTimeSeriesSystem { let mut points = Vec::new(); let time_range = determine_time_range( + ctx, query, data_result, plot_bounds, diff --git a/crates/re_space_view_time_series/src/line_visualizer_system.rs b/crates/re_space_view_time_series/src/line_visualizer_system.rs index 5672f84770f5..4668bb409c53 100644 --- a/crates/re_space_view_time_series/src/line_visualizer_system.rs +++ b/crates/re_space_view_time_series/src/line_visualizer_system.rs @@ -184,6 +184,7 @@ fn load_series( let mut points = Vec::new(); let time_range = determine_time_range( + ctx, query, data_result, plot_bounds, diff --git a/crates/re_space_view_time_series/src/point_visualizer_system.rs b/crates/re_space_view_time_series/src/point_visualizer_system.rs index f0b612798773..58a7d5423639 100644 --- a/crates/re_space_view_time_series/src/point_visualizer_system.rs +++ b/crates/re_space_view_time_series/src/point_visualizer_system.rs @@ -138,6 +138,7 @@ impl SeriesPointSystem { let mut points = Vec::new(); let time_range = determine_time_range( + ctx, query, data_result, plot_bounds, diff --git a/crates/re_space_view_time_series/src/util.rs b/crates/re_space_view_time_series/src/util.rs index d58faaeb51ee..b703b7d20ae7 100644 --- a/crates/re_space_view_time_series/src/util.rs +++ b/crates/re_space_view_time_series/src/util.rs @@ -1,10 +1,13 @@ use re_log_types::{EntityPath, TimeInt, TimeRange}; +use re_space_view::{default_time_range, visible_time_range_to_time_range}; use re_types::datatypes::Utf8; -use re_viewer_context::{external::re_entity_db::TimeSeriesAggregator, ViewQuery, ViewerContext}; +use re_viewer_context::{ + external::re_entity_db::TimeSeriesAggregator, SpaceViewClass, ViewQuery, ViewerContext, +}; use crate::{ aggregation::{AverageAggregator, MinMaxAggregator}, - PlotPoint, PlotSeries, PlotSeriesKind, ScatterAttrs, + PlotPoint, PlotSeries, PlotSeriesKind, ScatterAttrs, TimeSeriesSpaceView, }; /// Find the plot bounds and the per-ui-point delta from egui. @@ -28,26 +31,21 @@ pub fn determine_plot_bounds_and_time_per_pixel( } pub fn determine_time_range( + ctx: &ViewerContext<'_>, query: &ViewQuery<'_>, data_result: &re_viewer_context::DataResult, plot_bounds: Option, enable_query_clamping: bool, ) -> TimeRange { - let visible_history = match query.timeline.typ() { - re_log_types::TimeType::Time => data_result.accumulated_properties().visible_history.nanos, - re_log_types::TimeType::Sequence => { - data_result - .accumulated_properties() - .visible_history - .sequences - } - }; - - let mut time_range = if data_result.accumulated_properties().visible_history.enabled { - visible_history.time_range(query.latest_at) - } else { - TimeRange::new(TimeInt::MIN, TimeInt::MAX) - }; + let visible_time_range_override = data_result + .lookup_override::(ctx) + .unwrap_or(default_time_range(TimeSeriesSpaceView::identifier())); + + let mut time_range = visible_time_range_to_time_range( + &visible_time_range_override, + query.timeline.typ(), + query.latest_at, + ); // TODO(cmc): We would love to reduce the query to match the actual plot bounds, but because // the plot widget handles zoom after we provide it with data for the current frame, diff --git a/crates/re_types/definitions/rerun/blueprint.fbs b/crates/re_types/definitions/rerun/blueprint.fbs index 1d629523d648..c7056192eca7 100644 --- a/crates/re_types/definitions/rerun/blueprint.fbs +++ b/crates/re_types/definitions/rerun/blueprint.fbs @@ -1,3 +1,5 @@ +include "./blueprint/datatypes/visible_time_range.fbs"; + include "./blueprint/components/active_tab.fbs"; include "./blueprint/components/auto_layout.fbs"; include "./blueprint/components/auto_space_views.fbs"; @@ -18,6 +20,7 @@ include "./blueprint/components/space_view_class.fbs"; include "./blueprint/components/space_view_maximized.fbs"; include "./blueprint/components/space_view_origin.fbs"; include "./blueprint/components/viewer_recommendation_hash.fbs"; +include "./blueprint/components/visible_time_range.fbs"; include "./blueprint/components/visible.fbs"; include "./blueprint/archetypes/background_3d.fbs"; diff --git a/crates/re_types/definitions/rerun/blueprint/components/visible_time_range.fbs b/crates/re_types/definitions/rerun/blueprint/components/visible_time_range.fbs new file mode 100644 index 000000000000..7e71f15c0d08 --- /dev/null +++ b/crates/re_types/definitions/rerun/blueprint/components/visible_time_range.fbs @@ -0,0 +1,20 @@ +include "arrow/attributes.fbs"; +include "python/attributes.fbs"; +include "rust/attributes.fbs"; + +include "rerun/datatypes.fbs"; +include "rerun/attributes.fbs"; + +namespace rerun.blueprint.components; + +// --- + +/// The range of values that will be included in a Space View query. +table VisibleTimeRange ( + "attr.arrow.transparent", + "attr.rerun.scope": "blueprint", + "attr.rust.repr": "transparent", + "attr.rust.derive": "PartialEq, Eq" +) { + value: rerun.blueprint.datatypes.VisibleTimeRange (order: 100); +} diff --git a/crates/re_types/definitions/rerun/blueprint/datatypes/visible_time_range.fbs b/crates/re_types/definitions/rerun/blueprint/datatypes/visible_time_range.fbs new file mode 100644 index 000000000000..584a6f42366e --- /dev/null +++ b/crates/re_types/definitions/rerun/blueprint/datatypes/visible_time_range.fbs @@ -0,0 +1,58 @@ + +include "arrow/attributes.fbs"; +include "python/attributes.fbs"; +include "rust/attributes.fbs"; + +include "rerun/attributes.fbs"; + +include "../../datatypes/time_int.fbs"; + +namespace rerun.blueprint.datatypes; + +/// Kind of boundary for visible history, see `VisibleTimeRangeBoundary`. +enum VisibleTimeRangeBoundaryKind: byte ( + "attr.rerun.scope": "blueprint", + "attr.docs.unreleased" +) { + /// Boundary is a value relative to the time cursor. + RelativeToTimeCursor, + + /// Boundary is an absolute value. + Absolute, + + /// The boundary extends to infinity. + Infinite, +} + +/// Type of boundary for visible history. +struct VisibleTimeRangeBoundary ( + "attr.rerun.scope": "blueprint", + "attr.docs.unreleased" +) { + /// Type of the boundary. + kind: rerun.blueprint.datatypes.VisibleTimeRangeBoundaryKind (order: 100); + + /// Value of the boundary (ignored for `Infinite` type). + time: rerun.datatypes.TimeInt (order: 200); +} + +/// Visible time range bounds. +struct VisibleTimeRange ( + "attr.rerun.scope": "blueprint", + "attr.rust.derive": "PartialEq, Eq", + "attr.docs.unreleased" +) { + // TODO(andreas): Split this up into two separate components. + + /// Low time boundary for sequence timeline. + from_sequence: rerun.blueprint.datatypes.VisibleTimeRangeBoundary (order: 100); + + /// High time boundary for sequence timeline. + to_sequence: rerun.blueprint.datatypes.VisibleTimeRangeBoundary (order: 200); + + /// Low time boundary for time timeline. + from_time: rerun.blueprint.datatypes.VisibleTimeRangeBoundary (order: 300); + + /// High time boundary for time timeline. + to_time: rerun.blueprint.datatypes.VisibleTimeRangeBoundary (order: 400); +} diff --git a/crates/re_types/definitions/rerun/datatypes.fbs b/crates/re_types/definitions/rerun/datatypes.fbs index 3b8adb39a597..74d5fc31fea0 100644 --- a/crates/re_types/definitions/rerun/datatypes.fbs +++ b/crates/re_types/definitions/rerun/datatypes.fbs @@ -1,8 +1,8 @@ include "./datatypes/angle.fbs"; include "./datatypes/annotation_info.fbs"; include "./datatypes/bool.fbs"; -include "./datatypes/class_description.fbs"; include "./datatypes/class_description_map_elem.fbs"; +include "./datatypes/class_description.fbs"; include "./datatypes/class_id.fbs"; include "./datatypes/entity_path.fbs"; include "./datatypes/float32.fbs"; @@ -14,12 +14,13 @@ include "./datatypes/material.fbs"; include "./datatypes/mesh_properties.fbs"; include "./datatypes/quaternion.fbs"; include "./datatypes/rgba32.fbs"; -include "./datatypes/rotation3d.fbs"; include "./datatypes/rotation_axis_angle.fbs"; +include "./datatypes/rotation3d.fbs"; include "./datatypes/scale3d.fbs"; include "./datatypes/tensor_buffer.fbs"; include "./datatypes/tensor_data.fbs"; include "./datatypes/tensor_dimension.fbs"; +include "./datatypes/time_int.fbs"; include "./datatypes/transform3d.fbs"; include "./datatypes/translation_and_mat3x3.fbs"; include "./datatypes/translation_rotation_scale3d.fbs"; diff --git a/crates/re_types/definitions/rerun/datatypes/time_int.fbs b/crates/re_types/definitions/rerun/datatypes/time_int.fbs new file mode 100644 index 000000000000..dfecb256d70b --- /dev/null +++ b/crates/re_types/definitions/rerun/datatypes/time_int.fbs @@ -0,0 +1,19 @@ + +include "arrow/attributes.fbs"; +include "python/attributes.fbs"; +include "rust/attributes.fbs"; + +include "rerun/attributes.fbs"; + +namespace rerun.datatypes; + +/// A 64-bit number describing either nanoseconds OR sequence numbers. +struct TimeInt ( + "attr.docs.unreleased", + "attr.arrow.transparent", + "attr.rust.derive": "Copy, PartialEq, Eq, PartialOrd, Ord", + "attr.rust.tuple_struct", + "attr.rust.override_crate": "re_types_core" +) { + value: long (order: 100); +} diff --git a/crates/re_types/src/blueprint/components/.gitattributes b/crates/re_types/src/blueprint/components/.gitattributes index 9f8d0a8dd3bf..02afa95257cd 100644 --- a/crates/re_types/src/blueprint/components/.gitattributes +++ b/crates/re_types/src/blueprint/components/.gitattributes @@ -15,3 +15,4 @@ space_view_class.rs linguist-generated=true space_view_origin.rs linguist-generated=true viewer_recommendation_hash.rs linguist-generated=true visible.rs linguist-generated=true +visible_time_range.rs linguist-generated=true diff --git a/crates/re_types/src/blueprint/components/mod.rs b/crates/re_types/src/blueprint/components/mod.rs index 0b873668d40b..d3670e91167c 100644 --- a/crates/re_types/src/blueprint/components/mod.rs +++ b/crates/re_types/src/blueprint/components/mod.rs @@ -15,6 +15,8 @@ mod space_view_origin; mod viewer_recommendation_hash; mod visible; mod visible_ext; +mod visible_time_range; +mod visible_time_range_ext; pub use self::active_tab::ActiveTab; pub use self::background3d_kind::Background3DKind; @@ -29,3 +31,4 @@ pub use self::space_view_class::SpaceViewClass; pub use self::space_view_origin::SpaceViewOrigin; pub use self::viewer_recommendation_hash::ViewerRecommendationHash; pub use self::visible::Visible; +pub use self::visible_time_range::VisibleTimeRange; diff --git a/crates/re_types/src/blueprint/components/visible_time_range.rs b/crates/re_types/src/blueprint/components/visible_time_range.rs new file mode 100644 index 000000000000..053681357c0c --- /dev/null +++ b/crates/re_types/src/blueprint/components/visible_time_range.rs @@ -0,0 +1,153 @@ +// DO NOT EDIT! This file was auto-generated by crates/re_types_builder/src/codegen/rust/api.rs +// Based on "crates/re_types/definitions/rerun/blueprint/components/visible_time_range.fbs". + +#![allow(trivial_numeric_casts)] +#![allow(unused_imports)] +#![allow(unused_parens)] +#![allow(clippy::clone_on_copy)] +#![allow(clippy::iter_on_single_items)] +#![allow(clippy::map_flatten)] +#![allow(clippy::match_wildcard_for_single_variants)] +#![allow(clippy::needless_question_mark)] +#![allow(clippy::new_without_default)] +#![allow(clippy::redundant_closure)] +#![allow(clippy::too_many_arguments)] +#![allow(clippy::too_many_lines)] +#![allow(clippy::unnecessary_cast)] + +use ::re_types_core::external::arrow2; +use ::re_types_core::ComponentName; +use ::re_types_core::SerializationResult; +use ::re_types_core::{ComponentBatch, MaybeOwnedComponentBatch}; +use ::re_types_core::{DeserializationError, DeserializationResult}; + +/// **Component**: The range of values that will be included in a Space View query. +#[derive(Clone, Debug, PartialEq, Eq)] +#[repr(transparent)] +pub struct VisibleTimeRange(pub crate::blueprint::datatypes::VisibleTimeRange); + +impl ::re_types_core::SizeBytes for VisibleTimeRange { + #[inline] + fn heap_size_bytes(&self) -> u64 { + self.0.heap_size_bytes() + } + + #[inline] + fn is_pod() -> bool { + ::is_pod() + } +} + +impl> From for VisibleTimeRange { + fn from(v: T) -> Self { + Self(v.into()) + } +} + +impl std::borrow::Borrow for VisibleTimeRange { + #[inline] + fn borrow(&self) -> &crate::blueprint::datatypes::VisibleTimeRange { + &self.0 + } +} + +impl std::ops::Deref for VisibleTimeRange { + type Target = crate::blueprint::datatypes::VisibleTimeRange; + + #[inline] + fn deref(&self) -> &crate::blueprint::datatypes::VisibleTimeRange { + &self.0 + } +} + +::re_types_core::macros::impl_into_cow!(VisibleTimeRange); + +impl ::re_types_core::Loggable for VisibleTimeRange { + type Name = ::re_types_core::ComponentName; + + #[inline] + fn name() -> Self::Name { + "rerun.blueprint.components.VisibleTimeRange".into() + } + + #[allow(clippy::wildcard_imports)] + #[inline] + fn arrow_datatype() -> arrow2::datatypes::DataType { + use arrow2::datatypes::*; + DataType::Struct(std::sync::Arc::new(vec![ + Field::new( + "from_sequence", + ::arrow_datatype(), + false, + ), + Field::new( + "to_sequence", + ::arrow_datatype(), + false, + ), + Field::new( + "from_time", + ::arrow_datatype(), + false, + ), + Field::new( + "to_time", + ::arrow_datatype(), + false, + ), + ])) + } + + #[allow(clippy::wildcard_imports)] + fn to_arrow_opt<'a>( + data: impl IntoIterator>>>, + ) -> SerializationResult> + where + Self: Clone + 'a, + { + use ::re_types_core::{Loggable as _, ResultExt as _}; + use arrow2::{array::*, datatypes::*}; + Ok({ + let (somes, data0): (Vec<_>, Vec<_>) = data + .into_iter() + .map(|datum| { + let datum: Option<::std::borrow::Cow<'a, Self>> = datum.map(Into::into); + let datum = datum.map(|datum| { + let Self(data0) = datum.into_owned(); + data0 + }); + (datum.is_some(), datum) + }) + .unzip(); + let data0_bitmap: Option = { + let any_nones = somes.iter().any(|some| !*some); + any_nones.then(|| somes.into()) + }; + { + _ = data0_bitmap; + crate::blueprint::datatypes::VisibleTimeRange::to_arrow_opt(data0)? + } + }) + } + + #[allow(clippy::wildcard_imports)] + fn from_arrow_opt( + arrow_data: &dyn arrow2::array::Array, + ) -> DeserializationResult>> + where + Self: Sized, + { + use ::re_types_core::{Loggable as _, ResultExt as _}; + use arrow2::{array::*, buffer::*, datatypes::*}; + Ok( + crate::blueprint::datatypes::VisibleTimeRange::from_arrow_opt(arrow_data) + .with_context("rerun.blueprint.components.VisibleTimeRange#value")? + .into_iter() + .map(|v| v.ok_or_else(DeserializationError::missing_data)) + .map(|res| res.map(|v| Some(Self(v)))) + .collect::>>>() + .with_context("rerun.blueprint.components.VisibleTimeRange#value") + .with_context("rerun.blueprint.components.VisibleTimeRange")?, + ) + } +} diff --git a/crates/re_types/src/blueprint/components/visible_time_range_ext.rs b/crates/re_types/src/blueprint/components/visible_time_range_ext.rs new file mode 100644 index 000000000000..051f3d145a13 --- /dev/null +++ b/crates/re_types/src/blueprint/components/visible_time_range_ext.rs @@ -0,0 +1,6 @@ +use super::VisibleTimeRange; + +impl VisibleTimeRange { + pub const EMPTY: Self = Self(crate::blueprint::datatypes::VisibleTimeRange::EMPTY); + pub const EVERYTHING: Self = Self(crate::blueprint::datatypes::VisibleTimeRange::EVERYTHING); +} diff --git a/crates/re_types/src/blueprint/datatypes/.gitattributes b/crates/re_types/src/blueprint/datatypes/.gitattributes index f8cc2be56035..788b8f6860a3 100644 --- a/crates/re_types/src/blueprint/datatypes/.gitattributes +++ b/crates/re_types/src/blueprint/datatypes/.gitattributes @@ -1,5 +1,7 @@ # DO NOT EDIT! This file is generated by crates/re_types_builder/src/lib.rs .gitattributes linguist-generated=true -legend.rs linguist-generated=true mod.rs linguist-generated=true +visible_time_range.rs linguist-generated=true +visible_time_range_boundary.rs linguist-generated=true +visible_time_range_boundary_kind.rs linguist-generated=true diff --git a/crates/re_types/src/blueprint/datatypes/mod.rs b/crates/re_types/src/blueprint/datatypes/mod.rs index af61829b13e1..c843412e734b 100644 --- a/crates/re_types/src/blueprint/datatypes/mod.rs +++ b/crates/re_types/src/blueprint/datatypes/mod.rs @@ -1,5 +1,11 @@ // DO NOT EDIT! This file was auto-generated by crates/re_types_builder/src/codegen/rust/api.rs -mod legend; +mod visible_time_range; +mod visible_time_range_boundary; +mod visible_time_range_boundary_ext; +mod visible_time_range_boundary_kind; +mod visible_time_range_ext; -pub use self::legend::Legend; +pub use self::visible_time_range::VisibleTimeRange; +pub use self::visible_time_range_boundary::VisibleTimeRangeBoundary; +pub use self::visible_time_range_boundary_kind::VisibleTimeRangeBoundaryKind; diff --git a/crates/re_types/src/blueprint/datatypes/visible_time_range.rs b/crates/re_types/src/blueprint/datatypes/visible_time_range.rs new file mode 100644 index 000000000000..bc1bd84fef03 --- /dev/null +++ b/crates/re_types/src/blueprint/datatypes/visible_time_range.rs @@ -0,0 +1,340 @@ +// DO NOT EDIT! This file was auto-generated by crates/re_types_builder/src/codegen/rust/api.rs +// Based on "crates/re_types/definitions/rerun/blueprint/datatypes/visible_time_range.fbs". + +#![allow(trivial_numeric_casts)] +#![allow(unused_imports)] +#![allow(unused_parens)] +#![allow(clippy::clone_on_copy)] +#![allow(clippy::iter_on_single_items)] +#![allow(clippy::map_flatten)] +#![allow(clippy::match_wildcard_for_single_variants)] +#![allow(clippy::needless_question_mark)] +#![allow(clippy::new_without_default)] +#![allow(clippy::redundant_closure)] +#![allow(clippy::too_many_arguments)] +#![allow(clippy::too_many_lines)] +#![allow(clippy::unnecessary_cast)] + +use ::re_types_core::external::arrow2; +use ::re_types_core::ComponentName; +use ::re_types_core::SerializationResult; +use ::re_types_core::{ComponentBatch, MaybeOwnedComponentBatch}; +use ::re_types_core::{DeserializationError, DeserializationResult}; + +/// **Datatype**: Visible time range bounds. +#[derive(Clone, Debug, PartialEq, Eq)] +pub struct VisibleTimeRange { + /// Low time boundary for sequence timeline. + pub from_sequence: crate::blueprint::datatypes::VisibleTimeRangeBoundary, + + /// High time boundary for sequence timeline. + pub to_sequence: crate::blueprint::datatypes::VisibleTimeRangeBoundary, + + /// Low time boundary for time timeline. + pub from_time: crate::blueprint::datatypes::VisibleTimeRangeBoundary, + + /// High time boundary for time timeline. + pub to_time: crate::blueprint::datatypes::VisibleTimeRangeBoundary, +} + +impl ::re_types_core::SizeBytes for VisibleTimeRange { + #[inline] + fn heap_size_bytes(&self) -> u64 { + self.from_sequence.heap_size_bytes() + + self.to_sequence.heap_size_bytes() + + self.from_time.heap_size_bytes() + + self.to_time.heap_size_bytes() + } + + #[inline] + fn is_pod() -> bool { + ::is_pod() + && ::is_pod() + && ::is_pod() + && ::is_pod() + } +} + +::re_types_core::macros::impl_into_cow!(VisibleTimeRange); + +impl ::re_types_core::Loggable for VisibleTimeRange { + type Name = ::re_types_core::DatatypeName; + + #[inline] + fn name() -> Self::Name { + "rerun.blueprint.datatypes.VisibleTimeRange".into() + } + + #[allow(clippy::wildcard_imports)] + #[inline] + fn arrow_datatype() -> arrow2::datatypes::DataType { + use arrow2::datatypes::*; + DataType::Struct(std::sync::Arc::new(vec![ + Field::new( + "from_sequence", + ::arrow_datatype(), + false, + ), + Field::new( + "to_sequence", + ::arrow_datatype(), + false, + ), + Field::new( + "from_time", + ::arrow_datatype(), + false, + ), + Field::new( + "to_time", + ::arrow_datatype(), + false, + ), + ])) + } + + #[allow(clippy::wildcard_imports)] + fn to_arrow_opt<'a>( + data: impl IntoIterator>>>, + ) -> SerializationResult> + where + Self: Clone + 'a, + { + use ::re_types_core::{Loggable as _, ResultExt as _}; + use arrow2::{array::*, datatypes::*}; + Ok({ + let (somes, data): (Vec<_>, Vec<_>) = data + .into_iter() + .map(|datum| { + let datum: Option<::std::borrow::Cow<'a, Self>> = datum.map(Into::into); + (datum.is_some(), datum) + }) + .unzip(); + let bitmap: Option = { + let any_nones = somes.iter().any(|some| !*some); + any_nones.then(|| somes.into()) + }; + StructArray::new( + ::arrow_datatype(), + vec![ + { + let (somes, from_sequence): (Vec<_>, Vec<_>) = data + .iter() + .map(|datum| { + let datum = datum.as_ref().map(|datum| { + let Self { from_sequence, .. } = &**datum; + from_sequence.clone() + }); + (datum.is_some(), datum) + }) + .unzip(); + let from_sequence_bitmap: Option = { + let any_nones = somes.iter().any(|some| !*some); + any_nones.then(|| somes.into()) + }; + { + _ = from_sequence_bitmap; + crate::blueprint::datatypes::VisibleTimeRangeBoundary::to_arrow_opt( + from_sequence, + )? + } + }, + { + let (somes, to_sequence): (Vec<_>, Vec<_>) = data + .iter() + .map(|datum| { + let datum = datum.as_ref().map(|datum| { + let Self { to_sequence, .. } = &**datum; + to_sequence.clone() + }); + (datum.is_some(), datum) + }) + .unzip(); + let to_sequence_bitmap: Option = { + let any_nones = somes.iter().any(|some| !*some); + any_nones.then(|| somes.into()) + }; + { + _ = to_sequence_bitmap; + crate::blueprint::datatypes::VisibleTimeRangeBoundary::to_arrow_opt( + to_sequence, + )? + } + }, + { + let (somes, from_time): (Vec<_>, Vec<_>) = data + .iter() + .map(|datum| { + let datum = datum.as_ref().map(|datum| { + let Self { from_time, .. } = &**datum; + from_time.clone() + }); + (datum.is_some(), datum) + }) + .unzip(); + let from_time_bitmap: Option = { + let any_nones = somes.iter().any(|some| !*some); + any_nones.then(|| somes.into()) + }; + { + _ = from_time_bitmap; + crate::blueprint::datatypes::VisibleTimeRangeBoundary::to_arrow_opt( + from_time, + )? + } + }, + { + let (somes, to_time): (Vec<_>, Vec<_>) = data + .iter() + .map(|datum| { + let datum = datum.as_ref().map(|datum| { + let Self { to_time, .. } = &**datum; + to_time.clone() + }); + (datum.is_some(), datum) + }) + .unzip(); + let to_time_bitmap: Option = { + let any_nones = somes.iter().any(|some| !*some); + any_nones.then(|| somes.into()) + }; + { + _ = to_time_bitmap; + crate::blueprint::datatypes::VisibleTimeRangeBoundary::to_arrow_opt( + to_time, + )? + } + }, + ], + bitmap, + ) + .boxed() + }) + } + + #[allow(clippy::wildcard_imports)] + fn from_arrow_opt( + arrow_data: &dyn arrow2::array::Array, + ) -> DeserializationResult>> + where + Self: Sized, + { + use ::re_types_core::{Loggable as _, ResultExt as _}; + use arrow2::{array::*, buffer::*, datatypes::*}; + Ok({ + let arrow_data = arrow_data + .as_any() + .downcast_ref::() + .ok_or_else(|| { + let expected = Self::arrow_datatype(); + let actual = arrow_data.data_type().clone(); + DeserializationError::datatype_mismatch(expected, actual) + }) + .with_context("rerun.blueprint.datatypes.VisibleTimeRange")?; + if arrow_data.is_empty() { + Vec::new() + } else { + let (arrow_data_fields, arrow_data_arrays) = + (arrow_data.fields(), arrow_data.values()); + let arrays_by_name: ::std::collections::HashMap<_, _> = arrow_data_fields + .iter() + .map(|field| field.name.as_str()) + .zip(arrow_data_arrays) + .collect(); + let from_sequence = { + if !arrays_by_name.contains_key("from_sequence") { + return Err(DeserializationError::missing_struct_field( + Self::arrow_datatype(), + "from_sequence", + )) + .with_context("rerun.blueprint.datatypes.VisibleTimeRange"); + } + let arrow_data = &**arrays_by_name["from_sequence"]; + crate::blueprint::datatypes::VisibleTimeRangeBoundary::from_arrow_opt( + arrow_data, + ) + .with_context("rerun.blueprint.datatypes.VisibleTimeRange#from_sequence")? + .into_iter() + }; + let to_sequence = { + if !arrays_by_name.contains_key("to_sequence") { + return Err(DeserializationError::missing_struct_field( + Self::arrow_datatype(), + "to_sequence", + )) + .with_context("rerun.blueprint.datatypes.VisibleTimeRange"); + } + let arrow_data = &**arrays_by_name["to_sequence"]; + crate::blueprint::datatypes::VisibleTimeRangeBoundary::from_arrow_opt( + arrow_data, + ) + .with_context("rerun.blueprint.datatypes.VisibleTimeRange#to_sequence")? + .into_iter() + }; + let from_time = { + if !arrays_by_name.contains_key("from_time") { + return Err(DeserializationError::missing_struct_field( + Self::arrow_datatype(), + "from_time", + )) + .with_context("rerun.blueprint.datatypes.VisibleTimeRange"); + } + let arrow_data = &**arrays_by_name["from_time"]; + crate::blueprint::datatypes::VisibleTimeRangeBoundary::from_arrow_opt( + arrow_data, + ) + .with_context("rerun.blueprint.datatypes.VisibleTimeRange#from_time")? + .into_iter() + }; + let to_time = { + if !arrays_by_name.contains_key("to_time") { + return Err(DeserializationError::missing_struct_field( + Self::arrow_datatype(), + "to_time", + )) + .with_context("rerun.blueprint.datatypes.VisibleTimeRange"); + } + let arrow_data = &**arrays_by_name["to_time"]; + crate::blueprint::datatypes::VisibleTimeRangeBoundary::from_arrow_opt( + arrow_data, + ) + .with_context("rerun.blueprint.datatypes.VisibleTimeRange#to_time")? + .into_iter() + }; + arrow2::bitmap::utils::ZipValidity::new_with_validity( + ::itertools::izip!(from_sequence, to_sequence, from_time, to_time), + arrow_data.validity(), + ) + .map(|opt| { + opt.map(|(from_sequence, to_sequence, from_time, to_time)| { + Ok(Self { + from_sequence: from_sequence + .ok_or_else(DeserializationError::missing_data) + .with_context( + "rerun.blueprint.datatypes.VisibleTimeRange#from_sequence", + )?, + to_sequence: to_sequence + .ok_or_else(DeserializationError::missing_data) + .with_context( + "rerun.blueprint.datatypes.VisibleTimeRange#to_sequence", + )?, + from_time: from_time + .ok_or_else(DeserializationError::missing_data) + .with_context( + "rerun.blueprint.datatypes.VisibleTimeRange#from_time", + )?, + to_time: to_time + .ok_or_else(DeserializationError::missing_data) + .with_context( + "rerun.blueprint.datatypes.VisibleTimeRange#to_time", + )?, + }) + }) + .transpose() + }) + .collect::>>() + .with_context("rerun.blueprint.datatypes.VisibleTimeRange")? + } + }) + } +} diff --git a/crates/re_types/src/blueprint/datatypes/legend.rs b/crates/re_types/src/blueprint/datatypes/visible_time_range_boundary.rs similarity index 53% rename from crates/re_types/src/blueprint/datatypes/legend.rs rename to crates/re_types/src/blueprint/datatypes/visible_time_range_boundary.rs index a75e3bc464e4..2307d5fcf906 100644 --- a/crates/re_types/src/blueprint/datatypes/legend.rs +++ b/crates/re_types/src/blueprint/datatypes/visible_time_range_boundary.rs @@ -1,5 +1,5 @@ // DO NOT EDIT! This file was auto-generated by crates/re_types_builder/src/codegen/rust/api.rs -// Based on "crates/re_types/definitions/rerun/blueprint/datatypes/legend.fbs". +// Based on "crates/re_types/definitions/rerun/blueprint/datatypes/visible_time_range.fbs". #![allow(trivial_numeric_casts)] #![allow(unused_imports)] @@ -21,42 +21,37 @@ use ::re_types_core::SerializationResult; use ::re_types_core::{ComponentBatch, MaybeOwnedComponentBatch}; use ::re_types_core::{DeserializationError, DeserializationResult}; -/// **Datatype**: Configuration for the legend of a plot. -#[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord)] -pub struct Legend { - /// Whether or not the legend should be displayed. - pub visible: bool, +/// **Datatype**: Type of boundary for visible history. +#[derive(Clone, Debug)] +pub struct VisibleTimeRangeBoundary { + /// Type of the boundary. + pub kind: crate::blueprint::datatypes::VisibleTimeRangeBoundaryKind, - /// Where should the legend be located. - /// - /// Allowed values: - /// - LeftTop = 1, - /// - RightTop = 2, - /// - LeftBottom = 3, - /// - RightBottom = 4 - pub location: Option, + /// Value of the boundary (ignored for `Infinite` type). + pub time: crate::datatypes::TimeInt, } -impl ::re_types_core::SizeBytes for Legend { +impl ::re_types_core::SizeBytes for VisibleTimeRangeBoundary { #[inline] fn heap_size_bytes(&self) -> u64 { - self.visible.heap_size_bytes() + self.location.heap_size_bytes() + self.kind.heap_size_bytes() + self.time.heap_size_bytes() } #[inline] fn is_pod() -> bool { - ::is_pod() && >::is_pod() + ::is_pod() + && ::is_pod() } } -::re_types_core::macros::impl_into_cow!(Legend); +::re_types_core::macros::impl_into_cow!(VisibleTimeRangeBoundary); -impl ::re_types_core::Loggable for Legend { +impl ::re_types_core::Loggable for VisibleTimeRangeBoundary { type Name = ::re_types_core::DatatypeName; #[inline] fn name() -> Self::Name { - "rerun.blueprint.datatypes.Legend".into() + "rerun.blueprint.datatypes.VisibleTimeRangeBoundary".into() } #[allow(clippy::wildcard_imports)] @@ -64,18 +59,12 @@ impl ::re_types_core::Loggable for Legend { fn arrow_datatype() -> arrow2::datatypes::DataType { use arrow2::datatypes::*; DataType::Struct(std::sync::Arc::new(vec![ - Field { - name: "visible".to_owned(), - data_type: DataType::Boolean, - is_nullable: false, - metadata: [].into(), - }, - Field { - name: "location".to_owned(), - data_type: DataType::UInt8, - is_nullable: true, - metadata: [].into(), - }, + Field::new( + "kind", + ::arrow_datatype(), + false, + ), + Field::new("time", ::arrow_datatype(), false), ])) } @@ -101,55 +90,58 @@ impl ::re_types_core::Loggable for Legend { any_nones.then(|| somes.into()) }; StructArray::new( - ::arrow_datatype(), + ::arrow_datatype(), vec![ { - let (somes, visible): (Vec<_>, Vec<_>) = data + let (somes, kind): (Vec<_>, Vec<_>) = data .iter() .map(|datum| { let datum = datum.as_ref().map(|datum| { - let Self { visible, .. } = &**datum; - visible.clone() + let Self { kind, .. } = &**datum; + kind.clone() }); (datum.is_some(), datum) }) .unzip(); - let visible_bitmap: Option = { + let kind_bitmap: Option = { let any_nones = somes.iter().any(|some| !*some); any_nones.then(|| somes.into()) }; - BooleanArray::new( - DataType::Boolean, - visible.into_iter().map(|v| v.unwrap_or_default()).collect(), - visible_bitmap, - ) - .boxed() + { + _ = kind_bitmap; + crate::blueprint::datatypes::VisibleTimeRangeBoundaryKind::to_arrow_opt( + kind, + )? + } }, { - let (somes, location): (Vec<_>, Vec<_>) = data + let (somes, time): (Vec<_>, Vec<_>) = data .iter() .map(|datum| { - let datum = datum - .as_ref() - .map(|datum| { - let Self { location, .. } = &**datum; - location.clone() - }) - .flatten(); + let datum = datum.as_ref().map(|datum| { + let Self { time, .. } = &**datum; + time.clone() + }); (datum.is_some(), datum) }) .unzip(); - let location_bitmap: Option = { + let time_bitmap: Option = { let any_nones = somes.iter().any(|some| !*some); any_nones.then(|| somes.into()) }; PrimitiveArray::new( - DataType::UInt8, - location - .into_iter() - .map(|v| v.unwrap_or_default()) + DataType::Int64, + time.into_iter() + .map(|datum| { + datum + .map(|datum| { + let crate::datatypes::TimeInt(data0) = datum; + data0 + }) + .unwrap_or_default() + }) .collect(), - location_bitmap, + time_bitmap, ) .boxed() }, @@ -174,25 +166,11 @@ impl ::re_types_core::Loggable for Legend { .as_any() .downcast_ref::() .ok_or_else(|| { - DeserializationError::datatype_mismatch( - DataType::Struct(std::sync::Arc::new(vec![ - Field { - name: "visible".to_owned(), - data_type: DataType::Boolean, - is_nullable: false, - metadata: [].into(), - }, - Field { - name: "location".to_owned(), - data_type: DataType::UInt8, - is_nullable: true, - metadata: [].into(), - }, - ])), - arrow_data.data_type().clone(), - ) + let expected = Self::arrow_datatype(); + let actual = arrow_data.data_type().clone(); + DeserializationError::datatype_mismatch(expected, actual) }) - .with_context("rerun.blueprint.datatypes.Legend")?; + .with_context("rerun.blueprint.datatypes.VisibleTimeRangeBoundary")?; if arrow_data.is_empty() { Vec::new() } else { @@ -203,66 +181,66 @@ impl ::re_types_core::Loggable for Legend { .map(|field| field.name.as_str()) .zip(arrow_data_arrays) .collect(); - let visible = { - if !arrays_by_name.contains_key("visible") { + let kind = { + if !arrays_by_name.contains_key("kind") { return Err(DeserializationError::missing_struct_field( Self::arrow_datatype(), - "visible", + "kind", )) - .with_context("rerun.blueprint.datatypes.Legend"); + .with_context("rerun.blueprint.datatypes.VisibleTimeRangeBoundary"); } - let arrow_data = &**arrays_by_name["visible"]; - arrow_data - .as_any() - .downcast_ref::() - .ok_or_else(|| { - DeserializationError::datatype_mismatch( - DataType::Boolean, - arrow_data.data_type().clone(), - ) - }) - .with_context("rerun.blueprint.datatypes.Legend#visible")? - .into_iter() + let arrow_data = &**arrays_by_name["kind"]; + crate::blueprint::datatypes::VisibleTimeRangeBoundaryKind::from_arrow_opt( + arrow_data, + ) + .with_context("rerun.blueprint.datatypes.VisibleTimeRangeBoundary#kind")? + .into_iter() }; - let location = { - if !arrays_by_name.contains_key("location") { + let time = { + if !arrays_by_name.contains_key("time") { return Err(DeserializationError::missing_struct_field( Self::arrow_datatype(), - "location", + "time", )) - .with_context("rerun.blueprint.datatypes.Legend"); + .with_context("rerun.blueprint.datatypes.VisibleTimeRangeBoundary"); } - let arrow_data = &**arrays_by_name["location"]; + let arrow_data = &**arrays_by_name["time"]; arrow_data .as_any() - .downcast_ref::() + .downcast_ref::() .ok_or_else(|| { - DeserializationError::datatype_mismatch( - DataType::UInt8, - arrow_data.data_type().clone(), - ) + let expected = DataType::Int64; + let actual = arrow_data.data_type().clone(); + DeserializationError::datatype_mismatch(expected, actual) }) - .with_context("rerun.blueprint.datatypes.Legend#location")? + .with_context("rerun.blueprint.datatypes.VisibleTimeRangeBoundary#time")? .into_iter() .map(|opt| opt.copied()) + .map(|res_or_opt| res_or_opt.map(|v| crate::datatypes::TimeInt(v))) }; arrow2::bitmap::utils::ZipValidity::new_with_validity( - ::itertools::izip!(visible, location), + ::itertools::izip!(kind, time), arrow_data.validity(), ) .map(|opt| { - opt.map(|(visible, location)| { + opt.map(|(kind, time)| { Ok(Self { - visible: visible + kind: kind + .ok_or_else(DeserializationError::missing_data) + .with_context( + "rerun.blueprint.datatypes.VisibleTimeRangeBoundary#kind", + )?, + time: time .ok_or_else(DeserializationError::missing_data) - .with_context("rerun.blueprint.datatypes.Legend#visible")?, - location, + .with_context( + "rerun.blueprint.datatypes.VisibleTimeRangeBoundary#time", + )?, }) }) .transpose() }) .collect::>>() - .with_context("rerun.blueprint.datatypes.Legend")? + .with_context("rerun.blueprint.datatypes.VisibleTimeRangeBoundary")? } }) } diff --git a/crates/re_types/src/blueprint/datatypes/visible_time_range_boundary_ext.rs b/crates/re_types/src/blueprint/datatypes/visible_time_range_boundary_ext.rs new file mode 100644 index 000000000000..a93c32dce2be --- /dev/null +++ b/crates/re_types/src/blueprint/datatypes/visible_time_range_boundary_ext.rs @@ -0,0 +1,47 @@ +use super::{VisibleTimeRangeBoundary, VisibleTimeRangeBoundaryKind}; +use re_types_core::datatypes::TimeInt; + +impl VisibleTimeRangeBoundary { + pub const AT_CURSOR: Self = Self { + kind: VisibleTimeRangeBoundaryKind::RelativeToTimeCursor, + time: TimeInt(0), + }; + + pub const INFINITE: Self = Self { + kind: VisibleTimeRangeBoundaryKind::Infinite, + time: TimeInt(0), + }; + + /// Returns the time assuming this boundary is a start boundary. + pub fn start_boundary_time(&self, cursor: TimeInt) -> TimeInt { + match self.kind { + VisibleTimeRangeBoundaryKind::Absolute => self.time, + VisibleTimeRangeBoundaryKind::RelativeToTimeCursor => TimeInt(cursor.0 + self.time.0), + VisibleTimeRangeBoundaryKind::Infinite => TimeInt::MIN, + } + } + + /// Returns the correct time assuming this boundary is an end boundary. + pub fn end_boundary_time(&self, cursor: TimeInt) -> TimeInt { + match self.kind { + VisibleTimeRangeBoundaryKind::Absolute => self.time, + VisibleTimeRangeBoundaryKind::RelativeToTimeCursor => TimeInt(cursor.0 + self.time.0), + VisibleTimeRangeBoundaryKind::Infinite => TimeInt::MAX, + } + } +} + +impl PartialEq for VisibleTimeRangeBoundary { + fn eq(&self, other: &Self) -> bool { + match self.kind { + VisibleTimeRangeBoundaryKind::Absolute + | VisibleTimeRangeBoundaryKind::RelativeToTimeCursor => { + other.kind == self.kind && other.time == self.time + } + // Ignore the time value for infinite boundaries. + VisibleTimeRangeBoundaryKind::Infinite => other.kind == self.kind, + } + } +} + +impl Eq for VisibleTimeRangeBoundary {} diff --git a/crates/re_types/src/blueprint/datatypes/visible_time_range_boundary_kind.rs b/crates/re_types/src/blueprint/datatypes/visible_time_range_boundary_kind.rs new file mode 100644 index 000000000000..46b3d8f37750 --- /dev/null +++ b/crates/re_types/src/blueprint/datatypes/visible_time_range_boundary_kind.rs @@ -0,0 +1,166 @@ +// DO NOT EDIT! This file was auto-generated by crates/re_types_builder/src/codegen/rust/api.rs +// Based on "crates/re_types/definitions/rerun/blueprint/datatypes/visible_time_range.fbs". + +#![allow(trivial_numeric_casts)] +#![allow(unused_imports)] +#![allow(unused_parens)] +#![allow(clippy::clone_on_copy)] +#![allow(clippy::iter_on_single_items)] +#![allow(clippy::map_flatten)] +#![allow(clippy::match_wildcard_for_single_variants)] +#![allow(clippy::needless_question_mark)] +#![allow(clippy::new_without_default)] +#![allow(clippy::redundant_closure)] +#![allow(clippy::too_many_arguments)] +#![allow(clippy::too_many_lines)] +#![allow(clippy::unnecessary_cast)] + +use ::re_types_core::external::arrow2; +use ::re_types_core::ComponentName; +use ::re_types_core::SerializationResult; +use ::re_types_core::{ComponentBatch, MaybeOwnedComponentBatch}; +use ::re_types_core::{DeserializationError, DeserializationResult}; + +/// **Datatype**: Kind of boundary for visible history, see `VisibleTimeRangeBoundary`. +#[derive(Clone, Copy, Debug, PartialEq, Eq)] +pub enum VisibleTimeRangeBoundaryKind { + /// Boundary is a value relative to the time cursor. + RelativeToTimeCursor = 1, + + /// Boundary is an absolute value. + Absolute = 2, + + /// The boundary extends to infinity. + Infinite = 3, +} + +impl VisibleTimeRangeBoundaryKind { + /// All the different enum variants. + pub const ALL: [Self; 3] = [Self::RelativeToTimeCursor, Self::Absolute, Self::Infinite]; +} + +impl ::re_types_core::SizeBytes for VisibleTimeRangeBoundaryKind { + #[inline] + fn heap_size_bytes(&self) -> u64 { + 0 + } + + #[inline] + fn is_pod() -> bool { + true + } +} + +impl std::fmt::Display for VisibleTimeRangeBoundaryKind { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + match self { + Self::RelativeToTimeCursor => write!(f, "RelativeToTimeCursor"), + Self::Absolute => write!(f, "Absolute"), + Self::Infinite => write!(f, "Infinite"), + } + } +} + +::re_types_core::macros::impl_into_cow!(VisibleTimeRangeBoundaryKind); + +impl ::re_types_core::Loggable for VisibleTimeRangeBoundaryKind { + type Name = ::re_types_core::DatatypeName; + + #[inline] + fn name() -> Self::Name { + "rerun.blueprint.datatypes.VisibleTimeRangeBoundaryKind".into() + } + + #[allow(clippy::wildcard_imports)] + #[inline] + fn arrow_datatype() -> arrow2::datatypes::DataType { + use arrow2::datatypes::*; + DataType::Union( + std::sync::Arc::new(vec![ + Field::new("_null_markers", DataType::Null, true), + Field::new("RelativeToTimeCursor", DataType::Null, true), + Field::new("Absolute", DataType::Null, true), + Field::new("Infinite", DataType::Null, true), + ]), + Some(std::sync::Arc::new(vec![0i32, 1i32, 2i32, 3i32])), + UnionMode::Sparse, + ) + } + + #[allow(clippy::wildcard_imports)] + fn to_arrow_opt<'a>( + data: impl IntoIterator>>>, + ) -> SerializationResult> + where + Self: Clone + 'a, + { + use ::re_types_core::{Loggable as _, ResultExt as _}; + use arrow2::{array::*, datatypes::*}; + Ok({ + let data: Vec<_> = data + .into_iter() + .map(|datum| { + let datum: Option<::std::borrow::Cow<'a, Self>> = datum.map(Into::into); + datum + }) + .collect(); + let num_variants = 3usize; + let types = data + .iter() + .map(|a| match a.as_deref() { + None => 0, + Some(value) => *value as i8, + }) + .collect(); + let fields: Vec<_> = + std::iter::repeat(NullArray::new(DataType::Null, data.len()).boxed()) + .take(1 + num_variants) + .collect(); + UnionArray::new( + ::arrow_datatype(), + types, + fields, + None, + ) + .boxed() + }) + } + + #[allow(clippy::wildcard_imports)] + fn from_arrow_opt( + arrow_data: &dyn arrow2::array::Array, + ) -> DeserializationResult>> + where + Self: Sized, + { + use ::re_types_core::{Loggable as _, ResultExt as _}; + use arrow2::{array::*, buffer::*, datatypes::*}; + Ok({ + let arrow_data = arrow_data + .as_any() + .downcast_ref::() + .ok_or_else(|| { + let expected = Self::arrow_datatype(); + let actual = arrow_data.data_type().clone(); + DeserializationError::datatype_mismatch(expected, actual) + }) + .with_context("rerun.blueprint.datatypes.VisibleTimeRangeBoundaryKind")?; + let arrow_data_types = arrow_data.types(); + arrow_data_types + .iter() + .map(|typ| match typ { + 0 => Ok(None), + 1 => Ok(Some(VisibleTimeRangeBoundaryKind::RelativeToTimeCursor)), + 2 => Ok(Some(VisibleTimeRangeBoundaryKind::Absolute)), + 3 => Ok(Some(VisibleTimeRangeBoundaryKind::Infinite)), + _ => Err(DeserializationError::missing_union_arm( + Self::arrow_datatype(), + "", + *typ as _, + )), + }) + .collect::>>() + .with_context("rerun.blueprint.datatypes.VisibleTimeRangeBoundaryKind")? + }) + } +} diff --git a/crates/re_types/src/blueprint/datatypes/visible_time_range_ext.rs b/crates/re_types/src/blueprint/datatypes/visible_time_range_ext.rs new file mode 100644 index 000000000000..d558b143e343 --- /dev/null +++ b/crates/re_types/src/blueprint/datatypes/visible_time_range_ext.rs @@ -0,0 +1,17 @@ +use super::{VisibleTimeRange, VisibleTimeRangeBoundary}; + +impl VisibleTimeRange { + pub const EMPTY: Self = Self { + from_sequence: VisibleTimeRangeBoundary::AT_CURSOR, + to_sequence: VisibleTimeRangeBoundary::AT_CURSOR, + from_time: VisibleTimeRangeBoundary::AT_CURSOR, + to_time: VisibleTimeRangeBoundary::AT_CURSOR, + }; + + pub const EVERYTHING: Self = Self { + from_sequence: VisibleTimeRangeBoundary::INFINITE, + to_sequence: VisibleTimeRangeBoundary::INFINITE, + from_time: VisibleTimeRangeBoundary::INFINITE, + to_time: VisibleTimeRangeBoundary::INFINITE, + }; +} diff --git a/crates/re_types_builder/src/codegen/python/mod.rs b/crates/re_types_builder/src/codegen/python/mod.rs index 41769667124e..d9dd3d71402a 100644 --- a/crates/re_types_builder/src/codegen/python/mod.rs +++ b/crates/re_types_builder/src/codegen/python/mod.rs @@ -587,7 +587,7 @@ fn code_for_struct( if obj.is_delegating_component() { let delegate = obj.delegate_datatype(objects).unwrap(); let scope = match delegate.scope() { - Some(scope) => format!("{scope}."), + Some(scope) => format!("{scope}_"), None => String::new(), }; superclasses.push(format!( diff --git a/crates/re_types_core/src/datatypes/.gitattributes b/crates/re_types_core/src/datatypes/.gitattributes index 5d1c22973176..8d8025b30391 100644 --- a/crates/re_types_core/src/datatypes/.gitattributes +++ b/crates/re_types_core/src/datatypes/.gitattributes @@ -4,6 +4,7 @@ entity_path.rs linguist-generated=true float32.rs linguist-generated=true mod.rs linguist-generated=true +time_int.rs linguist-generated=true uint32.rs linguist-generated=true uint64.rs linguist-generated=true utf8.rs linguist-generated=true diff --git a/crates/re_types_core/src/datatypes/mod.rs b/crates/re_types_core/src/datatypes/mod.rs index dd64cf5f950c..b3afd8508146 100644 --- a/crates/re_types_core/src/datatypes/mod.rs +++ b/crates/re_types_core/src/datatypes/mod.rs @@ -2,6 +2,8 @@ mod entity_path; mod float32; +mod time_int; +mod time_int_ext; mod uint32; mod uint64; mod utf8; @@ -9,6 +11,7 @@ mod utf8_ext; pub use self::entity_path::EntityPath; pub use self::float32::Float32; +pub use self::time_int::TimeInt; pub use self::uint32::UInt32; pub use self::uint64::UInt64; pub use self::utf8::Utf8; diff --git a/crates/re_types_core/src/datatypes/time_int.rs b/crates/re_types_core/src/datatypes/time_int.rs new file mode 100644 index 000000000000..1f488806ca0d --- /dev/null +++ b/crates/re_types_core/src/datatypes/time_int.rs @@ -0,0 +1,131 @@ +// DO NOT EDIT! This file was auto-generated by crates/re_types_builder/src/codegen/rust/api.rs +// Based on "crates/re_types/definitions/rerun/datatypes/time_int.fbs". + +#![allow(trivial_numeric_casts)] +#![allow(unused_imports)] +#![allow(unused_parens)] +#![allow(clippy::clone_on_copy)] +#![allow(clippy::iter_on_single_items)] +#![allow(clippy::map_flatten)] +#![allow(clippy::match_wildcard_for_single_variants)] +#![allow(clippy::needless_question_mark)] +#![allow(clippy::new_without_default)] +#![allow(clippy::redundant_closure)] +#![allow(clippy::too_many_arguments)] +#![allow(clippy::too_many_lines)] +#![allow(clippy::unnecessary_cast)] + +use crate::external::arrow2; +use crate::ComponentName; +use crate::SerializationResult; +use crate::{ComponentBatch, MaybeOwnedComponentBatch}; +use crate::{DeserializationError, DeserializationResult}; + +/// **Datatype**: A 64-bit number describing either nanoseconds OR sequence numbers. +#[derive(Clone, Debug, Copy, PartialEq, Eq, PartialOrd, Ord)] +pub struct TimeInt(pub i64); + +impl crate::SizeBytes for TimeInt { + #[inline] + fn heap_size_bytes(&self) -> u64 { + self.0.heap_size_bytes() + } + + #[inline] + fn is_pod() -> bool { + ::is_pod() + } +} + +impl From for TimeInt { + #[inline] + fn from(value: i64) -> Self { + Self(value) + } +} + +impl From for i64 { + #[inline] + fn from(value: TimeInt) -> Self { + value.0 + } +} + +crate::macros::impl_into_cow!(TimeInt); + +impl crate::Loggable for TimeInt { + type Name = crate::DatatypeName; + + #[inline] + fn name() -> Self::Name { + "rerun.datatypes.TimeInt".into() + } + + #[allow(clippy::wildcard_imports)] + #[inline] + fn arrow_datatype() -> arrow2::datatypes::DataType { + use arrow2::datatypes::*; + DataType::Int64 + } + + #[allow(clippy::wildcard_imports)] + fn to_arrow_opt<'a>( + data: impl IntoIterator>>>, + ) -> SerializationResult> + where + Self: Clone + 'a, + { + use crate::{Loggable as _, ResultExt as _}; + use arrow2::{array::*, datatypes::*}; + Ok({ + let (somes, data0): (Vec<_>, Vec<_>) = data + .into_iter() + .map(|datum| { + let datum: Option<::std::borrow::Cow<'a, Self>> = datum.map(Into::into); + let datum = datum.map(|datum| { + let Self(data0) = datum.into_owned(); + data0 + }); + (datum.is_some(), datum) + }) + .unzip(); + let data0_bitmap: Option = { + let any_nones = somes.iter().any(|some| !*some); + any_nones.then(|| somes.into()) + }; + PrimitiveArray::new( + Self::arrow_datatype(), + data0.into_iter().map(|v| v.unwrap_or_default()).collect(), + data0_bitmap, + ) + .boxed() + }) + } + + #[allow(clippy::wildcard_imports)] + fn from_arrow_opt( + arrow_data: &dyn arrow2::array::Array, + ) -> DeserializationResult>> + where + Self: Sized, + { + use crate::{Loggable as _, ResultExt as _}; + use arrow2::{array::*, buffer::*, datatypes::*}; + Ok(arrow_data + .as_any() + .downcast_ref::() + .ok_or_else(|| { + let expected = Self::arrow_datatype(); + let actual = arrow_data.data_type().clone(); + DeserializationError::datatype_mismatch(expected, actual) + }) + .with_context("rerun.datatypes.TimeInt#value")? + .into_iter() + .map(|opt| opt.copied()) + .map(|v| v.ok_or_else(DeserializationError::missing_data)) + .map(|res| res.map(|v| Some(Self(v)))) + .collect::>>>() + .with_context("rerun.datatypes.TimeInt#value") + .with_context("rerun.datatypes.TimeInt")?) + } +} diff --git a/crates/re_types_core/src/datatypes/time_int_ext.rs b/crates/re_types_core/src/datatypes/time_int_ext.rs new file mode 100644 index 000000000000..511f0efc2676 --- /dev/null +++ b/crates/re_types_core/src/datatypes/time_int_ext.rs @@ -0,0 +1,6 @@ +use super::TimeInt; + +impl TimeInt { + pub const MIN: Self = Self(i64::MIN); + pub const MAX: Self = Self(i64::MAX); +} diff --git a/crates/re_viewer/src/blueprint/validation_gen/mod.rs b/crates/re_viewer/src/blueprint/validation_gen/mod.rs index e33d2eb05e11..032557e39f0a 100644 --- a/crates/re_viewer/src/blueprint/validation_gen/mod.rs +++ b/crates/re_viewer/src/blueprint/validation_gen/mod.rs @@ -15,6 +15,7 @@ pub use re_types::blueprint::components::SpaceViewClass; pub use re_types::blueprint::components::SpaceViewOrigin; pub use re_types::blueprint::components::ViewerRecommendationHash; pub use re_types::blueprint::components::Visible; +pub use re_types::blueprint::components::VisibleTimeRange; pub use re_viewport::blueprint::components::AutoLayout; pub use re_viewport::blueprint::components::AutoSpaceViews; pub use re_viewport::blueprint::components::ContainerKind; @@ -48,4 +49,5 @@ pub fn is_valid_blueprint(blueprint: &EntityDb) -> bool { && validate_component::(blueprint) && validate_component::(blueprint) && validate_component::(blueprint) + && validate_component::(blueprint) } diff --git a/crates/re_viewer/src/ui/selection_panel.rs b/crates/re_viewer/src/ui/selection_panel.rs index 7368804694ba..9dd09ffad9e8 100644 --- a/crates/re_viewer/src/ui/selection_panel.rs +++ b/crates/re_viewer/src/ui/selection_panel.rs @@ -26,9 +26,9 @@ use re_viewport::{ }; use crate::ui::override_ui::override_ui; -use crate::ui::{override_ui::override_visualizer_ui, visible_history::visible_history_ui}; +use crate::ui::override_ui::override_visualizer_ui; -use super::selection_history_ui::SelectionHistoryUi; +use super::{selection_history_ui::SelectionHistoryUi, visible_history::visual_time_range_ui}; // --- @@ -837,34 +837,42 @@ fn blueprint_ui_for_space_view( ui.add_space(ui.spacing().item_spacing.y / 2.0); if let Some(space_view) = viewport.blueprint.space_view(space_view_id) { - let space_view_class = *space_view.class_identifier(); + let class_identifier = *space_view.class_identifier(); let space_view_state = viewport.state.space_view_state_mut( ctx.space_view_class_registry, space_view.id, - space_view.class_identifier(), + &class_identifier, ); // Space View don't inherit properties. let root_data_result = space_view.root_data_result(ctx.store_context, ctx.blueprint_query); - let mut props = root_data_result - .individual_properties() - .cloned() - .unwrap_or_default(); + let query_result = ctx.lookup_query_result(space_view.id); + let Some(data_result) = query_result + .tree + .root_handle() + .and_then(|root| query_result.tree.lookup_result(root)) + else { + re_log::error!("Could not find root data result for Space View {space_view_id:?}"); + return; + }; - visible_history_ui( + visual_time_range_ui( ctx, ui, - &space_view_class, + &query_result.tree, + data_result, + class_identifier, true, - None, - &mut props.visible_history, - &root_data_result.accumulated_properties().visible_history, ); - let space_view_class = space_view.class(ctx.space_view_class_registry); + let mut props = root_data_result + .individual_properties() + .cloned() + .unwrap_or_default(); + let space_view_class = space_view.class(ctx.space_view_class_registry); if let Err(err) = space_view_class.selection_ui( ctx, ui, @@ -880,7 +888,7 @@ fn blueprint_ui_for_space_view( ); } - root_data_result.save_individual_override(Some(props), ctx); + root_data_result.save_individual_override_properties(ctx, Some(props)); } } @@ -915,9 +923,8 @@ fn blueprint_ui_for_data_result( &space_view_class, entity_path, &mut props, - data_result.accumulated_properties(), ); - data_result.save_individual_override(Some(props), ctx); + data_result.save_individual_override_properties(ctx, Some(props)); } } } @@ -1073,7 +1080,6 @@ fn entity_props_ui( space_view_class: &SpaceViewClassIdentifier, entity_path: &EntityPath, entity_props: &mut EntityProperties, - resolved_entity_props: &EntityProperties, ) { use re_types::blueprint::components::Visible; use re_types::Loggable as _; @@ -1112,14 +1118,13 @@ fn entity_props_ui( .checkbox(ui, &mut entity_props.interactive, "Interactive") .on_hover_text("If disabled, the entity will not react to any mouse interaction"); - visible_history_ui( + visual_time_range_ui( ctx, ui, - space_view_class, + &query_result.tree, + data_result, + *space_view_class, false, - Some(entity_path), - &mut entity_props.visible_history, - &resolved_entity_props.visible_history, ); egui::Grid::new("entity_properties") diff --git a/crates/re_viewer/src/ui/visible_history.rs b/crates/re_viewer/src/ui/visible_history.rs index 831f2f4fd4ee..f223f3eca65d 100644 --- a/crates/re_viewer/src/ui/visible_history.rs +++ b/crates/re_viewer/src/ui/visible_history.rs @@ -3,11 +3,16 @@ use std::ops::RangeInclusive; use egui::{NumExt as _, Response, Ui}; -use re_entity_db::{ExtraQueryHistory, TimeHistogram, VisibleHistory, VisibleHistoryBoundary}; +use re_entity_db::{TimeHistogram, VisibleHistory, VisibleHistoryBoundary}; use re_log_types::{EntityPath, TimeType, TimeZone}; +use re_space_view::{ + default_time_range, time_range_boundary_to_visible_history_boundary, + visible_history_boundary_to_time_range_boundary, visible_time_range_to_time_range, +}; use re_space_view_spatial::{SpatialSpaceView2D, SpatialSpaceView3D}; use re_space_view_time_series::TimeSeriesSpaceView; -use re_types_core::ComponentName; +use re_types::blueprint::components::VisibleTimeRange; +use re_types_core::{ComponentName, Loggable as _}; use re_ui::{markdown_ui, ReUi}; use re_viewer_context::{SpaceViewClass, SpaceViewClassIdentifier, TimeControl, ViewerContext}; @@ -44,45 +49,37 @@ static VISIBLE_HISTORY_SUPPORTED_COMPONENT_NAMES: once_cell::sync::Lazy bool { + VISIBLE_HISTORY_SUPPORTED_SPACE_VIEWS.contains(&space_view_class) +} + +fn entity_with_visible_history( ctx: &ViewerContext<'_>, time_ctrl: &TimeControl, - space_view_class: &SpaceViewClassIdentifier, - entity_path: Option<&EntityPath>, + entity_path: &EntityPath, ) -> bool { - if !VISIBLE_HISTORY_SUPPORTED_SPACE_VIEWS.contains(space_view_class) { - return false; - } - - if let Some(entity_path) = entity_path { - let store = ctx.entity_db.store(); - let component_names = store.all_components(time_ctrl.timeline(), entity_path); - if let Some(component_names) = component_names { - if !component_names - .iter() - .any(|name| VISIBLE_HISTORY_SUPPORTED_COMPONENT_NAMES.contains(name)) - { - return false; - } - } else { - return false; - } - } - - true + let store = ctx.entity_db.store(); + let component_names = store.all_components(time_ctrl.timeline(), entity_path); + component_names + .iter() + .flatten() + .any(|name| VISIBLE_HISTORY_SUPPORTED_COMPONENT_NAMES.contains(name)) } -pub fn visible_history_ui( +pub fn visual_time_range_ui( ctx: &ViewerContext<'_>, - ui: &mut egui::Ui, - space_view_class: &SpaceViewClassIdentifier, + ui: &mut Ui, + data_result_tree: &re_viewer_context::DataResultTree, + data_result: &re_viewer_context::DataResult, + space_view_class: SpaceViewClassIdentifier, is_space_view: bool, - entity_path: Option<&EntityPath>, - visible_history_prop: &mut ExtraQueryHistory, - resolved_visible_history_prop: &ExtraQueryHistory, ) { let time_ctrl = ctx.rec_cfg.time_ctrl.read().clone(); - if !has_visible_history(ctx, &time_ctrl, space_view_class, entity_path) { + + if is_space_view && !space_view_with_visible_history(space_view_class) { + return; + } + if !is_space_view && !entity_with_visible_history(ctx, &time_ctrl, &data_result.entity_path) { return; } @@ -92,24 +89,33 @@ pub fn visible_history_ui( let mut interacting_with_controls = false; + let mut resolved_range = data_result + .lookup_override::(ctx) + .unwrap_or(default_time_range(space_view_class)); + let mut has_individual_range = data_result + .component_override_source(data_result_tree, &VisibleTimeRange::name()) + .as_ref() + == Some(&data_result.entity_path); + let collapsing_response = re_ui.collapsing_header(ui, "Visible time range", false, |ui| { + let has_individual_range_before = has_individual_range; + let resolved_range_before = resolved_range.clone(); + ui.horizontal(|ui| { re_ui - .radio_value(ui, &mut visible_history_prop.enabled, false, "Default") + .radio_value(ui, &mut has_individual_range, false, "Default") .on_hover_text(if is_space_view { "Default visible time range settings for this kind of Space View" } else { - "Visible time range settings inherited from parent Group(s) or enclosing \ + "Visible time range settings inherited from parent Entity or enclosing \ Space View" }); re_ui - .radio_value(ui, &mut visible_history_prop.enabled, true, "Override") + .radio_value(ui, &mut has_individual_range, true, "Override") .on_hover_text(if is_space_view { "Set visible time range settings for the contents of this Space View" - } else if entity_path.is_some() { - "Set visible time range settings for this entity" } else { - "Set visible time range settings for he contents of this Group" + "Set visible time range settings for this entity" }); }); @@ -125,22 +131,29 @@ pub fn visible_history_ui( .unwrap_or_default() .at_least(*timeline_spec.range.start()); // accounts for timeless time (TimeInt::BEGINNING) - let (resolved_visible_history, visible_history) = match time_type { + // pick right from/to depending on the timeline type. + let (from, to) = match time_type { TimeType::Time => ( - &resolved_visible_history_prop.nanos, - &mut visible_history_prop.nanos, + &mut resolved_range.0.from_time, + &mut resolved_range.0.to_time, ), TimeType::Sequence => ( - &resolved_visible_history_prop.sequences, - &mut visible_history_prop.sequences, + &mut resolved_range.0.from_sequence, + &mut resolved_range.0.to_sequence, ), }; - if visible_history_prop.enabled { - let current_low_boundary = visible_history + // Convert to legacy visual history type. + let mut visible_history = VisibleHistory { + from: time_range_boundary_to_visible_history_boundary(from), + to: time_range_boundary_to_visible_history_boundary(to), + }; + + if has_individual_range { + let current_from = visible_history .range_start_from_cursor(current_time.into()) .as_i64(); - let current_high_boundary = visible_history + let current_to = visible_history .range_end_from_cursor(current_time.into()) .as_i64(); @@ -156,7 +169,7 @@ pub fn visible_history_ui( current_time, &timeline_spec, true, - current_high_boundary, + current_to, ) }) .inner; @@ -173,23 +186,23 @@ pub fn visible_history_ui( current_time, &timeline_spec, false, - current_low_boundary, + current_from, ) }) .inner; ui.end_row(); }); - current_range_ui(ctx, ui, current_time, time_type, visible_history); + current_range_ui(ctx, ui, current_time, time_type, &visible_history); } else { // Show the resolved visible range as labels (user can't edit them): - if resolved_visible_history.from == VisibleHistoryBoundary::Infinite - && resolved_visible_history.to == VisibleHistoryBoundary::Infinite + if visible_history.from == VisibleHistoryBoundary::Infinite + && visible_history.to == VisibleHistoryBoundary::Infinite { ui.label("Entire timeline"); - } else if resolved_visible_history.from == VisibleHistoryBoundary::AT_CURSOR - && resolved_visible_history.to == VisibleHistoryBoundary::AT_CURSOR + } else if visible_history.from == VisibleHistoryBoundary::AT_CURSOR + && visible_history.to == VisibleHistoryBoundary::AT_CURSOR { let current_time = time_type.format(current_time.into(), ctx.app_options.time_zone); match time_type { @@ -206,7 +219,7 @@ pub fn visible_history_ui( resolved_visible_history_boundary_ui( ctx, ui, - &resolved_visible_history.from, + &visible_history.from, time_type, true, ); @@ -216,14 +229,31 @@ pub fn visible_history_ui( resolved_visible_history_boundary_ui( ctx, ui, - &resolved_visible_history.to, + &visible_history.to, time_type, false, ); ui.end_row(); }); - current_range_ui(ctx, ui, current_time, time_type, resolved_visible_history); + current_range_ui(ctx, ui, current_time, time_type, &visible_history); + } + } + + // Convert back from visual history type. + *from = visible_history_boundary_to_time_range_boundary(&visible_history.from); + *to = visible_history_boundary_to_time_range_boundary(&visible_history.to); + + // Save to blueprint store if anything has changed. + if has_individual_range != has_individual_range_before + || resolved_range != resolved_range_before + { + if has_individual_range { + re_log::debug!("override!"); + data_result.save_recursive_override(ctx, &resolved_range); + } else { + re_log::debug!("clear!"); + data_result.clear_recursive_override::(ctx); } } }); @@ -251,22 +281,15 @@ pub fn visible_history_ui( if should_display_visible_history { if let Some(current_time) = time_ctrl.time_int() { - let visible_history = match (visible_history_prop.enabled, time_type) { - (true, TimeType::Sequence) => visible_history_prop.sequences, - (true, TimeType::Time) => visible_history_prop.nanos, - (false, TimeType::Sequence) => resolved_visible_history_prop.sequences, - (false, TimeType::Time) => resolved_visible_history_prop.nanos, - }; - - ctx.rec_cfg.time_ctrl.write().highlighted_range = - Some(visible_history.time_range(current_time)); + let range = visible_time_range_to_time_range(&resolved_range, time_type, current_time); + ctx.rec_cfg.time_ctrl.write().highlighted_range = Some(range); } } let markdown = format!("# Visible time range\n This feature controls the time range used to display data in the Space View. -The settings are inherited from parent Group(s) or enclosing Space View if not overridden. +The settings are inherited from the parent Entity or enclosing Space View if not overridden. Visible time range properties are stored separately for each _type_ of timelines. They may differ depending on \ whether the current timeline is temporal or a sequence. The current settings apply to all _{}_ timelines. diff --git a/crates/re_viewer_context/src/space_view/view_query.rs b/crates/re_viewer_context/src/space_view/view_query.rs index 9847cc516536..24a2ebcd15ad 100644 --- a/crates/re_viewer_context/src/space_view/view_query.rs +++ b/crates/re_viewer_context/src/space_view/view_query.rs @@ -171,17 +171,57 @@ impl DataResult { } } + /// Saves a recursive override, does not take into current or default values. + /// + /// Ignores individual overrides and current value. + pub fn save_recursive_override( + &self, + ctx: &ViewerContext<'_>, + desired_override: &C, + ) { + re_tracing::profile_function!(); + + // TODO(jleibs): Make it impossible for this to happen with different type structure + // This should never happen unless we're doing something with a partially processed + // query. + let Some(recursive_override_path) = self.recursive_override_path() else { + re_log::warn!( + "Tried to save override for {:?} but it has no override path", + self.entity_path + ); + return; + }; + + ctx.save_blueprint_component(recursive_override_path, desired_override); + } + + /// Clears the recursive override for a given component + pub fn clear_recursive_override(&self, ctx: &ViewerContext<'_>) { + // TODO(jleibs): Make it impossible for this to happen with different type structure + // This should never happen unless we're doing something with a partially processed + // query. + let Some(recursive_override_path) = self.recursive_override_path() else { + re_log::warn!( + "Tried to save override for {:?} but it has no override path", + self.entity_path + ); + return; + }; + + ctx.save_empty_blueprint_component::(recursive_override_path); + } + /// Write the [`EntityProperties`] for this result back to the Blueprint store on the recursive override. /// /// Setting `new_recursive_props` to `None` will always clear the override. /// Otherwise, writes only if the recursive properties aren't already the same value. /// (does *not* take into account what the accumulated properties are which are a combination of recursive and individual overwrites) - pub fn save_recursive_override( + pub fn save_recursive_override_properties( &self, ctx: &ViewerContext<'_>, new_recursive_props: Option, ) { - self.save_override_internal( + self.save_override_properties_internal( ctx, new_recursive_props, self.recursive_override_path(), @@ -194,12 +234,12 @@ impl DataResult { /// Setting `new_individual_props` to `None` will always clear the override. /// Otherwise, writes only if the individual properties aren't already the same value. /// (does *not* take into account what the accumulated properties are which are a combination of recursive and individual overwrites) - pub fn save_individual_override( + pub fn save_individual_override_properties( &self, - new_individual_props: Option, ctx: &ViewerContext<'_>, + new_individual_props: Option, ) { - self.save_override_internal( + self.save_override_properties_internal( ctx, new_individual_props, self.individual_override_path(), @@ -207,7 +247,7 @@ impl DataResult { ); } - fn save_override_internal( + fn save_override_properties_internal( &self, ctx: &ViewerContext<'_>, new_individual_props: Option, diff --git a/docs/content/reference/types/datatypes.md b/docs/content/reference/types/datatypes.md index 57ab7ca7b854..95daf97ca8f7 100644 --- a/docs/content/reference/types/datatypes.md +++ b/docs/content/reference/types/datatypes.md @@ -29,6 +29,7 @@ Data types are the lowest layer of the data model hierarchy * [`TensorBuffer`](datatypes/tensor_buffer.md) * [`TensorData`](datatypes/tensor_data.md) * [`TensorDimension`](datatypes/tensor_dimension.md) +* [`TimeInt`](datatypes/time_int.md) * [`Transform3D`](datatypes/transform3d.md) * [`TranslationAndMat3x3`](datatypes/translation_and_mat3x3.md) * [`TranslationRotationScale3D`](datatypes/translation_rotation_scale3d.md) diff --git a/docs/content/reference/types/datatypes/.gitattributes b/docs/content/reference/types/datatypes/.gitattributes index 6e766a712369..1ef35ab8e55a 100644 --- a/docs/content/reference/types/datatypes/.gitattributes +++ b/docs/content/reference/types/datatypes/.gitattributes @@ -23,6 +23,7 @@ scale3d.md linguist-generated=true tensor_buffer.md linguist-generated=true tensor_data.md linguist-generated=true tensor_dimension.md linguist-generated=true +time_int.md linguist-generated=true transform3d.md linguist-generated=true translation_and_mat3x3.md linguist-generated=true translation_rotation_scale3d.md linguist-generated=true diff --git a/docs/content/reference/types/datatypes/time_int.md b/docs/content/reference/types/datatypes/time_int.md new file mode 100644 index 000000000000..de6030538958 --- /dev/null +++ b/docs/content/reference/types/datatypes/time_int.md @@ -0,0 +1,16 @@ +--- +title: "TimeInt" +--- + +A 64-bit number describing either nanoseconds OR sequence numbers. + +## Fields + +* value: `i64` + +## Links + * 🌊 [C++ API docs for `TimeInt`](https://ref.rerun.io/docs/cpp/stable/structrerun_1_1datatypes_1_1TimeInt.html?speculative-link) + * 🐍 [Python API docs for `TimeInt`](https://ref.rerun.io/docs/python/stable/common/datatypes?speculative-link#rerun.datatypes.TimeInt) + * 🦀 [Rust API docs for `TimeInt`](https://docs.rs/rerun/latest/rerun/datatypes/struct.TimeInt.html?speculative-link) + + diff --git a/rerun_cpp/src/rerun/blueprint/.gitattributes b/rerun_cpp/src/rerun/blueprint/.gitattributes index 0661cd67c5ea..435e1f8fe40d 100644 --- a/rerun_cpp/src/rerun/blueprint/.gitattributes +++ b/rerun_cpp/src/rerun/blueprint/.gitattributes @@ -3,3 +3,4 @@ .gitattributes linguist-generated=true archetypes.hpp linguist-generated=true components.hpp linguist-generated=true +datatypes.hpp linguist-generated=true diff --git a/rerun_cpp/src/rerun/blueprint/components.hpp b/rerun_cpp/src/rerun/blueprint/components.hpp index fc45185e5696..715845efe9dd 100644 --- a/rerun_cpp/src/rerun/blueprint/components.hpp +++ b/rerun_cpp/src/rerun/blueprint/components.hpp @@ -23,3 +23,4 @@ #include "blueprint/components/space_view_origin.hpp" #include "blueprint/components/viewer_recommendation_hash.hpp" #include "blueprint/components/visible.hpp" +#include "blueprint/components/visible_time_range.hpp" diff --git a/rerun_cpp/src/rerun/blueprint/components/.gitattributes b/rerun_cpp/src/rerun/blueprint/components/.gitattributes index c013fc7cd820..7b4380fbe687 100644 --- a/rerun_cpp/src/rerun/blueprint/components/.gitattributes +++ b/rerun_cpp/src/rerun/blueprint/components/.gitattributes @@ -33,3 +33,4 @@ space_view_origin.hpp linguist-generated=true viewer_recommendation_hash.hpp linguist-generated=true visible.cpp linguist-generated=true visible.hpp linguist-generated=true +visible_time_range.hpp linguist-generated=true diff --git a/rerun_cpp/src/rerun/blueprint/components/visible_time_range.hpp b/rerun_cpp/src/rerun/blueprint/components/visible_time_range.hpp new file mode 100644 index 000000000000..f55840689b09 --- /dev/null +++ b/rerun_cpp/src/rerun/blueprint/components/visible_time_range.hpp @@ -0,0 +1,60 @@ +// DO NOT EDIT! This file was auto-generated by crates/re_types_builder/src/codegen/cpp/mod.rs +// Based on "crates/re_types/definitions/rerun/blueprint/components/visible_time_range.fbs". + +#pragma once + +#include "../../blueprint/datatypes/visible_time_range.hpp" +#include "../../result.hpp" + +#include +#include + +namespace rerun::blueprint::components { + /// **Component**: The range of values that will be included in a Space View query. + struct VisibleTimeRange { + rerun::blueprint::datatypes::VisibleTimeRange value; + + public: + VisibleTimeRange() = default; + + VisibleTimeRange(rerun::blueprint::datatypes::VisibleTimeRange value_) : value(value_) {} + + VisibleTimeRange& operator=(rerun::blueprint::datatypes::VisibleTimeRange value_) { + value = value_; + return *this; + } + + /// Cast to the underlying VisibleTimeRange datatype + operator rerun::blueprint::datatypes::VisibleTimeRange() const { + return value; + } + }; +} // namespace rerun::blueprint::components + +namespace rerun { + static_assert( + sizeof(rerun::blueprint::datatypes::VisibleTimeRange) == + sizeof(blueprint::components::VisibleTimeRange) + ); + + /// \private + template <> + struct Loggable { + static constexpr const char Name[] = "rerun.blueprint.components.VisibleTimeRange"; + + /// Returns the arrow data type this type corresponds to. + static const std::shared_ptr& arrow_datatype() { + return Loggable::arrow_datatype(); + } + + /// Serializes an array of `rerun::blueprint:: components::VisibleTimeRange` into an arrow array. + static Result> to_arrow( + const blueprint::components::VisibleTimeRange* instances, size_t num_instances + ) { + return Loggable::to_arrow( + &instances->value, + num_instances + ); + } + }; +} // namespace rerun diff --git a/rerun_cpp/src/rerun/blueprint/datatypes.hpp b/rerun_cpp/src/rerun/blueprint/datatypes.hpp new file mode 100644 index 000000000000..361e00061d0e --- /dev/null +++ b/rerun_cpp/src/rerun/blueprint/datatypes.hpp @@ -0,0 +1,7 @@ +// DO NOT EDIT! This file was auto-generated by crates/re_types_builder/src/codegen/cpp/mod.rs + +#pragma once + +#include "blueprint/datatypes/visible_time_range.hpp" +#include "blueprint/datatypes/visible_time_range_boundary.hpp" +#include "blueprint/datatypes/visible_time_range_boundary_kind.hpp" diff --git a/rerun_cpp/src/rerun/blueprint/datatypes/.gitattributes b/rerun_cpp/src/rerun/blueprint/datatypes/.gitattributes index da03d4b96e87..06328369afaa 100644 --- a/rerun_cpp/src/rerun/blueprint/datatypes/.gitattributes +++ b/rerun_cpp/src/rerun/blueprint/datatypes/.gitattributes @@ -1,5 +1,9 @@ # DO NOT EDIT! This file is generated by crates/re_types_builder/src/lib.rs .gitattributes linguist-generated=true -legend.cpp linguist-generated=true -legend.hpp linguist-generated=true +visible_time_range.cpp linguist-generated=true +visible_time_range.hpp linguist-generated=true +visible_time_range_boundary.cpp linguist-generated=true +visible_time_range_boundary.hpp linguist-generated=true +visible_time_range_boundary_kind.cpp linguist-generated=true +visible_time_range_boundary_kind.hpp linguist-generated=true diff --git a/rerun_cpp/src/rerun/blueprint/datatypes/legend.cpp b/rerun_cpp/src/rerun/blueprint/datatypes/legend.cpp deleted file mode 100644 index 948dd620e8bc..000000000000 --- a/rerun_cpp/src/rerun/blueprint/datatypes/legend.cpp +++ /dev/null @@ -1,78 +0,0 @@ -// DO NOT EDIT! This file was auto-generated by crates/re_types_builder/src/codegen/cpp/mod.rs -// Based on "crates/re_types/definitions/rerun/blueprint/datatypes/legend.fbs". - -#include "legend.hpp" - -#include -#include - -namespace rerun::blueprint::datatypes {} - -namespace rerun { - const std::shared_ptr& Loggable::arrow_datatype( - ) { - static const auto datatype = arrow::struct_({ - arrow::field("visible", arrow::boolean(), false), - arrow::field("location", arrow::uint8(), true), - }); - return datatype; - } - - rerun::Error Loggable::fill_arrow_array_builder( - arrow::StructBuilder* builder, const blueprint::datatypes::Legend* elements, - size_t num_elements - ) { - if (builder == nullptr) { - return rerun::Error(ErrorCode::UnexpectedNullArgument, "Passed array builder is null."); - } - if (elements == nullptr) { - return rerun::Error( - ErrorCode::UnexpectedNullArgument, - "Cannot serialize null pointer to arrow array." - ); - } - - { - auto field_builder = static_cast(builder->field_builder(0)); - ARROW_RETURN_NOT_OK(field_builder->Reserve(static_cast(num_elements))); - for (size_t elem_idx = 0; elem_idx < num_elements; elem_idx += 1) { - ARROW_RETURN_NOT_OK(field_builder->Append(elements[elem_idx].visible)); - } - } - { - auto field_builder = static_cast(builder->field_builder(1)); - ARROW_RETURN_NOT_OK(field_builder->Reserve(static_cast(num_elements))); - for (size_t elem_idx = 0; elem_idx < num_elements; elem_idx += 1) { - const auto& element = elements[elem_idx]; - if (element.location.has_value()) { - ARROW_RETURN_NOT_OK(field_builder->Append(element.location.value())); - } else { - ARROW_RETURN_NOT_OK(field_builder->AppendNull()); - } - } - } - ARROW_RETURN_NOT_OK(builder->AppendValues(static_cast(num_elements), nullptr)); - - return Error::ok(); - } - - Result> Loggable::to_arrow( - const blueprint::datatypes::Legend* instances, size_t num_instances - ) { - // TODO(andreas): Allow configuring the memory pool. - arrow::MemoryPool* pool = arrow::default_memory_pool(); - auto datatype = arrow_datatype(); - - ARROW_ASSIGN_OR_RAISE(auto builder, arrow::MakeBuilder(datatype, pool)) - if (instances && num_instances > 0) { - RR_RETURN_NOT_OK(Loggable::fill_arrow_array_builder( - static_cast(builder.get()), - instances, - num_instances - )); - } - std::shared_ptr array; - ARROW_RETURN_NOT_OK(builder->Finish(&array)); - return array; - } -} // namespace rerun diff --git a/rerun_cpp/src/rerun/blueprint/datatypes/visible_time_range.cpp b/rerun_cpp/src/rerun/blueprint/datatypes/visible_time_range.cpp new file mode 100644 index 000000000000..36f9e1bdaa5b --- /dev/null +++ b/rerun_cpp/src/rerun/blueprint/datatypes/visible_time_range.cpp @@ -0,0 +1,124 @@ +// DO NOT EDIT! This file was auto-generated by crates/re_types_builder/src/codegen/cpp/mod.rs +// Based on "crates/re_types/definitions/rerun/blueprint/datatypes/visible_time_range.fbs". + +#include "visible_time_range.hpp" + +#include "visible_time_range_boundary.hpp" + +#include +#include + +namespace rerun::blueprint::datatypes {} + +namespace rerun { + const std::shared_ptr& + Loggable::arrow_datatype() { + static const auto datatype = arrow::struct_({ + arrow::field( + "from_sequence", + Loggable::arrow_datatype(), + false + ), + arrow::field( + "to_sequence", + Loggable::arrow_datatype(), + false + ), + arrow::field( + "from_time", + Loggable::arrow_datatype(), + false + ), + arrow::field( + "to_time", + Loggable::arrow_datatype(), + false + ), + }); + return datatype; + } + + Result> + Loggable::to_arrow( + const blueprint::datatypes::VisibleTimeRange* instances, size_t num_instances + ) { + // TODO(andreas): Allow configuring the memory pool. + arrow::MemoryPool* pool = arrow::default_memory_pool(); + auto datatype = arrow_datatype(); + + ARROW_ASSIGN_OR_RAISE(auto builder, arrow::MakeBuilder(datatype, pool)) + if (instances && num_instances > 0) { + RR_RETURN_NOT_OK( + Loggable::fill_arrow_array_builder( + static_cast(builder.get()), + instances, + num_instances + ) + ); + } + std::shared_ptr array; + ARROW_RETURN_NOT_OK(builder->Finish(&array)); + return array; + } + + rerun::Error Loggable::fill_arrow_array_builder( + arrow::StructBuilder* builder, const blueprint::datatypes::VisibleTimeRange* elements, + size_t num_elements + ) { + if (builder == nullptr) { + return rerun::Error(ErrorCode::UnexpectedNullArgument, "Passed array builder is null."); + } + if (elements == nullptr) { + return rerun::Error( + ErrorCode::UnexpectedNullArgument, + "Cannot serialize null pointer to arrow array." + ); + } + + { + auto field_builder = static_cast(builder->field_builder(0)); + ARROW_RETURN_NOT_OK(field_builder->Reserve(static_cast(num_elements))); + for (size_t elem_idx = 0; elem_idx < num_elements; elem_idx += 1) { + RR_RETURN_NOT_OK(Loggable:: + fill_arrow_array_builder( + field_builder, + &elements[elem_idx].from_sequence, + 1 + )); + } + } + { + auto field_builder = static_cast(builder->field_builder(1)); + ARROW_RETURN_NOT_OK(field_builder->Reserve(static_cast(num_elements))); + for (size_t elem_idx = 0; elem_idx < num_elements; elem_idx += 1) { + RR_RETURN_NOT_OK( + Loggable:: + fill_arrow_array_builder(field_builder, &elements[elem_idx].to_sequence, 1) + ); + } + } + { + auto field_builder = static_cast(builder->field_builder(2)); + ARROW_RETURN_NOT_OK(field_builder->Reserve(static_cast(num_elements))); + for (size_t elem_idx = 0; elem_idx < num_elements; elem_idx += 1) { + RR_RETURN_NOT_OK( + Loggable:: + fill_arrow_array_builder(field_builder, &elements[elem_idx].from_time, 1) + ); + } + } + { + auto field_builder = static_cast(builder->field_builder(3)); + ARROW_RETURN_NOT_OK(field_builder->Reserve(static_cast(num_elements))); + for (size_t elem_idx = 0; elem_idx < num_elements; elem_idx += 1) { + RR_RETURN_NOT_OK( + Loggable:: + fill_arrow_array_builder(field_builder, &elements[elem_idx].to_time, 1) + ); + } + } + ARROW_RETURN_NOT_OK(builder->AppendValues(static_cast(num_elements), nullptr)); + + return Error::ok(); + } +} // namespace rerun diff --git a/rerun_cpp/src/rerun/blueprint/datatypes/visible_time_range.hpp b/rerun_cpp/src/rerun/blueprint/datatypes/visible_time_range.hpp new file mode 100644 index 000000000000..6a0dc250edf7 --- /dev/null +++ b/rerun_cpp/src/rerun/blueprint/datatypes/visible_time_range.hpp @@ -0,0 +1,61 @@ +// DO NOT EDIT! This file was auto-generated by crates/re_types_builder/src/codegen/cpp/mod.rs +// Based on "crates/re_types/definitions/rerun/blueprint/datatypes/visible_time_range.fbs". + +#pragma once + +#include "../../result.hpp" +#include "visible_time_range_boundary.hpp" + +#include +#include + +namespace arrow { + class Array; + class DataType; + class StructBuilder; +} // namespace arrow + +namespace rerun::blueprint::datatypes { + /// **Datatype**: Visible time range bounds. + struct VisibleTimeRange { + /// Low time boundary for sequence timeline. + rerun::blueprint::datatypes::VisibleTimeRangeBoundary from_sequence; + + /// High time boundary for sequence timeline. + rerun::blueprint::datatypes::VisibleTimeRangeBoundary to_sequence; + + /// Low time boundary for time timeline. + rerun::blueprint::datatypes::VisibleTimeRangeBoundary from_time; + + /// High time boundary for time timeline. + rerun::blueprint::datatypes::VisibleTimeRangeBoundary to_time; + + public: + VisibleTimeRange() = default; + }; +} // namespace rerun::blueprint::datatypes + +namespace rerun { + template + struct Loggable; + + /// \private + template <> + struct Loggable { + static constexpr const char Name[] = "rerun.blueprint.datatypes.VisibleTimeRange"; + + /// Returns the arrow data type this type corresponds to. + static const std::shared_ptr& arrow_datatype(); + + /// Serializes an array of `rerun::blueprint:: datatypes::VisibleTimeRange` into an arrow array. + static Result> to_arrow( + const blueprint::datatypes::VisibleTimeRange* instances, size_t num_instances + ); + + /// Fills an arrow array builder with an array of this type. + static rerun::Error fill_arrow_array_builder( + arrow::StructBuilder* builder, const blueprint::datatypes::VisibleTimeRange* elements, + size_t num_elements + ); + }; +} // namespace rerun diff --git a/rerun_cpp/src/rerun/blueprint/datatypes/visible_time_range_boundary.cpp b/rerun_cpp/src/rerun/blueprint/datatypes/visible_time_range_boundary.cpp new file mode 100644 index 000000000000..6e4820a69c1f --- /dev/null +++ b/rerun_cpp/src/rerun/blueprint/datatypes/visible_time_range_boundary.cpp @@ -0,0 +1,91 @@ +// DO NOT EDIT! This file was auto-generated by crates/re_types_builder/src/codegen/cpp/mod.rs +// Based on "crates/re_types/definitions/rerun/blueprint/datatypes/visible_time_range.fbs". + +#include "visible_time_range_boundary.hpp" + +#include "../../datatypes/time_int.hpp" +#include "visible_time_range_boundary_kind.hpp" + +#include +#include + +namespace rerun::blueprint::datatypes {} + +namespace rerun { + const std::shared_ptr& + Loggable::arrow_datatype() { + static const auto datatype = arrow::struct_({ + arrow::field( + "kind", + Loggable::arrow_datatype( + ), + false + ), + arrow::field("time", Loggable::arrow_datatype(), false), + }); + return datatype; + } + + Result> + Loggable::to_arrow( + const blueprint::datatypes::VisibleTimeRangeBoundary* instances, size_t num_instances + ) { + // TODO(andreas): Allow configuring the memory pool. + arrow::MemoryPool* pool = arrow::default_memory_pool(); + auto datatype = arrow_datatype(); + + ARROW_ASSIGN_OR_RAISE(auto builder, arrow::MakeBuilder(datatype, pool)) + if (instances && num_instances > 0) { + RR_RETURN_NOT_OK( + Loggable::fill_arrow_array_builder( + static_cast(builder.get()), + instances, + num_instances + ) + ); + } + std::shared_ptr array; + ARROW_RETURN_NOT_OK(builder->Finish(&array)); + return array; + } + + rerun::Error Loggable::fill_arrow_array_builder( + arrow::StructBuilder* builder, + const blueprint::datatypes::VisibleTimeRangeBoundary* elements, size_t num_elements + ) { + if (builder == nullptr) { + return rerun::Error(ErrorCode::UnexpectedNullArgument, "Passed array builder is null."); + } + if (elements == nullptr) { + return rerun::Error( + ErrorCode::UnexpectedNullArgument, + "Cannot serialize null pointer to arrow array." + ); + } + + { + auto field_builder = static_cast(builder->field_builder(0)); + ARROW_RETURN_NOT_OK(field_builder->Reserve(static_cast(num_elements))); + for (size_t elem_idx = 0; elem_idx < num_elements; elem_idx += 1) { + RR_RETURN_NOT_OK( + Loggable:: + fill_arrow_array_builder(field_builder, &elements[elem_idx].kind, 1) + ); + } + } + { + auto field_builder = static_cast(builder->field_builder(1)); + ARROW_RETURN_NOT_OK(field_builder->Reserve(static_cast(num_elements))); + for (size_t elem_idx = 0; elem_idx < num_elements; elem_idx += 1) { + RR_RETURN_NOT_OK(Loggable::fill_arrow_array_builder( + field_builder, + &elements[elem_idx].time, + 1 + )); + } + } + ARROW_RETURN_NOT_OK(builder->AppendValues(static_cast(num_elements), nullptr)); + + return Error::ok(); + } +} // namespace rerun diff --git a/rerun_cpp/src/rerun/blueprint/datatypes/legend.hpp b/rerun_cpp/src/rerun/blueprint/datatypes/visible_time_range_boundary.hpp similarity index 55% rename from rerun_cpp/src/rerun/blueprint/datatypes/legend.hpp rename to rerun_cpp/src/rerun/blueprint/datatypes/visible_time_range_boundary.hpp index b8efd53df620..317bf804ec91 100644 --- a/rerun_cpp/src/rerun/blueprint/datatypes/legend.hpp +++ b/rerun_cpp/src/rerun/blueprint/datatypes/visible_time_range_boundary.hpp @@ -1,13 +1,14 @@ // DO NOT EDIT! This file was auto-generated by crates/re_types_builder/src/codegen/cpp/mod.rs -// Based on "crates/re_types/definitions/rerun/blueprint/datatypes/legend.fbs". +// Based on "crates/re_types/definitions/rerun/blueprint/datatypes/visible_time_range.fbs". #pragma once +#include "../../datatypes/time_int.hpp" #include "../../result.hpp" +#include "visible_time_range_boundary_kind.hpp" #include #include -#include namespace arrow { class Array; @@ -16,22 +17,16 @@ namespace arrow { } // namespace arrow namespace rerun::blueprint::datatypes { - /// **Datatype**: Configuration for the legend of a plot. - struct Legend { - /// Whether or not the legend should be displayed. - bool visible; - - /// Where should the legend be located. - /// - /// Allowed values: - /// - LeftTop = 1, - /// - RightTop = 2, - /// - LeftBottom = 3, - /// - RightBottom = 4 - std::optional location; + /// **Datatype**: Type of boundary for visible history. + struct VisibleTimeRangeBoundary { + /// Type of the boundary. + rerun::blueprint::datatypes::VisibleTimeRangeBoundaryKind kind; + + /// Value of the boundary (ignored for `Infinite` type). + rerun::datatypes::TimeInt time; public: - Legend() = default; + VisibleTimeRangeBoundary() = default; }; } // namespace rerun::blueprint::datatypes @@ -41,21 +36,21 @@ namespace rerun { /// \private template <> - struct Loggable { - static constexpr const char Name[] = "rerun.blueprint.datatypes.Legend"; + struct Loggable { + static constexpr const char Name[] = "rerun.blueprint.datatypes.VisibleTimeRangeBoundary"; /// Returns the arrow data type this type corresponds to. static const std::shared_ptr& arrow_datatype(); - /// Fills an arrow array builder with an array of this type. - static rerun::Error fill_arrow_array_builder( - arrow::StructBuilder* builder, const blueprint::datatypes::Legend* elements, - size_t num_elements + /// Serializes an array of `rerun::blueprint:: datatypes::VisibleTimeRangeBoundary` into an arrow array. + static Result> to_arrow( + const blueprint::datatypes::VisibleTimeRangeBoundary* instances, size_t num_instances ); - /// Serializes an array of `rerun::blueprint:: datatypes::Legend` into an arrow array. - static Result> to_arrow( - const blueprint::datatypes::Legend* instances, size_t num_instances + /// Fills an arrow array builder with an array of this type. + static rerun::Error fill_arrow_array_builder( + arrow::StructBuilder* builder, + const blueprint::datatypes::VisibleTimeRangeBoundary* elements, size_t num_elements ); }; } // namespace rerun diff --git a/rerun_cpp/src/rerun/blueprint/datatypes/visible_time_range_boundary_kind.cpp b/rerun_cpp/src/rerun/blueprint/datatypes/visible_time_range_boundary_kind.cpp new file mode 100644 index 000000000000..08a67a5061bf --- /dev/null +++ b/rerun_cpp/src/rerun/blueprint/datatypes/visible_time_range_boundary_kind.cpp @@ -0,0 +1,67 @@ +// DO NOT EDIT! This file was auto-generated by crates/re_types_builder/src/codegen/cpp/mod.rs +// Based on "crates/re_types/definitions/rerun/blueprint/datatypes/visible_time_range.fbs". + +#include "visible_time_range_boundary_kind.hpp" + +#include +#include + +namespace rerun { + const std::shared_ptr& + Loggable::arrow_datatype() { + static const auto datatype = arrow::sparse_union({ + arrow::field("_null_markers", arrow::null(), true, nullptr), + arrow::field("RelativeToTimeCursor", arrow::null(), true), + arrow::field("Absolute", arrow::null(), true), + arrow::field("Infinite", arrow::null(), true), + }); + return datatype; + } + + Result> + Loggable::to_arrow( + const blueprint::datatypes::VisibleTimeRangeBoundaryKind* instances, + size_t num_instances + ) { + // TODO(andreas): Allow configuring the memory pool. + arrow::MemoryPool* pool = arrow::default_memory_pool(); + auto datatype = arrow_datatype(); + + ARROW_ASSIGN_OR_RAISE(auto builder, arrow::MakeBuilder(datatype, pool)) + if (instances && num_instances > 0) { + RR_RETURN_NOT_OK(Loggable:: + fill_arrow_array_builder( + static_cast(builder.get()), + instances, + num_instances + )); + } + std::shared_ptr array; + ARROW_RETURN_NOT_OK(builder->Finish(&array)); + return array; + } + + rerun::Error + Loggable::fill_arrow_array_builder( + arrow::SparseUnionBuilder* builder, + const blueprint::datatypes::VisibleTimeRangeBoundaryKind* elements, size_t num_elements + ) { + if (builder == nullptr) { + return rerun::Error(ErrorCode::UnexpectedNullArgument, "Passed array builder is null."); + } + if (elements == nullptr) { + return rerun::Error( + ErrorCode::UnexpectedNullArgument, + "Cannot serialize null pointer to arrow array." + ); + } + + ARROW_RETURN_NOT_OK(builder->Reserve(static_cast(num_elements))); + for (size_t elem_idx = 0; elem_idx < num_elements; elem_idx += 1) { + const auto variant = elements[elem_idx]; + ARROW_RETURN_NOT_OK(builder->Append(static_cast(variant))); + } + + return Error::ok(); + } +} // namespace rerun diff --git a/rerun_cpp/src/rerun/blueprint/datatypes/visible_time_range_boundary_kind.hpp b/rerun_cpp/src/rerun/blueprint/datatypes/visible_time_range_boundary_kind.hpp new file mode 100644 index 000000000000..59025d01da86 --- /dev/null +++ b/rerun_cpp/src/rerun/blueprint/datatypes/visible_time_range_boundary_kind.hpp @@ -0,0 +1,57 @@ +// DO NOT EDIT! This file was auto-generated by crates/re_types_builder/src/codegen/cpp/mod.rs +// Based on "crates/re_types/definitions/rerun/blueprint/datatypes/visible_time_range.fbs". + +#pragma once + +#include "../../result.hpp" + +#include +#include + +namespace arrow { + class Array; + class DataType; + class SparseUnionBuilder; +} // namespace arrow + +namespace rerun::blueprint::datatypes { + /// **Datatype**: Kind of boundary for visible history, see `VisibleTimeRangeBoundary`. + enum class VisibleTimeRangeBoundaryKind : uint8_t { + + /// Boundary is a value relative to the time cursor. + RelativeToTimeCursor = 1, + + /// Boundary is an absolute value. + Absolute = 2, + + /// The boundary extends to infinity. + Infinite = 3, + }; +} // namespace rerun::blueprint::datatypes + +namespace rerun { + template + struct Loggable; + + /// \private + template <> + struct Loggable { + static constexpr const char Name[] = + "rerun.blueprint.datatypes.VisibleTimeRangeBoundaryKind"; + + /// Returns the arrow data type this type corresponds to. + static const std::shared_ptr& arrow_datatype(); + + /// Serializes an array of `rerun::blueprint:: datatypes::VisibleTimeRangeBoundaryKind` into an arrow array. + static Result> to_arrow( + const blueprint::datatypes::VisibleTimeRangeBoundaryKind* instances, + size_t num_instances + ); + + /// Fills an arrow array builder with an array of this type. + static rerun::Error fill_arrow_array_builder( + arrow::SparseUnionBuilder* builder, + const blueprint::datatypes::VisibleTimeRangeBoundaryKind* elements, size_t num_elements + ); + }; +} // namespace rerun diff --git a/rerun_cpp/src/rerun/datatypes.hpp b/rerun_cpp/src/rerun/datatypes.hpp index 7f33e559abe9..81c850bdde6f 100644 --- a/rerun_cpp/src/rerun/datatypes.hpp +++ b/rerun_cpp/src/rerun/datatypes.hpp @@ -24,6 +24,7 @@ #include "datatypes/tensor_buffer.hpp" #include "datatypes/tensor_data.hpp" #include "datatypes/tensor_dimension.hpp" +#include "datatypes/time_int.hpp" #include "datatypes/transform3d.hpp" #include "datatypes/translation_and_mat3x3.hpp" #include "datatypes/translation_rotation_scale3d.hpp" diff --git a/rerun_cpp/src/rerun/datatypes/.gitattributes b/rerun_cpp/src/rerun/datatypes/.gitattributes index 5c61073231da..83fde1441f4b 100644 --- a/rerun_cpp/src/rerun/datatypes/.gitattributes +++ b/rerun_cpp/src/rerun/datatypes/.gitattributes @@ -45,6 +45,8 @@ tensor_data.cpp linguist-generated=true tensor_data.hpp linguist-generated=true tensor_dimension.cpp linguist-generated=true tensor_dimension.hpp linguist-generated=true +time_int.cpp linguist-generated=true +time_int.hpp linguist-generated=true transform3d.cpp linguist-generated=true transform3d.hpp linguist-generated=true translation_and_mat3x3.cpp linguist-generated=true diff --git a/rerun_cpp/src/rerun/datatypes/time_int.cpp b/rerun_cpp/src/rerun/datatypes/time_int.cpp new file mode 100644 index 000000000000..7b368b716fcd --- /dev/null +++ b/rerun_cpp/src/rerun/datatypes/time_int.cpp @@ -0,0 +1,57 @@ +// DO NOT EDIT! This file was auto-generated by crates/re_types_builder/src/codegen/cpp/mod.rs +// Based on "crates/re_types/definitions/rerun/datatypes/time_int.fbs". + +#include "time_int.hpp" + +#include +#include + +namespace rerun::datatypes {} + +namespace rerun { + const std::shared_ptr& Loggable::arrow_datatype() { + static const auto datatype = arrow::int64(); + return datatype; + } + + Result> Loggable::to_arrow( + const datatypes::TimeInt* instances, size_t num_instances + ) { + // TODO(andreas): Allow configuring the memory pool. + arrow::MemoryPool* pool = arrow::default_memory_pool(); + auto datatype = arrow_datatype(); + + ARROW_ASSIGN_OR_RAISE(auto builder, arrow::MakeBuilder(datatype, pool)) + if (instances && num_instances > 0) { + RR_RETURN_NOT_OK(Loggable::fill_arrow_array_builder( + static_cast(builder.get()), + instances, + num_instances + )); + } + std::shared_ptr array; + ARROW_RETURN_NOT_OK(builder->Finish(&array)); + return array; + } + + rerun::Error Loggable::fill_arrow_array_builder( + arrow::Int64Builder* builder, const datatypes::TimeInt* elements, size_t num_elements + ) { + if (builder == nullptr) { + return rerun::Error(ErrorCode::UnexpectedNullArgument, "Passed array builder is null."); + } + if (elements == nullptr) { + return rerun::Error( + ErrorCode::UnexpectedNullArgument, + "Cannot serialize null pointer to arrow array." + ); + } + + static_assert(sizeof(*elements) == sizeof(elements->value)); + ARROW_RETURN_NOT_OK( + builder->AppendValues(&elements->value, static_cast(num_elements)) + ); + + return Error::ok(); + } +} // namespace rerun diff --git a/rerun_cpp/src/rerun/datatypes/time_int.hpp b/rerun_cpp/src/rerun/datatypes/time_int.hpp new file mode 100644 index 000000000000..75b090690811 --- /dev/null +++ b/rerun_cpp/src/rerun/datatypes/time_int.hpp @@ -0,0 +1,61 @@ +// DO NOT EDIT! This file was auto-generated by crates/re_types_builder/src/codegen/cpp/mod.rs +// Based on "crates/re_types/definitions/rerun/datatypes/time_int.fbs". + +#pragma once + +#include "../result.hpp" + +#include +#include + +namespace arrow { + /// \private + template + class NumericBuilder; + + class Array; + class DataType; + class Int64Type; + using Int64Builder = NumericBuilder; +} // namespace arrow + +namespace rerun::datatypes { + /// **Datatype**: A 64-bit number describing either nanoseconds OR sequence numbers. + struct TimeInt { + int64_t value; + + public: + TimeInt() = default; + + TimeInt(int64_t value_) : value(value_) {} + + TimeInt& operator=(int64_t value_) { + value = value_; + return *this; + } + }; +} // namespace rerun::datatypes + +namespace rerun { + template + struct Loggable; + + /// \private + template <> + struct Loggable { + static constexpr const char Name[] = "rerun.datatypes.TimeInt"; + + /// Returns the arrow data type this type corresponds to. + static const std::shared_ptr& arrow_datatype(); + + /// Serializes an array of `rerun::datatypes::TimeInt` into an arrow array. + static Result> to_arrow( + const datatypes::TimeInt* instances, size_t num_instances + ); + + /// Fills an arrow array builder with an array of this type. + static rerun::Error fill_arrow_array_builder( + arrow::Int64Builder* builder, const datatypes::TimeInt* elements, size_t num_elements + ); + }; +} // namespace rerun diff --git a/rerun_py/rerun_sdk/rerun/blueprint/components/.gitattributes b/rerun_py/rerun_sdk/rerun/blueprint/components/.gitattributes index 2ad52015791a..a8e9e72f9c7e 100644 --- a/rerun_py/rerun_sdk/rerun/blueprint/components/.gitattributes +++ b/rerun_py/rerun_sdk/rerun/blueprint/components/.gitattributes @@ -23,3 +23,4 @@ space_view_maximized.py linguist-generated=true space_view_origin.py linguist-generated=true viewer_recommendation_hash.py linguist-generated=true visible.py linguist-generated=true +visible_time_range.py linguist-generated=true diff --git a/rerun_py/rerun_sdk/rerun/blueprint/components/__init__.py b/rerun_py/rerun_sdk/rerun/blueprint/components/__init__.py index 94f3b1e26008..1dbd8f8d98c3 100644 --- a/rerun_py/rerun_sdk/rerun/blueprint/components/__init__.py +++ b/rerun_py/rerun_sdk/rerun/blueprint/components/__init__.py @@ -57,6 +57,7 @@ ViewerRecommendationHashType, ) from .visible import Visible, VisibleArrayLike, VisibleBatch, VisibleLike, VisibleType +from .visible_time_range import VisibleTimeRange, VisibleTimeRangeBatch, VisibleTimeRangeType __all__ = [ "ActiveTab", @@ -143,5 +144,8 @@ "VisibleArrayLike", "VisibleBatch", "VisibleLike", + "VisibleTimeRange", + "VisibleTimeRangeBatch", + "VisibleTimeRangeType", "VisibleType", ] diff --git a/rerun_py/rerun_sdk/rerun/blueprint/components/visible_time_range.py b/rerun_py/rerun_sdk/rerun/blueprint/components/visible_time_range.py new file mode 100644 index 000000000000..7ffed4d09f56 --- /dev/null +++ b/rerun_py/rerun_sdk/rerun/blueprint/components/visible_time_range.py @@ -0,0 +1,28 @@ +# DO NOT EDIT! This file was auto-generated by crates/re_types_builder/src/codegen/python/mod.rs +# Based on "crates/re_types/definitions/rerun/blueprint/components/visible_time_range.fbs". + +# You can extend this class by creating a "VisibleTimeRangeExt" class in "visible_time_range_ext.py". + +from __future__ import annotations + +from ..._baseclasses import ComponentBatchMixin +from ...blueprint import datatypes as blueprint_datatypes + +__all__ = ["VisibleTimeRange", "VisibleTimeRangeBatch", "VisibleTimeRangeType"] + + +class VisibleTimeRange(blueprint_datatypes.VisibleTimeRange): + """**Component**: The range of values that will be included in a Space View query.""" + + # You can define your own __init__ function as a member of VisibleTimeRangeExt in visible_time_range_ext.py + + # Note: there are no fields here because VisibleTimeRange delegates to datatypes.VisibleTimeRange + pass + + +class VisibleTimeRangeType(blueprint_datatypes.VisibleTimeRangeType): + _TYPE_NAME: str = "rerun.blueprint.components.VisibleTimeRange" + + +class VisibleTimeRangeBatch(blueprint_datatypes.VisibleTimeRangeBatch, ComponentBatchMixin): + _ARROW_TYPE = VisibleTimeRangeType() diff --git a/rerun_py/rerun_sdk/rerun/blueprint/datatypes/.gitattributes b/rerun_py/rerun_sdk/rerun/blueprint/datatypes/.gitattributes index d7d100d86518..5f25eb77dacd 100644 --- a/rerun_py/rerun_sdk/rerun/blueprint/datatypes/.gitattributes +++ b/rerun_py/rerun_sdk/rerun/blueprint/datatypes/.gitattributes @@ -2,4 +2,6 @@ .gitattributes linguist-generated=true __init__.py linguist-generated=true -legend.py linguist-generated=true +visible_time_range.py linguist-generated=true +visible_time_range_boundary.py linguist-generated=true +visible_time_range_boundary_kind.py linguist-generated=true diff --git a/rerun_py/rerun_sdk/rerun/blueprint/datatypes/__init__.py b/rerun_py/rerun_sdk/rerun/blueprint/datatypes/__init__.py index e18ca0758275..cfcebd2abc65 100644 --- a/rerun_py/rerun_sdk/rerun/blueprint/datatypes/__init__.py +++ b/rerun_py/rerun_sdk/rerun/blueprint/datatypes/__init__.py @@ -1,7 +1,43 @@ -# DO NOT EDIT! This file was auto-generated by crates/re_types_builder/src/codegen/python.rs +# DO NOT EDIT! This file was auto-generated by crates/re_types_builder/src/codegen/python/mod.rs from __future__ import annotations -from .legend import Legend, LegendArrayLike, LegendBatch, LegendLike, LegendType +from .visible_time_range import ( + VisibleTimeRange, + VisibleTimeRangeArrayLike, + VisibleTimeRangeBatch, + VisibleTimeRangeLike, + VisibleTimeRangeType, +) +from .visible_time_range_boundary import ( + VisibleTimeRangeBoundary, + VisibleTimeRangeBoundaryArrayLike, + VisibleTimeRangeBoundaryBatch, + VisibleTimeRangeBoundaryLike, + VisibleTimeRangeBoundaryType, +) +from .visible_time_range_boundary_kind import ( + VisibleTimeRangeBoundaryKind, + VisibleTimeRangeBoundaryKindArrayLike, + VisibleTimeRangeBoundaryKindBatch, + VisibleTimeRangeBoundaryKindLike, + VisibleTimeRangeBoundaryKindType, +) -__all__ = ["Legend", "LegendArrayLike", "LegendBatch", "LegendLike", "LegendType"] +__all__ = [ + "VisibleTimeRange", + "VisibleTimeRangeArrayLike", + "VisibleTimeRangeBatch", + "VisibleTimeRangeBoundary", + "VisibleTimeRangeBoundaryArrayLike", + "VisibleTimeRangeBoundaryBatch", + "VisibleTimeRangeBoundaryKind", + "VisibleTimeRangeBoundaryKindArrayLike", + "VisibleTimeRangeBoundaryKindBatch", + "VisibleTimeRangeBoundaryKindLike", + "VisibleTimeRangeBoundaryKindType", + "VisibleTimeRangeBoundaryLike", + "VisibleTimeRangeBoundaryType", + "VisibleTimeRangeLike", + "VisibleTimeRangeType", +] diff --git a/rerun_py/rerun_sdk/rerun/blueprint/datatypes/legend.py b/rerun_py/rerun_sdk/rerun/blueprint/datatypes/legend.py deleted file mode 100644 index 3c462c99938f..000000000000 --- a/rerun_py/rerun_sdk/rerun/blueprint/datatypes/legend.py +++ /dev/null @@ -1,92 +0,0 @@ -# DO NOT EDIT! This file was auto-generated by crates/re_types_builder/src/codegen/python.rs -# Based on "crates/re_types/definitions/rerun/blueprint/datatypes/legend.fbs". - -# You can extend this class by creating a "LegendExt" class in "legend_ext.py". - -from __future__ import annotations - -from typing import Any, Sequence, Union - -import pyarrow as pa -from attrs import define, field - -from ..._baseclasses import BaseBatch, BaseExtensionType -from ..._converters import ( - int_or_none, -) - -__all__ = ["Legend", "LegendArrayLike", "LegendBatch", "LegendLike", "LegendType"] - - -@define(init=False) -class Legend: - """**Datatype**: Configuration for the legend of a plot.""" - - def __init__(self: Any, visible: bool, location: int | None = None): - """ - Create a new instance of the Legend datatype. - - Parameters - ---------- - visible: - Whether or not the legend should be displayed. - location: - Where should the legend be located. - - Allowed values: - - LeftTop = 1, - - RightTop = 2, - - LeftBottom = 3, - - RightBottom = 4 - - """ - - # You can define your own __init__ function as a member of LegendExt in legend_ext.py - self.__attrs_init__(visible=visible, location=location) - - visible: bool = field(converter=bool) - # Whether or not the legend should be displayed. - # - # (Docstring intentionally commented out to hide this field from the docs) - - location: int | None = field(default=None, converter=int_or_none) - # Where should the legend be located. - # - # Allowed values: - # - LeftTop = 1, - # - RightTop = 2, - # - LeftBottom = 3, - # - RightBottom = 4 - # - # (Docstring intentionally commented out to hide this field from the docs) - - -LegendLike = Legend -LegendArrayLike = Union[ - Legend, - Sequence[LegendLike], -] - - -class LegendType(BaseExtensionType): - _TYPE_NAME: str = "rerun.blueprint.datatypes.Legend" - - def __init__(self) -> None: - pa.ExtensionType.__init__( - self, - pa.struct( - [ - pa.field("visible", pa.bool_(), nullable=False, metadata={}), - pa.field("location", pa.uint8(), nullable=True, metadata={}), - ] - ), - self._TYPE_NAME, - ) - - -class LegendBatch(BaseBatch[LegendArrayLike]): - _ARROW_TYPE = LegendType() - - @staticmethod - def _native_to_pa_array(data: LegendArrayLike, data_type: pa.DataType) -> pa.Array: - raise NotImplementedError # You need to implement native_to_pa_array_override in legend_ext.py diff --git a/rerun_py/rerun_sdk/rerun/blueprint/datatypes/visible_time_range.py b/rerun_py/rerun_sdk/rerun/blueprint/datatypes/visible_time_range.py new file mode 100644 index 000000000000..735c720b7a47 --- /dev/null +++ b/rerun_py/rerun_sdk/rerun/blueprint/datatypes/visible_time_range.py @@ -0,0 +1,194 @@ +# DO NOT EDIT! This file was auto-generated by crates/re_types_builder/src/codegen/python/mod.rs +# Based on "crates/re_types/definitions/rerun/blueprint/datatypes/visible_time_range.fbs". + +# You can extend this class by creating a "VisibleTimeRangeExt" class in "visible_time_range_ext.py". + +from __future__ import annotations + +from typing import Any, Sequence, Union + +import pyarrow as pa +from attrs import define, field + +from ..._baseclasses import BaseBatch, BaseExtensionType +from ...blueprint import datatypes as blueprint_datatypes + +__all__ = [ + "VisibleTimeRange", + "VisibleTimeRangeArrayLike", + "VisibleTimeRangeBatch", + "VisibleTimeRangeLike", + "VisibleTimeRangeType", +] + + +@define(init=False) +class VisibleTimeRange: + """**Datatype**: Visible time range bounds.""" + + def __init__( + self: Any, + from_sequence: blueprint_datatypes.VisibleTimeRangeBoundaryLike, + to_sequence: blueprint_datatypes.VisibleTimeRangeBoundaryLike, + from_time: blueprint_datatypes.VisibleTimeRangeBoundaryLike, + to_time: blueprint_datatypes.VisibleTimeRangeBoundaryLike, + ): + """ + Create a new instance of the VisibleTimeRange datatype. + + Parameters + ---------- + from_sequence: + Low time boundary for sequence timeline. + to_sequence: + High time boundary for sequence timeline. + from_time: + Low time boundary for time timeline. + to_time: + High time boundary for time timeline. + + """ + + # You can define your own __init__ function as a member of VisibleTimeRangeExt in visible_time_range_ext.py + self.__attrs_init__(from_sequence=from_sequence, to_sequence=to_sequence, from_time=from_time, to_time=to_time) + + from_sequence: blueprint_datatypes.VisibleTimeRangeBoundary = field() + # Low time boundary for sequence timeline. + # + # (Docstring intentionally commented out to hide this field from the docs) + + to_sequence: blueprint_datatypes.VisibleTimeRangeBoundary = field() + # High time boundary for sequence timeline. + # + # (Docstring intentionally commented out to hide this field from the docs) + + from_time: blueprint_datatypes.VisibleTimeRangeBoundary = field() + # Low time boundary for time timeline. + # + # (Docstring intentionally commented out to hide this field from the docs) + + to_time: blueprint_datatypes.VisibleTimeRangeBoundary = field() + # High time boundary for time timeline. + # + # (Docstring intentionally commented out to hide this field from the docs) + + +VisibleTimeRangeLike = VisibleTimeRange +VisibleTimeRangeArrayLike = Union[ + VisibleTimeRange, + Sequence[VisibleTimeRangeLike], +] + + +class VisibleTimeRangeType(BaseExtensionType): + _TYPE_NAME: str = "rerun.blueprint.datatypes.VisibleTimeRange" + + def __init__(self) -> None: + pa.ExtensionType.__init__( + self, + pa.struct( + [ + pa.field( + "from_sequence", + pa.struct( + [ + pa.field( + "kind", + pa.sparse_union( + [ + pa.field("_null_markers", pa.null(), nullable=True, metadata={}), + pa.field("RelativeToTimeCursor", pa.null(), nullable=True, metadata={}), + pa.field("Absolute", pa.null(), nullable=True, metadata={}), + pa.field("Infinite", pa.null(), nullable=True, metadata={}), + ] + ), + nullable=False, + metadata={}, + ), + pa.field("time", pa.int64(), nullable=False, metadata={}), + ] + ), + nullable=False, + metadata={}, + ), + pa.field( + "to_sequence", + pa.struct( + [ + pa.field( + "kind", + pa.sparse_union( + [ + pa.field("_null_markers", pa.null(), nullable=True, metadata={}), + pa.field("RelativeToTimeCursor", pa.null(), nullable=True, metadata={}), + pa.field("Absolute", pa.null(), nullable=True, metadata={}), + pa.field("Infinite", pa.null(), nullable=True, metadata={}), + ] + ), + nullable=False, + metadata={}, + ), + pa.field("time", pa.int64(), nullable=False, metadata={}), + ] + ), + nullable=False, + metadata={}, + ), + pa.field( + "from_time", + pa.struct( + [ + pa.field( + "kind", + pa.sparse_union( + [ + pa.field("_null_markers", pa.null(), nullable=True, metadata={}), + pa.field("RelativeToTimeCursor", pa.null(), nullable=True, metadata={}), + pa.field("Absolute", pa.null(), nullable=True, metadata={}), + pa.field("Infinite", pa.null(), nullable=True, metadata={}), + ] + ), + nullable=False, + metadata={}, + ), + pa.field("time", pa.int64(), nullable=False, metadata={}), + ] + ), + nullable=False, + metadata={}, + ), + pa.field( + "to_time", + pa.struct( + [ + pa.field( + "kind", + pa.sparse_union( + [ + pa.field("_null_markers", pa.null(), nullable=True, metadata={}), + pa.field("RelativeToTimeCursor", pa.null(), nullable=True, metadata={}), + pa.field("Absolute", pa.null(), nullable=True, metadata={}), + pa.field("Infinite", pa.null(), nullable=True, metadata={}), + ] + ), + nullable=False, + metadata={}, + ), + pa.field("time", pa.int64(), nullable=False, metadata={}), + ] + ), + nullable=False, + metadata={}, + ), + ] + ), + self._TYPE_NAME, + ) + + +class VisibleTimeRangeBatch(BaseBatch[VisibleTimeRangeArrayLike]): + _ARROW_TYPE = VisibleTimeRangeType() + + @staticmethod + def _native_to_pa_array(data: VisibleTimeRangeArrayLike, data_type: pa.DataType) -> pa.Array: + raise NotImplementedError # You need to implement native_to_pa_array_override in visible_time_range_ext.py diff --git a/rerun_py/rerun_sdk/rerun/blueprint/datatypes/visible_time_range_boundary.py b/rerun_py/rerun_sdk/rerun/blueprint/datatypes/visible_time_range_boundary.py new file mode 100644 index 000000000000..7d94422c9c4e --- /dev/null +++ b/rerun_py/rerun_sdk/rerun/blueprint/datatypes/visible_time_range_boundary.py @@ -0,0 +1,104 @@ +# DO NOT EDIT! This file was auto-generated by crates/re_types_builder/src/codegen/python/mod.rs +# Based on "crates/re_types/definitions/rerun/blueprint/datatypes/visible_time_range.fbs". + +# You can extend this class by creating a "VisibleTimeRangeBoundaryExt" class in "visible_time_range_boundary_ext.py". + +from __future__ import annotations + +from typing import Any, Sequence, Union + +import pyarrow as pa +from attrs import define, field + +from ... import datatypes +from ..._baseclasses import BaseBatch, BaseExtensionType +from ...blueprint import datatypes as blueprint_datatypes + +__all__ = [ + "VisibleTimeRangeBoundary", + "VisibleTimeRangeBoundaryArrayLike", + "VisibleTimeRangeBoundaryBatch", + "VisibleTimeRangeBoundaryLike", + "VisibleTimeRangeBoundaryType", +] + + +def _visible_time_range_boundary__time__special_field_converter_override(x: datatypes.TimeIntLike) -> datatypes.TimeInt: + if isinstance(x, datatypes.TimeInt): + return x + else: + return datatypes.TimeInt(x) + + +@define(init=False) +class VisibleTimeRangeBoundary: + """**Datatype**: Type of boundary for visible history.""" + + def __init__(self: Any, kind: blueprint_datatypes.VisibleTimeRangeBoundaryKindLike, time: datatypes.TimeIntLike): + """ + Create a new instance of the VisibleTimeRangeBoundary datatype. + + Parameters + ---------- + kind: + Type of the boundary. + time: + Value of the boundary (ignored for `Infinite` type). + + """ + + # You can define your own __init__ function as a member of VisibleTimeRangeBoundaryExt in visible_time_range_boundary_ext.py + self.__attrs_init__(kind=kind, time=time) + + kind: blueprint_datatypes.VisibleTimeRangeBoundaryKind = field() + # Type of the boundary. + # + # (Docstring intentionally commented out to hide this field from the docs) + + time: datatypes.TimeInt = field(converter=_visible_time_range_boundary__time__special_field_converter_override) + # Value of the boundary (ignored for `Infinite` type). + # + # (Docstring intentionally commented out to hide this field from the docs) + + +VisibleTimeRangeBoundaryLike = VisibleTimeRangeBoundary +VisibleTimeRangeBoundaryArrayLike = Union[ + VisibleTimeRangeBoundary, + Sequence[VisibleTimeRangeBoundaryLike], +] + + +class VisibleTimeRangeBoundaryType(BaseExtensionType): + _TYPE_NAME: str = "rerun.blueprint.datatypes.VisibleTimeRangeBoundary" + + def __init__(self) -> None: + pa.ExtensionType.__init__( + self, + pa.struct( + [ + pa.field( + "kind", + pa.sparse_union( + [ + pa.field("_null_markers", pa.null(), nullable=True, metadata={}), + pa.field("RelativeToTimeCursor", pa.null(), nullable=True, metadata={}), + pa.field("Absolute", pa.null(), nullable=True, metadata={}), + pa.field("Infinite", pa.null(), nullable=True, metadata={}), + ] + ), + nullable=False, + metadata={}, + ), + pa.field("time", pa.int64(), nullable=False, metadata={}), + ] + ), + self._TYPE_NAME, + ) + + +class VisibleTimeRangeBoundaryBatch(BaseBatch[VisibleTimeRangeBoundaryArrayLike]): + _ARROW_TYPE = VisibleTimeRangeBoundaryType() + + @staticmethod + def _native_to_pa_array(data: VisibleTimeRangeBoundaryArrayLike, data_type: pa.DataType) -> pa.Array: + raise NotImplementedError # You need to implement native_to_pa_array_override in visible_time_range_boundary_ext.py diff --git a/rerun_py/rerun_sdk/rerun/blueprint/datatypes/visible_time_range_boundary_kind.py b/rerun_py/rerun_sdk/rerun/blueprint/datatypes/visible_time_range_boundary_kind.py new file mode 100644 index 000000000000..e179602b070d --- /dev/null +++ b/rerun_py/rerun_sdk/rerun/blueprint/datatypes/visible_time_range_boundary_kind.py @@ -0,0 +1,105 @@ +# DO NOT EDIT! This file was auto-generated by crates/re_types_builder/src/codegen/python/mod.rs +# Based on "crates/re_types/definitions/rerun/blueprint/datatypes/visible_time_range.fbs". + +# You can extend this class by creating a "VisibleTimeRangeBoundaryKindExt" class in "visible_time_range_boundary_kind_ext.py". + +from __future__ import annotations + +from typing import Sequence, Union + +import pyarrow as pa + +from ..._baseclasses import BaseBatch, BaseExtensionType + +__all__ = [ + "VisibleTimeRangeBoundaryKind", + "VisibleTimeRangeBoundaryKindArrayLike", + "VisibleTimeRangeBoundaryKindBatch", + "VisibleTimeRangeBoundaryKindLike", + "VisibleTimeRangeBoundaryKindType", +] + + +from enum import Enum + + +class VisibleTimeRangeBoundaryKind(Enum): + """**Datatype**: Kind of boundary for visible history, see `VisibleTimeRangeBoundary`.""" + + RelativeToTimeCursor = 1 + """Boundary is a value relative to the time cursor.""" + + Absolute = 2 + """Boundary is an absolute value.""" + + Infinite = 3 + """The boundary extends to infinity.""" + + +VisibleTimeRangeBoundaryKindLike = Union[VisibleTimeRangeBoundaryKind, str] +VisibleTimeRangeBoundaryKindArrayLike = Union[ + VisibleTimeRangeBoundaryKindLike, Sequence[VisibleTimeRangeBoundaryKindLike] +] + + +class VisibleTimeRangeBoundaryKindType(BaseExtensionType): + _TYPE_NAME: str = "rerun.blueprint.datatypes.VisibleTimeRangeBoundaryKind" + + def __init__(self) -> None: + pa.ExtensionType.__init__( + self, + pa.sparse_union( + [ + pa.field("_null_markers", pa.null(), nullable=True, metadata={}), + pa.field("RelativeToTimeCursor", pa.null(), nullable=True, metadata={}), + pa.field("Absolute", pa.null(), nullable=True, metadata={}), + pa.field("Infinite", pa.null(), nullable=True, metadata={}), + ] + ), + self._TYPE_NAME, + ) + + +class VisibleTimeRangeBoundaryKindBatch(BaseBatch[VisibleTimeRangeBoundaryKindArrayLike]): + _ARROW_TYPE = VisibleTimeRangeBoundaryKindType() + + @staticmethod + def _native_to_pa_array(data: VisibleTimeRangeBoundaryKindArrayLike, data_type: pa.DataType) -> pa.Array: + if isinstance(data, (VisibleTimeRangeBoundaryKind, int, str)): + data = [data] + + types: list[int] = [] + + for value in data: + if value is None: + types.append(0) + elif isinstance(value, VisibleTimeRangeBoundaryKind): + types.append(value.value) # Actual enum value + elif isinstance(value, int): + types.append(value) # By number + elif isinstance(value, str): + if hasattr(VisibleTimeRangeBoundaryKind, value): + types.append(VisibleTimeRangeBoundaryKind[value].value) # fast path + elif value.lower() == "relativetotimecursor": + types.append(VisibleTimeRangeBoundaryKind.RelativeToTimeCursor.value) + elif value.lower() == "absolute": + types.append(VisibleTimeRangeBoundaryKind.Absolute.value) + elif value.lower() == "infinite": + types.append(VisibleTimeRangeBoundaryKind.Infinite.value) + else: + raise ValueError(f"Unknown VisibleTimeRangeBoundaryKind kind: {value}") + else: + raise ValueError(f"Unknown VisibleTimeRangeBoundaryKind kind: {value}") + + buffers = [ + None, + pa.array(types, type=pa.int8()).buffers()[1], + ] + children = (1 + 3) * [pa.nulls(len(data))] + + return pa.UnionArray.from_buffers( + type=data_type, + length=len(data), + buffers=buffers, + children=children, + ) diff --git a/rerun_py/rerun_sdk/rerun/datatypes/.gitattributes b/rerun_py/rerun_sdk/rerun/datatypes/.gitattributes index 02728bf929d2..74fd88d4d968 100644 --- a/rerun_py/rerun_sdk/rerun/datatypes/.gitattributes +++ b/rerun_py/rerun_sdk/rerun/datatypes/.gitattributes @@ -24,6 +24,7 @@ scale3d.py linguist-generated=true tensor_buffer.py linguist-generated=true tensor_data.py linguist-generated=true tensor_dimension.py linguist-generated=true +time_int.py linguist-generated=true transform3d.py linguist-generated=true translation_and_mat3x3.py linguist-generated=true translation_rotation_scale3d.py linguist-generated=true diff --git a/rerun_py/rerun_sdk/rerun/datatypes/__init__.py b/rerun_py/rerun_sdk/rerun/datatypes/__init__.py index 36fcb289aa61..31fb9e4f05e4 100644 --- a/rerun_py/rerun_sdk/rerun/datatypes/__init__.py +++ b/rerun_py/rerun_sdk/rerun/datatypes/__init__.py @@ -60,6 +60,7 @@ TensorDimensionLike, TensorDimensionType, ) +from .time_int import TimeInt, TimeIntArrayLike, TimeIntBatch, TimeIntLike, TimeIntType from .transform3d import Transform3D, Transform3DArrayLike, Transform3DBatch, Transform3DLike, Transform3DType from .translation_and_mat3x3 import ( TranslationAndMat3x3, @@ -197,6 +198,11 @@ "TensorDimensionBatch", "TensorDimensionLike", "TensorDimensionType", + "TimeInt", + "TimeIntArrayLike", + "TimeIntBatch", + "TimeIntLike", + "TimeIntType", "Transform3D", "Transform3DArrayLike", "Transform3DBatch", diff --git a/rerun_py/rerun_sdk/rerun/datatypes/time_int.py b/rerun_py/rerun_sdk/rerun/datatypes/time_int.py new file mode 100644 index 000000000000..56b224544a7c --- /dev/null +++ b/rerun_py/rerun_sdk/rerun/datatypes/time_int.py @@ -0,0 +1,59 @@ +# DO NOT EDIT! This file was auto-generated by crates/re_types_builder/src/codegen/python/mod.rs +# Based on "crates/re_types/definitions/rerun/datatypes/time_int.fbs". + +# You can extend this class by creating a "TimeIntExt" class in "time_int_ext.py". + +from __future__ import annotations + +from typing import Any, Sequence, Union + +import numpy as np +import numpy.typing as npt +import pyarrow as pa +from attrs import define, field + +from .._baseclasses import BaseBatch, BaseExtensionType + +__all__ = ["TimeInt", "TimeIntArrayLike", "TimeIntBatch", "TimeIntLike", "TimeIntType"] + + +@define(init=False) +class TimeInt: + """**Datatype**: A 64-bit number describing either nanoseconds OR sequence numbers.""" + + def __init__(self: Any, value: TimeIntLike): + """Create a new instance of the TimeInt datatype.""" + + # You can define your own __init__ function as a member of TimeIntExt in time_int_ext.py + self.__attrs_init__(value=value) + + value: int = field(converter=int) + + def __array__(self, dtype: npt.DTypeLike = None) -> npt.NDArray[Any]: + # You can define your own __array__ function as a member of TimeIntExt in time_int_ext.py + return np.asarray(self.value, dtype=dtype) + + def __int__(self) -> int: + return int(self.value) + + +TimeIntLike = TimeInt +TimeIntArrayLike = Union[ + TimeInt, + Sequence[TimeIntLike], +] + + +class TimeIntType(BaseExtensionType): + _TYPE_NAME: str = "rerun.datatypes.TimeInt" + + def __init__(self) -> None: + pa.ExtensionType.__init__(self, pa.int64(), self._TYPE_NAME) + + +class TimeIntBatch(BaseBatch[TimeIntArrayLike]): + _ARROW_TYPE = TimeIntType() + + @staticmethod + def _native_to_pa_array(data: TimeIntArrayLike, data_type: pa.DataType) -> pa.Array: + raise NotImplementedError # You need to implement native_to_pa_array_override in time_int_ext.py From c8ab078b31409549a0708867c07e9d9afb7dcf9c Mon Sep 17 00:00:00 2001 From: Emil Ernerfeldt Date: Mon, 18 Mar 2024 12:21:55 +0100 Subject: [PATCH 27/50] Hide entity icons in paths (#5550) ### What * Closes https://github.com/rerun-io/rerun/issues/5524 Before: image After: image ### Checklist * [x] I have read and agree to [Contributor Guide](https://github.com/rerun-io/rerun/blob/main/CONTRIBUTING.md) and the [Code of Conduct](https://github.com/rerun-io/rerun/blob/main/CODE_OF_CONDUCT.md) * [x] I've included a screenshot or gif (if applicable) * [x] I have tested the web demo (if applicable): * Using newly built examples: [app.rerun.io](https://app.rerun.io/pr/5550/index.html) * Using examples from latest `main` build: [app.rerun.io](https://app.rerun.io/pr/5550/index.html?manifest_url=https://app.rerun.io/version/main/examples_manifest.json) * Using full set of examples from `nightly` build: [app.rerun.io](https://app.rerun.io/pr/5550/index.html?manifest_url=https://app.rerun.io/version/nightly/examples_manifest.json) * [x] The PR title and labels are set such as to maximize their usefulness for the next release's CHANGELOG * [x] If applicable, add a new check to the [release checklist](https://github.com/rerun-io/rerun/blob/main/tests/python/release_checklist)! - [PR Build Summary](https://build.rerun.io/pr/5550) - [Docs preview](https://rerun.io/preview/93e90e8c6e8e8df6093eabdf129d7061dab0d1a8/docs) - [Examples preview](https://rerun.io/preview/93e90e8c6e8e8df6093eabdf129d7061dab0d1a8/examples) - [Recent benchmark results](https://build.rerun.io/graphs/crates.html) - [Wasm size tracking](https://build.rerun.io/graphs/sizes.html) --- crates/re_data_ui/src/item_ui.rs | 90 ++++++++++++++++------ crates/re_viewer/src/ui/selection_panel.rs | 51 ++++++------ 2 files changed, 92 insertions(+), 49 deletions(-) diff --git a/crates/re_data_ui/src/item_ui.rs b/crates/re_data_ui/src/item_ui.rs index 9cca518e2ec0..261c1bb61af5 100644 --- a/crates/re_data_ui/src/item_ui.rs +++ b/crates/re_data_ui/src/item_ui.rs @@ -3,7 +3,6 @@ //! TODO(andreas): This is not a `data_ui`, can this go somewhere else, shouldn't be in `re_data_ui`. use re_entity_db::{EntityTree, InstancePath}; -use re_log_types::external::re_types_core::components::InstanceKey; use re_log_types::{ComponentPath, EntityPath, TimeInt, Timeline}; use re_ui::SyntaxHighlighting; use re_viewer_context::{HoverHighlight, Item, SpaceViewId, UiVerbosity, ViewerContext}; @@ -62,22 +61,29 @@ pub fn entity_path_parts_buttons( space_view_id: Option, entity_path: &EntityPath, ) -> egui::Response { + let with_icon = false; // too much noise with icons in a path + ui.horizontal(|ui| { - ui.spacing_mut().item_spacing.x = 4.0; + ui.spacing_mut().item_spacing.x = 2.0; + + // Show one single icon up-front instead: + let instance_path = InstancePath::entity_splat(entity_path.clone()); + ui.add(instance_path_icon(&query.timeline, store, &instance_path).as_image()); let mut accumulated = Vec::new(); for part in entity_path.iter() { accumulated.push(part.clone()); ui.strong("/"); - entity_path_button_to( + instance_path_button_to_ex( ctx, query, store, ui, space_view_id, - &accumulated.clone().into(), + &InstancePath::entity_splat(accumulated.clone().into()), part.syntax_highlighted(ui.style()), + with_icon, ); } }) @@ -134,17 +140,19 @@ pub fn instance_path_icon( store: &re_data_store::DataStore, instance_path: &InstancePath, ) -> &'static re_ui::icons::Icon { - if instance_path.instance_key != InstanceKey::SPLAT { - return &re_ui::icons::ENTITY; - } - - if store - .all_components(timeline, &instance_path.entity_path) - .is_some() - { - &re_ui::icons::ENTITY + if instance_path.is_splat() { + // It is an entity path + if store + .all_components(timeline, &instance_path.entity_path) + .is_some() + { + &re_ui::icons::ENTITY + } else { + &re_ui::icons::ENTITY_EMPTY + } } else { - &re_ui::icons::ENTITY_EMPTY + // An instance path + &re_ui::icons::ENTITY } } @@ -190,6 +198,30 @@ pub fn instance_path_button_to( space_view_id: Option, instance_path: &InstancePath, text: impl Into, +) -> egui::Response { + instance_path_button_to_ex( + ctx, + query, + store, + ui, + space_view_id, + instance_path, + text, + true, + ) +} + +/// Show an instance id and make it selectable. +#[allow(clippy::too_many_arguments)] +fn instance_path_button_to_ex( + ctx: &ViewerContext<'_>, + query: &re_data_store::LatestAtQuery, + store: &re_data_store::DataStore, + ui: &mut egui::Ui, + space_view_id: Option, + instance_path: &InstancePath, + text: impl Into, + with_icon: bool, ) -> egui::Response { let item = if let Some(space_view_id) = space_view_id { Item::DataResult(space_view_id, instance_path.clone()) @@ -197,18 +229,21 @@ pub fn instance_path_button_to( Item::InstancePath(instance_path.clone()) }; - let response = ctx - .re_ui - .selectable_label_with_icon( + let response = if with_icon { + ctx.re_ui.selectable_label_with_icon( ui, instance_path_icon(&query.timeline, store, instance_path), text, ctx.selection().contains_item(&item), re_ui::LabelStyle::Normal, ) - .on_hover_ui(|ui| { - instance_hover_card_ui(ui, ctx, query, store, instance_path); - }); + } else { + ui.selectable_label(ctx.selection().contains_item(&item), text) + }; + + let response = response.on_hover_ui(|ui| { + instance_hover_card_ui(ui, ctx, query, store, instance_path); + }); cursor_interact_with_selectable(ctx, response, item) } @@ -222,28 +257,34 @@ pub fn instance_path_parts_buttons( space_view_id: Option, instance_path: &InstancePath, ) -> egui::Response { + let with_icon = false; // too much noise with icons in a path + ui.horizontal(|ui| { - ui.spacing_mut().item_spacing.x = 4.0; + ui.spacing_mut().item_spacing.x = 2.0; + + // Show one single icon up-front instead: + ui.add(instance_path_icon(&query.timeline, store, instance_path).as_image()); let mut accumulated = Vec::new(); for part in instance_path.entity_path.iter() { accumulated.push(part.clone()); ui.strong("/"); - entity_path_button_to( + instance_path_button_to_ex( ctx, query, store, ui, space_view_id, - &accumulated.clone().into(), + &InstancePath::entity_splat(accumulated.clone().into()), part.syntax_highlighted(ui.style()), + with_icon, ); } if !instance_path.instance_key.is_splat() { ui.strong("/"); - instance_path_button_to( + instance_path_button_to_ex( ctx, query, store, @@ -251,6 +292,7 @@ pub fn instance_path_parts_buttons( space_view_id, instance_path, instance_path.instance_key.syntax_highlighted(ui.style()), + with_icon, ); } }) diff --git a/crates/re_viewer/src/ui/selection_panel.rs b/crates/re_viewer/src/ui/selection_panel.rs index 9dd09ffad9e8..84136ab00b68 100644 --- a/crates/re_viewer/src/ui/selection_panel.rs +++ b/crates/re_viewer/src/ui/selection_panel.rs @@ -316,6 +316,7 @@ fn what_is_selected_ui( item_title_ui(ctx.re_ui, ui, &title, Some(&re_ui::icons::STORE), &id_str); } + Item::Container(container_id) => { if let Some(container_blueprint) = viewport.container(container_id) { item_title_ui( @@ -329,6 +330,7 @@ fn what_is_selected_ui( ); } } + Item::ComponentPath(re_log_types::ComponentPath { entity_path, component_name, @@ -354,6 +356,7 @@ fn what_is_selected_ui( list_existing_data_blueprints(ui, ctx, &entity_path.clone().into(), viewport); } + Item::SpaceView(space_view_id) => { if let Some(space_view) = viewport.space_view(space_view_id) { let space_view_class = space_view.class(ctx.space_view_class_registry); @@ -381,20 +384,10 @@ fn what_is_selected_ui( .on_hover_text(hover_text); } } - Item::InstancePath(instance_path) => { - let is_instance = !instance_path.instance_key.is_splat(); + Item::InstancePath(instance_path) => { let typ = item.kind(); - - let (query, store) = - guess_query_and_store_for_selected_entity(ctx, &instance_path.entity_path); - let name = instance_path.syntax_highlighted(ui.style()); - let parent = if is_instance { - Some(instance_path.entity_path.clone()) - } else { - instance_path.entity_path.parent() - }; item_title_ui( ctx.re_ui, @@ -404,10 +397,18 @@ fn what_is_selected_ui( &format!("{typ} '{instance_path}'"), ); + let is_instance = !instance_path.instance_key.is_splat(); + let parent = if is_instance { + Some(instance_path.entity_path.clone()) + } else { + instance_path.entity_path.parent() + }; if let Some(parent) = parent { if !parent.is_root() { + let (query, store) = + guess_query_and_store_for_selected_entity(ctx, &instance_path.entity_path); ui.horizontal(|ui| { - ui.label("path"); + ui.label("Parent"); item_ui::entity_path_parts_buttons(ctx, &query, store, ui, None, &parent); }); } @@ -417,21 +418,10 @@ fn what_is_selected_ui( } Item::DataResult(space_view_id, instance_path) => { - let is_instance = !instance_path.instance_key.is_splat(); - - let typ = item.kind(); - - let (query, store) = - guess_query_and_store_for_selected_entity(ctx, &instance_path.entity_path); - let name = instance_path.syntax_highlighted(ui.style()); - let parent = if is_instance { - Some(instance_path.entity_path.clone()) - } else { - instance_path.entity_path.parent() - }; if let Some(space_view) = viewport.space_view(space_view_id) { + let typ = item.kind(); item_title_ui( ctx.re_ui, ui, @@ -443,10 +433,21 @@ fn what_is_selected_ui( ), ); + let is_instance = !instance_path.instance_key.is_splat(); + let parent = if is_instance { + Some(instance_path.entity_path.clone()) + } else { + instance_path.entity_path.parent() + }; if let Some(parent) = parent { if !parent.is_root() { ui.horizontal(|ui| { - ui.label("path"); + let (query, store) = guess_query_and_store_for_selected_entity( + ctx, + &instance_path.entity_path, + ); + + ui.label("Parent"); item_ui::entity_path_parts_buttons( ctx, &query, From be1fbcc8d778481a1fd9a90f78fd38c34e24df02 Mon Sep 17 00:00:00 2001 From: Antoine Beyeler <49431240+abey79@users.noreply.github.com> Date: Mon, 18 Mar 2024 14:22:49 +0100 Subject: [PATCH 28/50] Build wheels for Linux ARM64 (#5511) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ### What Build linux-aarch64 wheels (with manylinux_2_31) and fixes the C and CLI builds to bring the min required glibc version to 2.31. **Note**: cursory inspection indicates that the _actual_ min glibc version 2.29. However, we don't formally test that. The only test is done by `maturin` on our wheels, against the `manylinux_2_31` standard. Amongst other things, this PR: - updates our ci docker image to be compatible with aarch64 (#5543 – thanks @jleibs) - remove all instances of double GCS authentication (our setup-rust action auth to GCS, so an explicit auth isn't necessary, _and_ would break cleanup in linux-arm/cli build workflow—why there only is unclear) - use it for all linux-aarch64 builds - fixes `pixi.toml` for linux-aarch64 compatibility - bumps pixi to 0.16.1 everywhere in the ci - adds a manual trigger for building wheels - (mostly) unifies the target naming scheme #### Related - Follow-up to: - #5489 - #5503 - Closes #4136 - Fixes #5507 #### Further work - ~~support lower glibc version: https://github.com/rerun-io/rerun/issues/5512~~ - test more wheels: https://github.com/rerun-io/rerun/issues/5525 ### Checklist * [x] I have read and agree to [Contributor Guide](https://github.com/rerun-io/rerun/blob/main/CONTRIBUTING.md) and the [Code of Conduct](https://github.com/rerun-io/rerun/blob/main/CODE_OF_CONDUCT.md) * [x] I've included a screenshot or gif (if applicable) * [x] I have tested the web demo (if applicable): * Using newly built examples: [app.rerun.io](https://app.rerun.io/pr/5511/index.html) * Using examples from latest `main` build: [app.rerun.io](https://app.rerun.io/pr/5511/index.html?manifest_url=https://app.rerun.io/version/main/examples_manifest.json) * Using full set of examples from `nightly` build: [app.rerun.io](https://app.rerun.io/pr/5511/index.html?manifest_url=https://app.rerun.io/version/nightly/examples_manifest.json) * [x] The PR title and labels are set such as to maximize their usefulness for the next release's CHANGELOG * [x] If applicable, add a new check to the [release checklist](https://github.com/rerun-io/rerun/blob/main/tests/python/release_checklist)! - [PR Build Summary](https://build.rerun.io/pr/5511) - [Docs preview](https://rerun.io/preview/c029b411730d035b9babdba3f9721dbe2905196b/docs) - [Examples preview](https://rerun.io/preview/c029b411730d035b9babdba3f9721dbe2905196b/examples) - [Recent benchmark results](https://build.rerun.io/graphs/crates.html) - [Wasm size tracking](https://build.rerun.io/graphs/sizes.html) --------- Co-authored-by: Jeremy Leibs --- .github/workflows/auto_release_crates.yml | 2 +- .github/workflows/contrib_checks.yml | 16 +- .github/workflows/contrib_rerun_py.yml | 4 +- .github/workflows/nightly.yml | 6 +- .github/workflows/on_pull_request.yml | 14 +- .github/workflows/on_push_main.yml | 106 +- .github/workflows/release.yml | 4 +- .github/workflows/reusable_bench.yml | 2 +- .../reusable_build_and_upload_rerun_c.yml | 15 +- .../reusable_build_and_upload_rerun_cli.yml | 32 +- .../reusable_build_and_upload_wheels.yml | 31 +- .github/workflows/reusable_build_examples.yml | 2 +- .github/workflows/reusable_build_js.yml | 4 +- .github/workflows/reusable_build_web.yml | 6 +- .../reusable_bundle_and_upload_rerun_cpp.yml | 2 +- .github/workflows/reusable_checks.yml | 6 +- .github/workflows/reusable_checks_cpp.yml | 2 +- .github/workflows/reusable_checks_rust.yml | 34 +- .github/workflows/reusable_deploy_docs.yml | 4 +- .github/workflows/reusable_publish_js.yml | 2 +- .github/workflows/reusable_publish_web.yml | 2 +- .github/workflows/reusable_publish_wheels.yml | 87 +- .github/workflows/reusable_release_crates.yml | 2 +- .github/workflows/reusable_run_notebook.yml | 4 +- .github/workflows/reusable_test_wheels.yml | 24 +- ci_docker/Dockerfile | 20 +- ci_docker/publish.sh | 19 +- pixi.lock | 7552 +++++++++++++++-- pixi.toml | 37 +- 29 files changed, 6974 insertions(+), 1067 deletions(-) diff --git a/.github/workflows/auto_release_crates.yml b/.github/workflows/auto_release_crates.yml index 0e73b9c6bc30..a1b7d814ff89 100644 --- a/.github/workflows/auto_release_crates.yml +++ b/.github/workflows/auto_release_crates.yml @@ -22,7 +22,7 @@ jobs: - uses: prefix-dev/setup-pixi@v0.4.1 with: - pixi-version: v0.13.0 + pixi-version: v0.16.1 - name: Install dependencies shell: bash diff --git a/.github/workflows/contrib_checks.yml b/.github/workflows/contrib_checks.yml index 46cf95ca72d0..74d6d97b8594 100644 --- a/.github/workflows/contrib_checks.yml +++ b/.github/workflows/contrib_checks.yml @@ -86,7 +86,7 @@ jobs: name: Check if running codegen would produce any changes runs-on: ubuntu-latest-16-cores container: - image: rerunio/ci_docker:0.11.0 + image: rerunio/ci_docker:0.12.0 steps: # Note: We explicitly don't override `ref` here. We need to see if changes would be made # in a context where we have merged with main. Otherwise we might miss changes such as one @@ -101,7 +101,7 @@ jobs: - uses: prefix-dev/setup-pixi@v0.4.1 with: - pixi-version: v0.13.0 + pixi-version: v0.16.1 - name: Codegen check shell: bash @@ -112,7 +112,7 @@ jobs: name: Rust lints (fmt, check, cranky, tests, doc) runs-on: ubuntu-latest-16-cores container: - image: rerunio/ci_docker:0.11.0 + image: rerunio/ci_docker:0.12.0 steps: - uses: actions/checkout@v4 @@ -183,7 +183,7 @@ jobs: name: Check Rust web build (wasm32 + wasm-bindgen) runs-on: ubuntu-latest-16-cores container: - image: rerunio/ci_docker:0.11.0 + image: rerunio/ci_docker:0.12.0 steps: - uses: actions/checkout@v4 @@ -212,7 +212,7 @@ jobs: - uses: prefix-dev/setup-pixi@v0.4.1 with: - pixi-version: v0.13.0 + pixi-version: v0.16.1 - run: pixi run lint-taplo shell: bash @@ -268,7 +268,7 @@ jobs: name: Cargo Deny runs-on: ubuntu-latest container: - image: rerunio/ci_docker:0.11.0 + image: rerunio/ci_docker:0.12.0 steps: - uses: actions/checkout@v4 @@ -294,13 +294,13 @@ jobs: name: C++ tests runs-on: ubuntu-latest container: - image: rerunio/ci_docker:0.11.0 + image: rerunio/ci_docker:0.12.0 steps: - uses: actions/checkout@v4 - uses: prefix-dev/setup-pixi@v0.4.1 with: - pixi-version: v0.13.0 + pixi-version: v0.16.1 # TODO(emilk): make this work somehow. Right now this just results in # > Compiler: GNU 12.3.0 (/__w/rerun/rerun/.pixi/env/bin/x86_64-conda-linux-gnu-c++) diff --git a/.github/workflows/contrib_rerun_py.yml b/.github/workflows/contrib_rerun_py.yml index f0b7b1517c68..e0f0d65224c1 100644 --- a/.github/workflows/contrib_rerun_py.yml +++ b/.github/workflows/contrib_rerun_py.yml @@ -36,13 +36,13 @@ jobs: name: Build Wheels runs-on: ubuntu-latest-16-cores container: - image: rerunio/ci_docker:0.11.0 + image: rerunio/ci_docker:0.12.0 steps: - uses: actions/checkout@v4 - uses: prefix-dev/setup-pixi@v0.4.1 with: - pixi-version: v0.13.0 + pixi-version: v0.16.1 # These should already be in the docker container, but run for good measure. A no-op install # should be fast, and this way things don't break if we add new packages without rebuilding diff --git a/.github/workflows/nightly.yml b/.github/workflows/nightly.yml index 22c1365da432..5e25573628e2 100644 --- a/.github/workflows/nightly.yml +++ b/.github/workflows/nightly.yml @@ -53,8 +53,8 @@ jobs: uses: ./.github/workflows/reusable_build_and_upload_wheels.yml with: CONCURRENCY: nightly-linux - PLATFORM: linux - WHEEL_ARTIFACT_NAME: linux-wheel + PLATFORM: linux-x64 + WHEEL_ARTIFACT_NAME: linux-x64-wheel MODE: "pr" secrets: inherit @@ -65,7 +65,7 @@ jobs: with: CONCURRENCY: nightly CHANNEL: nightly - WHEEL_ARTIFACT_NAME: linux-wheel + WHEEL_ARTIFACT_NAME: linux-x64-wheel secrets: inherit upload-examples: diff --git a/.github/workflows/on_pull_request.yml b/.github/workflows/on_pull_request.yml index 652f69707afe..451fd6a47f43 100644 --- a/.github/workflows/on_pull_request.yml +++ b/.github/workflows/on_pull_request.yml @@ -76,6 +76,8 @@ jobs: FULL: "true" secrets: inherit + # Build and test a single wheel to limit CI cost. We use linux-x64 because it's fast. linux-arm64 would also be a good + # choice, but reusable_test_wheels.yml is broken for that target (https://github.com/rerun-io/rerun/issues/5525) min-wheel-build: name: "Minimum Wheel Build" if: github.event.pull_request.head.repo.owner.login == 'rerun-io' @@ -83,8 +85,8 @@ jobs: with: CONCURRENCY: pr-${{ github.event.pull_request.number }} MODE: "pr" - PLATFORM: linux - WHEEL_ARTIFACT_NAME: "linux-wheel-fast" + PLATFORM: linux-x64 + WHEEL_ARTIFACT_NAME: "linux-x64-wheel-fast" secrets: inherit min-wheel-test: @@ -94,8 +96,8 @@ jobs: uses: ./.github/workflows/reusable_test_wheels.yml with: CONCURRENCY: pr-${{ github.event.pull_request.number }} - PLATFORM: linux - WHEEL_ARTIFACT_NAME: "linux-wheel-fast" + PLATFORM: linux-x64 + WHEEL_ARTIFACT_NAME: "linux-x64-wheel-fast" secrets: inherit build-js: @@ -133,7 +135,7 @@ jobs: with: CONCURRENCY: pr-${{ github.event.pull_request.number }} CHANNEL: main - WHEEL_ARTIFACT_NAME: linux-wheel-fast + WHEEL_ARTIFACT_NAME: linux-x64-wheel-fast secrets: inherit track-sizes: @@ -163,7 +165,7 @@ jobs: uses: ./.github/workflows/reusable_run_notebook.yml with: CONCURRENCY: pr-${{ github.event.pull_request.number }} - WHEEL_ARTIFACT_NAME: linux-wheel-fast + WHEEL_ARTIFACT_NAME: linux-x64-wheel-fast secrets: inherit save-pr-summary: diff --git a/.github/workflows/on_push_main.yml b/.github/workflows/on_push_main.yml index 9e29139a2863..da7500ae4568 100644 --- a/.github/workflows/on_push_main.yml +++ b/.github/workflows/on_push_main.yml @@ -209,78 +209,90 @@ jobs: # ----------------------------------------------------------------------------------- - build-wheel-linux: + build-wheel-linux-arm64: needs: [checks] - name: "Linux: Build & Upload Wheels" + name: "Linux-arm64: Build & Upload Wheels" uses: ./.github/workflows/reusable_build_and_upload_wheels.yml with: - CONCURRENCY: push-linux-${{ github.ref_name }} - PLATFORM: linux - WHEEL_ARTIFACT_NAME: linux-wheel + CONCURRENCY: push-linux-arm64-${{ github.ref_name }} + PLATFORM: linux-arm64 + WHEEL_ARTIFACT_NAME: linux-arm64-wheel + MODE: "pypi" + secrets: inherit + + build-wheel-linux-x64: + needs: [checks] + name: "Linux-x64: Build & Upload Wheels" + uses: ./.github/workflows/reusable_build_and_upload_wheels.yml + with: + CONCURRENCY: push-linux-x64-${{ github.ref_name }} + PLATFORM: linux-x64 + WHEEL_ARTIFACT_NAME: linux-x64-wheel MODE: "pypi" secrets: inherit - build-wheel-windows: + build-wheel-windows-x64: needs: [checks] - name: "Windows: Build & Upload Wheels" + name: "Windows-x64: Build & Upload Wheels" uses: ./.github/workflows/reusable_build_and_upload_wheels.yml with: - CONCURRENCY: push-windows-${{ github.ref_name }} - PLATFORM: windows - WHEEL_ARTIFACT_NAME: windows-wheel + CONCURRENCY: push-windows-x64-${{ github.ref_name }} + PLATFORM: windows-x64 + WHEEL_ARTIFACT_NAME: windows-x64-wheel MODE: "pypi" secrets: inherit - build-wheel-macos-arm: + build-wheel-macos-arm64: needs: [checks] - name: "Macos-Arm: Build & Upload Wheels" + name: "Macos-arm64: Build & Upload Wheels" uses: ./.github/workflows/reusable_build_and_upload_wheels.yml with: - CONCURRENCY: push-macos-arm-${{ github.ref_name }} - PLATFORM: macos-arm - WHEEL_ARTIFACT_NAME: macos-arm-wheel + CONCURRENCY: push-macos-arm64-${{ github.ref_name }} + PLATFORM: macos-arm64 + WHEEL_ARTIFACT_NAME: macos-arm64-wheel MODE: "pypi" secrets: inherit - build-wheel-macos-intel: + build-wheel-macos-x64: needs: [checks] - name: "Macos-Intel: Build & Upload Wheels" + name: "Macos-x64: Build & Upload Wheels" uses: ./.github/workflows/reusable_build_and_upload_wheels.yml with: - CONCURRENCY: push-macos-intel-${{ github.ref_name }} - PLATFORM: macos-intel - WHEEL_ARTIFACT_NAME: "macos-intel-wheel" + CONCURRENCY: push-macos-x64-${{ github.ref_name }} + PLATFORM: macos-x64 + WHEEL_ARTIFACT_NAME: "macos-x64-wheel" MODE: "pypi" secrets: inherit - test-wheel-linux: - needs: [checks, build-wheel-linux] - name: "Linux: Test Wheels" + test-wheel-linux-x64: + needs: [checks, build-wheel-linux-x64] + name: "Linux-x64: Test Wheels" uses: ./.github/workflows/reusable_test_wheels.yml with: - CONCURRENCY: push-linux-${{ github.ref_name }} - PLATFORM: linux - WHEEL_ARTIFACT_NAME: linux-wheel + CONCURRENCY: push-linux-x64-${{ github.ref_name }} + PLATFORM: linux-x64 + WHEEL_ARTIFACT_NAME: linux-x64-wheel secrets: inherit - test-wheel-windows: - needs: [checks, build-wheel-windows] - name: "Windows: Test Wheels" + test-wheel-windows-x64: + needs: [checks, build-wheel-windows-x64] + name: "Windows-x64: Test Wheels" uses: ./.github/workflows/reusable_test_wheels.yml with: - CONCURRENCY: push-windows-${{ github.ref_name }} - PLATFORM: windows - WHEEL_ARTIFACT_NAME: windows-wheel + CONCURRENCY: push-windows-x64-${{ github.ref_name }} + PLATFORM: windows-x64 + WHEEL_ARTIFACT_NAME: windows-x64-wheel secrets: inherit generate-pip-index: name: "Generate Pip Index" needs: [ - build-wheel-linux, - build-wheel-windows, - build-wheel-macos-arm, - build-wheel-macos-intel, + build-wheel-linux-arm64, + build-wheel-linux-x64, + build-wheel-macos-arm64, + build-wheel-macos-x64, + build-wheel-windows-x64, ] uses: ./.github/workflows/reusable_pip_index.yml with: @@ -291,10 +303,10 @@ jobs: name: "Bundle and upload rerun_cpp_sdk.zip" needs: [ - build-rerun_c-and-upload-linux-x64, build-rerun_c-and-upload-linux-arm64, - build-rerun_c-and-upload-macos-x64, + build-rerun_c-and-upload-linux-x64, build-rerun_c-and-upload-macos-arm64, + build-rerun_c-and-upload-macos-x64, build-rerun_c-and-upload-windows-x64, ] uses: ./.github/workflows/reusable_bundle_and_upload_rerun_cpp.yml @@ -307,19 +319,19 @@ jobs: cancel-in-progress: true needs: [ - upload-web, - generate-pip-index, - build-rerun_c-and-upload-linux-x64, - build-rerun_c-and-upload-linux-arm64, - build-rerun_c-and-upload-macos-x64, - build-rerun_c-and-upload-macos-arm64, - build-rerun_c-and-upload-windows-x64, - build-rerun-cli-and-upload-linux-x64, build-rerun-cli-and-upload-linux-arm64, - build-rerun-cli-and-upload-macos-x64, + build-rerun-cli-and-upload-linux-x64, build-rerun-cli-and-upload-macos-arm64, + build-rerun-cli-and-upload-macos-x64, build-rerun-cli-and-upload-windows-x64, + build-rerun_c-and-upload-linux-arm64, + build-rerun_c-and-upload-linux-x64, + build-rerun_c-and-upload-macos-arm64, + build-rerun_c-and-upload-macos-x64, + build-rerun_c-and-upload-windows-x64, bundle-and-upload-rerun_cpp, + generate-pip-index, + upload-web, ] runs-on: "ubuntu-latest" steps: diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 3404cf7663e0..c75eeddc2c1f 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -90,7 +90,7 @@ jobs: - uses: prefix-dev/setup-pixi@v0.4.1 with: - pixi-version: v0.13.0 + pixi-version: v0.16.1 - name: Update crate versions id: versioning @@ -391,7 +391,7 @@ jobs: - uses: prefix-dev/setup-pixi@v0.4.1 with: - pixi-version: v0.13.0 + pixi-version: v0.16.1 - name: Install dependencies shell: bash diff --git a/.github/workflows/reusable_bench.yml b/.github/workflows/reusable_bench.yml index ccfb154c880d..7c6885a4c65b 100644 --- a/.github/workflows/reusable_bench.yml +++ b/.github/workflows/reusable_bench.yml @@ -52,7 +52,7 @@ jobs: runs-on: ubuntu-latest-16-cores container: - image: rerunio/ci_docker:0.11.0 + image: rerunio/ci_docker:0.12.0 steps: - uses: actions/checkout@v4 diff --git a/.github/workflows/reusable_build_and_upload_rerun_c.yml b/.github/workflows/reusable_build_and_upload_rerun_c.yml index ffb07202f703..04b2403ddd7e 100644 --- a/.github/workflows/reusable_build_and_upload_rerun_c.yml +++ b/.github/workflows/reusable_build_and_upload_rerun_c.yml @@ -76,13 +76,13 @@ jobs: linux-arm64) runner="buildjet-8vcpu-ubuntu-2204-arm" target="aarch64-unknown-linux-gnu" - container="null" + container="{'image': 'rerunio/ci_docker:0.12.0'}" lib_name="librerun_c.a" ;; linux-x64) runner="ubuntu-latest-16-cores" target="x86_64-unknown-linux-gnu" - container="{'image': 'rerunio/ci_docker:0.11.0'}" + container="{'image': 'rerunio/ci_docker:0.12.0'}" lib_name="librerun_c.a" ;; windows-x64) @@ -112,9 +112,12 @@ jobs: rs-build-rerun_c: name: Build rerun_c (${{ needs.set-config.outputs.RUNNER }}) + needs: [set-config] + runs-on: ${{ needs.set-config.outputs.RUNNER }} container: ${{ fromJson(needs.set-config.outputs.CONTAINER) }} + steps: - name: Show context shell: bash @@ -133,7 +136,7 @@ jobs: with: ref: ${{ inputs.RELEASE_COMMIT || ((github.event_name == 'pull_request' && github.event.pull_request.head.ref) || '') }} - - name: Set up Rust + - name: Set up Rust and Authenticate to GCS uses: ./.github/actions/setup-rust with: cache_key: "build-${{ inputs.PLATFORM }}" @@ -148,12 +151,6 @@ jobs: command: build args: --locked -p rerun_c --release --target ${{ needs.set-config.outputs.TARGET }} - - id: "auth" - uses: google-github-actions/auth@v1 - with: - workload_identity_provider: ${{ secrets.GOOGLE_WORKLOAD_IDENTITY_PROVIDER }} - service_account: ${{ secrets.GOOGLE_SERVICE_ACCOUNT }} - - name: Get sha id: get-sha shell: bash diff --git a/.github/workflows/reusable_build_and_upload_rerun_cli.yml b/.github/workflows/reusable_build_and_upload_rerun_cli.yml index 3c73ab51c177..056670dd6eef 100644 --- a/.github/workflows/reusable_build_and_upload_rerun_cli.yml +++ b/.github/workflows/reusable_build_and_upload_rerun_cli.yml @@ -75,15 +75,15 @@ jobs: run: | case "${{ inputs.PLATFORM }}" in linux-arm64) - runner="buildjet-8vcpu-ubuntu-2204-arm" - target="aarch64-unknown-linux-gnu" - container="null" - bin_name="rerun" - ;; + runner="buildjet-8vcpu-ubuntu-2204-arm" + target="aarch64-unknown-linux-gnu" + container="{'image': 'rerunio/ci_docker:0.12.0'}" + bin_name="rerun" + ;; linux-x64) runner="ubuntu-latest-16-cores" target="x86_64-unknown-linux-gnu" - container="{'image': 'rerunio/ci_docker:0.11.0'}" + container="{'image': 'rerunio/ci_docker:0.12.0'}" bin_name="rerun" ;; windows-x64) @@ -137,7 +137,7 @@ jobs: with: ref: ${{ inputs.RELEASE_COMMIT || ((github.event_name == 'pull_request' && github.event.pull_request.head.ref) || '') }} - - name: Set up Rust + - name: Set up Rust and Authenticate to GCS uses: ./.github/actions/setup-rust with: cache_key: "build-${{ inputs.PLATFORM }}" @@ -147,24 +147,14 @@ jobs: targets: ${{ needs.set-config.outputs.TARGET }} - uses: prefix-dev/setup-pixi@v0.4.1 - if: ${{ inputs.PLATFORM != 'linux-arm64' }} # TODO(#5507): see below with: - pixi-version: v0.13.0 + pixi-version: v0.16.1 - name: Build web-viewer (release) - if: ${{ inputs.PLATFORM != 'linux-arm64' }} # TODO(#5507): see below shell: bash run: | pixi run cargo run --locked -p re_build_web_viewer -- --release - # TODO(#5507): supress this workaround when pixi dependencies are available on linux-arm64 - - name: Build web-viewer (release, Linux ARM64) - if: ${{ inputs.PLATFORM == 'linux-arm64' }} - shell: bash - run: | - sudo apt-get install binaryen - cargo run --locked -p re_build_web_viewer -- --release - # This does not run in the pixi environment, doing so # causes it to select the wrong compiler on macos-arm64 - name: Build rerun-cli @@ -181,12 +171,6 @@ jobs: --release \ --target ${{ needs.set-config.outputs.TARGET }} - - id: "auth" - uses: google-github-actions/auth@v1 - with: - workload_identity_provider: ${{ secrets.GOOGLE_WORKLOAD_IDENTITY_PROVIDER }} - service_account: ${{ secrets.GOOGLE_SERVICE_ACCOUNT }} - - name: Get sha id: get-sha shell: bash diff --git a/.github/workflows/reusable_build_and_upload_wheels.yml b/.github/workflows/reusable_build_and_upload_wheels.yml index 137e39c9895c..f5dee2423b65 100644 --- a/.github/workflows/reusable_build_and_upload_wheels.yml +++ b/.github/workflows/reusable_build_and_upload_wheels.yml @@ -86,42 +86,54 @@ jobs: set-config: name: Set Config (${{ inputs.PLATFORM }}) - runs-on: ubuntu-latest-16-cores + runs-on: ubuntu-latest outputs: RUNNER: ${{ steps.set-config.outputs.runner }} TARGET: ${{ steps.set-config.outputs.target }} CONTAINER: ${{ steps.set-config.outputs.container }} + COMPAT: ${{ steps.set-config.outputs.compat }} steps: - name: Set runner and target based on platform id: set-config shell: bash run: | case "${{ inputs.PLATFORM }}" in - linux) + linux-arm64) + runner="buildjet-8vcpu-ubuntu-2204-arm" + target="aarch64-unknown-linux-gnu" + container="{'image': 'rerunio/ci_docker:0.12.0'}" + compat="manylinux_2_31" + ;; + linux-x64) runner="ubuntu-latest-16-cores" target="x86_64-unknown-linux-gnu" - container="{'image': 'rerunio/ci_docker:0.11.0'}" + compat="manylinux_2_31" + container="{'image': 'rerunio/ci_docker:0.12.0'}" ;; - windows) + windows-x64) runner="windows-latest-8-cores" target="x86_64-pc-windows-msvc" container="null" + compat="manylinux_2_31" ;; - macos-arm) + macos-arm64) runner="macos-latest-large" # See https://github.blog/2023-10-02-introducing-the-new-apple-silicon-powered-m1-macos-larger-runner-for-github-actions/ target="aarch64-apple-darwin" container="null" + compat="manylinux_2_31" ;; - macos-intel) + macos-x64) runner="macos-latest-large" # See https://github.blog/2023-10-02-introducing-the-new-apple-silicon-powered-m1-macos-larger-runner-for-github-actions/ target="x86_64-apple-darwin" container="null" + compat="manylinux_2_31" ;; *) echo "Invalid platform" && exit 1 ;; esac echo "runner=$runner" >> "$GITHUB_OUTPUT" echo "target=$target" >> "$GITHUB_OUTPUT" echo "container=$container" >> "$GITHUB_OUTPUT" + echo "compat=$compat" >> "$GITHUB_OUTPUT" # --------------------------------------------------------------------------- @@ -151,7 +163,7 @@ jobs: with: ref: ${{ inputs.RELEASE_COMMIT || ((github.event_name == 'pull_request' && github.event.pull_request.head.ref) || '') }} - - name: Set up Rust + - name: Set up Rust and Authenticate to GCS uses: ./.github/actions/setup-rust with: cache_key: "build-${{ inputs.PLATFORM }}" @@ -159,10 +171,11 @@ jobs: save_cache: false workload_identity_provider: ${{ secrets.GOOGLE_WORKLOAD_IDENTITY_PROVIDER }} service_account: ${{ secrets.GOOGLE_SERVICE_ACCOUNT }} + targets: ${{ needs.set-config.outputs.TARGET }} - uses: prefix-dev/setup-pixi@v0.4.1 with: - pixi-version: v0.13.0 + pixi-version: v0.16.1 - name: Install dependencies shell: bash @@ -185,7 +198,7 @@ jobs: --mode ${{ inputs.MODE }} \ --target ${{ needs.set-config.outputs.TARGET }} \ --dir commit/${{ steps.get-sha.outputs.sha }}/wheels \ - --compat manylinux_2_31 + --compat ${{ needs.set-config.outputs.COMPAT }} - name: Save wheel artifact if: ${{ inputs.WHEEL_ARTIFACT_NAME != '' }} diff --git a/.github/workflows/reusable_build_examples.yml b/.github/workflows/reusable_build_examples.yml index 2aa2df31bdd6..108dde0ed807 100644 --- a/.github/workflows/reusable_build_examples.yml +++ b/.github/workflows/reusable_build_examples.yml @@ -50,7 +50,7 @@ jobs: - uses: prefix-dev/setup-pixi@v0.4.1 with: - pixi-version: v0.13.0 + pixi-version: v0.16.1 - name: Download Wheel uses: actions/download-artifact@v3 diff --git a/.github/workflows/reusable_build_js.yml b/.github/workflows/reusable_build_js.yml index 2ccad2fb1f84..b64f2e356a5b 100644 --- a/.github/workflows/reusable_build_js.yml +++ b/.github/workflows/reusable_build_js.yml @@ -30,7 +30,7 @@ jobs: runs-on: ubuntu-latest-16-cores container: - image: rerunio/ci_docker:0.11.0 + image: rerunio/ci_docker:0.12.0 steps: - uses: actions/checkout@v4 @@ -55,7 +55,7 @@ jobs: - uses: prefix-dev/setup-pixi@v0.3.0 with: - pixi-version: v0.13.0 + pixi-version: v0.16.1 - name: Install dependencies shell: bash diff --git a/.github/workflows/reusable_build_web.yml b/.github/workflows/reusable_build_web.yml index 85363ba2c934..622561dd96c7 100644 --- a/.github/workflows/reusable_build_web.yml +++ b/.github/workflows/reusable_build_web.yml @@ -37,7 +37,7 @@ jobs: runs-on: ubuntu-latest-16-cores container: - image: rerunio/ci_docker:0.11.0 + image: rerunio/ci_docker:0.12.0 steps: - uses: actions/checkout@v4 @@ -55,7 +55,7 @@ jobs: - uses: prefix-dev/setup-pixi@v0.4.1 with: - pixi-version: v0.13.0 + pixi-version: v0.16.1 - name: Build web-viewer (release) shell: bash @@ -63,7 +63,7 @@ jobs: if [ ${{ inputs.CHANNEL }} = "nightly" ]; then export DEFAULT_EXAMPLES_MANIFEST_URL="https://app.rerun.io/version/nightly/examples_manifest.json" fi - cargo run --locked -p re_build_web_viewer -- --release + pixi run cargo run --locked -p re_build_web_viewer -- --release # We build a single manifest pointing to the `commit` # All the `pr`, `main`, release tag, etc. variants will always just point to the resolved commit diff --git a/.github/workflows/reusable_bundle_and_upload_rerun_cpp.yml b/.github/workflows/reusable_bundle_and_upload_rerun_cpp.yml index 2eb69d79e16e..33df3acec442 100644 --- a/.github/workflows/reusable_bundle_and_upload_rerun_cpp.yml +++ b/.github/workflows/reusable_bundle_and_upload_rerun_cpp.yml @@ -22,7 +22,7 @@ jobs: runs-on: ubuntu-latest # Need container for arrow dependency. container: - image: rerunio/ci_docker:0.11.0 + image: rerunio/ci_docker:0.12.0 steps: - name: Checkout repository diff --git a/.github/workflows/reusable_checks.yml b/.github/workflows/reusable_checks.yml index e0681fcca58f..823dc755da7c 100644 --- a/.github/workflows/reusable_checks.yml +++ b/.github/workflows/reusable_checks.yml @@ -102,7 +102,7 @@ jobs: name: Check if running codegen would produce any changes runs-on: ubuntu-latest-16-cores container: - image: rerunio/ci_docker:0.11.0 + image: rerunio/ci_docker:0.12.0 env: RUSTC_WRAPPER: "sccache" steps: @@ -127,7 +127,7 @@ jobs: - uses: prefix-dev/setup-pixi@v0.4.1 with: - pixi-version: v0.13.0 + pixi-version: v0.16.1 - name: Codegen check shell: bash @@ -208,7 +208,7 @@ jobs: - uses: prefix-dev/setup-pixi@v0.4.1 with: - pixi-version: v0.13.0 + pixi-version: v0.16.1 - name: prettier --check run: pixi run misc-fmt-check diff --git a/.github/workflows/reusable_checks_cpp.yml b/.github/workflows/reusable_checks_cpp.yml index ab01d5279e1e..d98471e91e36 100644 --- a/.github/workflows/reusable_checks_cpp.yml +++ b/.github/workflows/reusable_checks_cpp.yml @@ -73,7 +73,7 @@ jobs: - uses: prefix-dev/setup-pixi@v0.4.1 with: - pixi-version: v0.13.0 + pixi-version: v0.16.1 - name: Set up Rust uses: ./.github/actions/setup-rust diff --git a/.github/workflows/reusable_checks_rust.yml b/.github/workflows/reusable_checks_rust.yml index 42a2fcc4b1ae..3b4ce9353576 100644 --- a/.github/workflows/reusable_checks_rust.yml +++ b/.github/workflows/reusable_checks_rust.yml @@ -39,7 +39,7 @@ jobs: name: Rust lints (fmt, check, cranky, tests, doc) runs-on: ubuntu-latest-16-cores container: - image: rerunio/ci_docker:0.11.0 + image: rerunio/ci_docker:0.12.0 env: RUSTC_WRAPPER: "sccache" steps: @@ -55,13 +55,16 @@ jobs: workload_identity_provider: ${{ secrets.GOOGLE_WORKLOAD_IDENTITY_PROVIDER }} service_account: ${{ secrets.GOOGLE_SERVICE_ACCOUNT }} + - uses: prefix-dev/setup-pixi@v0.4.1 + with: + pixi-version: v0.16.1 + # We need to build the web viewer for `rust_checks.py` to succeed. + # We build in release so that we can reuse the results for actual publishing, if necessary - name: Build web-viewer (release) - uses: actions-rs/cargo@v1 - with: - command: run - # We build in release so that we can reuse the results for actual publishing, if necessary - args: --locked -p re_build_web_viewer -- --release + shell: bash + run: | + pixi run cargo run --locked -p re_build_web_viewer -- --release - name: Rust checks & tests if: ${{ !inputs.ALL_CHECKS }} @@ -77,7 +80,7 @@ jobs: name: Check Rust web build (wasm32 + wasm-bindgen) runs-on: ubuntu-latest-16-cores container: - image: rerunio/ci_docker:0.11.0 + image: rerunio/ci_docker:0.12.0 env: RUSTC_WRAPPER: "sccache" steps: @@ -103,12 +106,15 @@ jobs: command: check args: --locked --target wasm32-unknown-unknown --target-dir target_wasm -p re_renderer --examples - - name: Build web-viewer (release) - uses: actions-rs/cargo@v1 + - uses: prefix-dev/setup-pixi@v0.4.1 with: - command: run - # We build in release so that we can reuse the results for actual publishing, if necessary - args: --locked -p re_build_web_viewer -- --release + pixi-version: v0.16.1 + + # We build in release so that we can reuse the results for actual publishing, if necessary + - name: Build web-viewer (release) + shell: bash + run: | + pixi run cargo run --locked -p re_build_web_viewer -- --release # --------------------------------------------------------------------------- @@ -122,7 +128,7 @@ jobs: - uses: prefix-dev/setup-pixi@v0.4.1 with: - pixi-version: v0.13.0 + pixi-version: v0.16.1 - name: Taplo check shell: bash @@ -135,7 +141,7 @@ jobs: name: Cargo Deny runs-on: ubuntu-latest container: - image: rerunio/ci_docker:0.11.0 + image: rerunio/ci_docker:0.12.0 steps: - uses: actions/checkout@v4 with: diff --git a/.github/workflows/reusable_deploy_docs.yml b/.github/workflows/reusable_deploy_docs.yml index 7536ec162887..1f251647c174 100644 --- a/.github/workflows/reusable_deploy_docs.yml +++ b/.github/workflows/reusable_deploy_docs.yml @@ -116,7 +116,7 @@ jobs: needs: [py-deploy-docs] runs-on: ubuntu-latest-16-cores container: - image: rerunio/ci_docker:0.11.0 + image: rerunio/ci_docker:0.12.0 steps: - name: Show context shell: bash @@ -206,7 +206,7 @@ jobs: - uses: prefix-dev/setup-pixi@v0.4.1 with: - pixi-version: v0.13.0 + pixi-version: v0.16.1 - name: Doxygen C++ docs shell: bash diff --git a/.github/workflows/reusable_publish_js.yml b/.github/workflows/reusable_publish_js.yml index a9005fe12f1b..711f5c923225 100644 --- a/.github/workflows/reusable_publish_js.yml +++ b/.github/workflows/reusable_publish_js.yml @@ -63,7 +63,7 @@ jobs: - uses: prefix-dev/setup-pixi@v0.3.0 with: - pixi-version: v0.13.0 + pixi-version: v0.16.1 - name: Publish packages env: diff --git a/.github/workflows/reusable_publish_web.yml b/.github/workflows/reusable_publish_web.yml index 24a9f76b5f56..1d0ed09555fc 100644 --- a/.github/workflows/reusable_publish_web.yml +++ b/.github/workflows/reusable_publish_web.yml @@ -74,7 +74,7 @@ jobs: - uses: prefix-dev/setup-pixi@v0.4.1 with: - pixi-version: v0.13.0 + pixi-version: v0.16.1 # built by `reusable_build_and_publish_wheels` - name: Download Wheel diff --git a/.github/workflows/reusable_publish_wheels.yml b/.github/workflows/reusable_publish_wheels.yml index b3c7f4427c05..9f6512426bae 100644 --- a/.github/workflows/reusable_publish_wheels.yml +++ b/.github/workflows/reusable_publish_wheels.yml @@ -15,10 +15,6 @@ on: description: "Release Version Number (Must match Cargo.toml)" type: string required: true - linux-wheel-name: - description: "Name of the wheel built for linux" - type: string - required: true release-commit: description: "Which commit to build+publish" type: string @@ -44,81 +40,100 @@ jobs: ## Build - build-linux: - name: "Linux: Build Wheels" + build-linux-x64: + name: "Linux-x64: Build Wheels" + needs: [get-commit-sha] + uses: ./.github/workflows/reusable_build_and_upload_wheels.yml + with: + CONCURRENCY: wheels-build-linux-x64-${{ inputs.concurrency }} + PLATFORM: linux-x64 + WHEEL_ARTIFACT_NAME: linux-x64-wheel + RELEASE_COMMIT: ${{ inputs.release-commit }} + MODE: "pypi" + secrets: inherit + + build-linux-arm64: + name: "Linux-arm64: Build Wheels" needs: [get-commit-sha] uses: ./.github/workflows/reusable_build_and_upload_wheels.yml with: - CONCURRENCY: wheels-build-linux-${{ inputs.concurrency }} - PLATFORM: linux - WHEEL_ARTIFACT_NAME: ${{ inputs.linux-wheel-name }} + CONCURRENCY: wheels-build-linux-arm64-${{ inputs.concurrency }} + PLATFORM: linux-arm64 + WHEEL_ARTIFACT_NAME: linux-arm64-wheel RELEASE_COMMIT: ${{ inputs.release-commit }} MODE: "pypi" secrets: inherit - build-windows: - name: "Windows: Build Wheels" + build-windows-x64: + name: "Windows-x64: Build Wheels" needs: [get-commit-sha] uses: ./.github/workflows/reusable_build_and_upload_wheels.yml with: - CONCURRENCY: wheels-build-windows-${{ inputs.concurrency }} - PLATFORM: windows - WHEEL_ARTIFACT_NAME: windows-wheel + CONCURRENCY: wheels-build-windows-x64-${{ inputs.concurrency }} + PLATFORM: windows-x64 + WHEEL_ARTIFACT_NAME: windows-x64-wheel RELEASE_COMMIT: ${{ inputs.release-commit }} MODE: "pypi" secrets: inherit - build-macos-arm: - name: "Macos-Arm: Build Wheels" + build-macos-arm64: + name: "Macos-arm64: Build Wheels" needs: [get-commit-sha] uses: ./.github/workflows/reusable_build_and_upload_wheels.yml with: - CONCURRENCY: wheels-build-macos-arm-${{ inputs.concurrency }} - PLATFORM: macos-arm - WHEEL_ARTIFACT_NAME: macos-arm-wheel + CONCURRENCY: wheels-build-macos-arm64-${{ inputs.concurrency }} + PLATFORM: macos-arm64 + WHEEL_ARTIFACT_NAME: macos-arm64-wheel RELEASE_COMMIT: ${{ inputs.release-commit }} MODE: "pypi" secrets: inherit - build-macos-intel: - name: "Macos-Intel: Build Wheels" + build-macos-x64: + name: "Macos-x64: Build Wheels" needs: [get-commit-sha] uses: ./.github/workflows/reusable_build_and_upload_wheels.yml with: - CONCURRENCY: wheels-build-macos-intel-${{ inputs.concurrency }} - PLATFORM: macos-intel - WHEEL_ARTIFACT_NAME: "macos-intel-wheel" + CONCURRENCY: wheels-build-macos-x64-${{ inputs.concurrency }} + PLATFORM: macos-x64 + WHEEL_ARTIFACT_NAME: "macos-x64-wheel" RELEASE_COMMIT: ${{ inputs.release-commit }} MODE: "pypi" secrets: inherit ## Test - test-windows: - name: "Windows: Test Wheels" - needs: [build-windows] + test-windows-x64: + name: "Windows-x64: Test Wheels" + needs: [build-windows-x64] uses: ./.github/workflows/reusable_test_wheels.yml with: - CONCURRENCY: wheels-test-windows-${{ inputs.concurrency }} - PLATFORM: windows - WHEEL_ARTIFACT_NAME: windows-wheel + CONCURRENCY: wheels-test-windows-x64-${{ inputs.concurrency }} + PLATFORM: windows-x64 + WHEEL_ARTIFACT_NAME: windows-x64-wheel RELEASE_COMMIT: ${{ inputs.release-commit }} secrets: inherit test-linux: - name: "Linux: Test Wheels" - needs: [build-linux] + name: "Linux-x64: Test Wheels" + needs: [build-linux-x64] uses: ./.github/workflows/reusable_test_wheels.yml with: - CONCURRENCY: wheels-test-linux-${{ inputs.concurrency }} - PLATFORM: linux - WHEEL_ARTIFACT_NAME: ${{ inputs.linux-wheel-name }} + CONCURRENCY: wheels-test-linux-x64-${{ inputs.concurrency }} + PLATFORM: linux-x64 + WHEEL_ARTIFACT_NAME: linux-x64-wheel RELEASE_COMMIT: ${{ inputs.release-commit }} secrets: inherit generate-wheel-index: name: "Generate Pip Index" - needs: [build-linux, build-windows, build-macos-arm, build-macos-intel] + needs: + [ + build-linux-x64, + build-linux-arm64, + build-windows-x64, + build-macos-arm64, + build-macos-x64, + ] uses: ./.github/workflows/reusable_pip_index.yml with: CONCURRENCY: generate-wheel-index-${{ inputs.concurrency }} diff --git a/.github/workflows/reusable_release_crates.yml b/.github/workflows/reusable_release_crates.yml index 47ce2c75ace6..92646766fd95 100644 --- a/.github/workflows/reusable_release_crates.yml +++ b/.github/workflows/reusable_release_crates.yml @@ -26,7 +26,7 @@ jobs: - uses: prefix-dev/setup-pixi@v0.4.1 with: - pixi-version: v0.13.0 + pixi-version: v0.16.1 - name: Build web-viewer (release) shell: bash diff --git a/.github/workflows/reusable_run_notebook.yml b/.github/workflows/reusable_run_notebook.yml index 5cabcb26e96f..b741ad6750e2 100644 --- a/.github/workflows/reusable_run_notebook.yml +++ b/.github/workflows/reusable_run_notebook.yml @@ -1,4 +1,4 @@ -name: Reusable Buld and Upload Notebook +name: Reusable Build and Upload Notebook on: workflow_call: @@ -26,7 +26,7 @@ jobs: runs-on: ubuntu-latest container: - image: rerunio/ci_docker:0.11.0 + image: rerunio/ci_docker:0.12.0 steps: - uses: actions/checkout@v4 diff --git a/.github/workflows/reusable_test_wheels.yml b/.github/workflows/reusable_test_wheels.yml index 33228b2d1d94..8c1cc08b4292 100644 --- a/.github/workflows/reusable_test_wheels.yml +++ b/.github/workflows/reusable_test_wheels.yml @@ -56,24 +56,30 @@ jobs: - name: Set runner and target based on platform id: set-config shell: bash + # TODO(#5525): at least this target is broken, maybe others — we currently only use linux-x64 and windows-x64 run: | case "${{ inputs.PLATFORM }}" in - linux) + linux-arm64) + runner="buildjet-8vcpu-ubuntu-2204-arm" + target="aarch64-unknown-linux-gnu" + container="{'image': 'rerunio/ci_docker:0.12.0'}" + ;; + linux-x64) runner="ubuntu-latest-16-cores" target="x86_64-unknown-linux-gnu" - container="{'image': 'rerunio/ci_docker:0.11.0'}" + container="{'image': 'rerunio/ci_docker:0.12.0'}" ;; - windows) + windows-x64) runner="windows-latest-8-cores" target="x86_64-pc-windows-msvc" container="null" ;; - macos-arm) + macos-arm64) runner="macos-latest-large" # See https://github.blog/2023-10-02-introducing-the-new-apple-silicon-powered-m1-macos-larger-runner-for-github-actions/ target="aarch64-apple-darwin" container="null" ;; - macos-intel) + macos-x64) runner="macos-latest-large" # See https://github.blog/2023-10-02-introducing-the-new-apple-silicon-powered-m1-macos-larger-runner-for-github-actions/ target="x86_64-apple-darwin" container="null" @@ -123,12 +129,12 @@ jobs: - uses: prefix-dev/setup-pixi@v0.4.1 with: - pixi-version: v0.13.0 + pixi-version: v0.16.1 # The pip-cache setup logic doesn't work in the ubuntu docker container # That's probably fine since we bake these deps into the container already - name: Setup python - if: ${{ inputs.PLATFORM != 'linux' }} + if: ${{ inputs.PLATFORM != 'linux-x64' }} uses: actions/setup-python@v4 with: python-version: ${{ env.PYTHON_VERSION }} @@ -187,7 +193,7 @@ jobs: run: RUST_LOG=debug scripts/run_python_e2e_test.py --no-build # rerun-sdk is already built and installed - name: Run tests/roundtrips.py - if: ${{ inputs.PLATFORM != 'windows' }} + if: ${{ inputs.PLATFORM != 'windows-x64' }} shell: bash # --release so we can inherit from some of the artifacts that maturin has just built before # --target x86_64-unknown-linux-gnu because otherwise cargo loses the target cache… even though this is the target anyhow… @@ -196,7 +202,7 @@ jobs: RUST_LOG=debug tests/roundtrips.py --release --target x86_64-unknown-linux-gnu --no-py-build - name: Run docs/snippets/compare_snippet_output.py - if: ${{ inputs.PLATFORM != 'windows' }} + if: ${{ inputs.PLATFORM != 'windows-x64' }} shell: bash # --release so we can inherit from some of the artifacts that maturin has just built before # --target x86_64-unknown-linux-gnu because otherwise cargo loses the target cache… even though this is the target anyhow… diff --git a/ci_docker/Dockerfile b/ci_docker/Dockerfile index e5e4acfab46f..300ba04c48bf 100644 --- a/ci_docker/Dockerfile +++ b/ci_docker/Dockerfile @@ -2,11 +2,13 @@ FROM ubuntu:20.04 LABEL maintainer="opensource@rerun.io" # Remember to update the version in publish.sh # TODO(jleibs) use this version in the publish.sh script and below in the CACHE_KEY -LABEL version="0.11.0" +LABEL version="0.12.0" LABEL description="Docker image used for the CI of https://github.com/rerun-io/rerun" # Install the ubuntu package dependencies ENV DEBIAN_FRONTEND=noninteractive +ARG TARGETARCH + RUN set -eux; \ apt-get update; \ apt-get install -y ca-certificates lsb-release wget; \ @@ -57,8 +59,10 @@ RUN git clone --depth 1 --branch v23.5.9 https://github.com/google/flatbuffers.g make install && \ cd .. && rm -rf flatbuffers + # We need a more modern patchelf than ships on ubuntu-20.04 -RUN curl --fail -L https://github.com/NixOS/patchelf/releases/download/0.17.2/patchelf-0.17.2-x86_64.tar.gz | tar -xz ./bin/patchelf +RUN arch=$(if [ "$TARGETARCH" = "arm64" ]; then echo "aarch64"; else echo "x86_64"; fi) && \ + curl --fail -L https://github.com/NixOS/patchelf/releases/download/0.17.2/patchelf-0.17.2-${arch}.tar.gz | tar -xz ./bin/patchelf # TODO(andreas): Update cargo-deny below when updating rust version to 1.70.0 or above! ENV RUSTUP_HOME=/usr/local/rustup \ @@ -69,9 +73,10 @@ ENV RUSTUP_HOME=/usr/local/rustup \ # Install Rust # Borrowed from: https://github.com/rust-lang/docker-rust/blob/a8a2a9d/1.71.0/bookworm/Dockerfile -RUN set -eux; \ - rustArch='x86_64-unknown-linux-gnu'; \ - rustupSha256='0b2f6c8f85a3d02fde2efc0ced4657869d73fccfce59defb4e8d29233116e6db'; \ +RUN arch=$(if [ "$TARGETARCH" = "arm64" ]; then echo "aarch64"; else echo "x86_64"; fi) && \ + set -eux; \ + rustArch="${arch}-unknown-linux-gnu"; \ + rustupSha256=$(if [ "$TARGETARCH" = "arm64" ]; then echo "673e336c81c65e6b16dcdede33f4cc9ed0f08bde1dbe7a935f113605292dc800"; else echo "0b2f6c8f85a3d02fde2efc0ced4657869d73fccfce59defb4e8d29233116e6db"; fi); \ url="https://static.rust-lang.org/rustup/archive/${RUSTUP_VERSION}/${rustArch}/rustup-init"; \ wget "$url"; \ echo "${rustupSha256} *rustup-init" | sha256sum -c -; \ @@ -102,11 +107,8 @@ RUN pip install -r requirements-build.txt ADD rerun_py/requirements-lint.txt requirements-lint.txt RUN pip install -r requirements-lint.txt -# Note: We need a more modern binaryen than ships on ubuntu-20.4, so we pull it from github -RUN curl --fail -L https://github.com/WebAssembly/binaryen/releases/download/version_112/binaryen-version_112-x86_64-linux.tar.gz | tar xzk --strip-components 1 - # Increment this to invalidate cache -ENV CACHE_KEY=rerun_docker_v0.10.0 +ENV CACHE_KEY=rerun_docker_v0.12.0 # See: https://github.com/actions/runner-images/issues/6775#issuecomment-1410270956 RUN git config --system --add safe.directory '*' diff --git a/ci_docker/publish.sh b/ci_docker/publish.sh index 047dd990b15c..31d3d9b57d10 100755 --- a/ci_docker/publish.sh +++ b/ci_docker/publish.sh @@ -1,24 +1,11 @@ #!/usr/bin/env bash set -eux -VERSION=0.11.0 # Bump on each new version. Remember to update the version in the Dockerfile too. +VERSION=0.12.0 # Bump on each new version. Remember to update the version in the Dockerfile too. # The build needs to run from top of repo to access the requirements.txt cd `git rev-parse --show-toplevel` -# Pull :latest so we have the correct cache -docker pull rerunio/ci_docker - # Build the image -docker build -t ci_docker -f ci_docker/Dockerfile . -# This is necessary to build on mac, but is doing something weird with the Cache -# TODO(jleibs): Make this all work portably with caching -# docker buildx build --platform=linux/amd64 -t ci_docker -f ci_docker/Dockerfile . - -# Tag latest and version -docker tag ci_docker rerunio/ci_docker -docker tag ci_docker rerunio/ci_docker:$VERSION - -# Push the images back up -docker push rerunio/ci_docker -docker push rerunio/ci_docker:$VERSION +# buildx wants to do all of this in one step +docker buildx build --pull --platform linux/arm64,linux/amd64 -t rerunio/ci_docker -t rerunio/ci_docker:$VERSION --push -f ci_docker/Dockerfile . diff --git a/pixi.lock b/pixi.lock index 4b1d18ea4341..de4e93572c55 100644 --- a/pixi.lock +++ b/pixi.lock @@ -7,6 +7,7 @@ environments: linux-64: - conda: https://conda.anaconda.org/conda-forge/linux-64/_libgcc_mutex-0.1-conda_forge.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-2_gnu.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/attrs-23.2.0-pyh71513ae_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-auth-0.7.16-h79b3bcb_6.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-cal-0.6.10-hb29e0c7_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-common-0.9.13-hd590300_0.conda @@ -20,11 +21,12 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-checksums-0.1.18-hecc5fa9_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-crt-cpp-0.26.2-h19f5d62_7.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-sdk-cpp-1.11.267-h5606698_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/binaryen-116-h59595ed_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/binaryen-117-h59595ed_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/binutils-2.40-hdd6e379_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/binutils_impl_linux-64-2.40-hf600244_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/binutils_linux-64-2.40-hbdbef99_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/black-24.2.0-py311h38be061_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/blackdoc-0.3.8-pyhd8ed1ab_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-hd590300_5.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/c-ares-1.26.0-hd590300_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/c-compiler-1.6.0-hd590300_0.conda @@ -34,21 +36,29 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/clang-format-16-16.0.6-default_hb11cfb5_4.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/clang-format-16.0.6-default_hb11cfb5_4.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/clang-tools-16.0.6-default_hb11cfb5_4.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.1.7-unix_pyh707e725_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/cmake-3.27.6-hcfe8598_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/colorlog-4.8.0-py311h38be061_3.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/linux-64/cxx-compiler-1.6.0-h00ab1b0_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/doxygen-1.9.7-h661eb56_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.2.0-pyhd8ed1ab_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/flatbuffers-23.5.26-h59595ed_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/gcc-12.3.0-h8d2909c_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/gcc_impl_linux-64-12.3.0-he2b93b0_5.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/gcc_linux-64-12.3.0-h76fc315_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/gflags-2.2.2-he1b5a44_1004.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/gitdb-4.0.11-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/gitignore-parser-0.1.11-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/gitpython-3.1.41-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/glog-0.7.0-hed5481d_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/gxx-12.3.0-h8d2909c_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/gxx_impl_linux-64-12.3.0-he2b93b0_5.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/gxx_linux-64-12.3.0-h8a814eb_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/icu-73.2-h59595ed_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-4.13.0-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/just-1.22.1-he8a937b_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/kernel-headers_linux-64-2.6.32-he073ed8_16.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/keyutils-1.6.1-h166bdaf_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/linux-64/krb5-1.21.2-h659d440_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.40-h41732ed_0.conda @@ -74,6 +84,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/libevent-2.1.12-hf998b51_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.5.0-hcb278e6_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.4.2-h7f98852_5.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/libgcc-devel_linux-64-12.3.0-h8bca6fd_105.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-13.2.0-h807b86a_5.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran-ng-13.2.0-h69a702a_5.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran5-13.2.0-ha4646dd_5.conda @@ -97,6 +108,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/libsanitizer-12.3.0-h0f45ef3_5.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.45.1-h2797004_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libssh2-1.11.0-h0841786_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/libstdcxx-devel_linux-64-12.3.0-h8bca6fd_105.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-13.2.0-h7e041cc_5.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libthrift-0.19.0-hb90f79a_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libutf8proc-2.8.0-h166bdaf_0.tar.bz2 @@ -106,120 +118,212 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/libxml2-2.12.5-h232c23b_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.2.13-hd590300_5.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/lz4-c-1.9.4-hcb278e6_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/markupsafe-2.1.5-py311h459d7ec_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-3.0.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/maturin-1.4.0-py311h63ff55d_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/meilisearch-1.5.1-he8a937b_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/more-itertools-10.2.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/mypy-1.8.0-py311h459d7ec_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/mypy_extensions-1.0.0-pyha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.4-h59595ed_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/ninja-1.11.1-h924138e_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/nodejs-18.18.2-hb753e55_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/numpy-1.26.4-py311h64a7726_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.2.1-hd590300_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/orc-1.9.2-h00e871a_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-23.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/patchelf-0.17.2-h58526e2_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pathspec-0.12.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pip-24.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.2.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.4.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/prettier-2.8.8-h75cfd52_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/psutil-5.9.8-py311h459d7ec_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/pyarrow-14.0.2-py311h39c9aba_10_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.17.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-8.0.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.11.8-hab00c5b_0_cpython.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/python_abi-3.11-4_cp311.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/rdma-core-50.0-hd3aeb46_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/re2-2023.09.01-h7f4b329_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.2-h8228510_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/rhash-1.4.4-hd590300_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/rich-13.7.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/ruff-0.2.2-py311h7145743_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/s2n-1.4.5-h06160fa_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/snappy-1.1.10-h9fff704_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/taplo-0.8.1-he8a937b_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_h4845f30_101.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/typos-1.18.1-he8a937b_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/ucx-1.15.0-h75e419f_3.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/xz-5.2.6-h166bdaf_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/linux-64/zlib-1.2.13-hd590300_5.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.5-hfc55251_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/argcomplete-1.12.3-pyhd8ed1ab_2.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/attrs-23.2.0-pyh71513ae_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/blackdoc-0.3.8-pyhd8ed1ab_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.1.7-unix_pyh707e725_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/distlib-0.3.8-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.2.0-pyhd8ed1ab_2.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/filelock-3.13.1-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/gitdb-4.0.11-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/gitignore-parser-0.1.11-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/gitpython-3.1.41-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-4.13.0-pyha770c72_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/importlib_metadata-4.13.0-hd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.3-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/kernel-headers_linux-64-2.6.32-he073ed8_16.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/libgcc-devel_linux-64-12.3.0-h8bca6fd_105.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/libstdcxx-devel_linux-64-12.3.0-h8bca6fd_105.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-3.0.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/more-itertools-10.2.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/mypy_extensions-1.0.0-pyha770c72_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/nox-2021.10.1-pyhd8ed1ab_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-23.2-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pathspec-0.12.1-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pip-24.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.2.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.4.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/py-1.11.0-pyh6c4a22f_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.17.2-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-8.0.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/rich-13.7.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/semver-2.13.0-pyh9f0ad1d_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-69.0.3-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/smmap-5.0.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/snappy-1.1.10-h9fff704_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/sysroot_linux-64-2.12-he073ed8_16.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_h4845f30_101.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.0.1-pyhd8ed1ab_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/tomlkit-0.12.3-pyha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.9.0-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/typos-1.18.1-he8a937b_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2024a-h0c530f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/virtualenv-20.25.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ucx-1.15.0-h75e419f_3.conda - conda: https://conda.anaconda.org/conda-forge/noarch/wheel-0.38.4-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/xz-5.2.6-h166bdaf_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.17.0-pyhd8ed1ab_0.conda - osx-64: - - conda: https://conda.anaconda.org/conda-forge/noarch/argcomplete-1.12.3-pyhd8ed1ab_2.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/zlib-1.2.13-hd590300_5.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.5-hfc55251_0.conda + - pypi: https://files.pythonhosted.org/packages/88/8c/61021c45428ad2ef6131c6068d14f7f0968767e972e427cd87bd25c9ea7b/argcomplete-3.2.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/f3/18/3e867ab37a24fdf073c1617b9c7830e06ec270b1ea4694a624038fc40a03/colorlog-6.8.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/8e/41/9307e4f5f9976bc8b7fea0b66367734e8faf3ec84bc0d412d8cfabbb66cd/distlib-0.3.8-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/81/54/84d42a0bee35edba99dee7b59a8d4970eccdd44b99fe728ed912106fc781/filelock-3.13.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c2/55/c0d4ca1e6f68da8a1c7055ad80d4bf1fef651af08a68b52323cee97880c9/nox-2024.3.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/16/65/0d0bdfdac31e2db8c6d6c18fe1e00236f0dea279f9846f94a9aafa49cfc9/virtualenv-20.25.1-py3-none-any.whl + linux-aarch64: + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/_openmp_mutex-4.5-2_gnu.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/attrs-23.2.0-pyh71513ae_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/aws-c-auth-0.7.16-hcac9c52_6.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/aws-c-cal-0.6.10-h967b9ec_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/aws-c-common-0.9.13-h31becfc_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/aws-c-compression-0.2.18-h00d1b86_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/aws-c-event-stream-0.4.2-h128c7ac_4.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/aws-c-http-0.8.1-he0aa6e1_5.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/aws-c-io-0.14.5-h2bbb85f_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/aws-c-mqtt-0.10.2-hf974719_4.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/aws-c-s3-0.5.2-h170583c_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/aws-c-sdkutils-0.1.15-h00d1b86_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/aws-checksums-0.1.18-h00d1b86_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/aws-crt-cpp-0.26.2-h07bb24a_7.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/aws-sdk-cpp-1.11.267-hfce6cab_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/binaryen-117-h2f0025b_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/black-24.2.0-py311hec3470c_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/blackdoc-0.3.8-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/bzip2-1.0.8-h31becfc_5.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/c-ares-1.27.0-h31becfc_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ca-certificates-2024.2.2-hcefe29a_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/clang-format-16-16.0.6-default_hb368394_5.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/clang-format-16.0.6-default_hb368394_5.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/clang-tools-16.0.6-default_hb368394_5.conda - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.1.7-unix_pyh707e725_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/cmake-3.27.6-hef020d8_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/compiler-rt_osx-64-16.0.6-ha38d28d_2.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/distlib-0.3.8-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/doxygen-1.9.7-h7b6a552_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.2.0-pyhd8ed1ab_2.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/filelock-3.13.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/flatbuffers-24.3.7-h2f0025b_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/gflags-2.2.2-h54f1f3f_1004.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/gitdb-4.0.11-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/gitignore-parser-0.1.11-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/gitpython-3.1.41-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-4.13.0-pyha770c72_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/importlib_metadata-4.13.0-hd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/gitpython-3.1.42-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/glog-0.7.0-ha63034d_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/icu-73.2-h787c7f5_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-7.0.2-pyha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/just-1.24.0-h1d8f897_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/keyutils-1.6.1-h4e544f5_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/krb5-1.21.2-hc419048_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ld_impl_linux-aarch64-2.40-h2d8c526_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libabseil-20240116.1-cxx17_h2f0025b_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libarrow-14.0.2-h25df049_12_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libarrow-acero-14.0.2-h2f0025b_12_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libarrow-dataset-14.0.2-h2f0025b_12_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libarrow-flight-14.0.2-h2f4a9e5_12_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libarrow-flight-sql-14.0.2-hc81a7a7_12_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libarrow-gandiva-14.0.2-h3a2b1eb_12_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libarrow-substrait-14.0.2-hd45466a_12_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libblas-3.9.0-21_linuxaarch64_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libbrotlicommon-1.1.0-h31becfc_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libbrotlidec-1.1.0-h31becfc_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libbrotlienc-1.1.0-h31becfc_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libcblas-3.9.0-21_linuxaarch64_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libclang-cpp16-16.0.6-default_hb368394_5.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libclang13-18.1.1-default_hf9b4efe_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libcrc32c-1.1.2-h01db608_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libcurl-8.5.0-h4e8248e_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libedit-3.1.20191231-he28a2e2_2.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libev-4.33-h31becfc_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libevent-2.1.12-h4ba1bb4_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libexpat-2.6.2-h2f0025b_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libffi-3.4.2-h3557bc0_5.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgcc-ng-13.2.0-hf8544c7_5.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgfortran-ng-13.2.0-he9431aa_5.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgfortran5-13.2.0-h582850c_5.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgomp-13.2.0-hf8544c7_5.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgoogle-cloud-2.22.0-hd739bbb_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgoogle-cloud-storage-2.22.0-hdb39181_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgrpc-1.62.1-h98a9317_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libiconv-1.17-h31becfc_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/liblapack-3.9.0-21_linuxaarch64_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libllvm15-15.0.7-hb4f23b0_4.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libllvm16-16.0.6-h0b931ab_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libllvm18-18.1.1-hbfe100b_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libnghttp2-1.58.0-hb0e430d_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libnl-3.9.0-h31becfc_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libnsl-2.0.1-h31becfc_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenblas-0.3.26-pthreads_h5a5ec62_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libparquet-14.0.2-hb18b541_12_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libprotobuf-4.25.3-h648ac29_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libre2-11-2023.09.01-h9d008c2_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libsqlite-3.45.2-h194ca79_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libssh2-1.11.0-h492db2e_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libstdcxx-ng-13.2.0-h9a76618_5.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libthrift-0.19.0-h043aeee_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libutf8proc-2.8.0-h4e544f5_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libuuid-2.38.1-hb4cce97_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libuv-1.46.0-h31becfc_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libxcrypt-4.4.36-h31becfc_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libxml2-2.12.5-h3091e33_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libzlib-1.2.13-h31becfc_5.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/lz4-c-1.9.4-hd600fc2_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-3.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/maturin-1.4.0-py311h06e5ef9_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/more-itertools-10.2.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/mypy-1.8.0-py311hcd402e7_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/mypy_extensions-1.0.0-pyha770c72_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/nox-2021.10.1-pyhd8ed1ab_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-23.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ncurses-6.4-h0425590_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ninja-1.11.1-hdd96247_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/nodejs-18.19.0-hc1f8a26_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/numpy-1.26.4-py311h69ead2a_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/openssl-3.2.1-h31becfc_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/orc-2.0.0-h75d905f_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-24.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pathspec-0.12.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pip-24.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.2.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.4.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/py-1.11.0-pyh6c4a22f_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/prettier-2.8.8-hc2da131_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/psutil-5.9.8-py311hcd402e7_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pyarrow-14.0.2-py311h1eb6f34_12_cpu.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.17.2-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-8.0.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/rich-13.7.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-8.1.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/python-3.11.8-h43d1f9e_0_cpython.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/python_abi-3.11-4_cp311.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/rdma-core-50.0-h0425590_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/re2-2023.09.01-h9caee61_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/readline-8.2-h8fc344f_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/rhash-1.4.4-h31becfc_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/rich-13.7.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ruff-0.2.2-py311he69e3a7_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/s2n-1.4.5-h5a25046_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/semver-2.13.0-pyh9f0ad1d_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-69.0.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-69.2.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/smmap-5.0.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/snappy-1.1.10-he8610fa_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/tk-8.6.13-h194ca79_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.0.1-pyhd8ed1ab_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/tomlkit-0.12.3-pyha770c72_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.9.0-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.10.0-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/typos-1.19.0-h1d8f897_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2024a-h0c530f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/virtualenv-20.25.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ucx-1.15.0-hcf8619e_7.conda - conda: https://conda.anaconda.org/conda-forge/noarch/wheel-0.38.4-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xz-5.2.6-h9cdd2b7_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.17.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/zlib-1.2.13-h31becfc_5.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/zstd-1.5.5-h4c53e97_0.conda + - pypi: https://files.pythonhosted.org/packages/88/8c/61021c45428ad2ef6131c6068d14f7f0968767e972e427cd87bd25c9ea7b/argcomplete-3.2.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/f3/18/3e867ab37a24fdf073c1617b9c7830e06ec270b1ea4694a624038fc40a03/colorlog-6.8.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/8e/41/9307e4f5f9976bc8b7fea0b66367734e8faf3ec84bc0d412d8cfabbb66cd/distlib-0.3.8-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/81/54/84d42a0bee35edba99dee7b59a8d4970eccdd44b99fe728ed912106fc781/filelock-3.13.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c2/55/c0d4ca1e6f68da8a1c7055ad80d4bf1fef651af08a68b52323cee97880c9/nox-2024.3.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/16/65/0d0bdfdac31e2db8c6d6c18fe1e00236f0dea279f9846f94a9aafa49cfc9/virtualenv-20.25.1-py3-none-any.whl + osx-64: + - conda: https://conda.anaconda.org/conda-forge/noarch/attrs-23.2.0-pyh71513ae_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/aws-c-auth-0.7.16-h79cb451_6.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/aws-c-cal-0.6.10-h7beb4c2_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/aws-c-common-0.9.13-h10d778d_0.conda @@ -233,8 +337,9 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-64/aws-checksums-0.1.18-hf5538d0_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/aws-crt-cpp-0.26.2-h56a5195_7.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/aws-sdk-cpp-1.11.267-h4da54b2_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/binaryen-116-he965462_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/binaryen-117-h73e2aa4_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/black-24.2.0-py311h6eed73b_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/blackdoc-0.3.8-pyhd8ed1ab_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/osx-64/bzip2-1.0.8-h10d778d_5.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/c-ares-1.26.0-h10d778d_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/c-compiler-1.6.0-h282daa2_0.conda @@ -251,15 +356,23 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-64/clangxx-16.0.6-default_h7151d67_5.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/clangxx_impl_osx-64-16.0.6-h6d92fbe_9.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/clangxx_osx-64-16.0.6-hb91bd55_9.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.1.7-unix_pyh707e725_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/cmake-3.27.6-hf40c264_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/colorlog-4.8.0-py311h6eed73b_3.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/osx-64/compiler-rt-16.0.6-ha38d28d_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/compiler-rt_osx-64-16.0.6-ha38d28d_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/cxx-compiler-1.6.0-h7728843_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/doxygen-1.9.7-hd7636e7_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.2.0-pyhd8ed1ab_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/flatbuffers-23.5.26-he965462_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/gflags-2.2.2-hb1e8313_1004.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/gitdb-4.0.11-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/gitignore-parser-0.1.11-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/gitpython-3.1.41-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/glog-0.7.0-h31b1b29_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/icu-73.2-hf5e326d_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-4.13.0-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/just-1.22.1-h63b85fc_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/krb5-1.21.2-hb884880_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/ld64-609-ha02d983_16.conda @@ -312,75 +425,60 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-64/llvm-openmp-17.0.6-hb6ac08f_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/llvm-tools-16.0.6-hbedff68_3.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/lz4-c-1.9.4-hf0c8a7f_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/markupsafe-2.1.5-py311he705e18_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-3.0.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/maturin-1.4.0-py311h24bb903_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/meilisearch-1.5.1-hc85fda4_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/more-itertools-10.2.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/mypy-1.8.0-py311he705e18_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/mypy_extensions-1.0.0-pyha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/ncurses-6.4-h93d8f39_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/ninja-1.11.1-hb8565cd_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/nodejs-18.18.2-h2713218_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/numpy-1.26.4-py311hc43a94b_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/openssl-3.2.1-hd75f5a5_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/orc-1.9.2-h3758fe2_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-23.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pathspec-0.12.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pip-24.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.2.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.4.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/prettier-2.8.8-h3db311d_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/psutil-5.9.8-py311he705e18_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/pyarrow-14.0.2-py311h54e7ce8_10_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.17.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-8.0.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/python-3.11.8-h9f0c242_0_cpython.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/python_abi-3.11-4_cp311.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/re2-2023.09.01-hb168e87_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/readline-8.2-h9e318b2_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/rhash-1.4.4-h0dc2134_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/rich-13.7.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/ruff-0.2.2-py311hfff7943_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/semver-2.13.0-pyh9f0ad1d_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-69.0.3-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/sigtool-0.1.3-h88f4db0_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/smmap-5.0.0-pyhd8ed1ab_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/osx-64/snappy-1.1.10-h225ccf5_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/tapi-1100.0.11-h9ce4665_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/osx-64/taplo-0.8.1-h7205ca4_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/tk-8.6.13-h1abcd95_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/typos-1.18.1-h11a7dfb_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/xz-5.2.6-h775f41a_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/osx-64/zlib-1.2.13-h8a1eda9_5.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/zstd-1.5.5-h829000d_0.conda - osx-arm64: - - conda: https://conda.anaconda.org/conda-forge/noarch/argcomplete-1.12.3-pyhd8ed1ab_2.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/attrs-23.2.0-pyh71513ae_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/blackdoc-0.3.8-pyhd8ed1ab_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.1.7-unix_pyh707e725_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/compiler-rt_osx-arm64-16.0.6-h3808999_2.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/distlib-0.3.8-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.2.0-pyhd8ed1ab_2.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/filelock-3.13.1-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/gitdb-4.0.11-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/gitignore-parser-0.1.11-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/gitpython-3.1.41-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-4.13.0-pyha770c72_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/importlib_metadata-4.13.0-hd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.3-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-3.0.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/more-itertools-10.2.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/mypy_extensions-1.0.0-pyha770c72_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/nox-2021.10.1-pyhd8ed1ab_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-23.2-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pathspec-0.12.1-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pip-24.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.2.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.4.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/py-1.11.0-pyh6c4a22f_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.17.2-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-8.0.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/rich-13.7.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/semver-2.13.0-pyh9f0ad1d_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-69.0.3-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/smmap-5.0.0-pyhd8ed1ab_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.0.1-pyhd8ed1ab_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/tomlkit-0.12.3-pyha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.9.0-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/typos-1.18.1-h11a7dfb_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2024a-h0c530f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/virtualenv-20.25.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/wheel-0.38.4-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/osx-64/xz-5.2.6-h775f41a_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.17.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/zlib-1.2.13-h8a1eda9_5.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/zstd-1.5.5-h829000d_0.conda + - pypi: https://files.pythonhosted.org/packages/88/8c/61021c45428ad2ef6131c6068d14f7f0968767e972e427cd87bd25c9ea7b/argcomplete-3.2.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/f3/18/3e867ab37a24fdf073c1617b9c7830e06ec270b1ea4694a624038fc40a03/colorlog-6.8.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/8e/41/9307e4f5f9976bc8b7fea0b66367734e8faf3ec84bc0d412d8cfabbb66cd/distlib-0.3.8-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/81/54/84d42a0bee35edba99dee7b59a8d4970eccdd44b99fe728ed912106fc781/filelock-3.13.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c2/55/c0d4ca1e6f68da8a1c7055ad80d4bf1fef651af08a68b52323cee97880c9/nox-2024.3.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/16/65/0d0bdfdac31e2db8c6d6c18fe1e00236f0dea279f9846f94a9aafa49cfc9/virtualenv-20.25.1-py3-none-any.whl + osx-arm64: + - conda: https://conda.anaconda.org/conda-forge/noarch/attrs-23.2.0-pyh71513ae_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-auth-0.7.16-h51b92d1_6.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-cal-0.6.10-hf888d4c_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-common-0.9.13-h93a5062_0.conda @@ -394,8 +492,9 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-checksums-0.1.18-hf888d4c_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-crt-cpp-0.26.2-h06549c9_7.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-sdk-cpp-1.11.267-h73c0887_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/binaryen-116-h13dd4ca_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/binaryen-117-hebf3989_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/black-24.2.0-py311h267d04e_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/blackdoc-0.3.8-pyhd8ed1ab_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/bzip2-1.0.8-h93a5062_5.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/c-ares-1.26.0-h93a5062_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/c-compiler-1.6.0-h6aa9301_0.conda @@ -412,15 +511,23 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/clangxx-16.0.6-default_h4cf2255_5.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/clangxx_impl_osx-arm64-16.0.6-hcd7bac0_9.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/clangxx_osx-arm64-16.0.6-h54d7cd3_9.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.1.7-unix_pyh707e725_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/cmake-3.27.6-h1c59155_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/colorlog-4.8.0-py311h267d04e_3.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/compiler-rt-16.0.6-h3808999_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/compiler-rt_osx-arm64-16.0.6-h3808999_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/cxx-compiler-1.6.0-h2ffa867_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/doxygen-1.9.7-h0e2417a_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.2.0-pyhd8ed1ab_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/flatbuffers-23.5.26-h13dd4ca_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/gflags-2.2.2-hc88da5d_1004.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/gitdb-4.0.11-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/gitignore-parser-0.1.11-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/gitpython-3.1.41-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/glog-0.7.0-hc6770e3_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/icu-73.2-hc8870d7_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-4.13.0-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/just-1.22.1-h5ef7bb8_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/krb5-1.21.2-h92f50d5_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ld64-609-h634c8be_16.conda @@ -473,74 +580,60 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/llvm-openmp-17.0.6-hcd81f8e_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/llvm-tools-16.0.6-haab561b_3.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lz4-c-1.9.4-hb7217d7_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/markupsafe-2.1.5-py311h05b510d_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-3.0.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/maturin-1.4.0-py311h71175c2_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/meilisearch-1.5.1-h5ef7bb8_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/more-itertools-10.2.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/mypy-1.8.0-py311h05b510d_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/mypy_extensions-1.0.0-pyha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ncurses-6.4-h463b476_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ninja-1.11.1-hffc8910_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/nodejs-18.18.2-h7ed3092_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/numpy-1.26.4-py311h7125741_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/openssl-3.2.1-h0d3ecfb_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/orc-1.9.2-h798d188_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-23.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pathspec-0.12.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pip-24.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.2.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.4.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/prettier-2.8.8-ha12bae2_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/psutil-5.9.8-py311h05b510d_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pyarrow-14.0.2-py311hd7bc329_10_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.17.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-8.0.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-3.11.8-hdf0ec26_0_cpython.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python_abi-3.11-4_cp311.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/re2-2023.09.01-h4cba328_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/readline-8.2-h92ec313_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/rhash-1.4.4-hb547adb_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/rich-13.7.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ruff-0.2.2-py311h8c97afb_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/semver-2.13.0-pyh9f0ad1d_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-69.0.3-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/sigtool-0.1.3-h44b9a77_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/smmap-5.0.0-pyhd8ed1ab_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/snappy-1.1.10-h17c5cce_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tapi-1100.0.11-he4954df_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/taplo-0.8.1-h69fbcac_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tk-8.6.13-h5083fa2_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/typos-1.18.1-h5ef7bb8_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/xz-5.2.6-h57fd34a_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zlib-1.2.13-h53f4e23_5.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zstd-1.5.5-h4f39d0f_0.conda - win-64: - - conda: https://conda.anaconda.org/conda-forge/noarch/argcomplete-1.12.3-pyhd8ed1ab_2.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/attrs-23.2.0-pyh71513ae_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/blackdoc-0.3.8-pyhd8ed1ab_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.1.7-win_pyh7428d3b_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/distlib-0.3.8-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.2.0-pyhd8ed1ab_2.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/filelock-3.13.1-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/gitdb-4.0.11-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/gitignore-parser-0.1.11-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/gitpython-3.1.41-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-4.13.0-pyha770c72_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/importlib_metadata-4.13.0-hd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.3-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-3.0.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/more-itertools-10.2.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/mypy_extensions-1.0.0-pyha770c72_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/nox-2021.10.1-pyhd8ed1ab_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-23.2-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pathspec-0.12.1-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pip-24.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.2.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.4.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/py-1.11.0-pyh6c4a22f_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.17.2-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-8.0.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/rich-13.7.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/semver-2.13.0-pyh9f0ad1d_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-69.0.3-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/smmap-5.0.0-pyhd8ed1ab_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.0.1-pyhd8ed1ab_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/tomlkit-0.12.3-pyha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.9.0-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/typos-1.18.1-h5ef7bb8_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2024a-h0c530f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/virtualenv-20.25.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/wheel-0.38.4-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/xz-5.2.6-h57fd34a_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.17.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zlib-1.2.13-h53f4e23_5.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zstd-1.5.5-h4f39d0f_0.conda + - pypi: https://files.pythonhosted.org/packages/88/8c/61021c45428ad2ef6131c6068d14f7f0968767e972e427cd87bd25c9ea7b/argcomplete-3.2.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/f3/18/3e867ab37a24fdf073c1617b9c7830e06ec270b1ea4694a624038fc40a03/colorlog-6.8.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/8e/41/9307e4f5f9976bc8b7fea0b66367734e8faf3ec84bc0d412d8cfabbb66cd/distlib-0.3.8-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/81/54/84d42a0bee35edba99dee7b59a8d4970eccdd44b99fe728ed912106fc781/filelock-3.13.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c2/55/c0d4ca1e6f68da8a1c7055ad80d4bf1fef651af08a68b52323cee97880c9/nox-2024.3.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/16/65/0d0bdfdac31e2db8c6d6c18fe1e00236f0dea279f9846f94a9aafa49cfc9/virtualenv-20.25.1-py3-none-any.whl + win-64: + - conda: https://conda.anaconda.org/conda-forge/noarch/attrs-23.2.0-pyh71513ae_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/aws-c-auth-0.7.16-hec1de76_6.conda - conda: https://conda.anaconda.org/conda-forge/win-64/aws-c-cal-0.6.10-hd481e46_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/aws-c-common-0.9.13-hcfcfb64_0.conda @@ -554,17 +647,25 @@ environments: - conda: https://conda.anaconda.org/conda-forge/win-64/aws-checksums-0.1.18-hd481e46_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/aws-crt-cpp-0.26.2-h8492d2a_7.conda - conda: https://conda.anaconda.org/conda-forge/win-64/aws-sdk-cpp-1.11.267-h93f5800_1.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/binaryen-116-h63175ca_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/binaryen-117-h63175ca_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/black-24.2.0-py311h1ea47a8_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/blackdoc-0.3.8-pyhd8ed1ab_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/win-64/bzip2-1.0.8-hcfcfb64_5.conda - conda: https://conda.anaconda.org/conda-forge/win-64/c-ares-1.27.0-hcfcfb64_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/ca-certificates-2024.2.2-h56e8100_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/clang-format-16.0.6-default_h3a3e6c3_5.conda - conda: https://conda.anaconda.org/conda-forge/win-64/clang-tools-16.0.6-default_h3a3e6c3_5.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.1.7-win_pyh7428d3b_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/cmake-3.27.6-hf0feee3_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/colorlog-4.8.0-py311h1ea47a8_3.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/win-64/doxygen-1.9.7-h849606c_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.2.0-pyhd8ed1ab_2.conda - conda: https://conda.anaconda.org/conda-forge/win-64/flatbuffers-23.5.26-h63175ca_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/gitdb-4.0.11-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/gitignore-parser-0.1.11-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/gitpython-3.1.41-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-4.13.0-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/intel-openmp-2024.0.0-h57928b3_49841.conda - conda: https://conda.anaconda.org/conda-forge/win-64/just-1.22.1-h7f3b576_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/krb5-1.21.2-heb0366b_0.conda @@ -609,38 +710,62 @@ environments: - conda: https://conda.anaconda.org/conda-forge/win-64/m2w64-gcc-libs-core-5.3.0-7.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/win-64/m2w64-gmp-6.1.0-2.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/win-64/m2w64-libwinpthread-git-5.0.0.4634.697f757-2.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/win-64/markupsafe-2.1.5-py311ha68e1ae_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-3.0.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/maturin-1.4.0-py311h9a9e57f_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/meilisearch-1.5.1-h8b8d39b_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/mkl-2024.0.0-h66d3029_49657.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/more-itertools-10.2.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/msys2-conda-epoch-20160418-1.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/win-64/mypy-1.8.0-py311ha68e1ae_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/mypy_extensions-1.0.0-pyha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/ninja-1.11.1-h91493d7_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/nodejs-18.18.2-h57928b3_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/numpy-1.26.4-py311h0b4df5a_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/openssl-3.2.1-hcfcfb64_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/orc-1.9.2-h2702c50_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-23.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pathspec-0.12.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pip-24.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.2.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.4.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/prettier-2.8.8-hd2f1330_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/psutil-5.9.8-py311ha68e1ae_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/pthreads-win32-2.9.1-hfa6e2cd_3.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/win-64/pyarrow-14.0.2-py311h6a6099b_10_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.17.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-8.0.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/python-3.11.8-h2628c8c_0_cpython.conda - conda: https://conda.anaconda.org/conda-forge/win-64/python_abi-3.11-4_cp311.conda - conda: https://conda.anaconda.org/conda-forge/win-64/re2-2023.09.01-hd3b24a8_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/rich-13.7.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/ruff-0.2.2-py311hc14472d_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/semver-2.13.0-pyh9f0ad1d_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-69.0.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/smmap-5.0.0-pyhd8ed1ab_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/win-64/snappy-1.1.10-hfb803bf_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/taplo-0.8.1-h7f3b576_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/tbb-2021.11.0-h91493d7_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/tk-8.6.13-h5226925_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.0.1-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/tomlkit-0.12.3-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.9.0-pyha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/typos-1.18.1-h7f3b576_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2024a-h0c530f3_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/ucrt-10.0.22621.0-h57928b3_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/win-64/vc-14.3-hcf57466_18.conda - conda: https://conda.anaconda.org/conda-forge/win-64/vc14_runtime-14.38.33130-h82b7239_18.conda - conda: https://conda.anaconda.org/conda-forge/win-64/vs2015_runtime-14.38.33130-hcb4865c_18.conda - conda: https://conda.anaconda.org/conda-forge/win-64/vs2022_win-64-19.37.32822-h0123c8e_17.conda - conda: https://conda.anaconda.org/conda-forge/win-64/vswhere-3.1.4-h57928b3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/wheel-0.38.4-pyhd8ed1ab_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/win-64/xz-5.2.6-h8d14728_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.17.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/zstd-1.5.5-h12be248_0.conda + - pypi: https://files.pythonhosted.org/packages/88/8c/61021c45428ad2ef6131c6068d14f7f0968767e972e427cd87bd25c9ea7b/argcomplete-3.2.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/f3/18/3e867ab37a24fdf073c1617b9c7830e06ec270b1ea4694a624038fc40a03/colorlog-6.8.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/8e/41/9307e4f5f9976bc8b7fea0b66367734e8faf3ec84bc0d412d8cfabbb66cd/distlib-0.3.8-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/81/54/84d42a0bee35edba99dee7b59a8d4970eccdd44b99fe728ed912106fc781/filelock-3.13.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c2/55/c0d4ca1e6f68da8a1c7055ad80d4bf1fef651af08a68b52323cee97880c9/nox-2024.3.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/16/65/0d0bdfdac31e2db8c6d6c18fe1e00236f0dea279f9846f94a9aafa49cfc9/virtualenv-20.25.1-py3-none-any.whl default: channels: - url: https://conda.anaconda.org/conda-forge/ @@ -648,6 +773,7 @@ environments: linux-64: - conda: https://conda.anaconda.org/conda-forge/linux-64/_libgcc_mutex-0.1-conda_forge.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-2_gnu.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/attrs-23.1.0-pyh71513ae_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-auth-0.7.10-h0100c56_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-cal-0.6.9-h5d48c4d_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-common-0.9.10-hd590300_0.conda @@ -661,21 +787,29 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-checksums-0.1.17-h7f92143_6.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-crt-cpp-0.26.0-h3b5eec7_3.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-sdk-cpp-1.11.210-hac0d6e5_8.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/binaryen-116-h59595ed_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/binaryen-117-h59595ed_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/black-24.2.0-py311h38be061_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/blackdoc-0.3.8-pyhd8ed1ab_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-h7f98852_4.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/linux-64/c-ares-1.24.0-hd590300_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/ca-certificates-2023.7.22-hbcca054_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/clang-format-16-16.0.6-default_hb11cfb5_4.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/clang-format-16.0.6-default_hb11cfb5_4.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/clang-tools-16.0.6-default_hb11cfb5_4.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.1.7-unix_pyh707e725_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/cmake-3.27.6-hcfe8598_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/colorlog-4.8.0-py311h38be061_3.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/linux-64/doxygen-1.9.7-h661eb56_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.1.3-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/flatbuffers-23.5.26-h59595ed_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/gflags-2.2.2-he1b5a44_1004.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/gitdb-4.0.11-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/gitignore-parser-0.1.9-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/gitpython-3.1.40-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/glog-0.6.0-h6f12383_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/linux-64/icu-73.2-h59595ed_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-4.13.0-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/just-1.15.0-he8a937b_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/keyutils-1.6.1-h166bdaf_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/linux-64/krb5-1.21.2-h659d440_0.conda @@ -731,117 +865,212 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/libxml2-2.11.5-h232c23b_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.2.13-hd590300_5.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/lz4-c-1.9.4-hcb278e6_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/markupsafe-2.1.5-py311h459d7ec_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-3.0.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/maturin-1.4.0-py311h63ff55d_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.0-pyhd8ed1ab_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/linux-64/meilisearch-1.5.1-he8a937b_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/more-itertools-10.1.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/mypy-1.8.0-py311h459d7ec_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/mypy_extensions-1.0.0-pyha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.4-hcb278e6_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/ninja-1.11.1-h924138e_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/nodejs-18.18.2-hb753e55_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/numpy-1.26.4-py311h64a7726_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.2.1-hd590300_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/orc-1.9.2-h4b38347_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-23.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/patchelf-0.17.2-h58526e2_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pathspec-0.11.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pip-23.2.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-3.11.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.3.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/prettier-2.8.8-h75cfd52_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/psutil-5.9.8-py311h459d7ec_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/pyarrow-14.0.2-py311h39c9aba_3_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.16.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-7.4.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.11.8-hab00c5b_0_cpython.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/python_abi-3.11-4_cp311.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/rdma-core-28.9-h59595ed_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/re2-2023.06.02-h2873b5e_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.2-h8228510_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/rhash-1.4.4-hd590300_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/rich-13.6.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/ruff-0.2.2-py311h7145743_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/s2n-1.4.1-h06160fa_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/snappy-1.1.10-h9fff704_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/taplo-0.8.1-he8a937b_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-h2797004_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/typos-1.16.20-he8a937b_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/ucx-1.15.0-h64cca9d_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/xz-5.2.6-h166bdaf_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/linux-64/zlib-1.2.13-hd590300_5.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.5-hfc55251_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/argcomplete-1.12.3-pyhd8ed1ab_2.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/attrs-23.1.0-pyh71513ae_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/blackdoc-0.3.8-pyhd8ed1ab_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.1.7-unix_pyh707e725_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/distlib-0.3.7-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.1.3-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/filelock-3.13.1-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/gitdb-4.0.11-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/gitignore-parser-0.1.9-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/gitpython-3.1.40-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-4.13.0-pyha770c72_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/importlib_metadata-4.13.0-hd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.2-pyhd8ed1ab_1.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-3.0.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.0-pyhd8ed1ab_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/more-itertools-10.1.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/mypy_extensions-1.0.0-pyha770c72_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/nox-2021.10.1-pyhd8ed1ab_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-23.2-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pathspec-0.11.2-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pip-23.2.1-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-3.11.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.3.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/py-1.11.0-pyh6c4a22f_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.16.1-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-7.4.2-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/rich-13.6.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/semver-2.13.0-pyh9f0ad1d_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-68.2.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/smmap-5.0.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/snappy-1.1.10-h9fff704_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-h2797004_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.0.1-pyhd8ed1ab_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/tomlkit-0.12.3-pyha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.8.0-hd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.8.0-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/typos-1.16.20-he8a937b_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2024a-h0c530f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/virtualenv-20.24.6-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ucx-1.15.0-h64cca9d_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/wheel-0.38.4-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/xz-5.2.6-h166bdaf_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.17.0-pyhd8ed1ab_0.conda - osx-64: - - conda: https://conda.anaconda.org/conda-forge/noarch/argcomplete-1.12.3-pyhd8ed1ab_2.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/attrs-23.1.0-pyh71513ae_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/zlib-1.2.13-hd590300_5.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.5-hfc55251_0.conda + - pypi: https://files.pythonhosted.org/packages/88/8c/61021c45428ad2ef6131c6068d14f7f0968767e972e427cd87bd25c9ea7b/argcomplete-3.2.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/f3/18/3e867ab37a24fdf073c1617b9c7830e06ec270b1ea4694a624038fc40a03/colorlog-6.8.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/8e/41/9307e4f5f9976bc8b7fea0b66367734e8faf3ec84bc0d412d8cfabbb66cd/distlib-0.3.8-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/81/54/84d42a0bee35edba99dee7b59a8d4970eccdd44b99fe728ed912106fc781/filelock-3.13.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c2/55/c0d4ca1e6f68da8a1c7055ad80d4bf1fef651af08a68b52323cee97880c9/nox-2024.3.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/16/65/0d0bdfdac31e2db8c6d6c18fe1e00236f0dea279f9846f94a9aafa49cfc9/virtualenv-20.25.1-py3-none-any.whl + linux-aarch64: + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/_openmp_mutex-4.5-2_gnu.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/attrs-23.2.0-pyh71513ae_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/aws-c-auth-0.7.16-hcac9c52_6.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/aws-c-cal-0.6.10-h967b9ec_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/aws-c-common-0.9.13-h31becfc_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/aws-c-compression-0.2.18-h00d1b86_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/aws-c-event-stream-0.4.2-h128c7ac_4.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/aws-c-http-0.8.1-he0aa6e1_5.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/aws-c-io-0.14.5-h2bbb85f_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/aws-c-mqtt-0.10.2-hf974719_4.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/aws-c-s3-0.5.2-h170583c_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/aws-c-sdkutils-0.1.15-h00d1b86_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/aws-checksums-0.1.18-h00d1b86_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/aws-crt-cpp-0.26.2-h07bb24a_7.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/aws-sdk-cpp-1.11.267-hfce6cab_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/binaryen-117-h2f0025b_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/black-24.2.0-py311hec3470c_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/blackdoc-0.3.8-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/bzip2-1.0.8-h31becfc_5.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/c-ares-1.27.0-h31becfc_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ca-certificates-2024.2.2-hcefe29a_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/clang-format-16-16.0.6-default_hb368394_5.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/clang-format-16.0.6-default_hb368394_5.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/clang-tools-16.0.6-default_hb368394_5.conda - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.1.7-unix_pyh707e725_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/cmake-3.27.6-hef020d8_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/distlib-0.3.7-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.1.3-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/filelock-3.13.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/doxygen-1.9.7-h7b6a552_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.2.0-pyhd8ed1ab_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/flatbuffers-24.3.7-h2f0025b_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/gflags-2.2.2-h54f1f3f_1004.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/gitdb-4.0.11-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/gitignore-parser-0.1.9-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/gitpython-3.1.40-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-4.13.0-pyha770c72_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/importlib_metadata-4.13.0-hd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/gitignore-parser-0.1.11-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/gitpython-3.1.42-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/glog-0.7.0-ha63034d_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/icu-73.2-h787c7f5_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-7.0.2-pyha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.2-pyhd8ed1ab_1.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/just-1.24.0-h1d8f897_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/keyutils-1.6.1-h4e544f5_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/krb5-1.21.2-hc419048_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ld_impl_linux-aarch64-2.40-h2d8c526_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libabseil-20240116.1-cxx17_h2f0025b_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libarrow-14.0.2-h25df049_12_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libarrow-acero-14.0.2-h2f0025b_12_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libarrow-dataset-14.0.2-h2f0025b_12_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libarrow-flight-14.0.2-h2f4a9e5_12_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libarrow-flight-sql-14.0.2-hc81a7a7_12_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libarrow-gandiva-14.0.2-h3a2b1eb_12_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libarrow-substrait-14.0.2-hd45466a_12_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libblas-3.9.0-21_linuxaarch64_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libbrotlicommon-1.1.0-h31becfc_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libbrotlidec-1.1.0-h31becfc_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libbrotlienc-1.1.0-h31becfc_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libcblas-3.9.0-21_linuxaarch64_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libclang-cpp16-16.0.6-default_hb368394_5.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libclang13-18.1.1-default_hf9b4efe_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libcrc32c-1.1.2-h01db608_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libcurl-8.5.0-h4e8248e_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libedit-3.1.20191231-he28a2e2_2.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libev-4.33-h31becfc_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libevent-2.1.12-h4ba1bb4_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libexpat-2.6.2-h2f0025b_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libffi-3.4.2-h3557bc0_5.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgcc-ng-13.2.0-hf8544c7_5.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgfortran-ng-13.2.0-he9431aa_5.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgfortran5-13.2.0-h582850c_5.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgomp-13.2.0-hf8544c7_5.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgoogle-cloud-2.22.0-hd739bbb_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgoogle-cloud-storage-2.22.0-hdb39181_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgrpc-1.62.1-h98a9317_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libiconv-1.17-h31becfc_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/liblapack-3.9.0-21_linuxaarch64_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libllvm15-15.0.7-hb4f23b0_4.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libllvm16-16.0.6-h0b931ab_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libllvm18-18.1.1-hbfe100b_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libnghttp2-1.58.0-hb0e430d_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libnl-3.9.0-h31becfc_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libnsl-2.0.1-h31becfc_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenblas-0.3.26-pthreads_h5a5ec62_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libparquet-14.0.2-hb18b541_12_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libprotobuf-4.25.3-h648ac29_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libre2-11-2023.09.01-h9d008c2_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libsqlite-3.45.2-h194ca79_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libssh2-1.11.0-h492db2e_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libstdcxx-ng-13.2.0-h9a76618_5.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libthrift-0.19.0-h043aeee_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libutf8proc-2.8.0-h4e544f5_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libuuid-2.38.1-hb4cce97_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libuv-1.46.0-h31becfc_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libxcrypt-4.4.36-h31becfc_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libxml2-2.12.5-h3091e33_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libzlib-1.2.13-h31becfc_5.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/lz4-c-1.9.4-hd600fc2_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-3.0.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.0-pyhd8ed1ab_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/more-itertools-10.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/maturin-1.4.0-py311h06e5ef9_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/more-itertools-10.2.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/mypy-1.8.0-py311hcd402e7_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/mypy_extensions-1.0.0-pyha770c72_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/nox-2021.10.1-pyhd8ed1ab_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-23.2-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pathspec-0.11.2-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pip-23.2.1-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-3.11.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.3.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/py-1.11.0-pyh6c4a22f_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.16.1-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-7.4.2-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/rich-13.6.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ncurses-6.4-h0425590_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ninja-1.11.1-hdd96247_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/nodejs-18.19.0-hc1f8a26_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/numpy-1.26.4-py311h69ead2a_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/openssl-3.2.1-h31becfc_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/orc-2.0.0-h75d905f_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-24.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pathspec-0.12.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pip-24.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.2.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.4.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/prettier-2.8.8-hc2da131_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/psutil-5.9.8-py311hcd402e7_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pyarrow-14.0.2-py311h1eb6f34_12_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.17.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-8.1.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/python-3.11.8-h43d1f9e_0_cpython.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/python_abi-3.11-4_cp311.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/rdma-core-50.0-h0425590_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/re2-2023.09.01-h9caee61_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/readline-8.2-h8fc344f_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/rhash-1.4.4-h31becfc_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/rich-13.7.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ruff-0.2.2-py311he69e3a7_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/s2n-1.4.5-h5a25046_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/semver-2.13.0-pyh9f0ad1d_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-68.2.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-69.2.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/smmap-5.0.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/snappy-1.1.10-he8610fa_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/tk-8.6.13-h194ca79_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.0.1-pyhd8ed1ab_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/tomlkit-0.12.3-pyha770c72_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.8.0-hd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.8.0-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.10.0-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/typos-1.19.0-h1d8f897_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2024a-h0c530f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/virtualenv-20.24.6-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ucx-1.15.0-hcf8619e_7.conda - conda: https://conda.anaconda.org/conda-forge/noarch/wheel-0.38.4-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xz-5.2.6-h9cdd2b7_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.17.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/zlib-1.2.13-h31becfc_5.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/zstd-1.5.5-h4c53e97_0.conda + - pypi: https://files.pythonhosted.org/packages/88/8c/61021c45428ad2ef6131c6068d14f7f0968767e972e427cd87bd25c9ea7b/argcomplete-3.2.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/f3/18/3e867ab37a24fdf073c1617b9c7830e06ec270b1ea4694a624038fc40a03/colorlog-6.8.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/8e/41/9307e4f5f9976bc8b7fea0b66367734e8faf3ec84bc0d412d8cfabbb66cd/distlib-0.3.8-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/81/54/84d42a0bee35edba99dee7b59a8d4970eccdd44b99fe728ed912106fc781/filelock-3.13.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c2/55/c0d4ca1e6f68da8a1c7055ad80d4bf1fef651af08a68b52323cee97880c9/nox-2024.3.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/16/65/0d0bdfdac31e2db8c6d6c18fe1e00236f0dea279f9846f94a9aafa49cfc9/virtualenv-20.25.1-py3-none-any.whl + osx-64: + - conda: https://conda.anaconda.org/conda-forge/noarch/attrs-23.1.0-pyh71513ae_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/aws-c-auth-0.7.10-h5ed86db_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/aws-c-cal-0.6.9-had988b7_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/aws-c-common-0.9.10-h10d778d_0.conda @@ -855,21 +1084,29 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-64/aws-checksums-0.1.17-hb45f1eb_6.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/aws-crt-cpp-0.26.0-h88f2ebf_3.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/aws-sdk-cpp-1.11.210-heeba50e_8.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/binaryen-116-he965462_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/binaryen-117-h73e2aa4_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/black-24.2.0-py311h6eed73b_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/blackdoc-0.3.8-pyhd8ed1ab_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/osx-64/bzip2-1.0.8-h0d85af4_4.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/osx-64/c-ares-1.24.0-h10d778d_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/ca-certificates-2023.7.22-h8857fd0_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/clang-format-16-16.0.6-default_h7151d67_5.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/clang-format-16.0.6-default_h7151d67_5.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/clang-tools-16.0.6-default_h7151d67_5.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.1.7-unix_pyh707e725_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/cmake-3.27.6-hf40c264_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/colorlog-4.8.0-py311h6eed73b_3.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/osx-64/doxygen-1.9.7-hd7636e7_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.1.3-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/flatbuffers-23.5.26-he965462_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/gflags-2.2.2-hb1e8313_1004.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/gitdb-4.0.11-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/gitignore-parser-0.1.9-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/gitpython-3.1.40-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/glog-0.6.0-h8ac2a54_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/osx-64/icu-73.2-hf5e326d_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-4.13.0-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/just-1.15.0-h63b85fc_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/krb5-1.21.2-hb884880_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/libabseil-20230802.1-cxx17_h048a20a_0.conda @@ -918,73 +1155,59 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-64/libzlib-1.2.13-h8a1eda9_5.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/llvm-openmp-17.0.2-hff08bdf_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/lz4-c-1.9.4-hf0c8a7f_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/markupsafe-2.1.5-py311he705e18_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-3.0.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/maturin-1.4.0-py311h24bb903_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/meilisearch-1.5.1-hc85fda4_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/more-itertools-10.1.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/mypy-1.8.0-py311he705e18_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/mypy_extensions-1.0.0-pyha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/ncurses-6.4-hf0c8a7f_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/ninja-1.11.1-hb8565cd_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/nodejs-18.18.2-h2713218_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/numpy-1.26.4-py311hc43a94b_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/openssl-3.2.1-hd75f5a5_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/orc-1.9.2-h9ab30d4_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-23.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pathspec-0.11.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pip-23.2.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-3.11.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.3.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/prettier-2.8.8-h3db311d_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/psutil-5.9.8-py311he705e18_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/pyarrow-14.0.2-py311h54e7ce8_3_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.16.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-7.4.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/python-3.11.8-h9f0c242_0_cpython.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/python_abi-3.11-4_cp311.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/re2-2023.06.02-hd34609a_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/readline-8.2-h9e318b2_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/rhash-1.4.4-h0dc2134_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/ruff-0.2.2-py311hfff7943_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/snappy-1.1.10-h225ccf5_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/taplo-0.8.1-h7205ca4_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/tk-8.6.13-hef22860_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/typos-1.16.20-h63b85fc_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/xz-5.2.6-h775f41a_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/osx-64/zlib-1.2.13-h8a1eda9_5.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/zstd-1.5.5-h829000d_0.conda - osx-arm64: - - conda: https://conda.anaconda.org/conda-forge/noarch/argcomplete-1.12.3-pyhd8ed1ab_2.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/attrs-23.1.0-pyh71513ae_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/blackdoc-0.3.8-pyhd8ed1ab_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.1.7-unix_pyh707e725_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/distlib-0.3.7-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.1.3-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/filelock-3.13.1-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/gitdb-4.0.11-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/gitignore-parser-0.1.9-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/gitpython-3.1.40-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-4.13.0-pyha770c72_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/importlib_metadata-4.13.0-hd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.2-pyhd8ed1ab_1.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-3.0.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.0-pyhd8ed1ab_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/more-itertools-10.1.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/mypy_extensions-1.0.0-pyha770c72_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/nox-2021.10.1-pyhd8ed1ab_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-23.2-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pathspec-0.11.2-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pip-23.2.1-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-3.11.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.3.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/py-1.11.0-pyh6c4a22f_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.16.1-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-7.4.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/rich-13.6.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/ruff-0.2.2-py311hfff7943_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/semver-2.13.0-pyh9f0ad1d_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-68.2.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/smmap-5.0.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/osx-64/snappy-1.1.10-h225ccf5_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/tk-8.6.13-hef22860_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.0.1-pyhd8ed1ab_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/tomlkit-0.12.3-pyha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.8.0-hd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.8.0-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/typos-1.16.20-h63b85fc_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2024a-h0c530f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/virtualenv-20.24.6-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/wheel-0.38.4-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/osx-64/xz-5.2.6-h775f41a_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.17.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/zlib-1.2.13-h8a1eda9_5.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/zstd-1.5.5-h829000d_0.conda + - pypi: https://files.pythonhosted.org/packages/88/8c/61021c45428ad2ef6131c6068d14f7f0968767e972e427cd87bd25c9ea7b/argcomplete-3.2.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/f3/18/3e867ab37a24fdf073c1617b9c7830e06ec270b1ea4694a624038fc40a03/colorlog-6.8.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/8e/41/9307e4f5f9976bc8b7fea0b66367734e8faf3ec84bc0d412d8cfabbb66cd/distlib-0.3.8-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/81/54/84d42a0bee35edba99dee7b59a8d4970eccdd44b99fe728ed912106fc781/filelock-3.13.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c2/55/c0d4ca1e6f68da8a1c7055ad80d4bf1fef651af08a68b52323cee97880c9/nox-2024.3.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/16/65/0d0bdfdac31e2db8c6d6c18fe1e00236f0dea279f9846f94a9aafa49cfc9/virtualenv-20.25.1-py3-none-any.whl + osx-arm64: + - conda: https://conda.anaconda.org/conda-forge/noarch/attrs-23.1.0-pyh71513ae_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-auth-0.7.10-h8e8137d_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-cal-0.6.9-hb1772db_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-common-0.9.10-h93a5062_0.conda @@ -998,21 +1221,29 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-checksums-0.1.17-hb1772db_6.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-crt-cpp-0.26.0-hcc526ff_3.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-sdk-cpp-1.11.210-ha042220_8.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/binaryen-116-h13dd4ca_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/binaryen-117-hebf3989_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/black-24.2.0-py311h267d04e_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/blackdoc-0.3.8-pyhd8ed1ab_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/bzip2-1.0.8-h3422bc3_4.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/c-ares-1.24.0-h93a5062_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ca-certificates-2023.7.22-hf0a4a13_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/clang-format-16-16.0.6-default_he012953_5.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/clang-format-16.0.6-default_he012953_5.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/clang-tools-16.0.6-default_he012953_5.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.1.7-unix_pyh707e725_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/cmake-3.27.6-h1c59155_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/colorlog-4.8.0-py311h267d04e_3.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/doxygen-1.9.7-h0e2417a_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.1.3-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/flatbuffers-23.5.26-h13dd4ca_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/gflags-2.2.2-hc88da5d_1004.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/gitdb-4.0.11-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/gitignore-parser-0.1.9-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/gitpython-3.1.40-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/glog-0.6.0-h6da1cb0_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/icu-73.2-hc8870d7_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-4.13.0-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/just-1.15.0-h5ef7bb8_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/krb5-1.21.2-h92f50d5_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libabseil-20230802.1-cxx17_h13dd4ca_0.conda @@ -1061,133 +1292,692 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libzlib-1.2.13-h53f4e23_5.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/llvm-openmp-17.0.2-h1c12783_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lz4-c-1.9.4-hb7217d7_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/markupsafe-2.1.5-py311h05b510d_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-3.0.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/maturin-1.4.0-py311h71175c2_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/meilisearch-1.5.1-h5ef7bb8_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/more-itertools-10.1.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/mypy-1.8.0-py311h05b510d_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/mypy_extensions-1.0.0-pyha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ncurses-6.4-h7ea286d_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ninja-1.11.1-hffc8910_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/nodejs-18.18.2-h7ed3092_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/numpy-1.26.4-py311h7125741_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/openssl-3.2.1-h0d3ecfb_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/orc-1.9.2-h7c018df_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-23.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pathspec-0.11.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pip-23.2.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-3.11.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.3.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/prettier-2.8.8-ha12bae2_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/psutil-5.9.8-py311h05b510d_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pyarrow-14.0.2-py311hd7bc329_3_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.16.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-7.4.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-3.11.8-hdf0ec26_0_cpython.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python_abi-3.11-4_cp311.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/re2-2023.06.02-h6135d0a_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/readline-8.2-h92ec313_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/rhash-1.4.4-hb547adb_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/rich-13.6.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ruff-0.2.2-py311h8c97afb_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/semver-2.13.0-pyh9f0ad1d_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-68.2.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/smmap-5.0.0-pyhd8ed1ab_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/snappy-1.1.10-h17c5cce_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/taplo-0.8.1-h69fbcac_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tk-8.6.13-hb31c410_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.0.1-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/tomlkit-0.12.3-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.8.0-hd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.8.0-pyha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/typos-1.16.20-h5ef7bb8_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2024a-h0c530f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/wheel-0.38.4-pyhd8ed1ab_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/xz-5.2.6-h57fd34a_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.17.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zlib-1.2.13-h53f4e23_5.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zstd-1.5.5-h4f39d0f_0.conda + - pypi: https://files.pythonhosted.org/packages/88/8c/61021c45428ad2ef6131c6068d14f7f0968767e972e427cd87bd25c9ea7b/argcomplete-3.2.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/f3/18/3e867ab37a24fdf073c1617b9c7830e06ec270b1ea4694a624038fc40a03/colorlog-6.8.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/8e/41/9307e4f5f9976bc8b7fea0b66367734e8faf3ec84bc0d412d8cfabbb66cd/distlib-0.3.8-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/81/54/84d42a0bee35edba99dee7b59a8d4970eccdd44b99fe728ed912106fc781/filelock-3.13.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c2/55/c0d4ca1e6f68da8a1c7055ad80d4bf1fef651af08a68b52323cee97880c9/nox-2024.3.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/16/65/0d0bdfdac31e2db8c6d6c18fe1e00236f0dea279f9846f94a9aafa49cfc9/virtualenv-20.25.1-py3-none-any.whl win-64: - - conda: https://conda.anaconda.org/conda-forge/noarch/argcomplete-1.12.3-pyhd8ed1ab_2.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/attrs-23.1.0-pyh71513ae_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/aws-c-auth-0.7.16-hec1de76_6.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/aws-c-cal-0.6.10-hd481e46_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/aws-c-common-0.9.13-hcfcfb64_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/aws-c-compression-0.2.18-hd481e46_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/aws-c-event-stream-0.4.2-h0f06f08_4.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/aws-c-http-0.8.1-hdb5aac5_5.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/aws-c-io-0.14.5-h08270f9_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/aws-c-mqtt-0.10.2-hfea8755_4.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/aws-c-s3-0.5.2-h4b2095a_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/aws-c-sdkutils-0.1.15-hd481e46_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/aws-checksums-0.1.18-hd481e46_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/aws-crt-cpp-0.26.2-h8492d2a_7.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/aws-sdk-cpp-1.11.267-h93f5800_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/binaryen-117-h63175ca_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/black-24.2.0-py311h1ea47a8_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/blackdoc-0.3.8-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/win-64/bzip2-1.0.8-h8ffe710_4.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/win-64/c-ares-1.27.0-hcfcfb64_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/ca-certificates-2023.7.22-h56e8100_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/clang-format-16.0.6-default_h3a3e6c3_5.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/clang-tools-16.0.6-default_h3a3e6c3_5.conda - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.1.7-win_pyh7428d3b_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/cmake-3.27.6-hf0feee3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/distlib-0.3.7-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/doxygen-1.9.7-h849606c_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.1.3-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/filelock-3.13.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/flatbuffers-23.5.26-h63175ca_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/gitdb-4.0.11-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/gitignore-parser-0.1.9-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/gitpython-3.1.40-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-4.13.0-pyha770c72_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/importlib_metadata-4.13.0-hd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.2-pyhd8ed1ab_1.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/win-64/intel-openmp-2023.2.0-h57928b3_50496.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/just-1.15.0-h7f3b576_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/krb5-1.21.2-heb0366b_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libabseil-20240116.1-cxx17_h63175ca_2.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libarrow-14.0.2-hd01637b_10_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libarrow-acero-14.0.2-h63175ca_10_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libarrow-dataset-14.0.2-h63175ca_10_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libarrow-flight-14.0.2-hca4e5ea_10_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libarrow-flight-sql-14.0.2-h1ef3bed_10_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libarrow-gandiva-14.0.2-h6d0e577_10_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libarrow-substrait-14.0.2-hf368baa_10_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libblas-3.9.0-18_win64_mkl.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libbrotlicommon-1.1.0-hcfcfb64_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libbrotlidec-1.1.0-hcfcfb64_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libbrotlienc-1.1.0-hcfcfb64_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libcblas-3.9.0-18_win64_mkl.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libclang13-17.0.6-default_h85b4d89_2.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libcrc32c-1.1.2-h0e60522_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/win-64/libcurl-8.5.0-hd5e4a3a_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libevent-2.1.12-h3671451_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libexpat-2.5.0-h63175ca_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libffi-3.4.2-h8ffe710_5.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/win-64/libgoogle-cloud-2.21.0-h2b62511_2.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libgoogle-cloud-storage-2.21.0-hb581fae_2.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libgrpc-1.61.1-h864d0f4_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libhwloc-2.9.3-default_haede6df_1009.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libiconv-1.17-h8ffe710_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/win-64/liblapack-3.9.0-18_win64_mkl.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libparquet-14.0.2-h7ec3a38_10_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libprotobuf-4.25.2-h503648d_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libre2-11-2023.09.01-hf8d8778_2.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libsqlite-3.45.1-hcfcfb64_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libssh2-1.11.0-h7dfc565_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libthrift-0.19.0-ha2b3283_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libutf8proc-2.8.0-h82a8f57_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/win-64/libuv-1.44.2-hcfcfb64_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libxml2-2.12.5-hc3477c8_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libzlib-1.2.13-hcfcfb64_5.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/lz4-c-1.9.4-hcfcfb64_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/m2w64-gcc-libgfortran-5.3.0-6.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/win-64/m2w64-gcc-libs-5.3.0-7.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/win-64/m2w64-gcc-libs-core-5.3.0-7.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/win-64/m2w64-gmp-6.1.0-2.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/win-64/m2w64-libwinpthread-git-5.0.0.4634.697f757-2.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-3.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/maturin-1.4.0-py311h9a9e57f_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/win-64/mkl-2022.1.0-h6a75c08_874.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/more-itertools-10.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/msys2-conda-epoch-20160418-1.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/win-64/mypy-1.8.0-py311ha68e1ae_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/mypy_extensions-1.0.0-pyha770c72_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/nox-2021.10.1-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/win-64/ninja-1.11.1-h91493d7_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/nodejs-18.18.2-h57928b3_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/numpy-1.26.4-py311h0b4df5a_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/openssl-3.2.1-hcfcfb64_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/orc-1.9.2-h2702c50_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-23.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pathspec-0.11.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pip-23.2.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-3.11.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.3.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/py-1.11.0-pyh6c4a22f_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/win-64/prettier-2.8.8-hd2f1330_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/psutil-5.9.8-py311ha68e1ae_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/pthreads-win32-2.9.1-hfa6e2cd_3.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/win-64/pyarrow-14.0.2-py311h6a6099b_10_cpu.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.16.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-7.4.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/python-3.11.8-h2628c8c_0_cpython.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/python_abi-3.11-4_cp311.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/re2-2023.09.01-hd3b24a8_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/rich-13.6.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/ruff-0.2.2-py311hc14472d_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/semver-2.13.0-pyh9f0ad1d_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-68.2.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/smmap-5.0.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/win-64/snappy-1.1.10-hfb803bf_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/tbb-2021.10.0-h91493d7_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/tk-8.6.13-hcfcfb64_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.0.1-pyhd8ed1ab_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/tomlkit-0.12.3-pyha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.8.0-hd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.8.0-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/typos-1.16.20-h7f3b576_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2024a-h0c530f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/virtualenv-20.24.6-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/ucrt-10.0.22621.0-h57928b3_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/win-64/vc-14.3-h64f974e_17.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/vc14_runtime-14.36.32532-hdcecf7f_17.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/vs2015_runtime-14.36.32532-h05e6639_17.conda - conda: https://conda.anaconda.org/conda-forge/noarch/wheel-0.38.4-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/win-64/xz-5.2.6-h8d14728_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.17.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/aws-c-auth-0.7.16-hec1de76_6.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/aws-c-cal-0.6.10-hd481e46_1.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/aws-c-common-0.9.13-hcfcfb64_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/aws-c-compression-0.2.18-hd481e46_1.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/aws-c-event-stream-0.4.2-h0f06f08_4.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/aws-c-http-0.8.1-hdb5aac5_5.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/aws-c-io-0.14.5-h08270f9_1.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/aws-c-mqtt-0.10.2-hfea8755_4.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/aws-c-s3-0.5.2-h4b2095a_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/aws-c-sdkutils-0.1.15-hd481e46_1.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/aws-checksums-0.1.18-hd481e46_1.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/aws-crt-cpp-0.26.2-h8492d2a_7.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/aws-sdk-cpp-1.11.267-h93f5800_1.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/binaryen-116-h63175ca_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/zstd-1.5.5-h12be248_0.conda + - pypi: https://files.pythonhosted.org/packages/88/8c/61021c45428ad2ef6131c6068d14f7f0968767e972e427cd87bd25c9ea7b/argcomplete-3.2.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/f3/18/3e867ab37a24fdf073c1617b9c7830e06ec270b1ea4694a624038fc40a03/colorlog-6.8.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/8e/41/9307e4f5f9976bc8b7fea0b66367734e8faf3ec84bc0d412d8cfabbb66cd/distlib-0.3.8-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/81/54/84d42a0bee35edba99dee7b59a8d4970eccdd44b99fe728ed912106fc781/filelock-3.13.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c2/55/c0d4ca1e6f68da8a1c7055ad80d4bf1fef651af08a68b52323cee97880c9/nox-2024.3.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/16/65/0d0bdfdac31e2db8c6d6c18fe1e00236f0dea279f9846f94a9aafa49cfc9/virtualenv-20.25.1-py3-none-any.whl + taplo: + channels: + - url: https://conda.anaconda.org/conda-forge/ + packages: + linux-64: + - conda: https://conda.anaconda.org/conda-forge/linux-64/_libgcc_mutex-0.1-conda_forge.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-2_gnu.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/attrs-23.2.0-pyh71513ae_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-auth-0.7.16-haed3651_8.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-cal-0.6.10-ha9bf9b1_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-common-0.9.14-hd590300_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-compression-0.2.18-h4466546_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-event-stream-0.4.2-he635cd5_6.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-http-0.8.1-hbfc29b2_7.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-io-0.14.6-h9e7f0e3_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-mqtt-0.10.3-hffff1cc_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-s3-0.5.2-h4893938_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-sdkutils-0.1.15-h4466546_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-checksums-0.1.18-h4466546_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-crt-cpp-0.26.3-h137ae52_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-sdk-cpp-1.11.267-he0cb598_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/binaryen-117-h59595ed_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/black-24.2.0-py311h38be061_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/blackdoc-0.3.8-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-hd590300_5.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/c-ares-1.27.0-hd590300_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ca-certificates-2024.2.2-hbcca054_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/clang-format-16-16.0.6-default_h127d8a8_5.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/clang-format-16.0.6-default_h127d8a8_5.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/clang-tools-16.0.6-default_h127d8a8_5.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.1.7-unix_pyh707e725_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/cmake-3.27.6-hcfe8598_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/doxygen-1.9.7-h661eb56_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.2.0-pyhd8ed1ab_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/flatbuffers-24.3.7-h59595ed_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/gflags-2.2.2-he1b5a44_1004.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/gitdb-4.0.11-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/gitignore-parser-0.1.11-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/gitpython-3.1.42-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/glog-0.7.0-hed5481d_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/icu-73.2-h59595ed_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-7.0.2-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/just-1.24.0-he8a937b_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/keyutils-1.6.1-h166bdaf_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/krb5-1.21.2-h659d440_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.40-h41732ed_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libabseil-20240116.1-cxx17_h59595ed_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-14.0.2-h6bfc85a_13_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-acero-14.0.2-h59595ed_13_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-dataset-14.0.2-h59595ed_13_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-flight-14.0.2-hc6145d9_13_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-flight-sql-14.0.2-h757c851_13_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-gandiva-14.0.2-hb016d2e_13_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-substrait-14.0.2-h757c851_13_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libblas-3.9.0-21_linux64_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlicommon-1.1.0-hd590300_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlidec-1.1.0-hd590300_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlienc-1.1.0-hd590300_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libcblas-3.9.0-21_linux64_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libclang-cpp16-16.0.6-default_h127d8a8_5.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libclang13-18.1.1-default_h5d6823c_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libcrc32c-1.1.2-h9c3ff4c_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/libcurl-8.5.0-hca28451_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libedit-3.1.20191231-he28a2e2_2.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/libev-4.33-hd590300_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libevent-2.1.12-hf998b51_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.6.2-h59595ed_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.4.2-h7f98852_5.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-13.2.0-h807b86a_5.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran-ng-13.2.0-h69a702a_5.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran5-13.2.0-ha4646dd_5.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-13.2.0-h807b86a_5.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgoogle-cloud-2.22.0-h9be4e54_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgoogle-cloud-storage-2.22.0-hc7a4891_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgrpc-1.62.1-h15f2491_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libiconv-1.17-hd590300_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/liblapack-3.9.0-21_linux64_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libllvm15-15.0.7-hb3ce162_4.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libllvm16-16.0.6-hb3ce162_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libllvm18-18.1.1-h2448989_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libnghttp2-1.58.0-h47da74e_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libnl-3.9.0-hd590300_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libnsl-2.0.1-hd590300_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenblas-0.3.26-pthreads_h413a1c8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libparquet-14.0.2-h352af49_13_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libprotobuf-4.25.3-h08a7969_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libre2-11-2023.09.01-h5a48ba9_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.45.2-h2797004_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libssh2-1.11.0-h0841786_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-13.2.0-h7e041cc_5.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libthrift-0.19.0-hb90f79a_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libutf8proc-2.8.0-h166bdaf_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.38.1-h0b41bf4_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libuv-1.46.0-hd590300_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libxcrypt-4.4.36-hd590300_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libxml2-2.12.5-h232c23b_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.2.13-hd590300_5.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/lz4-c-1.9.4-hcb278e6_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-3.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/maturin-1.4.0-py311h63ff55d_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/meilisearch-1.5.1-he8a937b_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/more-itertools-10.2.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/mypy-1.8.0-py311h459d7ec_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/mypy_extensions-1.0.0-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.4-h59595ed_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ninja-1.11.1-h924138e_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/nodejs-18.19.0-hb753e55_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/numpy-1.26.4-py311h64a7726_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.2.1-hd590300_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/orc-2.0.0-h1e5e2c1_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-24.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/patchelf-0.17.2-h58526e2_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pathspec-0.12.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pip-24.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.2.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.4.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/prettier-2.8.8-h75cfd52_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/psutil-5.9.8-py311h459d7ec_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pyarrow-14.0.2-py311h39c9aba_13_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.17.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-8.1.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.11.8-hab00c5b_0_cpython.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/python_abi-3.11-4_cp311.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/rdma-core-50.0-hd3aeb46_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/re2-2023.09.01-h7f4b329_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.2-h8228510_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/rhash-1.4.4-hd590300_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/rich-13.7.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ruff-0.2.2-py311h7145743_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/s2n-1.4.6-h06160fa_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/semver-2.13.0-pyh9f0ad1d_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-69.2.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/smmap-5.0.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/snappy-1.1.10-h9fff704_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/taplo-0.8.1-he8a937b_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_h4845f30_101.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.0.1-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/tomlkit-0.12.3-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.10.0-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/typos-1.19.0-he8a937b_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2024a-h0c530f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ucx-1.15.0-h11edf95_7.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/wheel-0.38.4-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/xz-5.2.6-h166bdaf_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.17.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/zlib-1.2.13-hd590300_5.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.5-hfc55251_0.conda + - pypi: https://files.pythonhosted.org/packages/88/8c/61021c45428ad2ef6131c6068d14f7f0968767e972e427cd87bd25c9ea7b/argcomplete-3.2.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/f3/18/3e867ab37a24fdf073c1617b9c7830e06ec270b1ea4694a624038fc40a03/colorlog-6.8.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/8e/41/9307e4f5f9976bc8b7fea0b66367734e8faf3ec84bc0d412d8cfabbb66cd/distlib-0.3.8-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/81/54/84d42a0bee35edba99dee7b59a8d4970eccdd44b99fe728ed912106fc781/filelock-3.13.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c2/55/c0d4ca1e6f68da8a1c7055ad80d4bf1fef651af08a68b52323cee97880c9/nox-2024.3.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/16/65/0d0bdfdac31e2db8c6d6c18fe1e00236f0dea279f9846f94a9aafa49cfc9/virtualenv-20.25.1-py3-none-any.whl + osx-64: + - conda: https://conda.anaconda.org/conda-forge/noarch/attrs-23.2.0-pyh71513ae_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/aws-c-auth-0.7.16-h9d28af5_8.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/aws-c-cal-0.6.10-hf9de6f9_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/aws-c-common-0.9.14-h10d778d_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/aws-c-compression-0.2.18-h905ab21_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/aws-c-event-stream-0.4.2-h30f2259_6.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/aws-c-http-0.8.1-hce3b3da_7.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/aws-c-io-0.14.6-hf76ed93_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/aws-c-mqtt-0.10.3-ha335edc_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/aws-c-s3-0.5.2-h6f42f56_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/aws-c-sdkutils-0.1.15-h905ab21_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/aws-checksums-0.1.18-h905ab21_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/aws-crt-cpp-0.26.3-hf5b2fc6_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/aws-sdk-cpp-1.11.267-h232afc9_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/binaryen-117-h73e2aa4_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/black-24.2.0-py311h6eed73b_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/blackdoc-0.3.8-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/osx-64/bzip2-1.0.8-h10d778d_5.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/c-ares-1.27.0-h10d778d_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/ca-certificates-2024.2.2-h8857fd0_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/clang-format-16-16.0.6-default_h7151d67_5.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/clang-format-16.0.6-default_h7151d67_5.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/clang-tools-16.0.6-default_h7151d67_5.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.1.7-unix_pyh707e725_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/cmake-3.27.6-hf40c264_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/osx-64/doxygen-1.9.7-hd7636e7_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.2.0-pyhd8ed1ab_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/flatbuffers-24.3.7-h73e2aa4_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/gflags-2.2.2-hb1e8313_1004.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/gitdb-4.0.11-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/gitignore-parser-0.1.11-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/gitpython-3.1.42-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/glog-0.7.0-h31b1b29_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/icu-73.2-hf5e326d_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-7.0.2-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/just-1.24.0-h11a7dfb_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/krb5-1.21.2-hb884880_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libabseil-20240116.1-cxx17_hc1bcbd7_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libarrow-14.0.2-he79e29d_13_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libarrow-acero-14.0.2-h000cb23_13_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libarrow-dataset-14.0.2-h000cb23_13_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libarrow-flight-14.0.2-h2382776_13_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libarrow-flight-sql-14.0.2-h7e3fe20_13_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libarrow-gandiva-14.0.2-ha5acb15_13_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libarrow-substrait-14.0.2-h7e3fe20_13_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libblas-3.9.0-21_osx64_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libbrotlicommon-1.1.0-h0dc2134_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libbrotlidec-1.1.0-h0dc2134_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libbrotlienc-1.1.0-h0dc2134_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libcblas-3.9.0-21_osx64_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libclang-cpp16-16.0.6-default_h7151d67_5.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libclang13-18.1.1-default_h0edc4dd_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libcrc32c-1.1.2-he49afe7_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/osx-64/libcurl-8.5.0-h726d00d_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libcxx-16.0.6-hd57cbcb_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libedit-3.1.20191231-h0678c8f_2.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/osx-64/libev-4.33-h10d778d_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libevent-2.1.12-ha90c15b_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libexpat-2.6.2-h73e2aa4_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libffi-3.4.2-h0d85af4_5.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/osx-64/libgfortran-5.0.0-13_2_0_h97931a8_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libgfortran5-13.2.0-h2873a65_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libgoogle-cloud-2.22.0-h651e89d_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libgoogle-cloud-storage-2.22.0-ha67e85c_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libgrpc-1.62.1-h384b2fc_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libiconv-1.17-hd75f5a5_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/liblapack-3.9.0-21_osx64_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libllvm15-15.0.7-hbedff68_4.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libllvm16-16.0.6-hbedff68_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libllvm18-18.1.1-hbcf5fad_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libnghttp2-1.58.0-h64cf6d3_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libopenblas-0.3.26-openmp_hfef2a42_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libparquet-14.0.2-h381d950_13_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libprotobuf-4.25.3-h4e4d658_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libre2-11-2023.09.01-h81f5012_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libsqlite-3.45.2-h92b6c6a_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libssh2-1.11.0-hd019ec5_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libthrift-0.19.0-h064b379_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libutf8proc-2.8.0-hb7f2c08_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/osx-64/libuv-1.47.0-h67532ce_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libxml2-2.12.5-hc0ae0f7_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libzlib-1.2.13-h8a1eda9_5.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/llvm-openmp-17.0.6-hb6ac08f_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/lz4-c-1.9.4-hf0c8a7f_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-3.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/maturin-1.4.0-py311h24bb903_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/more-itertools-10.2.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/mypy-1.8.0-py311he705e18_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/mypy_extensions-1.0.0-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/ncurses-6.4-h93d8f39_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/ninja-1.11.1-hb8565cd_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/nodejs-18.19.0-h119ffd7_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/numpy-1.26.4-py311hc43a94b_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/openssl-3.2.1-hd75f5a5_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/orc-2.0.0-h6c6cd50_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-24.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pathspec-0.12.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pip-24.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.2.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.4.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/prettier-2.8.8-h3db311d_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/psutil-5.9.8-py311he705e18_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/pyarrow-14.0.2-py311h54e7ce8_13_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.17.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-8.1.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/python-3.11.8-h9f0c242_0_cpython.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/python_abi-3.11-4_cp311.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/re2-2023.09.01-hb168e87_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/readline-8.2-h9e318b2_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/rhash-1.4.4-h0dc2134_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/rich-13.7.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/ruff-0.2.2-py311hfff7943_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/semver-2.13.0-pyh9f0ad1d_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-69.2.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/smmap-5.0.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/osx-64/snappy-1.1.10-h225ccf5_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/taplo-0.8.1-h7205ca4_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/tk-8.6.13-h1abcd95_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.0.1-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/tomlkit-0.12.3-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.10.0-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/typos-1.19.0-h11a7dfb_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2024a-h0c530f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/wheel-0.38.4-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/osx-64/xz-5.2.6-h775f41a_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.17.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/zlib-1.2.13-h8a1eda9_5.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/zstd-1.5.5-h829000d_0.conda + - pypi: https://files.pythonhosted.org/packages/88/8c/61021c45428ad2ef6131c6068d14f7f0968767e972e427cd87bd25c9ea7b/argcomplete-3.2.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/f3/18/3e867ab37a24fdf073c1617b9c7830e06ec270b1ea4694a624038fc40a03/colorlog-6.8.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/8e/41/9307e4f5f9976bc8b7fea0b66367734e8faf3ec84bc0d412d8cfabbb66cd/distlib-0.3.8-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/81/54/84d42a0bee35edba99dee7b59a8d4970eccdd44b99fe728ed912106fc781/filelock-3.13.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c2/55/c0d4ca1e6f68da8a1c7055ad80d4bf1fef651af08a68b52323cee97880c9/nox-2024.3.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/16/65/0d0bdfdac31e2db8c6d6c18fe1e00236f0dea279f9846f94a9aafa49cfc9/virtualenv-20.25.1-py3-none-any.whl + osx-arm64: + - conda: https://conda.anaconda.org/conda-forge/noarch/attrs-23.2.0-pyh71513ae_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-auth-0.7.16-h0d2f7a6_8.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-cal-0.6.10-h677d54c_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-common-0.9.14-h93a5062_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-compression-0.2.18-h677d54c_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-event-stream-0.4.2-h59ac3ca_6.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-http-0.8.1-hfe5d766_7.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-io-0.14.6-h9ac2cdb_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-mqtt-0.10.3-hb8a1441_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-s3-0.5.2-h4398043_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-sdkutils-0.1.15-h677d54c_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-checksums-0.1.18-h677d54c_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-crt-cpp-0.26.3-h0de420c_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-sdk-cpp-1.11.267-h2fb64bc_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/binaryen-117-hebf3989_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/black-24.2.0-py311h267d04e_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/blackdoc-0.3.8-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/bzip2-1.0.8-h93a5062_5.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/c-ares-1.27.0-h93a5062_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ca-certificates-2024.2.2-hf0a4a13_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/clang-format-16-16.0.6-default_he012953_5.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/clang-format-16.0.6-default_he012953_5.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/clang-tools-16.0.6-default_he012953_5.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.1.7-unix_pyh707e725_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/cmake-3.27.6-h1c59155_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/doxygen-1.9.7-h0e2417a_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.2.0-pyhd8ed1ab_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/flatbuffers-24.3.7-hebf3989_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/gflags-2.2.2-hc88da5d_1004.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/gitdb-4.0.11-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/gitignore-parser-0.1.11-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/gitpython-3.1.42-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/glog-0.7.0-hc6770e3_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/icu-73.2-hc8870d7_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-7.0.2-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/just-1.24.0-h5ef7bb8_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/krb5-1.21.2-h92f50d5_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libabseil-20240116.1-cxx17_hebf3989_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libarrow-14.0.2-h5233fb5_13_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libarrow-acero-14.0.2-h13dd4ca_13_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libarrow-dataset-14.0.2-h13dd4ca_13_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libarrow-flight-14.0.2-h95ca633_13_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libarrow-flight-sql-14.0.2-hdc5392b_13_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libarrow-gandiva-14.0.2-hfef958d_13_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libarrow-substrait-14.0.2-hef52601_13_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libblas-3.9.0-21_osxarm64_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libbrotlicommon-1.1.0-hb547adb_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libbrotlidec-1.1.0-hb547adb_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libbrotlienc-1.1.0-hb547adb_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcblas-3.9.0-21_osxarm64_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libclang-cpp16-16.0.6-default_he012953_5.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libclang13-18.1.1-default_h83d0a53_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcrc32c-1.1.2-hbdafb3b_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcurl-8.5.0-h2d989ff_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-16.0.6-h4653b0c_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libedit-3.1.20191231-hc8eb9b7_2.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libev-4.33-h93a5062_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libevent-2.1.12-h2757513_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libexpat-2.6.2-hebf3989_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libffi-3.4.2-h3422bc3_5.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgfortran-5.0.0-13_2_0_hd922786_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgfortran5-13.2.0-hf226fd6_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgoogle-cloud-2.22.0-hbebe991_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgoogle-cloud-storage-2.22.0-h8a76758_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgrpc-1.62.1-h9c18a4f_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libiconv-1.17-h0d3ecfb_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblapack-3.9.0-21_osxarm64_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libllvm15-15.0.7-h2621b3d_4.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libllvm16-16.0.6-haab561b_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libllvm18-18.1.1-h30cc82d_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libnghttp2-1.58.0-ha4dd798_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libopenblas-0.3.26-openmp_h6c19121_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libparquet-14.0.2-hf6ce1d5_13_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libprotobuf-4.25.3-hbfab5d5_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libre2-11-2023.09.01-h7b2c953_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.45.2-h091b4b1_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libssh2-1.11.0-h7a5bd25_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libthrift-0.19.0-h026a170_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libutf8proc-2.8.0-h1a8c8d9_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libuv-1.47.0-h93a5062_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libxml2-2.12.5-h0d0cfa8_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libzlib-1.2.13-h53f4e23_5.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/llvm-openmp-17.0.6-hcd81f8e_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lz4-c-1.9.4-hb7217d7_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-3.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/maturin-1.4.0-py311h71175c2_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/more-itertools-10.2.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/mypy-1.8.0-py311h05b510d_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/mypy_extensions-1.0.0-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ncurses-6.4-h463b476_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ninja-1.11.1-hffc8910_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/nodejs-18.19.0-h5f47a4d_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/numpy-1.26.4-py311h7125741_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/openssl-3.2.1-h0d3ecfb_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/orc-2.0.0-h3d3088e_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-24.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pathspec-0.12.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pip-24.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.2.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.4.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/prettier-2.8.8-ha12bae2_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/psutil-5.9.8-py311h05b510d_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pyarrow-14.0.2-py311hd7bc329_13_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.17.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-8.1.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-3.11.8-hdf0ec26_0_cpython.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python_abi-3.11-4_cp311.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/re2-2023.09.01-h4cba328_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/readline-8.2-h92ec313_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/rhash-1.4.4-hb547adb_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/rich-13.7.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ruff-0.2.2-py311h8c97afb_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/semver-2.13.0-pyh9f0ad1d_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-69.2.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/smmap-5.0.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/snappy-1.1.10-h17c5cce_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/taplo-0.8.1-h69fbcac_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tk-8.6.13-h5083fa2_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.0.1-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/tomlkit-0.12.3-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.10.0-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/typos-1.19.0-h5ef7bb8_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2024a-h0c530f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/wheel-0.38.4-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/xz-5.2.6-h57fd34a_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.17.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zlib-1.2.13-h53f4e23_5.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zstd-1.5.5-h4f39d0f_0.conda + - pypi: https://files.pythonhosted.org/packages/88/8c/61021c45428ad2ef6131c6068d14f7f0968767e972e427cd87bd25c9ea7b/argcomplete-3.2.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/f3/18/3e867ab37a24fdf073c1617b9c7830e06ec270b1ea4694a624038fc40a03/colorlog-6.8.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/8e/41/9307e4f5f9976bc8b7fea0b66367734e8faf3ec84bc0d412d8cfabbb66cd/distlib-0.3.8-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/81/54/84d42a0bee35edba99dee7b59a8d4970eccdd44b99fe728ed912106fc781/filelock-3.13.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c2/55/c0d4ca1e6f68da8a1c7055ad80d4bf1fef651af08a68b52323cee97880c9/nox-2024.3.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/16/65/0d0bdfdac31e2db8c6d6c18fe1e00236f0dea279f9846f94a9aafa49cfc9/virtualenv-20.25.1-py3-none-any.whl + win-64: + - conda: https://conda.anaconda.org/conda-forge/noarch/attrs-23.2.0-pyh71513ae_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/aws-c-auth-0.7.16-h7613915_8.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/aws-c-cal-0.6.10-hf6fcf4e_2.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/aws-c-common-0.9.14-hcfcfb64_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/aws-c-compression-0.2.18-hf6fcf4e_2.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/aws-c-event-stream-0.4.2-h3df98b0_6.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/aws-c-http-0.8.1-h4e3df0f_7.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/aws-c-io-0.14.6-hf0b8b6f_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/aws-c-mqtt-0.10.3-h96fac68_2.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/aws-c-s3-0.5.2-h08df315_2.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/aws-c-sdkutils-0.1.15-hf6fcf4e_2.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/aws-checksums-0.1.18-hf6fcf4e_2.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/aws-crt-cpp-0.26.3-h6047f0a_2.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/aws-sdk-cpp-1.11.267-h558341a_3.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/binaryen-117-h63175ca_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/black-24.2.0-py311h1ea47a8_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/bzip2-1.0.8-h8ffe710_4.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/blackdoc-0.3.8-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/win-64/bzip2-1.0.8-hcfcfb64_5.conda - conda: https://conda.anaconda.org/conda-forge/win-64/c-ares-1.27.0-hcfcfb64_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/ca-certificates-2023.7.22-h56e8100_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/ca-certificates-2024.2.2-h56e8100_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/clang-format-16.0.6-default_h3a3e6c3_5.conda - conda: https://conda.anaconda.org/conda-forge/win-64/clang-tools-16.0.6-default_h3a3e6c3_5.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.1.7-win_pyh7428d3b_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/cmake-3.27.6-hf0feee3_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/colorlog-4.8.0-py311h1ea47a8_3.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/win-64/doxygen-1.9.7-h849606c_1.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/flatbuffers-23.5.26-h63175ca_1.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/intel-openmp-2023.2.0-h57928b3_50496.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/just-1.15.0-h7f3b576_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.2.0-pyhd8ed1ab_2.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/flatbuffers-24.3.7-h63175ca_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/gitdb-4.0.11-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/gitignore-parser-0.1.11-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/gitpython-3.1.42-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-7.0.2-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/intel-openmp-2024.0.0-h57928b3_49841.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/just-1.24.0-h7f3b576_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/krb5-1.21.2-heb0366b_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libabseil-20240116.1-cxx17_h63175ca_2.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libarrow-14.0.2-hd01637b_10_cpu.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libarrow-acero-14.0.2-h63175ca_10_cpu.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libarrow-dataset-14.0.2-h63175ca_10_cpu.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libarrow-flight-14.0.2-hca4e5ea_10_cpu.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libarrow-flight-sql-14.0.2-h1ef3bed_10_cpu.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libarrow-gandiva-14.0.2-h6d0e577_10_cpu.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libarrow-substrait-14.0.2-hf368baa_10_cpu.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libblas-3.9.0-18_win64_mkl.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libarrow-14.0.2-h2a83f13_13_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libarrow-acero-14.0.2-h63175ca_13_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libarrow-dataset-14.0.2-h63175ca_13_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libarrow-flight-14.0.2-h02312f3_13_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libarrow-flight-sql-14.0.2-h55b4db4_13_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libarrow-gandiva-14.0.2-hcb01e45_13_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libarrow-substrait-14.0.2-h89268de_13_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libblas-3.9.0-21_win64_mkl.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libbrotlicommon-1.1.0-hcfcfb64_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libbrotlidec-1.1.0-hcfcfb64_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libbrotlienc-1.1.0-hcfcfb64_1.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libcblas-3.9.0-18_win64_mkl.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libclang13-17.0.6-default_h85b4d89_2.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libcblas-3.9.0-21_win64_mkl.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libclang13-18.1.1-default_hf64faad_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libcrc32c-1.1.2-h0e60522_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/win-64/libcurl-8.5.0-hd5e4a3a_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libevent-2.1.12-h3671451_1.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libexpat-2.5.0-h63175ca_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libexpat-2.6.2-h63175ca_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libffi-3.4.2-h8ffe710_5.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/win-64/libgoogle-cloud-2.21.0-h2b62511_2.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libgoogle-cloud-storage-2.21.0-hb581fae_2.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libgrpc-1.61.1-h864d0f4_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libgoogle-cloud-2.22.0-h9cad5c0_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libgoogle-cloud-storage-2.22.0-hb581fae_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libgrpc-1.62.1-h5273850_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libhwloc-2.9.3-default_haede6df_1009.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libiconv-1.17-h8ffe710_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/win-64/liblapack-3.9.0-18_win64_mkl.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libparquet-14.0.2-h7ec3a38_10_cpu.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libprotobuf-4.25.2-h503648d_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libiconv-1.17-hcfcfb64_2.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/liblapack-3.9.0-21_win64_mkl.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libparquet-14.0.2-h7ec3a38_13_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libprotobuf-4.25.3-h503648d_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libre2-11-2023.09.01-hf8d8778_2.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libsqlite-3.45.1-hcfcfb64_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libsqlite-3.45.2-hcfcfb64_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libssh2-1.11.0-h7dfc565_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libthrift-0.19.0-ha2b3283_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libutf8proc-2.8.0-h82a8f57_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/win-64/libuv-1.44.2-hcfcfb64_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libuv-1.48.0-hcfcfb64_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libxml2-2.12.5-hc3477c8_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libzlib-1.2.13-hcfcfb64_5.conda - conda: https://conda.anaconda.org/conda-forge/win-64/lz4-c-1.9.4-hcfcfb64_0.conda @@ -1196,36 +1986,61 @@ environments: - conda: https://conda.anaconda.org/conda-forge/win-64/m2w64-gcc-libs-core-5.3.0-7.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/win-64/m2w64-gmp-6.1.0-2.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/win-64/m2w64-libwinpthread-git-5.0.0.4634.697f757-2.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/win-64/markupsafe-2.1.5-py311ha68e1ae_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-3.0.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/maturin-1.4.0-py311h9a9e57f_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/meilisearch-1.5.1-h8b8d39b_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/mkl-2022.1.0-h6a75c08_874.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/mkl-2024.0.0-h66d3029_49657.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/more-itertools-10.2.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/msys2-conda-epoch-20160418-1.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/win-64/mypy-1.8.0-py311ha68e1ae_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/mypy_extensions-1.0.0-pyha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/ninja-1.11.1-h91493d7_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/nodejs-18.18.2-h57928b3_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/nodejs-18.19.0-h57928b3_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/numpy-1.26.4-py311h0b4df5a_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/openssl-3.2.1-hcfcfb64_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/orc-1.9.2-h2702c50_2.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/orc-2.0.0-heb0c069_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-24.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pathspec-0.12.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pip-24.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.2.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.4.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/prettier-2.8.8-hd2f1330_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/psutil-5.9.8-py311ha68e1ae_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/pthreads-win32-2.9.1-hfa6e2cd_3.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/win-64/pyarrow-14.0.2-py311h6a6099b_10_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/pyarrow-14.0.2-py311h6a6099b_13_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.17.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-8.1.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/python-3.11.8-h2628c8c_0_cpython.conda - conda: https://conda.anaconda.org/conda-forge/win-64/python_abi-3.11-4_cp311.conda - conda: https://conda.anaconda.org/conda-forge/win-64/re2-2023.09.01-hd3b24a8_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/rich-13.7.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/ruff-0.2.2-py311hc14472d_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/semver-2.13.0-pyh9f0ad1d_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-69.2.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/smmap-5.0.0-pyhd8ed1ab_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/win-64/snappy-1.1.10-hfb803bf_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/taplo-0.8.1-h7f3b576_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/tbb-2021.10.0-h91493d7_1.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/tk-8.6.13-hcfcfb64_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/typos-1.16.20-h7f3b576_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/tbb-2021.11.0-h91493d7_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/tk-8.6.13-h5226925_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.0.1-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/tomlkit-0.12.3-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.10.0-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/typos-1.19.0-h7f3b576_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2024a-h0c530f3_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/ucrt-10.0.22621.0-h57928b3_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/win-64/vc-14.3-h64f974e_17.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/vc14_runtime-14.36.32532-hdcecf7f_17.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/vs2015_runtime-14.36.32532-h05e6639_17.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/vc-14.3-hcf57466_18.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/vc14_runtime-14.38.33130-h82b7239_18.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/vs2015_runtime-14.38.33130-hcb4865c_18.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/wheel-0.38.4-pyhd8ed1ab_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/win-64/xz-5.2.6-h8d14728_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.17.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/zstd-1.5.5-h12be248_0.conda + - pypi: https://files.pythonhosted.org/packages/88/8c/61021c45428ad2ef6131c6068d14f7f0968767e972e427cd87bd25c9ea7b/argcomplete-3.2.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/f3/18/3e867ab37a24fdf073c1617b9c7830e06ec270b1ea4694a624038fc40a03/colorlog-6.8.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/8e/41/9307e4f5f9976bc8b7fea0b66367734e8faf3ec84bc0d412d8cfabbb66cd/distlib-0.3.8-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/81/54/84d42a0bee35edba99dee7b59a8d4970eccdd44b99fe728ed912106fc781/filelock-3.13.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c2/55/c0d4ca1e6f68da8a1c7055ad80d4bf1fef651af08a68b52323cee97880c9/nox-2024.3.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/16/65/0d0bdfdac31e2db8c6d6c18fe1e00236f0dea279f9846f94a9aafa49cfc9/virtualenv-20.25.1-py3-none-any.whl packages: - kind: conda name: _libgcc_mutex @@ -1257,24 +2072,34 @@ packages: size: 23621 timestamp: 1650670423406 - kind: conda - name: argcomplete - version: 1.12.3 - build: pyhd8ed1ab_2 - build_number: 2 - subdir: win-64 - noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/argcomplete-1.12.3-pyhd8ed1ab_2.tar.bz2 - sha256: 2abb116f5bdc62d5e83c9dd15e5fc30c2a9571f728ccc012fad03350ed1d581e - md5: b8152341fc3fc9880c6e1b9d188974e5 + name: _openmp_mutex + version: '4.5' + build: 2_gnu + build_number: 16 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/_openmp_mutex-4.5-2_gnu.tar.bz2 + sha256: 3702bef2f0a4d38bd8288bbe54aace623602a1343c2cfbefd3fa188e015bebf0 + md5: 6168d71addc746e8f2b8d57dfd2edcea depends: - - importlib_metadata >=0.23,<5 - - python >=3.5 - arch: x86_64 - platform: win - license: Apache-2.0 - license_family: Apache - size: 35310 - timestamp: 1619128850100 + - libgomp >=7.5.0 + constrains: + - openmp_impl 9999 + license: BSD-3-Clause + license_family: BSD + size: 23712 + timestamp: 1650670790230 +- kind: pypi + name: argcomplete + version: 3.2.3 + url: https://files.pythonhosted.org/packages/88/8c/61021c45428ad2ef6131c6068d14f7f0968767e972e427cd87bd25c9ea7b/argcomplete-3.2.3-py3-none-any.whl + sha256: c12355e0494c76a2a7b73e3a59b09024ca0ba1e279fb9ed6c1b82d5b74b6a70c + requires_dist: + - coverage ; extra == 'test' + - pexpect ; extra == 'test' + - wheel ; extra == 'test' + - ruff ; extra == 'test' + - mypy ; extra == 'test' + requires_python: '>=3.8' - kind: conda name: attrs version: 23.1.0 @@ -1291,6 +2116,8 @@ packages: platform: win license: MIT license_family: MIT + purls: + - pkg:pypi/attrs size: 55022 timestamp: 1683424195402 - kind: conda @@ -1306,6 +2133,8 @@ packages: - python >=3.7 license: MIT license_family: MIT + purls: + - pkg:pypi/attrs size: 54582 timestamp: 1704011393776 - kind: conda @@ -1372,6 +2201,25 @@ packages: license_family: Apache size: 89155 timestamp: 1704306064106 +- kind: conda + name: aws-c-auth + version: 0.7.16 + build: h0d2f7a6_8 + build_number: 8 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-auth-0.7.16-h0d2f7a6_8.conda + sha256: 82006dd3067f4d09fd8cee0ea9c4836b6ac0c02db68acd001ff5c7b8669522b5 + md5: a37cb159ebfb3d3adc1a351c98c1027f + depends: + - aws-c-cal >=0.6.10,<0.6.11.0a0 + - aws-c-common >=0.9.14,<0.9.15.0a0 + - aws-c-http >=0.8.1,<0.8.2.0a0 + - aws-c-io >=0.14.6,<0.14.7.0a0 + - aws-c-sdkutils >=0.1.15,<0.1.16.0a0 + license: Apache-2.0 + license_family: Apache + size: 89205 + timestamp: 1710282202281 - kind: conda name: aws-c-auth version: 0.7.16 @@ -1391,6 +2239,28 @@ packages: license_family: Apache size: 89495 timestamp: 1708633374785 +- kind: conda + name: aws-c-auth + version: 0.7.16 + build: h7613915_8 + build_number: 8 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/aws-c-auth-0.7.16-h7613915_8.conda + sha256: 9ac4ebfc14faa7377a0df29ebf562d55e04a99d6d72f8ce8bb6a661e4753cde3 + md5: 61c802b7e9c8d6215116c01ce7d582d9 + depends: + - aws-c-cal >=0.6.10,<0.6.11.0a0 + - aws-c-common >=0.9.14,<0.9.15.0a0 + - aws-c-http >=0.8.1,<0.8.2.0a0 + - aws-c-io >=0.14.6,<0.14.7.0a0 + - aws-c-sdkutils >=0.1.15,<0.1.16.0a0 + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + license: Apache-2.0 + license_family: Apache + size: 99468 + timestamp: 1710282357839 - kind: conda name: aws-c-auth version: 0.7.16 @@ -1430,6 +2300,65 @@ packages: license_family: Apache size: 90856 timestamp: 1708633418805 +- kind: conda + name: aws-c-auth + version: 0.7.16 + build: h9d28af5_8 + build_number: 8 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/aws-c-auth-0.7.16-h9d28af5_8.conda + sha256: f75a39577b61fc649e3a8c926b91218ebad6ea78beb2f2b16f90d3ae9493c1c4 + md5: 0b451cddce1ea8f9247b386ba3285edc + depends: + - aws-c-cal >=0.6.10,<0.6.11.0a0 + - aws-c-common >=0.9.14,<0.9.15.0a0 + - aws-c-http >=0.8.1,<0.8.2.0a0 + - aws-c-io >=0.14.6,<0.14.7.0a0 + - aws-c-sdkutils >=0.1.15,<0.1.16.0a0 + license: Apache-2.0 + license_family: Apache + size: 90270 + timestamp: 1710282294532 +- kind: conda + name: aws-c-auth + version: 0.7.16 + build: haed3651_8 + build_number: 8 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/aws-c-auth-0.7.16-haed3651_8.conda + sha256: 75a540b313e5dc212fc0a6057f8a5bee2dda443f17a5a076bd3ea4d7195d483e + md5: ce96c083829ab2727c942243ac93ffe0 + depends: + - aws-c-cal >=0.6.10,<0.6.11.0a0 + - aws-c-common >=0.9.14,<0.9.15.0a0 + - aws-c-http >=0.8.1,<0.8.2.0a0 + - aws-c-io >=0.14.6,<0.14.7.0a0 + - aws-c-sdkutils >=0.1.15,<0.1.16.0a0 + - libgcc-ng >=12 + license: Apache-2.0 + license_family: Apache + size: 103298 + timestamp: 1710281865011 +- kind: conda + name: aws-c-auth + version: 0.7.16 + build: hcac9c52_6 + build_number: 6 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/aws-c-auth-0.7.16-hcac9c52_6.conda + sha256: 183846836b1a6fa73ae852137eb1916f3d0f2a9d9569e6b1e5f8720f1ef60eb6 + md5: d2b70bb402aac5cfbfc269d43057fa4d + depends: + - aws-c-cal >=0.6.10,<0.6.11.0a0 + - aws-c-common >=0.9.13,<0.9.14.0a0 + - aws-c-http >=0.8.1,<0.8.2.0a0 + - aws-c-io >=0.14.5,<0.14.6.0a0 + - aws-c-sdkutils >=0.1.15,<0.1.16.0a0 + - libgcc-ng >=12 + license: Apache-2.0 + license_family: Apache + size: 107769 + timestamp: 1708633088332 - kind: conda name: aws-c-auth version: 0.7.16 @@ -1505,6 +2434,21 @@ packages: license_family: Apache size: 39662 timestamp: 1701212885323 +- kind: conda + name: aws-c-cal + version: 0.6.10 + build: h677d54c_2 + build_number: 2 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-cal-0.6.10-h677d54c_2.conda + sha256: d4f0fa97a3f6f5a090b0c9ed078fedf6b50f19a406d272f8e4b2b214f074323e + md5: a501703d122cdf7cf38c1bbc8c16f981 + depends: + - aws-c-common >=0.9.14,<0.9.15.0a0 + license: Apache-2.0 + license_family: Apache + size: 38986 + timestamp: 1709815581194 - kind: conda name: aws-c-cal version: 0.6.10 @@ -1520,6 +2464,40 @@ packages: license_family: Apache size: 45497 timestamp: 1708003974070 +- kind: conda + name: aws-c-cal + version: 0.6.10 + build: h967b9ec_1 + build_number: 1 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/aws-c-cal-0.6.10-h967b9ec_1.conda + sha256: b92492ab587792933673ac9c2a35f863d23131f57185f8882d39e91cb68163d7 + md5: 70047d857a1c7dfe144be45bf13b94cb + depends: + - aws-c-common >=0.9.13,<0.9.14.0a0 + - libgcc-ng >=12 + - openssl >=3.2.1,<4.0a0 + license: Apache-2.0 + license_family: Apache + size: 48505 + timestamp: 1708003694470 +- kind: conda + name: aws-c-cal + version: 0.6.10 + build: ha9bf9b1_2 + build_number: 2 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/aws-c-cal-0.6.10-ha9bf9b1_2.conda + sha256: e45d9f1eb862f566bdea3d3229dfc74f31e647a72198fe04aab58ccc03a30a37 + md5: ce2471034f5459a39636aacc292c96b6 + depends: + - aws-c-common >=0.9.14,<0.9.15.0a0 + - libgcc-ng >=12 + - openssl >=3.2.1,<4.0a0 + license: Apache-2.0 + license_family: Apache + size: 55421 + timestamp: 1709815095625 - kind: conda name: aws-c-cal version: 0.6.10 @@ -1555,6 +2533,24 @@ packages: license_family: Apache size: 55726 timestamp: 1708004211846 +- kind: conda + name: aws-c-cal + version: 0.6.10 + build: hf6fcf4e_2 + build_number: 2 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/aws-c-cal-0.6.10-hf6fcf4e_2.conda + sha256: 800b25ee5590f3ddd9186e225c756b9e5d00d3ecce8c2de5d9343af85213d883 + md5: 7490ede93a75acc3589a2e43f77c79e9 + depends: + - aws-c-common >=0.9.14,<0.9.15.0a0 + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + license: Apache-2.0 + license_family: Apache + size: 55818 + timestamp: 1709815582485 - kind: conda name: aws-c-cal version: 0.6.10 @@ -1570,6 +2566,21 @@ packages: license_family: Apache size: 39206 timestamp: 1708003965707 +- kind: conda + name: aws-c-cal + version: 0.6.10 + build: hf9de6f9_2 + build_number: 2 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/aws-c-cal-0.6.10-hf9de6f9_2.conda + sha256: cb9b20aeec4cd037117fd0bfe2ae5a0a5f6a08a71f941be0f163bb27c87b98ea + md5: 393dbe9973160cb09cb3594c9246e260 + depends: + - aws-c-common >=0.9.14,<0.9.15.0a0 + license: Apache-2.0 + license_family: Apache + size: 45249 + timestamp: 1709815427644 - kind: conda name: aws-c-common version: 0.9.10 @@ -1626,6 +2637,20 @@ packages: license_family: Apache size: 208489 timestamp: 1707964779175 +- kind: conda + name: aws-c-common + version: 0.9.13 + build: h31becfc_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/aws-c-common-0.9.13-h31becfc_0.conda + sha256: 68a7dc87d1c7fefe07f6745acc9c7fffe5d53e1c8cc6b446f97bc3a257df4c7b + md5: 0f2a8f03a8eb0543a400494f444ebcfd + depends: + - libgcc-ng >=12 + license: Apache-2.0 + license_family: Apache + size: 232361 + timestamp: 1707964647676 - kind: conda name: aws-c-common version: 0.9.13 @@ -1659,15 +2684,69 @@ packages: version: 0.9.13 build: hd590300_0 subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/aws-c-common-0.9.13-hd590300_0.conda - sha256: b113ee0822ff47ae7db10f75802aa0cde60cdada82d5d07e57c36daba146035f - md5: 0ba89522712d993987e6d0fae108c721 + url: https://conda.anaconda.org/conda-forge/linux-64/aws-c-common-0.9.13-hd590300_0.conda + sha256: b113ee0822ff47ae7db10f75802aa0cde60cdada82d5d07e57c36daba146035f + md5: 0ba89522712d993987e6d0fae108c721 + depends: + - libgcc-ng >=12 + license: Apache-2.0 + license_family: Apache + size: 225560 + timestamp: 1707964559211 +- kind: conda + name: aws-c-common + version: 0.9.14 + build: h10d778d_0 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/aws-c-common-0.9.14-h10d778d_0.conda + sha256: 1d207a8aee42700763e6a7801c69721ccc06ce75e62e0e5d8fc6df0197c0a88b + md5: c620ac518f3086eaf4f105f64908a57c + license: Apache-2.0 + license_family: Apache + size: 208228 + timestamp: 1709669491258 +- kind: conda + name: aws-c-common + version: 0.9.14 + build: h93a5062_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-common-0.9.14-h93a5062_0.conda + sha256: c58aea968814459ef485c1f1aeb889423b0fa808b7c1216d96d5282ff2e796ab + md5: 028bc18a1ef8bb1a4e4d6ec94e9b50da + license: Apache-2.0 + license_family: Apache + size: 203827 + timestamp: 1709669473014 +- kind: conda + name: aws-c-common + version: 0.9.14 + build: hcfcfb64_0 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/aws-c-common-0.9.14-hcfcfb64_0.conda + sha256: 46f4dced6c9d553d65e6f721d51ef43e6a343487a3073299c03a073161d7637f + md5: 169998d49ac3c4800187bfc546e1d165 + depends: + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + license: Apache-2.0 + license_family: Apache + size: 222375 + timestamp: 1709669884758 +- kind: conda + name: aws-c-common + version: 0.9.14 + build: hd590300_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/aws-c-common-0.9.14-hd590300_0.conda + sha256: c71dd835b1d8c7097c8d152a65680f119a203b73a6a62c5aac414bafe5e997ad + md5: d44fe0d9a6971a4fb245be0055775d9d depends: - libgcc-ng >=12 license: Apache-2.0 license_family: Apache - size: 225560 - timestamp: 1707964559211 + size: 225655 + timestamp: 1709669368566 - kind: conda name: aws-c-compression version: 0.2.17 @@ -1720,6 +2799,68 @@ packages: license_family: Apache size: 18129 timestamp: 1701212675008 +- kind: conda + name: aws-c-compression + version: 0.2.18 + build: h00d1b86_1 + build_number: 1 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/aws-c-compression-0.2.18-h00d1b86_1.conda + sha256: f328392d70583dcb5ee49c95059fe086bafaae0d65c38bb9ec0b98ec6fb6a8fd + md5: 16f4516d03cbc0aba2bdda73db85ca37 + depends: + - aws-c-common >=0.9.13,<0.9.14.0a0 + - libgcc-ng >=12 + license: Apache-2.0 + license_family: Apache + size: 19873 + timestamp: 1708003535938 +- kind: conda + name: aws-c-compression + version: 0.2.18 + build: h4466546_2 + build_number: 2 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/aws-c-compression-0.2.18-h4466546_2.conda + sha256: 7fcc6a924691f9de65c82fd559cb1cb2ebd121c42da544a9a43623d69a284e23 + md5: b0d9153fc7cfa8dc36b8703e1a59f5f3 + depends: + - aws-c-common >=0.9.14,<0.9.15.0a0 + - libgcc-ng >=12 + license: Apache-2.0 + license_family: Apache + size: 19072 + timestamp: 1709815144275 +- kind: conda + name: aws-c-compression + version: 0.2.18 + build: h677d54c_2 + build_number: 2 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-compression-0.2.18-h677d54c_2.conda + sha256: bbc73d8ec3d760d528f15edad66835d1fe63a035f254e760235e745cf360de20 + md5: 71e953c1c0fac25dd5d65d63d47389d8 + depends: + - aws-c-common >=0.9.14,<0.9.15.0a0 + license: Apache-2.0 + license_family: Apache + size: 17911 + timestamp: 1709815495665 +- kind: conda + name: aws-c-compression + version: 0.2.18 + build: h905ab21_2 + build_number: 2 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/aws-c-compression-0.2.18-h905ab21_2.conda + sha256: 021cee135f0d9b58fbc8d212618cd9bd6bd0012da41a6469edf010b2853dd3ef + md5: ffd7cfb55b1aa4e3eef477583b1ad87d + depends: + - aws-c-common >=0.9.14,<0.9.15.0a0 + license: Apache-2.0 + license_family: Apache + size: 17930 + timestamp: 1709815482244 - kind: conda name: aws-c-compression version: 0.2.18 @@ -1769,6 +2910,24 @@ packages: license_family: Apache size: 18067 timestamp: 1708003629797 +- kind: conda + name: aws-c-compression + version: 0.2.18 + build: hf6fcf4e_2 + build_number: 2 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/aws-c-compression-0.2.18-hf6fcf4e_2.conda + sha256: ecb5ab2353c4499311fe17c82210955a498526c9563861777b3b0cd6dcc5cfea + md5: 6efdf7af73d7043a00394a2f1b039650 + depends: + - aws-c-common >=0.9.14,<0.9.15.0a0 + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + license: Apache-2.0 + license_family: Apache + size: 22366 + timestamp: 1709815905155 - kind: conda name: aws-c-compression version: 0.2.18 @@ -1862,6 +3021,25 @@ packages: license_family: Apache size: 54585 timestamp: 1708602875487 +- kind: conda + name: aws-c-event-stream + version: 0.4.2 + build: h128c7ac_4 + build_number: 4 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/aws-c-event-stream-0.4.2-h128c7ac_4.conda + sha256: 7e75f646a79e5eff69e9a73d859cdc94ae76a9a9d72f519ebef8314dfe331993 + md5: ff4fb2adfeee5bb13494feac3bc91b6b + depends: + - aws-c-common >=0.9.13,<0.9.14.0a0 + - aws-c-io >=0.14.5,<0.14.6.0a0 + - aws-checksums >=0.1.18,<0.1.19.0a0 + - libgcc-ng >=12 + - libstdcxx-ng >=12 + license: Apache-2.0 + license_family: Apache + size: 55186 + timestamp: 1708602558232 - kind: conda name: aws-c-event-stream version: 0.4.2 @@ -1880,6 +3058,62 @@ packages: license_family: Apache size: 46870 timestamp: 1708602815747 +- kind: conda + name: aws-c-event-stream + version: 0.4.2 + build: h30f2259_6 + build_number: 6 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/aws-c-event-stream-0.4.2-h30f2259_6.conda + sha256: 65ea5552f7a87783b75a3ecf6e4acd2aee5357c4275a9932d732ee516acab0a9 + md5: 0923a8e81839b0b2d9787d85d635b196 + depends: + - aws-c-common >=0.9.14,<0.9.15.0a0 + - aws-c-io >=0.14.6,<0.14.7.0a0 + - aws-checksums >=0.1.18,<0.1.19.0a0 + - libcxx >=16 + license: Apache-2.0 + license_family: Apache + size: 46261 + timestamp: 1710264045535 +- kind: conda + name: aws-c-event-stream + version: 0.4.2 + build: h3df98b0_6 + build_number: 6 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/aws-c-event-stream-0.4.2-h3df98b0_6.conda + sha256: 823a4665b3d38a4078b34b6f891bd388400942a3bcbad55b4c6223c559b15de6 + md5: 80ca7e9993f6b0141ae5425a69771a9a + depends: + - aws-c-common >=0.9.14,<0.9.15.0a0 + - aws-c-io >=0.14.6,<0.14.7.0a0 + - aws-checksums >=0.1.18,<0.1.19.0a0 + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + license: Apache-2.0 + license_family: Apache + size: 54211 + timestamp: 1710264185867 +- kind: conda + name: aws-c-event-stream + version: 0.4.2 + build: h59ac3ca_6 + build_number: 6 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-event-stream-0.4.2-h59ac3ca_6.conda + sha256: 86db342fd921f17a50cf7648b45566b2449ac1408a94c2e6cae132b876f1c17c + md5: 7278d0ef10644f95a2dd619b9917e8a2 + depends: + - aws-c-common >=0.9.14,<0.9.15.0a0 + - aws-c-io >=0.14.6,<0.14.7.0a0 + - aws-checksums >=0.1.18,<0.1.19.0a0 + - libcxx >=16 + license: Apache-2.0 + license_family: Apache + size: 47119 + timestamp: 1710264020154 - kind: conda name: aws-c-event-stream version: 0.4.2 @@ -1898,6 +3132,25 @@ packages: license_family: Apache size: 46676 timestamp: 1708602620909 +- kind: conda + name: aws-c-event-stream + version: 0.4.2 + build: he635cd5_6 + build_number: 6 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/aws-c-event-stream-0.4.2-he635cd5_6.conda + sha256: 38a30beabafc1dd86c0264b6746315a1010e541a1b3ed7f97e1702873e5eaa51 + md5: 58fc78e523e35a08423c913751a51fde + depends: + - aws-c-common >=0.9.14,<0.9.15.0a0 + - aws-c-io >=0.14.6,<0.14.7.0a0 + - aws-checksums >=0.1.18,<0.1.19.0a0 + - libgcc-ng >=12 + - libstdcxx-ng >=12 + license: Apache-2.0 + license_family: Apache + size: 53665 + timestamp: 1710263650074 - kind: conda name: aws-c-event-stream version: 0.4.2 @@ -1993,6 +3246,27 @@ packages: license_family: Apache size: 163076 timestamp: 1708602693889 +- kind: conda + name: aws-c-http + version: 0.8.1 + build: h4e3df0f_7 + build_number: 7 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/aws-c-http-0.8.1-h4e3df0f_7.conda + sha256: 651bdcbe53630bf9665b76c18a6cb21a7b53fe347b03d88c1cb99ed0281c267e + md5: 08ba30d73686a5129f4209c25b31252a + depends: + - aws-c-cal >=0.6.10,<0.6.11.0a0 + - aws-c-common >=0.9.14,<0.9.15.0a0 + - aws-c-compression >=0.2.18,<0.2.19.0a0 + - aws-c-io >=0.14.6,<0.14.7.0a0 + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + license: Apache-2.0 + license_family: Apache + size: 180557 + timestamp: 1710264351681 - kind: conda name: aws-c-http version: 0.8.1 @@ -2012,6 +3286,43 @@ packages: license_family: Apache size: 195024 timestamp: 1708602547845 +- kind: conda + name: aws-c-http + version: 0.8.1 + build: hbfc29b2_7 + build_number: 7 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/aws-c-http-0.8.1-hbfc29b2_7.conda + sha256: 0dc5b73aa31cef3faeeb902a11f12e1244ac241f995d73e4f4e3e0c01622f7a1 + md5: 8476ec099649e9a6de52f7f4d916cd2a + depends: + - aws-c-cal >=0.6.10,<0.6.11.0a0 + - aws-c-common >=0.9.14,<0.9.15.0a0 + - aws-c-compression >=0.2.18,<0.2.19.0a0 + - aws-c-io >=0.14.6,<0.14.7.0a0 + - libgcc-ng >=12 + license: Apache-2.0 + license_family: Apache + size: 194307 + timestamp: 1710263686092 +- kind: conda + name: aws-c-http + version: 0.8.1 + build: hce3b3da_7 + build_number: 7 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/aws-c-http-0.8.1-hce3b3da_7.conda + sha256: a3e6bfd71bbc4119da1e79f2bce6094f045112c230b3fd5cc9e6ccd36aba3156 + md5: d287122dfb77c5fa0147fdf368c86d54 + depends: + - aws-c-cal >=0.6.10,<0.6.11.0a0 + - aws-c-common >=0.9.14,<0.9.15.0a0 + - aws-c-compression >=0.2.18,<0.2.19.0a0 + - aws-c-io >=0.14.6,<0.14.7.0a0 + license: Apache-2.0 + license_family: Apache + size: 162710 + timestamp: 1710263951106 - kind: conda name: aws-c-http version: 0.8.1 @@ -2033,6 +3344,25 @@ packages: license_family: Apache size: 180105 timestamp: 1708603146126 +- kind: conda + name: aws-c-http + version: 0.8.1 + build: he0aa6e1_5 + build_number: 5 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/aws-c-http-0.8.1-he0aa6e1_5.conda + sha256: 40f254d4012a60733bc5428414bd72787d2198b8238a0d0dc799a0e666f3d788 + md5: 1397fefc62656680d66570c23d875198 + depends: + - aws-c-cal >=0.6.10,<0.6.11.0a0 + - aws-c-common >=0.9.13,<0.9.14.0a0 + - aws-c-compression >=0.2.18,<0.2.19.0a0 + - aws-c-io >=0.14.5,<0.14.6.0a0 + - libgcc-ng >=12 + license: Apache-2.0 + license_family: Apache + size: 188613 + timestamp: 1708602656753 - kind: conda name: aws-c-http version: 0.8.1 @@ -2051,6 +3381,24 @@ packages: license_family: Apache size: 151481 timestamp: 1708602772972 +- kind: conda + name: aws-c-http + version: 0.8.1 + build: hfe5d766_7 + build_number: 7 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-http-0.8.1-hfe5d766_7.conda + sha256: 0a454c1280e87b4bfd3ab1d70498c5f60c62139ddcd06d1a68c39dcd81e05e75 + md5: 4096407e9d908ef9a292980f93034fcd + depends: + - aws-c-cal >=0.6.10,<0.6.11.0a0 + - aws-c-common >=0.9.14,<0.9.15.0a0 + - aws-c-compression >=0.2.18,<0.2.19.0a0 + - aws-c-io >=0.14.6,<0.14.7.0a0 + license: Apache-2.0 + license_family: Apache + size: 151329 + timestamp: 1710264327114 - kind: conda name: aws-c-io version: 0.13.36 @@ -2126,6 +3474,24 @@ packages: license_family: Apache size: 159778 timestamp: 1708688290150 +- kind: conda + name: aws-c-io + version: 0.14.5 + build: h2bbb85f_1 + build_number: 1 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/aws-c-io-0.14.5-h2bbb85f_1.conda + sha256: a6d25f44ec1b64387ede38fd8b066d7e3eedc77a4e9bb95197ec8a77fa02b236 + md5: 40573930eba2a6f2f19c16635457962f + depends: + - aws-c-cal >=0.6.10,<0.6.11.0a0 + - aws-c-common >=0.9.13,<0.9.14.0a0 + - libgcc-ng >=12 + - s2n >=1.4.5,<1.4.6.0a0 + license: Apache-2.0 + license_family: Apache + size: 160898 + timestamp: 1708687797361 - kind: conda name: aws-c-io version: 0.14.5 @@ -2176,6 +3542,70 @@ packages: license_family: Apache size: 136989 timestamp: 1708687976415 +- kind: conda + name: aws-c-io + version: 0.14.6 + build: h9ac2cdb_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-io-0.14.6-h9ac2cdb_0.conda + sha256: 1dcae62df79786292e841275994c9ded564eb49d7200284c09f7d61326a06c1b + md5: b0c80a8220ddc90196e3b76d856dc6b0 + depends: + - aws-c-cal >=0.6.10,<0.6.11.0a0 + - aws-c-common >=0.9.14,<0.9.15.0a0 + license: Apache-2.0 + license_family: Apache + size: 136547 + timestamp: 1710222457819 +- kind: conda + name: aws-c-io + version: 0.14.6 + build: h9e7f0e3_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/aws-c-io-0.14.6-h9e7f0e3_0.conda + sha256: bb9e7bee234532f7905faf4abc15e3a1be1d8f683b8a0d5863761daad18a7cac + md5: 3fef14ef6e79ea0da149cebb1d0635bf + depends: + - aws-c-cal >=0.6.10,<0.6.11.0a0 + - aws-c-common >=0.9.14,<0.9.15.0a0 + - s2n >=1.4.6,<1.4.7.0a0 + license: Apache-2.0 + license_family: Apache + size: 157726 + timestamp: 1710222250665 +- kind: conda + name: aws-c-io + version: 0.14.6 + build: hf0b8b6f_0 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/aws-c-io-0.14.6-hf0b8b6f_0.conda + sha256: ab046e34dcaa533d75f8f4892c63ec503812a69fa6e8d23bfbdb0d74926cdc40 + md5: aee3f042f60da448ab622b0a149d6ec2 + depends: + - aws-c-cal >=0.6.10,<0.6.11.0a0 + - aws-c-common >=0.9.14,<0.9.15.0a0 + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + license: Apache-2.0 + license_family: Apache + size: 160412 + timestamp: 1710222753707 +- kind: conda + name: aws-c-io + version: 0.14.6 + build: hf76ed93_0 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/aws-c-io-0.14.6-hf76ed93_0.conda + sha256: 824eb1fcf69f67c4fee4e05fd401dba6d5c55f9e37e3cb9904b8b81909e3c3be + md5: 586e11f2969f1f2a61104c5cec8a7957 + depends: + - aws-c-cal >=0.6.10,<0.6.11.0a0 + - aws-c-common >=0.9.14,<0.9.15.0a0 + license: Apache-2.0 + license_family: Apache + size: 137968 + timestamp: 1710222523409 - kind: conda name: aws-c-mqtt version: 0.10.0 @@ -2286,6 +3716,24 @@ packages: license_family: Apache size: 164421 timestamp: 1708620822368 +- kind: conda + name: aws-c-mqtt + version: 0.10.2 + build: hf974719_4 + build_number: 4 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/aws-c-mqtt-0.10.2-hf974719_4.conda + sha256: 8f24dc8fa19429c4599159ae9a68f2e90418e3471adb273fab112cd122cba0af + md5: 9addf6456c59c94686fe2dfdd9f8c43d + depends: + - aws-c-common >=0.9.13,<0.9.14.0a0 + - aws-c-http >=0.8.1,<0.8.2.0a0 + - aws-c-io >=0.14.5,<0.14.6.0a0 + - libgcc-ng >=12 + license: Apache-2.0 + license_family: Apache + size: 146210 + timestamp: 1708620468353 - kind: conda name: aws-c-mqtt version: 0.10.2 @@ -2306,6 +3754,78 @@ packages: license_family: Apache size: 157819 timestamp: 1708621381498 +- kind: conda + name: aws-c-mqtt + version: 0.10.3 + build: h96fac68_2 + build_number: 2 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/aws-c-mqtt-0.10.3-h96fac68_2.conda + sha256: 70b62dcf6314a9e1f514fe6f838eb02dfc4a28f4d17723768211a60c28c3429b + md5: 463c0be9e1fb416192174156f58bb2af + depends: + - aws-c-common >=0.9.14,<0.9.15.0a0 + - aws-c-http >=0.8.1,<0.8.2.0a0 + - aws-c-io >=0.14.6,<0.14.7.0a0 + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + license: Apache-2.0 + license_family: Apache + size: 157436 + timestamp: 1710283031953 +- kind: conda + name: aws-c-mqtt + version: 0.10.3 + build: ha335edc_2 + build_number: 2 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/aws-c-mqtt-0.10.3-ha335edc_2.conda + sha256: 99304e5095193b937745d0ce6812d0333186a31c41a51b1e4297ddcd962824eb + md5: c8bacb9a988fd8fb6b560a966c4979a8 + depends: + - aws-c-common >=0.9.14,<0.9.15.0a0 + - aws-c-http >=0.8.1,<0.8.2.0a0 + - aws-c-io >=0.14.6,<0.14.7.0a0 + license: Apache-2.0 + license_family: Apache + size: 139008 + timestamp: 1710282888188 +- kind: conda + name: aws-c-mqtt + version: 0.10.3 + build: hb8a1441_2 + build_number: 2 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-mqtt-0.10.3-hb8a1441_2.conda + sha256: 344ba23eb2cd45105a09d775dd7449e17304b3930d5ff08fbc1426f0f8030b08 + md5: 26421a2d8a329048bb1a5673ce620de5 + depends: + - aws-c-common >=0.9.14,<0.9.15.0a0 + - aws-c-http >=0.8.1,<0.8.2.0a0 + - aws-c-io >=0.14.6,<0.14.7.0a0 + license: Apache-2.0 + license_family: Apache + size: 117955 + timestamp: 1710282576148 +- kind: conda + name: aws-c-mqtt + version: 0.10.3 + build: hffff1cc_2 + build_number: 2 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/aws-c-mqtt-0.10.3-hffff1cc_2.conda + sha256: 6b2de4a0e6e907310127b1025a0030d023e1051da48ea5821dcc6db094d69ab7 + md5: 14ad8defb307e1edb293c3fc9da8648f + depends: + - aws-c-common >=0.9.14,<0.9.15.0a0 + - aws-c-http >=0.8.1,<0.8.2.0a0 + - aws-c-io >=0.14.6,<0.14.7.0a0 + - libgcc-ng >=12 + license: Apache-2.0 + license_family: Apache + size: 163172 + timestamp: 1710282530222 - kind: conda name: aws-c-s3 version: 0.4.7 @@ -2372,8 +3892,31 @@ packages: platform: osx license: Apache-2.0 license_family: Apache - size: 90455 - timestamp: 1704321754265 + size: 90455 + timestamp: 1704321754265 +- kind: conda + name: aws-c-s3 + version: 0.5.2 + build: h08df315_2 + build_number: 2 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/aws-c-s3-0.5.2-h08df315_2.conda + sha256: 2f7af939a87176de471bac1a1c6cc7336c714a64c495f1a5d967e0cfa7bb0e07 + md5: 0a7a232878640624469d3ca4923d146b + depends: + - aws-c-auth >=0.7.16,<0.7.17.0a0 + - aws-c-cal >=0.6.10,<0.6.11.0a0 + - aws-c-common >=0.9.14,<0.9.15.0a0 + - aws-c-http >=0.8.1,<0.8.2.0a0 + - aws-c-io >=0.14.6,<0.14.7.0a0 + - aws-checksums >=0.1.18,<0.1.19.0a0 + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + license: Apache-2.0 + license_family: Apache + size: 101487 + timestamp: 1710296653111 - kind: conda name: aws-c-s3 version: 0.5.2 @@ -2393,6 +3936,69 @@ packages: license_family: Apache size: 90732 timestamp: 1709172899774 +- kind: conda + name: aws-c-s3 + version: 0.5.2 + build: h170583c_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/aws-c-s3-0.5.2-h170583c_0.conda + sha256: a1ff6af6f8c03eb4f4d738a2bab006ad7c46580bef9613b2f53b0d98c47b1192 + md5: b8c6ea0b0244487e9cc579393c1dbf70 + depends: + - aws-c-auth >=0.7.16,<0.7.17.0a0 + - aws-c-cal >=0.6.10,<0.6.11.0a0 + - aws-c-common >=0.9.13,<0.9.14.0a0 + - aws-c-http >=0.8.1,<0.8.2.0a0 + - aws-c-io >=0.14.5,<0.14.6.0a0 + - aws-checksums >=0.1.18,<0.1.19.0a0 + - libgcc-ng >=12 + - openssl >=3.2.1,<4.0a0 + license: Apache-2.0 + license_family: Apache + size: 109725 + timestamp: 1709172552237 +- kind: conda + name: aws-c-s3 + version: 0.5.2 + build: h4398043_2 + build_number: 2 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-s3-0.5.2-h4398043_2.conda + sha256: 27e90ada0ae6895159a49bc4ed7172b2757cd8fc63e0189dd8cce5d057c6ee06 + md5: 5ddebd5447f4baba6215b1bafcf605dc + depends: + - aws-c-auth >=0.7.16,<0.7.17.0a0 + - aws-c-cal >=0.6.10,<0.6.11.0a0 + - aws-c-common >=0.9.14,<0.9.15.0a0 + - aws-c-http >=0.8.1,<0.8.2.0a0 + - aws-c-io >=0.14.6,<0.14.7.0a0 + - aws-checksums >=0.1.18,<0.1.19.0a0 + license: Apache-2.0 + license_family: Apache + size: 90478 + timestamp: 1710296516337 +- kind: conda + name: aws-c-s3 + version: 0.5.2 + build: h4893938_2 + build_number: 2 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/aws-c-s3-0.5.2-h4893938_2.conda + sha256: 312d67b236c9c6003f92f682c55ff344721f79d50d9a4bcdea44f2144f637642 + md5: 7e24759a8b8ead67ce687f3c31ffd12f + depends: + - aws-c-auth >=0.7.16,<0.7.17.0a0 + - aws-c-cal >=0.6.10,<0.6.11.0a0 + - aws-c-common >=0.9.14,<0.9.15.0a0 + - aws-c-http >=0.8.1,<0.8.2.0a0 + - aws-c-io >=0.14.6,<0.14.7.0a0 + - aws-checksums >=0.1.18,<0.1.19.0a0 + - libgcc-ng >=12 + - openssl >=3.2.1,<4.0a0 + license: Apache-2.0 + license_family: Apache + size: 105455 + timestamp: 1710296220268 - kind: conda name: aws-c-s3 version: 0.5.2 @@ -2436,6 +4042,26 @@ packages: license_family: Apache size: 101468 timestamp: 1709173131467 +- kind: conda + name: aws-c-s3 + version: 0.5.2 + build: h6f42f56_2 + build_number: 2 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/aws-c-s3-0.5.2-h6f42f56_2.conda + sha256: 950a37ab27ec0145a4c92a3524b8862a4f5affec08049dda7b9ab83403969fd6 + md5: 9f5dc9ef044d3c13b0959d04a2005753 + depends: + - aws-c-auth >=0.7.16,<0.7.17.0a0 + - aws-c-cal >=0.6.10,<0.6.11.0a0 + - aws-c-common >=0.9.14,<0.9.15.0a0 + - aws-c-http >=0.8.1,<0.8.2.0a0 + - aws-c-io >=0.14.6,<0.14.7.0a0 + - aws-checksums >=0.1.18,<0.1.19.0a0 + license: Apache-2.0 + license_family: Apache + size: 91371 + timestamp: 1710296654896 - kind: conda name: aws-c-s3 version: 0.5.2 @@ -2504,6 +4130,68 @@ packages: license_family: Apache size: 47467 timestamp: 1701999663058 +- kind: conda + name: aws-c-sdkutils + version: 0.1.15 + build: h00d1b86_1 + build_number: 1 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/aws-c-sdkutils-0.1.15-h00d1b86_1.conda + sha256: e2ec786734acca3a7449f27aee7052f93e627a76459c3718a4d9236b0e813dad + md5: 222e0288b02a00e62232dde9ff479146 + depends: + - aws-c-common >=0.9.13,<0.9.14.0a0 + - libgcc-ng >=12 + license: Apache-2.0 + license_family: Apache + size: 57857 + timestamp: 1708014280193 +- kind: conda + name: aws-c-sdkutils + version: 0.1.15 + build: h4466546_2 + build_number: 2 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/aws-c-sdkutils-0.1.15-h4466546_2.conda + sha256: 349a05cf5fbcb3f6f358fc05098b210aa7da4ec3ab6d4719c79bb93b50a629f8 + md5: 258194cedccd33fd8a7b95a8aa105015 + depends: + - aws-c-common >=0.9.14,<0.9.15.0a0 + - libgcc-ng >=12 + license: Apache-2.0 + license_family: Apache + size: 55383 + timestamp: 1709830510021 +- kind: conda + name: aws-c-sdkutils + version: 0.1.15 + build: h677d54c_2 + build_number: 2 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-sdkutils-0.1.15-h677d54c_2.conda + sha256: 02649707625df0c8908fd807f5d599b5f60b90d7b4e0e71953ff10b9aa0f010c + md5: a68e269534f50d5a94107b9b9b6be747 + depends: + - aws-c-common >=0.9.14,<0.9.15.0a0 + license: Apache-2.0 + license_family: Apache + size: 48880 + timestamp: 1709830883787 +- kind: conda + name: aws-c-sdkutils + version: 0.1.15 + build: h905ab21_2 + build_number: 2 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/aws-c-sdkutils-0.1.15-h905ab21_2.conda + sha256: 77f58ac3aec0cd987f80e202a8197e123beb13b9b25b0137dd921c7a6ddc86ac + md5: bb1523b7de7ac6f112b1992cfcfb250b + depends: + - aws-c-common >=0.9.14,<0.9.15.0a0 + license: Apache-2.0 + license_family: Apache + size: 50028 + timestamp: 1709830709542 - kind: conda name: aws-c-sdkutils version: 0.1.15 @@ -2553,6 +4241,24 @@ packages: license_family: Apache size: 50255 timestamp: 1708014587926 +- kind: conda + name: aws-c-sdkutils + version: 0.1.15 + build: hf6fcf4e_2 + build_number: 2 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/aws-c-sdkutils-0.1.15-hf6fcf4e_2.conda + sha256: 03f361182431688732e7173f0d71e5778e0616e68d9ebf994d3ecb70483468a0 + md5: 87fb9f67d4c936a704d6a23a748fad77 + depends: + - aws-c-common >=0.9.14,<0.9.15.0a0 + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + license: Apache-2.0 + license_family: Apache + size: 54282 + timestamp: 1709830762581 - kind: conda name: aws-c-sdkutils version: 0.1.15 @@ -2620,6 +4326,68 @@ packages: license_family: Apache size: 48848 timestamp: 1701246965518 +- kind: conda + name: aws-checksums + version: 0.1.18 + build: h00d1b86_1 + build_number: 1 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/aws-checksums-0.1.18-h00d1b86_1.conda + sha256: abe3046db1238044d236c01512d41ca743812510bc39da9d0d2b9726520e82df + md5: c4824ce78b16799e1f93e7f9b0f56b5e + depends: + - aws-c-common >=0.9.13,<0.9.14.0a0 + - libgcc-ng >=12 + license: Apache-2.0 + license_family: Apache + size: 50114 + timestamp: 1708017850698 +- kind: conda + name: aws-checksums + version: 0.1.18 + build: h4466546_2 + build_number: 2 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/aws-checksums-0.1.18-h4466546_2.conda + sha256: 9080f064f572ac1747d32b4dff30452ff44ef2df399e6ec7bf9730da1eb99bba + md5: 8a04fc5a5ecaba31f66904b47dcc7797 + depends: + - aws-c-common >=0.9.14,<0.9.15.0a0 + - libgcc-ng >=12 + license: Apache-2.0 + license_family: Apache + size: 49940 + timestamp: 1709826415680 +- kind: conda + name: aws-checksums + version: 0.1.18 + build: h677d54c_2 + build_number: 2 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/aws-checksums-0.1.18-h677d54c_2.conda + sha256: 3a7cc8824a23a39478e479865df20d88c12a954895fb9c8a91152cc76976183a + md5: 21b73ab89b82b17ae50d635ce675fea6 + depends: + - aws-c-common >=0.9.14,<0.9.15.0a0 + license: Apache-2.0 + license_family: Apache + size: 48836 + timestamp: 1709826804838 +- kind: conda + name: aws-checksums + version: 0.1.18 + build: h905ab21_2 + build_number: 2 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/aws-checksums-0.1.18-h905ab21_2.conda + sha256: 5760728e7320a01519bcbbae8dcd31b86e819f66c58f641b86b27ce592e5fff3 + md5: f17e778398011e88d45edf58f24c18ae + depends: + - aws-c-common >=0.9.14,<0.9.15.0a0 + license: Apache-2.0 + license_family: Apache + size: 48733 + timestamp: 1709826868797 - kind: conda name: aws-checksums version: 0.1.18 @@ -2669,6 +4437,24 @@ packages: license_family: Apache size: 48808 timestamp: 1708017957232 +- kind: conda + name: aws-checksums + version: 0.1.18 + build: hf6fcf4e_2 + build_number: 2 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/aws-checksums-0.1.18-hf6fcf4e_2.conda + sha256: 1a67c0ee80cb2d18bd7cfc9ec1aae2ad78d51adc7ac9442ec70e370bbcef24de + md5: ffa6601a628ccc6ec5eddb0def2db1d2 + depends: + - aws-c-common >=0.9.14,<0.9.15.0a0 + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + license: Apache-2.0 + license_family: Apache + size: 52016 + timestamp: 1709827173669 - kind: conda name: aws-checksums version: 0.1.18 @@ -2787,6 +4573,31 @@ packages: license_family: Apache size: 216464 timestamp: 1709208473555 +- kind: conda + name: aws-crt-cpp + version: 0.26.2 + build: h07bb24a_7 + build_number: 7 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/aws-crt-cpp-0.26.2-h07bb24a_7.conda + sha256: 08b125c53613c7363bba10b90543fe9744b5b5412cf01c635b795a5e586c0ff4 + md5: bfd628a5808085446ae16cbdfb0b934b + depends: + - aws-c-auth >=0.7.16,<0.7.17.0a0 + - aws-c-cal >=0.6.10,<0.6.11.0a0 + - aws-c-common >=0.9.13,<0.9.14.0a0 + - aws-c-event-stream >=0.4.2,<0.4.3.0a0 + - aws-c-http >=0.8.1,<0.8.2.0a0 + - aws-c-io >=0.14.5,<0.14.6.0a0 + - aws-c-mqtt >=0.10.2,<0.10.3.0a0 + - aws-c-s3 >=0.5.2,<0.5.3.0a0 + - aws-c-sdkutils >=0.1.15,<0.1.16.0a0 + - libgcc-ng >=12 + - libstdcxx-ng >=12 + license: Apache-2.0 + license_family: Apache + size: 260420 + timestamp: 1709208294949 - kind: conda name: aws-crt-cpp version: 0.26.2 @@ -2802,66 +4613,165 @@ packages: - aws-c-common >=0.9.13,<0.9.14.0a0 - aws-c-event-stream >=0.4.2,<0.4.3.0a0 - aws-c-http >=0.8.1,<0.8.2.0a0 - - aws-c-io >=0.14.5,<0.14.6.0a0 - - aws-c-mqtt >=0.10.2,<0.10.3.0a0 + - aws-c-io >=0.14.5,<0.14.6.0a0 + - aws-c-mqtt >=0.10.2,<0.10.3.0a0 + - aws-c-s3 >=0.5.2,<0.5.3.0a0 + - aws-c-sdkutils >=0.1.15,<0.1.16.0a0 + - libgcc-ng >=12 + - libstdcxx-ng >=12 + license: Apache-2.0 + license_family: Apache + size: 333814 + timestamp: 1709208341782 +- kind: conda + name: aws-crt-cpp + version: 0.26.2 + build: h56a5195_7 + build_number: 7 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/aws-crt-cpp-0.26.2-h56a5195_7.conda + sha256: 3899ccca939b94adde813be207181cfae00d1211efa68613d4ba1828c9a39f0a + md5: 62ae597a0641cbcbf68a06beec4ac313 + depends: + - aws-c-auth >=0.7.16,<0.7.17.0a0 + - aws-c-cal >=0.6.10,<0.6.11.0a0 + - aws-c-common >=0.9.13,<0.9.14.0a0 + - aws-c-event-stream >=0.4.2,<0.4.3.0a0 + - aws-c-http >=0.8.1,<0.8.2.0a0 + - aws-c-io >=0.14.5,<0.14.6.0a0 + - aws-c-mqtt >=0.10.2,<0.10.3.0a0 + - aws-c-s3 >=0.5.2,<0.5.3.0a0 + - aws-c-sdkutils >=0.1.15,<0.1.16.0a0 + - libcxx >=16 + license: Apache-2.0 + license_family: Apache + size: 280702 + timestamp: 1709208918309 +- kind: conda + name: aws-crt-cpp + version: 0.26.2 + build: h8492d2a_7 + build_number: 7 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/aws-crt-cpp-0.26.2-h8492d2a_7.conda + sha256: 99bd606407c723da49ce9e831d2764849d44b48d9d7bfd8b36db20edda301ded + md5: 444af8c6a4c76298b6322807c25df166 + depends: + - aws-c-auth >=0.7.16,<0.7.17.0a0 + - aws-c-cal >=0.6.10,<0.6.11.0a0 + - aws-c-common >=0.9.13,<0.9.14.0a0 + - aws-c-event-stream >=0.4.2,<0.4.3.0a0 + - aws-c-http >=0.8.1,<0.8.2.0a0 + - aws-c-io >=0.14.5,<0.14.6.0a0 + - aws-c-mqtt >=0.10.2,<0.10.3.0a0 + - aws-c-s3 >=0.5.2,<0.5.3.0a0 + - aws-c-sdkutils >=0.1.15,<0.1.16.0a0 + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + license: Apache-2.0 + license_family: Apache + size: 242812 + timestamp: 1709208518468 +- kind: conda + name: aws-crt-cpp + version: 0.26.3 + build: h0de420c_2 + build_number: 2 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/aws-crt-cpp-0.26.3-h0de420c_2.conda + sha256: 578ffab0c981ea227d5a9d70b32af5bcba58c632d0f8b38d4eb1ed88cc05eaaa + md5: e6d964373064af06199c6e4dff9f174e + depends: + - aws-c-auth >=0.7.16,<0.7.17.0a0 + - aws-c-cal >=0.6.10,<0.6.11.0a0 + - aws-c-common >=0.9.14,<0.9.15.0a0 + - aws-c-event-stream >=0.4.2,<0.4.3.0a0 + - aws-c-http >=0.8.1,<0.8.2.0a0 + - aws-c-io >=0.14.6,<0.14.7.0a0 + - aws-c-mqtt >=0.10.3,<0.10.4.0a0 + - aws-c-s3 >=0.5.2,<0.5.3.0a0 + - aws-c-sdkutils >=0.1.15,<0.1.16.0a0 + - libcxx >=16 + license: Apache-2.0 + license_family: Apache + size: 218109 + timestamp: 1710309757551 +- kind: conda + name: aws-crt-cpp + version: 0.26.3 + build: h137ae52_2 + build_number: 2 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/aws-crt-cpp-0.26.3-h137ae52_2.conda + sha256: 596b6d63352b7ae189842dc86510d53438f88d1e2c1d56779eeebc130beef2b6 + md5: 21c8acfdfa31ab5582897dda7c9c8a75 + depends: + - aws-c-auth >=0.7.16,<0.7.17.0a0 + - aws-c-cal >=0.6.10,<0.6.11.0a0 + - aws-c-common >=0.9.14,<0.9.15.0a0 + - aws-c-event-stream >=0.4.2,<0.4.3.0a0 + - aws-c-http >=0.8.1,<0.8.2.0a0 + - aws-c-io >=0.14.6,<0.14.7.0a0 + - aws-c-mqtt >=0.10.3,<0.10.4.0a0 - aws-c-s3 >=0.5.2,<0.5.3.0a0 - aws-c-sdkutils >=0.1.15,<0.1.16.0a0 - libgcc-ng >=12 - libstdcxx-ng >=12 license: Apache-2.0 license_family: Apache - size: 333814 - timestamp: 1709208341782 + size: 333634 + timestamp: 1710309442818 - kind: conda name: aws-crt-cpp - version: 0.26.2 - build: h56a5195_7 - build_number: 7 - subdir: osx-64 - url: https://conda.anaconda.org/conda-forge/osx-64/aws-crt-cpp-0.26.2-h56a5195_7.conda - sha256: 3899ccca939b94adde813be207181cfae00d1211efa68613d4ba1828c9a39f0a - md5: 62ae597a0641cbcbf68a06beec4ac313 + version: 0.26.3 + build: h6047f0a_2 + build_number: 2 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/aws-crt-cpp-0.26.3-h6047f0a_2.conda + sha256: 1cb3c3f8d0b19dad52eaa64758629f47aea88591cf3bc354fcb87c0923dc9e73 + md5: 5c8a2ba1c7a6477b10d0bcd33ee1202f depends: - aws-c-auth >=0.7.16,<0.7.17.0a0 - aws-c-cal >=0.6.10,<0.6.11.0a0 - - aws-c-common >=0.9.13,<0.9.14.0a0 + - aws-c-common >=0.9.14,<0.9.15.0a0 - aws-c-event-stream >=0.4.2,<0.4.3.0a0 - aws-c-http >=0.8.1,<0.8.2.0a0 - - aws-c-io >=0.14.5,<0.14.6.0a0 - - aws-c-mqtt >=0.10.2,<0.10.3.0a0 + - aws-c-io >=0.14.6,<0.14.7.0a0 + - aws-c-mqtt >=0.10.3,<0.10.4.0a0 - aws-c-s3 >=0.5.2,<0.5.3.0a0 - aws-c-sdkutils >=0.1.15,<0.1.16.0a0 - - libcxx >=16 + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 license: Apache-2.0 license_family: Apache - size: 280702 - timestamp: 1709208918309 + size: 242851 + timestamp: 1710309795536 - kind: conda name: aws-crt-cpp - version: 0.26.2 - build: h8492d2a_7 - build_number: 7 - subdir: win-64 - url: https://conda.anaconda.org/conda-forge/win-64/aws-crt-cpp-0.26.2-h8492d2a_7.conda - sha256: 99bd606407c723da49ce9e831d2764849d44b48d9d7bfd8b36db20edda301ded - md5: 444af8c6a4c76298b6322807c25df166 + version: 0.26.3 + build: hf5b2fc6_2 + build_number: 2 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/aws-crt-cpp-0.26.3-hf5b2fc6_2.conda + sha256: d4ec9488f2052276b4b119e62b2b08df52deec3e38dc7c57311f51413046de8b + md5: bcea6861674e784e2eb2f1de4f3bac35 depends: - aws-c-auth >=0.7.16,<0.7.17.0a0 - aws-c-cal >=0.6.10,<0.6.11.0a0 - - aws-c-common >=0.9.13,<0.9.14.0a0 + - aws-c-common >=0.9.14,<0.9.15.0a0 - aws-c-event-stream >=0.4.2,<0.4.3.0a0 - aws-c-http >=0.8.1,<0.8.2.0a0 - - aws-c-io >=0.14.5,<0.14.6.0a0 - - aws-c-mqtt >=0.10.2,<0.10.3.0a0 + - aws-c-io >=0.14.6,<0.14.7.0a0 + - aws-c-mqtt >=0.10.3,<0.10.4.0a0 - aws-c-s3 >=0.5.2,<0.5.3.0a0 - aws-c-sdkutils >=0.1.15,<0.1.16.0a0 - - ucrt >=10.0.20348.0 - - vc >=14.2,<15 - - vc14_runtime >=14.29.30139 + - libcxx >=16 license: Apache-2.0 license_family: Apache - size: 242812 - timestamp: 1709208518468 + size: 280273 + timestamp: 1710309758427 - kind: conda name: aws-sdk-cpp version: 1.11.210 @@ -2935,6 +4845,50 @@ packages: license_family: Apache size: 3267017 timestamp: 1704353210503 +- kind: conda + name: aws-sdk-cpp + version: 1.11.267 + build: h232afc9_3 + build_number: 3 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/aws-sdk-cpp-1.11.267-h232afc9_3.conda + sha256: d83b5e4728d61f996115251fbb1670b79c6b5c0a02f2f1f458b80a6b06b08eb1 + md5: f707d57fee350a6b47726b2996f8e4e1 + depends: + - aws-c-common >=0.9.14,<0.9.15.0a0 + - aws-c-event-stream >=0.4.2,<0.4.3.0a0 + - aws-checksums >=0.1.18,<0.1.19.0a0 + - aws-crt-cpp >=0.26.3,<0.26.4.0a0 + - libcurl >=8.5.0,<9.0a0 + - libcxx >=16 + - libzlib >=1.2.13,<1.3.0a0 + - openssl >=3.2.1,<4.0a0 + license: Apache-2.0 + license_family: Apache + size: 3367065 + timestamp: 1710323636919 +- kind: conda + name: aws-sdk-cpp + version: 1.11.267 + build: h2fb64bc_3 + build_number: 3 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/aws-sdk-cpp-1.11.267-h2fb64bc_3.conda + sha256: 5ad2be70779844380b8b8567814ed3966ef2efd9c48cc258975cec7f072c9753 + md5: e11e8d3c0ca63039e4b8101a5063fa30 + depends: + - aws-c-common >=0.9.14,<0.9.15.0a0 + - aws-c-event-stream >=0.4.2,<0.4.3.0a0 + - aws-checksums >=0.1.18,<0.1.19.0a0 + - aws-crt-cpp >=0.26.3,<0.26.4.0a0 + - libcurl >=8.5.0,<9.0a0 + - libcxx >=16 + - libzlib >=1.2.13,<1.3.0a0 + - openssl >=3.2.1,<4.0a0 + license: Apache-2.0 + license_family: Apache + size: 3423557 + timestamp: 1710323443841 - kind: conda name: aws-sdk-cpp version: 1.11.267 @@ -2957,6 +4911,28 @@ packages: license_family: Apache size: 3375381 timestamp: 1708527712169 +- kind: conda + name: aws-sdk-cpp + version: 1.11.267 + build: h558341a_3 + build_number: 3 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/aws-sdk-cpp-1.11.267-h558341a_3.conda + sha256: 886817ef6b059f715ab3d93025d5306c5046688fdbdade21f6fb3ce33e053561 + md5: 42633be391d0a113f39356a37ce7ea40 + depends: + - aws-c-common >=0.9.14,<0.9.15.0a0 + - aws-c-event-stream >=0.4.2,<0.4.3.0a0 + - aws-checksums >=0.1.18,<0.1.19.0a0 + - aws-crt-cpp >=0.26.3,<0.26.4.0a0 + - libzlib >=1.2.13,<1.3.0a0 + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + license: Apache-2.0 + license_family: Apache + size: 3409008 + timestamp: 1710323920901 - kind: conda name: aws-sdk-cpp version: 1.11.267 @@ -3024,65 +5000,125 @@ packages: license_family: Apache size: 3413748 timestamp: 1708528552370 +- kind: conda + name: aws-sdk-cpp + version: 1.11.267 + build: he0cb598_3 + build_number: 3 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/aws-sdk-cpp-1.11.267-he0cb598_3.conda + sha256: 55bf5d47ba2591507abb9b2120905cdb0b1834b2867f03c6cff4bb88f7ec7c58 + md5: ca4aebdc89bb9b08b3b6dd68ae09080d + depends: + - aws-c-common >=0.9.14,<0.9.15.0a0 + - aws-c-event-stream >=0.4.2,<0.4.3.0a0 + - aws-checksums >=0.1.18,<0.1.19.0a0 + - aws-crt-cpp >=0.26.3,<0.26.4.0a0 + - libcurl >=8.5.0,<9.0a0 + - libgcc-ng >=12 + - libstdcxx-ng >=12 + - libzlib >=1.2.13,<1.3.0a0 + - openssl >=3.2.1,<4.0a0 + license: Apache-2.0 + license_family: Apache + size: 3636564 + timestamp: 1710322529863 +- kind: conda + name: aws-sdk-cpp + version: 1.11.267 + build: hfce6cab_1 + build_number: 1 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/aws-sdk-cpp-1.11.267-hfce6cab_1.conda + sha256: 735f6c624215c384ad89729debf176620299e2923f8981d7e2acbb44cda6c52d + md5: 0d759609cfe4bd61b7a90f2d29185d84 + depends: + - aws-c-common >=0.9.13,<0.9.14.0a0 + - aws-c-event-stream >=0.4.2,<0.4.3.0a0 + - aws-checksums >=0.1.18,<0.1.19.0a0 + - aws-crt-cpp >=0.26.2,<0.26.3.0a0 + - libcurl >=8.5.0,<9.0a0 + - libgcc-ng >=12 + - libstdcxx-ng >=12 + - libzlib >=1.2.13,<1.3.0a0 + - openssl >=3.2.1,<4.0a0 + license: Apache-2.0 + license_family: Apache + size: 3409636 + timestamp: 1708527387032 - kind: conda name: binaryen - version: '116' - build: h13dd4ca_0 - subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/binaryen-116-h13dd4ca_0.conda - sha256: 80aba7f9d8f311ba103e6a4806231a404b0f39f130be5af07ea9574cd42afebf - md5: e4aad775b4f2c3b336b8e2eea63eaff2 + version: '117' + build: h2f0025b_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/binaryen-117-h2f0025b_0.conda + sha256: 3820ab878d1a20792271a37440da1d304b36e26effff6f302592d5098cefa496 + md5: 69f34782ba69df988531f13d6bcc4385 depends: - - libcxx >=15.0.7 + - libgcc-ng >=12 + - libstdcxx-ng >=12 license: Apache-2.0 - license_family: APACHE - size: 3505018 - timestamp: 1694723361260 + size: 5372762 + timestamp: 1710444374732 - kind: conda name: binaryen - version: '116' + version: '117' build: h59595ed_0 subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/binaryen-116-h59595ed_0.conda - sha256: 84704b46b2bfde6d35fdd479bfe2769a6ef4c899677618ce1d6f8c926657cbf8 - md5: 52dff2370624a2be1e323c41e3882ed4 + url: https://conda.anaconda.org/conda-forge/linux-64/binaryen-117-h59595ed_0.conda + sha256: f6d7f876c514d2d138fd8b06e485b042598cf3dcda40a8a346252bb7e1adf8d7 + md5: 58aea5eaef8cb663104654734d432ba3 depends: - libgcc-ng >=12 - libstdcxx-ng >=12 license: Apache-2.0 license_family: APACHE - size: 5215096 - timestamp: 1694722302360 + size: 5783056 + timestamp: 1709092512197 - kind: conda name: binaryen - version: '116' + version: '117' build: h63175ca_0 subdir: win-64 - url: https://conda.anaconda.org/conda-forge/win-64/binaryen-116-h63175ca_0.conda - sha256: 531c4be009192cfb1b53ef1724fc3c670d16f629c20a77b5664b90f3c4d048c9 - md5: eee203f471868cf9c078ddfae586f221 + url: https://conda.anaconda.org/conda-forge/win-64/binaryen-117-h63175ca_0.conda + sha256: 2cc0e433360f7c4a5ce8e2b5f8960cfba8675b6b3232830da7e6f8403c6b4186 + md5: b0028cf00bb7d8f3fd8075de8165b1a8 depends: - ucrt >=10.0.20348.0 - vc >=14.2,<15 - vc14_runtime >=14.29.30139 license: Apache-2.0 license_family: APACHE - size: 36575639 - timestamp: 1694723421705 + size: 40046563 + timestamp: 1709093094826 - kind: conda name: binaryen - version: '116' - build: he965462_0 + version: '117' + build: h73e2aa4_0 subdir: osx-64 - url: https://conda.anaconda.org/conda-forge/osx-64/binaryen-116-he965462_0.conda - sha256: ccdf062ca035f8087619c454d3a676dd1598626ee753799cdf8cba1e497bebbd - md5: 8c5fcc736f62d68f1807f87b3f36708b + url: https://conda.anaconda.org/conda-forge/osx-64/binaryen-117-h73e2aa4_0.conda + sha256: f1dae7bbbdae9ee2f4b3479b51578fc67e77d54c5c235a5e5c7c1c58b2fff13e + md5: 029b1d804ba237f99163740225d53abc depends: - - libcxx >=15.0.7 + - libcxx >=16 license: Apache-2.0 license_family: APACHE - size: 3440338 - timestamp: 1694723081095 + size: 3797571 + timestamp: 1709093347983 +- kind: conda + name: binaryen + version: '117' + build: hebf3989_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/binaryen-117-hebf3989_0.conda + sha256: 9f4696ff6bf7a43261e549c1142dc24f45905fff68a6c0a1ebbdd0a84acd9056 + md5: 26d849f5539e7e20d8b7465a3616a622 + depends: + - libcxx >=16 + license: Apache-2.0 + license_family: APACHE + size: 3466426 + timestamp: 1709092708128 - kind: conda name: binutils version: '2.40' @@ -3209,6 +5245,49 @@ packages: license_family: MIT size: 386618 timestamp: 1708248490085 +- kind: conda + name: black + version: 24.2.0 + build: py311hec3470c_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/black-24.2.0-py311hec3470c_0.conda + sha256: 44600ae70a8fca4ea1fda9c86818e2a5a58c23b3b03a27b1de9079f5f022c193 + md5: 5f1d486090d858df5fd90f2137b27e53 + depends: + - click >=8.0.0 + - mypy_extensions >=0.4.3 + - packaging >=22.0 + - pathspec >=0.9 + - platformdirs >=2 + - python >=3.11,<3.12.0a0 + - python >=3.11,<3.12.0a0 *_cpython + - python_abi 3.11.* *_cp311 + license: MIT + license_family: MIT + size: 386639 + timestamp: 1708248423560 +- kind: conda + name: blackdoc + version: 0.3.8 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/blackdoc-0.3.8-pyhd8ed1ab_0.tar.bz2 + sha256: ec7b75c0f88db3e8c8b506ec48fa4fa210b0c1d09b0969df726a68b5563d151d + md5: c03749cb0d5874fd5b9c1620a3d230c4 + depends: + - black + - importlib-metadata + - more-itertools + - python >=3.7 + - rich + - tomli + license: MIT + license_family: MIT + purls: + - pkg:pypi/blackdoc + size: 30092 + timestamp: 1667565048643 - kind: conda name: blackdoc version: 0.3.8 @@ -3229,6 +5308,8 @@ packages: platform: win license: MIT license_family: MIT + purls: + - pkg:pypi/blackdoc size: 30092 timestamp: 1667565048643 - kind: conda @@ -3259,6 +5340,21 @@ packages: license_family: BSD size: 127885 timestamp: 1699280178474 +- kind: conda + name: bzip2 + version: 1.0.8 + build: h31becfc_5 + build_number: 5 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/bzip2-1.0.8-h31becfc_5.conda + sha256: b9f170990625cb1eeefaca02e091dc009a64264b077166d8ed7aeb7a09e923b0 + md5: a64e35f01e0b7a2a152eca87d33b9c87 + depends: + - libgcc-ng >=12 + license: bzip2-1.0.6 + license_family: BSD + size: 189668 + timestamp: 1699280060686 - kind: conda name: bzip2 version: 1.0.8 @@ -3436,6 +5532,44 @@ packages: license_family: MIT size: 162725 timestamp: 1706299899438 +- kind: conda + name: c-ares + version: 1.27.0 + build: h10d778d_0 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/c-ares-1.27.0-h10d778d_0.conda + sha256: a53e14c071dcce756ce80673f2a90a1c6dff695a26bc9f5e54d56b55e76ee3dc + md5: 713dd57081dfe8535eb961b45ed26a0c + license: MIT + license_family: MIT + size: 148568 + timestamp: 1708685147963 +- kind: conda + name: c-ares + version: 1.27.0 + build: h31becfc_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/c-ares-1.27.0-h31becfc_0.conda + sha256: 4152e674377179b35d59ddd9218411477a206ecff5f5939dfc963f997cf3b8b8 + md5: f03f76a77d690f2d31ce12e7b4e12ae4 + depends: + - libgcc-ng >=12 + license: MIT + license_family: MIT + size: 170421 + timestamp: 1708684764494 +- kind: conda + name: c-ares + version: 1.27.0 + build: h93a5062_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/c-ares-1.27.0-h93a5062_0.conda + sha256: a168e53ee462980cd78b324e055afdd00080ded378ca974969a0917eb4ae1ccb + md5: d3579ba506791b1f8f8a16cfc2885326 + license: MIT + license_family: MIT + size: 145697 + timestamp: 1708685057216 - kind: conda name: c-ares version: 1.27.0 @@ -3452,6 +5586,20 @@ packages: license_family: MIT size: 153934 timestamp: 1708685329364 +- kind: conda + name: c-ares + version: 1.27.0 + build: hd590300_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/c-ares-1.27.0-hd590300_0.conda + sha256: 2a5866b19d28cb963fab291a62ff1c884291b9d6f59de14643e52f103e255749 + md5: f6afff0e9ee08d2f1b897881a4f38cdb + depends: + - libgcc-ng >=12 + license: MIT + license_family: MIT + size: 163578 + timestamp: 1708684786032 - kind: conda name: c-compiler version: 1.6.0 @@ -3584,6 +5732,17 @@ packages: license: ISC size: 155432 timestamp: 1706843687645 +- kind: conda + name: ca-certificates + version: 2024.2.2 + build: hcefe29a_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/ca-certificates-2024.2.2-hcefe29a_0.conda + sha256: 0f6b34d835e26e5fa97cca4985dc46f0aba551a3a23f07c6f13cca2542b8c642 + md5: 57c226edb90c4e973b9b7503537dd339 + license: ISC + size: 155738 + timestamp: 1706845723412 - kind: conda name: ca-certificates version: 2024.2.2 @@ -3805,6 +5964,25 @@ packages: license_family: Apache size: 692537 timestamp: 1706894104516 +- kind: conda + name: clang-format + version: 16.0.6 + build: default_h127d8a8_5 + build_number: 5 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/clang-format-16.0.6-default_h127d8a8_5.conda + sha256: 8ae23380654712d8e8440871419cd8409903c3e2fd7c051978f2923e662a9c92 + md5: 1fe9ee2e961ecae22f5a0413b34f9f5d + depends: + - clang-format-16 16.0.6 default_h127d8a8_5 + - libclang-cpp16 >=16.0.6,<16.1.0a0 + - libgcc-ng >=12 + - libllvm16 >=16.0.6,<16.1.0a0 + - libstdcxx-ng >=12 + license: Apache-2.0 WITH LLVM-exception + license_family: Apache + size: 21690 + timestamp: 1709765119029 - kind: conda name: clang-format version: 16.0.6 @@ -3859,6 +6037,25 @@ packages: license_family: Apache size: 21613 timestamp: 1704262844623 +- kind: conda + name: clang-format + version: 16.0.6 + build: default_hb368394_5 + build_number: 5 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/clang-format-16.0.6-default_hb368394_5.conda + sha256: e56e743bc4db5e85cebc479479c8ac6fd8be73effb3d40071f027b5ead77be8a + md5: 566748cfa5d501ed00b28612daa0bae7 + depends: + - clang-format-16 16.0.6 default_hb368394_5 + - libclang-cpp16 >=16.0.6,<16.1.0a0 + - libgcc-ng >=12 + - libllvm16 >=16.0.6,<16.1.0a0 + - libstdcxx-ng >=12 + license: Apache-2.0 WITH LLVM-exception + license_family: Apache + size: 21892 + timestamp: 1706896136958 - kind: conda name: clang-format version: 16.0.6 @@ -3877,6 +6074,24 @@ packages: license_family: Apache size: 21914 timestamp: 1706894694897 +- kind: conda + name: clang-format-16 + version: 16.0.6 + build: default_h127d8a8_5 + build_number: 5 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/clang-format-16-16.0.6-default_h127d8a8_5.conda + sha256: 9843007a8ffd53008240aec77b74068733daf5a00c60480d0978d05146511522 + md5: 72cd7fd253434f1c6c6ee0af962ee700 + depends: + - libclang-cpp16 >=16.0.6,<16.1.0a0 + - libgcc-ng >=12 + - libllvm16 >=16.0.6,<16.1.0a0 + - libstdcxx-ng >=12 + license: Apache-2.0 WITH LLVM-exception + license_family: Apache + size: 61980 + timestamp: 1709765062005 - kind: conda name: clang-format-16 version: 16.0.6 @@ -3912,6 +6127,24 @@ packages: license_family: Apache size: 61766 timestamp: 1704262713061 +- kind: conda + name: clang-format-16 + version: 16.0.6 + build: default_hb368394_5 + build_number: 5 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/clang-format-16-16.0.6-default_hb368394_5.conda + sha256: 9c7bb588c975f100298736a0d4582a4b860071bb31ca195c2bdeaa1644681510 + md5: fb61b4171f7357ed8a6e38be8782628f + depends: + - libclang-cpp16 >=16.0.6,<16.1.0a0 + - libgcc-ng >=12 + - libllvm16 >=16.0.6,<16.1.0a0 + - libstdcxx-ng >=12 + license: Apache-2.0 WITH LLVM-exception + license_family: Apache + size: 63067 + timestamp: 1706896079312 - kind: conda name: clang-format-16 version: 16.0.6 @@ -3927,8 +6160,34 @@ packages: - libllvm16 >=16.0.6,<16.1.0a0 license: Apache-2.0 WITH LLVM-exception license_family: Apache - size: 56848 - timestamp: 1706894594045 + size: 56848 + timestamp: 1706894594045 +- kind: conda + name: clang-tools + version: 16.0.6 + build: default_h127d8a8_5 + build_number: 5 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/clang-tools-16.0.6-default_h127d8a8_5.conda + sha256: 4b1c26e1058995181efcbd31b9d952241f9c561aad79ca6b7261ec7dc4796bd7 + md5: a85978ea2f9ea8b3a0c0b5ccea48a42e + depends: + - clang-format 16.0.6 default_h127d8a8_5 + - libclang-cpp16 >=16.0.6,<16.1.0a0 + - libclang13 >=16.0.6 + - libgcc-ng >=12 + - libllvm16 >=16.0.6,<16.1.0a0 + - libstdcxx-ng >=12 + constrains: + - clangdev 16.0.6 + - clang 16.0.6.* + - llvm 16.0.6.* + - llvm-tools 16.0.6.* + - llvmdev 16.0.6.* + license: Apache-2.0 WITH LLVM-exception + license_family: Apache + size: 26812015 + timestamp: 1709765163586 - kind: conda name: clang-tools version: 16.0.6 @@ -4008,6 +6267,32 @@ packages: license_family: Apache size: 26681224 timestamp: 1704262959552 +- kind: conda + name: clang-tools + version: 16.0.6 + build: default_hb368394_5 + build_number: 5 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/clang-tools-16.0.6-default_hb368394_5.conda + sha256: e7fa9cf87f0cfda820c177247dd184ecd139751d43219dc864c665b02f4944a7 + md5: 7e2843f2ab82c0d7f31d07b4eafd105f + depends: + - clang-format 16.0.6 default_hb368394_5 + - libclang-cpp16 >=16.0.6,<16.1.0a0 + - libclang13 >=16.0.6 + - libgcc-ng >=12 + - libllvm16 >=16.0.6,<16.1.0a0 + - libstdcxx-ng >=12 + constrains: + - clangdev 16.0.6 + - clang 16.0.6.* + - llvm 16.0.6.* + - llvm-tools 16.0.6.* + - llvmdev 16.0.6.* + license: Apache-2.0 WITH LLVM-exception + license_family: Apache + size: 26926170 + timestamp: 1706896230135 - kind: conda name: clang-tools version: 16.0.6 @@ -4199,6 +6484,24 @@ packages: license_family: BSD size: 19330 timestamp: 1706832814124 +- kind: conda + name: click + version: 8.1.7 + build: unix_pyh707e725_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/click-8.1.7-unix_pyh707e725_0.conda + sha256: f0016cbab6ac4138a429e28dbcb904a90305b34b3fe41a9b89d697c90401caec + md5: f3ad426304898027fc619827ff428eca + depends: + - __unix + - python >=3.8 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/click + size: 84437 + timestamp: 1692311973840 - kind: conda name: click version: 8.1.7 @@ -4215,8 +6518,29 @@ packages: platform: osx license: BSD-3-Clause license_family: BSD + purls: + - pkg:pypi/click size: 84437 timestamp: 1692311973840 +- kind: conda + name: click + version: 8.1.7 + build: win_pyh7428d3b_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/click-8.1.7-win_pyh7428d3b_0.conda + sha256: 90236b113b9a20041736e80b80ee965167f9aac0468315c55e2bad902d673fb0 + md5: 3549ecbceb6cd77b91a105511b7d0786 + depends: + - __win + - colorama + - python >=3.8 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/click + size: 85051 + timestamp: 1692312207348 - kind: conda name: click version: 8.1.7 @@ -4234,6 +6558,8 @@ packages: platform: win license: BSD-3-Clause license_family: BSD + purls: + - pkg:pypi/click size: 85051 timestamp: 1692312207348 - kind: conda @@ -4283,6 +6609,30 @@ packages: license_family: BSD size: 18494905 timestamp: 1695269729661 +- kind: conda + name: cmake + version: 3.27.6 + build: hef020d8_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/cmake-3.27.6-hef020d8_0.conda + sha256: 099e3d6deac7fc29251552f87b59ee7299582caf291a20de71107327a4aded57 + md5: e20b2e0185007a671ebbb72f4353d70b + depends: + - bzip2 >=1.0.8,<2.0a0 + - libcurl >=8.3.0,<9.0a0 + - libexpat >=2.5.0,<3.0a0 + - libgcc-ng >=12 + - libstdcxx-ng >=12 + - libuv >=1.46.0,<2.0a0 + - libzlib >=1.2.13,<1.3.0a0 + - ncurses >=6.4,<7.0a0 + - rhash >=1.4.4,<2.0a0 + - xz >=5.2.6,<6.0a0 + - zstd >=1.5.5,<1.6.0a0 + license: BSD-3-Clause + license_family: BSD + size: 17776308 + timestamp: 1695269663260 - kind: conda name: cmake version: 3.27.6 @@ -4332,85 +6682,51 @@ packages: name: colorama version: 0.4.6 build: pyhd8ed1ab_0 - subdir: win-64 + subdir: noarch noarch: python url: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_0.tar.bz2 sha256: 2c1b2e9755ce3102bca8d69e8f26e4f087ece73f50418186aee7c74bef8e1698 md5: 3faab06a954c2a04039983f2c4a50d99 depends: - python >=3.7 - arch: x86_64 - platform: win license: BSD-3-Clause license_family: BSD + purls: + - pkg:pypi/colorama size: 25170 timestamp: 1666700778190 - kind: conda - name: colorlog - version: 4.8.0 - build: py311h1ea47a8_3 - build_number: 3 + name: colorama + version: 0.4.6 + build: pyhd8ed1ab_0 subdir: win-64 - url: https://conda.anaconda.org/conda-forge/win-64/colorlog-4.8.0-py311h1ea47a8_3.conda - sha256: 3b317933f05df326e327faafcf1fd1be643df36f1aa479aab54f2a85062307f0 - md5: 9881fe3cbeed11cd8138a28c4c9d1f94 - depends: - - colorama - - python >=3.11,<3.12.0a0 - - python_abi 3.11.* *_cp311 - license: MIT - license_family: MIT - size: 20460 - timestamp: 1697027322301 -- kind: conda - name: colorlog - version: 4.8.0 - build: py311h267d04e_3 - build_number: 3 - subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/colorlog-4.8.0-py311h267d04e_3.conda - sha256: 86dcaba5a3cd40e9752aa08221c45997a434cf2917d0b32eea56d788522a514a - md5: e4b2335855768eade29813b85342c990 - depends: - - python >=3.11,<3.12.0a0 - - python >=3.11,<3.12.0a0 *_cpython - - python_abi 3.11.* *_cp311 - license: MIT - license_family: MIT - size: 20239 - timestamp: 1697027319606 -- kind: conda - name: colorlog - version: 4.8.0 - build: py311h38be061_3 - build_number: 3 - subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/colorlog-4.8.0-py311h38be061_3.conda - sha256: bb52f32dfd32fe73691eebcbb336103db8167c26134c56123b26dc9808a684fa - md5: 09b2eea88d971b3986ac2cb47c9ea99f + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_0.tar.bz2 + sha256: 2c1b2e9755ce3102bca8d69e8f26e4f087ece73f50418186aee7c74bef8e1698 + md5: 3faab06a954c2a04039983f2c4a50d99 depends: - - python >=3.11,<3.12.0a0 - - python_abi 3.11.* *_cp311 - license: MIT - license_family: MIT - size: 19834 - timestamp: 1697026997816 -- kind: conda + - python >=3.7 + arch: x86_64 + platform: win + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/colorama + size: 25170 + timestamp: 1666700778190 +- kind: pypi name: colorlog - version: 4.8.0 - build: py311h6eed73b_3 - build_number: 3 - subdir: osx-64 - url: https://conda.anaconda.org/conda-forge/osx-64/colorlog-4.8.0-py311h6eed73b_3.conda - sha256: b929b2da9e782b6a2f7b559e32e443293c3ecdf628918fc685db928b5570460f - md5: cd35ca12286652e78d1d4c457b6e5a98 - depends: - - python >=3.11,<3.12.0a0 - - python_abi 3.11.* *_cp311 - license: MIT - license_family: MIT - size: 20046 - timestamp: 1697027212659 + version: 6.8.2 + url: https://files.pythonhosted.org/packages/f3/18/3e867ab37a24fdf073c1617b9c7830e06ec270b1ea4694a624038fc40a03/colorlog-6.8.2-py3-none-any.whl + sha256: 4dcbb62368e2800cb3c5abd348da7e53f6c362dda502ec27c560b2e58a66bd33 + requires_dist: + - colorama ; sys_platform == 'win32' + - black ; extra == 'development' + - flake8 ; extra == 'development' + - mypy ; extra == 'development' + - pytest ; extra == 'development' + - types-colorama ; extra == 'development' + requires_python: '>=3.6' - kind: conda name: compiler-rt version: 16.0.6 @@ -4526,38 +6842,11 @@ packages: license: BSD size: 6415 timestamp: 1701504710176 -- kind: conda - name: distlib - version: 0.3.7 - build: pyhd8ed1ab_0 - subdir: win-64 - noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/distlib-0.3.7-pyhd8ed1ab_0.conda - sha256: 13c887cb4a29e1e853a118cfc0e42b72a7e1d1c50c66c0974885d37f0db30619 - md5: 12d8aae6994f342618443a8f05c652a0 - depends: - - python 2.7|>=3.6 - arch: x86_64 - platform: win - license: Apache-2.0 - license_family: APACHE - size: 273692 - timestamp: 1689598624555 -- kind: conda +- kind: pypi name: distlib version: 0.3.8 - build: pyhd8ed1ab_0 - subdir: noarch - noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/distlib-0.3.8-pyhd8ed1ab_0.conda - sha256: 3ff11acdd5cc2f80227682966916e878e45ced94f59c402efb94911a5774e84e - md5: db16c66b759a64dc5183d69cc3745a52 - depends: - - python 2.7|>=3.6 - license: Apache-2.0 - license_family: APACHE - size: 274915 - timestamp: 1702383349284 + url: https://files.pythonhosted.org/packages/8e/41/9307e4f5f9976bc8b7fea0b66367734e8faf3ec84bc0d412d8cfabbb66cd/distlib-0.3.8-py2.py3-none-any.whl + sha256: 034db59a0b96f8ca18035f36290806a9a6e6bd9d1ff91e45a7f172eb17e51784 - kind: conda name: doxygen version: 1.9.7 @@ -4591,6 +6880,23 @@ packages: license_family: GPL size: 6179024 timestamp: 1687332729384 +- kind: conda + name: doxygen + version: 1.9.7 + build: h7b6a552_1 + build_number: 1 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/doxygen-1.9.7-h7b6a552_1.conda + sha256: cb4e2a628da54bf13d2decd9bbe982c611c216eb82b5ab826da59397492babd8 + md5: f619530bed063f8498eb2e15de71cf32 + depends: + - libgcc-ng >=12 + - libiconv >=1.17,<2.0a0 + - libstdcxx-ng >=12 + license: GPL-2.0-only + license_family: GPL + size: 5785379 + timestamp: 1687332318274 - kind: conda name: doxygen version: 1.9.7 @@ -4640,6 +6946,8 @@ packages: platform: win license: BSD-3-Clause license_family: BSD + purls: + - pkg:pypi/exceptiongroup size: 19262 timestamp: 1692026296517 - kind: conda @@ -4655,24 +6963,28 @@ packages: depends: - python >=3.7 license: MIT and PSF-2.0 + purls: + - pkg:pypi/exceptiongroup size: 20551 timestamp: 1704921321122 -- kind: conda +- kind: pypi name: filelock version: 3.13.1 - build: pyhd8ed1ab_0 - subdir: win-64 - noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/filelock-3.13.1-pyhd8ed1ab_0.conda - sha256: 4d742d91412d1f163e5399d2b50c5d479694ebcd309127abb549ca3977f89d2b - md5: 0c1729b74a8152fde6a38ba0a2ab9f45 - depends: - - python >=3.7 - arch: x86_64 - platform: win - license: Unlicense - size: 15605 - timestamp: 1698715139726 + url: https://files.pythonhosted.org/packages/81/54/84d42a0bee35edba99dee7b59a8d4970eccdd44b99fe728ed912106fc781/filelock-3.13.1-py3-none-any.whl + sha256: 57dbda9b35157b05fb3e58ee91448612eb674172fab98ee235ccb0b5bee19a1c + requires_dist: + - furo >=2023.9.10 ; extra == 'docs' + - sphinx-autodoc-typehints !=1.23.4, >=1.24 ; extra == 'docs' + - sphinx >=7.2.6 ; extra == 'docs' + - covdefaults >=2.3 ; extra == 'testing' + - coverage >=7.3.2 ; extra == 'testing' + - diff-cover >=8 ; extra == 'testing' + - pytest-cov >=4.1 ; extra == 'testing' + - pytest-mock >=3.12 ; extra == 'testing' + - pytest-timeout >=2.2 ; extra == 'testing' + - pytest >=7.4.3 ; extra == 'testing' + - typing-extensions >=4.8 ; python_version < '3.11' and extra == 'typing' + requires_python: '>=3.8' - kind: conda name: flatbuffers version: 23.5.26 @@ -4736,6 +7048,80 @@ packages: license_family: APACHE size: 1303407 timestamp: 1685304046679 +- kind: conda + name: flatbuffers + version: 24.3.7 + build: h2f0025b_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/flatbuffers-24.3.7-h2f0025b_0.conda + sha256: 4284097708db3645f85dd0a9bbacfdd43d50ed1ad6cde0ebebfa24dac2518b83 + md5: 418752006d8190594749f21530c27fb5 + depends: + - libgcc-ng >=12 + - libstdcxx-ng >=12 + license: Apache-2.0 + license_family: APACHE + size: 1298784 + timestamp: 1710058440028 +- kind: conda + name: flatbuffers + version: 24.3.7 + build: h59595ed_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/flatbuffers-24.3.7-h59595ed_0.conda + sha256: 30b53ebe46e902ea80479406d8d849f6d552d1f3ea4ee0eef6048a7a2201d93e + md5: e72ffaf09c193f6bebbb0054079ab7d1 + depends: + - libgcc-ng >=12 + - libstdcxx-ng >=12 + license: Apache-2.0 + license_family: APACHE + size: 1453620 + timestamp: 1710058292298 +- kind: conda + name: flatbuffers + version: 24.3.7 + build: h63175ca_0 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/flatbuffers-24.3.7-h63175ca_0.conda + sha256: 40613c4386464f2a1fa8ccebf1a38fede56669b8cdb6e4b0307e427720805232 + md5: 030adc8125b572439459ea9f063cf3de + depends: + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + license: Apache-2.0 + license_family: APACHE + size: 1727810 + timestamp: 1710058620131 +- kind: conda + name: flatbuffers + version: 24.3.7 + build: h73e2aa4_0 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/flatbuffers-24.3.7-h73e2aa4_0.conda + sha256: e4d0e09f5f27825fc8ccb42cc4ebb20951b364a303aa4e95fc996afbac78bf79 + md5: 4bca4cc7c9864063a92b08fb6975b802 + depends: + - libcxx >=16 + license: Apache-2.0 + license_family: APACHE + size: 1336422 + timestamp: 1710058653949 +- kind: conda + name: flatbuffers + version: 24.3.7 + build: hebf3989_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/flatbuffers-24.3.7-hebf3989_0.conda + sha256: accfeff694d2b95a4a0ec6cd2ae5206028ce63a72583523e74bbb9d8e5b9ab53 + md5: 51f4a8e083d8caf54e945a9cf858a966 + depends: + - libcxx >=16 + license: Apache-2.0 + license_family: APACHE + size: 1278204 + timestamp: 1710058972127 - kind: conda name: gcc version: 12.3.0 @@ -4789,6 +7175,22 @@ packages: license_family: BSD size: 30351 timestamp: 1694604476800 +- kind: conda + name: gflags + version: 2.2.2 + build: h54f1f3f_1004 + build_number: 1004 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/gflags-2.2.2-h54f1f3f_1004.tar.bz2 + sha256: c72f18b94048df5525d8ae73a9efb8d830048b70328d63738d91d3ea54e55b91 + md5: f286d3464cc8d467c92e4f17990c98c1 + depends: + - libgcc-ng >=7.5.0 + - libstdcxx-ng >=7.5.0 + license: BSD-3-Clause + license_family: BSD + size: 124596 + timestamp: 1599590718502 - kind: conda name: gflags version: 2.2.2 @@ -4835,6 +7237,24 @@ packages: license_family: BSD size: 116549 timestamp: 1594303828933 +- kind: conda + name: gitdb + version: 4.0.11 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/gitdb-4.0.11-pyhd8ed1ab_0.conda + sha256: 52ab2798be31b8f509eeec458712f447ced4f96ecb672c6c9a42778f47e07b1b + md5: 623b19f616f2ca0c261441067e18ae40 + depends: + - python >=3.7 + - smmap >=3.0.1,<6 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/gitdb + size: 52872 + timestamp: 1697791718749 - kind: conda name: gitdb version: 4.0.11 @@ -4851,6 +7271,8 @@ packages: platform: win license: BSD-3-Clause license_family: BSD + purls: + - pkg:pypi/gitdb size: 52872 timestamp: 1697791718749 - kind: conda @@ -4868,6 +7290,8 @@ packages: platform: win license: MIT license_family: MIT + purls: + - pkg:pypi/gitignore-parser size: 11371 timestamp: 1696511979480 - kind: conda @@ -4883,6 +7307,8 @@ packages: - python >=3.7 license: MIT license_family: MIT + purls: + - pkg:pypi/gitignore-parser size: 11460 timestamp: 1705776957779 - kind: conda @@ -4902,6 +7328,8 @@ packages: platform: win license: BSD-3-Clause license_family: BSD + purls: + - pkg:pypi/gitpython size: 147305 timestamp: 1697650463508 - kind: conda @@ -4919,8 +7347,29 @@ packages: - typing_extensions >=3.7.4.3 license: BSD-3-Clause license_family: BSD + purls: + - pkg:pypi/gitpython size: 150528 timestamp: 1704911329345 +- kind: conda + name: gitpython + version: 3.1.42 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/gitpython-3.1.42-pyhd8ed1ab_0.conda + sha256: a11e1cf4404157467d0f51906d1db80bcb8bfe4bb3d3eba703b28e981ea7e308 + md5: 6bc8e496351bafd761c0922c3ebd989a + depends: + - gitdb >=4.0.1,<5 + - python >=3.7 + - typing_extensions >=3.7.4.3 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/gitpython + size: 149604 + timestamp: 1708069389374 - kind: conda name: glog version: 0.6.0 @@ -4981,8 +7430,24 @@ packages: - libcxx >=16 license: BSD-3-Clause license_family: BSD - size: 115506 - timestamp: 1708261022187 + size: 115506 + timestamp: 1708261022187 +- kind: conda + name: glog + version: 0.7.0 + build: ha63034d_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/glog-0.7.0-ha63034d_0.conda + sha256: 5b03faf3e29d277f03db2609399408182a2ee1af10986eed5a334e0d98f4e526 + md5: 70e70f34821c33530baeefd3ad1229bd + depends: + - gflags >=2.2.2,<2.3.0a0 + - libgcc-ng >=12 + - libstdcxx-ng >=12 + license: BSD-3-Clause + license_family: BSD + size: 147076 + timestamp: 1708260860922 - kind: conda name: glog version: 0.7.0 @@ -5080,6 +7545,21 @@ packages: license_family: MIT size: 12089150 timestamp: 1692900650789 +- kind: conda + name: icu + version: '73.2' + build: h787c7f5_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/icu-73.2-h787c7f5_0.conda + sha256: aedb9c911ede5596c87e1abd763ed940fab680d71fdb953bce8e4094119d47b3 + md5: 9d3c29d71f28452a2e843aff8cbe09d2 + depends: + - libgcc-ng >=12 + - libstdcxx-ng >=12 + license: MIT + license_family: MIT + size: 12237094 + timestamp: 1692900632394 - kind: conda name: icu version: '73.2' @@ -5123,22 +7603,38 @@ packages: size: 25527 timestamp: 1676330831614 - kind: conda - name: importlib_metadata - version: 4.13.0 - build: hd8ed1ab_0 - subdir: win-64 - noarch: generic - url: https://conda.anaconda.org/conda-forge/noarch/importlib_metadata-4.13.0-hd8ed1ab_0.conda - sha256: 3721a25eddddf46e562cfe04aa36c7c6417ae7056cd0c9d0a42d0349ce3bbcc8 - md5: eb09e30f586f5d8f8e8b784824be7017 + name: importlib-metadata + version: 7.0.2 + build: pyha770c72_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-7.0.2-pyha770c72_0.conda + sha256: 9a26136d2cc81ccac209d6ae24281ceba3365fe34e34b2c45570f2a96e9d9c1b + md5: b050a4bb0e90ebd6e7fa4093d6346867 depends: - - importlib-metadata >=4.13.0,<4.13.1.0a0 - arch: x86_64 - platform: win + - python >=3.8 + - zipp >=0.5 license: Apache-2.0 license_family: APACHE - size: 9145 - timestamp: 1676330837094 + size: 26900 + timestamp: 1709821273570 +- kind: conda + name: iniconfig + version: 2.0.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_0.conda + sha256: 38740c939b668b36a50ef455b077e8015b8c9cf89860d421b3fff86048f49666 + md5: f800d2da156d08e289b14e87e43c1ae5 + depends: + - python >=3.7 + license: MIT + license_family: MIT + purls: + - pkg:pypi/iniconfig + size: 11101 + timestamp: 1673103208955 - kind: conda name: iniconfig version: 2.0.0 @@ -5154,6 +7650,8 @@ packages: platform: win license: MIT license_family: MIT + purls: + - pkg:pypi/iniconfig size: 11101 timestamp: 1673103208955 - kind: conda @@ -5184,41 +7682,6 @@ packages: license_family: Proprietary size: 2325424 timestamp: 1706182537883 -- kind: conda - name: jinja2 - version: 3.1.2 - build: pyhd8ed1ab_1 - build_number: 1 - subdir: win-64 - noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.2-pyhd8ed1ab_1.tar.bz2 - sha256: b045faba7130ab263db6a8fdc96b1a3de5fcf85c4a607c5f11a49e76851500b5 - md5: c8490ed5c70966d232fdd389d0dbed37 - depends: - - markupsafe >=2.0 - - python >=3.7 - arch: x86_64 - platform: win - license: BSD-3-Clause - license_family: BSD - size: 101443 - timestamp: 1654302514195 -- kind: conda - name: jinja2 - version: 3.1.3 - build: pyhd8ed1ab_0 - subdir: noarch - noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.3-pyhd8ed1ab_0.conda - sha256: fd517b7dd3a61eca34f8a6f9f92f306397149cae1204fce72ac3d227107dafdc - md5: e7d8df6509ba635247ff9aea31134262 - depends: - - markupsafe >=2.0 - - python >=3.7 - license: BSD-3-Clause - license_family: BSD - size: 111589 - timestamp: 1704967140287 - kind: conda name: just version: 1.15.0 @@ -5325,6 +7788,72 @@ packages: license: CC0-1.0 size: 1178083 timestamp: 1704893025811 +- kind: conda + name: just + version: 1.24.0 + build: h11a7dfb_0 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/just-1.24.0-h11a7dfb_0.conda + sha256: 802572940bc1208d135637b9859517d4262d156d956a98c96ca5502240da7d7d + md5: 5ac25104279a5589381ade8bd8e56552 + constrains: + - __osx >=10.12 + license: CC0-1.0 + size: 1113461 + timestamp: 1708241218651 +- kind: conda + name: just + version: 1.24.0 + build: h1d8f897_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/just-1.24.0-h1d8f897_0.conda + sha256: 581e83c4f9aa9663244b767e49a857374019d71f589567611be2870a95a05f52 + md5: 0a0e604e2ff4c1a207f5a2fbc2df154c + depends: + - libgcc-ng >=12 + license: CC0-1.0 + size: 1104293 + timestamp: 1708246328468 +- kind: conda + name: just + version: 1.24.0 + build: h5ef7bb8_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/just-1.24.0-h5ef7bb8_0.conda + sha256: 8a887ad3b46cb7df6e6f28301bf498a1d546a191b4e856f5ec68b51508534efd + md5: cd1e84db2e7aafc373279d6ac9746e20 + constrains: + - __osx >=11.0 + license: CC0-1.0 + size: 1033268 + timestamp: 1708241219422 +- kind: conda + name: just + version: 1.24.0 + build: h7f3b576_0 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/just-1.24.0-h7f3b576_0.conda + sha256: 00ef2294055adaf43115f0929172e8cd6cecec3ec03fa73d0fd10d6c34ed4aa2 + md5: 969f459714747b46af1159ee41dabd6d + depends: + - m2w64-gcc-libs + - m2w64-gcc-libs-core + license: CC0-1.0 + size: 1166282 + timestamp: 1708241728702 +- kind: conda + name: just + version: 1.24.0 + build: he8a937b_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/just-1.24.0-he8a937b_0.conda + sha256: 6d230b47d7548158e92d54580abdb2c1c767c986dc3d72431db7025570bf82cd + md5: 1de85b6ac80b52ce66fab344945cf2c3 + depends: + - libgcc-ng >=12 + license: CC0-1.0 + size: 1203601 + timestamp: 1708240909235 - kind: conda name: kernel-headers_linux-64 version: 2.6.32 @@ -5354,6 +7883,19 @@ packages: license: LGPL-2.1-or-later size: 117831 timestamp: 1646151697040 +- kind: conda + name: keyutils + version: 1.6.1 + build: h4e544f5_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/keyutils-1.6.1-h4e544f5_0.tar.bz2 + sha256: 6d4233d97a9b38acbb26e1268bcf8c10a8e79c2aed7e5a385ec3769967e3e65b + md5: 1f24853e59c68892452ef94ddd8afd4b + depends: + - libgcc-ng >=10.3.0 + license: LGPL-2.1-or-later + size: 112327 + timestamp: 1646166857935 - kind: conda name: krb5 version: 1.21.2 @@ -5407,6 +7949,25 @@ packages: license_family: MIT size: 1183568 timestamp: 1692098004387 +- kind: conda + name: krb5 + version: 1.21.2 + build: hc419048_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/krb5-1.21.2-hc419048_0.conda + sha256: c3f24ead49fb7d7c29fae491bec3f090f63d77a46954eadbc4463f137e2b42cd + md5: 55b51af37bf6fdcfe06f140e62e8c8db + depends: + - keyutils >=1.6.1,<2.0a0 + - libedit >=3.1.20191231,<3.2.0a0 + - libedit >=3.1.20191231,<4.0a0 + - libgcc-ng >=12 + - libstdcxx-ng >=12 + - openssl >=3.1.2,<4.0a0 + license: MIT + license_family: MIT + size: 1473397 + timestamp: 1692097651347 - kind: conda name: krb5 version: 1.21.2 @@ -5522,6 +8083,20 @@ packages: license_family: GPL size: 704696 timestamp: 1674833944779 +- kind: conda + name: ld_impl_linux-aarch64 + version: '2.40' + build: h2d8c526_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/ld_impl_linux-aarch64-2.40-h2d8c526_0.conda + sha256: 1ba06e8645094b340b4aee23603a6abb1b0383788180e65f3de34e655c5f577c + md5: 16246d69e945d0b1969a6099e7c5d457 + constrains: + - binutils_impl_linux-aarch64 2.40 + license: GPL-3.0-only + license_family: GPL + size: 738776 + timestamp: 1674833843183 - kind: conda name: libabseil version: '20230802.1' @@ -5575,6 +8150,25 @@ packages: license_family: Apache size: 1263396 timestamp: 1695063868515 +- kind: conda + name: libabseil + version: '20240116.1' + build: cxx17_h2f0025b_2 + build_number: 2 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libabseil-20240116.1-cxx17_h2f0025b_2.conda + sha256: bf8d5c1ee76960840d6a0e8eac4fd4111712a4745fffb1e6f9466feb3f11c1c6 + md5: 85dff948e5ec41a2eba9eb8fb001d01e + depends: + - libgcc-ng >=12 + - libstdcxx-ng >=12 + constrains: + - abseil-cpp =20240116.1 + - libabseil-static =20240116.1=cxx17* + license: Apache-2.0 + license_family: Apache + size: 1286200 + timestamp: 1709159884574 - kind: conda name: libabseil version: '20240116.1' @@ -5688,6 +8282,85 @@ packages: license_family: APACHE size: 15778237 timestamp: 1706610772424 +- kind: conda + name: libarrow + version: 14.0.2 + build: h25df049_12_cpu + build_number: 12 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libarrow-14.0.2-h25df049_12_cpu.conda + sha256: 6a722025c1815e97356a480444a948a895eba8a529e06a946775218dffca5c96 + md5: d7a52d1add3c83e733238ba1b5169b37 + depends: + - aws-crt-cpp >=0.26.2,<0.26.3.0a0 + - aws-sdk-cpp >=1.11.267,<1.11.268.0a0 + - bzip2 >=1.0.8,<2.0a0 + - glog >=0.7.0,<0.8.0a0 + - libabseil * cxx17* + - libabseil >=20240116.1,<20240117.0a0 + - libbrotlidec >=1.1.0,<1.2.0a0 + - libbrotlienc >=1.1.0,<1.2.0a0 + - libgcc-ng >=12 + - libgoogle-cloud >=2.22.0,<2.23.0a0 + - libgoogle-cloud-storage >=2.22.0,<2.23.0a0 + - libre2-11 >=2023.9.1,<2024.0a0 + - libstdcxx-ng >=12 + - libutf8proc >=2.8.0,<3.0a0 + - libzlib >=1.2.13,<1.3.0a0 + - lz4-c >=1.9.3,<1.10.0a0 + - orc >=2.0.0,<2.0.1.0a0 + - re2 + - snappy >=1.1.10,<2.0a0 + - zstd >=1.5.5,<1.6.0a0 + constrains: + - apache-arrow-proc =*=cpu + - parquet-cpp <0.0a0 + - arrow-cpp <0.0a0 + license: Apache-2.0 + license_family: APACHE + size: 7385058 + timestamp: 1710292910535 +- kind: conda + name: libarrow + version: 14.0.2 + build: h2a83f13_13_cpu + build_number: 13 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/libarrow-14.0.2-h2a83f13_13_cpu.conda + sha256: 1e20499fa3ec9e4abb03ec91fa5422019868b36dcf2ae3d123e1b5785a9c7424 + md5: 3c1e5bd6b032045ee42bb09302f1c01f + depends: + - aws-crt-cpp >=0.26.3,<0.26.4.0a0 + - aws-sdk-cpp >=1.11.267,<1.11.268.0a0 + - bzip2 >=1.0.8,<2.0a0 + - libabseil * cxx17* + - libabseil >=20240116.1,<20240117.0a0 + - libbrotlidec >=1.1.0,<1.2.0a0 + - libbrotlienc >=1.1.0,<1.2.0a0 + - libcrc32c >=1.1.2,<1.2.0a0 + - libcurl >=8.5.0,<9.0a0 + - libgoogle-cloud >=2.22.0,<2.23.0a0 + - libgoogle-cloud-storage >=2.22.0,<2.23.0a0 + - libre2-11 >=2023.9.1,<2024.0a0 + - libutf8proc >=2.8.0,<3.0a0 + - libzlib >=1.2.13,<1.3.0a0 + - lz4-c >=1.9.3,<1.10.0a0 + - openssl >=3.2.1,<4.0a0 + - orc >=2.0.0,<2.0.1.0a0 + - re2 + - snappy >=1.1.10,<2.0a0 + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + - zstd >=1.5.5,<1.6.0a0 + constrains: + - parquet-cpp <0.0a0 + - arrow-cpp <0.0a0 + - apache-arrow-proc =*=cpu + license: Apache-2.0 + license_family: APACHE + size: 4907643 + timestamp: 1710345937957 - kind: conda name: libarrow version: 14.0.2 @@ -5706,10 +8379,84 @@ packages: - libabseil >=20240116.1,<20240117.0a0 - libbrotlidec >=1.1.0,<1.2.0a0 - libbrotlienc >=1.1.0,<1.2.0a0 - - libcxx >=14 + - libcxx >=14 + - libgoogle-cloud >=2.21.0,<2.22.0a0 + - libgoogle-cloud-storage >=2.21.0,<2.22.0a0 + - libre2-11 >=2023.6.2,<2024.0a0 + - libutf8proc >=2.8.0,<3.0a0 + - libzlib >=1.2.13,<1.3.0a0 + - lz4-c >=1.9.3,<1.10.0a0 + - orc >=1.9.2,<1.9.3.0a0 + - re2 + - snappy >=1.1.10,<2.0a0 + - zstd >=1.5.5,<1.6.0a0 + constrains: + - apache-arrow-proc =*=cpu + - arrow-cpp <0.0a0 + - parquet-cpp <0.0a0 + license: Apache-2.0 + license_family: APACHE + size: 5316906 + timestamp: 1708691094438 +- kind: conda + name: libarrow + version: 14.0.2 + build: h4ce3932_3_cpu + build_number: 3 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libarrow-14.0.2-h4ce3932_3_cpu.conda + sha256: bfc40fc098db7715245c0aa5809ae2b8489a44e2619b63c1f75a2f9fedbc90ff + md5: 65d8be032e978630f715376237e12d95 + depends: + - aws-crt-cpp >=0.26.0,<0.26.1.0a0 + - aws-sdk-cpp >=1.11.210,<1.11.211.0a0 + - bzip2 >=1.0.8,<2.0a0 + - glog >=0.6.0,<0.7.0a0 + - libabseil * cxx17* + - libabseil >=20230802.1,<20230803.0a0 + - libbrotlidec >=1.1.0,<1.2.0a0 + - libbrotlienc >=1.1.0,<1.2.0a0 + - libcxx >=14 + - libgoogle-cloud >=2.12.0,<2.13.0a0 + - libre2-11 >=2023.6.2,<2024.0a0 + - libutf8proc >=2.8.0,<3.0a0 + - libzlib >=1.2.13,<1.3.0a0 + - lz4-c >=1.9.3,<1.10.0a0 + - orc >=1.9.2,<1.9.3.0a0 + - re2 + - snappy >=1.1.10,<2.0a0 + - zstd >=1.5.5,<1.6.0a0 + constrains: + - arrow-cpp <0.0a0 + - parquet-cpp <0.0a0 + - apache-arrow-proc =*=cpu + license: Apache-2.0 + license_family: APACHE + size: 14649507 + timestamp: 1706610614109 +- kind: conda + name: libarrow + version: 14.0.2 + build: h5001e6d_10_cpu + build_number: 10 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libarrow-14.0.2-h5001e6d_10_cpu.conda + sha256: 2e6340ba6cf72a4e38e8cfe1fd58bede4ffeb48955430b7bab0c69583233c81c + md5: ccba2f34c1345ad610734bd20f2aade7 + depends: + - aws-crt-cpp >=0.26.2,<0.26.3.0a0 + - aws-sdk-cpp >=1.11.267,<1.11.268.0a0 + - bzip2 >=1.0.8,<2.0a0 + - glog >=0.7.0,<0.8.0a0 + - libabseil * cxx17* + - libabseil >=20240116.1,<20240117.0a0 + - libbrotlidec >=1.1.0,<1.2.0a0 + - libbrotlienc >=1.1.0,<1.2.0a0 + - libgcc-ng >=12 - libgoogle-cloud >=2.21.0,<2.22.0a0 - libgoogle-cloud-storage >=2.21.0,<2.22.0a0 - libre2-11 >=2023.6.2,<2024.0a0 + - libstdcxx-ng >=12 - libutf8proc >=2.8.0,<3.0a0 - libzlib >=1.2.13,<1.3.0a0 - lz4-c >=1.9.3,<1.10.0a0 @@ -5718,60 +8465,61 @@ packages: - snappy >=1.1.10,<2.0a0 - zstd >=1.5.5,<1.6.0a0 constrains: - - apache-arrow-proc =*=cpu - arrow-cpp <0.0a0 + - apache-arrow-proc =*=cpu - parquet-cpp <0.0a0 license: Apache-2.0 license_family: APACHE - size: 5316906 - timestamp: 1708691094438 + size: 8080771 + timestamp: 1708689749260 - kind: conda name: libarrow version: 14.0.2 - build: h4ce3932_3_cpu - build_number: 3 + build: h5233fb5_13_cpu + build_number: 13 subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/libarrow-14.0.2-h4ce3932_3_cpu.conda - sha256: bfc40fc098db7715245c0aa5809ae2b8489a44e2619b63c1f75a2f9fedbc90ff - md5: 65d8be032e978630f715376237e12d95 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libarrow-14.0.2-h5233fb5_13_cpu.conda + sha256: b2fdb38eac0220e2588548c13e1b599e567c147450e19011cb661786085c64f0 + md5: 5964f068ac691eb417ecc6173e3ec288 depends: - - aws-crt-cpp >=0.26.0,<0.26.1.0a0 - - aws-sdk-cpp >=1.11.210,<1.11.211.0a0 + - aws-crt-cpp >=0.26.3,<0.26.4.0a0 + - aws-sdk-cpp >=1.11.267,<1.11.268.0a0 - bzip2 >=1.0.8,<2.0a0 - - glog >=0.6.0,<0.7.0a0 + - glog >=0.7.0,<0.8.0a0 - libabseil * cxx17* - - libabseil >=20230802.1,<20230803.0a0 + - libabseil >=20240116.1,<20240117.0a0 - libbrotlidec >=1.1.0,<1.2.0a0 - libbrotlienc >=1.1.0,<1.2.0a0 - libcxx >=14 - - libgoogle-cloud >=2.12.0,<2.13.0a0 - - libre2-11 >=2023.6.2,<2024.0a0 + - libgoogle-cloud >=2.22.0,<2.23.0a0 + - libgoogle-cloud-storage >=2.22.0,<2.23.0a0 + - libre2-11 >=2023.9.1,<2024.0a0 - libutf8proc >=2.8.0,<3.0a0 - libzlib >=1.2.13,<1.3.0a0 - lz4-c >=1.9.3,<1.10.0a0 - - orc >=1.9.2,<1.9.3.0a0 + - orc >=2.0.0,<2.0.1.0a0 - re2 - snappy >=1.1.10,<2.0a0 - zstd >=1.5.5,<1.6.0a0 constrains: - - arrow-cpp <0.0a0 - parquet-cpp <0.0a0 - apache-arrow-proc =*=cpu + - arrow-cpp <0.0a0 license: Apache-2.0 license_family: APACHE - size: 14649507 - timestamp: 1706610614109 + size: 5325718 + timestamp: 1710345870461 - kind: conda name: libarrow version: 14.0.2 - build: h5001e6d_10_cpu - build_number: 10 + build: h6bfc85a_13_cpu + build_number: 13 subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/libarrow-14.0.2-h5001e6d_10_cpu.conda - sha256: 2e6340ba6cf72a4e38e8cfe1fd58bede4ffeb48955430b7bab0c69583233c81c - md5: ccba2f34c1345ad610734bd20f2aade7 + url: https://conda.anaconda.org/conda-forge/linux-64/libarrow-14.0.2-h6bfc85a_13_cpu.conda + sha256: f62f6a0a50b94f55c4ee90288b599c17980f1c0b7d18ae9533c42fc18437fc8f + md5: 0b97d14e02c9a6c3a259f9cd88335c9f depends: - - aws-crt-cpp >=0.26.2,<0.26.3.0a0 + - aws-crt-cpp >=0.26.3,<0.26.4.0a0 - aws-sdk-cpp >=1.11.267,<1.11.268.0a0 - bzip2 >=1.0.8,<2.0a0 - glog >=0.7.0,<0.8.0a0 @@ -5780,25 +8528,25 @@ packages: - libbrotlidec >=1.1.0,<1.2.0a0 - libbrotlienc >=1.1.0,<1.2.0a0 - libgcc-ng >=12 - - libgoogle-cloud >=2.21.0,<2.22.0a0 - - libgoogle-cloud-storage >=2.21.0,<2.22.0a0 - - libre2-11 >=2023.6.2,<2024.0a0 + - libgoogle-cloud >=2.22.0,<2.23.0a0 + - libgoogle-cloud-storage >=2.22.0,<2.23.0a0 + - libre2-11 >=2023.9.1,<2024.0a0 - libstdcxx-ng >=12 - libutf8proc >=2.8.0,<3.0a0 - libzlib >=1.2.13,<1.3.0a0 - lz4-c >=1.9.3,<1.10.0a0 - - orc >=1.9.2,<1.9.3.0a0 + - orc >=2.0.0,<2.0.1.0a0 - re2 - snappy >=1.1.10,<2.0a0 - zstd >=1.5.5,<1.6.0a0 constrains: - - arrow-cpp <0.0a0 - apache-arrow-proc =*=cpu - parquet-cpp <0.0a0 + - arrow-cpp <0.0a0 license: Apache-2.0 license_family: APACHE - size: 8080771 - timestamp: 1708689749260 + size: 8070162 + timestamp: 1710345363045 - kind: conda name: libarrow version: 14.0.2 @@ -5915,6 +8663,44 @@ packages: license_family: APACHE size: 5696868 timestamp: 1708690271784 +- kind: conda + name: libarrow + version: 14.0.2 + build: he79e29d_13_cpu + build_number: 13 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/libarrow-14.0.2-he79e29d_13_cpu.conda + sha256: 613a144ad341462f08e7be43a028441501c810dc59023cbe12e3e56e27ad1c92 + md5: 02fa4f5f3f8287b5914f8ee7cff7487b + depends: + - __osx >=10.13 + - aws-crt-cpp >=0.26.3,<0.26.4.0a0 + - aws-sdk-cpp >=1.11.267,<1.11.268.0a0 + - bzip2 >=1.0.8,<2.0a0 + - glog >=0.7.0,<0.8.0a0 + - libabseil * cxx17* + - libabseil >=20240116.1,<20240117.0a0 + - libbrotlidec >=1.1.0,<1.2.0a0 + - libbrotlienc >=1.1.0,<1.2.0a0 + - libcxx >=14 + - libgoogle-cloud >=2.22.0,<2.23.0a0 + - libgoogle-cloud-storage >=2.22.0,<2.23.0a0 + - libre2-11 >=2023.9.1,<2024.0a0 + - libutf8proc >=2.8.0,<3.0a0 + - libzlib >=1.2.13,<1.3.0a0 + - lz4-c >=1.9.3,<1.10.0a0 + - orc >=2.0.0,<2.0.1.0a0 + - re2 + - snappy >=1.1.10,<2.0a0 + - zstd >=1.5.5,<1.6.0a0 + constrains: + - arrow-cpp <0.0a0 + - apache-arrow-proc =*=cpu + - parquet-cpp <0.0a0 + license: Apache-2.0 + license_family: APACHE + size: 5718166 + timestamp: 1710346534084 - kind: conda name: libarrow-acero version: 14.0.2 @@ -5931,6 +8717,22 @@ packages: license_family: APACHE size: 512509 timestamp: 1708690347206 +- kind: conda + name: libarrow-acero + version: 14.0.2 + build: h000cb23_13_cpu + build_number: 13 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/libarrow-acero-14.0.2-h000cb23_13_cpu.conda + sha256: bd071a96a8b4da5cf7fe88d586c5ecc77cff17a80dc5bb46873c73d29c70f788 + md5: f8a9bb4d1aef7853c734c829456efcff + depends: + - libarrow 14.0.2 he79e29d_13_cpu + - libcxx >=14 + license: Apache-2.0 + license_family: APACHE + size: 512740 + timestamp: 1710346674065 - kind: conda name: libarrow-acero version: 14.0.2 @@ -5963,6 +8765,22 @@ packages: license_family: APACHE size: 494852 timestamp: 1708691198827 +- kind: conda + name: libarrow-acero + version: 14.0.2 + build: h13dd4ca_13_cpu + build_number: 13 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libarrow-acero-14.0.2-h13dd4ca_13_cpu.conda + sha256: c43bf0f7c5fda78df3830656ad600b061fe3a3d1a2596f95e1d152fa9d36c936 + md5: c9f53116aac6f41597e004e42f479591 + depends: + - libarrow 14.0.2 h5233fb5_13_cpu + - libcxx >=14 + license: Apache-2.0 + license_family: APACHE + size: 495434 + timestamp: 1710345986422 - kind: conda name: libarrow-acero version: 14.0.2 @@ -5979,6 +8797,23 @@ packages: license_family: APACHE size: 495117 timestamp: 1706610742772 +- kind: conda + name: libarrow-acero + version: 14.0.2 + build: h2f0025b_12_cpu + build_number: 12 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libarrow-acero-14.0.2-h2f0025b_12_cpu.conda + sha256: d70bc3ef9fcf1fba63cf0b127512569ff22202306391d93c30f3d5ec4f557996 + md5: 6cf8a6e338e394fe0dd30e59988f8981 + depends: + - libarrow 14.0.2 h25df049_12_cpu + - libgcc-ng >=12 + - libstdcxx-ng >=12 + license: Apache-2.0 + license_family: APACHE + size: 542198 + timestamp: 1710292954892 - kind: conda name: libarrow-acero version: 14.0.2 @@ -5996,6 +8831,23 @@ packages: license_family: APACHE size: 577227 timestamp: 1708689800054 +- kind: conda + name: libarrow-acero + version: 14.0.2 + build: h59595ed_13_cpu + build_number: 13 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libarrow-acero-14.0.2-h59595ed_13_cpu.conda + sha256: 16cadd969ffd3d68a0821c7d9af4fb7772ad2f54187852b09026677a1c203410 + md5: 28e25c6db46fc5542c858cf701909d84 + depends: + - libarrow 14.0.2 h6bfc85a_13_cpu + - libgcc-ng >=12 + - libstdcxx-ng >=12 + license: Apache-2.0 + license_family: APACHE + size: 577795 + timestamp: 1710345426232 - kind: conda name: libarrow-acero version: 14.0.2 @@ -6031,6 +8883,24 @@ packages: license_family: APACHE size: 430548 timestamp: 1708690137226 +- kind: conda + name: libarrow-acero + version: 14.0.2 + build: h63175ca_13_cpu + build_number: 13 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/libarrow-acero-14.0.2-h63175ca_13_cpu.conda + sha256: 8ee3b272ebdadbf4e41f4ea4d1b36db62555870378f8be941f83220bf3cd3b2e + md5: 389ccdec73910798474ab1517d5a5747 + depends: + - libarrow 14.0.2 h2a83f13_13_cpu + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + license: Apache-2.0 + license_family: APACHE + size: 431459 + timestamp: 1710346036673 - kind: conda name: libarrow-dataset version: 14.0.2 @@ -6049,6 +8919,24 @@ packages: license_family: APACHE size: 511903 timestamp: 1708690574393 +- kind: conda + name: libarrow-dataset + version: 14.0.2 + build: h000cb23_13_cpu + build_number: 13 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/libarrow-dataset-14.0.2-h000cb23_13_cpu.conda + sha256: 0f013a4a208723516f0049585994dc2363c120cf11c18849c4b3b01bc4986f40 + md5: d6db4c70e3a1fc9ac0a48c9165e2e820 + depends: + - libarrow 14.0.2 he79e29d_13_cpu + - libarrow-acero 14.0.2 h000cb23_13_cpu + - libcxx >=14 + - libparquet 14.0.2 h381d950_13_cpu + license: Apache-2.0 + license_family: APACHE + size: 512999 + timestamp: 1710347067673 - kind: conda name: libarrow-dataset version: 14.0.2 @@ -6085,6 +8973,24 @@ packages: license_family: APACHE size: 526964 timestamp: 1708691531170 +- kind: conda + name: libarrow-dataset + version: 14.0.2 + build: h13dd4ca_13_cpu + build_number: 13 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libarrow-dataset-14.0.2-h13dd4ca_13_cpu.conda + sha256: a0833d1bc74cb554ab5da8b01f65c77525190b295da1d77071adc778ebfb1072 + md5: 90c1416a2538df8b3343716cfec2c4f8 + depends: + - libarrow 14.0.2 h5233fb5_13_cpu + - libarrow-acero 14.0.2 h13dd4ca_13_cpu + - libcxx >=14 + - libparquet 14.0.2 hf6ce1d5_13_cpu + license: Apache-2.0 + license_family: APACHE + size: 527932 + timestamp: 1710346391216 - kind: conda name: libarrow-dataset version: 14.0.2 @@ -6103,6 +9009,25 @@ packages: license_family: APACHE size: 526945 timestamp: 1706611070744 +- kind: conda + name: libarrow-dataset + version: 14.0.2 + build: h2f0025b_12_cpu + build_number: 12 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libarrow-dataset-14.0.2-h2f0025b_12_cpu.conda + sha256: 65a33363cb7e4936bc1c75f2f115ea4dd32498c283baa5c1ea1a321cfa17d10b + md5: d46471dbf3c19b687d324a297a72debd + depends: + - libarrow 14.0.2 h25df049_12_cpu + - libarrow-acero 14.0.2 h2f0025b_12_cpu + - libgcc-ng >=12 + - libparquet 14.0.2 hb18b541_12_cpu + - libstdcxx-ng >=12 + license: Apache-2.0 + license_family: APACHE + size: 551283 + timestamp: 1710293072163 - kind: conda name: libarrow-dataset version: 14.0.2 @@ -6122,6 +9047,25 @@ packages: license_family: APACHE size: 580942 timestamp: 1708689918 +- kind: conda + name: libarrow-dataset + version: 14.0.2 + build: h59595ed_13_cpu + build_number: 13 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libarrow-dataset-14.0.2-h59595ed_13_cpu.conda + sha256: eae222df321ea3408a3b28ea85cb40504e86975cd6f258d37912f6ce6d0b9ad1 + md5: 5266653f8b74e0ba57401be532055410 + depends: + - libarrow 14.0.2 h6bfc85a_13_cpu + - libarrow-acero 14.0.2 h59595ed_13_cpu + - libgcc-ng >=12 + - libparquet 14.0.2 h352af49_13_cpu + - libstdcxx-ng >=12 + license: Apache-2.0 + license_family: APACHE + size: 581399 + timestamp: 1710345583152 - kind: conda name: libarrow-dataset version: 14.0.2 @@ -6161,6 +9105,48 @@ packages: license_family: APACHE size: 429115 timestamp: 1708690422907 +- kind: conda + name: libarrow-dataset + version: 14.0.2 + build: h63175ca_13_cpu + build_number: 13 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/libarrow-dataset-14.0.2-h63175ca_13_cpu.conda + sha256: 50ba7bff4899da18c8791071cbc733496eccc65d6948b2faac6a5f2e0a98e9b7 + md5: daeb4b650d02b601783ea6799f9afd6c + depends: + - libarrow 14.0.2 h2a83f13_13_cpu + - libarrow-acero 14.0.2 h63175ca_13_cpu + - libparquet 14.0.2 h7ec3a38_13_cpu + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + license: Apache-2.0 + license_family: APACHE + size: 429023 + timestamp: 1710346405791 +- kind: conda + name: libarrow-flight + version: 14.0.2 + build: h02312f3_13_cpu + build_number: 13 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/libarrow-flight-14.0.2-h02312f3_13_cpu.conda + sha256: 9a64a061f5d42e7c021f9e65066957cd1650f6a97cf3897363111b52f464021f + md5: f51f43c16adcee3ed9a1e151c1aeb92e + depends: + - libabseil * cxx17* + - libabseil >=20240116.1,<20240117.0a0 + - libarrow 14.0.2 h2a83f13_13_cpu + - libgrpc >=1.62.1,<1.63.0a0 + - libprotobuf >=4.25.3,<4.25.4.0a0 + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + license: Apache-2.0 + license_family: APACHE + size: 286961 + timestamp: 1710346136713 - kind: conda name: libarrow-flight version: 14.0.2 @@ -6183,6 +9169,49 @@ packages: license_family: APACHE size: 501085 timestamp: 1706609649937 +- kind: conda + name: libarrow-flight + version: 14.0.2 + build: h2382776_13_cpu + build_number: 13 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/libarrow-flight-14.0.2-h2382776_13_cpu.conda + sha256: bbd32e1906eb567d95d41b72d64f993d88761dc2b2760fe508854baab7802966 + md5: 3bf6df6c793a2ea01f3e0612c741b372 + depends: + - __osx >=10.13 + - libabseil * cxx17* + - libabseil >=20240116.1,<20240117.0a0 + - libarrow 14.0.2 he79e29d_13_cpu + - libcxx >=14 + - libgrpc >=1.62.1,<1.63.0a0 + - libprotobuf >=4.25.3,<4.25.4.0a0 + license: Apache-2.0 + license_family: APACHE + size: 322715 + timestamp: 1710346774669 +- kind: conda + name: libarrow-flight + version: 14.0.2 + build: h2f4a9e5_12_cpu + build_number: 12 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libarrow-flight-14.0.2-h2f4a9e5_12_cpu.conda + sha256: bbea5d23c616b6b36a6cbf04a617657553628d08a0844a2279ebdce1c749a69d + md5: e98e22bae314c018497b409170001620 + depends: + - libabseil * cxx17* + - libabseil >=20240116.1,<20240117.0a0 + - libarrow 14.0.2 h25df049_12_cpu + - libgcc-ng >=12 + - libgrpc >=1.62.1,<1.63.0a0 + - libprotobuf >=4.25.3,<4.25.4.0a0 + - libstdcxx-ng >=12 + - ucx >=1.15.0,<1.16.0a0 + license: Apache-2.0 + license_family: APACHE + size: 474817 + timestamp: 1710292993611 - kind: conda name: libarrow-flight version: 14.0.2 @@ -6204,6 +9233,26 @@ packages: license_family: APACHE size: 321632 timestamp: 1708690401993 +- kind: conda + name: libarrow-flight + version: 14.0.2 + build: h95ca633_13_cpu + build_number: 13 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libarrow-flight-14.0.2-h95ca633_13_cpu.conda + sha256: c44b819b5efb283c01aa43c805de17266cb407256c4e86427bb64b6cfd392e42 + md5: 392cd88b061dbc1c4366871e65a68ed9 + depends: + - libabseil * cxx17* + - libabseil >=20240116.1,<20240117.0a0 + - libarrow 14.0.2 h5233fb5_13_cpu + - libcxx >=14 + - libgrpc >=1.62.1,<1.63.0a0 + - libprotobuf >=4.25.3,<4.25.4.0a0 + license: Apache-2.0 + license_family: APACHE + size: 333172 + timestamp: 1710346111062 - kind: conda name: libarrow-flight version: 14.0.2 @@ -6245,6 +9294,28 @@ packages: license_family: APACHE size: 332020 timestamp: 1706610826254 +- kind: conda + name: libarrow-flight + version: 14.0.2 + build: hc6145d9_13_cpu + build_number: 13 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libarrow-flight-14.0.2-hc6145d9_13_cpu.conda + sha256: 5bb091f548f124d9aa0f1a2bb070be2f3713dabd7995e7b82c61427cf7b1f9a5 + md5: be1e8c18e141e9fb3358f1225c583d0d + depends: + - libabseil * cxx17* + - libabseil >=20240116.1,<20240117.0a0 + - libarrow 14.0.2 h6bfc85a_13_cpu + - libgcc-ng >=12 + - libgrpc >=1.62.1,<1.63.0a0 + - libprotobuf >=4.25.3,<4.25.4.0a0 + - libstdcxx-ng >=12 + - ucx >=1.15.0,<1.16.0a0 + license: Apache-2.0 + license_family: APACHE + size: 503693 + timestamp: 1710345464269 - kind: conda name: libarrow-flight version: 14.0.2 @@ -6385,6 +9456,26 @@ packages: license_family: APACHE size: 154009 timestamp: 1708690633124 +- kind: conda + name: libarrow-flight-sql + version: 14.0.2 + build: h55b4db4_13_cpu + build_number: 13 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/libarrow-flight-sql-14.0.2-h55b4db4_13_cpu.conda + sha256: 4ba5130101c323580e9f8ae86ab9a7389aa1a27a62c1d793e89cc99d24ff84c2 + md5: 8c27d39e7147c7ee420bcbdf12b83200 + depends: + - libarrow 14.0.2 h2a83f13_13_cpu + - libarrow-flight 14.0.2 h02312f3_13_cpu + - libprotobuf >=4.25.3,<4.25.4.0a0 + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + license: Apache-2.0 + license_family: APACHE + size: 235314 + timestamp: 1710346485995 - kind: conda name: libarrow-flight-sql version: 14.0.2 @@ -6422,6 +9513,44 @@ packages: license_family: APACHE size: 195809 timestamp: 1706609745191 +- kind: conda + name: libarrow-flight-sql + version: 14.0.2 + build: h757c851_13_cpu + build_number: 13 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libarrow-flight-sql-14.0.2-h757c851_13_cpu.conda + sha256: 669a52f7240ab55fa51b89c805acb91c89975db6081347aff14ea8363c9f2b34 + md5: 690b85e4586d37c997a090d42e20295a + depends: + - libarrow 14.0.2 h6bfc85a_13_cpu + - libarrow-flight 14.0.2 hc6145d9_13_cpu + - libgcc-ng >=12 + - libprotobuf >=4.25.3,<4.25.4.0a0 + - libstdcxx-ng >=12 + license: Apache-2.0 + license_family: APACHE + size: 195497 + timestamp: 1710345622444 +- kind: conda + name: libarrow-flight-sql + version: 14.0.2 + build: h7e3fe20_13_cpu + build_number: 13 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/libarrow-flight-sql-14.0.2-h7e3fe20_13_cpu.conda + sha256: 90bd62adf53cd99da17365ab73f53b90df0af79b6861a9e21051b1a0b811174e + md5: 4c5fea48489a40db78b2fcbfe262900f + depends: + - __osx >=10.13 + - libarrow 14.0.2 he79e29d_13_cpu + - libarrow-flight 14.0.2 h2382776_13_cpu + - libcxx >=14 + - libprotobuf >=4.25.3,<4.25.4.0a0 + license: Apache-2.0 + license_family: APACHE + size: 155420 + timestamp: 1710347160360 - kind: conda name: libarrow-flight-sql version: 14.0.2 @@ -6441,6 +9570,43 @@ packages: license_family: APACHE size: 153818 timestamp: 1706611190988 +- kind: conda + name: libarrow-flight-sql + version: 14.0.2 + build: hc81a7a7_12_cpu + build_number: 12 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libarrow-flight-sql-14.0.2-hc81a7a7_12_cpu.conda + sha256: 0145909d1aee5df3c1b25b483f4f62f7e9081c568e74069b4e18a67ba69ade9e + md5: c2cbaeac8289e227203bc770aa987086 + depends: + - libarrow 14.0.2 h25df049_12_cpu + - libarrow-flight 14.0.2 h2f4a9e5_12_cpu + - libgcc-ng >=12 + - libprotobuf >=4.25.3,<4.25.4.0a0 + - libstdcxx-ng >=12 + license: Apache-2.0 + license_family: APACHE + size: 182885 + timestamp: 1710293099163 +- kind: conda + name: libarrow-flight-sql + version: 14.0.2 + build: hdc5392b_13_cpu + build_number: 13 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libarrow-flight-sql-14.0.2-hdc5392b_13_cpu.conda + sha256: a74ba3c1ed45cc6b89b66b5dd465d6a1210bc75481d79b80028034f404a7968a + md5: d98a1133d4bba9a05325954e662f5295 + depends: + - libarrow 14.0.2 h5233fb5_13_cpu + - libarrow-flight 14.0.2 h95ca633_13_cpu + - libcxx >=14 + - libprotobuf >=4.25.3,<4.25.4.0a0 + license: Apache-2.0 + license_family: APACHE + size: 163324 + timestamp: 1710346482468 - kind: conda name: libarrow-gandiva version: 14.0.2 @@ -6462,6 +9628,30 @@ packages: license_family: APACHE size: 698984 timestamp: 1706611013722 +- kind: conda + name: libarrow-gandiva + version: 14.0.2 + build: h3a2b1eb_12_cpu + build_number: 12 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libarrow-gandiva-14.0.2-h3a2b1eb_12_cpu.conda + sha256: cc4399d0e141dbc024d7e523bb96526548dbfc3b6ad418265012fe164a3da88a + md5: edfc287a18bae624cccb0e3078137d7d + depends: + - libabseil * cxx17* + - libabseil >=20240116.1,<20240117.0a0 + - libarrow 14.0.2 h25df049_12_cpu + - libgcc-ng >=12 + - libllvm15 >=15.0.7,<15.1.0a0 + - libre2-11 >=2023.9.1,<2024.0a0 + - libstdcxx-ng >=12 + - libutf8proc >=2.8.0,<3.0a0 + - openssl >=3.2.1,<4.0a0 + - re2 + license: Apache-2.0 + license_family: APACHE + size: 855698 + timestamp: 1710293021684 - kind: conda name: libarrow-gandiva version: 14.0.2 @@ -6534,6 +9724,30 @@ packages: license_family: APACHE size: 10170570 timestamp: 1708690279861 +- kind: conda + name: libarrow-gandiva + version: 14.0.2 + build: ha5acb15_13_cpu + build_number: 13 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/libarrow-gandiva-14.0.2-ha5acb15_13_cpu.conda + sha256: 6d06c71df682907daf6a37deac2fac394388b8e3947b5171ba6fa280e45b1ebc + md5: e864ce81130c6fbae77fd7ffb768b41d + depends: + - __osx >=10.13 + - libabseil * cxx17* + - libabseil >=20240116.1,<20240117.0a0 + - libarrow 14.0.2 he79e29d_13_cpu + - libcxx >=14 + - libllvm15 >=15.0.7,<15.1.0a0 + - libre2-11 >=2023.9.1,<2024.0a0 + - libutf8proc >=2.8.0,<3.0a0 + - openssl >=3.2.1,<4.0a0 + - re2 + license: Apache-2.0 + license_family: APACHE + size: 700321 + timestamp: 1710346874742 - kind: conda name: libarrow-gandiva version: 14.0.2 @@ -6556,6 +9770,55 @@ packages: license_family: APACHE size: 895232 timestamp: 1706609674431 +- kind: conda + name: libarrow-gandiva + version: 14.0.2 + build: hb016d2e_13_cpu + build_number: 13 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libarrow-gandiva-14.0.2-hb016d2e_13_cpu.conda + sha256: a82694957ba8209fa9eb7f5e26c4ad71a936fe3c963c133368c60da078267566 + md5: 677a678f1794a6a6c4efff894a5a92cb + depends: + - libabseil * cxx17* + - libabseil >=20240116.1,<20240117.0a0 + - libarrow 14.0.2 h6bfc85a_13_cpu + - libgcc-ng >=12 + - libllvm15 >=15.0.7,<15.1.0a0 + - libre2-11 >=2023.9.1,<2024.0a0 + - libstdcxx-ng >=12 + - libutf8proc >=2.8.0,<3.0a0 + - openssl >=3.2.1,<4.0a0 + - re2 + license: Apache-2.0 + license_family: APACHE + size: 894432 + timestamp: 1710345503892 +- kind: conda + name: libarrow-gandiva + version: 14.0.2 + build: hcb01e45_13_cpu + build_number: 13 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/libarrow-gandiva-14.0.2-hcb01e45_13_cpu.conda + sha256: 0d5764893b016216fada279215d7ac77d7791f1e724cb3d977538720e1ab3158 + md5: b01782c5a1e218bc257bb0a15fabd8b5 + depends: + - libabseil * cxx17* + - libabseil >=20240116.1,<20240117.0a0 + - libarrow 14.0.2 h2a83f13_13_cpu + - libre2-11 >=2023.9.1,<2024.0a0 + - libutf8proc >=2.8.0,<3.0a0 + - libzlib >=1.2.13,<1.3.0a0 + - openssl >=3.2.1,<4.0a0 + - re2 + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + license: Apache-2.0 + license_family: APACHE + size: 10177269 + timestamp: 1710346223297 - kind: conda name: libarrow-gandiva version: 14.0.2 @@ -6601,6 +9864,29 @@ packages: license_family: APACHE size: 688245 timestamp: 1706610908126 +- kind: conda + name: libarrow-gandiva + version: 14.0.2 + build: hfef958d_13_cpu + build_number: 13 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libarrow-gandiva-14.0.2-hfef958d_13_cpu.conda + sha256: 692521ca74dc6ce6de168a5ae1d1c11136b0541af5e2aab388deeb3c35e61a59 + md5: 28e850b27dd93367bb783d0d16d55afc + depends: + - libabseil * cxx17* + - libabseil >=20240116.1,<20240117.0a0 + - libarrow 14.0.2 h5233fb5_13_cpu + - libcxx >=14 + - libllvm15 >=15.0.7,<15.1.0a0 + - libre2-11 >=2023.9.1,<2024.0a0 + - libutf8proc >=2.8.0,<3.0a0 + - openssl >=3.2.1,<4.0a0 + - re2 + license: Apache-2.0 + license_family: APACHE + size: 688483 + timestamp: 1710346205367 - kind: conda name: libarrow-substrait version: 14.0.2 @@ -6680,6 +9966,46 @@ packages: license_family: APACHE size: 509163 timestamp: 1706609767216 +- kind: conda + name: libarrow-substrait + version: 14.0.2 + build: h757c851_13_cpu + build_number: 13 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libarrow-substrait-14.0.2-h757c851_13_cpu.conda + sha256: e4e15042a93bc3a6e4e0717a2802c6859a5a9cafdcc8f49957f0948a249b2816 + md5: 15c79e6f7b9686ebff4d687a33a52a76 + depends: + - libarrow 14.0.2 h6bfc85a_13_cpu + - libarrow-acero 14.0.2 h59595ed_13_cpu + - libarrow-dataset 14.0.2 h59595ed_13_cpu + - libgcc-ng >=12 + - libprotobuf >=4.25.3,<4.25.4.0a0 + - libstdcxx-ng >=12 + license: Apache-2.0 + license_family: APACHE + size: 518209 + timestamp: 1710345660675 +- kind: conda + name: libarrow-substrait + version: 14.0.2 + build: h7e3fe20_13_cpu + build_number: 13 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/libarrow-substrait-14.0.2-h7e3fe20_13_cpu.conda + sha256: 4e27d6f673e8ef27d62d5c5a8bd00a8ae2b93d65c0b90373f2a5917479d6e68d + md5: c50111280b8d2f2c176d949e5c7ddfd1 + depends: + - __osx >=10.13 + - libarrow 14.0.2 he79e29d_13_cpu + - libarrow-acero 14.0.2 h000cb23_13_cpu + - libarrow-dataset 14.0.2 h000cb23_13_cpu + - libcxx >=14 + - libprotobuf >=4.25.3,<4.25.4.0a0 + license: Apache-2.0 + license_family: APACHE + size: 454371 + timestamp: 1710347255673 - kind: conda name: libarrow-substrait version: 14.0.2 @@ -6699,6 +10025,29 @@ packages: license_family: APACHE size: 472877 timestamp: 1706611234135 +- kind: conda + name: libarrow-substrait + version: 14.0.2 + build: h89268de_13_cpu + build_number: 13 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/libarrow-substrait-14.0.2-h89268de_13_cpu.conda + sha256: 816be5f4ac5ed5b35fcc3966b39314acbf9aef31e50162656b53d103560f002c + md5: c3599d0881c8f26df0900993f40f7c10 + depends: + - libabseil * cxx17* + - libabseil >=20240116.1,<20240117.0a0 + - libarrow 14.0.2 h2a83f13_13_cpu + - libarrow-acero 14.0.2 h63175ca_13_cpu + - libarrow-dataset 14.0.2 h63175ca_13_cpu + - libprotobuf >=4.25.3,<4.25.4.0a0 + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + license: Apache-2.0 + license_family: APACHE + size: 361120 + timestamp: 1710346569221 - kind: conda name: libarrow-substrait version: 14.0.2 @@ -6719,6 +10068,45 @@ packages: license_family: APACHE size: 452971 timestamp: 1706611246525 +- kind: conda + name: libarrow-substrait + version: 14.0.2 + build: hd45466a_12_cpu + build_number: 12 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libarrow-substrait-14.0.2-hd45466a_12_cpu.conda + sha256: 0ba6e17e61be79349ab6fe1de1c3984e8b88b3553056dffc251f49f3211a4762 + md5: c891077d81b44b532462b3f565e0de86 + depends: + - libarrow 14.0.2 h25df049_12_cpu + - libarrow-acero 14.0.2 h2f0025b_12_cpu + - libarrow-dataset 14.0.2 h2f0025b_12_cpu + - libgcc-ng >=12 + - libprotobuf >=4.25.3,<4.25.4.0a0 + - libstdcxx-ng >=12 + license: Apache-2.0 + license_family: APACHE + size: 503549 + timestamp: 1710293136119 +- kind: conda + name: libarrow-substrait + version: 14.0.2 + build: hef52601_13_cpu + build_number: 13 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libarrow-substrait-14.0.2-hef52601_13_cpu.conda + sha256: 3a9302c70f68e7b1fd433b5b0176b8317fb85ea840155c520ae012c619c5785c + md5: d5ac1ee4616a6caa87ba3f84b47e3de1 + depends: + - libarrow 14.0.2 h5233fb5_13_cpu + - libarrow-acero 14.0.2 h13dd4ca_13_cpu + - libarrow-dataset 14.0.2 h13dd4ca_13_cpu + - libcxx >=14 + - libprotobuf >=4.25.3,<4.25.4.0a0 + license: Apache-2.0 + license_family: APACHE + size: 473073 + timestamp: 1710346607250 - kind: conda name: libarrow-substrait version: 14.0.2 @@ -6851,6 +10239,27 @@ packages: license_family: BSD size: 14691 timestamp: 1705979549006 +- kind: conda + name: libblas + version: 3.9.0 + build: 21_linuxaarch64_openblas + build_number: 21 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libblas-3.9.0-21_linuxaarch64_openblas.conda + sha256: 5d1dcfc2ef54ce415ffabc8e2d94d10f8a24e10096193da24b0b62dbfe35bf32 + md5: 7358230781e5d6e76e6adacf5201bcdf + depends: + - libopenblas >=0.3.26,<0.3.27.0a0 + - libopenblas >=0.3.26,<1.0a0 + constrains: + - liblapacke 3.9.0 21_linuxaarch64_openblas + - liblapack 3.9.0 21_linuxaarch64_openblas + - blas * openblas + - libcblas 3.9.0 21_linuxaarch64_openblas + license: BSD-3-Clause + license_family: BSD + size: 14650 + timestamp: 1705979384501 - kind: conda name: libblas version: 3.9.0 @@ -6926,6 +10335,21 @@ packages: license_family: MIT size: 67476 timestamp: 1695990207321 +- kind: conda + name: libbrotlicommon + version: 1.1.0 + build: h31becfc_1 + build_number: 1 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libbrotlicommon-1.1.0-h31becfc_1.conda + sha256: 1c3d4ea61e862eb5f1968915f6f5917ea61db9921aec30b14785775c87234060 + md5: 1b219fd801eddb7a94df5bd001053ad9 + depends: + - libgcc-ng >=12 + license: MIT + license_family: MIT + size: 69237 + timestamp: 1695990107496 - kind: conda name: libbrotlicommon version: 1.1.0 @@ -6986,6 +10410,22 @@ packages: license_family: MIT size: 30327 timestamp: 1695990232422 +- kind: conda + name: libbrotlidec + version: 1.1.0 + build: h31becfc_1 + build_number: 1 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libbrotlidec-1.1.0-h31becfc_1.conda + sha256: 1d2558efbb727f9065dd94d5f906aa68252153f80e571456d3695fa102e8a352 + md5: 8db7cff89510bec0b863a0a8ee6a7bce + depends: + - libbrotlicommon 1.1.0 h31becfc_1 + - libgcc-ng >=12 + license: MIT + license_family: MIT + size: 31926 + timestamp: 1695990123189 - kind: conda name: libbrotlidec version: 1.1.0 @@ -7050,6 +10490,22 @@ packages: license_family: MIT size: 299092 timestamp: 1695990259225 +- kind: conda + name: libbrotlienc + version: 1.1.0 + build: h31becfc_1 + build_number: 1 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libbrotlienc-1.1.0-h31becfc_1.conda + sha256: 271fd8ef9181ad19246bf8b4273c99b9608c6eedecb6b11cd925211b8f1c6217 + md5: ad3d3a826b5848d99936e4466ebbaa26 + depends: + - libbrotlicommon 1.1.0 h31becfc_1 + - libgcc-ng >=12 + license: MIT + license_family: MIT + size: 290542 + timestamp: 1695990138784 - kind: conda name: libbrotlienc version: 1.1.0 @@ -7202,6 +10658,25 @@ packages: license_family: BSD size: 14614 timestamp: 1705979564122 +- kind: conda + name: libcblas + version: 3.9.0 + build: 21_linuxaarch64_openblas + build_number: 21 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libcblas-3.9.0-21_linuxaarch64_openblas.conda + sha256: 86224669232944141f46b41d0ba18192c7f5af9cc3133fa89694f42701fe89fd + md5: 7eb9aa7a90f067f8dbfede586cdc55cd + depends: + - libblas 3.9.0 21_linuxaarch64_openblas + constrains: + - liblapacke 3.9.0 21_linuxaarch64_openblas + - liblapack 3.9.0 21_linuxaarch64_openblas + - blas * openblas + license: BSD-3-Clause + license_family: BSD + size: 14575 + timestamp: 1705979392590 - kind: conda name: libcblas version: 3.9.0 @@ -7259,6 +10734,23 @@ packages: license_family: BSD size: 5017024 timestamp: 1705980469944 +- kind: conda + name: libclang-cpp16 + version: 16.0.6 + build: default_h127d8a8_5 + build_number: 5 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libclang-cpp16-16.0.6-default_h127d8a8_5.conda + sha256: 8d034d92a7f7a9841796297bc18c2d8d8133583a6f3b661bfb1ca88ba01a076b + md5: 9fed40c47995a15eca939c4562d879bf + depends: + - libgcc-ng >=12 + - libllvm16 >=16.0.6,<16.1.0a0 + - libstdcxx-ng >=12 + license: Apache-2.0 WITH LLVM-exception + license_family: Apache + size: 17942793 + timestamp: 1709764754399 - kind: conda name: libclang-cpp16 version: 16.0.6 @@ -7292,6 +10784,23 @@ packages: license_family: Apache size: 17942324 timestamp: 1704262063346 +- kind: conda + name: libclang-cpp16 + version: 16.0.6 + build: default_hb368394_5 + build_number: 5 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libclang-cpp16-16.0.6-default_hb368394_5.conda + sha256: fb1fd911d494f23abd889a95b9ea603de261badcd5120df2eda7f12f36d0707c + md5: 0b273d3ae3793c79728ed914c4a2aac5 + depends: + - libgcc-ng >=12 + - libllvm16 >=16.0.6,<16.1.0a0 + - libstdcxx-ng >=12 + license: Apache-2.0 WITH LLVM-exception + license_family: Apache + size: 17600643 + timestamp: 1706895662107 - kind: conda name: libclang-cpp16 version: 16.0.6 @@ -7422,6 +10931,101 @@ packages: license_family: Apache size: 7164068 timestamp: 1704280614681 +- kind: conda + name: libclang13 + version: 18.1.1 + build: default_h0edc4dd_0 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/libclang13-18.1.1-default_h0edc4dd_0.conda + sha256: 6706f35efe4f45bd50c56854e93715eb59bb948feb098aabd23923d5bbd409a7 + md5: badbda562ead0bcae661586067298002 + depends: + - libcxx >=16.0.6 + - libllvm18 >=18.1.1,<18.2.0a0 + license: Apache-2.0 WITH LLVM-exception + license_family: Apache + size: 8055181 + timestamp: 1710477023799 +- kind: conda + name: libclang13 + version: 18.1.1 + build: default_h5d6823c_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libclang13-18.1.1-default_h5d6823c_0.conda + sha256: eab9467b8e7bef6152af4ac2a167abab76f5453396f62755605cfa53eadafea7 + md5: 68ad4732fc951212bcc67e7d60de42e5 + depends: + - libgcc-ng >=12 + - libllvm18 >=18.1.1,<18.2.0a0 + - libstdcxx-ng >=12 + license: Apache-2.0 WITH LLVM-exception + license_family: Apache + size: 11069471 + timestamp: 1710472508192 +- kind: conda + name: libclang13 + version: 18.1.1 + build: default_h83d0a53_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libclang13-18.1.1-default_h83d0a53_0.conda + sha256: a3e12d97d6f3a06b1375eca3057e12c262be568755236689efb076352eb84636 + md5: 591cdf454c3db0328daf524a5b6b15d0 + depends: + - libcxx >=16.0.6 + - libllvm18 >=18.1.1,<18.2.0a0 + license: Apache-2.0 WITH LLVM-exception + license_family: Apache + size: 7513624 + timestamp: 1710475008752 +- kind: conda + name: libclang13 + version: 18.1.1 + build: default_hf64faad_0 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/libclang13-18.1.1-default_hf64faad_0.conda + sha256: 36dbad4abb730d6ba9904d60cac670c2b9d19bd11a5664db67b9c17660cef43a + md5: 2a7bf5472a4decbe0f800c84c384fb08 + depends: + - libzlib >=1.2.13,<1.3.0a0 + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + - zstd >=1.5.5,<1.6.0a0 + license: Apache-2.0 WITH LLVM-exception + license_family: Apache + size: 25314400 + timestamp: 1710479378028 +- kind: conda + name: libclang13 + version: 18.1.1 + build: default_hf9b4efe_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libclang13-18.1.1-default_hf9b4efe_0.conda + sha256: 2411bd3412f2007d3b640fb1bd71cb2ae7a6ae32186b3fbdf625a98b0cf4fd36 + md5: aa206882a3e166cb08b24c55f2092a4e + depends: + - libgcc-ng >=12 + - libllvm18 >=18.1.1,<18.2.0a0 + - libstdcxx-ng >=12 + license: Apache-2.0 WITH LLVM-exception + license_family: Apache + size: 10874336 + timestamp: 1710473662256 +- kind: conda + name: libcrc32c + version: 1.1.2 + build: h01db608_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libcrc32c-1.1.2-h01db608_0.tar.bz2 + sha256: b8b8c57a87da86b3ea24280fd6aa8efaf92f4e684b606bf2db5d3cb06ffbe2ea + md5: 268ee639c17ada0002fb04dd21816cc2 + depends: + - libgcc-ng >=9.4.0 + - libstdcxx-ng >=9.4.0 + license: BSD-3-Clause + license_family: BSD + size: 18669 + timestamp: 1633683724891 - kind: conda name: libcrc32c version: 1.1.2 @@ -7483,13 +11087,33 @@ packages: - kind: conda name: libcurl version: 8.5.0 - build: h2d989ff_0 - subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/libcurl-8.5.0-h2d989ff_0.conda - sha256: f1c04be217aaf161ce3c99a8d618871295b5dc1eae2f7ff7b32078af50303f5b - md5: f1211ed00947a84e15a964a8f459f620 + build: h2d989ff_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libcurl-8.5.0-h2d989ff_0.conda + sha256: f1c04be217aaf161ce3c99a8d618871295b5dc1eae2f7ff7b32078af50303f5b + md5: f1211ed00947a84e15a964a8f459f620 + depends: + - krb5 >=1.21.2,<1.22.0a0 + - libnghttp2 >=1.58.0,<2.0a0 + - libssh2 >=1.11.0,<2.0a0 + - libzlib >=1.2.13,<1.3.0a0 + - openssl >=3.2.0,<4.0a0 + - zstd >=1.5.5,<1.6.0a0 + license: curl + license_family: MIT + size: 350298 + timestamp: 1701860532373 +- kind: conda + name: libcurl + version: 8.5.0 + build: h4e8248e_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libcurl-8.5.0-h4e8248e_0.conda + sha256: 4f4f8b884927d0c6fad4a8f5d7afaf789fe4f6554448ac8b416231f2f3dc7490 + md5: fa0f5edc06ffc25a01eed005c6dc3d8c depends: - krb5 >=1.21.2,<1.22.0a0 + - libgcc-ng >=12 - libnghttp2 >=1.58.0,<2.0a0 - libssh2 >=1.11.0,<2.0a0 - libzlib >=1.2.13,<1.3.0a0 @@ -7497,8 +11121,8 @@ packages: - zstd >=1.5.5,<1.6.0a0 license: curl license_family: MIT - size: 350298 - timestamp: 1701860532373 + size: 399469 + timestamp: 1701860213311 - kind: conda name: libcurl version: 8.5.0 @@ -7627,6 +11251,22 @@ packages: license_family: BSD size: 123878 timestamp: 1597616541093 +- kind: conda + name: libedit + version: 3.1.20191231 + build: he28a2e2_2 + build_number: 2 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libedit-3.1.20191231-he28a2e2_2.tar.bz2 + sha256: debc31fb2f07ba2b0363f90e455873670734082822926ba4a9556431ec0bf36d + md5: 29371161d77933a54fccf1bb66b96529 + depends: + - libgcc-ng >=7.5.0 + - ncurses >=6.2,<7.0.0a0 + license: BSD-2-Clause + license_family: BSD + size: 134104 + timestamp: 1597617110769 - kind: conda name: libev version: '4.33' @@ -7640,6 +11280,21 @@ packages: license_family: BSD size: 106663 timestamp: 1702146352558 +- kind: conda + name: libev + version: '4.33' + build: h31becfc_2 + build_number: 2 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libev-4.33-h31becfc_2.conda + sha256: 973af77e297f1955dd1f69c2cbdc5ab9dfc88388a5576cd152cda178af0fd006 + md5: a9a13cb143bbaa477b1ebaefbe47a302 + depends: + - libgcc-ng >=12 + license: BSD-2-Clause + license_family: BSD + size: 115123 + timestamp: 1702146237623 - kind: conda name: libev version: '4.33' @@ -7748,6 +11403,22 @@ packages: license_family: BSD size: 410555 timestamp: 1685726568668 +- kind: conda + name: libevent + version: 2.1.12 + build: h4ba1bb4_1 + build_number: 1 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libevent-2.1.12-h4ba1bb4_1.conda + sha256: 01333cc7d6e6985dd5700b43660d90e9e58049182017fd24862088ecbe1458e4 + md5: 96ae6083cd1ac9f6bc81631ac835b317 + depends: + - libgcc-ng >=12 + - openssl >=3.1.1,<4.0a0 + license: BSD-3-Clause + license_family: BSD + size: 438992 + timestamp: 1685726046519 - kind: conda name: libevent version: 2.1.12 @@ -7841,6 +11512,80 @@ packages: license_family: MIT size: 69602 timestamp: 1680191040160 +- kind: conda + name: libexpat + version: 2.6.2 + build: h2f0025b_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libexpat-2.6.2-h2f0025b_0.conda + sha256: 07453df3232a649f39fb4d1e68cfe1c78c3457764f85225f6f3ccd1bdd9818a4 + md5: 1b9f46b804a2c3c5d7fd6a80b77c35f9 + depends: + - libgcc-ng >=12 + constrains: + - expat 2.6.2.* + license: MIT + license_family: MIT + size: 72544 + timestamp: 1710362309065 +- kind: conda + name: libexpat + version: 2.6.2 + build: h59595ed_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.6.2-h59595ed_0.conda + sha256: 331bb7c7c05025343ebd79f86ae612b9e1e74d2687b8f3179faec234f986ce19 + md5: e7ba12deb7020dd080c6c70e7b6f6a3d + depends: + - libgcc-ng >=12 + constrains: + - expat 2.6.2.* + license: MIT + license_family: MIT + size: 73730 + timestamp: 1710362120304 +- kind: conda + name: libexpat + version: 2.6.2 + build: h63175ca_0 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/libexpat-2.6.2-h63175ca_0.conda + sha256: 79f612f75108f3e16bbdc127d4885bb74729cf66a8702fca0373dad89d40c4b7 + md5: bc592d03f62779511d392c175dcece64 + constrains: + - expat 2.6.2.* + license: MIT + license_family: MIT + size: 139224 + timestamp: 1710362609641 +- kind: conda + name: libexpat + version: 2.6.2 + build: h73e2aa4_0 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/libexpat-2.6.2-h73e2aa4_0.conda + sha256: a188a77b275d61159a32ab547f7d17892226e7dac4518d2c6ac3ac8fc8dfde92 + md5: 3d1d51c8f716d97c864d12f7af329526 + constrains: + - expat 2.6.2.* + license: MIT + license_family: MIT + size: 69246 + timestamp: 1710362566073 +- kind: conda + name: libexpat + version: 2.6.2 + build: hebf3989_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libexpat-2.6.2-hebf3989_0.conda + sha256: ba7173ac30064ea901a4c9fb5a51846dcc25512ceb565759be7d18cbf3e5415e + md5: e3cde7cfa87f82f7cb13d482d5e0ad09 + constrains: + - expat 2.6.2.* + license: MIT + license_family: MIT + size: 63655 + timestamp: 1710362424980 - kind: conda name: libffi version: 3.4.2 @@ -7867,6 +11612,21 @@ packages: license_family: MIT size: 39020 timestamp: 1636488587153 +- kind: conda + name: libffi + version: 3.4.2 + build: h3557bc0_5 + build_number: 5 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libffi-3.4.2-h3557bc0_5.tar.bz2 + sha256: 7e9258a102480757fe3faeb225a3ca04dffd10fecd2a958c65cdb4cdf75f2c3c + md5: dddd85f4d52121fab0a8b099c5e06501 + depends: + - libgcc-ng >=9.4.0 + license: MIT + license_family: MIT + size: 59450 + timestamp: 1636488255090 - kind: conda name: libffi version: 3.4.2 @@ -7950,6 +11710,23 @@ packages: license_family: GPL size: 770506 timestamp: 1706819192021 +- kind: conda + name: libgcc-ng + version: 13.2.0 + build: hf8544c7_5 + build_number: 5 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libgcc-ng-13.2.0-hf8544c7_5.conda + sha256: 869e44e1cf329198f5bea56c146207ed639b24b6281187159435b9499ecb3959 + md5: dee934e640275d9e74e7bbd455f25162 + depends: + - _openmp_mutex >=4.5 + constrains: + - libgomp 13.2.0 hf8544c7_5 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + size: 456795 + timestamp: 1706820691781 - kind: conda name: libgfortran version: 5.0.0 @@ -8046,6 +11823,21 @@ packages: license_family: GPL size: 23829 timestamp: 1706819413770 +- kind: conda + name: libgfortran-ng + version: 13.2.0 + build: he9431aa_5 + build_number: 5 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libgfortran-ng-13.2.0-he9431aa_5.conda + sha256: a7e5d1ac34118a4fad8286050af0146226d2fb2bd63e7a1066dc4dae7ba42daa + md5: fab7c6a8c84492e18cbe578820e97a56 + depends: + - libgfortran5 13.2.0 h582850c_5 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + size: 23994 + timestamp: 1706820985230 - kind: conda name: libgfortran5 version: 13.2.0 @@ -8082,6 +11874,23 @@ packages: license_family: GPL size: 1571379 timestamp: 1707328880361 +- kind: conda + name: libgfortran5 + version: 13.2.0 + build: h582850c_5 + build_number: 5 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libgfortran5-13.2.0-h582850c_5.conda + sha256: f778346e85eb19bca36d1a5c8cddf8e089dcd6799b8f3e1b3f2d5a3157920827 + md5: 547486aac825d236de3beecb927b389c + depends: + - libgcc-ng >=13.2.0 + constrains: + - libgfortran-ng 13.2.0 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + size: 1082835 + timestamp: 1706820715400 - kind: conda name: libgfortran5 version: 13.2.0 @@ -8186,6 +11995,19 @@ packages: license_family: GPL size: 419751 timestamp: 1706819107383 +- kind: conda + name: libgomp + version: 13.2.0 + build: hf8544c7_5 + build_number: 5 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libgomp-13.2.0-hf8544c7_5.conda + sha256: a98d4f242a351feb7983a28e7d6a0ca51da764c6233ea3dfc776975a3aba8a01 + md5: 379be2f115ffb73860e4e260dd2170b7 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + size: 423091 + timestamp: 1706820564165 - kind: conda name: libgoogle-cloud version: 2.12.0 @@ -8364,6 +12186,126 @@ packages: license_family: Apache size: 1209079 timestamp: 1708638321316 +- kind: conda + name: libgoogle-cloud + version: 2.22.0 + build: h651e89d_1 + build_number: 1 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/libgoogle-cloud-2.22.0-h651e89d_1.conda + sha256: 39f2f50202e50e41ee8581c99a0b3023c2c21cab80ba597f8c5be7c8c8c6a059 + md5: 3f2faf53ecb3b51b92b3eee155b50233 + depends: + - __osx >=10.13 + - libabseil * cxx17* + - libabseil >=20240116.1,<20240117.0a0 + - libcurl >=8.5.0,<9.0a0 + - libcxx >=16 + - libgrpc >=1.62.0,<1.63.0a0 + - libprotobuf >=4.25.3,<4.25.4.0a0 + - openssl >=3.2.1,<4.0a0 + constrains: + - libgoogle-cloud 2.22.0 *_1 + license: Apache-2.0 + license_family: Apache + size: 849198 + timestamp: 1709738549021 +- kind: conda + name: libgoogle-cloud + version: 2.22.0 + build: h9be4e54_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libgoogle-cloud-2.22.0-h9be4e54_1.conda + sha256: b9980209438b22113f4352df2b260bf43b2eb63a7b6325192ec5ae3a562872ed + md5: 4b4e36a91e7dabf7345b82d85767a7c3 + depends: + - libabseil * cxx17* + - libabseil >=20240116.1,<20240117.0a0 + - libcurl >=8.5.0,<9.0a0 + - libgcc-ng >=12 + - libgrpc >=1.62.0,<1.63.0a0 + - libprotobuf >=4.25.3,<4.25.4.0a0 + - libstdcxx-ng >=12 + - openssl >=3.2.1,<4.0a0 + constrains: + - libgoogle-cloud 2.22.0 *_1 + license: Apache-2.0 + license_family: Apache + size: 1209816 + timestamp: 1709737846418 +- kind: conda + name: libgoogle-cloud + version: 2.22.0 + build: h9cad5c0_1 + build_number: 1 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/libgoogle-cloud-2.22.0-h9cad5c0_1.conda + sha256: f76e892d13e1db405777c968787678d8ba912b7e4eef7f950fcdcca185e06e71 + md5: 63cd44a71f00d4e72844bf0e8be56be4 + depends: + - libabseil * cxx17* + - libabseil >=20240116.1,<20240117.0a0 + - libcurl >=8.5.0,<9.0a0 + - libgrpc >=1.62.0,<1.63.0a0 + - libprotobuf >=4.25.3,<4.25.4.0a0 + - openssl >=3.2.1,<4.0a0 + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + constrains: + - libgoogle-cloud 2.22.0 *_1 + license: Apache-2.0 + license_family: Apache + size: 14420 + timestamp: 1709737037941 +- kind: conda + name: libgoogle-cloud + version: 2.22.0 + build: hbebe991_1 + build_number: 1 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libgoogle-cloud-2.22.0-hbebe991_1.conda + sha256: a114b4d46eebede7e514abaf9203ea8c952a6382c5c57d1b989da062e3899bd7 + md5: ec7ea95b08e8cbc39fa16b6eafee36e6 + depends: + - libabseil * cxx17* + - libabseil >=20240116.1,<20240117.0a0 + - libcurl >=8.5.0,<9.0a0 + - libcxx >=16 + - libgrpc >=1.62.0,<1.63.0a0 + - libprotobuf >=4.25.3,<4.25.4.0a0 + - openssl >=3.2.1,<4.0a0 + constrains: + - libgoogle-cloud 2.22.0 *_1 + license: Apache-2.0 + license_family: Apache + size: 836916 + timestamp: 1709739767863 +- kind: conda + name: libgoogle-cloud + version: 2.22.0 + build: hd739bbb_1 + build_number: 1 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libgoogle-cloud-2.22.0-hd739bbb_1.conda + sha256: ed838cad9631c37fa12159594f2bc5b4eae1dfa5db09a83e0939a4410ef3b8c3 + md5: 85707855a6af6e3bf37779a478403b37 + depends: + - libabseil * cxx17* + - libabseil >=20240116.1,<20240117.0a0 + - libcurl >=8.5.0,<9.0a0 + - libgcc-ng >=12 + - libgrpc >=1.62.0,<1.63.0a0 + - libprotobuf >=4.25.3,<4.25.4.0a0 + - libstdcxx-ng >=12 + - openssl >=3.2.1,<4.0a0 + constrains: + - libgoogle-cloud 2.22.0 *_1 + license: Apache-2.0 + license_family: Apache + size: 1192943 + timestamp: 1709738727212 - kind: conda name: libgoogle-cloud-storage version: 2.21.0 @@ -8431,26 +12373,135 @@ packages: timestamp: 1708637621024 - kind: conda name: libgoogle-cloud-storage - version: 2.21.0 - build: hc7a4891_2 - build_number: 2 - subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/libgoogle-cloud-storage-2.21.0-hc7a4891_2.conda - sha256: c2237a8fffd58553d31e0a135746de979e2b6a7eaf001748bdb98cf618db3d52 - md5: cc54c794dac0d76eb1adaf6172e9c59e + version: 2.21.0 + build: hc7a4891_2 + build_number: 2 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libgoogle-cloud-storage-2.21.0-hc7a4891_2.conda + sha256: c2237a8fffd58553d31e0a135746de979e2b6a7eaf001748bdb98cf618db3d52 + md5: cc54c794dac0d76eb1adaf6172e9c59e + depends: + - libabseil + - libcrc32c >=1.1.2,<1.2.0a0 + - libcurl + - libgcc-ng >=12 + - libgoogle-cloud 2.21.0 h72bcb37_2 + - libstdcxx-ng >=12 + - libzlib >=1.2.13,<1.3.0a0 + - openssl + license: Apache-2.0 + license_family: Apache + size: 749865 + timestamp: 1708638542903 +- kind: conda + name: libgoogle-cloud-storage + version: 2.22.0 + build: h8a76758_1 + build_number: 1 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libgoogle-cloud-storage-2.22.0-h8a76758_1.conda + sha256: e23be5896fd78e0e8b1098aab8803192f0c4a328d3d30a57d20d80194045d793 + md5: a89fb5b36b08efaae128d4933e593315 + depends: + - libabseil + - libcrc32c >=1.1.2,<1.2.0a0 + - libcurl + - libcxx >=16 + - libgoogle-cloud 2.22.0 hbebe991_1 + - libzlib >=1.2.13,<1.3.0a0 + - openssl + license: Apache-2.0 + license_family: Apache + size: 507478 + timestamp: 1709740510222 +- kind: conda + name: libgoogle-cloud-storage + version: 2.22.0 + build: ha67e85c_1 + build_number: 1 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/libgoogle-cloud-storage-2.22.0-ha67e85c_1.conda + sha256: e4f351e55fe7c0656cb608eba8690063e3b407d25a855c9d1fd832486d4a1244 + md5: 0c25180c34b1a58d309b28386698fb6e + depends: + - libabseil + - libcrc32c >=1.1.2,<1.2.0a0 + - libcurl + - libcxx >=16 + - libgoogle-cloud 2.22.0 h651e89d_1 + - libzlib >=1.2.13,<1.3.0a0 + - openssl + license: Apache-2.0 + license_family: Apache + size: 523045 + timestamp: 1709739227970 +- kind: conda + name: libgoogle-cloud-storage + version: 2.22.0 + build: hb581fae_1 + build_number: 1 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/libgoogle-cloud-storage-2.22.0-hb581fae_1.conda + sha256: 5ee34f168948211db14874f521e6edf9b4032d533c61fd429caaa282be1d0e7b + md5: f63348292dea55cf834e631cf26e2669 + depends: + - libabseil + - libcrc32c >=1.1.2,<1.2.0a0 + - libcurl + - libgoogle-cloud 2.22.0 h9cad5c0_1 + - libzlib >=1.2.13,<1.3.0a0 + - openssl + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + license: Apache-2.0 + license_family: Apache + size: 14330 + timestamp: 1709737542249 +- kind: conda + name: libgoogle-cloud-storage + version: 2.22.0 + build: hc7a4891_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libgoogle-cloud-storage-2.22.0-hc7a4891_1.conda + sha256: 0e00e1ca2a981db1c96071edf266bc29fd6f13ac484225de1736fc4dac5c64a8 + md5: 7811f043944e010e54640918ea82cecd + depends: + - libabseil + - libcrc32c >=1.1.2,<1.2.0a0 + - libcurl + - libgcc-ng >=12 + - libgoogle-cloud 2.22.0 h9be4e54_1 + - libstdcxx-ng >=12 + - libzlib >=1.2.13,<1.3.0a0 + - openssl + license: Apache-2.0 + license_family: Apache + size: 748818 + timestamp: 1709738181078 +- kind: conda + name: libgoogle-cloud-storage + version: 2.22.0 + build: hdb39181_1 + build_number: 1 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libgoogle-cloud-storage-2.22.0-hdb39181_1.conda + sha256: e0be5d1add9e3332e6155cebddd3f9f2ea4cc2840e2f3cb4413ed53bd8a42129 + md5: 7c15ecbf56d3a5467ae399e963dacbb8 depends: - libabseil - libcrc32c >=1.1.2,<1.2.0a0 - libcurl - libgcc-ng >=12 - - libgoogle-cloud 2.21.0 h72bcb37_2 + - libgoogle-cloud 2.22.0 hd739bbb_1 - libstdcxx-ng >=12 - libzlib >=1.2.13,<1.3.0a0 - openssl license: Apache-2.0 license_family: Apache - size: 749865 - timestamp: 1708638542903 + size: 698963 + timestamp: 1709739002982 - kind: conda name: libgrpc version: 1.59.3 @@ -8634,6 +12685,131 @@ packages: license_family: APACHE size: 4975767 timestamp: 1707807808364 +- kind: conda + name: libgrpc + version: 1.62.1 + build: h15f2491_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libgrpc-1.62.1-h15f2491_0.conda + sha256: 1d4ece94dfef73d904dcba0fd9d56098796f5fdc62ea5f9edff60c71be7a3d63 + md5: 564517a8cbd095cff75eb996d33d2b7e + depends: + - c-ares >=1.27.0,<2.0a0 + - libabseil * cxx17* + - libabseil >=20240116.1,<20240117.0a0 + - libgcc-ng >=12 + - libprotobuf >=4.25.3,<4.25.4.0a0 + - libre2-11 >=2023.9.1,<2024.0a0 + - libstdcxx-ng >=12 + - libzlib >=1.2.13,<1.3.0a0 + - openssl >=3.2.1,<4.0a0 + - re2 + constrains: + - grpc-cpp =1.62.1 + license: Apache-2.0 + license_family: APACHE + size: 7667664 + timestamp: 1709938059287 +- kind: conda + name: libgrpc + version: 1.62.1 + build: h384b2fc_0 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/libgrpc-1.62.1-h384b2fc_0.conda + sha256: 8c9898d259e2343df52259b599ec342c386679e1c420df603cba6f06078fcdd6 + md5: 2ac05daca7276a4d6ca4465707670380 + depends: + - __osx >=10.13 + - c-ares >=1.27.0,<2.0a0 + - libabseil * cxx17* + - libabseil >=20240116.1,<20240117.0a0 + - libcxx >=16 + - libprotobuf >=4.25.3,<4.25.4.0a0 + - libre2-11 >=2023.9.1,<2024.0a0 + - libzlib >=1.2.13,<1.3.0a0 + - openssl >=3.2.1,<4.0a0 + - re2 + constrains: + - grpc-cpp =1.62.1 + license: Apache-2.0 + license_family: APACHE + size: 4432823 + timestamp: 1709938959215 +- kind: conda + name: libgrpc + version: 1.62.1 + build: h5273850_0 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/libgrpc-1.62.1-h5273850_0.conda + sha256: 338cb58d1095ee651acd168af9636834b41908f7a94e613088e284dc53d2947c + md5: 99ac2f772591801641ec692fee843796 + depends: + - c-ares >=1.27.0,<2.0a0 + - libabseil * cxx17* + - libabseil >=20240116.1,<20240117.0a0 + - libprotobuf >=4.25.3,<4.25.4.0a0 + - libre2-11 >=2023.9.1,<2024.0a0 + - libzlib >=1.2.13,<1.3.0a0 + - openssl >=3.2.1,<4.0a0 + - re2 + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + constrains: + - grpc-cpp =1.62.1 + license: Apache-2.0 + license_family: APACHE + size: 15963245 + timestamp: 1709939262816 +- kind: conda + name: libgrpc + version: 1.62.1 + build: h98a9317_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libgrpc-1.62.1-h98a9317_0.conda + sha256: 64f196a0893223bcf0f91ea89b0118a07f32c7dae8377bdee2d9f7fdf39cd3d5 + md5: 17107fbb7822215e90d12bb8c42102f4 + depends: + - c-ares >=1.27.0,<2.0a0 + - libabseil * cxx17* + - libabseil >=20240116.1,<20240117.0a0 + - libgcc-ng >=12 + - libprotobuf >=4.25.3,<4.25.4.0a0 + - libre2-11 >=2023.9.1,<2024.0a0 + - libstdcxx-ng >=12 + - libzlib >=1.2.13,<1.3.0a0 + - openssl >=3.2.1,<4.0a0 + - re2 + constrains: + - grpc-cpp =1.62.1 + license: Apache-2.0 + license_family: APACHE + size: 6820015 + timestamp: 1709938779780 +- kind: conda + name: libgrpc + version: 1.62.1 + build: h9c18a4f_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libgrpc-1.62.1-h9c18a4f_0.conda + sha256: b8c6b48430d0778e9452df88fa7c07fc7828aac87291372ac42dbe78be4078d5 + md5: 24f15c1a9e111825d39bf77881430107 + depends: + - c-ares >=1.27.0,<2.0a0 + - libabseil * cxx17* + - libabseil >=20240116.1,<20240117.0a0 + - libcxx >=16 + - libprotobuf >=4.25.3,<4.25.4.0a0 + - libre2-11 >=2023.9.1,<2024.0a0 + - libzlib >=1.2.13,<1.3.0a0 + - openssl >=3.2.1,<4.0a0 + - re2 + constrains: + - grpc-cpp =1.62.1 + license: Apache-2.0 + license_family: APACHE + size: 4753906 + timestamp: 1709939281511 - kind: conda name: libhwloc version: 2.9.3 @@ -8680,6 +12856,20 @@ packages: license: GPL and LGPL size: 1450368 timestamp: 1652700749886 +- kind: conda + name: libiconv + version: '1.17' + build: h31becfc_2 + build_number: 2 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libiconv-1.17-h31becfc_2.conda + sha256: a30e09d089cb75a0d5b8e5c354694c1317da98261185ed65aa3793e741060614 + md5: 9a8eb13f14de7d761555a98712e6df65 + depends: + - libgcc-ng >=12 + license: LGPL-2.1-only + size: 705787 + timestamp: 1702684557134 - kind: conda name: libiconv version: '1.17' @@ -8867,6 +13057,25 @@ packages: license_family: BSD size: 14599 timestamp: 1705979579648 +- kind: conda + name: liblapack + version: 3.9.0 + build: 21_linuxaarch64_openblas + build_number: 21 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/liblapack-3.9.0-21_linuxaarch64_openblas.conda + sha256: 87c110c6a1171c62d6a8802098c4186dcc8eca0ee2d0376a843e0cd025096e4a + md5: ab08b651e3630c20d3032e59859f34f7 + depends: + - libblas 3.9.0 21_linuxaarch64_openblas + constrains: + - liblapacke 3.9.0 21_linuxaarch64_openblas + - blas * openblas + - libcblas 3.9.0 21_linuxaarch64_openblas + license: BSD-3-Clause + license_family: BSD + size: 14583 + timestamp: 1705979400733 - kind: conda name: liblapack version: 3.9.0 @@ -9000,6 +13209,24 @@ packages: license_family: Apache size: 33321457 timestamp: 1701375836233 +- kind: conda + name: libllvm15 + version: 15.0.7 + build: hb4f23b0_4 + build_number: 4 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libllvm15-15.0.7-hb4f23b0_4.conda + sha256: 12da3344f2ef37dcb80b4e2d106cf36ebc267c3be6211a8306dd1dbf07399d61 + md5: 8d7aa8eae04dc19426a417528d7041eb + depends: + - libgcc-ng >=12 + - libstdcxx-ng >=12 + - libxml2 >=2.12.1,<3.0.0a0 + - libzlib >=1.2.13,<1.3.0a0 + license: Apache-2.0 WITH LLVM-exception + license_family: Apache + size: 32882415 + timestamp: 1701366839578 - kind: conda name: libllvm15 version: 15.0.7 @@ -9038,6 +13265,25 @@ packages: license_family: Apache size: 23877550 timestamp: 1690533932497 +- kind: conda + name: libllvm16 + version: 16.0.6 + build: h0b931ab_3 + build_number: 3 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libllvm16-16.0.6-h0b931ab_3.conda + sha256: 4b1e37e830983d4d0886a894b984411914a25eb6cf9db9d806c4e93053a99d4b + md5: 333f681d34b2fb5d1947b3b6b3e798a6 + depends: + - libgcc-ng >=12 + - libstdcxx-ng >=12 + - libxml2 >=2.12.1,<3.0.0a0 + - libzlib >=1.2.13,<1.3.0a0 + - zstd >=1.5.5,<1.6.0a0 + license: Apache-2.0 WITH LLVM-exception + license_family: Apache + size: 34835275 + timestamp: 1701373096012 - kind: conda name: libllvm16 version: 16.0.6 @@ -9255,6 +13501,76 @@ packages: license_family: Apache size: 26306756 timestamp: 1701378823527 +- kind: conda + name: libllvm18 + version: 18.1.1 + build: h2448989_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libllvm18-18.1.1-h2448989_0.conda + sha256: 4501e62ee42644f158b2273e6cef621c2bac148ebe729fb3ca10b337df83fa3a + md5: a77e3c2c568b3b5d8a79b158d0c5dd47 + depends: + - libgcc-ng >=12 + - libstdcxx-ng >=12 + - libxml2 >=2.12.5,<3.0a0 + - libzlib >=1.2.13,<1.3.0a0 + - zstd >=1.5.5,<1.6.0a0 + license: Apache-2.0 WITH LLVM-exception + license_family: Apache + size: 38392079 + timestamp: 1710432419352 +- kind: conda + name: libllvm18 + version: 18.1.1 + build: h30cc82d_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libllvm18-18.1.1-h30cc82d_0.conda + sha256: 35f2fbe7f87c9fda6f36c0ee8efc5b99c347a2f7a0d4bca3d0511b612773a30d + md5: a215b38429566e17aa4d9dba24680d0d + depends: + - libcxx >=16 + - libxml2 >=2.12.5,<3.0a0 + - libzlib >=1.2.13,<1.3.0a0 + - zstd >=1.5.5,<1.6.0a0 + license: Apache-2.0 WITH LLVM-exception + license_family: Apache + size: 25777635 + timestamp: 1710434884978 +- kind: conda + name: libllvm18 + version: 18.1.1 + build: hbcf5fad_0 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/libllvm18-18.1.1-hbcf5fad_0.conda + sha256: d5f0042e48091740f7084d390a4948b2a739acbc4045f852f7561c0597e1a078 + md5: 9cfc7fa4bdbf1f0558f053285b4b6afb + depends: + - libcxx >=16 + - libxml2 >=2.12.5,<3.0a0 + - libzlib >=1.2.13,<1.3.0a0 + - zstd >=1.5.5,<1.6.0a0 + license: Apache-2.0 WITH LLVM-exception + license_family: Apache + size: 27599082 + timestamp: 1710435070093 +- kind: conda + name: libllvm18 + version: 18.1.1 + build: hbfe100b_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libllvm18-18.1.1-hbfe100b_0.conda + sha256: dbe94b626d33e2ea273ea8d86e500ae5911cd4b6aaf84d0aab881f6c7c531c20 + md5: cf5da33f6f0ea717dc71d73e5ff7f93f + depends: + - libgcc-ng >=12 + - libstdcxx-ng >=12 + - libxml2 >=2.12.5,<3.0a0 + - libzlib >=1.2.13,<1.3.0a0 + - zstd >=1.5.5,<1.6.0a0 + license: Apache-2.0 WITH LLVM-exception + license_family: Apache + size: 37702614 + timestamp: 1710430191630 - kind: conda name: libnghttp2 version: 1.58.0 @@ -9318,6 +13634,41 @@ packages: license_family: MIT size: 565451 timestamp: 1702130473930 +- kind: conda + name: libnghttp2 + version: 1.58.0 + build: hb0e430d_1 + build_number: 1 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libnghttp2-1.58.0-hb0e430d_1.conda + sha256: ecc11e4f92f9d5830a90d42b4db55c66c4ad531e00dcf30d55171d934a568cb5 + md5: 8f724cdddffa79152de61f5564a3526b + depends: + - c-ares >=1.23.0,<2.0a0 + - libev >=4.33,<4.34.0a0 + - libev >=4.33,<5.0a0 + - libgcc-ng >=12 + - libstdcxx-ng >=12 + - libzlib >=1.2.13,<1.3.0a0 + - openssl >=3.2.0,<4.0a0 + license: MIT + license_family: MIT + size: 677508 + timestamp: 1702130071743 +- kind: conda + name: libnl + version: 3.9.0 + build: h31becfc_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libnl-3.9.0-h31becfc_0.conda + sha256: f69dd5a4ed9f51e8e3abaa529f8f9127541c5b2afb8ec75b9deddbb72a054498 + md5: eb3aee596100fbb7eb4d69056be75868 + depends: + - libgcc-ng >=12 + license: LGPL-2.1-or-later + license_family: LGPL + size: 747627 + timestamp: 1702657818170 - kind: conda name: libnl version: 3.9.0 @@ -9332,6 +13683,20 @@ packages: license_family: LGPL size: 732866 timestamp: 1702657849946 +- kind: conda + name: libnsl + version: 2.0.1 + build: h31becfc_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libnsl-2.0.1-h31becfc_0.conda + sha256: fd18c2b75d7411096428d36a70b36b1a17e31f7b8956b6905d145792d49e97f8 + md5: c14f32510f694e3185704d89967ec422 + depends: + - libgcc-ng >=12 + license: LGPL-2.1-only + license_family: GPL + size: 34501 + timestamp: 1697358973269 - kind: conda name: libnsl version: 2.0.1 @@ -9474,6 +13839,24 @@ packages: license_family: BSD size: 5578031 timestamp: 1704950143521 +- kind: conda + name: libopenblas + version: 0.3.26 + build: pthreads_h5a5ec62_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenblas-0.3.26-pthreads_h5a5ec62_0.conda + sha256: b72719014a86f69162398fc32af0f23e6e1746ec795f7c5d38ad5998a78eb6f8 + md5: 2ea496754b596063335b3aeaa2b982ac + depends: + - libgcc-ng >=12 + - libgfortran-ng + - libgfortran5 >=12.3.0 + constrains: + - openblas >=0.3.26,<0.3.27.0a0 + license: BSD-3-Clause + license_family: BSD + size: 4306237 + timestamp: 1704951018697 - kind: conda name: libparquet version: 14.0.2 @@ -9493,6 +13876,25 @@ packages: license_family: APACHE size: 1158188 timestamp: 1708689889111 +- kind: conda + name: libparquet + version: 14.0.2 + build: h352af49_13_cpu + build_number: 13 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libparquet-14.0.2-h352af49_13_cpu.conda + sha256: 3675da7fee45dfe0f053bbcb71b5dc32c58eba86eb04dd5e7dbd2e3f5b076edb + md5: 0c4ee07d6a56434b8e1abfdce42ffe9a + depends: + - libarrow 14.0.2 h6bfc85a_13_cpu + - libgcc-ng >=12 + - libstdcxx-ng >=12 + - libthrift >=0.19.0,<0.19.1.0a0 + - openssl >=3.2.1,<4.0a0 + license: Apache-2.0 + license_family: APACHE + size: 1160002 + timestamp: 1710345544372 - kind: conda name: libparquet version: 14.0.2 @@ -9530,6 +13932,24 @@ packages: license_family: APACHE size: 925350 timestamp: 1708690516278 +- kind: conda + name: libparquet + version: 14.0.2 + build: h381d950_13_cpu + build_number: 13 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/libparquet-14.0.2-h381d950_13_cpu.conda + sha256: e1227a121d942be15d02ec1fde3e43f2a17e5c5a37ed006e5382977d355a3294 + md5: 273a1178373fffd8d76a8e813699297e + depends: + - libarrow 14.0.2 he79e29d_13_cpu + - libcxx >=14 + - libthrift >=0.19.0,<0.19.1.0a0 + - openssl >=3.2.1,<4.0a0 + license: Apache-2.0 + license_family: APACHE + size: 924906 + timestamp: 1710346971895 - kind: conda name: libparquet version: 14.0.2 @@ -9568,6 +13988,45 @@ packages: license_family: APACHE size: 783467 timestamp: 1708690358780 +- kind: conda + name: libparquet + version: 14.0.2 + build: h7ec3a38_13_cpu + build_number: 13 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/libparquet-14.0.2-h7ec3a38_13_cpu.conda + sha256: d59b700882bbe39cb387151638bb0becbbb04c86a668426867fb32bad8a37d82 + md5: babba3c50f817f425964de492844a521 + depends: + - libarrow 14.0.2 h2a83f13_13_cpu + - libthrift >=0.19.0,<0.19.1.0a0 + - openssl >=3.2.1,<4.0a0 + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + license: Apache-2.0 + license_family: APACHE + size: 782893 + timestamp: 1710346323580 +- kind: conda + name: libparquet + version: 14.0.2 + build: hb18b541_12_cpu + build_number: 12 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libparquet-14.0.2-hb18b541_12_cpu.conda + sha256: c5befb28607fe3c44b98792fa18f5b6784a801135d70cfde93f44414b9f565da + md5: 9ab277c46fa4ce629ef1b66483b38765 + depends: + - libarrow 14.0.2 h25df049_12_cpu + - libgcc-ng >=12 + - libstdcxx-ng >=12 + - libthrift >=0.19.0,<0.19.1.0a0 + - openssl >=3.2.1,<4.0a0 + license: Apache-2.0 + license_family: APACHE + size: 1074395 + timestamp: 1710293046583 - kind: conda name: libparquet version: 14.0.2 @@ -9584,8 +14043,26 @@ packages: - openssl >=3.2.1,<4.0a0 license: Apache-2.0 license_family: APACHE - size: 910129 - timestamp: 1708691448291 + size: 910129 + timestamp: 1708691448291 +- kind: conda + name: libparquet + version: 14.0.2 + build: hf6ce1d5_13_cpu + build_number: 13 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libparquet-14.0.2-hf6ce1d5_13_cpu.conda + sha256: f265cc71bb623ce3fef0a681a4744d35562e1ae9a8ed23707cf0d629dc2763ff + md5: 9451897b618c5007a9adc5d9b4ebb0e2 + depends: + - libarrow 14.0.2 h5233fb5_13_cpu + - libcxx >=14 + - libthrift >=0.19.0,<0.19.1.0a0 + - openssl >=3.2.1,<4.0a0 + license: Apache-2.0 + license_family: APACHE + size: 909954 + timestamp: 1710346299150 - kind: conda name: libparquet version: 14.0.2 @@ -9741,6 +14218,96 @@ packages: license_family: BSD size: 2163244 timestamp: 1708436969402 +- kind: conda + name: libprotobuf + version: 4.25.3 + build: h08a7969_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libprotobuf-4.25.3-h08a7969_0.conda + sha256: 70e0eef046033af2e8d21251a785563ad738ed5281c74e21c31c457780845dcd + md5: 6945825cebd2aeb16af4c69d97c32c13 + depends: + - libabseil * cxx17* + - libabseil >=20240116.1,<20240117.0a0 + - libgcc-ng >=12 + - libstdcxx-ng >=12 + - libzlib >=1.2.13,<1.3.0a0 + license: BSD-3-Clause + license_family: BSD + size: 2811207 + timestamp: 1709514552541 +- kind: conda + name: libprotobuf + version: 4.25.3 + build: h4e4d658_0 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/libprotobuf-4.25.3-h4e4d658_0.conda + sha256: 3f126769fb5820387d436370ad48600e05d038a28689fdf9988b64e1059947a8 + md5: 57b7ee4f1fd8573781cfdabaec4a7782 + depends: + - __osx >=10.13 + - libabseil * cxx17* + - libabseil >=20240116.1,<20240117.0a0 + - libcxx >=16 + - libzlib >=1.2.13,<1.3.0a0 + license: BSD-3-Clause + license_family: BSD + size: 2216001 + timestamp: 1709514908146 +- kind: conda + name: libprotobuf + version: 4.25.3 + build: h503648d_0 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/libprotobuf-4.25.3-h503648d_0.conda + sha256: 5d4c5592be3994657ebf47e52f26b734cc50b0ea9db007d920e2e31762aac216 + md5: 4da7de0ba35777742edf67bf7a1075df + depends: + - libabseil * cxx17* + - libabseil >=20240116.1,<20240117.0a0 + - libzlib >=1.2.13,<1.3.0a0 + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + license: BSD-3-Clause + license_family: BSD + size: 5650604 + timestamp: 1709514804631 +- kind: conda + name: libprotobuf + version: 4.25.3 + build: h648ac29_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libprotobuf-4.25.3-h648ac29_0.conda + sha256: 76775a1457b2d4de1097bec2fda16b8e6e80f761d11aa7a525fa215bff4ab87c + md5: a239d63913ec9e008bdbe35899f677f4 + depends: + - libabseil * cxx17* + - libabseil >=20240116.1,<20240117.0a0 + - libgcc-ng >=12 + - libstdcxx-ng >=12 + - libzlib >=1.2.13,<1.3.0a0 + license: BSD-3-Clause + license_family: BSD + size: 2576197 + timestamp: 1709513627963 +- kind: conda + name: libprotobuf + version: 4.25.3 + build: hbfab5d5_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libprotobuf-4.25.3-hbfab5d5_0.conda + sha256: d754519abc3ddbdedab2a38d0639170f5347c1573eef80c707f3a8dc5dff706a + md5: 5f70b2b945a9741cba7e6dfe735a02a7 + depends: + - libabseil * cxx17* + - libabseil >=20240116.1,<20240117.0a0 + - libcxx >=16 + - libzlib >=1.2.13,<1.3.0a0 + license: BSD-3-Clause + license_family: BSD + size: 2154402 + timestamp: 1709514097574 - kind: conda name: libre2-11 version: 2023.06.02 @@ -9858,6 +14425,26 @@ packages: license_family: BSD size: 184017 timestamp: 1708947106275 +- kind: conda + name: libre2-11 + version: 2023.09.01 + build: h9d008c2_2 + build_number: 2 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libre2-11-2023.09.01-h9d008c2_2.conda + sha256: 1da5cfd57091a52c822ec9580694f1e07817e53db43b0407a477daa2d2a16fcd + md5: 387c114aadcaeb02210f646c4b5efca2 + depends: + - libabseil * cxx17* + - libabseil >=20240116.1,<20240117.0a0 + - libgcc-ng >=12 + - libstdcxx-ng >=12 + constrains: + - re2 2023.09.01.* + license: BSD-3-Clause + license_family: BSD + size: 217529 + timestamp: 1708946830978 - kind: conda name: libre2-11 version: 2023.09.01 @@ -9949,6 +14536,75 @@ packages: license: Unlicense size: 870045 timestamp: 1707495642340 +- kind: conda + name: libsqlite + version: 3.45.2 + build: h091b4b1_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.45.2-h091b4b1_0.conda + sha256: 7c234320a1a2132b9cc972aaa06bb215bb220a5b1addb0bed7a5a321c805920e + md5: 9d07427ee5bd9afd1e11ce14368a48d6 + depends: + - libzlib >=1.2.13,<1.3.0a0 + license: Unlicense + size: 825300 + timestamp: 1710255078823 +- kind: conda + name: libsqlite + version: 3.45.2 + build: h194ca79_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libsqlite-3.45.2-h194ca79_0.conda + sha256: 0ce6de6369c04386cfc8696b1f795f425843789609ae2e04e7a1eb7deae62a8b + md5: bf4c96a21fbfc6a6ef6a7781a534a4e0 + depends: + - libgcc-ng >=12 + - libzlib >=1.2.13,<1.3.0a0 + license: Unlicense + size: 1038462 + timestamp: 1710253998432 +- kind: conda + name: libsqlite + version: 3.45.2 + build: h2797004_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.45.2-h2797004_0.conda + sha256: 8cdbeb7902729e319510a82d7c642402981818702b58812af265ef55d1315473 + md5: 866983a220e27a80cb75e85cb30466a1 + depends: + - libgcc-ng >=12 + - libzlib >=1.2.13,<1.3.0a0 + license: Unlicense + size: 857489 + timestamp: 1710254744982 +- kind: conda + name: libsqlite + version: 3.45.2 + build: h92b6c6a_0 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/libsqlite-3.45.2-h92b6c6a_0.conda + sha256: 320ec73a4e3dd377757a2595770b8137ec4583df4d7782472d76377cdbdc4543 + md5: 086f56e13a96a6cfb1bf640505ae6b70 + depends: + - libzlib >=1.2.13,<1.3.0a0 + license: Unlicense + size: 902355 + timestamp: 1710254991672 +- kind: conda + name: libsqlite + version: 3.45.2 + build: hcfcfb64_0 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/libsqlite-3.45.2-hcfcfb64_0.conda + sha256: 4bb24b986550275a6d02835150d943c4c675808d05c0efc5c2a22154d007a69f + md5: f95359f8dc5abf7da7776ece9ef10bc5 + depends: + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + license: Unlicense + size: 869606 + timestamp: 1710255095740 - kind: conda name: libssh2 version: 1.11.0 @@ -9965,6 +14621,22 @@ packages: license_family: BSD size: 271133 timestamp: 1685837707056 +- kind: conda + name: libssh2 + version: 1.11.0 + build: h492db2e_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libssh2-1.11.0-h492db2e_0.conda + sha256: 409163dd4a888b9266369f1bce57b5ca56c216e34249637c3e10eb404e356171 + md5: 45532845e121677ad328c9af9953f161 + depends: + - libgcc-ng >=12 + - libzlib >=1.2.13,<1.3.0a0 + - openssl >=3.1.1,<4.0a0 + license: BSD-3-Clause + license_family: BSD + size: 284335 + timestamp: 1685837600415 - kind: conda name: libssh2 version: 1.11.0 @@ -10055,6 +14727,19 @@ packages: license_family: GPL size: 3834139 timestamp: 1706819252496 +- kind: conda + name: libstdcxx-ng + version: 13.2.0 + build: h9a76618_5 + build_number: 5 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libstdcxx-ng-13.2.0-h9a76618_5.conda + sha256: c209f23a8a497fc87107a68b6bbc8d2089cf15fd4015b558dfdce63544379b05 + md5: 1b79d37dce0fad96bdf3de03925f43b4 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + size: 3752658 + timestamp: 1706820778418 - kind: conda name: libthrift version: 0.19.0 @@ -10073,6 +14758,25 @@ packages: license_family: APACHE size: 331154 timestamp: 1695958512679 +- kind: conda + name: libthrift + version: 0.19.0 + build: h043aeee_1 + build_number: 1 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libthrift-0.19.0-h043aeee_1.conda + sha256: 83d38df283ae258eb73807442ccee62364cf50b853d238a5b03092374c7bcf45 + md5: 591ef1567ed4989d824fe35b45e3ae68 + depends: + - libevent >=2.1.12,<2.1.13.0a0 + - libgcc-ng >=12 + - libstdcxx-ng >=12 + - libzlib >=1.2.13,<1.3.0a0 + - openssl >=3.1.3,<4.0a0 + license: Apache-2.0 + license_family: APACHE + size: 400010 + timestamp: 1695958016227 - kind: conda name: libthrift version: 0.19.0 @@ -10156,6 +14860,20 @@ packages: license_family: MIT size: 103492 timestamp: 1667316405233 +- kind: conda + name: libutf8proc + version: 2.8.0 + build: h4e544f5_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libutf8proc-2.8.0-h4e544f5_0.tar.bz2 + sha256: c1956b64ad9613c66cf87398f5e2c36d071034a93892da7e8cc22e75cface878 + md5: bf0defbd8ac06270fb5ec05c85fb3c96 + depends: + - libgcc-ng >=12 + license: MIT + license_family: MIT + size: 101529 + timestamp: 1667315331359 - kind: conda name: libutf8proc version: 2.8.0 @@ -10198,6 +14916,20 @@ packages: license_family: BSD size: 33601 timestamp: 1680112270483 +- kind: conda + name: libuuid + version: 2.38.1 + build: hb4cce97_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libuuid-2.38.1-hb4cce97_0.conda + sha256: 616277b0c5f7616c2cdf36f6c316ea3f9aa5bb35f2d4476a349ab58b9b91675f + md5: 000e30b09db0b7c775b21695dff30969 + depends: + - libgcc-ng >=12 + license: BSD-3-Clause + license_family: BSD + size: 35720 + timestamp: 1680113474501 - kind: conda name: libuv version: 1.44.2 @@ -10227,6 +14959,20 @@ packages: license_family: MIT size: 396101 timestamp: 1693539567563 +- kind: conda + name: libuv + version: 1.46.0 + build: h31becfc_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libuv-1.46.0-h31becfc_0.conda + sha256: 8c7aca3bb0cdcdc94984dbdeeb6e81669e140e4e70e1b58243a39019380aa600 + md5: 9f34d91c42a7820676a895c314910ba7 + depends: + - libgcc-ng >=12 + license: MIT + license_family: MIT + size: 625152 + timestamp: 1693539400188 - kind: conda name: libuv version: 1.46.0 @@ -10253,6 +14999,60 @@ packages: license_family: MIT size: 893348 timestamp: 1693539405436 +- kind: conda + name: libuv + version: 1.47.0 + build: h67532ce_0 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/libuv-1.47.0-h67532ce_0.conda + sha256: a452b8fbb906e72d6c633ed133413f6a604471597f4c80dc73b4e81d2ef56b32 + md5: c2c8307836ecebc2799400a4eca27b37 + license: MIT + license_family: MIT + size: 404907 + timestamp: 1707450430194 +- kind: conda + name: libuv + version: 1.47.0 + build: h93a5062_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libuv-1.47.0-h93a5062_0.conda + sha256: 802da3ad57041480f15fe0581d6fcd421d9cdae17d796d2b126b0a12aa2d3d44 + md5: b586a09ba87849e37634cbaf9ea0e60f + license: MIT + license_family: MIT + size: 404350 + timestamp: 1707450365805 +- kind: conda + name: libuv + version: 1.48.0 + build: hcfcfb64_0 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/libuv-1.48.0-hcfcfb64_0.conda + sha256: 6151c51857c2407139ce22fdc956022353e675b2bc96991a9201d51cceaa90b4 + md5: 485e49e1d500d996844df14cabf64d73 + depends: + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + license: MIT + license_family: MIT + size: 289753 + timestamp: 1709913743184 +- kind: conda + name: libxcrypt + version: 4.4.36 + build: h31becfc_1 + build_number: 1 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libxcrypt-4.4.36-h31becfc_1.conda + sha256: 6b46c397644091b8a26a3048636d10b989b1bf266d4be5e9474bf763f828f41f + md5: b4df5d7d4b63579d081fd3a4cf99740e + depends: + - libgcc-ng >=12 + license: LGPL-2.1-or-later + size: 114269 + timestamp: 1702724369203 - kind: conda name: libxcrypt version: 4.4.36 @@ -10363,6 +15163,24 @@ packages: license_family: MIT size: 704829 timestamp: 1707084502281 +- kind: conda + name: libxml2 + version: 2.12.5 + build: h3091e33_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libxml2-2.12.5-h3091e33_0.conda + sha256: 34f7a007fa23b70c56358738d7ba801df9a923422f2dcd23f3b2ca790ea2460a + md5: 2fcb5d64474a337f2a4213ec1dd40ce2 + depends: + - icu >=73.2,<74.0a0 + - libgcc-ng >=12 + - libiconv >=1.17,<2.0a0 + - libzlib >=1.2.13,<1.3.0a0 + - xz >=5.2.6,<6.0a0 + license: MIT + license_family: MIT + size: 752149 + timestamp: 1707084726972 - kind: conda name: libxml2 version: 2.12.5 @@ -10398,6 +15216,23 @@ packages: license_family: MIT size: 1567894 timestamp: 1707084720091 +- kind: conda + name: libzlib + version: 1.2.13 + build: h31becfc_5 + build_number: 5 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libzlib-1.2.13-h31becfc_5.conda + sha256: aeeefbb61e5e8227e53566d5e42dbb49e120eb99109996bf0dbfde8f180747a7 + md5: b213aa87eea9491ef7b129179322e955 + depends: + - libgcc-ng >=12 + constrains: + - zlib 1.2.13 *_5 + license: Zlib + license_family: Other + size: 67036 + timestamp: 1686575148440 - kind: conda name: libzlib version: 1.2.13 @@ -10615,6 +15450,21 @@ packages: license_family: BSD size: 134235 timestamp: 1674728465431 +- kind: conda + name: lz4-c + version: 1.9.4 + build: hd600fc2_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/lz4-c-1.9.4-hd600fc2_0.conda + sha256: 076870eb72411f41c46598c7582a2f3f42ba94c526a2d60a0c8f70a0a7a64429 + md5: 500145a83ed07ce79c8cef24252f366b + depends: + - libgcc-ng >=12 + - libstdcxx-ng >=12 + license: BSD-2-Clause + license_family: BSD + size: 163770 + timestamp: 1674727020254 - kind: conda name: lz4-c version: 1.9.4 @@ -10710,7 +15560,7 @@ packages: name: markdown-it-py version: 3.0.0 build: pyhd8ed1ab_0 - subdir: win-64 + subdir: noarch noarch: python url: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-3.0.0-pyhd8ed1ab_0.conda sha256: c041b0eaf7a6af3344d5dd452815cdc148d6284fec25a4fa3f4263b3a021e962 @@ -10718,85 +15568,50 @@ packages: depends: - mdurl >=0.1,<1 - python >=3.8 - arch: x86_64 - platform: win license: MIT license_family: MIT + purls: + - pkg:pypi/markdown-it-py size: 64356 timestamp: 1686175179621 - kind: conda - name: markupsafe - version: 2.1.5 - build: py311h05b510d_0 - subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/markupsafe-2.1.5-py311h05b510d_0.conda - sha256: 3f2127bd8788dc4b7c3d6d65ae4b7d2f8c7d02a246fc17b819390edeca53fd93 - md5: a27177455a9d29f4ac9d687a489e5d52 - depends: - - python >=3.11,<3.12.0a0 - - python >=3.11,<3.12.0a0 *_cpython - - python_abi 3.11.* *_cp311 - constrains: - - jinja2 >=3.0.0 - license: BSD-3-Clause - license_family: BSD - size: 26578 - timestamp: 1706900556332 -- kind: conda - name: markupsafe - version: 2.1.5 - build: py311h459d7ec_0 - subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/markupsafe-2.1.5-py311h459d7ec_0.conda - sha256: 14912e557a6576e03f65991be89e9d289c6e301921b6ecfb4e7186ba974f453d - md5: a322b4185121935c871d201ae00ac143 - depends: - - libgcc-ng >=12 - - python >=3.11,<3.12.0a0 - - python_abi 3.11.* *_cp311 - constrains: - - jinja2 >=3.0.0 - license: BSD-3-Clause - license_family: BSD - size: 27502 - timestamp: 1706900084436 -- kind: conda - name: markupsafe - version: 2.1.5 - build: py311ha68e1ae_0 + name: markdown-it-py + version: 3.0.0 + build: pyhd8ed1ab_0 subdir: win-64 - url: https://conda.anaconda.org/conda-forge/win-64/markupsafe-2.1.5-py311ha68e1ae_0.conda - sha256: c629f79fe78b5df7f08daa6b7f125f7a67f789bf734949c6d68aa063d7296208 - md5: 07da1326e2837e055ef6f44ef3334b0a + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-3.0.0-pyhd8ed1ab_0.conda + sha256: c041b0eaf7a6af3344d5dd452815cdc148d6284fec25a4fa3f4263b3a021e962 + md5: 93a8e71256479c62074356ef6ebf501b depends: - - python >=3.11,<3.12.0a0 - - python_abi 3.11.* *_cp311 - - ucrt >=10.0.20348.0 - - vc >=14.2,<15 - - vc14_runtime >=14.29.30139 - constrains: - - jinja2 >=3.0.0 - license: BSD-3-Clause - license_family: BSD - size: 30011 - timestamp: 1706900632904 + - mdurl >=0.1,<1 + - python >=3.8 + arch: x86_64 + platform: win + license: MIT + license_family: MIT + purls: + - pkg:pypi/markdown-it-py + size: 64356 + timestamp: 1686175179621 - kind: conda - name: markupsafe - version: 2.1.5 - build: py311he705e18_0 - subdir: osx-64 - url: https://conda.anaconda.org/conda-forge/osx-64/markupsafe-2.1.5-py311he705e18_0.conda - sha256: 83a2b764a4946a04e693a4dd8fe5a35bf093a378da9ce18bf0689cd5dcb3c3fe - md5: 75abe7e2e3a0874a49d7c175115f443f + name: maturin + version: 1.4.0 + build: py311h06e5ef9_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/maturin-1.4.0-py311h06e5ef9_0.conda + sha256: 2a24157cc1247c02bfbb7a7e214622035548ed9e5bef52bcff3b13e091286791 + md5: dc365d844be0acc4fc0e24d8b7f33f4a depends: + - libgcc-ng >=12 + - openssl >=3.2.0,<4.0a0 - python >=3.11,<3.12.0a0 - python_abi 3.11.* *_cp311 - constrains: - - jinja2 >=3.0.0 - license: BSD-3-Clause - license_family: BSD - size: 26155 - timestamp: 1706900211496 + - tomli >=1.1.0 + license: MIT + license_family: MIT + size: 6218103 + timestamp: 1701556894019 - kind: conda name: maturin version: 1.4.0 @@ -10883,6 +15698,8 @@ packages: platform: win license: MIT license_family: MIT + purls: + - pkg:pypi/mdurl size: 13707 timestamp: 1639515992326 - kind: conda @@ -10898,44 +15715,10 @@ packages: - python >=3.6 license: MIT license_family: MIT + purls: + - pkg:pypi/mdurl size: 14680 timestamp: 1704317789138 -- kind: conda - name: meilisearch - version: 1.5.1 - build: h5ef7bb8_0 - subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/meilisearch-1.5.1-h5ef7bb8_0.conda - sha256: c359718f193da18e77b7d19402d7453fa732978433ac562bbc86dfd17ef1bff8 - md5: 595899dbe10e2a0ab8e37f894f683082 - license: MIT - license_family: MIT - size: 81671718 - timestamp: 1702680633448 -- kind: conda - name: meilisearch - version: 1.5.1 - build: h8b8d39b_0 - subdir: win-64 - url: https://conda.anaconda.org/conda-forge/win-64/meilisearch-1.5.1-h8b8d39b_0.conda - sha256: 20d6cb4a77ef155a3dd86bc671681ed2c616dab96fd0a9a6aea0a85119411a12 - md5: 7e7bf2fea36389d2177cdca54df2d4ce - license: MIT - license_family: MIT - size: 80798614 - timestamp: 1702681657601 -- kind: conda - name: meilisearch - version: 1.5.1 - build: hc85fda4_0 - subdir: osx-64 - url: https://conda.anaconda.org/conda-forge/osx-64/meilisearch-1.5.1-hc85fda4_0.conda - sha256: b6545f77a15b4535f28f7b20d6d9cf957d06537a14e83ba159694effc6f546e2 - md5: d84149b3fce1ed6384959f7096a27877 - license: MIT - license_family: MIT - size: 81301310 - timestamp: 1702680502752 - kind: conda name: meilisearch version: 1.5.1 @@ -10999,6 +15782,8 @@ packages: platform: win license: MIT license_family: MIT + purls: + - pkg:pypi/more-itertools size: 53654 timestamp: 1691087125209 - kind: conda @@ -11014,6 +15799,8 @@ packages: - python >=3.8 license: MIT license_family: MIT + purls: + - pkg:pypi/more-itertools size: 54469 timestamp: 1704738585811 - kind: conda @@ -11086,6 +15873,26 @@ packages: license_family: MIT size: 9963457 timestamp: 1703184979309 +- kind: conda + name: mypy + version: 1.8.0 + build: py311hcd402e7_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/mypy-1.8.0-py311hcd402e7_0.conda + sha256: 2a1d84dc94a02ed3cae2fad6dfea0fab4a9504649c1a009d1fff7bfbd9d48e57 + md5: 22b4d0e0a591e6dba331d95f8a702517 + depends: + - libgcc-ng >=12 + - mypy_extensions >=1.0.0 + - psutil >=4.0 + - python >=3.11,<3.12.0a0 + - python >=3.11,<3.12.0a0 *_cpython + - python_abi 3.11.* *_cp311 + - typing_extensions >=4.1.0 + license: MIT + license_family: MIT + size: 15129179 + timestamp: 1703185374507 - kind: conda name: mypy version: 1.8.0 @@ -11104,6 +15911,23 @@ packages: license_family: MIT size: 11969071 timestamp: 1703184938293 +- kind: conda + name: mypy_extensions + version: 1.0.0 + build: pyha770c72_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/mypy_extensions-1.0.0-pyha770c72_0.conda + sha256: f240217476e148e825420c6bc3a0c0efb08c0718b7042fae960400c02af858a3 + md5: 4eccaeba205f0aed9ac3a9ea58568ca3 + depends: + - python >=3.5 + license: MIT + license_family: MIT + purls: + - pkg:pypi/mypy-extensions + size: 10492 + timestamp: 1675543414256 - kind: conda name: mypy_extensions version: 1.0.0 @@ -11119,8 +15943,24 @@ packages: platform: win license: MIT license_family: MIT + purls: + - pkg:pypi/mypy-extensions size: 10492 timestamp: 1675543414256 +- kind: conda + name: ncurses + version: '6.4' + build: h0425590_2 + build_number: 2 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/ncurses-6.4-h0425590_2.conda + sha256: d71cf2f2b1a9fae7ee2455a35a890423838e9594294beb4a002fe7c7b10bc086 + md5: 4ff0a396150dedad4269e16e5810f769 + depends: + - libgcc-ng >=12 + license: X11 AND BSD-3-Clause + size: 920540 + timestamp: 1698751239554 - kind: conda name: ncurses version: '6.4' @@ -11249,6 +16089,21 @@ packages: license_family: Apache size: 121284 timestamp: 1676837793132 +- kind: conda + name: ninja + version: 1.11.1 + build: hdd96247_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/ninja-1.11.1-hdd96247_0.conda + sha256: 2ba2e59f619c58d748f4b1b858502587691a7ed0fa9ac2c26ac04091908d95ae + md5: 58f4c67113cda9171e3c03d3e62731e1 + depends: + - libgcc-ng >=12 + - libstdcxx-ng >=12 + license: Apache-2.0 + license_family: Apache + size: 2398482 + timestamp: 1676839419214 - kind: conda name: ninja version: 1.11.1 @@ -11343,29 +16198,114 @@ packages: size: 15614862 timestamp: 1700389549489 - kind: conda - name: nox - version: 2021.10.1 - build: pyhd8ed1ab_0 + name: nodejs + version: 18.19.0 + build: h119ffd7_0 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/nodejs-18.19.0-h119ffd7_0.conda + sha256: 896ca8a8683f7d6c3402364f6d28bd00b9d3cb9acb88c85d2fc9ecefbbf4f7db + md5: 022ff05e89afedc3db2decb77a8af207 + depends: + - icu >=73.2,<74.0a0 + - libcxx >=14 + - libuv >=1.47.0,<1.48.0a0 + - libzlib >=1.2.13,<1.3.0a0 + - openssl >=3.2.1,<4.0a0 + - zlib + constrains: + - __osx >=10.15 + license: MIT + license_family: MIT + size: 11439181 + timestamp: 1707771884027 +- kind: conda + name: nodejs + version: 18.19.0 + build: h57928b3_0 subdir: win-64 - noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/nox-2021.10.1-pyhd8ed1ab_0.tar.bz2 - sha256: 2f453a747762a186a500c2dbbc8dd78bc717223725d3701686083e79b02aee50 - md5: c29de03dc9c5595cb011a6b2204c14f5 - depends: - - argcomplete >=1.9.4,<2.0 - - colorlog >=2.6.1,<5.0.0 - - importlib_metadata - - jinja2 + url: https://conda.anaconda.org/conda-forge/win-64/nodejs-18.19.0-h57928b3_0.conda + sha256: de01dd21f413e0e230b62082d5ee7f25b19b3c7296e1172c7cef94c9d36b8c38 + md5: 41ce77dc534e5bc71b0fc1687a89dcfd + license: MIT + license_family: MIT + size: 22479049 + timestamp: 1707403072267 +- kind: conda + name: nodejs + version: 18.19.0 + build: h5f47a4d_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/nodejs-18.19.0-h5f47a4d_0.conda + sha256: 1263d3c8aa9adaf4e11616dc05fb28cfdb761d70f2298959728f847688073240 + md5: 7798b881265f448c752fbae08e221b10 + depends: + - icu >=73.2,<74.0a0 + - libcxx >=14 + - libuv >=1.47.0,<1.48.0a0 + - libzlib >=1.2.13,<1.3.0a0 + - openssl >=3.2.1,<4.0a0 + - zlib + license: MIT + license_family: MIT + size: 10879191 + timestamp: 1707778803050 +- kind: conda + name: nodejs + version: 18.19.0 + build: hb753e55_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/nodejs-18.19.0-hb753e55_0.conda + sha256: d233fe4da686125c2b89d588349eccc78cdcb5a75a2b5b5bc9dc4d0c8c23eda1 + md5: 0b4a67051e3b3812818ccf2f4ee2fd4e + depends: + - __glibc >=2.17,<3.0.a0 + - icu >=73.2,<74.0a0 + - libgcc-ng >=12 + - libstdcxx-ng >=12 + - libuv >=1.46.0,<1.47.0a0 + - libzlib >=1.2.13,<1.3.0a0 + - openssl >=3.2.1,<4.0a0 + - zlib + license: MIT + license_family: MIT + size: 15917143 + timestamp: 1707407233064 +- kind: conda + name: nodejs + version: 18.19.0 + build: hc1f8a26_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/nodejs-18.19.0-hc1f8a26_0.conda + sha256: 161e061a43f9069c2fb7daab8ee3e442d9eb6cd27f332c5bd2e5746643030c72 + md5: b83df948ac353669bab45fa6efb4c312 + depends: + - icu >=73.2,<74.0a0 + - libgcc-ng >=12 + - libstdcxx-ng >=12 + - libuv >=1.46.0,<1.47.0a0 + - libzlib >=1.2.13,<1.3.0a0 + - openssl >=3.2.1,<4.0a0 + - zlib + license: MIT + license_family: MIT + size: 16126685 + timestamp: 1707414728922 +- kind: pypi + name: nox + version: 2024.3.2 + url: https://files.pythonhosted.org/packages/c2/55/c0d4ca1e6f68da8a1c7055ad80d4bf1fef651af08a68b52323cee97880c9/nox-2024.3.2-py3-none-any.whl + sha256: e53514173ac0b98dd47585096a55572fe504fecede58ced708979184d05440be + requires_dist: + - argcomplete <4.0, >=1.9.4 + - colorlog <7.0.0, >=2.6.1 + - importlib-metadata ; python_version < '3.8' - packaging >=20.9 - - py >=1.4.0,<2.0.0 - - python >=3.6 - - virtualenv >=14.0.0 - arch: x86_64 - platform: win - license: Apache-2.0 - license_family: Apache - size: 39937 - timestamp: 1633199959832 + - typing-extensions >=3.7.4 ; python_version < '3.8' + - virtualenv >=20.14.1 + - jinja2 ; extra == 'tox_to_nox' + - tox ; extra == 'tox_to_nox' + - uv ; extra == 'uv' + requires_python: '>=3.7' - kind: conda name: numpy version: 1.26.4 @@ -11387,6 +16327,8 @@ packages: - numpy-base <0a0 license: BSD-3-Clause license_family: BSD + purls: + - pkg:pypi/numpy size: 7104093 timestamp: 1707226459646 - kind: conda @@ -11409,8 +16351,35 @@ packages: - numpy-base <0a0 license: BSD-3-Clause license_family: BSD + purls: + - pkg:pypi/numpy size: 8065890 timestamp: 1707225944355 +- kind: conda + name: numpy + version: 1.26.4 + build: py311h69ead2a_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/numpy-1.26.4-py311h69ead2a_0.conda + sha256: 88800a1d9d11c2fccab09d40d36f7001616f5119eaf0ec86186562f33564e651 + md5: 3fd00dd400c8d3f9da12bf33061dd28d + depends: + - libblas >=3.9.0,<4.0a0 + - libcblas >=3.9.0,<4.0a0 + - libgcc-ng >=12 + - liblapack >=3.9.0,<4.0a0 + - libstdcxx-ng >=12 + - python >=3.11,<3.12.0a0 + - python >=3.11,<3.12.0a0 *_cpython + - python_abi 3.11.* *_cp311 + constrains: + - numpy-base <0a0 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/numpy + size: 7234391 + timestamp: 1707225781489 - kind: conda name: numpy version: 1.26.4 @@ -11431,6 +16400,8 @@ packages: - numpy-base <0a0 license: BSD-3-Clause license_family: BSD + purls: + - pkg:pypi/numpy size: 6652352 timestamp: 1707226297967 - kind: conda @@ -11452,6 +16423,8 @@ packages: - numpy-base <0a0 license: BSD-3-Clause license_family: BSD + purls: + - pkg:pypi/numpy size: 7504319 timestamp: 1707226235372 - kind: conda @@ -11470,6 +16443,23 @@ packages: license_family: Apache size: 2862719 timestamp: 1706635779319 +- kind: conda + name: openssl + version: 3.2.1 + build: h31becfc_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/openssl-3.2.1-h31becfc_0.conda + sha256: 952ef5de4e3913621a89ca2eb8186683bb73832527219c6443c260a6b46cd149 + md5: b7e7c53240214ae96f52a440c0b0126a + depends: + - ca-certificates + - libgcc-ng >=12 + constrains: + - pyopenssl >=22.1 + license: Apache-2.0 + license_family: Apache + size: 3382700 + timestamp: 1706635800272 - kind: conda name: openssl version: 3.2.1 @@ -11602,77 +16592,175 @@ packages: - lz4-c >=1.9.3,<1.10.0a0 - snappy >=1.1.10,<2.0a0 - zstd >=1.5.5,<1.6.0a0 - arch: x86_64 - platform: linux + arch: x86_64 + platform: linux + license: Apache-2.0 + license_family: Apache + size: 1018308 + timestamp: 1700372809593 +- kind: conda + name: orc + version: 1.9.2 + build: h798d188_2 + build_number: 2 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/orc-1.9.2-h798d188_2.conda + sha256: eb45795b9d965fe7c066d283a72a883697bc9940d6696b641073d53a332bfa94 + md5: f09fc67b7de2e85b573b929fab0af059 + depends: + - libcxx >=16 + - libprotobuf >=4.25.2,<4.25.3.0a0 + - libzlib >=1.2.13,<1.3.0a0 + - lz4-c >=1.9.3,<1.10.0a0 + - snappy >=1.1.10,<2.0a0 + - zstd >=1.5.5,<1.6.0a0 + license: Apache-2.0 + license_family: Apache + size: 407007 + timestamp: 1708632909550 +- kind: conda + name: orc + version: 1.9.2 + build: h7c018df_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/orc-1.9.2-h7c018df_0.conda + sha256: b1ad0f09dc69a8956079371d9853534f991f8311352e4e21503e6e5d20e4017b + md5: 1ef4159e9686d95ce8ea9f1d4d999f29 + depends: + - __osx >=10.9 + - libcxx >=16.0.6 + - libprotobuf >=4.24.4,<4.24.5.0a0 + - libzlib >=1.2.13,<1.3.0a0 + - lz4-c >=1.9.3,<1.10.0a0 + - snappy >=1.1.10,<2.0a0 + - zstd >=1.5.5,<1.6.0a0 + arch: aarch64 + platform: osx + license: Apache-2.0 + license_family: Apache + size: 405599 + timestamp: 1700373052638 +- kind: conda + name: orc + version: 1.9.2 + build: h9ab30d4_0 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/orc-1.9.2-h9ab30d4_0.conda + sha256: a948db80c0b756db07abce1972d6b8d1a08a7ced5a687b02435348c81443de08 + md5: 8fb76f7b135aec885cfe47c52b2eb4b5 + depends: + - __osx >=10.13 + - __osx >=10.9 + - libcxx >=16.0.6 + - libprotobuf >=4.24.4,<4.24.5.0a0 + - libzlib >=1.2.13,<1.3.0a0 + - lz4-c >=1.9.3,<1.10.0a0 + - snappy >=1.1.10,<2.0a0 + - zstd >=1.5.5,<1.6.0a0 + arch: x86_64 + platform: osx + license: Apache-2.0 + license_family: Apache + size: 423917 + timestamp: 1700373043647 +- kind: conda + name: orc + version: 2.0.0 + build: h1e5e2c1_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/orc-2.0.0-h1e5e2c1_0.conda + sha256: ed8cfe1f35e8ef703e540e7731e77fade1410bba406e17727a10dee08c37d5b4 + md5: 53e8f030579d34e1a36a735d527c021f + depends: + - libprotobuf >=4.25.3,<4.25.4.0a0 + - libzlib >=1.2.13,<1.3.0a0 + - lz4-c >=1.9.3,<1.10.0a0 + - snappy >=1.1.10,<2.0a0 + - zstd >=1.5.5,<1.6.0a0 + license: Apache-2.0 + license_family: Apache + size: 1028974 + timestamp: 1710232781925 +- kind: conda + name: orc + version: 2.0.0 + build: h3d3088e_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/orc-2.0.0-h3d3088e_0.conda + sha256: 6a1f553e2ea3d2df3c465b02c7ece5c001cc2d3afb1fe7e2678a7ff7a5a14168 + md5: a8e452c3f2b6fecfd86e8f2b72450a9b + depends: + - libcxx >=16 + - libprotobuf >=4.25.3,<4.25.4.0a0 + - libzlib >=1.2.13,<1.3.0a0 + - lz4-c >=1.9.3,<1.10.0a0 + - snappy >=1.1.10,<2.0a0 + - zstd >=1.5.5,<1.6.0a0 license: Apache-2.0 license_family: Apache - size: 1018308 - timestamp: 1700372809593 + size: 413922 + timestamp: 1710233361620 - kind: conda name: orc - version: 1.9.2 - build: h798d188_2 - build_number: 2 - subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/orc-1.9.2-h798d188_2.conda - sha256: eb45795b9d965fe7c066d283a72a883697bc9940d6696b641073d53a332bfa94 - md5: f09fc67b7de2e85b573b929fab0af059 + version: 2.0.0 + build: h6c6cd50_0 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/orc-2.0.0-h6c6cd50_0.conda + sha256: 0c198b6a8de238d53002e7c03e4b1e94e769cf388adac2717fdaadfee9381a14 + md5: 5ce58b9a5679fe6640d6d68228099ce9 depends: + - __osx >=10.13 - libcxx >=16 - - libprotobuf >=4.25.2,<4.25.3.0a0 + - libprotobuf >=4.25.3,<4.25.4.0a0 - libzlib >=1.2.13,<1.3.0a0 - lz4-c >=1.9.3,<1.10.0a0 - snappy >=1.1.10,<2.0a0 - zstd >=1.5.5,<1.6.0a0 license: Apache-2.0 license_family: Apache - size: 407007 - timestamp: 1708632909550 + size: 433224 + timestamp: 1710233383447 - kind: conda name: orc - version: 1.9.2 - build: h7c018df_0 - subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/orc-1.9.2-h7c018df_0.conda - sha256: b1ad0f09dc69a8956079371d9853534f991f8311352e4e21503e6e5d20e4017b - md5: 1ef4159e9686d95ce8ea9f1d4d999f29 + version: 2.0.0 + build: h75d905f_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/orc-2.0.0-h75d905f_0.conda + sha256: 32c843b4ce01d29ed04e81ea5c20d78051d47091c6a27b9f6e1eb7c428983b01 + md5: 7fb160bb1300a3043fec7e40d50e9aa6 depends: - - __osx >=10.9 - - libcxx >=16.0.6 - - libprotobuf >=4.24.4,<4.24.5.0a0 + - libgcc-ng >=12 + - libprotobuf >=4.25.3,<4.25.4.0a0 + - libstdcxx-ng >=12 - libzlib >=1.2.13,<1.3.0a0 - lz4-c >=1.9.3,<1.10.0a0 - snappy >=1.1.10,<2.0a0 - zstd >=1.5.5,<1.6.0a0 - arch: aarch64 - platform: osx license: Apache-2.0 license_family: Apache - size: 405599 - timestamp: 1700373052638 + size: 999580 + timestamp: 1710232876736 - kind: conda name: orc - version: 1.9.2 - build: h9ab30d4_0 - subdir: osx-64 - url: https://conda.anaconda.org/conda-forge/osx-64/orc-1.9.2-h9ab30d4_0.conda - sha256: a948db80c0b756db07abce1972d6b8d1a08a7ced5a687b02435348c81443de08 - md5: 8fb76f7b135aec885cfe47c52b2eb4b5 + version: 2.0.0 + build: heb0c069_0 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/orc-2.0.0-heb0c069_0.conda + sha256: 5a9c0904f38e5c2e1d1494bd192ff98fca13ca07ed1590497b16a801bef497a0 + md5: 2733034196c084cdc07e0facfea995ea depends: - - __osx >=10.13 - - __osx >=10.9 - - libcxx >=16.0.6 - - libprotobuf >=4.24.4,<4.24.5.0a0 + - libprotobuf >=4.25.3,<4.25.4.0a0 - libzlib >=1.2.13,<1.3.0a0 - lz4-c >=1.9.3,<1.10.0a0 - snappy >=1.1.10,<2.0a0 + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 - zstd >=1.5.5,<1.6.0a0 - arch: x86_64 - platform: osx license: Apache-2.0 license_family: Apache - size: 423917 - timestamp: 1700373043647 + size: 953672 + timestamp: 1710233287310 - kind: conda name: packaging version: '23.2' @@ -11688,8 +16776,27 @@ packages: platform: win license: Apache-2.0 license_family: APACHE + purls: + - pkg:pypi/packaging size: 49452 timestamp: 1696202521121 +- kind: conda + name: packaging + version: '24.0' + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/packaging-24.0-pyhd8ed1ab_0.conda + sha256: a390182d74c31dfd713c16db888c92c277feeb6d1fe96ff9d9c105f9564be48a + md5: 248f521b64ce055e7feae3105e7abeb8 + depends: + - python >=3.8 + license: Apache-2.0 + license_family: APACHE + purls: + - pkg:pypi/packaging + size: 49832 + timestamp: 1710076089469 - kind: conda name: patchelf version: 0.17.2 @@ -11720,6 +16827,8 @@ packages: platform: win license: MPL-2.0 license_family: MOZILLA + purls: + - pkg:pypi/pathspec size: 38649 timestamp: 1690598108100 - kind: conda @@ -11735,6 +16844,8 @@ packages: - python >=3.7 license: MPL-2.0 license_family: MOZILLA + purls: + - pkg:pypi/pathspec size: 41173 timestamp: 1702250135032 - kind: conda @@ -11754,6 +16865,8 @@ packages: platform: win license: MIT license_family: MIT + purls: + - pkg:pypi/pip size: 1386212 timestamp: 1690024763393 - kind: conda @@ -11771,6 +16884,8 @@ packages: - wheel license: MIT license_family: MIT + purls: + - pkg:pypi/pip size: 1398245 timestamp: 1706960660581 - kind: conda @@ -11789,6 +16904,8 @@ packages: platform: win license: MIT license_family: MIT + purls: + - pkg:pypi/platformdirs size: 19985 timestamp: 1696272419779 - kind: conda @@ -11804,6 +16921,8 @@ packages: - python >=3.8 license: MIT license_family: MIT + purls: + - pkg:pypi/platformdirs size: 20210 timestamp: 1706713564353 - kind: conda @@ -11821,6 +16940,8 @@ packages: platform: win license: MIT license_family: MIT + purls: + - pkg:pypi/pluggy size: 22548 timestamp: 1693086745921 - kind: conda @@ -11836,6 +16957,8 @@ packages: - python >=3.8 license: MIT license_family: MIT + purls: + - pkg:pypi/pluggy size: 23384 timestamp: 1706116931972 - kind: conda @@ -11884,6 +17007,21 @@ packages: license_family: MIT size: 12979886 timestamp: 1691677482320 +- kind: conda + name: prettier + version: 2.8.8 + build: hc2da131_1 + build_number: 1 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/prettier-2.8.8-hc2da131_1.conda + sha256: 92edf0f0b6b5464ba65c16cdd4c9c589904d702f31cfa3da083d2e9148a208ac + md5: 76323f2eb984976e77da9b357f488a6b + depends: + - nodejs >=18.16.1,<19.0a0 + license: MIT + license_family: MIT + size: 12873889 + timestamp: 1691677118975 - kind: conda name: prettier version: 2.8.8 @@ -11913,6 +17051,8 @@ packages: - python_abi 3.11.* *_cp311 license: BSD-3-Clause license_family: BSD + purls: + - pkg:pypi/psutil size: 513415 timestamp: 1705722847446 - kind: conda @@ -11929,6 +17069,8 @@ packages: - python_abi 3.11.* *_cp311 license: BSD-3-Clause license_family: BSD + purls: + - pkg:pypi/psutil size: 505516 timestamp: 1705722586221 - kind: conda @@ -11947,8 +17089,29 @@ packages: - vc14_runtime >=14.29.30139 license: BSD-3-Clause license_family: BSD + purls: + - pkg:pypi/psutil size: 520242 timestamp: 1705723070638 +- kind: conda + name: psutil + version: 5.9.8 + build: py311hcd402e7_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/psutil-5.9.8-py311hcd402e7_0.conda + sha256: d04efc76d734ac2f1e00f52e3385ba80b089becf60aaae52f0edf185ca9f69e0 + md5: 858767f880caa447ae640a991ec5ba9e + depends: + - libgcc-ng >=12 + - python >=3.11,<3.12.0a0 + - python >=3.11,<3.12.0a0 *_cpython + - python_abi 3.11.* *_cp311 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/psutil + size: 506604 + timestamp: 1705722743163 - kind: conda name: psutil version: 5.9.8 @@ -11962,6 +17125,8 @@ packages: - python_abi 3.11.* *_cp311 license: BSD-3-Clause license_family: BSD + purls: + - pkg:pypi/psutil size: 513371 timestamp: 1705722716862 - kind: conda @@ -11979,22 +17144,35 @@ packages: size: 144301 timestamp: 1537755684331 - kind: conda - name: py - version: 1.11.0 - build: pyh6c4a22f_0 - subdir: win-64 - noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/py-1.11.0-pyh6c4a22f_0.tar.bz2 - sha256: 268be33a290e3d51467ab29cbb5a80cf79f69dade2f2dead25d7f80d76c3543a - md5: b4613d7e7a493916d867842a6a148054 - depends: - - python >=2.7 - arch: x86_64 - platform: win - license: MIT - license_family: MIT - size: 76038 - timestamp: 1636301988765 + name: pyarrow + version: 14.0.2 + build: py311h1eb6f34_12_cpu + build_number: 12 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/pyarrow-14.0.2-py311h1eb6f34_12_cpu.conda + sha256: b8946dd95fe52d3b11332738f9a14191590d7c53820de424e43209ed7b94066c + md5: f99ad4baaa57ab44e9af3aaa89c7bfc3 + depends: + - libarrow 14.0.2 h25df049_12_cpu + - libarrow-acero 14.0.2 h2f0025b_12_cpu + - libarrow-dataset 14.0.2 h2f0025b_12_cpu + - libarrow-flight 14.0.2 h2f4a9e5_12_cpu + - libarrow-flight-sql 14.0.2 hc81a7a7_12_cpu + - libarrow-gandiva 14.0.2 h3a2b1eb_12_cpu + - libarrow-substrait 14.0.2 hd45466a_12_cpu + - libgcc-ng >=12 + - libparquet 14.0.2 hb18b541_12_cpu + - libstdcxx-ng >=12 + - numpy >=1.23.5,<2.0a0 + - python >=3.11,<3.12.0a0 + - python >=3.11,<3.12.0a0 *_cpython + - python_abi 3.11.* *_cp311 + constrains: + - apache-arrow-proc =*=cpu + license: Apache-2.0 + license_family: APACHE + size: 4398440 + timestamp: 1710295377459 - kind: conda name: pyarrow version: 14.0.2 @@ -12024,6 +17202,35 @@ packages: license_family: APACHE size: 4524767 timestamp: 1708692350829 +- kind: conda + name: pyarrow + version: 14.0.2 + build: py311h39c9aba_13_cpu + build_number: 13 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/pyarrow-14.0.2-py311h39c9aba_13_cpu.conda + sha256: 2eef5e752f71b9a2f74491e0f9d3c9e58761f179f8198cb8d710627ca3e9a13d + md5: e95c99f69395f1a43582de9b0d35a553 + depends: + - libarrow 14.0.2 h6bfc85a_13_cpu + - libarrow-acero 14.0.2 h59595ed_13_cpu + - libarrow-dataset 14.0.2 h59595ed_13_cpu + - libarrow-flight 14.0.2 hc6145d9_13_cpu + - libarrow-flight-sql 14.0.2 h757c851_13_cpu + - libarrow-gandiva 14.0.2 hb016d2e_13_cpu + - libarrow-substrait 14.0.2 h757c851_13_cpu + - libgcc-ng >=12 + - libparquet 14.0.2 h352af49_13_cpu + - libstdcxx-ng >=12 + - numpy >=1.23.5,<2.0a0 + - python >=3.11,<3.12.0a0 + - python_abi 3.11.* *_cp311 + constrains: + - apache-arrow-proc =*=cpu + license: Apache-2.0 + license_family: APACHE + size: 4543451 + timestamp: 1710347598355 - kind: conda name: pyarrow version: 14.0.2 @@ -12081,6 +17288,34 @@ packages: license_family: APACHE size: 4009410 timestamp: 1708691836141 +- kind: conda + name: pyarrow + version: 14.0.2 + build: py311h54e7ce8_13_cpu + build_number: 13 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/pyarrow-14.0.2-py311h54e7ce8_13_cpu.conda + sha256: 543f8b4e7cc6453b64b0dd20b43ac312cc61fe28e10869f04edf5ee29214ce13 + md5: 9b4945755f71df2d66e2e9af881b4b0c + depends: + - libarrow 14.0.2 he79e29d_13_cpu + - libarrow-acero 14.0.2 h000cb23_13_cpu + - libarrow-dataset 14.0.2 h000cb23_13_cpu + - libarrow-flight 14.0.2 h2382776_13_cpu + - libarrow-flight-sql 14.0.2 h7e3fe20_13_cpu + - libarrow-gandiva 14.0.2 ha5acb15_13_cpu + - libarrow-substrait 14.0.2 h7e3fe20_13_cpu + - libcxx >=14 + - libparquet 14.0.2 h381d950_13_cpu + - numpy >=1.23.5,<2.0a0 + - python >=3.11,<3.12.0a0 + - python_abi 3.11.* *_cp311 + constrains: + - apache-arrow-proc =*=cpu + license: Apache-2.0 + license_family: APACHE + size: 4020354 + timestamp: 1710348158705 - kind: conda name: pyarrow version: 14.0.2 @@ -12139,6 +17374,36 @@ packages: license_family: APACHE size: 3465525 timestamp: 1708693288111 +- kind: conda + name: pyarrow + version: 14.0.2 + build: py311h6a6099b_13_cpu + build_number: 13 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/pyarrow-14.0.2-py311h6a6099b_13_cpu.conda + sha256: 76d0f17e140cb3f22adefe568fa6fb5b0eaec250dc22306d4da21b8ce5869260 + md5: b22193a1d8c2d28f6c3dbb94da33147d + depends: + - libarrow 14.0.2 h2a83f13_13_cpu + - libarrow-acero 14.0.2 h63175ca_13_cpu + - libarrow-dataset 14.0.2 h63175ca_13_cpu + - libarrow-flight 14.0.2 h02312f3_13_cpu + - libarrow-flight-sql 14.0.2 h55b4db4_13_cpu + - libarrow-gandiva 14.0.2 hcb01e45_13_cpu + - libarrow-substrait 14.0.2 h89268de_13_cpu + - libparquet 14.0.2 h7ec3a38_13_cpu + - numpy >=1.23.5,<2.0a0 + - python >=3.11,<3.12.0a0 + - python_abi 3.11.* *_cp311 + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + constrains: + - apache-arrow-proc =*=cpu + license: Apache-2.0 + license_family: APACHE + size: 3470330 + timestamp: 1710349686722 - kind: conda name: pyarrow version: 14.0.2 @@ -12168,6 +17433,35 @@ packages: license_family: APACHE size: 4094429 timestamp: 1708693258443 +- kind: conda + name: pyarrow + version: 14.0.2 + build: py311hd7bc329_13_cpu + build_number: 13 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/pyarrow-14.0.2-py311hd7bc329_13_cpu.conda + sha256: 077d688f4c748f99760d7b8555c6ecf0c071381d2978032316d0c50389a083a0 + md5: fdd086b17f9ae33004bdd1991ccb1321 + depends: + - libarrow 14.0.2 h5233fb5_13_cpu + - libarrow-acero 14.0.2 h13dd4ca_13_cpu + - libarrow-dataset 14.0.2 h13dd4ca_13_cpu + - libarrow-flight 14.0.2 h95ca633_13_cpu + - libarrow-flight-sql 14.0.2 hdc5392b_13_cpu + - libarrow-gandiva 14.0.2 hfef958d_13_cpu + - libarrow-substrait 14.0.2 hef52601_13_cpu + - libcxx >=14 + - libparquet 14.0.2 hf6ce1d5_13_cpu + - numpy >=1.23.5,<2.0a0 + - python >=3.11,<3.12.0a0 + - python >=3.11,<3.12.0a0 *_cpython + - python_abi 3.11.* *_cp311 + constrains: + - apache-arrow-proc =*=cpu + license: Apache-2.0 + license_family: APACHE + size: 4084630 + timestamp: 1710348774061 - kind: conda name: pyarrow version: 14.0.2 @@ -12212,6 +17506,8 @@ packages: platform: win license: BSD-2-Clause license_family: BSD + purls: + - pkg:pypi/pygments size: 853439 timestamp: 1691408777841 - kind: conda @@ -12227,6 +17523,8 @@ packages: - python >=3.7 license: BSD-2-Clause license_family: BSD + purls: + - pkg:pypi/pygments size: 860425 timestamp: 1700608076927 - kind: conda @@ -12252,6 +17550,8 @@ packages: platform: win license: MIT license_family: MIT + purls: + - pkg:pypi/pytest size: 244691 timestamp: 1694128618921 - kind: conda @@ -12275,8 +17575,35 @@ packages: - pytest-faulthandler >=2 license: MIT license_family: MIT + purls: + - pkg:pypi/pytest size: 251713 timestamp: 1706448088334 +- kind: conda + name: pytest + version: 8.1.1 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/pytest-8.1.1-pyhd8ed1ab_0.conda + sha256: 3c481d6b54af1a33c32a3f3eaa3e0971955431e7023db55808740cd062271c73 + md5: 94ff09cdedcb7b17e9cd5097ee2cfcff + depends: + - colorama + - exceptiongroup >=1.0.0rc8 + - iniconfig + - packaging + - pluggy <2.0,>=1.4 + - python >=3.8 + - tomli >=1 + constrains: + - pytest-faulthandler >=2 + license: MIT + license_family: MIT + purls: + - pkg:pypi/pytest + size: 255523 + timestamp: 1709992719691 - kind: conda name: python version: 3.11.8 @@ -12303,6 +17630,36 @@ packages: license: Python-2.0 size: 18096526 timestamp: 1708116524168 +- kind: conda + name: python + version: 3.11.8 + build: h43d1f9e_0_cpython + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/python-3.11.8-h43d1f9e_0_cpython.conda + sha256: 4dbd3ac5f760cbf8c613df0a29d970ed1e8235101be1fa74ccd833300661706f + md5: fec01f7d8fdfec9c4881a1c9bdbc959e + depends: + - bzip2 >=1.0.8,<2.0a0 + - ld_impl_linux-aarch64 >=2.36.1 + - libexpat >=2.5.0,<3.0a0 + - libffi >=3.4,<4.0a0 + - libgcc-ng >=12 + - libnsl >=2.0.1,<2.1.0a0 + - libsqlite >=3.45.1,<4.0a0 + - libuuid >=2.38.1,<3.0a0 + - libxcrypt >=4.4.36 + - libzlib >=1.2.13,<1.3.0a0 + - ncurses >=6.4,<7.0a0 + - openssl >=3.2.1,<4.0a0 + - readline >=8.2,<9.0a0 + - tk >=8.6.13,<8.7.0a0 + - tzdata + - xz >=5.2.6,<6.0a0 + constrains: + - python_abi 3.11.* *_cp311 + license: Python-2.0 + size: 15317480 + timestamp: 1708116052369 - kind: conda name: python version: 3.11.8 @@ -12398,6 +17755,21 @@ packages: license_family: BSD size: 6385 timestamp: 1695147338551 +- kind: conda + name: python_abi + version: '3.11' + build: 4_cp311 + build_number: 4 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/python_abi-3.11-4_cp311.conda + sha256: 135a21de5721a2667613529b4ac50a9454979bf969fa99d74b6e5ad9a4ff284d + md5: 89983f987dfee288f94ddb2ee550ea60 + constrains: + - python 3.11.* *_cpython + license: BSD-3-Clause + license_family: BSD + size: 6384 + timestamp: 1695147390555 - kind: conda name: python_abi version: '3.11' @@ -12462,6 +17834,23 @@ packages: license_family: BSD size: 3735644 timestamp: 1684785130341 +- kind: conda + name: rdma-core + version: '50.0' + build: h0425590_1 + build_number: 1 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/rdma-core-50.0-h0425590_1.conda + sha256: 146c5f5c0162b39508b0f8d5b87e01e788ff6d553165e901e813afbf3b81ab50 + md5: 0e2cbcc4194d73065fcad8a4fb049893 + depends: + - libgcc-ng >=12 + - libnl >=3.9.0,<4.0a0 + - libstdcxx-ng >=12 + license: Linux-OpenIB + license_family: BSD + size: 4744617 + timestamp: 1710157969911 - kind: conda name: rdma-core version: '50.0' @@ -12479,6 +17868,24 @@ packages: license_family: BSD size: 4724921 timestamp: 1706524445013 +- kind: conda + name: rdma-core + version: '50.0' + build: hd3aeb46_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/rdma-core-50.0-hd3aeb46_1.conda + sha256: 85e38508eb4921e53cf1cb97435f9c9408ea2ddc582c6588ec50f3f3ec3abdc0 + md5: f462219598fcf46c0cdfb985c3482b4f + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc-ng >=12 + - libnl >=3.9.0,<4.0a0 + - libstdcxx-ng >=12 + license: Linux-OpenIB + license_family: BSD + size: 4713842 + timestamp: 1710157799992 - kind: conda name: re2 version: 2023.06.02 @@ -12551,6 +17958,21 @@ packages: license_family: BSD size: 26617 timestamp: 1708946796423 +- kind: conda + name: re2 + version: 2023.09.01 + build: h9caee61_2 + build_number: 2 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/re2-2023.09.01-h9caee61_2.conda + sha256: 31db9c598bfa7586ac2e3ba06681d676caa5d252b5b68f4b6173edc71f70681e + md5: a9667ab785e1686d53313364c695f58e + depends: + - libre2-11 2023.09.01 h9d008c2_2 + license: BSD-3-Clause + license_family: BSD + size: 26726 + timestamp: 1708946863063 - kind: conda name: re2 version: 2023.09.01 @@ -12597,6 +18019,22 @@ packages: license_family: GPL size: 281456 timestamp: 1679532220005 +- kind: conda + name: readline + version: '8.2' + build: h8fc344f_1 + build_number: 1 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/readline-8.2-h8fc344f_1.conda + sha256: 4c99f7417419734e3797d45bc355e61c26520e111893b0d7087a01a7fbfbe3dd + md5: 105eb1e16bf83bfb2eb380a48032b655 + depends: + - libgcc-ng >=12 + - ncurses >=6.3,<7.0a0 + license: GPL-3.0-only + license_family: GPL + size: 294092 + timestamp: 1679532238805 - kind: conda name: readline version: '8.2' @@ -12639,6 +18077,20 @@ packages: license_family: MIT size: 177229 timestamp: 1693456080514 +- kind: conda + name: rhash + version: 1.4.4 + build: h31becfc_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/rhash-1.4.4-h31becfc_0.conda + sha256: 11c44602ac8f3054da83bfcfff0d8e04e83e231b51b0f8c660ff007669de14ff + md5: 8e4df96fa39923f420006095785a0e4b + depends: + - libgcc-ng >=12 + license: MIT + license_family: MIT + size: 199565 + timestamp: 1693455889616 - kind: conda name: rhash version: 1.4.4 @@ -12703,6 +18155,24 @@ packages: license_family: MIT size: 184071 timestamp: 1700160247583 +- kind: conda + name: rich + version: 13.7.1 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/rich-13.7.1-pyhd8ed1ab_0.conda + sha256: 2b26d58aa59e46f933c3126367348651b0dab6e0bf88014e857415bb184a4667 + md5: ba445bf767ae6f0d959ff2b40c20912b + depends: + - markdown-it-py >=2.2.0 + - pygments >=2.13.0,<3.0.0 + - python >=3.7.0 + - typing_extensions >=4.0.0,<5.0.0 + license: MIT + license_family: MIT + size: 184347 + timestamp: 1709150578093 - kind: conda name: ruff version: 0.2.2 @@ -12718,6 +18188,8 @@ packages: - python_abi 3.11.* *_cp311 license: MIT license_family: MIT + purls: + - pkg:pypi/ruff size: 5717696 timestamp: 1708223090811 - kind: conda @@ -12737,6 +18209,8 @@ packages: - __osx >=11.0 license: MIT license_family: MIT + purls: + - pkg:pypi/ruff size: 5280983 timestamp: 1708223865116 - kind: conda @@ -12755,8 +18229,30 @@ packages: - vc14_runtime >=14.29.30139 license: MIT license_family: MIT + purls: + - pkg:pypi/ruff size: 5662517 timestamp: 1708224151838 +- kind: conda + name: ruff + version: 0.2.2 + build: py311he69e3a7_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/ruff-0.2.2-py311he69e3a7_0.conda + sha256: 79692d93fd01d2600aad350d34efa4faae33b87f35acce1560de61b4f14cc597 + md5: d43da3e0a735527d540d7f8947ee179b + depends: + - libgcc-ng >=12 + - libstdcxx-ng >=12 + - python >=3.11,<3.12.0a0 + - python >=3.11,<3.12.0a0 *_cpython + - python_abi 3.11.* *_cp311 + license: MIT + license_family: MIT + purls: + - pkg:pypi/ruff + size: 5439861 + timestamp: 1708223383662 - kind: conda name: ruff version: 0.2.2 @@ -12773,6 +18269,8 @@ packages: - __osx >=10.12 license: MIT license_family: MIT + purls: + - pkg:pypi/ruff size: 5540591 timestamp: 1708224008985 - kind: conda @@ -12807,6 +18305,53 @@ packages: license_family: Apache size: 337907 timestamp: 1708664518615 +- kind: conda + name: s2n + version: 1.4.5 + build: h5a25046_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/s2n-1.4.5-h5a25046_0.conda + sha256: a72687e4bab7c9a0f2b502335f93daa84e3a8fcec0787e08923a62607cf01191 + md5: a7fa2e8f06035a24564ff3a7b84d2bd3 + depends: + - libgcc-ng >=12 + - openssl >=3.2.1,<4.0a0 + license: Apache-2.0 + license_family: Apache + size: 333810 + timestamp: 1708664562153 +- kind: conda + name: s2n + version: 1.4.6 + build: h06160fa_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/s2n-1.4.6-h06160fa_0.conda + sha256: 2d03e27d607e3b797ada1ab805deebdd321c3ec99c1581188ac22041c06fd7b6 + md5: 88350a8ea5a9aa734b8b553bfd2ff78c + depends: + - libgcc-ng >=12 + - openssl >=3.2.1,<4.0a0 + license: Apache-2.0 + license_family: Apache + size: 339401 + timestamp: 1709937040957 +- kind: conda + name: semver + version: 2.13.0 + build: pyh9f0ad1d_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/semver-2.13.0-pyh9f0ad1d_0.tar.bz2 + sha256: 673ef5ef04cef60c3584b1d9b81024646b9d9a4c50749356c7ba5cede755e61d + md5: 2cab9f3a9683cb40a2176ccaf76e66c6 + depends: + - python + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/semver + size: 15712 + timestamp: 1603697876069 - kind: conda name: semver version: 2.13.0 @@ -12822,6 +18367,8 @@ packages: platform: win license: BSD-3-Clause license_family: BSD + purls: + - pkg:pypi/semver size: 15712 timestamp: 1603697876069 - kind: conda @@ -12839,6 +18386,8 @@ packages: platform: win license: MIT license_family: MIT + purls: + - pkg:pypi/setuptools size: 464399 timestamp: 1694548452441 - kind: conda @@ -12854,8 +18403,27 @@ packages: - python >=3.7 license: MIT license_family: MIT + purls: + - pkg:pypi/setuptools size: 470548 timestamp: 1704224855187 +- kind: conda + name: setuptools + version: 69.2.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/setuptools-69.2.0-pyhd8ed1ab_0.conda + sha256: 78a75c75a5dacda6de5f4056c9c990141bdaf4f64245673a590594d00bc63713 + md5: da214ecd521a720a9d521c68047682dc + depends: + - python >=3.8 + license: MIT + license_family: MIT + purls: + - pkg:pypi/setuptools + size: 471183 + timestamp: 1710344615844 - kind: conda name: sigtool version: 0.1.3 @@ -12884,6 +18452,23 @@ packages: license_family: MIT size: 213817 timestamp: 1643442169866 +- kind: conda + name: smmap + version: 5.0.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/smmap-5.0.0-pyhd8ed1ab_0.tar.bz2 + sha256: 23011cb3e064525bdb8787c75126a2e78d2344a72cd6773922006d1da1f2af16 + md5: 62f26a3d1387acee31322208f0cfa3e0 + depends: + - python >=3.5 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/smmap + size: 22483 + timestamp: 1634310465482 - kind: conda name: smmap version: 5.0.0 @@ -12899,6 +18484,8 @@ packages: platform: win license: BSD-3-Clause license_family: BSD + purls: + - pkg:pypi/smmap size: 22483 timestamp: 1634310465482 - kind: conda @@ -12944,6 +18531,21 @@ packages: license_family: BSD size: 38865 timestamp: 1678534590321 +- kind: conda + name: snappy + version: 1.1.10 + build: he8610fa_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/snappy-1.1.10-he8610fa_0.conda + sha256: 5a7d6cf781cbaaea4effce4d8f2677cd6173af5e8b744912e1283a704eb91946 + md5: 11c25e55894bb8207a81a87e6a32b6e7 + depends: + - libgcc-ng >=12 + - libstdcxx-ng >=12 + license: BSD-3-Clause + license_family: BSD + size: 38265 + timestamp: 1678534683114 - kind: conda name: snappy version: 1.1.10 @@ -13095,6 +18697,21 @@ packages: license_family: APACHE size: 161382 timestamp: 1706164225098 +- kind: conda + name: tk + version: 8.6.13 + build: h194ca79_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/tk-8.6.13-h194ca79_0.conda + sha256: 7fa27cc512d3a783f38bd16bbbffc008807372499d5b65d089a8e43bde9db267 + md5: f75105e0585851f818e0009dd1dde4dc + depends: + - libgcc-ng >=12 + - libzlib >=1.2.13,<1.3.0a0 + license: TCL + license_family: BSD + size: 3351802 + timestamp: 1695506242997 - kind: conda name: tk version: 8.6.13 @@ -13225,6 +18842,23 @@ packages: license_family: BSD size: 3318875 timestamp: 1699202167581 +- kind: conda + name: tomli + version: 2.0.1 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/tomli-2.0.1-pyhd8ed1ab_0.tar.bz2 + sha256: 4cd48aba7cd026d17e86886af48d0d2ebc67ed36f87f6534f4b67138f5a5a58f + md5: 5844808ffab9ebdb694585b50ba02a96 + depends: + - python >=3.7 + license: MIT + license_family: MIT + purls: + - pkg:pypi/tomli + size: 15940 + timestamp: 1644342331069 - kind: conda name: tomli version: 2.0.1 @@ -13240,8 +18874,27 @@ packages: platform: win license: MIT license_family: MIT + purls: + - pkg:pypi/tomli size: 15940 timestamp: 1644342331069 +- kind: conda + name: tomlkit + version: 0.12.3 + build: pyha770c72_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/tomlkit-0.12.3-pyha770c72_0.conda + sha256: 53cc436ab92d38683df1320e4468a8b978428e800195bf1c8c2460e90b0bc117 + md5: 074d0ce7a6261ab8b497c3518796ef3e + depends: + - python >=3.7 + license: MIT + license_family: MIT + purls: + - pkg:pypi/tomlkit + size: 37132 + timestamp: 1700046842169 - kind: conda name: tomlkit version: 0.12.3 @@ -13257,6 +18910,8 @@ packages: platform: win license: MIT license_family: MIT + purls: + - pkg:pypi/tomlkit size: 37132 timestamp: 1700046842169 - kind: conda @@ -13291,6 +18946,8 @@ packages: platform: win license: PSF-2.0 license_family: PSF + purls: + - pkg:pypi/typing-extensions size: 35108 timestamp: 1695040948828 - kind: conda @@ -13306,8 +18963,27 @@ packages: - python >=3.8 license: PSF-2.0 license_family: PSF + purls: + - pkg:pypi/typing-extensions size: 36058 timestamp: 1702176292645 +- kind: conda + name: typing_extensions + version: 4.10.0 + build: pyha770c72_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.10.0-pyha770c72_0.conda + sha256: 4be24d557897b2f6609f5d5f7c437833c62f4d4a96581e39530067e96a2d0451 + md5: 16ae769069b380646c47142d719ef466 + depends: + - python >=3.8 + license: PSF-2.0 + license_family: PSF + purls: + - pkg:pypi/typing-extensions + size: 37018 + timestamp: 1708904796013 - kind: conda name: typos version: 1.16.20 @@ -13426,6 +19102,77 @@ packages: license_family: MIT size: 3652168 timestamp: 1707161817201 +- kind: conda + name: typos + version: 1.19.0 + build: h11a7dfb_0 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/typos-1.19.0-h11a7dfb_0.conda + sha256: 79da26e5585382a4ec5dde9ba0d43435f0dd441e9f344ef99d12f2dab0117b74 + md5: 97b99652ce2673198b2ab73b7cf85c31 + constrains: + - __osx >=10.12 + license: MIT + license_family: MIT + size: 3305763 + timestamp: 1709332590675 +- kind: conda + name: typos + version: 1.19.0 + build: h1d8f897_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/typos-1.19.0-h1d8f897_0.conda + sha256: 3cb7579ee8924d3fb0ba10ae42620aec9f6decaf8499510910ce8052ba269b82 + md5: 1b4263817ba9418e1c6bd7547028eef3 + depends: + - libgcc-ng >=12 + license: MIT + license_family: MIT + size: 3607084 + timestamp: 1709332306391 +- kind: conda + name: typos + version: 1.19.0 + build: h5ef7bb8_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/typos-1.19.0-h5ef7bb8_0.conda + sha256: d73ae2b63301e440049a9b0f78c9b6747d9ef1a6be360a5856ab77c6cefceca7 + md5: 8516e396a23de65bad5066799fdbecf2 + constrains: + - __osx >=11.0 + license: MIT + license_family: MIT + size: 3307039 + timestamp: 1709332619096 +- kind: conda + name: typos + version: 1.19.0 + build: h7f3b576_0 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/typos-1.19.0-h7f3b576_0.conda + sha256: b9dc051dccb7cc9fb99d130f42703f0b14b711408d5b94d5864984b982981eb8 + md5: 0066abed96ba51601722fda1eee87973 + depends: + - m2w64-gcc-libs + - m2w64-gcc-libs-core + license: MIT + license_family: MIT + size: 2571575 + timestamp: 1709333263031 +- kind: conda + name: typos + version: 1.19.0 + build: he8a937b_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/typos-1.19.0-he8a937b_0.conda + sha256: ee886a360248e517b75980e7c7249fbba7bed97e5f67371257f8dc29b5c348df + md5: 97d8f139e4fb369369fb71f53e29be45 + depends: + - libgcc-ng >=12 + license: MIT + license_family: MIT + size: 3616719 + timestamp: 1709332292966 - kind: conda name: tzdata version: 2024a @@ -13452,6 +19199,25 @@ packages: license_family: PROPRIETARY size: 1283972 timestamp: 1666630199266 +- kind: conda + name: ucx + version: 1.15.0 + build: h11edf95_7 + build_number: 7 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/ucx-1.15.0-h11edf95_7.conda + sha256: 3e381ec5918045a43e0f349214a4d38e53990897ba07a6abf025f9e0156acaf2 + md5: 20a94f617ad76922f8737ad1fe317f4d + depends: + - libgcc-ng >=12 + - libstdcxx-ng >=12 + - rdma-core >=50.0 + constrains: + - cuda-version >=11.2,<12 + license: BSD-3-Clause + license_family: BSD + size: 6847943 + timestamp: 1710357262334 - kind: conda name: ucx version: 1.15.0 @@ -13493,6 +19259,25 @@ packages: license_family: BSD size: 15172395 timestamp: 1705978902381 +- kind: conda + name: ucx + version: 1.15.0 + build: hcf8619e_7 + build_number: 7 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/ucx-1.15.0-hcf8619e_7.conda + sha256: a22855693b154dc1a691d93b2acf21b3b485c355535d2f5bc23981fb6e330b53 + md5: 1c7268d3f881267e4f3c181257b3ad41 + depends: + - libgcc-ng >=12 + - libstdcxx-ng >=12 + - rdma-core >=50.0 + constrains: + - cuda-version >=11.2,<12 + license: BSD-3-Clause + license_family: BSD + size: 6868398 + timestamp: 1710357060520 - kind: conda name: vc version: '14.3' @@ -13565,44 +19350,36 @@ packages: license_family: Proprietary size: 749868 timestamp: 1702511239004 -- kind: conda - name: virtualenv - version: 20.24.6 - build: pyhd8ed1ab_0 - subdir: win-64 - noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/virtualenv-20.24.6-pyhd8ed1ab_0.conda - sha256: 09492f89a22dc17d9b32f2a791deee93d06e99fb312c3d47430fe35343b7fbde - md5: fb1fc875719e217ed799a7aae11d3be4 - depends: - - distlib <1,>=0.3.7 - - filelock <4,>=3.12.2 - - platformdirs <4,>=3.9.1 - - python >=3.8 - arch: x86_64 - platform: win - license: MIT - license_family: MIT - size: 3067859 - timestamp: 1698092779433 -- kind: conda +- kind: pypi name: virtualenv - version: 20.25.0 - build: pyhd8ed1ab_0 - subdir: noarch - noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/virtualenv-20.25.0-pyhd8ed1ab_0.conda - sha256: 50827c3721a9dbf973b568709d4381add2a6552fa562f26a385c5edc16a534af - md5: c119653cba436d8183c27bf6d190e587 - depends: - - distlib <1,>=0.3.7 - - filelock <4,>=3.12.2 - - platformdirs <5,>=3.9.1 - - python >=3.8 - license: MIT - license_family: MIT - size: 3122816 - timestamp: 1701458945559 + version: 20.25.1 + url: https://files.pythonhosted.org/packages/16/65/0d0bdfdac31e2db8c6d6c18fe1e00236f0dea279f9846f94a9aafa49cfc9/virtualenv-20.25.1-py3-none-any.whl + sha256: 961c026ac520bac5f69acb8ea063e8a4f071bcc9457b9c1f28f6b085c511583a + requires_dist: + - distlib <1, >=0.3.7 + - filelock <4, >=3.12.2 + - importlib-metadata >=6.6 ; python_version < '3.8' + - platformdirs <5, >=3.9.1 + - furo >=2023.7.26 ; extra == 'docs' + - proselint >=0.13 ; extra == 'docs' + - sphinx-argparse >=0.4 ; extra == 'docs' + - sphinx >=7.1.2 ; extra == 'docs' + - sphinxcontrib-towncrier >=0.2.1a0 ; extra == 'docs' + - towncrier >=23.6 ; extra == 'docs' + - covdefaults >=2.3 ; extra == 'test' + - coverage-enable-subprocess >=1 ; extra == 'test' + - coverage >=7.2.7 ; extra == 'test' + - flaky >=3.7 ; extra == 'test' + - packaging >=23.1 ; extra == 'test' + - pytest-env >=0.8.2 ; extra == 'test' + - pytest-freezer >=0.4.8 ; platform_python_implementation == 'PyPy' and extra == 'test' + - pytest-mock >=3.11.1 ; extra == 'test' + - pytest-randomly >=3.12 ; extra == 'test' + - pytest-timeout >=2.1 ; extra == 'test' + - pytest >=7.4 ; extra == 'test' + - setuptools >=68 ; extra == 'test' + - time-machine >=2.10 ; platform_python_implementation == 'CPython' and extra == 'test' + requires_python: '>=3.7' - kind: conda name: vs2015_runtime version: 14.36.32532 @@ -13664,6 +19441,23 @@ packages: license_family: MIT size: 218421 timestamp: 1682376911339 +- kind: conda + name: wheel + version: 0.38.4 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/wheel-0.38.4-pyhd8ed1ab_0.tar.bz2 + sha256: bd4f11ff075ff251ade9f57686f31473e25be46ab282d9603f551401250f9f44 + md5: c829cfb8cb826acb9de0ac1a2df0a940 + depends: + - python >=3.7 + license: MIT + license_family: MIT + purls: + - pkg:pypi/wheel + size: 32521 + timestamp: 1668051714265 - kind: conda name: wheel version: 0.38.4 @@ -13679,6 +19473,8 @@ packages: platform: win license: MIT license_family: MIT + purls: + - pkg:pypi/wheel size: 32521 timestamp: 1668051714265 - kind: conda @@ -13730,6 +19526,36 @@ packages: license: LGPL-2.1 and GPL-2.0 size: 217804 timestamp: 1660346976440 +- kind: conda + name: xz + version: 5.2.6 + build: h9cdd2b7_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/xz-5.2.6-h9cdd2b7_0.tar.bz2 + sha256: 93f58a7b393adf41fa007ac8c55978765e957e90cd31877ece1e5a343cb98220 + md5: 83baad393a31d59c20b63ba4da6592df + depends: + - libgcc-ng >=12 + license: LGPL-2.1 and GPL-2.0 + size: 440555 + timestamp: 1660348056328 +- kind: conda + name: zipp + version: 3.17.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/zipp-3.17.0-pyhd8ed1ab_0.conda + sha256: bced1423fdbf77bca0a735187d05d9b9812d2163f60ab426fc10f11f92ecbe26 + md5: 2e4d6bc0b14e10f895fc6791a7d9b26a + depends: + - python >=3.8 + license: MIT + license_family: MIT + purls: + - pkg:pypi/zipp + size: 18954 + timestamp: 1695255262261 - kind: conda name: zipp version: 3.17.0 @@ -13745,8 +19571,26 @@ packages: platform: win license: MIT license_family: MIT + purls: + - pkg:pypi/zipp size: 18954 timestamp: 1695255262261 +- kind: conda + name: zlib + version: 1.2.13 + build: h31becfc_5 + build_number: 5 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/zlib-1.2.13-h31becfc_5.conda + sha256: aa3e9d46b13d1959faf634f03d929d7dec950dc1b84a8ff109f7f0e3f364b562 + md5: 96866c7301479abaf8308c50958c71a4 + depends: + - libgcc-ng >=12 + - libzlib 1.2.13 h31becfc_5 + license: Zlib + license_family: Other + size: 95842 + timestamp: 1686575155348 - kind: conda name: zlib version: 1.2.13 @@ -13810,6 +19654,22 @@ packages: license_family: BSD size: 343428 timestamp: 1693151615801 +- kind: conda + name: zstd + version: 1.5.5 + build: h4c53e97_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/zstd-1.5.5-h4c53e97_0.conda + sha256: d1e070029e9d07a3f25e6ed082d507b0f3cff1b109dd18d0b091a5c7b86dd07b + md5: b74eb9dbb5c3c15cb3cee7cbdf198c75 + depends: + - libgcc-ng >=12 + - libstdcxx-ng >=12 + - libzlib >=1.2.13,<1.3.0a0 + license: BSD-3-Clause + license_family: BSD + size: 528989 + timestamp: 1693151197934 - kind: conda name: zstd version: 1.5.5 diff --git a/pixi.toml b/pixi.toml index 50e264179e07..abd900d9619e 100644 --- a/pixi.toml +++ b/pixi.toml @@ -16,13 +16,14 @@ channels = ["conda-forge"] description = "Log images, point clouds, etc, and visualize them effortlessly" homepage = "https://rerun.io" license = "MIT OR Apache-2.0" -platforms = ["linux-64", "osx-arm64", "osx-64", "win-64"] +platforms = ["linux-64", "linux-aarch64", "osx-arm64", "osx-64", "win-64"] readme = "README.md" repository = "https://github.com/rerun-io/rerun" version = "0.1.0" # TODO(emilk): sync version with `Cargo.toml` with help from `crates.py` [environments] cpp = ["cpp"] +taplo = ["taplo"] [tasks] # Note: extra CLI argument after `pixi run TASK` are passed to the task cmd. @@ -78,12 +79,10 @@ lint-py-fmt-check = "ruff format --check --config rerun_py/pyproject.toml" lint-py-blackdoc = "blackdoc --check" lint-py-mypy = "mypy --install-types --non-interactive --no-warn-unused-ignore" lint-py-ruff = "ruff format --check --config rerun_py/pyproject.toml" -lint-taplo = "taplo fmt --check --diff" lint-typos = "typos" misc-fmt = "prettier --write '**/*.{yml,yaml,js,css,html}'" misc-fmt-check = "prettier --check '**/*.{yml,yaml,js,css,html}'" -toml-fmt = "taplo fmt" ruff-fmt = "ruff format --config rerun_py/pyproject.toml ." ruff-fix = "ruff --fix --config rerun_py/pyproject.toml ." @@ -109,6 +108,14 @@ search-index = "cargo run -p re_build_search_index --release --" # Files are stored in the `meilisearch` directory, so you can fully wipe it via `rm -rf meilisearch`. meilisearch = "meilisearch --db-path=./meilisearch/data.ms --dump-dir=./meilisearch/dumps/ --snapshot-dir=./meilisearch/snapshots/ --env=development --no-analytics --experimental-reduce-indexing-memory-usage --master-key=test" +# TODO(ab): move everything back to the main tasks/dependencies once taplo supports linux-aarch64. +[feature.taplo] +platforms = ["linux-64", "osx-arm64", "osx-64", "win-64"] + +[feature.taplo.tasks] +lint-taplo = "taplo fmt --check --diff" +toml-fmt = "taplo fmt" + [feature.cpp.tasks] # All the cpp-* tasks can be configured with environment variables, e.g.: RERUN_WERROR=ON CXX=clang++ cpp-prepare-release = "cmake -G 'Ninja' -B build/release -S . -DCMAKE_BUILD_TYPE=Release" @@ -152,6 +159,18 @@ cpp-prepare-msvc = "cmake -G 'Visual Studio 17 2022' -B build-msvc -S ." [dependencies] +# IMPORTANT: do not add any dependencies here that may break CI. All dependencies should be available on all supported +# platforms (including linux-aarch64), or added conditionally. +# +# Hints: +# - To check a given package, go to https://prefix.dev/channels/conda-forge/packages/XXXX. It should support Windows, +# x86_64 and aarch64 macOS architectures, and x86_64 and aarch64 Linux architectures. +# - Some pure Python packages may wrongly be tagged as platform-specific. In this case, use `[pypi-dependencies]` +# instead (e.g. `nox`). +# - If a package is only used for a very specific CI job on a specific target, include it under that target (e.g. +# `meilisearch`). +# - Last resort, use a feature to conditionally include a dependency (e.g. `taplo`). + attrs = ">=23.1.0" blackdoc = "0.3.8" clang-tools = "16.0.6" # clang-format @@ -161,7 +180,6 @@ gitignore-parser = ">=0.1.9" gitpython = ">=3.1.40" just = ">=1.15.0" maturin = "1.4.0" -meilisearch = "1.5.1.*" mypy = "1.8.0" numpy = ">=1.23,<2" pip = ">=23" @@ -170,7 +188,6 @@ pytest = ">=7" python = "=3.11" # We use the latest Python version here, so we get the latest mypy etc, EXCEPT 3.12 is too new for some of our examples. We run our CI tests on ALL supported versions though. ruff = "0.2.2" semver = ">=2.13,<2.14" -taplo = "=0.8.1" typing_extensions = ">4.5" typos = ">=1.16.20" wheel = ">=0.38,<0.39" @@ -178,13 +195,19 @@ ninja = "1.11.1" # Make sure to use a version that is compatible with # the theme we're using, see https://github.com/jothepro/doxygen-awesome-css/blob/v2.2.1/README.md doxygen = "1.9.7.*" -binaryen = "116.*" # for `wasm-opt` -nox = "2021.10.1.*" +binaryen = "117.*" # for `wasm-opt` prettier = "2.8.8.*" tomlkit = "0.12.3.*" +[pypi-dependencies] +nox = ">=2024.3.2" # the conda-forge package is (wrongly) tagged as platform-specific + [target.linux-64.dependencies] patchelf = ">=0.17" +meilisearch = "1.5.1.*" # not available for linux-aarch64 + +[feature.taplo.dependencies] +taplo = "=0.8.1" # not (yet?) available for linux-aarch64 [feature.cpp.target.linux-64.dependencies] clang = "16.0.6" From b068aa71979ce5ca5e4dee91f0f3cca1127051ca Mon Sep 17 00:00:00 2001 From: Andreas Reich Date: Mon, 18 Mar 2024 15:16:55 +0100 Subject: [PATCH 29/50] Fix recommendation from one Space View class affecting recommendation from another (#5554) ### What This broke recently due to the tracking of space view recommendation hashes _without_ taking into account their class. Cleaned up the whole thing a little bit in the progress. * Fixes #5455 * Also mentioned on this ticket is this issue but it turned out to be unrelated (thus now a separate ticket) #5553 * #5455 is new to 0.15alpha, but #5553 happens on 0.14! --- For this script: ```py import rerun as rr rr.init("rerun_example_bug") rr.connect() rr.set_time_sequence("frame_nr", 0) rr.log("boxes3d", rr.Boxes3D(centers=[[0, 0, 0], [1, 1.5, 1.15], [3, 2, 1]], half_sizes=[0.5, 1, 0.5] * 3)) rr.log("boxes2d", rr.Boxes2D(centers=[[0, 0], [1.3, 0.5], [3, 2]], half_sizes=[0.5, 1] * 3)) rr.log("text_logs", rr.TextLog("Hello, world!", level=rr.TextLogLevel.INFO)) rr.log("points2d", rr.Points2D([[0, 0], [1, 1], [3, 2]], labels=["a", "b", "c"])) ``` Before: Only text view visible. After: image ### Checklist * [x] I have read and agree to [Contributor Guide](https://github.com/rerun-io/rerun/blob/main/CONTRIBUTING.md) and the [Code of Conduct](https://github.com/rerun-io/rerun/blob/main/CODE_OF_CONDUCT.md) * [x] I've included a screenshot or gif (if applicable) * [x] I have tested the web demo (if applicable): * Using newly built examples: [app.rerun.io](https://app.rerun.io/pr/5554/index.html) * Using examples from latest `main` build: [app.rerun.io](https://app.rerun.io/pr/5554/index.html?manifest_url=https://app.rerun.io/version/main/examples_manifest.json) * Using full set of examples from `nightly` build: [app.rerun.io](https://app.rerun.io/pr/5554/index.html?manifest_url=https://app.rerun.io/version/nightly/examples_manifest.json) * [x] The PR title and labels are set such as to maximize their usefulness for the next release's CHANGELOG * [x] If applicable, add a new check to the [release checklist](https://github.com/rerun-io/rerun/blob/main/tests/python/release_checklist)! - [PR Build Summary](https://build.rerun.io/pr/5554) - [Docs preview](https://rerun.io/preview/707ea2ce9502cfeb726292ae7e43ee8b8a705e92/docs) - [Examples preview](https://rerun.io/preview/707ea2ce9502cfeb726292ae7e43ee8b8a705e92/examples) - [Recent benchmark results](https://build.rerun.io/graphs/crates.html) - [Wasm size tracking](https://build.rerun.io/graphs/sizes.html) --- Cargo.lock | 1 + crates/re_types/Cargo.toml | 1 + .../re_types/src/blueprint/components/mod.rs | 1 + .../viewer_recommendation_hash_ext.rs | 10 +++++ .../src/space_view/spawn_heuristics.rs | 24 +++++++++++- crates/re_viewport/src/viewport_blueprint.rs | 23 +++++------ .../release_checklist/check_annotations.py | 2 - .../check_container_hierarchy.py | 2 - ...ntext_menu_add_entity_to_new_space_view.py | 2 - .../check_context_menu_collapse_expand_all.py | 2 - ...heck_context_menu_invalid_sub_container.py | 2 - .../check_context_menu_multi_selection.py | 2 - .../check_context_menu_single_selection.py | 2 - ...xt_menu_single_selection_blueprint_tree.py | 2 - .../check_context_menu_suggested_origin.py | 2 - tests/python/release_checklist/check_focus.py | 2 - .../release_checklist/check_heuristics_2d.py | 2 - .../check_heuristics_mixed_2d_and_3d.py | 5 +-- .../check_heuristics_mixed_all_root.py | 39 +++++++++++++++++++ .../check_hover_select_reset.py | 2 - .../check_parallelism_caching_reentrancy.py | 2 - .../release_checklist/check_plot_overrides.py | 2 - .../release_checklist/check_scalar_clears.py | 2 - 23 files changed, 88 insertions(+), 46 deletions(-) create mode 100644 crates/re_types/src/blueprint/components/viewer_recommendation_hash_ext.rs create mode 100644 tests/python/release_checklist/check_heuristics_mixed_all_root.py diff --git a/Cargo.lock b/Cargo.lock index 4f315aca96a8..9aa5700027ea 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4923,6 +4923,7 @@ dependencies = [ "mime_guess2", "mint", "ndarray", + "nohash-hasher", "once_cell", "ply-rs", "rand", diff --git a/crates/re_types/Cargo.toml b/crates/re_types/Cargo.toml index 6d32e54cfbc8..35ad4d6d24c5 100644 --- a/crates/re_types/Cargo.toml +++ b/crates/re_types/Cargo.toml @@ -71,6 +71,7 @@ itertools.workspace = true linked-hash-map.workspace = true mime_guess2.workspace = true ndarray.workspace = true +nohash-hasher.workspace = true once_cell.workspace = true ply-rs.workspace = true smallvec.workspace = true diff --git a/crates/re_types/src/blueprint/components/mod.rs b/crates/re_types/src/blueprint/components/mod.rs index d3670e91167c..91c656fa8b69 100644 --- a/crates/re_types/src/blueprint/components/mod.rs +++ b/crates/re_types/src/blueprint/components/mod.rs @@ -13,6 +13,7 @@ mod row_share; mod space_view_class; mod space_view_origin; mod viewer_recommendation_hash; +mod viewer_recommendation_hash_ext; mod visible; mod visible_ext; mod visible_time_range; diff --git a/crates/re_types/src/blueprint/components/viewer_recommendation_hash_ext.rs b/crates/re_types/src/blueprint/components/viewer_recommendation_hash_ext.rs new file mode 100644 index 000000000000..7cceb882c4fc --- /dev/null +++ b/crates/re_types/src/blueprint/components/viewer_recommendation_hash_ext.rs @@ -0,0 +1,10 @@ +use super::ViewerRecommendationHash; + +impl std::hash::Hash for ViewerRecommendationHash { + #[inline] + fn hash(&self, state: &mut H) { + state.write_u64(self.0 .0); + } +} + +impl nohash_hasher::IsEnabled for ViewerRecommendationHash {} diff --git a/crates/re_viewer_context/src/space_view/spawn_heuristics.rs b/crates/re_viewer_context/src/space_view/spawn_heuristics.rs index 6d5e3302d0ea..7da42a08ddf5 100644 --- a/crates/re_viewer_context/src/space_view/spawn_heuristics.rs +++ b/crates/re_viewer_context/src/space_view/spawn_heuristics.rs @@ -1,7 +1,9 @@ -use re_log_types::{EntityPath, EntityPathFilter, EntityPathSubs}; +use re_log_types::{hash::Hash64, EntityPath, EntityPathFilter, EntityPathSubs}; + +use crate::SpaceViewClassIdentifier; /// Properties of a space view that as recommended to be spawned by default via space view spawn heuristics. -#[derive(Hash, Debug, Clone)] +#[derive(Debug, Clone)] pub struct RecommendedSpaceView { pub origin: EntityPath, pub query_filter: EntityPathFilter, @@ -42,4 +44,22 @@ impl RecommendedSpaceView { pub fn root() -> Self { Self::new_subtree(EntityPath::root()) } + + /// Hash together with the Space View class id to the `ViewerRecommendationHash` component. + /// + /// Recommendations are usually tied to a specific Space View class. + /// Therefore, to identify a recommendation for identification purposes, the class id should be included in the hash. + pub fn recommendation_hash( + &self, + class_id: SpaceViewClassIdentifier, + ) -> re_types::blueprint::components::ViewerRecommendationHash { + let Self { + origin, + query_filter, + } = self; + + Hash64::hash((origin, query_filter, class_id)) + .hash64() + .into() + } } diff --git a/crates/re_viewport/src/viewport_blueprint.rs b/crates/re_viewport/src/viewport_blueprint.rs index fda7eccd491b..1a621b073e92 100644 --- a/crates/re_viewport/src/viewport_blueprint.rs +++ b/crates/re_viewport/src/viewport_blueprint.rs @@ -8,7 +8,6 @@ use smallvec::SmallVec; use re_data_store::LatestAtQuery; use re_entity_db::EntityPath; -use re_log_types::hash::Hash64; use re_query::query_archetype; use re_space_view::SpaceViewBlueprint; use re_types::blueprint::components::ViewerRecommendationHash; @@ -59,7 +58,7 @@ pub struct ViewportBlueprint { auto_space_views: AtomicBool, /// Hashes of all recommended space views the viewer has already added and that should not be added again. - past_viewer_recommendation_hashes: IntSet, + past_viewer_recommendations: IntSet, /// Channel to pass Blueprint mutation messages back to the [`crate::Viewport`] tree_action_sender: std::sync::mpsc::Sender, @@ -80,7 +79,7 @@ impl ViewportBlueprint { maximized, auto_layout, auto_space_views, - past_viewer_recommendations: past_viewer_recommendation_hashes, + past_viewer_recommendations, } = match query_archetype(blueprint_db.store(), query, &VIEWPORT_PATH.into()) .and_then(|arch| arch.to_archetype()) { @@ -149,10 +148,9 @@ impl ViewportBlueprint { root_container, ); - let past_viewer_recommendation_hashes = past_viewer_recommendation_hashes + let past_viewer_recommendations = past_viewer_recommendations .unwrap_or_default() .into_iter() - .map(|h| Hash64::from_u64(h.0 .0)) .collect(); ViewportBlueprint { @@ -163,7 +161,7 @@ impl ViewportBlueprint { maximized: maximized.map(|id| id.0.into()), auto_layout, auto_space_views, - past_viewer_recommendation_hashes, + past_viewer_recommendations, tree_action_sender, } } @@ -301,8 +299,8 @@ impl ViewportBlueprint { // Remove all space views that we already spawned via heuristic before. recommended_space_views.retain(|recommended_view| { !self - .past_viewer_recommendation_hashes - .contains(&Hash64::hash(recommended_view)) + .past_viewer_recommendations + .contains(&recommended_view.recommendation_hash(class_id)) }); // Each of the remaining recommendations would individually be a candidate for spawning if there were @@ -321,11 +319,14 @@ impl ViewportBlueprint { // mean we should suddenly add `/camera/**` to the viewport. if !recommended_space_views.is_empty() { let new_viewer_recommendation_hashes = self - .past_viewer_recommendation_hashes + .past_viewer_recommendations .iter() .cloned() - .chain(recommended_space_views.iter().map(Hash64::hash)) - .map(|hash| ViewerRecommendationHash(hash.hash64().into())) + .chain( + recommended_space_views + .iter() + .map(|recommendation| recommendation.recommendation_hash(class_id)), + ) .collect::>(); ctx.save_blueprint_component( diff --git a/tests/python/release_checklist/check_annotations.py b/tests/python/release_checklist/check_annotations.py index de25046f7336..e701206fb127 100644 --- a/tests/python/release_checklist/check_annotations.py +++ b/tests/python/release_checklist/check_annotations.py @@ -43,8 +43,6 @@ def log_annotations() -> None: def run(args: Namespace) -> None: - # TODO(cmc): I have no idea why this works without specifying a `recording_id`, but - # I'm not gonna rely on it anyway. rr.script_setup(args, f"{os.path.basename(__file__)}", recording_id=uuid4()) log_readme() diff --git a/tests/python/release_checklist/check_container_hierarchy.py b/tests/python/release_checklist/check_container_hierarchy.py index 25daf19d5ce7..fac16afd3384 100644 --- a/tests/python/release_checklist/check_container_hierarchy.py +++ b/tests/python/release_checklist/check_container_hierarchy.py @@ -83,8 +83,6 @@ def log_some_space_views() -> None: def run(args: Namespace) -> None: - # TODO(cmc): I have no idea why this works without specifying a `recording_id`, but - # I'm not gonna rely on it anyway. rr.script_setup(args, f"{os.path.basename(__file__)}", recording_id=uuid4()) log_readme() diff --git a/tests/python/release_checklist/check_context_menu_add_entity_to_new_space_view.py b/tests/python/release_checklist/check_context_menu_add_entity_to_new_space_view.py index 99a458e21a79..15407e44c62f 100644 --- a/tests/python/release_checklist/check_context_menu_add_entity_to_new_space_view.py +++ b/tests/python/release_checklist/check_context_menu_add_entity_to_new_space_view.py @@ -44,8 +44,6 @@ def log_some_space_views() -> None: def run(args: Namespace) -> None: - # TODO(cmc): I have no idea why this works without specifying a `recording_id`, but - # I'm not gonna rely on it anyway. rr.script_setup(args, f"{os.path.basename(__file__)}", recording_id=uuid4()) log_readme() diff --git a/tests/python/release_checklist/check_context_menu_collapse_expand_all.py b/tests/python/release_checklist/check_context_menu_collapse_expand_all.py index f3ecb3b14654..c5e74b16a359 100644 --- a/tests/python/release_checklist/check_context_menu_collapse_expand_all.py +++ b/tests/python/release_checklist/check_context_menu_collapse_expand_all.py @@ -40,8 +40,6 @@ def log_some_space_views() -> None: def run(args: Namespace) -> None: - # TODO(cmc): I have no idea why this works without specifying a `recording_id`, but - # I'm not gonna rely on it anyway. rr.script_setup(args, f"{os.path.basename(__file__)}", recording_id=uuid4()) log_readme() diff --git a/tests/python/release_checklist/check_context_menu_invalid_sub_container.py b/tests/python/release_checklist/check_context_menu_invalid_sub_container.py index 62b76362976c..53b92e31fb8d 100644 --- a/tests/python/release_checklist/check_context_menu_invalid_sub_container.py +++ b/tests/python/release_checklist/check_context_menu_invalid_sub_container.py @@ -38,8 +38,6 @@ def log_some_space_views() -> None: def run(args: Namespace) -> None: - # TODO(cmc): I have no idea why this works without specifying a `recording_id`, but - # I'm not gonna rely on it anyway. rr.script_setup(args, f"{os.path.basename(__file__)}", recording_id=uuid4()) log_readme() diff --git a/tests/python/release_checklist/check_context_menu_multi_selection.py b/tests/python/release_checklist/check_context_menu_multi_selection.py index 030d83bfbe5f..0b7b361fd5c5 100644 --- a/tests/python/release_checklist/check_context_menu_multi_selection.py +++ b/tests/python/release_checklist/check_context_menu_multi_selection.py @@ -84,8 +84,6 @@ def log_some_space_views() -> None: def run(args: Namespace) -> None: - # TODO(cmc): I have no idea why this works without specifying a `recording_id`, but - # I'm not gonna rely on it anyway. rr.script_setup(args, f"{os.path.basename(__file__)}", recording_id=uuid4()) log_readme() diff --git a/tests/python/release_checklist/check_context_menu_single_selection.py b/tests/python/release_checklist/check_context_menu_single_selection.py index 04a7b53437fb..9b11958bb713 100644 --- a/tests/python/release_checklist/check_context_menu_single_selection.py +++ b/tests/python/release_checklist/check_context_menu_single_selection.py @@ -94,8 +94,6 @@ def log_some_space_views() -> None: def run(args: Namespace) -> None: - # TODO(cmc): I have no idea why this works without specifying a `recording_id`, but - # I'm not gonna rely on it anyway. rr.script_setup(args, f"{os.path.basename(__file__)}", recording_id=uuid4()) log_readme() diff --git a/tests/python/release_checklist/check_context_menu_single_selection_blueprint_tree.py b/tests/python/release_checklist/check_context_menu_single_selection_blueprint_tree.py index b92577a3a334..40c1a4e03a80 100644 --- a/tests/python/release_checklist/check_context_menu_single_selection_blueprint_tree.py +++ b/tests/python/release_checklist/check_context_menu_single_selection_blueprint_tree.py @@ -79,8 +79,6 @@ def log_some_space_views() -> None: def run(args: Namespace) -> None: - # TODO(cmc): I have no idea why this works without specifying a `recording_id`, but - # I'm not gonna rely on it anyway. rr.script_setup(args, f"{os.path.basename(__file__)}", recording_id=uuid4()) log_readme() diff --git a/tests/python/release_checklist/check_context_menu_suggested_origin.py b/tests/python/release_checklist/check_context_menu_suggested_origin.py index d735b8f98289..6e29e336aeb0 100644 --- a/tests/python/release_checklist/check_context_menu_suggested_origin.py +++ b/tests/python/release_checklist/check_context_menu_suggested_origin.py @@ -66,8 +66,6 @@ def log_some_space_views() -> None: def run(args: Namespace) -> None: - # TODO(cmc): I have no idea why this works without specifying a `recording_id`, but - # I'm not gonna rely on it anyway. rr.script_setup(args, f"{os.path.basename(__file__)}", recording_id=uuid4()) log_readme() diff --git a/tests/python/release_checklist/check_focus.py b/tests/python/release_checklist/check_focus.py index 2f4a711e957e..61b590d64242 100644 --- a/tests/python/release_checklist/check_focus.py +++ b/tests/python/release_checklist/check_focus.py @@ -42,8 +42,6 @@ def log_some_space_views() -> None: def run(args: Namespace) -> None: - # TODO(cmc): I have no idea why this works without specifying a `recording_id`, but - # I'm not gonna rely on it anyway. rr.script_setup(args, f"{os.path.basename(__file__)}", recording_id=uuid4()) log_readme() diff --git a/tests/python/release_checklist/check_heuristics_2d.py b/tests/python/release_checklist/check_heuristics_2d.py index 9b25b5481073..e289a8b2ab34 100644 --- a/tests/python/release_checklist/check_heuristics_2d.py +++ b/tests/python/release_checklist/check_heuristics_2d.py @@ -63,8 +63,6 @@ def log_images() -> None: def run(args: Namespace) -> None: - # TODO(cmc): I have no idea why this works without specifying a `recording_id`, but - # I'm not gonna rely on it anyway. rr.script_setup(args, f"{os.path.basename(__file__)}", recording_id=uuid4()) log_readme() diff --git a/tests/python/release_checklist/check_heuristics_mixed_2d_and_3d.py b/tests/python/release_checklist/check_heuristics_mixed_2d_and_3d.py index fa76c569bed7..c0e7dab2d53d 100644 --- a/tests/python/release_checklist/check_heuristics_mixed_2d_and_3d.py +++ b/tests/python/release_checklist/check_heuristics_mixed_2d_and_3d.py @@ -15,7 +15,7 @@ Reset the blueprint to make sure you are viewing new heuristics and not a cached blueprint. ### Action -You should see 4 space-views: +You should see 5 space-views: - 2D: `image1` with an all red image - 2D: `image2` with an all green image - 2D: `3D/camera` with an all blue image @@ -23,6 +23,7 @@ - a 3D box - a pinhole camera, showing the blue image - no red or green image + - Text: This readme. """ @@ -49,8 +50,6 @@ def log_3d_scene() -> None: def run(args: Namespace) -> None: - # TODO(cmc): I have no idea why this works without specifying a `recording_id`, but - # I'm not gonna rely on it anyway. rr.script_setup(args, f"{os.path.basename(__file__)}", recording_id=uuid4()) log_readme() diff --git a/tests/python/release_checklist/check_heuristics_mixed_all_root.py b/tests/python/release_checklist/check_heuristics_mixed_all_root.py new file mode 100644 index 000000000000..8444059469f2 --- /dev/null +++ b/tests/python/release_checklist/check_heuristics_mixed_all_root.py @@ -0,0 +1,39 @@ +from __future__ import annotations + +import os +from argparse import Namespace +from uuid import uuid4 + +import rerun as rr + +README = """ +# Mixed objects Heuristics with everything directly under root + +This checks whether the heuristics do the right thing with mixed 2D, 3D and test data. + +### Action +You should see 4 space-views: + - 2D: Boxes and points, `$origin` == `/` + - 3D: 3D boxes, `$origin` == `/` + - Text log: A single log line, `$origin` == `/` + - Text: This readme, `$origin` == `/readme` +""" + + +def run(args: Namespace) -> None: + rr.script_setup(args, f"{os.path.basename(__file__)}", recording_id=uuid4()) + + rr.log("boxes3d", rr.Boxes3D(centers=[[0, 0, 0], [1, 1.5, 1.15], [3, 2, 1]], half_sizes=[0.5, 1, 0.5] * 3)) + rr.log("boxes2d", rr.Boxes2D(centers=[[0, 0], [1.3, 0.5], [3, 2]], half_sizes=[0.5, 1] * 3)) + rr.log("text_logs", rr.TextLog("Hello, world!", level=rr.TextLogLevel.INFO)) + rr.log("points2d", rr.Points2D([[0, 0], [1, 1], [3, 2]], labels=["a", "b", "c"])) + rr.log("readme", rr.TextDocument(README, media_type=rr.MediaType.MARKDOWN), timeless=True) + + +if __name__ == "__main__": + import argparse + + parser = argparse.ArgumentParser(description="Interactive release checklist") + rr.script_add_args(parser) + args = parser.parse_args() + run(args) diff --git a/tests/python/release_checklist/check_hover_select_reset.py b/tests/python/release_checklist/check_hover_select_reset.py index f64436e80945..c58b29b41020 100644 --- a/tests/python/release_checklist/check_hover_select_reset.py +++ b/tests/python/release_checklist/check_hover_select_reset.py @@ -80,8 +80,6 @@ def log_points_2d() -> None: def run(args: Namespace) -> None: - # TODO(cmc): I have no idea why this works without specifying a `recording_id`, but - # I'm not gonna rely on it anyway. rr.script_setup(args, f"{os.path.basename(__file__)}", recording_id=uuid4()) log_readme() diff --git a/tests/python/release_checklist/check_parallelism_caching_reentrancy.py b/tests/python/release_checklist/check_parallelism_caching_reentrancy.py index 40e1fc9bd0bb..b2aeb3632c08 100644 --- a/tests/python/release_checklist/check_parallelism_caching_reentrancy.py +++ b/tests/python/release_checklist/check_parallelism_caching_reentrancy.py @@ -138,8 +138,6 @@ def log_spatial() -> None: def run(args: Namespace) -> None: - # TODO(cmc): I have no idea why this works without specifying a `recording_id`, but - # I'm not gonna rely on it anyway. rr.script_setup(args, f"{os.path.basename(__file__)}", recording_id=uuid4()) log_readme() diff --git a/tests/python/release_checklist/check_plot_overrides.py b/tests/python/release_checklist/check_plot_overrides.py index b2b1af4595d1..c52ebb5c1e65 100644 --- a/tests/python/release_checklist/check_plot_overrides.py +++ b/tests/python/release_checklist/check_plot_overrides.py @@ -54,8 +54,6 @@ def log_plots() -> None: def run(args: Namespace) -> None: - # TODO(cmc): I have no idea why this works without specifying a `recording_id`, but - # I'm not gonna rely on it anyway. rr.script_setup(args, f"{os.path.basename(__file__)}", recording_id=uuid4()) log_readme() diff --git a/tests/python/release_checklist/check_scalar_clears.py b/tests/python/release_checklist/check_scalar_clears.py index 1f4035e4e9e3..6bed4c3fbdfc 100644 --- a/tests/python/release_checklist/check_scalar_clears.py +++ b/tests/python/release_checklist/check_scalar_clears.py @@ -42,8 +42,6 @@ def log_plots() -> None: def run(args: Namespace) -> None: - # TODO(cmc): I have no idea why this works without specifying a `recording_id`, but - # I'm not gonna rely on it anyway. rr.script_setup(args, f"{os.path.basename(__file__)}", recording_id=uuid4()) log_readme() From 766c4744a71be67a0837a703d504bbd74e52a8d8 Mon Sep 17 00:00:00 2001 From: Andreas Reich Date: Mon, 18 Mar 2024 16:27:54 +0100 Subject: [PATCH 30/50] Workaround for Github's Ubuntu image getting spurious Asan failures (#5557) ### What Hitting some spurious asan issues on ci: Some Linux runs end up spamming `AddressSanitizer:DEADLYSIGNAL` indefinitely with no additional information. Originally I suspected this came from * #5544 But it's actually a Github image issue, see https://github.com/actions/runner-images/issues/9491 ### Checklist * [x] I have read and agree to [Contributor Guide](https://github.com/rerun-io/rerun/blob/main/CONTRIBUTING.md) and the [Code of Conduct](https://github.com/rerun-io/rerun/blob/main/CODE_OF_CONDUCT.md) * [x] I've included a screenshot or gif (if applicable) * [x] I have tested the web demo (if applicable): * Using newly built examples: [app.rerun.io](https://app.rerun.io/pr/5557/index.html) * Using examples from latest `main` build: [app.rerun.io](https://app.rerun.io/pr/5557/index.html?manifest_url=https://app.rerun.io/version/main/examples_manifest.json) * Using full set of examples from `nightly` build: [app.rerun.io](https://app.rerun.io/pr/5557/index.html?manifest_url=https://app.rerun.io/version/nightly/examples_manifest.json) * [x] The PR title and labels are set such as to maximize their usefulness for the next release's CHANGELOG * [x] If applicable, add a new check to the [release checklist](https://github.com/rerun-io/rerun/blob/main/tests/python/release_checklist)! - [PR Build Summary](https://build.rerun.io/pr/5557) - [Docs preview](https://rerun.io/preview/8ac1180d749f9bf9ae62ee57f96c66c832758a9d/docs) - [Examples preview](https://rerun.io/preview/8ac1180d749f9bf9ae62ee57f96c66c832758a9d/examples) - [Recent benchmark results](https://build.rerun.io/graphs/crates.html) - [Wasm size tracking](https://build.rerun.io/graphs/sizes.html) --- .github/workflows/reusable_checks_cpp.yml | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/.github/workflows/reusable_checks_cpp.yml b/.github/workflows/reusable_checks_cpp.yml index d98471e91e36..faa590f9eff9 100644 --- a/.github/workflows/reusable_checks_cpp.yml +++ b/.github/workflows/reusable_checks_cpp.yml @@ -84,6 +84,14 @@ jobs: workload_identity_provider: ${{ secrets.GOOGLE_WORKLOAD_IDENTITY_PROVIDER }} service_account: ${{ secrets.GOOGLE_SERVICE_ACCOUNT }} + # Workaround for ASAN issues on Github images https://github.com/actions/runner-images/issues/9491 + - name: Fix kernel mmap rnd bits + if: runner.os == 'Linux' + # Asan in llvm 14 provided in ubuntu 22.04 is incompatible with + # high-entropy ASLR in much newer kernels that GitHub runners are + # using leading to random crashes: https://reviews.llvm.org/D148280 + run: sudo sysctl vm.mmap_rnd_bits=28 + - name: Build and run C++ tests shell: bash run: | From fd65304d7af45ba75652ad07693803a2cd8f3165 Mon Sep 17 00:00:00 2001 From: Jeremy Leibs Date: Mon, 18 Mar 2024 11:48:33 -0400 Subject: [PATCH 31/50] Don't merge recording and blueprint in --test-receive (#5560) ### What This was causing CI failures. ### Checklist * [x] I have read and agree to [Contributor Guide](https://github.com/rerun-io/rerun/blob/main/CONTRIBUTING.md) and the [Code of Conduct](https://github.com/rerun-io/rerun/blob/main/CODE_OF_CONDUCT.md) * [x] I've included a screenshot or gif (if applicable) * [x] I have tested the web demo (if applicable): * Using newly built examples: [app.rerun.io](https://app.rerun.io/pr/5560/index.html) * Using examples from latest `main` build: [app.rerun.io](https://app.rerun.io/pr/5560/index.html?manifest_url=https://app.rerun.io/version/main/examples_manifest.json) * Using full set of examples from `nightly` build: [app.rerun.io](https://app.rerun.io/pr/5560/index.html?manifest_url=https://app.rerun.io/version/nightly/examples_manifest.json) * [x] The PR title and labels are set such as to maximize their usefulness for the next release's CHANGELOG * [x] If applicable, add a new check to the [release checklist](https://github.com/rerun-io/rerun/blob/main/tests/python/release_checklist)! - [PR Build Summary](https://build.rerun.io/pr/5560) - [Docs preview](https://rerun.io/preview/3747cde334e6ed28de85c5d41353423813d5d706/docs) - [Examples preview](https://rerun.io/preview/3747cde334e6ed28de85c5d41353423813d5d706/examples) - [Recent benchmark results](https://build.rerun.io/graphs/crates.html) - [Wasm size tracking](https://build.rerun.io/graphs/sizes.html) --- crates/rerun/src/run.rs | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/crates/rerun/src/run.rs b/crates/rerun/src/run.rs index 9437471ab927..d54501580eb4 100644 --- a/crates/rerun/src/run.rs +++ b/crates/rerun/src/run.rs @@ -793,7 +793,8 @@ fn assert_receive_into_entity_db( ) -> anyhow::Result { re_log::info!("Receiving messages into a EntityDb…"); - let mut db: Option = None; + let mut rec: Option = None; + let mut bp: Option = None; let mut num_messages = 0; @@ -810,9 +811,14 @@ fn assert_receive_into_entity_db( match msg.payload { SmartMessagePayload::Msg(msg) => { - let mut_db = db.get_or_insert_with(|| { - re_entity_db::EntityDb::new(msg.store_id().clone()) - }); + let mut_db = match msg.store_id().kind { + re_log_types::StoreKind::Recording => rec.get_or_insert_with(|| { + re_entity_db::EntityDb::new(msg.store_id().clone()) + }), + re_log_types::StoreKind::Blueprint => bp.get_or_insert_with(|| { + re_entity_db::EntityDb::new(msg.store_id().clone()) + }), + }; mut_db.add(&msg)?; num_messages += 1; @@ -820,7 +826,7 @@ fn assert_receive_into_entity_db( SmartMessagePayload::Quit(err) => { if let Some(err) = err { anyhow::bail!("data source has disconnected unexpectedly: {err}") - } else if let Some(db) = db { + } else if let Some(db) = rec { db.store().sanity_check()?; anyhow::ensure!(0 < num_messages, "No messages received"); re_log::info!("Successfully ingested {num_messages} messages."); From 1385bcd657507f0620673dc6b5f1700b0d6953aa Mon Sep 17 00:00:00 2001 From: rerun-bot <132550499+rerun-bot@users.noreply.github.com> Date: Mon, 18 Mar 2024 17:13:26 +0100 Subject: [PATCH 32/50] Release 0.15.0-alpha.3 (#5559) ### What - [x] Bump all crate versions to `0.15.0-alpha.3` The release process will begin once this pull request is merged. --- Cargo.lock | 186 +++++++++--------- Cargo.toml | 94 ++++----- examples/rust/clock/Cargo.toml | 2 +- examples/rust/custom_data_loader/Cargo.toml | 2 +- examples/rust/custom_space_view/Cargo.toml | 2 +- .../rust/custom_store_subscriber/Cargo.toml | 2 +- examples/rust/dna/Cargo.toml | 2 +- examples/rust/extend_viewer_ui/Cargo.toml | 2 +- examples/rust/external_data_loader/Cargo.toml | 2 +- examples/rust/incremental_logging/Cargo.toml | 2 +- examples/rust/log_file/Cargo.toml | 2 +- examples/rust/minimal/Cargo.toml | 2 +- examples/rust/minimal_options/Cargo.toml | 2 +- examples/rust/minimal_serve/Cargo.toml | 2 +- examples/rust/objectron/Cargo.toml | 2 +- examples/rust/raw_mesh/Cargo.toml | 2 +- examples/rust/shared_recording/Cargo.toml | 2 +- examples/rust/spawn_viewer/Cargo.toml | 2 +- examples/rust/stdio/Cargo.toml | 2 +- examples/rust/template/Cargo.toml | 2 +- tests/rust/plot_dashboard_stress/Cargo.toml | 2 +- 21 files changed, 159 insertions(+), 159 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 9aa5700027ea..12859d24a49d 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1057,7 +1057,7 @@ dependencies = [ [[package]] name = "clock" -version = "0.15.0-alpha.2" +version = "0.15.0-alpha.3" dependencies = [ "anyhow", "clap", @@ -1394,7 +1394,7 @@ checksum = "96a6ac251f4a2aca6b3f91340350eab87ae57c3f127ffeb585e92bd336717991" [[package]] name = "custom_data_loader" -version = "0.15.0-alpha.2" +version = "0.15.0-alpha.3" dependencies = [ "re_build_tools", "rerun", @@ -1402,7 +1402,7 @@ dependencies = [ [[package]] name = "custom_space_view" -version = "0.15.0-alpha.2" +version = "0.15.0-alpha.3" dependencies = [ "mimalloc", "re_crash_handler", @@ -1413,7 +1413,7 @@ dependencies = [ [[package]] name = "custom_store_subscriber" -version = "0.15.0-alpha.2" +version = "0.15.0-alpha.3" dependencies = [ "re_build_tools", "rerun", @@ -1524,7 +1524,7 @@ dependencies = [ [[package]] name = "dna" -version = "0.15.0-alpha.2" +version = "0.15.0-alpha.3" dependencies = [ "itertools 0.12.0", "rand", @@ -1944,7 +1944,7 @@ dependencies = [ [[package]] name = "extend_viewer_ui" -version = "0.15.0-alpha.2" +version = "0.15.0-alpha.3" dependencies = [ "mimalloc", "re_crash_handler", @@ -2607,7 +2607,7 @@ dependencies = [ [[package]] name = "incremental_logging" -version = "0.15.0-alpha.2" +version = "0.15.0-alpha.3" dependencies = [ "anyhow", "clap", @@ -2957,7 +2957,7 @@ dependencies = [ [[package]] name = "log_benchmark" -version = "0.15.0-alpha.2" +version = "0.15.0-alpha.3" dependencies = [ "anyhow", "clap", @@ -2968,7 +2968,7 @@ dependencies = [ [[package]] name = "log_file" -version = "0.15.0-alpha.2" +version = "0.15.0-alpha.3" dependencies = [ "anyhow", "clap", @@ -3109,14 +3109,14 @@ dependencies = [ [[package]] name = "minimal" -version = "0.15.0-alpha.2" +version = "0.15.0-alpha.3" dependencies = [ "rerun", ] [[package]] name = "minimal_options" -version = "0.15.0-alpha.2" +version = "0.15.0-alpha.3" dependencies = [ "anyhow", "clap", @@ -3126,7 +3126,7 @@ dependencies = [ [[package]] name = "minimal_serve" -version = "0.15.0-alpha.2" +version = "0.15.0-alpha.3" dependencies = [ "rerun", "tokio", @@ -3494,7 +3494,7 @@ dependencies = [ [[package]] name = "objectron" -version = "0.15.0-alpha.2" +version = "0.15.0-alpha.3" dependencies = [ "anyhow", "clap", @@ -3677,7 +3677,7 @@ dependencies = [ [[package]] name = "plot_dashboard_stress" -version = "0.15.0-alpha.2" +version = "0.15.0-alpha.3" dependencies = [ "anyhow", "clap", @@ -4094,7 +4094,7 @@ checksum = "42a9830a0e1b9fb145ebb365b8bc4ccd75f290f98c0247deafbbe2c75cefb544" [[package]] name = "raw_mesh" -version = "0.15.0-alpha.2" +version = "0.15.0-alpha.3" dependencies = [ "anyhow", "bytes", @@ -4133,7 +4133,7 @@ dependencies = [ [[package]] name = "re_analytics" -version = "0.15.0-alpha.2" +version = "0.15.0-alpha.3" dependencies = [ "crossbeam", "directories-next", @@ -4175,7 +4175,7 @@ dependencies = [ [[package]] name = "re_build_examples" -version = "0.15.0-alpha.2" +version = "0.15.0-alpha.3" dependencies = [ "anyhow", "argh", @@ -4190,11 +4190,11 @@ dependencies = [ [[package]] name = "re_build_info" -version = "0.15.0-alpha.2" +version = "0.15.0-alpha.3" [[package]] name = "re_build_search_index" -version = "0.15.0-alpha.2" +version = "0.15.0-alpha.3" dependencies = [ "anyhow", "argh", @@ -4219,7 +4219,7 @@ dependencies = [ [[package]] name = "re_build_tools" -version = "0.15.0-alpha.2" +version = "0.15.0-alpha.3" dependencies = [ "anyhow", "cargo_metadata 0.18.1", @@ -4232,7 +4232,7 @@ dependencies = [ [[package]] name = "re_build_web_viewer" -version = "0.15.0-alpha.2" +version = "0.15.0-alpha.3" dependencies = [ "anyhow", "cargo_metadata 0.18.1", @@ -4242,7 +4242,7 @@ dependencies = [ [[package]] name = "re_crash_handler" -version = "0.15.0-alpha.2" +version = "0.15.0-alpha.3" dependencies = [ "backtrace", "itertools 0.12.0", @@ -4254,7 +4254,7 @@ dependencies = [ [[package]] name = "re_data_source" -version = "0.15.0-alpha.2" +version = "0.15.0-alpha.3" dependencies = [ "ahash", "anyhow", @@ -4277,7 +4277,7 @@ dependencies = [ [[package]] name = "re_data_store" -version = "0.15.0-alpha.2" +version = "0.15.0-alpha.3" dependencies = [ "ahash", "anyhow", @@ -4307,7 +4307,7 @@ dependencies = [ [[package]] name = "re_data_ui" -version = "0.15.0-alpha.2" +version = "0.15.0-alpha.3" dependencies = [ "ahash", "anyhow", @@ -4334,7 +4334,7 @@ dependencies = [ [[package]] name = "re_entity_db" -version = "0.15.0-alpha.2" +version = "0.15.0-alpha.3" dependencies = [ "ahash", "anyhow", @@ -4368,14 +4368,14 @@ dependencies = [ [[package]] name = "re_error" -version = "0.15.0-alpha.2" +version = "0.15.0-alpha.3" dependencies = [ "anyhow", ] [[package]] name = "re_format" -version = "0.15.0-alpha.2" +version = "0.15.0-alpha.3" dependencies = [ "comfy-table", "re_arrow2", @@ -4385,7 +4385,7 @@ dependencies = [ [[package]] name = "re_int_histogram" -version = "0.15.0-alpha.2" +version = "0.15.0-alpha.3" dependencies = [ "criterion", "insta", @@ -4396,7 +4396,7 @@ dependencies = [ [[package]] name = "re_log" -version = "0.15.0-alpha.2" +version = "0.15.0-alpha.3" dependencies = [ "env_logger", "js-sys", @@ -4409,7 +4409,7 @@ dependencies = [ [[package]] name = "re_log_encoding" -version = "0.15.0-alpha.2" +version = "0.15.0-alpha.3" dependencies = [ "criterion", "ehttp", @@ -4434,7 +4434,7 @@ dependencies = [ [[package]] name = "re_log_types" -version = "0.15.0-alpha.2" +version = "0.15.0-alpha.3" dependencies = [ "ahash", "anyhow", @@ -4472,7 +4472,7 @@ dependencies = [ [[package]] name = "re_memory" -version = "0.15.0-alpha.2" +version = "0.15.0-alpha.3" dependencies = [ "ahash", "backtrace", @@ -4493,7 +4493,7 @@ dependencies = [ [[package]] name = "re_query" -version = "0.15.0-alpha.2" +version = "0.15.0-alpha.3" dependencies = [ "backtrace", "criterion", @@ -4517,7 +4517,7 @@ dependencies = [ [[package]] name = "re_query_cache" -version = "0.15.0-alpha.2" +version = "0.15.0-alpha.3" dependencies = [ "ahash", "criterion", @@ -4542,7 +4542,7 @@ dependencies = [ [[package]] name = "re_renderer" -version = "0.15.0-alpha.2" +version = "0.15.0-alpha.3" dependencies = [ "ahash", "anyhow", @@ -4589,7 +4589,7 @@ dependencies = [ [[package]] name = "re_renderer_examples" -version = "0.15.0-alpha.2" +version = "0.15.0-alpha.3" dependencies = [ "ahash", "anyhow", @@ -4613,7 +4613,7 @@ dependencies = [ [[package]] name = "re_sdk" -version = "0.15.0-alpha.2" +version = "0.15.0-alpha.3" dependencies = [ "ahash", "anyhow", @@ -4645,7 +4645,7 @@ dependencies = [ [[package]] name = "re_sdk_comms" -version = "0.15.0-alpha.2" +version = "0.15.0-alpha.3" dependencies = [ "ahash", "crossbeam", @@ -4661,7 +4661,7 @@ dependencies = [ [[package]] name = "re_smart_channel" -version = "0.15.0-alpha.2" +version = "0.15.0-alpha.3" dependencies = [ "crossbeam", "parking_lot", @@ -4671,7 +4671,7 @@ dependencies = [ [[package]] name = "re_space_view" -version = "0.15.0-alpha.2" +version = "0.15.0-alpha.3" dependencies = [ "ahash", "egui", @@ -4692,7 +4692,7 @@ dependencies = [ [[package]] name = "re_space_view_bar_chart" -version = "0.15.0-alpha.2" +version = "0.15.0-alpha.3" dependencies = [ "egui", "egui_plot", @@ -4710,7 +4710,7 @@ dependencies = [ [[package]] name = "re_space_view_dataframe" -version = "0.15.0-alpha.2" +version = "0.15.0-alpha.3" dependencies = [ "egui", "egui_extras", @@ -4728,7 +4728,7 @@ dependencies = [ [[package]] name = "re_space_view_spatial" -version = "0.15.0-alpha.2" +version = "0.15.0-alpha.3" dependencies = [ "ahash", "anyhow", @@ -4766,7 +4766,7 @@ dependencies = [ [[package]] name = "re_space_view_tensor" -version = "0.15.0-alpha.2" +version = "0.15.0-alpha.3" dependencies = [ "ahash", "anyhow", @@ -4792,7 +4792,7 @@ dependencies = [ [[package]] name = "re_space_view_text_document" -version = "0.15.0-alpha.2" +version = "0.15.0-alpha.3" dependencies = [ "egui", "egui_commonmark", @@ -4810,7 +4810,7 @@ dependencies = [ [[package]] name = "re_space_view_text_log" -version = "0.15.0-alpha.2" +version = "0.15.0-alpha.3" dependencies = [ "egui", "egui_extras", @@ -4830,7 +4830,7 @@ dependencies = [ [[package]] name = "re_space_view_time_series" -version = "0.15.0-alpha.2" +version = "0.15.0-alpha.3" dependencies = [ "egui", "egui_plot", @@ -4853,7 +4853,7 @@ dependencies = [ [[package]] name = "re_string_interner" -version = "0.15.0-alpha.2" +version = "0.15.0-alpha.3" dependencies = [ "ahash", "nohash-hasher", @@ -4865,7 +4865,7 @@ dependencies = [ [[package]] name = "re_time_panel" -version = "0.15.0-alpha.2" +version = "0.15.0-alpha.3" dependencies = [ "egui", "itertools 0.12.0", @@ -4884,7 +4884,7 @@ dependencies = [ [[package]] name = "re_tracing" -version = "0.15.0-alpha.2" +version = "0.15.0-alpha.3" dependencies = [ "puffin", "puffin_http", @@ -4894,7 +4894,7 @@ dependencies = [ [[package]] name = "re_tuid" -version = "0.15.0-alpha.2" +version = "0.15.0-alpha.3" dependencies = [ "criterion", "document-features", @@ -4906,7 +4906,7 @@ dependencies = [ [[package]] name = "re_types" -version = "0.15.0-alpha.2" +version = "0.15.0-alpha.3" dependencies = [ "anyhow", "array-init", @@ -4945,7 +4945,7 @@ dependencies = [ [[package]] name = "re_types_builder" -version = "0.15.0-alpha.2" +version = "0.15.0-alpha.3" dependencies = [ "anyhow", "camino", @@ -4971,7 +4971,7 @@ dependencies = [ [[package]] name = "re_types_core" -version = "0.15.0-alpha.2" +version = "0.15.0-alpha.3" dependencies = [ "anyhow", "backtrace", @@ -4991,7 +4991,7 @@ dependencies = [ [[package]] name = "re_ui" -version = "0.15.0-alpha.2" +version = "0.15.0-alpha.3" dependencies = [ "eframe", "egui", @@ -5012,7 +5012,7 @@ dependencies = [ [[package]] name = "re_viewer" -version = "0.15.0-alpha.2" +version = "0.15.0-alpha.3" dependencies = [ "ahash", "anyhow", @@ -5076,7 +5076,7 @@ dependencies = [ [[package]] name = "re_viewer_context" -version = "0.15.0-alpha.2" +version = "0.15.0-alpha.3" dependencies = [ "ahash", "anyhow", @@ -5115,7 +5115,7 @@ dependencies = [ [[package]] name = "re_viewport" -version = "0.15.0-alpha.2" +version = "0.15.0-alpha.3" dependencies = [ "ahash", "array-init", @@ -5149,7 +5149,7 @@ dependencies = [ [[package]] name = "re_web_viewer_server" -version = "0.15.0-alpha.2" +version = "0.15.0-alpha.3" dependencies = [ "clap", "document-features", @@ -5164,7 +5164,7 @@ dependencies = [ [[package]] name = "re_ws_comms" -version = "0.15.0-alpha.2" +version = "0.15.0-alpha.3" dependencies = [ "anyhow", "bincode", @@ -5254,7 +5254,7 @@ checksum = "216080ab382b992234dda86873c18d4c48358f5cfcb70fd693d7f6f2131b628b" [[package]] name = "rerun" -version = "0.15.0-alpha.2" +version = "0.15.0-alpha.3" dependencies = [ "anyhow", "clap", @@ -5288,7 +5288,7 @@ dependencies = [ [[package]] name = "rerun-cli" -version = "0.15.0-alpha.2" +version = "0.15.0-alpha.3" dependencies = [ "document-features", "mimalloc", @@ -5304,7 +5304,7 @@ dependencies = [ [[package]] name = "rerun-loader-rust-file" -version = "0.15.0-alpha.2" +version = "0.15.0-alpha.3" dependencies = [ "anyhow", "argh", @@ -5313,7 +5313,7 @@ dependencies = [ [[package]] name = "rerun_c" -version = "0.15.0-alpha.2" +version = "0.15.0-alpha.3" dependencies = [ "ahash", "once_cell", @@ -5325,7 +5325,7 @@ dependencies = [ [[package]] name = "rerun_py" -version = "0.15.0-alpha.2" +version = "0.15.0-alpha.3" dependencies = [ "crossbeam", "document-features", @@ -5424,7 +5424,7 @@ dependencies = [ [[package]] name = "roundtrip_annotation_context" -version = "0.15.0-alpha.2" +version = "0.15.0-alpha.3" dependencies = [ "anyhow", "clap", @@ -5434,7 +5434,7 @@ dependencies = [ [[package]] name = "roundtrip_arrows2d" -version = "0.15.0-alpha.2" +version = "0.15.0-alpha.3" dependencies = [ "anyhow", "clap", @@ -5444,7 +5444,7 @@ dependencies = [ [[package]] name = "roundtrip_arrows3d" -version = "0.15.0-alpha.2" +version = "0.15.0-alpha.3" dependencies = [ "anyhow", "clap", @@ -5454,7 +5454,7 @@ dependencies = [ [[package]] name = "roundtrip_boxes2d" -version = "0.15.0-alpha.2" +version = "0.15.0-alpha.3" dependencies = [ "anyhow", "clap", @@ -5464,7 +5464,7 @@ dependencies = [ [[package]] name = "roundtrip_boxes3d" -version = "0.15.0-alpha.2" +version = "0.15.0-alpha.3" dependencies = [ "anyhow", "clap", @@ -5474,7 +5474,7 @@ dependencies = [ [[package]] name = "roundtrip_depth_image" -version = "0.15.0-alpha.2" +version = "0.15.0-alpha.3" dependencies = [ "anyhow", "clap", @@ -5485,7 +5485,7 @@ dependencies = [ [[package]] name = "roundtrip_disconnected_space" -version = "0.15.0-alpha.2" +version = "0.15.0-alpha.3" dependencies = [ "anyhow", "clap", @@ -5495,7 +5495,7 @@ dependencies = [ [[package]] name = "roundtrip_image" -version = "0.15.0-alpha.2" +version = "0.15.0-alpha.3" dependencies = [ "anyhow", "clap", @@ -5508,7 +5508,7 @@ dependencies = [ [[package]] name = "roundtrip_line_strips2d" -version = "0.15.0-alpha.2" +version = "0.15.0-alpha.3" dependencies = [ "anyhow", "clap", @@ -5518,7 +5518,7 @@ dependencies = [ [[package]] name = "roundtrip_line_strips3d" -version = "0.15.0-alpha.2" +version = "0.15.0-alpha.3" dependencies = [ "anyhow", "clap", @@ -5528,7 +5528,7 @@ dependencies = [ [[package]] name = "roundtrip_pinhole" -version = "0.15.0-alpha.2" +version = "0.15.0-alpha.3" dependencies = [ "anyhow", "clap", @@ -5538,7 +5538,7 @@ dependencies = [ [[package]] name = "roundtrip_points2d" -version = "0.15.0-alpha.2" +version = "0.15.0-alpha.3" dependencies = [ "anyhow", "clap", @@ -5548,7 +5548,7 @@ dependencies = [ [[package]] name = "roundtrip_points3d" -version = "0.15.0-alpha.2" +version = "0.15.0-alpha.3" dependencies = [ "anyhow", "clap", @@ -5558,7 +5558,7 @@ dependencies = [ [[package]] name = "roundtrip_segmentation_image" -version = "0.15.0-alpha.2" +version = "0.15.0-alpha.3" dependencies = [ "anyhow", "clap", @@ -5569,7 +5569,7 @@ dependencies = [ [[package]] name = "roundtrip_tensor" -version = "0.15.0-alpha.2" +version = "0.15.0-alpha.3" dependencies = [ "anyhow", "clap", @@ -5580,7 +5580,7 @@ dependencies = [ [[package]] name = "roundtrip_text_document" -version = "0.15.0-alpha.2" +version = "0.15.0-alpha.3" dependencies = [ "anyhow", "clap", @@ -5590,7 +5590,7 @@ dependencies = [ [[package]] name = "roundtrip_text_log" -version = "0.15.0-alpha.2" +version = "0.15.0-alpha.3" dependencies = [ "anyhow", "clap", @@ -5600,7 +5600,7 @@ dependencies = [ [[package]] name = "roundtrip_transform3d" -version = "0.15.0-alpha.2" +version = "0.15.0-alpha.3" dependencies = [ "anyhow", "clap", @@ -5610,7 +5610,7 @@ dependencies = [ [[package]] name = "roundtrip_view_coordinates" -version = "0.15.0-alpha.2" +version = "0.15.0-alpha.3" dependencies = [ "anyhow", "clap", @@ -5626,7 +5626,7 @@ checksum = "3cd14fd5e3b777a7422cca79358c57a8f6e3a703d9ac187448d0daf220c2407f" [[package]] name = "run_wasm" -version = "0.15.0-alpha.2" +version = "0.15.0-alpha.3" dependencies = [ "cargo-run-wasm", "pico-args", @@ -5901,7 +5901,7 @@ dependencies = [ [[package]] name = "shared_recording" -version = "0.15.0-alpha.2" +version = "0.15.0-alpha.3" dependencies = [ "rerun", ] @@ -6037,7 +6037,7 @@ dependencies = [ [[package]] name = "snippets" -version = "0.15.0-alpha.2" +version = "0.15.0-alpha.3" dependencies = [ "itertools 0.12.0", "ndarray", @@ -6059,7 +6059,7 @@ dependencies = [ [[package]] name = "spawn_viewer" -version = "0.15.0-alpha.2" +version = "0.15.0-alpha.3" dependencies = [ "rerun", ] @@ -6093,7 +6093,7 @@ checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" [[package]] name = "stdio" -version = "0.15.0-alpha.2" +version = "0.15.0-alpha.3" dependencies = [ "rerun", ] @@ -6189,7 +6189,7 @@ dependencies = [ [[package]] name = "template" -version = "0.15.0-alpha.2" +version = "0.15.0-alpha.3" dependencies = [ "rerun", ] @@ -6205,7 +6205,7 @@ dependencies = [ [[package]] name = "test_api" -version = "0.15.0-alpha.2" +version = "0.15.0-alpha.3" dependencies = [ "anyhow", "clap", @@ -6220,7 +6220,7 @@ dependencies = [ [[package]] name = "test_image_memory" -version = "0.15.0-alpha.2" +version = "0.15.0-alpha.3" dependencies = [ "mimalloc", "re_format", diff --git a/Cargo.toml b/Cargo.toml index 2a4110640321..1c1450e42119 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -20,59 +20,59 @@ include = ["../../LICENSE-APACHE", "../../LICENSE-MIT", "**/*.rs", "Cargo.toml"] license = "MIT OR Apache-2.0" repository = "https://github.com/rerun-io/rerun" rust-version = "1.74" -version = "0.15.0-alpha.2" +version = "0.15.0-alpha.3" [workspace.dependencies] # When using alpha-release, always use exact version, e.g. `version = "=0.x.y-alpha.z" # This is because we treat alpha-releases as incompatible, but semver doesn't. # In particular: if we compile rerun 0.3.0-alpha.0 we only want it to use # re_log_types 0.3.0-alpha.0, NOT 0.3.0-alpha.4 even though it is newer and semver-compatible. -re_analytics = { path = "crates/re_analytics", version = "=0.15.0-alpha.2", default-features = false } -re_build_search_index = { path = "crates/re_build_search_index", version = "=0.15.0-alpha.2", default-features = false } -re_build_examples = { path = "crates/re_build_examples", version = "=0.15.0-alpha.2", default-features = false } -re_build_info = { path = "crates/re_build_info", version = "=0.15.0-alpha.2", default-features = false } -re_build_tools = { path = "crates/re_build_tools", version = "=0.15.0-alpha.2", default-features = false } -re_build_web_viewer = { path = "crates/re_build_web_viewer", version = "=0.15.0-alpha.2", default-features = false } -re_crash_handler = { path = "crates/re_crash_handler", version = "=0.15.0-alpha.2", default-features = false } -re_data_source = { path = "crates/re_data_source", version = "=0.15.0-alpha.2", default-features = false } -re_data_store = { path = "crates/re_data_store", version = "=0.15.0-alpha.2", default-features = false } -re_data_ui = { path = "crates/re_data_ui", version = "=0.15.0-alpha.2", default-features = false } -re_entity_db = { path = "crates/re_entity_db", version = "=0.15.0-alpha.2", default-features = false } -re_error = { path = "crates/re_error", version = "=0.15.0-alpha.2", default-features = false } -re_format = { path = "crates/re_format", version = "=0.15.0-alpha.2", default-features = false } -re_int_histogram = { path = "crates/re_int_histogram", version = "=0.15.0-alpha.2", default-features = false } -re_log = { path = "crates/re_log", version = "=0.15.0-alpha.2", default-features = false } -re_log_encoding = { path = "crates/re_log_encoding", version = "=0.15.0-alpha.2", default-features = false } -re_log_types = { path = "crates/re_log_types", version = "=0.15.0-alpha.2", default-features = false } -re_memory = { path = "crates/re_memory", version = "=0.15.0-alpha.2", default-features = false } -re_query = { path = "crates/re_query", version = "=0.15.0-alpha.2", default-features = false } -re_query_cache = { path = "crates/re_query_cache", version = "=0.15.0-alpha.2", default-features = false } -re_renderer = { path = "crates/re_renderer", version = "=0.15.0-alpha.2", default-features = false } -re_sdk = { path = "crates/re_sdk", version = "=0.15.0-alpha.2", default-features = false } -re_sdk_comms = { path = "crates/re_sdk_comms", version = "=0.15.0-alpha.2", default-features = false } -re_smart_channel = { path = "crates/re_smart_channel", version = "=0.15.0-alpha.2", default-features = false } -re_space_view = { path = "crates/re_space_view", version = "=0.15.0-alpha.2", default-features = false } -re_space_view_bar_chart = { path = "crates/re_space_view_bar_chart", version = "=0.15.0-alpha.2", default-features = false } -re_space_view_dataframe = { path = "crates/re_space_view_dataframe", version = "=0.15.0-alpha.2", default-features = false } -re_space_view_spatial = { path = "crates/re_space_view_spatial", version = "=0.15.0-alpha.2", default-features = false } -re_space_view_tensor = { path = "crates/re_space_view_tensor", version = "=0.15.0-alpha.2", default-features = false } -re_space_view_text_document = { path = "crates/re_space_view_text_document", version = "=0.15.0-alpha.2", default-features = false } -re_space_view_text_log = { path = "crates/re_space_view_text_log", version = "=0.15.0-alpha.2", default-features = false } -re_space_view_time_series = { path = "crates/re_space_view_time_series", version = "=0.15.0-alpha.2", default-features = false } -re_string_interner = { path = "crates/re_string_interner", version = "=0.15.0-alpha.2", default-features = false } -re_time_panel = { path = "crates/re_time_panel", version = "=0.15.0-alpha.2", default-features = false } -re_tracing = { path = "crates/re_tracing", version = "=0.15.0-alpha.2", default-features = false } -re_tuid = { path = "crates/re_tuid", version = "=0.15.0-alpha.2", default-features = false } -re_types = { path = "crates/re_types", version = "=0.15.0-alpha.2", default-features = false } -re_types_builder = { path = "crates/re_types_builder", version = "=0.15.0-alpha.2", default-features = false } -re_types_core = { path = "crates/re_types_core", version = "=0.15.0-alpha.2", default-features = false } -re_ui = { path = "crates/re_ui", version = "=0.15.0-alpha.2", default-features = false } -re_viewer = { path = "crates/re_viewer", version = "=0.15.0-alpha.2", default-features = false } -re_viewer_context = { path = "crates/re_viewer_context", version = "=0.15.0-alpha.2", default-features = false } -re_viewport = { path = "crates/re_viewport", version = "=0.15.0-alpha.2", default-features = false } -re_web_viewer_server = { path = "crates/re_web_viewer_server", version = "=0.15.0-alpha.2", default-features = false } -re_ws_comms = { path = "crates/re_ws_comms", version = "=0.15.0-alpha.2", default-features = false } -rerun = { path = "crates/rerun", version = "=0.15.0-alpha.2", default-features = false } +re_analytics = { path = "crates/re_analytics", version = "=0.15.0-alpha.3", default-features = false } +re_build_search_index = { path = "crates/re_build_search_index", version = "=0.15.0-alpha.3", default-features = false } +re_build_examples = { path = "crates/re_build_examples", version = "=0.15.0-alpha.3", default-features = false } +re_build_info = { path = "crates/re_build_info", version = "=0.15.0-alpha.3", default-features = false } +re_build_tools = { path = "crates/re_build_tools", version = "=0.15.0-alpha.3", default-features = false } +re_build_web_viewer = { path = "crates/re_build_web_viewer", version = "=0.15.0-alpha.3", default-features = false } +re_crash_handler = { path = "crates/re_crash_handler", version = "=0.15.0-alpha.3", default-features = false } +re_data_source = { path = "crates/re_data_source", version = "=0.15.0-alpha.3", default-features = false } +re_data_store = { path = "crates/re_data_store", version = "=0.15.0-alpha.3", default-features = false } +re_data_ui = { path = "crates/re_data_ui", version = "=0.15.0-alpha.3", default-features = false } +re_entity_db = { path = "crates/re_entity_db", version = "=0.15.0-alpha.3", default-features = false } +re_error = { path = "crates/re_error", version = "=0.15.0-alpha.3", default-features = false } +re_format = { path = "crates/re_format", version = "=0.15.0-alpha.3", default-features = false } +re_int_histogram = { path = "crates/re_int_histogram", version = "=0.15.0-alpha.3", default-features = false } +re_log = { path = "crates/re_log", version = "=0.15.0-alpha.3", default-features = false } +re_log_encoding = { path = "crates/re_log_encoding", version = "=0.15.0-alpha.3", default-features = false } +re_log_types = { path = "crates/re_log_types", version = "=0.15.0-alpha.3", default-features = false } +re_memory = { path = "crates/re_memory", version = "=0.15.0-alpha.3", default-features = false } +re_query = { path = "crates/re_query", version = "=0.15.0-alpha.3", default-features = false } +re_query_cache = { path = "crates/re_query_cache", version = "=0.15.0-alpha.3", default-features = false } +re_renderer = { path = "crates/re_renderer", version = "=0.15.0-alpha.3", default-features = false } +re_sdk = { path = "crates/re_sdk", version = "=0.15.0-alpha.3", default-features = false } +re_sdk_comms = { path = "crates/re_sdk_comms", version = "=0.15.0-alpha.3", default-features = false } +re_smart_channel = { path = "crates/re_smart_channel", version = "=0.15.0-alpha.3", default-features = false } +re_space_view = { path = "crates/re_space_view", version = "=0.15.0-alpha.3", default-features = false } +re_space_view_bar_chart = { path = "crates/re_space_view_bar_chart", version = "=0.15.0-alpha.3", default-features = false } +re_space_view_dataframe = { path = "crates/re_space_view_dataframe", version = "=0.15.0-alpha.3", default-features = false } +re_space_view_spatial = { path = "crates/re_space_view_spatial", version = "=0.15.0-alpha.3", default-features = false } +re_space_view_tensor = { path = "crates/re_space_view_tensor", version = "=0.15.0-alpha.3", default-features = false } +re_space_view_text_document = { path = "crates/re_space_view_text_document", version = "=0.15.0-alpha.3", default-features = false } +re_space_view_text_log = { path = "crates/re_space_view_text_log", version = "=0.15.0-alpha.3", default-features = false } +re_space_view_time_series = { path = "crates/re_space_view_time_series", version = "=0.15.0-alpha.3", default-features = false } +re_string_interner = { path = "crates/re_string_interner", version = "=0.15.0-alpha.3", default-features = false } +re_time_panel = { path = "crates/re_time_panel", version = "=0.15.0-alpha.3", default-features = false } +re_tracing = { path = "crates/re_tracing", version = "=0.15.0-alpha.3", default-features = false } +re_tuid = { path = "crates/re_tuid", version = "=0.15.0-alpha.3", default-features = false } +re_types = { path = "crates/re_types", version = "=0.15.0-alpha.3", default-features = false } +re_types_builder = { path = "crates/re_types_builder", version = "=0.15.0-alpha.3", default-features = false } +re_types_core = { path = "crates/re_types_core", version = "=0.15.0-alpha.3", default-features = false } +re_ui = { path = "crates/re_ui", version = "=0.15.0-alpha.3", default-features = false } +re_viewer = { path = "crates/re_viewer", version = "=0.15.0-alpha.3", default-features = false } +re_viewer_context = { path = "crates/re_viewer_context", version = "=0.15.0-alpha.3", default-features = false } +re_viewport = { path = "crates/re_viewport", version = "=0.15.0-alpha.3", default-features = false } +re_web_viewer_server = { path = "crates/re_web_viewer_server", version = "=0.15.0-alpha.3", default-features = false } +re_ws_comms = { path = "crates/re_ws_comms", version = "=0.15.0-alpha.3", default-features = false } +rerun = { path = "crates/rerun", version = "=0.15.0-alpha.3", default-features = false } # egui-crates: ecolor = "0.26.2" diff --git a/examples/rust/clock/Cargo.toml b/examples/rust/clock/Cargo.toml index 2fa83f3f2fa8..0e9a6c8515f5 100644 --- a/examples/rust/clock/Cargo.toml +++ b/examples/rust/clock/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "clock" -version = "0.15.0-alpha.2" +version = "0.15.0-alpha.3" edition = "2021" rust-version = "1.74" license = "MIT OR Apache-2.0" diff --git a/examples/rust/custom_data_loader/Cargo.toml b/examples/rust/custom_data_loader/Cargo.toml index b57fb6a919f8..2b85c41653c1 100644 --- a/examples/rust/custom_data_loader/Cargo.toml +++ b/examples/rust/custom_data_loader/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "custom_data_loader" -version = "0.15.0-alpha.2" +version = "0.15.0-alpha.3" edition = "2021" rust-version = "1.74" license = "MIT OR Apache-2.0" diff --git a/examples/rust/custom_space_view/Cargo.toml b/examples/rust/custom_space_view/Cargo.toml index d210477765e9..2d8f1e78018d 100644 --- a/examples/rust/custom_space_view/Cargo.toml +++ b/examples/rust/custom_space_view/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "custom_space_view" -version = "0.15.0-alpha.2" +version = "0.15.0-alpha.3" edition = "2021" rust-version = "1.74" license = "MIT OR Apache-2.0" diff --git a/examples/rust/custom_store_subscriber/Cargo.toml b/examples/rust/custom_store_subscriber/Cargo.toml index 67606bcdffcb..df8f5c269393 100644 --- a/examples/rust/custom_store_subscriber/Cargo.toml +++ b/examples/rust/custom_store_subscriber/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "custom_store_subscriber" -version = "0.15.0-alpha.2" +version = "0.15.0-alpha.3" edition = "2021" rust-version = "1.74" license = "MIT OR Apache-2.0" diff --git a/examples/rust/dna/Cargo.toml b/examples/rust/dna/Cargo.toml index ae5f33a579e0..c913bf792d2b 100644 --- a/examples/rust/dna/Cargo.toml +++ b/examples/rust/dna/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "dna" -version = "0.15.0-alpha.2" +version = "0.15.0-alpha.3" edition = "2021" rust-version = "1.74" license = "MIT OR Apache-2.0" diff --git a/examples/rust/extend_viewer_ui/Cargo.toml b/examples/rust/extend_viewer_ui/Cargo.toml index 9f836451c001..bf75342bcf04 100644 --- a/examples/rust/extend_viewer_ui/Cargo.toml +++ b/examples/rust/extend_viewer_ui/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "extend_viewer_ui" -version = "0.15.0-alpha.2" +version = "0.15.0-alpha.3" edition = "2021" rust-version = "1.74" license = "MIT OR Apache-2.0" diff --git a/examples/rust/external_data_loader/Cargo.toml b/examples/rust/external_data_loader/Cargo.toml index 41ad4d19be70..a36d13fc0d8a 100644 --- a/examples/rust/external_data_loader/Cargo.toml +++ b/examples/rust/external_data_loader/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "rerun-loader-rust-file" -version = "0.15.0-alpha.2" +version = "0.15.0-alpha.3" edition = "2021" rust-version = "1.74" license = "MIT OR Apache-2.0" diff --git a/examples/rust/incremental_logging/Cargo.toml b/examples/rust/incremental_logging/Cargo.toml index 34635f1109ae..ac5205661110 100644 --- a/examples/rust/incremental_logging/Cargo.toml +++ b/examples/rust/incremental_logging/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "incremental_logging" -version = "0.15.0-alpha.2" +version = "0.15.0-alpha.3" edition = "2021" rust-version = "1.74" license = "MIT OR Apache-2.0" diff --git a/examples/rust/log_file/Cargo.toml b/examples/rust/log_file/Cargo.toml index b3a5f3ddb04f..2d584d81bb49 100644 --- a/examples/rust/log_file/Cargo.toml +++ b/examples/rust/log_file/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "log_file" -version = "0.15.0-alpha.2" +version = "0.15.0-alpha.3" edition = "2021" rust-version = "1.74" license = "MIT OR Apache-2.0" diff --git a/examples/rust/minimal/Cargo.toml b/examples/rust/minimal/Cargo.toml index 7c1073483dad..3e9b4064acab 100644 --- a/examples/rust/minimal/Cargo.toml +++ b/examples/rust/minimal/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "minimal" -version = "0.15.0-alpha.2" +version = "0.15.0-alpha.3" edition = "2021" rust-version = "1.74" license = "MIT OR Apache-2.0" diff --git a/examples/rust/minimal_options/Cargo.toml b/examples/rust/minimal_options/Cargo.toml index f870a72f1c45..7fbebef29dab 100644 --- a/examples/rust/minimal_options/Cargo.toml +++ b/examples/rust/minimal_options/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "minimal_options" -version = "0.15.0-alpha.2" +version = "0.15.0-alpha.3" edition = "2021" rust-version = "1.74" license = "MIT OR Apache-2.0" diff --git a/examples/rust/minimal_serve/Cargo.toml b/examples/rust/minimal_serve/Cargo.toml index 49ba06a7b388..58c0e3cebf3a 100644 --- a/examples/rust/minimal_serve/Cargo.toml +++ b/examples/rust/minimal_serve/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "minimal_serve" -version = "0.15.0-alpha.2" +version = "0.15.0-alpha.3" edition = "2021" rust-version = "1.74" license = "MIT OR Apache-2.0" diff --git a/examples/rust/objectron/Cargo.toml b/examples/rust/objectron/Cargo.toml index f1fa4d3ba081..aac6e6bbc9f8 100644 --- a/examples/rust/objectron/Cargo.toml +++ b/examples/rust/objectron/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "objectron" -version = "0.15.0-alpha.2" +version = "0.15.0-alpha.3" edition = "2021" rust-version = "1.74" license = "MIT OR Apache-2.0" diff --git a/examples/rust/raw_mesh/Cargo.toml b/examples/rust/raw_mesh/Cargo.toml index 7a8a790fb46c..11dbf7b167c2 100644 --- a/examples/rust/raw_mesh/Cargo.toml +++ b/examples/rust/raw_mesh/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "raw_mesh" -version = "0.15.0-alpha.2" +version = "0.15.0-alpha.3" edition = "2021" rust-version = "1.74" license = "MIT OR Apache-2.0" diff --git a/examples/rust/shared_recording/Cargo.toml b/examples/rust/shared_recording/Cargo.toml index 0129378a6782..703657ded727 100644 --- a/examples/rust/shared_recording/Cargo.toml +++ b/examples/rust/shared_recording/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "shared_recording" -version = "0.15.0-alpha.2" +version = "0.15.0-alpha.3" edition = "2021" rust-version = "1.74" license = "MIT OR Apache-2.0" diff --git a/examples/rust/spawn_viewer/Cargo.toml b/examples/rust/spawn_viewer/Cargo.toml index 14ff9a9fc36e..91d0df47ff2b 100644 --- a/examples/rust/spawn_viewer/Cargo.toml +++ b/examples/rust/spawn_viewer/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "spawn_viewer" -version = "0.15.0-alpha.2" +version = "0.15.0-alpha.3" edition = "2021" rust-version = "1.74" license = "MIT OR Apache-2.0" diff --git a/examples/rust/stdio/Cargo.toml b/examples/rust/stdio/Cargo.toml index 4ce902180e3c..797ac4debbc3 100644 --- a/examples/rust/stdio/Cargo.toml +++ b/examples/rust/stdio/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "stdio" -version = "0.15.0-alpha.2" +version = "0.15.0-alpha.3" edition = "2021" rust-version = "1.74" license = "MIT OR Apache-2.0" diff --git a/examples/rust/template/Cargo.toml b/examples/rust/template/Cargo.toml index d4fc62487209..34e5ca05682d 100644 --- a/examples/rust/template/Cargo.toml +++ b/examples/rust/template/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "template" -version = "0.15.0-alpha.2" +version = "0.15.0-alpha.3" edition = "2021" rust-version = "1.74" license = "MIT OR Apache-2.0" diff --git a/tests/rust/plot_dashboard_stress/Cargo.toml b/tests/rust/plot_dashboard_stress/Cargo.toml index 6ee75304ddbe..9c67fd0cbee6 100644 --- a/tests/rust/plot_dashboard_stress/Cargo.toml +++ b/tests/rust/plot_dashboard_stress/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "plot_dashboard_stress" -version = "0.15.0-alpha.2" +version = "0.15.0-alpha.3" edition = "2021" rust-version = "1.74" license = "MIT OR Apache-2.0" From cb19989974861108fad51b35c8c5a52bdf186bd5 Mon Sep 17 00:00:00 2001 From: Antoine Beyeler <49431240+abey79@users.noreply.github.com> Date: Mon, 18 Mar 2024 17:53:47 +0100 Subject: [PATCH 33/50] Fix a bug where an incorrect 3D space view origin could be suggested (#5565) ### What Fix a bug introduced in #5411 and #5423 where the wrong origin would be suggested when creating a 3D space view from an entity part of a 2D space view. Quoting the original PR: > For 3D space views: the origin of the subspace that contains the selected entities common ancestor, _or_, if that one is rooted on a pinhole, the origin of the parent sub-space. Further, if a `ViewCoordinate` is logged in between the subspace origin and the common ancestor, then it's used as suggested origin. In most case, that means `/`, unless a `DisconnectedSpace` is encountered. The part of that logic where we check for a `ViewCoordinate` in the parent subspace was implemented incorrectly, which resulted in `check_context_menu_suggested_origin` to fail. With this PR, this test now passes. ### Checklist * [x] I have read and agree to [Contributor Guide](https://github.com/rerun-io/rerun/blob/main/CONTRIBUTING.md) and the [Code of Conduct](https://github.com/rerun-io/rerun/blob/main/CODE_OF_CONDUCT.md) * [x] I've included a screenshot or gif (if applicable) * [x] I have tested the web demo (if applicable): * Using newly built examples: [app.rerun.io](https://app.rerun.io/pr/5565/index.html) * Using examples from latest `main` build: [app.rerun.io](https://app.rerun.io/pr/5565/index.html?manifest_url=https://app.rerun.io/version/main/examples_manifest.json) * Using full set of examples from `nightly` build: [app.rerun.io](https://app.rerun.io/pr/5565/index.html?manifest_url=https://app.rerun.io/version/nightly/examples_manifest.json) * [x] The PR title and labels are set such as to maximize their usefulness for the next release's CHANGELOG * [x] If applicable, add a new check to the [release checklist](https://github.com/rerun-io/rerun/blob/main/tests/python/release_checklist)! - [PR Build Summary](https://build.rerun.io/pr/5565) - [Docs preview](https://rerun.io/preview/268125aaddc63e0524743528cf3b34c9ea0640e3/docs) - [Examples preview](https://rerun.io/preview/268125aaddc63e0524743528cf3b34c9ea0640e3/examples) - [Recent benchmark results](https://build.rerun.io/graphs/crates.html) - [Wasm size tracking](https://build.rerun.io/graphs/sizes.html) --- .../src/space_view_3d.rs | 24 +++++++++++-------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/crates/re_space_view_spatial/src/space_view_3d.rs b/crates/re_space_view_spatial/src/space_view_3d.rs index 19287fd40a20..1c8c56b9ed26 100644 --- a/crates/re_space_view_spatial/src/space_view_3d.rs +++ b/crates/re_space_view_spatial/src/space_view_3d.rs @@ -98,14 +98,16 @@ impl SpaceViewClass for SpatialSpaceView3D { // Also, if a ViewCoordinate3D is logged somewhere between the common ancestor and the // subspace origin, we use it as origin. SpatialTopology::access(entity_db.store_id(), |topo| { - let subspace = topo.subspace_for_entity(&common_ancestor); + let common_ancestor_subspace = topo.subspace_for_entity(&common_ancestor); - let subspace_origin = if subspace.supports_3d_content() { - Some(subspace) + // Consider the case where the common ancestor might be in a 2D space that is connected + // to a parent space. In this case, the parent space is the correct space. + let subspace = if common_ancestor_subspace.supports_3d_content() { + Some(common_ancestor_subspace) } else { - topo.subspace_for_subspace_origin(subspace.parent_space) - } - .map(|subspace| subspace.origin.clone()); + topo.subspace_for_subspace_origin(common_ancestor_subspace.parent_space) + }; + let subspace_origin = subspace.map(|subspace| subspace.origin.clone()); // Find the first ViewCoordinates3d logged, walking up from the common ancestor to the // subspace origin. @@ -114,10 +116,12 @@ impl SpaceViewClass for SpatialSpaceView3D { .into_iter() .rev() .find(|path| { - subspace - .heuristic_hints - .get(path) - .is_some_and(|hint| hint.contains(HeuristicHints::ViewCoordinates3d)) + subspace.is_some_and(|subspace| { + subspace + .heuristic_hints + .get(path) + .is_some_and(|hint| hint.contains(HeuristicHints::ViewCoordinates3d)) + }) }) .or(subspace_origin) }) From 71cd663e2c5b2c217763f4942a7fc72170cc7a30 Mon Sep 17 00:00:00 2001 From: Emil Ernerfeldt Date: Mon, 18 Mar 2024 18:54:56 +0100 Subject: [PATCH 34/50] Add blueprint to the `nuscenes` example (#5556) ### What * Part of https://github.com/rerun-io/rerun/issues/5468 An interesting part of this is that the blueprint is dynamically created based on the the data (which cameras there are). Before: ![image](https://github.com/rerun-io/rerun/assets/1148717/e8c8c5f2-6502-4325-8268-1067d824494a) After: ![image](https://github.com/rerun-io/rerun/assets/1148717/60e0673e-5e72-4dc8-8bc3-d5c6e49c7d64) The 3D camera is (still) too zoomed out, but gathering all the 2D images in a tab view puts more focus on the 3D view. ### Checklist * [x] I have read and agree to [Contributor Guide](https://github.com/rerun-io/rerun/blob/main/CONTRIBUTING.md) and the [Code of Conduct](https://github.com/rerun-io/rerun/blob/main/CODE_OF_CONDUCT.md) * [x] I've included a screenshot or gif (if applicable) * [x] I have tested the web demo (if applicable): * Using newly built examples: [app.rerun.io](https://app.rerun.io/pr/5556/index.html) * Using examples from latest `main` build: [app.rerun.io](https://app.rerun.io/pr/5556/index.html?manifest_url=https://app.rerun.io/version/main/examples_manifest.json) * Using full set of examples from `nightly` build: [app.rerun.io](https://app.rerun.io/pr/5556/index.html?manifest_url=https://app.rerun.io/version/nightly/examples_manifest.json) * [x] The PR title and labels are set such as to maximize their usefulness for the next release's CHANGELOG * [x] If applicable, add a new check to the [release checklist](https://github.com/rerun-io/rerun/blob/main/tests/python/release_checklist)! - [PR Build Summary](https://build.rerun.io/pr/5556) - [Docs preview](https://rerun.io/preview/b620da1066ab9c4ba09a3bd0dee813cc3af1de57/docs) - [Examples preview](https://rerun.io/preview/b620da1066ab9c4ba09a3bd0dee813cc3af1de57/examples) - [Recent benchmark results](https://build.rerun.io/graphs/crates.html) - [Wasm size tracking](https://build.rerun.io/graphs/sizes.html) --- crates/re_viewer/src/ui/selection_panel.rs | 2 +- examples/python/arkit_scenes/main.py | 40 ++++++++--------- examples/python/nuscenes/main.py | 45 +++++++++++++++++-- rerun_py/rerun_sdk/rerun/blueprint/api.py | 2 +- .../rerun_sdk/rerun/blueprint/containers.py | 4 +- 5 files changed, 64 insertions(+), 29 deletions(-) diff --git a/crates/re_viewer/src/ui/selection_panel.rs b/crates/re_viewer/src/ui/selection_panel.rs index 84136ab00b68..7f380246eb33 100644 --- a/crates/re_viewer/src/ui/selection_panel.rs +++ b/crates/re_viewer/src/ui/selection_panel.rs @@ -855,7 +855,7 @@ fn blueprint_ui_for_space_view( .root_handle() .and_then(|root| query_result.tree.lookup_result(root)) else { - re_log::error!("Could not find root data result for Space View {space_view_id:?}"); + re_log::error_once!("Could not find root data result for Space View {space_view_id:?}"); return; }; diff --git a/examples/python/arkit_scenes/main.py b/examples/python/arkit_scenes/main.py index 8f0b0046591e..b56c7234f4ba 100755 --- a/examples/python/arkit_scenes/main.py +++ b/examples/python/arkit_scenes/main.py @@ -330,31 +330,29 @@ def main() -> None: primary_camera_entity = highres_entity_path if args.include_highres else lowres_posed_entity_path - rr.script_setup( - args, - "rerun_example_arkit_scenes", - blueprint=rbl.Horizontal( - rbl.Spatial3DView(name="3D"), - rbl.Vertical( - rbl.Tabs( - # Note that we re-project the annotations into the 2D views: - # For this to work, the origin of the 2D views has to be a pinhole camera, - # this way the viewer knows how to project the 3D annotations into the 2D views. - rbl.Spatial2DView( - name="RGB", - origin=primary_camera_entity, - contents=[f"{primary_camera_entity}/rgb", "/world/annotations/**"], - ), - rbl.Spatial2DView( - name="Depth", - origin=primary_camera_entity, - contents=[f"{primary_camera_entity}/depth", "/world/annotations/**"], - ), + blueprint = rbl.Horizontal( + rbl.Spatial3DView(name="3D"), + rbl.Vertical( + rbl.Tabs( + # Note that we re-project the annotations into the 2D views: + # For this to work, the origin of the 2D views has to be a pinhole camera, + # this way the viewer knows how to project the 3D annotations into the 2D views. + rbl.Spatial2DView( + name="RGB", + origin=primary_camera_entity, + contents=["$origin/rgb", "/world/annotations/**"], + ), + rbl.Spatial2DView( + name="Depth", + origin=primary_camera_entity, + contents=["$origin/depth", "/world/annotations/**"], ), - rbl.TextDocumentView(name="Readme"), ), + rbl.TextDocumentView(name="Readme"), ), ) + + rr.script_setup(args, "rerun_example_arkit_scenes", blueprint=blueprint) recording_path = ensure_recording_available(args.video_id, args.include_highres) log_arkit(recording_path, args.include_highres) diff --git a/examples/python/nuscenes/main.py b/examples/python/nuscenes/main.py index 0c9157970cb1..253772dd053a 100755 --- a/examples/python/nuscenes/main.py +++ b/examples/python/nuscenes/main.py @@ -9,6 +9,7 @@ import matplotlib import numpy as np import rerun as rr +import rerun.blueprint as rbl from download_dataset import MINISPLIT_SCENES, download_minisplit from nuscenes import nuscenes @@ -47,9 +48,28 @@ def ensure_scene_available(root_dir: pathlib.Path, dataset_version: str, scene_n raise ValueError(f"{scene_name=} not found in dataset") -def log_nuscenes(root_dir: pathlib.Path, dataset_version: str, scene_name: str, max_time_sec: float) -> None: +def nuscene_sensor_names(nusc: nuscenes.NuScenes, scene_name: str) -> set[str]: + """Return all sensor names in the scene.""" + + sensor_names = set() + + scene = next(s for s in nusc.scene if s["name"] == scene_name) + first_sample = nusc.get("sample", scene["first_sample_token"]) + for sample_data_token in first_sample["data"].values(): + sample_data = nusc.get("sample_data", sample_data_token) + if sample_data["sensor_modality"] == "camera": + current_camera_token = sample_data_token + while current_camera_token != "": + sample_data = nusc.get("sample_data", current_camera_token) + sensor_name = sample_data["channel"] + sensor_names.add(sensor_name) + current_camera_token = sample_data["next"] + + return sensor_names + + +def log_nuscenes(nusc: nuscenes.NuScenes, scene_name: str, max_time_sec: float) -> None: """Log nuScenes scene.""" - nusc = nuscenes.NuScenes(version=dataset_version, dataroot=root_dir, verbose=True) scene = next(s for s in nusc.scene if s["name"] == scene_name) @@ -233,8 +253,25 @@ def main() -> None: ensure_scene_available(args.root_dir, args.dataset_version, args.scene_name) - rr.script_setup(args, "rerun_example_nuscenes") - log_nuscenes(args.root_dir, args.dataset_version, args.scene_name, max_time_sec=args.seconds) + nusc = nuscenes.NuScenes(version=args.dataset_version, dataroot=args.root_dir, verbose=True) + + # Set up the Rerun Blueprint (how the visualization is organized): + sensor_space_views = [ + rbl.Spatial2DView( + name=sensor_name, + origin=f"world/ego_vehicle/{sensor_name}", + ) + for sensor_name in nuscene_sensor_names(nusc, args.scene_name) + ] + blueprint = rbl.Vertical( + rbl.Spatial3DView(name="3D", origin="world"), + rbl.Grid(*sensor_space_views), + row_shares=[3, 2], + ) + + rr.script_setup(args, "rerun_example_nuscenes", blueprint=blueprint) + + log_nuscenes(nusc, args.scene_name, max_time_sec=args.seconds) rr.script_teardown(args) diff --git a/rerun_py/rerun_sdk/rerun/blueprint/api.py b/rerun_py/rerun_sdk/rerun/blueprint/api.py index b106feb23f3d..bd7cc25fde72 100644 --- a/rerun_py/rerun_sdk/rerun/blueprint/api.py +++ b/rerun_py/rerun_sdk/rerun/blueprint/api.py @@ -142,7 +142,7 @@ def __init__( This is only applicable to `Horizontal` or `Grid` containers. row_shares The layout shares of the rows in the container. The share is used to determine what fraction of the total height each - row should take up. The ros with index `i` will take up the fraction `shares[i] / total_shares`. + row should take up. The row with index `i` will take up the fraction `shares[i] / total_shares`. This is only applicable to `Vertical` or `Grid` containers. grid_columns The number of columns in the grid. This is only applicable to `Grid` containers. diff --git a/rerun_py/rerun_sdk/rerun/blueprint/containers.py b/rerun_py/rerun_sdk/rerun/blueprint/containers.py index 243201151c37..40c6bc825fb5 100644 --- a/rerun_py/rerun_sdk/rerun/blueprint/containers.py +++ b/rerun_py/rerun_sdk/rerun/blueprint/containers.py @@ -39,7 +39,7 @@ def __init__(self, *contents: Container | SpaceView, row_shares: Optional[RowSha All positional arguments are the contents of the container, which may be either other containers or space views. row_shares The layout shares of the rows in the container. The share is used to determine what fraction of the total height each - row should take up. The ros with index `i` will take up the fraction `shares[i] / total_shares`. + row should take up. The row with index `i` will take up the fraction `shares[i] / total_shares`. """ super().__init__(*contents, kind=ContainerKind.Vertical, row_shares=row_shares) @@ -67,7 +67,7 @@ def __init__( column should take up. The column with index `i` will take up the fraction `shares[i] / total_shares`. row_shares The layout shares of the rows in the container. The share is used to determine what fraction of the total height each - row should take up. The ros with index `i` will take up the fraction `shares[i] / total_shares`. + row should take up. The row with index `i` will take up the fraction `shares[i] / total_shares`. grid_columns The number of columns in the grid. From 21d010ea4304167983d38a151bd61587c6a3c1ac Mon Sep 17 00:00:00 2001 From: Antoine Beyeler <49431240+abey79@users.noreply.github.com> Date: Mon, 18 Mar 2024 19:57:03 +0100 Subject: [PATCH 35/50] Improve many release checks with blueprints (#5561) ### What * Fixes #5477 ### Checklist * [x] I have read and agree to [Contributor Guide](https://github.com/rerun-io/rerun/blob/main/CONTRIBUTING.md) and the [Code of Conduct](https://github.com/rerun-io/rerun/blob/main/CODE_OF_CONDUCT.md) * [x] I've included a screenshot or gif (if applicable) * [x] I have tested the web demo (if applicable): * Using newly built examples: [app.rerun.io](https://app.rerun.io/pr/5561/index.html) * Using examples from latest `main` build: [app.rerun.io](https://app.rerun.io/pr/5561/index.html?manifest_url=https://app.rerun.io/version/main/examples_manifest.json) * Using full set of examples from `nightly` build: [app.rerun.io](https://app.rerun.io/pr/5561/index.html?manifest_url=https://app.rerun.io/version/nightly/examples_manifest.json) * [x] The PR title and labels are set such as to maximize their usefulness for the next release's CHANGELOG * [x] If applicable, add a new check to the [release checklist](https://github.com/rerun-io/rerun/blob/main/tests/python/release_checklist)! - [PR Build Summary](https://build.rerun.io/pr/5561) - [Docs preview](https://rerun.io/preview/84194327e6aed95892948de58f757d177b6e2c21/docs) - [Examples preview](https://rerun.io/preview/84194327e6aed95892948de58f757d177b6e2c21/examples) - [Recent benchmark results](https://build.rerun.io/graphs/crates.html) - [Wasm size tracking](https://build.rerun.io/graphs/sizes.html) --- ...ntext_menu_add_entity_to_new_space_view.py | 26 ++++-- .../check_context_menu_collapse_expand_all.py | 23 +++-- ...heck_context_menu_invalid_sub_container.py | 34 ++++--- .../check_context_menu_multi_selection.py | 67 +++++++------- .../check_context_menu_single_selection.py | 89 +++++++++++-------- ...xt_menu_single_selection_blueprint_tree.py | 81 +++++++++-------- .../check_context_menu_suggested_origin.py | 50 +++++++---- tests/python/release_checklist/check_focus.py | 34 +++---- 8 files changed, 238 insertions(+), 166 deletions(-) diff --git a/tests/python/release_checklist/check_context_menu_add_entity_to_new_space_view.py b/tests/python/release_checklist/check_context_menu_add_entity_to_new_space_view.py index 15407e44c62f..e90604396a0d 100644 --- a/tests/python/release_checklist/check_context_menu_add_entity_to_new_space_view.py +++ b/tests/python/release_checklist/check_context_menu_add_entity_to_new_space_view.py @@ -7,19 +7,19 @@ import numpy as np import rerun as rr +import rerun.blueprint as rrb README = """ # Context Menu - Add entity to new space view -## Blueprint tree +#### Blueprint tree -* Reset the blueprint. -* Expend all space views and data result. +* "Expand all" on the Vertical containers. * Right-click on the `boxes3d` entity and select "Add to new space view" -> "3D". Check a new space view is created _and selected_ with the boxes3d entity and origin set to root. * In each space view, right-click on the leaf entity, and check that "Add to new space view" recommends at least space views of the same kind. * Select both the `boxes3d` entity and the `text_logs` entity. Check no space view is recommended (except Dataframe if enabled). -## Streams tree +#### Streams tree * Right-click on the `bars` entity and check that a Bar Plot space view can successfully be created. """ @@ -29,6 +29,22 @@ def log_readme() -> None: rr.log("readme", rr.TextDocument(README, media_type=rr.MediaType.MARKDOWN), timeless=True) +def blueprint() -> rrb.BlueprintLike: + return rrb.Viewport( + rrb.Horizontal( + rrb.TextDocumentView(origin="readme"), + rrb.Vertical( + rrb.Spatial3DView(origin="/boxes3d"), + rrb.Spatial2DView(origin="/boxes2d"), + rrb.TextLogView(origin="/text_logs"), + rrb.BarChartView(origin="/bars"), + rrb.TensorView(origin="/tensor"), + ), + column_shares=[2, 1], + ) + ) + + def log_some_space_views() -> None: rr.set_time_sequence("frame_nr", 0) @@ -44,7 +60,7 @@ def log_some_space_views() -> None: def run(args: Namespace) -> None: - rr.script_setup(args, f"{os.path.basename(__file__)}", recording_id=uuid4()) + rr.script_setup(args, f"{os.path.basename(__file__)}", recording_id=uuid4(), blueprint=blueprint()) log_readme() log_some_space_views() diff --git a/tests/python/release_checklist/check_context_menu_collapse_expand_all.py b/tests/python/release_checklist/check_context_menu_collapse_expand_all.py index c5e74b16a359..141fd1169b52 100644 --- a/tests/python/release_checklist/check_context_menu_collapse_expand_all.py +++ b/tests/python/release_checklist/check_context_menu_collapse_expand_all.py @@ -5,13 +5,13 @@ from uuid import uuid4 import rerun as rr +import rerun.blueprint as rrb README = """ # Context Menu - Add entity to new space view ## Blueprint tree -* Reset the blueprint. * Right-click on Viewport and select "Collapse all". Check everything is collapsed by manually expending everything. * Right-click on Viewport and select "Collapse all" and then "Expend all". Check everything is expanded. @@ -30,17 +30,30 @@ def log_readme() -> None: rr.log("readme", rr.TextDocument(README, media_type=rr.MediaType.MARKDOWN), timeless=True) -def log_some_space_views() -> None: - # TODO(ab): add a deep-ish container hierarchy blueprint for more collapse/expand fun +def blueprint() -> rrb.BlueprintLike: + return rrb.Viewport( + rrb.Horizontal( + rrb.TextDocumentView(origin="readme"), + rrb.Vertical( + rrb.Horizontal( + rrb.Vertical( + rrb.Spatial3DView(origin="/"), + ) + ) + ), + column_shares=[2, 1], + ) + ) - rr.set_time_sequence("frame_nr", 0) +def log_some_space_views() -> None: + rr.set_time_sequence("frame_nr", 0) rr.log("/", rr.Boxes3D(centers=[0, 0, 0], half_sizes=[1, 1, 1])) rr.log("/world/robot/arm/actuator/thing", rr.Boxes3D(centers=[0.5, 0, 0], half_sizes=[0.1, 0.1, 0.1])) def run(args: Namespace) -> None: - rr.script_setup(args, f"{os.path.basename(__file__)}", recording_id=uuid4()) + rr.script_setup(args, f"{os.path.basename(__file__)}", recording_id=uuid4(), blueprint=blueprint()) log_readme() log_some_space_views() diff --git a/tests/python/release_checklist/check_context_menu_invalid_sub_container.py b/tests/python/release_checklist/check_context_menu_invalid_sub_container.py index 53b92e31fb8d..d8bf755cd0cb 100644 --- a/tests/python/release_checklist/check_context_menu_invalid_sub_container.py +++ b/tests/python/release_checklist/check_context_menu_invalid_sub_container.py @@ -5,22 +5,14 @@ from uuid import uuid4 import rerun as rr +import rerun.blueprint as rrb README = """ # Context Menu - Invalid sub-container kind -## Preparation -TODO(ab): automate this with blueprints - -- Reset the blueprint -- Add a Horizontal container and a Vertical container in the viewport, and move one space view into each. - - -## Checks - -* Single-select a horizontal container, check that it disallow adding a horizontal container inside it. -* Same for a vertical container. +* Single-select the horizontal container, check that it disallow adding a horizontal container inside it. +* Same for the vertical container. * Single select a space view inside a horizontal container, check that it disallow moving to a new horizontal container. * Same for a space view inside a vertical container. """ @@ -30,6 +22,24 @@ def log_readme() -> None: rr.log("readme", rr.TextDocument(README, media_type=rr.MediaType.MARKDOWN), timeless=True) +def blueprint() -> rrb.BlueprintLike: + return rrb.Viewport( + rrb.Horizontal( + rrb.TextDocumentView(origin="readme"), + rrb.Grid( + rrb.Vertical( + rrb.Spatial3DView(origin="/"), + ), + rrb.Horizontal( + rrb.Spatial2DView(origin="/"), + ), + grid_columns=1, + ), + column_shares=[2, 1], + ) + ) + + def log_some_space_views() -> None: rr.set_time_sequence("frame_nr", 0) @@ -38,7 +48,7 @@ def log_some_space_views() -> None: def run(args: Namespace) -> None: - rr.script_setup(args, f"{os.path.basename(__file__)}", recording_id=uuid4()) + rr.script_setup(args, f"{os.path.basename(__file__)}", recording_id=uuid4(), blueprint=blueprint()) log_readme() log_some_space_views() diff --git a/tests/python/release_checklist/check_context_menu_multi_selection.py b/tests/python/release_checklist/check_context_menu_multi_selection.py index 0b7b361fd5c5..e8b5afd22e61 100644 --- a/tests/python/release_checklist/check_context_menu_multi_selection.py +++ b/tests/python/release_checklist/check_context_menu_multi_selection.py @@ -5,69 +5,57 @@ from uuid import uuid4 import rerun as rr +import rerun.blueprint as rrb README = """ # Context Menu - Multi-selection - -## Preparation - -TODO(ab): automate this with blueprints - -- Reset the blueprint -- Add a Horizontal container in the viewport and move both the 2D and 3D space view into it - - -## Checks - For each of the multi-selection below, check the context menu content as per the following table. ```plaintext +========================================================== ITEMS CONTEXT MENU CONTENT - - +========================================================== 2x Space views Hide all Remove + Expand all Collapse all - Move to new Container - -+ Horizontal container Hide all + Move to new Container +---------------------------------------------------------- ++ Vertical container Hide all Remove + Expand all Collapse all - Move to new Container - + Move to new Container +---------------------------------------------------------- + Viewport Hide all + Expand all Collapse all - - - --deselect all-- - - +========================================================== Space view + 'box2d' data result Hide all Remove + Expand all Collapse all - - - --deselect all-- - - +========================================================== 'box2d' data result Hide all -+ 'box3d' entity (streams tree) Expand all ++ 'box3d' entity (streams tree) + Expand all Collapse all - Add to new Space View - + Add to new Space View +---------------------------------------------------------- + some component Hide all + Expand all Collapse all - +========================================================== ``` """ @@ -76,6 +64,19 @@ def log_readme() -> None: rr.log("readme", rr.TextDocument(README, media_type=rr.MediaType.MARKDOWN), timeless=True) +def blueprint() -> rrb.BlueprintLike: + return rrb.Viewport( + rrb.Horizontal( + rrb.TextDocumentView(origin="readme"), + rrb.Vertical( + rrb.Spatial3DView(origin="/"), + rrb.Spatial2DView(origin="/"), + ), + column_shares=[2, 1], + ) + ) + + def log_some_space_views() -> None: rr.set_time_sequence("frame_nr", 0) @@ -84,7 +85,7 @@ def log_some_space_views() -> None: def run(args: Namespace) -> None: - rr.script_setup(args, f"{os.path.basename(__file__)}", recording_id=uuid4()) + rr.script_setup(args, f"{os.path.basename(__file__)}", recording_id=uuid4(), blueprint=blueprint()) log_readme() log_some_space_views() diff --git a/tests/python/release_checklist/check_context_menu_single_selection.py b/tests/python/release_checklist/check_context_menu_single_selection.py index 9b11958bb713..a197508638e3 100644 --- a/tests/python/release_checklist/check_context_menu_single_selection.py +++ b/tests/python/release_checklist/check_context_menu_single_selection.py @@ -5,20 +5,12 @@ from uuid import uuid4 import rerun as rr +import rerun.blueprint as rrb README = """ # Context Menu - Single Selection -## Preparation - -TODO(ab): automate this with blueprints - -- Reset the blueprint -- Add a Horizontal container in the viewport and move the 3D space view into it -- Right-click on the viewport and "Expand All" - - -## Streams tree +#### Streams tree - Right-click on various _unselected_ items, and check that: - It becomes selected as the context menu appears. @@ -26,58 +18,64 @@ ```plaintext -ITEM CONTEXT MENU CONTENT - - -'group/' entity Expand all - Collapse all - Add to new Space View - - -Component - +================================================= +ITEM CONTEXT MENU CONTENT +================================================= +'group/' entity Expand all + Collapse all + + Add to new Space View +------------------------------------------------- +Component +================================================= ``` -## Tile Title UI +#### Tile Title UI -- Multi-select the 3D space view and the Horizontal container in the Blueprint tree. +- Multi-select the 3D space view and the Vertical container in the Blueprint tree. - Right-click on the 3D space view tab title: - The selection is set to the space view _only_. - The context menu content is as per the following table. ```plaintext -ITEM CONTEXT MENU CONTENT +================================================= +ITEM CONTEXT MENU CONTENT +================================================= +space view (tab title) Hide + Remove + Expand all + Collapse all -space view (tab title) Hide (or Show, depending on visibility)d - Remove - Expand all - Collapse all - Clone - Move to new Container + Clone + Move to new Container +================================================= ``` -## Container Selection Panel child list +#### Container Selection Panel child list -- Select the Horizontal container. +- Select the Vertical container. - In the selection panel, right-click on the 3D space view, and check that: - The selection remains unchanged. - The context menu content is as per the following table. ```plaintext -ITEM CONTEXT MENU CONTENT +================================================= +ITEM CONTEXT MENU CONTENT +================================================= +space view (child list) Hide + Remove + Expand all + Collapse all -space view (child list) Hide (or Show, depending on visibility) - Remove - Expand all - Collapse all - Clone - Move to new Container + Clone + Move to new Container +================================================= ``` """ @@ -87,6 +85,19 @@ def log_readme() -> None: rr.log("readme", rr.TextDocument(README, media_type=rr.MediaType.MARKDOWN), timeless=True) +def blueprint() -> rrb.BlueprintLike: + return rrb.Viewport( + rrb.Horizontal( + rrb.TextDocumentView(origin="readme"), + rrb.Vertical( + rrb.Spatial3DView(origin="/"), + rrb.Spatial2DView(origin="/"), + ), + column_shares=[2, 1], + ) + ) + + def log_some_space_views() -> None: rr.set_time_sequence("frame_nr", 0) @@ -94,7 +105,7 @@ def log_some_space_views() -> None: def run(args: Namespace) -> None: - rr.script_setup(args, f"{os.path.basename(__file__)}", recording_id=uuid4()) + rr.script_setup(args, f"{os.path.basename(__file__)}", recording_id=uuid4(), blueprint=blueprint()) log_readme() log_some_space_views() diff --git a/tests/python/release_checklist/check_context_menu_single_selection_blueprint_tree.py b/tests/python/release_checklist/check_context_menu_single_selection_blueprint_tree.py index 40c1a4e03a80..87c329a2dd76 100644 --- a/tests/python/release_checklist/check_context_menu_single_selection_blueprint_tree.py +++ b/tests/python/release_checklist/check_context_menu_single_selection_blueprint_tree.py @@ -5,64 +5,60 @@ from uuid import uuid4 import rerun as rr +import rerun.blueprint as rrb README = """ # Context Menu - Single Selection in the Blueprint tree -## Preparation - -TODO(ab): automate this with blueprints - -- Reset the blueprint -- Add a Horizontal container in the viewport and move the 3D space view into it - Right-click on the viewport and "Expand All" - - -## Checks - - Right-click on various _unselected_ items, and check that: - It becomes selected as the context menu appears. - The context menu content is as per the following table. ```plaintext -ITEM CONTEXT MENU CONTENT - +================================================================== +ITEM CONTEXT MENU CONTENT +================================================================== +Viewport Expand all + Collapse all -Viewport Expand all - Collapse all - Add Container - Add Space View + Add Container + Add Space View +------------------------------------------------------------------ +Container Hide (or Show, depending on visibility) + Remove + Expand all + Collapse all -Container Hide (or Show, depending on visibility) - Remove - Expand all - Collapse all - Add Container - Add Space View - Move to new Container + Add Container + Add Space View + Move to new Container +------------------------------------------------------------------ +Space View Hide (or Show, depending on visibility) + Remove -Space View Hide (or Show, depending on visibility) - Remove - Expand all - Collapse all - Clone - Move to new Container + Expand all + Collapse all + Clone -'group' Data Result Hide (or Show, depending on visibility) - Remove - Expand all - Collapse all - Add to new Space View + Move to new Container +------------------------------------------------------------------ +'group' Data Result Hide (or Show, depending on visibility) + Remove + Expand all + Collapse all -'boxes3d' Data Result Hide (or Show, depending on visibility) - Remove - Add to new Space View + Add to new Space View +------------------------------------------------------------------ +'boxes3d' Data Result Hide (or Show, depending on visibility) + Remove + Add to new Space View ``` """ @@ -72,6 +68,15 @@ def log_readme() -> None: rr.log("readme", rr.TextDocument(README, media_type=rr.MediaType.MARKDOWN), timeless=True) +def blueprint() -> rrb.BlueprintLike: + return rrb.Viewport( + rrb.Horizontal( + rrb.TextDocumentView(origin="readme"), + rrb.Vertical(rrb.Spatial3DView(origin="/")), + ) + ) + + def log_some_space_views() -> None: rr.set_time_sequence("frame_nr", 0) @@ -79,7 +84,7 @@ def log_some_space_views() -> None: def run(args: Namespace) -> None: - rr.script_setup(args, f"{os.path.basename(__file__)}", recording_id=uuid4()) + rr.script_setup(args, f"{os.path.basename(__file__)}", recording_id=uuid4(), blueprint=blueprint()) log_readme() log_some_space_views() diff --git a/tests/python/release_checklist/check_context_menu_suggested_origin.py b/tests/python/release_checklist/check_context_menu_suggested_origin.py index 6e29e336aeb0..33d1bed9b34b 100644 --- a/tests/python/release_checklist/check_context_menu_suggested_origin.py +++ b/tests/python/release_checklist/check_context_menu_suggested_origin.py @@ -7,25 +7,35 @@ import numpy as np import rerun as rr +import rerun.blueprint as rrb README = """ # Context Menu - Test the origin selection heuristics -Right click on each of the following entities and check that for the given space view class, the resulting suggested origin is as expected. +Repeat these steps for each of the following entities and space view class: +- right-click the entity (either in the blueprint or streams tree) +- select "Add to new Space View" and create the space view of the listed class +- check that the created space view has the expected origin +- delete the space view + + +check that for the given space view class, the resulting suggested origin is as expected. ```plaintext +=========================================================== ENTITY CLASS EXPECTED ORIGIN - +----------------------------------------------------------- / 3D / /world 3D /world /world/camera 3D /world /world/camera/image 3D /world /world/camera/keypoint 3D /world - +----------------------------------------------------------- /world 2D /world/camera 2D /world/camera/image 2D /world/camera/image /world/camera/keypoint 2D /world/camera/image +=========================================================== ``` """ @@ -34,13 +44,22 @@ def log_readme() -> None: rr.log("readme", rr.TextDocument(README, media_type=rr.MediaType.MARKDOWN), timeless=True) +def blueprint() -> rrb.BlueprintLike: + return rrb.Viewport( + rrb.Horizontal( + rrb.TextDocumentView(origin="readme"), + rrb.Spatial3DView(origin="/", contents="", name="root entity"), + column_shares=[2, 1], + ) + ) + + def log_some_space_views() -> None: rr.set_time_sequence("frame_nr", 0) rr.log("/", rr.Boxes3D(centers=[0, 0, 0], half_sizes=[1, 1, 1])) rr.log("/world", rr.ViewCoordinates.RIGHT_HAND_Y_DOWN, timeless=True) rr.log( "/world/camera/image", - # rr.Pinhole(fov_y=0.7853982, aspect_ratio=1, camera_xyz=rr.ViewCoordinates.RUB, resolution=[10, 10]), rr.Pinhole( resolution=[10, 10], focal_length=[4, 4], @@ -50,23 +69,18 @@ def log_some_space_views() -> None: rr.log("/world/camera/image", rr.Image(np.random.rand(10, 10, 3))) rr.log("/world/camera/image/keypoint", rr.Points2D(np.random.rand(10, 2) * 10, radii=0.5)) - for i in range(100): - rr.set_time_sequence("frame_nr", i) - angle = 2 * math.pi * i / 100 - - rr.log( - "/world/camera", - rr.Transform3D( - rr.TranslationRotationScale3D( - translation=[math.cos(angle), math.sin(angle), 0], - rotation=rr.RotationAxisAngle(axis=[0, 0, 1], angle=angle), - ) - ), - ) + rr.log( + "/world/camera", + rr.Transform3D( + rr.TranslationRotationScale3D( + rotation=rr.RotationAxisAngle(axis=[0, 0, 1], angle=math.pi / 2), + ) + ), + ) def run(args: Namespace) -> None: - rr.script_setup(args, f"{os.path.basename(__file__)}", recording_id=uuid4()) + rr.script_setup(args, f"{os.path.basename(__file__)}", recording_id=uuid4(), blueprint=blueprint()) log_readme() log_some_space_views() diff --git a/tests/python/release_checklist/check_focus.py b/tests/python/release_checklist/check_focus.py index 61b590d64242..bb37018df0d5 100644 --- a/tests/python/release_checklist/check_focus.py +++ b/tests/python/release_checklist/check_focus.py @@ -5,26 +5,15 @@ from uuid import uuid4 import rerun as rr +import rerun.blueprint as rrb README = """ # Focus checks -## Preparation - -TODO(ab): automate this with blueprints -TODO(ab): add lots of stuff via blueprint to make the tree more crowded and check scrolling - -- Reset the blueprint -- Clone the 3D space view such as to have 2 of them. - -## Checks - -- Collapse all in the blueprint tree and the streams view -- Double-click on the box in the first space view - - check corresponding space view expands and scrolls +- Double-click on a box in the first space view + - check ONLY the corresponding space view expands and scrolls - check the streams view expands and scrolls -- Collapse all in the blueprint tree. -- Double-click on the leaf "boxes3d" entity in the streams view, check both space views expand. +- Double-click on the leaf "boxes3d" entity in the streams view, check both space views expand (manual scrolling might be needed). """ @@ -32,9 +21,22 @@ def log_readme() -> None: rr.log("readme", rr.TextDocument(README, media_type=rr.MediaType.MARKDOWN), timeless=True) +def blueprint() -> rrb.BlueprintLike: + return rrb.Viewport( + rrb.Horizontal( + rrb.Tabs(*[rrb.TextDocumentView(origin="readme") for _ in range(100)]), + rrb.Vertical(rrb.Spatial3DView(origin="/", name="SV1"), rrb.Spatial3DView(origin="/", name="SV2")), + column_shares=[1, 2], + ) + ) + + def log_some_space_views() -> None: rr.set_time_sequence("frame_nr", 0) + for i in range(500): + rr.log(f"a_entity_{i}", rr.AnyValues(empty=0)) + rr.log( "/objects/boxes/boxes3d", rr.Boxes3D(centers=[[0, 0, 0], [1, 1.5, 1.15], [3, 2, 1]], half_sizes=[0.5, 1, 0.5] * 3), @@ -42,7 +44,7 @@ def log_some_space_views() -> None: def run(args: Namespace) -> None: - rr.script_setup(args, f"{os.path.basename(__file__)}", recording_id=uuid4()) + rr.script_setup(args, f"{os.path.basename(__file__)}", recording_id=uuid4(), blueprint=blueprint()) log_readme() log_some_space_views() From f6baaadfc6ecf44ec22a1af90dcc624a5015b282 Mon Sep 17 00:00:00 2001 From: Andreas Reich Date: Tue, 19 Mar 2024 09:07:11 +0100 Subject: [PATCH 36/50] Tensor space view can now show images (#5567) ### What == allow showing tensor data that was logged via the Image archetype. * Fixes #5420 https://github.com/rerun-io/rerun/assets/1220815/8b4dab05-b50a-4946-813f-0d206f00d417 ### Checklist * [x] I have read and agree to [Contributor Guide](https://github.com/rerun-io/rerun/blob/main/CONTRIBUTING.md) and the [Code of Conduct](https://github.com/rerun-io/rerun/blob/main/CODE_OF_CONDUCT.md) * [x] I've included a screenshot or gif (if applicable) * [x] I have tested the web demo (if applicable): * Using newly built examples: [app.rerun.io](https://app.rerun.io/pr/5567/index.html) * Using examples from latest `main` build: [app.rerun.io](https://app.rerun.io/pr/5567/index.html?manifest_url=https://app.rerun.io/version/main/examples_manifest.json) * Using full set of examples from `nightly` build: [app.rerun.io](https://app.rerun.io/pr/5567/index.html?manifest_url=https://app.rerun.io/version/nightly/examples_manifest.json) * [x] The PR title and labels are set such as to maximize their usefulness for the next release's CHANGELOG * [x] If applicable, add a new check to the [release checklist](https://github.com/rerun-io/rerun/blob/main/tests/python/release_checklist)! - [PR Build Summary](https://build.rerun.io/pr/5567) - [Docs preview](https://rerun.io/preview/d802e3bb5c024c3d7afdbdadb77493a9f4d87f80/docs) - [Examples preview](https://rerun.io/preview/d802e3bb5c024c3d7afdbdadb77493a9f4d87f80/examples) - [Recent benchmark results](https://build.rerun.io/graphs/crates.html) - [Wasm size tracking](https://build.rerun.io/graphs/sizes.html) --- .../src/space_view_class.rs | 28 +++++++++++++++++-- 1 file changed, 25 insertions(+), 3 deletions(-) diff --git a/crates/re_space_view_tensor/src/space_view_class.rs b/crates/re_space_view_tensor/src/space_view_class.rs index ddf038787c30..e6518f6afea3 100644 --- a/crates/re_space_view_tensor/src/space_view_class.rs +++ b/crates/re_space_view_tensor/src/space_view_class.rs @@ -15,9 +15,10 @@ use re_types::{ }; use re_viewer_context::{ gpu_bridge::{self, colormap_dropdown_button_ui}, - SpaceViewClass, SpaceViewClassIdentifier, SpaceViewClassRegistryError, SpaceViewId, - SpaceViewState, SpaceViewStateExt as _, SpaceViewSystemExecutionError, TensorStatsCache, - ViewQuery, ViewerContext, + IdentifiedViewSystem as _, IndicatedEntities, PerVisualizer, SpaceViewClass, + SpaceViewClassIdentifier, SpaceViewClassRegistryError, SpaceViewId, SpaceViewState, + SpaceViewStateExt as _, SpaceViewSystemExecutionError, TensorStatsCache, ViewQuery, + ViewerContext, VisualizableEntities, }; use crate::{tensor_dimension_mapper::dimension_mapping_ui, visualizer_system::TensorSystem}; @@ -171,6 +172,27 @@ impl SpaceViewClass for TensorSpaceView { Box::::default() } + fn choose_default_visualizers( + &self, + entity_path: &EntityPath, + visualizable_entities_per_visualizer: &PerVisualizer, + _indicated_entities_per_visualizer: &PerVisualizer, + ) -> re_viewer_context::SmallVisualizerSet { + // Default implementation would not suggest the Tensor visualizer for images, + // since they're not indicated with a Tensor indicator. + // (and as of writing, something needs to be both visualizable and indicated to be shown in a visualizer) + + // Keeping this implementation simple: We know there's only a single visualizer here. + if visualizable_entities_per_visualizer + .get(&TensorSystem::identifier()) + .map_or(false, |entities| entities.contains(entity_path)) + { + std::iter::once(TensorSystem::identifier()).collect() + } else { + Default::default() + } + } + fn selection_ui( &self, ctx: &ViewerContext<'_>, From 4d2a8b98cc16cfda516ddd16750951fad41856aa Mon Sep 17 00:00:00 2001 From: Andreas Reich Date: Tue, 19 Mar 2024 09:08:23 +0100 Subject: [PATCH 37/50] Fix not creating 3D space views for pinhole-only 3D scenes (#5563) ### What * Fixes #5553 `python /Users/andreas/dev/rerun-io/rerun/docs/snippets/all/pinhole_simple.py` Before (0.14): ![image](https://github.com/rerun-io/rerun/assets/1220815/1b447151-86a1-4873-9283-905e0276a9b0) After: ![image](https://github.com/rerun-io/rerun/assets/1220815/f7f0d75b-0866-4f3b-9322-570b1f60deb2) ### Checklist * [x] I have read and agree to [Contributor Guide](https://github.com/rerun-io/rerun/blob/main/CONTRIBUTING.md) and the [Code of Conduct](https://github.com/rerun-io/rerun/blob/main/CODE_OF_CONDUCT.md) * [x] I've included a screenshot or gif (if applicable) * [x] I have tested the web demo (if applicable): * Using newly built examples: [app.rerun.io](https://app.rerun.io/pr/{{pr.number}}/index.html) * Using examples from latest `main` build: [app.rerun.io](https://app.rerun.io/pr/{{pr.number}}/index.html?manifest_url=https://app.rerun.io/version/main/examples_manifest.json) * Using full set of examples from `nightly` build: [app.rerun.io](https://app.rerun.io/pr/{{pr.number}}/index.html?manifest_url=https://app.rerun.io/version/nightly/examples_manifest.json) * [x] The PR title and labels are set such as to maximize their usefulness for the next release's CHANGELOG * [x] If applicable, add a new check to the [release checklist](https://github.com/rerun-io/rerun/blob/main/tests/python/release_checklist)! - [PR Build Summary](https://build.rerun.io/pr/{{ pr.number }}) - [Docs preview](https://rerun.io/preview/{{ pr.commit }}/docs) - [Examples preview](https://rerun.io/preview/{{ pr.commit }}/examples) - [Recent benchmark results](https://build.rerun.io/graphs/crates.html) - [Wasm size tracking](https://build.rerun.io/graphs/sizes.html) --- .../src/space_view_3d.rs | 78 ++++++++++++------- 1 file changed, 50 insertions(+), 28 deletions(-) diff --git a/crates/re_space_view_spatial/src/space_view_3d.rs b/crates/re_space_view_spatial/src/space_view_3d.rs index 1c8c56b9ed26..252af4ffac51 100644 --- a/crates/re_space_view_spatial/src/space_view_3d.rs +++ b/crates/re_space_view_spatial/src/space_view_3d.rs @@ -216,36 +216,58 @@ impl SpaceViewClass for SpatialSpaceView3D { recommended_space_views: topo .iter_subspaces() .filter_map(|subspace| { - if !subspace.supports_3d_content() || subspace.entities.is_empty() { - None - } else { - // Creates space views at each view coordinates if there's any. - // (yes, we do so even if they're empty at the moment!) - // - // An exception to this rule is not to create a view there if this is already _also_ a subspace root. - // (e.g. this also has a camera or a `disconnect` logged there) - let mut origins = subspace - .heuristic_hints - .iter() - .filter(|(path, hint)| { - hint.contains(HeuristicHints::ViewCoordinates3d) - && !subspace.child_spaces.contains(path) - }) - .map(|(path, _)| path.clone()) - .collect::>(); - - // If there's no view coordinates or there are still some entities not covered, - // create a view at the subspace origin. - if !origins.iter().contains(&subspace.origin) - && indicated_entities - .intersection(&subspace.entities) - .any(|e| origins.iter().all(|origin| !e.starts_with(origin))) - { - origins.push(subspace.origin.clone()); - } + if !subspace.supports_3d_content() { + return None; + } - Some(origins.into_iter().map(RecommendedSpaceView::new_subtree)) + let mut pinhole_child_spaces = subspace + .child_spaces + .iter() + .filter(|child| { + topo.subspace_for_subspace_origin(child.hash()).map_or( + false, + |child_space| { + child_space.connection_to_parent.is_connected_pinhole() + }, + ) + }) + .peekable(); // Don't collect the iterator, we're only interested in 'any'-style operations. + + // Empty space views are still of interest if any of the child spaces is connected via a pinhole. + if subspace.entities.is_empty() && pinhole_child_spaces.peek().is_none() { + return None; } + + // Creates space views at each view coordinates if there's any. + // (yes, we do so even if they're empty at the moment!) + // + // An exception to this rule is not to create a view there if this is already _also_ a subspace root. + // (e.g. this also has a camera or a `disconnect` logged there) + let mut origins = subspace + .heuristic_hints + .iter() + .filter(|(path, hint)| { + hint.contains(HeuristicHints::ViewCoordinates3d) + && !subspace.child_spaces.contains(path) + }) + .map(|(path, _)| path.clone()) + .collect::>(); + + let path_not_covered_yet = + |e: &EntityPath| origins.iter().all(|origin| !e.starts_with(origin)); + + // If there's no view coordinates or there are still some entities not covered, + // create a view at the subspace origin. + if !origins.iter().contains(&subspace.origin) + && (indicated_entities + .intersection(&subspace.entities) + .any(path_not_covered_yet) + || pinhole_child_spaces.any(path_not_covered_yet)) + { + origins.push(subspace.origin.clone()); + } + + Some(origins.into_iter().map(RecommendedSpaceView::new_subtree)) }) .flatten() .collect(), From 91439eda16052b75a1d11df7b331b5bd488ab8da Mon Sep 17 00:00:00 2001 From: Jeremy Leibs Date: Tue, 19 Mar 2024 04:14:31 -0400 Subject: [PATCH 38/50] Make space view use its own data-result when editing visible history (#5571) ### What Also renamed the API because root_data_result is **very** overloaded. * Fixes #5568 ### Checklist * [x] I have read and agree to [Contributor Guide](https://github.com/rerun-io/rerun/blob/main/CONTRIBUTING.md) and the [Code of Conduct](https://github.com/rerun-io/rerun/blob/main/CODE_OF_CONDUCT.md) * [x] I've included a screenshot or gif (if applicable) * [x] I have tested the web demo (if applicable): * Using newly built examples: [app.rerun.io](https://app.rerun.io/pr/5571/index.html) * Using examples from latest `main` build: [app.rerun.io](https://app.rerun.io/pr/5571/index.html?manifest_url=https://app.rerun.io/version/main/examples_manifest.json) * Using full set of examples from `nightly` build: [app.rerun.io](https://app.rerun.io/pr/5571/index.html?manifest_url=https://app.rerun.io/version/nightly/examples_manifest.json) * [x] The PR title and labels are set such as to maximize their usefulness for the next release's CHANGELOG * [x] If applicable, add a new check to the [release checklist](https://github.com/rerun-io/rerun/blob/main/tests/python/release_checklist)! - [PR Build Summary](https://build.rerun.io/pr/5571) - [Docs preview](https://rerun.io/preview/5f8ed4cf08e9cbc8b723284d2af622c664ede60c/docs) - [Examples preview](https://rerun.io/preview/5f8ed4cf08e9cbc8b723284d2af622c664ede60c/examples) - [Recent benchmark results](https://build.rerun.io/graphs/crates.html) - [Wasm size tracking](https://build.rerun.io/graphs/sizes.html) --- crates/re_space_view/src/space_view.rs | 16 ++++++++++--- .../re_space_view/src/space_view_contents.rs | 2 +- crates/re_viewer/src/ui/selection_panel.rs | 23 ++++++------------- crates/re_viewer/src/ui/visible_history.rs | 18 +++++++++++---- 4 files changed, 34 insertions(+), 25 deletions(-) diff --git a/crates/re_space_view/src/space_view.rs b/crates/re_space_view/src/space_view.rs index 4b8dc2214af7..38be63729fd1 100644 --- a/crates/re_space_view/src/space_view.rs +++ b/crates/re_space_view/src/space_view.rs @@ -391,8 +391,9 @@ impl SpaceViewBlueprint { let class = self.class(ctx.space_view_class_registry); - let root_data_result = self.root_data_result(ctx.store_context, ctx.blueprint_query); - let props = root_data_result + let space_view_data_result = + self.space_view_data_result(ctx.store_context, ctx.blueprint_query); + let props = space_view_data_result .individual_properties() .cloned() .unwrap_or_default(); @@ -415,7 +416,16 @@ impl SpaceViewBlueprint { self.id.as_entity_path() } - pub fn root_data_result(&self, ctx: &StoreContext<'_>, query: &LatestAtQuery) -> DataResult { + /// A special data result for the space view that sits "above" the [`SpaceViewContents`]. + /// + /// This allows us to use interfaces that take a [`DataResult`] to modify things on the + /// space view that can then be inherited into the contents. For example, controlling + /// visible history. + pub fn space_view_data_result( + &self, + ctx: &StoreContext<'_>, + query: &LatestAtQuery, + ) -> DataResult { let base_override_root = self.entity_path(); let individual_override_path = base_override_root.join(&DataResult::INDIVIDUAL_OVERRIDES_PREFIX.into()); diff --git a/crates/re_space_view/src/space_view_contents.rs b/crates/re_space_view/src/space_view_contents.rs index ab75c2ea9922..0f896be2f9cf 100644 --- a/crates/re_space_view/src/space_view_contents.rs +++ b/crates/re_space_view/src/space_view_contents.rs @@ -348,7 +348,7 @@ impl DataQueryPropertyResolver<'_> { // the space-view. This isn't totally generic once we add container overrides, but it's a start. let (mut root_entity_properties, root_component_overrides) = self .space_view - .root_data_result(ctx, query) + .space_view_data_result(ctx, query) .property_overrides .map(|p| (p.accumulated_properties, p.resolved_component_overrides)) .unwrap_or_default(); diff --git a/crates/re_viewer/src/ui/selection_panel.rs b/crates/re_viewer/src/ui/selection_panel.rs index 7f380246eb33..e74edaa1c0cd 100644 --- a/crates/re_viewer/src/ui/selection_panel.rs +++ b/crates/re_viewer/src/ui/selection_panel.rs @@ -847,28 +847,19 @@ fn blueprint_ui_for_space_view( ); // Space View don't inherit properties. - let root_data_result = space_view.root_data_result(ctx.store_context, ctx.blueprint_query); - - let query_result = ctx.lookup_query_result(space_view.id); - let Some(data_result) = query_result - .tree - .root_handle() - .and_then(|root| query_result.tree.lookup_result(root)) - else { - re_log::error_once!("Could not find root data result for Space View {space_view_id:?}"); - return; - }; + let space_view_data_result = + space_view.space_view_data_result(ctx.store_context, ctx.blueprint_query); visual_time_range_ui( ctx, ui, - &query_result.tree, - data_result, + None, // There is no tree above the space view yet + &space_view_data_result, class_identifier, true, ); - let mut props = root_data_result + let mut props = space_view_data_result .individual_properties() .cloned() .unwrap_or_default(); @@ -889,7 +880,7 @@ fn blueprint_ui_for_space_view( ); } - root_data_result.save_individual_override_properties(ctx, Some(props)); + space_view_data_result.save_individual_override_properties(ctx, Some(props)); } } @@ -1122,7 +1113,7 @@ fn entity_props_ui( visual_time_range_ui( ctx, ui, - &query_result.tree, + Some(&query_result.tree), data_result, *space_view_class, false, diff --git a/crates/re_viewer/src/ui/visible_history.rs b/crates/re_viewer/src/ui/visible_history.rs index f223f3eca65d..f8e223cfa6ac 100644 --- a/crates/re_viewer/src/ui/visible_history.rs +++ b/crates/re_viewer/src/ui/visible_history.rs @@ -69,7 +69,7 @@ fn entity_with_visible_history( pub fn visual_time_range_ui( ctx: &ViewerContext<'_>, ui: &mut Ui, - data_result_tree: &re_viewer_context::DataResultTree, + data_result_tree: Option<&re_viewer_context::DataResultTree>, data_result: &re_viewer_context::DataResult, space_view_class: SpaceViewClassIdentifier, is_space_view: bool, @@ -92,10 +92,18 @@ pub fn visual_time_range_ui( let mut resolved_range = data_result .lookup_override::(ctx) .unwrap_or(default_time_range(space_view_class)); - let mut has_individual_range = data_result - .component_override_source(data_result_tree, &VisibleTimeRange::name()) - .as_ref() - == Some(&data_result.entity_path); + let mut has_individual_range = if let Some(data_result_tree) = data_result_tree { + // If there is a data-tree, we know we have individual settings if we are our own source. + data_result + .component_override_source(data_result_tree, &VisibleTimeRange::name()) + .as_ref() + == Some(&data_result.entity_path) + } else { + // Otherwise we can inspect directly. + data_result + .lookup_override::(ctx) + .is_some() + }; let collapsing_response = re_ui.collapsing_header(ui, "Visible time range", false, |ui| { let has_individual_range_before = has_individual_range; From 7cfa13c3c6738382a4094ba601b5acd19fa6ec4d Mon Sep 17 00:00:00 2001 From: Andreas Reich Date: Tue, 19 Mar 2024 09:35:26 +0100 Subject: [PATCH 39/50] Show visible time range on all entities of a space view that supports it (#5564) ### What * Fixes #5463 Another fallout of group removal: Previously, you could always change the Visible Time Range on groups, since there's no groups anymore we have to show the ui on all entities. image (screenshot showing Visible Time Range on the root Data Result) ### Checklist * [x] I have read and agree to [Contributor Guide](https://github.com/rerun-io/rerun/blob/main/CONTRIBUTING.md) and the [Code of Conduct](https://github.com/rerun-io/rerun/blob/main/CODE_OF_CONDUCT.md) * [x] I've included a screenshot or gif (if applicable) * [x] I have tested the web demo (if applicable): * Using newly built examples: [app.rerun.io](https://app.rerun.io/pr/5564/index.html) * Using examples from latest `main` build: [app.rerun.io](https://app.rerun.io/pr/5564/index.html?manifest_url=https://app.rerun.io/version/main/examples_manifest.json) * Using full set of examples from `nightly` build: [app.rerun.io](https://app.rerun.io/pr/5564/index.html?manifest_url=https://app.rerun.io/version/nightly/examples_manifest.json) * [x] The PR title and labels are set such as to maximize their usefulness for the next release's CHANGELOG * [x] If applicable, add a new check to the [release checklist](https://github.com/rerun-io/rerun/blob/main/tests/python/release_checklist)! - [PR Build Summary](https://build.rerun.io/pr/5564) - [Docs preview](https://rerun.io/preview/a419df11b8c11a3436a1484d064d62b487460497/docs) - [Examples preview](https://rerun.io/preview/a419df11b8c11a3436a1484d064d62b487460497/examples) - [Recent benchmark results](https://build.rerun.io/graphs/crates.html) - [Wasm size tracking](https://build.rerun.io/graphs/sizes.html) --- crates/re_viewer/src/ui/visible_history.rs | 40 ++-------------------- 1 file changed, 3 insertions(+), 37 deletions(-) diff --git a/crates/re_viewer/src/ui/visible_history.rs b/crates/re_viewer/src/ui/visible_history.rs index f8e223cfa6ac..664bf1ba3e94 100644 --- a/crates/re_viewer/src/ui/visible_history.rs +++ b/crates/re_viewer/src/ui/visible_history.rs @@ -4,7 +4,7 @@ use std::ops::RangeInclusive; use egui::{NumExt as _, Response, Ui}; use re_entity_db::{TimeHistogram, VisibleHistory, VisibleHistoryBoundary}; -use re_log_types::{EntityPath, TimeType, TimeZone}; +use re_log_types::{TimeType, TimeZone}; use re_space_view::{ default_time_range, time_range_boundary_to_visible_history_boundary, visible_history_boundary_to_time_range_boundary, visible_time_range_to_time_range, @@ -12,9 +12,9 @@ use re_space_view::{ use re_space_view_spatial::{SpatialSpaceView2D, SpatialSpaceView3D}; use re_space_view_time_series::TimeSeriesSpaceView; use re_types::blueprint::components::VisibleTimeRange; -use re_types_core::{ComponentName, Loggable as _}; +use re_types_core::Loggable as _; use re_ui::{markdown_ui, ReUi}; -use re_viewer_context::{SpaceViewClass, SpaceViewClassIdentifier, TimeControl, ViewerContext}; +use re_viewer_context::{SpaceViewClass, SpaceViewClassIdentifier, ViewerContext}; /// These space views support the Visible History feature. static VISIBLE_HISTORY_SUPPORTED_SPACE_VIEWS: once_cell::sync::Lazy< @@ -29,43 +29,12 @@ static VISIBLE_HISTORY_SUPPORTED_SPACE_VIEWS: once_cell::sync::Lazy< .into() }); -/// Entities containing one of these components support the visible history feature. -static VISIBLE_HISTORY_SUPPORTED_COMPONENT_NAMES: once_cell::sync::Lazy> = - once_cell::sync::Lazy::new(|| { - [ - "rerun.components.HalfSizes2D", - "rerun.components.HalfSizes3D", - "rerun.components.LineStrip2D", - "rerun.components.LineStrip3D", - "rerun.components.Position2D", - "rerun.components.Position3D", - "rerun.components.Scalar", - "rerun.components.TensorData", - "rerun.components.Vector3D", - ] - .map(Into::into) - .into() - }); - // TODO(#4145): This method is obviously unfortunate. It's a temporary solution until the Visualizer // system is able to report its ability to handle the visible history feature. fn space_view_with_visible_history(space_view_class: SpaceViewClassIdentifier) -> bool { VISIBLE_HISTORY_SUPPORTED_SPACE_VIEWS.contains(&space_view_class) } -fn entity_with_visible_history( - ctx: &ViewerContext<'_>, - time_ctrl: &TimeControl, - entity_path: &EntityPath, -) -> bool { - let store = ctx.entity_db.store(); - let component_names = store.all_components(time_ctrl.timeline(), entity_path); - component_names - .iter() - .flatten() - .any(|name| VISIBLE_HISTORY_SUPPORTED_COMPONENT_NAMES.contains(name)) -} - pub fn visual_time_range_ui( ctx: &ViewerContext<'_>, ui: &mut Ui, @@ -79,9 +48,6 @@ pub fn visual_time_range_ui( if is_space_view && !space_view_with_visible_history(space_view_class) { return; } - if !is_space_view && !entity_with_visible_history(ctx, &time_ctrl, &data_result.entity_path) { - return; - } let re_ui = ctx.re_ui; From cd8633ef08080760d1fd41ed33cc0433b18383bc Mon Sep 17 00:00:00 2001 From: Antoine Beyeler <49431240+abey79@users.noreply.github.com> Date: Tue, 19 Mar 2024 18:58:23 +0100 Subject: [PATCH 40/50] Refactor `Selection` use a `BTreeMap` and make it more encapsulated (#5569) ### What This PR change `Selection` to use a `BTreeMap>` instead of a `Vec<(Item, Option)`. This is a much better model for the selection that we currently have (`Item` may not be duplicated, even with different space context) and paves the way for a clean "remove" API (needed by #5465). **NOTE**: with this approach we loose ordering by "cmd-click". Advantage: - in some case its better (e.g when selecting multiple instances of the same entity, now they are sorted by instance key) - the selection panel is sorted by "category" of item Disadvantage: - well, not the order of clicks, so Selection Panel ordering be slightly surprising in some cases ### Checklist * [x] I have read and agree to [Contributor Guide](https://github.com/rerun-io/rerun/blob/main/CONTRIBUTING.md) and the [Code of Conduct](https://github.com/rerun-io/rerun/blob/main/CODE_OF_CONDUCT.md) * [x] I've included a screenshot or gif (if applicable) * [x] I have tested the web demo (if applicable): * Using newly built examples: [app.rerun.io](https://app.rerun.io/pr/5569/index.html) * Using examples from latest `main` build: [app.rerun.io](https://app.rerun.io/pr/5569/index.html?manifest_url=https://app.rerun.io/version/main/examples_manifest.json) * Using full set of examples from `nightly` build: [app.rerun.io](https://app.rerun.io/pr/5569/index.html?manifest_url=https://app.rerun.io/version/nightly/examples_manifest.json) * [x] The PR title and labels are set such as to maximize their usefulness for the next release's CHANGELOG * [x] If applicable, add a new check to the [release checklist](https://github.com/rerun-io/rerun/blob/main/tests/python/release_checklist)! - [PR Build Summary](https://build.rerun.io/pr/5569) - [Docs preview](https://rerun.io/preview/fe5c33da7ac42466e55073e658fd9a1edef5fd9e/docs) - [Examples preview](https://rerun.io/preview/fe5c33da7ac42466e55073e658fd9a1edef5fd9e/examples) - [Recent benchmark results](https://build.rerun.io/graphs/crates.html) - [Wasm size tracking](https://build.rerun.io/graphs/sizes.html) --- Cargo.lock | 2 + Cargo.toml | 1 + crates/re_space_view_spatial/src/ui.rs | 2 +- crates/re_viewer/src/ui/selection_panel.rs | 2 +- crates/re_viewer_context/Cargo.toml | 1 + crates/re_viewer_context/src/item.rs | 2 +- .../src/selection_history.rs | 2 +- .../re_viewer_context/src/selection_state.rs | 97 ++++++++++++------- .../re_viewer_context/src/viewer_context.rs | 5 +- crates/re_viewport/src/context_menu/mod.rs | 6 +- 10 files changed, 74 insertions(+), 46 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 12859d24a49d..1f9ca221a1f2 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2640,6 +2640,7 @@ checksum = "d530e1a18b1cb4c484e6e34556a0d948706958449fca0cab753d649f2bce3d1f" dependencies = [ "equivalent", "hashbrown 0.14.2", + "serde", ] [[package]] @@ -5088,6 +5089,7 @@ dependencies = [ "egui_tiles", "glam", "half 2.3.1", + "indexmap 2.1.0", "itertools 0.12.0", "macaw", "ndarray", diff --git a/Cargo.toml b/Cargo.toml index 1c1450e42119..9eccf3aa39a6 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -142,6 +142,7 @@ half = "2.3.1" hyper = "0.14" image = { version = "0.24", default-features = false } indent = "0.1" +indexmap = "2.1" # Version chosen to align with other dependencies indicatif = "0.17.7" # Progress bar infer = "0.15" # infer MIME type by checking the magic number signaturefer MIME type by checking the magic number signature insta = "1.23" diff --git a/crates/re_space_view_spatial/src/ui.rs b/crates/re_space_view_spatial/src/ui.rs index d4e992dab371..56ca7f9ef75f 100644 --- a/crates/re_space_view_spatial/src/ui.rs +++ b/crates/re_space_view_spatial/src/ui.rs @@ -641,7 +641,7 @@ pub fn picking( }); }; - ctx.select_hovered_on_click(&response, re_viewer_context::Selection(hovered_items)); + ctx.select_hovered_on_click(&response, hovered_items.into_iter()); Ok(response) } diff --git a/crates/re_viewer/src/ui/selection_panel.rs b/crates/re_viewer/src/ui/selection_panel.rs index e74edaa1c0cd..342cd2218a96 100644 --- a/crates/re_viewer/src/ui/selection_panel.rs +++ b/crates/re_viewer/src/ui/selection_panel.rs @@ -758,7 +758,7 @@ fn show_list_item_for_container_child( &response, SelectionUpdateBehavior::Ignore, ); - ctx.select_hovered_on_click(&response, std::iter::once(item)); + ctx.select_hovered_on_click(&response, item); if remove_contents { viewport.blueprint.mark_user_interaction(ctx); diff --git a/crates/re_viewer_context/Cargo.toml b/crates/re_viewer_context/Cargo.toml index d00eef5fb7f7..08dd6d0be4b0 100644 --- a/crates/re_viewer_context/Cargo.toml +++ b/crates/re_viewer_context/Cargo.toml @@ -37,6 +37,7 @@ egui.workspace = true egui_tiles.workspace = true glam = { workspace = true, features = ["serde"] } half.workspace = true +indexmap = { workspace = true, features = ["std", "serde"] } itertools.workspace = true macaw.workspace = true ndarray.workspace = true diff --git a/crates/re_viewer_context/src/item.rs b/crates/re_viewer_context/src/item.rs index 8dd6dc9daa5d..847c10213227 100644 --- a/crates/re_viewer_context/src/item.rs +++ b/crates/re_viewer_context/src/item.rs @@ -6,7 +6,7 @@ use crate::{ContainerId, SpaceViewId}; /// One "thing" in the UI. /// /// This is the granularity of what is selectable and hoverable. -#[derive(Clone, PartialEq, Eq, Hash, serde::Deserialize, serde::Serialize)] +#[derive(Clone, PartialEq, Eq, Hash, PartialOrd, Ord, serde::Deserialize, serde::Serialize)] pub enum Item { /// A recording (or blueprint) StoreId(re_log_types::StoreId), diff --git a/crates/re_viewer_context/src/selection_history.rs b/crates/re_viewer_context/src/selection_history.rs index 2b4d350d8f4f..34e1f4574517 100644 --- a/crates/re_viewer_context/src/selection_history.rs +++ b/crates/re_viewer_context/src/selection_history.rs @@ -36,7 +36,7 @@ impl SelectionHistory { let mut i = 0; self.stack.retain_mut(|selection| { - selection.retain(f); + selection.retain(|item, _| f(item)); let retain = !selection.is_empty(); if !retain && i <= self.current { self.current = self.current.saturating_sub(1); diff --git a/crates/re_viewer_context/src/selection_state.rs b/crates/re_viewer_context/src/selection_state.rs index 168e1f9fdedb..9743cbf7c4e1 100644 --- a/crates/re_viewer_context/src/selection_state.rs +++ b/crates/re_viewer_context/src/selection_state.rs @@ -1,4 +1,5 @@ use ahash::HashMap; +use indexmap::IndexMap; use parking_lot::Mutex; use re_entity_db::EntityPath; @@ -82,66 +83,62 @@ impl InteractionHighlight { /// /// Used to store what is currently selected and/or hovered. #[derive(Debug, Default, Clone, PartialEq, serde::Deserialize, serde::Serialize)] -pub struct Selection(pub Vec<(Item, Option)>); +pub struct Selection(IndexMap>); impl From for Selection { #[inline] fn from(val: Item) -> Self { - Selection(vec![(val, None)]) + Selection([(val, None)].into()) } } impl From for Selection where - T: Iterator, + T: Iterator)>, { #[inline] fn from(value: T) -> Self { - Selection(value.map(|item| (item, None)).collect()) - } -} - -impl std::ops::Deref for Selection { - type Target = Vec<(Item, Option)>; - - #[inline] - fn deref(&self) -> &Self::Target { - &self.0 - } -} - -impl std::ops::DerefMut for Selection { - #[inline] - fn deref_mut(&mut self) -> &mut Self::Target { - &mut self.0 + Selection(value.collect()) } } impl Selection { - /// For each item in this selection, if it refers to the first element of an instance with a single element, resolve it to a splatted entity path. - pub fn resolve_mono_instance_path_items(&mut self, ctx: &ViewerContext<'_>) { - for (item, _) in self.iter_mut() { - *item = - resolve_mono_instance_path_item(&ctx.current_query(), ctx.entity_db.store(), item); - } + /// For each item in this selection, if it refers to the first element of an instance with a + /// single element, resolve it to a splatted entity path. + pub fn into_mono_instance_path_items(self, ctx: &ViewerContext<'_>) -> Self { + Selection( + self.0 + .into_iter() + .map(|(item, space_ctx)| { + ( + resolve_mono_instance_path_item( + &ctx.current_query(), + ctx.entity_db.store(), + &item, + ), + space_ctx, + ) + }) + .collect(), + ) } /// The first selected object if any. pub fn first_item(&self) -> Option<&Item> { - self.0.first().map(|(item, _)| item) + self.0.keys().next() } /// Check if the selection contains a single item and returns it if so. pub fn single_item(&self) -> Option<&Item> { - if self.0.len() == 1 { - Some(&self.0[0].0) + if self.len() == 1 { + self.first_item() } else { None } } pub fn iter_items(&self) -> impl Iterator { - self.0.iter().map(|(item, _)| item) + self.0.keys() } pub fn iter_space_context(&self) -> impl Iterator { @@ -169,8 +166,36 @@ impl Selection { } /// Retains elements that fulfill a certain condition. - pub fn retain(&mut self, f: impl Fn(&Item) -> bool) { - self.0.retain(|(item, _)| f(item)); + pub fn retain(&mut self, f: impl FnMut(&Item, &mut Option) -> bool) { + self.0.retain(f); + } + + /// Returns the number of items in the selection. + pub fn len(&self) -> usize { + self.0.len() + } + + /// Check if the selection is empty. + pub fn is_empty(&self) -> bool { + self.0.is_empty() + } + + /// Returns an iterator over the items and their selected space context. + pub fn iter(&self) -> impl Iterator)> { + self.0.iter() + } + + /// Returns a mutable iterator over the items and their selected space context. + pub fn iter_mut(&mut self) -> impl Iterator)> { + self.0.iter_mut() + } + + /// Extend the selection with more items. + pub fn extend( + &mut self, + other: impl IntoIterator)>, + ) { + self.0.extend(other); } } @@ -268,14 +293,16 @@ impl ApplicationSelectionState { pub fn toggle_selection(&self, toggle_items: Selection) { re_tracing::profile_function!(); - let mut toggle_items_set: HashMap> = - toggle_items.iter().cloned().collect(); + let mut toggle_items_set: HashMap> = toggle_items + .iter() + .map(|(item, ctx)| (item.clone(), ctx.clone())) + .collect(); let mut new_selection = self.selection_previous_frame.clone(); // If an item was already selected with the exact same context remove it. // If an item was already selected and loses its context, remove it. - new_selection.0.retain(|(item, ctx)| { + new_selection.retain(|item, ctx| { if let Some(new_ctx) = toggle_items_set.get(item) { if new_ctx == ctx || new_ctx.is_none() { toggle_items_set.remove(item); diff --git a/crates/re_viewer_context/src/viewer_context.rs b/crates/re_viewer_context/src/viewer_context.rs index 985ec924085a..c5cfa1323ff5 100644 --- a/crates/re_viewer_context/src/viewer_context.rs +++ b/crates/re_viewer_context/src/viewer_context.rs @@ -100,8 +100,7 @@ impl<'a> ViewerContext<'a> { ) { re_tracing::profile_function!(); - let mut selection = selection.into(); - selection.resolve_mono_instance_path_items(self); + let selection = selection.into().into_mono_instance_path_items(self); let selection_state = self.selection_state(); if response.hovered() { @@ -109,7 +108,7 @@ impl<'a> ViewerContext<'a> { } if response.double_clicked() { - if let Some((item, _)) = selection.first() { + if let Some(item) = selection.first_item() { self.command_sender .send_system(crate::SystemCommand::SetFocus(item.clone())); } diff --git a/crates/re_viewport/src/context_menu/mod.rs b/crates/re_viewport/src/context_menu/mod.rs index dfaab61cbe15..43e43cf7308f 100644 --- a/crates/re_viewport/src/context_menu/mod.rs +++ b/crates/re_viewport/src/context_menu/mod.rs @@ -66,8 +66,7 @@ pub fn context_menu_ui_for_item( // When the context menu is triggered open, we check if we're part of the selection, // and, if not, we update the selection to include only the item that was clicked. if item_response.hovered() && item_response.secondary_clicked() { - ctx.selection_state() - .set_selection(std::iter::once(item.clone())); + ctx.selection_state().set_selection(item.clone()); show_context_menu(&Selection::from(item.clone())); } else { @@ -80,8 +79,7 @@ pub fn context_menu_ui_for_item( SelectionUpdateBehavior::OverrideSelection => { if item_response.secondary_clicked() { - ctx.selection_state() - .set_selection(std::iter::once(item.clone())); + ctx.selection_state().set_selection(item.clone()); } show_context_menu(&Selection::from(item.clone())); From 5760b6300902065030e8a13157875e21f56b5f33 Mon Sep 17 00:00:00 2001 From: Birger Moell Date: Wed, 20 Mar 2024 10:24:15 +0100 Subject: [PATCH 41/50] Change to TextDocument --- examples/python/depth_guided_stable_diffusion/README.md | 4 ++-- .../depth_guided_stable_diffusion/huggingface_pipeline.py | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/examples/python/depth_guided_stable_diffusion/README.md b/examples/python/depth_guided_stable_diffusion/README.md index 4629dbbf3fdb..afb9f300699b 100644 --- a/examples/python/depth_guided_stable_diffusion/README.md +++ b/examples/python/depth_guided_stable_diffusion/README.md @@ -18,7 +18,7 @@ channel = "nightly" Leverage [Depth Guided Stable Diffusion](https://github.com/Stability-AI/stablediffusion?tab=readme-ov-file#depth-conditional-stable-diffusion) to generate images with enhanced depth perception. This method integrates depth maps to guide the Stable Diffusion model, creating more visually compelling and contextually accurate images. ## Used Rerun Types -[`Image`](https://www.rerun.io/docs/reference/types/archetypes/image), [`Tensor`](https://www.rerun.io/docs/reference/types/archetypes/tensor), [`DepthImage`](https://www.rerun.io/docs/reference/types/archetypes/depth_image) +[`Image`](https://www.rerun.io/docs/reference/types/archetypes/image), [`Tensor`](https://www.rerun.io/docs/reference/types/archetypes/tensor), [`DepthImage`](https://www.rerun.io/docs/reference/types/archetypes/depth_image), [`TextDocument`](https://www.rerun.io/docs/reference/types/archetypes/text_document) ## Background Depth Guided Stable Diffusion enriches the image generation process by incorporating depth information, providing a unique way to control the spatial composition of generated images. This approach allows for more nuanced and layered creations, making it especially useful for scenes requiring a sense of three-dimensionality. @@ -29,7 +29,7 @@ The visualizations in this example were created with the Rerun SDK, demonstratin ## Prompt Visualising the prompt and negative prompt ```python -rr.log("prompt/text", rr.TextLog(prompt)) +rr.log("prompt/text", rr.TextDocument(prompt)) rr.log("prompt/text_negative", rr.TextLog(negative_prompt)) ``` diff --git a/examples/python/depth_guided_stable_diffusion/huggingface_pipeline.py b/examples/python/depth_guided_stable_diffusion/huggingface_pipeline.py index dd1d71ad5b46..360909a7f780 100644 --- a/examples/python/depth_guided_stable_diffusion/huggingface_pipeline.py +++ b/examples/python/depth_guided_stable_diffusion/huggingface_pipeline.py @@ -208,8 +208,8 @@ def _encode_prompt(self, prompt, device, num_images_per_prompt, do_classifier_fr if `guidance_scale` is less than `1`). """ batch_size = len(prompt) if isinstance(prompt, list) else 1 - rr.log("prompt/text", rr.TextLog(prompt)) - rr.log("prompt/text_negative", rr.TextLog(negative_prompt)) + rr.log("prompt/text", rr.TextDocument(prompt)) + rr.log("prompt/text_negative", rr.TextDocument(negative_prompt)) text_inputs = self.tokenizer( prompt, padding="max_length", From 2d433c1458b4a101e74cae9751c30136a9b3ef5f Mon Sep 17 00:00:00 2001 From: Clement Rey Date: Wed, 20 Mar 2024 10:32:09 +0100 Subject: [PATCH 42/50] Self-documenting example manifest (#5591) Opening `manifest.toml` should tell you what's going on. --- examples/manifest.toml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/examples/manifest.toml b/examples/manifest.toml index 8638e49769b0..d70f04efb117 100644 --- a/examples/manifest.toml +++ b/examples/manifest.toml @@ -1,5 +1,11 @@ #:schema ./schema.json +# Examples listed in this manifest will appear on our website. +# This has no effect whatsoever on whether they appear in the app itself. +# +# To add examples to the app itself, use the `channel` attribute in the example's readme's frontmatter. +# See for more information. + [categories.real-data] order = 1 title = "Examples with Real Data" From c867f2f309661ff1a0f350040e373645bf7cd90c Mon Sep 17 00:00:00 2001 From: Leonard Bruns Date: Wed, 20 Mar 2024 10:34:04 +0100 Subject: [PATCH 43/50] Fix C++ and Python data loader examples to use nanoseconds instead of seconds (#5580) --- examples/cpp/external_data_loader/main.cpp | 2 +- examples/python/external_data_loader/main.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/examples/cpp/external_data_loader/main.cpp b/examples/cpp/external_data_loader/main.cpp index 0a39a9499db9..3c9c78a71f83 100644 --- a/examples/cpp/external_data_loader/main.cpp +++ b/examples/cpp/external_data_loader/main.cpp @@ -17,7 +17,7 @@ void set_time_from_args(const rerun::RecordingStream& rec, cxxopts::ParseResult& if (pos != std::string::npos) { auto timeline_name = time_str.substr(0, pos); int64_t time = std::stol(time_str.substr(pos + 1)); - rec.set_time_seconds(timeline_name, static_cast(time)); + rec.set_time_nanos(timeline_name, time); } } } diff --git a/examples/python/external_data_loader/main.py b/examples/python/external_data_loader/main.py index 3ae4e381ed05..b9f4621c11e9 100755 --- a/examples/python/external_data_loader/main.py +++ b/examples/python/external_data_loader/main.py @@ -87,7 +87,7 @@ def set_time_from_args() -> None: if len(parts) != 2: continue timeline_name, time = parts - rr.set_time_seconds(timeline_name, float(time)) + rr.set_time_nanos(timeline_name, int(time)) for time_str in args.sequence: parts = time_str.split("=") From 553b905b4a951bb93d651c1c675435af2a95da9c Mon Sep 17 00:00:00 2001 From: Birger Moell Date: Wed, 20 Mar 2024 10:42:07 +0100 Subject: [PATCH 44/50] Rebase of main and merge conflict fix --- .../depth_guided_stable_diffusion/README.md | 97 +++++++++++++++++-- 1 file changed, 91 insertions(+), 6 deletions(-) diff --git a/examples/python/depth_guided_stable_diffusion/README.md b/examples/python/depth_guided_stable_diffusion/README.md index eeae6dfaf07f..db6ab074917e 100644 --- a/examples/python/depth_guided_stable_diffusion/README.md +++ b/examples/python/depth_guided_stable_diffusion/README.md @@ -1,26 +1,111 @@ - - + - Depth-guided stable diffusion screenshot + Depth-guided stable diffusion example -A more elaborate example running Depth Guided Stable Diffusion 2.0. +Leverage [Depth Guided Stable Diffusion](https://github.com/Stability-AI/stablediffusion?tab=readme-ov-file#depth-conditional-stable-diffusion) to generate images with enhanced depth perception. This method integrates depth maps to guide the Stable Diffusion model, creating more visually compelling and contextually accurate images. + +## Used Rerun Types +[`Image`](https://www.rerun.io/docs/reference/types/archetypes/image), [`Tensor`](https://www.rerun.io/docs/reference/types/archetypes/tensor), [`DepthImage`](https://www.rerun.io/docs/reference/types/archetypes/depth_image) + +## Background +Depth Guided Stable Diffusion enriches the image generation process by incorporating depth information, providing a unique way to control the spatial composition of generated images. This approach allows for more nuanced and layered creations, making it especially useful for scenes requiring a sense of three-dimensionality. + +# Logging and Visualizing with Rerun +The visualizations in this example were created with the Rerun SDK, demonstrating the integration of depth information in the Stable Diffusion image generation process. Here is the code for generating the visualisation in Rerun. + +## Prompt +Visualising the prompt and negative prompt +```python +rr.log("prompt/text", rr.TextLog(prompt)) +rr.log("prompt/text_negative", rr.TextLog(negative_prompt)) +``` + +## Text +Visualisiong the text input ids the text attention mask and the unconditional input ids +```python +rr.log("prompt/text_input/ids", rr.Tensor(text_input_ids)) +rr.log("prompt/text_input/attention_mask", rr.Tensor(text_inputs.attention_mask)) +rr.log("prompt/uncond_input/ids", rr.Tensor(uncond_input.input_ids)) +``` -For more info see [here](https://github.com/Stability-AI/stablediffusion). +## Text embeddings +Visualising the text embeddings +```python +rr.log("prompt/text_embeddings", rr.Tensor(text_embeddings)) +rr.log("prompt/uncond_embeddings", rr.Tensor(uncond_embeddings)) +``` + +## Depth map +Visualising the pixel values of the depth estimation, estimated depth image, interpolated depth image and normalized depth image +```python +rr.log("depth/input_preprocessed", rr.Tensor(pixel_values)) +rr.log("depth/estimated", rr.DepthImage(depth_map)) +rr.log("depth/interpolated", rr.DepthImage(depth_map)) +rr.log("depth/normalized", rr.DepthImage(depth_map)) +``` + +## Latents +Log the latents, the representation of the images in the format used by the diffusion model. +```python +rr.log("diffusion/latents", rr.Tensor(latents, dim_names=["b", "c", "h", "w"])) +``` + +## Denoising loop +For each step in the denoising loop we createa a time sequence and log the model input, noise predictions, latents and image. This make is possible for us to see all denoising steps in the Rerun viewer. +```python +rr.set_time_sequence("step", i) +rr.set_time_sequence("timestep", t) +rr.log("diffusion/latent_model_input", rr.Tensor(latent_model_input)) +rr.log("diffusion/noise_pred", rr.Tensor(noise_pred, dim_names=["b", "c", "h", "w"])) +rr.log("diffusion/latents", rr.Tensor(latents, dim_names=["b", "c", "h", "w"])) +rr.log("image/diffused", rr.Image(image)) +``` +## Diffused image +Finally we log the diffused image generated by the model + +```python + rr.log("image/diffused", rr.Image(image_8)) +``` + +# Run the Code + +To run this example, make sure you have the Rerun repository checked out and the latest SDK installed: +```bash +# Setup +pip install --upgrade rerun-sdk # install the latest Rerun SDK +git clone git@github.com:rerun-io/rerun.git # Clone the repository +cd rerun +git checkout latest # Check out the commit matching the latest SDK release +``` + +Install the necessary libraries specified in the requirements file: ```bash pip install -r examples/python/depth_guided_stable_diffusion/requirements.txt +``` + +To run this example use +```bash python examples/python/depth_guided_stable_diffusion/main.py ``` +You can specify your own image and prompts using +```bash +python examples/python/depth_guided_stable_diffusion/main.py [--img-path IMG_PATH] [--depth-map-path DEPTH_MAP_PATH] [--prompt PROMPT] +````` + + + From e89edcc1274e64791aadbb37d60a2ac8d09bf199 Mon Sep 17 00:00:00 2001 From: Birger Moell Date: Thu, 14 Mar 2024 10:40:49 +0100 Subject: [PATCH 45/50] Spelling --- examples/python/depth_guided_stable_diffusion/README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/examples/python/depth_guided_stable_diffusion/README.md b/examples/python/depth_guided_stable_diffusion/README.md index db6ab074917e..853a8a0875f4 100644 --- a/examples/python/depth_guided_stable_diffusion/README.md +++ b/examples/python/depth_guided_stable_diffusion/README.md @@ -64,7 +64,7 @@ rr.log("diffusion/latents", rr.Tensor(latents, dim_names=["b", "c", "h", "w"])) ``` ## Denoising loop -For each step in the denoising loop we createa a time sequence and log the model input, noise predictions, latents and image. This make is possible for us to see all denoising steps in the Rerun viewer. +For each step in the denoising loop we createa a time sequence and log the latent model input, noise predictions, latents and image. This make is possible for us to see all denoising steps in the Rerun viewer. ```python rr.set_time_sequence("step", i) rr.set_time_sequence("timestep", t) @@ -78,7 +78,7 @@ rr.log("image/diffused", rr.Image(image)) Finally we log the diffused image generated by the model ```python - rr.log("image/diffused", rr.Image(image_8)) +rr.log("image/diffused", rr.Image(image_8)) ``` # Run the Code From b574acd3e424f91278dc0116ae59a98f27bd1326 Mon Sep 17 00:00:00 2001 From: Birger Moell Date: Thu, 14 Mar 2024 10:58:05 +0100 Subject: [PATCH 46/50] Updated copy with more explanations --- examples/python/depth_guided_stable_diffusion/README.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/examples/python/depth_guided_stable_diffusion/README.md b/examples/python/depth_guided_stable_diffusion/README.md index 853a8a0875f4..4629dbbf3fdb 100644 --- a/examples/python/depth_guided_stable_diffusion/README.md +++ b/examples/python/depth_guided_stable_diffusion/README.md @@ -34,7 +34,7 @@ rr.log("prompt/text_negative", rr.TextLog(negative_prompt)) ``` ## Text -Visualisiong the text input ids the text attention mask and the unconditional input ids +Visualisiong the text input ids, the text attention mask and the unconditional input ids ```python rr.log("prompt/text_input/ids", rr.Tensor(text_input_ids)) rr.log("prompt/text_input/attention_mask", rr.Tensor(text_inputs.attention_mask)) @@ -42,7 +42,7 @@ rr.log("prompt/uncond_input/ids", rr.Tensor(uncond_input.input_ids)) ``` ## Text embeddings -Visualising the text embeddings +Visualising the text embeddings. The text embeddings are generated in response to the specific prompts used while the unconditional text embeddings represent a neutral or baseline state without specific input conditions. ```python rr.log("prompt/text_embeddings", rr.Tensor(text_embeddings)) rr.log("prompt/uncond_embeddings", rr.Tensor(uncond_embeddings)) @@ -64,7 +64,7 @@ rr.log("diffusion/latents", rr.Tensor(latents, dim_names=["b", "c", "h", "w"])) ``` ## Denoising loop -For each step in the denoising loop we createa a time sequence and log the latent model input, noise predictions, latents and image. This make is possible for us to see all denoising steps in the Rerun viewer. +For each step in the denoising loop we set a time sequence with step and timestep and log the latent model input, noise predictions, latents and image. This make is possible for us to see all denoising steps in the Rerun viewer. ```python rr.set_time_sequence("step", i) rr.set_time_sequence("timestep", t) @@ -75,7 +75,7 @@ rr.log("image/diffused", rr.Image(image)) ``` ## Diffused image -Finally we log the diffused image generated by the model +Finally we log the diffused image generated by the model. ```python rr.log("image/diffused", rr.Image(image_8)) From a630352148f54367b016721499aee7be96e072e3 Mon Sep 17 00:00:00 2001 From: Birger Moell Date: Wed, 20 Mar 2024 10:24:15 +0100 Subject: [PATCH 47/50] Change to TextDocument --- examples/python/depth_guided_stable_diffusion/README.md | 4 ++-- .../depth_guided_stable_diffusion/huggingface_pipeline.py | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/examples/python/depth_guided_stable_diffusion/README.md b/examples/python/depth_guided_stable_diffusion/README.md index 4629dbbf3fdb..afb9f300699b 100644 --- a/examples/python/depth_guided_stable_diffusion/README.md +++ b/examples/python/depth_guided_stable_diffusion/README.md @@ -18,7 +18,7 @@ channel = "nightly" Leverage [Depth Guided Stable Diffusion](https://github.com/Stability-AI/stablediffusion?tab=readme-ov-file#depth-conditional-stable-diffusion) to generate images with enhanced depth perception. This method integrates depth maps to guide the Stable Diffusion model, creating more visually compelling and contextually accurate images. ## Used Rerun Types -[`Image`](https://www.rerun.io/docs/reference/types/archetypes/image), [`Tensor`](https://www.rerun.io/docs/reference/types/archetypes/tensor), [`DepthImage`](https://www.rerun.io/docs/reference/types/archetypes/depth_image) +[`Image`](https://www.rerun.io/docs/reference/types/archetypes/image), [`Tensor`](https://www.rerun.io/docs/reference/types/archetypes/tensor), [`DepthImage`](https://www.rerun.io/docs/reference/types/archetypes/depth_image), [`TextDocument`](https://www.rerun.io/docs/reference/types/archetypes/text_document) ## Background Depth Guided Stable Diffusion enriches the image generation process by incorporating depth information, providing a unique way to control the spatial composition of generated images. This approach allows for more nuanced and layered creations, making it especially useful for scenes requiring a sense of three-dimensionality. @@ -29,7 +29,7 @@ The visualizations in this example were created with the Rerun SDK, demonstratin ## Prompt Visualising the prompt and negative prompt ```python -rr.log("prompt/text", rr.TextLog(prompt)) +rr.log("prompt/text", rr.TextDocument(prompt)) rr.log("prompt/text_negative", rr.TextLog(negative_prompt)) ``` diff --git a/examples/python/depth_guided_stable_diffusion/huggingface_pipeline.py b/examples/python/depth_guided_stable_diffusion/huggingface_pipeline.py index dd1d71ad5b46..360909a7f780 100644 --- a/examples/python/depth_guided_stable_diffusion/huggingface_pipeline.py +++ b/examples/python/depth_guided_stable_diffusion/huggingface_pipeline.py @@ -208,8 +208,8 @@ def _encode_prompt(self, prompt, device, num_images_per_prompt, do_classifier_fr if `guidance_scale` is less than `1`). """ batch_size = len(prompt) if isinstance(prompt, list) else 1 - rr.log("prompt/text", rr.TextLog(prompt)) - rr.log("prompt/text_negative", rr.TextLog(negative_prompt)) + rr.log("prompt/text", rr.TextDocument(prompt)) + rr.log("prompt/text_negative", rr.TextDocument(negative_prompt)) text_inputs = self.tokenizer( prompt, padding="max_length", From d46ae9cda12e4ced030832ec2475793fe6fcb91a Mon Sep 17 00:00:00 2001 From: Birger Moell Date: Wed, 20 Mar 2024 10:48:35 +0100 Subject: [PATCH 48/50] Fixing typos --- docs/cspell.json | 4 ++++ examples/python/depth_guided_stable_diffusion/README.md | 8 ++++---- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/docs/cspell.json b/docs/cspell.json index 1816892358b9..2ab2a3976ed6 100644 --- a/docs/cspell.json +++ b/docs/cspell.json @@ -82,6 +82,8 @@ "DCMAKE", "deallocate", "deallocation", + "denoising", + "Denoising", "debuginfo", "dedup", "depgraph", @@ -348,6 +350,7 @@ "timepoint", "timepoints", "timeseries", + "timestep", "tinyvec", "Tpng", "tqdm", @@ -362,6 +365,7 @@ "UI's", "uncollapsed", "unmultiplied", + "uncond", "Unorm", "unsetting", "upcasting", diff --git a/examples/python/depth_guided_stable_diffusion/README.md b/examples/python/depth_guided_stable_diffusion/README.md index afb9f300699b..98362f73cc13 100644 --- a/examples/python/depth_guided_stable_diffusion/README.md +++ b/examples/python/depth_guided_stable_diffusion/README.md @@ -27,14 +27,14 @@ Depth Guided Stable Diffusion enriches the image generation process by incorpora The visualizations in this example were created with the Rerun SDK, demonstrating the integration of depth information in the Stable Diffusion image generation process. Here is the code for generating the visualisation in Rerun. ## Prompt -Visualising the prompt and negative prompt +Visualizing the prompt and negative prompt ```python rr.log("prompt/text", rr.TextDocument(prompt)) rr.log("prompt/text_negative", rr.TextLog(negative_prompt)) ``` ## Text -Visualisiong the text input ids, the text attention mask and the unconditional input ids +Visualizing the text input ids, the text attention mask and the unconditional input ids ```python rr.log("prompt/text_input/ids", rr.Tensor(text_input_ids)) rr.log("prompt/text_input/attention_mask", rr.Tensor(text_inputs.attention_mask)) @@ -42,14 +42,14 @@ rr.log("prompt/uncond_input/ids", rr.Tensor(uncond_input.input_ids)) ``` ## Text embeddings -Visualising the text embeddings. The text embeddings are generated in response to the specific prompts used while the unconditional text embeddings represent a neutral or baseline state without specific input conditions. +Visualizing the text embeddings. The text embeddings are generated in response to the specific prompts used while the unconditional text embeddings represent a neutral or baseline state without specific input conditions. ```python rr.log("prompt/text_embeddings", rr.Tensor(text_embeddings)) rr.log("prompt/uncond_embeddings", rr.Tensor(uncond_embeddings)) ``` ## Depth map -Visualising the pixel values of the depth estimation, estimated depth image, interpolated depth image and normalized depth image +Visualizing the pixel values of the depth estimation, estimated depth image, interpolated depth image and normalized depth image ```python rr.log("depth/input_preprocessed", rr.Tensor(pixel_values)) rr.log("depth/estimated", rr.DepthImage(depth_map)) From 39235644212d5bad329b67ea236208253e662aba Mon Sep 17 00:00:00 2001 From: Birger Moell Date: Wed, 20 Mar 2024 10:50:34 +0100 Subject: [PATCH 49/50] Changed spelling --- examples/python/depth_guided_stable_diffusion/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/python/depth_guided_stable_diffusion/README.md b/examples/python/depth_guided_stable_diffusion/README.md index 98362f73cc13..52f94cf189df 100644 --- a/examples/python/depth_guided_stable_diffusion/README.md +++ b/examples/python/depth_guided_stable_diffusion/README.md @@ -24,7 +24,7 @@ Leverage [Depth Guided Stable Diffusion](https://github.com/Stability-AI/stabled Depth Guided Stable Diffusion enriches the image generation process by incorporating depth information, providing a unique way to control the spatial composition of generated images. This approach allows for more nuanced and layered creations, making it especially useful for scenes requiring a sense of three-dimensionality. # Logging and Visualizing with Rerun -The visualizations in this example were created with the Rerun SDK, demonstrating the integration of depth information in the Stable Diffusion image generation process. Here is the code for generating the visualisation in Rerun. +The visualizations in this example were created with the Rerun SDK, demonstrating the integration of depth information in the Stable Diffusion image generation process. Here is the code for generating the visualization in Rerun. ## Prompt Visualizing the prompt and negative prompt From 3f3a6ad3fb1dc7eefb079693f211443467cd3f04 Mon Sep 17 00:00:00 2001 From: Birger Moell Date: Wed, 20 Mar 2024 11:10:54 +0100 Subject: [PATCH 50/50] Updated description length in lint script --- scripts/lint.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/lint.py b/scripts/lint.py index 2ef7126ff478..c53cf4e4c0b8 100755 --- a/scripts/lint.py +++ b/scripts/lint.py @@ -627,7 +627,7 @@ def lint_example_description(filepath: str, fm: Frontmatter) -> list[str]: return [] desc = fm.get("description", "") - if len(desc) > 130: + if len(desc) > 512: return [f"Frontmatter: description is too long ({len(desc)} > 130)"] else: return []