Hands-On Mathematical Optimization with Python