forked from Hebbian-Robotics/hflow
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathpyproject.toml
More file actions
134 lines (120 loc) · 3.9 KB
/
Copy pathpyproject.toml
File metadata and controls
134 lines (120 loc) · 3.9 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
[project]
name = "hflow"
version = "0.2.2"
description = "Open source SDK for building Physical AI data pipelines"
readme = "README.md"
license = "Apache-2.0"
license-files = ["LICENSE"]
authors = [
{ name = "Hebbian Robotics" },
{ name = "Kingston Kuan" },
{ name = "Brandon Ong" },
]
keywords = [
"airflow",
"data-pipeline",
"data-quality",
"dataset-curation",
"mcap",
"physical-ai",
"robotics",
]
requires-python = ">=3.11"
dependencies = [
"duckdb>=1.5.5",
"foxglove-schemas-protobuf>=0.4.0",
"mcap>=1.4.0",
"mcap-protobuf-support>=0.5.4",
"mcap-ros2-support>=0.5.7",
"numpy>=2.4.6",
"zstandard>=0.25.0",
]
[project.optional-dependencies]
arrow = ["pyarrow>=25.0.1"]
# Native object-store data roots (gs://, s3://, az://): obstore is the Rust
# object_store crate as a single dependency-free wheel; local-path roots
# never import it.
bucket = ["obstore>=0.10.0"]
# Hand detection with MediaPipe's Hand Landmarker (hflow.mediapipe_hands).
# A MODEL, not a signal statistic, so it is opt-in twice over: outside the core
# install, and outside the dev group as well (unlike motion and bucket, which
# are mirrored into dev so the suite exercises them). It adds ~430 MB and its
# own OpenCV; a dev environment opts in with `--extra mediapipe`, exactly as
# the openai example does.
mediapipe = ["mediapipe>=1.0.0"]
# Camera-shake measurement: pyramidal Lucas-Kanade optical flow and a RANSAC
# similarity fit. No numpy-only equivalent preserves the instrument, and
# reimplementing them would make it a different, unvalidated one -- so the
# dependency is real, and confined to the one check that needs it. Headless
# because a data pipeline runs where there is no display.
motion = ["opencv-python-headless>=4.10"]
openai = ["openai>=3.0.0"]
[project.urls]
Repository = "https://github.com/Hebbian-Robotics/hflow"
Documentation = "https://github.com/Hebbian-Robotics/hflow/tree/main/docs"
Issues = "https://github.com/Hebbian-Robotics/hflow/issues"
[project.scripts]
hflow = "hflow.cli:main"
[dependency-groups]
dev = [
"hflow-server", # the workspace API package, present in dev so the suite tests it
# Starlette's TestClient transport for the hflow-server suite. httpx2, not
# httpx: starlette 1.6 deprecates the httpx transport in its favour.
"httpx2>=2.10",
"obstore>=0.10.0", # the bucket extra, present in dev so the suite tests it
# the motion extra, present in dev so the suite tests it rather than
# skipping the one check that cannot be verified any other way
"opencv-python-headless>=4.10",
"pyarrow>=25.0.1", # the arrow extra, present in dev so the suite tests it
"pytest>=9.1.1",
"pyyaml>=6.0.3",
"ruff>=0.16.2",
"ty>=0.0.71",
]
[build-system]
requires = ["uv_build>=0.11.33,<0.12"]
build-backend = "uv_build"
[tool.uv]
# Supply-chain hardening: refuse PyPI releases younger than 5 days.
# Override per-package via `exclude-newer-package = { foo = false }` for
# trusted first-party packages.
exclude-newer = "5 days"
[tool.uv.workspace]
members = ["packages/*"]
[tool.uv.sources]
hflow-server = { workspace = true }
[tool.pytest.ini_options]
testpaths = ["tests", "packages/hflow-server/tests"]
[tool.ruff]
line-length = 100
target-version = "py311"
[tool.ruff.lint]
select = [
"E",
"W",
"F",
"I",
"B",
"C4",
"UP",
"ANN",
"PTH",
"RET",
"SIM",
"TID",
"RUF",
]
ignore = ["E501", "B008", "C901", "RET504", "ANN401"]
[tool.ruff.format]
quote-style = "double"
indent-style = "space"
[tool.ty.rules]
division-by-zero = "error"
deprecated = "error"
unused-ignore-comment = "error"
possibly-unresolved-reference = "error"
[tool.ty.src]
# examples/openai_vision imports the user's own `openai` client: bundling a
# VLM client is a non-goal (examples ARE the docs), so the package is
# deliberately not a dependency and the example is excluded from typechecking.
exclude = ["examples/openai_vision/"]