  We propose an efficient method to evaluate callable and putable bonds under a
wide class of interest rate models, including the popular short rate diffusion
models, as well as their time changed versions with jumps. The method is based
on the eigenfunction expansion of the pricing operator. Given the set of call
and put dates, the callable and putable bond pricing function is the value
function of a stochastic game with stopping times. Under some technical
conditions, it is shown to have an eigenfunction expansion in eigenfunctions of
the pricing operator with the expansion coefficients determined through a
backward recursion. For popular short rate diffusion models, such as CIR,
Vasicek, 3/2, the method is orders of magnitude faster than the alternative
approaches in the literature. In contrast to the alternative approaches in the
literature that have so far been limited to diffusions, the method is equally
applicable to short rate jump-diffusion and pure jump models constructed from
diffusion models by Bochner's subordination with a L\'{e}vy subordinator.
