Skip to content

Commit

Permalink
Add new ARKitScenes example (#1538)
Browse files Browse the repository at this point in the history
Co-authored-by: Nikolaus West <[email protected]>
Co-authored-by: Emil Ernerfeldt <[email protected]>
  • Loading branch information
3 people authored Apr 4, 2023
1 parent bf27c8e commit a479c0c
Show file tree
Hide file tree
Showing 4 changed files with 779 additions and 0 deletions.
1 change: 1 addition & 0 deletions examples/python/arkitscenes/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
dataset/**
321 changes: 321 additions & 0 deletions examples/python/arkitscenes/download_dataset.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,321 @@
# Copied from https://github.com/apple/ARKitScenes/blob/main/download_data.py
# Licensing information: https://github.com/apple/ARKitScenes/blob/main/LICENSE
import math
import os
import subprocess
from pathlib import Path
from typing import Final, List, Optional

import pandas as pd

ARkitscense_url = "https://docs-assets.developer.apple.com/ml-research/datasets/arkitscenes/v1"
TRAINING: Final = "Training"
VALIDATION: Final = "Validation"
HIGRES_DEPTH_ASSET_NAME: Final = "highres_depth"
POINT_CLOUDS_FOLDER: Final = "laser_scanner_point_clouds"

AVAILABLE_RECORDINGS: Final = ["48458663", "42444949", "41069046", "41125722", "41125763", "42446167"]
DATASET_DIR: Final = Path(os.path.dirname(__file__)) / "dataset"

default_raw_dataset_assets = [
"mov",
"annotation",
"mesh",
"confidence",
"highres_depth",
"lowres_depth",
"lowres_wide.traj",
"lowres_wide",
"lowres_wide_intrinsics",
"ultrawide",
"ultrawide_intrinsics",
"vga_wide",
"vga_wide_intrinsics",
]

missing_3dod_assets_video_ids = [
"47334522",
"47334523",
"42897421",
"45261582",
"47333152",
"47333155",
"48458535",
"48018733",
"47429677",
"48458541",
"42897848",
"47895482",
"47333960",
"47430089",
"42899148",
"42897612",
"42899153",
"42446164",
"48018149",
"47332198",
"47334515",
"45663223",
"45663226",
"45663227",
]


def raw_files(video_id: str, assets: List[str], metadata: pd.DataFrame) -> List[str]:
file_names = []
for asset in assets:
if HIGRES_DEPTH_ASSET_NAME == asset:
in_upsampling = metadata.loc[metadata["video_id"] == float(video_id), ["is_in_upsampling"]].iat[0, 0]
if not in_upsampling:
print(f"Skipping asset {asset} for video_id {video_id} - Video not in upsampling dataset")
continue # highres_depth asset only available for video ids from upsampling dataset

if asset in [
"confidence",
"highres_depth",
"lowres_depth",
"lowres_wide",
"lowres_wide_intrinsics",
"ultrawide",
"ultrawide_intrinsics",
"wide",
"wide_intrinsics",
"vga_wide",
"vga_wide_intrinsics",
]:
file_names.append(asset + ".zip")
elif asset == "mov":
file_names.append(f"{video_id}.mov")
elif asset == "mesh":
if video_id not in missing_3dod_assets_video_ids:
file_names.append(f"{video_id}_3dod_mesh.ply")
elif asset == "annotation":
if video_id not in missing_3dod_assets_video_ids:
file_names.append(f"{video_id}_3dod_annotation.json")
elif asset == "lowres_wide.traj":
if video_id not in missing_3dod_assets_video_ids:
file_names.append("lowres_wide.traj")
else:
raise Exception(f"No asset = {asset} in raw dataset")
return file_names


def download_file(url: str, file_name: str, dst: Path) -> bool:
os.makedirs(dst, exist_ok=True)
filepath = os.path.join(dst, file_name)

if not os.path.isfile(filepath):
command = f"curl {url} -o {file_name}.tmp --fail"
print(f"Downloading file {filepath}")
try:
subprocess.check_call(command, shell=True, cwd=dst)
except Exception as error:
print(f"Error downloading {url}, error: {error}")
return False
os.rename(filepath + ".tmp", filepath)
else:
print(f"WARNING: skipping download of existing file: {filepath}")
return True


def unzip_file(file_name: str, dst: Path, keep_zip: bool = True) -> bool:
filepath = os.path.join(dst, file_name)
print(f"Unzipping zip file {filepath}")
command = f"unzip -oq {filepath} -d {dst}"
try:
subprocess.check_call(command, shell=True)
except Exception as error:
print(f"Error unzipping {filepath}, error: {error}")
return False
if not keep_zip:
os.remove(filepath)
return True


def download_laser_scanner_point_clouds_for_video(video_id: str, metadata: pd.DataFrame, download_dir: Path) -> None:
video_metadata = metadata.loc[metadata["video_id"] == float(video_id)]
visit_id = video_metadata["visit_id"].iat[0]
has_laser_scanner_point_clouds = video_metadata["has_laser_scanner_point_clouds"].iat[0]

if not has_laser_scanner_point_clouds:
print(f"Warning: Laser scanner point clouds for video {video_id} are not available")
return

if math.isnan(visit_id) or not visit_id.is_integer():
print(f"Warning: Downloading laser scanner point clouds for video {video_id} failed - Bad visit id {visit_id}")
return

visit_id = int(visit_id) # Expecting an 8 digit integer
laser_scanner_point_clouds_ids = laser_scanner_point_clouds_for_visit_id(visit_id, download_dir)

for point_cloud_id in laser_scanner_point_clouds_ids:
download_laser_scanner_point_clouds(point_cloud_id, visit_id, download_dir)


def laser_scanner_point_clouds_for_visit_id(visit_id: int, download_dir: Path) -> List[str]:
point_cloud_to_visit_id_mapping_filename = "laser_scanner_point_clouds_mapping.csv"
if not os.path.exists(point_cloud_to_visit_id_mapping_filename):
point_cloud_to_visit_id_mapping_url = (
f"{ARkitscense_url}/raw/laser_scanner_point_clouds/{point_cloud_to_visit_id_mapping_filename}"
)
if not download_file(
point_cloud_to_visit_id_mapping_url,
point_cloud_to_visit_id_mapping_filename,
download_dir,
):
print(
f"Error downloading point cloud for visit_id {visit_id} at location "
f"{point_cloud_to_visit_id_mapping_url}"
)
return []

point_cloud_to_visit_id_mapping_filepath = os.path.join(download_dir, point_cloud_to_visit_id_mapping_filename)
point_cloud_to_visit_id_mapping = pd.read_csv(point_cloud_to_visit_id_mapping_filepath)
point_cloud_ids = point_cloud_to_visit_id_mapping.loc[
point_cloud_to_visit_id_mapping["visit_id"] == visit_id,
["laser_scanner_point_clouds_id"],
]
point_cloud_ids_list = [scan_id[0] for scan_id in point_cloud_ids.values]

return point_cloud_ids_list


def download_laser_scanner_point_clouds(laser_scanner_point_cloud_id: str, visit_id: int, download_dir: Path) -> None:
laser_scanner_point_clouds_folder_path = download_dir / POINT_CLOUDS_FOLDER / str(visit_id)
os.makedirs(laser_scanner_point_clouds_folder_path, exist_ok=True)

for extension in [".ply", "_pose.txt"]:
filename = f"{laser_scanner_point_cloud_id}{extension}"
filepath = os.path.join(laser_scanner_point_clouds_folder_path, filename)
if os.path.exists(filepath):
return
file_url = f"{ARkitscense_url}/raw/laser_scanner_point_clouds/{visit_id}/{filename}"
download_file(file_url, filename, laser_scanner_point_clouds_folder_path)


def get_metadata(dataset: str, download_dir: Path) -> pd.DataFrame:
filename = "metadata.csv"
url = f"{ARkitscense_url}/threedod/{filename}" if "3dod" == dataset else f"{ARkitscense_url}/{dataset}/{filename}"
dst_folder = download_dir / dataset
dst_file = dst_folder / filename

if not download_file(url, filename, dst_folder):
return

metadata = pd.read_csv(dst_file)
return metadata


def download_data(
dataset: str,
video_ids: List[str],
dataset_splits: List[str],
download_dir: Path,
keep_zip: bool,
raw_dataset_assets: Optional[List[str]] = None,
should_download_laser_scanner_point_cloud: bool = False,
) -> None:
"""
Downloads data from the specified dataset and video IDs to the given download directory.
Args:
----
dataset: the name of the dataset to download from (raw, 3dod, or upsampling)
video_ids: the list of video IDs to download data for
dataset_splits: the list of splits for each video ID (train, validation, or test)
download_dir: the directory to download data to
keep_zip: whether to keep the downloaded zip files after extracting them
raw_dataset_assets: a list of asset types to download from the raw dataset, if dataset is "raw"
should_download_laser_scanner_point_cloud: whether to download the laser scanner point cloud data, if available
Returns: None
"""
metadata = get_metadata(dataset, download_dir)
if None is metadata:
print(f"Error retrieving metadata for dataset {dataset}")
return

for video_id in sorted(set(video_ids)):
split = dataset_splits[video_ids.index(video_id)]
dst_dir = download_dir / dataset / split
if dataset == "raw":
url_prefix = ""
file_names = []
if not raw_dataset_assets:
print(f"Warning: No raw assets given for video id {video_id}")
else:
dst_dir = dst_dir / str(video_id)
url_prefix = f"{ARkitscense_url}/raw/{split}/{video_id}" + "/{}"
file_names = raw_files(video_id, raw_dataset_assets, metadata)
elif dataset == "3dod":
url_prefix = f"{ARkitscense_url}/threedod/{split}" + "/{}"
file_names = [
f"{video_id}.zip",
]
elif dataset == "upsampling":
url_prefix = f"{ARkitscense_url}/upsampling/{split}" + "/{}"
file_names = [
f"{video_id}.zip",
]
else:
raise Exception(f"No such dataset = {dataset}")

if should_download_laser_scanner_point_cloud and dataset == "raw":
# Point clouds only available for the raw dataset
download_laser_scanner_point_clouds_for_video(video_id, metadata, download_dir)

for file_name in file_names:
dst_path = os.path.join(dst_dir, file_name)
url = url_prefix.format(file_name)

if not file_name.endswith(".zip") or not os.path.isdir(dst_path[: -len(".zip")]):
download_file(url, dst_path, dst_dir)
else:
print(f"WARNING: skipping download of existing zip file: {dst_path}")
if file_name.endswith(".zip") and os.path.isfile(dst_path):
unzip_file(file_name, dst_dir, keep_zip)


def ensure_recording_downloaded(video_id: str, include_highres: bool) -> Path:
"""Only downloads from validation set."""
data_path = DATASET_DIR / "raw" / "Validation" / video_id
assets_to_download = [
"lowres_wide",
"lowres_depth",
"lowres_wide_intrinsics",
"lowres_wide.traj",
"annotation",
"mesh",
]
if include_highres:
assets_to_download.extend(["highres_depth", "wide", "wide_intrinsics"])
download_data(
dataset="raw",
video_ids=[video_id],
dataset_splits=[VALIDATION],
download_dir=DATASET_DIR,
keep_zip=False,
raw_dataset_assets=assets_to_download,
should_download_laser_scanner_point_cloud=False,
)
return data_path


def ensure_recording_available(video_id: str, include_highres: bool) -> Path:
"""
Returns the path to the recording for a given video_id.
Args:
video_id (str): Identifier for the recording.
Returns
-------
Path: Path object representing the path to the recording.
Raises
------
AssertionError: If the recording path does not exist.
"""
recording_path = ensure_recording_downloaded(video_id, include_highres)
assert recording_path.exists(), f"Recording path {recording_path} does not exist."
return recording_path # Return the path to the recording
Loading

1 comment on commit a479c0c

@github-actions
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Rust Benchmark

Benchmark suite Current: a479c0c Previous: bf27c8e Ratio
arrow2/size_bytes/primitive/rows=10000/instances=100/array 147994 ns/iter (± 893) 151283 ns/iter (± 1110) 0.98
arrow2/size_bytes/primitive/rows=10000/instances=100/vec 3294 ns/iter (± 9) 3291 ns/iter (± 26) 1.00
arrow2/size_bytes/primitive/rows=10000/instances=100/vec/erased 17720 ns/iter (± 16) 17727 ns/iter (± 49) 1.00
arrow2/size_bytes/struct/rows=10000/instances=100/array 500113 ns/iter (± 3426) 485165 ns/iter (± 3064) 1.03
arrow2/size_bytes/struct/rows=10000/instances=100/vec 3296 ns/iter (± 10) 3285 ns/iter (± 11) 1.00
arrow2/size_bytes/struct/rows=10000/instances=100/vec/erased 17727 ns/iter (± 14) 17738 ns/iter (± 53) 1.00
arrow2/size_bytes/struct_large/rows=10000/instances=100/array 3922912 ns/iter (± 610668) 3729278 ns/iter (± 455125) 1.05
arrow2/size_bytes/struct_large/rows=10000/instances=100/vec 3985 ns/iter (± 9) 3974 ns/iter (± 15) 1.00
arrow2/size_bytes/struct_large/rows=10000/instances=100/vec/erased 17723 ns/iter (± 12) 17739 ns/iter (± 44) 1.00
arrow2/erased_clone/primitive/rows=10000/instances=100/cell/arc_erased 786279 ns/iter (± 4188) 789253 ns/iter (± 1686) 1.00
arrow2/erased_clone/primitive/rows=10000/instances=100/cell/wrapped_in_arc 194582 ns/iter (± 1345) 195448 ns/iter (± 625) 1.00
arrow2/erased_clone/primitive/rows=10000/instances=100/array 764522 ns/iter (± 3503) 740940 ns/iter (± 2893) 1.03
arrow2/erased_clone/primitive/rows=10000/instances=100/array/downcast_first 343191 ns/iter (± 840) 343781 ns/iter (± 1396) 1.00
arrow2/erased_clone/primitive/rows=10000/instances=100/vec/full_copy 1079821 ns/iter (± 41571) 1011980 ns/iter (± 27228) 1.07
arrow2/erased_clone/primitive/rows=10000/instances=100/vec/wrapped_in_arc 127370 ns/iter (± 121) 128818 ns/iter (± 547) 0.99
arrow2/erased_clone/struct/rows=10000/instances=100/cell/arc_erased 4879578 ns/iter (± 462848) 4231047 ns/iter (± 79589) 1.15
arrow2/erased_clone/struct/rows=10000/instances=100/cell/wrapped_in_arc 281001 ns/iter (± 1236) 287869 ns/iter (± 663) 0.98
arrow2/erased_clone/struct/rows=10000/instances=100/array 4546946 ns/iter (± 338391) 4234502 ns/iter (± 63681) 1.07
arrow2/erased_clone/struct/rows=10000/instances=100/array/downcast_first 3833097 ns/iter (± 230940) 3571220 ns/iter (± 44405) 1.07
arrow2/erased_clone/struct/rows=10000/instances=100/vec/full_copy 1398201 ns/iter (± 66950) 1287148 ns/iter (± 30665) 1.09
arrow2/erased_clone/struct/rows=10000/instances=100/vec/wrapped_in_arc 127203 ns/iter (± 167) 127479 ns/iter (± 182) 1.00
arrow2/erased_clone/struct_large/rows=10000/instances=100/cell/arc_erased 47932231 ns/iter (± 370571) 47856426 ns/iter (± 409354) 1.00
arrow2/erased_clone/struct_large/rows=10000/instances=100/cell/wrapped_in_arc 169192 ns/iter (± 301) 167118 ns/iter (± 426) 1.01
arrow2/erased_clone/struct_large/rows=10000/instances=100/array 47073222 ns/iter (± 395513) 46951163 ns/iter (± 422407) 1.00
arrow2/erased_clone/struct_large/rows=10000/instances=100/array/downcast_first 44723675 ns/iter (± 392388) 44645934 ns/iter (± 433245) 1.00
arrow2/erased_clone/struct_large/rows=10000/instances=100/vec/full_copy 4961198 ns/iter (± 188245) 4483235 ns/iter (± 132187) 1.11
arrow2/erased_clone/struct_large/rows=10000/instances=100/vec/wrapped_in_arc 127434 ns/iter (± 114) 127021 ns/iter (± 310) 1.00
arrow2_convert/serialize/primitive/instances=100000/arrow2_convert 414857 ns/iter (± 894) 416608 ns/iter (± 1008) 1.00
arrow2_convert/serialize/primitive/instances=100000/arrow2/from_values 19629 ns/iter (± 168) 19735 ns/iter (± 108) 0.99
arrow2_convert/serialize/primitive/instances=100000/arrow2/from_vec 19630 ns/iter (± 68) 19666 ns/iter (± 110) 1.00
arrow2_convert/deserialize/primitive/instances=100000/arrow2_convert 96787 ns/iter (± 391) 96876 ns/iter (± 205) 1.00
arrow2_convert/deserialize/primitive/instances=100000/arrow2/validity_checks 162328 ns/iter (± 1149) 159726 ns/iter (± 514) 1.02
arrow2_convert/deserialize/primitive/instances=100000/arrow2/validity_bypass 58396 ns/iter (± 203) 58632 ns/iter (± 241) 1.00
datastore/num_rows=1000/num_instances=1000/packed=false/insert/default 12998775 ns/iter (± 895249) 10763489 ns/iter (± 281148) 1.21
datastore/num_rows=1000/num_instances=1000/packed=false/insert/bucketsz=0 15772995 ns/iter (± 930279) 13018134 ns/iter (± 738578) 1.21
datastore/num_rows=1000/num_instances=1000/packed=false/insert/bucketsz=2 14618045 ns/iter (± 877459) 12651480 ns/iter (± 511062) 1.16
datastore/num_rows=1000/num_instances=1000/packed=false/insert/bucketsz=32 12936795 ns/iter (± 720707) 11134486 ns/iter (± 451515) 1.16
datastore/num_rows=1000/num_instances=1000/packed=false/insert/bucketsz=2048 12442665 ns/iter (± 856789) 10714231 ns/iter (± 402476) 1.16
datastore/num_rows=1000/num_instances=1000/packed=true/insert/default 12532401 ns/iter (± 760304) 10657953 ns/iter (± 394314) 1.18
datastore/num_rows=1000/num_instances=1000/packed=true/insert/bucketsz=0 14488787 ns/iter (± 909714) 13515670 ns/iter (± 708546) 1.07
datastore/num_rows=1000/num_instances=1000/packed=true/insert/bucketsz=2 14163399 ns/iter (± 688201) 13259593 ns/iter (± 481684) 1.07
datastore/num_rows=1000/num_instances=1000/packed=true/insert/bucketsz=32 12378691 ns/iter (± 915249) 10970687 ns/iter (± 348299) 1.13
datastore/num_rows=1000/num_instances=1000/packed=true/insert/bucketsz=2048 12510887 ns/iter (± 776983) 10855773 ns/iter (± 467414) 1.15
datastore/num_rows=1000/num_instances=1000/packed=false/latest_at/default 1827 ns/iter (± 18) 1823 ns/iter (± 18) 1.00
datastore/num_rows=1000/num_instances=1000/packed=false/latest_at/bucketsz=0 1835 ns/iter (± 3) 1834 ns/iter (± 5) 1.00
datastore/num_rows=1000/num_instances=1000/packed=false/latest_at/bucketsz=2 1832 ns/iter (± 1) 1806 ns/iter (± 10) 1.01
datastore/num_rows=1000/num_instances=1000/packed=false/latest_at/bucketsz=32 1825 ns/iter (± 4) 1798 ns/iter (± 6) 1.02
datastore/num_rows=1000/num_instances=1000/packed=false/latest_at/bucketsz=2048 1813 ns/iter (± 8) 1802 ns/iter (± 9) 1.01
datastore/num_rows=1000/num_instances=1000/packed=true/latest_at/default 1830 ns/iter (± 17) 1837 ns/iter (± 18) 1.00
datastore/num_rows=1000/num_instances=1000/packed=true/latest_at/bucketsz=0 1847 ns/iter (± 1) 1827 ns/iter (± 6) 1.01
datastore/num_rows=1000/num_instances=1000/packed=true/latest_at/bucketsz=2 1847 ns/iter (± 0) 1829 ns/iter (± 13) 1.01
datastore/num_rows=1000/num_instances=1000/packed=true/latest_at/bucketsz=32 1830 ns/iter (± 3) 1821 ns/iter (± 3) 1.00
datastore/num_rows=1000/num_instances=1000/packed=true/latest_at/bucketsz=2048 1819 ns/iter (± 3) 1816 ns/iter (± 5) 1.00
datastore/num_rows=1000/num_instances=1000/packed=false/latest_at_missing/primary/default 279 ns/iter (± 0) 280 ns/iter (± 0) 1.00
datastore/num_rows=1000/num_instances=1000/packed=false/latest_at_missing/secondaries/default 436 ns/iter (± 2) 434 ns/iter (± 0) 1.00
datastore/num_rows=1000/num_instances=1000/packed=false/latest_at_missing/primary/bucketsz=0 279 ns/iter (± 8) 280 ns/iter (± 0) 1.00
datastore/num_rows=1000/num_instances=1000/packed=false/latest_at_missing/secondaries/bucketsz=0 442 ns/iter (± 0) 443 ns/iter (± 1) 1.00
datastore/num_rows=1000/num_instances=1000/packed=false/latest_at_missing/primary/bucketsz=2 279 ns/iter (± 0) 281 ns/iter (± 1) 0.99
datastore/num_rows=1000/num_instances=1000/packed=false/latest_at_missing/secondaries/bucketsz=2 443 ns/iter (± 0) 444 ns/iter (± 4) 1.00
datastore/num_rows=1000/num_instances=1000/packed=false/latest_at_missing/primary/bucketsz=32 280 ns/iter (± 0) 281 ns/iter (± 0) 1.00
datastore/num_rows=1000/num_instances=1000/packed=false/latest_at_missing/secondaries/bucketsz=32 445 ns/iter (± 0) 452 ns/iter (± 2) 0.98
datastore/num_rows=1000/num_instances=1000/packed=false/latest_at_missing/primary/bucketsz=2048 280 ns/iter (± 0) 281 ns/iter (± 1) 1.00
datastore/num_rows=1000/num_instances=1000/packed=false/latest_at_missing/secondaries/bucketsz=2048 436 ns/iter (± 0) 435 ns/iter (± 1) 1.00
datastore/num_rows=1000/num_instances=1000/packed=true/latest_at_missing/primary/default 279 ns/iter (± 0) 280 ns/iter (± 1) 1.00
datastore/num_rows=1000/num_instances=1000/packed=true/latest_at_missing/secondaries/default 435 ns/iter (± 4) 434 ns/iter (± 0) 1.00
datastore/num_rows=1000/num_instances=1000/packed=true/latest_at_missing/primary/bucketsz=0 278 ns/iter (± 0) 281 ns/iter (± 0) 0.99
datastore/num_rows=1000/num_instances=1000/packed=true/latest_at_missing/secondaries/bucketsz=0 442 ns/iter (± 0) 443 ns/iter (± 0) 1.00
datastore/num_rows=1000/num_instances=1000/packed=true/latest_at_missing/primary/bucketsz=2 279 ns/iter (± 0) 280 ns/iter (± 0) 1.00
datastore/num_rows=1000/num_instances=1000/packed=true/latest_at_missing/secondaries/bucketsz=2 444 ns/iter (± 0) 442 ns/iter (± 1) 1.00
datastore/num_rows=1000/num_instances=1000/packed=true/latest_at_missing/primary/bucketsz=32 280 ns/iter (± 0) 281 ns/iter (± 1) 1.00
datastore/num_rows=1000/num_instances=1000/packed=true/latest_at_missing/secondaries/bucketsz=32 440 ns/iter (± 2) 440 ns/iter (± 1) 1
datastore/num_rows=1000/num_instances=1000/packed=true/latest_at_missing/primary/bucketsz=2048 280 ns/iter (± 0) 281 ns/iter (± 1) 1.00
datastore/num_rows=1000/num_instances=1000/packed=true/latest_at_missing/secondaries/bucketsz=2048 435 ns/iter (± 0) 439 ns/iter (± 1) 0.99
datastore/num_rows=1000/num_instances=1000/packed=false/range/default 12509287 ns/iter (± 762536) 11457359 ns/iter (± 462659) 1.09
datastore/num_rows=1000/num_instances=1000/packed=false/range/bucketsz=0 2169839 ns/iter (± 28323) 2143869 ns/iter (± 15109) 1.01
datastore/num_rows=1000/num_instances=1000/packed=false/range/bucketsz=2 2139433 ns/iter (± 26326) 2112255 ns/iter (± 10677) 1.01
datastore/num_rows=1000/num_instances=1000/packed=false/range/bucketsz=32 1929682 ns/iter (± 121372) 1896031 ns/iter (± 9771) 1.02
datastore/num_rows=1000/num_instances=1000/packed=false/range/bucketsz=2048 1852267 ns/iter (± 11955) 1876213 ns/iter (± 8318) 0.99
datastore/num_rows=1000/num_instances=1000/packed=true/range/default 11320813 ns/iter (± 729736) 11001071 ns/iter (± 374155) 1.03
datastore/num_rows=1000/num_instances=1000/packed=true/range/bucketsz=0 2199809 ns/iter (± 718781) 2162103 ns/iter (± 10563) 1.02
datastore/num_rows=1000/num_instances=1000/packed=true/range/bucketsz=2 2352035 ns/iter (± 215958) 2159238 ns/iter (± 7589) 1.09
datastore/num_rows=1000/num_instances=1000/packed=true/range/bucketsz=32 1868752 ns/iter (± 19199) 1866201 ns/iter (± 6492) 1.00
datastore/num_rows=1000/num_instances=1000/packed=true/range/bucketsz=2048 1810217 ns/iter (± 22539) 1784572 ns/iter (± 8580) 1.01
vector_ops/sort/instances=10000/smallvec/n=4 12489 ns/iter (± 27) 12495 ns/iter (± 28) 1.00
vector_ops/sort/instances=10000/tinyvec/n=4 9668 ns/iter (± 35) 9657 ns/iter (± 25) 1.00
vector_ops/sort/instances=10000/vec 9662 ns/iter (± 26) 9646 ns/iter (± 15) 1.00
vector_ops/split_off/instances=10000/smallvec/n=4/manual 5560 ns/iter (± 13) 5540 ns/iter (± 14) 1.00
vector_ops/split_off/instances=10000/tinyvec/n=4 2736 ns/iter (± 47) 2725 ns/iter (± 29) 1.00
vector_ops/split_off/instances=10000/tinyvec/n=4/manual 2749 ns/iter (± 13) 2751 ns/iter (± 24) 1.00
vector_ops/split_off/instances=10000/vec 2730 ns/iter (± 15) 2725 ns/iter (± 28) 1.00
vector_ops/split_off/instances=10000/vec/manual 2731 ns/iter (± 14) 2729 ns/iter (± 18) 1.00
vector_ops/swap/instances=10000/smallvec/n=4 32790 ns/iter (± 19) 32799 ns/iter (± 109) 1.00
vector_ops/swap/instances=10000/tinyvec/n=4 18273 ns/iter (± 32) 18298 ns/iter (± 56) 1.00
vector_ops/swap/instances=10000/vec 12319 ns/iter (± 46) 12326 ns/iter (± 44) 1.00
vector_ops/swap_opt/instances=10000/smallvec/n=4 42707 ns/iter (± 18) 42721 ns/iter (± 128) 1.00
vector_ops/swap_opt/instances=10000/tinyvec/n=4 28829 ns/iter (± 47) 28740 ns/iter (± 71) 1.00
vector_ops/swap_opt/instances=10000/vec 20444 ns/iter (± 44) 20499 ns/iter (± 72) 1.00
mono_points_arrow/generate_message_bundles 43413180 ns/iter (± 388637) 42263835 ns/iter (± 565333) 1.03
mono_points_arrow/generate_messages 165210149 ns/iter (± 1117232) 165330811 ns/iter (± 1195711) 1.00
mono_points_arrow/encode_log_msg 214044018 ns/iter (± 1948235) 208858509 ns/iter (± 728157) 1.02
mono_points_arrow/encode_total 417503248 ns/iter (± 2750334) 412774486 ns/iter (± 1332459) 1.01
mono_points_arrow/decode_log_msg 252992406 ns/iter (± 907858) 253238133 ns/iter (± 892875) 1.00
mono_points_arrow/decode_message_bundles 87634729 ns/iter (± 771178) 85034359 ns/iter (± 560002) 1.03
mono_points_arrow/decode_total 337973259 ns/iter (± 1620416) 336980142 ns/iter (± 2768318) 1.00
mono_points_arrow_batched/generate_message_bundles 38815186 ns/iter (± 1180020) 35883327 ns/iter (± 1403287) 1.08
mono_points_arrow_batched/generate_messages 11861080 ns/iter (± 1098257) 9744786 ns/iter (± 579876) 1.22
mono_points_arrow_batched/encode_log_msg 1835909 ns/iter (± 9578) 1809577 ns/iter (± 4439) 1.01
mono_points_arrow_batched/encode_total 54348295 ns/iter (± 1230729) 47117882 ns/iter (± 1687525) 1.15
mono_points_arrow_batched/decode_log_msg 1004723 ns/iter (± 31051) 984344 ns/iter (± 2142) 1.02
mono_points_arrow_batched/decode_message_bundles 20462351 ns/iter (± 822112) 18164779 ns/iter (± 842270) 1.13
mono_points_arrow_batched/decode_total 21646007 ns/iter (± 704227) 19901030 ns/iter (± 881916) 1.09
batch_points_arrow/generate_message_bundles 285301 ns/iter (± 431) 284872 ns/iter (± 1370) 1.00
batch_points_arrow/generate_messages 7574 ns/iter (± 28) 7726 ns/iter (± 19) 0.98
batch_points_arrow/encode_log_msg 391812 ns/iter (± 3583) 389145 ns/iter (± 1273) 1.01
batch_points_arrow/encode_total 701580 ns/iter (± 3532) 701660 ns/iter (± 3606) 1.00
batch_points_arrow/decode_log_msg 340643 ns/iter (± 1350) 339351 ns/iter (± 1047) 1.00
batch_points_arrow/decode_message_bundles 2894 ns/iter (± 6) 3003 ns/iter (± 14) 0.96
batch_points_arrow/decode_total 353655 ns/iter (± 2888) 347807 ns/iter (± 1059) 1.02
arrow_mono_points/insert 6188808563 ns/iter (± 24064588) 6072989444 ns/iter (± 10257810) 1.02
arrow_mono_points/query 1848256 ns/iter (± 21034) 1821232 ns/iter (± 9323) 1.01
arrow_batch_points/insert 3003107 ns/iter (± 56033) 3059392 ns/iter (± 13171) 0.98
arrow_batch_points/query 16511 ns/iter (± 17) 16378 ns/iter (± 67) 1.01
arrow_batch_vecs/insert 43281 ns/iter (± 103) 43671 ns/iter (± 116) 0.99
arrow_batch_vecs/query 506738 ns/iter (± 617) 506597 ns/iter (± 3294) 1.00
tuid/Tuid::random 34 ns/iter (± 0) 34 ns/iter (± 0) 1

This comment was automatically generated by workflow using github-action-benchmark.

Please sign in to comment.