- feature_transformer->Transform(pos, transformed_features);
- const auto output = network->Propagate(transformed_features, buffer);
+ const std::size_t bucket = (pos.count<ALL_PIECES>() - 1) / 4;
+ const auto [psqt, lazy] = featureTransformer->transform(pos, transformedFeatures, bucket, lazyThreshold);
+
+ if (lazy)
+ return static_cast<Value>(psqt / OutputScale);
+ else
+ {
+ const auto output = network[bucket]->propagate(transformedFeatures, buffer);
+
+ int materialist = psqt;
+ int positional = output[0];
+
+ int delta_npm = abs(pos.non_pawn_material(WHITE) - pos.non_pawn_material(BLACK));
+ int entertainment = (adjusted && delta_npm <= BishopValueMg - KnightValueMg ? 7 : 0);
+
+ int A = 128 - entertainment;
+ int B = 128 + entertainment;