only evaluate once in deep_evaluate