timecat/evaluate/
mod.rs

1use super::*;
2
3#[cfg(feature = "nnue_reader")]
4pub mod evaluate_nnue;
5pub mod evaluate_non_nnue;
6
7#[cfg(feature = "nnue_reader")]
8pub use evaluate_nnue::*;
9pub use evaluate_non_nnue::*;
10
11#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
12#[derive(Clone, Default, Debug)]
13pub struct Evaluator {
14    #[cfg(feature = "inbuilt_nnue")]
15    inner_evaluator: EvaluatorNNUE,
16    #[cfg(not(feature = "inbuilt_nnue"))]
17    inner_evaluator: EvaluatorNonNNUE,
18}
19
20impl Evaluator {
21    pub fn new(position: &ChessPosition) -> Self {
22        Self {
23            #[cfg(feature = "inbuilt_nnue")]
24            inner_evaluator: EvaluatorNNUE::new(position),
25            #[cfg(not(feature = "inbuilt_nnue"))]
26            inner_evaluator: EvaluatorNonNNUE::new(position),
27        }
28    }
29
30    pub fn slow_evaluate(position: &ChessPosition) -> Score {
31        #[cfg(feature = "inbuilt_nnue")]
32        {
33            EvaluatorNNUE::slow_evaluate(position)
34        }
35        #[cfg(not(feature = "inbuilt_nnue"))]
36        {
37            EvaluatorNonNNUE::slow_evaluate(position)
38        }
39    }
40}
41
42impl PositionEvaluation for Evaluator {
43    fn evaluate(&mut self, position: &ChessPosition) -> Score {
44        self.inner_evaluator.evaluate(position)
45    }
46
47    fn reset_variables(&mut self) {
48        self.inner_evaluator.reset_variables()
49    }
50
51    fn clear(&mut self) {
52        self.inner_evaluator.clear()
53    }
54
55    fn print_info(&self) {
56        self.inner_evaluator.print_info()
57    }
58
59    fn evaluate_flipped(&mut self, position: &ChessPosition) -> Score {
60        self.inner_evaluator.evaluate_flipped(position)
61    }
62
63    fn evaluate_checkmate_in(&mut self, mate_distance: Ply) -> Score {
64        self.inner_evaluator.evaluate_checkmate_in(mate_distance)
65    }
66}
67
68impl Deref for Evaluator {
69    #[cfg(feature = "inbuilt_nnue")]
70    type Target = EvaluatorNNUE;
71    #[cfg(not(feature = "inbuilt_nnue"))]
72    type Target = EvaluatorNonNNUE;
73
74    fn deref(&self) -> &Self::Target {
75        &self.inner_evaluator
76    }
77}
78
79impl DerefMut for Evaluator {
80    fn deref_mut(&mut self) -> &mut Self::Target {
81        &mut self.inner_evaluator
82    }
83}