algorithms Learning algorithms design and analysis Cool things dataclasses typing Protocol partial function