Optimizer spec passed to compile_fused_training_step.
The C++ side directly emits MPSGraph ops for the update rule, using the auto-derived gradient tensors + a small set of state buffer feeds (m / v for Adam-family, momentum for SGD). Per-step scalars (bias-correction factors for Adam) are passed as additional external feeds at run time so that one cached executable covers the whole training loop without recompiles.