This may not always be sparse. We need to handle dense and sparse cases separately.