use scirs2_core::ndarray::Array2;
use serde::Serialize;
use std::collections::HashMap;
#[derive(Debug, Clone, Serialize)]
pub struct ProblemInfo {
pub name: String,
pub problem_type: String,
pub num_variables: usize,
pub var_map: HashMap<String, usize>,
pub reverse_var_map: HashMap<usize, String>,
pub qubo: Array2<f64>,
pub constraints: Vec<ConstraintInfo>,
pub optimal_solution: Option<Solution>,
pub metadata: HashMap<String, String>,
}
#[derive(Debug, Clone, serde::Serialize)]
pub struct Solution {
pub assignments: HashMap<String, bool>,
pub energy: f64,
pub quality_metrics: HashMap<String, f64>,
pub metadata: HashMap<String, String>,
pub sampling_stats: Option<SamplingStats>,
}
#[derive(Debug, Clone, Serialize)]
pub struct SamplingStats {
pub num_reads: usize,
pub annealing_time: f64,
pub chain_break_fraction: f64,
pub sampler: String,
}
#[derive(Debug, Clone, Serialize)]
pub struct ConstraintInfo {
pub name: Option<String>,
pub constraint_type: ConstraintType,
pub variables: Vec<String>,
pub parameters: HashMap<String, f64>,
pub penalty: f64,
pub description: Option<String>,
}
#[derive(Debug, Clone, Serialize)]
pub enum ConstraintType {
Equality { target: f64 },
Inequality {
bound: f64,
direction: InequalityDirection,
},
AllDifferent,
ExactlyOne,
AtMostOne,
Custom { evaluator: String },
}
#[derive(Debug, Clone, Serialize)]
pub enum InequalityDirection {
LessEqual,
GreaterEqual,
}