I made these keyword arguments with validation because it'd be pretty easy to conflate `input` and `output` as positional arguments, which might make for a confusing debugging session. I could easily be swayed to change it back.