# HG changeset patch
# User Tuomo Valkonen
# Date 1735655145 18000
# Node ID b087e3eab1917799327b45963ff52c579513e39e
# Parent efa60bc4f743e97fba53e4d373d1d73038c338bb
New version of sliding.
diff -r efa60bc4f743 -r b087e3eab191 Cargo.lock
--- a/Cargo.lock Thu Aug 29 00:00:00 2024 -0500
+++ b/Cargo.lock Tue Dec 31 09:25:45 2024 -0500
@@ -4,9 +4,9 @@
[[package]]
name = "GSL"
-version = "6.0.0"
+version = "7.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c9becaf6d7d1ba36a457288e661fa6a0472e8328629276f45369eafcd48ef1ce"
+checksum = "db3943d5a15b5c46e991124abee6a1bc89c7c9ffb25dbb8aeb4eab926fd9b307"
dependencies = [
"GSL-sys",
"paste",
@@ -23,24 +23,19 @@
]
[[package]]
-name = "adler"
-version = "1.0.2"
+name = "aho-corasick"
+version = "1.1.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe"
-
-[[package]]
-name = "aho-corasick"
-version = "0.7.20"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "cc936419f96fa211c1b9166887b38e5e40b19958e5b895be7c1f93adec7071ac"
+checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916"
dependencies = [
"memchr",
]
[[package]]
name = "alg_tools"
-version = "0.2.0-dev"
+version = "0.3.0-dev"
dependencies = [
+ "anyhow",
"colored",
"cpu-time",
"csv",
@@ -52,7 +47,7 @@
"rayon",
"serde",
"serde_json",
- "trait-set",
+ "simba",
]
[[package]]
@@ -71,6 +66,61 @@
]
[[package]]
+name = "anstream"
+version = "0.6.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8acc5369981196006228e28809f761875c0327210a891e941f4c683b3a99529b"
+dependencies = [
+ "anstyle",
+ "anstyle-parse",
+ "anstyle-query",
+ "anstyle-wincon",
+ "colorchoice",
+ "is_terminal_polyfill",
+ "utf8parse",
+]
+
+[[package]]
+name = "anstyle"
+version = "1.0.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "55cc3b69f167a1ef2e161439aa98aed94e6028e5f9a59be9a6ffb47aef1651f9"
+
+[[package]]
+name = "anstyle-parse"
+version = "0.2.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3b2d16507662817a6a20a9ea92df6652ee4f94f914589377d69f3b21bc5798a9"
+dependencies = [
+ "utf8parse",
+]
+
+[[package]]
+name = "anstyle-query"
+version = "1.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "79947af37f4177cfead1110013d678905c37501914fba0efea834c3fe9a8d60c"
+dependencies = [
+ "windows-sys 0.59.0",
+]
+
+[[package]]
+name = "anstyle-wincon"
+version = "3.0.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2109dbce0e72be3ec00bed26e6a7479ca384ad226efdd66db8fa2e3a38c83125"
+dependencies = [
+ "anstyle",
+ "windows-sys 0.59.0",
+]
+
+[[package]]
+name = "anyhow"
+version = "1.0.95"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "34ac096ce696dc2fcabef30516bb13c0a68a11d30131d3df6f04711467681b04"
+
+[[package]]
name = "approx"
version = "0.5.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -86,60 +136,30 @@
checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
[[package]]
-name = "bit_field"
-version = "0.10.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "dc827186963e592360843fb5ba4b973e145841266c1357f7180c43526f2e5b61"
-
-[[package]]
-name = "bitflags"
-version = "1.3.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
-
-[[package]]
name = "bitflags"
version = "2.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b4682ae6287fcf752ecaabbfcc7b6f9b72aa33933dc23a554d853aea8eea8635"
[[package]]
-name = "bstr"
-version = "0.2.17"
+name = "bumpalo"
+version = "3.16.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ba3569f383e8f1598449f1a423e72e99569137b47740b1da11ef19af3d5c3223"
-dependencies = [
- "lazy_static",
- "memchr",
- "regex-automata",
- "serde",
-]
-
-[[package]]
-name = "bumpalo"
-version = "3.14.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7f30e7476521f6f8af1a1c4c0b8cc94f0bee37d91763d0ca2665f299b6cd8aec"
+checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c"
[[package]]
name = "bytemuck"
-version = "1.14.0"
+version = "1.20.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "374d28ec25809ee0e23827c2ab573d729e293f281dfe393500e7ad618baa61c6"
-
-[[package]]
-name = "byteorder"
-version = "1.5.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b"
+checksum = "8b37c88a63ffd85d15b406896cc343916d7cf57838a847b3a6f2ca5d39a5695a"
[[package]]
name = "cc"
-version = "1.0.83"
+version = "1.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f1174fb0b6ec23863f8b971027804a42614e347eafb0a95bf0b12cdae21fc4d0"
+checksum = "1aeb932158bd710538c73702db6945cb68a8fb08c519e6e12706b94263b36db8"
dependencies = [
- "libc",
+ "shlex",
]
[[package]]
@@ -150,9 +170,9 @@
[[package]]
name = "chrono"
-version = "0.4.31"
+version = "0.4.39"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7f2c685bad3eb3d45a01354cedb7d5faa66194d1d58ba6e267a8de788f79db38"
+checksum = "7e36cc9d416881d2e24f9a963be5fb1cd90966419ac844274161d10488b3e825"
dependencies = [
"android-tzdata",
"iana-time-zone",
@@ -160,22 +180,29 @@
"num-traits",
"serde",
"wasm-bindgen",
- "windows-targets",
+ "windows-targets 0.52.6",
]
[[package]]
name = "clap"
-version = "4.0.32"
+version = "4.5.23"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a7db700bc935f9e43e88d00b0850dae18a63773cfbec6d8e070fccf7fef89a39"
+checksum = "3135e7ec2ef7b10c6ed8950f0f792ed96ee093fa088608f1c76e569722700c84"
dependencies = [
- "bitflags 1.3.2",
+ "clap_builder",
"clap_derive",
+]
+
+[[package]]
+name = "clap_builder"
+version = "4.5.23"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "30582fc632330df2bd26877bde0c1f4470d57c582bbc070376afcd04d8cb4838"
+dependencies = [
+ "anstream",
+ "anstyle",
"clap_lex",
- "is-terminal",
- "once_cell",
"strsim",
- "termcolor",
"terminal_size",
"unicase",
"unicode-width",
@@ -183,57 +210,43 @@
[[package]]
name = "clap_derive"
-version = "4.0.21"
+version = "4.5.18"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0177313f9f02afc995627906bbd8967e2be069f5261954222dac78290c2b9014"
+checksum = "4ac6a0c7b1a9e9a5186361f67dfa1b88213572f427fb9ab038efb2bd8c582dab"
dependencies = [
"heck",
- "proc-macro-error",
"proc-macro2",
"quote",
- "syn 1.0.109",
+ "syn 2.0.93",
]
[[package]]
name = "clap_lex"
-version = "0.3.3"
+version = "0.7.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "033f6b7a4acb1f358c742aaca805c939ee73b4c6209ae4318ec7aca81c42e646"
-dependencies = [
- "os_str_bytes",
-]
+checksum = "f46ad14479a25103f283c0f10005961cf086d8dc42205bb44c46ac563475dca6"
[[package]]
-name = "color_quant"
-version = "1.1.0"
+name = "colorchoice"
+version = "1.0.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3d7b894f5411737b7867f4827955924d7c254fc9f4d91a6aad6b097804b1018b"
-
-[[package]]
-name = "colorbrewer"
-version = "0.2.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "525be5012d97bc222e124ded87f18601e6fbd24a406761bcb1664475663919a6"
-dependencies = [
- "rgb",
-]
+checksum = "5b63caa9aa9397e2d9480a9b13673856c78d8ac123288526c37d7839f2a86990"
[[package]]
name = "colored"
-version = "2.0.4"
+version = "2.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2674ec482fbc38012cf31e6c42ba0177b431a0cb6f15fe40efa5aab1bda516f6"
+checksum = "cbf2150cce219b664a8a70df7a1f933836724b503f8a413af9365b4dcc4d90b8"
dependencies = [
- "is-terminal",
"lazy_static",
- "windows-sys",
+ "windows-sys 0.48.0",
]
[[package]]
name = "core-foundation-sys"
-version = "0.8.4"
+version = "0.8.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e496a50fda8aacccc86d7529e2c1e0892dbd0f898a6b5645b5561b89c3210efa"
+checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b"
[[package]]
name = "cpu-time"
@@ -246,15 +259,6 @@
]
[[package]]
-name = "crc32fast"
-version = "1.3.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b540bd8bc810d3885c6ea91e2018302f68baba2129ab3e88f32389ee9370880d"
-dependencies = [
- "cfg-if",
-]
-
-[[package]]
name = "crossbeam-deque"
version = "0.8.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -288,20 +292,13 @@
]
[[package]]
-name = "crunchy"
-version = "0.2.2"
+name = "csv"
+version = "1.3.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7"
-
-[[package]]
-name = "csv"
-version = "1.1.6"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "22813a6dc45b335f9bade10bf7271dc477e81113e89eb251a0bc2a8a81c536e1"
+checksum = "acdc4883a9c96732e4733212c01447ebd805833b7275a73ca3ee080fd77afdaf"
dependencies = [
- "bstr",
"csv-core",
- "itoa 0.4.8",
+ "itoa",
"ryu",
"serde",
]
@@ -317,9 +314,9 @@
[[package]]
name = "either"
-version = "1.9.0"
+version = "1.13.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a26ae43d7bcc3b814de94796a5e736d4029efb0ee900c12e2d54c993ad1a1e07"
+checksum = "60b1af1c220855b6ceac025d3f6ecdd2b7c4894bfe9cd9bda4fbb4bc7c0d4cf0"
[[package]]
name = "errno"
@@ -328,42 +325,7 @@
checksum = "ac3e13f66a2f95e32a39eaa81f6b95d42878ca0e1db0c7543723dfe12557e860"
dependencies = [
"libc",
- "windows-sys",
-]
-
-[[package]]
-name = "exr"
-version = "1.71.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "832a761f35ab3e6664babfbdc6cef35a4860e816ec3916dcfd0882954e98a8a8"
-dependencies = [
- "bit_field",
- "flume",
- "half",
- "lebe",
- "miniz_oxide",
- "rayon-core",
- "smallvec",
- "zune-inflate",
-]
-
-[[package]]
-name = "fdeflate"
-version = "0.3.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d329bdeac514ee06249dabc27877490f17f5d371ec693360768b838e19f3ae10"
-dependencies = [
- "simd-adler32",
-]
-
-[[package]]
-name = "flate2"
-version = "1.0.28"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "46303f565772937ffe1d394a4fac6f411c6013172fadde9dcdb1e147a086940e"
-dependencies = [
- "crc32fast",
- "miniz_oxide",
+ "windows-sys 0.48.0",
]
[[package]]
@@ -376,15 +338,6 @@
]
[[package]]
-name = "flume"
-version = "0.11.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "55ac459de2512911e4b674ce33cf20befaba382d05b62b008afc1c8b57cbf181"
-dependencies = [
- "spin",
-]
-
-[[package]]
name = "getrandom"
version = "0.2.10"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -396,48 +349,23 @@
]
[[package]]
-name = "gif"
-version = "0.12.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "80792593675e051cf94a4b111980da2ba60d4a83e43e0048c5693baab3977045"
-dependencies = [
- "color_quant",
- "weezl",
-]
-
-[[package]]
-name = "half"
-version = "2.2.1"
+name = "heck"
+version = "0.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "02b4af3693f1b705df946e9fe5631932443781d0aabb423b62fcd4d73f6d2fd0"
-dependencies = [
- "crunchy",
-]
-
-[[package]]
-name = "heck"
-version = "0.4.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8"
-
-[[package]]
-name = "hermit-abi"
-version = "0.3.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d77f7ec81a6d05a3abb01ab6eb7590f6083d08449fe5a1c8b1e620283546ccb7"
+checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea"
[[package]]
name = "iana-time-zone"
-version = "0.1.57"
+version = "0.1.61"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2fad5b825842d2b38bd206f3e81d6957625fd7f0a361e345c30e01a0ae2dd613"
+checksum = "235e081f3925a06703c2d0117ea8b91f042756fd6e7a6e5d901e8ca1a996b220"
dependencies = [
"android_system_properties",
"core-foundation-sys",
"iana-time-zone-haiku",
"js-sys",
"wasm-bindgen",
- "windows",
+ "windows-core",
]
[[package]]
@@ -450,82 +378,33 @@
]
[[package]]
-name = "image"
-version = "0.24.7"
+name = "is_terminal_polyfill"
+version = "1.70.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6f3dfdbdd72063086ff443e297b61695500514b1e41095b6fb9a5ab48a70a711"
-dependencies = [
- "bytemuck",
- "byteorder",
- "color_quant",
- "exr",
- "gif",
- "jpeg-decoder",
- "num-rational",
- "num-traits",
- "png",
- "qoi",
- "tiff",
-]
-
-[[package]]
-name = "io-lifetimes"
-version = "1.0.11"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "eae7b9aee968036d54dce06cebaefd919e4472e753296daccd6d344e3e2df0c2"
-dependencies = [
- "hermit-abi",
- "libc",
- "windows-sys",
-]
-
-[[package]]
-name = "is-terminal"
-version = "0.4.9"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "cb0889898416213fab133e1d33a0e5858a48177452750691bde3666d0fdbaf8b"
-dependencies = [
- "hermit-abi",
- "rustix 0.38.19",
- "windows-sys",
-]
+checksum = "7943c866cc5cd64cbc25b2e01621d07fa8eb2a1a23160ee81ce38704e97b8ecf"
[[package]]
name = "itertools"
-version = "0.10.5"
+version = "0.13.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473"
+checksum = "413ee7dfc52ee1a4949ceeb7dbc8a33f2d6c088194d9f922fb8318faf1f01186"
dependencies = [
"either",
]
[[package]]
name = "itoa"
-version = "0.4.8"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b71991ff56294aa922b450139ee08b3bfc70982c6b2c7562771375cf73542dd4"
-
-[[package]]
-name = "itoa"
version = "1.0.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "af150ab688ff2122fcef229be89cb50dd66af9e01a4ff320cc137eecc9bacc38"
[[package]]
-name = "jpeg-decoder"
-version = "0.3.0"
+name = "js-sys"
+version = "0.3.76"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "bc0000e42512c92e31c2252315bda326620a4e034105e900c98ec492fa077b3e"
+checksum = "6717b6b5b077764fb5966237269cb3c64edddde4b14ce42647430a78ced9e7b7"
dependencies = [
- "rayon",
-]
-
-[[package]]
-name = "js-sys"
-version = "0.3.64"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c5f195fe497f702db0f318b07fdd68edb16955aed830df8363d837542f8f935a"
-dependencies = [
+ "once_cell",
"wasm-bindgen",
]
@@ -536,12 +415,6 @@
checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
[[package]]
-name = "lebe"
-version = "0.5.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "03087c2bad5e1034e8cace5926dec053fb3790248370865f5117a7d0213354c8"
-
-[[package]]
name = "libc"
version = "0.2.149"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -555,31 +428,15 @@
[[package]]
name = "linux-raw-sys"
-version = "0.3.8"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ef53942eb7bf7ff43a617b3e2c1c4a5ecf5944a7c1bc12d7ee39bbb15e5c1519"
-
-[[package]]
-name = "linux-raw-sys"
version = "0.4.10"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "da2479e8c062e40bf0066ffa0bc823de0a9368974af99c9f6df941d2c231e03f"
[[package]]
-name = "lock_api"
-version = "0.4.10"
+name = "log"
+version = "0.4.22"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c1cc9717a20b1bb222f333e6a92fd32f7d8a18ddc5a3191a11af45dcbf4dcd16"
-dependencies = [
- "autocfg",
- "scopeguard",
-]
-
-[[package]]
-name = "log"
-version = "0.4.20"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f"
+checksum = "a7a70ba024b9dc04c27ea2f0c0548feb474ec5c54bba33a7f72f873a39d07b24"
[[package]]
name = "matrixmultiply"
@@ -607,20 +464,10 @@
]
[[package]]
-name = "miniz_oxide"
-version = "0.7.1"
+name = "nalgebra"
+version = "0.33.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e7810e0be55b428ada41041c41f32c9f1a42817901b4ccf45fa3d4b6561e74c7"
-dependencies = [
- "adler",
- "simd-adler32",
-]
-
-[[package]]
-name = "nalgebra"
-version = "0.31.4"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "20bd243ab3dbb395b39ee730402d2e5405e448c75133ec49cc977762c4cba3d1"
+checksum = "26aecdf64b707efd1310e3544d709c5c0ac61c13756046aaaba41be5c4f66a3b"
dependencies = [
"approx",
"matrixmultiply",
@@ -635,20 +482,20 @@
[[package]]
name = "nalgebra-macros"
-version = "0.1.0"
+version = "0.2.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "01fcc0b8149b4632adc89ac3b7b31a12fb6099a0317a4eb2ebff574ef7de7218"
+checksum = "254a5372af8fc138e36684761d3c0cdb758a4410e938babcff1c860ce14ddbfc"
dependencies = [
"proc-macro2",
"quote",
- "syn 1.0.109",
+ "syn 2.0.93",
]
[[package]]
name = "num"
-version = "0.4.1"
+version = "0.4.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b05180d69e3da0e530ba2a1dae5110317e49e3b7f3d41be227dc5f92e49ee7af"
+checksum = "3135b08af27d103b0a51f2ae0f8632117b7b185ccf931445affa8df530576a41"
dependencies = [
"num-bigint",
"num-complex",
@@ -660,39 +507,37 @@
[[package]]
name = "num-bigint"
-version = "0.4.4"
+version = "0.4.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "608e7659b5c3d7cba262d894801b9ec9d00de989e8a82bd4bef91d08da45cdc0"
+checksum = "a5e44f723f1133c9deac646763579fdb3ac745e418f2a7af9cd0c431da1f20b9"
dependencies = [
- "autocfg",
"num-integer",
"num-traits",
]
[[package]]
name = "num-complex"
-version = "0.4.4"
+version = "0.4.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1ba157ca0885411de85d6ca030ba7e2a83a28636056c7c699b07c8b6f7383214"
+checksum = "73f88a1307638156682bada9d7604135552957b7818057dcef22705b4d509495"
dependencies = [
"num-traits",
]
[[package]]
name = "num-integer"
-version = "0.1.45"
+version = "0.1.46"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9"
+checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f"
dependencies = [
- "autocfg",
"num-traits",
]
[[package]]
name = "num-iter"
-version = "0.1.43"
+version = "0.1.45"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7d03e6c028c5dc5cac6e2dec0efda81fc887605bb3d884578bb6d6bf7514e252"
+checksum = "1429034a0490724d0075ebb2bc9e875d6503c3cf69e235a8941aa757d83ef5bf"
dependencies = [
"autocfg",
"num-integer",
@@ -713,9 +558,9 @@
[[package]]
name = "num-traits"
-version = "0.2.17"
+version = "0.2.19"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "39e3200413f237f41ab11ad6d161bc7239c84dcb631773ccd7de3dfe4b5c267c"
+checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841"
dependencies = [
"autocfg",
"libm",
@@ -733,15 +578,9 @@
[[package]]
name = "once_cell"
-version = "1.18.0"
+version = "1.20.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "dd8b5dd2ae5ed71462c540258bedcb51965123ad7e7ccf4b9a8cafaa4a63576d"
-
-[[package]]
-name = "os_str_bytes"
-version = "6.5.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4d5d9eb14b174ee9aa2ef96dc2b94637a2d4b6e7cb873c7e171f0c20c6cf3eac"
+checksum = "1261fe7e33c73b354eab43b1273a57c8f967d0391e80353e51f764ac02cf6775"
[[package]]
name = "paste"
@@ -756,106 +595,48 @@
checksum = "26072860ba924cbfa98ea39c8c19b4dd6a4a25423dbdf219c1eca91aa0cf6964"
[[package]]
-name = "png"
-version = "0.17.10"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "dd75bf2d8dd3702b9707cdbc56a5b9ef42cec752eb8b3bafc01234558442aa64"
-dependencies = [
- "bitflags 1.3.2",
- "crc32fast",
- "fdeflate",
- "flate2",
- "miniz_oxide",
-]
-
-[[package]]
name = "pointsource_algs"
version = "2.0.0-dev"
dependencies = [
"GSL",
"alg_tools",
+ "anyhow",
"chrono",
"clap",
- "colorbrewer",
"colored",
"cpu-time",
"float_extras",
- "image",
"itertools",
"nalgebra",
"num-traits",
"numeric_literals",
- "poloto",
"rand",
"rand_distr",
"regex",
- "rgb",
"serde",
"serde_json",
]
[[package]]
-name = "poloto"
-version = "3.13.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a2541c28c0622b297e342444bd8b1d87b02c8478dd3ed0ecc3eee47dc4d13282"
-dependencies = [
- "tagger",
-]
-
-[[package]]
name = "ppv-lite86"
version = "0.2.17"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de"
[[package]]
-name = "proc-macro-error"
-version = "1.0.4"
+name = "proc-macro2"
+version = "1.0.92"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c"
-dependencies = [
- "proc-macro-error-attr",
- "proc-macro2",
- "quote",
- "syn 1.0.109",
- "version_check",
-]
-
-[[package]]
-name = "proc-macro-error-attr"
-version = "1.0.4"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869"
-dependencies = [
- "proc-macro2",
- "quote",
- "version_check",
-]
-
-[[package]]
-name = "proc-macro2"
-version = "1.0.69"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "134c189feb4956b20f6f547d2cf727d4c0fe06722b20a0eec87ed445a97f92da"
+checksum = "37d3544b3f2748c54e147655edb5025752e2303145b5aefb3c3ea2c78b973bb0"
dependencies = [
"unicode-ident",
]
[[package]]
-name = "qoi"
-version = "0.4.1"
+name = "quote"
+version = "1.0.38"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7f6d64c71eb498fe9eae14ce4ec935c555749aef511cca85b5568910d6e48001"
-dependencies = [
- "bytemuck",
-]
-
-[[package]]
-name = "quote"
-version = "1.0.33"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5267fca4496028628a95160fc423a33e8b2e6af8a5302579e322e4b520293cae"
+checksum = "0e4dccaaaf89514f546c693ddc140f729f958c247918a13380cccc6078391acc"
dependencies = [
"proc-macro2",
]
@@ -908,9 +689,9 @@
[[package]]
name = "rayon"
-version = "1.8.0"
+version = "1.10.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9c27db03db7734835b3f53954b534c91069375ce6ccaa2e065441e07d9b6cdb1"
+checksum = "b418a60154510ca1a002a752ca9714984e21e4241e804d32555251faf8b78ffa"
dependencies = [
"either",
"rayon-core",
@@ -918,9 +699,9 @@
[[package]]
name = "rayon-core"
-version = "1.12.0"
+version = "1.12.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5ce3fb6ad83f861aac485e76e1985cd109d9a3713802152be56c3b1f0e0658ed"
+checksum = "1465873a3dfdaa8ae7cb14b4383657caab0b3e8a0aa9ae8e04b044854c8dfce2"
dependencies = [
"crossbeam-deque",
"crossbeam-utils",
@@ -928,9 +709,21 @@
[[package]]
name = "regex"
-version = "1.7.3"
+version = "1.11.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8b1f693b24f6ac912f4893ef08244d70b6067480d2f1a46e950c9691e6749d1d"
+checksum = "b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191"
+dependencies = [
+ "aho-corasick",
+ "memchr",
+ "regex-automata",
+ "regex-syntax",
+]
+
+[[package]]
+name = "regex-automata"
+version = "0.4.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "809e8dc61f6de73b46c85f4c96486310fe304c434cfa43669d7b40f711150908"
dependencies = [
"aho-corasick",
"memchr",
@@ -938,39 +731,10 @@
]
[[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.29"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1"
-
-[[package]]
-name = "rgb"
-version = "0.8.36"
+version = "0.8.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "20ec2d3e3fc7a92ced357df9cebd5a10b6fb2aa1ee797bf7e9ce2f17dffc8f59"
-dependencies = [
- "bytemuck",
-]
-
-[[package]]
-name = "rustix"
-version = "0.37.25"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d4eb579851244c2c03e7c24f501c3432bed80b8f720af1d6e5b0e0f01555a035"
-dependencies = [
- "bitflags 1.3.2",
- "errno",
- "io-lifetimes",
- "libc",
- "linux-raw-sys 0.3.8",
- "windows-sys",
-]
+checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c"
[[package]]
name = "rustix"
@@ -978,11 +742,11 @@
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "745ecfa778e66b2b63c88a61cb36e0eea109e803b0b86bf9879fbc77c70e86ed"
dependencies = [
- "bitflags 2.4.0",
+ "bitflags",
"errno",
"libc",
- "linux-raw-sys 0.4.10",
- "windows-sys",
+ "linux-raw-sys",
+ "windows-sys 0.48.0",
]
[[package]]
@@ -1023,7 +787,7 @@
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.38",
+ "syn 2.0.93",
]
[[package]]
@@ -1032,16 +796,22 @@
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6b420ce6e3d8bd882e9b243c6eed35dbc9a6110c9769e74b584e0d68d1f20c65"
dependencies = [
- "itoa 1.0.9",
+ "itoa",
"ryu",
"serde",
]
[[package]]
+name = "shlex"
+version = "1.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64"
+
+[[package]]
name = "simba"
-version = "0.7.3"
+version = "0.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2f3fd720c48c53cace224ae62bef1bbff363a70c68c4802a78b5cc6159618176"
+checksum = "b3a386a501cd104797982c15ae17aafe8b9261315b5d07e3ec803f2ea26be0fa"
dependencies = [
"approx",
"num-complex",
@@ -1051,31 +821,10 @@
]
[[package]]
-name = "simd-adler32"
-version = "0.3.7"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d66dc143e6b11c1eddc06d5c423cfc97062865baf299914ab64caa38182078fe"
-
-[[package]]
-name = "smallvec"
-version = "1.11.1"
+name = "strsim"
+version = "0.11.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "942b4a808e05215192e39f4ab80813e599068285906cc91aa64f923db842bd5a"
-
-[[package]]
-name = "spin"
-version = "0.9.8"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67"
-dependencies = [
- "lock_api",
-]
-
-[[package]]
-name = "strsim"
-version = "0.10.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623"
+checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f"
[[package]]
name = "syn"
@@ -1090,9 +839,9 @@
[[package]]
name = "syn"
-version = "2.0.38"
+version = "2.0.93"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e96b79aaa137db8f61e26363a0c9b47d8b4ec75da28b7d1d614c2303e232408b"
+checksum = "9c786062daee0d6db1132800e623df74274a0a87322d8e183338e01b3d98d058"
dependencies = [
"proc-macro2",
"quote",
@@ -1100,50 +849,13 @@
]
[[package]]
-name = "tagger"
-version = "4.3.5"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "094c9f64d6de9a8506b1e49b63a29333b37ed9e821ee04be694d431b3264c3c5"
-
-[[package]]
-name = "termcolor"
-version = "1.3.0"
+name = "terminal_size"
+version = "0.4.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6093bad37da69aab9d123a8091e4be0aa4a03e4d601ec641c327398315f62b64"
-dependencies = [
- "winapi-util",
-]
-
-[[package]]
-name = "terminal_size"
-version = "0.2.6"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8e6bf6f19e9f8ed8d4048dc22981458ebcf406d67e94cd422e5ecd73d63b3237"
+checksum = "5352447f921fda68cf61b4101566c0bdb5104eff6804d0678e5227580ab6a4e9"
dependencies = [
- "rustix 0.37.25",
- "windows-sys",
-]
-
-[[package]]
-name = "tiff"
-version = "0.9.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6d172b0f4d3fba17ba89811858b9d3d97f928aece846475bbda076ca46736211"
-dependencies = [
- "flate2",
- "jpeg-decoder",
- "weezl",
-]
-
-[[package]]
-name = "trait-set"
-version = "0.2.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "875c4c873cc824e362fa9a9419ffa59807244824275a44ad06fec9684fff08f2"
-dependencies = [
- "proc-macro2",
- "quote",
- "syn 1.0.109",
+ "rustix",
+ "windows-sys 0.59.0",
]
[[package]]
@@ -1169,9 +881,15 @@
[[package]]
name = "unicode-width"
-version = "0.1.11"
+version = "0.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e51733f11c9c4f72aa0c160008246859e340b00807569a0da0e7a1079b27ba85"
+checksum = "1fc81956842c57dac11422a97c3b8195a1ff727f06e85c84ed2e8aa277c9a0fd"
+
+[[package]]
+name = "utf8parse"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821"
[[package]]
name = "version_check"
@@ -1187,34 +905,34 @@
[[package]]
name = "wasm-bindgen"
-version = "0.2.87"
+version = "0.2.99"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7706a72ab36d8cb1f80ffbf0e071533974a60d0a308d01a5d0375bf60499a342"
+checksum = "a474f6281d1d70c17ae7aa6a613c87fce69a127e2624002df63dcb39d6cf6396"
dependencies = [
"cfg-if",
+ "once_cell",
"wasm-bindgen-macro",
]
[[package]]
name = "wasm-bindgen-backend"
-version = "0.2.87"
+version = "0.2.99"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5ef2b6d3c510e9625e5fe6f509ab07d66a760f0885d858736483c32ed7809abd"
+checksum = "5f89bb38646b4f81674e8f5c3fb81b562be1fd936d84320f3264486418519c79"
dependencies = [
"bumpalo",
"log",
- "once_cell",
"proc-macro2",
"quote",
- "syn 2.0.38",
+ "syn 2.0.93",
"wasm-bindgen-shared",
]
[[package]]
name = "wasm-bindgen-macro"
-version = "0.2.87"
+version = "0.2.99"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "dee495e55982a3bd48105a7b947fd2a9b4a8ae3010041b9e0faab3f9cd028f1d"
+checksum = "2cc6181fd9a7492eef6fef1f33961e3695e4579b9872a6f7c83aee556666d4fe"
dependencies = [
"quote",
"wasm-bindgen-macro-support",
@@ -1222,28 +940,22 @@
[[package]]
name = "wasm-bindgen-macro-support"
-version = "0.2.87"
+version = "0.2.99"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "54681b18a46765f095758388f2d0cf16eb8d4169b639ab575a8f5693af210c7b"
+checksum = "30d7a95b763d3c45903ed6c81f156801839e5ee968bb07e534c44df0fcd330c2"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.38",
+ "syn 2.0.93",
"wasm-bindgen-backend",
"wasm-bindgen-shared",
]
[[package]]
name = "wasm-bindgen-shared"
-version = "0.2.87"
+version = "0.2.99"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ca6ad05a4870b2bf5fe995117d3728437bd27d7cd5f06f13c17443ef369775a1"
-
-[[package]]
-name = "weezl"
-version = "0.1.7"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9193164d4de03a926d909d3bc7c30543cecb35400c02114792c2cae20d5e2dbb"
+checksum = "943aab3fdaaa029a6e0271b35ea10b72b943135afe9bffca82384098ad0e06a6"
[[package]]
name = "wide"
@@ -1272,27 +984,18 @@
checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
[[package]]
-name = "winapi-util"
-version = "0.1.6"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f29e6f9198ba0d26b4c9f07dbe6f9ed633e1f3d5b8b414090084349e46a52596"
-dependencies = [
- "winapi",
-]
-
-[[package]]
name = "winapi-x86_64-pc-windows-gnu"
version = "0.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
[[package]]
-name = "windows"
-version = "0.48.0"
+name = "windows-core"
+version = "0.52.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e686886bc078bc1b0b600cac0147aadb815089b6e4da64016cbd754b6342700f"
+checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9"
dependencies = [
- "windows-targets",
+ "windows-targets 0.52.6",
]
[[package]]
@@ -1301,7 +1004,16 @@
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9"
dependencies = [
- "windows-targets",
+ "windows-targets 0.48.5",
+]
+
+[[package]]
+name = "windows-sys"
+version = "0.59.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b"
+dependencies = [
+ "windows-targets 0.52.6",
]
[[package]]
@@ -1310,13 +1022,29 @@
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c"
dependencies = [
- "windows_aarch64_gnullvm",
- "windows_aarch64_msvc",
- "windows_i686_gnu",
- "windows_i686_msvc",
- "windows_x86_64_gnu",
- "windows_x86_64_gnullvm",
- "windows_x86_64_msvc",
+ "windows_aarch64_gnullvm 0.48.5",
+ "windows_aarch64_msvc 0.48.5",
+ "windows_i686_gnu 0.48.5",
+ "windows_i686_msvc 0.48.5",
+ "windows_x86_64_gnu 0.48.5",
+ "windows_x86_64_gnullvm 0.48.5",
+ "windows_x86_64_msvc 0.48.5",
+]
+
+[[package]]
+name = "windows-targets"
+version = "0.52.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973"
+dependencies = [
+ "windows_aarch64_gnullvm 0.52.6",
+ "windows_aarch64_msvc 0.52.6",
+ "windows_i686_gnu 0.52.6",
+ "windows_i686_gnullvm",
+ "windows_i686_msvc 0.52.6",
+ "windows_x86_64_gnu 0.52.6",
+ "windows_x86_64_gnullvm 0.52.6",
+ "windows_x86_64_msvc 0.52.6",
]
[[package]]
@@ -1326,46 +1054,85 @@
checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8"
[[package]]
+name = "windows_aarch64_gnullvm"
+version = "0.52.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3"
+
+[[package]]
name = "windows_aarch64_msvc"
version = "0.48.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc"
[[package]]
+name = "windows_aarch64_msvc"
+version = "0.52.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469"
+
+[[package]]
name = "windows_i686_gnu"
version = "0.48.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e"
[[package]]
+name = "windows_i686_gnu"
+version = "0.52.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b"
+
+[[package]]
+name = "windows_i686_gnullvm"
+version = "0.52.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66"
+
+[[package]]
name = "windows_i686_msvc"
version = "0.48.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406"
[[package]]
+name = "windows_i686_msvc"
+version = "0.52.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66"
+
+[[package]]
name = "windows_x86_64_gnu"
version = "0.48.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e"
[[package]]
+name = "windows_x86_64_gnu"
+version = "0.52.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78"
+
+[[package]]
name = "windows_x86_64_gnullvm"
version = "0.48.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc"
[[package]]
+name = "windows_x86_64_gnullvm"
+version = "0.52.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d"
+
+[[package]]
name = "windows_x86_64_msvc"
version = "0.48.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538"
[[package]]
-name = "zune-inflate"
-version = "0.2.54"
+name = "windows_x86_64_msvc"
+version = "0.52.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "73ab332fe2f6680068f3582b16a24f90ad7096d5d39b974d1c0aff0125116f02"
-dependencies = [
- "simd-adler32",
-]
+checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec"
diff -r efa60bc4f743 -r b087e3eab191 Cargo.toml
--- a/Cargo.toml Thu Aug 29 00:00:00 2024 -0500
+++ b/Cargo.toml Tue Dec 31 09:25:45 2024 -0500
@@ -21,29 +21,31 @@
]
categories = ["mathematics", "science", "computer-vision"]
+[dependencies.alg_tools]
+version = "~0.3.0-dev"
+path = "../alg_tools"
+default-features = false
+features = ["nightly"]
+
[dependencies]
-alg_tools = { version = "~0.2.0-dev", path = "../alg_tools", default-features = false }
serde = { version = "1.0", features = ["derive"] }
num-traits = { version = "~0.2.14", features = ["std"] }
rand = "~0.8.5"
-colored = "~2.0.0"
+colored = "~2.1.0"
rand_distr = "~0.4.3"
-nalgebra = { version = "~0.31.0", features = ["rand-no-std"] }
-itertools = "~0.10.3"
+nalgebra = { version = "~0.33.0", features = ["rand-no-std"] }
+itertools = "~0.13.0"
numeric_literals = "~0.2.0"
-poloto = "~3.13.1"
-GSL = "~6.0.0"
+GSL = "~7.0.0"
float_extras = "~0.1.6"
-clap = { version = "~4.0.27", features = ["derive", "unicode", "wrap_help"] }
-image = "~0.24.3"
+clap = { version = "~4.5.0", features = ["derive", "unicode", "wrap_help"] }
cpu-time = "~1.0.0"
-colorbrewer = "~0.2.0"
-rgb = "~0.8.33"
serde_json = "~1.0.85"
chrono = { version = "~0.4.23", features = ["alloc", "std", "serde"] }
+anyhow = "1.0.95"
[build-dependencies]
-regex = "~1.7.0"
+regex = "~1.11.0"
[profile.release]
debug = true
diff -r efa60bc4f743 -r b087e3eab191 README.md
--- a/README.md Thu Aug 29 00:00:00 2024 -0500
+++ b/README.md Tue Dec 31 09:25:45 2024 -0500
@@ -52,35 +52,29 @@
### Building and running the experiments
-To compile the code and run the experiments in the manuscript, use
+To compile and install the program, use
+```console
+cargo install --path=.
+```
+When doing this for the first time, several dependencies will be downloaded.
+Now you can run the default experiment with
+```
+pointsource_algs -o results
+```
+The `-o results` option tells `pointsource_algs` to write results in the
+`results` directory. The option is required.
+
+Alternatively, you may build and run the program without installing with
```console
cargo run --release -- -o results
```
-When doing this for the first time, several dependencies will be downloaded.
-The double-dash (`--`) separates the arguments of Cargo and this software,
-`pointsource_algs`. The `--release` option to Cargo is required for `rustc` to
-build optimised high performance code. Without that flag the performance will
-be significantly worse. The `-o results` option tells `pointsource_algs` to
-write results in the `results` directory. The option is required.
-
-Alternatively, you may build the executable with
-```console
-cargo build --release
-```
-and then run it with
-```
-target/release/pointsource_algs -o results
-```
+The double-dash separates the options for the Cargo build system
+and `pointsource_algs`.
### Documentation
Use the `--help` option to get an extensive listing of command line options to
-customise algorithm parameters and the experiments performed. As above with
-`-o`, if using `cargo` to run the executable, you have to pass any arguments
-to `pointsource_algs` after a double-dash:
-```console
-cargo run --release -- --help
-```
+customise algorithm parameters and the experiments performed.
## Internals
diff -r efa60bc4f743 -r b087e3eab191 src/dataterm.rs
--- a/src/dataterm.rs Thu Aug 29 00:00:00 2024 -0500
+++ b/src/dataterm.rs Tue Dec 31 09:25:45 2024 -0500
@@ -4,25 +4,26 @@
use numeric_literals::replace_float_literals;
-use alg_tools::loc::Loc;
use alg_tools::euclidean::Euclidean;
use alg_tools::linops::GEMV;
pub use alg_tools::norms::L1;
use alg_tools::norms::Norm;
+use alg_tools::instance::{Instance, Space};
use crate::types::*;
pub use crate::types::L2Squared;
-use crate::measures::DiscreteMeasure;
+use crate::measures::RNDM;
/// Calculates the residual $Aμ-b$.
#[replace_float_literals(F::cast_from(literal))]
pub(crate) fn calculate_residual<
+ X : Space,
+ I : Instance,
F : Float,
V : Euclidean + Clone,
- A : GEMV, F>, Codomain = V>,
- const N : usize
+ A : GEMV,
>(
- μ : &DiscreteMeasure, F>,
+ μ : I,
opA : &A,
b : &V
) -> V {
@@ -35,12 +36,14 @@
#[replace_float_literals(F::cast_from(literal))]
pub(crate) fn calculate_residual2<
F : Float,
+ X : Space,
+ I : Instance,
+ J : Instance,
V : Euclidean + Clone,
- A : GEMV, F>, Codomain = V>,
- const N : usize
+ A : GEMV,
>(
- μ : &DiscreteMeasure, F>,
- μ_delta : &DiscreteMeasure, F>,
+ μ : I,
+ μ_delta : J,
opA : &A,
b : &V
) -> V {
@@ -58,14 +61,17 @@
fn calculate_fit(&self, _residual : &V) -> F;
/// Calculates $F(Aμ-b)$, where $F$ is the data fidelity.
- fn calculate_fit_op, F>, Codomain = V>>(
+ fn calculate_fit_op, Codomain = V>>(
&self,
- μ : &DiscreteMeasure, F>,
+ μ : I,
opA : &A,
b : &V
) -> F
- where V : Euclidean + Clone {
- let r = calculate_residual(&μ, opA, b);
+ where
+ V : Euclidean + Clone,
+ I : Instance>,
+ {
+ let r = calculate_residual(μ, opA, b);
self.calculate_fit(&r)
}
}
diff -r efa60bc4f743 -r b087e3eab191 src/experiments.rs
--- a/src/experiments.rs Thu Aug 29 00:00:00 2024 -0500
+++ b/src/experiments.rs Tue Dec 31 09:25:45 2024 -0500
@@ -21,6 +21,7 @@
use crate::run::{
RunnableExperiment,
ExperimentV2,
+ ExperimentBiased,
Named,
DefaultAlgorithm,
AlgorithmConfig
@@ -28,6 +29,10 @@
//use crate::fb::FBGenericConfig;
use crate::rand_distr::{SerializableNormal, SaltAndPepper};
use crate::regularisation::Regularisation;
+use alg_tools::euclidean::Euclidean;
+use alg_tools::instance::Instance;
+use alg_tools::mapping::Mapping;
+use alg_tools::operator_arithmetic::{MappingSum, Weighted};
/// Experiments shorthands, to be used with the command line parser
@@ -58,6 +63,9 @@
/// Two dimensions, “fast” spread, 1-norm data fidelity
#[clap(name = "2d_l1_fast")]
Experiment2D_L1_Fast,
+ /// One dimension, “fast” spread, 2-norm-squared data fidelity with extra TV-regularised bias
+ #[clap(name = "1d_tv_fast")]
+ Experiment1D_TV_Fast,
}
macro_rules! make_float_constant {
@@ -92,6 +100,25 @@
([0.30, 0.70], 5.0)
];
+/// The $\{0,1\}$-valued characteristic function of a ball as a [`Mapping`].
+#[derive(Debug,Copy,Clone,Serialize,PartialEq)]
+struct BallCharacteristic {
+ pub center : Loc,
+ pub radius : F,
+}
+
+impl Mapping> for BallCharacteristic {
+ type Codomain =F;
+
+ fn apply>>(&self, i : I) -> F {
+ if self.center.dist2(i) <= self.radius {
+ F::ONE
+ } else {
+ F::ZERO
+ }
+ }
+}
+
//#[replace_float_literals(F::cast_from(literal))]
impl DefaultExperiment {
/// Convert the experiment shorthand into a runnable experiment configuration.
@@ -115,6 +142,7 @@
make_float_constant!(Variance1 = 0.05.powi(2));
make_float_constant!(CutOff1 = 0.15);
make_float_constant!(Hat1 = 0.16);
+ make_float_constant!(HatBias = 0.05);
// We use a different step length for PDPS in 2D experiments
let pdps_2d = || {
@@ -294,6 +322,30 @@
]),
}})
},
+ Experiment1D_TV_Fast => {
+ let base_spread = HatConv { radius : HatBias };
+ Box::new(Named { name, data : ExperimentBiased {
+ λ : 0.02,
+ bias : MappingSum::new([
+ Weighted::new(1.0, BallCharacteristic{ center : 0.3.into(), radius : 0.2 }),
+ Weighted::new(0.5, BallCharacteristic{ center : 0.6.into(), radius : 0.3 }),
+ ]),
+ base : ExperimentV2 {
+ domain : [[0.0, 1.0]].into(),
+ sensor_count : [N_SENSORS_1D],
+ regularisation : Regularisation::NonnegRadon(cli.alpha.unwrap_or(0.2)),
+ noise_distr : SerializableNormal::new(0.0, cli.variance.unwrap_or(0.1))?,
+ dataterm : DataTerm::L2Squared,
+ μ_hat : MU_TRUE_1D_BASIC.into(),
+ sensor : BallIndicator { r : SensorWidth1D, exponent : Linfinity },
+ spread : base_spread,
+ kernel : base_spread,
+ kernel_plot_width,
+ noise_seed,
+ algorithm_defaults: HashMap::new(),
+ },
+ }})
+ },
})
}
}
diff -r efa60bc4f743 -r b087e3eab191 src/fb.rs
--- a/src/fb.rs Thu Aug 29 00:00:00 2024 -0500
+++ b/src/fb.rs Tue Dec 31 09:25:45 2024 -0500
@@ -6,10 +6,7 @@
* Valkonen T. - _Proximal methods for point source localisation_,
[arXiv:2212.02991](https://arxiv.org/abs/2212.02991).
-The main routine is [`pointsource_fb_reg`]. It is based on [`generic_pointsource_fb_reg`], which is
-also used by our [primal-dual proximal splitting][crate::pdps] implementation.
-
-FISTA-type inertia can also be enabled through [`FBConfig::meta`].
+The main routine is [`pointsource_fb_reg`].
## Problem
@@ -76,7 +73,7 @@
$$
-We solve this with either SSN or FB via [`quadratic_nonneg`] as determined by
+We solve this with either SSN or FB as determined by
[`InnerSettings`] in [`FBGenericConfig::inner`].
*/
@@ -87,10 +84,11 @@
use alg_tools::iterate::{
AlgIteratorFactory,
- AlgIteratorState,
+ AlgIteratorIteration,
+ AlgIterator,
};
use alg_tools::euclidean::Euclidean;
-use alg_tools::linops::{Apply, GEMV};
+use alg_tools::linops::{Mapping, GEMV};
use alg_tools::sets::Cube;
use alg_tools::loc::Loc;
use alg_tools::bisection_tree::{
@@ -107,17 +105,24 @@
};
use alg_tools::mapping::RealMapping;
use alg_tools::nalgebra_support::ToNalgebraRealField;
+use alg_tools::instance::Instance;
+use alg_tools::norms::Linfinity;
use crate::types::*;
use crate::measures::{
DiscreteMeasure,
+ RNDM,
DeltaMeasure,
+ Radon,
};
use crate::measures::merging::{
SpikeMergingMethod,
SpikeMerging,
};
-use crate::forward_model::ForwardModel;
+use crate::forward_model::{
+ ForwardModel,
+ AdjointProductBoundedBy
+};
use crate::seminorms::DiscreteMeasureOp;
use crate::subproblem::{
InnerSettings,
@@ -146,8 +151,7 @@
pub generic : FBGenericConfig,
}
-/// Settings for the solution of the stepwise optimality condition in algorithms based on
-/// [`generic_pointsource_fb_reg`].
+/// Settings for the solution of the stepwise optimality condition.
#[derive(Clone, Copy, Eq, PartialEq, Serialize, Deserialize, Debug)]
#[serde(default)]
pub struct FBGenericConfig {
@@ -188,8 +192,8 @@
/// Iterations between merging heuristic tries
pub merge_every : usize,
- /// Save $μ$ for postprocessing optimisation
- pub postprocessing : bool
+ // /// Save $μ$ for postprocessing optimisation
+ // pub postprocessing : bool
}
#[replace_float_literals(F::cast_from(literal))]
@@ -221,29 +225,36 @@
final_merging : Default::default(),
merge_every : 10,
merge_tolerance_mult : 2.0,
- postprocessing : false,
+ // postprocessing : false,
}
}
}
+impl FBGenericConfig {
+ /// Check if merging should be attempted this iteration
+ pub fn merge_now(&self, state : &AlgIteratorIteration) -> bool {
+ state.iteration() % self.merge_every == 0
+ }
+}
+
/// TODO: document.
/// `μ_base + ν_delta` is the base point, where `μ` and `μ_base` are assumed to have the same spike
/// locations, while `ν_delta` may have different locations.
#[replace_float_literals(F::cast_from(literal))]
pub(crate) fn insert_and_reweigh<
- 'a, F, GA, 𝒟, BTA, G𝒟, S, K, Reg, State, const N : usize
+ 'a, F, GA, 𝒟, BTA, G𝒟, S, K, Reg, I, const N : usize
>(
- μ : &mut DiscreteMeasure, F>,
- minus_τv : &BTFN,
- μ_base : &DiscreteMeasure, F>,
- ν_delta: Option<&DiscreteMeasure, F>>,
+ μ : &mut RNDM,
+ τv : &BTFN,
+ μ_base : &RNDM,
+ ν_delta: Option<&RNDM>,
op𝒟 : &'a 𝒟,
op𝒟norm : F,
τ : F,
ε : F,
config : &FBGenericConfig,
reg : &Reg,
- state : &State,
+ state : &AlgIteratorIteration,
stats : &mut IterInfo,
) -> (BTFN, BTA, N>, bool)
where F : Float + ToNalgebraRealField,
@@ -255,9 +266,8 @@
S: RealMapping + LocalAnalysis, N>,
K: RealMapping + LocalAnalysis, N>,
BTNodeLookup: BTNode, N>,
- DiscreteMeasure, F> : SpikeMerging,
Reg : RegTerm,
- State : AlgIteratorState {
+ I : AlgIterator {
// Maximum insertion count and measure difference calculation depend on insertion style.
let (max_insertions, warn_insertions) = match (state.iteration(), config.bootstrap_insertions) {
@@ -265,11 +275,10 @@
_ => (config.max_insertions, !state.is_quiet()),
};
- // TODO: should avoid a copy of μ_base here.
- let ω0 = op𝒟.apply(match ν_delta {
- None => μ_base.clone(),
- Some(ν_d) => &*μ_base + ν_d,
- });
+ let ω0 = match ν_delta {
+ None => op𝒟.apply(μ_base),
+ Some(ν) => op𝒟.apply(μ_base + ν),
+ };
// Add points to support until within error tolerance or maximum insertion count reached.
let mut count = 0;
@@ -277,10 +286,12 @@
if μ.len() > 0 {
// Form finite-dimensional subproblem. The subproblem references to the original μ^k
// from the beginning of the iteration are all contained in the immutable c and g.
+ // TODO: observe negation of -τv after switch from minus_τv: finite-dimensional
+ // problems have not yet been updated to sign change.
let à = op𝒟.findim_matrix(μ.iter_locations());
let g̃ = DVector::from_iterator(μ.len(),
μ.iter_locations()
- .map(|ζ| minus_τv.apply(ζ) + ω0.apply(ζ))
+ .map(|ζ| ω0.apply(ζ) - τv.apply(ζ))
.map(F::to_nalgebra_mixed));
let mut x = μ.masses_dvector();
@@ -298,12 +309,12 @@
μ.set_masses_dvector(&x);
}
- // Form d = ω0 - τv - 𝒟μ = -𝒟(μ - μ^k) - τv for checking the proximate optimality
+ // Form d = τv + 𝒟μ - ω0 = τv + 𝒟(μ - μ^k) for checking the proximate optimality
// conditions in the predual space, and finding new points for insertion, if necessary.
- let mut d = minus_τv + op𝒟.preapply(match ν_delta {
- None => μ_base.sub_matching(μ),
- Some(ν) => μ_base.sub_matching(μ) + ν
- });
+ let mut d = τv + match ν_delta {
+ None => op𝒟.preapply(μ.sub_matching(μ_base)),
+ Some(ν) => op𝒟.preapply(μ.sub_matching(μ_base) - ν)
+ };
// If no merging heuristic is used, let's be more conservative about spike insertion,
// and skip it after first round. If merging is done, being more greedy about spike
@@ -330,11 +341,9 @@
// No point in optimising the weight here; the finite-dimensional algorithm is fast.
*μ += DeltaMeasure { x : ξ, α : 0.0 };
count += 1;
+ stats.inserted += 1;
};
- // TODO: should redo everything if some transports cause a problem.
- // Maybe implementation should call above loop as a closure.
-
if !within_tolerances && warn_insertions {
// Complain (but continue) if we failed to get within tolerances
// by inserting more points.
@@ -346,61 +355,33 @@
(d, within_tolerances)
}
-#[replace_float_literals(F::cast_from(literal))]
-pub(crate) fn prune_and_maybe_simple_merge<
- 'a, F, GA, 𝒟, BTA, G𝒟, S, K, Reg, State, const N : usize
->(
- μ : &mut DiscreteMeasure, F>,
- minus_τv : &BTFN,
- μ_base : &DiscreteMeasure, F>,
- op𝒟 : &'a 𝒟,
- τ : F,
- ε : F,
- config : &FBGenericConfig,
- reg : &Reg,
- state : &State,
- stats : &mut IterInfo,
-)
-where F : Float + ToNalgebraRealField,
- GA : SupportGenerator + Clone,
- BTA : BTSearch>,
- G𝒟 : SupportGenerator + Clone,
- 𝒟 : DiscreteMeasureOp, F, PreCodomain = PreBTFN>,
- 𝒟::Codomain : RealMapping,
- S: RealMapping + LocalAnalysis, N>,
- K: RealMapping + LocalAnalysis, N>,
- BTNodeLookup: BTNode, N>,
- DiscreteMeasure, F> : SpikeMerging,
- Reg : RegTerm,
- State : AlgIteratorState {
- if state.iteration() % config.merge_every == 0 {
- stats.merged += μ.merge_spikes(config.merging, |μ_candidate| {
- let mut d = minus_τv + op𝒟.preapply(μ_base.sub_matching(&μ_candidate));
- reg.verify_merge_candidate(&mut d, μ_candidate, τ, ε, &config)
- });
- }
-
+pub(crate) fn prune_with_stats(
+ μ : &mut RNDM,
+) -> usize {
let n_before_prune = μ.len();
μ.prune();
debug_assert!(μ.len() <= n_before_prune);
- stats.pruned += n_before_prune - μ.len();
+ n_before_prune - μ.len()
}
#[replace_float_literals(F::cast_from(literal))]
pub(crate) fn postprocess<
F : Float,
V : Euclidean + Clone,
- A : GEMV, F>, Codomain = V>,
+ A : GEMV, Codomain = V>,
D : DataTerm,
const N : usize
> (
- mut μ : DiscreteMeasure, F>,
+ mut μ : RNDM,
config : &FBGenericConfig,
dataterm : D,
opA : &A,
b : &V,
-) -> DiscreteMeasure, F>
-where DiscreteMeasure, F> : SpikeMerging {
+) -> RNDM
+where
+ RNDM : SpikeMerging,
+ for<'a> &'a RNDM : Instance>,
+{
μ.merge_spikes_fitness(config.merging,
|μ̃| dataterm.calculate_fit_op(μ̃, opA, b),
|&v| v);
@@ -437,15 +418,13 @@
fbconfig : &FBConfig,
iterator : I,
mut plotter : SeqPlotter,
-) -> DiscreteMeasure, F>
+) -> RNDM
where F : Float + ToNalgebraRealField,
I : AlgIteratorFactory>,
for<'b> &'b A::Observable : std::ops::Neg