For maximum robustness, this prefers the scalar eval() path when available
and otherwise falls back to eval_batch() for a single-row batch.
For maximum robustness, this prefers the scalar eval() path when available
and otherwise falls back to eval_batch() for a single-row batch.