fully functional, but not as fast as pure python