TensorScatter-24 (CPU) (#27389)
This pull request introduces a new ONNX operator kernel,
`TensorScatter`, to the CPU execution provider, along with its
implementation and comprehensive unit tests. The new operator supports
both linear and circular scatter modes, handles various tensor shapes
and types, and allows for optional write indices. The changes are
grouped below by theme.
Operator kernel registration:
* Added registration for the `TensorScatter` operator for opset 24 in
the CPU execution provider, ensuring it is available for inference and
training.
[[1]](diffhunk://#diff-054ffdd679ada14ebb4b1db27a60b2881e2db48f9dc3f0b948c784cdcdaf4908R1389)
[[2]](diffhunk://#diff-054ffdd679ada14ebb4b1db27a60b2881e2db48f9dc3f0b948c784cdcdaf4908R3488)
Operator implementation:
* Introduced the `TensorScatter` kernel implementation in
`tensorscatter.cc`, supporting both linear and circular modes, handling
axis normalization, shape validation, and efficient memory copying for
scatter operations.
* Defined the `TensorScatter` class interface in `tensorscatter.h`,
including constructor and compute method, with attributes for axis and
mode.
Testing:
* Added extensive unit tests for the `TensorScatter` operator in
`tensorscatter_op_test.cc`, covering linear and circular modes, explicit
axis handling, float16 support, and scenarios with and without write
indices.