Backend support contract#
SplineOps uses the word supported only when dispatch, numerical tests, packaging, and continuous integration cover the same configuration. Merely accepting an array type is interoperability evidence, not a package-wide backend promise.
Current matrix#
Backend |
Public scope |
Status |
Exact contract |
|---|---|---|---|
NumPy |
All public modules |
Supported |
The Python/OS test matrix exercises NumPy arrays, documented dtypes, output buffers, and module-specific boundaries. |
Native C++ |
Resize only |
Supported CPU accelerator |
Implements the resize contract, with Python-reference parity tests and
automatic or explicitly controlled dispatch. It is not a generic
|
CuPy |
Portions of |
Experimental interoperability |
No CuPy configuration is currently advertised as supported because no reliable GPU runner exercises it in CI. Other modules require NumPy. |
CuPy boundary#
TensorSpline recognizes an actual cupy.ndarray through explicit type
dispatch. Construction data, construction coordinates, query coordinates,
output buffers, and reusable geometry must remain on one array backend. An
object is not accepted merely because it exposes __cuda_array_interface__;
this prevents accidental duck-typed dispatch into an untested implementation.
The present implementation has materially different paths:
periodic coefficient filtering has a CuPy FFT path;
zero-boundary finite-support coefficient filtering currently transfers data to a SciPy CPU solve and returns it to CuPy; and
mirror filtering and the full basis/mode/query matrix do not yet have dedicated GPU CI evidence.
Consequently, SplineOps does not promise device residency, GPU acceleration,
or complete basis/mode support for CuPy. The optional dev_cupy dependency
group exists for maintainers evaluating that experimental surface; installing
it does not change the support status.
Graduation decision#
CuPy will be promoted only after a reliable GPU runner covers construction,
sample reproduction, point and grid queries, dtypes, boundaries, reusable
geometry, buffers, and host-transfer checks. Until then the honest choice is
to retain the useful experimental code, keep the dispatch narrow, and avoid
general GPU performance claims. This decision does not affect
TensorSpline’s independent public identity or the supported NumPy path.