How to Implement a Custom Gym Environment Part 1: Required and Optional Methods