add support for arbitrary inference methods and add argument checks/transformations
initial import