only pure functions in calculate