introduce compute factory