Nonlinear Optics: a student's perspective: With python problems and examples