“…Programmers use surrogates for a variety of tasks including accelerating computational kernels in numerical programs [23], replacing physical simulators with more accurate versions [84], and tuning parameters of complex simulators [71,87]. Compared to standard development workflows, programming with surrogates requires lower development costs [45,49,71,77,87] and results in programs with lower execution cost [23,57,60,67] or higher result quality [48,71,84,87]. However, the approaches in the literature for both applying and developing surrogates are disparate, with no unifying taxonomy or development methodology.…”