Enhance Tax-Calculator to allow users flexibility to define non-parametric reforms more easily. One path involves vectorizing functions, removing `jit` decorators, passing `Policy` and `Records` objects to functions in `calcfuctions.py`, and defining a class.
Spurred by a nice discussion with @nikhilwoodruff about the OpenFisca platform, I wanted to write down some notes for future reference about how Tax-Calculator might be enhanced so as to allow users flexibility to define non-parametric reforms more easily. One path: 1) Finish off PR #2585 to vectorize functions and remove `jit` decorators. 2) Pass just `Policy` and `Records` objects to all functions in `calcfuctions.py`, rather than tuples of variable and parameter names. 3) Define a class that has each function in `calcfunctions.py` as a method (or as each function defined as a class). Call this super class `CF` for now. One can then define a non-parametric reform by creating an instance of the `CF` class and then updating an existing method or adding a new one. This would be similar to what is done to create a reform in OpenFisca, where a variable class is updated/created. cc @hdoupe