Open3D is a useful model for this project: keep the API small, composable, NumPy-first, and fast enough for very large robotics datasets. The operations below should work on in-memory buffers first, then TileDB-backed arrays where practical.
Reference categories: Open3D point cloud tutorial, Open3D PointCloud API, and Open3D ICP registration tutorial.
- P0 - Finish navigation quality: covariance propagation plus quality/status masks.
- P0 - Add operation pipelines that stream directly from
DataSources, write toDataBuffer, and persist to TileDB without materializing full topics. - P1 - Add progress reporting, cancellation, and resumable operation checkpoints for long source and topic pipelines.
- P1 - Finish DEM terrain operations: terrain patches, roughness/traversability, and DEM-to-point-cloud/mesh conversion.
- P2 - Add optional parallel execution for independent chunks/topics.
- P2 - Add benchmark tests for core operations on synthetic image, point cloud, IMU, odometry, navsat, DEM, and TileDB workloads.
- P2 - Add ML-ready exports, deterministic splits, augmentations, and mixed-rate collation.
- P3 - Finish DEM tile reprojection, resampling, and cache support.
- P3 - Work through the package-and-publish checklist for TestPyPI and PyPI.
- Define a common operation interface for buffered topics:
- Add
map(topic, fn),filter(topic, predicate),reduce(topic, fn), andwindow(topic, size|seconds)helpers. - Support eager NumPy output and lazy/chunked iteration for larger-than-memory arrays.
- Preserve message metadata:
timestamp,topic,name, frame id, shape, dtype, and source URI. - Add consistent
copy,out, andchunk_sizeoptions for memory-sensitive workflows.
- Add
- Add dataset-level selection and indexing:
- Select by topic, timestamp range, message index range, frame id, geographic bounds, and spatial bounds.
- Add timestamp range and message index range selection helpers.
- Add nearest-time lookup and bounded nearest alignment helpers.
- Add generic numeric time-series interpolation helpers.
- Add topic alignment modes: exact timestamp, nearest neighbor, bounded tolerance, fixed-rate resampling, and rolling window joins.
- Add persistent secondary indexes for TileDB-backed timestamp and message-name queries.
- Add persistent secondary indexes for frame id and spatial bounds queries.
- Add geometry and coordinate-frame operations:
- Apply SE(3) transforms to point clouds, odometry poses, navsat-derived local coordinates, and DEM grids.
- Add SE(3) transform helpers for XYZ point arrays.
- Convert IMU, odometry, and navsat streams into common pose/trajectory arrays.
- Add frame graph support for static and time-varying transforms.
- Add projection helpers between point clouds, depth images, RGB images, DEM tiles, and camera frames.
- Add crop/select helpers for axis-aligned bounds, oriented bounds, masks, and geographic bounding boxes.
- Add axis-aligned XYZ bounds cropping with mask output.
- Add point cloud operations:
- Downsample by voxel grid, uniform sampling, random sampling, and farthest-point sampling.
- Add voxel-grid downsampling.
- Estimate normals, local covariance, curvature-like descriptors, and nearest-neighbor distance statistics.
- Add normal estimation.
- Remove outliers with statistical and radius-based filters.
- Cluster and segment with DBSCAN, plane fitting, connected components, and ground/non-ground separation.
- Add DBSCAN clustering and RANSAC-style plane fitting.
- Add nearest-neighbor search with KNN, radius search, and hybrid search.
- Add KNN and radius search.
- Add registration helpers for point-to-point ICP, point-to-plane ICP, multi-scale ICP, and odometry-seeded registration.
- Add loop closure candidate search and ICP verification for datasets with point cloud and pose streams.
- Calibrate relative point clouds to accurate metric point clouds and apply the fitted scale/offset.
- Add conversion adapters to and from Open3D point clouds when
open3dis installed.
- Add image and depth operations:
- Resize, crop, pad, normalize, color convert, and dtype convert image sequences.
- Add resize-nearest, pad, normalize, and RGB-to-gray helpers.
- Add masks, morphology, thresholding, gradients, pyramids, and local statistics.
- Add depth-image operations: valid-depth masks, backprojection to point clouds, depth-to-normal, and RGB-D fusion.
- Add valid-depth masks and depth backprojection to point clouds.
- Calibrate relative depth images to accurate metric point clouds and apply the fitted scale/offset.
- Add frame-to-frame optical flow, image alignment, and motion-compensated rolling windows.
- Add camera model utilities for intrinsics, distortion, rectification, and projection.
- Add IMU, odometry, and navsat operations:
- Resample and interpolate orientation, angular velocity, linear acceleration, position, velocity, and covariance.
- Add generic numeric time-series interpolation.
- Add quaternion normalization, SLERP, Euler conversion, gravity compensation, and bias correction helpers.
- Add quaternion normalization and SLERP.
- Convert WGS84 navsat samples to local ENU/NED frames and back.
- Add approximate WGS84 to local ENU conversion and inverse conversion.
- Add trajectory smoothing, differentiation, integration, and dead-reckoning helpers.
- Add covariance propagation and quality/status masks for navigation streams.
- Add DEM and raster operations:
- Mosaic, crop, reproject, resample, and cache DEM tiles.
- Add mosaic, crop, bilinear sampling, and nearest sampling helpers.
- Compute slope, aspect, hillshade, normals, gradients, roughness, and traversability maps.
- Add slope, aspect, and hillshade helpers.
- Sample elevation at navsat/trajectory points and generate local terrain patches around a vehicle pose.
- Add raster grid sampling helper.
- Convert DEM windows to point clouds, meshes, or height grids for fusion with sensor topics.
- Add large-array execution features:
- Add chunked operation execution for buffered topic arrays that do not fit in memory.
- Add lazy buffered-topic pipelines with explicit
collect(),iter_chunks(),iter_rows(),reduce(), and sliding-window execution. - Push lazy buffered-topic time and index constraints into TileDB before reading data chunks.
- Add guarded materialization limits for explicit
collect()calls. - Reopen existing TileDB datasets without the original source.
- Resume partial TileDB ingest by replaying the source and skipping stored per-topic offsets.
- Add operation pipelines that can stream from
DataSources, write toDataBuffer, and persist to TileDB. - Add optional parallel execution for independent chunks/topics.
- Add progress reporting, cancellation, and resumable operation checkpoints.
- Add benchmark tests for core operations on synthetic image, point cloud, IMU, odometry, navsat, DEM, and TileDB workloads.
- Add ML-ready dataset operations:
- Export topic windows to PyTorch, NumPy, and plain iterator datasets.
- Add deterministic train/validation/test splits by time, sequence, geography, or source file.
- Add augmentation operations for images, point clouds, trajectories, and DEM patches.
- Add batch collation for variable-size point clouds and mixed-rate sensor windows.
-
Confirm the package metadata in
pyproject.toml:- Package name is correct for the registry:
arraydataengine. - Version is bumped for the release.
- Description, README, license, authors, URLs, classifiers, and
requires-pythonare accurate. - Optional dependency groups cover supported installs:
dev,image,ros,dem,tiledb,visualization,notebook, andml.
- Package name is correct for the registry:
-
Add release tooling if it is not already installed:
python -m pip install --upgrade build twine
-
Run the pre-release checks from a clean working tree:
python -m pytest -q python -m compileall -q ade tests git diff --check
-
Build the source distribution and wheel:
python -m build
-
Validate the built artifacts:
python -m twine check dist/* python -m pip install --force-reinstall dist/*.whl python -m pytest -q
-
Publish to TestPyPI first:
python -m twine upload --repository testpypi dist/* -
Verify the TestPyPI install in a fresh virtual environment:
python -m venv /tmp/ade-testpypi /tmp/ade-testpypi/bin/python -m pip install --upgrade pip /tmp/ade-testpypi/bin/python -m pip install --index-url https://test.pypi.org/simple/ --extra-index-url https://pypi.org/simple/ arraydataengine /tmp/ade-testpypi/bin/python -c "import ade; print(ade.__file__)" -
Create and push the release commit and tag:
git add pyproject.toml README.md TODO.md git commit -m "Release vX.Y.Z" git tag vX.Y.Z git push origin main --tags -
Publish the same checked artifacts to PyPI:
python -m twine upload dist/* -
Verify the PyPI install in a fresh virtual environment:
python -m venv /tmp/ade-pypi /tmp/ade-pypi/bin/python -m pip install --upgrade pip /tmp/ade-pypi/bin/python -m pip install arraydataengine /tmp/ade-pypi/bin/python -c "import ade; print(ade.__file__)" -
Create a GitHub release from the pushed tag and attach the generated
dist/artifacts. -
Record the released version, PyPI URL, TestPyPI URL, and release notes in the project README or GitHub release notes.