11 private readonly List<SolutionCheckBatchItemSummary> _items =
new();
22 string? candidateName =
null)
24 if (
string.IsNullOrWhiteSpace(candidateKey))
26 throw new ArgumentException(
27 "The candidate key cannot be empty.",
28 nameof(candidateKey));
31 ArgumentNullException.ThrowIfNull(result);
67 item.Summary.IsValid),
68 InvalidCandidateCount =
71 !item.Summary.IsValid),
75 item.Summary.InformationCount),
79 item.Summary.WarningCount),
83 item.Summary.ErrorCount),
84 CandidateWithConstraintViolationCount =
87 item.Summary.ViolatedConstraintCount > 0),
88 CandidateWithObjectiveMismatchCount =
91 item.Summary.IssueCountsByKind.Any(
95 issueCount.Count > 0)),
96 MaximumConstraintViolation =
101 item.Summary.MaximumConstraintViolation)
110 item.Summary.IssueCountsByKind
112 issueCount.Kind == kind)
121 summary.IssueCountsByKind.Add(
154 private static SolutionCheckSummary CloneSummary(
155 SolutionCheckSummary source)
158 new SolutionCheckSummary
165 source.StructuralStatus,
166 VariableDomainStatus =
167 source.VariableDomainStatus,
169 source.FeasibilityStatus,
171 source.ObjectiveStatus,
175 source.InformationCount,
180 ViolatedConstraintCount =
181 source.ViolatedConstraintCount,
182 MaximumConstraintViolation =
183 source.MaximumConstraintViolation,
184 TotalConstraintViolation =
185 source.TotalConstraintViolation,
186 ReportedObjectiveValue =
187 source.ReportedObjectiveValue,
188 RecomputedObjectiveValue =
189 source.RecomputedObjectiveValue,
190 ObjectiveDifference =
191 source.ObjectiveDifference,
192 ObjectiveRelativeDifference =
193 source.ObjectiveRelativeDifference,
194 ObjectiveComparisonTolerance =
195 source.ObjectiveComparisonTolerance
198 foreach (SolutionCheckIssueCount issueCount
in
199 source.IssueCountsByKind)
201 clone.IssueCountsByKind.Add(
202 new SolutionCheckIssueCount