diff options
Diffstat (limited to 'graph-checker')
| -rw-r--r-- | graph-checker/Cargo.lock | 101 | ||||
| -rw-r--r-- | graph-checker/Cargo.toml | 3 | ||||
| -rw-r--r-- | graph-checker/src/compute.rs | 4 | ||||
| -rw-r--r-- | graph-checker/src/main.rs | 66 |
4 files changed, 155 insertions, 19 deletions
diff --git a/graph-checker/Cargo.lock b/graph-checker/Cargo.lock index 27711dd..c53b5ff 100644 --- a/graph-checker/Cargo.lock +++ b/graph-checker/Cargo.lock @@ -36,6 +36,12 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5c6cb57a04249c6480766f7f7cef5467412af1490f8d1e243141daddada3264f" [[package]] +name = "anyhow" +version = "1.0.89" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "86fdf8605db99b54d3cd748a44c6d04df638eb5dafb219b135d0149bd0db01f6" + +[[package]] name = "atoi" version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -198,6 +204,15 @@ dependencies = [ ] [[package]] +name = "deranged" +version = "0.3.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b42b6fa04a440b495c8b04d0e71b707c585f83cb9cb28cf8cd0d976c315e31b4" +dependencies = [ + "powerfmt", +] + +[[package]] name = "digest" version = "0.10.7" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -425,9 +440,12 @@ checksum = "40ecd4077b5ae9fd2e9e169b102c6c330d0605168eb0e8bf79952b256dbefffd" name = "graph-checker" version = "0.1.0" dependencies = [ + "anyhow", "cc", "dotenv", "futures", + "log", + "simplelog", "sqlx", "tokio", ] @@ -653,6 +671,12 @@ dependencies = [ ] [[package]] +name = "num-conv" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9" + +[[package]] name = "num-integer" version = "0.1.46" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -683,6 +707,15 @@ dependencies = [ ] [[package]] +name = "num_threads" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c7398b9c8b70908f6371f47ed36737907c87c52af34c268fed0bf0ceb92ead9" +dependencies = [ + "libc", +] + +[[package]] name = "object" version = "0.36.3" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -787,6 +820,12 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "953ec861398dccce10c670dfeaf3ec4911ca479e9c02154b3a215178c5f566f2" [[package]] +name = "powerfmt" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" + +[[package]] name = "ppv-lite86" version = "0.2.20" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -995,6 +1034,17 @@ dependencies = [ ] [[package]] +name = "simplelog" +version = "0.12.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "16257adbfaef1ee58b1363bdc0664c9b8e1e30aed86049635fb5f147d065a9c0" +dependencies = [ + "log", + "termcolor", + "time", +] + +[[package]] name = "slab" version = "0.4.9" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -1287,6 +1337,15 @@ dependencies = [ ] [[package]] +name = "termcolor" +version = "1.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "06794f8f6c5c898b3275aebefa6b8a1cb24cd2c6c79397ab15774837a0bc5755" +dependencies = [ + "winapi-util", +] + +[[package]] name = "thiserror" version = "1.0.64" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -1307,6 +1366,39 @@ dependencies = [ ] [[package]] +name = "time" +version = "0.3.36" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5dfd88e563464686c916c7e46e623e520ddc6d79fa6641390f2e3fa86e83e885" +dependencies = [ + "deranged", + "itoa", + "libc", + "num-conv", + "num_threads", + "powerfmt", + "serde", + "time-core", + "time-macros", +] + +[[package]] +name = "time-core" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3" + +[[package]] +name = "time-macros" +version = "0.2.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f252a68540fde3a3877aeea552b832b40ab9a69e318efd078774a01ddee1ccf" +dependencies = [ + "num-conv", + "time-core", +] + +[[package]] name = "tinyvec" version = "1.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -1478,6 +1570,15 @@ dependencies = [ ] [[package]] +name = "winapi-util" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf221c93e13a30d793f7645a0e7762c55d169dbb0a49671918a2319d289b10bb" +dependencies = [ + "windows-sys 0.59.0", +] + +[[package]] name = "windows-sys" version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" diff --git a/graph-checker/Cargo.toml b/graph-checker/Cargo.toml index 77a6bb8..e004926 100644 --- a/graph-checker/Cargo.toml +++ b/graph-checker/Cargo.toml @@ -6,8 +6,11 @@ links = "nauty" build = "build.rs" [dependencies] +anyhow = "1.0.89" dotenv = "0.15.0" futures = "0.3.30" +log = "0.4.22" +simplelog = "0.12.2" sqlx = { version = "0.8.2", features = ["runtime-tokio", "sqlite"] } tokio = { version = "1.40.0", features = ["full"] } diff --git a/graph-checker/src/compute.rs b/graph-checker/src/compute.rs index c3ee046..67c1ae4 100644 --- a/graph-checker/src/compute.rs +++ b/graph-checker/src/compute.rs @@ -2,7 +2,7 @@ use crate::graph::Graph; pub async fn dominating_numbers( g: Graph, -) -> (String, Option<u32>, Option<u32>) { +) -> (String, usize, Option<u32>, Option<u32>) { let line = g.to_g6(); let mut independent_dominating = None; @@ -85,5 +85,5 @@ pub async fn dominating_numbers( } } - (line, independent_dominating, fg) + (line, g.size, independent_dominating, fg) } diff --git a/graph-checker/src/main.rs b/graph-checker/src/main.rs index 231221e..68fb0bb 100644 --- a/graph-checker/src/main.rs +++ b/graph-checker/src/main.rs @@ -1,5 +1,6 @@ +use anyhow::Context; use sqlx::{migrate::MigrateDatabase, QueryBuilder, Sqlite}; -use std::time::Instant; +use std::{fs::File, time::Instant}; mod graph; @@ -8,29 +9,52 @@ use crate::geng::GengIterator; mod compute; +use simplelog::*; + #[tokio::main] -async fn main() -> Result<(), sqlx::Error> { +async fn main() -> anyhow::Result<()> { dotenv::dotenv().ok(); + CombinedLogger::init(vec![ + TermLogger::new( + LevelFilter::Info, + Config::default(), + TerminalMode::Mixed, + ColorChoice::Auto, + ), + WriteLogger::new( + LevelFilter::Debug, + Config::default(), + File::create("test.log").unwrap(), + ), + ]) + .unwrap(); + + let vert_num = std::env::args() + .nth(1) + .context("You should provide number of vertices in argument")? + .parse::<usize>()?; let database_url = std::env::var("DATABASE_URL").expect("Expected DATABASE_URL in env"); if !sqlx::Sqlite::database_exists(&database_url).await? { + log::info!("Database file doesn't exist. Creating '{database_url}'."); sqlx::Sqlite::create_database(&database_url).await?; } let db = sqlx::SqlitePool::connect(&database_url).await?; - let err = sqlx::query( - "CREATE TABLE IF NOT EXISTS graphs (g6 VARCHAR NOT NULL, ind_dom INT NOT NULL, forced_geod INT NOT NULL);" + sqlx::query( + "CREATE TABLE IF NOT EXISTS graphs (\ + g6 VARCHAR NOT NULL,\ + size INT NOT NULL,\ + ind_dom INT NOT NULL,\ + forced_geod INT NOT NULL);", ) .execute(&db) - .await; - if let Err(e) = err { - println!("Error while creating table: {e}"); - } + .await?; - let gi = GengIterator::new(9); + let gi = GengIterator::new(vert_num); - println!("Started"); let start = Instant::now(); - const BATCH_SIZE: usize = 10000; + const BATCH_SIZE: usize = 5000; + log::info!("Started computation for {vert_num} vertices"); let mut count = 0; loop { let graphs = gi.take(BATCH_SIZE); @@ -42,26 +66,34 @@ async fn main() -> Result<(), sqlx::Error> { let sz = part.len(); let mut query = QueryBuilder::<Sqlite>::new( - "INSERT INTO graphs (g6, ind_dom, forced_geod) ", + "INSERT INTO graphs (g6, size, ind_dom, forced_geod) ", ); query.push_values(part, |mut b, res| { match res { - Ok((g6, ind_dom, fg)) => { + Ok((g6, size, ind_dom, fg)) => { + // log::debug!( + // "inserting {} {} {:?} {:?}", + // g6, + // size, + // ind_dom, + // fg + // ); b.push_bind(g6) + .push_bind(size as u32) .push_bind(ind_dom.unwrap_or(0)) .push_bind(fg.unwrap_or(0)); } - Err(_) => println!("Unable to push into query"), + Err(_) => log::error!("Unable to push into query"), }; }); let err = query.build().execute(&db).await; if let Err(e) = err { - println!("Error while inserting: {e}"); + log::error!("{e}"); } count += sz; - println!( + log::info!( "Counted {count} in {}s", batch.elapsed().as_nanos() as f64 / 1e9 ); @@ -72,7 +104,7 @@ async fn main() -> Result<(), sqlx::Error> { let elapsed = start.elapsed(); let time = elapsed.as_nanos(); - println!("Time elapsed: {}s", time as f64 / 1e9); + log::info!("Time elapsed: {}s", time as f64 / 1e9); Ok(()) } |