add AbstractFactor and AbstractParametricFactor