Parent: #478
flow-scikit also exposes Python interop, so Python callers can erase native wins through conversion, module loading or per-call FFI overhead. Treat that boundary as a separate performance surface.
Measure import/startup, estimator construction, ndarray/buffer handoff, copies/conversions, fit/predict call overhead and return conversion. Add zero-copy contiguous paths where ABI-safe, explicit behavior for non-contiguous/dtype-mismatched arrays, and batch-size crossover curves.
Acceptance: same-process Python wrapper vs direct sklearn and direct Flow measurements; copy bytes/counts reported; no hidden full-array copies on supported contiguous inputs; documented break-even sizes; representative wrapper workloads remain faster end-to-end where direct Flow has enough headroom.
Parent: #478
flow-scikit also exposes Python interop, so Python callers can erase native wins through conversion, module loading or per-call FFI overhead. Treat that boundary as a separate performance surface.
Measure import/startup, estimator construction, ndarray/buffer handoff, copies/conversions, fit/predict call overhead and return conversion. Add zero-copy contiguous paths where ABI-safe, explicit behavior for non-contiguous/dtype-mismatched arrays, and batch-size crossover curves.
Acceptance: same-process Python wrapper vs direct sklearn and direct Flow measurements; copy bytes/counts reported; no hidden full-array copies on supported contiguous inputs; documented break-even sizes; representative wrapper workloads remain faster end-to-end where direct Flow has enough headroom.