use air_parser::ast::TraceSegment;
pub use air_parser::{
Symbol,
ast::{Identifier, PeriodicColumn, PublicInput, QualifiedIdentifier},
};
use std::collections::BTreeMap;
use miden_diagnostics::{SourceSpan, Spanned};
use super::Graph;
#[derive(Debug, Spanned, PartialEq, Eq)]
pub struct Mir {
#[span]
pub name: Identifier,
pub trace_columns: Vec<TraceSegment>,
pub periodic_columns: BTreeMap<QualifiedIdentifier, PeriodicColumn>,
pub public_inputs: BTreeMap<Identifier, PublicInput>,
pub num_random_values: u16,
graph: Graph,
}
impl Default for Mir {
fn default() -> Self {
Self::new(Identifier::new(
SourceSpan::UNKNOWN,
Symbol::intern("unnamed"),
))
}
}
impl Mir {
pub fn new(name: Identifier) -> Self {
Self {
name,
trace_columns: vec![],
periodic_columns: Default::default(),
public_inputs: Default::default(),
num_random_values: 0,
graph: Default::default(),
}
}
#[inline]
pub fn name(&self) -> &str {
self.name.as_str()
}
#[inline]
pub fn constraint_graph(&self) -> &Graph {
&self.graph
}
#[inline]
pub fn constraint_graph_mut(&mut self) -> &mut Graph {
&mut self.graph
}
}