feat: refresh benchmark coverage and harden CI tooling

Refresh the benchmark and performance surface across the repo. This updates the benchmark wrappers and helper scripts, regenerates the checked-in benchmark and perf-contract artifacts, and folds in the related roadmap, compatibility, and example notebook changes that belong with this performance-focused pass.

Harden the Python CI and local pre-push flow so the same checks pass reliably in both places. The workflow and pre-push script now use module-safe uv typecheck invocations, the Python test environment installs the optional MCP dependency needed by the MCP server tests, and one-off root benchmark outputs are ignored to keep the repo clean.

Align local tooling with the current project configuration by updating the Ruff pre-commit hook, tightening the API typing and MCP server helpers, and refreshing the lockfile to pick up the audited PyJWT fix while preserving the rest of the staged source changes.
This commit is contained in:
Pratik Bhadane
2026-03-24 14:52:20 +05:30
parent 53566b9d82
commit 71b6343e92
48 changed files with 3107 additions and 988 deletions
+55 -33
View File
@@ -2,16 +2,38 @@
"metadata": {
"suite": "batch",
"runtime": {
"generated_at_utc": "2026-03-23T21:08:30.877702+00:00",
"python_version": "3.12.11",
"platform": "macOS-26.3.1-arm64-arm-64bit",
"generated_at_utc": "2026-03-24T09:13:04.010216+00:00",
"python_version": "3.13.5",
"python_implementation": "CPython",
"python_executable": "/Users/pratikbhadane/Work/Projects/ferro-ta/.venv/bin/python3",
"platform": "macOS-26.3.1-arm64-arm-64bit-Mach-O",
"system": "Darwin",
"release": "25.3.0",
"machine": "arm64",
"processor": "arm"
"processor": "arm",
"cpu_model": "Apple M3 Max",
"cpu_count_logical": 14,
"total_memory_bytes": 38654705664
},
"git": {
"commit": "2d5000262f0f1439546bd4872235aae0333880a4",
"commit": "53566b9d82898fa4f95c5190156c969a0bd8e8e3",
"dirty": true,
"branch": "feat/performace-1.0.2"
"branch": "main"
},
"build": {
"rustc": "rustc 1.93.1 (01f6ddf75 2026-02-11)\nbinary: rustc\ncommit-hash: 01f6ddf7588f42ae2d7eb0a2f21d44e8e96674cf\ncommit-date: 2026-02-11\nhost: aarch64-apple-darwin\nrelease: 1.93.1\nLLVM version: 21.1.8",
"cargo": "cargo 1.93.1 (083ac5135 2025-12-15)",
"cargo_release_profile": {
"lto": true,
"codegen-units": 1
},
"rustflags": null,
"cargo_build_rustflags": null,
"maturin_flags": null
},
"packages": {
"numpy": "2.2.6",
"ferro-ta": "1.0.4"
},
"dataset": {
"n_samples": 20000,
@@ -23,49 +45,49 @@
"results": [
{
"indicator": "SMA",
"parallel_ms": 1.9615,
"sequential_ms": 2.0423,
"loop_ms": 0.8865,
"parallel_speedup_vs_loop": 0.452,
"sequential_speedup_vs_loop": 0.4341
"parallel_ms": 7.9306,
"sequential_ms": 2.4832,
"loop_ms": 1.0238,
"parallel_speedup_vs_loop": 0.1291,
"sequential_speedup_vs_loop": 0.4123
},
{
"indicator": "RSI",
"parallel_ms": 2.1731,
"sequential_ms": 4.3225,
"loop_ms": 3.2043,
"parallel_speedup_vs_loop": 1.4745,
"sequential_speedup_vs_loop": 0.7413
"parallel_ms": 3.9307,
"sequential_ms": 5.0938,
"loop_ms": 3.6883,
"parallel_speedup_vs_loop": 0.9383,
"sequential_speedup_vs_loop": 0.7241
},
{
"indicator": "ATR",
"parallel_ms": 4.2249,
"sequential_ms": 6.6175,
"loop_ms": 4.0382,
"parallel_speedup_vs_loop": 0.9558,
"sequential_speedup_vs_loop": 0.6102
"parallel_ms": 9.2546,
"sequential_ms": 7.768,
"loop_ms": 5.2669,
"parallel_speedup_vs_loop": 0.5691,
"sequential_speedup_vs_loop": 0.678
},
{
"indicator": "ADX",
"parallel_ms": 4.8674,
"sequential_ms": 7.6402,
"loop_ms": 5.1861,
"parallel_speedup_vs_loop": 1.0655,
"sequential_speedup_vs_loop": 0.6788
"parallel_ms": 9.5489,
"sequential_ms": 9.1403,
"loop_ms": 7.1578,
"parallel_speedup_vs_loop": 0.7496,
"sequential_speedup_vs_loop": 0.7831
}
],
"grouped_results": [
{
"case": "close_bundle_3",
"grouped_ms": 0.1878,
"separate_ms": 0.1719,
"speedup_vs_separate": 0.9155
"grouped_ms": 0.466,
"separate_ms": 0.2003,
"speedup_vs_separate": 0.4298
},
{
"case": "hlc_bundle_3",
"grouped_ms": 0.2958,
"separate_ms": 0.4633,
"speedup_vs_separate": 1.5666
"grouped_ms": 1.2538,
"separate_ms": 0.6999,
"speedup_vs_separate": 0.5582
}
]
}
}
+53 -31
View File
@@ -2,16 +2,38 @@
"metadata": {
"suite": "indicator_latency",
"runtime": {
"generated_at_utc": "2026-03-23T21:08:30.515962+00:00",
"python_version": "3.12.11",
"platform": "macOS-26.3.1-arm64-arm-64bit",
"generated_at_utc": "2026-03-24T09:13:02.973728+00:00",
"python_version": "3.13.5",
"python_implementation": "CPython",
"python_executable": "/Users/pratikbhadane/Work/Projects/ferro-ta/.venv/bin/python3",
"platform": "macOS-26.3.1-arm64-arm-64bit-Mach-O",
"system": "Darwin",
"release": "25.3.0",
"machine": "arm64",
"processor": "arm"
"processor": "arm",
"cpu_model": "Apple M3 Max",
"cpu_count_logical": 14,
"total_memory_bytes": 38654705664
},
"git": {
"commit": "2d5000262f0f1439546bd4872235aae0333880a4",
"commit": "53566b9d82898fa4f95c5190156c969a0bd8e8e3",
"dirty": true,
"branch": "feat/performace-1.0.2"
"branch": "main"
},
"build": {
"rustc": "rustc 1.93.1 (01f6ddf75 2026-02-11)\nbinary: rustc\ncommit-hash: 01f6ddf7588f42ae2d7eb0a2f21d44e8e96674cf\ncommit-date: 2026-02-11\nhost: aarch64-apple-darwin\nrelease: 1.93.1\nLLVM version: 21.1.8",
"cargo": "cargo 1.93.1 (083ac5135 2025-12-15)",
"cargo_release_profile": {
"lto": true,
"codegen-units": 1
},
"rustflags": null,
"cargo_build_rustflags": null,
"maturin_flags": null
},
"packages": {
"numpy": "2.2.6",
"ferro-ta": "1.0.4"
},
"fixtures": [
{
@@ -33,7 +55,7 @@
"kwargs": {
"timeperiod": 20
},
"elapsed_ms": 0.0202
"elapsed_ms": 0.0233
},
{
"name": "WILLR_14",
@@ -41,13 +63,13 @@
"kwargs": {
"timeperiod": 14
},
"elapsed_ms": 0.0183
"elapsed_ms": 0.0207
},
{
"name": "STOCH",
"inputs": "hlc",
"kwargs": {},
"elapsed_ms": 0.0181
"elapsed_ms": 0.0202
},
{
"name": "ADX_14",
@@ -55,7 +77,7 @@
"kwargs": {
"timeperiod": 14
},
"elapsed_ms": 0.0147
"elapsed_ms": 0.0171
},
{
"name": "CCI_14",
@@ -63,13 +85,13 @@
"kwargs": {
"timeperiod": 14
},
"elapsed_ms": 0.0144
"elapsed_ms": 0.0164
},
{
"name": "MACD",
"inputs": "close",
"kwargs": {},
"elapsed_ms": 0.0132
"elapsed_ms": 0.015
},
{
"name": "ATR_14",
@@ -77,7 +99,7 @@
"kwargs": {
"timeperiod": 14
},
"elapsed_ms": 0.0108
"elapsed_ms": 0.0116
},
{
"name": "RSI_14",
@@ -85,7 +107,7 @@
"kwargs": {
"timeperiod": 14
},
"elapsed_ms": 0.0102
"elapsed_ms": 0.011
},
{
"name": "STDDEV_20",
@@ -93,7 +115,7 @@
"kwargs": {
"timeperiod": 20
},
"elapsed_ms": 0.0086
"elapsed_ms": 0.0103
},
{
"name": "BETA_5",
@@ -101,7 +123,7 @@
"kwargs": {
"timeperiod": 5
},
"elapsed_ms": 0.008
"elapsed_ms": 0.0091
},
{
"name": "CORREL_30",
@@ -109,15 +131,7 @@
"kwargs": {
"timeperiod": 30
},
"elapsed_ms": 0.0068
},
{
"name": "EMA_20",
"inputs": "close",
"kwargs": {
"timeperiod": 20
},
"elapsed_ms": 0.0052
"elapsed_ms": 0.0078
},
{
"name": "BBANDS_20",
@@ -125,7 +139,7 @@
"kwargs": {
"timeperiod": 20
},
"elapsed_ms": 0.005
"elapsed_ms": 0.0062
},
{
"name": "TSF_14",
@@ -133,7 +147,15 @@
"kwargs": {
"timeperiod": 14
},
"elapsed_ms": 0.0048
"elapsed_ms": 0.0056
},
{
"name": "EMA_20",
"inputs": "close",
"kwargs": {
"timeperiod": 20
},
"elapsed_ms": 0.0055
},
{
"name": "LINEARREG_14",
@@ -141,7 +163,7 @@
"kwargs": {
"timeperiod": 14
},
"elapsed_ms": 0.0046
"elapsed_ms": 0.0054
},
{
"name": "LINEARREG_SLOPE_14",
@@ -149,7 +171,7 @@
"kwargs": {
"timeperiod": 14
},
"elapsed_ms": 0.0045
"elapsed_ms": 0.005
},
{
"name": "SMA_20",
@@ -157,7 +179,7 @@
"kwargs": {
"timeperiod": 20
},
"elapsed_ms": 0.0027
"elapsed_ms": 0.0032
}
]
}
}
+37 -20
View File
@@ -2,16 +2,38 @@
"metadata": {
"suite": "perf_contract",
"runtime": {
"generated_at_utc": "2026-03-23T21:09:13.077731+00:00",
"python_version": "3.12.11",
"platform": "macOS-26.3.1-arm64-arm-64bit",
"generated_at_utc": "2026-03-24T09:13:08.787230+00:00",
"python_version": "3.13.5",
"python_implementation": "CPython",
"python_executable": "/Users/pratikbhadane/Work/Projects/ferro-ta/.venv/bin/python3",
"platform": "macOS-26.3.1-arm64-arm-64bit-Mach-O",
"system": "Darwin",
"release": "25.3.0",
"machine": "arm64",
"processor": "arm"
"processor": "arm",
"cpu_model": "Apple M3 Max",
"cpu_count_logical": 14,
"total_memory_bytes": 38654705664
},
"git": {
"commit": "2d5000262f0f1439546bd4872235aae0333880a4",
"commit": "53566b9d82898fa4f95c5190156c969a0bd8e8e3",
"dirty": true,
"branch": "feat/performace-1.0.2"
"branch": "main"
},
"build": {
"rustc": "rustc 1.93.1 (01f6ddf75 2026-02-11)\nbinary: rustc\ncommit-hash: 01f6ddf7588f42ae2d7eb0a2f21d44e8e96674cf\ncommit-date: 2026-02-11\nhost: aarch64-apple-darwin\nrelease: 1.93.1\nLLVM version: 21.1.8",
"cargo": "cargo 1.93.1 (083ac5135 2025-12-15)",
"cargo_release_profile": {
"lto": true,
"codegen-units": 1
},
"rustflags": null,
"cargo_build_rustflags": null,
"maturin_flags": null
},
"packages": {
"numpy": "2.2.6",
"ferro-ta": "1.0.4"
},
"fixtures": [
{
@@ -25,28 +47,23 @@
"artifacts": {
"indicator_latency": {
"path": "perf-contract/indicator_latency.json",
"size_bytes": 3212,
"sha256": "1e7f844fe6eb467f07bbb1e4eb918c56861e8cf819ab4802b96e033c6d2570c4"
"size_bytes": 4041,
"sha256": "564027c7abed7ecd4ae2ac1720217d96e1e31807f8ac7d5c5393c8fd974f13ed"
},
"batch": {
"path": "perf-contract/batch.json",
"size_bytes": 1679,
"sha256": "202d67b24a88184473f93cec9f866ca34ff60721068e15e7e5d23962f006d169"
"size_bytes": 2507,
"sha256": "c50f242a138a0c358a6fa86c420954b4b11a2200598ca2942bcd0fd2bc456fb2"
},
"streaming": {
"path": "perf-contract/streaming.json",
"size_bytes": 1939,
"sha256": "04476c3d95a9e7d87e40331b28c5ccad9a7aa5abcfc47fb6ac7e929365f68554"
"size_bytes": 2766,
"sha256": "d271d3219ec098e443e84ef648ab4220cd2a38e6dc998bc6c9fc545d7fc77716"
},
"runtime_hotspots": {
"path": "perf-contract/runtime_hotspots.json",
"size_bytes": 2365,
"sha256": "d37a58bc88def9f1525b9b0f64f0bd7b9c0df9ed4cae260c833697f6a1689ca8"
},
"simd": {
"path": "perf-contract/simd.json",
"size_bytes": 7670,
"sha256": "3f9b341a8206698ed172650752d808621c9b5218f42a2373f0f4485496197b4c"
"size_bytes": 3197,
"sha256": "96eafc9a61ac410e47fcdfee6a9db1123cdee0ec05f49a85c631a3975063deed"
}
}
}
}
+69 -47
View File
@@ -2,16 +2,38 @@
"metadata": {
"suite": "runtime_hotspots",
"runtime": {
"generated_at_utc": "2026-03-23T21:08:34.436165+00:00",
"python_version": "3.12.11",
"platform": "macOS-26.3.1-arm64-arm-64bit",
"generated_at_utc": "2026-03-24T09:13:08.521805+00:00",
"python_version": "3.13.5",
"python_implementation": "CPython",
"python_executable": "/Users/pratikbhadane/Work/Projects/ferro-ta/.venv/bin/python3",
"platform": "macOS-26.3.1-arm64-arm-64bit-Mach-O",
"system": "Darwin",
"release": "25.3.0",
"machine": "arm64",
"processor": "arm"
"processor": "arm",
"cpu_model": "Apple M3 Max",
"cpu_count_logical": 14,
"total_memory_bytes": 38654705664
},
"git": {
"commit": "2d5000262f0f1439546bd4872235aae0333880a4",
"commit": "53566b9d82898fa4f95c5190156c969a0bd8e8e3",
"dirty": true,
"branch": "feat/performace-1.0.2"
"branch": "main"
},
"build": {
"rustc": "rustc 1.93.1 (01f6ddf75 2026-02-11)\nbinary: rustc\ncommit-hash: 01f6ddf7588f42ae2d7eb0a2f21d44e8e96674cf\ncommit-date: 2026-02-11\nhost: aarch64-apple-darwin\nrelease: 1.93.1\nLLVM version: 21.1.8",
"cargo": "cargo 1.93.1 (083ac5135 2025-12-15)",
"cargo_release_profile": {
"lto": true,
"codegen-units": 1
},
"rustflags": null,
"cargo_build_rustflags": null,
"maturin_flags": null
},
"packages": {
"numpy": "2.2.6",
"ferro-ta": "1.0.4"
},
"dataset": {
"price_bars": 20000,
@@ -23,74 +45,74 @@
{
"category": "python_analysis",
"name": "iv_zscore",
"fast_ms": 28.857,
"reference_ms": 897.0178,
"speedup_vs_reference": 31.0849,
"share_of_suite_pct": 70.0
"fast_ms": 32.5847,
"reference_ms": 990.4233,
"speedup_vs_reference": 30.3954,
"share_of_suite_pct": 69.27
},
{
"category": "python_analysis",
"name": "iv_rank",
"fast_ms": 10.8496,
"reference_ms": 199.4376,
"speedup_vs_reference": 18.3821,
"share_of_suite_pct": 26.32
"fast_ms": 12.2974,
"reference_ms": 233.0671,
"speedup_vs_reference": 18.9525,
"share_of_suite_pct": 26.14
},
{
"category": "python_analysis",
"name": "iv_percentile",
"fast_ms": 0.9124,
"reference_ms": 79.6557,
"speedup_vs_reference": 87.3019,
"share_of_suite_pct": 2.21
"fast_ms": 0.9511,
"reference_ms": 90.5663,
"speedup_vs_reference": 95.2202,
"share_of_suite_pct": 2.02
},
{
"category": "ffi_grouping",
"name": "feature_matrix",
"fast_ms": 0.2411,
"reference_ms": 0.2215,
"speedup_vs_reference": 0.9186,
"share_of_suite_pct": 0.58
"fast_ms": 0.6619,
"reference_ms": 0.6155,
"speedup_vs_reference": 0.9299,
"share_of_suite_pct": 1.41
},
{
"category": "ffi_grouping",
"name": "compute_many_close",
"fast_ms": 0.1563,
"reference_ms": 0.1498,
"speedup_vs_reference": 0.9587,
"share_of_suite_pct": 0.38
"fast_ms": 0.3175,
"reference_ms": 0.2437,
"speedup_vs_reference": 0.7675,
"share_of_suite_pct": 0.67
},
{
"category": "rust_kernel",
"name": "BETA",
"fast_ms": 0.0694,
"reference_ms": 159.2715,
"speedup_vs_reference": 2294.4163,
"share_of_suite_pct": 0.17
"fast_ms": 0.0742,
"reference_ms": 188.6048,
"speedup_vs_reference": 2541.5695,
"share_of_suite_pct": 0.16
},
{
"category": "rust_kernel",
"name": "CORREL",
"fast_ms": 0.0555,
"reference_ms": 158.2775,
"speedup_vs_reference": 2851.8468,
"share_of_suite_pct": 0.13
},
{
"category": "rust_kernel",
"name": "LINEARREG",
"fast_ms": 0.0414,
"reference_ms": 44.8111,
"speedup_vs_reference": 1081.9491,
"share_of_suite_pct": 0.1
"fast_ms": 0.0638,
"reference_ms": 215.973,
"speedup_vs_reference": 3387.8115,
"share_of_suite_pct": 0.14
},
{
"category": "rust_kernel",
"name": "TSF",
"fast_ms": 0.0413,
"reference_ms": 46.3799,
"speedup_vs_reference": 1122.1039,
"share_of_suite_pct": 0.1
"fast_ms": 0.0441,
"reference_ms": 49.6108,
"speedup_vs_reference": 1125.3954,
"share_of_suite_pct": 0.09
},
{
"category": "rust_kernel",
"name": "LINEARREG",
"fast_ms": 0.044,
"reference_ms": 57.9675,
"speedup_vs_reference": 1318.7009,
"share_of_suite_pct": 0.09
}
]
}
}
+1 -1
View File
@@ -282,4 +282,4 @@
]
}
}
}
}
+59 -37
View File
@@ -2,16 +2,38 @@
"metadata": {
"suite": "streaming",
"runtime": {
"generated_at_utc": "2026-03-23T21:08:30.968886+00:00",
"python_version": "3.12.11",
"platform": "macOS-26.3.1-arm64-arm-64bit",
"generated_at_utc": "2026-03-24T09:13:04.351797+00:00",
"python_version": "3.13.5",
"python_implementation": "CPython",
"python_executable": "/Users/pratikbhadane/Work/Projects/ferro-ta/.venv/bin/python3",
"platform": "macOS-26.3.1-arm64-arm-64bit-Mach-O",
"system": "Darwin",
"release": "25.3.0",
"machine": "arm64",
"processor": "arm"
"processor": "arm",
"cpu_model": "Apple M3 Max",
"cpu_count_logical": 14,
"total_memory_bytes": 38654705664
},
"git": {
"commit": "2d5000262f0f1439546bd4872235aae0333880a4",
"commit": "53566b9d82898fa4f95c5190156c969a0bd8e8e3",
"dirty": true,
"branch": "feat/performace-1.0.2"
"branch": "main"
},
"build": {
"rustc": "rustc 1.93.1 (01f6ddf75 2026-02-11)\nbinary: rustc\ncommit-hash: 01f6ddf7588f42ae2d7eb0a2f21d44e8e96674cf\ncommit-date: 2026-02-11\nhost: aarch64-apple-darwin\nrelease: 1.93.1\nLLVM version: 21.1.8",
"cargo": "cargo 1.93.1 (083ac5135 2025-12-15)",
"cargo_release_profile": {
"lto": true,
"codegen-units": 1
},
"rustflags": null,
"cargo_build_rustflags": null,
"maturin_flags": null
},
"packages": {
"numpy": "2.2.6",
"ferro-ta": "1.0.4"
},
"dataset": {
"n_bars": 20000,
@@ -22,52 +44,52 @@
{
"indicator": "StreamingSMA",
"inputs": "close",
"stream_total_ms": 0.8808,
"batch_total_ms": 0.0153,
"stream_ns_per_update": 44.04,
"batch_ns_per_bar": 0.77,
"updates_per_second": 22705779.59,
"stream_over_batch_ratio": 57.4469
"stream_total_ms": 0.9927,
"batch_total_ms": 0.0166,
"stream_ns_per_update": 49.63,
"batch_ns_per_bar": 0.83,
"updates_per_second": 20147763.43,
"stream_over_batch_ratio": 59.7092
},
{
"indicator": "StreamingEMA",
"inputs": "close",
"stream_total_ms": 0.8611,
"batch_total_ms": 0.0408,
"stream_ns_per_update": 43.06,
"batch_ns_per_bar": 2.04,
"updates_per_second": 23225431.81,
"stream_over_batch_ratio": 21.0884
"stream_total_ms": 0.9459,
"batch_total_ms": 0.0435,
"stream_ns_per_update": 47.3,
"batch_ns_per_bar": 2.18,
"updates_per_second": 21143503.9,
"stream_over_batch_ratio": 21.7247
},
{
"indicator": "StreamingRSI",
"inputs": "close",
"stream_total_ms": 0.9235,
"batch_total_ms": 0.0932,
"stream_ns_per_update": 46.17,
"batch_ns_per_bar": 4.66,
"updates_per_second": 21656740.75,
"stream_over_batch_ratio": 9.9035
"stream_total_ms": 1.0059,
"batch_total_ms": 0.0991,
"stream_ns_per_update": 50.3,
"batch_ns_per_bar": 4.95,
"updates_per_second": 19882356.06,
"stream_over_batch_ratio": 10.1523
},
{
"indicator": "StreamingATR",
"inputs": "hlc",
"stream_total_ms": 2.0074,
"batch_total_ms": 0.0935,
"stream_ns_per_update": 100.37,
"batch_ns_per_bar": 4.68,
"updates_per_second": 9963056.99,
"stream_over_batch_ratio": 21.4603
"stream_total_ms": 2.1574,
"batch_total_ms": 0.0992,
"stream_ns_per_update": 107.87,
"batch_ns_per_bar": 4.96,
"updates_per_second": 9270525.53,
"stream_over_batch_ratio": 21.746
},
{
"indicator": "StreamingVWAP",
"inputs": "hlcv",
"stream_total_ms": 2.6068,
"batch_total_ms": 0.0223,
"stream_ns_per_update": 130.34,
"batch_ns_per_bar": 1.11,
"updates_per_second": 7672265.38,
"stream_over_batch_ratio": 116.9385
"stream_total_ms": 2.6935,
"batch_total_ms": 0.0252,
"stream_ns_per_update": 134.68,
"batch_ns_per_bar": 1.26,
"updates_per_second": 7425170.07,
"stream_over_batch_ratio": 106.8484
}
]
}
}