Send information about lower depths to the JSON.
authorSteinar H. Gunderson <steinar+remoteglot@gunderson.no>
Fri, 16 Jul 2021 14:34:24 +0000 (16:34 +0200)
committerSteinar H. Gunderson <sgunderson@bigfoot.com>
Fri, 16 Jul 2021 14:34:24 +0000 (16:34 +0200)
remoteglot.pl

index b9055a64d30616ff945bed8fd59c500ab8eeb62c..56554a6d6b5589a65c13764a7d9ab0c5740bf624 100755 (executable)
@@ -480,6 +480,8 @@ sub parse_infos {
                }
        }
 
+       my $prev_depth = $info->{'depth1'} // $info->{'depth'};
+
        while (scalar @x > 0) {
                if ($x[0] eq 'multipv') {
                        # Dealt with above
@@ -534,6 +536,14 @@ sub parse_infos {
                die "Unknown info '" . join(',', @x) . "'";
 
        }
+
+       my $now_depth = $info->{'depth1'} // $info->{'depth'};
+       if (defined($prev_depth) && POSIX::floor($now_depth / 10) > POSIX::floor($prev_depth / 10)) {
+               my $d = POSIX::floor($now_depth / 10) * 10;  # In case we skipped some.
+               my $cp = $info->{'score_cp1'} // $info->{'score_cp'};
+               my $mate = $info->{'score_mate1'} // $info->{'score_mate'};
+               push @{$info->{'lowdepth'}}, [ $d, $cp, $mate ];
+       }
 }
 
 sub parse_ids {
@@ -944,6 +954,13 @@ sub output_json {
        $json->{'tablebase'} = $info->{'tablebase'};
        $json->{'pv'} = [ prettyprint_pv($pos_calculating, @{$info->{'pv'}}) ];
 
+       $json->{'lowdepth'} = {};
+       if (exists($info->{'lowdepth'})) {
+               for my $ld (@{$info->{'lowdepth'}}) {
+                       $json->{'lowdepth'}{$ld->[0]} = score_digest_inner($ld->[1], $ld->[2], undef, 0, $pos_calculating);
+               }
+       }
+
        my %refutation_lines = ();
        my @refutation_lines = ();
        if (defined($engine2)) {
@@ -1172,14 +1189,21 @@ sub short_score {
 # (with side-to-play information) score_sort_key.
 sub score_digest {
        my ($info, $pos, $mpv) = @_;
+       return score_digest_inner(
+               $info->{'score_cp' . $mpv},
+               $info->{'score_mate' . $mpv},
+               $info->{'splicepos' . $mpv},
+               $info->{'tablebase'},
+               $pos);
+}
 
-       if (defined($info->{'score_mate' . $mpv})) {
-               my $mate = $info->{'score_mate' . $mpv};
+sub score_digest_inner {
+       my ($score, $mate, $sp, $tablebase, $pos) = @_;
+       if (defined($mate)) {
                if ($pos->{'toplay'} eq 'B') {
                        $mate = -$mate;
                }
-               if (exists($info->{'splicepos' . $mpv})) {
-                       my $sp = $info->{'splicepos' . $mpv};
+               if (defined($sp)) {
                        if ($mate > 0) {
                                return ['T', $sp];
                        } else {
@@ -1197,12 +1221,11 @@ sub score_digest {
                        }
                }
        } else {
-               if (exists($info->{'score_cp' . $mpv})) {
-                       my $score = $info->{'score_cp' . $mpv};
+               if (defined($score)) {
                        if ($pos->{'toplay'} eq 'B') {
                                $score = -$score;
                        }
-                       if ($score == 0 && $info->{'tablebase'}) {
+                       if ($score == 0 && $tablebase) {
                                return ['d', undef];
                        } else {
                                return ['cp', int($score)];