Foundations of Deep Reinforcement Learning: Theory and Practice in Python