added nmf implementation (work in progress)