add nonnegative assumption to this