Skip to content

Commit 033aa3d

Browse files
committed
Crate for AIGER files + various smaller changes
1 parent fd7d41a commit 033aa3d

File tree

15 files changed

+3383
-3
lines changed

15 files changed

+3383
-3
lines changed

Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
[workspace]
2-
members = ["flussab", "flussab-cnf"]
2+
members = ["flussab", "flussab-cnf", "flussab-aiger"]
33

44
[profile.release]
55
debug = true # Enables profiling with perf

flussab-aiger/Cargo.toml

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
[package]
2+
name = "flussab-aiger"
3+
version = "0.1.0"
4+
edition = "2021"
5+
6+
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
7+
8+
[dependencies]
9+
flussab = { version = "0.3.0", path = "../flussab" }
10+
thiserror = "1.0.30"
11+
num-traits = "0.2.14"
12+
zwohash = "0.1.2"
13+
14+
[dev-dependencies]
15+
flussab-cnf = { version = "0.3.0", path = "../flussab-cnf" }
16+
tempfile = "3.3.0"
17+
duct = "0.13.6"

flussab-aiger/examples/aagtoaig.rs

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
use std::io::Write;
2+
3+
use flussab::DeferredWriter;
4+
5+
use flussab_aiger::{
6+
aig::{Renumber, RenumberConfig},
7+
ascii, binary, Error,
8+
};
9+
10+
fn main() {
11+
if let Err(err) = main_err() {
12+
eprintln!("error: {err}");
13+
}
14+
}
15+
16+
fn main_err() -> Result<(), Error<u32>> {
17+
let stdin = std::io::stdin();
18+
let stdout = std::io::stdout();
19+
20+
let aag_reader = ascii::Parser::<u32>::from_read(stdin.lock(), ascii::Config::default())?;
21+
22+
let aag = aag_reader.parse()?;
23+
24+
let (aig, _) = Renumber::renumber_aig(
25+
RenumberConfig::default()
26+
.trim(true)
27+
.structural_hash(true)
28+
.const_fold(true),
29+
&aag,
30+
)?;
31+
32+
let aig_writer = DeferredWriter::from_write(stdout.lock());
33+
let mut aag_writer = binary::Writer::<u32>::new(aig_writer);
34+
35+
aag_writer.write_ordered_aig(&aig);
36+
37+
aag_writer.flush()?;
38+
Ok(())
39+
}
Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
1+
use flussab::DeferredWriter;
2+
3+
use flussab_aiger::{ascii, ParseError};
4+
5+
fn main() {
6+
if let Err(err) = main_err() {
7+
eprintln!("error: {err}");
8+
}
9+
}
10+
11+
fn main_err() -> Result<(), ParseError> {
12+
let stdin = std::io::stdin();
13+
let stdout = std::io::stdout();
14+
15+
let aag_reader = ascii::Parser::<u32>::from_read(stdin.lock(), ascii::Config::default())?;
16+
let mut aag_writer = DeferredWriter::from_write(stdout.lock());
17+
let aag_writer = ascii::Writer::<u32>::new(&mut aag_writer);
18+
19+
aag_writer.write_header(aag_reader.header());
20+
21+
let mut aag_reader = aag_reader.inputs()?;
22+
while let Some(input) = aag_reader.next_input()? {
23+
aag_writer.write_lit(input);
24+
}
25+
26+
let mut aag_reader = aag_reader.latches()?;
27+
while let Some(latch) = aag_reader.next_latch()? {
28+
aag_writer.write_latch(latch);
29+
}
30+
31+
let mut aag_reader = aag_reader.outputs()?;
32+
while let Some(output) = aag_reader.next_output()? {
33+
aag_writer.write_lit(output);
34+
}
35+
36+
let mut aag_reader = aag_reader.bad_state_properties()?;
37+
while let Some(bad_state_property) = aag_reader.next_bad_state_property()? {
38+
aag_writer.write_lit(bad_state_property);
39+
}
40+
41+
let mut aag_reader = aag_reader.invariant_constraints()?;
42+
while let Some(invariant_constraint) = aag_reader.next_invariant_constraint()? {
43+
aag_writer.write_lit(invariant_constraint);
44+
}
45+
46+
let mut aag_reader = aag_reader.justice_properties()?;
47+
while let Some(justice_property_size) = aag_reader.next_justice_property_size()? {
48+
aag_writer.write_count(justice_property_size);
49+
}
50+
51+
let mut aag_reader = aag_reader.justice_property_local_fairness_constraints()?;
52+
while let Some(justice_property_local_fairness_constraint) =
53+
aag_reader.next_justice_property_local_fairness_constraint()?
54+
{
55+
aag_writer.write_lit(justice_property_local_fairness_constraint);
56+
}
57+
58+
let mut aag_reader = aag_reader.fairness_constraints()?;
59+
while let Some(fairness_constraint) = aag_reader.next_fairness_constraint()? {
60+
aag_writer.write_lit(fairness_constraint);
61+
}
62+
63+
let mut aag_reader = aag_reader.and_gates()?;
64+
while let Some(and_gate) = aag_reader.next_and_gate()? {
65+
aag_writer.write_and_gate(and_gate);
66+
}
67+
68+
let mut aag_reader = aag_reader.symbols()?;
69+
while let Some(symbol) = aag_reader.next_symbol()? {
70+
aag_writer.write_symbol(&symbol);
71+
}
72+
73+
if let Some(comment) = aag_reader.comment()? {
74+
aag_writer.write_comment(comment);
75+
}
76+
77+
Ok(())
78+
}
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
use flussab::DeferredWriter;
2+
3+
use flussab_aiger::{ascii, ParseError};
4+
5+
fn main() {
6+
if let Err(err) = main_err() {
7+
eprintln!("error: {err}");
8+
}
9+
}
10+
11+
fn main_err() -> Result<(), ParseError> {
12+
let stdin = std::io::stdin();
13+
let stdout = std::io::stdout();
14+
15+
let aag_reader = ascii::Parser::<u32>::from_read(stdin.lock(), ascii::Config::default())?;
16+
17+
let aig = aag_reader.parse()?;
18+
19+
let mut aag_writer = DeferredWriter::from_write(stdout.lock());
20+
let aag_writer = ascii::Writer::<u32>::new(&mut aag_writer);
21+
22+
aag_writer.write_aig(&aig);
23+
Ok(())
24+
}
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
use flussab::DeferredWriter;
2+
3+
use flussab_aiger::{ascii, binary, ParseError};
4+
5+
fn main() {
6+
if let Err(err) = main_err() {
7+
eprintln!("error: {err}");
8+
}
9+
}
10+
11+
fn main_err() -> Result<(), ParseError> {
12+
let stdin = std::io::stdin();
13+
let stdout = std::io::stdout();
14+
15+
let aig_reader = binary::Parser::<u32>::from_read(stdin.lock(), binary::Config::default())?;
16+
17+
let aig = aig_reader.parse()?;
18+
19+
let mut aag_writer = DeferredWriter::from_write(stdout.lock());
20+
let aag_writer = ascii::Writer::<u32>::new(&mut aag_writer);
21+
22+
aag_writer.write_ordered_aig(&aig);
23+
Ok(())
24+
}

0 commit comments

Comments
 (0)