Bayesian Optimization: Theory and Practice Using Python