-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathpyproject.toml
More file actions
196 lines (175 loc) · 5.57 KB
/
Copy pathpyproject.toml
File metadata and controls
196 lines (175 loc) · 5.57 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
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
[build-system]
requires = ["hatchling>=1.27"]
build-backend = "hatchling.build"
[project]
name = "flameox"
version = "0.1.13"
description = "Runtime evidence that helps agents trace, profile, and burn down hotspots in application and native code, GPU kernels, and inference stacks."
readme = "README.md"
license = "MIT"
requires-python = ">=3.12"
dependencies = [
"anyio>=4.9,<5",
"duckdb>=1.5.4,<1.6",
"defusedxml>=0.7.1,<0.8",
"ijson>=3.4,<4",
"mcp==2.0.0",
"mcp-types==2.0.0",
"numpy>=2.2,<3",
"packaging>=24,<27",
"portalocker>=3.2,<4",
"platformdirs>=4.3,<5",
"pyperf>=2.9",
"pytz>=2024.2",
"pyarrow>=20,<26",
"pydantic>=2.13.4,<2.14",
"questionary>=2.1,<3",
"scipy>=1.15,<2",
"statsmodels>=0.14,<1",
"tomli-w>=1.2,<2",
"tomlkit>=0.13,<1",
"typer>=0.16,<1",
"psutil>=7.0,<8",
]
[project.urls]
Homepage = "https://github.com/morluto/flameox"
Repository = "https://github.com/morluto/flameox"
Issues = "https://github.com/morluto/flameox/issues"
[project.optional-dependencies]
python = ["pyperf>=2.9"]
memory = ["memray>=1.17"]
torch = ["torch>=2.7"]
execution = ["coverage>=7.14,<8"]
inference = ["aiperf>=0.12,<0.13"]
test = ["pytest>=8.3", "pytest-xdist>=3.6"]
trace = ["perfetto>=0.57,<0.58", "opentelemetry-proto>=1.44,<1.45", "protobuf>=5,<7"]
cpu = ["py-spy>=0.4.2,<0.5"]
all = [
"coverage>=7.14,<8",
"aiperf>=0.12,<0.13",
"memray>=1.17",
"perfetto>=0.57,<0.58",
"opentelemetry-proto>=1.44,<1.45",
"protobuf>=5,<7",
"py-spy>=0.4.2,<0.5",
"pyperf>=2.9",
"pytest>=8.3",
"pytest-xdist>=3.6",
"torch>=2.7",
]
dev = [
"deptry>=0.23",
"hypothesis>=6.130",
"import-linter>=2.2",
"mypy>=1.15",
"pip-audit>=2.9",
"pytest>=8.3",
"pytest-cov>=6.1",
"pytest-randomly>=3.16",
"pytest-rerunfailures>=15",
"pytest-xdist>=3.6",
"pyarrow-stubs>=20.0.0.20260625",
"ruff>=0.11",
"scipy-stubs>=1.18.0.1,<1.19",
"twine>=6.1",
"vulture>=2.14",
]
[project.scripts]
flameox = "flameox.cli:app"
[tool.hatch.build.targets.wheel]
packages = ["src/flameox"]
[tool.pytest.ini_options]
addopts = "-ra --strict-config --strict-markers --durations=10 -p no:randomly -m 'not performance and not optional and not process'"
testpaths = ["tests"]
markers = [
"unit: deterministic tests for one semantic owner",
"integration: tests crossing two or more Flameox services",
"process: tests that spawn, transport to, or cancel another process",
"optional: tests requiring a provider or host capability outside the core install",
"performance: representative local corpus performance acceptance checks",
"serial: tests that must not share a process or host resource with another test",
"requires_coverage: requires the optional coverage.py provider",
"requires_bwrap: requires the Bubblewrap executable",
"requires_cargo: requires the Cargo executable",
"requires_memray: requires the optional Memray provider",
"requires_perf: requires the Linux perf executable and permissions",
"requires_perfetto: requires a local Trace Processor provider",
"requires_pyspy: requires the optional py-spy provider",
"requires_systemd: requires a systemd user manager",
"requires_toxiproxy: requires the pinned Toxiproxy server binary",
"requires_torch: requires the optional PyTorch provider",
"requires_compute_sanitizer: requires NVIDIA Compute Sanitizer, nvcc, and a compatible GPU",
"requires_ncu: requires NVIDIA Nsight Compute and its official Python report interface",
"requires_triton: requires the optional Triton provider and a compatible GPU",
"requires_nvbench: requires a configured NVBench benchmark executable and compatible GPU",
"requires_cute: requires the optional CuTe DSL provider and a compatible GPU",
]
xfail_strict = true
[tool.coverage.run]
branch = true
source = ["flameox"]
[tool.coverage.report]
show_missing = true
skip_covered = true
fail_under = 60
[tool.ruff]
line-length = 100
target-version = "py312"
[tool.ruff.lint]
select = ["E", "F", "I", "UP", "B", "SIM", "RUF", "C90", "TD"]
ignore = ["TD002"]
[tool.ruff.lint.per-file-ignores]
"src/flameox/mcp/server.py" = ["C901"]
"src/flameox/cli.py" = ["C901"]
"src/flameox/application/capture.py" = ["C901"]
[tool.ruff.lint.mccabe]
max-complexity = 18
[tool.ruff.format]
quote-style = "double"
indent-style = "space"
docstring-code-format = true
[tool.deptry.package_module_name_map]
opentelemetry-proto = "opentelemetry"
protobuf = "google"
[tool.mypy]
python_version = "3.12"
strict = true
packages = ["flameox"]
[[tool.mypy.overrides]]
module = [
"ijson",
"ijson.*",
"memray",
"memray.*",
"perfetto",
"perfetto.*",
"pyperf",
"pyperf.*",
"statsmodels",
"statsmodels.*",
"torch",
"torch.*",
]
ignore_missing_imports = true
[tool.vulture]
min_confidence = 80
paths = ["src/flameox"]
ignore_names = ["setUp", "tearDown", "test_*", "Test*", "*_test"]
ignore_decorators = ["@app.command", "@property", "@router.*"]
[tool.importlinter]
root_package = "flameox"
include_external_packages = false
[[tool.importlinter.contracts]]
name = "Domain layer must not import application or infrastructure"
type = "forbidden"
source_modules = ["flameox.domain"]
forbidden_modules = ["flameox.application", "flameox.storage", "flameox.adapters", "flameox.cli", "flameox.mcp"]
[[tool.importlinter.contracts]]
name = "Storage must not import CLI, MCP, or adapters"
type = "forbidden"
source_modules = ["flameox.storage"]
forbidden_modules = ["flameox.cli", "flameox.mcp", "flameox.adapters"]
[dependency-groups]
dev = [
"types-psutil>=7.2,<8",
]