Witness and Tree State calculations

This commit is contained in:
Hanh 2021-06-18 16:17:41 +08:00
parent acce6cc090
commit 703b309836
31 changed files with 2163 additions and 88 deletions

328
Cargo.lock generated
View File

@ -250,6 +250,18 @@ dependencies = [
"sha2",
]
[[package]]
name = "bstr"
version = "0.2.16"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "90682c8d613ad3373e66de8c6411e0ae2ab2571e879d2efbf73558cc66f21279"
dependencies = [
"lazy_static",
"memchr",
"regex-automata",
"serde",
]
[[package]]
name = "bumpalo"
version = "3.7.0"
@ -268,6 +280,15 @@ version = "1.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b700ce4376041dcd0a327fd0097c41095743c4c8af8887265942faf1100bd040"
[[package]]
name = "cast"
version = "0.2.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "57cdfa5d50aad6cb4d44dcab6101a7f79925bd59d82ca42f38a9856a28865374"
dependencies = [
"rustc_version 0.3.3",
]
[[package]]
name = "cc"
version = "1.0.68"
@ -308,6 +329,17 @@ dependencies = [
"generic-array",
]
[[package]]
name = "clap"
version = "2.33.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "37e58ac78573c40708d45522f0d80fa2f01cc4f9b4e2bf749807255454312002"
dependencies = [
"bitflags",
"textwrap",
"unicode-width",
]
[[package]]
name = "const_fn"
version = "0.4.8"
@ -354,6 +386,42 @@ dependencies = [
"cfg-if 1.0.0",
]
[[package]]
name = "criterion"
version = "0.3.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ab327ed7354547cc2ef43cbe20ef68b988e70b4b593cbd66a2a61733123a3d23"
dependencies = [
"atty",
"cast",
"clap",
"criterion-plot",
"csv",
"itertools 0.10.1",
"lazy_static",
"num-traits",
"oorandom",
"plotters",
"rayon",
"regex",
"serde",
"serde_cbor",
"serde_derive",
"serde_json",
"tinytemplate",
"walkdir",
]
[[package]]
name = "criterion-plot"
version = "0.4.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e022feadec601fba1649cfa83586381a4ad31c6bf3a9ab7d408118b05dd9889d"
dependencies = [
"cast",
"itertools 0.9.0",
]
[[package]]
name = "crossbeam"
version = "0.7.3"
@ -485,6 +553,28 @@ dependencies = [
"crypto_api",
]
[[package]]
name = "csv"
version = "1.1.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "22813a6dc45b335f9bade10bf7271dc477e81113e89eb251a0bc2a8a81c536e1"
dependencies = [
"bstr",
"csv-core",
"itoa",
"ryu",
"serde",
]
[[package]]
name = "csv-core"
version = "0.1.10"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2b2466559f260f48ad25fe6317b3c8dac77b5bdb5763ac7d9d6103530663bc90"
dependencies = [
"memchr",
]
[[package]]
name = "digest"
version = "0.9.0"
@ -532,10 +622,22 @@ version = "1.6.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e78d4f1cc4ae33bbfc157ed5d5a5ef3bc29227303d595861deb238fcec4e9457"
[[package]]
name = "env_logger"
version = "0.8.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a19187fea3ac7e84da7dacf48de0c45d63c6a76f9490dae389aead16c243fce3"
dependencies = [
"atty",
"humantime",
"log",
"regex",
"termcolor",
]
[[package]]
name = "equihash"
version = "0.1.0"
source = "git+https://github.com/zcash/librustzcash.git?rev=d50bb12a97da768dc8f3ee39b81f84262103e6eb#d50bb12a97da768dc8f3ee39b81f84262103e6eb"
dependencies = [
"blake2b_simd",
"byteorder",
@ -780,6 +882,12 @@ dependencies = [
"tracing",
]
[[package]]
name = "half"
version = "1.7.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "62aca2aba2d62b4a7f5b33f3712cb1b0692779a56fb510499d5c0aa594daeaf3"
[[package]]
name = "hashbrown"
version = "0.9.1"
@ -844,6 +952,12 @@ version = "1.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6456b8a6c8f33fee7d958fcd1b60d55b11940a79e63ae87013e6d22e26034440"
[[package]]
name = "humantime"
version = "2.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4"
[[package]]
name = "hyper"
version = "0.14.9"
@ -887,6 +1001,15 @@ dependencies = [
"either",
]
[[package]]
name = "itertools"
version = "0.10.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "69ddb889f9d0d08a67338271fa9b62996bc788c7796a5c18cf057420aaed5eaf"
dependencies = [
"either",
]
[[package]]
name = "itoa"
version = "0.4.7"
@ -1086,6 +1209,12 @@ version = "1.8.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "692fcb63b64b1758029e0a96ee63e049ce8c5948587f2f7208df04625e5f6b56"
[[package]]
name = "oorandom"
version = "11.1.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0ab1bc2a289d34bd04a330323ac98a1b4bc82c9d9fcb1e66b63caa84da26b575"
[[package]]
name = "opaque-debug"
version = "0.3.0"
@ -1114,6 +1243,15 @@ version = "2.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d4fd5641d01c8f18a23da7b6fe29298ff4b55afcccdf78973b24cf3175fee32e"
[[package]]
name = "pest"
version = "2.1.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "10f4872ae94d7b90ae48754df22fd42ad52ce740b8f370b03da4835417403e53"
dependencies = [
"ucd-trie",
]
[[package]]
name = "petgraph"
version = "0.5.1"
@ -1156,6 +1294,34 @@ version = "0.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184"
[[package]]
name = "plotters"
version = "0.3.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "32a3fd9ec30b9749ce28cd91f255d569591cdf937fe280c312143e3c4bad6f2a"
dependencies = [
"num-traits",
"plotters-backend",
"plotters-svg",
"wasm-bindgen",
"web-sys",
]
[[package]]
name = "plotters-backend"
version = "0.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b07fffcddc1cb3a1de753caa4e4df03b79922ba43cf882acc1bdd7e8df9f4590"
[[package]]
name = "plotters-svg"
version = "0.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b38a02e23bd9604b842a812063aec4ef702b57989c37b655254bb61c471ad211"
dependencies = [
"plotters-backend",
]
[[package]]
name = "ppv-lite86"
version = "0.2.10"
@ -1201,7 +1367,7 @@ checksum = "32d3ebd75ac2679c2af3a92246639f9fcc8a442ee420719cc4fe195b98dd5fa3"
dependencies = [
"bytes",
"heck",
"itertools",
"itertools 0.9.0",
"log",
"multimap",
"petgraph",
@ -1218,7 +1384,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "169a15f3008ecb5160cba7d37bcd690a7601b6d30cfb87a117d45e59d52af5d4"
dependencies = [
"anyhow",
"itertools",
"itertools 0.9.0",
"proc-macro2",
"quote",
"syn",
@ -1375,6 +1541,12 @@ dependencies = [
"regex-syntax",
]
[[package]]
name = "regex-automata"
version = "0.1.10"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132"
[[package]]
name = "regex-syntax"
version = "0.6.25"
@ -1405,24 +1577,22 @@ dependencies = [
"winapi",
]
[[package]]
name = "ripemd160"
version = "0.9.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2eca4ecc81b7f313189bf73ce724400a07da2a6dac19588b03c8bd76a2dcc251"
dependencies = [
"block-buffer",
"digest",
"opaque-debug",
]
[[package]]
name = "rustc_version"
version = "0.2.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "138e3e0acb6c9fb258b19b67cb8abd63c00679d2851805ea151465464fe9030a"
dependencies = [
"semver",
"semver 0.9.0",
]
[[package]]
name = "rustc_version"
version = "0.3.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f0dfe2087c51c460008730de8b57e6a320782fbfb312e1f4d520e6c6fae155ee"
dependencies = [
"semver 0.11.0",
]
[[package]]
@ -1456,6 +1626,15 @@ version = "1.0.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "71d301d4193d031abdd79ff7e3dd721168a9572ef3fe51a1517aba235bd8f86e"
[[package]]
name = "same-file"
version = "1.0.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502"
dependencies = [
"winapi-util",
]
[[package]]
name = "schannel"
version = "0.1.19"
@ -1482,24 +1661,6 @@ dependencies = [
"untrusted",
]
[[package]]
name = "secp256k1"
version = "0.20.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ee5070fdc6f26ca5be6dcfc3d07c76fdb974a63a8b246b459854274145f5a258"
dependencies = [
"secp256k1-sys",
]
[[package]]
name = "secp256k1-sys"
version = "0.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "67e4b6455ee49f5901c8985b88f98fb0a0e1d90a6661f5a03f4888bd987dad29"
dependencies = [
"cc",
]
[[package]]
name = "security-framework"
version = "2.3.1"
@ -1529,7 +1690,16 @@ version = "0.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1d7eb9ef2c18661902cc47e535f9bc51b78acd254da71d375c2f6720d9a40403"
dependencies = [
"semver-parser",
"semver-parser 0.7.0",
]
[[package]]
name = "semver"
version = "0.11.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f301af10236f6df4160f7c3f04eec6dbc70ace82d23326abad5edee88801c6b6"
dependencies = [
"semver-parser 0.10.2",
]
[[package]]
@ -1538,6 +1708,15 @@ version = "0.7.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3"
[[package]]
name = "semver-parser"
version = "0.10.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "00b0bef5b7f9e0df16536d3961cfb6e84331c065b4066afb39768d0e319411f7"
dependencies = [
"pest",
]
[[package]]
name = "serde"
version = "1.0.126"
@ -1547,6 +1726,16 @@ dependencies = [
"serde_derive",
]
[[package]]
name = "serde_cbor"
version = "0.11.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1e18acfa2f90e8b735b2836ab8d538de304cbb6729a7360729ea5a895d15a622"
dependencies = [
"half",
"serde",
]
[[package]]
name = "serde_derive"
version = "1.0.126"
@ -1632,7 +1821,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d022496b16281348b52d0e30ae99e01a73d737b2f45d38fed4edf79f9325a1d5"
dependencies = [
"discard",
"rustc_version",
"rustc_version 0.2.3",
"stdweb-derive",
"stdweb-internal-macros",
"stdweb-internal-runtime",
@ -1697,8 +1886,11 @@ version = "0.1.0"
dependencies = [
"anyhow",
"bls12_381",
"byteorder",
"bytes",
"criterion",
"dotenv",
"env_logger",
"ff",
"flexi_logger",
"futures 0.3.15",
@ -1739,6 +1931,24 @@ dependencies = [
"winapi",
]
[[package]]
name = "termcolor"
version = "1.1.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2dfed899f0eb03f32ee8c6a0aabdb8a7949659e3466561fc0adf54e26d88c5f4"
dependencies = [
"winapi-util",
]
[[package]]
name = "textwrap"
version = "0.11.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d326610f408c7a4eb6f51c37c330e496b08506c9457c9d34287ecc38809fb060"
dependencies = [
"unicode-width",
]
[[package]]
name = "thiserror"
version = "1.0.25"
@ -1808,6 +2018,16 @@ dependencies = [
"syn",
]
[[package]]
name = "tinytemplate"
version = "1.2.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "be4d6b5f19ff7664e8c98d03e2139cb510db9b0a60b55f8e8709b689d939b6bc"
dependencies = [
"serde",
"serde_json",
]
[[package]]
name = "tokio"
version = "1.7.0"
@ -2002,12 +2222,24 @@ version = "1.13.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "879f6906492a7cd215bfa4cf595b600146ccfac0c79bcbd1f3000162af5e8b06"
[[package]]
name = "ucd-trie"
version = "0.1.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "56dee185309b50d1f11bfedef0fe6d036842e3fb77413abef29f8f8d1c5d4c1c"
[[package]]
name = "unicode-segmentation"
version = "1.7.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bb0d2e7be6ae3a5fa87eed5fb451aff96f2573d2694942e40543ae0bbe19c796"
[[package]]
name = "unicode-width"
version = "0.1.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9337591893a19b88d8d87f2cec1e73fad5cdfd10e5a6f349f498ad6ea2ffb1e3"
[[package]]
name = "unicode-xid"
version = "0.2.2"
@ -2026,6 +2258,17 @@ version = "0.9.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5fecdca9a5291cc2b8dcf7dc02453fee791a280f3743cb0905f8822ae463b3fe"
[[package]]
name = "walkdir"
version = "2.3.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "808cf2735cd4b6866113f648b791c6adc5714537bc222d9347bb203386ffda56"
dependencies = [
"same-file",
"winapi",
"winapi-util",
]
[[package]]
name = "want"
version = "0.3.0"
@ -2142,6 +2385,15 @@ version = "0.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
[[package]]
name = "winapi-util"
version = "0.1.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178"
dependencies = [
"winapi",
]
[[package]]
name = "winapi-x86_64-pc-windows-gnu"
version = "0.4.0"
@ -2163,7 +2415,6 @@ checksum = "9fc79f4a1e39857fc00c3f662cbf2651c771f00e9c15fe2abc341806bd46bd71"
[[package]]
name = "zcash_client_backend"
version = "0.5.0"
source = "git+https://github.com/zcash/librustzcash.git?rev=d50bb12a97da768dc8f3ee39b81f84262103e6eb#d50bb12a97da768dc8f3ee39b81f84262103e6eb"
dependencies = [
"base64",
"bech32",
@ -2187,7 +2438,6 @@ dependencies = [
[[package]]
name = "zcash_note_encryption"
version = "0.0.0"
source = "git+https://github.com/zcash/librustzcash.git?rev=d50bb12a97da768dc8f3ee39b81f84262103e6eb#d50bb12a97da768dc8f3ee39b81f84262103e6eb"
dependencies = [
"blake2b_simd",
"byteorder",
@ -2201,7 +2451,6 @@ dependencies = [
[[package]]
name = "zcash_primitives"
version = "0.5.0"
source = "git+https://github.com/zcash/librustzcash.git?rev=d50bb12a97da768dc8f3ee39b81f84262103e6eb#d50bb12a97da768dc8f3ee39b81f84262103e6eb"
dependencies = [
"aes",
"bitvec 0.20.4",
@ -2221,8 +2470,6 @@ dependencies = [
"log",
"rand",
"rand_core",
"ripemd160",
"secp256k1",
"sha2",
"subtle",
"zcash_note_encryption",
@ -2231,7 +2478,6 @@ dependencies = [
[[package]]
name = "zcash_proofs"
version = "0.5.0"
source = "git+https://github.com/zcash/librustzcash.git?rev=d50bb12a97da768dc8f3ee39b81f84262103e6eb#d50bb12a97da768dc8f3ee39b81f84262103e6eb"
dependencies = [
"bellman",
"blake2b_simd",

View File

@ -6,8 +6,13 @@ edition = "2018"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[[bench]]
name = "scan_all"
harness = false
[dependencies]
dotenv = "0.15.0"
env_logger = "0.8.4"
anyhow = "1.0.40"
log = "0.4.14"
flexi_logger = {version="0.17.1", features = ["compress"]}
@ -25,19 +30,19 @@ futures = "0.3.15"
tonic = {version = "0.4.3", features = ["tls", "tls-roots"]}
prost = "0.7"
rayon = "1.5.1"
byteorder = "1.4.3"
[dependencies.zcash_client_backend]
git = "https://github.com/zcash/librustzcash.git"
rev = "d50bb12a97da768dc8f3ee39b81f84262103e6eb"
path = "../librustzcash/zcash_client_backend"
[dependencies.zcash_primitives]
git = "https://github.com/zcash/librustzcash.git"
features = [ "transparent-inputs" ]
rev = "d50bb12a97da768dc8f3ee39b81f84262103e6eb"
path = "../librustzcash/zcash_primitives"
[dependencies.zcash_proofs]
git = "https://github.com/zcash/librustzcash.git"
rev = "d50bb12a97da768dc8f3ee39b81f84262103e6eb"
path = "../librustzcash/zcash_proofs"
[build-dependencies]
tonic-build = "0.4.2"
[dev-dependencies]
criterion = "0.3.4"

4
benches/results.txt Normal file
View File

@ -0,0 +1,4 @@
scan all time: [14.108 s 14.246 s 14.370 s]
Found 2 outliers among 10 measurements (20.00%)
1 (10.00%) low mild
1 (10.00%) high mild

32
benches/scan_all.rs Normal file
View File

@ -0,0 +1,32 @@
use criterion::{criterion_group, criterion_main, Criterion};
use tokio::runtime::Runtime;
use sync::{scan_all, NETWORK};
use zcash_client_backend::encoding::decode_extended_full_viewing_key;
use zcash_primitives::consensus::Parameters;
fn scan(c: &mut Criterion) {
dotenv::dotenv().unwrap();
env_logger::init();
let ivk = dotenv::var("IVK").unwrap();
let fvk =
decode_extended_full_viewing_key(NETWORK.hrp_sapling_extended_full_viewing_key(), &ivk)
.unwrap()
.unwrap();
let ivk = fvk.fvk.vk.ivk();
let ivks = &vec![ivk];
c.bench_function("scan all", |b| {
b.iter(|| {
let r = Runtime::new().unwrap();
r.block_on(scan_all(ivks.clone().as_slice())).unwrap();
});
});
}
criterion_group!(
name = benches;
config = Criterion::default().sample_size(10);
targets = scan);
criterion_main!(benches);

155
out.log Normal file
View File

@ -0,0 +1,155 @@
Compiling sync v0.1.0 (/home/hanh/projects/sync)
warning: unused import: `zcash_primitives::transaction::components::OutputDescription`
--> src/chain.rs:9:5
|
9 | use zcash_primitives::transaction::components::OutputDescription;
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
= note: `#[warn(unused_imports)]` on by default
warning: unused import: `jubjub::Scalar`
--> src/chain.rs:10:5
|
10 | use jubjub::Scalar;
| ^^^^^^^^^^^^^^
warning: unused import: `tokio::runtime::Runtime`
--> src/chain.rs:14:5
|
14 | use tokio::runtime::Runtime;
| ^^^^^^^^^^^^^^^^^^^^^^^
warning: unused imports: `Arc`, `Mutex`
--> src/chain.rs:15:17
|
15 | use std::sync::{Arc, Mutex};
| ^^^ ^^^^^
warning: unused import: `tokio::task::JoinHandle`
--> src/chain.rs:16:5
|
16 | use tokio::task::JoinHandle;
| ^^^^^^^^^^^^^^^^^^^^^^^
warning: unused import: `futures::future::JoinAll`
--> src/chain.rs:17:5
|
17 | use futures::future::JoinAll;
| ^^^^^^^^^^^^^^^^^^^^^^^^
warning: unused import: `tokio::runtime::Runtime`
--> src/chain.rs:104:9
|
104 | use tokio::runtime::Runtime;
| ^^^^^^^^^^^^^^^^^^^^^^^
warning: unused import: `zcash_primitives::transaction::components::OutputDescription`
--> src/chain.rs:9:5
|
9 | use zcash_primitives::transaction::components::OutputDescription;
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
= note: `#[warn(unused_imports)]` on by default
warning: unused import: `jubjub::Scalar`
--> src/chain.rs:10:5
|
10 | use jubjub::Scalar;
| ^^^^^^^^^^^^^^
warning: unused import: `tokio::runtime::Runtime`
--> src/chain.rs:14:5
|
14 | use tokio::runtime::Runtime;
| ^^^^^^^^^^^^^^^^^^^^^^^
warning: unused imports: `Arc`, `Mutex`
--> src/chain.rs:15:17
|
15 | use std::sync::{Arc, Mutex};
| ^^^ ^^^^^
warning: unused import: `tokio::task::JoinHandle`
--> src/chain.rs:16:5
|
16 | use tokio::task::JoinHandle;
| ^^^^^^^^^^^^^^^^^^^^^^^
warning: unused import: `futures::future::JoinAll`
--> src/chain.rs:17:5
|
17 | use futures::future::JoinAll;
| ^^^^^^^^^^^^^^^^^^^^^^^^
warning: constant is never used: `MAX_CHUNK`
--> src/chain.rs:20:1
|
20 | const MAX_CHUNK: u32 = 50000;
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
= note: `#[warn(dead_code)]` on by default
warning: function is never used: `get_latest_height`
--> src/chain.rs:22:14
|
22 | pub async fn get_latest_height(
| ^^^^^^^^^^^^^^^^^
warning: function is never used: `download_chain`
--> src/chain.rs:32:14
|
32 | pub async fn download_chain(
| ^^^^^^^^^^^^^^
warning: struct is never constructed: `DecryptNode`
--> src/chain.rs:55:8
|
55 | struct DecryptNode {
| ^^^^^^^^^^^
warning: function is never used: `decrypt_notes`
--> src/chain.rs:59:4
|
59 | fn decrypt_notes(block: &CompactBlock, ivks: &[SaplingIvk]) {
| ^^^^^^^^^^^^^
warning: associated function is never used: `new`
--> src/chain.rs:84:12
|
84 | pub fn new(ivks: Vec<SaplingIvk>) -> DecryptNode {
| ^^^
warning: associated function is never used: `decrypt_blocks`
--> src/chain.rs:89:12
|
89 | pub fn decrypt_blocks(&self, blocks: &[CompactBlock]) {
| ^^^^^^^^^^^^^^
warning: 13 warnings emitted
warning: 7 warnings emitted
Finished release [optimized] target(s) in 5.46s
Running target/release/deps/sync-40a700cf0ceeec0a
419201
469202
519203
569204
619205
669206
719207
769208
819209
869210
919211
969212
1019213
1069214
1119215
1169216
1219217
1269218
Download chain: 5629 ms
Decrypt Notes: 5917 ms
Running target/release/deps/sync-0273dad5347eddbd
Doc-tests sync

View File

@ -0,0 +1 @@
{"group_id":"scan all","function_id":null,"value_str":null,"throughput":null,"full_id":"scan all","directory_name":"scan all","title":"scan all"}

View File

@ -0,0 +1 @@
{"mean":{"confidence_interval":{"confidence_level":0.95,"lower_bound":14108152718.8,"upper_bound":14370408508.0},"point_estimate":14246432770.5,"standard_error":66652427.41497482},"median":{"confidence_interval":{"confidence_level":0.95,"lower_bound":14168851704.0,"upper_bound":14373090215.5},"point_estimate":14240423154.5,"standard_error":54885063.868419364},"median_abs_dev":{"confidence_interval":{"confidence_level":0.95,"lower_bound":31818705.17490506,"upper_bound":333947948.45060974},"point_estimate":120754458.69297981,"standard_error":75571123.53948104},"slope":null,"std_dev":{"confidence_interval":{"confidence_level":0.95,"lower_bound":77029147.73519874,"upper_bound":313070155.1646717},"point_estimate":221212708.77470955,"standard_error":61920450.102123074}}

11
report/scan/base/raw.csv Normal file
View File

@ -0,0 +1,11 @@
group,function,value,throughput_num,throughput_type,sample_measured_value,unit,iteration_count
scan all,,,,,14435894614.0,ns,1
scan all,,,,,14147390281.0,ns,1
scan all,,,,,13760811376.0,ns,1
scan all,,,,,14224292953.0,ns,1
scan all,,,,,14175213190.0,ns,1
scan all,,,,,14349106401.0,ns,1
scan all,,,,,14256553356.0,ns,1
scan all,,,,,14614466590.0,ns,1
scan all,,,,,14190313127.0,ns,1
scan all,,,,,14310285817.0,ns,1
1 group function value throughput_num throughput_type sample_measured_value unit iteration_count
2 scan all 14435894614.0 ns 1
3 scan all 14147390281.0 ns 1
4 scan all 13760811376.0 ns 1
5 scan all 14224292953.0 ns 1
6 scan all 14175213190.0 ns 1
7 scan all 14349106401.0 ns 1
8 scan all 14256553356.0 ns 1
9 scan all 14614466590.0 ns 1
10 scan all 14190313127.0 ns 1
11 scan all 14310285817.0 ns 1

View File

@ -0,0 +1 @@
{"sampling_mode":"Flat","iters":[1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0],"times":[14435894614.0,14147390281.0,13760811376.0,14224292953.0,14175213190.0,14349106401.0,14256553356.0,14614466590.0,14190313127.0,14310285817.0]}

View File

@ -0,0 +1 @@
[13697748932.0,13938368553.125,14580020876.125,14820640497.25]

View File

@ -0,0 +1 @@
{"group_id":"scan all","function_id":null,"value_str":null,"throughput":null,"full_id":"scan all","directory_name":"scan all","title":"scan all"}

View File

@ -0,0 +1 @@
{"mean":{"confidence_interval":{"confidence_level":0.95,"lower_bound":14108152718.8,"upper_bound":14370408508.0},"point_estimate":14246432770.5,"standard_error":66652427.41497482},"median":{"confidence_interval":{"confidence_level":0.95,"lower_bound":14168851704.0,"upper_bound":14373090215.5},"point_estimate":14240423154.5,"standard_error":54885063.868419364},"median_abs_dev":{"confidence_interval":{"confidence_level":0.95,"lower_bound":31818705.17490506,"upper_bound":333947948.45060974},"point_estimate":120754458.69297981,"standard_error":75571123.53948104},"slope":null,"std_dev":{"confidence_interval":{"confidence_level":0.95,"lower_bound":77029147.73519874,"upper_bound":313070155.1646717},"point_estimate":221212708.77470955,"standard_error":61920450.102123074}}

11
report/scan/new/raw.csv Normal file
View File

@ -0,0 +1,11 @@
group,function,value,throughput_num,throughput_type,sample_measured_value,unit,iteration_count
scan all,,,,,14435894614.0,ns,1
scan all,,,,,14147390281.0,ns,1
scan all,,,,,13760811376.0,ns,1
scan all,,,,,14224292953.0,ns,1
scan all,,,,,14175213190.0,ns,1
scan all,,,,,14349106401.0,ns,1
scan all,,,,,14256553356.0,ns,1
scan all,,,,,14614466590.0,ns,1
scan all,,,,,14190313127.0,ns,1
scan all,,,,,14310285817.0,ns,1
1 group function value throughput_num throughput_type sample_measured_value unit iteration_count
2 scan all 14435894614.0 ns 1
3 scan all 14147390281.0 ns 1
4 scan all 13760811376.0 ns 1
5 scan all 14224292953.0 ns 1
6 scan all 14175213190.0 ns 1
7 scan all 14349106401.0 ns 1
8 scan all 14256553356.0 ns 1
9 scan all 14614466590.0 ns 1
10 scan all 14190313127.0 ns 1
11 scan all 14310285817.0 ns 1

View File

@ -0,0 +1 @@
{"sampling_mode":"Flat","iters":[1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0],"times":[14435894614.0,14147390281.0,13760811376.0,14224292953.0,14175213190.0,14349106401.0,14256553356.0,14614466590.0,14190313127.0,14310285817.0]}

View File

@ -0,0 +1 @@
[13697748932.0,13938368553.125,14580020876.125,14820640497.25]

View File

@ -0,0 +1,92 @@
<svg width="960" height="540" viewBox="0 0 960 540" xmlns="http://www.w3.org/2000/svg">
<text x="480" y="32" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="16.129032258064516" opacity="1" fill="#000000">
scan all:MAD
</text>
<text x="27" y="263" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000" transform="rotate(270, 27, 263)">
Density (a.u.)
</text>
<text x="510" y="513" dy="-0.5ex" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
Average time (ms)
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="86,53 86,473 "/>
<text x="77" y="427" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
0.001
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,427 86,427 "/>
<text x="77" y="378" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
0.002
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,378 86,378 "/>
<text x="77" y="329" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
0.003
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,329 86,329 "/>
<text x="77" y="281" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
0.004
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,281 86,281 "/>
<text x="77" y="232" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
0.005
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,232 86,232 "/>
<text x="77" y="183" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
0.006
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,183 86,183 "/>
<text x="77" y="134" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
0.007
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,134 86,134 "/>
<text x="77" y="86" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
0.008
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,86 86,86 "/>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="87,473 933,473 "/>
<text x="91" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
0
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="91,473 91,478 "/>
<text x="205" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
50
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="205,473 205,478 "/>
<text x="320" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
100
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="320,473 320,478 "/>
<text x="434" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
150
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="434,473 434,478 "/>
<text x="549" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
200
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="549,473 549,478 "/>
<text x="663" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
250
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="663,473 663,478 "/>
<text x="778" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
300
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="778,473 778,478 "/>
<text x="892" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
350
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="892,473 892,478 "/>
<polyline fill="none" opacity="1" stroke="#1F78B4" stroke-width="1" points="87,472 88,471 90,471 92,470 93,470 95,470 97,469 98,468 100,468 102,467 103,467 105,466 107,465 109,464 110,463 112,462 114,461 115,459 117,458 119,456 120,455 122,453 124,451 125,449 127,447 129,444 131,442 132,439 134,437 136,434 137,431 139,428 141,426 142,423 144,420 146,417 148,414 149,411 151,408 153,406 154,403 156,400 158,397 159,395 161,392 163,389 164,387 166,384 168,381 170,378 171,375 173,372 175,369 176,366 178,362 180,358 181,354 183,350 185,346 187,341 188,336 190,331 192,325 193,319 195,313 197,307 198,300 200,293 202,287 203,280 205,273 207,266 209,259 210,252 212,246 214,239 215,234 217,228 219,223 220,218 222,214 224,211 226,208 227,206 229,204 231,203 232,203 234,203 236,203 237,204 239,205 241,206 242,207 244,207 246,208 248,209 249,209 251,209 253,208 254,207 256,205 258,202 259,199 261,196 263,192 265,188 266,183 268,178 270,172 271,167 273,161 275,155 276,149 278,144 280,138 281,133 283,127 285,122 287,118 288,113 290,109 292,106 293,103 295,100 297,99 298,97 300,97 302,97 304,98 305,99 307,101 309,104 310,108 312,113 314,118 315,123 317,129 319,135 320,142 322,148 324,154 326,160 327,166 329,171 331,175 332,179 334,181 336,183 337,183 339,182 341,180 343,177 344,173 346,168 348,162 349,155 351,148 353,141 354,133 356,126 358,119 359,113 361,107 363,101 365,97 366,94 368,91 370,90 371,90 373,91 375,93 376,96 378,101 380,106 381,112 383,118 385,125 387,133 388,141 390,150 392,158 393,167 395,175 397,184 398,192 400,199 402,206 404,213 405,218 407,223 409,227 410,230 412,233 414,234 415,235 417,235 419,234 420,232 422,230 424,227 426,225 427,222 429,219 431,217 432,214 434,213 436,212 437,211 439,212 441,213 443,215 444,218 446,222 448,227 449,233 451,240 453,247 454,255 456,263 458,271 459,280 461,289 463,298 465,306 466,314 468,322 470,329 471,335 473,341 475,346 476,350 478,353 480,355 482,356 483,357 485,356 487,355 488,354 490,352 492,349 493,346 495,343 497,339 498,336 500,333 502,330 504,327 505,325 507,323 509,321 510,320 512,320 514,320 515,321 517,322 519,323 521,325 522,327 524,330 526,333 527,336 529,339 531,343 532,346 534,350 536,353 537,357 539,360 541,363 543,366 544,369 546,372 548,374 549,376 551,377 553,379 554,380 556,380 558,381 560,380 561,380 563,380 565,379 566,378 568,377 570,376 571,375 573,374 575,374 576,373 578,373 580,373 582,374 583,375 585,376 587,377 588,379 590,382 592,384 593,387 595,390 597,393 599,396 600,399 602,403 604,406 605,409 607,413 609,416 610,419 612,422 614,424 615,427 617,429 619,431 621,433 622,434 624,436 626,437 627,438 629,439 631,440 632,441 634,441 636,442 638,442 639,442 641,442 643,442 644,443 646,443 648,443 649,443 651,443 653,443 654,443 656,444 658,444 660,444 661,445 663,445 665,446 666,446 668,447 670,447 671,447 673,448 675,448 676,448 678,448 680,449 682,449 683,449 685,449 687,449 688,448 690,448 692,448 693,448 695,447 697,447 699,447 700,447 702,447 704,446 705,446 707,446 709,446 710,447 712,447 714,447 715,447 717,448 719,448 721,449 722,449 724,450 726,450 727,451 729,451 731,452 732,452 734,453 736,453 738,454 739,454 741,455 743,455 744,455 746,456 748,456 749,457 751,457 753,457 754,458 756,458 758,458 760,459 761,459 763,459 765,459 766,460 768,460 770,460 771,460 773,460 775,460 777,460 778,459 780,459 782,459 783,458 785,458 787,458 788,457 790,457 792,456 793,456 795,455 797,455 799,454 800,454 802,454 804,453 805,453 807,453 809,453 810,453 812,453 814,453 816,453 817,453 819,453 821,454 822,454 824,454 826,455 827,455 829,455 831,456 832,456 834,456 836,457 838,457 839,457 841,458 843,458 844,458 846,459 848,459 849,459 851,459 853,459 855,459 856,459 858,459 860,459 861,459 863,459 865,459 866,459 868,458 870,458 871,458 873,458 875,457 877,457 878,457 880,457 882,457 883,457 885,457 887,458 888,458 890,458 892,459 894,459 895,460 897,460 899,461 900,461 902,462 904,462 905,463 907,463 909,464 910,464 912,465 914,465 916,466 917,466 919,466 921,466 922,467 924,467 926,467 927,467 929,467 931,468 933,468 "/>
<polygon opacity="0.25" fill="#1F78B4" points="164,387 166,384 168,381 170,378 171,375 173,372 175,369 176,366 178,362 180,358 181,354 183,350 185,346 187,341 188,336 190,331 192,325 193,319 195,313 197,307 198,300 200,293 202,287 203,280 205,273 207,266 209,259 210,252 212,246 214,239 215,234 217,228 219,223 220,218 222,214 224,211 226,208 227,206 229,204 231,203 232,203 234,203 236,203 237,204 239,205 241,206 242,207 244,207 246,208 248,209 249,209 251,209 253,208 254,207 256,205 258,202 259,199 261,196 263,192 265,188 266,183 268,178 270,172 271,167 273,161 275,155 276,149 278,144 280,138 281,133 283,127 285,122 287,118 288,113 290,109 292,106 293,103 295,100 297,99 298,97 300,97 302,97 304,98 305,99 307,101 309,104 310,108 312,113 314,118 315,123 317,129 319,135 320,142 322,148 324,154 326,160 327,166 329,171 331,175 332,179 334,181 336,183 337,183 339,182 341,180 343,177 344,173 346,168 348,162 349,155 351,148 353,141 354,133 356,126 358,119 359,113 361,107 363,101 365,97 366,94 368,91 370,90 371,90 373,91 375,93 376,96 378,101 380,106 381,112 383,118 385,125 387,133 388,141 390,150 392,158 393,167 395,175 397,184 398,192 400,199 402,206 404,213 405,218 407,223 409,227 410,230 412,233 414,234 415,235 417,235 419,234 420,232 422,230 424,227 426,225 427,222 429,219 431,217 432,214 434,213 436,212 437,211 439,212 441,213 443,215 444,218 446,222 448,227 449,233 451,240 453,247 454,255 456,263 458,271 459,280 461,289 463,298 465,306 466,314 468,322 470,329 471,335 473,341 475,346 476,350 478,353 480,355 482,356 483,357 485,356 487,355 488,354 490,352 492,349 493,346 495,343 497,339 498,336 500,333 502,330 504,327 505,325 507,323 509,321 510,320 512,320 514,320 515,321 517,322 519,323 521,325 522,327 524,330 526,333 527,336 529,339 531,343 532,346 534,350 536,353 537,357 539,360 541,363 543,366 544,369 546,372 548,374 549,376 551,377 553,379 554,380 556,380 558,381 560,380 561,380 563,380 565,379 566,378 568,377 570,376 571,375 573,374 575,374 576,373 578,373 580,373 582,374 583,375 585,376 587,377 588,379 590,382 592,384 593,387 595,390 597,393 599,396 600,399 602,403 604,406 605,409 607,413 609,416 610,419 612,422 614,424 615,427 617,429 619,431 621,433 622,434 624,436 626,437 627,438 629,439 631,440 632,441 634,441 636,442 638,442 639,442 641,442 643,442 644,443 646,443 648,443 649,443 651,443 653,443 654,443 656,444 658,444 660,444 661,445 663,445 665,446 666,446 668,447 670,447 671,447 673,448 675,448 676,448 678,448 680,449 682,449 683,449 685,449 687,449 688,448 690,448 692,448 693,448 695,447 697,447 699,447 700,447 702,447 704,446 705,446 707,446 709,446 710,447 712,447 714,447 715,447 717,448 719,448 721,449 722,449 724,450 726,450 727,451 729,451 731,452 732,452 734,453 736,453 738,454 739,454 741,455 743,455 744,455 746,456 748,456 749,457 751,457 753,457 754,458 756,458 758,458 760,459 761,459 763,459 765,459 766,460 768,460 770,460 771,460 773,460 775,460 777,460 778,459 780,459 782,459 783,458 785,458 787,458 788,457 790,457 792,456 793,456 795,455 797,455 799,454 800,454 802,454 804,453 805,453 807,453 809,453 810,453 812,453 814,453 816,453 817,453 819,453 821,454 822,454 824,454 826,455 827,455 829,455 831,456 832,456 834,456 836,457 838,457 839,457 841,458 843,458 844,458 846,459 848,459 849,459 851,459 853,459 853,473 164,473 "/>
<polyline fill="none" opacity="1" stroke="#1F78B4" stroke-width="3" points="367,473 367,92 "/>
<text x="798" y="68" dy="0.76em" text-anchor="start" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
Bootstrap distribution
</text>
<text x="798" y="83" dy="0.76em" text-anchor="start" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
Confidence interval
</text>
<text x="798" y="98" dy="0.76em" text-anchor="start" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
Point estimate
</text>
<polyline fill="none" opacity="1" stroke="#1F78B4" stroke-width="1" points="768,73 788,73 "/>
<rect x="768" y="83" width="20" height="10" opacity="0.25" fill="#1F78B4" stroke="none"/>
<polyline fill="none" opacity="1" stroke="#1F78B4" stroke-width="1" points="768,103 788,103 "/>
</svg>

After

Width:  |  Height:  |  Size: 13 KiB

80
report/scan/report/SD.svg Normal file
View File

@ -0,0 +1,80 @@
<svg width="960" height="540" viewBox="0 0 960 540" xmlns="http://www.w3.org/2000/svg">
<text x="480" y="32" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="16.129032258064516" opacity="1" fill="#000000">
scan all:SD
</text>
<text x="27" y="263" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000" transform="rotate(270, 27, 263)">
Density (a.u.)
</text>
<text x="510" y="513" dy="-0.5ex" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
Average time (ms)
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="86,53 86,473 "/>
<text x="77" y="440" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
0.001
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,440 86,440 "/>
<text x="77" y="389" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
0.002
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,389 86,389 "/>
<text x="77" y="338" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
0.003
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,338 86,338 "/>
<text x="77" y="287" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
0.004
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,287 86,287 "/>
<text x="77" y="236" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
0.005
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,236 86,236 "/>
<text x="77" y="185" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
0.006
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,185 86,185 "/>
<text x="77" y="134" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
0.007
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,134 86,134 "/>
<text x="77" y="84" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
0.008
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,84 86,84 "/>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="87,473 933,473 "/>
<text x="231" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
100
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="231,473 231,478 "/>
<text x="377" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
150
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="377,473 377,478 "/>
<text x="524" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
200
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="524,473 524,478 "/>
<text x="671" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
250
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="671,473 671,478 "/>
<text x="817" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
300
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="817,473 817,478 "/>
<polyline fill="none" opacity="1" stroke="#1F78B4" stroke-width="1" points="87,471 88,470 90,470 92,469 93,468 95,467 97,466 98,465 100,464 102,463 103,462 105,461 107,460 109,459 110,458 112,457 114,456 115,455 117,453 119,452 120,451 122,450 124,448 125,447 127,446 129,444 131,443 132,442 134,441 136,439 137,438 139,437 141,435 142,434 144,433 146,431 148,430 149,428 151,427 153,425 154,424 156,422 158,420 159,418 161,416 163,414 164,412 166,410 168,408 170,405 171,403 173,401 175,398 176,395 178,393 180,390 181,388 183,385 185,383 187,381 188,378 190,376 192,374 193,372 195,371 197,369 198,368 200,367 202,366 203,365 205,364 207,364 209,363 210,363 212,363 214,364 215,364 217,365 219,366 220,367 222,368 224,369 226,371 227,372 229,374 231,376 232,378 234,380 236,382 237,384 239,387 241,389 242,391 244,393 246,396 248,398 249,400 251,403 253,405 254,407 256,409 258,411 259,413 261,415 263,416 265,418 266,419 268,420 270,421 271,422 273,423 275,423 276,424 278,424 280,423 281,423 283,422 285,421 287,419 288,418 290,416 292,413 293,411 295,408 297,404 298,401 300,397 302,393 304,388 305,383 307,378 309,372 310,367 312,361 314,355 315,348 317,342 319,335 320,328 322,321 324,314 326,307 327,300 329,293 331,286 332,279 334,273 336,267 337,261 339,255 341,250 343,245 344,240 346,236 348,232 349,229 351,226 353,224 354,222 356,220 358,220 359,219 361,219 363,220 365,220 366,222 368,223 370,225 371,227 373,229 375,232 376,234 378,237 380,240 381,243 383,245 385,248 387,251 388,253 390,255 392,257 393,259 395,261 397,262 398,263 400,264 402,265 404,265 405,265 407,264 409,263 410,262 412,261 414,259 415,257 417,255 419,252 420,249 422,246 424,243 426,239 427,236 429,232 431,228 432,225 434,221 436,217 437,213 439,210 441,207 443,204 444,201 446,198 448,196 449,194 451,192 453,191 454,191 456,190 458,190 459,191 461,192 463,194 465,196 466,198 468,200 470,203 471,207 473,210 475,214 476,218 478,222 480,226 482,231 483,235 485,239 487,244 488,248 490,252 492,257 493,261 495,265 497,268 498,272 500,275 502,279 504,282 505,284 507,287 509,289 510,291 512,293 514,294 515,295 517,295 519,295 521,295 522,294 524,292 526,290 527,288 529,285 531,281 532,277 534,273 536,268 537,262 539,256 541,249 543,243 544,235 546,228 548,220 549,212 551,203 553,195 554,186 556,178 558,169 560,161 561,153 563,144 565,137 566,129 568,123 570,116 571,110 573,105 575,101 576,97 578,95 580,93 582,92 583,91 585,92 587,94 588,96 590,99 592,103 593,108 595,114 597,120 599,126 600,133 602,141 604,148 605,156 607,163 609,171 610,178 612,186 614,192 615,198 617,204 619,209 621,213 622,217 624,220 626,222 627,223 629,223 631,222 632,221 634,219 636,216 638,213 639,209 641,205 643,201 644,196 646,192 648,187 649,183 651,179 653,176 654,173 656,170 658,169 660,168 661,167 663,167 665,169 666,170 668,173 670,175 671,179 673,183 675,187 676,192 678,196 680,201 682,206 683,211 685,216 687,220 688,224 690,228 692,232 693,236 695,239 697,242 699,244 700,246 702,248 704,250 705,251 707,253 709,254 710,255 712,257 714,258 715,259 717,261 719,263 721,265 722,267 724,270 726,272 727,275 729,279 731,282 732,286 734,290 736,294 738,299 739,303 741,308 743,312 744,317 746,322 748,326 749,331 751,335 753,339 754,343 756,347 758,350 760,354 761,357 763,360 765,362 766,364 768,366 770,368 771,369 773,370 775,371 777,371 778,372 780,372 782,372 783,372 785,372 787,372 788,371 790,371 792,371 793,371 795,371 797,371 799,372 800,372 802,372 804,373 805,374 807,375 809,376 810,378 812,380 814,381 816,383 817,385 819,388 821,390 822,393 824,395 826,398 827,401 829,403 831,406 832,409 834,412 836,414 838,417 839,419 841,421 843,424 844,426 846,427 848,429 849,431 851,432 853,433 855,434 856,436 858,436 860,437 861,438 863,439 865,439 866,440 868,441 870,441 871,442 873,443 875,443 877,444 878,445 880,445 882,446 883,447 885,448 887,449 888,450 890,451 892,452 894,453 895,454 897,455 899,455 900,456 902,457 904,458 905,459 907,460 909,461 910,461 912,462 914,463 916,464 917,465 919,465 921,466 922,467 924,468 926,468 927,469 929,470 931,471 933,472 "/>
<polygon opacity="0.25" fill="#1F78B4" points="164,412 166,410 168,408 170,405 171,403 173,401 175,398 176,395 178,393 180,390 181,388 183,385 185,383 187,381 188,378 190,376 192,374 193,372 195,371 197,369 198,368 200,367 202,366 203,365 205,364 207,364 209,363 210,363 212,363 214,364 215,364 217,365 219,366 220,367 222,368 224,369 226,371 227,372 229,374 231,376 232,378 234,380 236,382 237,384 239,387 241,389 242,391 244,393 246,396 248,398 249,400 251,403 253,405 254,407 256,409 258,411 259,413 261,415 263,416 265,418 266,419 268,420 270,421 271,422 273,423 275,423 276,424 278,424 280,423 281,423 283,422 285,421 287,419 288,418 290,416 292,413 293,411 295,408 297,404 298,401 300,397 302,393 304,388 305,383 307,378 309,372 310,367 312,361 314,355 315,348 317,342 319,335 320,328 322,321 324,314 326,307 327,300 329,293 331,286 332,279 334,273 336,267 337,261 339,255 341,250 343,245 344,240 346,236 348,232 349,229 351,226 353,224 354,222 356,220 358,220 359,219 361,219 363,220 365,220 366,222 368,223 370,225 371,227 373,229 375,232 376,234 378,237 380,240 381,243 383,245 385,248 387,251 388,253 390,255 392,257 393,259 395,261 397,262 398,263 400,264 402,265 404,265 405,265 407,264 409,263 410,262 412,261 414,259 415,257 417,255 419,252 420,249 422,246 424,243 426,239 427,236 429,232 431,228 432,225 434,221 436,217 437,213 439,210 441,207 443,204 444,201 446,198 448,196 449,194 451,192 453,191 454,191 456,190 458,190 459,191 461,192 463,194 465,196 466,198 468,200 470,203 471,207 473,210 475,214 476,218 478,222 480,226 482,231 483,235 485,239 487,244 488,248 490,252 492,257 493,261 495,265 497,268 498,272 500,275 502,279 504,282 505,284 507,287 509,289 510,291 512,293 514,294 515,295 517,295 519,295 521,295 522,294 524,292 526,290 527,288 529,285 531,281 532,277 534,273 536,268 537,262 539,256 541,249 543,243 544,235 546,228 548,220 549,212 551,203 553,195 554,186 556,178 558,169 560,161 561,153 563,144 565,137 566,129 568,123 570,116 571,110 573,105 575,101 576,97 578,95 580,93 582,92 583,91 585,92 587,94 588,96 590,99 592,103 593,108 595,114 597,120 599,126 600,133 602,141 604,148 605,156 607,163 609,171 610,178 612,186 614,192 615,198 617,204 619,209 621,213 622,217 624,220 626,222 627,223 629,223 631,222 632,221 634,219 636,216 638,213 639,209 641,205 643,201 644,196 646,192 648,187 649,183 651,179 653,176 654,173 656,170 658,169 660,168 661,167 663,167 665,169 666,170 668,173 670,175 671,179 673,183 675,187 676,192 678,196 680,201 682,206 683,211 685,216 687,220 688,224 690,228 692,232 693,236 695,239 697,242 699,244 700,246 702,248 704,250 705,251 707,253 709,254 710,255 712,257 714,258 715,259 717,261 719,263 721,265 722,267 724,270 726,272 727,275 729,279 731,282 732,286 734,290 736,294 738,299 739,303 741,308 743,312 744,317 746,322 748,326 749,331 751,335 753,339 754,343 756,347 758,350 760,354 761,357 763,360 765,362 766,364 768,366 770,368 771,369 773,370 775,371 777,371 778,372 780,372 782,372 783,372 785,372 787,372 788,371 790,371 792,371 793,371 795,371 797,371 799,372 800,372 802,372 804,373 805,374 807,375 809,376 810,378 812,380 814,381 816,383 817,385 819,388 821,390 822,393 824,395 826,398 827,401 829,403 831,406 832,409 834,412 836,414 838,417 839,419 841,421 843,424 844,426 846,427 848,429 849,431 851,432 853,433 853,473 164,473 "/>
<polyline fill="none" opacity="1" stroke="#1F78B4" stroke-width="3" points="586,473 586,93 "/>
<text x="798" y="68" dy="0.76em" text-anchor="start" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
Bootstrap distribution
</text>
<text x="798" y="83" dy="0.76em" text-anchor="start" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
Confidence interval
</text>
<text x="798" y="98" dy="0.76em" text-anchor="start" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
Point estimate
</text>
<polyline fill="none" opacity="1" stroke="#1F78B4" stroke-width="1" points="768,73 788,73 "/>
<rect x="768" y="83" width="20" height="10" opacity="0.25" fill="#1F78B4" stroke="none"/>
<polyline fill="none" opacity="1" stroke="#1F78B4" stroke-width="1" points="768,103 788,103 "/>
</svg>

After

Width:  |  Height:  |  Size: 12 KiB

View File

@ -0,0 +1,193 @@
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>scan all - Criterion.rs</title>
<style type="text/css">
body {
font: 14px Helvetica Neue;
text-rendering: optimizelegibility;
}
.body {
width: 960px;
margin: auto;
}
th {
font-weight: 200
}
th,
td {
padding-right: 3px;
padding-bottom: 3px;
}
a:link {
color: #1F78B4;
text-decoration: none;
}
th.ci-bound {
opacity: 0.6
}
td.ci-bound {
opacity: 0.5
}
.stats {
width: 80%;
margin: auto;
display: flex;
}
.additional_stats {
flex: 0 0 60%
}
.additional_plots {
flex: 1
}
h2 {
font-size: 36px;
font-weight: 300;
}
h3 {
font-size: 24px;
font-weight: 300;
}
#footer {
height: 40px;
background: #888;
color: white;
font-size: larger;
font-weight: 300;
}
#footer a {
color: white;
text-decoration: underline;
}
#footer p {
text-align: center
}
</style>
</head>
<body>
<div class="body">
<h2>scan all</h2>
<div class="absolute">
<section class="plots">
<table width="100%">
<tbody>
<tr>
<td>
<a href="pdf.svg">
<img src="pdf_small.svg" alt="PDF of Slope" width="450" height="300" />
</a>
</td>
<td>
<a href="iteration_times.svg">
<img src="iteration_times_small.svg" alt="Iteration Times" width="450" height="300" />
</a>
</td>
</tr>
</tbody>
</table>
</section>
<section class="stats">
<div class="additional_stats">
<h4>Additional Statistics:</h4>
<table>
<thead>
<tr>
<th></th>
<th title="0.95 confidence level" class="ci-bound">Lower bound</th>
<th>Estimate</th>
<th title="0.95 confidence level" class="ci-bound">Upper bound</th>
</tr>
</thead>
<tbody>
<tr>
<td>R&#xb2;</td>
<td class="ci-bound">0.0064137</td>
<td>0.0091727</td>
<td class="ci-bound">0.0068159</td>
</tr>
<tr>
<td>Mean</td>
<td class="ci-bound">14.108 s</td>
<td>14.246 s</td>
<td class="ci-bound">14.370 s</td>
</tr>
<tr>
<td title="Standard Deviation">Std. Dev.</td>
<td class="ci-bound">77.029 ms</td>
<td>221.21 ms</td>
<td class="ci-bound">313.07 ms</td>
</tr>
<tr>
<td>Median</td>
<td class="ci-bound">14.169 s</td>
<td>14.240 s</td>
<td class="ci-bound">14.373 s</td>
</tr>
<tr>
<td title="Median Absolute Deviation">MAD</td>
<td class="ci-bound">31.819 ms</td>
<td>120.75 ms</td>
<td class="ci-bound">333.95 ms</td>
</tr>
</tbody>
</table>
</div>
<div class="additional_plots">
<h4>Additional Plots:</h4>
<ul>
<li>
<a href="typical.svg">Typical</a>
</li>
<li>
<a href="mean.svg">Mean</a>
</li>
<li>
<a href="SD.svg">Std. Dev.</a>
</li>
<li>
<a href="median.svg">Median</a>
</li>
<li>
<a href="MAD.svg">MAD</a>
</li>
</ul>
</div>
</section>
<section class="explanation">
<h4>Understanding this report:</h4>
<p>The plot on the left displays the average time per iteration for this benchmark. The shaded region
shows the estimated probability of an iteration taking a certain amount of time, while the line
shows the mean. Click on the plot for a larger view showing the outliers.</p>
<p>The plot on the right shows the average time per iteration for the samples. Each point
represents one sample.</p>
<p>See <a href="https://bheisler.github.io/criterion.rs/book/user_guide/command_line_output.html#additional-statistics">the
documentation</a> for more details on the additional statistics.</p>
</section>
</div>
</div>
<div id="footer">
<p>This report was generated by
<a href="https://github.com/bheisler/criterion.rs">Criterion.rs</a>, a statistics-driven benchmarking
library in Rust.</p>
</div>
</body>
</html>

View File

@ -0,0 +1,119 @@
<svg width="960" height="540" viewBox="0 0 960 540" xmlns="http://www.w3.org/2000/svg">
<text x="480" y="32" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="16.129032258064516" opacity="1" fill="#000000">
scan all
</text>
<text x="27" y="263" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000" transform="rotate(270, 27, 263)">
Average Iteration Time (s)
</text>
<line opacity="0.2" stroke="#000000" stroke-width="1" x1="171" y1="472" x2="171" y2="52"/>
<line opacity="0.2" stroke="#000000" stroke-width="1" x1="256" y1="472" x2="256" y2="52"/>
<line opacity="0.2" stroke="#000000" stroke-width="1" x1="340" y1="472" x2="340" y2="52"/>
<line opacity="0.2" stroke="#000000" stroke-width="1" x1="425" y1="472" x2="425" y2="52"/>
<line opacity="0.2" stroke="#000000" stroke-width="1" x1="510" y1="472" x2="510" y2="52"/>
<line opacity="0.2" stroke="#000000" stroke-width="1" x1="594" y1="472" x2="594" y2="52"/>
<line opacity="0.2" stroke="#000000" stroke-width="1" x1="679" y1="472" x2="679" y2="52"/>
<line opacity="0.2" stroke="#000000" stroke-width="1" x1="763" y1="472" x2="763" y2="52"/>
<line opacity="0.2" stroke="#000000" stroke-width="1" x1="848" y1="472" x2="848" y2="52"/>
<line opacity="0.2" stroke="#000000" stroke-width="1" x1="933" y1="472" x2="933" y2="52"/>
<line opacity="0.2" stroke="#000000" stroke-width="1" x1="87" y1="452" x2="933" y2="452"/>
<line opacity="0.2" stroke="#000000" stroke-width="1" x1="87" y1="403" x2="933" y2="403"/>
<line opacity="0.2" stroke="#000000" stroke-width="1" x1="87" y1="354" x2="933" y2="354"/>
<line opacity="0.2" stroke="#000000" stroke-width="1" x1="87" y1="305" x2="933" y2="305"/>
<line opacity="0.2" stroke="#000000" stroke-width="1" x1="87" y1="255" x2="933" y2="255"/>
<line opacity="0.2" stroke="#000000" stroke-width="1" x1="87" y1="206" x2="933" y2="206"/>
<line opacity="0.2" stroke="#000000" stroke-width="1" x1="87" y1="157" x2="933" y2="157"/>
<line opacity="0.2" stroke="#000000" stroke-width="1" x1="87" y1="108" x2="933" y2="108"/>
<line opacity="0.2" stroke="#000000" stroke-width="1" x1="87" y1="59" x2="933" y2="59"/>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="86,53 86,473 "/>
<text x="77" y="452" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
13.8
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,452 86,452 "/>
<text x="77" y="403" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
13.9
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,403 86,403 "/>
<text x="77" y="354" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
14.0
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,354 86,354 "/>
<text x="77" y="305" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
14.1
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,305 86,305 "/>
<text x="77" y="255" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
14.2
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,255 86,255 "/>
<text x="77" y="206" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
14.3
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,206 86,206 "/>
<text x="77" y="157" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
14.4
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,157 86,157 "/>
<text x="77" y="108" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
14.5
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,108 86,108 "/>
<text x="77" y="59" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
14.6
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,59 86,59 "/>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="87,473 933,473 "/>
<text x="171" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
2
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="171,473 171,478 "/>
<text x="256" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
3
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="256,473 256,478 "/>
<text x="340" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
4
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="340,473 340,478 "/>
<text x="425" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
5
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="425,473 425,478 "/>
<text x="510" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
6
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="510,473 510,478 "/>
<text x="594" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
7
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="594,473 594,478 "/>
<text x="679" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
8
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="679,473 679,478 "/>
<text x="763" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
9
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="763,473 763,478 "/>
<text x="848" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
10
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="848,473 848,478 "/>
<text x="933" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
11
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="933,473 933,478 "/>
<circle cx="87" cy="139" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="171" cy="281" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="256" cy="472" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="340" cy="243" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="425" cy="268" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="510" cy="182" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="594" cy="228" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="679" cy="53" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="763" cy="260" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="848" cy="201" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<text x="132" y="68" dy="0.76em" text-anchor="start" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
Sample
</text>
<circle cx="112" cy="73" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
</svg>

After

Width:  |  Height:  |  Size: 7.9 KiB

View File

@ -0,0 +1,112 @@
<svg width="450" height="300" viewBox="0 0 450 300" xmlns="http://www.w3.org/2000/svg">
<text x="15" y="130" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000" transform="rotate(270, 15, 130)">
Average Iteration Time (s)
</text>
<line opacity="0.2" stroke="#000000" stroke-width="1" x1="111" y1="244" x2="111" y2="14"/>
<line opacity="0.2" stroke="#000000" stroke-width="1" x1="147" y1="244" x2="147" y2="14"/>
<line opacity="0.2" stroke="#000000" stroke-width="1" x1="183" y1="244" x2="183" y2="14"/>
<line opacity="0.2" stroke="#000000" stroke-width="1" x1="219" y1="244" x2="219" y2="14"/>
<line opacity="0.2" stroke="#000000" stroke-width="1" x1="255" y1="244" x2="255" y2="14"/>
<line opacity="0.2" stroke="#000000" stroke-width="1" x1="291" y1="244" x2="291" y2="14"/>
<line opacity="0.2" stroke="#000000" stroke-width="1" x1="327" y1="244" x2="327" y2="14"/>
<line opacity="0.2" stroke="#000000" stroke-width="1" x1="363" y1="244" x2="363" y2="14"/>
<line opacity="0.2" stroke="#000000" stroke-width="1" x1="399" y1="244" x2="399" y2="14"/>
<line opacity="0.2" stroke="#000000" stroke-width="1" x1="435" y1="244" x2="435" y2="14"/>
<line opacity="0.2" stroke="#000000" stroke-width="1" x1="75" y1="233" x2="435" y2="233"/>
<line opacity="0.2" stroke="#000000" stroke-width="1" x1="75" y1="206" x2="435" y2="206"/>
<line opacity="0.2" stroke="#000000" stroke-width="1" x1="75" y1="179" x2="435" y2="179"/>
<line opacity="0.2" stroke="#000000" stroke-width="1" x1="75" y1="152" x2="435" y2="152"/>
<line opacity="0.2" stroke="#000000" stroke-width="1" x1="75" y1="125" x2="435" y2="125"/>
<line opacity="0.2" stroke="#000000" stroke-width="1" x1="75" y1="98" x2="435" y2="98"/>
<line opacity="0.2" stroke="#000000" stroke-width="1" x1="75" y1="71" x2="435" y2="71"/>
<line opacity="0.2" stroke="#000000" stroke-width="1" x1="75" y1="44" x2="435" y2="44"/>
<line opacity="0.2" stroke="#000000" stroke-width="1" x1="75" y1="17" x2="435" y2="17"/>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="74,15 74,245 "/>
<text x="65" y="233" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
13.8
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="69,233 74,233 "/>
<text x="65" y="206" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
13.9
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="69,206 74,206 "/>
<text x="65" y="179" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
14.0
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="69,179 74,179 "/>
<text x="65" y="152" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
14.1
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="69,152 74,152 "/>
<text x="65" y="125" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
14.2
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="69,125 74,125 "/>
<text x="65" y="98" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
14.3
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="69,98 74,98 "/>
<text x="65" y="71" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
14.4
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="69,71 74,71 "/>
<text x="65" y="44" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
14.5
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="69,44 74,44 "/>
<text x="65" y="17" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
14.6
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="69,17 74,17 "/>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="75,245 435,245 "/>
<text x="111" y="255" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
2
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="111,245 111,250 "/>
<text x="147" y="255" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
3
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="147,245 147,250 "/>
<text x="183" y="255" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
4
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="183,245 183,250 "/>
<text x="219" y="255" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
5
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="219,245 219,250 "/>
<text x="255" y="255" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
6
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="255,245 255,250 "/>
<text x="291" y="255" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
7
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="291,245 291,250 "/>
<text x="327" y="255" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
8
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="327,245 327,250 "/>
<text x="363" y="255" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
9
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="363,245 363,250 "/>
<text x="399" y="255" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
10
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="399,245 399,250 "/>
<text x="435" y="255" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
11
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="435,245 435,250 "/>
<circle cx="75" cy="62" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="111" cy="139" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="147" cy="244" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="183" cy="119" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="219" cy="132" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="255" cy="85" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="291" cy="110" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="327" cy="15" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="363" cy="128" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="399" cy="95" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
</svg>

After

Width:  |  Height:  |  Size: 7.5 KiB

View File

@ -0,0 +1,76 @@
<svg width="960" height="540" viewBox="0 0 960 540" xmlns="http://www.w3.org/2000/svg">
<text x="480" y="32" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="16.129032258064516" opacity="1" fill="#000000">
scan all:mean
</text>
<text x="27" y="263" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000" transform="rotate(270, 27, 263)">
Density (a.u.)
</text>
<text x="510" y="513" dy="-0.5ex" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
Average time (s)
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="86,53 86,473 "/>
<text x="77" y="427" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
1
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,427 86,427 "/>
<text x="77" y="361" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
2
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,361 86,361 "/>
<text x="77" y="294" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
3
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,294 86,294 "/>
<text x="77" y="228" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
4
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,228 86,228 "/>
<text x="77" y="162" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
5
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,162 86,162 "/>
<text x="77" y="96" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
6
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,96 86,96 "/>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="87,473 933,473 "/>
<text x="142" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
14.1
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="142,473 142,478 "/>
<text x="274" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
14.15
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="274,473 274,478 "/>
<text x="406" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
14.2
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="406,473 406,478 "/>
<text x="538" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
14.25
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="538,473 538,478 "/>
<text x="670" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
14.3
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="670,473 670,478 "/>
<text x="802" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
14.35
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="802,473 802,478 "/>
<polyline fill="none" opacity="1" stroke="#1F78B4" stroke-width="1" points="87,472 88,471 90,470 92,469 93,469 95,468 97,467 98,467 100,466 102,465 103,465 105,464 107,463 109,463 110,462 112,461 114,461 115,460 117,460 119,459 120,458 122,458 124,457 125,457 127,456 129,456 131,455 132,455 134,454 136,454 137,453 139,452 141,452 142,451 144,451 146,450 148,449 149,449 151,448 153,447 154,447 156,446 158,445 159,445 161,444 163,444 164,443 166,442 168,442 170,441 171,441 173,440 175,439 176,438 178,438 180,437 181,436 183,435 185,434 187,433 188,432 190,431 192,429 193,428 195,427 197,425 198,424 200,422 202,421 203,419 205,418 207,416 209,415 210,413 212,412 214,410 215,408 217,407 219,405 220,404 222,402 224,401 226,400 227,398 229,397 231,396 232,394 234,393 236,392 237,391 239,390 241,389 242,388 244,386 246,385 248,384 249,383 251,382 253,380 254,379 256,378 258,376 259,375 261,373 263,372 265,370 266,368 268,367 270,365 271,363 273,361 275,360 276,358 278,356 280,354 281,352 283,350 285,348 287,346 288,344 290,342 292,340 293,338 295,336 297,334 298,331 300,329 302,327 304,324 305,322 307,319 309,317 310,314 312,312 314,309 315,306 317,304 319,301 320,298 322,296 324,293 326,291 327,288 329,285 331,283 332,281 334,278 336,276 337,274 339,272 341,270 343,268 344,266 346,265 348,263 349,261 351,260 353,258 354,257 356,255 358,254 359,252 361,251 363,249 365,248 366,246 368,244 370,243 371,241 373,239 375,238 376,236 378,234 380,232 381,230 383,228 385,226 387,224 388,221 390,219 392,217 393,215 395,213 397,211 398,208 400,206 402,204 404,202 405,200 407,198 409,196 410,195 412,193 414,191 415,190 417,188 419,187 420,186 422,184 424,183 426,182 427,181 429,180 431,178 432,177 434,176 436,175 437,174 439,173 441,171 443,170 444,168 446,167 448,166 449,164 451,162 453,161 454,159 456,158 458,156 459,154 461,153 463,151 465,149 466,148 468,146 470,144 471,143 473,141 475,139 476,138 478,136 480,134 482,132 483,130 485,128 487,126 488,124 490,122 492,120 493,118 495,116 497,114 498,112 500,110 502,108 504,106 505,105 507,103 509,101 510,100 512,99 514,98 515,96 517,95 519,95 521,94 522,93 524,93 526,92 527,92 529,92 531,92 532,92 534,92 536,92 537,92 539,92 541,93 543,93 544,93 546,93 548,94 549,94 551,94 553,95 554,95 556,95 558,95 560,95 561,95 563,96 565,96 566,96 568,96 570,96 571,96 573,96 575,96 576,97 578,97 580,97 582,98 583,98 585,99 587,99 588,100 590,101 592,102 593,103 595,104 597,105 599,106 600,108 602,109 604,111 605,112 607,114 609,116 610,118 612,120 614,122 615,124 617,126 619,129 621,131 622,133 624,135 626,137 627,140 629,142 631,144 632,146 634,148 636,150 638,152 639,153 641,155 643,157 644,158 646,160 648,161 649,163 651,164 653,166 654,167 656,169 658,171 660,173 661,175 663,177 665,179 666,181 668,184 670,186 671,189 673,191 675,194 676,197 678,200 680,202 682,205 683,208 685,211 687,213 688,216 690,219 692,222 693,224 695,227 697,229 699,232 700,235 702,237 704,240 705,243 707,245 709,248 710,251 712,254 714,257 715,259 717,262 719,265 721,268 722,271 724,274 726,277 727,280 729,283 731,286 732,289 734,292 736,295 738,297 739,299 741,302 743,304 744,306 746,308 748,310 749,311 751,313 753,315 754,316 756,318 758,319 760,321 761,323 763,324 765,326 766,328 768,330 770,332 771,333 773,335 775,338 777,340 778,342 780,344 782,346 783,348 785,351 787,353 788,355 790,357 792,359 793,361 795,363 797,365 799,367 800,369 802,371 804,373 805,375 807,377 809,378 810,380 812,382 814,383 816,385 817,386 819,388 821,389 822,391 824,393 826,394 827,396 829,397 831,399 832,400 834,402 836,404 838,405 839,407 841,408 843,410 844,412 846,413 848,415 849,416 851,418 853,420 855,421 856,423 858,424 860,426 861,427 863,429 865,430 866,431 868,433 870,434 871,435 873,437 875,438 877,439 878,440 880,441 882,442 883,443 885,444 887,445 888,446 890,447 892,448 894,449 895,450 897,451 899,452 900,453 902,454 904,455 905,456 907,457 909,458 910,459 912,460 914,461 916,462 917,463 919,464 921,465 922,466 924,467 926,468 927,469 929,469 931,470 933,471 "/>
<polygon opacity="0.25" fill="#1F78B4" points="164,443 166,442 168,442 170,441 171,441 173,440 175,439 176,438 178,438 180,437 181,436 183,435 185,434 187,433 188,432 190,431 192,429 193,428 195,427 197,425 198,424 200,422 202,421 203,419 205,418 207,416 209,415 210,413 212,412 214,410 215,408 217,407 219,405 220,404 222,402 224,401 226,400 227,398 229,397 231,396 232,394 234,393 236,392 237,391 239,390 241,389 242,388 244,386 246,385 248,384 249,383 251,382 253,380 254,379 256,378 258,376 259,375 261,373 263,372 265,370 266,368 268,367 270,365 271,363 273,361 275,360 276,358 278,356 280,354 281,352 283,350 285,348 287,346 288,344 290,342 292,340 293,338 295,336 297,334 298,331 300,329 302,327 304,324 305,322 307,319 309,317 310,314 312,312 314,309 315,306 317,304 319,301 320,298 322,296 324,293 326,291 327,288 329,285 331,283 332,281 334,278 336,276 337,274 339,272 341,270 343,268 344,266 346,265 348,263 349,261 351,260 353,258 354,257 356,255 358,254 359,252 361,251 363,249 365,248 366,246 368,244 370,243 371,241 373,239 375,238 376,236 378,234 380,232 381,230 383,228 385,226 387,224 388,221 390,219 392,217 393,215 395,213 397,211 398,208 400,206 402,204 404,202 405,200 407,198 409,196 410,195 412,193 414,191 415,190 417,188 419,187 420,186 422,184 424,183 426,182 427,181 429,180 431,178 432,177 434,176 436,175 437,174 439,173 441,171 443,170 444,168 446,167 448,166 449,164 451,162 453,161 454,159 456,158 458,156 459,154 461,153 463,151 465,149 466,148 468,146 470,144 471,143 473,141 475,139 476,138 478,136 480,134 482,132 483,130 485,128 487,126 488,124 490,122 492,120 493,118 495,116 497,114 498,112 500,110 502,108 504,106 505,105 507,103 509,101 510,100 512,99 514,98 515,96 517,95 519,95 521,94 522,93 524,93 526,92 527,92 529,92 531,92 532,92 534,92 536,92 537,92 539,92 541,93 543,93 544,93 546,93 548,94 549,94 551,94 553,95 554,95 556,95 558,95 560,95 561,95 563,96 565,96 566,96 568,96 570,96 571,96 573,96 575,96 576,97 578,97 580,97 582,98 583,98 585,99 587,99 588,100 590,101 592,102 593,103 595,104 597,105 599,106 600,108 602,109 604,111 605,112 607,114 609,116 610,118 612,120 614,122 615,124 617,126 619,129 621,131 622,133 624,135 626,137 627,140 629,142 631,144 632,146 634,148 636,150 638,152 639,153 641,155 643,157 644,158 646,160 648,161 649,163 651,164 653,166 654,167 656,169 658,171 660,173 661,175 663,177 665,179 666,181 668,184 670,186 671,189 673,191 675,194 676,197 678,200 680,202 682,205 683,208 685,211 687,213 688,216 690,219 692,222 693,224 695,227 697,229 699,232 700,235 702,237 704,240 705,243 707,245 709,248 710,251 712,254 714,257 715,259 717,262 719,265 721,268 722,271 724,274 726,277 727,280 729,283 731,286 732,289 734,292 736,295 738,297 739,299 741,302 743,304 744,306 746,308 748,310 749,311 751,313 753,315 754,316 756,318 758,319 760,321 761,323 763,324 765,326 766,328 768,330 770,332 771,333 773,335 775,338 777,340 778,342 780,344 782,346 783,348 785,351 787,353 788,355 790,357 792,359 793,361 795,363 797,365 799,367 800,369 802,371 804,373 805,375 807,377 809,378 810,380 812,382 814,383 816,385 817,386 819,388 821,389 822,391 824,393 826,394 827,396 829,397 831,399 832,400 834,402 836,404 838,405 839,407 841,408 843,410 844,412 846,413 848,415 849,416 851,418 853,420 853,473 164,473 "/>
<polyline fill="none" opacity="1" stroke="#1F78B4" stroke-width="3" points="528,473 528,92 "/>
<text x="798" y="68" dy="0.76em" text-anchor="start" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
Bootstrap distribution
</text>
<text x="798" y="83" dy="0.76em" text-anchor="start" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
Confidence interval
</text>
<text x="798" y="98" dy="0.76em" text-anchor="start" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
Point estimate
</text>
<polyline fill="none" opacity="1" stroke="#1F78B4" stroke-width="1" points="768,73 788,73 "/>
<rect x="768" y="83" width="20" height="10" opacity="0.25" fill="#1F78B4" stroke="none"/>
<polyline fill="none" opacity="1" stroke="#1F78B4" stroke-width="1" points="768,103 788,103 "/>
</svg>

After

Width:  |  Height:  |  Size: 12 KiB

View File

@ -0,0 +1,88 @@
<svg width="960" height="540" viewBox="0 0 960 540" xmlns="http://www.w3.org/2000/svg">
<text x="480" y="32" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="16.129032258064516" opacity="1" fill="#000000">
scan all:median
</text>
<text x="27" y="263" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000" transform="rotate(270, 27, 263)">
Density (a.u.)
</text>
<text x="510" y="513" dy="-0.5ex" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
Average time (s)
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="86,53 86,473 "/>
<text x="77" y="438" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
1
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,438 86,438 "/>
<text x="77" y="396" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
2
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,396 86,396 "/>
<text x="77" y="353" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
3
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,353 86,353 "/>
<text x="77" y="310" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
4
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,310 86,310 "/>
<text x="77" y="268" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
5
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,268 86,268 "/>
<text x="77" y="225" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
6
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,225 86,225 "/>
<text x="77" y="182" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
7
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,182 86,182 "/>
<text x="77" y="140" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
8
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,140 86,140 "/>
<text x="77" y="97" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
9
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,97 86,97 "/>
<text x="77" y="54" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
10
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,54 86,54 "/>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="87,473 933,473 "/>
<text x="100" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
14.15
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="100,473 100,478 "/>
<text x="269" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
14.2
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="269,473 269,478 "/>
<text x="438" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
14.25
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="438,473 438,478 "/>
<text x="608" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
14.3
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="608,473 608,478 "/>
<text x="777" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
14.35
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="777,473 777,478 "/>
<polyline fill="none" opacity="1" stroke="#1F78B4" stroke-width="1" points="87,461 88,461 90,460 92,460 93,460 95,459 97,459 98,459 100,459 102,458 103,458 105,458 107,457 109,457 110,456 112,456 114,455 115,454 117,453 119,451 120,450 122,448 124,447 125,445 127,444 129,442 131,440 132,438 134,436 136,435 137,433 139,431 141,429 142,427 144,425 146,423 148,421 149,419 151,416 153,414 154,411 156,408 158,404 159,401 161,397 163,393 164,388 166,383 168,378 170,373 171,367 173,362 175,356 176,349 178,343 180,336 181,330 183,323 185,316 187,309 188,302 190,295 192,287 193,280 195,273 197,266 198,259 200,252 202,245 203,238 205,231 207,225 209,218 210,213 212,207 214,202 215,197 217,193 219,190 220,187 222,184 224,183 226,182 227,182 229,183 231,184 232,186 234,189 236,193 237,197 239,202 241,207 242,212 244,218 246,223 248,229 249,234 251,238 253,242 254,245 256,247 258,248 259,248 261,247 263,245 265,242 266,238 268,233 270,226 271,220 273,212 275,205 276,197 278,189 280,182 281,175 283,168 285,163 287,158 288,155 290,153 292,152 293,152 295,154 297,158 298,162 300,167 302,173 304,180 305,187 307,194 309,201 310,207 312,212 314,217 315,220 317,222 319,222 320,221 322,218 324,213 326,207 327,200 329,191 331,181 332,170 334,159 336,148 337,137 339,126 341,116 343,108 344,101 346,95 348,92 349,91 351,91 353,94 354,98 356,105 358,113 359,122 361,133 363,144 365,155 366,167 368,178 370,188 371,197 373,205 375,212 376,216 378,219 380,220 381,218 383,215 385,211 387,204 388,197 390,188 392,179 393,170 395,160 397,151 398,143 400,136 402,129 404,125 405,122 407,120 409,121 410,123 412,126 414,131 415,137 417,144 419,152 420,160 422,168 424,176 426,184 427,190 429,196 431,201 432,205 434,207 436,208 437,208 439,206 441,204 443,200 444,196 446,191 448,186 449,181 451,176 453,172 454,168 456,165 458,163 459,161 461,161 463,162 465,164 466,168 468,172 470,177 471,182 473,189 475,196 476,203 478,210 480,218 482,225 483,233 485,240 487,247 488,254 490,261 492,268 493,275 495,281 497,287 498,293 500,299 502,304 504,310 505,315 507,319 509,323 510,326 512,328 514,330 515,330 517,329 519,327 521,324 522,320 524,314 526,307 527,298 529,289 531,278 532,267 534,256 536,244 537,232 539,220 541,209 543,199 544,190 546,182 548,176 549,172 551,169 553,169 554,170 556,174 558,180 560,187 561,197 563,207 565,220 566,233 568,247 570,261 571,276 573,291 575,305 576,319 578,333 580,345 582,356 583,366 585,375 587,383 588,389 590,394 592,397 593,400 595,400 597,400 599,398 600,396 602,392 604,388 605,382 607,376 609,369 610,362 612,355 614,347 615,339 617,331 619,322 621,314 622,307 624,299 626,292 627,286 629,280 631,276 632,272 634,269 636,267 638,266 639,266 641,268 643,270 644,274 646,279 648,285 649,291 651,299 653,307 654,316 656,325 658,334 660,343 661,352 663,360 665,368 666,376 668,382 670,388 671,393 673,396 675,399 676,401 678,401 680,400 682,399 683,396 685,393 687,389 688,384 690,379 692,373 693,368 695,362 697,357 699,352 700,347 702,344 704,341 705,338 707,337 709,337 710,337 712,339 714,341 715,345 717,349 719,354 721,359 722,365 724,371 726,377 727,383 729,389 731,395 732,400 734,405 736,409 738,413 739,415 741,417 743,419 744,419 746,419 748,418 749,416 751,414 753,411 754,408 756,404 758,401 760,397 761,394 763,391 765,388 766,385 768,383 770,381 771,380 773,380 775,380 777,381 778,383 780,386 782,389 783,392 785,396 787,401 788,405 790,410 792,415 793,420 795,426 797,431 799,436 800,440 802,445 804,449 805,453 807,456 809,459 810,462 812,464 814,466 816,468 817,469 819,470 821,471 822,471 824,472 826,471 827,471 829,471 831,470 832,470 834,469 836,468 838,467 839,466 841,465 843,464 844,464 846,463 848,462 849,462 851,461 853,461 855,461 856,460 858,461 860,461 861,461 863,462 865,462 866,463 868,463 870,464 871,465 873,465 875,466 877,467 878,467 880,467 882,467 883,467 885,467 887,467 888,466 890,466 892,465 894,464 895,462 897,461 899,459 900,458 902,456 904,454 905,452 907,451 909,449 910,447 912,446 914,445 916,444 917,443 919,442 921,442 922,442 924,443 926,443 927,444 929,445 931,446 933,448 "/>
<polygon opacity="0.25" fill="#1F78B4" points="164,388 166,383 168,378 170,373 171,367 173,362 175,356 176,349 178,343 180,336 181,330 183,323 185,316 187,309 188,302 190,295 192,287 193,280 195,273 197,266 198,259 200,252 202,245 203,238 205,231 207,225 209,218 210,213 212,207 214,202 215,197 217,193 219,190 220,187 222,184 224,183 226,182 227,182 229,183 231,184 232,186 234,189 236,193 237,197 239,202 241,207 242,212 244,218 246,223 248,229 249,234 251,238 253,242 254,245 256,247 258,248 259,248 261,247 263,245 265,242 266,238 268,233 270,226 271,220 273,212 275,205 276,197 278,189 280,182 281,175 283,168 285,163 287,158 288,155 290,153 292,152 293,152 295,154 297,158 298,162 300,167 302,173 304,180 305,187 307,194 309,201 310,207 312,212 314,217 315,220 317,222 319,222 320,221 322,218 324,213 326,207 327,200 329,191 331,181 332,170 334,159 336,148 337,137 339,126 341,116 343,108 344,101 346,95 348,92 349,91 351,91 353,94 354,98 356,105 358,113 359,122 361,133 363,144 365,155 366,167 368,178 370,188 371,197 373,205 375,212 376,216 378,219 380,220 381,218 383,215 385,211 387,204 388,197 390,188 392,179 393,170 395,160 397,151 398,143 400,136 402,129 404,125 405,122 407,120 409,121 410,123 412,126 414,131 415,137 417,144 419,152 420,160 422,168 424,176 426,184 427,190 429,196 431,201 432,205 434,207 436,208 437,208 439,206 441,204 443,200 444,196 446,191 448,186 449,181 451,176 453,172 454,168 456,165 458,163 459,161 461,161 463,162 465,164 466,168 468,172 470,177 471,182 473,189 475,196 476,203 478,210 480,218 482,225 483,233 485,240 487,247 488,254 490,261 492,268 493,275 495,281 497,287 498,293 500,299 502,304 504,310 505,315 507,319 509,323 510,326 512,328 514,330 515,330 517,329 519,327 521,324 522,320 524,314 526,307 527,298 529,289 531,278 532,267 534,256 536,244 537,232 539,220 541,209 543,199 544,190 546,182 548,176 549,172 551,169 553,169 554,170 556,174 558,180 560,187 561,197 563,207 565,220 566,233 568,247 570,261 571,276 573,291 575,305 576,319 578,333 580,345 582,356 583,366 585,375 587,383 588,389 590,394 592,397 593,400 595,400 597,400 599,398 600,396 602,392 604,388 605,382 607,376 609,369 610,362 612,355 614,347 615,339 617,331 619,322 621,314 622,307 624,299 626,292 627,286 629,280 631,276 632,272 634,269 636,267 638,266 639,266 641,268 643,270 644,274 646,279 648,285 649,291 651,299 653,307 654,316 656,325 658,334 660,343 661,352 663,360 665,368 666,376 668,382 670,388 671,393 673,396 675,399 676,401 678,401 680,400 682,399 683,396 685,393 687,389 688,384 690,379 692,373 693,368 695,362 697,357 699,352 700,347 702,344 704,341 705,338 707,337 709,337 710,337 712,339 714,341 715,345 717,349 719,354 721,359 722,365 724,371 726,377 727,383 729,389 731,395 732,400 734,405 736,409 738,413 739,415 741,417 743,419 744,419 746,419 748,418 749,416 751,414 753,411 754,408 756,404 758,401 760,397 761,394 763,391 765,388 766,385 768,383 770,381 771,380 773,380 775,380 777,381 778,383 780,386 782,389 783,392 785,396 787,401 788,405 790,410 792,415 793,420 795,426 797,431 799,436 800,440 802,445 804,449 805,453 807,456 809,459 810,462 812,464 814,466 816,468 817,469 819,470 821,471 822,471 824,472 826,471 827,471 829,471 831,470 832,470 834,469 836,468 838,467 839,466 841,465 843,464 844,464 846,463 848,462 849,462 851,461 853,461 853,473 164,473 "/>
<polyline fill="none" opacity="1" stroke="#1F78B4" stroke-width="3" points="406,473 406,121 "/>
<text x="798" y="68" dy="0.76em" text-anchor="start" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
Bootstrap distribution
</text>
<text x="798" y="83" dy="0.76em" text-anchor="start" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
Confidence interval
</text>
<text x="798" y="98" dy="0.76em" text-anchor="start" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
Point estimate
</text>
<polyline fill="none" opacity="1" stroke="#1F78B4" stroke-width="1" points="768,73 788,73 "/>
<rect x="768" y="83" width="20" height="10" opacity="0.25" fill="#1F78B4" stroke="none"/>
<polyline fill="none" opacity="1" stroke="#1F78B4" stroke-width="1" points="768,103 788,103 "/>
</svg>

After

Width:  |  Height:  |  Size: 12 KiB

161
report/scan/report/pdf.svg Normal file
View File

@ -0,0 +1,161 @@
<svg width="960" height="540" viewBox="0 0 960 540" xmlns="http://www.w3.org/2000/svg">
<text x="480" y="32" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="16.129032258064516" opacity="1" fill="#000000">
scan all
</text>
<text x="27" y="263" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000" transform="rotate(270, 27, 263)">
Iterations
</text>
<text x="480" y="513" dy="-0.5ex" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
Average Time (s)
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="86,53 86,473 "/>
<text x="77" y="430" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
0.1
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,430 86,430 "/>
<text x="77" y="388" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
0.2
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,388 86,388 "/>
<text x="77" y="346" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
0.3
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,346 86,346 "/>
<text x="77" y="304" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
0.4
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,304 86,304 "/>
<text x="77" y="262" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
0.5
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,262 86,262 "/>
<text x="77" y="220" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
0.6
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,220 86,220 "/>
<text x="77" y="178" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
0.7
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,178 86,178 "/>
<text x="77" y="136" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
0.8
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,136 86,136 "/>
<text x="77" y="94" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
0.9
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,94 86,94 "/>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="87,473 873,473 "/>
<text x="124" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
13.4
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="124,473 124,478 "/>
<text x="214" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
13.6
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="214,473 214,478 "/>
<text x="304" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
13.8
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="304,473 304,478 "/>
<text x="395" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
14
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="395,473 395,478 "/>
<text x="485" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
14.2
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="485,473 485,478 "/>
<text x="575" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
14.4
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="575,473 575,478 "/>
<text x="666" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
14.6
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="666,473 666,478 "/>
<text x="756" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
14.8
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="756,473 756,478 "/>
<text x="846" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
15
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="846,473 846,478 "/>
<text x="933" y="263" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000" transform="rotate(90, 933, 263)">
Density (a.u.)
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="873,54 873,473 "/>
<text x="883" y="427" dy="0.5ex" text-anchor="start" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
0.2
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="873,427 878,427 "/>
<text x="883" y="381" dy="0.5ex" text-anchor="start" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
0.4
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="873,381 878,381 "/>
<text x="883" y="335" dy="0.5ex" text-anchor="start" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
0.6
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="873,335 878,335 "/>
<text x="883" y="289" dy="0.5ex" text-anchor="start" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
0.8
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="873,289 878,289 "/>
<text x="883" y="244" dy="0.5ex" text-anchor="start" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
1
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="873,244 878,244 "/>
<text x="883" y="198" dy="0.5ex" text-anchor="start" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
1.2
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="873,198 878,198 "/>
<text x="883" y="152" dy="0.5ex" text-anchor="start" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
1.4
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="873,152 878,152 "/>
<text x="883" y="106" dy="0.5ex" text-anchor="start" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
1.6
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="873,106 878,106 "/>
<text x="883" y="60" dy="0.5ex" text-anchor="start" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
1.8
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="873,60 878,60 "/>
<polygon opacity="0.5" fill="#1F78B4" points="87,472 88,472 90,472 91,472 93,472 94,472 96,471 98,471 99,471 101,471 102,471 104,471 105,471 107,471 109,471 110,471 112,471 113,470 115,470 116,470 118,470 120,470 121,470 123,469 124,469 126,469 127,469 129,469 131,468 132,468 134,468 135,468 137,468 138,467 140,467 142,467 143,466 145,466 146,466 148,465 150,465 151,465 153,464 154,464 156,463 157,463 159,463 161,462 162,462 164,461 165,461 167,460 168,460 170,459 172,459 173,458 175,457 176,457 178,456 179,456 181,455 183,454 184,454 186,453 187,452 189,451 190,451 192,450 194,449 195,448 197,448 198,447 200,446 201,445 203,444 205,443 206,443 208,442 209,441 211,440 213,439 214,438 216,437 217,436 219,436 220,435 222,434 224,433 225,432 227,431 228,430 230,429 231,428 233,427 235,427 236,426 238,425 239,424 241,423 242,422 244,422 246,421 247,420 249,419 250,418 252,418 253,417 255,416 257,415 258,415 260,414 261,413 263,413 264,412 266,412 268,411 269,411 271,410 272,410 274,409 276,409 277,408 279,408 280,407 282,407 283,407 285,406 287,406 288,406 290,405 291,405 293,405 294,404 296,404 298,404 299,404 301,403 302,403 304,403 305,403 307,402 309,402 310,402 312,402 313,401 315,401 316,401 318,401 320,400 321,400 323,399 324,399 326,399 327,398 329,398 331,397 332,397 334,396 335,395 337,395 339,394 340,393 342,392 343,391 345,390 346,389 348,388 350,387 351,386 353,384 354,383 356,381 357,380 359,378 361,376 362,374 364,373 365,371 367,368 368,366 370,364 372,362 373,359 375,357 376,354 378,351 379,348 381,345 383,342 384,339 386,336 387,333 389,329 391,326 392,322 394,319 395,315 397,311 398,307 400,303 402,299 403,295 405,290 406,286 408,282 409,277 411,273 413,268 414,263 416,259 417,254 419,249 420,244 422,239 424,235 425,230 427,225 428,220 430,215 431,210 433,205 435,200 436,195 438,190 439,185 441,180 442,175 444,170 446,165 447,160 449,156 450,151 452,146 454,142 455,137 457,133 458,128 460,124 461,120 463,116 465,112 466,108 468,104 469,100 471,97 472,93 474,90 476,87 477,84 479,81 480,78 482,75 483,73 485,70 487,68 488,66 490,64 491,62 493,61 494,59 496,58 498,57 499,56 501,55 502,54 504,53 505,53 507,53 509,53 510,53 512,53 513,53 515,54 517,54 518,55 520,56 521,57 523,58 524,59 526,61 528,63 529,64 531,66 532,68 534,70 535,72 537,75 539,77 540,80 542,82 543,85 545,88 546,91 548,94 550,97 551,100 553,103 554,107 556,110 557,113 559,117 561,120 562,124 564,128 565,131 567,135 568,139 570,143 572,147 573,150 575,154 576,158 578,162 580,166 581,170 583,174 584,178 586,182 587,186 589,190 591,194 592,198 594,201 595,205 597,209 598,213 600,217 602,221 603,224 605,228 606,232 608,236 609,239 611,243 613,246 614,250 616,253 617,257 619,260 620,264 622,267 624,270 625,274 627,277 628,280 630,283 632,286 633,289 635,292 636,295 638,298 639,301 641,304 643,307 644,310 646,313 647,315 649,318 650,321 652,323 654,326 655,328 657,331 658,333 660,336 661,338 663,340 665,343 666,345 668,347 669,350 671,352 672,354 674,356 676,358 677,361 679,363 680,365 682,367 683,369 685,371 687,373 688,375 690,377 691,379 693,380 695,382 696,384 698,386 699,388 701,390 702,391 704,393 706,395 707,397 709,398 710,400 712,402 713,403 715,405 717,407 718,408 720,410 721,411 723,413 724,414 726,416 728,417 729,419 731,420 732,422 734,423 735,424 737,426 739,427 740,428 742,430 743,431 745,432 746,434 748,435 750,436 751,437 753,438 754,439 756,440 758,441 759,443 761,444 762,445 764,446 765,446 767,447 769,448 770,449 772,450 773,451 775,452 776,453 778,453 780,454 781,455 783,456 784,456 786,457 787,458 789,458 791,459 792,459 794,460 795,460 797,461 798,462 800,462 802,463 803,463 805,463 806,464 808,464 809,465 811,465 813,465 814,466 816,466 817,466 819,467 821,467 822,467 824,468 825,468 827,468 828,468 830,469 832,469 833,469 835,469 836,469 838,470 839,470 841,470 843,470 844,470 846,470 847,470 849,471 850,471 852,471 854,471 855,471 857,471 858,471 860,471 861,471 863,471 865,472 866,472 868,472 869,472 871,472 873,472 873,473 87,473 "/>
<polyline fill="none" opacity="1" stroke="#1F78B4" stroke-width="1" points="506,472 506,53 "/>
<polyline fill="none" opacity="1" stroke="#FF7F00" stroke-width="1" points="367,472 367,53 "/>
<polyline fill="none" opacity="1" stroke="#FF7F00" stroke-width="1" points="657,472 657,53 "/>
<polyline fill="none" opacity="1" stroke="#E31A1C" stroke-width="1" points="258,472 258,53 "/>
<polyline fill="none" opacity="1" stroke="#E31A1C" stroke-width="1" points="765,472 765,53 "/>
<circle cx="592" cy="53" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="461" cy="53" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="496" cy="53" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="474" cy="53" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="552" cy="53" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="511" cy="53" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="481" cy="53" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="535" cy="53" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="287" cy="53" r="3" opacity="1" fill="#FF7F00" stroke="none" stroke-width="1"/>
<circle cx="672" cy="53" r="3" opacity="1" fill="#FF7F00" stroke="none" stroke-width="1"/>
<text x="776" y="228" dy="0.76em" text-anchor="start" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
PDF
</text>
<text x="776" y="243" dy="0.76em" text-anchor="start" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
Mean
</text>
<text x="776" y="258" dy="0.76em" text-anchor="start" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
&quot;Clean&quot; sample
</text>
<text x="776" y="273" dy="0.76em" text-anchor="start" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
Mild outliers
</text>
<text x="776" y="288" dy="0.76em" text-anchor="start" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
Severe outliers
</text>
<rect x="746" y="228" width="20" height="10" opacity="0.5" fill="#1F78B4" stroke="none"/>
<polyline fill="none" opacity="1" stroke="#1F78B4" stroke-width="1" points="746,248 766,248 "/>
<circle cx="756" cy="263" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="756" cy="278" r="3" opacity="1" fill="#FF7F00" stroke="none" stroke-width="1"/>
<circle cx="756" cy="293" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
</svg>

After

Width:  |  Height:  |  Size: 14 KiB

View File

@ -0,0 +1,68 @@
<svg width="450" height="300" viewBox="0 0 450 300" xmlns="http://www.w3.org/2000/svg">
<text x="15" y="130" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000" transform="rotate(270, 15, 130)">
Density (a.u.)
</text>
<text x="255" y="285" dy="-0.5ex" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
Average Time (s)
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="74,15 74,245 "/>
<text x="65" y="221" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
0.2
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="69,221 74,221 "/>
<text x="65" y="198" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
0.4
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="69,198 74,198 "/>
<text x="65" y="175" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
0.6
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="69,175 74,175 "/>
<text x="65" y="152" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
0.8
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="69,152 74,152 "/>
<text x="65" y="130" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
1
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="69,130 74,130 "/>
<text x="65" y="107" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
1.2
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="69,107 74,107 "/>
<text x="65" y="84" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
1.4
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="69,84 74,84 "/>
<text x="65" y="61" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
1.6
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="69,61 74,61 "/>
<text x="65" y="38" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
1.8
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="69,38 74,38 "/>
<text x="65" y="16" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
2
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="69,16 74,16 "/>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="75,245 435,245 "/>
<text x="112" y="255" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
13.5
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="112,245 112,250 "/>
<text x="216" y="255" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
14
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="216,245 216,250 "/>
<text x="319" y="255" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
14.5
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="319,245 319,250 "/>
<text x="423" y="255" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
15
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="423,245 423,250 "/>
<polygon opacity="0.25" fill="#1F78B4" points="75,243 75,243 76,243 77,243 77,243 78,243 79,243 80,243 80,243 81,243 82,243 82,243 83,243 84,243 85,243 85,243 86,243 87,242 87,242 88,242 89,242 90,242 90,242 91,242 92,242 93,242 93,242 94,242 95,242 95,241 96,241 97,241 98,241 98,241 99,241 100,241 100,240 101,240 102,240 103,240 103,240 104,240 105,239 106,239 106,239 107,239 108,239 108,238 109,238 110,238 111,238 111,237 112,237 113,237 113,237 114,236 115,236 116,236 116,235 117,235 118,235 119,234 119,234 120,234 121,233 121,233 122,233 123,232 124,232 124,231 125,231 126,231 126,230 127,230 128,229 129,229 129,229 130,228 131,228 131,227 132,227 133,226 134,226 134,226 135,225 136,225 137,224 137,224 138,223 139,223 139,222 140,222 141,222 142,221 142,221 143,220 144,220 144,219 145,219 146,219 147,218 147,218 148,217 149,217 150,217 150,216 151,216 152,215 152,215 153,215 154,214 155,214 155,214 156,213 157,213 157,213 158,213 159,212 160,212 160,212 161,212 162,211 163,211 163,211 164,211 165,211 165,210 166,210 167,210 168,210 168,210 169,210 170,210 170,209 171,209 172,209 173,209 173,209 174,209 175,209 176,209 176,208 177,208 178,208 178,208 179,208 180,208 181,208 181,208 182,207 183,207 183,207 184,207 185,207 186,206 186,206 187,206 188,205 188,205 189,205 190,204 191,204 191,203 192,203 193,203 194,202 194,201 195,201 196,200 196,200 197,199 198,198 199,197 199,196 200,196 201,195 201,194 202,193 203,192 204,191 204,189 205,188 206,187 207,186 207,185 208,183 209,182 209,180 210,179 211,177 212,176 212,174 213,172 214,171 214,169 215,167 216,165 217,163 217,161 218,159 219,157 220,155 220,153 221,151 222,149 222,146 223,144 224,142 225,139 225,137 226,135 227,132 227,130 228,127 229,125 230,123 230,120 231,118 232,115 232,113 233,110 234,108 235,105 235,103 236,100 237,98 238,95 238,93 239,91 240,88 240,86 241,83 242,81 243,79 243,77 244,74 245,72 245,70 246,68 247,66 248,64 248,62 249,60 250,58 251,56 251,55 252,53 253,52 253,50 254,49 255,47 256,46 256,45 257,43 258,42 258,41 259,40 260,39 261,38 261,38 262,37 263,36 264,36 264,35 265,35 266,35 266,35 267,34 268,34 269,34 269,35 270,35 271,35 271,35 272,36 273,36 274,37 274,37 275,38 276,39 277,39 277,40 278,41 279,42 279,43 280,44 281,45 282,47 282,48 283,49 284,51 284,52 285,53 286,55 287,56 287,58 288,60 289,61 289,63 290,65 291,66 292,68 292,70 293,72 294,74 295,76 295,77 296,79 297,81 297,83 298,85 299,87 300,89 300,91 301,93 302,95 302,97 303,99 304,101 305,103 305,105 306,107 307,109 308,110 308,112 309,114 310,116 310,118 311,120 312,122 313,124 313,126 314,127 315,129 315,131 316,133 317,134 318,136 318,138 319,140 320,141 321,143 321,144 322,146 323,148 323,149 324,151 325,152 326,154 326,155 327,157 328,158 328,160 329,161 330,162 331,164 331,165 332,167 333,168 333,169 334,170 335,172 336,173 336,174 337,175 338,177 339,178 339,179 340,180 341,181 341,182 342,183 343,185 344,186 344,187 345,188 346,189 346,190 347,191 348,192 349,193 349,194 350,195 351,196 352,197 352,198 353,199 354,200 354,200 355,201 356,202 357,203 357,204 358,205 359,206 359,207 360,207 361,208 362,209 362,210 363,211 364,212 365,212 365,213 366,214 367,215 367,215 368,216 369,217 370,218 370,218 371,219 372,220 372,220 373,221 374,222 375,222 375,223 376,223 377,224 378,225 378,225 379,226 380,226 380,227 381,228 382,228 383,229 383,229 384,230 385,230 385,231 386,231 387,231 388,232 388,232 389,233 390,233 390,234 391,234 392,234 393,235 393,235 394,235 395,236 396,236 396,236 397,237 398,237 398,237 399,238 400,238 401,238 401,238 402,239 403,239 403,239 404,239 405,239 406,240 406,240 407,240 408,240 409,240 409,240 410,241 411,241 411,241 412,241 413,241 414,241 414,241 415,242 416,242 416,242 417,242 418,242 419,242 419,242 420,242 421,242 422,242 422,242 423,242 424,243 424,243 425,243 426,243 427,243 427,243 428,243 429,243 429,243 430,243 431,243 432,243 432,243 433,243 434,243 435,243 435,244 75,244 "/>
<polyline fill="none" opacity="1" stroke="#1F78B4" stroke-width="2" points="267,244 267,35 "/>
</svg>

After

Width:  |  Height:  |  Size: 7.8 KiB

View File

@ -0,0 +1,76 @@
<svg width="960" height="540" viewBox="0 0 960 540" xmlns="http://www.w3.org/2000/svg">
<text x="480" y="32" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="16.129032258064516" opacity="1" fill="#000000">
scan all:typical
</text>
<text x="27" y="263" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000" transform="rotate(270, 27, 263)">
Density (a.u.)
</text>
<text x="510" y="513" dy="-0.5ex" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
Average time (s)
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="86,53 86,473 "/>
<text x="77" y="427" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
1
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,427 86,427 "/>
<text x="77" y="361" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
2
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,361 86,361 "/>
<text x="77" y="294" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
3
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,294 86,294 "/>
<text x="77" y="228" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
4
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,228 86,228 "/>
<text x="77" y="162" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
5
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,162 86,162 "/>
<text x="77" y="96" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
6
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,96 86,96 "/>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="87,473 933,473 "/>
<text x="142" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
14.1
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="142,473 142,478 "/>
<text x="274" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
14.15
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="274,473 274,478 "/>
<text x="406" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
14.2
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="406,473 406,478 "/>
<text x="538" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
14.25
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="538,473 538,478 "/>
<text x="670" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
14.3
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="670,473 670,478 "/>
<text x="802" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
14.35
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="802,473 802,478 "/>
<polyline fill="none" opacity="1" stroke="#1F78B4" stroke-width="1" points="87,472 88,471 90,470 92,469 93,469 95,468 97,467 98,467 100,466 102,465 103,465 105,464 107,463 109,463 110,462 112,461 114,461 115,460 117,460 119,459 120,458 122,458 124,457 125,457 127,456 129,456 131,455 132,455 134,454 136,454 137,453 139,452 141,452 142,451 144,451 146,450 148,449 149,449 151,448 153,447 154,447 156,446 158,445 159,445 161,444 163,444 164,443 166,442 168,442 170,441 171,441 173,440 175,439 176,438 178,438 180,437 181,436 183,435 185,434 187,433 188,432 190,431 192,429 193,428 195,427 197,425 198,424 200,422 202,421 203,419 205,418 207,416 209,415 210,413 212,412 214,410 215,408 217,407 219,405 220,404 222,402 224,401 226,400 227,398 229,397 231,396 232,394 234,393 236,392 237,391 239,390 241,389 242,388 244,386 246,385 248,384 249,383 251,382 253,380 254,379 256,378 258,376 259,375 261,373 263,372 265,370 266,368 268,367 270,365 271,363 273,361 275,360 276,358 278,356 280,354 281,352 283,350 285,348 287,346 288,344 290,342 292,340 293,338 295,336 297,334 298,331 300,329 302,327 304,324 305,322 307,319 309,317 310,314 312,312 314,309 315,306 317,304 319,301 320,298 322,296 324,293 326,291 327,288 329,285 331,283 332,281 334,278 336,276 337,274 339,272 341,270 343,268 344,266 346,265 348,263 349,261 351,260 353,258 354,257 356,255 358,254 359,252 361,251 363,249 365,248 366,246 368,244 370,243 371,241 373,239 375,238 376,236 378,234 380,232 381,230 383,228 385,226 387,224 388,221 390,219 392,217 393,215 395,213 397,211 398,208 400,206 402,204 404,202 405,200 407,198 409,196 410,195 412,193 414,191 415,190 417,188 419,187 420,186 422,184 424,183 426,182 427,181 429,180 431,178 432,177 434,176 436,175 437,174 439,173 441,171 443,170 444,168 446,167 448,166 449,164 451,162 453,161 454,159 456,158 458,156 459,154 461,153 463,151 465,149 466,148 468,146 470,144 471,143 473,141 475,139 476,138 478,136 480,134 482,132 483,130 485,128 487,126 488,124 490,122 492,120 493,118 495,116 497,114 498,112 500,110 502,108 504,106 505,105 507,103 509,101 510,100 512,99 514,98 515,96 517,95 519,95 521,94 522,93 524,93 526,92 527,92 529,92 531,92 532,92 534,92 536,92 537,92 539,92 541,93 543,93 544,93 546,93 548,94 549,94 551,94 553,95 554,95 556,95 558,95 560,95 561,95 563,96 565,96 566,96 568,96 570,96 571,96 573,96 575,96 576,97 578,97 580,97 582,98 583,98 585,99 587,99 588,100 590,101 592,102 593,103 595,104 597,105 599,106 600,108 602,109 604,111 605,112 607,114 609,116 610,118 612,120 614,122 615,124 617,126 619,129 621,131 622,133 624,135 626,137 627,140 629,142 631,144 632,146 634,148 636,150 638,152 639,153 641,155 643,157 644,158 646,160 648,161 649,163 651,164 653,166 654,167 656,169 658,171 660,173 661,175 663,177 665,179 666,181 668,184 670,186 671,189 673,191 675,194 676,197 678,200 680,202 682,205 683,208 685,211 687,213 688,216 690,219 692,222 693,224 695,227 697,229 699,232 700,235 702,237 704,240 705,243 707,245 709,248 710,251 712,254 714,257 715,259 717,262 719,265 721,268 722,271 724,274 726,277 727,280 729,283 731,286 732,289 734,292 736,295 738,297 739,299 741,302 743,304 744,306 746,308 748,310 749,311 751,313 753,315 754,316 756,318 758,319 760,321 761,323 763,324 765,326 766,328 768,330 770,332 771,333 773,335 775,338 777,340 778,342 780,344 782,346 783,348 785,351 787,353 788,355 790,357 792,359 793,361 795,363 797,365 799,367 800,369 802,371 804,373 805,375 807,377 809,378 810,380 812,382 814,383 816,385 817,386 819,388 821,389 822,391 824,393 826,394 827,396 829,397 831,399 832,400 834,402 836,404 838,405 839,407 841,408 843,410 844,412 846,413 848,415 849,416 851,418 853,420 855,421 856,423 858,424 860,426 861,427 863,429 865,430 866,431 868,433 870,434 871,435 873,437 875,438 877,439 878,440 880,441 882,442 883,443 885,444 887,445 888,446 890,447 892,448 894,449 895,450 897,451 899,452 900,453 902,454 904,455 905,456 907,457 909,458 910,459 912,460 914,461 916,462 917,463 919,464 921,465 922,466 924,467 926,468 927,469 929,469 931,470 933,471 "/>
<polygon opacity="0.25" fill="#1F78B4" points="164,443 166,442 168,442 170,441 171,441 173,440 175,439 176,438 178,438 180,437 181,436 183,435 185,434 187,433 188,432 190,431 192,429 193,428 195,427 197,425 198,424 200,422 202,421 203,419 205,418 207,416 209,415 210,413 212,412 214,410 215,408 217,407 219,405 220,404 222,402 224,401 226,400 227,398 229,397 231,396 232,394 234,393 236,392 237,391 239,390 241,389 242,388 244,386 246,385 248,384 249,383 251,382 253,380 254,379 256,378 258,376 259,375 261,373 263,372 265,370 266,368 268,367 270,365 271,363 273,361 275,360 276,358 278,356 280,354 281,352 283,350 285,348 287,346 288,344 290,342 292,340 293,338 295,336 297,334 298,331 300,329 302,327 304,324 305,322 307,319 309,317 310,314 312,312 314,309 315,306 317,304 319,301 320,298 322,296 324,293 326,291 327,288 329,285 331,283 332,281 334,278 336,276 337,274 339,272 341,270 343,268 344,266 346,265 348,263 349,261 351,260 353,258 354,257 356,255 358,254 359,252 361,251 363,249 365,248 366,246 368,244 370,243 371,241 373,239 375,238 376,236 378,234 380,232 381,230 383,228 385,226 387,224 388,221 390,219 392,217 393,215 395,213 397,211 398,208 400,206 402,204 404,202 405,200 407,198 409,196 410,195 412,193 414,191 415,190 417,188 419,187 420,186 422,184 424,183 426,182 427,181 429,180 431,178 432,177 434,176 436,175 437,174 439,173 441,171 443,170 444,168 446,167 448,166 449,164 451,162 453,161 454,159 456,158 458,156 459,154 461,153 463,151 465,149 466,148 468,146 470,144 471,143 473,141 475,139 476,138 478,136 480,134 482,132 483,130 485,128 487,126 488,124 490,122 492,120 493,118 495,116 497,114 498,112 500,110 502,108 504,106 505,105 507,103 509,101 510,100 512,99 514,98 515,96 517,95 519,95 521,94 522,93 524,93 526,92 527,92 529,92 531,92 532,92 534,92 536,92 537,92 539,92 541,93 543,93 544,93 546,93 548,94 549,94 551,94 553,95 554,95 556,95 558,95 560,95 561,95 563,96 565,96 566,96 568,96 570,96 571,96 573,96 575,96 576,97 578,97 580,97 582,98 583,98 585,99 587,99 588,100 590,101 592,102 593,103 595,104 597,105 599,106 600,108 602,109 604,111 605,112 607,114 609,116 610,118 612,120 614,122 615,124 617,126 619,129 621,131 622,133 624,135 626,137 627,140 629,142 631,144 632,146 634,148 636,150 638,152 639,153 641,155 643,157 644,158 646,160 648,161 649,163 651,164 653,166 654,167 656,169 658,171 660,173 661,175 663,177 665,179 666,181 668,184 670,186 671,189 673,191 675,194 676,197 678,200 680,202 682,205 683,208 685,211 687,213 688,216 690,219 692,222 693,224 695,227 697,229 699,232 700,235 702,237 704,240 705,243 707,245 709,248 710,251 712,254 714,257 715,259 717,262 719,265 721,268 722,271 724,274 726,277 727,280 729,283 731,286 732,289 734,292 736,295 738,297 739,299 741,302 743,304 744,306 746,308 748,310 749,311 751,313 753,315 754,316 756,318 758,319 760,321 761,323 763,324 765,326 766,328 768,330 770,332 771,333 773,335 775,338 777,340 778,342 780,344 782,346 783,348 785,351 787,353 788,355 790,357 792,359 793,361 795,363 797,365 799,367 800,369 802,371 804,373 805,375 807,377 809,378 810,380 812,382 814,383 816,385 817,386 819,388 821,389 822,391 824,393 826,394 827,396 829,397 831,399 832,400 834,402 836,404 838,405 839,407 841,408 843,410 844,412 846,413 848,415 849,416 851,418 853,420 853,473 164,473 "/>
<polyline fill="none" opacity="1" stroke="#1F78B4" stroke-width="3" points="528,473 528,92 "/>
<text x="798" y="68" dy="0.76em" text-anchor="start" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
Bootstrap distribution
</text>
<text x="798" y="83" dy="0.76em" text-anchor="start" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
Confidence interval
</text>
<text x="798" y="98" dy="0.76em" text-anchor="start" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
Point estimate
</text>
<polyline fill="none" opacity="1" stroke="#1F78B4" stroke-width="1" points="768,73 788,73 "/>
<rect x="768" y="83" width="20" height="10" opacity="0.25" fill="#1F78B4" stroke="none"/>
<polyline fill="none" opacity="1" stroke="#1F78B4" stroke-width="1" points="768,103 788,103 "/>
</svg>

After

Width:  |  Height:  |  Size: 12 KiB

View File

@ -1,23 +1,22 @@
use crate::lw_rpc::compact_tx_streamer_client::CompactTxStreamerClient;
use crate::lw_rpc::*;
use crate::NETWORK;
use ff::PrimeField;
use group::GroupEncoding;
use rayon::prelude::*;
use tonic::transport::Channel;
use tonic::Request;
use zcash_primitives::sapling::note_encryption::try_sapling_compact_note_decryption;
use crate::NETWORK;
use zcash_primitives::consensus::BlockHeight;
use zcash_primitives::sapling::SaplingIvk;
use zcash_primitives::transaction::components::OutputDescription;
use jubjub::Scalar;
use group::GroupEncoding;
use ff::PrimeField;
use zcash_primitives::merkle_tree::{CommitmentTree, IncrementalWitness};
use zcash_primitives::sapling::note_encryption::try_sapling_compact_note_decryption;
use zcash_primitives::sapling::{Node, Note, SaplingIvk};
use zcash_primitives::transaction::components::sapling::CompactOutputDescription;
use tokio::runtime::Runtime;
use std::sync::{Arc, Mutex};
use tokio::task::JoinHandle;
use futures::future::JoinAll;
use rayon::prelude::*;
use crate::commitment::{CTree, Witness};
use std::time::Instant;
use log::info;
const MAX_CHUNK: u32 = 50000;
pub const LWD_URL: &str = "http://127.0.0.1:9067";
pub async fn get_latest_height(
client: &mut CompactTxStreamerClient<Channel>,
@ -32,18 +31,26 @@ pub async fn get_latest_height(
pub async fn download_chain(
client: &mut CompactTxStreamerClient<Channel>,
start_height: u32,
end_height: u32
end_height: u32,
) -> anyhow::Result<Vec<CompactBlock>> {
let mut cbs: Vec<CompactBlock> = Vec::new();
let mut s = start_height + 1;
while s < end_height {
eprintln!("{}", s);
let e = (s + MAX_CHUNK).min(end_height);
let e = (s + MAX_CHUNK - 1).min(end_height);
let range = BlockRange {
start: Some(BlockId { height: s as u64, hash: vec![] }),
end: Some(BlockId { height: e as u64, hash: vec![] })
start: Some(BlockId {
height: s as u64,
hash: vec![],
}),
end: Some(BlockId {
height: e as u64,
hash: vec![],
}),
};
let mut block_stream = client.get_block_range(Request::new(range)).await?.into_inner();
let mut block_stream = client
.get_block_range(Request::new(range))
.await?
.into_inner();
while let Some(block) = block_stream.message().await? {
cbs.push(block);
}
@ -52,12 +59,25 @@ pub async fn download_chain(
Ok(cbs)
}
struct DecryptNode {
pub struct DecryptNode {
ivks: Vec<SaplingIvk>,
}
fn decrypt_notes(block: &CompactBlock, ivks: &[SaplingIvk]) {
pub struct DecryptedBlock {
pub height: u32,
pub notes: Vec<DecryptedNote>,
pub count_outputs: u32,
}
pub struct DecryptedNote {
pub note: Note,
pub position: u32,
}
fn decrypt_notes(block: &CompactBlock, ivks: &[SaplingIvk]) -> DecryptedBlock {
let height = BlockHeight::from_u32(block.height as u32);
let mut count_outputs = 0u32;
let mut notes: Vec<DecryptedNote> = vec![];
for vtx in block.vtx.iter() {
for co in vtx.outputs.iter() {
let mut cmu = [0u8; 32];
@ -72,41 +92,151 @@ fn decrypt_notes(block: &CompactBlock, ivks: &[SaplingIvk]) {
enc_ciphertext: co.ciphertext.to_vec(),
};
for ivk in ivks.iter() {
if let Some((note, pa)) = try_sapling_compact_note_decryption(&NETWORK, height, ivk, &od) {
println!("{:?} {:?}", note, pa);
if let Some((note, _pa)) =
try_sapling_compact_note_decryption(&NETWORK, height, ivk, &od)
{
notes.push(DecryptedNote {
note,
position: count_outputs,
});
}
}
count_outputs += 1;
}
}
DecryptedBlock {
height: block.height as u32,
notes,
count_outputs,
}
}
impl DecryptNode {
pub fn new(ivks: Vec<SaplingIvk>) -> DecryptNode {
DecryptNode {
ivks,
DecryptNode { ivks }
}
pub fn decrypt_blocks(&self, blocks: &[CompactBlock]) -> Vec<DecryptedBlock> {
let mut decrypted_blocks: Vec<DecryptedBlock> = blocks
.par_iter()
.map(|b| decrypt_notes(b, &self.ivks))
.collect();
decrypted_blocks.sort_by(|a, b| a.height.cmp(&b.height));
decrypted_blocks
}
}
#[allow(dead_code)]
async fn get_tree_state(client: &mut CompactTxStreamerClient<Channel>, height: u32) -> String {
let block_id = BlockId {
height: height as u64,
hash: vec![],
};
let rep = client
.get_tree_state(Request::new(block_id))
.await
.unwrap()
.into_inner();
rep.tree
}
/* Using the IncrementalWitness */
#[allow(dead_code)]
fn calculate_tree_state_v1(
cbs: &[CompactBlock],
blocks: &[DecryptedBlock],
height: u32,
mut tree_state: CommitmentTree<Node>,
) -> Vec<IncrementalWitness<Node>> {
let mut witnesses: Vec<IncrementalWitness<Node>> = vec![];
for (cb, block) in cbs.iter().zip(blocks) {
assert_eq!(cb.height as u32, block.height);
if block.height < height {
continue;
} // skip before height
let mut notes = block.notes.iter();
let mut n = notes.next();
let mut i = 0u32;
for tx in cb.vtx.iter() {
for co in tx.outputs.iter() {
let mut cmu = [0u8; 32];
cmu.copy_from_slice(&co.cmu);
let node = Node::new(cmu);
tree_state.append(node).unwrap();
for w in witnesses.iter_mut() {
w.append(node).unwrap();
}
if let Some(nn) = n {
if i == nn.position {
let w = IncrementalWitness::from_tree(&tree_state);
witnesses.push(w);
n = notes.next();
}
}
i += 1;
}
}
}
pub fn decrypt_blocks(&self, blocks: &[CompactBlock]) {
blocks.par_iter().for_each(|b| {
decrypt_notes(b, &self.ivks);
});
// let mut bb: Vec<u8> = vec![];
// tree_state.write(&mut bb).unwrap();
// hex::encode(bb)
witnesses
}
pub fn calculate_tree_state_v2(cbs: &[CompactBlock], blocks: &[DecryptedBlock]) -> Vec<Witness> {
let mut p = 0usize;
let mut nodes: Vec<Node> = vec![];
let mut positions: Vec<usize> = vec![];
let start = Instant::now();
for (cb, block) in cbs.iter().zip(blocks) {
assert_eq!(cb.height as u32, block.height);
let mut notes = block.notes.iter();
let mut n = notes.next();
let mut i = 0u32;
for tx in cb.vtx.iter() {
for co in tx.outputs.iter() {
let mut cmu = [0u8; 32];
cmu.copy_from_slice(&co.cmu);
let node = Node::new(cmu);
nodes.push(node);
if let Some(nn) = n {
if i == nn.position {
positions.push(p);
n = notes.next();
}
}
i += 1;
p += 1;
}
}
}
info!("Build CMU list: {} ms - {} nodes", start.elapsed().as_millis(), nodes.len());
let start = Instant::now();
let (_tree, positions) = CTree::calc_state(&mut nodes, &positions);
let witnesses: Vec<_> = positions.iter().map(|p| p.witness.clone()).collect();
info!("Tree State & Witnesses: {} ms", start.elapsed().as_millis());
witnesses
}
#[cfg(test)]
mod tests {
use crate::chain::{get_latest_height, download_chain, DecryptNode};
#[allow(unused_imports)]
use crate::chain::{download_chain, get_latest_height, get_tree_state, calculate_tree_state_v1, calculate_tree_state_v2, DecryptNode};
use crate::lw_rpc::compact_tx_streamer_client::CompactTxStreamerClient;
use zcash_primitives::consensus::{Parameters, NetworkUpgrade};
use zcash_client_backend::encoding::decode_extended_full_viewing_key;
use crate::NETWORK;
use dotenv;
use tokio::runtime::Runtime;
use std::time::Instant;
use zcash_client_backend::encoding::decode_extended_full_viewing_key;
use zcash_primitives::consensus::{NetworkUpgrade, Parameters};
use crate::chain::LWD_URL;
#[tokio::test]
async fn test_get_latest_height() -> anyhow::Result<()> {
let mut client = CompactTxStreamerClient::connect("http://127.0.0.1:9067").await?;
let mut client = CompactTxStreamerClient::connect(LWD_URL).await?;
let height = get_latest_height(&mut client).await?;
assert!(height > 1288000);
Ok(())
@ -117,11 +247,17 @@ mod tests {
dotenv::dotenv().unwrap();
let ivk = dotenv::var("IVK").unwrap();
let fvk = decode_extended_full_viewing_key(NETWORK.hrp_sapling_extended_full_viewing_key(), &ivk).unwrap().unwrap();
let fvk =
decode_extended_full_viewing_key(NETWORK.hrp_sapling_extended_full_viewing_key(), &ivk)
.unwrap()
.unwrap();
let ivk = fvk.fvk.vk.ivk();
let decrypter = DecryptNode::new(vec![ivk]);
let mut client = CompactTxStreamerClient::connect("http://127.0.0.1:9067").await?;
let start_height: u32 = crate::NETWORK.activation_height(NetworkUpgrade::Sapling).unwrap().into();
let mut client = CompactTxStreamerClient::connect(LWD_URL).await?;
let start_height: u32 = crate::NETWORK
.activation_height(NetworkUpgrade::Sapling)
.unwrap()
.into();
let end_height = get_latest_height(&mut client).await?;
let start = Instant::now();
@ -129,9 +265,30 @@ mod tests {
eprintln!("Download chain: {} ms", start.elapsed().as_millis());
let start = Instant::now();
decrypter.decrypt_blocks(&cbs);
let blocks = decrypter.decrypt_blocks(&cbs);
eprintln!("Decrypt Notes: {} ms", start.elapsed().as_millis());
// no need to calculate tree before the first note if we can
// get it from the server
// disabled because I want to see the performance of a complete scan
// let first_block = blocks.iter().find(|b| !b.notes.is_empty()).unwrap();
// let height = first_block.height - 1;
// let tree_state = get_tree_state(&mut client, height).await;
// let tree_state = hex::decode(tree_state).unwrap();
// let tree_state = CommitmentTree::<Node>::read(&*tree_state).unwrap();
// let witnesses = calculate_tree_state(&cbs, &blocks, 0, tree_state);
let witnesses = calculate_tree_state_v2(&cbs, &blocks);
eprintln!("# Witnesses {}", witnesses.len());
for w in witnesses.iter() {
let mut bb: Vec<u8> = vec![];
w.write(&mut bb).unwrap();
eprintln!("{}", hex::encode(&bb));
}
Ok(())
}
}

292
src/commitment.rs Normal file
View File

@ -0,0 +1,292 @@
use zcash_primitives::merkle_tree::Hashable;
use zcash_primitives::sapling::Node;
use std::io::Write;
use zcash_primitives::serialize::{Optional, Vector};
use byteorder::WriteBytesExt;
use rayon::prelude::*;
#[derive(Clone)]
pub struct CTree {
left: Option<Node>,
right: Option<Node>,
parents: Vec<Option<Node>>,
}
#[derive(Clone)]
pub struct Witness {
tree: CTree, // commitment tree at the moment the witness is created: immutable
filled: Vec<Node>, // as more nodes are added, levels get filled up: won't change anymore
cursor: CTree, // partial tree which still updates when nodes are added
}
impl Witness {
pub fn new() -> Witness {
Witness {
tree: CTree::new(),
filled: vec![],
cursor: CTree::new(),
}
}
pub fn write<W: Write>(&self, mut writer: W) -> std::io::Result<()> {
self.tree.write(&mut writer)?;
Vector::write(&mut writer, &self.filled, |w, n| n.write(w))?;
if self.cursor.left == None && self.cursor.right == None {
writer.write_u8(0)?;
}
else {
writer.write_u8(1)?;
self.cursor.write(writer)?;
};
Ok(())
}
}
pub struct NotePosition {
p: usize,
p2: Option<usize>,
c: usize,
pub witness: Witness,
is_last: bool,
}
fn collect(tree: &mut CTree, mut p: usize, depth: usize, commitments: &[Node]) -> usize {
if depth == 0 {
if p % 2 == 0 {
tree.left = Some(commitments[p]);
} else {
tree.left = Some(commitments[p - 1]);
tree.right = Some(commitments[p]);
p -= 1;
}
} else {
// the rest gets combined as a binary tree
if p % 2 != 0 {
tree.parents.push(Some(commitments[p - 1]));
} else if p != 0 {
tree.parents.push(None);
}
}
p
}
impl NotePosition {
fn new(position: usize, count: usize) -> NotePosition {
let is_last = position == count - 1;
let c = if !is_last {
cursor_start_position(position, count)
} else {
0
};
let cursor_length = count - c;
NotePosition {
p: position,
p2: if cursor_length > 0 {
Some(cursor_length - 1)
} else {
None
},
c,
witness: Witness::new(),
is_last,
}
}
fn collect(&mut self, depth: usize, commitments: &[Node]) {
let count = commitments.len();
let p = self.p;
self.p = collect(&mut self.witness.tree, p, depth, commitments);
if !self.is_last {
if p % 2 == 0 && p + 1 < commitments.len() {
let filler = commitments[p + 1];
self.witness.filled.push(filler);
}
}
if let Some(ref mut p2) = self.p2 {
if !self.is_last {
let cursor_commitments = &commitments[self.c..count];
*p2 = collect(&mut self.witness.cursor, *p2, depth, cursor_commitments);
}
*p2 /= 2;
}
self.p /= 2;
self.c /= 2;
}
}
fn cursor_start_position(mut position: usize, mut count: usize) -> usize {
assert!(position < count);
// same logic as filler
let mut depth = 0;
loop {
if position % 2 == 0 {
if position + 1 < count {
position += 1;
} else {
break;
}
}
position /= 2;
count /= 2;
depth += 1;
}
(position + 1) << depth
}
impl CTree {
pub fn calc_state(commitments: &mut [Node], positions: &[usize]) -> (CTree, Vec<NotePosition>) {
let mut n = commitments.len();
let mut positions: Vec<_> = positions.iter().map(|&p| NotePosition::new(p, n)).collect();
assert_ne!(n, 0);
let mut depth = 0usize;
let mut frontier = NotePosition::new(n - 1, n);
while n > 0 {
let commitment_slice = &commitments[0..n];
frontier.collect(depth, commitment_slice);
for p in positions.iter_mut() {
p.collect(depth, commitment_slice);
}
let nn = n / 2;
let next_level: Vec<_> = (0..nn).into_par_iter().map(|i| {
Node::combine(depth, &commitments[2 * i], &commitments[2 * i + 1])
}).collect();
commitments[0..nn].copy_from_slice(&next_level);
depth += 1;
n = nn;
}
(frontier.witness.tree, positions)
}
fn new() -> CTree {
CTree {
left: None,
right: None,
parents: vec![],
}
}
fn write<W: Write>(&self, mut writer: W) -> std::io::Result<()> {
Optional::write(&mut writer, &self.left, |w, n| n.write(w))?;
Optional::write(&mut writer, &self.right, |w, n| n.write(w))?;
Vector::write(&mut writer, &self.parents, |w, e| {
Optional::write(w, e, |w, n| n.write(w))
})
}
}
#[cfg(test)]
mod tests {
use crate::commitment::{cursor_start_position, CTree};
#[allow(unused_imports)]
use crate::print::{print_tree, print_witness};
use std::time::Instant;
use zcash_primitives::merkle_tree::{CommitmentTree, IncrementalWitness};
use zcash_primitives::sapling::Node;
/*
Build incremental witnesses with both methods and compare their binary serialization
*/
#[test]
fn test_calc_witnesses() {
const NUM_NODES: u32 = 100000; // number of notes
const WITNESS_PERCENT: u32 = 1; // percentage of notes that are ours
const DEBUG_PRINT: bool = false;
let witness_freq = 100 / WITNESS_PERCENT;
let mut tree1: CommitmentTree<Node> = CommitmentTree::empty();
let mut nodes: Vec<Node> = vec![];
let mut witnesses: Vec<IncrementalWitness<Node>> = vec![];
let mut positions: Vec<usize> = vec![];
for i in 1..=NUM_NODES {
let mut bb = [0u8; 32];
bb[0..4].copy_from_slice(&i.to_be_bytes());
let node = Node::new(bb);
tree1.append(node).unwrap();
for w in witnesses.iter_mut() {
w.append(node).unwrap();
}
if i % witness_freq == 0 {
let w = IncrementalWitness::<Node>::from_tree(&tree1);
witnesses.push(w);
positions.push((i - 1) as usize);
}
nodes.push(node);
}
let start = Instant::now();
let (tree2, positions) = CTree::calc_state(&mut nodes, &positions);
eprintln!(
"Update State & Witnesses: {} ms",
start.elapsed().as_millis()
);
println!("# witnesses = {}", positions.len());
for (w, p) in witnesses.iter().zip(&positions) {
let mut bb1: Vec<u8> = vec![];
w.write(&mut bb1).unwrap();
let mut bb2: Vec<u8> = vec![];
p.witness.write(&mut bb2).unwrap();
assert_eq!(bb1.as_slice(), bb2.as_slice());
}
if DEBUG_PRINT {
print_witness(&witnesses[0]);
println!("Tree");
let t = &positions[0].witness.tree;
println!("{:?}", t.left.map(|n| hex::encode(n.repr)));
println!("{:?}", t.right.map(|n| hex::encode(n.repr)));
for p in t.parents.iter() {
println!("{:?}", p.map(|n| hex::encode(n.repr)));
}
println!("Filled");
for f in positions[0].witness.filled.iter() {
println!("{:?}", hex::encode(f.repr));
}
println!("Cursor");
let t = &positions[0].witness.cursor;
println!("{:?}", t.left.map(|n| hex::encode(n.repr)));
println!("{:?}", t.right.map(|n| hex::encode(n.repr)));
for p in t.parents.iter() {
println!("{:?}", p.map(|n| hex::encode(n.repr)));
}
println!("{:?}", tree1.left.map(|n| hex::encode(n.repr)));
println!("{:?}", tree1.right.map(|n| hex::encode(n.repr)));
for p in tree1.parents.iter() {
println!("{:?}", p.map(|n| hex::encode(n.repr)));
}
println!("-----");
println!("{:?}", tree2.left.map(|n| hex::encode(n.repr)));
println!("{:?}", tree2.right.map(|n| hex::encode(n.repr)));
for p in tree2.parents.iter() {
println!("{:?}", p.map(|n| hex::encode(n.repr)));
}
}
}
#[test]
fn test_cursor() {
// println!("{}", cursor_start_position(8, 14));
println!("{}", cursor_start_position(9, 14));
// println!("{}", cursor_start_position(10, 14));
}
}

View File

@ -5,4 +5,12 @@ pub mod lw_rpc;
pub const NETWORK: Network = Network::MainNetwork;
mod print;
mod chain;
mod commitment;
mod scan;
pub use crate::chain::{LWD_URL, get_latest_height, download_chain, calculate_tree_state_v2, DecryptNode};
pub use crate::lw_rpc::compact_tx_streamer_client::CompactTxStreamerClient;
pub use crate::lw_rpc::*;
pub use crate::scan::scan_all;

View File

@ -1,5 +1,18 @@
#[tokio::main]
async fn main() -> anyhow::Result<()> {
use zcash_client_backend::encoding::decode_extended_full_viewing_key;
use sync::{NETWORK, scan_all};
use zcash_primitives::consensus::Parameters;
Ok(())
#[tokio::main]
async fn main() {
dotenv::dotenv().unwrap();
env_logger::init();
let ivk = dotenv::var("IVK").unwrap();
let fvk =
decode_extended_full_viewing_key(NETWORK.hrp_sapling_extended_full_viewing_key(), &ivk)
.unwrap()
.unwrap();
let ivk = fvk.fvk.vk.ivk();
scan_all(&vec![ivk]).await.unwrap();
}

28
src/print.rs Normal file
View File

@ -0,0 +1,28 @@
use zcash_primitives::sapling::Node;
use zcash_primitives::merkle_tree::{CommitmentTree, IncrementalWitness};
#[allow(dead_code)]
pub fn print_node(n: &Node) {
println!("{:?}", hex::encode(n.repr));
}
#[allow(dead_code)]
pub fn print_tree(t: &CommitmentTree<Node>) {
println!("{:?}", t.left.map(|n| hex::encode(n.repr)));
println!("{:?}", t.right.map(|n| hex::encode(n.repr)));
for p in t.parents.iter() {
println!("{:?}", p.map(|n| hex::encode(n.repr)));
}
}
#[allow(dead_code)]
pub fn print_witness(w: &IncrementalWitness<Node>) {
println!("Tree");
print_tree(&w.tree);
println!("Filled");
for n in w.filled.iter() {
print_node(n);
}
println!("Cursor");
w.cursor.as_ref().map(|c| print_tree(c));
}

40
src/scan.rs Normal file
View File

@ -0,0 +1,40 @@
use zcash_primitives::sapling::SaplingIvk;
use crate::lw_rpc::compact_tx_streamer_client::CompactTxStreamerClient;
use crate::{DecryptNode, LWD_URL, get_latest_height, download_chain, calculate_tree_state_v2};
use zcash_primitives::consensus::{NetworkUpgrade, Parameters};
use std::time::Instant;
use log::info;
pub async fn scan_all(ivks: &[SaplingIvk]) -> anyhow::Result<()> {
let decrypter = DecryptNode::new(ivks.to_vec());
let total_start = Instant::now();
let mut client = CompactTxStreamerClient::connect(LWD_URL).await?;
let start_height: u32 = crate::NETWORK
.activation_height(NetworkUpgrade::Sapling)
.unwrap()
.into();
let end_height = get_latest_height(&mut client).await?;
let start = Instant::now();
let cbs = download_chain(&mut client, start_height, end_height).await?;
info!("Download chain: {} ms", start.elapsed().as_millis());
let start = Instant::now();
let blocks = decrypter.decrypt_blocks(&cbs);
info!("Decrypt Notes: {} ms", start.elapsed().as_millis());
let witnesses = calculate_tree_state_v2(&cbs, &blocks);
info!("# Witnesses {}", witnesses.len());
for w in witnesses.iter() {
let mut bb: Vec<u8> = vec![];
w.write(&mut bb).unwrap();
log::debug!("{}", hex::encode(&bb));
}
info!("Total: {} ms", total_start.elapsed().as_millis());
Ok(())
}