argument generator factory