+
+ Value npm_w = pos.non_pawn_material(WHITE);
+ Value npm_b = pos.non_pawn_material(BLACK);
+ Value npm = std::max(EndgameLimit, std::min(npm_w + npm_b, MidgameLimit));
+
+ // Map total non-pawn material into [PHASE_ENDGAME, PHASE_MIDGAME]
+ e->gamePhase = Phase(((npm - EndgameLimit) * PHASE_MIDGAME) / (MidgameLimit - EndgameLimit));