From 835febd757f9b55d00e5253f0fa081e2643482f9 Mon Sep 17 00:00:00 2001 From: Adrian Seyboldt Date: Thu, 17 Oct 2024 11:38:19 +0200 Subject: [PATCH 01/34] chore: Update dependencies --- Cargo.lock | 630 ++++++++++++++++++++++++++++++++++++++++++++++++----- Cargo.toml | 9 +- 2 files changed, 579 insertions(+), 60 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index e702c9c..27405f5 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2,6 +2,23 @@ # It is not intended for manual editing. version = 3 +[[package]] +name = "adler2" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "512761e0bb2578dd7380c6baaa0f4ce03e84f95e960231d1dec8bf4d7d6e2627" + +[[package]] +name = "aes" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b169f7a6d4742236a0a00c541b845991d0ac43e546831af1249753ab4c3aa3a0" +dependencies = [ + "cfg-if", + "cipher", + "cpufeatures", +] + [[package]] name = "ahash" version = "0.8.11" @@ -64,16 +81,34 @@ version = "52.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "05048a8932648b63f21c37d88b552ccc8a65afb6dfe9fc9f30ce79174c2e7a85" dependencies = [ - "arrow-arith", - "arrow-array", - "arrow-buffer", - "arrow-cast", - "arrow-data", - "arrow-ord", - "arrow-row", - "arrow-schema", - "arrow-select", - "arrow-string", + "arrow-arith 52.2.0", + "arrow-array 52.2.0", + "arrow-buffer 52.2.0", + "arrow-cast 52.2.0", + "arrow-data 52.2.0", + "arrow-ord 52.2.0", + "arrow-row 52.2.0", + "arrow-schema 52.2.0", + "arrow-select 52.2.0", + "arrow-string 52.2.0", +] + +[[package]] +name = "arrow" +version = "53.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4caf25cdc4a985f91df42ed9e9308e1adbcd341a31a72605c697033fcef163e3" +dependencies = [ + "arrow-arith 53.2.0", + "arrow-array 53.2.0", + "arrow-buffer 53.2.0", + "arrow-cast 53.2.0", + "arrow-data 53.2.0", + "arrow-ord 53.2.0", + "arrow-row 53.2.0", + "arrow-schema 53.2.0", + "arrow-select 53.2.0", + "arrow-string 53.2.0", ] [[package]] @@ -82,10 +117,25 @@ version = "52.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1d8a57966e43bfe9a3277984a14c24ec617ad874e4c0e1d2a1b083a39cfbf22c" dependencies = [ - "arrow-array", - "arrow-buffer", - "arrow-data", - "arrow-schema", + "arrow-array 52.2.0", + "arrow-buffer 52.2.0", + "arrow-data 52.2.0", + "arrow-schema 52.2.0", + "chrono", + "half", + "num", +] + +[[package]] +name = "arrow-arith" +version = "53.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91f2dfd1a7ec0aca967dfaa616096aec49779adc8eccec005e2f5e4111b1192a" +dependencies = [ + "arrow-array 53.2.0", + "arrow-buffer 53.2.0", + "arrow-data 53.2.0", + "arrow-schema 53.2.0", "chrono", "half", "num", @@ -98,9 +148,25 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "16f4a9468c882dc66862cef4e1fd8423d47e67972377d85d80e022786427768c" dependencies = [ "ahash", - "arrow-buffer", - "arrow-data", - "arrow-schema", + "arrow-buffer 52.2.0", + "arrow-data 52.2.0", + "arrow-schema 52.2.0", + "chrono", + "half", + "hashbrown", + "num", +] + +[[package]] +name = "arrow-array" +version = "53.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d39387ca628be747394890a6e47f138ceac1aa912eab64f02519fed24b637af8" +dependencies = [ + "ahash", + "arrow-buffer 53.2.0", + "arrow-data 53.2.0", + "arrow-schema 53.2.0", "chrono", "half", "hashbrown", @@ -118,22 +184,53 @@ dependencies = [ "num", ] +[[package]] +name = "arrow-buffer" +version = "53.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e51e05228852ffe3eb391ce7178a0f97d2cf80cc6ef91d3c4a6b3cb688049ec" +dependencies = [ + "bytes", + "half", + "num", +] + [[package]] name = "arrow-cast" version = "52.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "da26719e76b81d8bc3faad1d4dbdc1bcc10d14704e63dc17fc9f3e7e1e567c8e" dependencies = [ - "arrow-array", - "arrow-buffer", - "arrow-data", - "arrow-schema", - "arrow-select", + "arrow-array 52.2.0", + "arrow-buffer 52.2.0", + "arrow-data 52.2.0", + "arrow-schema 52.2.0", + "arrow-select 52.2.0", + "atoi", + "base64", + "chrono", + "half", + "lexical-core 0.8.5", + "num", + "ryu", +] + +[[package]] +name = "arrow-cast" +version = "53.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d09aea56ec9fa267f3f3f6cdab67d8a9974cbba90b3aa38c8fe9d0bb071bd8c1" +dependencies = [ + "arrow-array 53.2.0", + "arrow-buffer 53.2.0", + "arrow-data 53.2.0", + "arrow-schema 53.2.0", + "arrow-select 53.2.0", "atoi", "base64", "chrono", "half", - "lexical-core", + "lexical-core 1.0.2", "num", "ryu", ] @@ -144,8 +241,20 @@ version = "52.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dd9d6f18c65ef7a2573ab498c374d8ae364b4a4edf67105357491c031f716ca5" dependencies = [ - "arrow-buffer", - "arrow-schema", + "arrow-buffer 52.2.0", + "arrow-schema 52.2.0", + "half", + "num", +] + +[[package]] +name = "arrow-data" +version = "53.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b98ae0af50890b494cebd7d6b04b35e896205c1d1df7b29a6272c5d0d0249ef5" +dependencies = [ + "arrow-buffer 53.2.0", + "arrow-schema 53.2.0", "half", "num", ] @@ -156,11 +265,26 @@ version = "52.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "42745f86b1ab99ef96d1c0bcf49180848a64fe2c7a7a0d945bc64fa2b21ba9bc" dependencies = [ - "arrow-array", - "arrow-buffer", - "arrow-data", - "arrow-schema", - "arrow-select", + "arrow-array 52.2.0", + "arrow-buffer 52.2.0", + "arrow-data 52.2.0", + "arrow-schema 52.2.0", + "arrow-select 52.2.0", + "half", + "num", +] + +[[package]] +name = "arrow-ord" +version = "53.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2883d7035e0b600fb4c30ce1e50e66e53d8656aa729f2bfa4b51d359cf3ded52" +dependencies = [ + "arrow-array 53.2.0", + "arrow-buffer 53.2.0", + "arrow-data 53.2.0", + "arrow-schema 53.2.0", + "arrow-select 53.2.0", "half", "num", ] @@ -172,10 +296,24 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4cd09a518c602a55bd406bcc291a967b284cfa7a63edfbf8b897ea4748aad23c" dependencies = [ "ahash", - "arrow-array", - "arrow-buffer", - "arrow-data", - "arrow-schema", + "arrow-array 52.2.0", + "arrow-buffer 52.2.0", + "arrow-data 52.2.0", + "arrow-schema 52.2.0", + "half", +] + +[[package]] +name = "arrow-row" +version = "53.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "552907e8e587a6fde4f8843fd7a27a576a260f65dab6c065741ea79f633fc5be" +dependencies = [ + "ahash", + "arrow-array 53.2.0", + "arrow-buffer 53.2.0", + "arrow-data 53.2.0", + "arrow-schema 53.2.0", "half", ] @@ -188,6 +326,15 @@ dependencies = [ "bitflags 2.6.0", ] +[[package]] +name = "arrow-schema" +version = "53.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "539ada65246b949bd99ffa0881a9a15a4a529448af1a07a9838dd78617dafab1" +dependencies = [ + "bitflags 2.6.0", +] + [[package]] name = "arrow-select" version = "52.2.0" @@ -195,10 +342,24 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "600bae05d43483d216fb3494f8c32fdbefd8aa4e1de237e790dbb3d9f44690a3" dependencies = [ "ahash", - "arrow-array", - "arrow-buffer", - "arrow-data", - "arrow-schema", + "arrow-array 52.2.0", + "arrow-buffer 52.2.0", + "arrow-data 52.2.0", + "arrow-schema 52.2.0", + "num", +] + +[[package]] +name = "arrow-select" +version = "53.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6259e566b752da6dceab91766ed8b2e67bf6270eb9ad8a6e07a33c1bede2b125" +dependencies = [ + "ahash", + "arrow-array 53.2.0", + "arrow-buffer 53.2.0", + "arrow-data 53.2.0", + "arrow-schema 53.2.0", "num", ] @@ -208,11 +369,28 @@ version = "52.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f0dc1985b67cb45f6606a248ac2b4a288849f196bab8c657ea5589f47cdd55e6" dependencies = [ - "arrow-array", - "arrow-buffer", - "arrow-data", - "arrow-schema", - "arrow-select", + "arrow-array 52.2.0", + "arrow-buffer 52.2.0", + "arrow-data 52.2.0", + "arrow-schema 52.2.0", + "arrow-select 52.2.0", + "memchr", + "num", + "regex", + "regex-syntax", +] + +[[package]] +name = "arrow-string" +version = "53.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f3179ccbd18ebf04277a095ba7321b93fd1f774f18816bd5f6b3ce2f594edb6c" +dependencies = [ + "arrow-array 53.2.0", + "arrow-buffer 53.2.0", + "arrow-data 53.2.0", + "arrow-schema 53.2.0", + "arrow-select 53.2.0", "memchr", "num", "regex", @@ -240,6 +418,12 @@ version = "0.22.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" +[[package]] +name = "base64ct" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8c3c1a368f70d6cf7302d78f8f7093da241fb8e8807c05cc9e51a125895a6d5b" + [[package]] name = "bindgen" version = "0.69.5" @@ -335,6 +519,27 @@ version = "1.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9ac0150caa2ae65ca5bd83f25c7de183dea78d4d366469f148435e2acfbad0da" +[[package]] +name = "bzip2" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bdb116a6ef3f6c3698828873ad02c3014b3c85cadb88496095628e3ef1e347f8" +dependencies = [ + "bzip2-sys", + "libc", +] + +[[package]] +name = "bzip2-sys" +version = "0.1.11+1.0.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "736a955f3fa7875102d57c82b8cac37ec45224a07fd32d58f9f7a186b6cd4cdc" +dependencies = [ + "cc", + "libc", + "pkg-config", +] + [[package]] name = "cast" version = "0.3.0" @@ -347,6 +552,8 @@ version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fd9de9f2205d5ef3fd67e685b0df337994ddd4495e2a28d185500d0e1edfea47" dependencies = [ + "jobserver", + "libc", "shlex", ] @@ -404,6 +611,16 @@ dependencies = [ "half", ] +[[package]] +name = "cipher" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "773f3b9af64447d2ce9850330c473515014aa235e6a783b02db81ff39e4a3dad" +dependencies = [ + "crypto-common", + "inout", +] + [[package]] name = "clang-sys" version = "1.8.1" @@ -479,6 +696,12 @@ dependencies = [ "tiny-keccak", ] +[[package]] +name = "constant_time_eq" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "245097e9a4535ee1e3e3931fcfcd55a796a44c643e8596ff6566d68f09b87bbc" + [[package]] name = "core-foundation-sys" version = "0.8.7" @@ -494,6 +717,15 @@ dependencies = [ "libc", ] +[[package]] +name = "crc32fast" +version = "1.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a97769d94ddab943e4510d138150169a2758b5ef3eb191a9ee688de3e23ef7b3" +dependencies = [ + "cfg-if", +] + [[package]] name = "criterion" version = "0.5.1" @@ -577,6 +809,15 @@ version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e6ca96b45ca70b8045e0462f191bd209fcb3c3bfe8dbfb1257ada54c4dd59169" +[[package]] +name = "deranged" +version = "0.3.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b42b6fa04a440b495c8b04d0e71b707c585f83cb9cb28cf8cd0d976c315e31b4" +dependencies = [ + "powerfmt", +] + [[package]] name = "digest" version = "0.10.7" @@ -585,6 +826,7 @@ checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" dependencies = [ "block-buffer", "crypto-common", + "subtle", ] [[package]] @@ -714,6 +956,16 @@ dependencies = [ "reborrow", ] +[[package]] +name = "flate2" +version = "1.0.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c936bfdafb507ebbf50b8074c54fa31c5be9a1e7e5f467dd659697041407d07c" +dependencies = [ + "crc32fast", + "miniz_oxide", +] + [[package]] name = "gemm" version = "0.18.0" @@ -895,6 +1147,15 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fbf6a919d6cf397374f7dfeeea91d974c7c0a7221d0d0f4f20d859d329e53fcc" +[[package]] +name = "hmac" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e" +dependencies = [ + "digest", +] + [[package]] name = "home" version = "0.5.9" @@ -946,6 +1207,15 @@ version = "2.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b248f5224d1d606005e02c97f5aa4e88eeb230488bcc03bc9ca4d7991399f2b5" +[[package]] +name = "inout" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a0c10553d664a4d0bcff9f4215d0aac67a639cc68ef660840afe309b807bc9f5" +dependencies = [ + "generic-array", +] + [[package]] name = "is-terminal" version = "0.4.13" @@ -990,6 +1260,15 @@ version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "49f1f14873335454500d59611f1cf4a4b0f786f9ac11f4312a78e4cf2566695b" +[[package]] +name = "jobserver" +version = "0.1.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "48d1dbcbbeb6a7fec7e059840aa538bd62aaccf972c7346c4d9d2059312853d0" +dependencies = [ + "libc", +] + [[package]] name = "js-sys" version = "0.3.72" @@ -1017,11 +1296,24 @@ version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2cde5de06e8d4c2faabc400238f9ae1c74d5412d03a7bd067645ccbc47070e46" dependencies = [ - "lexical-parse-float", - "lexical-parse-integer", - "lexical-util", - "lexical-write-float", - "lexical-write-integer", + "lexical-parse-float 0.8.5", + "lexical-parse-integer 0.8.6", + "lexical-util 0.8.5", + "lexical-write-float 0.8.5", + "lexical-write-integer 0.8.5", +] + +[[package]] +name = "lexical-core" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0431c65b318a590c1de6b8fd6e72798c92291d27762d94c9e6c37ed7a73d8458" +dependencies = [ + "lexical-parse-float 1.0.2", + "lexical-parse-integer 1.0.2", + "lexical-util 1.0.3", + "lexical-write-float 1.0.2", + "lexical-write-integer 1.0.2", ] [[package]] @@ -1030,8 +1322,19 @@ version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "683b3a5ebd0130b8fb52ba0bdc718cc56815b6a097e28ae5a6997d0ad17dc05f" dependencies = [ - "lexical-parse-integer", - "lexical-util", + "lexical-parse-integer 0.8.6", + "lexical-util 0.8.5", + "static_assertions", +] + +[[package]] +name = "lexical-parse-float" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eb17a4bdb9b418051aa59d41d65b1c9be5affab314a872e5ad7f06231fb3b4e0" +dependencies = [ + "lexical-parse-integer 1.0.2", + "lexical-util 1.0.3", "static_assertions", ] @@ -1041,7 +1344,17 @@ version = "0.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6d0994485ed0c312f6d965766754ea177d07f9c00c9b82a5ee62ed5b47945ee9" dependencies = [ - "lexical-util", + "lexical-util 0.8.5", + "static_assertions", +] + +[[package]] +name = "lexical-parse-integer" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5df98f4a4ab53bf8b175b363a34c7af608fe31f93cc1fb1bf07130622ca4ef61" +dependencies = [ + "lexical-util 1.0.3", "static_assertions", ] @@ -1054,14 +1367,34 @@ dependencies = [ "static_assertions", ] +[[package]] +name = "lexical-util" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85314db53332e5c192b6bca611fb10c114a80d1b831ddac0af1e9be1b9232ca0" +dependencies = [ + "static_assertions", +] + [[package]] name = "lexical-write-float" version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "accabaa1c4581f05a3923d1b4cfd124c329352288b7b9da09e766b0668116862" dependencies = [ - "lexical-util", - "lexical-write-integer", + "lexical-util 0.8.5", + "lexical-write-integer 0.8.5", + "static_assertions", +] + +[[package]] +name = "lexical-write-float" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e7c3ad4e37db81c1cbe7cf34610340adc09c322871972f74877a712abc6c809" +dependencies = [ + "lexical-util 1.0.3", + "lexical-write-integer 1.0.2", "static_assertions", ] @@ -1071,7 +1404,17 @@ version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e1b6f3d1f4422866b68192d62f77bc5c700bee84f3069f2469d7bc8c77852446" dependencies = [ - "lexical-util", + "lexical-util 0.8.5", + "static_assertions", +] + +[[package]] +name = "lexical-write-integer" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eb89e9f6958b83258afa3deed90b5de9ef68eef090ad5086c791cd2345610162" +dependencies = [ + "lexical-util 1.0.3", "static_assertions", ] @@ -1166,6 +1509,15 @@ version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" +[[package]] +name = "miniz_oxide" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2d80299ef12ff69b16a84bb182e3b9df68b5a91574d3d4fa6e41b65deec4df1" +dependencies = [ + "adler2", +] + [[package]] name = "multiversion" version = "0.7.4" @@ -1327,6 +1679,12 @@ dependencies = [ "rand", ] +[[package]] +name = "num-conv" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9" + [[package]] name = "num-integer" version = "0.1.46" @@ -1394,7 +1752,7 @@ name = "nutpie" version = "0.13.2" dependencies = [ "anyhow", - "arrow", + "arrow 53.2.0", "bridgestan", "criterion", "indicatif", @@ -1407,6 +1765,7 @@ dependencies = [ "rand_distr", "rayon", "smallvec", + "tch", "thiserror", "time-humanize", "upon", @@ -1419,7 +1778,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d8573e3b5c83e8ec0570ebbd75dd6fdc7dfcfa5da9b5f9d9d63fedefebbd9cf8" dependencies = [ "anyhow", - "arrow", + "arrow 52.2.0", "faer", "itertools 0.13.0", "multiversion", @@ -1466,6 +1825,17 @@ dependencies = [ "windows-targets", ] +[[package]] +name = "password-hash" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7676374caaee8a325c9e7a2ae557f216c5563a171d6997b0ef8a65af35147700" +dependencies = [ + "base64ct", + "rand_core", + "subtle", +] + [[package]] name = "paste" version = "1.0.15" @@ -1490,6 +1860,18 @@ dependencies = [ "once_cell", ] +[[package]] +name = "pbkdf2" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "83a0692ec44e4cf1ef28ca317f14f8f07da2d95ec3fa01f86e4467b725e60917" +dependencies = [ + "digest", + "hmac", + "password-hash", + "sha2", +] + [[package]] name = "pest" version = "2.7.14" @@ -1535,6 +1917,12 @@ dependencies = [ "sha2", ] +[[package]] +name = "pkg-config" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "953ec861398dccce10c670dfeaf3ec4911ca479e9c02154b3a215178c5f566f2" + [[package]] name = "plotters" version = "0.3.7" @@ -1569,6 +1957,12 @@ version = "1.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cc9c68a3f6da06753e9335d63e27f6b9754dd1920d941135b7ea8224f141adb2" +[[package]] +name = "powerfmt" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" + [[package]] name = "ppv-lite86" version = "0.2.20" @@ -1839,6 +2233,16 @@ version = "1.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f" +[[package]] +name = "safetensors" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d93279b86b3de76f820a8854dd06cbc33cfa57a417b19c47f6a25280112fb1df" +dependencies = [ + "serde", + "serde_json", +] + [[package]] name = "same-file" version = "1.0.6" @@ -1892,6 +2296,17 @@ dependencies = [ "serde", ] +[[package]] +name = "sha1" +version = "0.10.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba" +dependencies = [ + "cfg-if", + "cpufeatures", + "digest", +] + [[package]] name = "sha2" version = "0.10.8" @@ -1921,6 +2336,12 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" +[[package]] +name = "subtle" +version = "2.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" + [[package]] name = "syn" version = "1.0.109" @@ -1969,6 +2390,23 @@ version = "0.12.16" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "61c41af27dd6d1e27b1b16b489db798443478cef1f06a660c96db617ba5de3b1" +[[package]] +name = "tch" +version = "0.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3585f5bbf1ddf2498d7586bf870c7bb785a0bf1be09c54d0f93fce51d5f3c7fc" +dependencies = [ + "half", + "lazy_static", + "libc", + "ndarray", + "rand", + "safetensors", + "thiserror", + "torch-sys", + "zip", +] + [[package]] name = "thiserror" version = "1.0.69" @@ -1989,6 +2427,25 @@ dependencies = [ "syn 2.0.87", ] +[[package]] +name = "time" +version = "0.3.36" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5dfd88e563464686c916c7e46e623e520ddc6d79fa6641390f2e3fa86e83e885" +dependencies = [ + "deranged", + "num-conv", + "powerfmt", + "serde", + "time-core", +] + +[[package]] +name = "time-core" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3" + [[package]] name = "time-humanize" version = "0.1.3" @@ -2014,6 +2471,18 @@ dependencies = [ "serde_json", ] +[[package]] +name = "torch-sys" +version = "0.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef116d446d79bb2447748550baee86850d2d32d366cc9bdd4b217bdbe10cac63" +dependencies = [ + "anyhow", + "cc", + "libc", + "zip", +] + [[package]] name = "typenum" version = "1.17.0" @@ -2285,3 +2754,52 @@ dependencies = [ "quote", "syn 2.0.87", ] + +[[package]] +name = "zip" +version = "0.6.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "760394e246e4c28189f19d488c058bf16f564016aefac5d32bb1f3b51d5e9261" +dependencies = [ + "aes", + "byteorder", + "bzip2", + "constant_time_eq", + "crc32fast", + "crossbeam-utils", + "flate2", + "hmac", + "pbkdf2", + "sha1", + "time", + "zstd", +] + +[[package]] +name = "zstd" +version = "0.11.2+zstd.1.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "20cc960326ece64f010d2d2107537f26dc589a6573a316bd5b1dba685fa5fde4" +dependencies = [ + "zstd-safe", +] + +[[package]] +name = "zstd-safe" +version = "5.0.2+zstd.1.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d2a5585e04f9eea4b2a3d1eca508c4dee9592a89ef6f450c11719da0726f4db" +dependencies = [ + "libc", + "zstd-sys", +] + +[[package]] +name = "zstd-sys" +version = "2.0.13+zstd.1.5.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38ff0f21cfee8f97d94cef41359e0c89aa6113028ab0291aa8ca0038995a95aa" +dependencies = [ + "cc", + "pkg-config", +] diff --git a/Cargo.toml b/Cargo.toml index 48634d8..e2badad 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -27,20 +27,21 @@ numpy = "0.21.0" rand = "0.8.5" thiserror = "1.0.44" rand_chacha = "0.3.1" -rayon = "1.9.0" +rayon = "1.10.0" # Keep arrow in sync with nuts-rs requirements -arrow = { version = "52.0.0", default-features = false, features = ["ffi"] } +arrow = { version = "53.1.0", default-features = false, features = ["ffi"] } anyhow = "1.0.72" itertools = "0.13.0" bridgestan = "2.5.0" rand_distr = "0.4.3" -smallvec = "1.11.0" +smallvec = "1.13.0" upon = { version = "0.8.1", default-features = false, features = [] } time-humanize = { version = "0.1.3", default-features = false } indicatif = "0.17.8" +tch = { version = "0.17.0", optional = true } [dependencies.pyo3] -version = "0.21.0" +version = "0.21.2" features = ["extension-module", "anyhow"] [dev-dependencies] From e336d6724a012887de61cbc1b271c0fa116427d0 Mon Sep 17 00:00:00 2001 From: Adrian Seyboldt Date: Thu, 17 Oct 2024 11:39:35 +0200 Subject: [PATCH 02/34] style: Add some type hints --- python/nutpie/compile_pymc.py | 6 +++--- python/nutpie/compiled_pyfunc.py | 2 +- python/nutpie/sample.py | 10 +++++----- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/python/nutpie/compile_pymc.py b/python/nutpie/compile_pymc.py index 9a2faa3..247d2dd 100644 --- a/python/nutpie/compile_pymc.py +++ b/python/nutpie/compile_pymc.py @@ -5,7 +5,7 @@ from functools import wraps from importlib.util import find_spec from math import prod -from typing import TYPE_CHECKING, Any, Callable, Literal, Optional, Union +from typing import TYPE_CHECKING, Any, Callable, Literal, Optional, Union, cast import numpy as np import pandas as pd @@ -270,7 +270,7 @@ def _compile_pymc_model_numba( warnings.filterwarnings( "ignore", message="Cannot cache compiled function .* as it uses dynamic globals", - category=numba.NumbaWarning, + category=numba.NumbaWarning, # type: ignore ) logp_numba = numba.cfunc(c_sig, **kwargs)(logp_numba_raw) @@ -283,7 +283,7 @@ def _compile_pymc_model_numba( warnings.filterwarnings( "ignore", message="Cannot cache compiled function .* as it uses dynamic globals", - category=numba.NumbaWarning, + category=numba.NumbaWarning, # type: ignore ) expand_numba = numba.cfunc(c_sig_expand, **kwargs)(expand_numba_raw) diff --git a/python/nutpie/compiled_pyfunc.py b/python/nutpie/compiled_pyfunc.py index 9ede109..df4404e 100644 --- a/python/nutpie/compiled_pyfunc.py +++ b/python/nutpie/compiled_pyfunc.py @@ -5,7 +5,7 @@ import numpy as np -from nutpie import _lib +from nutpie import _lib # type: ignore from nutpie.sample import CompiledModel SeedType = int diff --git a/python/nutpie/sample.py b/python/nutpie/sample.py index 6c5bfc6..2baddcc 100644 --- a/python/nutpie/sample.py +++ b/python/nutpie/sample.py @@ -1,13 +1,13 @@ import os from dataclasses import dataclass -from typing import Any, Literal, Optional, overload +from typing import Any, Literal, Optional, cast, overload import arviz import numpy as np import pandas as pd import pyarrow -from nutpie import _lib +from nutpie import _lib # type: ignore @dataclass(frozen=True) @@ -281,7 +281,7 @@ def in_colab(): if in_colab(): return True try: - shell = get_ipython().__class__.__name__ + shell = get_ipython().__class__.__name__ # type: ignore if shell == "ZMQInteractiveShell": # Jupyter notebook, Spyder or qtconsole try: from IPython.display import ( @@ -608,10 +608,10 @@ def sample( if cores is None: try: # Only available in python>=3.13 - available = os.process_cpu_count() + available = os.process_cpu_count() # type: ignore except AttributeError: available = os.cpu_count() - cores = min(chains, available) + cores = min(chains, cast(int, available)) if init_mean is None: init_mean = np.zeros(compiled_model.n_dim) From 9d82b527da52f92c6cf51737c2f8e1c8910cacf3 Mon Sep 17 00:00:00 2001 From: Adrian Seyboldt Date: Thu, 17 Oct 2024 11:40:24 +0200 Subject: [PATCH 03/34] feat: Add transforming adaptation --- python/nutpie/compile_pymc.py | 23 +- python/nutpie/compiled_pyfunc.py | 14 + python/nutpie/sample.py | 14 + src/pyfunc.rs | 189 ++++++++++- src/pymc.rs | 1 + src/stan.rs | 1 + src/wrapper.rs | 524 ++++++++++++++++++++----------- 7 files changed, 579 insertions(+), 187 deletions(-) diff --git a/python/nutpie/compile_pymc.py b/python/nutpie/compile_pymc.py index 247d2dd..58b6b0d 100644 --- a/python/nutpie/compile_pymc.py +++ b/python/nutpie/compile_pymc.py @@ -371,14 +371,24 @@ def _compile_pymc_model_jax( logp_fn = logp_fn_pt.vm.jit_fn expand_fn = expand_fn_pt.vm.jit_fn + logp_shared_names = [var.name for var in logp_fn_pt.get_shared()] + expand_shared_names = [var.name for var in expand_fn_pt.get_shared()] + if gradient_backend == "jax": orig_logp_fn = logp_fn._fun - @jax.jit def logp_fn_jax_grad(x, *shared): return jax.value_and_grad(lambda x: orig_logp_fn(x, *shared)[0])(x) + static_argnums = list(range(1, len(logp_shared_names) + 1)) + logp_fn_jax_grad = jax.jit( + logp_fn_jax_grad, + # static_argnums=static_argnums, + ) + logp_fn = logp_fn_jax_grad + else: + orig_logp_fn = None shared_data = {} shared_vars = {} @@ -390,9 +400,6 @@ def logp_fn_jax_grad(x, *shared): shared_vars[val.name] = val seen.add(val) - logp_shared_names = [var.name for var in logp_fn_pt.get_shared()] - expand_shared_names = [var.name for var in expand_fn_pt.get_shared()] - def make_logp_func(): def logp(x, **shared): logp, grad = logp_fn(x, *[shared[name] for name in logp_shared_names]) @@ -401,7 +408,8 @@ def logp(x, **shared): return logp names, slices, shapes = shape_info - dtypes = [np.float64] * len(names) + # TODO do not cast to float64 + dtypes = [np.dtype("float64")] * len(names) def make_expand_func(seed1, seed2, chain): # TODO handle seeds @@ -427,6 +435,7 @@ def expand(x, **shared): shared_data=shared_data, dims=dims, coords=coords, + raw_logp_fn=orig_logp_fn, ) @@ -506,7 +515,7 @@ def compile_pymc_model( raise ValueError(f"Backend must be one of numba and jax. Got {backend}") -def _compute_shapes(model): +def _compute_shapes(model) -> dict[str, tuple[int, ...]]: import pytensor from pymc.initial_point import make_initial_point_fn @@ -681,7 +690,7 @@ def _make_functions( for var in remaining_rvs: all_names.append(var.name) - shape = shapes[var.name] + shape = cast(tuple[int, ...], shapes[var.name]) all_shapes.append(shape) length = prod(shape) all_slices.append(slice(count, count + length)) diff --git a/python/nutpie/compiled_pyfunc.py b/python/nutpie/compiled_pyfunc.py index df4404e..a34cfdd 100644 --- a/python/nutpie/compiled_pyfunc.py +++ b/python/nutpie/compiled_pyfunc.py @@ -20,6 +20,8 @@ class PyFuncModel(CompiledModel): _n_dim: int _variables: list[_lib.PyVariable] _coords: dict[str, Any] + _make_transform_adapter: Callable | None + _raw_logp_fn: Callable | None @property def shapes(self) -> dict[str, tuple[int, ...]]: @@ -60,12 +62,20 @@ def make_expand_func(seed1, seed2, chain): expand_fn = self._make_expand_func(seed1, seed2, chain) return partial(expand_fn, **self._shared_data) + if self._make_transform_adapter is not None: + make_transform_adapter = partial( + self._make_transform_adapter, logp_fn=self._raw_logp_fn + ) + else: + make_transform_adapter = None + return _lib.PyModel( make_logp_func, make_expand_func, self._variables, self.n_dim, self._make_initial_points, + make_transform_adapter, ) @@ -81,6 +91,8 @@ def from_pyfunc( dims: dict[str, tuple[str, ...]] | None = None, shared_data: dict[str, Any] | None = None, make_initial_point_fn: Callable[[SeedType], np.ndarray] | None, + make_transform_adapter=None, + raw_logp_fn=None, ): variables = [] for name, shape, dtype in zip( @@ -111,4 +123,6 @@ def from_pyfunc( _make_initial_points=make_initial_point_fn, _variables=variables, _shared_data=shared_data, + _make_transform_adapter=make_transform_adapter, + _raw_logp_fn=raw_logp_fn, ) diff --git a/python/nutpie/sample.py b/python/nutpie/sample.py index 2baddcc..097a824 100644 --- a/python/nutpie/sample.py +++ b/python/nutpie/sample.py @@ -461,6 +461,7 @@ def sample( save_warmup: bool, progress_bar: bool, low_rank_modified_mass_matrix: bool = False, + transform_adapt: bool = False, init_mean: Optional[np.ndarray], return_raw_trace: bool, blocking: Literal[True], @@ -480,6 +481,7 @@ def sample( save_warmup: bool, progress_bar: bool, low_rank_modified_mass_matrix: bool = False, + transform_adapt: bool = False, init_mean: Optional[np.ndarray], return_raw_trace: bool, blocking: Literal[False], @@ -498,6 +500,7 @@ def sample( save_warmup: bool = True, progress_bar: bool = True, low_rank_modified_mass_matrix: bool = False, + transform_adapt: bool = False, init_mean: Optional[np.ndarray] = None, return_raw_trace: bool = False, blocking: bool = True, @@ -585,6 +588,9 @@ def sample( mass_matrix_gamma: float > 0, default=1e-5 Regularisation parameter for the eigenvalues. Only applicable with low_rank_modified_mass_matrix=True. + transform_adapt: bool, default=False + Use the experimental transform adaptation algorithm + during tuning. **kwargs Pass additional arguments to nutpie._lib.PySamplerArgs @@ -594,10 +600,18 @@ def sample( An ArviZ ``InferenceData`` object that contains the samples. """ + if low_rank_modified_mass_matrix and transform_adapt: + raise ValueError( + "Specify only one of `low_rank_modified_mass_matrix` and `transform_adapt`" + ) + if low_rank_modified_mass_matrix: settings = _lib.PyNutsSettings.LowRank(seed) + elif transform_adapt: + settings = _lib.PyNutsSettings.Transform(seed) else: settings = _lib.PyNutsSettings.Diag(seed) + settings.num_tune = tune settings.num_draws = draws settings.num_chains = chains diff --git a/src/pyfunc.rs b/src/pyfunc.rs index 07b32d5..75d6e22 100644 --- a/src/pyfunc.rs +++ b/src/pyfunc.rs @@ -8,11 +8,12 @@ use arrow::{ }, datatypes::{DataType, Field, Float32Type, Float64Type, Int64Type}, }; -use numpy::{PyArray1, PyReadonlyArray1}; +use numpy::{NotContiguousError, PyArray1, PyReadonlyArray1}; use nuts_rs::{CpuLogpFunc, CpuMath, DrawStorage, LogpError, Model}; use pyo3::{ - pyclass, pymethods, - types::{PyAnyMethods, PyDict, PyDictMethods}, + exceptions::PyRuntimeError, + intern, pyclass, pymethods, + types::{PyAnyMethods, PyDict, PyDictMethods, PyList}, Bound, Py, PyAny, PyErr, Python, }; use rand::Rng; @@ -75,6 +76,7 @@ pub struct PyModel { make_expand_func: Py, init_point_func: Option>, variables: Vec, + transform_adapter: Option>, ndim: usize, } @@ -87,6 +89,7 @@ impl PyModel { variables: Vec, ndim: usize, init_point_func: Option>, + transform_adapter: Option>, ) -> Self { Self { make_logp_func, @@ -94,6 +97,7 @@ impl PyModel { init_point_func, variables, ndim, + transform_adapter, } } } @@ -103,9 +107,11 @@ pub enum PyLogpError { #[error("Bad logp value: {0}")] BadLogp(f64), #[error("Python error: {0}")] - PyError(PyErr), + PyError(#[from] PyErr), #[error("logp function must return float.")] ReturnTypeError(), + #[error("Python retured a non-contigous array")] + NotContiguousError(#[from] NotContiguousError), } impl LogpError for PyLogpError { @@ -121,20 +127,29 @@ impl LogpError for PyLogpError { .expect("Could not access is_recoverable in error check"); }), Self::ReturnTypeError() => false, + Self::NotContiguousError(_) => false, } } } pub struct PyDensity { logp: Py, + transform_adapter: Option>, dim: usize, } impl PyDensity { - fn new(logp_clone_func: &Py, dim: usize) -> Result { + fn new( + logp_clone_func: &Py, + dim: usize, + transform_adapter: Option<&Py>, + ) -> Result { let logp_func = Python::with_gil(|py| logp_clone_func.call0(py))?; + let transform_adapter = + transform_adapter.map(|val| Python::with_gil(|py| val.clone_ref(py))); Ok(Self { logp: logp_func, + transform_adapter, dim, }) } @@ -142,6 +157,7 @@ impl PyDensity { impl CpuLogpFunc for PyDensity { type LogpError = PyLogpError; + type TransformParams = Py; fn logp(&mut self, position: &[f64], grad: &mut [f64]) -> Result { Python::with_gil(|py| { @@ -172,6 +188,168 @@ impl CpuLogpFunc for PyDensity { fn dim(&self) -> usize { self.dim } + + fn inv_transform_normalize( + &mut self, + params: &Self::TransformParams, + untransformed_position: &[f64], + untransofrmed_gradient: &[f64], + transformed_position: &mut [f64], + transformed_gradient: &mut [f64], + ) -> std::result::Result { + Python::with_gil(|py| { + let untransformed_position = PyArray1::from_slice_bound(py, untransformed_position); + let untransformed_gradient = PyArray1::from_slice_bound(py, untransofrmed_gradient); + + let output = params + .getattr(py, intern!(py, "inv_transform"))? + .call1(py, (untransformed_position, untransformed_gradient))?; + let (logdet, transformed_position_out, transformed_gradient_out): ( + f64, + PyReadonlyArray1, + PyReadonlyArray1, + ) = output.extract(py)?; + + transformed_position.copy_from_slice(transformed_position_out.as_slice()?); + transformed_gradient.copy_from_slice(transformed_gradient_out.as_slice()?); + Ok(logdet) + }) + } + + fn init_from_transformed_position( + &mut self, + params: &Self::TransformParams, + untransformed_position: &mut [f64], + untransformed_gradient: &mut [f64], + transformed_position: &[f64], + transformed_gradient: &mut [f64], + ) -> std::result::Result<(f64, f64), Self::LogpError> { + Python::with_gil(|py| { + let transformed_position = PyArray1::from_slice_bound(py, transformed_position); + + let output = params + .getattr(py, intern!(py, "init_from_transformed_position"))? + .call1(py, (transformed_position,))?; + let ( + logp, + logdet, + untransformed_position_out, + untransformed_gradient_out, + transformed_gradient_out, + ): ( + f64, + f64, + PyReadonlyArray1, + PyReadonlyArray1, + PyReadonlyArray1, + ) = output.extract(py)?; + + untransformed_position.copy_from_slice(untransformed_position_out.as_slice()?); + untransformed_gradient.copy_from_slice(untransformed_gradient_out.as_slice()?); + transformed_gradient.copy_from_slice(transformed_gradient_out.as_slice()?); + Ok((logp, logdet)) + }) + } + + fn init_from_untransformed_position( + &mut self, + params: &Self::TransformParams, + untransformed_position: &[f64], + untransformed_gradient: &mut [f64], + transformed_position: &mut [f64], + transformed_gradient: &mut [f64], + ) -> std::result::Result<(f64, f64), Self::LogpError> { + Python::with_gil(|py| { + let untransformed_position = PyArray1::from_slice_bound(py, untransformed_position); + + let output = params + .getattr(py, intern!(py, "init_from_untransformed_position"))? + .call1(py, (untransformed_position,))?; + let ( + logp, + logdet, + untransformed_gradient_out, + transformed_position_out, + transformed_gradient_out, + ): ( + f64, + f64, + PyReadonlyArray1, + PyReadonlyArray1, + PyReadonlyArray1, + ) = output.extract(py)?; + + untransformed_gradient.copy_from_slice(untransformed_gradient_out.as_slice()?); + transformed_position.copy_from_slice(transformed_position_out.as_slice()?); + transformed_gradient.copy_from_slice(transformed_gradient_out.as_slice()?); + Ok((logp, logdet)) + }) + } + + fn update_transformation<'a, R: rand::Rng + ?Sized>( + &'a mut self, + rng: &mut R, + untransformed_positions: impl ExactSizeIterator, + untransformed_gradients: impl ExactSizeIterator, + params: &'a mut Self::TransformParams, + ) -> std::result::Result<(), Self::LogpError> { + Python::with_gil(|py| { + let positions = PyList::new_bound( + py, + untransformed_positions.map(|pos| PyArray1::from_slice_bound(py, pos)), + ); + let gradients = PyList::new_bound( + py, + untransformed_gradients.map(|grad| PyArray1::from_slice_bound(py, grad)), + ); + + let seed = rng.next_u64(); + + params + .getattr(py, intern!(py, "update"))? + .call1(py, (seed, positions, gradients))?; + Ok(()) + }) + } + + fn new_transformation( + &mut self, + rng: &mut R, + untransformed_position: &[f64], + untransfogmed_gradient: &[f64], + chain: u64, + ) -> std::result::Result { + Python::with_gil(|py| { + let position = PyArray1::from_slice_bound(py, untransformed_position); + let gradient = PyArray1::from_slice_bound(py, untransfogmed_gradient); + + let seed = rng.next_u64(); + + let transformer = self + .transform_adapter + .as_ref() + .ok_or_else(|| { + PyLogpError::PyError(PyRuntimeError::new_err( + "No transformation adapter specified", + )) + })? + .call1(py, (seed, position, gradient, chain))?; + + Ok(transformer) + }) + } + + fn transformation_id( + &self, + params: &Self::TransformParams, + ) -> std::result::Result { + Python::with_gil(|py| { + let id: i64 = params + .getattr(py, intern!(py, "transformation_id"))? + .extract(py)?; + Ok(id) + }) + } } pub struct PyTrace { @@ -471,6 +649,7 @@ impl Model for PyModel { Ok(CpuMath::new(PyDensity::new( &self.make_logp_func, self.ndim, + self.transform_adapter.as_ref(), )?)) } diff --git a/src/pymc.rs b/src/pymc.rs index b7862cf..fc57842 100644 --- a/src/pymc.rs +++ b/src/pymc.rs @@ -114,6 +114,7 @@ impl LogpError for ErrorCode { impl<'a> CpuLogpFunc for &'a LogpFunc { type LogpError = ErrorCode; + type TransformParams = (); fn dim(&self) -> usize { self.dim diff --git a/src/stan.rs b/src/stan.rs index 0564cd2..bb5f975 100644 --- a/src/stan.rs +++ b/src/stan.rs @@ -213,6 +213,7 @@ impl LogpError for StanLogpError { impl<'model> CpuLogpFunc for StanDensity<'model> { type LogpError = StanLogpError; + type TransformParams = (); fn logp(&mut self, position: &[f64], grad: &mut [f64]) -> Result { let logp = self.0.log_density_gradient(position, true, true, grad)?; diff --git a/src/wrapper.rs b/src/wrapper.rs index 6f9ad49..c81d3a4 100644 --- a/src/wrapper.rs +++ b/src/wrapper.rs @@ -14,8 +14,8 @@ use crate::{ use anyhow::{bail, Context, Result}; use arrow::array::Array; use nuts_rs::{ - AdaptOptions, ChainProgress, DiagAdaptExpSettings, DiagGradNutsSettings, LowRankNutsSettings, - LowRankSettings, NutsSettings, ProgressCallback, Sampler, SamplerWaitResult, Trace, + ChainProgress, DiagGradNutsSettings, LowRankNutsSettings, ProgressCallback, Sampler, + SamplerWaitResult, Trace, TransformedNutsSettings, }; use pyo3::{ exceptions::PyTimeoutError, @@ -66,97 +66,20 @@ impl PyChainProgress { } } -#[derive(Clone)] -enum InnerSettings { - LowRank(LowRankSettings), - Diag(DiagAdaptExpSettings), -} - #[pyclass] #[derive(Clone)] pub struct PyNutsSettings { - settings: NutsSettings<()>, - adapt: InnerSettings, + inner: Settings, } +#[derive(Clone, Debug)] enum Settings { Diag(DiagGradNutsSettings), LowRank(LowRankNutsSettings), -} - -// Would be much nicer with -// https://doc.rust-lang.org/nightly/unstable-book/language-features/type-changing-struct-update.html -fn combine_settings( - inner: T, - settings: NutsSettings<()>, -) -> NutsSettings { - let adapt = AdaptOptions { - dual_average_options: settings.adapt_options.dual_average_options, - mass_matrix_options: inner, - early_window: settings.adapt_options.early_window, - step_size_window: settings.adapt_options.step_size_window, - mass_matrix_switch_freq: settings.adapt_options.mass_matrix_switch_freq, - early_mass_matrix_switch_freq: settings.adapt_options.early_mass_matrix_switch_freq, - mass_matrix_update_freq: settings.adapt_options.mass_matrix_update_freq, - }; - NutsSettings { - num_tune: settings.num_tune, - num_draws: settings.num_draws, - maxdepth: settings.maxdepth, - store_gradient: settings.store_gradient, - store_unconstrained: settings.store_unconstrained, - max_energy_error: settings.max_energy_error, - store_divergences: settings.store_divergences, - adapt_options: adapt, - check_turning: settings.check_turning, - num_chains: settings.num_chains, - seed: settings.seed, - } -} - -fn split_settings(settings: NutsSettings) -> (NutsSettings<()>, T) { - let adapt_settings = settings.adapt_options; - let mass_matrix_settings = adapt_settings.mass_matrix_options; - - let remaining: AdaptOptions<()> = AdaptOptions { - dual_average_options: adapt_settings.dual_average_options, - mass_matrix_options: (), - early_window: adapt_settings.early_window, - step_size_window: adapt_settings.step_size_window, - mass_matrix_switch_freq: adapt_settings.mass_matrix_switch_freq, - early_mass_matrix_switch_freq: adapt_settings.early_mass_matrix_switch_freq, - mass_matrix_update_freq: adapt_settings.mass_matrix_update_freq, - }; - - let settings = NutsSettings { - adapt_options: remaining, - num_tune: settings.num_tune, - num_draws: settings.num_draws, - maxdepth: settings.maxdepth, - store_gradient: settings.store_gradient, - store_unconstrained: settings.store_unconstrained, - max_energy_error: settings.max_energy_error, - store_divergences: settings.store_divergences, - check_turning: settings.check_turning, - num_chains: settings.num_chains, - seed: settings.seed, - }; - - (settings, mass_matrix_settings) + Transforming(TransformedNutsSettings), } impl PyNutsSettings { - fn into_settings(self) -> Settings { - match self.adapt { - InnerSettings::LowRank(mass_matrix) => { - Settings::LowRank(combine_settings(mass_matrix, self.settings)) - } - InnerSettings::Diag(mass_matrix) => { - Settings::Diag(combine_settings(mass_matrix, self.settings)) - } - } - } - fn new_diag(seed: Option) -> Self { let seed = seed.unwrap_or_else(|| { let mut rng = thread_rng(); @@ -167,11 +90,8 @@ impl PyNutsSettings { ..Default::default() }; - let (settings, inner) = split_settings(settings); - Self { - settings, - adapt: InnerSettings::Diag(inner), + inner: Settings::Diag(settings), } } @@ -185,15 +105,28 @@ impl PyNutsSettings { ..Default::default() }; - let (settings, inner) = split_settings(settings); + Self { + inner: Settings::LowRank(settings), + } + } + + fn new_tranform_adapt(seed: Option) -> Self { + let seed = seed.unwrap_or_else(|| { + let mut rng = thread_rng(); + rng.next_u64() + }); + let settings = TransformedNutsSettings { + seed, + ..Default::default() + }; Self { - settings, - adapt: InnerSettings::LowRank(inner), + inner: Settings::Transforming(settings), } } } +// TODO switch to serde to expose all the options... #[pymethods] impl PyNutsSettings { #[staticmethod] @@ -208,206 +141,427 @@ impl PyNutsSettings { PyNutsSettings::new_low_rank(seed) } + #[staticmethod] + #[allow(non_snake_case)] + fn Transform(seed: Option) -> Self { + PyNutsSettings::new_tranform_adapt(seed) + } + #[getter] fn num_tune(&self) -> u64 { - self.settings.num_tune + match &self.inner { + Settings::Diag(nuts_settings) => nuts_settings.num_tune, + Settings::LowRank(nuts_settings) => nuts_settings.num_tune, + Settings::Transforming(nuts_settings) => nuts_settings.num_tune, + } } #[setter(num_tune)] fn set_num_tune(&mut self, val: u64) { - self.settings.num_tune = val + match &mut self.inner { + Settings::Diag(nuts_settings) => nuts_settings.num_tune = val, + Settings::LowRank(nuts_settings) => nuts_settings.num_tune = val, + Settings::Transforming(nuts_settings) => nuts_settings.num_tune = val, + } } #[getter] fn num_chains(&self) -> usize { - self.settings.num_chains + match &self.inner { + Settings::Diag(nuts_settings) => nuts_settings.num_chains, + Settings::LowRank(nuts_settings) => nuts_settings.num_chains, + Settings::Transforming(nuts_settings) => nuts_settings.num_chains, + } } #[setter(num_chains)] fn set_num_chains(&mut self, val: usize) { - self.settings.num_chains = val; + match &mut self.inner { + Settings::Diag(nuts_settings) => nuts_settings.num_chains = val, + Settings::LowRank(nuts_settings) => nuts_settings.num_chains = val, + Settings::Transforming(nuts_settings) => nuts_settings.num_chains = val, + } } #[getter] fn num_draws(&self) -> u64 { - self.settings.num_draws + match &self.inner { + Settings::Diag(nuts_settings) => nuts_settings.num_draws, + Settings::LowRank(nuts_settings) => nuts_settings.num_draws, + Settings::Transforming(nuts_settings) => nuts_settings.num_draws, + } } #[setter(num_draws)] fn set_num_draws(&mut self, val: u64) { - self.settings.num_draws = val; + match &mut self.inner { + Settings::Diag(nuts_settings) => nuts_settings.num_draws = val, + Settings::LowRank(nuts_settings) => nuts_settings.num_draws = val, + Settings::Transforming(nuts_settings) => nuts_settings.num_draws = val, + } } #[getter] - fn window_switch_freq(&self) -> u64 { - self.settings.adapt_options.mass_matrix_switch_freq + fn window_switch_freq(&self) -> Result { + match &self.inner { + Settings::Diag(nuts_settings) => { + Ok(nuts_settings.adapt_options.mass_matrix_switch_freq) + } + Settings::LowRank(nuts_settings) => { + Ok(nuts_settings.adapt_options.mass_matrix_switch_freq) + } + Settings::Transforming(_) => { + bail!("Option window_switch_freq not availbale for transformation adaptation") + } + } } #[setter(window_switch_freq)] - fn set_window_switch_freq(&mut self, val: u64) { - self.settings.adapt_options.mass_matrix_switch_freq = val; + fn set_window_switch_freq(&mut self, val: u64) -> Result<()> { + match &mut self.inner { + Settings::Diag(nuts_settings) => { + nuts_settings.adapt_options.mass_matrix_switch_freq = val; + Ok(()) + } + Settings::LowRank(nuts_settings) => { + nuts_settings.adapt_options.mass_matrix_switch_freq = val; + Ok(()) + } + Settings::Transforming(_) => { + bail!("Option window_switch_freq not availbale for transformation adaptation") + } + } } #[getter] - fn early_window_switch_freq(&self) -> u64 { - self.settings.adapt_options.early_mass_matrix_switch_freq + fn early_window_switch_freq(&self) -> Result { + match &self.inner { + Settings::Diag(nuts_settings) => { + Ok(nuts_settings.adapt_options.early_mass_matrix_switch_freq) + } + Settings::LowRank(nuts_settings) => { + Ok(nuts_settings.adapt_options.early_mass_matrix_switch_freq) + } + Settings::Transforming(_) => { + bail!("Option early_window_switch_freq not availbale for transformation adaptation") + } + } } #[setter(early_window_switch_freq)] - fn set_early_window_switch_freq(&mut self, val: u64) { - self.settings.adapt_options.early_mass_matrix_switch_freq = val; + fn set_early_window_switch_freq(&mut self, val: u64) -> Result<()> { + match &mut self.inner { + Settings::Diag(nuts_settings) => { + nuts_settings.adapt_options.early_mass_matrix_switch_freq = val; + Ok(()) + } + Settings::LowRank(nuts_settings) => { + nuts_settings.adapt_options.early_mass_matrix_switch_freq = val; + Ok(()) + } + Settings::Transforming(_) => { + bail!("Option early_window_switch_freq not availbale for transformation adaptation") + } + } } + #[getter] fn initial_step(&self) -> f64 { - self.settings - .adapt_options - .dual_average_options - .initial_step + match &self.inner { + Settings::Diag(nuts_settings) => { + nuts_settings + .adapt_options + .dual_average_options + .initial_step + } + Settings::LowRank(nuts_settings) => { + nuts_settings + .adapt_options + .dual_average_options + .initial_step + } + Settings::Transforming(nuts_settings) => { + nuts_settings + .adapt_options + .dual_average_options + .initial_step + } + } } #[setter(initial_step)] fn set_initial_step(&mut self, val: f64) { - self.settings - .adapt_options - .dual_average_options - .initial_step = val + match &mut self.inner { + Settings::Diag(nuts_settings) => { + nuts_settings + .adapt_options + .dual_average_options + .initial_step = val; + } + Settings::LowRank(nuts_settings) => { + nuts_settings + .adapt_options + .dual_average_options + .initial_step = val; + } + Settings::Transforming(nuts_settings) => { + nuts_settings + .adapt_options + .dual_average_options + .initial_step = val; + } + } } #[getter] fn maxdepth(&self) -> u64 { - self.settings.maxdepth + match &self.inner { + Settings::Diag(nuts_settings) => nuts_settings.maxdepth, + Settings::LowRank(nuts_settings) => nuts_settings.maxdepth, + Settings::Transforming(nuts_settings) => nuts_settings.maxdepth, + } } #[setter(maxdepth)] fn set_maxdepth(&mut self, val: u64) { - self.settings.maxdepth = val + match &mut self.inner { + Settings::Diag(nuts_settings) => nuts_settings.maxdepth = val, + Settings::LowRank(nuts_settings) => nuts_settings.maxdepth = val, + Settings::Transforming(nuts_settings) => nuts_settings.maxdepth = val, + } } #[getter] fn store_gradient(&self) -> bool { - self.settings.store_gradient + match &self.inner { + Settings::Diag(nuts_settings) => nuts_settings.store_gradient, + Settings::LowRank(nuts_settings) => nuts_settings.store_gradient, + Settings::Transforming(nuts_settings) => nuts_settings.store_gradient, + } } #[setter(store_gradient)] fn set_store_gradient(&mut self, val: bool) { - self.settings.store_gradient = val; + match &mut self.inner { + Settings::Diag(nuts_settings) => nuts_settings.store_gradient = val, + Settings::LowRank(nuts_settings) => nuts_settings.store_gradient = val, + Settings::Transforming(nuts_settings) => nuts_settings.store_gradient = val, + } } #[getter] fn store_unconstrained(&self) -> bool { - self.settings.store_unconstrained + match &self.inner { + Settings::Diag(nuts_settings) => nuts_settings.store_unconstrained, + Settings::LowRank(nuts_settings) => nuts_settings.store_unconstrained, + Settings::Transforming(nuts_settings) => nuts_settings.store_unconstrained, + } } #[setter(store_unconstrained)] fn set_store_unconstrained(&mut self, val: bool) { - self.settings.store_unconstrained = val; + match &mut self.inner { + Settings::Diag(nuts_settings) => nuts_settings.store_unconstrained = val, + Settings::LowRank(nuts_settings) => nuts_settings.store_unconstrained = val, + Settings::Transforming(nuts_settings) => nuts_settings.store_unconstrained = val, + } } #[getter] fn store_divergences(&self) -> bool { - self.settings.store_divergences + match &self.inner { + Settings::Diag(nuts_settings) => nuts_settings.store_divergences, + Settings::LowRank(nuts_settings) => nuts_settings.store_divergences, + Settings::Transforming(nuts_settings) => nuts_settings.store_divergences, + } } #[setter(store_divergences)] fn set_store_divergences(&mut self, val: bool) { - self.settings.store_divergences = val; + match &mut self.inner { + Settings::Diag(nuts_settings) => nuts_settings.store_divergences = val, + Settings::LowRank(nuts_settings) => nuts_settings.store_divergences = val, + Settings::Transforming(nuts_settings) => nuts_settings.store_divergences = val, + } } #[getter] fn max_energy_error(&self) -> f64 { - self.settings.max_energy_error + match &self.inner { + Settings::Diag(nuts_settings) => nuts_settings.max_energy_error, + Settings::LowRank(nuts_settings) => nuts_settings.max_energy_error, + Settings::Transforming(nuts_settings) => nuts_settings.max_energy_error, + } } #[setter(max_energy_error)] fn set_max_energy_error(&mut self, val: f64) { - self.settings.max_energy_error = val + match &mut self.inner { + Settings::Diag(nuts_settings) => nuts_settings.max_energy_error = val, + Settings::LowRank(nuts_settings) => nuts_settings.max_energy_error = val, + Settings::Transforming(nuts_settings) => nuts_settings.max_energy_error = val, + } } - #[setter(target_accept)] - fn set_target_accept(&mut self, val: f64) { - self.settings - .adapt_options - .dual_average_options - .target_accept = val; + #[getter] + fn set_target_accept(&self) -> f64 { + match &self.inner { + Settings::Diag(nuts_settings) => { + nuts_settings + .adapt_options + .dual_average_options + .target_accept + } + Settings::LowRank(nuts_settings) => { + nuts_settings + .adapt_options + .dual_average_options + .target_accept + } + Settings::Transforming(nuts_settings) => { + nuts_settings + .adapt_options + .dual_average_options + .target_accept + } + } } - #[getter] - fn target_accept(&self) -> f64 { - self.settings - .adapt_options - .dual_average_options - .target_accept + #[setter(target_accept)] + fn target_accept(&mut self, val: f64) { + match &mut self.inner { + Settings::Diag(nuts_settings) => { + nuts_settings + .adapt_options + .dual_average_options + .target_accept = val + } + Settings::LowRank(nuts_settings) => { + nuts_settings + .adapt_options + .dual_average_options + .target_accept = val + } + Settings::Transforming(nuts_settings) => { + nuts_settings + .adapt_options + .dual_average_options + .target_accept = val + } + } } #[getter] - fn store_mass_matrix(&self) -> bool { - match &self.adapt { - InnerSettings::LowRank(low_rank) => low_rank.store_mass_matrix, - InnerSettings::Diag(diag) => diag.store_mass_matrix, + fn store_mass_matrix(&self) -> Result { + match &self.inner { + Settings::LowRank(settings) => { + Ok(settings.adapt_options.mass_matrix_options.store_mass_matrix) + } + Settings::Diag(settings) => { + Ok(settings.adapt_options.mass_matrix_options.store_mass_matrix) + } + Settings::Transforming(_) => { + bail!("Option store_mass_matrix not availbale for transformation adaptation") + } } } #[setter(store_mass_matrix)] - fn set_store_mass_matrix(&mut self, val: bool) { - match &mut self.adapt { - InnerSettings::LowRank(low_rank) => { - low_rank.store_mass_matrix = val; + fn set_store_mass_matrix(&mut self, val: bool) -> Result<()> { + match &mut self.inner { + Settings::LowRank(settings) => { + settings.adapt_options.mass_matrix_options.store_mass_matrix = val; + Ok(()) } - InnerSettings::Diag(diag) => { - diag.store_mass_matrix = val; + Settings::Diag(settings) => { + settings.adapt_options.mass_matrix_options.store_mass_matrix = val; + Ok(()) + } + Settings::Transforming(_) => { + bail!("Option store_mass_matrix not availbale for transformation adaptation") } } } #[getter] fn use_grad_based_mass_matrix(&self) -> Result { - match &self.adapt { - InnerSettings::LowRank(_) => { - bail!("grad based mass matrix not available for low-rank adaptation") + match &self.inner { + Settings::LowRank(_) => { + bail!("non-grad based mass matrix not available for low-rank adaptation") + } + Settings::Transforming(_) => { + bail!("non-grad based mass matrix not available for transforming adaptation") } - InnerSettings::Diag(diag) => Ok(diag.use_grad_based_estimate), + Settings::Diag(diag) => Ok(diag + .adapt_options + .mass_matrix_options + .use_grad_based_estimate), } } #[setter(use_grad_based_mass_matrix)] fn set_use_grad_based_mass_matrix(&mut self, val: bool) -> Result<()> { - match &mut self.adapt { - InnerSettings::LowRank(_) => { - bail!("grad based mass matrix not available for low-rank adaptation") + match &mut self.inner { + Settings::LowRank(_) => { + bail!("non-grad based mass matrix not available for low-rank adaptation"); } - InnerSettings::Diag(diag) => { - diag.use_grad_based_estimate = val; + Settings::Transforming(_) => { + bail!("non-grad based mass matrix not available for transforming adaptation"); + } + Settings::Diag(diag) => { + diag.adapt_options + .mass_matrix_options + .use_grad_based_estimate = val; } } Ok(()) } #[getter] - fn mass_matrix_switch_freq(&self) -> u64 { - self.settings.adapt_options.mass_matrix_switch_freq + fn mass_matrix_switch_freq(&self) -> Result { + match &self.inner { + Settings::Diag(settings) => Ok(settings.adapt_options.mass_matrix_switch_freq), + Settings::LowRank(settings) => Ok(settings.adapt_options.mass_matrix_switch_freq), + Settings::Transforming(_) => { + bail!("mass_matrix_switch_freq not available for transforming adaptation"); + } + } } #[setter(mass_matrix_switch_freq)] - fn set_mass_matrix_switch_freq(&mut self, val: u64) { - self.settings.adapt_options.mass_matrix_switch_freq = val; + fn set_mass_matrix_switch_freq(&mut self, val: u64) -> Result<()> { + match &mut self.inner { + Settings::Diag(settings) => settings.adapt_options.mass_matrix_switch_freq = val, + Settings::LowRank(settings) => settings.adapt_options.mass_matrix_switch_freq = val, + Settings::Transforming(_) => { + bail!("mass_matrix_switch_freq not available for transforming adaptation"); + } + } + Ok(()) } #[getter] fn mass_matrix_eigval_cutoff(&self) -> Result { - match &self.adapt { - InnerSettings::LowRank(inner) => Ok(inner.eigval_cutoff), - InnerSettings::Diag(_) => { - bail!("eigenvalue cutoff not available for diag mass matrix adaptation") + match &self.inner { + Settings::LowRank(inner) => Ok(inner.adapt_options.mass_matrix_options.eigval_cutoff), + Settings::Diag(_) => { + bail!("eigenvalue cutoff not available for diag mass matrix adaptation"); + } + Settings::Transforming(_) => { + bail!("eigenvalue cutoff not available for transfor adaptation"); } } } #[setter(mass_matrix_eigval_cutoff)] fn set_mass_matrix_eigval_cutoff(&mut self, val: f64) -> Result<()> { - match &mut self.adapt { - InnerSettings::LowRank(inner) => inner.eigval_cutoff = val, - InnerSettings::Diag(_) => { - bail!("eigenvalue cutoff not available for diag mass matrix adaptation") + match &mut self.inner { + Settings::LowRank(inner) => inner.adapt_options.mass_matrix_options.eigval_cutoff = val, + Settings::Diag(_) => { + bail!("eigenvalue cutoff not available for diag mass matrix adaptation"); + } + Settings::Transforming(_) => { + bail!("eigenvalue cutoff not available for transfor adaptation"); } } Ok(()) @@ -415,20 +569,28 @@ impl PyNutsSettings { #[getter] fn mass_matrix_gamma(&self) -> Result { - match &self.adapt { - InnerSettings::LowRank(inner) => Ok(inner.gamma), - InnerSettings::Diag(_) => { - bail!("gamma not available for diag mass matrix adaptation") + match &self.inner { + Settings::LowRank(inner) => Ok(inner.adapt_options.mass_matrix_options.gamma), + Settings::Diag(_) => { + bail!("gamma not available for diag mass matrix adaptation"); + } + Settings::Transforming(_) => { + bail!("gamma not available for transform adaptation"); } } } #[setter(mass_matrix_gamma)] fn set_mass_matrix_gamma(&mut self, val: f64) -> Result<()> { - match &mut self.adapt { - InnerSettings::LowRank(inner) => inner.gamma = val, - InnerSettings::Diag(_) => { - bail!("gamma not available for diag mass matrix adaptation") + match &mut self.inner { + Settings::LowRank(inner) => { + inner.adapt_options.mass_matrix_options.gamma = val; + } + Settings::Diag(_) => { + bail!("gamma not available for diag mass matrix adaptation"); + } + Settings::Transforming(_) => { + bail!("gamma not available for transform adaptation"); } } Ok(()) @@ -517,7 +679,7 @@ impl PySampler { progress_type: ProgressType, ) -> PyResult { let callback = progress_type.into_callback()?; - match settings.into_settings() { + match settings.inner { Settings::LowRank(settings) => { let sampler = Sampler::new(model, settings, cores, callback)?; Ok(PySampler(SamplerState::Running(sampler))) @@ -526,6 +688,10 @@ impl PySampler { let sampler = Sampler::new(model, settings, cores, callback)?; Ok(PySampler(SamplerState::Running(sampler))) } + Settings::Transforming(settings) => { + let sampler = Sampler::new(model, settings, cores, callback)?; + Ok(PySampler(SamplerState::Running(sampler))) + } } } @@ -537,7 +703,7 @@ impl PySampler { progress_type: ProgressType, ) -> PyResult { let callback = progress_type.into_callback()?; - match settings.into_settings() { + match settings.inner { Settings::LowRank(settings) => { let sampler = Sampler::new(model, settings, cores, callback)?; Ok(PySampler(SamplerState::Running(sampler))) @@ -546,6 +712,10 @@ impl PySampler { let sampler = Sampler::new(model, settings, cores, callback)?; Ok(PySampler(SamplerState::Running(sampler))) } + Settings::Transforming(settings) => { + let sampler = Sampler::new(model, settings, cores, callback)?; + Ok(PySampler(SamplerState::Running(sampler))) + } } } @@ -557,7 +727,7 @@ impl PySampler { progress_type: ProgressType, ) -> PyResult { let callback = progress_type.into_callback()?; - match settings.into_settings() { + match settings.inner { Settings::LowRank(settings) => { let sampler = Sampler::new(model, settings, cores, callback)?; Ok(PySampler(SamplerState::Running(sampler))) @@ -566,6 +736,10 @@ impl PySampler { let sampler = Sampler::new(model, settings, cores, callback)?; Ok(PySampler(SamplerState::Running(sampler))) } + Settings::Transforming(settings) => { + let sampler = Sampler::new(model, settings, cores, callback)?; + Ok(PySampler(SamplerState::Running(sampler))) + } } } From 4faf55fb19be60932e74e04141e36a76530684ef Mon Sep 17 00:00:00 2001 From: Adrian Seyboldt Date: Thu, 17 Oct 2024 11:44:00 +0200 Subject: [PATCH 04/34] docs: Add documentation template --- book.toml | 6 + docs/SUMMARY.md | 8 + docs/benchmarks.md | 1 + docs/nf-adapt.md | 3 + docs/pymc-usage.md | 1 + docs/stan-usage.md | 3 + python/nutpie/compiled_pyfunc.py | 307 ++++++++++++++++++++++++++++++- 7 files changed, 324 insertions(+), 5 deletions(-) create mode 100644 book.toml create mode 100644 docs/SUMMARY.md create mode 100644 docs/benchmarks.md create mode 100644 docs/nf-adapt.md create mode 100644 docs/pymc-usage.md create mode 100644 docs/stan-usage.md diff --git a/book.toml b/book.toml new file mode 100644 index 0000000..9835ea7 --- /dev/null +++ b/book.toml @@ -0,0 +1,6 @@ +[book] +authors = ["Adrian Seyboldt"] +language = "en" +multilingual = false +src = "docs" +title = "nutpie" diff --git a/docs/SUMMARY.md b/docs/SUMMARY.md new file mode 100644 index 0000000..279cdd3 --- /dev/null +++ b/docs/SUMMARY.md @@ -0,0 +1,8 @@ +# Summary + +[Introduction](../README.md) + +- [Usage with PyMC](./pymc-usage.md) +- [Usage with Stan](./stan-usage.md) +- [Adaptation with normalizing flows](./nf-adapt.md) +- [Benchmarks](./benchmarks.md) diff --git a/docs/benchmarks.md b/docs/benchmarks.md new file mode 100644 index 0000000..680d565 --- /dev/null +++ b/docs/benchmarks.md @@ -0,0 +1 @@ +# Benchmarks diff --git a/docs/nf-adapt.md b/docs/nf-adapt.md new file mode 100644 index 0000000..d9d0325 --- /dev/null +++ b/docs/nf-adapt.md @@ -0,0 +1,3 @@ +# Adaptation with normalizing flows + +**Experimental** diff --git a/docs/pymc-usage.md b/docs/pymc-usage.md new file mode 100644 index 0000000..e66c098 --- /dev/null +++ b/docs/pymc-usage.md @@ -0,0 +1 @@ +# Usage with PyMC models diff --git a/docs/stan-usage.md b/docs/stan-usage.md new file mode 100644 index 0000000..78259ef --- /dev/null +++ b/docs/stan-usage.md @@ -0,0 +1,3 @@ +# Usage with Stan models + +foobar diff --git a/python/nutpie/compiled_pyfunc.py b/python/nutpie/compiled_pyfunc.py index a34cfdd..4f2ee15 100644 --- a/python/nutpie/compiled_pyfunc.py +++ b/python/nutpie/compiled_pyfunc.py @@ -11,6 +11,304 @@ SeedType = int +def make_transform_adapter(*, verbose=False, window_size=2000): + import jax + import equinox as eqx + import jax.numpy as jnp + import flowjax + import flowjax.train + import flowjax.flows + import optax + import traceback + + class FisherLoss: + @eqx.filter_jit + def __call__( + self, + params, + static, + x, + condition=None, + key=None, + ): + flow = flowjax.train.losses.unwrap( + eqx.combine(params, static, is_leaf=eqx.is_inexact_array) + ) + + def compute_loss(bijection, draw, grad): + draw, grad, _ = bijection.inverse_gradient_and_val( + draw, grad, jnp.array(0.0) + ) + return ((draw + grad) ** 2).sum() + + assert x.shape[1] == 2 + draws = x[:, 0, :] + grads = x[:, 1, :] + return jnp.log( + jax.vmap(compute_loss, [None, 0, 0])( + flow.bijection, draws, grads + ).mean() + ) + + def _get_untransformed(bijection, draw_trafo, grad_trafo): + bijection = flowjax.train.losses.unwrap(bijection) + draw = bijection.inverse(draw_trafo) + _, pull_grad_fn = jax.vjp(bijection.transform_and_log_det, draw) + (grad,) = pull_grad_fn((grad_trafo, 1.0)) + return draw, grad + + pull_points = eqx.filter_jit(jax.vmap(_get_untransformed, [None, 0, 0])) + + def fit_flow(key, bijection, positions, gradients, **kwargs): + flow = flowjax.flows.Transformed( + flowjax.distributions.StandardNormal(bijection.shape), bijection + ) + + points = jnp.transpose(jnp.array([positions, gradients]), [1, 0, 2]) + + key, train_key = jax.random.split(key) + + fit, losses, opt_state = flowjax.train.fit_to_data( + key=train_key, + dist=flow, + x=points, + loss_fn=FisherLoss(), + **kwargs, + ) + + draws_pulled, grads_pulled = pull_points(fit.bijection, positions, gradients) + final_cost = np.log(((draws_pulled + grads_pulled) ** 2).sum(1).mean(0)) + return fit, final_cost, opt_state + + def make_flow(seed, positions, gradients, *, n_layers): + positions = np.array(positions) + gradients = np.array(gradients) + + n_draws, n_dim = positions.shape + + if n_dim < 2: + n_layers = 0 + + assert positions.shape == gradients.shape + assert n_draws > 0 + + if n_draws == 0: + raise ValueError("No draws") + elif n_draws == 1: + diag = 1 / jnp.abs(gradients[0]) + mean = jnp.zeros_like(diag) + else: + diag = jnp.sqrt(positions.std(0) / gradients.std(0)) + mean = positions.mean(0) + diag * gradients.mean(0) + + key = jax.random.PRNGKey(seed % (2**63)) + + flows = [ + flowjax.flows.Affine(loc=mean, scale=diag), + ] + + for layer in range(n_layers): + key, key_couple, key_permute, key_init = jax.random.split(key, 4) + + scale = flowjax.wrappers.Parameterize( + lambda x: jnp.exp(jnp.arcsinh(x)), jnp.array(0.0) + ) + affine = eqx.tree_at( + where=lambda aff: aff.scale, + pytree=flowjax.bijections.Affine(), + replace=scale, + ) + + coupling = flowjax.bijections.coupling.Coupling( + key_couple, + transformer=affine, + untransformed_dim=n_dim // 2, + dim=n_dim, + nn_activation=jax.nn.gelu, + nn_width=n_dim // 2, + nn_depth=1, + ) + + if layer == n_layers - 1: + flow = coupling + else: + flow = flowjax.flows._add_default_permute(coupling, n_dim, key_permute) + + flows.append(flow) + + return flowjax.bijections.Chain(flows[::-1]) + + @eqx.filter_jit + def _init_from_transformed_position(logp_fn, bijection, transformed_position): + bijection = flowjax.train.losses.unwrap(bijection) + (untransformed_position, logdet), pull_grad = jax.vjp( + bijection.transform_and_log_det, transformed_position + ) + logp, untransformed_gradient = jax.value_and_grad(lambda x: logp_fn(x)[0])( + untransformed_position + ) + (transformed_gradient,) = pull_grad((untransformed_gradient, 1.0)) + return ( + logp, + logdet, + untransformed_position, + untransformed_gradient, + transformed_gradient, + ) + + @eqx.filter_jit + def _init_from_untransformed_position(logp_fn, bijection, untransformed_position): + logp, untransformed_gradient = jax.value_and_grad(lambda x: logp_fn(x)[0])( + untransformed_position + ) + logdet, transformed_position, transformed_gradient = _inv_transform( + bijection, untransformed_position, untransformed_gradient + ) + return ( + logp, + logdet, + untransformed_gradient, + transformed_position, + transformed_gradient, + ) + + @eqx.filter_jit + def _inv_transform(bijection, untransformed_position, untransformed_gradient): + bijection = flowjax.train.losses.unwrap(bijection) + transformed_position, transformed_gradient, logdet = ( + bijection.inverse_gradient_and_val( + untransformed_position, untransformed_gradient, 0.0 + ) + ) + return -logdet, transformed_position, transformed_gradient + + class TransformAdapter: + def __init__( + self, + seed, + position, + gradient, + chain, + *, + logp_fn, + make_flow_fn, + verbose=False, + window_size=2000, + ): + self._logp_fn = logp_fn + self._make_flow_fn = make_flow_fn + self._chain = chain + self._verbose = verbose + self._window_size = window_size + try: + self._bijection = make_flow_fn(seed, [position], [gradient], n_layers=0) + except Exception as e: + print("make_flow", e) + print(traceback.format_exc()) + raise + self.index = 0 + + @property + def transformation_id(self): + return self.index + + def update(self, seed, positions, gradients): + self.index += 1 + if self._verbose: + print(f"Chain {self._chain}: Total available points: {len(positions)}") + n_draws = len(positions) + if n_draws == 0: + return + try: + if self.index <= 10: + self._bijection = self._make_flow_fn( + seed, positions[-10:], gradients[-10:], n_layers=0 + ) + return + + positions = np.array(positions[-self._window_size :]) + gradients = np.array(gradients[-self._window_size :]) + + assert np.isfinite(positions).all() + assert np.isfinite(gradients).all() + + if len(self._bijection.bijections) == 1: + self._bijection = self._make_flow_fn( + seed, positions, gradients, n_layers=8 + ) + + # make_flow might still only return a single trafo if the for 1d problems + if len(self._bijection.bijections) == 1: + return + + # TODO don't reuse seed + key = jax.random.PRNGKey(seed % (2**63)) + fit, final_cost, _ = fit_flow( + key, + self._bijection, + positions, + gradients, + show_progress=self._verbose, + optimizer=optax.adabelief(1e-3), + batch_size=128, + ) + if self._verbose: + print(f"Chain {self._chain}: final cost {final_cost}") + if np.isfinite(final_cost).all(): + self._bijection = fit.bijection + else: + self._bijection = self._make_flow_fn( + seed, positions, gradients, n_layers=0 + ) + except Exception as e: + print("update error:", e) + print(traceback.format_exc()) + + def init_from_transformed_position(self, transformed_position): + try: + logp, logdet, *arrays = _init_from_transformed_position( + self._logp_fn, + self._bijection, + jnp.array(transformed_position), + ) + return float(logp), float(logdet), *[np.array(val) for val in arrays] + except Exception as e: + print(e) + print(traceback.format_exc()) + raise + + def init_from_untransformed_position(self, untransformed_position): + try: + logp, logdet, *arrays = _init_from_untransformed_position( + self._logp_fn, + self._bijection, + jnp.array(untransformed_position), + ) + return float(logp), float(logdet), *[np.array(val) for val in arrays] + except Exception as e: + print(e) + print(traceback.format_exc()) + raise + + def inv_transform(self, position, gradient): + try: + logdet, *arrays = _inv_transform( + self._bijection, jnp.array(position), jnp.array(gradient) + ) + return logdet, *[np.array(val) for val in arrays] + except Exception as e: + print(e) + print(traceback.format_exc()) + raise + + return partial( + TransformAdapter, + verbose=verbose, + window_size=window_size, + make_flow_fn=make_flow, + ) + + @dataclass(frozen=True) class PyFuncModel(CompiledModel): _make_logp_func: Callable @@ -62,12 +360,10 @@ def make_expand_func(seed1, seed2, chain): expand_fn = self._make_expand_func(seed1, seed2, chain) return partial(expand_fn, **self._shared_data) - if self._make_transform_adapter is not None: - make_transform_adapter = partial( - self._make_transform_adapter, logp_fn=self._raw_logp_fn - ) + if self._raw_logp_fn is not None: + make_adapter = partial(make_transform_adapter(), logp_fn=self._raw_logp_fn) else: - make_transform_adapter = None + make_adapter = None return _lib.PyModel( make_logp_func, @@ -76,6 +372,7 @@ def make_expand_func(seed1, seed2, chain): self.n_dim, self._make_initial_points, make_transform_adapter, + make_adapter, ) From 7f14b8cd7eae22d31e1f2630a7066086abbb85e7 Mon Sep 17 00:00:00 2001 From: Adrian Seyboldt Date: Fri, 18 Oct 2024 18:50:37 +0200 Subject: [PATCH 05/34] Clean up optimizer arguments --- python/nutpie/compiled_pyfunc.py | 30 +++++++++++++----------------- 1 file changed, 13 insertions(+), 17 deletions(-) diff --git a/python/nutpie/compiled_pyfunc.py b/python/nutpie/compiled_pyfunc.py index 4f2ee15..7719575 100644 --- a/python/nutpie/compiled_pyfunc.py +++ b/python/nutpie/compiled_pyfunc.py @@ -11,7 +11,7 @@ SeedType = int -def make_transform_adapter(*, verbose=False, window_size=2000): +def make_transform_adapter(*, verbose=True, window_size=2000, show_progress=False): import jax import equinox as eqx import jax.numpy as jnp @@ -50,16 +50,7 @@ def compute_loss(bijection, draw, grad): ).mean() ) - def _get_untransformed(bijection, draw_trafo, grad_trafo): - bijection = flowjax.train.losses.unwrap(bijection) - draw = bijection.inverse(draw_trafo) - _, pull_grad_fn = jax.vjp(bijection.transform_and_log_det, draw) - (grad,) = pull_grad_fn((grad_trafo, 1.0)) - return draw, grad - - pull_points = eqx.filter_jit(jax.vmap(_get_untransformed, [None, 0, 0])) - - def fit_flow(key, bijection, positions, gradients, **kwargs): + def fit_flow(key, bijection, loss_fn, positions, gradients, **kwargs): flow = flowjax.flows.Transformed( flowjax.distributions.StandardNormal(bijection.shape), bijection ) @@ -72,12 +63,11 @@ def fit_flow(key, bijection, positions, gradients, **kwargs): key=train_key, dist=flow, x=points, - loss_fn=FisherLoss(), + loss_fn=loss_fn, **kwargs, ) - draws_pulled, grads_pulled = pull_points(fit.bijection, positions, gradients) - final_cost = np.log(((draws_pulled + grads_pulled) ** 2).sum(1).mean(0)) + final_cost = losses["val"][-1] return fit, final_cost, opt_state def make_flow(seed, positions, gradients, *, n_layers): @@ -108,7 +98,7 @@ def make_flow(seed, positions, gradients, *, n_layers): ] for layer in range(n_layers): - key, key_couple, key_permute, key_init = jax.random.split(key, 4) + key, key_couple, key_permute = jax.random.split(key, 3) scale = flowjax.wrappers.Parameterize( lambda x: jnp.exp(jnp.arcsinh(x)), jnp.array(0.0) @@ -194,12 +184,16 @@ def __init__( make_flow_fn, verbose=False, window_size=2000, + show_progress=False, ): self._logp_fn = logp_fn self._make_flow_fn = make_flow_fn self._chain = chain self._verbose = verbose self._window_size = window_size + self._optimizer = optax.adabelief(1e-3) + self._loss_fn = FisherLoss() + self._show_progress = show_progress try: self._bijection = make_flow_fn(seed, [position], [gradient], n_layers=0) except Exception as e: @@ -246,10 +240,11 @@ def update(self, seed, positions, gradients): fit, final_cost, _ = fit_flow( key, self._bijection, + self._loss_fn, positions, gradients, - show_progress=self._verbose, - optimizer=optax.adabelief(1e-3), + show_progress=self._show_progress, + optimizer=self._optimizer, batch_size=128, ) if self._verbose: @@ -306,6 +301,7 @@ def inv_transform(self, position, gradient): verbose=verbose, window_size=window_size, make_flow_fn=make_flow, + show_progress=show_progress, ) From 100fbef72fad7278be733abaa17904de3f825982 Mon Sep 17 00:00:00 2001 From: Adrian Seyboldt Date: Fri, 18 Oct 2024 18:50:59 +0200 Subject: [PATCH 06/34] Fix logdet sign --- python/nutpie/compiled_pyfunc.py | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/python/nutpie/compiled_pyfunc.py b/python/nutpie/compiled_pyfunc.py index 7719575..31f8606 100644 --- a/python/nutpie/compiled_pyfunc.py +++ b/python/nutpie/compiled_pyfunc.py @@ -170,7 +170,7 @@ def _inv_transform(bijection, untransformed_position, untransformed_gradient): untransformed_position, untransformed_gradient, 0.0 ) ) - return -logdet, transformed_position, transformed_gradient + return logdet, transformed_position, transformed_gradient class TransformAdapter: def __init__( @@ -220,8 +220,11 @@ def update(self, seed, positions, gradients): ) return - positions = np.array(positions[-self._window_size :]) - gradients = np.array(gradients[-self._window_size :]) + positions = np.array(positions[500:][-self._window_size :]) + gradients = np.array(gradients[500:][-self._window_size :]) + + if len(positions) == 0: + return assert np.isfinite(positions).all() assert np.isfinite(gradients).all() From 25246e926afb836108f4d21153454f7262a081b2 Mon Sep 17 00:00:00 2001 From: Adrian Seyboldt Date: Fri, 25 Oct 2024 23:05:58 +0200 Subject: [PATCH 07/34] chore: Update dependencies --- Cargo.lock | 546 ++++++++++------------------------------------------- Cargo.toml | 14 +- 2 files changed, 111 insertions(+), 449 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 27405f5..f43842a 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -75,55 +75,22 @@ version = "1.0.93" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4c95c10ba0b00a02636238b814946408b1322d5ac4760326e6fb8ec956d85775" -[[package]] -name = "arrow" -version = "52.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05048a8932648b63f21c37d88b552ccc8a65afb6dfe9fc9f30ce79174c2e7a85" -dependencies = [ - "arrow-arith 52.2.0", - "arrow-array 52.2.0", - "arrow-buffer 52.2.0", - "arrow-cast 52.2.0", - "arrow-data 52.2.0", - "arrow-ord 52.2.0", - "arrow-row 52.2.0", - "arrow-schema 52.2.0", - "arrow-select 52.2.0", - "arrow-string 52.2.0", -] - [[package]] name = "arrow" version = "53.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4caf25cdc4a985f91df42ed9e9308e1adbcd341a31a72605c697033fcef163e3" dependencies = [ - "arrow-arith 53.2.0", - "arrow-array 53.2.0", - "arrow-buffer 53.2.0", - "arrow-cast 53.2.0", - "arrow-data 53.2.0", - "arrow-ord 53.2.0", - "arrow-row 53.2.0", - "arrow-schema 53.2.0", - "arrow-select 53.2.0", - "arrow-string 53.2.0", -] - -[[package]] -name = "arrow-arith" -version = "52.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d8a57966e43bfe9a3277984a14c24ec617ad874e4c0e1d2a1b083a39cfbf22c" -dependencies = [ - "arrow-array 52.2.0", - "arrow-buffer 52.2.0", - "arrow-data 52.2.0", - "arrow-schema 52.2.0", - "chrono", - "half", - "num", + "arrow-arith", + "arrow-array", + "arrow-buffer", + "arrow-cast", + "arrow-data", + "arrow-ord", + "arrow-row", + "arrow-schema", + "arrow-select", + "arrow-string", ] [[package]] @@ -132,28 +99,12 @@ version = "53.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "91f2dfd1a7ec0aca967dfaa616096aec49779adc8eccec005e2f5e4111b1192a" dependencies = [ - "arrow-array 53.2.0", - "arrow-buffer 53.2.0", - "arrow-data 53.2.0", - "arrow-schema 53.2.0", - "chrono", - "half", - "num", -] - -[[package]] -name = "arrow-array" -version = "52.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "16f4a9468c882dc66862cef4e1fd8423d47e67972377d85d80e022786427768c" -dependencies = [ - "ahash", - "arrow-buffer 52.2.0", - "arrow-data 52.2.0", - "arrow-schema 52.2.0", + "arrow-array", + "arrow-buffer", + "arrow-data", + "arrow-schema", "chrono", "half", - "hashbrown", "num", ] @@ -164,26 +115,15 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d39387ca628be747394890a6e47f138ceac1aa912eab64f02519fed24b637af8" dependencies = [ "ahash", - "arrow-buffer 53.2.0", - "arrow-data 53.2.0", - "arrow-schema 53.2.0", + "arrow-buffer", + "arrow-data", + "arrow-schema", "chrono", "half", "hashbrown", "num", ] -[[package]] -name = "arrow-buffer" -version = "52.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c975484888fc95ec4a632cdc98be39c085b1bb518531b0c80c5d462063e5daa1" -dependencies = [ - "bytes", - "half", - "num", -] - [[package]] name = "arrow-buffer" version = "53.2.0" @@ -195,81 +135,34 @@ dependencies = [ "num", ] -[[package]] -name = "arrow-cast" -version = "52.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da26719e76b81d8bc3faad1d4dbdc1bcc10d14704e63dc17fc9f3e7e1e567c8e" -dependencies = [ - "arrow-array 52.2.0", - "arrow-buffer 52.2.0", - "arrow-data 52.2.0", - "arrow-schema 52.2.0", - "arrow-select 52.2.0", - "atoi", - "base64", - "chrono", - "half", - "lexical-core 0.8.5", - "num", - "ryu", -] - [[package]] name = "arrow-cast" version = "53.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d09aea56ec9fa267f3f3f6cdab67d8a9974cbba90b3aa38c8fe9d0bb071bd8c1" dependencies = [ - "arrow-array 53.2.0", - "arrow-buffer 53.2.0", - "arrow-data 53.2.0", - "arrow-schema 53.2.0", - "arrow-select 53.2.0", + "arrow-array", + "arrow-buffer", + "arrow-data", + "arrow-schema", + "arrow-select", "atoi", "base64", "chrono", "half", - "lexical-core 1.0.2", + "lexical-core", "num", "ryu", ] -[[package]] -name = "arrow-data" -version = "52.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd9d6f18c65ef7a2573ab498c374d8ae364b4a4edf67105357491c031f716ca5" -dependencies = [ - "arrow-buffer 52.2.0", - "arrow-schema 52.2.0", - "half", - "num", -] - [[package]] name = "arrow-data" version = "53.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b98ae0af50890b494cebd7d6b04b35e896205c1d1df7b29a6272c5d0d0249ef5" dependencies = [ - "arrow-buffer 53.2.0", - "arrow-schema 53.2.0", - "half", - "num", -] - -[[package]] -name = "arrow-ord" -version = "52.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42745f86b1ab99ef96d1c0bcf49180848a64fe2c7a7a0d945bc64fa2b21ba9bc" -dependencies = [ - "arrow-array 52.2.0", - "arrow-buffer 52.2.0", - "arrow-data 52.2.0", - "arrow-schema 52.2.0", - "arrow-select 52.2.0", + "arrow-buffer", + "arrow-schema", "half", "num", ] @@ -280,29 +173,15 @@ version = "53.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2883d7035e0b600fb4c30ce1e50e66e53d8656aa729f2bfa4b51d359cf3ded52" dependencies = [ - "arrow-array 53.2.0", - "arrow-buffer 53.2.0", - "arrow-data 53.2.0", - "arrow-schema 53.2.0", - "arrow-select 53.2.0", + "arrow-array", + "arrow-buffer", + "arrow-data", + "arrow-schema", + "arrow-select", "half", "num", ] -[[package]] -name = "arrow-row" -version = "52.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4cd09a518c602a55bd406bcc291a967b284cfa7a63edfbf8b897ea4748aad23c" -dependencies = [ - "ahash", - "arrow-array 52.2.0", - "arrow-buffer 52.2.0", - "arrow-data 52.2.0", - "arrow-schema 52.2.0", - "half", -] - [[package]] name = "arrow-row" version = "53.2.0" @@ -310,22 +189,13 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "552907e8e587a6fde4f8843fd7a27a576a260f65dab6c065741ea79f633fc5be" dependencies = [ "ahash", - "arrow-array 53.2.0", - "arrow-buffer 53.2.0", - "arrow-data 53.2.0", - "arrow-schema 53.2.0", + "arrow-array", + "arrow-buffer", + "arrow-data", + "arrow-schema", "half", ] -[[package]] -name = "arrow-schema" -version = "52.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e972cd1ff4a4ccd22f86d3e53e835c2ed92e0eea6a3e8eadb72b4f1ac802cf8" -dependencies = [ - "bitflags 2.6.0", -] - [[package]] name = "arrow-schema" version = "53.2.0" @@ -335,20 +205,6 @@ dependencies = [ "bitflags 2.6.0", ] -[[package]] -name = "arrow-select" -version = "52.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "600bae05d43483d216fb3494f8c32fdbefd8aa4e1de237e790dbb3d9f44690a3" -dependencies = [ - "ahash", - "arrow-array 52.2.0", - "arrow-buffer 52.2.0", - "arrow-data 52.2.0", - "arrow-schema 52.2.0", - "num", -] - [[package]] name = "arrow-select" version = "53.2.0" @@ -356,28 +212,11 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6259e566b752da6dceab91766ed8b2e67bf6270eb9ad8a6e07a33c1bede2b125" dependencies = [ "ahash", - "arrow-array 53.2.0", - "arrow-buffer 53.2.0", - "arrow-data 53.2.0", - "arrow-schema 53.2.0", - "num", -] - -[[package]] -name = "arrow-string" -version = "52.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0dc1985b67cb45f6606a248ac2b4a288849f196bab8c657ea5589f47cdd55e6" -dependencies = [ - "arrow-array 52.2.0", - "arrow-buffer 52.2.0", - "arrow-data 52.2.0", - "arrow-schema 52.2.0", - "arrow-select 52.2.0", - "memchr", + "arrow-array", + "arrow-buffer", + "arrow-data", + "arrow-schema", "num", - "regex", - "regex-syntax", ] [[package]] @@ -386,11 +225,11 @@ version = "53.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f3179ccbd18ebf04277a095ba7321b93fd1f774f18816bd5f6b3ce2f594edb6c" dependencies = [ - "arrow-array 53.2.0", - "arrow-buffer 53.2.0", - "arrow-data 53.2.0", - "arrow-schema 53.2.0", - "arrow-select 53.2.0", + "arrow-array", + "arrow-buffer", + "arrow-data", + "arrow-schema", + "arrow-select", "memchr", "num", "regex", @@ -857,7 +696,7 @@ version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a1e6a265c649f3f5979b601d26f1d05ada116434c87741c9493cb56218f76cbc" dependencies = [ - "heck 0.5.0", + "heck", "proc-macro2", "quote", "syn 2.0.87", @@ -930,15 +769,10 @@ dependencies = [ "matrixcompare", "matrixcompare-core", "nano-gemm", - "npyz", "num-complex", "num-traits", "paste", - "rand", - "rand_distr", - "rayon", "reborrow", - "serde", ] [[package]] @@ -1031,7 +865,6 @@ dependencies = [ "paste", "pulp", "raw-cpuid", - "rayon", "seq-macro", "sysctl", ] @@ -1050,7 +883,6 @@ dependencies = [ "num-traits", "paste", "raw-cpuid", - "rayon", "seq-macro", ] @@ -1129,12 +961,6 @@ version = "0.14.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" -[[package]] -name = "heck" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" - [[package]] name = "heck" version = "0.5.0" @@ -1290,41 +1116,17 @@ version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55" -[[package]] -name = "lexical-core" -version = "0.8.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2cde5de06e8d4c2faabc400238f9ae1c74d5412d03a7bd067645ccbc47070e46" -dependencies = [ - "lexical-parse-float 0.8.5", - "lexical-parse-integer 0.8.6", - "lexical-util 0.8.5", - "lexical-write-float 0.8.5", - "lexical-write-integer 0.8.5", -] - [[package]] name = "lexical-core" version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0431c65b318a590c1de6b8fd6e72798c92291d27762d94c9e6c37ed7a73d8458" dependencies = [ - "lexical-parse-float 1.0.2", - "lexical-parse-integer 1.0.2", - "lexical-util 1.0.3", - "lexical-write-float 1.0.2", - "lexical-write-integer 1.0.2", -] - -[[package]] -name = "lexical-parse-float" -version = "0.8.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "683b3a5ebd0130b8fb52ba0bdc718cc56815b6a097e28ae5a6997d0ad17dc05f" -dependencies = [ - "lexical-parse-integer 0.8.6", - "lexical-util 0.8.5", - "static_assertions", + "lexical-parse-float", + "lexical-parse-integer", + "lexical-util", + "lexical-write-float", + "lexical-write-integer", ] [[package]] @@ -1333,18 +1135,8 @@ version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "eb17a4bdb9b418051aa59d41d65b1c9be5affab314a872e5ad7f06231fb3b4e0" dependencies = [ - "lexical-parse-integer 1.0.2", - "lexical-util 1.0.3", - "static_assertions", -] - -[[package]] -name = "lexical-parse-integer" -version = "0.8.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d0994485ed0c312f6d965766754ea177d07f9c00c9b82a5ee62ed5b47945ee9" -dependencies = [ - "lexical-util 0.8.5", + "lexical-parse-integer", + "lexical-util", "static_assertions", ] @@ -1354,16 +1146,7 @@ version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5df98f4a4ab53bf8b175b363a34c7af608fe31f93cc1fb1bf07130622ca4ef61" dependencies = [ - "lexical-util 1.0.3", - "static_assertions", -] - -[[package]] -name = "lexical-util" -version = "0.8.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5255b9ff16ff898710eb9eb63cb39248ea8a5bb036bea8085b1a767ff6c4e3fc" -dependencies = [ + "lexical-util", "static_assertions", ] @@ -1376,35 +1159,14 @@ dependencies = [ "static_assertions", ] -[[package]] -name = "lexical-write-float" -version = "0.8.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "accabaa1c4581f05a3923d1b4cfd124c329352288b7b9da09e766b0668116862" -dependencies = [ - "lexical-util 0.8.5", - "lexical-write-integer 0.8.5", - "static_assertions", -] - [[package]] name = "lexical-write-float" version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6e7c3ad4e37db81c1cbe7cf34610340adc09c322871972f74877a712abc6c809" dependencies = [ - "lexical-util 1.0.3", - "lexical-write-integer 1.0.2", - "static_assertions", -] - -[[package]] -name = "lexical-write-integer" -version = "0.8.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e1b6f3d1f4422866b68192d62f77bc5c700bee84f3069f2469d7bc8c77852446" -dependencies = [ - "lexical-util 0.8.5", + "lexical-util", + "lexical-write-integer", "static_assertions", ] @@ -1414,7 +1176,7 @@ version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "eb89e9f6958b83258afa3deed90b5de9ef68eef090ad5086c791cd2345610162" dependencies = [ - "lexical-util 1.0.3", + "lexical-util", "static_assertions", ] @@ -1446,16 +1208,6 @@ version = "0.4.14" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "78b3ae25bc7c8c38cec158d1f2757ee79e9b3740fbc7ccf0e59e4b08d793fa89" -[[package]] -name = "lock_api" -version = "0.4.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07af8b9cdd281b7915f413fa73f29ebd5d55d0d3f0155584dade1ff18cea1b17" -dependencies = [ - "autocfg", - "scopeguard", -] - [[package]] name = "log" version = "0.4.22" @@ -1624,24 +1376,28 @@ dependencies = [ ] [[package]] -name = "nom" -version = "7.1.3" +name = "ndarray" +version = "0.16.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a" +checksum = "882ed72dce9365842bf196bdeedf5055305f11fc8c03dee7bb0194a6cad34841" dependencies = [ - "memchr", - "minimal-lexical", + "matrixmultiply", + "num-complex", + "num-integer", + "num-traits", + "portable-atomic", + "portable-atomic-util", + "rawpointer", ] [[package]] -name = "npyz" -version = "0.8.3" +name = "nom" +version = "7.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13f27ea175875c472b3df61ece89a6d6ef4e0627f43704e400c782f174681ebd" +checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a" dependencies = [ - "byteorder", - "num-bigint", - "py_literal", + "memchr", + "minimal-lexical", ] [[package]] @@ -1676,7 +1432,6 @@ checksum = "73f88a1307638156682bada9d7604135552957b7818057dcef22705b4d509495" dependencies = [ "bytemuck", "num-traits", - "rand", ] [[package]] @@ -1734,12 +1489,12 @@ checksum = "830b246a0e5f20af87141b25c173cd1b609bd7779a4617d6ec582abaf90870f3" [[package]] name = "numpy" -version = "0.21.0" +version = "0.22.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec170733ca37175f5d75a5bea5911d6ff45d2cd52849ce98b685394e4f2f37f4" +checksum = "edb929bc0da91a4d85ed6c0a84deaa53d411abfb387fc271124f91bf6b89f14e" dependencies = [ "libc", - "ndarray", + "ndarray 0.16.1", "num-complex", "num-integer", "num-traits", @@ -1749,10 +1504,10 @@ dependencies = [ [[package]] name = "nutpie" -version = "0.13.2" +version = "0.14.0" dependencies = [ "anyhow", - "arrow 53.2.0", + "arrow", "bridgestan", "criterion", "indicatif", @@ -1773,12 +1528,12 @@ dependencies = [ [[package]] name = "nuts-rs" -version = "0.12.1" +version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8573e3b5c83e8ec0570ebbd75dd6fdc7dfcfa5da9b5f9d9d63fedefebbd9cf8" +checksum = "55fad6cdecd2d51675b7f167657817304ac421a18d0efff93914e295935ef4c0" dependencies = [ "anyhow", - "arrow 52.2.0", + "arrow", "faer", "itertools 0.13.0", "multiversion", @@ -1802,29 +1557,6 @@ version = "11.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b410bbe7e14ab526a0e86877eb47c6996a2bd7746f027ba551028c925390e4e9" -[[package]] -name = "parking_lot" -version = "0.12.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1bf18183cf54e8d6059647fc3063646a1801cf30896933ec2311622cc4b9a27" -dependencies = [ - "lock_api", - "parking_lot_core", -] - -[[package]] -name = "parking_lot_core" -version = "0.9.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e401f977ab385c9e4e3ab30627d6f26d00e2c73eef317493c4ec6d468726cf8" -dependencies = [ - "cfg-if", - "libc", - "redox_syscall", - "smallvec", - "windows-targets", -] - [[package]] name = "password-hash" version = "0.4.2" @@ -1872,51 +1604,6 @@ dependencies = [ "sha2", ] -[[package]] -name = "pest" -version = "2.7.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "879952a81a83930934cbf1786752d6dedc3b1f29e8f8fb2ad1d0a36f377cf442" -dependencies = [ - "memchr", - "thiserror", - "ucd-trie", -] - -[[package]] -name = "pest_derive" -version = "2.7.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d214365f632b123a47fd913301e14c946c61d1c183ee245fa76eb752e59a02dd" -dependencies = [ - "pest", - "pest_generator", -] - -[[package]] -name = "pest_generator" -version = "2.7.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eb55586734301717aea2ac313f50b2eb8f60d2fc3dc01d190eefa2e625f60c4e" -dependencies = [ - "pest", - "pest_meta", - "proc-macro2", - "quote", - "syn 2.0.87", -] - -[[package]] -name = "pest_meta" -version = "2.7.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b75da2a70cf4d9cb76833c990ac9cd3923c9a8905a8929789ce347c84564d03d" -dependencies = [ - "once_cell", - "pest", - "sha2", -] - [[package]] name = "pkg-config" version = "0.3.31" @@ -1957,6 +1644,15 @@ version = "1.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cc9c68a3f6da06753e9335d63e27f6b9754dd1920d941135b7ea8224f141adb2" +[[package]] +name = "portable-atomic-util" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "90a7d5beecc52a491b54d6dd05c7a45ba1801666a5baad9fdbfc6fef8d2d206c" +dependencies = [ + "portable-atomic", +] + [[package]] name = "powerfmt" version = "0.2.0" @@ -2003,31 +1699,18 @@ dependencies = [ "reborrow", ] -[[package]] -name = "py_literal" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "102df7a3d46db9d3891f178dcc826dc270a6746277a9ae6436f8d29fd490a8e1" -dependencies = [ - "num-bigint", - "num-complex", - "num-traits", - "pest", - "pest_derive", -] - [[package]] name = "pyo3" -version = "0.21.2" +version = "0.22.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a5e00b96a521718e08e03b1a622f01c8a8deb50719335de3f60b3b3950f069d8" +checksum = "f402062616ab18202ae8319da13fa4279883a2b8a9d9f83f20dbade813ce1884" dependencies = [ "anyhow", "cfg-if", "indoc", "libc", "memoffset", - "parking_lot", + "once_cell", "portable-atomic", "pyo3-build-config", "pyo3-ffi", @@ -2037,9 +1720,9 @@ dependencies = [ [[package]] name = "pyo3-build-config" -version = "0.21.2" +version = "0.22.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7883df5835fafdad87c0d888b266c8ec0f4c9ca48a5bed6bbb592e8dedee1b50" +checksum = "b14b5775b5ff446dd1056212d778012cbe8a0fbffd368029fd9e25b514479c38" dependencies = [ "once_cell", "target-lexicon", @@ -2047,9 +1730,9 @@ dependencies = [ [[package]] name = "pyo3-ffi" -version = "0.21.2" +version = "0.22.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01be5843dc60b916ab4dad1dca6d20b9b4e6ddc8e15f50c47fe6d85f1fb97403" +checksum = "9ab5bcf04a2cdcbb50c7d6105de943f543f9ed92af55818fd17b660390fc8636" dependencies = [ "libc", "pyo3-build-config", @@ -2057,9 +1740,9 @@ dependencies = [ [[package]] name = "pyo3-macros" -version = "0.21.2" +version = "0.22.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77b34069fc0682e11b31dbd10321cbf94808394c56fd996796ce45217dfac53c" +checksum = "0fd24d897903a9e6d80b968368a34e1525aeb719d568dba8b3d4bfa5dc67d453" dependencies = [ "proc-macro2", "pyo3-macros-backend", @@ -2069,11 +1752,11 @@ dependencies = [ [[package]] name = "pyo3-macros-backend" -version = "0.21.2" +version = "0.22.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08260721f32db5e1a5beae69a55553f56b99bd0e1c3e6e0a5e8851a9d0f5a85c" +checksum = "36c011a03ba1e50152b4b394b479826cad97e7a21eb52df179cd91ac411cbfbe" dependencies = [ - "heck 0.4.1", + "heck", "proc-macro2", "pyo3-build-config", "quote", @@ -2170,15 +1853,6 @@ version = "0.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "03251193000f4bd3b042892be858ee50e8b3719f2b08e5833ac4353724632430" -[[package]] -name = "redox_syscall" -version = "0.5.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b6dfecf2c74bce2466cabf93f6664d6998a69eb21e39f4207930065b27b771f" -dependencies = [ - "bitflags 2.6.0", -] - [[package]] name = "regex" version = "1.11.1" @@ -2252,12 +1926,6 @@ dependencies = [ "winapi-util", ] -[[package]] -name = "scopeguard" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" - [[package]] name = "seq-macro" version = "0.3.5" @@ -2392,14 +2060,14 @@ checksum = "61c41af27dd6d1e27b1b16b489db798443478cef1f06a660c96db617ba5de3b1" [[package]] name = "tch" -version = "0.17.0" +version = "0.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3585f5bbf1ddf2498d7586bf870c7bb785a0bf1be09c54d0f93fce51d5f3c7fc" +checksum = "f139aa58f0189998a9674f8617b60e054226d98d541e444cd7db5ed986fcc35f" dependencies = [ "half", "lazy_static", "libc", - "ndarray", + "ndarray 0.15.6", "rand", "safetensors", "thiserror", @@ -2473,9 +2141,9 @@ dependencies = [ [[package]] name = "torch-sys" -version = "0.17.0" +version = "0.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef116d446d79bb2447748550baee86850d2d32d366cc9bdd4b217bdbe10cac63" +checksum = "0c787d00c8e04c9d37db6c4f0048f52820906ee7c42de5bae68a844fa8242fea" dependencies = [ "anyhow", "cc", @@ -2489,12 +2157,6 @@ version = "1.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" -[[package]] -name = "ucd-trie" -version = "0.1.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2896d95c02a80c6d6a5d6e953d479f5ddf2dfdb6a244441010e373ac0fb88971" - [[package]] name = "unicode-ident" version = "1.0.13" diff --git a/Cargo.toml b/Cargo.toml index e2badad..cd6b5ed 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,9 +1,9 @@ [package] name = "nutpie" -version = "0.13.2" +version = "0.14.0" authors = [ - "Adrian Seyboldt ", - "PyMC Developers ", + "Adrian Seyboldt ", + "PyMC Developers ", ] edition = "2021" license = "MIT" @@ -22,8 +22,8 @@ name = "_lib" crate-type = ["cdylib"] [dependencies] -nuts-rs = "0.12.1" -numpy = "0.21.0" +nuts-rs = "0.13.0" +numpy = "0.22.0" rand = "0.8.5" thiserror = "1.0.44" rand_chacha = "0.3.1" @@ -38,10 +38,10 @@ smallvec = "1.13.0" upon = { version = "0.8.1", default-features = false, features = [] } time-humanize = { version = "0.1.3", default-features = false } indicatif = "0.17.8" -tch = { version = "0.17.0", optional = true } +tch = { version = "0.18.0", optional = true } [dependencies.pyo3] -version = "0.21.2" +version = "0.22.5" features = ["extension-module", "anyhow"] [dev-dependencies] From 799b8d4d44d3536f0398e18ad18c1a7b83e3822f Mon Sep 17 00:00:00 2001 From: Adrian Seyboldt Date: Fri, 25 Oct 2024 23:07:10 +0200 Subject: [PATCH 08/34] Add transforming adaptation for stan --- python/nutpie/compile_stan.py | 18 +- python/nutpie/compiled_pyfunc.py | 312 ++----------------------------- src/progress.rs | 6 +- src/pyfunc.rs | 231 +++++++++-------------- src/pymc.rs | 8 +- src/stan.rs | 175 ++++++++++++++++- src/wrapper.rs | 280 +++++++++++++++++++++++++-- 7 files changed, 559 insertions(+), 471 deletions(-) diff --git a/python/nutpie/compile_stan.py b/python/nutpie/compile_stan.py index 7a28052..70ecd14 100644 --- a/python/nutpie/compile_stan.py +++ b/python/nutpie/compile_stan.py @@ -1,9 +1,10 @@ +from functools import partial import json import tempfile from dataclasses import dataclass, replace from importlib.util import find_spec from pathlib import Path -from typing import Any, Optional +from typing import Any, Optional, Callable import numpy as np import pandas as pd @@ -11,6 +12,7 @@ from nutpie import _lib from nutpie.sample import CompiledModel +from nutpie.transform_adapter import make_transform_adapter class _NumpyArrayEncoder(json.JSONEncoder): @@ -28,6 +30,7 @@ class CompiledStanModel(CompiledModel): library: Any model: Any model_name: Optional[str] = None + _transform_adapt_args: dict | None = None def with_data(self, *, seed=None, **updates): if self.data is None: @@ -42,7 +45,15 @@ def with_data(self, *, seed=None, **updates): else: data_json = None - model = _lib.StanModel(self.library, seed, data_json) + kwargs = self._transform_adapt_args + if kwargs is None: + kwargs = {} + make_adapter = partial( + make_transform_adapter(**kwargs), + logp_fn=None, + ) + + model = _lib.StanModel(self.library, seed, data_json, make_adapter) coords = self._coords if coords is None: coords = {} @@ -75,6 +86,9 @@ def with_dims(self, **dims): dims_new.update(dims) return replace(self, dims=dims_new) + def with_transform_adapt(self, **kwargs): + return replace(self, _transform_adapt_args=kwargs).with_data() + def _make_model(self, init_mean): if self.model is None: return self.with_data().model diff --git a/python/nutpie/compiled_pyfunc.py b/python/nutpie/compiled_pyfunc.py index 31f8606..7298534 100644 --- a/python/nutpie/compiled_pyfunc.py +++ b/python/nutpie/compiled_pyfunc.py @@ -7,307 +7,11 @@ from nutpie import _lib # type: ignore from nutpie.sample import CompiledModel +from nutpie.transform_adapter import make_transform_adapter SeedType = int -def make_transform_adapter(*, verbose=True, window_size=2000, show_progress=False): - import jax - import equinox as eqx - import jax.numpy as jnp - import flowjax - import flowjax.train - import flowjax.flows - import optax - import traceback - - class FisherLoss: - @eqx.filter_jit - def __call__( - self, - params, - static, - x, - condition=None, - key=None, - ): - flow = flowjax.train.losses.unwrap( - eqx.combine(params, static, is_leaf=eqx.is_inexact_array) - ) - - def compute_loss(bijection, draw, grad): - draw, grad, _ = bijection.inverse_gradient_and_val( - draw, grad, jnp.array(0.0) - ) - return ((draw + grad) ** 2).sum() - - assert x.shape[1] == 2 - draws = x[:, 0, :] - grads = x[:, 1, :] - return jnp.log( - jax.vmap(compute_loss, [None, 0, 0])( - flow.bijection, draws, grads - ).mean() - ) - - def fit_flow(key, bijection, loss_fn, positions, gradients, **kwargs): - flow = flowjax.flows.Transformed( - flowjax.distributions.StandardNormal(bijection.shape), bijection - ) - - points = jnp.transpose(jnp.array([positions, gradients]), [1, 0, 2]) - - key, train_key = jax.random.split(key) - - fit, losses, opt_state = flowjax.train.fit_to_data( - key=train_key, - dist=flow, - x=points, - loss_fn=loss_fn, - **kwargs, - ) - - final_cost = losses["val"][-1] - return fit, final_cost, opt_state - - def make_flow(seed, positions, gradients, *, n_layers): - positions = np.array(positions) - gradients = np.array(gradients) - - n_draws, n_dim = positions.shape - - if n_dim < 2: - n_layers = 0 - - assert positions.shape == gradients.shape - assert n_draws > 0 - - if n_draws == 0: - raise ValueError("No draws") - elif n_draws == 1: - diag = 1 / jnp.abs(gradients[0]) - mean = jnp.zeros_like(diag) - else: - diag = jnp.sqrt(positions.std(0) / gradients.std(0)) - mean = positions.mean(0) + diag * gradients.mean(0) - - key = jax.random.PRNGKey(seed % (2**63)) - - flows = [ - flowjax.flows.Affine(loc=mean, scale=diag), - ] - - for layer in range(n_layers): - key, key_couple, key_permute = jax.random.split(key, 3) - - scale = flowjax.wrappers.Parameterize( - lambda x: jnp.exp(jnp.arcsinh(x)), jnp.array(0.0) - ) - affine = eqx.tree_at( - where=lambda aff: aff.scale, - pytree=flowjax.bijections.Affine(), - replace=scale, - ) - - coupling = flowjax.bijections.coupling.Coupling( - key_couple, - transformer=affine, - untransformed_dim=n_dim // 2, - dim=n_dim, - nn_activation=jax.nn.gelu, - nn_width=n_dim // 2, - nn_depth=1, - ) - - if layer == n_layers - 1: - flow = coupling - else: - flow = flowjax.flows._add_default_permute(coupling, n_dim, key_permute) - - flows.append(flow) - - return flowjax.bijections.Chain(flows[::-1]) - - @eqx.filter_jit - def _init_from_transformed_position(logp_fn, bijection, transformed_position): - bijection = flowjax.train.losses.unwrap(bijection) - (untransformed_position, logdet), pull_grad = jax.vjp( - bijection.transform_and_log_det, transformed_position - ) - logp, untransformed_gradient = jax.value_and_grad(lambda x: logp_fn(x)[0])( - untransformed_position - ) - (transformed_gradient,) = pull_grad((untransformed_gradient, 1.0)) - return ( - logp, - logdet, - untransformed_position, - untransformed_gradient, - transformed_gradient, - ) - - @eqx.filter_jit - def _init_from_untransformed_position(logp_fn, bijection, untransformed_position): - logp, untransformed_gradient = jax.value_and_grad(lambda x: logp_fn(x)[0])( - untransformed_position - ) - logdet, transformed_position, transformed_gradient = _inv_transform( - bijection, untransformed_position, untransformed_gradient - ) - return ( - logp, - logdet, - untransformed_gradient, - transformed_position, - transformed_gradient, - ) - - @eqx.filter_jit - def _inv_transform(bijection, untransformed_position, untransformed_gradient): - bijection = flowjax.train.losses.unwrap(bijection) - transformed_position, transformed_gradient, logdet = ( - bijection.inverse_gradient_and_val( - untransformed_position, untransformed_gradient, 0.0 - ) - ) - return logdet, transformed_position, transformed_gradient - - class TransformAdapter: - def __init__( - self, - seed, - position, - gradient, - chain, - *, - logp_fn, - make_flow_fn, - verbose=False, - window_size=2000, - show_progress=False, - ): - self._logp_fn = logp_fn - self._make_flow_fn = make_flow_fn - self._chain = chain - self._verbose = verbose - self._window_size = window_size - self._optimizer = optax.adabelief(1e-3) - self._loss_fn = FisherLoss() - self._show_progress = show_progress - try: - self._bijection = make_flow_fn(seed, [position], [gradient], n_layers=0) - except Exception as e: - print("make_flow", e) - print(traceback.format_exc()) - raise - self.index = 0 - - @property - def transformation_id(self): - return self.index - - def update(self, seed, positions, gradients): - self.index += 1 - if self._verbose: - print(f"Chain {self._chain}: Total available points: {len(positions)}") - n_draws = len(positions) - if n_draws == 0: - return - try: - if self.index <= 10: - self._bijection = self._make_flow_fn( - seed, positions[-10:], gradients[-10:], n_layers=0 - ) - return - - positions = np.array(positions[500:][-self._window_size :]) - gradients = np.array(gradients[500:][-self._window_size :]) - - if len(positions) == 0: - return - - assert np.isfinite(positions).all() - assert np.isfinite(gradients).all() - - if len(self._bijection.bijections) == 1: - self._bijection = self._make_flow_fn( - seed, positions, gradients, n_layers=8 - ) - - # make_flow might still only return a single trafo if the for 1d problems - if len(self._bijection.bijections) == 1: - return - - # TODO don't reuse seed - key = jax.random.PRNGKey(seed % (2**63)) - fit, final_cost, _ = fit_flow( - key, - self._bijection, - self._loss_fn, - positions, - gradients, - show_progress=self._show_progress, - optimizer=self._optimizer, - batch_size=128, - ) - if self._verbose: - print(f"Chain {self._chain}: final cost {final_cost}") - if np.isfinite(final_cost).all(): - self._bijection = fit.bijection - else: - self._bijection = self._make_flow_fn( - seed, positions, gradients, n_layers=0 - ) - except Exception as e: - print("update error:", e) - print(traceback.format_exc()) - - def init_from_transformed_position(self, transformed_position): - try: - logp, logdet, *arrays = _init_from_transformed_position( - self._logp_fn, - self._bijection, - jnp.array(transformed_position), - ) - return float(logp), float(logdet), *[np.array(val) for val in arrays] - except Exception as e: - print(e) - print(traceback.format_exc()) - raise - - def init_from_untransformed_position(self, untransformed_position): - try: - logp, logdet, *arrays = _init_from_untransformed_position( - self._logp_fn, - self._bijection, - jnp.array(untransformed_position), - ) - return float(logp), float(logdet), *[np.array(val) for val in arrays] - except Exception as e: - print(e) - print(traceback.format_exc()) - raise - - def inv_transform(self, position, gradient): - try: - logdet, *arrays = _inv_transform( - self._bijection, jnp.array(position), jnp.array(gradient) - ) - return logdet, *[np.array(val) for val in arrays] - except Exception as e: - print(e) - print(traceback.format_exc()) - raise - - return partial( - TransformAdapter, - verbose=verbose, - window_size=window_size, - make_flow_fn=make_flow, - show_progress=show_progress, - ) - - @dataclass(frozen=True) class PyFuncModel(CompiledModel): _make_logp_func: Callable @@ -317,8 +21,8 @@ class PyFuncModel(CompiledModel): _n_dim: int _variables: list[_lib.PyVariable] _coords: dict[str, Any] - _make_transform_adapter: Callable | None _raw_logp_fn: Callable | None + _transform_adapt_args: dict | None = None @property def shapes(self) -> dict[str, tuple[int, ...]]: @@ -341,6 +45,9 @@ def with_data(self, **updates): updated.update(**updates) return dataclasses.replace(self, _shared_data=updated) + def with_transform_adapt(self, **kwargs): + return dataclasses.replace(self, _transform_adapt_args=kwargs) + def _make_sampler(self, settings, init_mean, cores, progress_type): model = self._make_model(init_mean) return _lib.PySampler.from_pyfunc( @@ -360,7 +67,13 @@ def make_expand_func(seed1, seed2, chain): return partial(expand_fn, **self._shared_data) if self._raw_logp_fn is not None: - make_adapter = partial(make_transform_adapter(), logp_fn=self._raw_logp_fn) + kwargs = self._transform_adapt_args + if kwargs is None: + kwargs = {} + make_adapter = partial( + make_transform_adapter(**kwargs), + logp_fn=self._raw_logp_fn, + ) else: make_adapter = None @@ -419,6 +132,5 @@ def from_pyfunc( _make_initial_points=make_initial_point_fn, _variables=variables, _shared_data=shared_data, - _make_transform_adapter=make_transform_adapter, _raw_logp_fn=raw_logp_fn, ) diff --git a/src/progress.rs b/src/progress.rs index 906c50d..2403e15 100644 --- a/src/progress.rs +++ b/src/progress.rs @@ -1,4 +1,4 @@ -use std::{collections::BTreeMap, time::Duration}; +use std::{collections::BTreeMap, sync::Arc, time::Duration}; use anyhow::{Context, Result}; use indicatif::ProgressBar; @@ -10,13 +10,13 @@ use upon::{Engine, Value}; pub struct ProgressHandler { engine: Engine<'static>, template: String, - callback: Py, + callback: Arc>, rate: Duration, n_cores: usize, } impl ProgressHandler { - pub fn new(callback: Py, rate: Duration, template: String, n_cores: usize) -> Self { + pub fn new(callback: Arc>, rate: Duration, template: String, n_cores: usize) -> Self { let engine = Engine::new(); Self { engine, diff --git a/src/pyfunc.rs b/src/pyfunc.rs index 75d6e22..37a25d6 100644 --- a/src/pyfunc.rs +++ b/src/pyfunc.rs @@ -12,8 +12,8 @@ use numpy::{NotContiguousError, PyArray1, PyReadonlyArray1}; use nuts_rs::{CpuLogpFunc, CpuMath, DrawStorage, LogpError, Model}; use pyo3::{ exceptions::PyRuntimeError, - intern, pyclass, pymethods, - types::{PyAnyMethods, PyDict, PyDictMethods, PyList}, + pyclass, pymethods, + types::{PyAnyMethods, PyDict, PyDictMethods}, Bound, Py, PyAny, PyErr, Python, }; use rand::Rng; @@ -21,6 +21,8 @@ use rand_distr::{Distribution, StandardNormal, Uniform}; use smallvec::SmallVec; use thiserror::Error; +use crate::wrapper::PyTransformAdapt; + #[pyclass] #[derive(Debug, Clone)] #[non_exhaustive] @@ -72,17 +74,18 @@ impl PyVariable { #[pyclass] #[derive(Debug, Clone)] pub struct PyModel { - make_logp_func: Py, - make_expand_func: Py, - init_point_func: Option>, - variables: Vec, - transform_adapter: Option>, + make_logp_func: Arc>, + make_expand_func: Arc>, + init_point_func: Arc>>, + variables: Arc>, + transform_adapter: Option, ndim: usize, } #[pymethods] impl PyModel { #[new] + #[pyo3(signature = (make_logp_func, make_expand_func, variables, ndim, transform_adapter=None))] fn new<'py>( make_logp_func: Py, make_expand_func: Py, @@ -92,12 +95,12 @@ impl PyModel { transform_adapter: Option>, ) -> Self { Self { - make_logp_func, - make_expand_func, - init_point_func, - variables, + make_logp_func: Arc::new(make_logp_func), + make_expand_func: Arc::new(make_expand_func), + init_point_func: Arc::new(init_point_func), + variables: Arc::new(variables), ndim, - transform_adapter, + transform_adapter: transform_adapter.map(PyTransformAdapt::new), } } } @@ -112,6 +115,8 @@ pub enum PyLogpError { ReturnTypeError(), #[error("Python retured a non-contigous array")] NotContiguousError(#[from] NotContiguousError), + #[error("Unknown error: {0}")] + Anyhow(#[from] anyhow::Error), } impl LogpError for PyLogpError { @@ -128,13 +133,14 @@ impl LogpError for PyLogpError { }), Self::ReturnTypeError() => false, Self::NotContiguousError(_) => false, + Self::Anyhow(_) => false, } } } pub struct PyDensity { logp: Py, - transform_adapter: Option>, + transform_adapter: Option, dim: usize, } @@ -142,11 +148,10 @@ impl PyDensity { fn new( logp_clone_func: &Py, dim: usize, - transform_adapter: Option<&Py>, + transform_adapter: Option<&PyTransformAdapt>, ) -> Result { let logp_func = Python::with_gil(|py| logp_clone_func.call0(py))?; - let transform_adapter = - transform_adapter.map(|val| Python::with_gil(|py| val.clone_ref(py))); + let transform_adapter = transform_adapter.map(|val| val.clone()); Ok(Self { logp: logp_func, transform_adapter, @@ -191,99 +196,68 @@ impl CpuLogpFunc for PyDensity { fn inv_transform_normalize( &mut self, - params: &Self::TransformParams, + params: &Py, untransformed_position: &[f64], - untransofrmed_gradient: &[f64], + untransformed_gradient: &[f64], transformed_position: &mut [f64], transformed_gradient: &mut [f64], ) -> std::result::Result { - Python::with_gil(|py| { - let untransformed_position = PyArray1::from_slice_bound(py, untransformed_position); - let untransformed_gradient = PyArray1::from_slice_bound(py, untransofrmed_gradient); - - let output = params - .getattr(py, intern!(py, "inv_transform"))? - .call1(py, (untransformed_position, untransformed_gradient))?; - let (logdet, transformed_position_out, transformed_gradient_out): ( - f64, - PyReadonlyArray1, - PyReadonlyArray1, - ) = output.extract(py)?; - - transformed_position.copy_from_slice(transformed_position_out.as_slice()?); - transformed_gradient.copy_from_slice(transformed_gradient_out.as_slice()?); - Ok(logdet) - }) + let logdet = self + .transform_adapter + .as_mut() + .ok_or_else(|| PyRuntimeError::new_err("No transformation adapter specified"))? + .inv_transform_normalize( + params, + untransformed_position, + untransformed_gradient, + transformed_position, + transformed_gradient, + )?; + Ok(logdet) } fn init_from_transformed_position( &mut self, - params: &Self::TransformParams, + params: &Py, untransformed_position: &mut [f64], untransformed_gradient: &mut [f64], transformed_position: &[f64], transformed_gradient: &mut [f64], ) -> std::result::Result<(f64, f64), Self::LogpError> { - Python::with_gil(|py| { - let transformed_position = PyArray1::from_slice_bound(py, transformed_position); - - let output = params - .getattr(py, intern!(py, "init_from_transformed_position"))? - .call1(py, (transformed_position,))?; - let ( - logp, - logdet, - untransformed_position_out, - untransformed_gradient_out, - transformed_gradient_out, - ): ( - f64, - f64, - PyReadonlyArray1, - PyReadonlyArray1, - PyReadonlyArray1, - ) = output.extract(py)?; - - untransformed_position.copy_from_slice(untransformed_position_out.as_slice()?); - untransformed_gradient.copy_from_slice(untransformed_gradient_out.as_slice()?); - transformed_gradient.copy_from_slice(transformed_gradient_out.as_slice()?); - Ok((logp, logdet)) - }) + let (logp, logdet) = self + .transform_adapter + .as_mut() + .ok_or_else(|| PyRuntimeError::new_err("No transformation adapter specified"))? + .init_from_transformed_position( + params, + untransformed_position, + untransformed_gradient, + transformed_position, + transformed_gradient, + )?; + Ok((logp, logdet)) } fn init_from_untransformed_position( &mut self, - params: &Self::TransformParams, + params: &Py, untransformed_position: &[f64], untransformed_gradient: &mut [f64], transformed_position: &mut [f64], transformed_gradient: &mut [f64], ) -> std::result::Result<(f64, f64), Self::LogpError> { - Python::with_gil(|py| { - let untransformed_position = PyArray1::from_slice_bound(py, untransformed_position); - - let output = params - .getattr(py, intern!(py, "init_from_untransformed_position"))? - .call1(py, (untransformed_position,))?; - let ( - logp, - logdet, - untransformed_gradient_out, - transformed_position_out, - transformed_gradient_out, - ): ( - f64, - f64, - PyReadonlyArray1, - PyReadonlyArray1, - PyReadonlyArray1, - ) = output.extract(py)?; - - untransformed_gradient.copy_from_slice(untransformed_gradient_out.as_slice()?); - transformed_position.copy_from_slice(transformed_position_out.as_slice()?); - transformed_gradient.copy_from_slice(transformed_gradient_out.as_slice()?); - Ok((logp, logdet)) - }) + let (logp, logdet) = self + .transform_adapter + .as_mut() + .ok_or_else(|| PyRuntimeError::new_err("No transformation adapter specified"))? + .init_from_untransformed_position( + params, + untransformed_position, + untransformed_gradient, + transformed_position, + transformed_gradient, + )?; + Ok((logp, logdet)) } fn update_transformation<'a, R: rand::Rng + ?Sized>( @@ -291,70 +265,48 @@ impl CpuLogpFunc for PyDensity { rng: &mut R, untransformed_positions: impl ExactSizeIterator, untransformed_gradients: impl ExactSizeIterator, - params: &'a mut Self::TransformParams, + params: &'a mut Py, ) -> std::result::Result<(), Self::LogpError> { - Python::with_gil(|py| { - let positions = PyList::new_bound( - py, - untransformed_positions.map(|pos| PyArray1::from_slice_bound(py, pos)), - ); - let gradients = PyList::new_bound( - py, - untransformed_gradients.map(|grad| PyArray1::from_slice_bound(py, grad)), - ); - - let seed = rng.next_u64(); - - params - .getattr(py, intern!(py, "update"))? - .call1(py, (seed, positions, gradients))?; - Ok(()) - }) + self.transform_adapter + .as_mut() + .ok_or_else(|| PyRuntimeError::new_err("No transformation adapter specified"))? + .update_transformation( + rng, + untransformed_positions, + untransformed_gradients, + params, + )?; + Ok(()) } fn new_transformation( &mut self, rng: &mut R, untransformed_position: &[f64], - untransfogmed_gradient: &[f64], + untransformed_gradient: &[f64], chain: u64, - ) -> std::result::Result { - Python::with_gil(|py| { - let position = PyArray1::from_slice_bound(py, untransformed_position); - let gradient = PyArray1::from_slice_bound(py, untransfogmed_gradient); - - let seed = rng.next_u64(); - - let transformer = self - .transform_adapter - .as_ref() - .ok_or_else(|| { - PyLogpError::PyError(PyRuntimeError::new_err( - "No transformation adapter specified", - )) - })? - .call1(py, (seed, position, gradient, chain))?; - - Ok(transformer) - }) - } - - fn transformation_id( - &self, - params: &Self::TransformParams, - ) -> std::result::Result { - Python::with_gil(|py| { - let id: i64 = params - .getattr(py, intern!(py, "transformation_id"))? - .extract(py)?; - Ok(id) - }) + ) -> std::result::Result, Self::LogpError> { + let trafo = self + .transform_adapter + .as_mut() + .ok_or_else(|| PyRuntimeError::new_err("No transformation adapter specified"))? + .new_transformation(rng, untransformed_position, untransformed_gradient, chain)?; + Ok(trafo) + } + + fn transformation_id(&self, params: &Py) -> std::result::Result { + let id = self + .transform_adapter + .as_ref() + .ok_or_else(|| PyRuntimeError::new_err("No transformation adapter specified"))? + .transformation_id(params)?; + Ok(id) } } pub struct PyTrace { expand: Py, - variables: Vec, + variables: Arc>, builder: StructBuilder, } @@ -362,7 +314,7 @@ impl PyTrace { pub fn new( rng: &mut R, chain: u64, - variables: Vec, + variables: Arc>, make_expand_func: &Py, capacity: usize, ) -> Result { @@ -412,6 +364,7 @@ impl TensorShape { #[pymethods] impl TensorShape { #[new] + #[pyo3(signature = (shape, dims=None))] fn py_new(shape: Vec, dims: Option>>) -> Result { let dims = dims.unwrap_or(shape.iter().map(|_| None).collect()); if dims.len() != shape.len() { diff --git a/src/pymc.rs b/src/pymc.rs index fc57842..39dfc76 100644 --- a/src/pymc.rs +++ b/src/pymc.rs @@ -39,7 +39,7 @@ type RawExpandFunc = unsafe extern "C" fn( #[derive(Clone)] pub(crate) struct LogpFunc { func: RawLogpFunc, - _keep_alive: PyObject, + _keep_alive: Arc, user_data_ptr: UserData, dim: usize, } @@ -55,7 +55,7 @@ impl LogpFunc { unsafe { std::mem::transmute::<*const c_void, RawLogpFunc>(ptr as *const c_void) }; Self { func, - _keep_alive: keep_alive, + _keep_alive: Arc::new(keep_alive), user_data_ptr: user_data_ptr as UserData, dim, } @@ -66,7 +66,7 @@ impl LogpFunc { #[derive(Clone)] pub(crate) struct ExpandFunc { func: RawExpandFunc, - _keep_alive: PyObject, + _keep_alive: Arc, user_data_ptr: UserData, dim: usize, expanded_dim: usize, @@ -87,7 +87,7 @@ impl ExpandFunc { Self { dim, expanded_dim, - _keep_alive: keep_alive, + _keep_alive: Arc::new(keep_alive), user_data_ptr: user_data_ptr as UserData, func, } diff --git a/src/stan.rs b/src/stan.rs index bb5f975..ab7c3dc 100644 --- a/src/stan.rs +++ b/src/stan.rs @@ -7,6 +7,7 @@ use arrow::datatypes::{DataType, Field}; use bridgestan::open_library; use itertools::{izip, Itertools}; use nuts_rs::{CpuLogpFunc, CpuMath, DrawStorage, LogpError, Model, Settings}; +use pyo3::exceptions::PyRuntimeError; use pyo3::prelude::*; use pyo3::types::{PyDict, PyTuple}; use pyo3::{exceptions::PyValueError, pyclass, pymethods, PyResult}; @@ -17,6 +18,8 @@ use smallvec::{SmallVec, ToSmallVec}; use thiserror::Error; +use crate::wrapper::PyTransformAdapt; + type InnerModel = bridgestan::Model>; #[pyclass] @@ -68,6 +71,7 @@ impl StanVariable { pub struct StanModel { model: Arc, variables: Vec, + transform_adapter: Option, } /// Return meta information about the constrained parameters of the model @@ -136,7 +140,13 @@ fn params( #[pymethods] impl StanModel { #[new] - pub fn new(lib: StanLibrary, seed: Option, data: Option) -> anyhow::Result { + #[pyo3(signature = (lib, seed=None, data=None, transform_adapter=None))] + pub fn new( + lib: StanLibrary, + seed: Option, + data: Option, + transform_adapter: Option>, + ) -> anyhow::Result { let seed = match seed { Some(seed) => seed, None => thread_rng().next_u32(), @@ -146,7 +156,12 @@ impl StanModel { bridgestan::Model::new(lib.0, data.as_ref(), seed).map_err(anyhow::Error::new)?, ); let variables = params(&model, true, true)?; - Ok(StanModel { model, variables }) + let transform_adapter = transform_adapter.map(PyTransformAdapt::new); + Ok(StanModel { + model, + variables, + transform_adapter, + }) } pub fn variables<'py>(&self, py: Python<'py>) -> PyResult> { @@ -195,7 +210,10 @@ impl StanModel { */ } -pub struct StanDensity<'model>(&'model InnerModel); +pub struct StanDensity<'model> { + inner: &'model InnerModel, + transform_adapter: Option, +} #[derive(Debug, Error)] pub enum StanLogpError { @@ -203,6 +221,10 @@ pub enum StanLogpError { BridgeStan(#[from] bridgestan::BridgeStanError), #[error("Bad logp value: {0}")] BadLogp(f64), + #[error("Python exception: {0}")] + PyErr(#[from] PyErr), + #[error("Unspecified Error: {0}")] + Anyhow(#[from] anyhow::Error), } impl LogpError for StanLogpError { @@ -213,10 +235,12 @@ impl LogpError for StanLogpError { impl<'model> CpuLogpFunc for StanDensity<'model> { type LogpError = StanLogpError; - type TransformParams = (); + type TransformParams = Py; fn logp(&mut self, position: &[f64], grad: &mut [f64]) -> Result { - let logp = self.0.log_density_gradient(position, true, true, grad)?; + let logp = self + .inner + .log_density_gradient(position, true, true, grad)?; if !logp.is_finite() { return Err(StanLogpError::BadLogp(logp)); } @@ -224,7 +248,141 @@ impl<'model> CpuLogpFunc for StanDensity<'model> { } fn dim(&self) -> usize { - self.0.param_unc_num() + self.inner.param_unc_num() + } + + fn inv_transform_normalize( + &mut self, + params: &Py, + untransformed_position: &[f64], + untransformed_gradient: &[f64], + transformed_position: &mut [f64], + transformed_gradient: &mut [f64], + ) -> std::result::Result { + let logdet = self + .transform_adapter + .as_mut() + .ok_or_else(|| PyRuntimeError::new_err("No transformation adapter specified"))? + .inv_transform_normalize( + params, + untransformed_position, + untransformed_gradient, + transformed_position, + transformed_gradient, + ) + .context("failed inv_transform_normalize")?; + Ok(logdet) + } + + fn init_from_transformed_position( + &mut self, + params: &Py, + untransformed_position: &mut [f64], + untransformed_gradient: &mut [f64], + transformed_position: &[f64], + transformed_gradient: &mut [f64], + ) -> std::result::Result<(f64, f64), Self::LogpError> { + let adapter = self + .transform_adapter + .as_mut() + .ok_or_else(|| PyRuntimeError::new_err("No transformation adapter specified"))?; + + let part1 = adapter + .init_from_transformed_position_part1( + params, + untransformed_position, + transformed_position, + ) + .context("Failed init_from_transformed_position_part1")?; + + let logp = self.logp(untransformed_position, untransformed_gradient)?; + + let adapter = self + .transform_adapter + .as_mut() + .ok_or_else(|| PyRuntimeError::new_err("No transformation adapter specified"))?; + + let logdet = adapter + .init_from_transformed_position_part2( + params, + part1, + untransformed_gradient, + transformed_gradient, + ) + .context("Failed init_from_transformed_position_part2")?; + Ok((logp, logdet)) + } + + fn init_from_untransformed_position( + &mut self, + params: &Py, + untransformed_position: &[f64], + untransformed_gradient: &mut [f64], + transformed_position: &mut [f64], + transformed_gradient: &mut [f64], + ) -> std::result::Result<(f64, f64), Self::LogpError> { + let logp = self + .logp(untransformed_position, untransformed_gradient) + .context("Failed to call stan logp function")?; + + let logdet = self + .transform_adapter + .as_mut() + .ok_or_else(|| PyRuntimeError::new_err("No transformation adapter specified"))? + .inv_transform_normalize( + params, + untransformed_position, + untransformed_gradient, + transformed_position, + transformed_gradient, + ) + .context("Failed inv_transform_normalize in stan init_from_untransformed_position")?; + Ok((logp, logdet)) + } + + fn update_transformation<'a, R: rand::Rng + ?Sized>( + &'a mut self, + rng: &mut R, + untransformed_positions: impl ExactSizeIterator, + untransformed_gradients: impl ExactSizeIterator, + params: &'a mut Py, + ) -> std::result::Result<(), Self::LogpError> { + self.transform_adapter + .as_mut() + .ok_or_else(|| PyRuntimeError::new_err("No transformation adapter specified"))? + .update_transformation( + rng, + untransformed_positions, + untransformed_gradients, + params, + ) + .context("Failed to update the transformation")?; + Ok(()) + } + + fn new_transformation( + &mut self, + rng: &mut R, + untransformed_position: &[f64], + untransformed_gradient: &[f64], + chain: u64, + ) -> std::result::Result, Self::LogpError> { + let trafo = self + .transform_adapter + .as_mut() + .ok_or_else(|| PyRuntimeError::new_err("No transformation adapter specified"))? + .new_transformation(rng, untransformed_position, untransformed_gradient, chain) + .context("Could not create transformation adapter")?; + Ok(trafo) + } + + fn transformation_id(&self, params: &Py) -> std::result::Result { + let id = self + .transform_adapter + .as_ref() + .ok_or_else(|| PyRuntimeError::new_err("No transformation adapter specified"))? + .transformation_id(params)?; + Ok(id) } } @@ -388,7 +546,10 @@ impl Model for StanModel { } fn math(&self) -> anyhow::Result> { - Ok(CpuMath::new(StanDensity(&self.model))) + Ok(CpuMath::new(StanDensity { + inner: &self.model, + transform_adapter: self.transform_adapter.as_ref().map(|v| v.clone()), + })) } fn init_position( diff --git a/src/wrapper.rs b/src/wrapper.rs index c81d3a4..7b50341 100644 --- a/src/wrapper.rs +++ b/src/wrapper.rs @@ -13,6 +13,7 @@ use crate::{ use anyhow::{bail, Context, Result}; use arrow::array::Array; +use numpy::{PyArray1, PyReadonlyArray1}; use nuts_rs::{ ChainProgress, DiagGradNutsSettings, LowRankNutsSettings, ProgressCallback, Sampler, SamplerWaitResult, Trace, TransformedNutsSettings, @@ -20,6 +21,7 @@ use nuts_rs::{ use pyo3::{ exceptions::PyTimeoutError, ffi::Py_uintptr_t, + intern, prelude::*, types::{PyList, PyTuple}, }; @@ -131,18 +133,21 @@ impl PyNutsSettings { impl PyNutsSettings { #[staticmethod] #[allow(non_snake_case)] + #[pyo3(signature = (seed=None))] fn Diag(seed: Option) -> Self { PyNutsSettings::new_diag(seed) } #[staticmethod] #[allow(non_snake_case)] + #[pyo3(signature = (seed=None))] fn LowRank(seed: Option) -> Self { PyNutsSettings::new_low_rank(seed) } #[staticmethod] #[allow(non_snake_case)] + #[pyo3(signature = (seed=None))] fn Transform(seed: Option) -> Self { PyNutsSettings::new_tranform_adapt(seed) } @@ -210,8 +215,8 @@ impl PyNutsSettings { Settings::LowRank(nuts_settings) => { Ok(nuts_settings.adapt_options.mass_matrix_switch_freq) } - Settings::Transforming(_) => { - bail!("Option window_switch_freq not availbale for transformation adaptation") + Settings::Transforming(nuts_settings) => { + Ok(nuts_settings.adapt_options.transform_update_freq) } } } @@ -227,8 +232,9 @@ impl PyNutsSettings { nuts_settings.adapt_options.mass_matrix_switch_freq = val; Ok(()) } - Settings::Transforming(_) => { - bail!("Option window_switch_freq not availbale for transformation adaptation") + Settings::Transforming(nuts_settings) => { + nuts_settings.adapt_options.transform_update_freq = val; + Ok(()) } } } @@ -604,13 +610,12 @@ pub(crate) enum SamplerState { } #[derive(Clone)] -#[pyclass] -pub enum ProgressType { +enum InnerProgressType { Callback { rate: Duration, n_cores: usize, template: String, - callback: Py, + callback: Arc>, }, Indicatif { rate: Duration, @@ -618,10 +623,14 @@ pub enum ProgressType { None {}, } +#[pyclass] +#[derive(Clone)] +pub struct ProgressType(InnerProgressType); + impl ProgressType { fn into_callback(self) -> Result> { - match self { - ProgressType::Callback { + match self.0 { + InnerProgressType::Callback { callback, rate, n_cores, @@ -632,11 +641,11 @@ impl ProgressType { Ok(Some(callback)) } - ProgressType::Indicatif { rate } => { + InnerProgressType::Indicatif { rate } => { let handler = IndicatifHandler::new(rate); Ok(Some(handler.into_callback()?)) } - ProgressType::None {} => Ok(None), + InnerProgressType::None {} => Ok(None), } } } @@ -646,23 +655,23 @@ impl ProgressType { #[staticmethod] fn indicatif(rate: u64) -> Self { let rate = Duration::from_millis(rate); - ProgressType::Indicatif { rate } + ProgressType(InnerProgressType::Indicatif { rate }) } #[staticmethod] fn none() -> Self { - ProgressType::None {} + ProgressType(InnerProgressType::None {}) } #[staticmethod] fn template_callback(rate: u64, template: String, n_cores: usize, callback: Py) -> Self { let rate = Duration::from_millis(rate); - ProgressType::Callback { - callback, + ProgressType(InnerProgressType::Callback { + callback: Arc::new(callback), template, n_cores, rate, - } + }) } } @@ -787,6 +796,7 @@ impl PySampler { }) } + #[pyo3(signature = (timeout_seconds=None))] fn wait(&mut self, py: Python<'_>, timeout_seconds: Option) -> PyResult<()> { py.allow_threads(|| { let timeout = match timeout_seconds { @@ -937,6 +947,244 @@ fn export_array(py: Python<'_>, data: Arc) -> PyResult { Ok(data.into_py(py)) } +#[pyclass] +#[derive(Debug, Clone)] +pub struct PyTransformAdapt(Arc>); + +#[pymethods] +impl PyTransformAdapt { + #[new] + pub fn new(adapter: Py) -> Self { + Self(Arc::new(adapter)) + } +} + +impl PyTransformAdapt { + pub fn inv_transform_normalize( + &mut self, + params: &Py, + untransformed_position: &[f64], + untransformed_gradient: &[f64], + transformed_position: &mut [f64], + transformed_gradient: &mut [f64], + ) -> Result { + Python::with_gil(|py| { + let untransformed_position = PyArray1::from_slice_bound(py, untransformed_position); + let untransformed_gradient = PyArray1::from_slice_bound(py, untransformed_gradient); + + let output = params + .getattr(py, intern!(py, "inv_transform")) + .context("Could not access attribute inv_transform")? + .call1(py, (untransformed_position, untransformed_gradient)) + .context("Failed to call adapter.inv_transform")?; + let (logdet, transformed_position_out, transformed_gradient_out): ( + f64, + PyReadonlyArray1, + PyReadonlyArray1, + ) = output + .extract(py) + .context("Execpected results from adapter.inv_transform")?; + + if !transformed_position_out + .as_slice()? + .iter() + .all(|&x| x.is_finite()) + { + bail!("Transformed position is not finite"); + } + if !transformed_gradient_out + .as_slice()? + .iter() + .all(|&x| x.is_finite()) + { + bail!("Transformed position is not finite"); + } + + transformed_position.copy_from_slice( + transformed_position_out + .as_slice() + .context("Could not copy transformed_position")?, + ); + + transformed_gradient.copy_from_slice( + transformed_gradient_out + .as_slice() + .context("Could not copy transformed_gradient")?, + ); + Ok(logdet) + }) + } + + pub fn init_from_transformed_position( + &mut self, + params: &Py, + untransformed_position: &mut [f64], + untransformed_gradient: &mut [f64], + transformed_position: &[f64], + transformed_gradient: &mut [f64], + ) -> Result<(f64, f64)> { + Python::with_gil(|py| { + let transformed_position = PyArray1::from_slice_bound(py, transformed_position); + + let output = params + .getattr(py, intern!(py, "init_from_transformed_position"))? + .call1(py, (transformed_position,))?; + let ( + logp, + logdet, + untransformed_position_out, + untransformed_gradient_out, + transformed_gradient_out, + ): ( + f64, + f64, + PyReadonlyArray1, + PyReadonlyArray1, + PyReadonlyArray1, + ) = output.extract(py)?; + + untransformed_position.copy_from_slice(untransformed_position_out.as_slice()?); + untransformed_gradient.copy_from_slice(untransformed_gradient_out.as_slice()?); + transformed_gradient.copy_from_slice(transformed_gradient_out.as_slice()?); + Ok((logp, logdet)) + }) + } + + pub fn init_from_transformed_position_part1( + &mut self, + params: &Py, + untransformed_position: &mut [f64], + transformed_position: &[f64], + ) -> Result> { + Python::with_gil(|py| { + let transformed_position = PyArray1::from_slice_bound(py, transformed_position); + + let output = params + .getattr(py, intern!(py, "init_from_transformed_position_part1"))? + .call1(py, (transformed_position,))?; + let (untransformed_position_out, part1): (PyReadonlyArray1, Py) = + output.extract(py)?; + + untransformed_position.copy_from_slice(untransformed_position_out.as_slice()?); + Ok(part1) + }) + } + + pub fn init_from_transformed_position_part2( + &mut self, + params: &Py, + part1: Py, + untransformed_gradient: &[f64], + transformed_gradient: &mut [f64], + ) -> Result { + Python::with_gil(|py| { + let untransformed_gradient = PyArray1::from_slice_bound(py, untransformed_gradient); + + let output = params + .getattr(py, intern!(py, "init_from_transformed_position_part2"))? + .call1(py, (part1, untransformed_gradient))?; + let (logdet, transformed_gradient_out): (f64, PyReadonlyArray1) = + output.extract(py)?; + + transformed_gradient.copy_from_slice(transformed_gradient_out.as_slice()?); + Ok(logdet) + }) + } + + pub fn init_from_untransformed_position( + &mut self, + params: &Py, + untransformed_position: &[f64], + untransformed_gradient: &mut [f64], + transformed_position: &mut [f64], + transformed_gradient: &mut [f64], + ) -> Result<(f64, f64)> { + Python::with_gil(|py| { + let untransformed_position = PyArray1::from_slice_bound(py, untransformed_position); + + let output = params + .getattr(py, intern!(py, "init_from_untransformed_position")) + .context("No attribute init_from_untransformed_position")? + .call1(py, (untransformed_position,)) + .context("Failed adapter.init_from_untransformed_position")?; + let ( + logp, + logdet, + untransformed_gradient_out, + transformed_position_out, + transformed_gradient_out, + ): ( + f64, + f64, + PyReadonlyArray1, + PyReadonlyArray1, + PyReadonlyArray1, + ) = output + .extract(py) + .context("Unexpected return value of init_from_untransformed_position")?; + + untransformed_gradient.copy_from_slice(untransformed_gradient_out.as_slice()?); + transformed_position.copy_from_slice(transformed_position_out.as_slice()?); + transformed_gradient.copy_from_slice(transformed_gradient_out.as_slice()?); + Ok((logp, logdet)) + }) + } + + pub fn update_transformation<'a, R: rand::Rng + ?Sized>( + &'a mut self, + rng: &mut R, + untransformed_positions: impl ExactSizeIterator, + untransformed_gradients: impl ExactSizeIterator, + params: &'a mut Py, + ) -> Result<()> { + Python::with_gil(|py| { + let positions = PyList::new_bound( + py, + untransformed_positions.map(|pos| PyArray1::from_slice_bound(py, pos)), + ); + let gradients = PyList::new_bound( + py, + untransformed_gradients.map(|grad| PyArray1::from_slice_bound(py, grad)), + ); + + let seed = rng.next_u64(); + + params + .getattr(py, intern!(py, "update"))? + .call1(py, (seed, positions, gradients))?; + Ok(()) + }) + } + + pub fn new_transformation( + &mut self, + rng: &mut R, + untransformed_position: &[f64], + untransformed_gradient: &[f64], + chain: u64, + ) -> Result> { + Python::with_gil(|py| { + let position = PyArray1::from_slice_bound(py, untransformed_position); + let gradient = PyArray1::from_slice_bound(py, untransformed_gradient); + + let seed = rng.next_u64(); + + let transformer = self.0.call1(py, (seed, position, gradient, chain))?; + + Ok(transformer) + }) + } + + pub fn transformation_id(&self, params: &Py) -> Result { + Python::with_gil(|py| { + let id: i64 = params + .getattr(py, intern!(py, "transformation_id"))? + .extract(py)?; + Ok(id) + }) + } +} + /// A Python module implemented in Rust. #[pymodule] pub fn _lib(m: &Bound<'_, PyModule>) -> PyResult<()> { From 300c2dbb85ad45e3ee6477a5190a7242ce10eb48 Mon Sep 17 00:00:00 2001 From: Adrian Seyboldt Date: Mon, 11 Nov 2024 13:39:20 +0100 Subject: [PATCH 09/34] feat: Add transformation file for normalizing flows --- python/nutpie/transform_adapter.py | 527 +++++++++++++++++++++++++++++ 1 file changed, 527 insertions(+) create mode 100644 python/nutpie/transform_adapter.py diff --git a/python/nutpie/transform_adapter.py b/python/nutpie/transform_adapter.py new file mode 100644 index 0000000..136fbf8 --- /dev/null +++ b/python/nutpie/transform_adapter.py @@ -0,0 +1,527 @@ +def make_transform_adapter( + *, + verbose=False, + window_size=2000, + show_progress=False, + nn_depth=1, + nn_width=None, + num_layers=8, + num_diag_windows=10, + learning_rate=1e-3, + scale_layer=False, + untransformed_dim=None, + zero_init=True, +): + import jax + import equinox as eqx + import jax.numpy as jnp + import flowjax + import flowjax.train + import flowjax.flows + from flowjax.bijections import mvscale + import optax + import traceback + from paramax import Parameterize, unwrap + from functools import partial + + import numpy as np + + class FisherLoss: + @eqx.filter_jit + def __call__( + self, + params, + static, + x, + condition=None, + key=None, + return_all_costs=False, + ): + flow = unwrap(eqx.combine(params, static, is_leaf=eqx.is_inexact_array)) + + def compute_loss(bijection, draw, grad): + draw, grad, _ = bijection.inverse_gradient_and_val( + draw, grad, jnp.array(0.0) + ) + return ((draw + grad) ** 2).sum() + + assert x.shape[1] == 2 + draws = x[:, 0, :] + grads = x[:, 1, :] + + if return_all_costs: + return jax.vmap(compute_loss, [None, 0, 0])( + flow.bijection, draws, grads + ) + + return jnp.log( + jax.vmap(compute_loss, [None, 0, 0])( + flow.bijection, draws, grads + ).mean() + ) + + def fit_flow(key, bijection, loss_fn, points, **kwargs): + flow = flowjax.flows.Transformed( + flowjax.distributions.StandardNormal(bijection.shape), bijection + ) + + key, train_key = jax.random.split(key) + + fit, losses = flowjax.train.fit_to_data( + key=train_key, + dist=flow, + x=points, + loss_fn=loss_fn, + **kwargs, + ) + return fit.bijection, losses + + def make_flow( + seed, + positions, + gradients, + *, + zero_init=False, + scale_layer=False, + untransformed_dim=None, + n_layers, + ): + positions = np.array(positions) + gradients = np.array(gradients) + + n_draws, n_dim = positions.shape + + if n_dim < 2: + n_layers = 0 + + assert positions.shape == gradients.shape + assert n_draws > 0 + + if n_draws == 0: + raise ValueError("No draws") + elif n_draws == 1: + assert np.all(gradients != 0) + diag = np.clip(1 / jnp.sqrt(jnp.abs(gradients[0])), 1e-5, 1e5) + assert np.isfinite(diag).all() + mean = jnp.zeros_like(diag) + else: + pos_std = np.clip(positions.std(0), 1e-8, 1e8) + grad_std = np.clip(gradients.std(0), 1e-8, 1e8) + diag = jnp.sqrt(pos_std / grad_std) + mean = positions.mean(0) + gradients.mean(0) * diag * diag + + key = jax.random.PRNGKey(seed % (2**63)) + + flows = [ + flowjax.flows.Affine(loc=mean, scale=diag), + ] + + if n_layers == 0: + return flowjax.flows.Chain(flows) + + def make_layer(key, is_last=False): + key, key_couple, key_permute = jax.random.split(key, 3) + + scale = Parameterize( + lambda x: x + jnp.sqrt(1 + x**2), + jnp.array(0.0), + # lambda x: jnp.exp(jnp.arcsinh(x)), jnp.array(0.0), + ) + affine = eqx.tree_at( + where=lambda aff: aff.scale, + pytree=flowjax.bijections.Affine(), + replace=scale, + ) + + if nn_width is None: + width = n_dim // 2 + else: + width = nn_width + + if untransformed_dim is None: + untrans_dim = n_dim // 2 + else: + untrans_dim = untransformed_dim + + coupling = flowjax.bijections.coupling.Coupling( + key_couple, + transformer=affine, + untransformed_dim=untrans_dim, + dim=n_dim, + nn_activation=jax.nn.gelu, + nn_width=width, + nn_depth=nn_depth, + ) + if zero_init: + coupling = jax.tree_util.tree_map( + lambda x: x * 1e-3 if eqx.is_inexact_array(x) else x, + coupling, + ) + + if is_last: + flow = flowjax.bijections.Chain([coupling]) + else: + flow = flowjax.flows._add_default_permute(coupling, n_dim, key_permute) + + if scale_layer: + bijections = list(flow.bijections) + bijections.append(mvscale.MvScale4(jnp.ones(n_dim) * 1e-5)) + # bijections.append(mvscale.MvScale3(jnp.ones(n_dim) * 1e-5)) + flow = flowjax.bijections.Chain(bijections) + + return flow + + if n_layers == 1: + bijection = make_layer(key, is_last=True) + else: + keys = jax.random.split(key, n_layers - 1) + layers = eqx.filter_vmap(make_layer)(keys) + bijection = flowjax.bijections.Scan(layers) + + key, key_layer = jax.random.split(key) + last = make_layer(key_layer, is_last=True) + + bijection = flowjax.bijections.Chain([bijection, last]) + + return flowjax.bijections.Chain([bijection, *flows]) + + @eqx.filter_jit + def _init_from_transformed_position(logp_fn, bijection, transformed_position): + bijection = unwrap(bijection) + (untransformed_position, logdet), pull_grad = jax.vjp( + bijection.transform_and_log_det, transformed_position + ) + logp, untransformed_gradient = jax.value_and_grad(lambda x: logp_fn(x)[0])( + untransformed_position + ) + (transformed_gradient,) = pull_grad((untransformed_gradient, 1.0)) + return ( + logp, + logdet, + untransformed_position, + untransformed_gradient, + transformed_gradient, + ) + + @eqx.filter_jit + def _init_from_transformed_position_part1(logp_fn, bijection, transformed_position): + bijection = unwrap(bijection) + (untransformed_position, logdet) = bijection.transform_and_log_det( + transformed_position + ) + + return (logdet, untransformed_position) + + @eqx.filter_jit + def _init_from_transformed_position_part2( + bijection, + part1, + untransformed_gradient, + ): + logdet, untransformed_position, transformed_position = part1 + bijection = unwrap(bijection) + _, pull_grad = jax.vjp(bijection.transform_and_log_det, transformed_position) + (transformed_gradient,) = pull_grad((untransformed_gradient, 1.0)) + return ( + logdet, + transformed_gradient, + ) + + @eqx.filter_jit + def _init_from_untransformed_position(logp_fn, bijection, untransformed_position): + logp, untransformed_gradient = jax.value_and_grad(lambda x: logp_fn(x)[0])( + untransformed_position + ) + logdet, transformed_position, transformed_gradient = _inv_transform( + bijection, untransformed_position, untransformed_gradient + ) + return ( + logp, + logdet, + untransformed_gradient, + transformed_position, + transformed_gradient, + ) + + @eqx.filter_jit + def _inv_transform(bijection, untransformed_position, untransformed_gradient): + bijection = unwrap(bijection) + transformed_position, transformed_gradient, logdet = ( + bijection.inverse_gradient_and_val( + untransformed_position, untransformed_gradient, 0.0 + ) + ) + return logdet, transformed_position, transformed_gradient + + class TransformAdapter: + def __init__( + self, + seed, + position, + gradient, + chain, + *, + logp_fn, + make_flow_fn, + verbose=False, + window_size=2000, + show_progress=False, + num_diag_windows=10, + learning_rate=1e-3, + zero_init=True, + untransformed_dim=None, + ): + self._logp_fn = logp_fn + self._make_flow_fn = make_flow_fn + self._chain = chain + self._verbose = verbose + self._window_size = window_size + self._optimizer = optax.apply_if_finite(optax.adabelief(learning_rate), 50) + self._loss_fn = FisherLoss() + self._show_progress = show_progress + self._num_diag_windows = num_diag_windows + self._zero_init = zero_init + self._untransformed_dim = untransformed_dim + try: + self._bijection = make_flow_fn(seed, [position], [gradient], n_layers=0) + except Exception as e: + print("make_flow", e) + print(traceback.format_exc()) + raise + self.index = 0 + + @property + def transformation_id(self): + return self.index + + def update(self, seed, positions, gradients): + self.index += 1 + if self._verbose: + print(f"Chain {self._chain}: Total available points: {len(positions)}") + n_draws = len(positions) + if n_draws == 0: + return + try: + if self.index <= self._num_diag_windows: + size = len(positions) + positions = positions[-size // 5 + 3 :] + gradients = gradients[-size // 5 + 3 :] + + fit = self._make_flow_fn(seed, positions, gradients, n_layers=0) + points = jnp.transpose(jnp.array([positions, gradients]), [1, 0, 2]) + + flow = flowjax.flows.Transformed( + flowjax.distributions.StandardNormal(fit.shape), fit + ) + params, static = eqx.partition(flow, eqx.is_inexact_array) + new_loss = self._loss_fn(params, static, points) + + print("loss from diag:", new_loss) + + if np.isfinite(new_loss): + self._bijection = fit + + return + + positions = np.array(positions[500:][-self._window_size :]) + gradients = np.array(gradients[500:][-self._window_size :]) + + if len(positions) == 0: + return + + if not np.isfinite(gradients).all(): + print(gradients) + print(gradients.shape) + print((~np.isfinite(gradients)).nonzero()) + + assert np.isfinite(positions).all() + assert np.isfinite(gradients).all() + + # TODO don't reuse seed + key = jax.random.PRNGKey(seed % (2**63)) + points = jnp.transpose(jnp.array([positions, gradients]), [1, 0, 2]) + + if len(self._bijection.bijections) == 1: + base = self._make_flow_fn( + seed, + positions, + gradients, + n_layers=num_layers, + untransformed_dim=self._untransformed_dim, + zero_init=self._zero_init, + ) + flow = flowjax.flows.Transformed( + flowjax.distributions.StandardNormal(base.shape), base + ) + params, static = eqx.partition(flow, eqx.is_inexact_array) + if self._verbose: + print( + "loss before optimization: ", + self._loss_fn(params, static, points[-500:]), + ) + else: + base = self._bijection + + # make_flow might still only return a single trafo if the for 1d problems + if len(base.bijections) == 1: + self._bijection = base + return + + fit, _ = fit_flow( + key, + base, + self._loss_fn, + points, + show_progress=self._show_progress, + optimizer=self._optimizer, + batch_size=128, + ) + + flow = flowjax.flows.Transformed( + flowjax.distributions.StandardNormal(fit.shape), fit + ) + params, static = eqx.partition(flow, eqx.is_inexact_array) + new_loss = self._loss_fn(params, static, points[-500:]) + + flow = flowjax.flows.Transformed( + flowjax.distributions.StandardNormal(self._bijection.shape), + self._bijection, + ) + params, static = eqx.partition(flow, eqx.is_inexact_array) + old_loss = self._loss_fn(params, static, points[-500:]) + + if self._verbose: + print( + f"Chain {self._chain}: New loss {new_loss}, old loss {old_loss}" + ) + + if not np.isfinite(old_loss): + flow = flowjax.flows.Transformed( + flowjax.distributions.StandardNormal(self._bijection.shape), + self._bijection, + ) + params, static = eqx.partition(flow, eqx.is_inexact_array) + print( + self._loss_fn( + params, static, points[-500:], return_all_costs=True + ) + ) + + if not np.isfinite(new_loss): + flow = flowjax.flows.Transformed( + flowjax.distributions.StandardNormal(fit.shape), fit + ) + params, static = eqx.partition(flow, eqx.is_inexact_array) + print( + self._loss_fn( + params, static, points[-500:], return_all_costs=True + ) + ) + + if (not np.isfinite(old_loss)) and (not np.isfinite(new_loss)): + self._bijection = self._make_flow_fn( + seed, positions, gradients, n_layers=0 + ) + return + + if not np.isfinite(new_loss): + return + + if new_loss > old_loss: + return + + self._bijection = fit + + except Exception as e: + print("update error:", e) + print(traceback.format_exc()) + + def init_from_transformed_position(self, transformed_position): + try: + logp, logdet, *arrays = _init_from_transformed_position( + self._logp_fn, + self._bijection, + jnp.array(transformed_position), + ) + return ( + float(logp), + float(logdet), + *[np.array(val, dtype="float64") for val in arrays], + ) + except Exception as e: + print(e) + print(traceback.format_exc()) + raise + + def init_from_transformed_position_part1(self, transformed_position): + try: + transformed_position = jnp.array(transformed_position) + logdet, untransformed_position = _init_from_transformed_position_part1( + self._logp_fn, + self._bijection, + transformed_position, + ) + part1 = (logdet, untransformed_position, transformed_position) + return np.array(untransformed_position, dtype="float64"), part1 + except Exception as e: + print(e) + print(traceback.format_exc()) + raise + + def init_from_transformed_position_part2( + self, + part1, + untransformed_gradient, + ): + try: + # TODO We could extract the arrays from the pull_grad function + # to reuse computation from part1 + logdet, *arrays = _init_from_transformed_position_part2( + self._bijection, + part1, + untransformed_gradient, + ) + return float(logdet), *[ + np.array(val, dtype="float64") for val in arrays + ] + except Exception as e: + print(e) + print(traceback.format_exc()) + raise + + def init_from_untransformed_position(self, untransformed_position): + try: + logp, logdet, *arrays = _init_from_untransformed_position( + self._logp_fn, + self._bijection, + jnp.array(untransformed_position), + ) + arrays = [np.array(val, dtype="float64") for val in arrays] + return float(logp), float(logdet), *arrays + except Exception as e: + print(e) + print(traceback.format_exc()) + raise + + def inv_transform(self, position, gradient): + try: + logdet, *arrays = _inv_transform( + self._bijection, jnp.array(position), jnp.array(gradient) + ) + return logdet, *[np.array(val, dtype="float64") for val in arrays] + except Exception as e: + print(e) + print(traceback.format_exc()) + raise + + return partial( + TransformAdapter, + verbose=verbose, + window_size=window_size, + make_flow_fn=partial(make_flow, scale_layer=scale_layer), + show_progress=show_progress, + num_diag_windows=num_diag_windows, + learning_rate=learning_rate, + zero_init=zero_init, + untransformed_dim=untransformed_dim, + ) From 42374ea45e3f165b1c95d2b47f7b67a3532c6444 Mon Sep 17 00:00:00 2001 From: Adrian Seyboldt Date: Thu, 14 Nov 2024 17:43:04 +0100 Subject: [PATCH 10/34] chore: Update dependencies --- Cargo.lock | 32 ++++++++++++++++++++++++++------ Cargo.toml | 6 +++--- 2 files changed, 29 insertions(+), 9 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index f43842a..2c09233 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -317,7 +317,7 @@ dependencies = [ "libloading", "log", "path-absolutize", - "thiserror", + "thiserror 1.0.69", ] [[package]] @@ -1521,7 +1521,7 @@ dependencies = [ "rayon", "smallvec", "tch", - "thiserror", + "thiserror 2.0.3", "time-humanize", "upon", ] @@ -1542,7 +1542,7 @@ dependencies = [ "rand_chacha", "rand_distr", "rayon", - "thiserror", + "thiserror 1.0.69", ] [[package]] @@ -2042,7 +2042,7 @@ dependencies = [ "byteorder", "enum-as-inner", "libc", - "thiserror", + "thiserror 1.0.69", "walkdir", ] @@ -2070,7 +2070,7 @@ dependencies = [ "ndarray 0.15.6", "rand", "safetensors", - "thiserror", + "thiserror 1.0.69", "torch-sys", "zip", ] @@ -2081,7 +2081,16 @@ version = "1.0.69" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52" dependencies = [ - "thiserror-impl", + "thiserror-impl 1.0.69", +] + +[[package]] +name = "thiserror" +version = "2.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c006c85c7651b3cf2ada4584faa36773bd07bac24acfb39f3c431b36d7e667aa" +dependencies = [ + "thiserror-impl 2.0.3", ] [[package]] @@ -2095,6 +2104,17 @@ dependencies = [ "syn 2.0.87", ] +[[package]] +name = "thiserror-impl" +version = "2.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f077553d607adc1caf65430528a576c757a71ed73944b66ebb58ef2bbd243568" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.87", +] + [[package]] name = "time" version = "0.3.36" diff --git a/Cargo.toml b/Cargo.toml index cd6b5ed..22bed6a 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -2,8 +2,8 @@ name = "nutpie" version = "0.14.0" authors = [ - "Adrian Seyboldt ", - "PyMC Developers ", + "Adrian Seyboldt ", + "PyMC Developers ", ] edition = "2021" license = "MIT" @@ -25,7 +25,7 @@ crate-type = ["cdylib"] nuts-rs = "0.13.0" numpy = "0.22.0" rand = "0.8.5" -thiserror = "1.0.44" +thiserror = "2.0.3" rand_chacha = "0.3.1" rayon = "1.10.0" # Keep arrow in sync with nuts-rs requirements From ea15908b93a182fe8445559c005275601da4773a Mon Sep 17 00:00:00 2001 From: Adrian Seyboldt Date: Thu, 14 Nov 2024 17:43:31 +0100 Subject: [PATCH 11/34] fix: Move mvscale import to be conditional --- python/nutpie/transform_adapter.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/python/nutpie/transform_adapter.py b/python/nutpie/transform_adapter.py index 136fbf8..f658ca6 100644 --- a/python/nutpie/transform_adapter.py +++ b/python/nutpie/transform_adapter.py @@ -18,7 +18,6 @@ def make_transform_adapter( import flowjax import flowjax.train import flowjax.flows - from flowjax.bijections import mvscale import optax import traceback from paramax import Parameterize, unwrap @@ -164,6 +163,8 @@ def make_layer(key, is_last=False): flow = flowjax.flows._add_default_permute(coupling, n_dim, key_permute) if scale_layer: + from flowjax.bijections import mvscale + bijections = list(flow.bijections) bijections.append(mvscale.MvScale4(jnp.ones(n_dim) * 1e-5)) # bijections.append(mvscale.MvScale3(jnp.ones(n_dim) * 1e-5)) From 7b4dd2e5d13c3dcb3afc9376bc85343385635fbb Mon Sep 17 00:00:00 2001 From: Adrian Seyboldt Date: Thu, 14 Nov 2024 18:07:49 +0100 Subject: [PATCH 12/34] fix: Some rebase issues --- python/nutpie/compiled_pyfunc.py | 5 ++--- src/pyfunc.rs | 8 ++++---- src/pymc.rs | 5 ++--- 3 files changed, 8 insertions(+), 10 deletions(-) diff --git a/python/nutpie/compiled_pyfunc.py b/python/nutpie/compiled_pyfunc.py index 7298534..d0f9732 100644 --- a/python/nutpie/compiled_pyfunc.py +++ b/python/nutpie/compiled_pyfunc.py @@ -82,9 +82,8 @@ def make_expand_func(seed1, seed2, chain): make_expand_func, self._variables, self.n_dim, - self._make_initial_points, - make_transform_adapter, - make_adapter, + init_point_func=self._make_initial_points, + transform_adapter=make_adapter, ) diff --git a/src/pyfunc.rs b/src/pyfunc.rs index 37a25d6..a6220a2 100644 --- a/src/pyfunc.rs +++ b/src/pyfunc.rs @@ -17,7 +17,7 @@ use pyo3::{ Bound, Py, PyAny, PyErr, Python, }; use rand::Rng; -use rand_distr::{Distribution, StandardNormal, Uniform}; +use rand_distr::{Distribution, Uniform}; use smallvec::SmallVec; use thiserror::Error; @@ -76,7 +76,7 @@ impl PyVariable { pub struct PyModel { make_logp_func: Arc>, make_expand_func: Arc>, - init_point_func: Arc>>, + init_point_func: Option>>, variables: Arc>, transform_adapter: Option, ndim: usize, @@ -85,7 +85,7 @@ pub struct PyModel { #[pymethods] impl PyModel { #[new] - #[pyo3(signature = (make_logp_func, make_expand_func, variables, ndim, transform_adapter=None))] + #[pyo3(signature = (make_logp_func, make_expand_func, variables, ndim, *, init_point_func=None, transform_adapter=None))] fn new<'py>( make_logp_func: Py, make_expand_func: Py, @@ -97,7 +97,7 @@ impl PyModel { Self { make_logp_func: Arc::new(make_logp_func), make_expand_func: Arc::new(make_expand_func), - init_point_func: Arc::new(init_point_func), + init_point_func: init_point_func.map(|x| x.into()), variables: Arc::new(variables), ndim, transform_adapter: transform_adapter.map(PyTransformAdapt::new), diff --git a/src/pymc.rs b/src/pymc.rs index 39dfc76..526e18b 100644 --- a/src/pymc.rs +++ b/src/pymc.rs @@ -13,7 +13,6 @@ use pyo3::{ types::{PyAnyMethods, PyList}, Bound, Py, PyAny, PyObject, PyResult, Python, }; -use rand::{distributions::Uniform, prelude::Distribution}; use thiserror::Error; @@ -232,7 +231,7 @@ pub(crate) struct PyMcModel { dim: usize, density: LogpFunc, expand: ExpandFunc, - init_func: Py, + init_func: Arc>, var_sizes: Vec, var_names: Vec, } @@ -252,7 +251,7 @@ impl PyMcModel { dim, density, expand, - init_func, + init_func: init_func.into(), var_names: var_names.extract()?, var_sizes: var_sizes.extract()?, }) From 6ec04e51a193b6025162843b2665d032d1fdd369 Mon Sep 17 00:00:00 2001 From: Adrian Seyboldt Date: Thu, 14 Nov 2024 18:13:34 +0100 Subject: [PATCH 13/34] style: Fix ruff issues --- python/nutpie/compile_pymc.py | 2 +- python/nutpie/compile_stan.py | 4 ++-- python/nutpie/transform_adapter.py | 17 +++++++++-------- 3 files changed, 12 insertions(+), 11 deletions(-) diff --git a/python/nutpie/compile_pymc.py b/python/nutpie/compile_pymc.py index 58b6b0d..5510053 100644 --- a/python/nutpie/compile_pymc.py +++ b/python/nutpie/compile_pymc.py @@ -380,7 +380,7 @@ def _compile_pymc_model_jax( def logp_fn_jax_grad(x, *shared): return jax.value_and_grad(lambda x: orig_logp_fn(x, *shared)[0])(x) - static_argnums = list(range(1, len(logp_shared_names) + 1)) + # static_argnums = list(range(1, len(logp_shared_names) + 1)) logp_fn_jax_grad = jax.jit( logp_fn_jax_grad, # static_argnums=static_argnums, diff --git a/python/nutpie/compile_stan.py b/python/nutpie/compile_stan.py index 70ecd14..138652d 100644 --- a/python/nutpie/compile_stan.py +++ b/python/nutpie/compile_stan.py @@ -1,10 +1,10 @@ -from functools import partial import json import tempfile from dataclasses import dataclass, replace +from functools import partial from importlib.util import find_spec from pathlib import Path -from typing import Any, Optional, Callable +from typing import Any, Optional import numpy as np import pandas as pd diff --git a/python/nutpie/transform_adapter.py b/python/nutpie/transform_adapter.py index f658ca6..e0e601b 100644 --- a/python/nutpie/transform_adapter.py +++ b/python/nutpie/transform_adapter.py @@ -12,18 +12,18 @@ def make_transform_adapter( untransformed_dim=None, zero_init=True, ): - import jax + import traceback + from functools import partial + import equinox as eqx - import jax.numpy as jnp import flowjax - import flowjax.train import flowjax.flows + import flowjax.train + import jax + import jax.numpy as jnp + import numpy as np import optax - import traceback from paramax import Parameterize, unwrap - from functools import partial - - import numpy as np class FisherLoss: @eqx.filter_jit @@ -363,7 +363,7 @@ def update(self, seed, positions, gradients): else: base = self._bijection - # make_flow might still only return a single trafo if the for 1d problems + # make_flow might still only return a single trafo for 1d problems if len(base.bijections) == 1: self._bijection = base return @@ -436,6 +436,7 @@ def update(self, seed, positions, gradients): except Exception as e: print("update error:", e) print(traceback.format_exc()) + raise def init_from_transformed_position(self, transformed_position): try: From 2c29e11ab4749b893f1881b8911f40f6bba0d87a Mon Sep 17 00:00:00 2001 From: Adrian Seyboldt Date: Thu, 14 Nov 2024 18:14:30 +0100 Subject: [PATCH 14/34] feat: Add pixi config for development --- .gitattributes | 2 + pixi.lock | 4013 ++++++++++++++++++++++++++++++++++++++++++++++++ pixi.toml | 24 + 3 files changed, 4039 insertions(+) create mode 100644 .gitattributes create mode 100644 pixi.lock create mode 100644 pixi.toml diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..8f61a8e --- /dev/null +++ b/.gitattributes @@ -0,0 +1,2 @@ +# SCM syntax highlighting +pixi.lock linguist-language=YAML linguist-generated=true diff --git a/pixi.lock b/pixi.lock new file mode 100644 index 0000000..745d684 --- /dev/null +++ b/pixi.lock @@ -0,0 +1,4013 @@ +version: 5 +environments: + default: + channels: + - url: https://conda.anaconda.org/conda-forge/ + indexes: + - https://pypi.org/simple + packages: + linux-64: + - conda: https://conda.anaconda.org/conda-forge/linux-64/_libgcc_mutex-0.1-conda_forge.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-2_kmp_llvm.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/arviz-0.20.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/atk-1.0-2.38.0-h04ea711_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/binutils_impl_linux-64-2.43-h4bf12b8_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/binutils_linux-64-2.43-h4852527_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/blas-2.125-openblas.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/blas-devel-3.9.0-25_linux64_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/brotli-1.1.0-hb9d3cd8_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/brotli-bin-1.1.0-hb9d3cd8_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-h4bc722e_7.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/c-ares-1.34.3-heb4867d_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ca-certificates-2024.8.30-hbcca054_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cached-property-1.5.2-hd8ed1ab_1.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/cached_property-1.5.2-pyha770c72_1.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/cachetools-5.5.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/cairo-1.18.0-hebfffa5_3.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2024.8.30-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cloudpickle-3.1.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/cons-0.4.6-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/contourpy-1.3.1-py312h68727a3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cycler-0.12.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/etuples-0.3.9-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.2.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/filelock-3.16.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-dejavu-sans-mono-2.37-hab24e00_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-inconsolata-3.000-h77eed37_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-source-code-pro-2.038-h77eed37_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-ubuntu-0.83-h77eed37_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/fontconfig-2.15.0-h7e30c49_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/fonts-conda-ecosystem-1-0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/fonts-conda-forge-1-0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/fonttools-4.54.1-py312h178313f_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/freetype-2.12.1-h267a509_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/fribidi-1.0.10-h36c2ea0_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/gcc-13.3.0-h9576a4e_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/gcc_impl_linux-64-13.3.0-hfea6d02_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/gcc_linux-64-13.3.0-hc28eda2_5.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/gdk-pixbuf-2.42.12-hb9ae30d_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/graphite2-1.3.13-h59595ed_1003.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/graphviz-12.0.0-hba01fac_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/gtk2-2.24.33-h6470451_5.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/gts-0.7.6-h977cf35_4.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/gxx-13.3.0-h9576a4e_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/gxx_impl_linux-64-13.3.0-hdbfa832_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/gxx_linux-64-13.3.0-h6834431_5.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/h5netcdf-1.4.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/h5py-3.12.1-nompi_py312hedeef09_102.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/harfbuzz-9.0.0-hda332d3_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/hdf5-1.14.3-nompi_hdf9ad27_105.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/icu-75.1-he02047a_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.5.0-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jax-0.4.34-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/jaxlib-0.4.34-cpu_py312haec0345_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/kernel-headers_linux-64-3.10.0-he073ed8_18.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/keyutils-1.6.1-h166bdaf_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/kiwisolver-1.4.7-py312h68727a3_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/krb5-1.21.3-h659f571_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/lcms2-2.16-hb7c19ff_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.43-h712a8e2_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/lerc-4.0.0-h27087fc_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/libabseil-20240722.0-cxx17_h5888daf_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libaec-1.1.3-h59595ed_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libblas-3.9.0-25_linux64_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlicommon-1.1.0-hb9d3cd8_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlidec-1.1.0-hb9d3cd8_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlienc-1.1.0-hb9d3cd8_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libcblas-3.9.0-25_linux64_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libcurl-8.10.1-hbbe4b11_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libdeflate-1.22-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libedit-3.1.20191231-he28a2e2_2.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/libev-4.33-hd590300_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.6.4-h5888daf_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.4.2-h7f98852_5.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-14.2.0-h77fa898_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/libgcc-devel_linux-64-13.3.0-h84ea5a7_101.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-14.2.0-h69a702a_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgd-2.3.3-hd3e95f3_10.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran-14.2.0-h69a702a_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran-ng-14.2.0-h69a702a_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran5-14.2.0-hd5240d6_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libglib-2.82.2-h2ff4ddf_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-14.2.0-h77fa898_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgrpc-1.65.5-hf5c653b_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libhwloc-2.11.1-default_hecaa2ac_1000.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libiconv-1.17-hd590300_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libjpeg-turbo-3.0.0-hd590300_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/liblapack-3.9.0-25_linux64_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/liblapacke-3.9.0-25_linux64_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libllvm14-14.0.6-hcd5def8_4.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libnghttp2-1.64.0-h161d5f1_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libnsl-2.0.1-hd590300_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenblas-0.3.28-pthreads_h94d23a6_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libpng-1.6.44-hadc24fc_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libprotobuf-5.27.5-h5b01275_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libre2-11-2024.07.02-hbbce691_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/librsvg-2.58.4-hc0ffecb_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libsanitizer-13.3.0-heb74ff8_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.47.0-hadc24fc_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libssh2-1.11.0-h0841786_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-14.2.0-hc0a3c3a_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/libstdcxx-devel_linux-64-13.3.0-h84ea5a7_101.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-14.2.0-h4852527_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libtiff-4.7.0-he137b08_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.38.1-h0b41bf4_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libwebp-base-1.4.0-hd590300_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libxcb-1.17.0-h8a09558_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libxcrypt-4.4.36-hd590300_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libxml2-2.13.5-hb346dea_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.1-hb9d3cd8_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/llvm-openmp-19.1.3-h024ca30_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/llvmlite-0.43.0-py312h374181b_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/logical-unification-0.4.6-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-3.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/matplotlib-base-3.9.2-py312hd3ec401_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/maturin-1.7.4-py312h6ab59e4_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/minikanren-1.0.3-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/mkl-2024.2.2-ha957f24_16.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/mkl-service-2.4.2-py312hf224ee7_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ml_dtypes-0.5.0-py312hf9745cd_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/multipledispatch-0.6.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/munkres-1.1.4-pyh9f0ad1d_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.5-he02047a_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/numba-0.60.0-py312h83e6fd3_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/numpy-1.26.4-py312heda63a1_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/openblas-0.3.28-pthreads_h6ec200e_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/openjpeg-2.5.2-h488ebb8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.4.0-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/opt-einsum-3.4.0-hd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/opt_einsum-3.4.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-24.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pandas-2.2.3-py312hf9745cd_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pango-1.54.0-h4c5309f_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pcre2-10.44-hba22ea6_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pillow-11.0.0-py312h7b63e92_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pip-24.3.1-pyh8b19718_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pixman-0.43.2-h59595ed_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.5.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pthread-stubs-0.4-hb9d3cd8_1002.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.18.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pymc-5.18.0-hd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pymc-base-5.18.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pyparsing-3.2.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pytensor-2.25.5-py312h97902ae_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pytensor-base-2.25.5-py312h25a0e75_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-8.3.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.12.7-hc5c86c4_0_cpython.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-graphviz-0.20.3-pyhe28f650_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-tzdata-2024.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/python_abi-3.12-5_cp312.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pytz-2024.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/qhull-2020.2-h434a139_5.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/re2-2024.07.02-h77b4e00_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.2-h8228510_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/rich-13.9.4-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/scipy-1.14.1-py312h62794b6_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-75.3.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.16.0-pyh6c4a22f_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/sysroot_linux-64-2.17-h4a8ded7_18.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/tbb-2021.13.0-h84d6215_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/threadpoolctl-3.5.0-pyhc1e730c_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_h4845f30_101.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.1.0-pyhff2d567_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/toolz-1.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.12.2-hd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.12.2-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2024b-hc8b5060_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/unicodedata2-15.1.0-py312h66e93f0_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/wheel-0.45.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/xarray-2024.10.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/xarray-einstats-0.8.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libice-1.1.1-hb9d3cd8_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libsm-1.2.4-he73a12e_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libx11-1.8.10-h4f16b4b_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxau-1.0.11-hb9d3cd8_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxdmcp-1.1.5-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxext-1.3.6-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxrender-0.9.11-hb9d3cd8_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-xorgproto-2024.1-hb9d3cd8_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xz-5.2.6-h166bdaf_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.21.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/zlib-1.3.1-hb9d3cd8_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.6-ha6fb4c9_0.conda + - pypi: https://files.pythonhosted.org/packages/a2/ad/e0d3c824784ff121c03cc031f944bc7e139a8f1870ffd2845cc2dd76f6c4/absl_py-2.1.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/02/c8/542c1f9513136b431b101d06fb547e94d3ebc1d33740c3024315b55d4ada/bridgestan-2.5.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/46/dd/c1ff2eb8fbf95a8ca804abb1cc3ce70b283ee7b4bc653c3abac245670400/chex-0.1.87-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e9/59/f189b03d743364a350c972b89fe08a6db5bbbdc5f1ea6b604b3eee0a7967/dllist-1.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/15/9f/3be7f03bf66c8d7d2956b727d984595e4af899f3c15ef2c653029008bf3b/equinox-0.11.8-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/1f/e4/0826dfde2db3fb3a34954323a84d0e6b6fdbc7eb5278c84159c6d43290ac/etils-1.10.0-py3-none-any.whl + - pypi: git+https://github.com/aseyboldt/flowjax.git@1c282f2ded78e81c7ce6a96f61523a9f18bf8edc + - pypi: https://files.pythonhosted.org/packages/56/ae/220537f80eb82ae43a299de31edb2a91a28b8c5fb8046e9ff853ec7763cd/jaxtyping-0.2.34-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/5c/24/28d0bb21600a78e46754947333ec9a297044af884d360092eb8561575fe9/optax-0.2.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/20/f8/7b1f5b84f84e43face7349ac2df23f0f75d36b5b4a1c1c0305edce82bcc8/paramax-0.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/2b/78/57043611a16c655c8350b4c01b8d6abfb38cc2acb475238b62c2146186d7/tqdm-4.67.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/9a/bb/d43e5c75054e53efce310e79d63df0ac3f25e34c926be5dffb7d283fb2a8/typeguard-2.13.3-py3-none-any.whl +packages: +- kind: conda + name: _libgcc_mutex + version: '0.1' + build: conda_forge + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/_libgcc_mutex-0.1-conda_forge.tar.bz2 + sha256: fe51de6107f9edc7aa4f786a70f4a883943bc9d39b3bb7307c04c41410990726 + md5: d7c89558ba9fa0495403155b64376d81 + license: None + purls: [] + size: 2562 + timestamp: 1578324546067 +- kind: conda + name: _openmp_mutex + version: '4.5' + build: 2_kmp_llvm + build_number: 2 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-2_kmp_llvm.tar.bz2 + sha256: 84a66275da3a66e3f3e70e9d8f10496d807d01a9e4ec16cd2274cc5e28c478fc + md5: 562b26ba2e19059551a811e72ab7f793 + depends: + - _libgcc_mutex 0.1 conda_forge + - llvm-openmp >=9.0.1 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 5744 + timestamp: 1650742457817 +- kind: pypi + name: absl-py + version: 2.1.0 + url: https://files.pythonhosted.org/packages/a2/ad/e0d3c824784ff121c03cc031f944bc7e139a8f1870ffd2845cc2dd76f6c4/absl_py-2.1.0-py3-none-any.whl + sha256: 526a04eadab8b4ee719ce68f204172ead1027549089702d99b9059f129ff1308 + requires_python: '>=3.7' +- kind: conda + name: arviz + version: 0.20.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/arviz-0.20.0-pyhd8ed1ab_0.conda + sha256: 2e86300d089555741c8f81a73e72aa90f90cda35b494329e1b940e2d31845936 + md5: 7e13efee221dc6ad25fcc2e4d65df7e3 + depends: + - h5netcdf >=1.0.2 + - matplotlib-base >=3.5 + - numpy >=1.23.0 + - packaging + - pandas >=1.5.0 + - python >=3.10 + - scipy >=1.9.0 + - setuptools >=60.0.0 + - typing_extensions >=4.1.0 + - xarray >=2022.6.0 + - xarray-einstats >=0.3 + license: Apache-2.0 + license_family: Apache + purls: + - pkg:pypi/arviz?source=hash-mapping + size: 1473292 + timestamp: 1727611803479 +- kind: conda + name: atk-1.0 + version: 2.38.0 + build: h04ea711_2 + build_number: 2 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/atk-1.0-2.38.0-h04ea711_2.conda + sha256: df682395d05050cd1222740a42a551281210726a67447e5258968dd55854302e + md5: f730d54ba9cd543666d7220c9f7ed563 + depends: + - libgcc-ng >=12 + - libglib >=2.80.0,<3.0a0 + - libstdcxx-ng >=12 + constrains: + - atk-1.0 2.38.0 + license: LGPL-2.0-or-later + license_family: LGPL + purls: [] + size: 355900 + timestamp: 1713896169874 +- kind: conda + name: binutils_impl_linux-64 + version: '2.43' + build: h4bf12b8_2 + build_number: 2 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/binutils_impl_linux-64-2.43-h4bf12b8_2.conda + sha256: 267e78990247369b13234bda270f31beb56a600b4851a8244e31dd9ad85b3b17 + md5: cf0c5521ac2a20dfa6c662a4009eeef6 + depends: + - ld_impl_linux-64 2.43 h712a8e2_2 + - sysroot_linux-64 + license: GPL-3.0-only + license_family: GPL + purls: [] + size: 5682777 + timestamp: 1729655371045 +- kind: conda + name: binutils_linux-64 + version: '2.43' + build: h4852527_2 + build_number: 2 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/binutils_linux-64-2.43-h4852527_2.conda + sha256: df52bd8b8b2a20a0c529d9ad08aaf66093ac318aa8a33d270f18274341a77062 + md5: 18aba879ddf1f8f28145ca6fcb873d8c + depends: + - binutils_impl_linux-64 2.43 h4bf12b8_2 + license: GPL-3.0-only + license_family: GPL + purls: [] + size: 34945 + timestamp: 1729655404893 +- kind: conda + name: blas + version: '2.125' + build: openblas + build_number: 25 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/blas-2.125-openblas.conda + sha256: 23498a320b65c514c132c2b01bdedc2e08ffc9dfd8c7fd46609ac16ff4bc8a90 + md5: 0c46b8a31a587738befc587dd8e52558 + depends: + - __glibc >=2.17,<3.0.a0 + - _openmp_mutex * *_llvm + - _openmp_mutex >=4.5 + - blas-devel 3.9.0 25_linux64_openblas + - libblas 3.9.0 25_linux64_openblas + - libcblas 3.9.0 25_linux64_openblas + - libgcc >=13 + - libgfortran + - libgfortran5 >=13.3.0 + - liblapack 3.9.0 25_linux64_openblas + - liblapacke 3.9.0 25_linux64_openblas + - llvm-openmp >=19.1.2 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 15793 + timestamp: 1729642984458 +- kind: conda + name: blas-devel + version: 3.9.0 + build: 25_linux64_openblas + build_number: 25 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/blas-devel-3.9.0-25_linux64_openblas.conda + sha256: 69483b31161b62716ee529f206f7614bcb45fd230fc9bf47f2fb1840ed406b6f + md5: 02c516384c77f5a7b4d03ed6c0412c57 + depends: + - libblas 3.9.0 25_linux64_openblas + - libcblas 3.9.0 25_linux64_openblas + - liblapack 3.9.0 25_linux64_openblas + - liblapacke 3.9.0 25_linux64_openblas + - openblas 0.3.28.* + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 15609 + timestamp: 1729642921261 +- kind: pypi + name: bridgestan + version: 2.5.0 + url: https://files.pythonhosted.org/packages/02/c8/542c1f9513136b431b101d06fb547e94d3ebc1d33740c3024315b55d4ada/bridgestan-2.5.0-py3-none-any.whl + sha256: f417836f35258688759ad46351621d8bb03440d84965f778c82ee702be93f300 + requires_dist: + - numpy + - dllist + - pandas ; extra == 'test' + - pytest ; extra == 'test' + - pytest-cov ; extra == 'test' + requires_python: '>=3.9' +- kind: conda + name: brotli + version: 1.1.0 + build: hb9d3cd8_2 + build_number: 2 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/brotli-1.1.0-hb9d3cd8_2.conda + sha256: fcb0b5b28ba7492093e54f3184435144e074dfceab27ac8e6a9457e736565b0b + md5: 98514fe74548d768907ce7a13f680e8f + depends: + - __glibc >=2.17,<3.0.a0 + - brotli-bin 1.1.0 hb9d3cd8_2 + - libbrotlidec 1.1.0 hb9d3cd8_2 + - libbrotlienc 1.1.0 hb9d3cd8_2 + - libgcc >=13 + license: MIT + license_family: MIT + purls: [] + size: 19264 + timestamp: 1725267697072 +- kind: conda + name: brotli-bin + version: 1.1.0 + build: hb9d3cd8_2 + build_number: 2 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/brotli-bin-1.1.0-hb9d3cd8_2.conda + sha256: 261364d7445513b9a4debc345650fad13c627029bfc800655a266bf1e375bc65 + md5: c63b5e52939e795ba8d26e35d767a843 + depends: + - __glibc >=2.17,<3.0.a0 + - libbrotlidec 1.1.0 hb9d3cd8_2 + - libbrotlienc 1.1.0 hb9d3cd8_2 + - libgcc >=13 + license: MIT + license_family: MIT + purls: [] + size: 18881 + timestamp: 1725267688731 +- kind: conda + name: bzip2 + version: 1.0.8 + build: h4bc722e_7 + build_number: 7 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-h4bc722e_7.conda + sha256: 5ced96500d945fb286c9c838e54fa759aa04a7129c59800f0846b4335cee770d + md5: 62ee74e96c5ebb0af99386de58cf9553 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc-ng >=12 + license: bzip2-1.0.6 + license_family: BSD + purls: [] + size: 252783 + timestamp: 1720974456583 +- kind: conda + name: c-ares + version: 1.34.3 + build: heb4867d_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/c-ares-1.34.3-heb4867d_0.conda + sha256: 1015d731c05ef7de298834833d680b08dea58980b907f644345bd457f9498c99 + md5: 09a6c610d002e54e18353c06ef61a253 + depends: + - __glibc >=2.28,<3.0.a0 + - libgcc >=13 + license: MIT + license_family: MIT + purls: [] + size: 205575 + timestamp: 1731181837907 +- kind: conda + name: ca-certificates + version: 2024.8.30 + build: hbcca054_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/ca-certificates-2024.8.30-hbcca054_0.conda + sha256: afee721baa6d988e27fef1832f68d6f32ac8cc99cdf6015732224c2841a09cea + md5: c27d1c142233b5bc9ca570c6e2e0c244 + license: ISC + purls: [] + size: 159003 + timestamp: 1725018903918 +- kind: conda + name: cached-property + version: 1.5.2 + build: hd8ed1ab_1 + build_number: 1 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/cached-property-1.5.2-hd8ed1ab_1.tar.bz2 + sha256: 561e6660f26c35d137ee150187d89767c988413c978e1b712d53f27ddf70ea17 + md5: 9b347a7ec10940d3f7941ff6c460b551 + depends: + - cached_property >=1.5.2,<1.5.3.0a0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 4134 + timestamp: 1615209571450 +- kind: conda + name: cached_property + version: 1.5.2 + build: pyha770c72_1 + build_number: 1 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/cached_property-1.5.2-pyha770c72_1.tar.bz2 + sha256: 6dbf7a5070cc43d90a1e4c2ec0c541c69d8e30a0e25f50ce9f6e4a432e42c5d7 + md5: 576d629e47797577ab0f1b351297ef4a + depends: + - python >=3.6 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/cached-property?source=hash-mapping + size: 11065 + timestamp: 1615209567874 +- kind: conda + name: cachetools + version: 5.5.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/cachetools-5.5.0-pyhd8ed1ab_0.conda + sha256: 0abdbbfc2e9c21079a943f42a2dcd950b1a8093ec474fc017e83da0ec4e6cbf4 + md5: 5bad039db72bd8f134a5cff3ebaa190d + depends: + - python >=3.7 + license: MIT + license_family: MIT + purls: + - pkg:pypi/cachetools?source=hash-mapping + size: 14727 + timestamp: 1724028288793 +- kind: conda + name: cairo + version: 1.18.0 + build: hebfffa5_3 + build_number: 3 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/cairo-1.18.0-hebfffa5_3.conda + sha256: aee5b9e6ef71cdfb2aee9beae3ea91910ca761c01c0ef32052e3f94a252fa173 + md5: fceaedf1cdbcb02df9699a0d9b005292 + depends: + - __glibc >=2.17,<3.0.a0 + - fontconfig >=2.14.2,<3.0a0 + - fonts-conda-ecosystem + - freetype >=2.12.1,<3.0a0 + - icu >=75.1,<76.0a0 + - libgcc-ng >=12 + - libglib >=2.80.3,<3.0a0 + - libpng >=1.6.43,<1.7.0a0 + - libstdcxx-ng >=12 + - libxcb >=1.16,<2.0.0a0 + - libzlib >=1.3.1,<2.0a0 + - pixman >=0.43.2,<1.0a0 + - xorg-libice >=1.1.1,<2.0a0 + - xorg-libsm >=1.2.4,<2.0a0 + - xorg-libx11 >=1.8.9,<2.0a0 + - xorg-libxext >=1.3.4,<2.0a0 + - xorg-libxrender >=0.9.11,<0.10.0a0 + - zlib + license: LGPL-2.1-only or MPL-1.1 + purls: [] + size: 983604 + timestamp: 1721138900054 +- kind: conda + name: certifi + version: 2024.8.30 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/certifi-2024.8.30-pyhd8ed1ab_0.conda + sha256: 7020770df338c45ac6b560185956c32f0a5abf4b76179c037f115fc7d687819f + md5: 12f7d00853807b0531775e9be891cb11 + depends: + - python >=3.7 + license: ISC + purls: + - pkg:pypi/certifi?source=hash-mapping + size: 163752 + timestamp: 1725278204397 +- kind: pypi + name: chex + version: 0.1.87 + url: https://files.pythonhosted.org/packages/46/dd/c1ff2eb8fbf95a8ca804abb1cc3ce70b283ee7b4bc653c3abac245670400/chex-0.1.87-py3-none-any.whl + sha256: ce536475661fd96d21be0c1728ecdbedd03f8ff950c662dfc338c92ea782cb16 + requires_dist: + - absl-py>=0.9.0 + - typing-extensions>=4.2.0 + - jax>=0.4.27 + - jaxlib>=0.4.27 + - numpy>=1.24.1 + - toolz>=0.9.0 + - setuptools ; python_full_version >= '3.12' + requires_python: '>=3.9' +- kind: conda + name: cloudpickle + version: 3.1.0 + build: pyhd8ed1ab_1 + build_number: 1 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/cloudpickle-3.1.0-pyhd8ed1ab_1.conda + sha256: 5a33d0d3ef33121c546eaf78b3dac2141fc4d30bbaeb3959bbc66fcd5e99ced6 + md5: c88ca2bb7099167912e3b26463fff079 + depends: + - python >=3.8 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/cloudpickle?source=hash-mapping + size: 25952 + timestamp: 1729059365471 +- kind: conda + name: colorama + version: 0.4.6 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_0.tar.bz2 + sha256: 2c1b2e9755ce3102bca8d69e8f26e4f087ece73f50418186aee7c74bef8e1698 + md5: 3faab06a954c2a04039983f2c4a50d99 + depends: + - python >=3.7 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/colorama?source=hash-mapping + size: 25170 + timestamp: 1666700778190 +- kind: conda + name: cons + version: 0.4.6 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/cons-0.4.6-pyhd8ed1ab_0.conda + sha256: d814c65f7f9c9f48658a4499b93fcb99a6f468768751912e79b7af8283c841c9 + md5: 38c162ffeb9a31493d0ef33c09a5ba9f + depends: + - logical-unification >=0.4.1 + - python >=3.6 + license: LGPL-3.0-only + license_family: LGPL + purls: + - pkg:pypi/cons?source=hash-mapping + size: 14401 + timestamp: 1687647866301 +- kind: conda + name: contourpy + version: 1.3.1 + build: py312h68727a3_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/contourpy-1.3.1-py312h68727a3_0.conda + sha256: e977af50b844b5b8cfec358131a4e923f0aa718e8334321cf8d84f5093576259 + md5: f5fbba0394ee45e9a64a73c2a994126a + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - libstdcxx >=13 + - numpy >=1.23 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/contourpy?source=hash-mapping + size: 276332 + timestamp: 1731428454756 +- kind: conda + name: cycler + version: 0.12.1 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/cycler-0.12.1-pyhd8ed1ab_0.conda + sha256: f221233f21b1d06971792d491445fd548224641af9443739b4b7b6d5d72954a8 + md5: 5cd86562580f274031ede6aa6aa24441 + depends: + - python >=3.8 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/cycler?source=hash-mapping + size: 13458 + timestamp: 1696677888423 +- kind: pypi + name: dllist + version: 1.2.0 + url: https://files.pythonhosted.org/packages/e9/59/f189b03d743364a350c972b89fe08a6db5bbbdc5f1ea6b604b3eee0a7967/dllist-1.2.0-py3-none-any.whl + sha256: f2ca5fd60d12161b6a472bc340bbae5de53ddd40c5923d9df84e85170b9a8629 + requires_dist: + - pytest ; extra == 'test' + - pytest-cov ; extra == 'test' + requires_python: '>=3.8' +- kind: pypi + name: equinox + version: 0.11.8 + url: https://files.pythonhosted.org/packages/15/9f/3be7f03bf66c8d7d2956b727d984595e4af899f3c15ef2c653029008bf3b/equinox-0.11.8-py3-none-any.whl + sha256: 552292b473956693e8e8973bdae9b58aaec54fd48e192921beb82995e3a9c995 + requires_dist: + - jax>=0.4.13,!=0.4.27 + - jaxtyping>=0.2.20 + - typing-extensions>=4.5.0 + requires_python: '>=3.9' +- kind: pypi + name: etils + version: 1.10.0 + url: https://files.pythonhosted.org/packages/1f/e4/0826dfde2db3fb3a34954323a84d0e6b6fdbc7eb5278c84159c6d43290ac/etils-1.10.0-py3-none-any.whl + sha256: 0777fe60a234b4c65ca53470fc64f2dd2d0c6bca7fcc623fdaa8d7fa5a317098 + requires_dist: + - etils[array-types] ; extra == 'all' + - etils[eapp] ; extra == 'all' + - etils[ecolab] ; extra == 'all' + - etils[edc] ; extra == 'all' + - etils[enp] ; extra == 'all' + - etils[epath] ; extra == 'all' + - etils[epath-gcs] ; extra == 'all' + - etils[epath-s3] ; extra == 'all' + - etils[epy] ; extra == 'all' + - etils[etqdm] ; extra == 'all' + - etils[etree] ; extra == 'all' + - etils[etree-dm] ; extra == 'all' + - etils[etree-jax] ; extra == 'all' + - etils[etree-tf] ; extra == 'all' + - etils[enp] ; extra == 'array-types' + - pytest ; extra == 'dev' + - pytest-subtests ; extra == 'dev' + - pytest-xdist ; extra == 'dev' + - pyink ; extra == 'dev' + - pylint>=2.6.0 ; extra == 'dev' + - chex ; extra == 'dev' + - fiddle ; extra == 'dev' + - torch ; extra == 'dev' + - optree ; extra == 'dev' + - tensorflow-datasets ; extra == 'dev' + - pydantic ; extra == 'dev' + - sphinx-apitree[ext] ; extra == 'docs' + - etils[dev,all] ; extra == 'docs' + - absl-py ; extra == 'eapp' + - simple-parsing ; extra == 'eapp' + - etils[epy] ; extra == 'eapp' + - jupyter ; extra == 'ecolab' + - numpy ; extra == 'ecolab' + - mediapy ; extra == 'ecolab' + - packaging ; extra == 'ecolab' + - protobuf ; extra == 'ecolab' + - etils[enp] ; extra == 'ecolab' + - etils[epy] ; extra == 'ecolab' + - etils[etree] ; extra == 'ecolab' + - etils[epy] ; extra == 'edc' + - numpy ; extra == 'enp' + - etils[epy] ; extra == 'enp' + - fsspec ; extra == 'epath' + - importlib-resources ; extra == 'epath' + - typing-extensions ; extra == 'epath' + - zipp ; extra == 'epath' + - etils[epy] ; extra == 'epath' + - gcsfs ; extra == 'epath-gcs' + - etils[epath] ; extra == 'epath-gcs' + - s3fs ; extra == 'epath-s3' + - etils[epath] ; extra == 'epath-s3' + - typing-extensions ; extra == 'epy' + - absl-py ; extra == 'etqdm' + - tqdm ; extra == 'etqdm' + - etils[epy] ; extra == 'etqdm' + - etils[array-types] ; extra == 'etree' + - etils[epy] ; extra == 'etree' + - etils[enp] ; extra == 'etree' + - etils[etqdm] ; extra == 'etree' + - dm-tree ; extra == 'etree-dm' + - etils[etree] ; extra == 'etree-dm' + - jax[cpu] ; extra == 'etree-jax' + - etils[etree] ; extra == 'etree-jax' + - tensorflow ; extra == 'etree-tf' + - etils[etree] ; extra == 'etree-tf' + - etils[ecolab] ; extra == 'lazy-imports' + requires_python: '>=3.10' +- kind: conda + name: etuples + version: 0.3.9 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/etuples-0.3.9-pyhd8ed1ab_0.conda + sha256: 7e0742833d2348f4b0607575c98b9d05e3fa323d265bb57f787d410e6970111d + md5: bc1fc711e8ec404bd6109ab4eb0e4a67 + depends: + - cons + - multipledispatch + - python >=3.6 + license: Apache-2.0 + license_family: APACHE + purls: + - pkg:pypi/etuples?source=hash-mapping + size: 17451 + timestamp: 1684304361743 +- kind: conda + name: exceptiongroup + version: 1.2.2 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.2.2-pyhd8ed1ab_0.conda + sha256: e0edd30c4b7144406bb4da975e6bb97d6bc9c0e999aa4efe66ae108cada5d5b5 + md5: d02ae936e42063ca46af6cdad2dbd1e0 + depends: + - python >=3.7 + license: MIT and PSF-2.0 + purls: + - pkg:pypi/exceptiongroup?source=hash-mapping + size: 20418 + timestamp: 1720869435725 +- kind: conda + name: filelock + version: 3.16.1 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/filelock-3.16.1-pyhd8ed1ab_0.conda + sha256: 1da766da9dba05091af87977922fe60dc7464091a9ccffb3765d403189d39be4 + md5: 916f8ec5dd4128cd5f207a3c4c07b2c6 + depends: + - python >=3.7 + license: Unlicense + purls: + - pkg:pypi/filelock?source=hash-mapping + size: 17357 + timestamp: 1726613593584 +- kind: pypi + name: flowjax + version: 16.0.0 + url: git+https://github.com/aseyboldt/flowjax.git@1c282f2ded78e81c7ce6a96f61523a9f18bf8edc + requires_dist: + - jax>=0.4.16 + - equinox>=0.10 + - jaxtyping + - tqdm + - optax + - paramax + - pytest ; extra == 'dev' + - beartype ; extra == 'dev' + - ruff ; extra == 'dev' + - sphinx ; extra == 'dev' + - sphinx-book-theme ; extra == 'dev' + - sphinx-copybutton ; extra == 'dev' + - sphinx-autodoc-typehints ; extra == 'dev' + - nbsphinx ; extra == 'dev' + - ipython ; extra == 'dev' + - numpyro ; extra == 'dev' + requires_python: '>=3.10' +- kind: conda + name: font-ttf-dejavu-sans-mono + version: '2.37' + build: hab24e00_0 + subdir: noarch + noarch: generic + url: https://conda.anaconda.org/conda-forge/noarch/font-ttf-dejavu-sans-mono-2.37-hab24e00_0.tar.bz2 + sha256: 58d7f40d2940dd0a8aa28651239adbf5613254df0f75789919c4e6762054403b + md5: 0c96522c6bdaed4b1566d11387caaf45 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 397370 + timestamp: 1566932522327 +- kind: conda + name: font-ttf-inconsolata + version: '3.000' + build: h77eed37_0 + subdir: noarch + noarch: generic + url: https://conda.anaconda.org/conda-forge/noarch/font-ttf-inconsolata-3.000-h77eed37_0.tar.bz2 + sha256: c52a29fdac682c20d252facc50f01e7c2e7ceac52aa9817aaf0bb83f7559ec5c + md5: 34893075a5c9e55cdafac56607368fc6 + license: OFL-1.1 + license_family: Other + purls: [] + size: 96530 + timestamp: 1620479909603 +- kind: conda + name: font-ttf-source-code-pro + version: '2.038' + build: h77eed37_0 + subdir: noarch + noarch: generic + url: https://conda.anaconda.org/conda-forge/noarch/font-ttf-source-code-pro-2.038-h77eed37_0.tar.bz2 + sha256: 00925c8c055a2275614b4d983e1df637245e19058d79fc7dd1a93b8d9fb4b139 + md5: 4d59c254e01d9cde7957100457e2d5fb + license: OFL-1.1 + license_family: Other + purls: [] + size: 700814 + timestamp: 1620479612257 +- kind: conda + name: font-ttf-ubuntu + version: '0.83' + build: h77eed37_3 + build_number: 3 + subdir: noarch + noarch: generic + url: https://conda.anaconda.org/conda-forge/noarch/font-ttf-ubuntu-0.83-h77eed37_3.conda + sha256: 2821ec1dc454bd8b9a31d0ed22a7ce22422c0aef163c59f49dfdf915d0f0ca14 + md5: 49023d73832ef61042f6a237cb2687e7 + license: LicenseRef-Ubuntu-Font-Licence-Version-1.0 + license_family: Other + purls: [] + size: 1620504 + timestamp: 1727511233259 +- kind: conda + name: fontconfig + version: 2.15.0 + build: h7e30c49_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/fontconfig-2.15.0-h7e30c49_1.conda + sha256: 7093aa19d6df5ccb6ca50329ef8510c6acb6b0d8001191909397368b65b02113 + md5: 8f5b0b297b59e1ac160ad4beec99dbee + depends: + - __glibc >=2.17,<3.0.a0 + - freetype >=2.12.1,<3.0a0 + - libexpat >=2.6.3,<3.0a0 + - libgcc >=13 + - libuuid >=2.38.1,<3.0a0 + - libzlib >=1.3.1,<2.0a0 + license: MIT + license_family: MIT + purls: [] + size: 265599 + timestamp: 1730283881107 +- kind: conda + name: fonts-conda-ecosystem + version: '1' + build: '0' + subdir: noarch + noarch: generic + url: https://conda.anaconda.org/conda-forge/noarch/fonts-conda-ecosystem-1-0.tar.bz2 + sha256: a997f2f1921bb9c9d76e6fa2f6b408b7fa549edd349a77639c9fe7a23ea93e61 + md5: fee5683a3f04bd15cbd8318b096a27ab + depends: + - fonts-conda-forge + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 3667 + timestamp: 1566974674465 +- kind: conda + name: fonts-conda-forge + version: '1' + build: '0' + subdir: noarch + noarch: generic + url: https://conda.anaconda.org/conda-forge/noarch/fonts-conda-forge-1-0.tar.bz2 + sha256: 53f23a3319466053818540bcdf2091f253cbdbab1e0e9ae7b9e509dcaa2a5e38 + md5: f766549260d6815b0c52253f1fb1bb29 + depends: + - font-ttf-dejavu-sans-mono + - font-ttf-inconsolata + - font-ttf-source-code-pro + - font-ttf-ubuntu + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 4102 + timestamp: 1566932280397 +- kind: conda + name: fonttools + version: 4.54.1 + build: py312h178313f_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/fonttools-4.54.1-py312h178313f_1.conda + sha256: 45f405d6d1ef528226c20b681373db0bdb79cc70fec1e495003247b0d3d00140 + md5: bbbf5fa5cab622c33907bc8d7eeea9f7 + depends: + - __glibc >=2.17,<3.0.a0 + - brotli + - libgcc >=13 + - munkres + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + - unicodedata2 >=15.1.0 + license: MIT + license_family: MIT + purls: + - pkg:pypi/fonttools?source=hash-mapping + size: 2827447 + timestamp: 1729530553018 +- kind: conda + name: freetype + version: 2.12.1 + build: h267a509_2 + build_number: 2 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/freetype-2.12.1-h267a509_2.conda + sha256: b2e3c449ec9d907dd4656cb0dc93e140f447175b125a3824b31368b06c666bb6 + md5: 9ae35c3d96db2c94ce0cef86efdfa2cb + depends: + - libgcc-ng >=12 + - libpng >=1.6.39,<1.7.0a0 + - libzlib >=1.2.13,<2.0.0a0 + license: GPL-2.0-only OR FTL + purls: [] + size: 634972 + timestamp: 1694615932610 +- kind: conda + name: fribidi + version: 1.0.10 + build: h36c2ea0_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/fribidi-1.0.10-h36c2ea0_0.tar.bz2 + sha256: 5d7b6c0ee7743ba41399e9e05a58ccc1cfc903942e49ff6f677f6e423ea7a627 + md5: ac7bc6a654f8f41b352b38f4051135f8 + depends: + - libgcc-ng >=7.5.0 + license: LGPL-2.1 + purls: [] + size: 114383 + timestamp: 1604416621168 +- kind: conda + name: gcc + version: 13.3.0 + build: h9576a4e_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/gcc-13.3.0-h9576a4e_1.conda + sha256: d0161362430183cbdbc3db9cf95f9a1af1793027f3ab8755b3d3586deb28bf84 + md5: 606924335b5bcdf90e9aed9a2f5d22ed + depends: + - gcc_impl_linux-64 13.3.0.* + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 53864 + timestamp: 1724801360210 +- kind: conda + name: gcc_impl_linux-64 + version: 13.3.0 + build: hfea6d02_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/gcc_impl_linux-64-13.3.0-hfea6d02_1.conda + sha256: 998ade1d487e93fc8a7a16b90e2af69ebb227355bf4646488661f7ae5887873c + md5: 0d043dbc126b64f79d915a0e96d3a1d5 + depends: + - binutils_impl_linux-64 >=2.40 + - libgcc >=13.3.0 + - libgcc-devel_linux-64 13.3.0 h84ea5a7_101 + - libgomp >=13.3.0 + - libsanitizer 13.3.0 heb74ff8_1 + - libstdcxx >=13.3.0 + - sysroot_linux-64 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 67464415 + timestamp: 1724801227937 +- kind: conda + name: gcc_linux-64 + version: 13.3.0 + build: hc28eda2_5 + build_number: 5 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/gcc_linux-64-13.3.0-hc28eda2_5.conda + sha256: 6778f93159cfd967320f60473447b19e320f303378d4c9da0784caa40073fafa + md5: ffbadbbc3345d9a315ba31c8a9188d4c + depends: + - binutils_linux-64 + - gcc_impl_linux-64 13.3.0.* + - sysroot_linux-64 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 31909 + timestamp: 1729281963691 +- kind: conda + name: gdk-pixbuf + version: 2.42.12 + build: hb9ae30d_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/gdk-pixbuf-2.42.12-hb9ae30d_0.conda + sha256: d5283b95a8d49dcd88d29b360d8b38694aaa905d968d156d72ab71d32b38facb + md5: 201db6c2d9a3c5e46573ac4cb2e92f4f + depends: + - libgcc-ng >=12 + - libglib >=2.80.2,<3.0a0 + - libjpeg-turbo >=3.0.0,<4.0a0 + - libpng >=1.6.43,<1.7.0a0 + - libtiff >=4.6.0,<4.8.0a0 + license: LGPL-2.1-or-later + license_family: LGPL + purls: [] + size: 528149 + timestamp: 1715782983957 +- kind: conda + name: graphite2 + version: 1.3.13 + build: h59595ed_1003 + build_number: 1003 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/graphite2-1.3.13-h59595ed_1003.conda + sha256: 0595b009f20f8f60f13a6398e7cdcbd2acea5f986633adcf85f5a2283c992add + md5: f87c7b7c2cb45f323ffbce941c78ab7c + depends: + - libgcc-ng >=12 + - libstdcxx-ng >=12 + license: LGPL-2.0-or-later + license_family: LGPL + purls: [] + size: 96855 + timestamp: 1711634169756 +- kind: conda + name: graphviz + version: 12.0.0 + build: hba01fac_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/graphviz-12.0.0-hba01fac_0.conda + sha256: 2eb794ae1de42b688f89811113ae3dcb63698272ee8f87029abce5f77c742c2a + md5: 953e31ea00d46beb7e64a79fc291ec44 + depends: + - __glibc >=2.17,<3.0.a0 + - cairo >=1.18.0,<2.0a0 + - fonts-conda-ecosystem + - gdk-pixbuf >=2.42.12,<3.0a0 + - gtk2 + - gts >=0.7.6,<0.8.0a0 + - libexpat >=2.6.2,<3.0a0 + - libgcc-ng >=12 + - libgd >=2.3.3,<2.4.0a0 + - libglib >=2.80.3,<3.0a0 + - librsvg >=2.58.2,<3.0a0 + - libstdcxx-ng >=12 + - libwebp-base >=1.4.0,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + - pango >=1.50.14,<2.0a0 + license: EPL-1.0 + license_family: Other + purls: [] + size: 2303111 + timestamp: 1722673717117 +- kind: conda + name: gtk2 + version: 2.24.33 + build: h6470451_5 + build_number: 5 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/gtk2-2.24.33-h6470451_5.conda + sha256: 16644d036321b32635369c183502974c8b989fa516c313bd379f9aa4adcdf642 + md5: 1483ba046164be27df7f6eddbcec3a12 + depends: + - __glibc >=2.17,<3.0.a0 + - atk-1.0 >=2.38.0 + - cairo >=1.18.0,<2.0a0 + - fontconfig >=2.14.2,<3.0a0 + - fonts-conda-ecosystem + - freetype >=2.12.1,<3.0a0 + - gdk-pixbuf >=2.42.12,<3.0a0 + - harfbuzz >=9.0.0,<10.0a0 + - libgcc-ng >=12 + - libglib >=2.80.3,<3.0a0 + - pango >=1.54.0,<2.0a0 + - xorg-libx11 >=1.8.9,<2.0a0 + - xorg-libxext >=1.3.4,<2.0a0 + - xorg-libxrender >=0.9.11,<0.10.0a0 + license: LGPL-2.1-or-later + purls: [] + size: 6501561 + timestamp: 1721285940408 +- kind: conda + name: gts + version: 0.7.6 + build: h977cf35_4 + build_number: 4 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/gts-0.7.6-h977cf35_4.conda + sha256: b5cd16262fefb836f69dc26d879b6508d29f8a5c5948a966c47fe99e2e19c99b + md5: 4d8df0b0db060d33c9a702ada998a8fe + depends: + - libgcc-ng >=12 + - libglib >=2.76.3,<3.0a0 + - libstdcxx-ng >=12 + license: LGPL-2.0-or-later + license_family: LGPL + purls: [] + size: 318312 + timestamp: 1686545244763 +- kind: conda + name: gxx + version: 13.3.0 + build: h9576a4e_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/gxx-13.3.0-h9576a4e_1.conda + sha256: 5446f5d1d609d996579f706d2020e83ef48e086d943bfeef7ab807ea246888a0 + md5: 209182ca6b20aeff62f442e843961d81 + depends: + - gcc 13.3.0.* + - gxx_impl_linux-64 13.3.0.* + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 53338 + timestamp: 1724801498389 +- kind: conda + name: gxx_impl_linux-64 + version: 13.3.0 + build: hdbfa832_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/gxx_impl_linux-64-13.3.0-hdbfa832_1.conda + sha256: 746dff24bb1efc89ab0ec108838d0711683054e3bbbcb94d042943410a98eca1 + md5: 806367e23a0a6ad21e51875b34c57d7e + depends: + - gcc_impl_linux-64 13.3.0 hfea6d02_1 + - libstdcxx-devel_linux-64 13.3.0 h84ea5a7_101 + - sysroot_linux-64 + - tzdata + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 13337720 + timestamp: 1724801455825 +- kind: conda + name: gxx_linux-64 + version: 13.3.0 + build: h6834431_5 + build_number: 5 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/gxx_linux-64-13.3.0-h6834431_5.conda + sha256: 4ca452f7abc607d9f0ad45a7fa8c7d8436fca05b9cc6715d1ccd239bed90833b + md5: 81ddb2db98fbe3031aa7ebbbf8bb3ffd + depends: + - binutils_linux-64 + - gcc_linux-64 13.3.0 hc28eda2_5 + - gxx_impl_linux-64 13.3.0.* + - sysroot_linux-64 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 30284 + timestamp: 1729281975715 +- kind: conda + name: h5netcdf + version: 1.4.1 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/h5netcdf-1.4.1-pyhd8ed1ab_0.conda + sha256: e8a3ff94dd511e7f5098f09f75b44487a40241946640a29e14025e8094f0ca6e + md5: 5d0c9dc3425aadc346a969de5f2acc89 + depends: + - h5py + - packaging + - python >=3.9 + license: BSD-3-Clause + purls: + - pkg:pypi/h5netcdf?source=hash-mapping + size: 47177 + timestamp: 1731517710280 +- kind: conda + name: h5py + version: 3.12.1 + build: nompi_py312hedeef09_102 + build_number: 102 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/h5py-3.12.1-nompi_py312hedeef09_102.conda + sha256: 5acc7c221e792c7aa9bbb2c57d5e0104d7a6e81c2cd29a47a77d574552cd4fd0 + md5: ee52559d324594141ce369c527d6d029 + depends: + - __glibc >=2.17,<3.0.a0 + - cached-property + - hdf5 >=1.14.3,<1.14.4.0a0 + - libgcc >=13 + - numpy >=1.19,<3 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/h5py?source=hash-mapping + size: 1380838 + timestamp: 1729617970564 +- kind: conda + name: harfbuzz + version: 9.0.0 + build: hda332d3_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/harfbuzz-9.0.0-hda332d3_1.conda + sha256: 973afa37840b4e55e2540018902255cfb0d953aaed6353bb83a4d120f5256767 + md5: 76b32dcf243444aea9c6b804bcfa40b8 + depends: + - __glibc >=2.17,<3.0.a0 + - cairo >=1.18.0,<2.0a0 + - freetype >=2.12.1,<3.0a0 + - graphite2 + - icu >=75.1,<76.0a0 + - libgcc-ng >=12 + - libglib >=2.80.3,<3.0a0 + - libstdcxx-ng >=12 + license: MIT + license_family: MIT + purls: [] + size: 1603653 + timestamp: 1721186240105 +- kind: conda + name: hdf5 + version: 1.14.3 + build: nompi_hdf9ad27_105 + build_number: 105 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/hdf5-1.14.3-nompi_hdf9ad27_105.conda + sha256: 2278fa07da6f96e807d402cd55480624d67d2dee202191aaaf278ce5ab23605a + md5: 7e1729554e209627636a0f6fabcdd115 + depends: + - libaec >=1.1.3,<2.0a0 + - libcurl >=8.8.0,<9.0a0 + - libgcc-ng >=12 + - libgfortran-ng + - libgfortran5 >=12.3.0 + - libstdcxx-ng >=12 + - libzlib >=1.2.13,<2.0a0 + - openssl >=3.3.1,<4.0a0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 3911675 + timestamp: 1717587866574 +- kind: conda + name: icu + version: '75.1' + build: he02047a_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/icu-75.1-he02047a_0.conda + sha256: 71e750d509f5fa3421087ba88ef9a7b9be11c53174af3aa4d06aff4c18b38e8e + md5: 8b189310083baabfb622af68fd9d3ae3 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc-ng >=12 + - libstdcxx-ng >=12 + license: MIT + license_family: MIT + purls: [] + size: 12129203 + timestamp: 1720853576813 +- kind: conda + name: importlib-metadata + version: 8.5.0 + build: pyha770c72_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.5.0-pyha770c72_0.conda + sha256: 7194700ce1a5ad2621fd68e894dd8c1ceaff9a38723e6e0e5298fdef13017b1c + md5: 54198435fce4d64d8a89af22573012a8 + depends: + - python >=3.8 + - zipp >=0.5 + license: Apache-2.0 + license_family: APACHE + purls: + - pkg:pypi/importlib-metadata?source=hash-mapping + size: 28646 + timestamp: 1726082927916 +- kind: conda + name: iniconfig + version: 2.0.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_0.conda + sha256: 38740c939b668b36a50ef455b077e8015b8c9cf89860d421b3fff86048f49666 + md5: f800d2da156d08e289b14e87e43c1ae5 + depends: + - python >=3.7 + license: MIT + license_family: MIT + purls: + - pkg:pypi/iniconfig?source=hash-mapping + size: 11101 + timestamp: 1673103208955 +- kind: conda + name: jax + version: 0.4.34 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/jax-0.4.34-pyhd8ed1ab_0.conda + sha256: da3880afc35042b92e0ad214beee372e41162da374dfaa8b1164db1dcee671b2 + md5: f0d3c57355acf3f06d93672e57c0c1e8 + depends: + - importlib-metadata >=4.6 + - jaxlib >=0.4.34,<=0.4.34 + - ml_dtypes >=0.2.0 + - numpy >=1.26 + - opt-einsum + - python >=3.10 + - scipy >=1.11.1 + constrains: + - cudnn >=9.2.1.18 + license: Apache-2.0 + license_family: APACHE + purls: + - pkg:pypi/jax?source=hash-mapping + size: 1421248 + timestamp: 1729336456855 +- kind: conda + name: jaxlib + version: 0.4.34 + build: cpu_py312haec0345_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/jaxlib-0.4.34-cpu_py312haec0345_0.conda + sha256: 8e2dce1d39ccb4e6883444f71b7155168c0612d9d086b58616578448aeb33afe + md5: 08f587f0f6505671c7715163e18b6f3a + depends: + - __glibc >=2.17,<3.0.a0 + - libabseil * cxx17* + - libabseil >=20240722.0,<20240723.0a0 + - libgcc >=13 + - libgrpc >=1.65.5,<1.66.0a0 + - libstdcxx >=13 + - libzlib >=1.3.1,<2.0a0 + - ml_dtypes >=0.2.0 + - numpy >=1.19,<3 + - openssl >=3.3.2,<4.0a0 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + - scipy >=1.9 + constrains: + - jax >=0.4.34 + license: Apache-2.0 + license_family: APACHE + purls: + - pkg:pypi/jaxlib?source=hash-mapping + size: 57258872 + timestamp: 1729096396952 +- kind: pypi + name: jaxtyping + version: 0.2.34 + url: https://files.pythonhosted.org/packages/56/ae/220537f80eb82ae43a299de31edb2a91a28b8c5fb8046e9ff853ec7763cd/jaxtyping-0.2.34-py3-none-any.whl + sha256: 2f81fb6d1586e497a6ea2d28c06dcab37b108a096cbb36ea3fe4fa2e1c1f32e5 + requires_dist: + - typeguard==2.13.3 + requires_python: ~=3.9 +- kind: conda + name: kernel-headers_linux-64 + version: 3.10.0 + build: he073ed8_18 + build_number: 18 + subdir: noarch + noarch: generic + url: https://conda.anaconda.org/conda-forge/noarch/kernel-headers_linux-64-3.10.0-he073ed8_18.conda + sha256: a922841ad80bd7b222502e65c07ecb67e4176c4fa5b03678a005f39fcc98be4b + md5: ad8527bf134a90e1c9ed35fa0b64318c + constrains: + - sysroot_linux-64 ==2.17 + license: LGPL-2.0-or-later AND LGPL-2.0-or-later WITH exceptions AND GPL-2.0-or-later AND MPL-2.0 + license_family: GPL + purls: [] + size: 943486 + timestamp: 1729794504440 +- kind: conda + name: keyutils + version: 1.6.1 + build: h166bdaf_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/keyutils-1.6.1-h166bdaf_0.tar.bz2 + sha256: 150c05a6e538610ca7c43beb3a40d65c90537497a4f6a5f4d15ec0451b6f5ebb + md5: 30186d27e2c9fa62b45fb1476b7200e3 + depends: + - libgcc-ng >=10.3.0 + license: LGPL-2.1-or-later + purls: [] + size: 117831 + timestamp: 1646151697040 +- kind: conda + name: kiwisolver + version: 1.4.7 + build: py312h68727a3_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/kiwisolver-1.4.7-py312h68727a3_0.conda + sha256: d752c53071ee5d712baa9742dd1629e60388c5ce4ab11d4e73a1690443e41769 + md5: 444266743652a4f1538145e9362f6d3b + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - libstdcxx >=13 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/kiwisolver?source=hash-mapping + size: 70922 + timestamp: 1725459412788 +- kind: conda + name: krb5 + version: 1.21.3 + build: h659f571_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/krb5-1.21.3-h659f571_0.conda + sha256: 99df692f7a8a5c27cd14b5fb1374ee55e756631b9c3d659ed3ee60830249b238 + md5: 3f43953b7d3fb3aaa1d0d0723d91e368 + depends: + - keyutils >=1.6.1,<2.0a0 + - libedit >=3.1.20191231,<3.2.0a0 + - libedit >=3.1.20191231,<4.0a0 + - libgcc-ng >=12 + - libstdcxx-ng >=12 + - openssl >=3.3.1,<4.0a0 + license: MIT + license_family: MIT + purls: [] + size: 1370023 + timestamp: 1719463201255 +- kind: conda + name: lcms2 + version: '2.16' + build: hb7c19ff_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/lcms2-2.16-hb7c19ff_0.conda + sha256: 5c878d104b461b7ef922abe6320711c0d01772f4cd55de18b674f88547870041 + md5: 51bb7010fc86f70eee639b4bb7a894f5 + depends: + - libgcc-ng >=12 + - libjpeg-turbo >=3.0.0,<4.0a0 + - libtiff >=4.6.0,<4.8.0a0 + license: MIT + license_family: MIT + purls: [] + size: 245247 + timestamp: 1701647787198 +- kind: conda + name: ld_impl_linux-64 + version: '2.43' + build: h712a8e2_2 + build_number: 2 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.43-h712a8e2_2.conda + sha256: 7c91cea91b13f4314d125d1bedb9d03a29ebbd5080ccdea70260363424646dbe + md5: 048b02e3962f066da18efe3a21b77672 + depends: + - __glibc >=2.17,<3.0.a0 + constrains: + - binutils_impl_linux-64 2.43 + license: GPL-3.0-only + license_family: GPL + purls: [] + size: 669211 + timestamp: 1729655358674 +- kind: conda + name: lerc + version: 4.0.0 + build: h27087fc_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/lerc-4.0.0-h27087fc_0.tar.bz2 + sha256: cb55f36dcd898203927133280ae1dc643368af041a48bcf7c026acb7c47b0c12 + md5: 76bbff344f0134279f225174e9064c8f + depends: + - libgcc-ng >=12 + - libstdcxx-ng >=12 + license: Apache-2.0 + license_family: Apache + purls: [] + size: 281798 + timestamp: 1657977462600 +- kind: conda + name: libabseil + version: '20240722.0' + build: cxx17_h5888daf_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libabseil-20240722.0-cxx17_h5888daf_1.conda + sha256: 8f91429091183c26950f1e7ffa730e8632f0627ba35d2fccd71df31628c9b4e5 + md5: e1f604644fe8d78e22660e2fec6756bc + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - libstdcxx >=13 + constrains: + - libabseil-static =20240722.0=cxx17* + - abseil-cpp =20240722.0 + license: Apache-2.0 + license_family: Apache + purls: [] + size: 1310521 + timestamp: 1727295454064 +- kind: conda + name: libaec + version: 1.1.3 + build: h59595ed_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libaec-1.1.3-h59595ed_0.conda + sha256: 2ef420a655528bca9d269086cf33b7e90d2f54ad941b437fb1ed5eca87cee017 + md5: 5e97e271911b8b2001a8b71860c32faa + depends: + - libgcc-ng >=12 + - libstdcxx-ng >=12 + license: BSD-2-Clause + license_family: BSD + purls: [] + size: 35446 + timestamp: 1711021212685 +- kind: conda + name: libblas + version: 3.9.0 + build: 25_linux64_openblas + build_number: 25 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libblas-3.9.0-25_linux64_openblas.conda + sha256: d6d12dc437d060f838820e9e61bf73baab651f91935ac594cf10beb9ef1b4450 + md5: 8ea26d42ca88ec5258802715fe1ee10b + depends: + - libopenblas >=0.3.28,<0.3.29.0a0 + - libopenblas >=0.3.28,<1.0a0 + constrains: + - liblapack 3.9.0 25_linux64_openblas + - libcblas 3.9.0 25_linux64_openblas + - blas * openblas + - liblapacke 3.9.0 25_linux64_openblas + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 15677 + timestamp: 1729642900350 +- kind: conda + name: libbrotlicommon + version: 1.1.0 + build: hb9d3cd8_2 + build_number: 2 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libbrotlicommon-1.1.0-hb9d3cd8_2.conda + sha256: d9db2de60ea917298e658143354a530e9ca5f9c63471c65cf47ab39fd2f429e3 + md5: 41b599ed2b02abcfdd84302bff174b23 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + license: MIT + license_family: MIT + purls: [] + size: 68851 + timestamp: 1725267660471 +- kind: conda + name: libbrotlidec + version: 1.1.0 + build: hb9d3cd8_2 + build_number: 2 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libbrotlidec-1.1.0-hb9d3cd8_2.conda + sha256: 2892d512cad096cb03f1b66361deeab58b64e15ba525d6592bb6d609e7045edf + md5: 9566f0bd264fbd463002e759b8a82401 + depends: + - __glibc >=2.17,<3.0.a0 + - libbrotlicommon 1.1.0 hb9d3cd8_2 + - libgcc >=13 + license: MIT + license_family: MIT + purls: [] + size: 32696 + timestamp: 1725267669305 +- kind: conda + name: libbrotlienc + version: 1.1.0 + build: hb9d3cd8_2 + build_number: 2 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libbrotlienc-1.1.0-hb9d3cd8_2.conda + sha256: 779f58174e99de3600e939fa46eddb453ec5d3c60bb46cdaa8b4c127224dbf29 + md5: 06f70867945ea6a84d35836af780f1de + depends: + - __glibc >=2.17,<3.0.a0 + - libbrotlicommon 1.1.0 hb9d3cd8_2 + - libgcc >=13 + license: MIT + license_family: MIT + purls: [] + size: 281750 + timestamp: 1725267679782 +- kind: conda + name: libcblas + version: 3.9.0 + build: 25_linux64_openblas + build_number: 25 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libcblas-3.9.0-25_linux64_openblas.conda + sha256: ab87b0477078837c91d9cda62a9faca18fba7c57cc77aa779ae24b3ac783b5dd + md5: 5dbd1b0fc0d01ec5e0e1fbe667281a11 + depends: + - libblas 3.9.0 25_linux64_openblas + constrains: + - liblapack 3.9.0 25_linux64_openblas + - blas * openblas + - liblapacke 3.9.0 25_linux64_openblas + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 15613 + timestamp: 1729642905619 +- kind: conda + name: libcurl + version: 8.10.1 + build: hbbe4b11_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libcurl-8.10.1-hbbe4b11_0.conda + sha256: 54e6114dfce566c3a22ad3b7b309657e3600cdb668398e95f1301360d5d52c99 + md5: 6e801c50a40301f6978c53976917b277 + depends: + - __glibc >=2.17,<3.0.a0 + - krb5 >=1.21.3,<1.22.0a0 + - libgcc >=13 + - libnghttp2 >=1.58.0,<2.0a0 + - libssh2 >=1.11.0,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + - openssl >=3.3.2,<4.0a0 + - zstd >=1.5.6,<1.6.0a0 + license: curl + license_family: MIT + purls: [] + size: 424900 + timestamp: 1726659794676 +- kind: conda + name: libdeflate + version: '1.22' + build: hb9d3cd8_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libdeflate-1.22-hb9d3cd8_0.conda + sha256: 780f0530a3adfc1497ba49d626931c6afc978c540e1abfde6ccd57128ded6ad6 + md5: b422943d5d772b7cc858b36ad2a92db5 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + license: MIT + license_family: MIT + purls: [] + size: 72242 + timestamp: 1728177071251 +- kind: conda + name: libedit + version: 3.1.20191231 + build: he28a2e2_2 + build_number: 2 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libedit-3.1.20191231-he28a2e2_2.tar.bz2 + sha256: a57d37c236d8f7c886e01656f4949d9dcca131d2a0728609c6f7fa338b65f1cf + md5: 4d331e44109e3f0e19b4cb8f9b82f3e1 + depends: + - libgcc-ng >=7.5.0 + - ncurses >=6.2,<7.0.0a0 + license: BSD-2-Clause + license_family: BSD + purls: [] + size: 123878 + timestamp: 1597616541093 +- kind: conda + name: libev + version: '4.33' + build: hd590300_2 + build_number: 2 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libev-4.33-hd590300_2.conda + sha256: 1cd6048169fa0395af74ed5d8f1716e22c19a81a8a36f934c110ca3ad4dd27b4 + md5: 172bf1cd1ff8629f2b1179945ed45055 + depends: + - libgcc-ng >=12 + license: BSD-2-Clause + license_family: BSD + purls: [] + size: 112766 + timestamp: 1702146165126 +- kind: conda + name: libexpat + version: 2.6.4 + build: h5888daf_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.6.4-h5888daf_0.conda + sha256: 56541b98447b58e52d824bd59d6382d609e11de1f8adf20b23143e353d2b8d26 + md5: db833e03127376d461e1e13e76f09b6c + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + constrains: + - expat 2.6.4.* + license: MIT + license_family: MIT + purls: [] + size: 73304 + timestamp: 1730967041968 +- kind: conda + name: libffi + version: 3.4.2 + build: h7f98852_5 + build_number: 5 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.4.2-h7f98852_5.tar.bz2 + sha256: ab6e9856c21709b7b517e940ae7028ae0737546122f83c2aa5d692860c3b149e + md5: d645c6d2ac96843a2bfaccd2d62b3ac3 + depends: + - libgcc-ng >=9.4.0 + license: MIT + license_family: MIT + purls: [] + size: 58292 + timestamp: 1636488182923 +- kind: conda + name: libgcc + version: 14.2.0 + build: h77fa898_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libgcc-14.2.0-h77fa898_1.conda + sha256: 53eb8a79365e58849e7b1a068d31f4f9e718dc938d6f2c03e960345739a03569 + md5: 3cb76c3f10d3bc7f1105b2fc9db984df + depends: + - _libgcc_mutex 0.1 conda_forge + - _openmp_mutex >=4.5 + constrains: + - libgomp 14.2.0 h77fa898_1 + - libgcc-ng ==14.2.0=*_1 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 848745 + timestamp: 1729027721139 +- kind: conda + name: libgcc-devel_linux-64 + version: 13.3.0 + build: h84ea5a7_101 + build_number: 101 + subdir: noarch + noarch: generic + url: https://conda.anaconda.org/conda-forge/noarch/libgcc-devel_linux-64-13.3.0-h84ea5a7_101.conda + sha256: 027cfb011328a108bc44f512a2dec6d954db85709e0b79b748c3392f85de0c64 + md5: 0ce69d40c142915ac9734bc6134e514a + depends: + - __unix + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 2598313 + timestamp: 1724801050802 +- kind: conda + name: libgcc-ng + version: 14.2.0 + build: h69a702a_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-14.2.0-h69a702a_1.conda + sha256: 3a76969c80e9af8b6e7a55090088bc41da4cffcde9e2c71b17f44d37b7cb87f7 + md5: e39480b9ca41323497b05492a63bc35b + depends: + - libgcc 14.2.0 h77fa898_1 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 54142 + timestamp: 1729027726517 +- kind: conda + name: libgd + version: 2.3.3 + build: hd3e95f3_10 + build_number: 10 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libgd-2.3.3-hd3e95f3_10.conda + sha256: b0fa27d4d09fb24750c04e89dbd0aee898dc028bde99e62621065a9bde43efe8 + md5: 30ee3a29c84cf7b842a8c5828c4b7c13 + depends: + - __glibc >=2.17,<3.0.a0 + - fontconfig >=2.14.2,<3.0a0 + - fonts-conda-ecosystem + - freetype >=2.12.1,<3.0a0 + - icu >=75.1,<76.0a0 + - libexpat >=2.6.2,<3.0a0 + - libgcc-ng >=12 + - libjpeg-turbo >=3.0.0,<4.0a0 + - libpng >=1.6.43,<1.7.0a0 + - libtiff >=4.6.0,<4.8.0a0 + - libwebp-base >=1.4.0,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + license: GD + license_family: BSD + purls: [] + size: 225113 + timestamp: 1722928278395 +- kind: conda + name: libgfortran + version: 14.2.0 + build: h69a702a_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libgfortran-14.2.0-h69a702a_1.conda + sha256: fc9e7f22a17faf74da904ebfc4d88699013d2992e55505e4aa0eb01770290977 + md5: f1fd30127802683586f768875127a987 + depends: + - libgfortran5 14.2.0 hd5240d6_1 + constrains: + - libgfortran-ng ==14.2.0=*_1 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 53997 + timestamp: 1729027752995 +- kind: conda + name: libgfortran-ng + version: 14.2.0 + build: h69a702a_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libgfortran-ng-14.2.0-h69a702a_1.conda + sha256: 423f1e2403f0c665748e42d335e421e53fd03c08d457cfb6f360d329d9459851 + md5: 0a7f4cd238267c88e5d69f7826a407eb + depends: + - libgfortran 14.2.0 h69a702a_1 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 54106 + timestamp: 1729027945817 +- kind: conda + name: libgfortran5 + version: 14.2.0 + build: hd5240d6_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libgfortran5-14.2.0-hd5240d6_1.conda + sha256: d149a37ca73611e425041f33b9d8dbed6e52ec506fe8cc1fc0ee054bddeb6d5d + md5: 9822b874ea29af082e5d36098d25427d + depends: + - libgcc >=14.2.0 + constrains: + - libgfortran 14.2.0 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 1462645 + timestamp: 1729027735353 +- kind: conda + name: libglib + version: 2.82.2 + build: h2ff4ddf_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libglib-2.82.2-h2ff4ddf_0.conda + sha256: 49ee9401d483a76423461c50dcd37f91d070efaec7e4dc2828d8cdd2ce694231 + md5: 13e8e54035ddd2b91875ba399f0f7c04 + depends: + - __glibc >=2.17,<3.0.a0 + - libffi >=3.4,<4.0a0 + - libgcc >=13 + - libiconv >=1.17,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + - pcre2 >=10.44,<10.45.0a0 + constrains: + - glib 2.82.2 *_0 + license: LGPL-2.1-or-later + purls: [] + size: 3931898 + timestamp: 1729191404130 +- kind: conda + name: libgomp + version: 14.2.0 + build: h77fa898_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libgomp-14.2.0-h77fa898_1.conda + sha256: 1911c29975ec99b6b906904040c855772ccb265a1c79d5d75c8ceec4ed89cd63 + md5: cc3573974587f12dda90d96e3e55a702 + depends: + - _libgcc_mutex 0.1 conda_forge + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 460992 + timestamp: 1729027639220 +- kind: conda + name: libgrpc + version: 1.65.5 + build: hf5c653b_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libgrpc-1.65.5-hf5c653b_0.conda + sha256: d279abd46262e817c7a00aeb4df9b5ed4de38130130b248e2c50875e982f30fa + md5: 3b0048cabc6815a4d8874a0240519d32 + depends: + - __glibc >=2.17,<3.0.a0 + - c-ares >=1.32.3,<2.0a0 + - libabseil * cxx17* + - libabseil >=20240722.0,<20240723.0a0 + - libgcc >=13 + - libprotobuf >=5.27.5,<5.27.6.0a0 + - libre2-11 >=2023.9.1 + - libstdcxx >=13 + - libzlib >=1.3.1,<2.0a0 + - openssl >=3.3.2,<4.0a0 + - re2 + constrains: + - grpc-cpp =1.65.5 + license: Apache-2.0 + license_family: APACHE + purls: [] + size: 7229891 + timestamp: 1727200905306 +- kind: conda + name: libhwloc + version: 2.11.1 + build: default_hecaa2ac_1000 + build_number: 1000 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libhwloc-2.11.1-default_hecaa2ac_1000.conda + sha256: 8473a300e10b79557ce0ac81602506b47146aff3df4cc3568147a7dd07f480a2 + md5: f54aeebefb5c5ff84eca4fb05ca8aa3a + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc-ng >=12 + - libstdcxx-ng >=12 + - libxml2 >=2.12.7,<3.0a0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 2417964 + timestamp: 1720460562447 +- kind: conda + name: libiconv + version: '1.17' + build: hd590300_2 + build_number: 2 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libiconv-1.17-hd590300_2.conda + sha256: 8ac2f6a9f186e76539439e50505d98581472fedb347a20e7d1f36429849f05c9 + md5: d66573916ffcf376178462f1b61c941e + depends: + - libgcc-ng >=12 + license: LGPL-2.1-only + purls: [] + size: 705775 + timestamp: 1702682170569 +- kind: conda + name: libjpeg-turbo + version: 3.0.0 + build: hd590300_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libjpeg-turbo-3.0.0-hd590300_1.conda + sha256: b954e09b7e49c2f2433d6f3bb73868eda5e378278b0f8c1dd10a7ef090e14f2f + md5: ea25936bb4080d843790b586850f82b8 + depends: + - libgcc-ng >=12 + constrains: + - jpeg <0.0.0a + license: IJG AND BSD-3-Clause AND Zlib + purls: [] + size: 618575 + timestamp: 1694474974816 +- kind: conda + name: liblapack + version: 3.9.0 + build: 25_linux64_openblas + build_number: 25 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/liblapack-3.9.0-25_linux64_openblas.conda + sha256: 9d1ff017714edb2d84868f0f931a4a0e7c289a971062b2ac66cfc8145df7e20e + md5: 4dc03a53fc69371a6158d0ed37214cd3 + depends: + - libblas 3.9.0 25_linux64_openblas + constrains: + - liblapacke 3.9.0 25_linux64_openblas + - libcblas 3.9.0 25_linux64_openblas + - blas * openblas + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 15608 + timestamp: 1729642910812 +- kind: conda + name: liblapacke + version: 3.9.0 + build: 25_linux64_openblas + build_number: 25 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/liblapacke-3.9.0-25_linux64_openblas.conda + sha256: f8bc6fe22126ca0bf204c27f829d1e0006069cc98776a33122bf8d0548940b3c + md5: 8f5ead31b3a168aedd488b8a87736c41 + depends: + - libblas 3.9.0 25_linux64_openblas + - libcblas 3.9.0 25_linux64_openblas + - liblapack 3.9.0 25_linux64_openblas + constrains: + - blas * openblas + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 15609 + timestamp: 1729642916038 +- kind: conda + name: libllvm14 + version: 14.0.6 + build: hcd5def8_4 + build_number: 4 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libllvm14-14.0.6-hcd5def8_4.conda + sha256: 225cc7c3b20ac1db1bdb37fa18c95bf8aecef4388e984ab2f7540a9f4382106a + md5: 73301c133ded2bf71906aa2104edae8b + depends: + - libgcc-ng >=12 + - libstdcxx-ng >=12 + - libzlib >=1.2.13,<2.0.0a0 + license: Apache-2.0 WITH LLVM-exception + license_family: Apache + purls: [] + size: 31484415 + timestamp: 1690557554081 +- kind: conda + name: libnghttp2 + version: 1.64.0 + build: h161d5f1_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libnghttp2-1.64.0-h161d5f1_0.conda + sha256: b0f2b3695b13a989f75d8fd7f4778e1c7aabe3b36db83f0fe80b2cd812c0e975 + md5: 19e57602824042dfd0446292ef90488b + depends: + - __glibc >=2.17,<3.0.a0 + - c-ares >=1.32.3,<2.0a0 + - libev >=4.33,<4.34.0a0 + - libev >=4.33,<5.0a0 + - libgcc >=13 + - libstdcxx >=13 + - libzlib >=1.3.1,<2.0a0 + - openssl >=3.3.2,<4.0a0 + license: MIT + license_family: MIT + purls: [] + size: 647599 + timestamp: 1729571887612 +- kind: conda + name: libnsl + version: 2.0.1 + build: hd590300_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libnsl-2.0.1-hd590300_0.conda + sha256: 26d77a3bb4dceeedc2a41bd688564fe71bf2d149fdcf117049970bc02ff1add6 + md5: 30fd6e37fe21f86f4bd26d6ee73eeec7 + depends: + - libgcc-ng >=12 + license: LGPL-2.1-only + license_family: GPL + purls: [] + size: 33408 + timestamp: 1697359010159 +- kind: conda + name: libopenblas + version: 0.3.28 + build: pthreads_h94d23a6_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libopenblas-0.3.28-pthreads_h94d23a6_1.conda + sha256: 99ba271d8a80a1af2723f2e124ffd91d850074c0389c067e6d96d72a2dbfeabe + md5: 62857b389e42b36b686331bec0922050 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libgfortran + - libgfortran5 >=14.2.0 + constrains: + - openblas >=0.3.28,<0.3.29.0a0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 5578513 + timestamp: 1730772671118 +- kind: conda + name: libpng + version: 1.6.44 + build: hadc24fc_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libpng-1.6.44-hadc24fc_0.conda + sha256: e5b14f7a01c2db4362d8591f42f82f336ed48d5e4079e4d1f65d0c2a3637ea78 + md5: f4cc49d7aa68316213e4b12be35308d1 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - libzlib >=1.3.1,<2.0a0 + license: zlib-acknowledgement + purls: [] + size: 290661 + timestamp: 1726234747153 +- kind: conda + name: libprotobuf + version: 5.27.5 + build: h5b01275_2 + build_number: 2 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libprotobuf-5.27.5-h5b01275_2.conda + sha256: 79ac9726cd0a1cb1ba335f7fc7ccac5f679a66d71d9553ca88a805b8787d55ce + md5: 66ed3107adbdfc25ba70454ba11e6d1e + depends: + - __glibc >=2.17,<3.0.a0 + - libabseil * cxx17* + - libabseil >=20240722.0,<20240723.0a0 + - libgcc >=13 + - libstdcxx >=13 + - libzlib >=1.3.1,<2.0a0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 2940269 + timestamp: 1727424395109 +- kind: conda + name: libre2-11 + version: 2024.07.02 + build: hbbce691_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libre2-11-2024.07.02-hbbce691_1.conda + sha256: f8ad6a4f6d4fd54ebe3e5e712a01e663222fc57f49d16b6b8b10c30990dafb8f + md5: 2124de47357b7a516c0a3efd8f88c143 + depends: + - __glibc >=2.17,<3.0.a0 + - libabseil * cxx17* + - libabseil >=20240722.0,<20240723.0a0 + - libgcc >=13 + - libstdcxx >=13 + constrains: + - re2 2024.07.02.* + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 211096 + timestamp: 1728778964655 +- kind: conda + name: librsvg + version: 2.58.4 + build: hc0ffecb_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/librsvg-2.58.4-hc0ffecb_0.conda + sha256: fda3197ffb24512e719d55defa02f9f70286038e56cad8c1d580ed6460f417fa + md5: 83f045969988f5c7a65f3950b95a8b35 + depends: + - __glibc >=2.17,<3.0.a0 + - cairo >=1.18.0,<2.0a0 + - freetype >=2.12.1,<3.0a0 + - gdk-pixbuf >=2.42.12,<3.0a0 + - harfbuzz >=9.0.0,<10.0a0 + - libgcc >=13 + - libglib >=2.80.3,<3.0a0 + - libpng >=1.6.43,<1.7.0a0 + - libxml2 >=2.12.7,<3.0a0 + - pango >=1.54.0,<2.0a0 + constrains: + - __glibc >=2.17 + license: LGPL-2.1-or-later + purls: [] + size: 6390511 + timestamp: 1726227212382 +- kind: conda + name: libsanitizer + version: 13.3.0 + build: heb74ff8_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libsanitizer-13.3.0-heb74ff8_1.conda + sha256: c86d130f0a3099e46ff51aa7ffaab73cb44fc420d27a96076aab3b9a326fc137 + md5: c4cb22f270f501f5c59a122dc2adf20a + depends: + - libgcc >=13.3.0 + - libstdcxx >=13.3.0 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 4133922 + timestamp: 1724801171589 +- kind: conda + name: libsqlite + version: 3.47.0 + build: hadc24fc_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.47.0-hadc24fc_1.conda + sha256: 8a9aadf996a2399f65b679c6e7f29139d5059f699c63e6d7b50e20db10c00508 + md5: b6f02b52a174e612e89548f4663ce56a + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - libzlib >=1.3.1,<2.0a0 + license: Unlicense + purls: [] + size: 875349 + timestamp: 1730208050020 +- kind: conda + name: libssh2 + version: 1.11.0 + build: h0841786_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libssh2-1.11.0-h0841786_0.conda + sha256: 50e47fd9c4f7bf841a11647ae7486f65220cfc988ec422a4475fe8d5a823824d + md5: 1f5a58e686b13bcfde88b93f547d23fe + depends: + - libgcc-ng >=12 + - libzlib >=1.2.13,<2.0.0a0 + - openssl >=3.1.1,<4.0a0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 271133 + timestamp: 1685837707056 +- kind: conda + name: libstdcxx + version: 14.2.0 + build: hc0a3c3a_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-14.2.0-hc0a3c3a_1.conda + sha256: 4661af0eb9bdcbb5fb33e5d0023b001ad4be828fccdcc56500059d56f9869462 + md5: 234a5554c53625688d51062645337328 + depends: + - libgcc 14.2.0 h77fa898_1 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 3893695 + timestamp: 1729027746910 +- kind: conda + name: libstdcxx-devel_linux-64 + version: 13.3.0 + build: h84ea5a7_101 + build_number: 101 + subdir: noarch + noarch: generic + url: https://conda.anaconda.org/conda-forge/noarch/libstdcxx-devel_linux-64-13.3.0-h84ea5a7_101.conda + sha256: 0a9226c1b994f996229ffb54fa40d608cd4e4b48e8dc73a66134bea8ce949412 + md5: 29b5a4ed4613fa81a07c21045e3f5bf6 + depends: + - __unix + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 14074676 + timestamp: 1724801075448 +- kind: conda + name: libstdcxx-ng + version: 14.2.0 + build: h4852527_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-14.2.0-h4852527_1.conda + sha256: 25bb30b827d4f6d6f0522cc0579e431695503822f144043b93c50237017fffd8 + md5: 8371ac6457591af2cf6159439c1fd051 + depends: + - libstdcxx 14.2.0 hc0a3c3a_1 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 54105 + timestamp: 1729027780628 +- kind: conda + name: libtiff + version: 4.7.0 + build: he137b08_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libtiff-4.7.0-he137b08_1.conda + sha256: 9890121db85f6ef463fe12eb04ef1471176e3ef3b5e2d62e8d6dac713df00df4 + md5: 63872517c98aa305da58a757c443698e + depends: + - __glibc >=2.17,<3.0.a0 + - lerc >=4.0.0,<5.0a0 + - libdeflate >=1.22,<1.23.0a0 + - libgcc >=13 + - libjpeg-turbo >=3.0.0,<4.0a0 + - libstdcxx >=13 + - libwebp-base >=1.4.0,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + - xz >=5.2.6,<6.0a0 + - zstd >=1.5.6,<1.6.0a0 + license: HPND + purls: [] + size: 428156 + timestamp: 1728232228989 +- kind: conda + name: libuuid + version: 2.38.1 + build: h0b41bf4_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.38.1-h0b41bf4_0.conda + sha256: 787eb542f055a2b3de553614b25f09eefb0a0931b0c87dbcce6efdfd92f04f18 + md5: 40b61aab5c7ba9ff276c41cfffe6b80b + depends: + - libgcc-ng >=12 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 33601 + timestamp: 1680112270483 +- kind: conda + name: libwebp-base + version: 1.4.0 + build: hd590300_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libwebp-base-1.4.0-hd590300_0.conda + sha256: 49bc5f6b1e11cb2babf2a2a731d1a680a5e08a858280876a779dbda06c78c35f + md5: b26e8aa824079e1be0294e7152ca4559 + depends: + - libgcc-ng >=12 + constrains: + - libwebp 1.4.0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 438953 + timestamp: 1713199854503 +- kind: conda + name: libxcb + version: 1.17.0 + build: h8a09558_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libxcb-1.17.0-h8a09558_0.conda + sha256: 666c0c431b23c6cec6e492840b176dde533d48b7e6fb8883f5071223433776aa + md5: 92ed62436b625154323d40d5f2f11dd7 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - pthread-stubs + - xorg-libxau >=1.0.11,<2.0a0 + - xorg-libxdmcp + license: MIT + license_family: MIT + purls: [] + size: 395888 + timestamp: 1727278577118 +- kind: conda + name: libxcrypt + version: 4.4.36 + build: hd590300_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libxcrypt-4.4.36-hd590300_1.conda + sha256: 6ae68e0b86423ef188196fff6207ed0c8195dd84273cb5623b85aa08033a410c + md5: 5aa797f8787fe7a17d1b0821485b5adc + depends: + - libgcc-ng >=12 + license: LGPL-2.1-or-later + purls: [] + size: 100393 + timestamp: 1702724383534 +- kind: conda + name: libxml2 + version: 2.13.5 + build: hb346dea_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libxml2-2.13.5-hb346dea_0.conda + sha256: 8c9d6a3a421ac5bf965af495d1b0a08c6fb2245ba156550bc064a7b4f8fc7bd8 + md5: c81a9f1118541aaa418ccb22190c817e + depends: + - __glibc >=2.17,<3.0.a0 + - icu >=75.1,<76.0a0 + - libgcc >=13 + - libiconv >=1.17,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + - xz >=5.2.6,<6.0a0 + license: MIT + license_family: MIT + purls: [] + size: 689626 + timestamp: 1731489608971 +- kind: conda + name: libzlib + version: 1.3.1 + build: hb9d3cd8_2 + build_number: 2 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.1-hb9d3cd8_2.conda + sha256: d4bfe88d7cb447768e31650f06257995601f89076080e76df55e3112d4e47dc4 + md5: edb0dca6bc32e4f4789199455a1dbeb8 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + constrains: + - zlib 1.3.1 *_2 + license: Zlib + license_family: Other + purls: [] + size: 60963 + timestamp: 1727963148474 +- kind: conda + name: llvm-openmp + version: 19.1.3 + build: h024ca30_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/llvm-openmp-19.1.3-h024ca30_0.conda + sha256: aede34c8e218c539ccd4593e4a60b55293b9c3e8870df42f2e2d6ab9e7550927 + md5: d36687dc90337917a84a96a45111ad59 + depends: + - __glibc >=2.17,<3.0.a0 + constrains: + - openmp 19.1.3|19.1.3.* + license: Apache-2.0 WITH LLVM-exception + license_family: APACHE + purls: [] + size: 3192137 + timestamp: 1730363910114 +- kind: conda + name: llvmlite + version: 0.43.0 + build: py312h374181b_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/llvmlite-0.43.0-py312h374181b_1.conda + sha256: b260285b29834f9b003e2928d778c19b8ed0ca1aff5aa8aa7ec8f21f9b23c2e4 + md5: ed6ead7e9ab9469629c6cfb363b5c6e2 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - libllvm14 >=14.0.6,<14.1.0a0 + - libstdcxx >=13 + - libzlib >=1.3.1,<2.0a0 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + license: BSD-2-Clause + license_family: BSD + purls: + - pkg:pypi/llvmlite?source=hash-mapping + size: 3442782 + timestamp: 1725305160474 +- kind: conda + name: logical-unification + version: 0.4.6 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/logical-unification-0.4.6-pyhd8ed1ab_0.conda + sha256: 2b70aa838779516e05f93158f9f5b15671fc080cec20d05ca0e3a992e391a6e9 + md5: bd04410bd092c8f62f23a3aea41f47eb + depends: + - multipledispatch + - python >=3.6 + - toolz + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/logical-unification?source=hash-mapping + size: 18160 + timestamp: 1683416555508 +- kind: conda + name: markdown-it-py + version: 3.0.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-3.0.0-pyhd8ed1ab_0.conda + sha256: c041b0eaf7a6af3344d5dd452815cdc148d6284fec25a4fa3f4263b3a021e962 + md5: 93a8e71256479c62074356ef6ebf501b + depends: + - mdurl >=0.1,<1 + - python >=3.8 + license: MIT + license_family: MIT + purls: + - pkg:pypi/markdown-it-py?source=hash-mapping + size: 64356 + timestamp: 1686175179621 +- kind: conda + name: matplotlib-base + version: 3.9.2 + build: py312hd3ec401_2 + build_number: 2 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/matplotlib-base-3.9.2-py312hd3ec401_2.conda + sha256: f199be5149f45a14c88d465d9cb83cfba5efe17c45a0233354ef62cdcb7eab9e + md5: 2380c9ba933ffaac9ad16d8eac8e3318 + depends: + - __glibc >=2.17,<3.0.a0 + - certifi >=2020.06.20 + - contourpy >=1.0.1 + - cycler >=0.10 + - fonttools >=4.22.0 + - freetype >=2.12.1,<3.0a0 + - kiwisolver >=1.3.1 + - libgcc >=13 + - libstdcxx >=13 + - numpy >=1.19,<3 + - numpy >=1.23 + - packaging >=20.0 + - pillow >=8 + - pyparsing >=2.3.1 + - python >=3.12,<3.13.0a0 + - python-dateutil >=2.7 + - python_abi 3.12.* *_cp312 + - qhull >=2020.2,<2020.3.0a0 + - tk >=8.6.13,<8.7.0a0 + license: PSF-2.0 + license_family: PSF + purls: + - pkg:pypi/matplotlib?source=hash-mapping + size: 7965171 + timestamp: 1731025360821 +- kind: conda + name: maturin + version: 1.7.4 + build: py312h6ab59e4_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/maturin-1.7.4-py312h6ab59e4_0.conda + sha256: 7cd382f2cf76f1f83c6d324cfd1cd238769aad6f4650892d4a3f1f4fb20f750e + md5: 082a5a7a1de682a2aa1cc1f7c86cd51a + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - openssl >=3.3.2,<4.0a0 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + - tomli >=1.1.0 + license: MIT + license_family: MIT + purls: + - pkg:pypi/maturin?source=hash-mapping + size: 6259502 + timestamp: 1727350499582 +- kind: conda + name: mdurl + version: 0.1.2 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_0.conda + sha256: 64073dfb6bb429d52fff30891877b48c7ec0f89625b1bf844905b66a81cce6e1 + md5: 776a8dd9e824f77abac30e6ef43a8f7a + depends: + - python >=3.6 + license: MIT + license_family: MIT + purls: + - pkg:pypi/mdurl?source=hash-mapping + size: 14680 + timestamp: 1704317789138 +- kind: conda + name: minikanren + version: 1.0.3 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/minikanren-1.0.3-pyhd8ed1ab_0.tar.bz2 + sha256: f0873262d9ea246dabc7e9c17190b9b04c1f973df1fd26426e14208c4ca62236 + md5: 0726bd0e32c2edfa48dfbf744579520e + depends: + - cons >=0.4.0 + - etuples >=0.3.1 + - logical-unification >=0.4.1 + - multipledispatch + - python >=3.6 + - toolz + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/minikanren?source=hash-mapping + size: 23617 + timestamp: 1642650983911 +- kind: conda + name: mkl + version: 2024.2.2 + build: ha957f24_16 + build_number: 16 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/mkl-2024.2.2-ha957f24_16.conda + sha256: 77906b0acead8f86b489da46f53916e624897338770dbf70b04b8f673c9273c1 + md5: 1459379c79dda834673426504d52b319 + depends: + - _openmp_mutex * *_llvm + - _openmp_mutex >=4.5 + - llvm-openmp >=19.1.2 + - tbb 2021.* + license: LicenseRef-IntelSimplifiedSoftwareOct2022 + license_family: Proprietary + purls: [] + size: 124718448 + timestamp: 1730231808335 +- kind: conda + name: mkl-service + version: 2.4.2 + build: py312hf224ee7_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/mkl-service-2.4.2-py312hf224ee7_0.conda + sha256: 405d9f30aca24feb034c0474899613dade19adb52be39efd164d99030c9d3b84 + md5: 7874d7976d44512eaccba994989017e3 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - mkl >=2024.2.2,<2025.0a0 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/mkl-service?source=hash-mapping + size: 73420 + timestamp: 1728843500808 +- kind: conda + name: ml_dtypes + version: 0.5.0 + build: py312hf9745cd_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/ml_dtypes-0.5.0-py312hf9745cd_0.conda + sha256: 559c14640ce8e3f2270da6130ba50ae624f3db56176fad29a5436b2dec3fc3b2 + md5: 8ca779f3f30b00181aeee820fe8b22d5 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - libstdcxx >=13 + - numpy >=1.19,<3 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + license: MPL-2.0 AND Apache-2.0 + purls: + - pkg:pypi/ml-dtypes?source=hash-mapping + size: 290054 + timestamp: 1726376440408 +- kind: conda + name: multipledispatch + version: 0.6.0 + build: pyhd8ed1ab_1 + build_number: 1 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/multipledispatch-0.6.0-pyhd8ed1ab_1.conda + sha256: c6216a21154373b340c64f321f22fec51db4ee6156c2e642fa58368103ac5d09 + md5: 121a57fce7fff0857ec70fa03200962f + depends: + - python >=3.6 + - six + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/multipledispatch?source=hash-mapping + size: 17254 + timestamp: 1721907640382 +- kind: conda + name: munkres + version: 1.1.4 + build: pyh9f0ad1d_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/munkres-1.1.4-pyh9f0ad1d_0.tar.bz2 + sha256: f86fb22b58e93d04b6f25e0d811b56797689d598788b59dcb47f59045b568306 + md5: 2ba8498c1018c1e9c61eb99b973dfe19 + depends: + - python + license: Apache-2.0 + license_family: Apache + purls: + - pkg:pypi/munkres?source=hash-mapping + size: 12452 + timestamp: 1600387789153 +- kind: conda + name: ncurses + version: '6.5' + build: he02047a_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.5-he02047a_1.conda + sha256: 6a1d5d8634c1a07913f1c525db6455918cbc589d745fac46d9d6e30340c8731a + md5: 70caf8bb6cf39a0b6b7efc885f51c0fe + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc-ng >=12 + license: X11 AND BSD-3-Clause + purls: [] + size: 889086 + timestamp: 1724658547447 +- kind: conda + name: numba + version: 0.60.0 + build: py312h83e6fd3_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/numba-0.60.0-py312h83e6fd3_0.conda + sha256: af31c1989ddf1cd46f073f32a8150274c606fdc9fced0e4f5aaf0571b97bd09f + md5: e064ca33edf91ac117236c4b5dee207a + depends: + - _openmp_mutex >=4.5 + - libgcc-ng >=12 + - libstdcxx-ng >=12 + - llvmlite >=0.43.0,<0.44.0a0 + - numpy >=1.19,<3 + - numpy >=1.22.3,<2.1 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + constrains: + - cuda-version >=11.2 + - tbb >=2021.6.0 + - cuda-python >=11.6 + - scipy >=1.0 + - libopenblas !=0.3.6 + - cudatoolkit >=11.2 + license: BSD-2-Clause + license_family: BSD + purls: + - pkg:pypi/numba?source=hash-mapping + size: 5695278 + timestamp: 1718888170104 +- kind: conda + name: numpy + version: 1.26.4 + build: py312heda63a1_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/numpy-1.26.4-py312heda63a1_0.conda + sha256: fe3459c75cf84dcef6ef14efcc4adb0ade66038ddd27cadb894f34f4797687d8 + md5: d8285bea2a350f63fab23bf460221f3f + depends: + - libblas >=3.9.0,<4.0a0 + - libcblas >=3.9.0,<4.0a0 + - libgcc-ng >=12 + - liblapack >=3.9.0,<4.0a0 + - libstdcxx-ng >=12 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + constrains: + - numpy-base <0a0 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/numpy?source=hash-mapping + size: 7484186 + timestamp: 1707225809722 +- kind: conda + name: openblas + version: 0.3.28 + build: pthreads_h6ec200e_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/openblas-0.3.28-pthreads_h6ec200e_1.conda + sha256: c558f49a262f43b0c5b6f9feb75b631d0b1eeba53579fd2bbce0df37f1884ef0 + md5: 8fe5d50db07e92519cc639cb0aef9b1b + depends: + - libopenblas 0.3.28 pthreads_h94d23a6_1 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 5727592 + timestamp: 1730772687576 +- kind: conda + name: openjpeg + version: 2.5.2 + build: h488ebb8_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/openjpeg-2.5.2-h488ebb8_0.conda + sha256: 5600a0b82df042bd27d01e4e687187411561dfc11cc05143a08ce29b64bf2af2 + md5: 7f2e286780f072ed750df46dc2631138 + depends: + - libgcc-ng >=12 + - libpng >=1.6.43,<1.7.0a0 + - libstdcxx-ng >=12 + - libtiff >=4.6.0,<4.8.0a0 + - libzlib >=1.2.13,<2.0.0a0 + license: BSD-2-Clause + license_family: BSD + purls: [] + size: 341592 + timestamp: 1709159244431 +- kind: conda + name: openssl + version: 3.4.0 + build: hb9d3cd8_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.4.0-hb9d3cd8_0.conda + sha256: 814b9dff1847b132c676ee6cc1a8cb2d427320779b93e1b6d76552275c128705 + md5: 23cc74f77eb99315c0360ec3533147a9 + depends: + - __glibc >=2.17,<3.0.a0 + - ca-certificates + - libgcc >=13 + license: Apache-2.0 + license_family: Apache + purls: [] + size: 2947466 + timestamp: 1731377666602 +- kind: conda + name: opt-einsum + version: 3.4.0 + build: hd8ed1ab_0 + subdir: noarch + noarch: generic + url: https://conda.anaconda.org/conda-forge/noarch/opt-einsum-3.4.0-hd8ed1ab_0.conda + sha256: 583cb8748a9821e301a404806da0de62e8ba01607feecf12c0ef06d8bc77077e + md5: 73d0b1d98a9030bdefe712648af583a0 + depends: + - opt_einsum >=3.4.0,<3.4.1.0a0 + license: MIT + license_family: MIT + purls: [] + size: 6470 + timestamp: 1727392480705 +- kind: conda + name: opt_einsum + version: 3.4.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/opt_einsum-3.4.0-pyhd8ed1ab_0.conda + sha256: 69e979dfea8b8d82e51684f77d189e1d00cdcbc5c85868415b879719882e2df4 + md5: ff80afedd76f436acddbd1e14f5c2909 + depends: + - python >=3.8 + license: MIT + license_family: MIT + purls: + - pkg:pypi/opt-einsum?source=hash-mapping + size: 62487 + timestamp: 1727392477628 +- kind: pypi + name: optax + version: 0.2.4 + url: https://files.pythonhosted.org/packages/5c/24/28d0bb21600a78e46754947333ec9a297044af884d360092eb8561575fe9/optax-0.2.4-py3-none-any.whl + sha256: db35c04e50b52596662efb002334de08c2a0a74971e4da33f467e84fac08886a + requires_dist: + - absl-py>=0.7.1 + - chex>=0.1.87 + - jax>=0.4.27 + - jaxlib>=0.4.27 + - numpy>=1.18.0 + - etils[epy] + - sphinx>=6.0.0 ; extra == 'docs' + - sphinx-book-theme>=1.0.1 ; extra == 'docs' + - sphinxcontrib-katex ; extra == 'docs' + - sphinx-autodoc-typehints ; extra == 'docs' + - ipython>=8.8.0 ; extra == 'docs' + - myst-nb>=1.0.0 ; extra == 'docs' + - matplotlib>=3.5.0 ; extra == 'docs' + - sphinx-gallery>=0.14.0 ; extra == 'docs' + - sphinx-collections>=0.0.1 ; extra == 'docs' + - tensorflow>=2.4.0 ; extra == 'docs' + - tensorflow-datasets>=4.2.0 ; extra == 'docs' + - flax ; extra == 'docs' + - sphinx-contributors ; extra == 'docs' + - absl-py>=1.0.0 ; extra == 'dp-accounting' + - attrs>=21.4.0 ; extra == 'dp-accounting' + - mpmath>=1.2.1 ; extra == 'dp-accounting' + - numpy>=1.21.4 ; extra == 'dp-accounting' + - scipy>=1.7.1 ; extra == 'dp-accounting' + - tensorflow-datasets>=4.2.0 ; extra == 'examples' + - tensorflow>=2.4.0 ; extra == 'examples' + - dp-accounting>=0.4 ; extra == 'examples' + - ipywidgets ; extra == 'examples' + - flax ; extra == 'examples' + - dm-tree>=0.1.7 ; extra == 'test' + - flax>=0.5.3 ; extra == 'test' + - scipy>=1.7.1 ; extra == 'test' + - scikit-learn ; extra == 'test' + requires_python: '>=3.9' +- kind: conda + name: packaging + version: '24.2' + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/packaging-24.2-pyhd8ed1ab_0.conda + sha256: 0f8273bf66c2a5c1de72312a509deae07f163bb0ae8de8273c52e6fe945a0850 + md5: c16469afe1ec91aaafcf4bea966c0465 + depends: + - python >=3.8 + license: Apache-2.0 + license_family: APACHE + purls: + - pkg:pypi/packaging?source=hash-mapping + size: 60345 + timestamp: 1731457074006 +- kind: conda + name: pandas + version: 2.2.3 + build: py312hf9745cd_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/pandas-2.2.3-py312hf9745cd_1.conda + sha256: ad275a83bfebfa8a8fee9b0569aaf6f513ada6a246b2f5d5b85903d8ca61887e + md5: 8bce4f6caaf8c5448c7ac86d87e26b4b + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - libstdcxx >=13 + - numpy >=1.19,<3 + - numpy >=1.22.4 + - python >=3.12,<3.13.0a0 + - python-dateutil >=2.8.1 + - python-tzdata >=2022a + - python_abi 3.12.* *_cp312 + - pytz >=2020.1,<2024.2 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/pandas?source=hash-mapping + size: 15436913 + timestamp: 1726879054912 +- kind: conda + name: pango + version: 1.54.0 + build: h4c5309f_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/pango-1.54.0-h4c5309f_1.conda + sha256: d362237be82d5a0d532fe66ec8d68018c3b2a9705bad6d73c2b63dae2970da02 + md5: 7df02e445367703cd87a574046e3a6f0 + depends: + - cairo >=1.18.0,<2.0a0 + - fontconfig >=2.14.2,<3.0a0 + - fonts-conda-ecosystem + - freetype >=2.12.1,<3.0a0 + - fribidi >=1.0.10,<2.0a0 + - harfbuzz >=9.0.0,<10.0a0 + - libgcc-ng >=12 + - libglib >=2.80.2,<3.0a0 + - libpng >=1.6.43,<1.7.0a0 + license: LGPL-2.1-or-later + purls: [] + size: 447117 + timestamp: 1719839527713 +- kind: pypi + name: paramax + version: 0.0.0 + url: https://files.pythonhosted.org/packages/20/f8/7b1f5b84f84e43face7349ac2df23f0f75d36b5b4a1c1c0305edce82bcc8/paramax-0.0.0-py3-none-any.whl + sha256: 02d0120e626de300680a1661b138feeba14b418031d6e976fd679db5fd03509a + requires_dist: + - equinox + - jax + - jaxtyping + - beartype ; extra == 'dev' + - pytest ; extra == 'dev' + - ruff ; extra == 'dev' + - sphinx ; extra == 'dev' + - sphinx-autodoc-typehints ; extra == 'dev' + - sphinx-book-theme ; extra == 'dev' + - sphinx-copybutton ; extra == 'dev' + requires_python: '>=3.10' +- kind: conda + name: pcre2 + version: '10.44' + build: hba22ea6_2 + build_number: 2 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/pcre2-10.44-hba22ea6_2.conda + sha256: 1087716b399dab91cc9511d6499036ccdc53eb29a288bebcb19cf465c51d7c0d + md5: df359c09c41cd186fffb93a2d87aa6f5 + depends: + - __glibc >=2.17,<3.0.a0 + - bzip2 >=1.0.8,<2.0a0 + - libgcc-ng >=12 + - libzlib >=1.3.1,<2.0a0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 952308 + timestamp: 1723488734144 +- kind: conda + name: pillow + version: 11.0.0 + build: py312h7b63e92_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/pillow-11.0.0-py312h7b63e92_0.conda + sha256: 13a464bea02c0df0199c20ef6bad24a6bc336aaf55bf8d6a133d0fe664463224 + md5: 385f46a4df6f97892503a841121a9acf + depends: + - __glibc >=2.17,<3.0.a0 + - freetype >=2.12.1,<3.0a0 + - lcms2 >=2.16,<3.0a0 + - libgcc >=13 + - libjpeg-turbo >=3.0.0,<4.0a0 + - libtiff >=4.7.0,<4.8.0a0 + - libwebp-base >=1.4.0,<2.0a0 + - libxcb >=1.17.0,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + - openjpeg >=2.5.2,<3.0a0 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + - tk >=8.6.13,<8.7.0a0 + license: HPND + purls: + - pkg:pypi/pillow?source=hash-mapping + size: 41948418 + timestamp: 1729065846594 +- kind: conda + name: pip + version: 24.3.1 + build: pyh8b19718_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/pip-24.3.1-pyh8b19718_0.conda + sha256: 499313e72e20225f84c2e9690bbaf5b952c8d7e0bf34b728278538f766b81628 + md5: 5dd546fe99b44fda83963d15f84263b7 + depends: + - python >=3.8,<3.13.0a0 + - setuptools + - wheel + license: MIT + license_family: MIT + purls: + - pkg:pypi/pip?source=hash-mapping + size: 1243168 + timestamp: 1730203795600 +- kind: conda + name: pixman + version: 0.43.2 + build: h59595ed_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/pixman-0.43.2-h59595ed_0.conda + sha256: 366d28e2a0a191d6c535e234741e0cd1d94d713f76073d8af4a5ccb2a266121e + md5: 71004cbf7924e19c02746ccde9fd7123 + depends: + - libgcc-ng >=12 + - libstdcxx-ng >=12 + license: MIT + license_family: MIT + purls: [] + size: 386826 + timestamp: 1706549500138 +- kind: conda + name: pluggy + version: 1.5.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.5.0-pyhd8ed1ab_0.conda + sha256: 33eaa3359948a260ebccf9cdc2fd862cea5a6029783289e13602d8e634cd9a26 + md5: d3483c8fc2dc2cc3f5cf43e26d60cabf + depends: + - python >=3.8 + license: MIT + license_family: MIT + purls: + - pkg:pypi/pluggy?source=hash-mapping + size: 23815 + timestamp: 1713667175451 +- kind: conda + name: pthread-stubs + version: '0.4' + build: hb9d3cd8_1002 + build_number: 1002 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/pthread-stubs-0.4-hb9d3cd8_1002.conda + sha256: 9c88f8c64590e9567c6c80823f0328e58d3b1efb0e1c539c0315ceca764e0973 + md5: b3c17d95b5a10c6e64a21fa17573e70e + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + license: MIT + license_family: MIT + purls: [] + size: 8252 + timestamp: 1726802366959 +- kind: conda + name: pygments + version: 2.18.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/pygments-2.18.0-pyhd8ed1ab_0.conda + sha256: 78267adf4e76d0d64ea2ffab008c501156c108bb08fecb703816fb63e279780b + md5: b7f5c092b8f9800150d998a71b76d5a1 + depends: + - python >=3.8 + license: BSD-2-Clause + license_family: BSD + purls: + - pkg:pypi/pygments?source=hash-mapping + size: 879295 + timestamp: 1714846885370 +- kind: conda + name: pymc + version: 5.18.0 + build: hd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/pymc-5.18.0-hd8ed1ab_0.conda + sha256: e267c5030bf0a973df42229d7a19541c107a2c4ab268078272e9638bf5509ed5 + md5: 60850870f8a9d2ab816b07bb5af11993 + depends: + - pymc-base 5.18.0 pyhd8ed1ab_0 + - pytensor + - python-graphviz + license: Apache-2.0 + license_family: Apache + purls: [] + size: 11587 + timestamp: 1730727968012 +- kind: conda + name: pymc-base + version: 5.18.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/pymc-base-5.18.0-pyhd8ed1ab_0.conda + sha256: 5d4f41413ac24698b64a78fd65dfe29562d9bebec4570cd1e69fdbe85a7b8615 + md5: 0aa547a4010d7984d0cac353bde62e97 + depends: + - arviz >=0.13.0 + - cachetools >=4.2.1 + - cloudpickle + - numpy >=1.15.0 + - pandas >=0.24.0 + - pytensor-base >=2.25.1,<2.26 + - python >=3.10 + - rich >=13.7.1 + - scipy >=1.4.1 + - threadpoolctl >=3.1.0,<4.0.0 + - typing-extensions >=3.7.4 + license: Apache-2.0 + license_family: Apache + purls: + - pkg:pypi/pymc?source=hash-mapping + size: 333757 + timestamp: 1730727964625 +- kind: conda + name: pyparsing + version: 3.2.0 + build: pyhd8ed1ab_1 + build_number: 1 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/pyparsing-3.2.0-pyhd8ed1ab_1.conda + sha256: b846e3965cd106438cf0b9dc0de8d519670ac065f822a7d66862e9423e0229cb + md5: 035c17fbf099f50ff60bf2eb303b0a83 + depends: + - python >=3.9 + license: MIT + license_family: MIT + purls: + - pkg:pypi/pyparsing?source=hash-mapping + size: 92444 + timestamp: 1728880549923 +- kind: conda + name: pytensor + version: 2.25.5 + build: py312h97902ae_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/pytensor-2.25.5-py312h97902ae_0.conda + sha256: 83a4750986bd6dab77ed1ac81e802047f46013afb8e9019d6624de4eae85b7dc + md5: 217442cd88537f0e8f4a6819f1823b0c + depends: + - blas + - gcc_linux-64 13.* + - gxx + - gxx_linux-64 13.* + - mkl-service + - pytensor-base 2.25.5 py312h25a0e75_0 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + - sysroot_linux-64 2.17.* + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 9118 + timestamp: 1727981016362 +- kind: conda + name: pytensor-base + version: 2.25.5 + build: py312h25a0e75_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/pytensor-base-2.25.5-py312h25a0e75_0.conda + sha256: 3b4287dd0d9358ee76e0c55db596fe6d256ec48b1301c46984e62b7e0806aca3 + md5: 86ae2da8b1a044ee7f6a7d2ce0eba762 + depends: + - __glibc >=2.17,<3.0.a0 + - cons + - etuples + - filelock >=3.15 + - libgcc >=13 + - libstdcxx >=13 + - logical-unification + - minikanren + - numpy >=1.26.4,<2.0a0 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + - scipy >=1,<2 + - setuptools >=59.0.0 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/pytensor?source=hash-mapping + size: 2312179 + timestamp: 1727981002120 +- kind: conda + name: pytest + version: 8.3.3 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/pytest-8.3.3-pyhd8ed1ab_0.conda + sha256: e99376d0068455712109d233f5790458ff861aeceb458bfda74e353338e4d815 + md5: c03d61f31f38fdb9facf70c29958bf7a + depends: + - colorama + - exceptiongroup >=1.0.0rc8 + - iniconfig + - packaging + - pluggy <2,>=1.5 + - python >=3.8 + - tomli >=1 + constrains: + - pytest-faulthandler >=2 + license: MIT + license_family: MIT + purls: + - pkg:pypi/pytest?source=hash-mapping + size: 258293 + timestamp: 1725977334143 +- kind: conda + name: python + version: 3.12.7 + build: hc5c86c4_0_cpython + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/python-3.12.7-hc5c86c4_0_cpython.conda + sha256: 674be31ff152d9f0e0fe16959a45e3803a730fc4f54d87df6a9ac4e6a698c41d + md5: 0515111a9cdf69f83278f7c197db9807 + depends: + - __glibc >=2.17,<3.0.a0 + - bzip2 >=1.0.8,<2.0a0 + - ld_impl_linux-64 >=2.36.1 + - libexpat >=2.6.3,<3.0a0 + - libffi >=3.4,<4.0a0 + - libgcc >=13 + - libnsl >=2.0.1,<2.1.0a0 + - libsqlite >=3.46.1,<4.0a0 + - libuuid >=2.38.1,<3.0a0 + - libxcrypt >=4.4.36 + - libzlib >=1.3.1,<2.0a0 + - ncurses >=6.5,<7.0a0 + - openssl >=3.3.2,<4.0a0 + - readline >=8.2,<9.0a0 + - tk >=8.6.13,<8.7.0a0 + - tzdata + - xz >=5.2.6,<6.0a0 + constrains: + - python_abi 3.12.* *_cp312 + license: Python-2.0 + purls: [] + size: 31574780 + timestamp: 1728059777603 +- kind: conda + name: python-dateutil + version: 2.9.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0-pyhd8ed1ab_0.conda + sha256: f3ceef02ac164a8d3a080d0d32f8e2ebe10dd29e3a685d240e38b3599e146320 + md5: 2cf4264fffb9e6eff6031c5b6884d61c + depends: + - python >=3.7 + - six >=1.5 + license: Apache-2.0 + license_family: APACHE + purls: + - pkg:pypi/python-dateutil?source=hash-mapping + size: 222742 + timestamp: 1709299922152 +- kind: conda + name: python-graphviz + version: 0.20.3 + build: pyhe28f650_1 + build_number: 1 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/python-graphviz-0.20.3-pyhe28f650_1.conda + sha256: 0eca3595a52dd7ad83ebca1ee738af50bf21dbd70d623583b0185d84074e21af + md5: 881be78ca9f3f2f5f6aa45d9b38a799f + depends: + - graphviz >=2.46.1 + - python >=3.8 + license: MIT + license_family: MIT + purls: + - pkg:pypi/graphviz?source=hash-mapping + size: 38168 + timestamp: 1727718740290 +- kind: conda + name: python-tzdata + version: '2024.2' + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/python-tzdata-2024.2-pyhd8ed1ab_0.conda + sha256: fe3f62ce2bc714bdaa222ab3f0344a2815ad9e853c6df38d15c9f25de8a3a6d4 + md5: 986287f89929b2d629bd6ef6497dc307 + depends: + - python >=3.6 + license: Apache-2.0 + license_family: APACHE + purls: + - pkg:pypi/tzdata?source=hash-mapping + size: 142527 + timestamp: 1727140688093 +- kind: conda + name: python_abi + version: '3.12' + build: 5_cp312 + build_number: 5 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/python_abi-3.12-5_cp312.conda + sha256: d10e93d759931ffb6372b45d65ff34d95c6000c61a07e298d162a3bc2accebb0 + md5: 0424ae29b104430108f5218a66db7260 + constrains: + - python 3.12.* *_cpython + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 6238 + timestamp: 1723823388266 +- kind: conda + name: pytz + version: '2024.1' + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/pytz-2024.1-pyhd8ed1ab_0.conda + sha256: 1a7d6b233f7e6e3bbcbad054c8fd51e690a67b129a899a056a5e45dd9f00cb41 + md5: 3eeeeb9e4827ace8c0c1419c85d590ad + depends: + - python >=3.7 + license: MIT + license_family: MIT + purls: + - pkg:pypi/pytz?source=hash-mapping + size: 188538 + timestamp: 1706886944988 +- kind: conda + name: qhull + version: '2020.2' + build: h434a139_5 + build_number: 5 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/qhull-2020.2-h434a139_5.conda + sha256: 776363493bad83308ba30bcb88c2552632581b143e8ee25b1982c8c743e73abc + md5: 353823361b1d27eb3960efb076dfcaf6 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc-ng >=12 + - libstdcxx-ng >=12 + license: LicenseRef-Qhull + purls: [] + size: 552937 + timestamp: 1720813982144 +- kind: conda + name: re2 + version: 2024.07.02 + build: h77b4e00_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/re2-2024.07.02-h77b4e00_1.conda + sha256: c1721cb80f7201652fc9801f49c214c88aee835d957f2376e301bd40a8415742 + md5: 01093ff37c1b5e6bf9f17c0116747d11 + depends: + - libre2-11 2024.07.02 hbbce691_1 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 26665 + timestamp: 1728778975855 +- kind: conda + name: readline + version: '8.2' + build: h8228510_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/readline-8.2-h8228510_1.conda + sha256: 5435cf39d039387fbdc977b0a762357ea909a7694d9528ab40f005e9208744d7 + md5: 47d31b792659ce70f470b5c82fdfb7a4 + depends: + - libgcc-ng >=12 + - ncurses >=6.3,<7.0a0 + license: GPL-3.0-only + license_family: GPL + purls: [] + size: 281456 + timestamp: 1679532220005 +- kind: conda + name: rich + version: 13.9.4 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/rich-13.9.4-pyhd8ed1ab_0.conda + sha256: c009488fc07fd5557434c9c1ad32ab1dd50241d6a766e4b2b4125cd6498585a8 + md5: bcf8cc8924b5d20ead3d122130b8320b + depends: + - markdown-it-py >=2.2.0 + - pygments >=2.13.0,<3.0.0 + - python >=3.8 + - typing_extensions >=4.0.0,<5.0.0 + license: MIT + license_family: MIT + purls: + - pkg:pypi/rich?source=hash-mapping + size: 185481 + timestamp: 1730592349978 +- kind: conda + name: scipy + version: 1.14.1 + build: py312h62794b6_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/scipy-1.14.1-py312h62794b6_1.conda + sha256: d069a64edade554261672d8febf4756aeb56a6cb44bd91844eaa944e5d9f4eb9 + md5: b43233a9e2f62fb94affe5607ea79473 + depends: + - __glibc >=2.17,<3.0.a0 + - libblas >=3.9.0,<4.0a0 + - libcblas >=3.9.0,<4.0a0 + - libgcc >=13 + - libgfortran + - libgfortran5 >=13.3.0 + - liblapack >=3.9.0,<4.0a0 + - libstdcxx >=13 + - numpy <2.3 + - numpy >=1.19,<3 + - numpy >=1.23.5 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/scipy?source=hash-mapping + size: 17622722 + timestamp: 1729481826601 +- kind: conda + name: setuptools + version: 75.3.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/setuptools-75.3.0-pyhd8ed1ab_0.conda + sha256: a36d020b9f32fc3f1a6488a1c4a9c13988c6468faf6895bf30ca69521a61230e + md5: 2ce9825396daf72baabaade36cee16da + depends: + - python >=3.8 + license: MIT + license_family: MIT + purls: + - pkg:pypi/setuptools?source=hash-mapping + size: 779561 + timestamp: 1730382173961 +- kind: conda + name: six + version: 1.16.0 + build: pyh6c4a22f_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/six-1.16.0-pyh6c4a22f_0.tar.bz2 + sha256: a85c38227b446f42c5b90d9b642f2c0567880c15d72492d8da074a59c8f91dd6 + md5: e5f25f8dbc060e9a8d912e432202afc2 + depends: + - python + license: MIT + license_family: MIT + purls: + - pkg:pypi/six?source=hash-mapping + size: 14259 + timestamp: 1620240338595 +- kind: conda + name: sysroot_linux-64 + version: '2.17' + build: h4a8ded7_18 + build_number: 18 + subdir: noarch + noarch: generic + url: https://conda.anaconda.org/conda-forge/noarch/sysroot_linux-64-2.17-h4a8ded7_18.conda + sha256: 23c7ab371c1b74d01a187e05aa7240e3f5654599e364a9adff7f0b02e26f471f + md5: 0ea96f90a10838f58412aa84fdd9df09 + depends: + - kernel-headers_linux-64 3.10.0 he073ed8_18 + - tzdata + license: LGPL-2.0-or-later AND LGPL-2.0-or-later WITH exceptions AND GPL-2.0-or-later AND MPL-2.0 + license_family: GPL + purls: [] + size: 15500960 + timestamp: 1729794510631 +- kind: conda + name: tbb + version: 2021.13.0 + build: h84d6215_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/tbb-2021.13.0-h84d6215_0.conda + sha256: 7d4d3ad608dc6ae5a7e0f431f784985398a18bcde2ba3ce19cc32f61e2defd98 + md5: ee6f7fd1e76061ef1fa307d41fa86a96 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - libhwloc >=2.11.1,<2.11.2.0a0 + - libstdcxx >=13 + license: Apache-2.0 + license_family: APACHE + purls: [] + size: 175779 + timestamp: 1725532539822 +- kind: conda + name: threadpoolctl + version: 3.5.0 + build: pyhc1e730c_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/threadpoolctl-3.5.0-pyhc1e730c_0.conda + sha256: 45e402941f6bed094022c5726a2ca494e6224b85180d2367fb6ddd9aea68079d + md5: df68d78237980a159bd7149f33c0e8fd + depends: + - python >=3.8 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/threadpoolctl?source=hash-mapping + size: 23548 + timestamp: 1714400228771 +- kind: conda + name: tk + version: 8.6.13 + build: noxft_h4845f30_101 + build_number: 101 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_h4845f30_101.conda + sha256: e0569c9caa68bf476bead1bed3d79650bb080b532c64a4af7d8ca286c08dea4e + md5: d453b98d9c83e71da0741bb0ff4d76bc + depends: + - libgcc-ng >=12 + - libzlib >=1.2.13,<2.0.0a0 + license: TCL + license_family: BSD + purls: [] + size: 3318875 + timestamp: 1699202167581 +- kind: conda + name: tomli + version: 2.1.0 + build: pyhff2d567_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/tomli-2.1.0-pyhff2d567_0.conda + sha256: 354b8a64d4f3311179d85aefc529ca201a36afc1af090d0010c46be7b79f9a47 + md5: 3fa1089b4722df3a900135925f4519d9 + depends: + - python >=3.9 + license: MIT + license_family: MIT + purls: + - pkg:pypi/tomli?source=hash-mapping + size: 18741 + timestamp: 1731426862834 +- kind: conda + name: toolz + version: 1.0.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/toolz-1.0.0-pyhd8ed1ab_0.conda + sha256: 6371cf3cf8292f2abdcc2bf783d6e70203d72f8ff0c1625f55a486711e276c75 + md5: 34feccdd4177f2d3d53c73fc44fd9a37 + depends: + - python >=3.8 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/toolz?source=hash-mapping + size: 52623 + timestamp: 1728059623353 +- kind: pypi + name: tqdm + version: 4.67.0 + url: https://files.pythonhosted.org/packages/2b/78/57043611a16c655c8350b4c01b8d6abfb38cc2acb475238b62c2146186d7/tqdm-4.67.0-py3-none-any.whl + sha256: 0cd8af9d56911acab92182e88d763100d4788bdf421d251616040cc4d44863be + requires_dist: + - colorama ; platform_system == 'Windows' + - pytest>=6 ; extra == 'dev' + - pytest-cov ; extra == 'dev' + - pytest-timeout ; extra == 'dev' + - pytest-xdist ; extra == 'dev' + - requests ; extra == 'discord' + - ipywidgets>=6 ; extra == 'notebook' + - slack-sdk ; extra == 'slack' + - requests ; extra == 'telegram' + requires_python: '>=3.7' +- kind: pypi + name: typeguard + version: 2.13.3 + url: https://files.pythonhosted.org/packages/9a/bb/d43e5c75054e53efce310e79d63df0ac3f25e34c926be5dffb7d283fb2a8/typeguard-2.13.3-py3-none-any.whl + sha256: 5e3e3be01e887e7eafae5af63d1f36c849aaa94e3a0112097312aabfa16284f1 + requires_dist: + - sphinx-rtd-theme ; extra == 'doc' + - sphinx-autodoc-typehints>=1.2.0 ; extra == 'doc' + - pytest ; extra == 'test' + - typing-extensions ; extra == 'test' + - mypy ; platform_python_implementation != 'PyPy' and extra == 'test' + requires_python: '>=3.5.3' +- kind: conda + name: typing-extensions + version: 4.12.2 + build: hd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.12.2-hd8ed1ab_0.conda + sha256: d3b9a8ed6da7c9f9553c5fd8a4fca9c3e0ab712fa5f497859f82337d67533b73 + md5: 52d648bd608f5737b123f510bb5514b5 + depends: + - typing_extensions 4.12.2 pyha770c72_0 + license: PSF-2.0 + license_family: PSF + purls: [] + size: 10097 + timestamp: 1717802659025 +- kind: conda + name: typing_extensions + version: 4.12.2 + build: pyha770c72_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.12.2-pyha770c72_0.conda + sha256: 0fce54f8ec3e59f5ef3bb7641863be4e1bf1279623e5af3d3fa726e8f7628ddb + md5: ebe6952715e1d5eb567eeebf25250fa7 + depends: + - python >=3.8 + license: PSF-2.0 + license_family: PSF + purls: + - pkg:pypi/typing-extensions?source=hash-mapping + size: 39888 + timestamp: 1717802653893 +- kind: conda + name: tzdata + version: 2024b + build: hc8b5060_0 + subdir: noarch + noarch: generic + url: https://conda.anaconda.org/conda-forge/noarch/tzdata-2024b-hc8b5060_0.conda + sha256: 4fde5c3008bf5d2db82f2b50204464314cc3c91c1d953652f7bd01d9e52aefdf + md5: 8ac3367aafb1cc0a068483c580af8015 + license: LicenseRef-Public-Domain + purls: [] + size: 122354 + timestamp: 1728047496079 +- kind: conda + name: unicodedata2 + version: 15.1.0 + build: py312h66e93f0_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/unicodedata2-15.1.0-py312h66e93f0_1.conda + sha256: 1fcba6d363d901d9a06381e1aee2d5634f82389965dd7a339f19b3ae81ce6da0 + md5: 588486a61153f94c7c13816f7069e440 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + license: Apache-2.0 + license_family: Apache + purls: + - pkg:pypi/unicodedata2?source=hash-mapping + size: 368550 + timestamp: 1729704685856 +- kind: conda + name: wheel + version: 0.45.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/wheel-0.45.0-pyhd8ed1ab_0.conda + sha256: 8a51067f8e1a2cb0b5e89672dbcc0369e344a92e869c38b2946584aa09ab7088 + md5: f9751d7c71df27b2d29f5cab3378982e + depends: + - python >=3.8 + license: MIT + license_family: MIT + purls: + - pkg:pypi/wheel?source=hash-mapping + size: 62755 + timestamp: 1731120002488 +- kind: conda + name: xarray + version: 2024.10.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/xarray-2024.10.0-pyhd8ed1ab_0.conda + sha256: a35c8291de55f96ecc9121d1ebd4995977ea2f51d9e529e97749abc108afb0e4 + md5: 53e365732dfa053c4d19fc6b927392c4 + depends: + - numpy >=1.24 + - packaging >=23.1 + - pandas >=2.1 + - python >=3.10 + constrains: + - matplotlib-base >=3.7 + - netcdf4 >=1.6.0 + - numba >=0.57 + - hdf5 >=1.12 + - sparse >=0.14 + - cftime >=1.6 + - zarr >=2.16 + - flox >=0.7 + - pint >=0.22 + - toolz >=0.12 + - scipy >=1.11 + - seaborn-base >=0.12 + - distributed >=2023.9 + - iris >=3.7 + - cartopy >=0.22 + - bottleneck >=1.3 + - dask-core >=2023.9 + - h5py >=3.8 + - h5netcdf >=1.2 + - nc-time-axis >=1.4 + license: Apache-2.0 + license_family: APACHE + purls: + - pkg:pypi/xarray?source=hash-mapping + size: 813754 + timestamp: 1729867978934 +- kind: conda + name: xarray-einstats + version: 0.8.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/xarray-einstats-0.8.0-pyhd8ed1ab_0.conda + sha256: 8cb41b361184ee06515829e729184716e252c6f661590898242e93c3e87dd415 + md5: 729ecac2a5d024cce0837c25cf28f695 + depends: + - numpy >=1.23 + - python >=3.10 + - scipy >=1.9 + - xarray >=2022.09.0 + license: Apache-2.0 + license_family: APACHE + purls: + - pkg:pypi/xarray-einstats?source=hash-mapping + size: 33815 + timestamp: 1726758642806 +- kind: conda + name: xorg-libice + version: 1.1.1 + build: hb9d3cd8_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/xorg-libice-1.1.1-hb9d3cd8_1.conda + sha256: ec276da68d1c4a3d34a63195b35ca5b248d4aff0812464dcd843d74649b5cec4 + md5: 19608a9656912805b2b9a2f6bd257b04 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + license: MIT + license_family: MIT + purls: [] + size: 58159 + timestamp: 1727531850109 +- kind: conda + name: xorg-libsm + version: 1.2.4 + build: he73a12e_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/xorg-libsm-1.2.4-he73a12e_1.conda + sha256: 70e903370977d44c9120a5641ab563887bd48446e9ef6fc2a3f5f60531c2cd6c + md5: 05a8ea5f446de33006171a7afe6ae857 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - libuuid >=2.38.1,<3.0a0 + - xorg-libice >=1.1.1,<2.0a0 + license: MIT + license_family: MIT + purls: [] + size: 27516 + timestamp: 1727634669421 +- kind: conda + name: xorg-libx11 + version: 1.8.10 + build: h4f16b4b_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/xorg-libx11-1.8.10-h4f16b4b_0.conda + sha256: c4650634607864630fb03696474a0535f6fce5fda7d81a6462346e071b53dfa7 + md5: 0b666058a179b744a622d0a4a0c56353 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - libxcb >=1.17.0,<2.0a0 + - xorg-xorgproto + license: MIT + license_family: MIT + purls: [] + size: 838308 + timestamp: 1727356837875 +- kind: conda + name: xorg-libxau + version: 1.0.11 + build: hb9d3cd8_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxau-1.0.11-hb9d3cd8_1.conda + sha256: 532a046fee0b3a402db867b6ec55c84ba4cdedb91d817147c8feeae9766be3d6 + md5: 77cbc488235ebbaab2b6e912d3934bae + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + license: MIT + license_family: MIT + purls: [] + size: 14679 + timestamp: 1727034741045 +- kind: conda + name: xorg-libxdmcp + version: 1.1.5 + build: hb9d3cd8_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxdmcp-1.1.5-hb9d3cd8_0.conda + sha256: 6b250f3e59db07c2514057944a3ea2044d6a8cdde8a47b6497c254520fade1ee + md5: 8035c64cb77ed555e3f150b7b3972480 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + license: MIT + license_family: MIT + purls: [] + size: 19901 + timestamp: 1727794976192 +- kind: conda + name: xorg-libxext + version: 1.3.6 + build: hb9d3cd8_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxext-1.3.6-hb9d3cd8_0.conda + sha256: da5dc921c017c05f38a38bd75245017463104457b63a1ce633ed41f214159c14 + md5: febbab7d15033c913d53c7a2c102309d + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - xorg-libx11 >=1.8.10,<2.0a0 + license: MIT + license_family: MIT + purls: [] + size: 50060 + timestamp: 1727752228921 +- kind: conda + name: xorg-libxrender + version: 0.9.11 + build: hb9d3cd8_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxrender-0.9.11-hb9d3cd8_1.conda + sha256: f1217e902c0b1d8bc5d3ce65e483ebf38b049c823c9117b7198cfb16bd2b9143 + md5: a7a49a8b85122b49214798321e2e96b4 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - xorg-libx11 >=1.8.10,<2.0a0 + - xorg-xorgproto + license: MIT + license_family: MIT + purls: [] + size: 37780 + timestamp: 1727529943015 +- kind: conda + name: xorg-xorgproto + version: '2024.1' + build: hb9d3cd8_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/xorg-xorgproto-2024.1-hb9d3cd8_1.conda + sha256: 1316680be6edddee0156b86ec1102fc8286f51c1a5440366ed1db596a2dc3731 + md5: 7c21106b851ec72c037b162c216d8f05 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + license: MIT + license_family: MIT + purls: [] + size: 565425 + timestamp: 1726846388217 +- kind: conda + name: xz + version: 5.2.6 + build: h166bdaf_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/xz-5.2.6-h166bdaf_0.tar.bz2 + sha256: 03a6d28ded42af8a347345f82f3eebdd6807a08526d47899a42d62d319609162 + md5: 2161070d867d1b1204ea749c8eec4ef0 + depends: + - libgcc-ng >=12 + license: LGPL-2.1 and GPL-2.0 + purls: [] + size: 418368 + timestamp: 1660346797927 +- kind: conda + name: zipp + version: 3.21.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/zipp-3.21.0-pyhd8ed1ab_0.conda + sha256: 232a30e4b0045c9de5e168dda0328dc0e28df9439cdecdfb97dd79c1c82c4cec + md5: fee389bf8a4843bd7a2248ce11b7f188 + depends: + - python >=3.8 + license: MIT + license_family: MIT + purls: + - pkg:pypi/zipp?source=hash-mapping + size: 21702 + timestamp: 1731262194278 +- kind: conda + name: zlib + version: 1.3.1 + build: hb9d3cd8_2 + build_number: 2 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/zlib-1.3.1-hb9d3cd8_2.conda + sha256: 5d7c0e5f0005f74112a34a7425179f4eb6e73c92f5d109e6af4ddeca407c92ab + md5: c9f075ab2f33b3bbee9e62d4ad0a6cd8 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - libzlib 1.3.1 hb9d3cd8_2 + license: Zlib + license_family: Other + purls: [] + size: 92286 + timestamp: 1727963153079 +- kind: conda + name: zstd + version: 1.5.6 + build: ha6fb4c9_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.6-ha6fb4c9_0.conda + sha256: c558b9cc01d9c1444031bd1ce4b9cff86f9085765f17627a6cd85fc623c8a02b + md5: 4d056880988120e29d75bfff282e0f45 + depends: + - libgcc-ng >=12 + - libstdcxx-ng >=12 + - libzlib >=1.2.13,<2.0.0a0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 554846 + timestamp: 1714722996770 diff --git a/pixi.toml b/pixi.toml new file mode 100644 index 0000000..67b350d --- /dev/null +++ b/pixi.toml @@ -0,0 +1,24 @@ +[project] +authors = ["Adrian Seyboldt "] +channels = ["conda-forge"] +description = "Add a short description here" +name = "nuts-py" +platforms = ["linux-64"] +version = "0.1.0" + +[tasks] +test = "pytest" +develop = "maturin develop --release" + +[dependencies] +python = ">=3.12.7,<3.13" +pymc = ">=5.18.0,<5.19" +numba = ">=0.60.0,<0.61" +pytest = ">=8.3.3,<9" +maturin = ">=1.7.4,<2" +pip = ">=24.3.1,<25" +jax = ">=0.4.34,<0.5" + +[pypi-dependencies] +bridgestan = ">=2.5.0, <3" +flowjax = { git = "https://github.com/aseyboldt/flowjax.git", rev = "1c282f2ded78e81c7ce6a96f61523a9f18bf8edc" } From 2abcb05a7358869447c23ca6012777b54bc963ac Mon Sep 17 00:00:00 2001 From: Adrian Seyboldt Date: Fri, 15 Nov 2024 13:32:16 +0100 Subject: [PATCH 15/34] Expose batch size --- pixi.lock | 1141 +++++++++++++++++++++------- pixi.toml | 12 +- python/nutpie/transform_adapter.py | 6 +- 3 files changed, 903 insertions(+), 256 deletions(-) diff --git a/pixi.lock b/pixi.lock index 745d684..0190177 100644 --- a/pixi.lock +++ b/pixi.lock @@ -10,6 +10,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/_libgcc_mutex-0.1-conda_forge.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-2_kmp_llvm.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/arviz-0.20.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/asttokens-2.4.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/atk-1.0-2.38.0-h04ea711_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/binutils_impl_linux-64-2.43-h4bf12b8_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/binutils_linux-64-2.43-h4852527_2.conda @@ -27,11 +28,15 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2024.8.30-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cloudpickle-3.1.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/comm-0.2.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cons-0.4.6-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/contourpy-1.3.1-py312h68727a3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cycler-0.12.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/debugpy-1.8.8-py312h2ec8cdc_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/decorator-5.1.1-pyhd8ed1ab_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/etuples-0.3.9-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.2.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/executing-2.1.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/filelock-3.16.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-dejavu-sans-mono-2.37-hab24e00_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-inconsolata-3.000-h77eed37_0.tar.bz2 @@ -40,7 +45,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/fontconfig-2.15.0-h7e30c49_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/fonts-conda-ecosystem-1-0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/fonts-conda-forge-1-0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/linux-64/fonttools-4.54.1-py312h178313f_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/fonttools-4.55.0-py312h178313f_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/freetype-2.12.1-h267a509_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/fribidi-1.0.10-h36c2ea0_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/linux-64/gcc-13.3.0-h9576a4e_1.conda @@ -61,8 +66,11 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/icu-75.1-he02047a_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.5.0-pyha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jax-0.4.34-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/jaxlib-0.4.34-cpu_py312haec0345_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ipykernel-6.29.5-pyh3099207_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ipython-8.29.0-pyh707e725_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jedi-0.19.2-pyhff2d567_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_client-8.6.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_core-5.7.2-pyh31011fe_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/kernel-headers_linux-64-3.10.0-he073ed8_18.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/keyutils-1.6.1-h166bdaf_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/linux-64/kiwisolver-1.4.7-py312h68727a3_0.conda @@ -70,7 +78,6 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/lcms2-2.16-hb7c19ff_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.43-h712a8e2_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/lerc-4.0.0-h27087fc_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/linux-64/libabseil-20240722.0-cxx17_h5888daf_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libaec-1.1.3-h59595ed_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libblas-3.9.0-25_linux64_openblas.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlicommon-1.1.0-hb9d3cd8_2.conda @@ -92,7 +99,6 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran5-14.2.0-hd5240d6_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libglib-2.82.2-h2ff4ddf_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-14.2.0-h77fa898_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgrpc-1.65.5-hf5c653b_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libhwloc-2.11.1-default_hecaa2ac_1000.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libiconv-1.17-hd590300_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libjpeg-turbo-3.0.0-hd590300_1.conda @@ -103,10 +109,9 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/libnsl-2.0.1-hd590300_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenblas-0.3.28-pthreads_h94d23a6_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libpng-1.6.44-hadc24fc_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libprotobuf-5.27.5-h5b01275_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libre2-11-2024.07.02-hbbce691_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/librsvg-2.58.4-hc0ffecb_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libsanitizer-13.3.0-heb74ff8_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libsodium-1.0.20-h4ab18f5_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.47.0-hadc24fc_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libssh2-1.11.0-h0841786_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-14.2.0-hc0a3c3a_1.conda @@ -124,37 +129,45 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/logical-unification-0.4.6-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-3.0.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/matplotlib-base-3.9.2-py312hd3ec401_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/matplotlib-inline-0.1.7-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/maturin-1.7.4-py312h6ab59e4_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/minikanren-1.0.3-pyhd8ed1ab_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/linux-64/mkl-2024.2.2-ha957f24_16.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/mkl-service-2.4.2-py312hf224ee7_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/ml_dtypes-0.5.0-py312hf9745cd_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/multipledispatch-0.6.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/munkres-1.1.4-pyh9f0ad1d_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.5-he02047a_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/nest-asyncio-1.6.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/numba-0.60.0-py312h83e6fd3_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/numpy-1.26.4-py312heda63a1_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/openblas-0.3.28-pthreads_h6ec200e_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/openjpeg-2.5.2-h488ebb8_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.4.0-hb9d3cd8_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/opt-einsum-3.4.0-hd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/opt_einsum-3.4.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-24.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/pandas-2.2.3-py312hf9745cd_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/pango-1.54.0-h4c5309f_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/parso-0.8.4-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/patsy-1.0.1-pyhff2d567_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/pcre2-10.44-hba22ea6_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pexpect-4.9.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pickleshare-0.7.5-py_1003.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/linux-64/pillow-11.0.0-py312h7b63e92_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pip-24.3.1-pyh8b19718_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/pixman-0.43.2-h59595ed_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.3.6-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.5.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/prompt-toolkit-3.0.48-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/psutil-6.1.0-py312h66e93f0_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/pthread-stubs-0.4-hb9d3cd8_1002.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ptyprocess-0.7.0-pyhd3deb0d_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/pure_eval-0.2.3-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.18.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pymc-5.18.0-hd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pymc-base-5.18.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pymc-5.18.1-hd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pymc-base-5.18.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pyparsing-3.2.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/pytensor-2.25.5-py312h97902ae_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/pytensor-base-2.25.5-py312h25a0e75_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pytensor-2.26.2-py312h97902ae_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pytensor-base-2.26.2-py312h25a0e75_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-8.3.3-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.12.7-hc5c86c4_0_cpython.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0-pyhd8ed1ab_0.conda @@ -162,23 +175,30 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/python-tzdata-2024.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/python_abi-3.12-5_cp312.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pytz-2024.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pyzmq-26.2.0-py312hbf22597_3.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/qhull-2020.2-h434a139_5.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/re2-2024.07.02-h77b4e00_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.2-h8228510_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/rich-13.9.4-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/scipy-1.14.1-py312h62794b6_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/seaborn-0.13.2-hd8ed1ab_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/seaborn-base-0.13.2-pyhd8ed1ab_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-75.3.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.16.0-pyh6c4a22f_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/stack_data-0.6.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/statsmodels-0.14.4-py312hc0a28a1_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/sysroot_linux-64-2.17-h4a8ded7_18.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/tbb-2021.13.0-h84d6215_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/threadpoolctl-3.5.0-pyhc1e730c_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_h4845f30_101.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.1.0-pyhff2d567_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/toolz-1.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/tornado-6.4.1-py312h66e93f0_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/traitlets-5.14.3-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.12.2-hd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.12.2-pyha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2024b-hc8b5060_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/unicodedata2-15.1.0-py312h66e93f0_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/wcwidth-0.2.13-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/wheel-0.45.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/xarray-2024.10.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/xarray-einstats-0.8.0-pyhd8ed1ab_0.conda @@ -191,21 +211,43 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxrender-0.9.11-hb9d3cd8_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-xorgproto-2024.1-hb9d3cd8_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/xz-5.2.6-h166bdaf_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/zeromq-4.3.5-h3b0a872_7.conda - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.21.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/zlib-1.3.1-hb9d3cd8_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.6-ha6fb4c9_0.conda - pypi: https://files.pythonhosted.org/packages/a2/ad/e0d3c824784ff121c03cc031f944bc7e139a8f1870ffd2845cc2dd76f6c4/absl_py-2.1.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/02/c8/542c1f9513136b431b101d06fb547e94d3ebc1d33740c3024315b55d4ada/bridgestan-2.5.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/16/92/92a76dc2ff3a12e69ba94e7e05168d37d0345fa08c87e1fe24d0c2a42223/charset_normalizer-3.4.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - pypi: https://files.pythonhosted.org/packages/46/dd/c1ff2eb8fbf95a8ca804abb1cc3ce70b283ee7b4bc653c3abac245670400/chex-0.1.87-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e9/59/f189b03d743364a350c972b89fe08a6db5bbbdc5f1ea6b604b3eee0a7967/dllist-1.2.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/15/9f/3be7f03bf66c8d7d2956b727d984595e4af899f3c15ef2c653029008bf3b/equinox-0.11.8-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/1f/e4/0826dfde2db3fb3a34954323a84d0e6b6fdbc7eb5278c84159c6d43290ac/etils-1.10.0-py3-none-any.whl - pypi: git+https://github.com/aseyboldt/flowjax.git@1c282f2ded78e81c7ce6a96f61523a9f18bf8edc + - pypi: https://files.pythonhosted.org/packages/76/c6/c88e154df9c4e1a2a66ccf0005a88dfb2650c1dffb6f5ce603dfbd452ce3/idna-3.10-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/62/20/6c57c50c0ccc645fea1895950f1e5cd02f961ee44b3ffe83617fa46b0c1d/jax-0.4.35-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d7/aa/f15ea857ad9bcff7a0c942dc570ca718b026cc0cc5c513525bb08cacf3c0/jax_cuda12_pjrt-0.4.35-py3-none-manylinux2014_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/23/a1/781f98da41b9abf63a1468c5babbafa7b1bdb766c081386644a4034fbdef/jax_cuda12_plugin-0.4.35-cp312-cp312-manylinux2014_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/e7/0d/4faf839e3c8ce2a5b615df64427be3e870899c72c0ebfb5859348150aba1/jaxlib-0.4.34-cp312-cp312-manylinux2014_x86_64.whl - pypi: https://files.pythonhosted.org/packages/56/ae/220537f80eb82ae43a299de31edb2a91a28b8c5fb8046e9ff853ec7763cd/jaxtyping-0.2.34-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/6f/d3/1321715a95e856d4ef4fba24e4351cf5e4c89d459ad132a8cba5fe257d72/ml_dtypes-0.5.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/f3/e7/c186a31c234fce776436753bfef4807df7f9b4cb3eeff358fcfcbf64b547/nvidia_cublas_cu12-12.6.3.3-py3-none-manylinux2014_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/a5/24/120ee57b218d9952c379d1e026c4479c9ece9997a4fb46303611ee48f038/nvidia_cuda_cupti_cu12-12.6.80-py3-none-manylinux2014_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/62/8f/cd3032281ba7bb531fe3159337af00c5c805fd6a31dc700f0715c8748c8c/nvidia_cuda_nvcc_cu12-12.6.77-py3-none-manylinux2014_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/f0/62/65c05e161eeddbafeca24dc461f47de550d9fa8a7e04eb213e32b55cfd99/nvidia_cuda_runtime_cu12-12.6.77-py3-none-manylinux2014_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/2a/78/4535c9c7f859a64781e43c969a3a7e84c54634e319a996d43ef32ce46f83/nvidia_cudnn_cu12-9.5.1.17-py3-none-manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/60/de/99ec247a07ea40c969d904fc14f3a356b3e2a704121675b75c366b694ee1/nvidia_cufft_cu12-11.3.0.4-py3-none-manylinux2014_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/9f/81/baba53585da791d043c10084cf9553e074548408e04ae884cfe9193bd484/nvidia_cusolver_cu12-11.7.1.2-py3-none-manylinux2014_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/43/ac/64c4316ba163e8217a99680c7605f779accffc6a4bcd0c778c12948d3707/nvidia_cusparse_cu12-12.5.4.2-py3-none-manylinux2014_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/ed/1f/6482380ec8dcec4894e7503490fc536d846b0d59694acad9cf99f27d0e7d/nvidia_nccl_cu12-2.23.4-py3-none-manylinux2014_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/fe/e4/486de766851d58699bcfeb3ba6a3beb4d89c3809f75b9d423b9508a8760f/nvidia_nvjitlink_cu12-12.6.77-py3-none-manylinux2014_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/23/cd/066e86230ae37ed0be70aae89aabf03ca8d9f39c8aea0dec8029455b5540/opt_einsum-3.4.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/5c/24/28d0bb21600a78e46754947333ec9a297044af884d360092eb8561575fe9/optax-0.2.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/20/f8/7b1f5b84f84e43face7349ac2df23f0f75d36b5b4a1c1c0305edce82bcc8/paramax-0.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/8f/4d/b72e0782abec07f3d8dabf24cf12673d26b173af2046eb4e67365c776ccf/posteriordb-0.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/f9/9b/335f9764261e915ed497fcdeb11df5dfd6f7bf257d4a6a2a686d80da4d54/requests-2.32.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/2b/78/57043611a16c655c8350b4c01b8d6abfb38cc2acb475238b62c2146186d7/tqdm-4.67.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/9a/bb/d43e5c75054e53efce310e79d63df0ac3f25e34c926be5dffb7d283fb2a8/typeguard-2.13.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ce/d9/5f4c13cecde62396b0d3fe530a50ccea91e7dfc1ccf0e09c228841bb5ba8/urllib3-2.2.3-py3-none-any.whl packages: - kind: conda name: _libgcc_mutex @@ -269,6 +311,24 @@ packages: - pkg:pypi/arviz?source=hash-mapping size: 1473292 timestamp: 1727611803479 +- kind: conda + name: asttokens + version: 2.4.1 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/asttokens-2.4.1-pyhd8ed1ab_0.conda + sha256: 708168f026df19a0344983754d27d1f7b28bb21afc7b97a82f02c4798a3d2111 + md5: 5f25798dcefd8252ce5f9dc494d5f571 + depends: + - python >=3.5 + - six >=1.12.0 + license: Apache-2.0 + license_family: Apache + purls: + - pkg:pypi/asttokens?source=hash-mapping + size: 28922 + timestamp: 1698341257884 - kind: conda name: atk-1.0 version: 2.38.0 @@ -565,6 +625,12 @@ packages: - pkg:pypi/certifi?source=hash-mapping size: 163752 timestamp: 1725278204397 +- kind: pypi + name: charset-normalizer + version: 3.4.0 + url: https://files.pythonhosted.org/packages/16/92/92a76dc2ff3a12e69ba94e7e05168d37d0345fa08c87e1fe24d0c2a42223/charset_normalizer-3.4.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + sha256: 8cda06946eac330cbe6598f77bb54e690b4ca93f593dee1568ad22b04f347c15 + requires_python: '>=3.7.0' - kind: pypi name: chex version: 0.1.87 @@ -614,6 +680,24 @@ packages: - pkg:pypi/colorama?source=hash-mapping size: 25170 timestamp: 1666700778190 +- kind: conda + name: comm + version: 0.2.2 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/comm-0.2.2-pyhd8ed1ab_0.conda + sha256: e923acf02708a8a0b591f3bce4bdc11c8e63b73198b99b35fe6cd96bfb6a0dbe + md5: 948d84721b578d426294e17a02e24cbb + depends: + - python >=3.6 + - traitlets >=5.3 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/comm?source=hash-mapping + size: 12134 + timestamp: 1710320435158 - kind: conda name: cons version: 0.4.6 @@ -670,6 +754,43 @@ packages: - pkg:pypi/cycler?source=hash-mapping size: 13458 timestamp: 1696677888423 +- kind: conda + name: debugpy + version: 1.8.8 + build: py312h2ec8cdc_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/debugpy-1.8.8-py312h2ec8cdc_0.conda + sha256: 9ffdc284d4c67ba9ab88d400fc55890aafba6a559268f2dc3ca5a1c58d1a7ab9 + md5: eb182854d81037c9cfd95b06aba22c06 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - libstdcxx >=13 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + license: MIT + license_family: MIT + purls: + - pkg:pypi/debugpy?source=hash-mapping + size: 2661121 + timestamp: 1731045067784 +- kind: conda + name: decorator + version: 5.1.1 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/decorator-5.1.1-pyhd8ed1ab_0.tar.bz2 + sha256: 328a6a379f9bdfd0230e51de291ce858e6479411ea4b0545fb377c71662ef3e2 + md5: 43afe5ab04e35e17ba28649471dd7364 + depends: + - python >=3.5 + license: BSD-2-Clause + license_family: BSD + purls: + - pkg:pypi/decorator?source=hash-mapping + size: 12072 + timestamp: 1641555714315 - kind: pypi name: dllist version: 1.2.0 @@ -797,6 +918,23 @@ packages: - pkg:pypi/exceptiongroup?source=hash-mapping size: 20418 timestamp: 1720869435725 +- kind: conda + name: executing + version: 2.1.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/executing-2.1.0-pyhd8ed1ab_0.conda + sha256: a52d7516e2e11d3eb10908e10d3eb3f8ef267fea99ed9b09d52d96c4db3441b8 + md5: d0441db20c827c11721889a241df1220 + depends: + - python >=2.7 + license: MIT + license_family: MIT + purls: + - pkg:pypi/executing?source=hash-mapping + size: 28337 + timestamp: 1725214501850 - kind: conda name: filelock version: 3.16.1 @@ -950,13 +1088,12 @@ packages: timestamp: 1566932280397 - kind: conda name: fonttools - version: 4.54.1 - build: py312h178313f_1 - build_number: 1 + version: 4.55.0 + build: py312h178313f_0 subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/fonttools-4.54.1-py312h178313f_1.conda - sha256: 45f405d6d1ef528226c20b681373db0bdb79cc70fec1e495003247b0d3d00140 - md5: bbbf5fa5cab622c33907bc8d7eeea9f7 + url: https://conda.anaconda.org/conda-forge/linux-64/fonttools-4.55.0-py312h178313f_0.conda + sha256: 2a8d4fe8968828584057f8b07f3e102e326d8ec08d0e30e4ecc21f35031239a0 + md5: f404f4fb99ccaea68b00c1cc64fc1e68 depends: - __glibc >=2.17,<3.0.a0 - brotli @@ -969,8 +1106,8 @@ packages: license_family: MIT purls: - pkg:pypi/fonttools?source=hash-mapping - size: 2827447 - timestamp: 1729530553018 + size: 2843090 + timestamp: 1731643626471 - kind: conda name: freetype version: 2.12.1 @@ -1238,6 +1375,7 @@ packages: - packaging - python >=3.9 license: BSD-3-Clause + license_family: BSD purls: - pkg:pypi/h5netcdf?source=hash-mapping size: 47177 @@ -1328,6 +1466,17 @@ packages: purls: [] size: 12129203 timestamp: 1720853576813 +- kind: pypi + name: idna + version: '3.10' + url: https://files.pythonhosted.org/packages/76/c6/c88e154df9c4e1a2a66ccf0005a88dfb2650c1dffb6f5ce603dfbd452ce3/idna-3.10-py3-none-any.whl + sha256: 946d195a0d259cbba61165e88e65941f16e9b36ea6ddb97f00452bae8b1287d3 + requires_dist: + - ruff>=0.6.2 ; extra == 'all' + - mypy>=1.11.2 ; extra == 'all' + - pytest>=8.3.2 ; extra == 'all' + - flake8>=7.1.1 ; extra == 'all' + requires_python: '>=3.6' - kind: conda name: importlib-metadata version: 8.5.0 @@ -1364,60 +1513,127 @@ packages: size: 11101 timestamp: 1673103208955 - kind: conda - name: jax - version: 0.4.34 - build: pyhd8ed1ab_0 + name: ipykernel + version: 6.29.5 + build: pyh3099207_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/ipykernel-6.29.5-pyh3099207_0.conda + sha256: 33cfd339bb4efac56edf93474b37ddc049e08b1b4930cf036c893cc1f5a1f32a + md5: b40131ab6a36ac2c09b7c57d4d3fbf99 + depends: + - __linux + - comm >=0.1.1 + - debugpy >=1.6.5 + - ipython >=7.23.1 + - jupyter_client >=6.1.12 + - jupyter_core >=4.12,!=5.0.* + - matplotlib-inline >=0.1 + - nest-asyncio + - packaging + - psutil + - python >=3.8 + - pyzmq >=24 + - tornado >=6.1 + - traitlets >=5.4.0 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/ipykernel?source=hash-mapping + size: 119084 + timestamp: 1719845605084 +- kind: conda + name: ipython + version: 8.29.0 + build: pyh707e725_0 subdir: noarch noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/jax-0.4.34-pyhd8ed1ab_0.conda - sha256: da3880afc35042b92e0ad214beee372e41162da374dfaa8b1164db1dcee671b2 - md5: f0d3c57355acf3f06d93672e57c0c1e8 + url: https://conda.anaconda.org/conda-forge/noarch/ipython-8.29.0-pyh707e725_0.conda + sha256: 606723272a208cca1036852e04fbb61741b78451784746e75edd1becb70347d2 + md5: 56db21d7d51410fcfbfeca3d1a6b4269 depends: - - importlib-metadata >=4.6 - - jaxlib >=0.4.34,<=0.4.34 - - ml_dtypes >=0.2.0 - - numpy >=1.26 - - opt-einsum + - __unix + - decorator + - exceptiongroup + - jedi >=0.16 + - matplotlib-inline + - pexpect >4.3 + - pickleshare + - prompt-toolkit >=3.0.41,<3.1.0 + - pygments >=2.4.0 - python >=3.10 - - scipy >=1.11.1 - constrains: - - cudnn >=9.2.1.18 - license: Apache-2.0 - license_family: APACHE + - stack_data + - traitlets >=5.13.0 + - typing_extensions >=4.6 + license: BSD-3-Clause + license_family: BSD purls: - - pkg:pypi/jax?source=hash-mapping - size: 1421248 - timestamp: 1729336456855 -- kind: conda + - pkg:pypi/ipython?source=compressed-mapping + size: 599356 + timestamp: 1729866495921 +- kind: pypi + name: jax + version: 0.4.35 + url: https://files.pythonhosted.org/packages/62/20/6c57c50c0ccc645fea1895950f1e5cd02f961ee44b3ffe83617fa46b0c1d/jax-0.4.35-py3-none-any.whl + sha256: fa99e909a31424abfec750019a6dd36f6acc18a6e7d40e2c0086b932cc351325 + requires_dist: + - jaxlib>=0.4.34,<=0.4.35 + - ml-dtypes>=0.4.0 + - numpy>=1.24 + - opt-einsum + - scipy>=1.10 + - numpy>=1.26.0 ; python_full_version >= '3.12' + - scipy>=1.11.1 ; python_full_version >= '3.12' + - jaxlib==0.4.34 ; extra == 'ci' + - jaxlib==0.4.34 ; extra == 'cuda' + - jax-cuda12-plugin[with-cuda]>=0.4.34,<=0.4.35 ; extra == 'cuda' + - jaxlib==0.4.34 ; extra == 'cuda12' + - jax-cuda12-plugin[with-cuda]>=0.4.34,<=0.4.35 ; extra == 'cuda12' + - jaxlib==0.4.34 ; extra == 'cuda12-local' + - jax-cuda12-plugin==0.4.34 ; extra == 'cuda12-local' + - jaxlib==0.4.34 ; extra == 'cuda12-pip' + - jax-cuda12-plugin[with-cuda]>=0.4.34,<=0.4.35 ; extra == 'cuda12-pip' + - kubernetes ; extra == 'k8s' + - jaxlib==0.4.34 ; extra == 'minimum-jaxlib' + - jaxlib>=0.4.34,<=0.4.35 ; extra == 'tpu' + - libtpu-nightly==0.1.dev20241010+nightly.cleanup ; extra == 'tpu' + - libtpu==0.0.2 ; extra == 'tpu' + - requests ; extra == 'tpu' + requires_python: '>=3.10' +- kind: pypi + name: jax-cuda12-pjrt + version: 0.4.35 + url: https://files.pythonhosted.org/packages/d7/aa/f15ea857ad9bcff7a0c942dc570ca718b026cc0cc5c513525bb08cacf3c0/jax_cuda12_pjrt-0.4.35-py3-none-manylinux2014_x86_64.whl + sha256: 0ffe7e1ba65659bd5738c2cc5addaf0a56205d2188eec5da194b63c068e1fdd2 +- kind: pypi + name: jax-cuda12-plugin + version: 0.4.35 + url: https://files.pythonhosted.org/packages/23/a1/781f98da41b9abf63a1468c5babbafa7b1bdb766c081386644a4034fbdef/jax_cuda12_plugin-0.4.35-cp312-cp312-manylinux2014_x86_64.whl + sha256: 80aa5e628e8e9dd4f89b767f73900152033c3bf6d5f49dc2081e93f9bac1c9dc + requires_dist: + - jax-cuda12-pjrt==0.4.35 + - nvidia-cublas-cu12>=12.1.3.1 ; extra == 'with-cuda' + - nvidia-cuda-cupti-cu12>=12.1.105 ; extra == 'with-cuda' + - nvidia-cuda-nvcc-cu12>=12.1.105 ; extra == 'with-cuda' + - nvidia-cuda-runtime-cu12>=12.1.105 ; extra == 'with-cuda' + - nvidia-cudnn-cu12>=9.1,<10.0 ; extra == 'with-cuda' + - nvidia-cufft-cu12>=11.0.2.54 ; extra == 'with-cuda' + - nvidia-cusolver-cu12>=11.4.5.107 ; extra == 'with-cuda' + - nvidia-cusparse-cu12>=12.1.0.106 ; extra == 'with-cuda' + - nvidia-nccl-cu12>=2.18.1 ; extra == 'with-cuda' + - nvidia-nvjitlink-cu12>=12.1.105 ; extra == 'with-cuda' + requires_python: '>=3.10' +- kind: pypi name: jaxlib version: 0.4.34 - build: cpu_py312haec0345_0 - subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/jaxlib-0.4.34-cpu_py312haec0345_0.conda - sha256: 8e2dce1d39ccb4e6883444f71b7155168c0612d9d086b58616578448aeb33afe - md5: 08f587f0f6505671c7715163e18b6f3a - depends: - - __glibc >=2.17,<3.0.a0 - - libabseil * cxx17* - - libabseil >=20240722.0,<20240723.0a0 - - libgcc >=13 - - libgrpc >=1.65.5,<1.66.0a0 - - libstdcxx >=13 - - libzlib >=1.3.1,<2.0a0 - - ml_dtypes >=0.2.0 - - numpy >=1.19,<3 - - openssl >=3.3.2,<4.0a0 - - python >=3.12,<3.13.0a0 - - python_abi 3.12.* *_cp312 - - scipy >=1.9 - constrains: - - jax >=0.4.34 - license: Apache-2.0 - license_family: APACHE - purls: - - pkg:pypi/jaxlib?source=hash-mapping - size: 57258872 - timestamp: 1729096396952 + url: https://files.pythonhosted.org/packages/e7/0d/4faf839e3c8ce2a5b615df64427be3e870899c72c0ebfb5859348150aba1/jaxlib-0.4.34-cp312-cp312-manylinux2014_x86_64.whl + sha256: 48272e9034ff868d4328cf0055a07882fd2be93f59dfb6283af7de491f9d1290 + requires_dist: + - scipy>=1.10 + - numpy>=1.24 + - ml-dtypes>=0.2.0 + - scipy>=1.11.1 ; python_full_version >= '3.12' + requires_python: '>=3.10' - kind: pypi name: jaxtyping version: 0.2.34 @@ -1426,6 +1642,67 @@ packages: requires_dist: - typeguard==2.13.3 requires_python: ~=3.9 +- kind: conda + name: jedi + version: 0.19.2 + build: pyhff2d567_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/jedi-0.19.2-pyhff2d567_0.conda + sha256: d37dad14c00d06d33bfb99c378d0abd7645224a9491c433af5028f24863341ab + md5: 11ead81b00e0f7cc901fceb7ccfb92c1 + depends: + - parso >=0.8.3,<0.9.0 + - python >=3.9 + license: Apache-2.0 AND MIT + purls: + - pkg:pypi/jedi?source=hash-mapping + size: 842916 + timestamp: 1731317305873 +- kind: conda + name: jupyter_client + version: 8.6.3 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/jupyter_client-8.6.3-pyhd8ed1ab_0.conda + sha256: 4419c85e209a715f551a5c9bead746f29ee9d0fc41e772a76db3868622795671 + md5: a14218cfb29662b4a19ceb04e93e298e + depends: + - importlib-metadata >=4.8.3 + - jupyter_core >=4.12,!=5.0.* + - python >=3.8 + - python-dateutil >=2.8.2 + - pyzmq >=23.0 + - tornado >=6.2 + - traitlets >=5.3 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/jupyter-client?source=hash-mapping + size: 106055 + timestamp: 1726610805505 +- kind: conda + name: jupyter_core + version: 5.7.2 + build: pyh31011fe_1 + build_number: 1 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/jupyter_core-5.7.2-pyh31011fe_1.conda + sha256: 732b1e8536bc22a5a174baa79842d79db2f4956d90293dd82dc1b3f6099bcccd + md5: 0a2980dada0dd7fd0998f0342308b1b1 + depends: + - __unix + - platformdirs >=2.5 + - python >=3.8 + - traitlets >=5.3 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/jupyter-core?source=hash-mapping + size: 57671 + timestamp: 1727163547058 - kind: conda name: kernel-headers_linux-64 version: 3.10.0 @@ -1548,27 +1825,6 @@ packages: purls: [] size: 281798 timestamp: 1657977462600 -- kind: conda - name: libabseil - version: '20240722.0' - build: cxx17_h5888daf_1 - build_number: 1 - subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/libabseil-20240722.0-cxx17_h5888daf_1.conda - sha256: 8f91429091183c26950f1e7ffa730e8632f0627ba35d2fccd71df31628c9b4e5 - md5: e1f604644fe8d78e22660e2fec6756bc - depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=13 - - libstdcxx >=13 - constrains: - - libabseil-static =20240722.0=cxx17* - - abseil-cpp =20240722.0 - license: Apache-2.0 - license_family: Apache - purls: [] - size: 1310521 - timestamp: 1727295454064 - kind: conda name: libaec version: 1.1.3 @@ -1954,33 +2210,6 @@ packages: purls: [] size: 460992 timestamp: 1729027639220 -- kind: conda - name: libgrpc - version: 1.65.5 - build: hf5c653b_0 - subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/libgrpc-1.65.5-hf5c653b_0.conda - sha256: d279abd46262e817c7a00aeb4df9b5ed4de38130130b248e2c50875e982f30fa - md5: 3b0048cabc6815a4d8874a0240519d32 - depends: - - __glibc >=2.17,<3.0.a0 - - c-ares >=1.32.3,<2.0a0 - - libabseil * cxx17* - - libabseil >=20240722.0,<20240723.0a0 - - libgcc >=13 - - libprotobuf >=5.27.5,<5.27.6.0a0 - - libre2-11 >=2023.9.1 - - libstdcxx >=13 - - libzlib >=1.3.1,<2.0a0 - - openssl >=3.3.2,<4.0a0 - - re2 - constrains: - - grpc-cpp =1.65.5 - license: Apache-2.0 - license_family: APACHE - purls: [] - size: 7229891 - timestamp: 1727200905306 - kind: conda name: libhwloc version: 2.11.1 @@ -2164,49 +2393,6 @@ packages: purls: [] size: 290661 timestamp: 1726234747153 -- kind: conda - name: libprotobuf - version: 5.27.5 - build: h5b01275_2 - build_number: 2 - subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/libprotobuf-5.27.5-h5b01275_2.conda - sha256: 79ac9726cd0a1cb1ba335f7fc7ccac5f679a66d71d9553ca88a805b8787d55ce - md5: 66ed3107adbdfc25ba70454ba11e6d1e - depends: - - __glibc >=2.17,<3.0.a0 - - libabseil * cxx17* - - libabseil >=20240722.0,<20240723.0a0 - - libgcc >=13 - - libstdcxx >=13 - - libzlib >=1.3.1,<2.0a0 - license: BSD-3-Clause - license_family: BSD - purls: [] - size: 2940269 - timestamp: 1727424395109 -- kind: conda - name: libre2-11 - version: 2024.07.02 - build: hbbce691_1 - build_number: 1 - subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/libre2-11-2024.07.02-hbbce691_1.conda - sha256: f8ad6a4f6d4fd54ebe3e5e712a01e663222fc57f49d16b6b8b10c30990dafb8f - md5: 2124de47357b7a516c0a3efd8f88c143 - depends: - - __glibc >=2.17,<3.0.a0 - - libabseil * cxx17* - - libabseil >=20240722.0,<20240723.0a0 - - libgcc >=13 - - libstdcxx >=13 - constrains: - - re2 2024.07.02.* - license: BSD-3-Clause - license_family: BSD - purls: [] - size: 211096 - timestamp: 1728778964655 - kind: conda name: librsvg version: 2.58.4 @@ -2249,6 +2435,20 @@ packages: purls: [] size: 4133922 timestamp: 1724801171589 +- kind: conda + name: libsodium + version: 1.0.20 + build: h4ab18f5_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libsodium-1.0.20-h4ab18f5_0.conda + sha256: 0105bd108f19ea8e6a78d2d994a6d4a8db16d19a41212070d2d1d48a63c34161 + md5: a587892d3c13b6621a6091be690dbca2 + depends: + - libgcc-ng >=12 + license: ISC + purls: [] + size: 205978 + timestamp: 1716828628198 - kind: conda name: libsqlite version: 3.47.0 @@ -2573,6 +2773,24 @@ packages: - pkg:pypi/matplotlib?source=hash-mapping size: 7965171 timestamp: 1731025360821 +- kind: conda + name: matplotlib-inline + version: 0.1.7 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/matplotlib-inline-0.1.7-pyhd8ed1ab_0.conda + sha256: 7ea68676ea35fbb095420bbcc1c82c4767b8be7bb56abb6989b7f89d957a3bab + md5: 779345c95648be40d22aaa89de7d4254 + depends: + - python >=3.6 + - traitlets + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/matplotlib-inline?source=hash-mapping + size: 14599 + timestamp: 1713250613726 - kind: conda name: maturin version: 1.7.4 @@ -2672,26 +2890,23 @@ packages: - pkg:pypi/mkl-service?source=hash-mapping size: 73420 timestamp: 1728843500808 -- kind: conda - name: ml_dtypes +- kind: pypi + name: ml-dtypes version: 0.5.0 - build: py312hf9745cd_0 - subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/ml_dtypes-0.5.0-py312hf9745cd_0.conda - sha256: 559c14640ce8e3f2270da6130ba50ae624f3db56176fad29a5436b2dec3fc3b2 - md5: 8ca779f3f30b00181aeee820fe8b22d5 - depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=13 - - libstdcxx >=13 - - numpy >=1.19,<3 - - python >=3.12,<3.13.0a0 - - python_abi 3.12.* *_cp312 - license: MPL-2.0 AND Apache-2.0 - purls: - - pkg:pypi/ml-dtypes?source=hash-mapping - size: 290054 - timestamp: 1726376440408 + url: https://files.pythonhosted.org/packages/6f/d3/1321715a95e856d4ef4fba24e4351cf5e4c89d459ad132a8cba5fe257d72/ml_dtypes-0.5.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + sha256: a38df8df61194aeaae1ab7579075779b4ad32cd1cffd012c28be227fa7f2a70a + requires_dist: + - numpy>=1.21 + - numpy>=1.21.2 ; python_full_version >= '3.10' + - numpy>=1.23.3 ; python_full_version >= '3.11' + - numpy>=1.26.0 ; python_full_version >= '3.12' + - numpy>=2.1.0 ; python_full_version >= '3.13' + - absl-py ; extra == 'dev' + - pytest ; extra == 'dev' + - pytest-xdist ; extra == 'dev' + - pylint>=2.6.0 ; extra == 'dev' + - pyink ; extra == 'dev' + requires_python: '>=3.9' - kind: conda name: multipledispatch version: 0.6.0 @@ -2744,6 +2959,23 @@ packages: purls: [] size: 889086 timestamp: 1724658547447 +- kind: conda + name: nest-asyncio + version: 1.6.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/nest-asyncio-1.6.0-pyhd8ed1ab_0.conda + sha256: 30db21d1f7e59b3408b831a7e0417b83b53ee6223afae56482c5f26da3ceb49a + md5: 6598c056f64dc8800d40add25e4e2c34 + depends: + - python >=3.5 + license: BSD-2-Clause + license_family: BSD + purls: + - pkg:pypi/nest-asyncio?source=hash-mapping + size: 11638 + timestamp: 1705850780510 - kind: conda name: numba version: 0.60.0 @@ -2798,6 +3030,76 @@ packages: - pkg:pypi/numpy?source=hash-mapping size: 7484186 timestamp: 1707225809722 +- kind: pypi + name: nvidia-cublas-cu12 + version: 12.6.3.3 + url: https://files.pythonhosted.org/packages/f3/e7/c186a31c234fce776436753bfef4807df7f9b4cb3eeff358fcfcbf64b547/nvidia_cublas_cu12-12.6.3.3-py3-none-manylinux2014_x86_64.whl + sha256: f33fb68e101d99470c82d17f92a0dd9f74de2a21685c217f4716cdd63b1316eb + requires_python: '>=3' +- kind: pypi + name: nvidia-cuda-cupti-cu12 + version: 12.6.80 + url: https://files.pythonhosted.org/packages/a5/24/120ee57b218d9952c379d1e026c4479c9ece9997a4fb46303611ee48f038/nvidia_cuda_cupti_cu12-12.6.80-py3-none-manylinux2014_x86_64.whl + sha256: a3eff6cdfcc6a4c35db968a06fcadb061cbc7d6dde548609a941ff8701b98b73 + requires_python: '>=3' +- kind: pypi + name: nvidia-cuda-nvcc-cu12 + version: 12.6.77 + url: https://files.pythonhosted.org/packages/62/8f/cd3032281ba7bb531fe3159337af00c5c805fd6a31dc700f0715c8748c8c/nvidia_cuda_nvcc_cu12-12.6.77-py3-none-manylinux2014_x86_64.whl + sha256: b66bb5dd6b8ae62262586691977d3b4a425e91db61b4b9bc2f6b42bcd4154b96 + requires_python: '>=3' +- kind: pypi + name: nvidia-cuda-runtime-cu12 + version: 12.6.77 + url: https://files.pythonhosted.org/packages/f0/62/65c05e161eeddbafeca24dc461f47de550d9fa8a7e04eb213e32b55cfd99/nvidia_cuda_runtime_cu12-12.6.77-py3-none-manylinux2014_x86_64.whl + sha256: a84d15d5e1da416dd4774cb42edf5e954a3e60cc945698dc1d5be02321c44dc8 + requires_python: '>=3' +- kind: pypi + name: nvidia-cudnn-cu12 + version: 9.5.1.17 + url: https://files.pythonhosted.org/packages/2a/78/4535c9c7f859a64781e43c969a3a7e84c54634e319a996d43ef32ce46f83/nvidia_cudnn_cu12-9.5.1.17-py3-none-manylinux_2_28_x86_64.whl + sha256: 30ac3869f6db17d170e0e556dd6cc5eee02647abc31ca856634d5a40f82c15b2 + requires_dist: + - nvidia-cublas-cu12 + requires_python: '>=3' +- kind: pypi + name: nvidia-cufft-cu12 + version: 11.3.0.4 + url: https://files.pythonhosted.org/packages/60/de/99ec247a07ea40c969d904fc14f3a356b3e2a704121675b75c366b694ee1/nvidia_cufft_cu12-11.3.0.4-py3-none-manylinux2014_x86_64.whl + sha256: 768160ac89f6f7b459bee747e8d175dbf53619cfe74b2a5636264163138013ca + requires_dist: + - nvidia-nvjitlink-cu12 + requires_python: '>=3' +- kind: pypi + name: nvidia-cusolver-cu12 + version: 11.7.1.2 + url: https://files.pythonhosted.org/packages/9f/81/baba53585da791d043c10084cf9553e074548408e04ae884cfe9193bd484/nvidia_cusolver_cu12-11.7.1.2-py3-none-manylinux2014_x86_64.whl + sha256: 6cf28f17f64107a0c4d7802be5ff5537b2130bfc112f25d5a30df227058ca0e6 + requires_dist: + - nvidia-cublas-cu12 + - nvidia-nvjitlink-cu12 + - nvidia-cusparse-cu12 + requires_python: '>=3' +- kind: pypi + name: nvidia-cusparse-cu12 + version: 12.5.4.2 + url: https://files.pythonhosted.org/packages/43/ac/64c4316ba163e8217a99680c7605f779accffc6a4bcd0c778c12948d3707/nvidia_cusparse_cu12-12.5.4.2-py3-none-manylinux2014_x86_64.whl + sha256: 23749a6571191a215cb74d1cdbff4a86e7b19f1200c071b3fcf844a5bea23a2f + requires_dist: + - nvidia-nvjitlink-cu12 + requires_python: '>=3' +- kind: pypi + name: nvidia-nccl-cu12 + version: 2.23.4 + url: https://files.pythonhosted.org/packages/ed/1f/6482380ec8dcec4894e7503490fc536d846b0d59694acad9cf99f27d0e7d/nvidia_nccl_cu12-2.23.4-py3-none-manylinux2014_x86_64.whl + sha256: b097258d9aab2fa9f686e33c6fe40ae57b27df60cedbd15d139701bb5509e0c1 + requires_python: '>=3' +- kind: pypi + name: nvidia-nvjitlink-cu12 + version: 12.6.77 + url: https://files.pythonhosted.org/packages/fe/e4/486de766851d58699bcfeb3ba6a3beb4d89c3809f75b9d423b9508a8760f/nvidia_nvjitlink_cu12-12.6.77-py3-none-manylinux2014_x86_64.whl + sha256: 9ae346d16203ae4ea513be416495167a0101d33d2d14935aa9c1829a3fb45142 + requires_python: '>=3' - kind: conda name: openblas version: 0.3.28 @@ -2850,39 +3152,12 @@ packages: purls: [] size: 2947466 timestamp: 1731377666602 -- kind: conda +- kind: pypi name: opt-einsum version: 3.4.0 - build: hd8ed1ab_0 - subdir: noarch - noarch: generic - url: https://conda.anaconda.org/conda-forge/noarch/opt-einsum-3.4.0-hd8ed1ab_0.conda - sha256: 583cb8748a9821e301a404806da0de62e8ba01607feecf12c0ef06d8bc77077e - md5: 73d0b1d98a9030bdefe712648af583a0 - depends: - - opt_einsum >=3.4.0,<3.4.1.0a0 - license: MIT - license_family: MIT - purls: [] - size: 6470 - timestamp: 1727392480705 -- kind: conda - name: opt_einsum - version: 3.4.0 - build: pyhd8ed1ab_0 - subdir: noarch - noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/opt_einsum-3.4.0-pyhd8ed1ab_0.conda - sha256: 69e979dfea8b8d82e51684f77d189e1d00cdcbc5c85868415b879719882e2df4 - md5: ff80afedd76f436acddbd1e14f5c2909 - depends: - - python >=3.8 - license: MIT - license_family: MIT - purls: - - pkg:pypi/opt-einsum?source=hash-mapping - size: 62487 - timestamp: 1727392477628 + url: https://files.pythonhosted.org/packages/23/cd/066e86230ae37ed0be70aae89aabf03ca8d9f39c8aea0dec8029455b5540/opt_einsum-3.4.0-py3-none-any.whl + sha256: 69bb92469f86a1565195ece4ac0323943e83477171b91d24c35afe028a90d7cd + requires_python: '>=3.8' - kind: pypi name: optax version: 0.2.4 @@ -3006,6 +3281,41 @@ packages: - sphinx-book-theme ; extra == 'dev' - sphinx-copybutton ; extra == 'dev' requires_python: '>=3.10' +- kind: conda + name: parso + version: 0.8.4 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/parso-0.8.4-pyhd8ed1ab_0.conda + sha256: bfe404eebb930cc41782d34f8fc04c0388ea692eeebe2c5fc28df8ec8d4d61ae + md5: 81534b420deb77da8833f2289b8d47ac + depends: + - python >=3.6 + license: MIT + license_family: MIT + purls: + - pkg:pypi/parso?source=hash-mapping + size: 75191 + timestamp: 1712320447201 +- kind: conda + name: patsy + version: 1.0.1 + build: pyhff2d567_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/patsy-1.0.1-pyhff2d567_0.conda + sha256: f1ec4bb1e70f18518f70df64728b162d0d5ef3c0ed68296d913c27f5bab7a84b + md5: a97b9c7586cedcf4a0a158ef3479975c + depends: + - numpy >=1.4.0 + - python >=3.9 + license: BSD-2-Clause AND PSF-2.0 + license_family: BSD + purls: + - pkg:pypi/patsy?source=hash-mapping + size: 186599 + timestamp: 1731432296481 - kind: conda name: pcre2 version: '10.44' @@ -3025,6 +3335,41 @@ packages: purls: [] size: 952308 timestamp: 1723488734144 +- kind: conda + name: pexpect + version: 4.9.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/pexpect-4.9.0-pyhd8ed1ab_0.conda + sha256: 90a09d134a4a43911b716d4d6eb9d169238aff2349056f7323d9db613812667e + md5: 629f3203c99b32e0988910c93e77f3b6 + depends: + - ptyprocess >=0.5 + - python >=3.7 + license: ISC + purls: + - pkg:pypi/pexpect?source=hash-mapping + size: 53600 + timestamp: 1706113273252 +- kind: conda + name: pickleshare + version: 0.7.5 + build: py_1003 + build_number: 1003 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/pickleshare-0.7.5-py_1003.tar.bz2 + sha256: a1ed1a094dd0d1b94a09ed85c283a0eb28943f2e6f22161fb45e128d35229738 + md5: 415f0ebb6198cc2801c73438a9fb5761 + depends: + - python >=3 + license: MIT + license_family: MIT + purls: + - pkg:pypi/pickleshare?source=hash-mapping + size: 9332 + timestamp: 1602536313357 - kind: conda name: pillow version: 11.0.0 @@ -3087,6 +3432,23 @@ packages: purls: [] size: 386826 timestamp: 1706549500138 +- kind: conda + name: platformdirs + version: 4.3.6 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.3.6-pyhd8ed1ab_0.conda + sha256: c81bdeadc4adcda216b2c7b373f0335f5c78cc480d1d55d10f21823590d7e46f + md5: fd8f2b18b65bbf62e8f653100690c8d2 + depends: + - python >=3.8 + license: MIT + license_family: MIT + purls: + - pkg:pypi/platformdirs?source=hash-mapping + size: 20625 + timestamp: 1726613611845 - kind: conda name: pluggy version: 1.5.0 @@ -3104,6 +3466,52 @@ packages: - pkg:pypi/pluggy?source=hash-mapping size: 23815 timestamp: 1713667175451 +- kind: pypi + name: posteriordb + version: 0.2.0 + url: https://files.pythonhosted.org/packages/8f/4d/b72e0782abec07f3d8dabf24cf12673d26b173af2046eb4e67365c776ccf/posteriordb-0.2.0-py3-none-any.whl + sha256: b6d6f3a349d34db6d4a68da899c818a95e5824c5e23824fc0ebe422f4bd6bac1 + requires_dist: + - requests +- kind: conda + name: prompt-toolkit + version: 3.0.48 + build: pyha770c72_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/prompt-toolkit-3.0.48-pyha770c72_0.conda + sha256: 44e4e6108d425a666856a52d1523e5d70890256a8920bb0dcd3d55cc750f3207 + md5: 4c05134c48b6a74f33bbb9938e4a115e + depends: + - python >=3.7 + - wcwidth + constrains: + - prompt_toolkit 3.0.48 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/prompt-toolkit?source=hash-mapping + size: 270271 + timestamp: 1727341744544 +- kind: conda + name: psutil + version: 6.1.0 + build: py312h66e93f0_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/psutil-6.1.0-py312h66e93f0_0.conda + sha256: 0f309b435174e037d5cfe5ed26c1c5ad8152c68cfe61af17709ec31ec3d9f096 + md5: 0524eb91d3d78d76d671c6e3cd7cee82 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/psutil?source=hash-mapping + size: 488462 + timestamp: 1729847159916 - kind: conda name: pthread-stubs version: '0.4' @@ -3121,6 +3529,39 @@ packages: purls: [] size: 8252 timestamp: 1726802366959 +- kind: conda + name: ptyprocess + version: 0.7.0 + build: pyhd3deb0d_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/ptyprocess-0.7.0-pyhd3deb0d_0.tar.bz2 + sha256: fb31e006a25eb2e18f3440eb8d17be44c8ccfae559499199f73584566d0a444a + md5: 359eeb6536da0e687af562ed265ec263 + depends: + - python + license: ISC + purls: + - pkg:pypi/ptyprocess?source=hash-mapping + size: 16546 + timestamp: 1609419417991 +- kind: conda + name: pure_eval + version: 0.2.3 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/pure_eval-0.2.3-pyhd8ed1ab_0.conda + sha256: dcfcb3cee1ae0a89729601582cc3edea20ba13c9493967a03a693c67567af0c8 + md5: 0f051f09d992e0d08941706ad519ee0e + depends: + - python >=3.5 + license: MIT + license_family: MIT + purls: + - pkg:pypi/pure-eval?source=hash-mapping + size: 16551 + timestamp: 1721585805256 - kind: conda name: pygments version: 2.18.0 @@ -3140,38 +3581,38 @@ packages: timestamp: 1714846885370 - kind: conda name: pymc - version: 5.18.0 + version: 5.18.1 build: hd8ed1ab_0 subdir: noarch noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/pymc-5.18.0-hd8ed1ab_0.conda - sha256: e267c5030bf0a973df42229d7a19541c107a2c4ab268078272e9638bf5509ed5 - md5: 60850870f8a9d2ab816b07bb5af11993 + url: https://conda.anaconda.org/conda-forge/noarch/pymc-5.18.1-hd8ed1ab_0.conda + sha256: 8f2906c978c820975f6840979758bbc90a331374ab2de03df3d19443b36b5c21 + md5: a1b8f92315733a0f3b4e64c6e9aa8396 depends: - - pymc-base 5.18.0 pyhd8ed1ab_0 + - pymc-base 5.18.1 pyhd8ed1ab_0 - pytensor - python-graphviz license: Apache-2.0 license_family: Apache purls: [] - size: 11587 - timestamp: 1730727968012 + size: 11601 + timestamp: 1731621750738 - kind: conda name: pymc-base - version: 5.18.0 + version: 5.18.1 build: pyhd8ed1ab_0 subdir: noarch noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/pymc-base-5.18.0-pyhd8ed1ab_0.conda - sha256: 5d4f41413ac24698b64a78fd65dfe29562d9bebec4570cd1e69fdbe85a7b8615 - md5: 0aa547a4010d7984d0cac353bde62e97 + url: https://conda.anaconda.org/conda-forge/noarch/pymc-base-5.18.1-pyhd8ed1ab_0.conda + sha256: df3d631671512750a13efdff69a44c15cc8320c60da0b1db5ff10a6f23b894b5 + md5: a25c15d03dd8cd876e468bb6484c20f9 depends: - arviz >=0.13.0 - cachetools >=4.2.1 - cloudpickle - numpy >=1.15.0 - pandas >=0.24.0 - - pytensor-base >=2.25.1,<2.26 + - pytensor-base >=2.26.1,<2.27 - python >=3.10 - rich >=13.7.1 - scipy >=1.4.1 @@ -3181,8 +3622,8 @@ packages: license_family: Apache purls: - pkg:pypi/pymc?source=hash-mapping - size: 333757 - timestamp: 1730727964625 + size: 334447 + timestamp: 1731621747231 - kind: conda name: pyparsing version: 3.2.0 @@ -3203,35 +3644,35 @@ packages: timestamp: 1728880549923 - kind: conda name: pytensor - version: 2.25.5 + version: 2.26.2 build: py312h97902ae_0 subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/pytensor-2.25.5-py312h97902ae_0.conda - sha256: 83a4750986bd6dab77ed1ac81e802047f46013afb8e9019d6624de4eae85b7dc - md5: 217442cd88537f0e8f4a6819f1823b0c + url: https://conda.anaconda.org/conda-forge/linux-64/pytensor-2.26.2-py312h97902ae_0.conda + sha256: 71e64be9e99bccab87ce38f1c1e3b36a58469e769a339cb36f2c099a82cb5554 + md5: 94864a4cad4702d26a93b78c1ef94246 depends: - blas - gcc_linux-64 13.* - gxx - gxx_linux-64 13.* - mkl-service - - pytensor-base 2.25.5 py312h25a0e75_0 + - pytensor-base 2.26.2 py312h25a0e75_0 - python >=3.12,<3.13.0a0 - python_abi 3.12.* *_cp312 - sysroot_linux-64 2.17.* license: BSD-3-Clause license_family: BSD purls: [] - size: 9118 - timestamp: 1727981016362 + size: 9052 + timestamp: 1731337121115 - kind: conda name: pytensor-base - version: 2.25.5 + version: 2.26.2 build: py312h25a0e75_0 subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/pytensor-base-2.25.5-py312h25a0e75_0.conda - sha256: 3b4287dd0d9358ee76e0c55db596fe6d256ec48b1301c46984e62b7e0806aca3 - md5: 86ae2da8b1a044ee7f6a7d2ce0eba762 + url: https://conda.anaconda.org/conda-forge/linux-64/pytensor-base-2.26.2-py312h25a0e75_0.conda + sha256: 24a909310e051bdfec08375f34f4677db63e1de78f4a7502616483ec9076fe3a + md5: 469a1729bda15ace5ef46e22cb153796 depends: - __glibc >=2.17,<3.0.a0 - cons @@ -3250,8 +3691,8 @@ packages: license_family: BSD purls: - pkg:pypi/pytensor?source=hash-mapping - size: 2312179 - timestamp: 1727981002120 + size: 2313749 + timestamp: 1731337108392 - kind: conda name: pytest version: 8.3.3 @@ -3396,6 +3837,29 @@ packages: - pkg:pypi/pytz?source=hash-mapping size: 188538 timestamp: 1706886944988 +- kind: conda + name: pyzmq + version: 26.2.0 + build: py312hbf22597_3 + build_number: 3 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/pyzmq-26.2.0-py312hbf22597_3.conda + sha256: bc303f9b11e04a515f79cd5ad3bfa0e84b9dfec76552626d6263b38789fe6678 + md5: 746ce19f0829ec3e19c93007b1a224d3 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - libsodium >=1.0.20,<1.0.21.0a0 + - libstdcxx >=13 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + - zeromq >=4.3.5,<4.4.0a0 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/pyzmq?source=hash-mapping + size: 378126 + timestamp: 1728642454632 - kind: conda name: qhull version: '2020.2' @@ -3413,22 +3877,6 @@ packages: purls: [] size: 552937 timestamp: 1720813982144 -- kind: conda - name: re2 - version: 2024.07.02 - build: h77b4e00_1 - build_number: 1 - subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/re2-2024.07.02-h77b4e00_1.conda - sha256: c1721cb80f7201652fc9801f49c214c88aee835d957f2376e301bd40a8415742 - md5: 01093ff37c1b5e6bf9f17c0116747d11 - depends: - - libre2-11 2024.07.02 hbbce691_1 - license: BSD-3-Clause - license_family: BSD - purls: [] - size: 26665 - timestamp: 1728778975855 - kind: conda name: readline version: '8.2' @@ -3446,6 +3894,19 @@ packages: purls: [] size: 281456 timestamp: 1679532220005 +- kind: pypi + name: requests + version: 2.32.3 + url: https://files.pythonhosted.org/packages/f9/9b/335f9764261e915ed497fcdeb11df5dfd6f7bf257d4a6a2a686d80da4d54/requests-2.32.3-py3-none-any.whl + sha256: 70761cfe03c773ceb22aa2f671b4757976145175cdfca038c02654d061d6dcc6 + requires_dist: + - charset-normalizer>=2,<4 + - idna>=2.5,<4 + - urllib3>=1.21.1,<3 + - certifi>=2017.4.17 + - pysocks>=1.5.6,!=1.5.7 ; extra == 'socks' + - chardet>=3.0.2,<6 ; extra == 'use-chardet-on-py3' + requires_python: '>=3.8' - kind: conda name: rich version: 13.9.4 @@ -3495,6 +3956,48 @@ packages: - pkg:pypi/scipy?source=hash-mapping size: 17622722 timestamp: 1729481826601 +- kind: conda + name: seaborn + version: 0.13.2 + build: hd8ed1ab_2 + build_number: 2 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/seaborn-0.13.2-hd8ed1ab_2.conda + sha256: 79943fbbf1fafbf969257989a7d88638c0c3e7b89a81a75c9347c28768dd6141 + md5: a79d8797f62715255308d92d3a91ef2e + depends: + - seaborn-base 0.13.2 pyhd8ed1ab_2 + - statsmodels >=0.12 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 6996 + timestamp: 1714494772218 +- kind: conda + name: seaborn-base + version: 0.13.2 + build: pyhd8ed1ab_2 + build_number: 2 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/seaborn-base-0.13.2-pyhd8ed1ab_2.conda + sha256: 5de8b9e88a0f2daf58b07e3f144da26f894e9a20071304fa37329664eb2a29a7 + md5: b713b116feaf98acdba93ad4d7f90ca1 + depends: + - matplotlib-base >=3.4,!=3.6.1 + - numpy >=1.20,!=1.24.0 + - pandas >=1.2 + - python >=3.8 + - scipy >=1.7 + constrains: + - seaborn =0.13.2=*_2 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/seaborn?source=hash-mapping + size: 234550 + timestamp: 1714494767378 - kind: conda name: setuptools version: 75.3.0 @@ -3529,6 +4032,51 @@ packages: - pkg:pypi/six?source=hash-mapping size: 14259 timestamp: 1620240338595 +- kind: conda + name: stack_data + version: 0.6.2 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/stack_data-0.6.2-pyhd8ed1ab_0.conda + sha256: a58433e75229bec39f3be50c02efbe9b7083e53a1f31d8ee247564f370191eec + md5: e7df0fdd404616638df5ece6e69ba7af + depends: + - asttokens + - executing + - pure_eval + - python >=3.5 + license: MIT + license_family: MIT + purls: + - pkg:pypi/stack-data?source=hash-mapping + size: 26205 + timestamp: 1669632203115 +- kind: conda + name: statsmodels + version: 0.14.4 + build: py312hc0a28a1_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/statsmodels-0.14.4-py312hc0a28a1_0.conda + sha256: 6cc65ba902b32207e8a697b0e0408a28d6cc166be04f1882c40739a86a253d22 + md5: 97dc960f3d9911964d73c2cf240baea5 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - numpy <3,>=1.22.3 + - numpy >=1.19,<3 + - packaging >=21.3 + - pandas !=2.1.0,>=1.4 + - patsy >=0.5.6 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + - scipy !=1.9.2,>=1.8 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/statsmodels?source=hash-mapping + size: 12103203 + timestamp: 1727987129263 - kind: conda name: sysroot_linux-64 version: '2.17' @@ -3633,6 +4181,26 @@ packages: - pkg:pypi/toolz?source=hash-mapping size: 52623 timestamp: 1728059623353 +- kind: conda + name: tornado + version: 6.4.1 + build: py312h66e93f0_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/tornado-6.4.1-py312h66e93f0_1.conda + sha256: c0c9cc7834e8f43702956afaa5af7b0639c4835c285108a43e6b91687ce53ab8 + md5: af648b62462794649066366af4ecd5b0 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + license: Apache-2.0 + license_family: Apache + purls: + - pkg:pypi/tornado?source=hash-mapping + size: 837665 + timestamp: 1724956252424 - kind: pypi name: tqdm version: 4.67.0 @@ -3649,6 +4217,23 @@ packages: - slack-sdk ; extra == 'slack' - requests ; extra == 'telegram' requires_python: '>=3.7' +- kind: conda + name: traitlets + version: 5.14.3 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/traitlets-5.14.3-pyhd8ed1ab_0.conda + sha256: 8a64fa0f19022828513667c2c7176cfd125001f3f4b9bc00d33732e627dd2592 + md5: 3df84416a021220d8b5700c613af2dc5 + depends: + - python >=3.8 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/traitlets?source=hash-mapping + size: 110187 + timestamp: 1713535244513 - kind: pypi name: typeguard version: 2.13.3 @@ -3727,6 +4312,35 @@ packages: - pkg:pypi/unicodedata2?source=hash-mapping size: 368550 timestamp: 1729704685856 +- kind: pypi + name: urllib3 + version: 2.2.3 + url: https://files.pythonhosted.org/packages/ce/d9/5f4c13cecde62396b0d3fe530a50ccea91e7dfc1ccf0e09c228841bb5ba8/urllib3-2.2.3-py3-none-any.whl + sha256: ca899ca043dcb1bafa3e262d73aa25c465bfb49e0bd9dd5d59f1d0acba2f8fac + requires_dist: + - brotli>=1.0.9 ; platform_python_implementation == 'CPython' and extra == 'brotli' + - brotlicffi>=0.8.0 ; platform_python_implementation != 'CPython' and extra == 'brotli' + - h2>=4,<5 ; extra == 'h2' + - pysocks>=1.5.6,!=1.5.7,<2.0 ; extra == 'socks' + - zstandard>=0.18.0 ; extra == 'zstd' + requires_python: '>=3.8' +- kind: conda + name: wcwidth + version: 0.2.13 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/wcwidth-0.2.13-pyhd8ed1ab_0.conda + sha256: b6cd2fee7e728e620ec736d8dfee29c6c9e2adbd4e695a31f1d8f834a83e57e3 + md5: 68f0738df502a14213624b288c60c9ad + depends: + - python >=3.8 + license: MIT + license_family: MIT + purls: + - pkg:pypi/wcwidth?source=hash-mapping + size: 32709 + timestamp: 1704731373922 - kind: conda name: wheel version: 0.45.0 @@ -3959,6 +4573,25 @@ packages: purls: [] size: 418368 timestamp: 1660346797927 +- kind: conda + name: zeromq + version: 4.3.5 + build: h3b0a872_7 + build_number: 7 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/zeromq-4.3.5-h3b0a872_7.conda + sha256: a4dc72c96848f764bb5a5176aa93dd1e9b9e52804137b99daeebba277b31ea10 + md5: 3947a35e916fcc6b9825449affbf4214 + depends: + - __glibc >=2.17,<3.0.a0 + - krb5 >=1.21.3,<1.22.0a0 + - libgcc >=13 + - libsodium >=1.0.20,<1.0.21.0a0 + - libstdcxx >=13 + license: MPL-2.0 + purls: [] + size: 335400 + timestamp: 1731585026517 - kind: conda name: zipp version: 3.21.0 diff --git a/pixi.toml b/pixi.toml index 67b350d..21b62f6 100644 --- a/pixi.toml +++ b/pixi.toml @@ -17,8 +17,18 @@ numba = ">=0.60.0,<0.61" pytest = ">=8.3.3,<9" maturin = ">=1.7.4,<2" pip = ">=24.3.1,<25" -jax = ">=0.4.34,<0.5" +#jax = ">=0.4.34,<0.5" +ipykernel = ">=6.29.5,<7" +seaborn = ">=0.13.2,<0.14" +threadpoolctl = ">=3.5.0,<4" +# The jaxlib cuda build seems to be broken around version 0.4.34 +#jaxlib = { version = "*", build = "*cuda12*" } [pypi-dependencies] bridgestan = ">=2.5.0, <3" flowjax = { git = "https://github.com/aseyboldt/flowjax.git", rev = "1c282f2ded78e81c7ce6a96f61523a9f18bf8edc" } +posteriordb = ">=0.2.0, <0.3" +jax = { version = "==0.4.35", extras = ["cuda12"] } + +[system-requirements] +#cuda = "12" diff --git a/python/nutpie/transform_adapter.py b/python/nutpie/transform_adapter.py index e0e601b..dc0721c 100644 --- a/python/nutpie/transform_adapter.py +++ b/python/nutpie/transform_adapter.py @@ -11,6 +11,7 @@ def make_transform_adapter( scale_layer=False, untransformed_dim=None, zero_init=True, + batch_size=128, ): import traceback from functools import partial @@ -271,6 +272,7 @@ def __init__( learning_rate=1e-3, zero_init=True, untransformed_dim=None, + batch_size=128, ): self._logp_fn = logp_fn self._make_flow_fn = make_flow_fn @@ -283,6 +285,7 @@ def __init__( self._num_diag_windows = num_diag_windows self._zero_init = zero_init self._untransformed_dim = untransformed_dim + self._batch_size = batch_size try: self._bijection = make_flow_fn(seed, [position], [gradient], n_layers=0) except Exception as e: @@ -375,7 +378,7 @@ def update(self, seed, positions, gradients): points, show_progress=self._show_progress, optimizer=self._optimizer, - batch_size=128, + batch_size=self._batch_size, ) flow = flowjax.flows.Transformed( @@ -526,4 +529,5 @@ def inv_transform(self, position, gradient): learning_rate=learning_rate, zero_init=zero_init, untransformed_dim=untransformed_dim, + batch_size=batch_size, ) From 6f4c78424590846ef6f89a052eae2043f5649baf Mon Sep 17 00:00:00 2001 From: Adrian Seyboldt Date: Wed, 20 Nov 2024 10:41:00 +0100 Subject: [PATCH 16/34] fix: Add lock around init_func --- src/pyfunc.rs | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/src/pyfunc.rs b/src/pyfunc.rs index a6220a2..778b68e 100644 --- a/src/pyfunc.rs +++ b/src/pyfunc.rs @@ -1,4 +1,4 @@ -use std::sync::Arc; +use std::sync::{Arc, Mutex}; use anyhow::{anyhow, bail, Context, Result}; use arrow::{ @@ -76,7 +76,7 @@ impl PyVariable { pub struct PyModel { make_logp_func: Arc>, make_expand_func: Arc>, - init_point_func: Option>>, + init_point_func: Option>>>, variables: Arc>, transform_adapter: Option, ndim: usize, @@ -97,7 +97,7 @@ impl PyModel { Self { make_logp_func: Arc::new(make_logp_func), make_expand_func: Arc::new(make_expand_func), - init_point_func: init_point_func.map(|x| x.into()), + init_point_func: init_point_func.map(|x| Mutex::new(x).into()), variables: Arc::new(variables), ndim, transform_adapter: transform_adapter.map(PyTransformAdapt::new), @@ -619,6 +619,11 @@ impl Model for PyModel { let seed = rng.next_u64(); + // Acquire the init_func lock before we wait for the GIL + let init_func = init_func + .lock() + .expect("Could not acquire lock for init func"); + Python::with_gil(|py| { let init_point = init_func .call1(py, (seed,)) From bbed6386921365c56bc5f4a295fde3c7bb5fc20f Mon Sep 17 00:00:00 2001 From: Adrian Seyboldt Date: Wed, 20 Nov 2024 16:29:25 +0100 Subject: [PATCH 17/34] Work on default normalizing flow --- python/nutpie/transform_adapter.py | 145 +++++++++++++++++++++++------ 1 file changed, 114 insertions(+), 31 deletions(-) diff --git a/python/nutpie/transform_adapter.py b/python/nutpie/transform_adapter.py index dc0721c..de3876b 100644 --- a/python/nutpie/transform_adapter.py +++ b/python/nutpie/transform_adapter.py @@ -8,10 +8,14 @@ def make_transform_adapter( num_layers=8, num_diag_windows=10, learning_rate=1e-3, - scale_layer=False, untransformed_dim=None, zero_init=True, batch_size=128, + reuse_opt_state=True, + max_patience=5, + householder_layer=True, + dct_layer=True, + gamma=None, ): import traceback from functools import partial @@ -27,6 +31,9 @@ def make_transform_adapter( from paramax import Parameterize, unwrap class FisherLoss: + def __init__(self, gamma=None): + self._gamma = gamma + @eqx.filter_jit def __call__( self, @@ -40,10 +47,15 @@ def __call__( flow = unwrap(eqx.combine(params, static, is_leaf=eqx.is_inexact_array)) def compute_loss(bijection, draw, grad): - draw, grad, _ = bijection.inverse_gradient_and_val( + draw, grad, logp = bijection.inverse_gradient_and_val( draw, grad, jnp.array(0.0) ) - return ((draw + grad) ** 2).sum() + cost = ((draw + grad) ** 2).sum() + if self._gamma is not None: + normal_logp = -draw @ draw / 2 + cost = cost + self._gamma * (logp - normal_logp).sum() + + return cost assert x.shape[1] == 2 draws = x[:, 0, :] @@ -72,9 +84,10 @@ def fit_flow(key, bijection, loss_fn, points, **kwargs): dist=flow, x=points, loss_fn=loss_fn, + max_epochs=500, **kwargs, ) - return fit.bijection, losses + return fit.bijection, losses, losses["opt_state"] def make_flow( seed, @@ -82,20 +95,23 @@ def make_flow( gradients, *, zero_init=False, - scale_layer=False, - untransformed_dim=None, + householder_layer=False, + dct_layer=False, + untransformed_dim: int | list[int] | None = None, n_layers, ): positions = np.array(positions) gradients = np.array(gradients) + if len(positions) == 0: + return + n_draws, n_dim = positions.shape if n_dim < 2: n_layers = 0 assert positions.shape == gradients.shape - assert n_draws > 0 if n_draws == 0: raise ValueError("No draws") @@ -119,7 +135,12 @@ def make_flow( if n_layers == 0: return flowjax.flows.Chain(flows) - def make_layer(key, is_last=False): + if untransformed_dim is None: + untransformed_dim = n_dim // 2 + + untransformed_dim = cast(list[int] | int, untransformed_dim) + + def make_layer(key, untransformed_dim, is_last=False): key, key_couple, key_permute = jax.random.split(key, 3) scale = Parameterize( @@ -138,15 +159,10 @@ def make_layer(key, is_last=False): else: width = nn_width - if untransformed_dim is None: - untrans_dim = n_dim // 2 - else: - untrans_dim = untransformed_dim - coupling = flowjax.bijections.coupling.Coupling( key_couple, transformer=affine, - untransformed_dim=untrans_dim, + untransformed_dim=untransformed_dim, dim=n_dim, nn_activation=jax.nn.gelu, nn_width=width, @@ -163,27 +179,67 @@ def make_layer(key, is_last=False): else: flow = flowjax.flows._add_default_permute(coupling, n_dim, key_permute) - if scale_layer: - from flowjax.bijections import mvscale - + if householder_layer: bijections = list(flow.bijections) - bijections.append(mvscale.MvScale4(jnp.ones(n_dim) * 1e-5)) - # bijections.append(mvscale.MvScale3(jnp.ones(n_dim) * 1e-5)) + params = jnp.ones(n_dim) * 1e-5 + params = params.at[0].set(0.) + bijections.append(flowjax.bijections.Householder(params)) flow = flowjax.bijections.Chain(bijections) return flow if n_layers == 1: - bijection = make_layer(key, is_last=True) + num_untrafo = ( + untransformed_dim + if isinstance(untransformed_dim, int) + else untransformed_dim[-1] + ) + bijection = make_layer( + key, + untransformed_dim=num_untrafo, + is_last=True, + ) else: keys = jax.random.split(key, n_layers - 1) - layers = eqx.filter_vmap(make_layer)(keys) - bijection = flowjax.bijections.Scan(layers) - key, key_layer = jax.random.split(key) - last = make_layer(key_layer, is_last=True) + if isinstance(untransformed_dim, int): + make_layers = eqx.filter_vmap(make_layer) + layers = make_layers(keys, untransformed_dim) + bijection = flowjax.bijections.Scan(layers) - bijection = flowjax.bijections.Chain([bijection, last]) + key, key_layer = jax.random.split(key) + last = make_layer(key_layer, untransformed_dim, is_last=True) + + bijection = flowjax.bijections.Chain([bijection, last]) + else: + layers = [] + for i, (key, num_untrafo) in enumerate(zip(keys[:-1], untransformed_dim[:1])): + + if i % 2 == 0 or not dct_layer: + layers.append(make_layer(key, num_untrafo)) + else: + inner = make_layer(key, num_untrafo) + outer = flowjax.bijections.DCT(inner.shape) + + layers.append(flowjax.bijections.Sandwich(outer, inner)) + + scale_val = jnp.ones(n_dim) + scale = Parameterize( + lambda x: x + jnp.sqrt(1 + x**2), + jnp.zeros(n_dim), + ) + mean = jnp.zeros(n_dim) + inner = eqx.tree_at( + where=lambda aff: aff.scale, + pytree=flowjax.bijections.Affine(mean, scale_val), + replace=scale, + ) + outer = flowjax.bijections.DCT(inner.shape) + layers.append(flowjax.bijections.Sandwich(outer, inner)) + + layers.append(make_layer(keys[-1], untransformed_dim[-1], is_last=True)) + + bijection = flowjax.bijections.Chain(layers) return flowjax.bijections.Chain([bijection, *flows]) @@ -273,6 +329,9 @@ def __init__( zero_init=True, untransformed_dim=None, batch_size=128, + reuse_opt_state=True, + max_patience=5, + gamma=None, ): self._logp_fn = logp_fn self._make_flow_fn = make_flow_fn @@ -280,12 +339,16 @@ def __init__( self._verbose = verbose self._window_size = window_size self._optimizer = optax.apply_if_finite(optax.adabelief(learning_rate), 50) - self._loss_fn = FisherLoss() + self._loss_fn = FisherLoss(gamma) self._show_progress = show_progress self._num_diag_windows = num_diag_windows self._zero_init = zero_init self._untransformed_dim = untransformed_dim self._batch_size = batch_size + self._reuse_opt_state = reuse_opt_state + self._opt_state = None + self._max_patience = max_patience + self._count_trace = [] try: self._bijection = make_flow_fn(seed, [position], [gradient], n_layers=0) except Exception as e: @@ -303,13 +366,19 @@ def update(self, seed, positions, gradients): if self._verbose: print(f"Chain {self._chain}: Total available points: {len(positions)}") n_draws = len(positions) + self._count_trace.append(n_draws) if n_draws == 0: return try: if self.index <= self._num_diag_windows: size = len(positions) - positions = positions[-size // 5 + 3 :] - gradients = gradients[-size // 5 + 3 :] + lower_idx = -size // 5 + 3 + positions_slice = positions[-size // 5 + 3 :] + gradients_slice = gradients[-size // 5 + 3 :] + + if len(positions_slice) > 0: + positions = positions_slice + gradients = gradients_slice fit = self._make_flow_fn(seed, positions, gradients, n_layers=0) points = jnp.transpose(jnp.array([positions, gradients]), [1, 0, 2]) @@ -320,10 +389,12 @@ def update(self, seed, positions, gradients): params, static = eqx.partition(flow, eqx.is_inexact_array) new_loss = self._loss_fn(params, static, points) - print("loss from diag:", new_loss) + if self._verbose: + print("loss from diag:", new_loss) if np.isfinite(new_loss): self._bijection = fit + self._opt_state = None return @@ -369,9 +440,10 @@ def update(self, seed, positions, gradients): # make_flow might still only return a single trafo for 1d problems if len(base.bijections) == 1: self._bijection = base + self._opt_state = None return - fit, _ = fit_flow( + fit, _, opt_state = fit_flow( key, base, self._loss_fn, @@ -379,6 +451,8 @@ def update(self, seed, positions, gradients): show_progress=self._show_progress, optimizer=self._optimizer, batch_size=self._batch_size, + opt_state=self._opt_state if self._reuse_opt_state else None, + max_patience=self._max_patience, ) flow = flowjax.flows.Transformed( @@ -426,6 +500,7 @@ def update(self, seed, positions, gradients): self._bijection = self._make_flow_fn( seed, positions, gradients, n_layers=0 ) + self._opt_state = None return if not np.isfinite(new_loss): @@ -435,6 +510,7 @@ def update(self, seed, positions, gradients): return self._bijection = fit + self._opt_state = opt_state except Exception as e: print("update error:", e) @@ -523,11 +599,18 @@ def inv_transform(self, position, gradient): TransformAdapter, verbose=verbose, window_size=window_size, - make_flow_fn=partial(make_flow, scale_layer=scale_layer), + make_flow_fn=partial( + make_flow, + householder_layer=householder_layer, + dct_layer=dct_layer, + ), show_progress=show_progress, num_diag_windows=num_diag_windows, learning_rate=learning_rate, zero_init=zero_init, untransformed_dim=untransformed_dim, batch_size=batch_size, + reuse_opt_state=reuse_opt_state, + max_patience=max_patience, + gamma=gamma, ) From 3439de849301807a3cdd572d56d1561bd9102a7f Mon Sep 17 00:00:00 2001 From: Adrian Seyboldt Date: Wed, 20 Nov 2024 17:39:44 +0100 Subject: [PATCH 18/34] Update deps --- pixi.lock | 163 +++++++++++++++++++++++++++++++++++++++++++++++++++++- pixi.toml | 7 ++- 2 files changed, 167 insertions(+), 3 deletions(-) diff --git a/pixi.lock b/pixi.lock index 0190177..fb67443 100644 --- a/pixi.lock +++ b/pixi.lock @@ -10,6 +10,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/_libgcc_mutex-0.1-conda_forge.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-2_kmp_llvm.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/arviz-0.20.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/asciitree-0.3.3-py_2.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/asttokens-2.4.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/atk-1.0-2.38.0-h04ea711_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/binutils_impl_linux-64-2.43-h4bf12b8_2.conda @@ -37,6 +38,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/etuples-0.3.9-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.2.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/executing-2.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/fasteners-0.17.3-pyhd8ed1ab_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/filelock-3.16.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-dejavu-sans-mono-2.37-hab24e00_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-inconsolata-3.000-h77eed37_0.tar.bz2 @@ -135,11 +137,13 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/minikanren-1.0.3-pyhd8ed1ab_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/linux-64/mkl-2024.2.2-ha957f24_16.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/mkl-service-2.4.2-py312hf224ee7_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/msgpack-python-1.1.0-py312h68727a3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/multipledispatch-0.6.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/munkres-1.1.4-pyh9f0ad1d_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.5-he02047a_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/nest-asyncio-1.6.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/numba-0.60.0-py312h83e6fd3_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/numcodecs-0.14.0-py312hf9745cd_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/numpy-1.26.4-py312heda63a1_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/openblas-0.3.28-pthreads_h6ec200e_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/openjpeg-2.5.2-h488ebb8_0.conda @@ -157,6 +161,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/pixman-0.43.2-h59595ed_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.3.6-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.5.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/polars-1.12.0-py312hfe7c9be_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/prompt-toolkit-3.0.48-pyha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/psutil-6.1.0-py312h66e93f0_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/pthread-stubs-0.4-hb9d3cd8_1002.conda @@ -211,6 +216,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxrender-0.9.11-hb9d3cd8_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-xorgproto-2024.1-hb9d3cd8_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/xz-5.2.6-h166bdaf_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/zarr-2.18.3-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/zeromq-4.3.5-h3b0a872_7.conda - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.21.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/zlib-1.3.1-hb9d3cd8_2.conda @@ -222,7 +228,6 @@ environments: - pypi: https://files.pythonhosted.org/packages/e9/59/f189b03d743364a350c972b89fe08a6db5bbbdc5f1ea6b604b3eee0a7967/dllist-1.2.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/15/9f/3be7f03bf66c8d7d2956b727d984595e4af899f3c15ef2c653029008bf3b/equinox-0.11.8-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/1f/e4/0826dfde2db3fb3a34954323a84d0e6b6fdbc7eb5278c84159c6d43290ac/etils-1.10.0-py3-none-any.whl - - pypi: git+https://github.com/aseyboldt/flowjax.git@1c282f2ded78e81c7ce6a96f61523a9f18bf8edc - pypi: https://files.pythonhosted.org/packages/76/c6/c88e154df9c4e1a2a66ccf0005a88dfb2650c1dffb6f5ce603dfbd452ce3/idna-3.10-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/62/20/6c57c50c0ccc645fea1895950f1e5cd02f961ee44b3ffe83617fa46b0c1d/jax-0.4.35-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d7/aa/f15ea857ad9bcff7a0c942dc570ca718b026cc0cc5c513525bb08cacf3c0/jax_cuda12_pjrt-0.4.35-py3-none-manylinux2014_x86_64.whl @@ -248,6 +253,9 @@ environments: - pypi: https://files.pythonhosted.org/packages/2b/78/57043611a16c655c8350b4c01b8d6abfb38cc2acb475238b62c2146186d7/tqdm-4.67.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/9a/bb/d43e5c75054e53efce310e79d63df0ac3f25e34c926be5dffb7d283fb2a8/typeguard-2.13.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ce/d9/5f4c13cecde62396b0d3fe530a50ccea91e7dfc1ccf0e09c228841bb5ba8/urllib3-2.2.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c3/ac/1847959031ce09eb65a70b16d0f07633d7ddaf8a97752cc924f9a8cbe253/watermark-2.5.0-py2.py3-none-any.whl + - pypi: ../flowjax/ + - pypi: ../pymc-labs/benchmark-pymc packages: - kind: conda name: _libgcc_mutex @@ -311,6 +319,24 @@ packages: - pkg:pypi/arviz?source=hash-mapping size: 1473292 timestamp: 1727611803479 +- kind: conda + name: asciitree + version: 0.3.3 + build: py_2 + build_number: 2 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/asciitree-0.3.3-py_2.tar.bz2 + sha256: b3e9369529fe7d721b66f18680ff4b561e20dbf6507e209e1f60eac277c97560 + md5: c0481c9de49f040272556e2cedf42816 + depends: + - python + license: MIT + license_family: MIT + purls: + - pkg:pypi/asciitree?source=hash-mapping + size: 6164 + timestamp: 1531050741142 - kind: conda name: asttokens version: 2.4.1 @@ -935,6 +961,23 @@ packages: - pkg:pypi/executing?source=hash-mapping size: 28337 timestamp: 1725214501850 +- kind: conda + name: fasteners + version: 0.17.3 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/fasteners-0.17.3-pyhd8ed1ab_0.tar.bz2 + sha256: 42be6ac8478051b26751d778490d6a71de12e5c6443e145ff3eddbc577d9bcda + md5: 348e27e78a5e39090031448c72f66d5e + depends: + - python >=3.6 + license: Apache-2.0 + license_family: APACHE + purls: + - pkg:pypi/fasteners?source=hash-mapping + size: 19975 + timestamp: 1643971626978 - kind: conda name: filelock version: 3.16.1 @@ -954,7 +997,8 @@ packages: - kind: pypi name: flowjax version: 16.0.0 - url: git+https://github.com/aseyboldt/flowjax.git@1c282f2ded78e81c7ce6a96f61523a9f18bf8edc + path: ../flowjax/ + sha256: 44c0d14eacfee77e1254f841f2f2b6d169c5d3a34360240d4b9fcf252b9b951c requires_dist: - jax>=0.4.16 - equinox>=0.10 @@ -973,6 +1017,7 @@ packages: - ipython ; extra == 'dev' - numpyro ; extra == 'dev' requires_python: '>=3.10' + editable: true - kind: conda name: font-ttf-dejavu-sans-mono version: '2.37' @@ -2907,6 +2952,26 @@ packages: - pylint>=2.6.0 ; extra == 'dev' - pyink ; extra == 'dev' requires_python: '>=3.9' +- kind: conda + name: msgpack-python + version: 1.1.0 + build: py312h68727a3_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/msgpack-python-1.1.0-py312h68727a3_0.conda + sha256: 4bc53333774dea1330643b7e23aa34fd6880275737fc2e07491795872d3af8dd + md5: 5c9b020a3f86799cdc6115e55df06146 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - libstdcxx >=13 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + license: Apache-2.0 + license_family: Apache + purls: + - pkg:pypi/msgpack?source=hash-mapping + size: 105271 + timestamp: 1725975182669 - kind: conda name: multipledispatch version: 0.6.0 @@ -3006,6 +3071,29 @@ packages: - pkg:pypi/numba?source=hash-mapping size: 5695278 timestamp: 1718888170104 +- kind: conda + name: numcodecs + version: 0.14.0 + build: py312hf9745cd_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/numcodecs-0.14.0-py312hf9745cd_0.conda + sha256: 447f1d54b5e46d6d8ada792a086b04c71ccfd253a3aea5c32cdbc4ccdeda17f7 + md5: a27a76178d062667f3f01d6f70d2d4a3 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - libstdcxx >=13 + - msgpack-python + - numpy >=1.19,<3 + - numpy >=1.24 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + license: MIT + license_family: MIT + purls: + - pkg:pypi/numcodecs?source=hash-mapping + size: 847070 + timestamp: 1731918955687 - kind: conda name: numpy version: 1.26.4 @@ -3466,6 +3554,30 @@ packages: - pkg:pypi/pluggy?source=hash-mapping size: 23815 timestamp: 1713667175451 +- kind: conda + name: polars + version: 1.12.0 + build: py312hfe7c9be_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/polars-1.12.0-py312hfe7c9be_1.conda + sha256: 8aa15e19d3446bba7a245beed39f5a856a841008861d0ed35e0a6988e99c1adc + md5: 0c0e15ac8645e65b7f5afa55046a7c48 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - numpy >=1.16.0 + - packaging + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + constrains: + - __glibc >=2.17 + license: MIT + license_family: MIT + purls: + - pkg:pypi/polars?source=hash-mapping + size: 22824172 + timestamp: 1731964142746 - kind: pypi name: posteriordb version: 0.2.0 @@ -3927,6 +4039,17 @@ packages: - pkg:pypi/rich?source=hash-mapping size: 185481 timestamp: 1730592349978 +- kind: pypi + name: samplerlab + version: '0.1' + path: ../pymc-labs/benchmark-pymc + sha256: 3229a0e9de6c13db630469c1501ae97625ca85287d2f955280a154dbadd900cd + requires_dist: + - numpy + - arviz + - pymc + requires_python: '>=3.11' + editable: true - kind: conda name: scipy version: 1.14.1 @@ -4324,6 +4447,17 @@ packages: - pysocks>=1.5.6,!=1.5.7,<2.0 ; extra == 'socks' - zstandard>=0.18.0 ; extra == 'zstd' requires_python: '>=3.8' +- kind: pypi + name: watermark + version: 2.5.0 + url: https://files.pythonhosted.org/packages/c3/ac/1847959031ce09eb65a70b16d0f07633d7ddaf8a97752cc924f9a8cbe253/watermark-2.5.0-py2.py3-none-any.whl + sha256: d775afa075f5ea15152ad9f4c82dfc95bffb9d0cb4341c9b62073b627191464d + requires_dist: + - ipython>=6.0 + - importlib-metadata>=1.4 + - setuptools + - py3nvml>=0.2 ; extra == 'gpu' + requires_python: '>=3.7' - kind: conda name: wcwidth version: 0.2.13 @@ -4573,6 +4707,31 @@ packages: purls: [] size: 418368 timestamp: 1660346797927 +- kind: conda + name: zarr + version: 2.18.3 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/zarr-2.18.3-pyhd8ed1ab_0.conda + sha256: 0fd9bf7ba90088115c52dad7b9d44fbffeabe34cb35299b2c38d5f17851fda36 + md5: 41abde21508578e02e3fd492e82a05cd + depends: + - asciitree + - fasteners + - numcodecs >=0.10.0 + - numpy >=1.24,<3.0 + - python >=3.10 + constrains: + - ipywidgets >=8.0.0 + - notebook + - ipytree >=0.2.2 + license: MIT + license_family: MIT + purls: + - pkg:pypi/zarr?source=hash-mapping + size: 159273 + timestamp: 1725539879186 - kind: conda name: zeromq version: 4.3.5 diff --git a/pixi.toml b/pixi.toml index 21b62f6..9315e61 100644 --- a/pixi.toml +++ b/pixi.toml @@ -21,14 +21,19 @@ pip = ">=24.3.1,<25" ipykernel = ">=6.29.5,<7" seaborn = ">=0.13.2,<0.14" threadpoolctl = ">=3.5.0,<4" +zarr = ">=2.18.3,<3" +polars = ">=1.12.0,<2" # The jaxlib cuda build seems to be broken around version 0.4.34 #jaxlib = { version = "*", build = "*cuda12*" } [pypi-dependencies] bridgestan = ">=2.5.0, <3" -flowjax = { git = "https://github.com/aseyboldt/flowjax.git", rev = "1c282f2ded78e81c7ce6a96f61523a9f18bf8edc" } +#flowjax = { git = "https://github.com/aseyboldt/flowjax.git", rev = "1c282f2ded78e81c7ce6a96f61523a9f18bf8edc" } +flowjax = { path = "../flowjax/", editable = true } +samplerlab = { path = "../pymc-labs/benchmark-pymc", editable = true } posteriordb = ">=0.2.0, <0.3" jax = { version = "==0.4.35", extras = ["cuda12"] } +watermark = ">=2.5.0, <3" [system-requirements] #cuda = "12" From d6fda12175dafb45afed6fdceec03f14ec714ef9 Mon Sep 17 00:00:00 2001 From: Adrian Seyboldt Date: Thu, 12 Dec 2024 10:46:15 +0100 Subject: [PATCH 19/34] feat: Change default number of draws to None to let the sampler decide --- python/nutpie/sample.py | 24 ++++++++++++++---------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/python/nutpie/sample.py b/python/nutpie/sample.py index 097a824..356b8d0 100644 --- a/python/nutpie/sample.py +++ b/python/nutpie/sample.py @@ -398,6 +398,8 @@ def _extract(self, results): dims["divergence_start_gradient"] = ["unconstrained_parameter"] dims["divergence_end"] = ["unconstrained_parameter"] dims["divergence_momentum"] = ["unconstrained_parameter"] + dims["transformed_gradient"] = ["unconstrained_parameter"] + dims["transformed_position"] = ["unconstrained_parameter"] if self._return_raw_trace: return results @@ -453,8 +455,8 @@ def _repr_html_(self): def sample( compiled_model: CompiledModel, *, - draws: int, - tune: int, + draws: int | None, + tune: int | None, chains: int, cores: Optional[int], seed: Optional[int], @@ -473,8 +475,8 @@ def sample( def sample( compiled_model: CompiledModel, *, - draws: int, - tune: int, + draws: int | None, + tune: int | None, chains: int, cores: Optional[int], seed: Optional[int], @@ -492,8 +494,8 @@ def sample( def sample( compiled_model: CompiledModel, *, - draws: int = 1000, - tune: int = 300, + draws: int | None = None, + tune: int | None = None, chains: int = 6, cores: Optional[int] = None, seed: Optional[int] = None, @@ -513,9 +515,9 @@ def sample( Parameters ---------- - draws: int + draws: int | None The number of draws after tuning in each chain. - tune: int + tune: int | None The number of tuning (warmup) draws in each chain. chains: int The number of chains to sample. @@ -612,8 +614,10 @@ def sample( else: settings = _lib.PyNutsSettings.Diag(seed) - settings.num_tune = tune - settings.num_draws = draws + if tune is not None: + settings.num_tune = tune + if draws is not None: + settings.num_draws = draws settings.num_chains = chains for name, val in kwargs.items(): From e1acc6c7bbe9af61247ee3b45c26f1c6c9d9b89c Mon Sep 17 00:00:00 2001 From: Adrian Seyboldt Date: Thu, 12 Dec 2024 10:47:09 +0100 Subject: [PATCH 20/34] feat: allow dynamic extensions of normalizing flows --- python/nutpie/transform_adapter.py | 704 ++++++++++++++++++++++++----- 1 file changed, 595 insertions(+), 109 deletions(-) diff --git a/python/nutpie/transform_adapter.py b/python/nutpie/transform_adapter.py index de3876b..a5e9338 100644 --- a/python/nutpie/transform_adapter.py +++ b/python/nutpie/transform_adapter.py @@ -1,21 +1,33 @@ +from typing import cast + +_BIJECTION_TRACE = [] + def make_transform_adapter( *, verbose=False, - window_size=2000, + window_size=600, show_progress=False, nn_depth=1, - nn_width=None, - num_layers=8, + nn_width=16, + num_layers=3, num_diag_windows=10, learning_rate=1e-3, - untransformed_dim=None, + untransformed_dim=[1, None, -1], zero_init=True, batch_size=128, - reuse_opt_state=True, - max_patience=5, + reuse_opt_state=False, + max_patience=60, householder_layer=True, - dct_layer=True, + dct_layer=False, gamma=None, + log_inside_batch=False, + initial_skip=120, + extension_windows=[16, 20, 24], + extend_dct=False, + extension_var_count=4, + extension_var_trafo_count=2, + debug_save_bijection=False, + make_optimizer=None, ): import traceback from functools import partial @@ -31,48 +43,75 @@ def make_transform_adapter( from paramax import Parameterize, unwrap class FisherLoss: - def __init__(self, gamma=None): + def __init__(self, gamma=None, log_inside_batch=False): self._gamma = gamma + self._log_inside_batch = log_inside_batch @eqx.filter_jit def __call__( self, params, static, - x, + draws, + grads, + logps, condition=None, key=None, return_all_costs=False, + return_elemwise_costs=False, ): flow = unwrap(eqx.combine(params, static, is_leaf=eqx.is_inexact_array)) - def compute_loss(bijection, draw, grad): - draw, grad, logp = bijection.inverse_gradient_and_val( - draw, grad, jnp.array(0.0) + if return_elemwise_costs: + def compute_loss(bijection, draw, grad, logp): + if True: + draw, grad, logp = bijection.inverse_gradient_and_val( + draw, grad, logp + ) + else: + draw, grad, logp = flowjax.bijections.AbstractBijection.inverse_gradient_and_val( + bijection, draw, grad, logp + ) + cost = (draw + grad) ** 2 + return cost + + costs = jax.vmap(compute_loss, [None, 0, 0, 0])( + flow.bijection, draws, grads, logps, ) - cost = ((draw + grad) ** 2).sum() - if self._gamma is not None: - normal_logp = -draw @ draw / 2 - cost = cost + self._gamma * (logp - normal_logp).sum() + return costs.mean(0) - return cost - assert x.shape[1] == 2 - draws = x[:, 0, :] - grads = x[:, 1, :] + if self._gamma is None: + def compute_loss(bijection, draw, grad, logp): + draw, grad, logp = bijection.inverse_gradient_and_val( + draw, grad, logp + ) + cost = ((draw + grad) ** 2).sum() + return cost - if return_all_costs: - return jax.vmap(compute_loss, [None, 0, 0])( - flow.bijection, draws, grads + costs = jax.vmap(compute_loss, [None, 0, 0, 0])( + flow.bijection, draws, grads, logps, ) - return jnp.log( - jax.vmap(compute_loss, [None, 0, 0])( - flow.bijection, draws, grads - ).mean() - ) + if return_all_costs: + return costs + + if self._log_inside_batch: + return jnp.log(costs).mean() + else: + return jnp.log(costs.mean()) + + else: + def transform(draw, grad, logp): + return flow.bijection.inverse_gradient_and_val(draw, grad, logp) + + draws, grads, logps = jax.vmap(transform, [0, 0, 0], (0, 0, 0))(draws, grads, logps) + fisher_loss = ((draws + grads) ** 2).sum(1).mean(0) + normal_logps = -(draws * draws).sum(1) / 2 + var_loss = (logps - normal_logps).var() + return jnp.log(fisher_loss + self._gamma * var_loss) - def fit_flow(key, bijection, loss_fn, points, **kwargs): + def fit_flow(key, bijection, loss_fn, draws, grads, logps, **kwargs): flow = flowjax.flows.Transformed( flowjax.distributions.StandardNormal(bijection.shape), bijection ) @@ -82,9 +121,10 @@ def fit_flow(key, bijection, loss_fn, points, **kwargs): fit, losses = flowjax.train.fit_to_data( key=train_key, dist=flow, - x=points, + x=(draws, grads, logps), loss_fn=loss_fn, - max_epochs=500, + max_epochs=1000, + return_best=True, **kwargs, ) return fit.bijection, losses, losses["opt_state"] @@ -97,9 +137,11 @@ def make_flow( zero_init=False, householder_layer=False, dct_layer=False, - untransformed_dim: int | list[int] | None = None, + untransformed_dim: int | list[int | None] | None = None, n_layers, ): + from flowjax import bijections + positions = np.array(positions) gradients = np.array(gradients) @@ -128,25 +170,59 @@ def make_flow( key = jax.random.PRNGKey(seed % (2**63)) + diag_param = Parameterize( + lambda x: x + jnp.sqrt(1 + x ** 2), + (diag ** 2 - 1) / (2 * diag), + ) + + diag_affine = eqx.tree_at( + where=lambda aff: aff.scale, + pytree=bijections.Affine(mean, diag), + replace=diag_param, + ) + flows = [ - flowjax.flows.Affine(loc=mean, scale=diag), + #flowjax.flows.Affine(loc=mean, scale=diag), + diag_affine, ] if n_layers == 0: return flowjax.flows.Chain(flows) + scale = Parameterize( + lambda x: x + jnp.sqrt(1 + x**2), + jnp.zeros(n_dim), + ) + affine = eqx.tree_at( + where=lambda aff: aff.scale, + pytree=flowjax.bijections.Affine(jnp.zeros(n_dim), jnp.ones(n_dim)), + replace=scale, + ) + params = jnp.ones(n_dim) * 1e-5 + params = params.at[-1].set(1.) + + hh = flowjax.bijections.Householder(params) + flows.append( + bijections.Sandwich( + bijections.Chain([ + bijections.Vmap(bijections.SoftPlusX(), axis_size=n_dim), + hh, + ]), + affine, + ) + ) + if untransformed_dim is None: untransformed_dim = n_dim // 2 - untransformed_dim = cast(list[int] | int, untransformed_dim) + untransformed_dim = cast(list[int | None] | int, untransformed_dim) - def make_layer(key, untransformed_dim, is_last=False): + def make_layer(key, untransformed_dim: int | None): key, key_couple, key_permute = jax.random.split(key, 3) scale = Parameterize( lambda x: x + jnp.sqrt(1 + x**2), jnp.array(0.0), - # lambda x: jnp.exp(jnp.arcsinh(x)), jnp.array(0.0), ) affine = eqx.tree_at( where=lambda aff: aff.scale, @@ -159,6 +235,12 @@ def make_layer(key, untransformed_dim, is_last=False): else: width = nn_width + if untransformed_dim is None: + untransformed_dim = n_dim // 2 + + if untransformed_dim < 0: + untransformed_dim = n_dim + untransformed_dim + coupling = flowjax.bijections.coupling.Coupling( key_couple, transformer=affine, @@ -174,74 +256,404 @@ def make_layer(key, untransformed_dim, is_last=False): coupling, ) - if is_last: - flow = flowjax.bijections.Chain([coupling]) - else: - flow = flowjax.flows._add_default_permute(coupling, n_dim, key_permute) + def add_default_permute(bijection, dim, key): + if dim == 1: + return bijection + if dim == 2: + outer = flowjax.bijections.Flip((dim,)) + else: + outer = flowjax.bijections.Permute(jax.random.permutation(key, jnp.arange(dim))) + + return flowjax.bijections.Sandwich(outer, bijection) + + flow = add_default_permute(coupling, n_dim, key_permute) if householder_layer: - bijections = list(flow.bijections) params = jnp.ones(n_dim) * 1e-5 - params = params.at[0].set(0.) - bijections.append(flowjax.bijections.Householder(params)) - flow = flowjax.bijections.Chain(bijections) + params = params.at[0].set(1.) + + outer = flowjax.bijections.Householder(params) + flow = flowjax.bijections.Sandwich(outer, flow) + scale = Parameterize( + lambda x: x + jnp.sqrt(1 + x**2), + jnp.zeros(n_dim), + ) + affine = eqx.tree_at( + where=lambda aff: aff.scale, + pytree=flowjax.bijections.Affine(jnp.zeros(n_dim), jnp.ones(n_dim)), + replace=scale, + ) + params = jnp.ones(n_dim) * 1e-5 + params = params.at[-1].set(1.) + + hh = flowjax.bijections.Householder(params) + flow = bijections.Chain([ + bijections.Sandwich( + bijections.Chain([ + bijections.Vmap(bijections.SoftPlusX(), axis_size=n_dim), + hh, + ]), + affine, + ), + flow + ]) return flow - if n_layers == 1: - num_untrafo = ( - untransformed_dim - if isinstance(untransformed_dim, int) - else untransformed_dim[-1] + keys = jax.random.split(key, n_layers) + + if isinstance(untransformed_dim, int): + make_layers = eqx.filter_vmap(make_layer) + layers = make_layers(keys, untransformed_dim) + bijection = flowjax.bijections.Scan(layers) + else: + layers = [] + for i, (key, num_untrafo) in enumerate(zip(keys, untransformed_dim)): + + if i % 2 == 0 or not dct_layer: + layers.append(make_layer(key, num_untrafo)) + else: + inner = make_layer(key, num_untrafo) + outer = flowjax.bijections.DCT(inner.shape) + + layers.append(flowjax.bijections.Sandwich(outer, inner)) + + scale_val = jnp.ones(n_dim) + scale = Parameterize( + lambda x: x + jnp.sqrt(1 + x**2), + jnp.zeros(n_dim), + ) + mean = jnp.zeros(n_dim) + inner = eqx.tree_at( + where=lambda aff: aff.scale, + pytree=flowjax.bijections.Affine(mean, scale_val), + replace=scale, + ) + outer = flowjax.bijections.DCT(inner.shape) + layers.append(flowjax.bijections.Sandwich(outer, inner)) + + bijection = flowjax.bijections.Chain(layers) + + return flowjax.bijections.Chain([bijection, *flows]) + + def extend_flow( + key, + base, + loss_fn, + positions, + gradients, + logps, + layer: int, + *, + extension_var_count=4, + zero_init=False, + householder_layer=False, + untransformed_dim: int | list[int | None] | None = None, + dct: bool = False, + extension_var_trafo_count=2, + verbose: bool = False, + ): + from flowjax import bijections + + n_draws, n_dim = positions.shape + + if n_dim < 2: + return base + + if n_dim <= extension_var_count: + extension_var_count = n_dim - 1 + extension_var_trafo_count = 1 + + if dct: + flow = flowjax.flows.Transformed( + flowjax.distributions.StandardNormal(base.shape), + bijections.Chain( + [bijections.DCT(shape=(n_dim,)), base] + ), ) - bijection = make_layer( + else: + flow = flowjax.flows.Transformed( + flowjax.distributions.StandardNormal(base.shape), + base + ) + + params, static = eqx.partition(flow, eqx.is_inexact_array) + costs = loss_fn( + params, + static, + positions, + gradients, + logps, + return_elemwise_costs=True, + ) + + if verbose: + print(max(costs), costs) + print("dct:", dct) + idxs = np.argsort(costs) + + permute = bijections.Permute(idxs) + + if False: + identity = bijections.Identity(shape=(n_dim - extension_var_count,)) + print(costs[idxs]) + + scale = Parameterize( + lambda x: x + jnp.sqrt(1 + x**2), + jnp.array(0.0), + ) + affine = eqx.tree_at( + where=lambda aff: aff.scale, + pytree=flowjax.bijections.Affine(), + replace=scale, + ) + scale = Parameterize( + lambda x: x + jnp.sqrt(1 + x**2), + jnp.array(0.0), + ) + affine2 = eqx.tree_at( + where=lambda aff: aff.scale, + pytree=flowjax.bijections.Affine(), + replace=scale, + ) + + pre = [] + if layer % 2 == 0: + pre.append(bijections.Neg(shape=(n_dim,))) + + nonlin_affine = bijections.Chain([ + bijections.Sandwich( + bijections.Chain([ + *pre, + bijections.Vmap(bijections.SoftPlusX(), axis_size=n_dim), + ]), + affine, + ), + affine2, + ]) + + if nn_width is None: + width = extension_var_count * 16 + else: + width = nn_width * 16 + + if untransformed_dim is None: + untransformed_dim = extension_var_count // 2 + + coupling = flowjax.bijections.coupling.Coupling( key, - untransformed_dim=num_untrafo, - is_last=True, + transformer=nonlin_affine, + #transformer=affine, + untransformed_dim=untransformed_dim, + dim=extension_var_count, + nn_activation=jax.nn.gelu, + nn_width=width, + nn_depth=nn_depth + 1, + ) + if zero_init: + coupling = jax.tree_util.tree_map( + lambda x: x * 1e-3 if eqx.is_inexact_array(x) else x, + coupling, + ) + + params = jnp.ones(extension_var_count) * 1e-5 + params = params.at[-1].set(1.) + + hh = flowjax.bijections.Householder(params) + inner_permute = flowjax.bijections.Permute( + jax.random.permutation(key, jnp.arange(extension_var_count)) + ) + coupling = flowjax.bijections.Sandwich( + inner_permute, + flowjax.bijections.Sandwich(hh, coupling), ) + + inner = bijections.Concatenate([identity, coupling]) else: - keys = jax.random.split(key, n_layers - 1) + scale = Parameterize( + lambda x: x + jnp.sqrt(1 + x**2), + jnp.array(0.0), + ) + affine = eqx.tree_at( + where=lambda aff: aff.scale, + pytree=flowjax.bijections.Affine(), + replace=scale, + ) - if isinstance(untransformed_dim, int): - make_layers = eqx.filter_vmap(make_layer) - layers = make_layers(keys, untransformed_dim) - bijection = flowjax.bijections.Scan(layers) + """ + scale = Parameterize( + lambda x: x + jnp.sqrt(1 + x**2), + jnp.array(0.0), + ) + affine2 = eqx.tree_at( + where=lambda aff: aff.scale, + pytree=flowjax.bijections.Affine(), + replace=scale, + ) + pre = [] + if layer % 2 == 0: + pre.append(bijections.Neg(shape=())) + + nonlin_affine = bijections.Chain([ + bijections.Sandwich( + bijections.Chain([ + *pre, + bijections.SoftPlusX(), + ]), + affine, + ), + affine2, + ]) + """ + + do_flip = layer % 2 == 0 - key, key_layer = jax.random.split(key) - last = make_layer(key_layer, untransformed_dim, is_last=True) + if nn_width is None: + width = 16 + else: + width = nn_width + + #if untransformed_dim is None: + # untransformed_dim = extension_var_count // 2 + + if do_flip: + coupling = flowjax.bijections.coupling.Coupling( + key, + transformer=affine, + untransformed_dim=n_dim - extension_var_trafo_count, + dim=n_dim, + nn_activation=jax.nn.gelu, + nn_width=width, + nn_depth=nn_depth, + ) - bijection = flowjax.bijections.Chain([bijection, last]) + inner_permute = flowjax.bijections.Permute( + jnp.concatenate([ + jnp.arange(n_dim - extension_var_count), + jax.random.permutation(key, jnp.arange(n_dim - extension_var_count, n_dim)), + ]) + ) else: - layers = [] - for i, (key, num_untrafo) in enumerate(zip(keys[:-1], untransformed_dim[:1])): + coupling = flowjax.bijections.coupling.Coupling( + key, + transformer=affine, + untransformed_dim=extension_var_trafo_count, + dim=n_dim, + nn_activation=jax.nn.gelu, + nn_width=width, + nn_depth=nn_depth, + ) - if i % 2 == 0 or not dct_layer: - layers.append(make_layer(key, num_untrafo)) - else: - inner = make_layer(key, num_untrafo) - outer = flowjax.bijections.DCT(inner.shape) + inner_permute = flowjax.bijections.Permute( + jnp.concatenate([ + jax.random.permutation(key, jnp.arange(n_dim - extension_var_count, n_dim)), + jnp.arange(n_dim - extension_var_count), + ]) + ) - layers.append(flowjax.bijections.Sandwich(outer, inner)) + if zero_init: + coupling = jax.tree_util.tree_map( + lambda x: x * 1e-3 if eqx.is_inexact_array(x) else x, + coupling, + ) - scale_val = jnp.ones(n_dim) - scale = Parameterize( - lambda x: x + jnp.sqrt(1 + x**2), - jnp.zeros(n_dim), - ) - mean = jnp.zeros(n_dim) - inner = eqx.tree_at( - where=lambda aff: aff.scale, - pytree=flowjax.bijections.Affine(mean, scale_val), - replace=scale, - ) - outer = flowjax.bijections.DCT(inner.shape) - layers.append(flowjax.bijections.Sandwich(outer, inner)) + inner = bijections.Sandwich(inner_permute, coupling) + + if False: + scale = Parameterize( + lambda x: x + jnp.sqrt(1 + x**2), + jnp.array(0.0), + ) + affine = eqx.tree_at( + where=lambda aff: aff.scale, + pytree=flowjax.bijections.Affine(), + replace=scale, + ) - layers.append(make_layer(keys[-1], untransformed_dim[-1], is_last=True)) + if nn_width is None: + width = 16 + else: + width = nn_width - bijection = flowjax.bijections.Chain(layers) + #if untransformed_dim is None: + # untransformed_dim = extension_var_count // 2 + + coupling = flowjax.bijections.coupling.Coupling( + key, + transformer=affine, + untransformed_dim=extension_var_trafo_count, + dim=n_dim, + nn_activation=jax.nn.gelu, + nn_width=width, + nn_depth=nn_depth, + ) + + if zero_init: + coupling = jax.tree_util.tree_map( + lambda x: x * 1e-3 if eqx.is_inexact_array(x) else x, + coupling, + ) + + if verbose: + print(costs[permute.permutation][inner.outer.permutation]) + + """ + params = jnp.ones(n_dim) * 1e-5 + params = params.at[-1].set(0.) + + hh = flowjax.bijections.Householder(params) + + coupling = bijections.Sandwich(hh, coupling) + """ + + inner = bijections.Sandwich( + inner.outer, + bijections.Chain([ + bijections.Sandwich(bijections.Flip(shape=(n_dim,)), coupling), + inner.inner, + ]), + ) + + if dct: + new_layer = bijections.Sandwich( + bijections.DCT(shape=(n_dim,)), + bijections.Sandwich(permute, inner), + ) + else: + new_layer = bijections.Sandwich(permute, inner) + + scale = Parameterize( + lambda x: x + jnp.sqrt(1 + x**2), + jnp.zeros(n_dim), + ) + affine = eqx.tree_at( + where=lambda aff: aff.scale, + pytree=flowjax.bijections.Affine(jnp.zeros(n_dim), jnp.ones(n_dim)), + replace=scale, + ) + + pre = [] + if layer % 2 == 0: + pre.append(bijections.Neg(shape=(n_dim,))) + + nonlin_layer = bijections.Sandwich( + bijections.Chain([ + *pre, + bijections.Vmap(bijections.SoftPlusX(), axis_size=n_dim), + ]), + affine, + ) + scale = Parameterize( + lambda x: x + jnp.sqrt(1 + x**2), + jnp.zeros(n_dim), + ) + affine = eqx.tree_at( + where=lambda aff: aff.scale, + pytree=flowjax.bijections.Affine(jnp.zeros(n_dim), jnp.ones(n_dim)), + replace=scale, + ) + return bijections.Chain([new_layer, nonlin_layer, affine, base]) - return flowjax.bijections.Chain([bijection, *flows]) @eqx.filter_jit def _init_from_transformed_position(logp_fn, bijection, transformed_position): @@ -332,14 +744,27 @@ def __init__( reuse_opt_state=True, max_patience=5, gamma=None, + log_inside_batch=False, + initial_skip=500, + extension_windows=None, + extend_dct=False, + extension_var_count=6, + extension_var_trafo_count=4, + debug_save_bijection=False, + make_optimizer=None, ): self._logp_fn = logp_fn self._make_flow_fn = make_flow_fn self._chain = chain self._verbose = verbose self._window_size = window_size - self._optimizer = optax.apply_if_finite(optax.adabelief(learning_rate), 50) - self._loss_fn = FisherLoss(gamma) + self._initial_skip = initial_skip + if make_optimizer is None: + self._make_optimizer = lambda: optax.apply_if_finite(optax.adabelief(learning_rate), 50) + else: + self._make_optimizer = make_optimizer + self._optimizer = self._make_optimizer() + self._loss_fn = FisherLoss(gamma, log_inside_batch) self._show_progress = show_progress self._num_diag_windows = num_diag_windows self._zero_init = zero_init @@ -349,6 +774,18 @@ def __init__( self._opt_state = None self._max_patience = max_patience self._count_trace = [] + self._last_extend_dct = True + self._extend_dct = extend_dct + self._extension_var_count = extension_var_count + self._extension_var_trafo_count = extension_var_trafo_count + self._debug_save_bijection = debug_save_bijection + self._layers = 0 + + if extension_windows is None: + self._extension_windows = [] + else: + self._extension_windows = extension_windows + try: self._bijection = make_flow_fn(seed, [position], [gradient], n_layers=0) except Exception as e: @@ -361,11 +798,14 @@ def __init__( def transformation_id(self): return self.index - def update(self, seed, positions, gradients): + def update(self, seed, positions, gradients, logps): self.index += 1 if self._verbose: print(f"Chain {self._chain}: Total available points: {len(positions)}") n_draws = len(positions) + assert n_draws == len(positions) + assert n_draws == len(gradients) + assert n_draws == len(logps) self._count_trace.append(n_draws) if n_draws == 0: return @@ -373,21 +813,26 @@ def update(self, seed, positions, gradients): if self.index <= self._num_diag_windows: size = len(positions) lower_idx = -size // 5 + 3 - positions_slice = positions[-size // 5 + 3 :] - gradients_slice = gradients[-size // 5 + 3 :] + positions_slice = positions[lower_idx:] + gradients_slice = gradients[lower_idx:] + logp_slice = logps[lower_idx:] if len(positions_slice) > 0: positions = positions_slice gradients = gradients_slice + logps = logp_slice + + positions = np.array(positions) + gradients = np.array(gradients) + logps = np.array(logps) fit = self._make_flow_fn(seed, positions, gradients, n_layers=0) - points = jnp.transpose(jnp.array([positions, gradients]), [1, 0, 2]) flow = flowjax.flows.Transformed( flowjax.distributions.StandardNormal(fit.shape), fit ) params, static = eqx.partition(flow, eqx.is_inexact_array) - new_loss = self._loss_fn(params, static, points) + new_loss = self._loss_fn(params, static, positions, gradients, logps) if self._verbose: print("loss from diag:", new_loss) @@ -398,23 +843,24 @@ def update(self, seed, positions, gradients): return - positions = np.array(positions[500:][-self._window_size :]) - gradients = np.array(gradients[500:][-self._window_size :]) + positions = np.array(positions[self._initial_skip:][-self._window_size :]) + gradients = np.array(gradients[self._initial_skip:][-self._window_size :]) + logps = np.array(logps[self._initial_skip:][-self._window_size:]) - if len(positions) == 0: + if len(positions) < 10: return - if not np.isfinite(gradients).all(): + if self._verbose and not np.isfinite(gradients).all(): print(gradients) print(gradients.shape) print((~np.isfinite(gradients)).nonzero()) assert np.isfinite(positions).all() assert np.isfinite(gradients).all() + assert np.isfinite(logps).all() # TODO don't reuse seed key = jax.random.PRNGKey(seed % (2**63)) - points = jnp.transpose(jnp.array([positions, gradients]), [1, 0, 2]) if len(self._bijection.bijections) == 1: base = self._make_flow_fn( @@ -432,22 +878,58 @@ def update(self, seed, positions, gradients): if self._verbose: print( "loss before optimization: ", - self._loss_fn(params, static, points[-500:]), + self._loss_fn(params, static, positions[-500:], gradients[-500:], logps[-500:]), ) else: base = self._bijection - # make_flow might still only return a single trafo for 1d problems + if self.index in self._extension_windows: + if self._verbose: + print("Extending flow...") + self._last_extend_dct = not self._last_extend_dct + dct = self._last_extend_dct and self._extend_dct + base = extend_flow( + key, + base, + self._loss_fn, + positions, + gradients, + logps, + self._layers, + dct=dct, + extension_var_count=self._extension_var_count, + extension_var_trafo_count=self._extension_var_trafo_count, + verbose=self._verbose, + ) + self._optimizer = self._make_optimizer() + self._opt_state = None + self._layers += 1 + + # make_flow might still onreturn a single trafo for 1d problems if len(base.bijections) == 1: self._bijection = base self._opt_state = None return + flow = flowjax.flows.Transformed( + flowjax.distributions.StandardNormal(self._bijection.shape), + self._bijection, + ) + params, static = eqx.partition(flow, eqx.is_inexact_array) + old_loss = self._loss_fn(params, static, positions[-100:], gradients[-100:], logps[-100:]) + + if np.isfinite(old_loss) and old_loss < -5 and self.index > 10: + if self._verbose: + print(f"Loss is low ({old_loss}), skipping training") + return + fit, _, opt_state = fit_flow( key, base, self._loss_fn, - points, + positions, + gradients, + logps, show_progress=self._show_progress, optimizer=self._optimizer, batch_size=self._batch_size, @@ -459,14 +941,7 @@ def update(self, seed, positions, gradients): flowjax.distributions.StandardNormal(fit.shape), fit ) params, static = eqx.partition(flow, eqx.is_inexact_array) - new_loss = self._loss_fn(params, static, points[-500:]) - - flow = flowjax.flows.Transformed( - flowjax.distributions.StandardNormal(self._bijection.shape), - self._bijection, - ) - params, static = eqx.partition(flow, eqx.is_inexact_array) - old_loss = self._loss_fn(params, static, points[-500:]) + new_loss = self._loss_fn(params, static, positions[-100:], gradients[-100:], logps[-100:]) if self._verbose: print( @@ -481,7 +956,7 @@ def update(self, seed, positions, gradients): params, static = eqx.partition(flow, eqx.is_inexact_array) print( self._loss_fn( - params, static, points[-500:], return_all_costs=True + params, static, positions[-100:], gradients[-100:], logps[-100:], return_all_costs=True ) ) @@ -492,7 +967,7 @@ def update(self, seed, positions, gradients): params, static = eqx.partition(flow, eqx.is_inexact_array) print( self._loss_fn( - params, static, points[-500:], return_all_costs=True + params, static, positions[-100:], gradients[-100:], logps[-100:], return_all_costs=True ) ) @@ -512,6 +987,9 @@ def update(self, seed, positions, gradients): self._bijection = fit self._opt_state = opt_state + if self._debug_save_bijection: + _BIJECTION_TRACE.append((self.index, fit, (positions, gradients, logps))) + except Exception as e: print("update error:", e) print(traceback.format_exc()) @@ -613,4 +1091,12 @@ def inv_transform(self, position, gradient): reuse_opt_state=reuse_opt_state, max_patience=max_patience, gamma=gamma, + log_inside_batch=log_inside_batch, + initial_skip=initial_skip, + extension_windows=extension_windows, + extend_dct=extend_dct, + extension_var_count=extension_var_count, + extension_var_trafo_count=extension_var_trafo_count, + debug_save_bijection=debug_save_bijection, + make_optimizer=make_optimizer, ) From 4797c04908193a2c556a4f43b8d255d19b0f0244 Mon Sep 17 00:00:00 2001 From: Adrian Seyboldt Date: Thu, 12 Dec 2024 10:48:28 +0100 Subject: [PATCH 21/34] chore: Adapt to new nuts-rs transform code --- src/pyfunc.rs | 13 +++++-------- src/stan.rs | 2 ++ src/wrapper.rs | 31 ++++++++++++++++++++++++++++++- 3 files changed, 37 insertions(+), 9 deletions(-) diff --git a/src/pyfunc.rs b/src/pyfunc.rs index 778b68e..c097f71 100644 --- a/src/pyfunc.rs +++ b/src/pyfunc.rs @@ -1,4 +1,4 @@ -use std::sync::{Arc, Mutex}; +use std::sync::Arc; use anyhow::{anyhow, bail, Context, Result}; use arrow::{ @@ -76,7 +76,7 @@ impl PyVariable { pub struct PyModel { make_logp_func: Arc>, make_expand_func: Arc>, - init_point_func: Option>>>, + init_point_func: Option>>, variables: Arc>, transform_adapter: Option, ndim: usize, @@ -97,7 +97,7 @@ impl PyModel { Self { make_logp_func: Arc::new(make_logp_func), make_expand_func: Arc::new(make_expand_func), - init_point_func: init_point_func.map(|x| Mutex::new(x).into()), + init_point_func: init_point_func.map(|x| x.into()), variables: Arc::new(variables), ndim, transform_adapter: transform_adapter.map(PyTransformAdapt::new), @@ -265,6 +265,7 @@ impl CpuLogpFunc for PyDensity { rng: &mut R, untransformed_positions: impl ExactSizeIterator, untransformed_gradients: impl ExactSizeIterator, + untransformed_logp: impl ExactSizeIterator, params: &'a mut Py, ) -> std::result::Result<(), Self::LogpError> { self.transform_adapter @@ -274,6 +275,7 @@ impl CpuLogpFunc for PyDensity { rng, untransformed_positions, untransformed_gradients, + untransformed_logp, params, )?; Ok(()) @@ -619,11 +621,6 @@ impl Model for PyModel { let seed = rng.next_u64(); - // Acquire the init_func lock before we wait for the GIL - let init_func = init_func - .lock() - .expect("Could not acquire lock for init func"); - Python::with_gil(|py| { let init_point = init_func .call1(py, (seed,)) diff --git a/src/stan.rs b/src/stan.rs index ab7c3dc..e25ca65 100644 --- a/src/stan.rs +++ b/src/stan.rs @@ -345,6 +345,7 @@ impl<'model> CpuLogpFunc for StanDensity<'model> { rng: &mut R, untransformed_positions: impl ExactSizeIterator, untransformed_gradients: impl ExactSizeIterator, + untransformed_logp: impl ExactSizeIterator, params: &'a mut Py, ) -> std::result::Result<(), Self::LogpError> { self.transform_adapter @@ -354,6 +355,7 @@ impl<'model> CpuLogpFunc for StanDensity<'model> { rng, untransformed_positions, untransformed_gradients, + untransformed_logp, params, ) .context("Failed to update the transformation")?; diff --git a/src/wrapper.rs b/src/wrapper.rs index 7b50341..e4bc33c 100644 --- a/src/wrapper.rs +++ b/src/wrapper.rs @@ -601,6 +601,33 @@ impl PyNutsSettings { } Ok(()) } + + #[getter] + fn train_on_orbit(&self) -> Result { + match &self.inner { + Settings::LowRank(_) => { + bail!("gamma not available for low rank mass matrix adaptation"); + } + Settings::Diag(_) => { + bail!("gamma not available for diag mass matrix adaptation"); + } + Settings::Transforming(inner) => Ok(inner.adapt_options.use_orbit_for_training), + } + } + + #[setter(train_on_orbit)] + fn set_train_on_orbit(&mut self, val: bool) -> Result<()> { + match &mut self.inner { + Settings::LowRank(_) => { + bail!("gamma not available for low rank mass matrix adaptation"); + } + Settings::Diag(_) => { + bail!("gamma not available for diag mass matrix adaptation"); + } + Settings::Transforming(inner) => inner.adapt_options.use_orbit_for_training = val, + } + Ok(()) + } } pub(crate) enum SamplerState { @@ -1135,6 +1162,7 @@ impl PyTransformAdapt { rng: &mut R, untransformed_positions: impl ExactSizeIterator, untransformed_gradients: impl ExactSizeIterator, + untransformed_logp: impl ExactSizeIterator, params: &'a mut Py, ) -> Result<()> { Python::with_gil(|py| { @@ -1147,11 +1175,12 @@ impl PyTransformAdapt { untransformed_gradients.map(|grad| PyArray1::from_slice_bound(py, grad)), ); + let logps = PyArray1::from_iter_bound(py, untransformed_logp.copied()); let seed = rng.next_u64(); params .getattr(py, intern!(py, "update"))? - .call1(py, (seed, positions, gradients))?; + .call1(py, (seed, positions, gradients, logps))?; Ok(()) }) } From cf3e92180e349120b472e2e196f60cee4ce321d2 Mon Sep 17 00:00:00 2001 From: Adrian Seyboldt Date: Thu, 12 Dec 2024 11:18:18 +0100 Subject: [PATCH 22/34] chore: update to pyo3 0.23 --- Cargo.toml | 4 +- src/pyfunc.rs | 6 +-- src/stan.rs | 13 +++-- src/wrapper.rs | 126 +++++++++++++++++++++++++++++-------------------- 4 files changed, 89 insertions(+), 60 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 22bed6a..911b3c8 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -23,7 +23,7 @@ crate-type = ["cdylib"] [dependencies] nuts-rs = "0.13.0" -numpy = "0.22.0" +numpy = "0.23.0" rand = "0.8.5" thiserror = "2.0.3" rand_chacha = "0.3.1" @@ -41,7 +41,7 @@ indicatif = "0.17.8" tch = { version = "0.18.0", optional = true } [dependencies.pyo3] -version = "0.22.5" +version = "0.23.3" features = ["extension-module", "anyhow"] [dev-dependencies] diff --git a/src/pyfunc.rs b/src/pyfunc.rs index c097f71..827f038 100644 --- a/src/pyfunc.rs +++ b/src/pyfunc.rs @@ -124,7 +124,7 @@ impl LogpError for PyLogpError { match self { Self::BadLogp(_) => true, Self::PyError(err) => Python::with_gil(|py| { - let Ok(attr) = err.value_bound(py).getattr("is_recoverable") else { + let Ok(attr) = err.value(py).getattr("is_recoverable") else { return false; }; return attr @@ -166,7 +166,7 @@ impl CpuLogpFunc for PyDensity { fn logp(&mut self, position: &[f64], grad: &mut [f64]) -> Result { Python::with_gil(|py| { - let pos_array = PyArray1::from_slice_bound(py, position); + let pos_array = PyArray1::from_slice(py, position); let result = self.logp.call1(py, (pos_array,)); match result { Ok(val) => { @@ -451,7 +451,7 @@ impl ExpandDtype { impl DrawStorage for PyTrace { fn append_value(&mut self, point: &[f64]) -> Result<()> { Python::with_gil(|py| { - let point = PyArray1::from_slice_bound(py, point); + let point = PyArray1::from_slice(py, point); let full_point = self .expand .call1(py, (point,)) diff --git a/src/stan.rs b/src/stan.rs index e25ca65..52e6694 100644 --- a/src/stan.rs +++ b/src/stan.rs @@ -56,8 +56,8 @@ impl StanVariable { } #[getter] - fn shape<'py>(&self, py: Python<'py>) -> Bound<'py, PyTuple> { - PyTuple::new_bound(py, self.0.shape.iter()) + fn shape<'py>(&self, py: Python<'py>) -> PyResult> { + PyTuple::new(py, self.0.shape.iter()) } #[getter] @@ -165,11 +165,16 @@ impl StanModel { } pub fn variables<'py>(&self, py: Python<'py>) -> PyResult> { - let out = PyDict::new_bound(py); + let out = PyDict::new(py); let results: Result, _> = self .variables .iter() - .map(|var| out.set_item(var.name.clone(), StanVariable(var.clone()).into_py(py))) + .map(|var| { + out.set_item( + var.name.clone(), + StanVariable(var.clone()).into_pyobject(py)?, + ) + }) .collect(); results?; Ok(out) diff --git a/src/wrapper.rs b/src/wrapper.rs index e4bc33c..55472e7 100644 --- a/src/wrapper.rs +++ b/src/wrapper.rs @@ -1,6 +1,7 @@ use std::{ fmt::Debug, - sync::Arc, + ops::{Deref, DerefMut}, + sync::{Arc, Mutex}, time::{Duration, Instant}, }; @@ -703,7 +704,7 @@ impl ProgressType { } #[pyclass] -struct PySampler(SamplerState); +struct PySampler(Mutex); #[pymethods] impl PySampler { @@ -718,15 +719,15 @@ impl PySampler { match settings.inner { Settings::LowRank(settings) => { let sampler = Sampler::new(model, settings, cores, callback)?; - Ok(PySampler(SamplerState::Running(sampler))) + Ok(PySampler(SamplerState::Running(sampler).into())) } Settings::Diag(settings) => { let sampler = Sampler::new(model, settings, cores, callback)?; - Ok(PySampler(SamplerState::Running(sampler))) + Ok(PySampler(SamplerState::Running(sampler).into())) } Settings::Transforming(settings) => { let sampler = Sampler::new(model, settings, cores, callback)?; - Ok(PySampler(SamplerState::Running(sampler))) + Ok(PySampler(SamplerState::Running(sampler).into())) } } } @@ -742,15 +743,15 @@ impl PySampler { match settings.inner { Settings::LowRank(settings) => { let sampler = Sampler::new(model, settings, cores, callback)?; - Ok(PySampler(SamplerState::Running(sampler))) + Ok(PySampler(SamplerState::Running(sampler).into())) } Settings::Diag(settings) => { let sampler = Sampler::new(model, settings, cores, callback)?; - Ok(PySampler(SamplerState::Running(sampler))) + Ok(PySampler(SamplerState::Running(sampler).into())) } Settings::Transforming(settings) => { let sampler = Sampler::new(model, settings, cores, callback)?; - Ok(PySampler(SamplerState::Running(sampler))) + Ok(PySampler(SamplerState::Running(sampler).into())) } } } @@ -766,39 +767,42 @@ impl PySampler { match settings.inner { Settings::LowRank(settings) => { let sampler = Sampler::new(model, settings, cores, callback)?; - Ok(PySampler(SamplerState::Running(sampler))) + Ok(PySampler(SamplerState::Running(sampler).into())) } Settings::Diag(settings) => { let sampler = Sampler::new(model, settings, cores, callback)?; - Ok(PySampler(SamplerState::Running(sampler))) + Ok(PySampler(SamplerState::Running(sampler).into())) } Settings::Transforming(settings) => { let sampler = Sampler::new(model, settings, cores, callback)?; - Ok(PySampler(SamplerState::Running(sampler))) + Ok(PySampler(SamplerState::Running(sampler).into())) } } } fn is_finished(&mut self, py: Python<'_>) -> PyResult { py.allow_threads(|| { - let state = std::mem::replace(&mut self.0, SamplerState::Empty); + let guard = &mut self.0.lock().expect("Poisond sampler state mutex"); + let slot = guard.deref_mut(); + + let state = std::mem::replace(slot, SamplerState::Empty); let SamplerState::Running(sampler) = state else { - let _ = std::mem::replace(&mut self.0, state); + let _ = std::mem::replace(slot, state); return Ok(true); }; match sampler.wait_timeout(Duration::from_millis(1)) { SamplerWaitResult::Trace(trace) => { - let _ = std::mem::replace(&mut self.0, SamplerState::Finished(Some(trace))); + let _ = std::mem::replace(slot, SamplerState::Finished(Some(trace))); Ok(true) } SamplerWaitResult::Timeout(sampler) => { - let _ = std::mem::replace(&mut self.0, SamplerState::Running(sampler)); + let _ = std::mem::replace(slot, SamplerState::Running(sampler)); Ok(false) } SamplerWaitResult::Err(err, trace) => { - let _ = std::mem::replace(&mut self.0, SamplerState::Finished(trace)); + let _ = std::mem::replace(slot, SamplerState::Finished(trace)); Err(err.into()) } } @@ -807,7 +811,12 @@ impl PySampler { fn pause(&mut self, py: Python<'_>) -> PyResult<()> { py.allow_threads(|| { - if let SamplerState::Running(ref mut control) = self.0 { + if let SamplerState::Running(ref mut control) = self + .0 + .lock() + .expect("Poised sampler state mutex") + .deref_mut() + { control.pause()? } Ok(()) @@ -816,7 +825,12 @@ impl PySampler { fn resume(&mut self, py: Python<'_>) -> PyResult<()> { py.allow_threads(|| { - if let SamplerState::Running(ref mut control) = self.0 { + if let SamplerState::Running(ref mut control) = self + .0 + .lock() + .expect("Poisond sampler state mutex") + .deref_mut() + { control.resume()? } Ok(()) @@ -826,15 +840,18 @@ impl PySampler { #[pyo3(signature = (timeout_seconds=None))] fn wait(&mut self, py: Python<'_>, timeout_seconds: Option) -> PyResult<()> { py.allow_threads(|| { + let guard = &mut self.0.lock().expect("Poisond sampler state mutex"); + let slot = guard.deref_mut(); + let timeout = match timeout_seconds { Some(val) => Some(Duration::try_from_secs_f64(val).context("Invalid timeout")?), None => None, }; - let state = std::mem::replace(&mut self.0, SamplerState::Empty); + let state = std::mem::replace(slot, SamplerState::Empty); let SamplerState::Running(mut control) = state else { - let _ = std::mem::replace(&mut self.0, state); + let _ = std::mem::replace(slot, state); return Ok(()); }; @@ -875,32 +892,38 @@ impl PySampler { } }; - let _ = std::mem::replace(&mut self.0, final_state); + let _ = std::mem::replace(slot, final_state); retval }) } fn abort(&mut self, py: Python<'_>) -> PyResult<()> { py.allow_threads(|| { - let state = std::mem::replace(&mut self.0, SamplerState::Empty); + let guard = &mut self.0.lock().expect("Poisond sampler state mutex"); + let slot = guard.deref_mut(); + + let state = std::mem::replace(slot, SamplerState::Empty); let SamplerState::Running(control) = state else { - let _ = std::mem::replace(&mut self.0, state); + let _ = std::mem::replace(slot, state); return Ok(()); }; let (result, trace) = control.abort(); - let _ = std::mem::replace(&mut self.0, SamplerState::Finished(trace)); + let _ = std::mem::replace(slot, SamplerState::Finished(trace)); result?; Ok(()) }) } fn extract_results<'py>(&mut self, py: Python<'py>) -> PyResult> { - let state = std::mem::replace(&mut self.0, SamplerState::Empty); + let guard = &mut self.0.lock().expect("Poisond sampler state mutex"); + let slot = guard.deref_mut(); + + let state = std::mem::replace(slot, SamplerState::Empty); let SamplerState::Finished(trace) = state else { - let _ = std::mem::replace(&mut self.0, state); + let _ = std::mem::replace(slot, state); return Err(anyhow::anyhow!("Sampler is not finished"))?; }; @@ -914,7 +937,7 @@ impl PySampler { } fn is_empty(&self) -> bool { - match self.0 { + match self.0.lock().expect("Poisoned sampler state lock").deref() { SamplerState::Running(_) => false, SamplerState::Finished(_) => false, SamplerState::Empty => true, @@ -923,7 +946,8 @@ impl PySampler { fn inspect<'py>(&mut self, py: Python<'py>) -> PyResult> { let trace = py.allow_threads(|| { - let SamplerState::Running(ref mut sampler) = self.0 else { + let mut guard = self.0.lock().unwrap(); + let SamplerState::Running(ref mut sampler) = guard.deref_mut() else { return Err(anyhow::anyhow!("Sampler is not running"))?; }; @@ -934,28 +958,28 @@ impl PySampler { } fn trace_to_list(trace: Trace, py: Python<'_>) -> PyResult> { - let list = PyList::new_bound( + let list = PyList::new( py, trace .chains .into_iter() .map(|chain| { - Ok(PyTuple::new_bound( + Ok(PyTuple::new( py, [ export_array(py, chain.draws)?, export_array(py, chain.stats)?, ] .into_iter(), - )) + )?) }) .collect::>>()?, - ); + )?; Ok(list) } fn export_array(py: Python<'_>, data: Arc) -> PyResult { - let pa = py.import_bound("pyarrow")?; + let pa = py.import("pyarrow")?; let array = pa.getattr("Array")?; let data = data.into_data(); @@ -966,12 +990,12 @@ fn export_array(py: Python<'_>, data: Arc) -> PyResult { .call_method1( "_import_from_c", ( - (&data as *const _ as Py_uintptr_t).into_py(py), - (&schema as *const _ as Py_uintptr_t).into_py(py), + (&data as *const _ as Py_uintptr_t).into_pyobject(py)?, + (&schema as *const _ as Py_uintptr_t).into_pyobject(py)?, ), ) .context("Could not import arrow trace in python")?; - Ok(data.into_py(py)) + Ok(data.unbind()) } #[pyclass] @@ -996,8 +1020,8 @@ impl PyTransformAdapt { transformed_gradient: &mut [f64], ) -> Result { Python::with_gil(|py| { - let untransformed_position = PyArray1::from_slice_bound(py, untransformed_position); - let untransformed_gradient = PyArray1::from_slice_bound(py, untransformed_gradient); + let untransformed_position = PyArray1::from_slice(py, untransformed_position); + let untransformed_gradient = PyArray1::from_slice(py, untransformed_gradient); let output = params .getattr(py, intern!(py, "inv_transform")) @@ -1051,7 +1075,7 @@ impl PyTransformAdapt { transformed_gradient: &mut [f64], ) -> Result<(f64, f64)> { Python::with_gil(|py| { - let transformed_position = PyArray1::from_slice_bound(py, transformed_position); + let transformed_position = PyArray1::from_slice(py, transformed_position); let output = params .getattr(py, intern!(py, "init_from_transformed_position"))? @@ -1084,7 +1108,7 @@ impl PyTransformAdapt { transformed_position: &[f64], ) -> Result> { Python::with_gil(|py| { - let transformed_position = PyArray1::from_slice_bound(py, transformed_position); + let transformed_position = PyArray1::from_slice(py, transformed_position); let output = params .getattr(py, intern!(py, "init_from_transformed_position_part1"))? @@ -1105,7 +1129,7 @@ impl PyTransformAdapt { transformed_gradient: &mut [f64], ) -> Result { Python::with_gil(|py| { - let untransformed_gradient = PyArray1::from_slice_bound(py, untransformed_gradient); + let untransformed_gradient = PyArray1::from_slice(py, untransformed_gradient); let output = params .getattr(py, intern!(py, "init_from_transformed_position_part2"))? @@ -1127,7 +1151,7 @@ impl PyTransformAdapt { transformed_gradient: &mut [f64], ) -> Result<(f64, f64)> { Python::with_gil(|py| { - let untransformed_position = PyArray1::from_slice_bound(py, untransformed_position); + let untransformed_position = PyArray1::from_slice(py, untransformed_position); let output = params .getattr(py, intern!(py, "init_from_untransformed_position")) @@ -1166,16 +1190,16 @@ impl PyTransformAdapt { params: &'a mut Py, ) -> Result<()> { Python::with_gil(|py| { - let positions = PyList::new_bound( + let positions = PyList::new( py, - untransformed_positions.map(|pos| PyArray1::from_slice_bound(py, pos)), - ); - let gradients = PyList::new_bound( + untransformed_positions.map(|pos| PyArray1::from_slice(py, pos)), + )?; + let gradients = PyList::new( py, - untransformed_gradients.map(|grad| PyArray1::from_slice_bound(py, grad)), - ); + untransformed_gradients.map(|grad| PyArray1::from_slice(py, grad)), + )?; - let logps = PyArray1::from_iter_bound(py, untransformed_logp.copied()); + let logps = PyArray1::from_iter(py, untransformed_logp.copied()); let seed = rng.next_u64(); params @@ -1193,8 +1217,8 @@ impl PyTransformAdapt { chain: u64, ) -> Result> { Python::with_gil(|py| { - let position = PyArray1::from_slice_bound(py, untransformed_position); - let gradient = PyArray1::from_slice_bound(py, untransformed_gradient); + let position = PyArray1::from_slice(py, untransformed_position); + let gradient = PyArray1::from_slice(py, untransformed_gradient); let seed = rng.next_u64(); From 329a8b4bc5417b88ff9e30f6f322ab4ac95339d1 Mon Sep 17 00:00:00 2001 From: Adrian Seyboldt Date: Thu, 12 Dec 2024 14:41:03 +0100 Subject: [PATCH 23/34] style: Reformat some code --- src/pyfunc.rs | 45 ++++++++++++++++++++++++++++++++++++--------- 1 file changed, 36 insertions(+), 9 deletions(-) diff --git a/src/pyfunc.rs b/src/pyfunc.rs index 827f038..94a102b 100644 --- a/src/pyfunc.rs +++ b/src/pyfunc.rs @@ -477,36 +477,51 @@ impl DrawStorage for PyTrace { self.builder.field_builder(i).context( "Builder has incorrect type", )?; - builder.append_value(value.extract().expect("Return value from expand function could not be converted to boolean")) + let value = value + .extract() + .expect("Return value from expand function could not be converted to boolean"); + builder.append_value(value) }, ExpandDtype::Float64 {} => { let builder: &mut Float64Builder = self.builder.field_builder(i).context( "Builder has incorrect type", )?; - builder.append_value(value.extract().expect("Return value from expand function could not be converted to float64")) + builder.append_value( + value + .extract() + .expect("Return value from expand function could not be converted to float64") + ) }, ExpandDtype::Float32 {} => { let builder: &mut Float32Builder = self.builder.field_builder(i).context( "Builder has incorrect type", )?; - builder.append_value(value.extract().expect("Return value from expand function could not be converted to float32")) - + builder.append_value( + value + .extract() + .expect("Return value from expand function could not be converted to float32") + ) }, ExpandDtype::Int64 {} => { let builder: &mut Int64Builder = self.builder.field_builder(i).context( "Builder has incorrect type", )?; - builder.append_value(value.extract().expect("Return value from expand function could not be converted to int64")) + let value = value.extract().expect("Return value from expand function could not be converted to int64"); + builder.append_value(value) }, ExpandDtype::BooleanArray { tensor_type} => { let builder: &mut FixedSizeListBuilder> = self.builder.field_builder(i).context( "Builder has incorrect type", )?; - let value_builder = builder.values().as_any_mut().downcast_mut::().context("Could not downcast builder to boolean type")?; + let value_builder = builder + .values() + .as_any_mut() + .downcast_mut::() + .context("Could not downcast builder to boolean type")?; let values: PyReadonlyArray1 = value.extract().context("Could not convert object to array")?; if values.len()? != tensor_type.size() { bail!("Extracted array has incorrect shape"); @@ -520,7 +535,11 @@ impl DrawStorage for PyTrace { self.builder.field_builder(i).context( "Builder has incorrect type", )?; - let value_builder = builder.values().as_any_mut().downcast_mut::>().context("Could not downcast builder to float64 type")?; + let value_builder = builder + .values() + .as_any_mut() + .downcast_mut::>() + .context("Could not downcast builder to float64 type")?; let values: PyReadonlyArray1 = value.extract().context("Could not convert object to array")?; if values.len()? != tensor_type.size() { bail!("Extracted array has incorrect shape"); @@ -533,7 +552,11 @@ impl DrawStorage for PyTrace { self.builder.field_builder(i).context( "Builder has incorrect type", )?; - let value_builder = builder.values().as_any_mut().downcast_mut::>().context("Could not downcast builder to float32 type")?; + let value_builder = builder + .values() + .as_any_mut() + .downcast_mut::>() + .context("Could not downcast builder to float32 type")?; let values: PyReadonlyArray1 = value.extract().context("Could not convert object to array")?; if values.len()? != tensor_type.size() { bail!("Extracted array has incorrect shape"); @@ -546,7 +569,11 @@ impl DrawStorage for PyTrace { self.builder.field_builder(i).context( "Builder has incorrect type", )?; - let value_builder = builder.values().as_any_mut().downcast_mut::>().context("Could not downcast builder to i64 type")?; + let value_builder = builder + .values() + .as_any_mut() + .downcast_mut::>() + .context("Could not downcast builder to i64 type")?; let values: PyReadonlyArray1 = value.extract().context("Could not convert object to array")?; if values.len()? != tensor_type.size() { bail!("Extracted array has incorrect shape"); From fd57509fb7b7fc1f46fa5e334a9d578e8a67c8bf Mon Sep 17 00:00:00 2001 From: Adrian Seyboldt Date: Thu, 12 Dec 2024 14:41:24 +0100 Subject: [PATCH 24/34] chore: improve gitignore --- .gitignore | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.gitignore b/.gitignore index f0721f7..2d1f0df 100644 --- a/.gitignore +++ b/.gitignore @@ -12,3 +12,6 @@ perf.data* wheels .vscode/ *~ +.zed +.cargo +*traces* From b02088371f952fad23906ac62c51035949edf588 Mon Sep 17 00:00:00 2001 From: Adrian Seyboldt Date: Thu, 12 Dec 2024 14:42:36 +0100 Subject: [PATCH 25/34] chore: Update pixi dependencies --- Cargo.lock | 315 ++--- pixi.lock | 3388 +++++++++++++++++++--------------------------------- pixi.toml | 14 +- 3 files changed, 1382 insertions(+), 2335 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 2c09233..4693433 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -71,15 +71,15 @@ checksum = "55cc3b69f167a1ef2e161439aa98aed94e6028e5f9a59be9a6ffb47aef1651f9" [[package]] name = "anyhow" -version = "1.0.93" +version = "1.0.94" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c95c10ba0b00a02636238b814946408b1322d5ac4760326e6fb8ec956d85775" +checksum = "c1fd03a028ef38ba2276dce7e33fcd6369c158a1bca17946c4b1b701891c1ff7" [[package]] name = "arrow" -version = "53.2.0" +version = "53.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4caf25cdc4a985f91df42ed9e9308e1adbcd341a31a72605c697033fcef163e3" +checksum = "c91839b07e474b3995035fd8ac33ee54f9c9ccbbb1ea33d9909c71bffdf1259d" dependencies = [ "arrow-arith", "arrow-array", @@ -95,9 +95,9 @@ dependencies = [ [[package]] name = "arrow-arith" -version = "53.2.0" +version = "53.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91f2dfd1a7ec0aca967dfaa616096aec49779adc8eccec005e2f5e4111b1192a" +checksum = "855c57c4efd26722b044dcd3e348252560e3e0333087fb9f6479dc0bf744054f" dependencies = [ "arrow-array", "arrow-buffer", @@ -110,9 +110,9 @@ dependencies = [ [[package]] name = "arrow-array" -version = "53.2.0" +version = "53.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d39387ca628be747394890a6e47f138ceac1aa912eab64f02519fed24b637af8" +checksum = "bd03279cea46569acf9295f6224fbc370c5df184b4d2ecfe97ccb131d5615a7f" dependencies = [ "ahash", "arrow-buffer", @@ -126,9 +126,9 @@ dependencies = [ [[package]] name = "arrow-buffer" -version = "53.2.0" +version = "53.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e51e05228852ffe3eb391ce7178a0f97d2cf80cc6ef91d3c4a6b3cb688049ec" +checksum = "9e4a9b9b1d6d7117f6138e13bc4dd5daa7f94e671b70e8c9c4dc37b4f5ecfc16" dependencies = [ "bytes", "half", @@ -137,9 +137,9 @@ dependencies = [ [[package]] name = "arrow-cast" -version = "53.2.0" +version = "53.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d09aea56ec9fa267f3f3f6cdab67d8a9974cbba90b3aa38c8fe9d0bb071bd8c1" +checksum = "bc70e39916e60c5b7af7a8e2719e3ae589326039e1e863675a008bee5ffe90fd" dependencies = [ "arrow-array", "arrow-buffer", @@ -157,9 +157,9 @@ dependencies = [ [[package]] name = "arrow-data" -version = "53.2.0" +version = "53.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b98ae0af50890b494cebd7d6b04b35e896205c1d1df7b29a6272c5d0d0249ef5" +checksum = "e4e75edf21ffd53744a9b8e3ed11101f610e7ceb1a29860432824f1834a1f623" dependencies = [ "arrow-buffer", "arrow-schema", @@ -169,9 +169,9 @@ dependencies = [ [[package]] name = "arrow-ord" -version = "53.2.0" +version = "53.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2883d7035e0b600fb4c30ce1e50e66e53d8656aa729f2bfa4b51d359cf3ded52" +checksum = "ece7b5bc1180e6d82d1a60e1688c199829e8842e38497563c3ab6ea813e527fd" dependencies = [ "arrow-array", "arrow-buffer", @@ -184,9 +184,9 @@ dependencies = [ [[package]] name = "arrow-row" -version = "53.2.0" +version = "53.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "552907e8e587a6fde4f8843fd7a27a576a260f65dab6c065741ea79f633fc5be" +checksum = "745c114c8f0e8ce211c83389270de6fbe96a9088a7b32c2a041258a443fe83ff" dependencies = [ "ahash", "arrow-array", @@ -198,18 +198,18 @@ dependencies = [ [[package]] name = "arrow-schema" -version = "53.2.0" +version = "53.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "539ada65246b949bd99ffa0881a9a15a4a529448af1a07a9838dd78617dafab1" +checksum = "b95513080e728e4cec37f1ff5af4f12c9688d47795d17cda80b6ec2cf74d4678" dependencies = [ "bitflags 2.6.0", ] [[package]] name = "arrow-select" -version = "53.2.0" +version = "53.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6259e566b752da6dceab91766ed8b2e67bf6270eb9ad8a6e07a33c1bede2b125" +checksum = "8e415279094ea70323c032c6e739c48ad8d80e78a09bef7117b8718ad5bf3722" dependencies = [ "ahash", "arrow-array", @@ -221,9 +221,9 @@ dependencies = [ [[package]] name = "arrow-string" -version = "53.2.0" +version = "53.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3179ccbd18ebf04277a095ba7321b93fd1f774f18816bd5f6b3ce2f594edb6c" +checksum = "11d956cae7002eb8d83a27dbd34daaea1cf5b75852f0b84deb4d93a276e92bbf" dependencies = [ "arrow-array", "arrow-buffer", @@ -280,9 +280,9 @@ dependencies = [ "proc-macro2", "quote", "regex", - "rustc-hash", + "rustc-hash 1.1.0", "shlex", - "syn 2.0.87", + "syn", "which", ] @@ -328,9 +328,9 @@ checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c" [[package]] name = "bytemuck" -version = "1.19.0" +version = "1.20.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8334215b81e418a0a7bdb8ef0849474f40bb10c8b71f1c4ed315cff49f32494d" +checksum = "8b37c88a63ffd85d15b406896cc343916d7cf57838a847b3a6f2ca5d39a5695a" dependencies = [ "bytemuck_derive", ] @@ -343,7 +343,7 @@ checksum = "bcfcc3cd946cb52f0bbfdbbcfa2f4e24f75ebb6c0e1002f7c25904fada18b9ec" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn", ] [[package]] @@ -354,9 +354,9 @@ checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" [[package]] name = "bytes" -version = "1.8.0" +version = "1.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ac0150caa2ae65ca5bd83f25c7de183dea78d4d366469f148435e2acfbad0da" +checksum = "325918d6fe32f23b19878fe4b34794ae41fc19ddbe53b10571a4874d44ffd39b" [[package]] name = "bzip2" @@ -387,9 +387,9 @@ checksum = "37b2a672a2cb129a2e41c10b1224bb368f9f37a2b16b612598138befd7b37eb5" [[package]] name = "cc" -version = "1.2.1" +version = "1.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd9de9f2205d5ef3fd67e685b0df337994ddd4495e2a28d185500d0e1edfea47" +checksum = "27f657647bcff5394bf56c7317665bbf790a137a50eaaa5c6bfbb9e27a518f2d" dependencies = [ "jobserver", "libc", @@ -413,9 +413,9 @@ checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" [[package]] name = "chrono" -version = "0.4.38" +version = "0.4.39" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a21f936df1771bf62b77f047b726c4625ff2e8aa607c01ec06e5a05bd8463401" +checksum = "7e36cc9d416881d2e24f9a963be5fb1cd90966419ac844274161d10488b3e825" dependencies = [ "android-tzdata", "iana-time-zone", @@ -473,18 +473,18 @@ dependencies = [ [[package]] name = "clap" -version = "4.5.21" +version = "4.5.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb3b4b9e5a7c7514dfa52869339ee98b3156b0bfb4e8a77c4ff4babb64b1604f" +checksum = "3135e7ec2ef7b10c6ed8950f0f792ed96ee093fa088608f1c76e569722700c84" dependencies = [ "clap_builder", ] [[package]] name = "clap_builder" -version = "4.5.21" +version = "4.5.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b17a95aa67cc7b5ebd32aa5370189aa0d79069ef1c64ce893bd30fb24bff20ec" +checksum = "30582fc632330df2bd26877bde0c1f4470d57c582bbc070376afcd04d8cb4838" dependencies = [ "anstyle", "clap_lex", @@ -492,9 +492,9 @@ dependencies = [ [[package]] name = "clap_lex" -version = "0.7.3" +version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "afb84c814227b90d6895e01398aee0d8033c00e7466aca416fb6a8e0eb19d8a7" +checksum = "f46ad14479a25103f283c0f10005961cf086d8dc42205bb44c46ac563475dca6" [[package]] name = "coe-rs" @@ -549,9 +549,9 @@ checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" [[package]] name = "cpufeatures" -version = "0.2.15" +version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ca741a962e1b0bff6d724a1a0958b686406e853bb14061f218562e1896f95e6" +checksum = "16b80225097f2e5ae4e7179dd2266824648f3e2f49d9134d584b76389d31c4c3" dependencies = [ "libc", ] @@ -699,7 +699,7 @@ dependencies = [ "heck", "proc-macro2", "quote", - "syn 2.0.87", + "syn", ] [[package]] @@ -728,7 +728,7 @@ checksum = "3bf679796c0322556351f287a51b49e48f7c4986e727b5dd78c972d30e2e16cc" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn", ] [[package]] @@ -739,17 +739,17 @@ checksum = "5322a90066ddae2b705096eb9e10c465c0498ae93bf9bdd6437415327c88e3bb" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn", ] [[package]] name = "errno" -version = "0.3.9" +version = "0.3.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "534c5cf6194dfab3db3242765c03bbe257cf92f22b38f6bc0c58d59108a820ba" +checksum = "33d852cb9b869c2a9b3df2f71a3074817f01e1844f839a144f5fcef059a4eb5d" dependencies = [ "libc", - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] @@ -786,7 +786,7 @@ dependencies = [ "libm", "num-complex", "num-traits", - "pulp", + "pulp 0.18.22", "reborrow", ] @@ -863,7 +863,7 @@ dependencies = [ "num-traits", "once_cell", "paste", - "pulp", + "pulp 0.18.22", "raw-cpuid", "seq-macro", "sysctl", @@ -957,9 +957,9 @@ dependencies = [ [[package]] name = "hashbrown" -version = "0.14.5" +version = "0.15.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" +checksum = "bf151400ff0baff5465007dd2f3e717f3fe502074ca563069ce3a6629d07b289" [[package]] name = "heck" @@ -1082,9 +1082,9 @@ dependencies = [ [[package]] name = "itoa" -version = "1.0.11" +version = "1.0.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49f1f14873335454500d59611f1cf4a4b0f786f9ac11f4312a78e4cf2566695b" +checksum = "d75a2a4b1b190afb6f5425f10f6a8f959d2ea0b9c2b1d79553551850539e4674" [[package]] name = "jobserver" @@ -1097,10 +1097,11 @@ dependencies = [ [[package]] name = "js-sys" -version = "0.3.72" +version = "0.3.76" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a88f1bda2bd75b0452a14784937d796722fdebfe50df998aeb3f0b7603019a9" +checksum = "6717b6b5b077764fb5966237269cb3c64edddde4b14ce42647430a78ced9e7b7" dependencies = [ + "once_cell", "wasm-bindgen", ] @@ -1118,9 +1119,9 @@ checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55" [[package]] name = "lexical-core" -version = "1.0.2" +version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0431c65b318a590c1de6b8fd6e72798c92291d27762d94c9e6c37ed7a73d8458" +checksum = "b765c31809609075565a70b4b71402281283aeda7ecaf4818ac14a7b2ade8958" dependencies = [ "lexical-parse-float", "lexical-parse-integer", @@ -1131,9 +1132,9 @@ dependencies = [ [[package]] name = "lexical-parse-float" -version = "1.0.2" +version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eb17a4bdb9b418051aa59d41d65b1c9be5affab314a872e5ad7f06231fb3b4e0" +checksum = "de6f9cb01fb0b08060209a057c048fcbab8717b4c1ecd2eac66ebfe39a65b0f2" dependencies = [ "lexical-parse-integer", "lexical-util", @@ -1142,9 +1143,9 @@ dependencies = [ [[package]] name = "lexical-parse-integer" -version = "1.0.2" +version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5df98f4a4ab53bf8b175b363a34c7af608fe31f93cc1fb1bf07130622ca4ef61" +checksum = "72207aae22fc0a121ba7b6d479e42cbfea549af1479c3f3a4f12c70dd66df12e" dependencies = [ "lexical-util", "static_assertions", @@ -1152,18 +1153,18 @@ dependencies = [ [[package]] name = "lexical-util" -version = "1.0.3" +version = "1.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85314db53332e5c192b6bca611fb10c114a80d1b831ddac0af1e9be1b9232ca0" +checksum = "5a82e24bf537fd24c177ffbbdc6ebcc8d54732c35b50a3f28cc3f4e4c949a0b3" dependencies = [ "static_assertions", ] [[package]] name = "lexical-write-float" -version = "1.0.2" +version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e7c3ad4e37db81c1cbe7cf34610340adc09c322871972f74877a712abc6c809" +checksum = "c5afc668a27f460fb45a81a757b6bf2f43c2d7e30cb5a2dcd3abf294c78d62bd" dependencies = [ "lexical-util", "lexical-write-integer", @@ -1172,9 +1173,9 @@ dependencies = [ [[package]] name = "lexical-write-integer" -version = "1.0.2" +version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eb89e9f6958b83258afa3deed90b5de9ef68eef090ad5086c791cd2345610162" +checksum = "629ddff1a914a836fb245616a7888b62903aae58fa771e1d83943035efa0f978" dependencies = [ "lexical-util", "static_assertions", @@ -1182,15 +1183,15 @@ dependencies = [ [[package]] name = "libc" -version = "0.2.162" +version = "0.2.168" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "18d287de67fe55fd7e1581fe933d965a5a9477b38e949cfa9f8574ef01506398" +checksum = "5aaeb2981e0606ca11d79718f8bb01164f1d6ed75080182d3abf017e6d244b6d" [[package]] name = "libloading" -version = "0.8.5" +version = "0.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4979f22fdb869068da03c9f7528f8297c6fd2606bc3a4affe42e6a823fdb8da4" +checksum = "fc2f4eb4bc735547cfed7c0a4922cbd04a4655978c09b54f1f7b228750664c34" dependencies = [ "cfg-if", "windows-targets", @@ -1272,9 +1273,9 @@ dependencies = [ [[package]] name = "multiversion" -version = "0.7.4" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4851161a11d3ad0bf9402d90ffc3967bf231768bfd7aeb61755ad06dbf1a142" +checksum = "7edb7f0ff51249dfda9ab96b5823695e15a052dc15074c9dbf3d118afaf2c201" dependencies = [ "multiversion-macros", "target-features", @@ -1282,13 +1283,13 @@ dependencies = [ [[package]] name = "multiversion-macros" -version = "0.7.4" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "79a74ddee9e0c27d2578323c13905793e91622148f138ba29738f9dddb835e90" +checksum = "b093064383341eb3271f42e381cb8f10a01459478446953953c75d24bd339fc0" dependencies = [ "proc-macro2", "quote", - "syn 1.0.109", + "syn", "target-features", ] @@ -1489,9 +1490,9 @@ checksum = "830b246a0e5f20af87141b25c173cd1b609bd7779a4617d6ec582abaf90870f3" [[package]] name = "numpy" -version = "0.22.1" +version = "0.23.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "edb929bc0da91a4d85ed6c0a84deaa53d411abfb387fc271124f91bf6b89f14e" +checksum = "b94caae805f998a07d33af06e6a3891e38556051b8045c615470a71590e13e78" dependencies = [ "libc", "ndarray 0.16.1", @@ -1499,7 +1500,7 @@ dependencies = [ "num-integer", "num-traits", "pyo3", - "rustc-hash", + "rustc-hash 2.1.0", ] [[package]] @@ -1521,7 +1522,7 @@ dependencies = [ "rayon", "smallvec", "tch", - "thiserror 2.0.3", + "thiserror 2.0.6", "time-humanize", "upon", ] @@ -1529,20 +1530,18 @@ dependencies = [ [[package]] name = "nuts-rs" version = "0.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "55fad6cdecd2d51675b7f167657817304ac421a18d0efff93914e295935ef4c0" dependencies = [ "anyhow", "arrow", "faer", "itertools 0.13.0", "multiversion", - "pulp", + "pulp 0.20.1", "rand", "rand_chacha", "rand_distr", "rayon", - "thiserror 1.0.69", + "thiserror 2.0.6", ] [[package]] @@ -1640,15 +1639,15 @@ dependencies = [ [[package]] name = "portable-atomic" -version = "1.9.0" +version = "1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc9c68a3f6da06753e9335d63e27f6b9754dd1920d941135b7ea8224f141adb2" +checksum = "280dc24453071f1b63954171985a0b0d30058d287960968b9b2aca264c8d4ee6" [[package]] name = "portable-atomic-util" -version = "0.2.3" +version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90a7d5beecc52a491b54d6dd05c7a45ba1801666a5baad9fdbfc6fef8d2d206c" +checksum = "d8a2f0d8d040d7848a709caf78912debcc3f33ee4b3cac47d73d1e1069e83507" dependencies = [ "portable-atomic", ] @@ -1675,14 +1674,14 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "64d1ec885c64d0457d564db4ec299b2dae3f9c02808b8ad9c3a089c591b18033" dependencies = [ "proc-macro2", - "syn 2.0.87", + "syn", ] [[package]] name = "proc-macro2" -version = "1.0.89" +version = "1.0.92" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f139b0662de085916d1fb67d2b4169d1addddda1919e696f3252b740b629986e" +checksum = "37d3544b3f2748c54e147655edb5025752e2303145b5aefb3c3ea2c78b973bb0" dependencies = [ "unicode-ident", ] @@ -1699,11 +1698,23 @@ dependencies = [ "reborrow", ] +[[package]] +name = "pulp" +version = "0.20.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a9e3f19bdeda2e49d16c8ae90f9615adc2298ee16974bb250d0afb705e33043f" +dependencies = [ + "bytemuck", + "libm", + "num-complex", + "reborrow", +] + [[package]] name = "pyo3" -version = "0.22.6" +version = "0.23.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f402062616ab18202ae8319da13fa4279883a2b8a9d9f83f20dbade813ce1884" +checksum = "e484fd2c8b4cb67ab05a318f1fd6fa8f199fcc30819f08f07d200809dba26c15" dependencies = [ "anyhow", "cfg-if", @@ -1720,9 +1731,9 @@ dependencies = [ [[package]] name = "pyo3-build-config" -version = "0.22.6" +version = "0.23.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b14b5775b5ff446dd1056212d778012cbe8a0fbffd368029fd9e25b514479c38" +checksum = "dc0e0469a84f208e20044b98965e1561028180219e35352a2afaf2b942beff3b" dependencies = [ "once_cell", "target-lexicon", @@ -1730,9 +1741,9 @@ dependencies = [ [[package]] name = "pyo3-ffi" -version = "0.22.6" +version = "0.23.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ab5bcf04a2cdcbb50c7d6105de943f543f9ed92af55818fd17b660390fc8636" +checksum = "eb1547a7f9966f6f1a0f0227564a9945fe36b90da5a93b3933fc3dc03fae372d" dependencies = [ "libc", "pyo3-build-config", @@ -1740,27 +1751,27 @@ dependencies = [ [[package]] name = "pyo3-macros" -version = "0.22.6" +version = "0.23.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fd24d897903a9e6d80b968368a34e1525aeb719d568dba8b3d4bfa5dc67d453" +checksum = "fdb6da8ec6fa5cedd1626c886fc8749bdcbb09424a86461eb8cdf096b7c33257" dependencies = [ "proc-macro2", "pyo3-macros-backend", "quote", - "syn 2.0.87", + "syn", ] [[package]] name = "pyo3-macros-backend" -version = "0.22.6" +version = "0.23.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "36c011a03ba1e50152b4b394b479826cad97e7a21eb52df179cd91ac411cbfbe" +checksum = "38a385202ff5a92791168b1136afae5059d3ac118457bb7bc304c197c2d33e7d" dependencies = [ "heck", "proc-macro2", "pyo3-build-config", "quote", - "syn 2.0.87", + "syn", ] [[package]] @@ -1888,17 +1899,23 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" +[[package]] +name = "rustc-hash" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c7fb8039b3032c191086b10f11f319a6e99e1e82889c5cc6046f515c9db1d497" + [[package]] name = "rustix" -version = "0.38.40" +version = "0.38.42" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "99e4ea3e1cdc4b559b8e5650f9c8e5998e3e5c1343b4eaf034565f32318d63c0" +checksum = "f93dc38ecbab2eb790ff964bb77fa94faf256fd3e73285fd7ba0903b76bedb85" dependencies = [ "bitflags 2.6.0", "errno", "libc", "linux-raw-sys", - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] @@ -1934,29 +1951,29 @@ checksum = "a3f0bf26fd526d2a95683cd0f87bf103b8539e2ca1ef48ce002d67aad59aa0b4" [[package]] name = "serde" -version = "1.0.215" +version = "1.0.216" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6513c1ad0b11a9376da888e3e0baa0077f1aed55c17f50e7b2397136129fb88f" +checksum = "0b9781016e935a97e8beecf0c933758c97a5520d32930e460142b4cd80c6338e" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.215" +version = "1.0.216" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad1e866f866923f252f05c889987993144fb74e722403468a4ebd70c3cd756c0" +checksum = "46f859dbbf73865c6627ed570e78961cd3ac92407a2d117204c49232485da55e" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn", ] [[package]] name = "serde_json" -version = "1.0.132" +version = "1.0.133" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d726bfaff4b320266d395898905d0eba0345aae23b54aee3a737e260fd46db03" +checksum = "c7fceb2473b9166b2294ef05efcb65a3db80803f0b03ef86a5fc88a2b85ee377" dependencies = [ "itoa", "memchr", @@ -2012,20 +2029,9 @@ checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" [[package]] name = "syn" -version = "1.0.109" +version = "2.0.90" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" -dependencies = [ - "proc-macro2", - "quote", - "unicode-ident", -] - -[[package]] -name = "syn" -version = "2.0.87" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "25aa4ce346d03a6dcd68dd8b4010bcb74e54e62c90c573f394c46eae99aba32d" +checksum = "919d3b74a5dd0ccd15aeb8f93e7006bd9e14c295087c9896a110f490752bcf31" dependencies = [ "proc-macro2", "quote", @@ -2086,11 +2092,11 @@ dependencies = [ [[package]] name = "thiserror" -version = "2.0.3" +version = "2.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c006c85c7651b3cf2ada4584faa36773bd07bac24acfb39f3c431b36d7e667aa" +checksum = "8fec2a1820ebd077e2b90c4df007bebf344cd394098a13c563957d0afc83ea47" dependencies = [ - "thiserror-impl 2.0.3", + "thiserror-impl 2.0.6", ] [[package]] @@ -2101,25 +2107,25 @@ checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn", ] [[package]] name = "thiserror-impl" -version = "2.0.3" +version = "2.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f077553d607adc1caf65430528a576c757a71ed73944b66ebb58ef2bbd243568" +checksum = "d65750cab40f4ff1929fb1ba509e9914eb756131cef4210da8d5d700d26f6312" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn", ] [[package]] name = "time" -version = "0.3.36" +version = "0.3.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5dfd88e563464686c916c7e46e623e520ddc6d79fa6641390f2e3fa86e83e885" +checksum = "35e7868883861bd0e56d9ac6efcaaca0d6d5d82a2a7ec8209ff492c07cf37b21" dependencies = [ "deranged", "num-conv", @@ -2179,9 +2185,9 @@ checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" [[package]] name = "unicode-ident" -version = "1.0.13" +version = "1.0.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e91b56cd4cadaeb79bbf1a5645f6b4f8dc5bde8834ad5894a8db35fda9efa1fe" +checksum = "adb9e6ca4f869e1180728b7950e35922a7fc6397f7b641499e8f3ef06e50dc83" [[package]] name = "unicode-width" @@ -2231,9 +2237,9 @@ checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" [[package]] name = "wasm-bindgen" -version = "0.2.95" +version = "0.2.99" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "128d1e363af62632b8eb57219c8fd7877144af57558fb2ef0368d0087bddeb2e" +checksum = "a474f6281d1d70c17ae7aa6a613c87fce69a127e2624002df63dcb39d6cf6396" dependencies = [ "cfg-if", "once_cell", @@ -2242,24 +2248,23 @@ dependencies = [ [[package]] name = "wasm-bindgen-backend" -version = "0.2.95" +version = "0.2.99" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb6dd4d3ca0ddffd1dd1c9c04f94b868c37ff5fac97c30b97cff2d74fce3a358" +checksum = "5f89bb38646b4f81674e8f5c3fb81b562be1fd936d84320f3264486418519c79" dependencies = [ "bumpalo", "log", - "once_cell", "proc-macro2", "quote", - "syn 2.0.87", + "syn", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-macro" -version = "0.2.95" +version = "0.2.99" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e79384be7f8f5a9dd5d7167216f022090cf1f9ec128e6e6a482a2cb5c5422c56" +checksum = "2cc6181fd9a7492eef6fef1f33961e3695e4579b9872a6f7c83aee556666d4fe" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -2267,28 +2272,28 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.95" +version = "0.2.99" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26c6ab57572f7a24a4985830b120de1594465e5d500f24afe89e16b4e833ef68" +checksum = "30d7a95b763d3c45903ed6c81f156801839e5ee968bb07e534c44df0fcd330c2" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn", "wasm-bindgen-backend", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.95" +version = "0.2.99" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "65fc09f10666a9f147042251e0dda9c18f166ff7de300607007e96bdebc1068d" +checksum = "943aab3fdaaa029a6e0271b35ea10b72b943135afe9bffca82384098ad0e06a6" [[package]] name = "web-sys" -version = "0.3.72" +version = "0.3.76" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6488b90108c040df0fe62fa815cbdee25124641df01814dd7282749234c6112" +checksum = "04dd7223427d52553d3702c004d3b2fe07c148165faa56313cb00211e31c12bc" dependencies = [ "js-sys", "wasm-bindgen", @@ -2434,7 +2439,7 @@ checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn", ] [[package]] diff --git a/pixi.lock b/pixi.lock index fb67443..4216fdc 100644 --- a/pixi.lock +++ b/pixi.lock @@ -1,4 +1,4 @@ -version: 5 +version: 6 environments: default: channels: @@ -11,7 +11,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-2_kmp_llvm.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/arviz-0.20.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/asciitree-0.3.3-py_2.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/asttokens-2.4.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/asttokens-3.0.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/atk-1.0-2.38.0-h04ea711_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/binutils_impl_linux-64-2.43-h4bf12b8_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/binutils_linux-64-2.43-h4852527_2.conda @@ -20,26 +20,26 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/brotli-1.1.0-hb9d3cd8_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/brotli-bin-1.1.0-hb9d3cd8_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-h4bc722e_7.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/c-ares-1.34.3-heb4867d_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/c-ares-1.34.3-hb9d3cd8_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/ca-certificates-2024.8.30-hbcca054_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cached-property-1.5.2-hd8ed1ab_1.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/cached_property-1.5.2-pyha770c72_1.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/cachetools-5.5.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/cairo-1.18.0-hebfffa5_3.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cachetools-5.5.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/cairo-1.18.2-h3394656_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2024.8.30-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cloudpickle-3.1.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/comm-0.2.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/comm-0.2.2-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cons-0.4.6-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/contourpy-1.3.1-py312h68727a3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/cycler-0.12.1-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/debugpy-1.8.8-py312h2ec8cdc_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/decorator-5.1.1-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/cycler-0.12.1-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/debugpy-1.8.10-py312h2ec8cdc_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/decorator-5.1.1-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/etuples-0.3.9-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.2.2-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/executing-2.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.2.2-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/executing-2.1.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/fasteners-0.17.3-pyhd8ed1ab_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/filelock-3.16.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/filelock-3.16.1-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-dejavu-sans-mono-2.37-hab24e00_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-inconsolata-3.000-h77eed37_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-source-code-pro-2.038-h77eed37_0.tar.bz2 @@ -47,12 +47,12 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/fontconfig-2.15.0-h7e30c49_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/fonts-conda-ecosystem-1-0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/fonts-conda-forge-1-0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/linux-64/fonttools-4.55.0-py312h178313f_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/fonttools-4.55.3-py312h178313f_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/freetype-2.12.1-h267a509_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/fribidi-1.0.10-h36c2ea0_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/linux-64/gcc-13.3.0-h9576a4e_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/gcc_impl_linux-64-13.3.0-hfea6d02_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/gcc_linux-64-13.3.0-hc28eda2_5.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/gcc_linux-64-13.3.0-hc28eda2_7.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/gdk-pixbuf-2.42.12-hb9ae30d_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/graphite2-1.3.13-h59595ed_1003.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/graphviz-12.0.0-hba01fac_0.conda @@ -60,19 +60,21 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/gts-0.7.6-h977cf35_4.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/gxx-13.3.0-h9576a4e_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/gxx_impl_linux-64-13.3.0-hdbfa832_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/gxx_linux-64-13.3.0-h6834431_5.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/h5netcdf-1.4.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/gxx_linux-64-13.3.0-h6834431_7.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/h5netcdf-1.4.1-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/h5py-3.12.1-nompi_py312hedeef09_102.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/harfbuzz-9.0.0-hda332d3_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/hdf5-1.14.3-nompi_hdf9ad27_105.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/hdf5-1.14.3-nompi_h2d575fe_108.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/icu-75.1-he02047a_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.5.0-pyha770c72_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.5.0-pyha770c72_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/ipykernel-6.29.5-pyh3099207_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/ipython-8.29.0-pyh707e725_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jedi-0.19.2-pyhff2d567_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_client-8.6.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ipython-8.30.0-pyh707e725_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ipywidgets-8.1.5-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jedi-0.19.2-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_client-8.6.3-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_core-5.7.2-pyh31011fe_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyterlab_widgets-3.0.13-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/kernel-headers_linux-64-3.10.0-he073ed8_18.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/keyutils-1.6.1-h166bdaf_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/linux-64/kiwisolver-1.4.7-py312h68727a3_0.conda @@ -86,7 +88,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlidec-1.1.0-hb9d3cd8_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlienc-1.1.0-hb9d3cd8_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libcblas-3.9.0-25_linux64_openblas.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libcurl-8.10.1-hbbe4b11_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libcurl-8.11.1-h332b0f4_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libdeflate-1.22-hb9d3cd8_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libedit-3.1.20191231-he28a2e2_2.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/linux-64/libev-4.33-hd590300_2.conda @@ -97,16 +99,16 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-14.2.0-h69a702a_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libgd-2.3.3-hd3e95f3_10.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran-14.2.0-h69a702a_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran-ng-14.2.0-h69a702a_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran5-14.2.0-hd5240d6_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libglib-2.82.2-h2ff4ddf_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-14.2.0-h77fa898_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libhwloc-2.11.1-default_hecaa2ac_1000.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libhwloc-2.11.2-default_h0d58e46_1001.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libiconv-1.17-hd590300_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libjpeg-turbo-3.0.0-hd590300_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/liblapack-3.9.0-25_linux64_openblas.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/liblapacke-3.9.0-25_linux64_openblas.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libllvm14-14.0.6-hcd5def8_4.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/liblzma-5.6.3-hb9d3cd8_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libnghttp2-1.64.0-h161d5f1_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libnsl-2.0.1-hd590300_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenblas-0.3.28-pthreads_h94d23a6_1.conda @@ -114,26 +116,26 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/librsvg-2.58.4-hc0ffecb_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libsanitizer-13.3.0-heb74ff8_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libsodium-1.0.20-h4ab18f5_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.47.0-hadc24fc_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libssh2-1.11.0-h0841786_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.47.2-hee588c1_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libssh2-1.11.1-hf672d98_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-14.2.0-hc0a3c3a_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/libstdcxx-devel_linux-64-13.3.0-h84ea5a7_101.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-14.2.0-h4852527_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libtiff-4.7.0-he137b08_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libtiff-4.7.0-hc4654cb_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.38.1-h0b41bf4_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libwebp-base-1.4.0-hd590300_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libxcb-1.17.0-h8a09558_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libxcrypt-4.4.36-hd590300_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libxml2-2.13.5-hb346dea_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libxml2-2.13.5-h8d12d68_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.1-hb9d3cd8_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/llvm-openmp-19.1.3-h024ca30_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/llvm-openmp-19.1.5-h024ca30_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/llvmlite-0.43.0-py312h374181b_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/logical-unification-0.4.6-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-3.0.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/matplotlib-base-3.9.2-py312hd3ec401_2.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/matplotlib-inline-0.1.7-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/maturin-1.7.4-py312h6ab59e4_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-3.0.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/matplotlib-base-3.9.3-py312hd3ec401_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/matplotlib-inline-0.1.7-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/maturin-1.7.8-py312h6ab59e4_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/minikanren-1.0.3-pyhd8ed1ab_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/linux-64/mkl-2024.2.2-ha957f24_16.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/mkl-service-2.4.2-py312hf224ee7_0.conda @@ -141,164 +143,151 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/multipledispatch-0.6.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/munkres-1.1.4-pyh9f0ad1d_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.5-he02047a_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/nest-asyncio-1.6.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/nest-asyncio-1.6.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/numba-0.60.0-py312h83e6fd3_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/numcodecs-0.14.0-py312hf9745cd_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/numcodecs-0.14.1-py312hf9745cd_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/numpy-1.26.4-py312heda63a1_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/objprint-0.3.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/openblas-0.3.28-pthreads_h6ec200e_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/openjpeg-2.5.2-h488ebb8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/openjpeg-2.5.3-h5fbd93e_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.4.0-hb9d3cd8_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-24.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/orjson-3.10.12-py312h12e396e_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-24.2-pyhd8ed1ab_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/pandas-2.2.3-py312hf9745cd_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/pango-1.54.0-h4c5309f_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/parso-0.8.4-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/patsy-1.0.1-pyhff2d567_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pango-1.54.0-h3a902e7_3.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/parso-0.8.4-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/patsy-1.0.1-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/pcre2-10.44-hba22ea6_2.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pexpect-4.9.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pickleshare-0.7.5-py_1003.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/pexpect-4.9.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pickleshare-0.7.5-pyhd8ed1ab_1004.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/pillow-11.0.0-py312h7b63e92_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pip-24.3.1-pyh8b19718_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/pixman-0.43.2-h59595ed_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.3.6-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.5.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/polars-1.12.0-py312hfe7c9be_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/prompt-toolkit-3.0.48-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pixman-0.44.2-h29eaf8c_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.3.6-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.5.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/polars-1.17.1-py312hda0fa55_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/prompt-toolkit-3.0.48-pyha770c72_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/psutil-6.1.0-py312h66e93f0_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/pthread-stubs-0.4-hb9d3cd8_1002.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/ptyprocess-0.7.0-pyhd3deb0d_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/pure_eval-0.2.3-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.18.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pymc-5.18.1-hd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pymc-base-5.18.1-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pyparsing-3.2.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/pytensor-2.26.2-py312h97902ae_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/pytensor-base-2.26.2-py312h25a0e75_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-8.3.3-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.12.7-hc5c86c4_0_cpython.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/python-graphviz-0.20.3-pyhe28f650_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/python-tzdata-2024.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ptyprocess-0.7.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pure_eval-0.2.3-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.18.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pymc-5.19.1-hd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pymc-base-5.19.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pyparsing-3.2.0-pyhd8ed1ab_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pytensor-2.26.4-py312h97902ae_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pytensor-base-2.26.4-py312h25a0e75_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-8.3.4-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.12.8-h9e4cc4f_1_cpython.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhff2d567_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-graphviz-0.20.3-pyh91182bf_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-tzdata-2024.2-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/python_abi-3.12-5_cp312.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pytz-2024.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/pyzmq-26.2.0-py312hbf22597_3.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/qhull-2020.2-h434a139_5.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.2-h8228510_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/rich-13.9.4-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/scipy-1.14.1-py312h62794b6_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/seaborn-0.13.2-hd8ed1ab_2.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/seaborn-base-0.13.2-pyhd8ed1ab_2.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-75.3.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.16.0-pyh6c4a22f_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/stack_data-0.6.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/rich-13.9.4-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/scipy-1.14.1-py312h62794b6_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/seaborn-0.13.2-hd8ed1ab_3.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/seaborn-base-0.13.2-pyhd8ed1ab_3.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-75.6.0-pyhff2d567_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.17.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/stack_data-0.6.3-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/statsmodels-0.14.4-py312hc0a28a1_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/sysroot_linux-64-2.17-h4a8ded7_18.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/tbb-2021.13.0-h84d6215_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/tbb-2021.13.0-hceb3a55_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/threadpoolctl-3.5.0-pyhc1e730c_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_h4845f30_101.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.1.0-pyhff2d567_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/toolz-1.0.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/tornado-6.4.1-py312h66e93f0_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/traitlets-5.14.3-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.12.2-hd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.12.2-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.2.1-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/toolz-1.0.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/tornado-6.4.2-py312h66e93f0_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/traitlets-5.14.3-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.12.2-hd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.12.2-pyha770c72_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2024b-hc8b5060_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/unicodedata2-15.1.0-py312h66e93f0_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/wcwidth-0.2.13-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/wheel-0.45.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/xarray-2024.10.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/viztracer-1.0.0-py312h3a80f7f_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/wcwidth-0.2.13-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/wheel-0.45.1-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/widgetsnbextension-4.0.13-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/xarray-2024.11.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/xarray-einstats-0.8.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libice-1.1.1-hb9d3cd8_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libsm-1.2.4-he73a12e_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libx11-1.8.10-h4f16b4b_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libx11-1.8.10-h4f16b4b_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxau-1.0.11-hb9d3cd8_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxdmcp-1.1.5-hb9d3cd8_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxext-1.3.6-hb9d3cd8_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxrender-0.9.11-hb9d3cd8_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-xorgproto-2024.1-hb9d3cd8_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/xz-5.2.6-h166bdaf_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/zarr-2.18.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxrender-0.9.11-hb9d3cd8_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/zarr-2.18.3-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/zeromq-4.3.5-h3b0a872_7.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.21.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/zlib-1.3.1-hb9d3cd8_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.21.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.6-ha6fb4c9_0.conda - pypi: https://files.pythonhosted.org/packages/a2/ad/e0d3c824784ff121c03cc031f944bc7e139a8f1870ffd2845cc2dd76f6c4/absl_py-2.1.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/02/c8/542c1f9513136b431b101d06fb547e94d3ebc1d33740c3024315b55d4ada/bridgestan-2.5.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/16/92/92a76dc2ff3a12e69ba94e7e05168d37d0345fa08c87e1fe24d0c2a42223/charset_normalizer-3.4.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/46/dd/c1ff2eb8fbf95a8ca804abb1cc3ce70b283ee7b4bc653c3abac245670400/chex-0.1.87-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/58/a0/e4bebe76bdd0a68077030f1b5e48b545597473ae1b773c84150311152efc/chex-0.1.88-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e9/59/f189b03d743364a350c972b89fe08a6db5bbbdc5f1ea6b604b3eee0a7967/dllist-1.2.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/15/9f/3be7f03bf66c8d7d2956b727d984595e4af899f3c15ef2c653029008bf3b/equinox-0.11.8-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/1f/e4/0826dfde2db3fb3a34954323a84d0e6b6fdbc7eb5278c84159c6d43290ac/etils-1.10.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/3a/af/411e94c165229882eb2d0a329114826aa52c7c61ef3108d0d3d8ad7189ed/equinox-0.11.10-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/4f/4a/ff8aa2c57300613b69905308c5afe92c5b01112d766c25a305fd6796170a/etils-1.11.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/76/c6/c88e154df9c4e1a2a66ccf0005a88dfb2650c1dffb6f5ce603dfbd452ce3/idna-3.10-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/62/20/6c57c50c0ccc645fea1895950f1e5cd02f961ee44b3ffe83617fa46b0c1d/jax-0.4.35-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/d7/aa/f15ea857ad9bcff7a0c942dc570ca718b026cc0cc5c513525bb08cacf3c0/jax_cuda12_pjrt-0.4.35-py3-none-manylinux2014_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/23/a1/781f98da41b9abf63a1468c5babbafa7b1bdb766c081386644a4034fbdef/jax_cuda12_plugin-0.4.35-cp312-cp312-manylinux2014_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/e7/0d/4faf839e3c8ce2a5b615df64427be3e870899c72c0ebfb5859348150aba1/jaxlib-0.4.34-cp312-cp312-manylinux2014_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/56/ae/220537f80eb82ae43a299de31edb2a91a28b8c5fb8046e9ff853ec7763cd/jaxtyping-0.2.34-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/5f/3f/6c5553baaa7faa3fa8bae8279b1e46cb54c7ce52360139eae53498786ea5/jax-0.4.37-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/04/31/8fd189998732d1c5ecacf6a68b6c9aeaafa300b0eaa85b8c678238edba7c/jax_cuda12_pjrt-0.4.36-py3-none-manylinux2014_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/4b/b9/aaf71a9878ef3f4e4997dabf8458765cd8085c37f65865631980bfb83d53/jax_cuda12_plugin-0.4.36-cp312-cp312-manylinux2014_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/fe/f2/7624a304426daa7b135b85caf1b8eccf879e7cb10bc074656ce628309cb0/jaxlib-0.4.36-cp312-cp312-manylinux2014_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/94/99/c83c6a97f4382caf1c9bfeeeca935d3eb1f479f711665aeadf4408048107/jaxtyping-0.2.36-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/6f/d3/1321715a95e856d4ef4fba24e4351cf5e4c89d459ad132a8cba5fe257d72/ml_dtypes-0.5.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/f3/e7/c186a31c234fce776436753bfef4807df7f9b4cb3eeff358fcfcbf64b547/nvidia_cublas_cu12-12.6.3.3-py3-none-manylinux2014_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/a5/24/120ee57b218d9952c379d1e026c4479c9ece9997a4fb46303611ee48f038/nvidia_cuda_cupti_cu12-12.6.80-py3-none-manylinux2014_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/62/8f/cd3032281ba7bb531fe3159337af00c5c805fd6a31dc700f0715c8748c8c/nvidia_cuda_nvcc_cu12-12.6.77-py3-none-manylinux2014_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/f0/62/65c05e161eeddbafeca24dc461f47de550d9fa8a7e04eb213e32b55cfd99/nvidia_cuda_runtime_cu12-12.6.77-py3-none-manylinux2014_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/2a/78/4535c9c7f859a64781e43c969a3a7e84c54634e319a996d43ef32ce46f83/nvidia_cudnn_cu12-9.5.1.17-py3-none-manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/60/de/99ec247a07ea40c969d904fc14f3a356b3e2a704121675b75c366b694ee1/nvidia_cufft_cu12-11.3.0.4-py3-none-manylinux2014_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/9f/81/baba53585da791d043c10084cf9553e074548408e04ae884cfe9193bd484/nvidia_cusolver_cu12-11.7.1.2-py3-none-manylinux2014_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/43/ac/64c4316ba163e8217a99680c7605f779accffc6a4bcd0c778c12948d3707/nvidia_cusparse_cu12-12.5.4.2-py3-none-manylinux2014_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/af/eb/ff4b8c503fa1f1796679dce648854d58751982426e4e4b37d6fce49d259c/nvidia_cublas_cu12-12.6.4.1-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/49/60/7b6497946d74bcf1de852a21824d63baad12cd417db4195fc1bfe59db953/nvidia_cuda_cupti_cu12-12.6.80-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/25/1f/faf9b791027ebd6354be68700da3c3d8a3b3db3bdcf2f8070f2e6871a7f1/nvidia_cuda_nvcc_cu12-12.6.85-py3-none-manylinux1_x86_64.manylinux_2_5_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/e1/23/e717c5ac26d26cf39a27fbc076240fad2e3b817e5889d671b67f4f9f49c5/nvidia_cuda_runtime_cu12-12.6.77-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/67/4c/0f18ddce75f2c17cf028d16e067c07f11c421c981b8c2a45c99bc6169af6/nvidia_cudnn_cu12-9.6.0.74-py3-none-manylinux_2_27_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/8f/16/73727675941ab8e6ffd86ca3a4b7b47065edcca7a997920b831f8147c99d/nvidia_cufft_cu12-11.3.0.4-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/f0/6e/c2cf12c9ff8b872e92b4a5740701e51ff17689c4d726fca91875b07f655d/nvidia_cusolver_cu12-11.7.1.2-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/06/1e/b8b7c2f4099a37b96af5c9bb158632ea9e5d9d27d7391d7eb8fc45236674/nvidia_cusparse_cu12-12.5.4.2-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl - pypi: https://files.pythonhosted.org/packages/ed/1f/6482380ec8dcec4894e7503490fc536d846b0d59694acad9cf99f27d0e7d/nvidia_nccl_cu12-2.23.4-py3-none-manylinux2014_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/fe/e4/486de766851d58699bcfeb3ba6a3beb4d89c3809f75b9d423b9508a8760f/nvidia_nvjitlink_cu12-12.6.77-py3-none-manylinux2014_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/9d/d7/c5383e47c7e9bf1c99d5bd2a8c935af2b6d705ad831a7ec5c97db4d82f4f/nvidia_nvjitlink_cu12-12.6.85-py3-none-manylinux2010_x86_64.manylinux_2_12_x86_64.whl - pypi: https://files.pythonhosted.org/packages/23/cd/066e86230ae37ed0be70aae89aabf03ca8d9f39c8aea0dec8029455b5540/opt_einsum-3.4.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/5c/24/28d0bb21600a78e46754947333ec9a297044af884d360092eb8561575fe9/optax-0.2.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/20/f8/7b1f5b84f84e43face7349ac2df23f0f75d36b5b4a1c1c0305edce82bcc8/paramax-0.0.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/8f/4d/b72e0782abec07f3d8dabf24cf12673d26b173af2046eb4e67365c776ccf/posteriordb-0.2.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/f9/9b/335f9764261e915ed497fcdeb11df5dfd6f7bf257d4a6a2a686d80da4d54/requests-2.32.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/2b/78/57043611a16c655c8350b4c01b8d6abfb38cc2acb475238b62c2146186d7/tqdm-4.67.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/9a/bb/d43e5c75054e53efce310e79d63df0ac3f25e34c926be5dffb7d283fb2a8/typeguard-2.13.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d0/30/dc54f88dd4a2b5dc8a0279bdd7270e735851848b762aeb1c1184ed1f6b14/tqdm-4.67.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ce/d9/5f4c13cecde62396b0d3fe530a50ccea91e7dfc1ccf0e09c228841bb5ba8/urllib3-2.2.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c3/ac/1847959031ce09eb65a70b16d0f07633d7ddaf8a97752cc924f9a8cbe253/watermark-2.5.0-py2.py3-none-any.whl - pypi: ../flowjax/ - pypi: ../pymc-labs/benchmark-pymc packages: -- kind: conda - name: _libgcc_mutex - version: '0.1' - build: conda_forge - subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/_libgcc_mutex-0.1-conda_forge.tar.bz2 +- conda: https://conda.anaconda.org/conda-forge/linux-64/_libgcc_mutex-0.1-conda_forge.tar.bz2 sha256: fe51de6107f9edc7aa4f786a70f4a883943bc9d39b3bb7307c04c41410990726 md5: d7c89558ba9fa0495403155b64376d81 + arch: x86_64 + platform: linux license: None purls: [] size: 2562 timestamp: 1578324546067 -- kind: conda - name: _openmp_mutex - version: '4.5' - build: 2_kmp_llvm +- conda: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-2_kmp_llvm.tar.bz2 build_number: 2 - subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-2_kmp_llvm.tar.bz2 sha256: 84a66275da3a66e3f3e70e9d8f10496d807d01a9e4ec16cd2274cc5e28c478fc md5: 562b26ba2e19059551a811e72ab7f793 depends: - _libgcc_mutex 0.1 conda_forge - llvm-openmp >=9.0.1 + arch: x86_64 + platform: linux license: BSD-3-Clause license_family: BSD purls: [] size: 5744 timestamp: 1650742457817 -- kind: pypi +- pypi: https://files.pythonhosted.org/packages/a2/ad/e0d3c824784ff121c03cc031f944bc7e139a8f1870ffd2845cc2dd76f6c4/absl_py-2.1.0-py3-none-any.whl name: absl-py version: 2.1.0 - url: https://files.pythonhosted.org/packages/a2/ad/e0d3c824784ff121c03cc031f944bc7e139a8f1870ffd2845cc2dd76f6c4/absl_py-2.1.0-py3-none-any.whl sha256: 526a04eadab8b4ee719ce68f204172ead1027549089702d99b9059f129ff1308 requires_python: '>=3.7' -- kind: conda - name: arviz - version: 0.20.0 - build: pyhd8ed1ab_0 - subdir: noarch - noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/arviz-0.20.0-pyhd8ed1ab_0.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/arviz-0.20.0-pyhd8ed1ab_0.conda sha256: 2e86300d089555741c8f81a73e72aa90f90cda35b494329e1b940e2d31845936 md5: 7e13efee221dc6ad25fcc2e4d65df7e3 depends: @@ -319,14 +308,7 @@ packages: - pkg:pypi/arviz?source=hash-mapping size: 1473292 timestamp: 1727611803479 -- kind: conda - name: asciitree - version: 0.3.3 - build: py_2 - build_number: 2 - subdir: noarch - noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/asciitree-0.3.3-py_2.tar.bz2 +- conda: https://conda.anaconda.org/conda-forge/noarch/asciitree-0.3.3-py_2.tar.bz2 sha256: b3e9369529fe7d721b66f18680ff4b561e20dbf6507e209e1f60eac277c97560 md5: c0481c9de49f040272556e2cedf42816 depends: @@ -337,31 +319,20 @@ packages: - pkg:pypi/asciitree?source=hash-mapping size: 6164 timestamp: 1531050741142 -- kind: conda - name: asttokens - version: 2.4.1 - build: pyhd8ed1ab_0 - subdir: noarch - noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/asttokens-2.4.1-pyhd8ed1ab_0.conda - sha256: 708168f026df19a0344983754d27d1f7b28bb21afc7b97a82f02c4798a3d2111 - md5: 5f25798dcefd8252ce5f9dc494d5f571 +- conda: https://conda.anaconda.org/conda-forge/noarch/asttokens-3.0.0-pyhd8ed1ab_1.conda + sha256: 93b14414b3b3ed91e286e1cbe4e7a60c4e1b1c730b0814d1e452a8ac4b9af593 + md5: 8f587de4bcf981e26228f268df374a9b depends: - - python >=3.5 - - six >=1.12.0 + - python >=3.9 + constrains: + - astroid >=2,<4 license: Apache-2.0 license_family: Apache purls: - pkg:pypi/asttokens?source=hash-mapping - size: 28922 - timestamp: 1698341257884 -- kind: conda - name: atk-1.0 - version: 2.38.0 - build: h04ea711_2 - build_number: 2 - subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/atk-1.0-2.38.0-h04ea711_2.conda + size: 28206 + timestamp: 1733250564754 +- conda: https://conda.anaconda.org/conda-forge/linux-64/atk-1.0-2.38.0-h04ea711_2.conda sha256: df682395d05050cd1222740a42a551281210726a67447e5258968dd55854302e md5: f730d54ba9cd543666d7220c9f7ed563 depends: @@ -370,51 +341,40 @@ packages: - libstdcxx-ng >=12 constrains: - atk-1.0 2.38.0 + arch: x86_64 + platform: linux license: LGPL-2.0-or-later license_family: LGPL purls: [] size: 355900 timestamp: 1713896169874 -- kind: conda - name: binutils_impl_linux-64 - version: '2.43' - build: h4bf12b8_2 - build_number: 2 - subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/binutils_impl_linux-64-2.43-h4bf12b8_2.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/binutils_impl_linux-64-2.43-h4bf12b8_2.conda sha256: 267e78990247369b13234bda270f31beb56a600b4851a8244e31dd9ad85b3b17 md5: cf0c5521ac2a20dfa6c662a4009eeef6 depends: - ld_impl_linux-64 2.43 h712a8e2_2 - sysroot_linux-64 + arch: x86_64 + platform: linux license: GPL-3.0-only license_family: GPL purls: [] size: 5682777 timestamp: 1729655371045 -- kind: conda - name: binutils_linux-64 - version: '2.43' - build: h4852527_2 - build_number: 2 - subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/binutils_linux-64-2.43-h4852527_2.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/binutils_linux-64-2.43-h4852527_2.conda sha256: df52bd8b8b2a20a0c529d9ad08aaf66093ac318aa8a33d270f18274341a77062 md5: 18aba879ddf1f8f28145ca6fcb873d8c depends: - binutils_impl_linux-64 2.43 h4bf12b8_2 + arch: x86_64 + platform: linux license: GPL-3.0-only license_family: GPL purls: [] size: 34945 timestamp: 1729655404893 -- kind: conda - name: blas - version: '2.125' - build: openblas +- conda: https://conda.anaconda.org/conda-forge/linux-64/blas-2.125-openblas.conda build_number: 25 - subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/blas-2.125-openblas.conda sha256: 23498a320b65c514c132c2b01bdedc2e08ffc9dfd8c7fd46609ac16ff4bc8a90 md5: 0c46b8a31a587738befc587dd8e52558 depends: @@ -430,18 +390,15 @@ packages: - liblapack 3.9.0 25_linux64_openblas - liblapacke 3.9.0 25_linux64_openblas - llvm-openmp >=19.1.2 + arch: x86_64 + platform: linux license: BSD-3-Clause license_family: BSD purls: [] size: 15793 timestamp: 1729642984458 -- kind: conda - name: blas-devel - version: 3.9.0 - build: 25_linux64_openblas +- conda: https://conda.anaconda.org/conda-forge/linux-64/blas-devel-3.9.0-25_linux64_openblas.conda build_number: 25 - subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/blas-devel-3.9.0-25_linux64_openblas.conda sha256: 69483b31161b62716ee529f206f7614bcb45fd230fc9bf47f2fb1840ed406b6f md5: 02c516384c77f5a7b4d03ed6c0412c57 depends: @@ -450,15 +407,16 @@ packages: - liblapack 3.9.0 25_linux64_openblas - liblapacke 3.9.0 25_linux64_openblas - openblas 0.3.28.* + arch: x86_64 + platform: linux license: BSD-3-Clause license_family: BSD purls: [] size: 15609 timestamp: 1729642921261 -- kind: pypi +- pypi: https://files.pythonhosted.org/packages/02/c8/542c1f9513136b431b101d06fb547e94d3ebc1d33740c3024315b55d4ada/bridgestan-2.5.0-py3-none-any.whl name: bridgestan version: 2.5.0 - url: https://files.pythonhosted.org/packages/02/c8/542c1f9513136b431b101d06fb547e94d3ebc1d33740c3024315b55d4ada/bridgestan-2.5.0-py3-none-any.whl sha256: f417836f35258688759ad46351621d8bb03440d84965f778c82ee702be93f300 requires_dist: - numpy @@ -467,13 +425,7 @@ packages: - pytest ; extra == 'test' - pytest-cov ; extra == 'test' requires_python: '>=3.9' -- kind: conda - name: brotli - version: 1.1.0 - build: hb9d3cd8_2 - build_number: 2 - subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/brotli-1.1.0-hb9d3cd8_2.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/brotli-1.1.0-hb9d3cd8_2.conda sha256: fcb0b5b28ba7492093e54f3184435144e074dfceab27ac8e6a9457e736565b0b md5: 98514fe74548d768907ce7a13f680e8f depends: @@ -482,18 +434,14 @@ packages: - libbrotlidec 1.1.0 hb9d3cd8_2 - libbrotlienc 1.1.0 hb9d3cd8_2 - libgcc >=13 + arch: x86_64 + platform: linux license: MIT license_family: MIT purls: [] size: 19264 timestamp: 1725267697072 -- kind: conda - name: brotli-bin - version: 1.1.0 - build: hb9d3cd8_2 - build_number: 2 - subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/brotli-bin-1.1.0-hb9d3cd8_2.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/brotli-bin-1.1.0-hb9d3cd8_2.conda sha256: 261364d7445513b9a4debc345650fad13c627029bfc800655a266bf1e375bc65 md5: c63b5e52939e795ba8d26e35d767a843 depends: @@ -501,64 +449,50 @@ packages: - libbrotlidec 1.1.0 hb9d3cd8_2 - libbrotlienc 1.1.0 hb9d3cd8_2 - libgcc >=13 + arch: x86_64 + platform: linux license: MIT license_family: MIT purls: [] size: 18881 timestamp: 1725267688731 -- kind: conda - name: bzip2 - version: 1.0.8 - build: h4bc722e_7 - build_number: 7 - subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-h4bc722e_7.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-h4bc722e_7.conda sha256: 5ced96500d945fb286c9c838e54fa759aa04a7129c59800f0846b4335cee770d md5: 62ee74e96c5ebb0af99386de58cf9553 depends: - __glibc >=2.17,<3.0.a0 - libgcc-ng >=12 + arch: x86_64 + platform: linux license: bzip2-1.0.6 license_family: BSD purls: [] size: 252783 timestamp: 1720974456583 -- kind: conda - name: c-ares - version: 1.34.3 - build: heb4867d_0 - subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/c-ares-1.34.3-heb4867d_0.conda - sha256: 1015d731c05ef7de298834833d680b08dea58980b907f644345bd457f9498c99 - md5: 09a6c610d002e54e18353c06ef61a253 - depends: - - __glibc >=2.28,<3.0.a0 +- conda: https://conda.anaconda.org/conda-forge/linux-64/c-ares-1.34.3-hb9d3cd8_1.conda + sha256: 732571ba6286dbccbf4c6450078a581b7a5620204faf876ff0ef282d77a6bfa8 + md5: ee228789a85f961d14567252a03e725f + depends: + - __glibc >=2.17,<3.0.a0 - libgcc >=13 + arch: x86_64 + platform: linux license: MIT license_family: MIT purls: [] - size: 205575 - timestamp: 1731181837907 -- kind: conda - name: ca-certificates - version: 2024.8.30 - build: hbcca054_0 - subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/ca-certificates-2024.8.30-hbcca054_0.conda + size: 204857 + timestamp: 1732447031823 +- conda: https://conda.anaconda.org/conda-forge/linux-64/ca-certificates-2024.8.30-hbcca054_0.conda sha256: afee721baa6d988e27fef1832f68d6f32ac8cc99cdf6015732224c2841a09cea md5: c27d1c142233b5bc9ca570c6e2e0c244 + arch: x86_64 + platform: linux license: ISC purls: [] size: 159003 timestamp: 1725018903918 -- kind: conda - name: cached-property - version: 1.5.2 - build: hd8ed1ab_1 - build_number: 1 - subdir: noarch +- conda: https://conda.anaconda.org/conda-forge/noarch/cached-property-1.5.2-hd8ed1ab_1.tar.bz2 noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/cached-property-1.5.2-hd8ed1ab_1.tar.bz2 sha256: 561e6660f26c35d137ee150187d89767c988413c978e1b712d53f27ddf70ea17 md5: 9b347a7ec10940d3f7941ff6c460b551 depends: @@ -568,14 +502,7 @@ packages: purls: [] size: 4134 timestamp: 1615209571450 -- kind: conda - name: cached_property - version: 1.5.2 - build: pyha770c72_1 - build_number: 1 - subdir: noarch - noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/cached_property-1.5.2-pyha770c72_1.tar.bz2 +- conda: https://conda.anaconda.org/conda-forge/noarch/cached_property-1.5.2-pyha770c72_1.tar.bz2 sha256: 6dbf7a5070cc43d90a1e4c2ec0c541c69d8e30a0e25f50ce9f6e4a432e42c5d7 md5: 576d629e47797577ab0f1b351297ef4a depends: @@ -586,62 +513,46 @@ packages: - pkg:pypi/cached-property?source=hash-mapping size: 11065 timestamp: 1615209567874 -- kind: conda - name: cachetools - version: 5.5.0 - build: pyhd8ed1ab_0 - subdir: noarch - noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/cachetools-5.5.0-pyhd8ed1ab_0.conda - sha256: 0abdbbfc2e9c21079a943f42a2dcd950b1a8093ec474fc017e83da0ec4e6cbf4 - md5: 5bad039db72bd8f134a5cff3ebaa190d +- conda: https://conda.anaconda.org/conda-forge/noarch/cachetools-5.5.0-pyhd8ed1ab_1.conda + sha256: d67d8683b34d7074bf99683aa1d71b2e42cee44da70ccd02a2863fb2c3df005b + md5: 0a99af03ccbd19113c1de1c7f16a53d2 depends: - - python >=3.7 + - python >=3.9 license: MIT license_family: MIT purls: - pkg:pypi/cachetools?source=hash-mapping - size: 14727 - timestamp: 1724028288793 -- kind: conda - name: cairo - version: 1.18.0 - build: hebfffa5_3 - build_number: 3 - subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/cairo-1.18.0-hebfffa5_3.conda - sha256: aee5b9e6ef71cdfb2aee9beae3ea91910ca761c01c0ef32052e3f94a252fa173 - md5: fceaedf1cdbcb02df9699a0d9b005292 + size: 14846 + timestamp: 1733624331838 +- conda: https://conda.anaconda.org/conda-forge/linux-64/cairo-1.18.2-h3394656_1.conda + sha256: de7d0d094e53decc005cb13e527be2635b8f604978da497d4c0d282c7dc08385 + md5: b34c2833a1f56db610aeb27f206d800d depends: - __glibc >=2.17,<3.0.a0 - - fontconfig >=2.14.2,<3.0a0 + - fontconfig >=2.15.0,<3.0a0 - fonts-conda-ecosystem - freetype >=2.12.1,<3.0a0 - icu >=75.1,<76.0a0 - - libgcc-ng >=12 - - libglib >=2.80.3,<3.0a0 - - libpng >=1.6.43,<1.7.0a0 - - libstdcxx-ng >=12 - - libxcb >=1.16,<2.0.0a0 + - libexpat >=2.6.4,<3.0a0 + - libgcc >=13 + - libglib >=2.82.2,<3.0a0 + - libpng >=1.6.44,<1.7.0a0 + - libstdcxx >=13 + - libxcb >=1.17.0,<2.0a0 - libzlib >=1.3.1,<2.0a0 - - pixman >=0.43.2,<1.0a0 + - pixman >=0.44.2,<1.0a0 - xorg-libice >=1.1.1,<2.0a0 - xorg-libsm >=1.2.4,<2.0a0 - - xorg-libx11 >=1.8.9,<2.0a0 - - xorg-libxext >=1.3.4,<2.0a0 + - xorg-libx11 >=1.8.10,<2.0a0 + - xorg-libxext >=1.3.6,<2.0a0 - xorg-libxrender >=0.9.11,<0.10.0a0 - - zlib + arch: x86_64 + platform: linux license: LGPL-2.1-only or MPL-1.1 purls: [] - size: 983604 - timestamp: 1721138900054 -- kind: conda - name: certifi - version: 2024.8.30 - build: pyhd8ed1ab_0 - subdir: noarch - noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/certifi-2024.8.30-pyhd8ed1ab_0.conda + size: 978868 + timestamp: 1733790976384 +- conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2024.8.30-pyhd8ed1ab_0.conda sha256: 7020770df338c45ac6b560185956c32f0a5abf4b76179c037f115fc7d687819f md5: 12f7d00853807b0531775e9be891cb11 depends: @@ -651,34 +562,25 @@ packages: - pkg:pypi/certifi?source=hash-mapping size: 163752 timestamp: 1725278204397 -- kind: pypi +- pypi: https://files.pythonhosted.org/packages/16/92/92a76dc2ff3a12e69ba94e7e05168d37d0345fa08c87e1fe24d0c2a42223/charset_normalizer-3.4.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl name: charset-normalizer version: 3.4.0 - url: https://files.pythonhosted.org/packages/16/92/92a76dc2ff3a12e69ba94e7e05168d37d0345fa08c87e1fe24d0c2a42223/charset_normalizer-3.4.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl sha256: 8cda06946eac330cbe6598f77bb54e690b4ca93f593dee1568ad22b04f347c15 requires_python: '>=3.7.0' -- kind: pypi +- pypi: https://files.pythonhosted.org/packages/58/a0/e4bebe76bdd0a68077030f1b5e48b545597473ae1b773c84150311152efc/chex-0.1.88-py3-none-any.whl name: chex - version: 0.1.87 - url: https://files.pythonhosted.org/packages/46/dd/c1ff2eb8fbf95a8ca804abb1cc3ce70b283ee7b4bc653c3abac245670400/chex-0.1.87-py3-none-any.whl - sha256: ce536475661fd96d21be0c1728ecdbedd03f8ff950c662dfc338c92ea782cb16 + version: 0.1.88 + sha256: 234b61a5baa8132802e4b9c5657167d6c8a911d90a59a0bec47d537567e41b75 requires_dist: - absl-py>=0.9.0 - typing-extensions>=4.2.0 - jax>=0.4.27 - jaxlib>=0.4.27 - numpy>=1.24.1 - - toolz>=0.9.0 - setuptools ; python_full_version >= '3.12' + - toolz>=0.9.0 requires_python: '>=3.9' -- kind: conda - name: cloudpickle - version: 3.1.0 - build: pyhd8ed1ab_1 - build_number: 1 - subdir: noarch - noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/cloudpickle-3.1.0-pyhd8ed1ab_1.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/cloudpickle-3.1.0-pyhd8ed1ab_1.conda sha256: 5a33d0d3ef33121c546eaf78b3dac2141fc4d30bbaeb3959bbc66fcd5e99ced6 md5: c88ca2bb7099167912e3b26463fff079 depends: @@ -689,48 +591,30 @@ packages: - pkg:pypi/cloudpickle?source=hash-mapping size: 25952 timestamp: 1729059365471 -- kind: conda - name: colorama - version: 0.4.6 - build: pyhd8ed1ab_0 - subdir: noarch - noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_0.tar.bz2 - sha256: 2c1b2e9755ce3102bca8d69e8f26e4f087ece73f50418186aee7c74bef8e1698 - md5: 3faab06a954c2a04039983f2c4a50d99 +- conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda + sha256: ab29d57dc70786c1269633ba3dff20288b81664d3ff8d21af995742e2bb03287 + md5: 962b9857ee8e7018c22f2776ffa0b2d7 depends: - - python >=3.7 + - python >=3.9 license: BSD-3-Clause license_family: BSD purls: - pkg:pypi/colorama?source=hash-mapping - size: 25170 - timestamp: 1666700778190 -- kind: conda - name: comm - version: 0.2.2 - build: pyhd8ed1ab_0 - subdir: noarch - noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/comm-0.2.2-pyhd8ed1ab_0.conda - sha256: e923acf02708a8a0b591f3bce4bdc11c8e63b73198b99b35fe6cd96bfb6a0dbe - md5: 948d84721b578d426294e17a02e24cbb + size: 27011 + timestamp: 1733218222191 +- conda: https://conda.anaconda.org/conda-forge/noarch/comm-0.2.2-pyhd8ed1ab_1.conda + sha256: 7e87ef7c91574d9fac19faedaaee328a70f718c9b4ddadfdc0ba9ac021bd64af + md5: 74673132601ec2b7fc592755605f4c1b depends: - - python >=3.6 + - python >=3.9 - traitlets >=5.3 license: BSD-3-Clause license_family: BSD purls: - pkg:pypi/comm?source=hash-mapping - size: 12134 - timestamp: 1710320435158 -- kind: conda - name: cons - version: 0.4.6 - build: pyhd8ed1ab_0 - subdir: noarch - noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/cons-0.4.6-pyhd8ed1ab_0.conda + size: 12103 + timestamp: 1733503053903 +- conda: https://conda.anaconda.org/conda-forge/noarch/cons-0.4.6-pyhd8ed1ab_0.conda sha256: d814c65f7f9c9f48658a4499b93fcb99a6f468768751912e79b7af8283c841c9 md5: 38c162ffeb9a31493d0ef33c09a5ba9f depends: @@ -742,12 +626,7 @@ packages: - pkg:pypi/cons?source=hash-mapping size: 14401 timestamp: 1687647866301 -- kind: conda - name: contourpy - version: 1.3.1 - build: py312h68727a3_0 - subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/contourpy-1.3.1-py312h68727a3_0.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/contourpy-1.3.1-py312h68727a3_0.conda sha256: e977af50b844b5b8cfec358131a4e923f0aa718e8334321cf8d84f5093576259 md5: f5fbba0394ee45e9a64a73c2a994126a depends: @@ -757,90 +636,74 @@ packages: - numpy >=1.23 - python >=3.12,<3.13.0a0 - python_abi 3.12.* *_cp312 + arch: x86_64 + platform: linux license: BSD-3-Clause license_family: BSD purls: - pkg:pypi/contourpy?source=hash-mapping size: 276332 timestamp: 1731428454756 -- kind: conda - name: cycler - version: 0.12.1 - build: pyhd8ed1ab_0 - subdir: noarch - noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/cycler-0.12.1-pyhd8ed1ab_0.conda - sha256: f221233f21b1d06971792d491445fd548224641af9443739b4b7b6d5d72954a8 - md5: 5cd86562580f274031ede6aa6aa24441 +- conda: https://conda.anaconda.org/conda-forge/noarch/cycler-0.12.1-pyhd8ed1ab_1.conda + sha256: 9827efa891e507a91a8a2acf64e210d2aff394e1cde432ad08e1f8c66b12293c + md5: 44600c4667a319d67dbe0681fc0bc833 depends: - - python >=3.8 + - python >=3.9 license: BSD-3-Clause license_family: BSD purls: - pkg:pypi/cycler?source=hash-mapping - size: 13458 - timestamp: 1696677888423 -- kind: conda - name: debugpy - version: 1.8.8 - build: py312h2ec8cdc_0 - subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/debugpy-1.8.8-py312h2ec8cdc_0.conda - sha256: 9ffdc284d4c67ba9ab88d400fc55890aafba6a559268f2dc3ca5a1c58d1a7ab9 - md5: eb182854d81037c9cfd95b06aba22c06 + size: 13399 + timestamp: 1733332563512 +- conda: https://conda.anaconda.org/conda-forge/linux-64/debugpy-1.8.10-py312h2ec8cdc_0.conda + sha256: 534a57b12b92b7af802d48633d96610564e9b41229869d4334d5e776a8f3ee08 + md5: ec2f6e5f137d0767686f7348e6003d78 depends: - __glibc >=2.17,<3.0.a0 - libgcc >=13 - libstdcxx >=13 - python >=3.12,<3.13.0a0 - python_abi 3.12.* *_cp312 + arch: x86_64 + platform: linux license: MIT license_family: MIT purls: - pkg:pypi/debugpy?source=hash-mapping - size: 2661121 - timestamp: 1731045067784 -- kind: conda - name: decorator - version: 5.1.1 - build: pyhd8ed1ab_0 - subdir: noarch - noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/decorator-5.1.1-pyhd8ed1ab_0.tar.bz2 - sha256: 328a6a379f9bdfd0230e51de291ce858e6479411ea4b0545fb377c71662ef3e2 - md5: 43afe5ab04e35e17ba28649471dd7364 + size: 2622505 + timestamp: 1733945377151 +- conda: https://conda.anaconda.org/conda-forge/noarch/decorator-5.1.1-pyhd8ed1ab_1.conda + sha256: 84e5120c97502a3785e8c3241c3bf51f64b4d445f13b4d2445db00d9816fe479 + md5: d622d8d7ee8868870f9cbe259f381181 depends: - - python >=3.5 + - python >=3.9 license: BSD-2-Clause license_family: BSD purls: - pkg:pypi/decorator?source=hash-mapping - size: 12072 - timestamp: 1641555714315 -- kind: pypi + size: 14068 + timestamp: 1733236549190 +- pypi: https://files.pythonhosted.org/packages/e9/59/f189b03d743364a350c972b89fe08a6db5bbbdc5f1ea6b604b3eee0a7967/dllist-1.2.0-py3-none-any.whl name: dllist version: 1.2.0 - url: https://files.pythonhosted.org/packages/e9/59/f189b03d743364a350c972b89fe08a6db5bbbdc5f1ea6b604b3eee0a7967/dllist-1.2.0-py3-none-any.whl sha256: f2ca5fd60d12161b6a472bc340bbae5de53ddd40c5923d9df84e85170b9a8629 requires_dist: - pytest ; extra == 'test' - pytest-cov ; extra == 'test' requires_python: '>=3.8' -- kind: pypi +- pypi: https://files.pythonhosted.org/packages/3a/af/411e94c165229882eb2d0a329114826aa52c7c61ef3108d0d3d8ad7189ed/equinox-0.11.10-py3-none-any.whl name: equinox - version: 0.11.8 - url: https://files.pythonhosted.org/packages/15/9f/3be7f03bf66c8d7d2956b727d984595e4af899f3c15ef2c653029008bf3b/equinox-0.11.8-py3-none-any.whl - sha256: 552292b473956693e8e8973bdae9b58aaec54fd48e192921beb82995e3a9c995 + version: 0.11.10 + sha256: ee6809e31664b92487b247f811fca48a2107f7ec958084b2294af2ee8a750e3b requires_dist: - jax>=0.4.13,!=0.4.27 - jaxtyping>=0.2.20 - typing-extensions>=4.5.0 requires_python: '>=3.9' -- kind: pypi +- pypi: https://files.pythonhosted.org/packages/4f/4a/ff8aa2c57300613b69905308c5afe92c5b01112d766c25a305fd6796170a/etils-1.11.0-py3-none-any.whl name: etils - version: 1.10.0 - url: https://files.pythonhosted.org/packages/1f/e4/0826dfde2db3fb3a34954323a84d0e6b6fdbc7eb5278c84159c6d43290ac/etils-1.10.0-py3-none-any.whl - sha256: 0777fe60a234b4c65ca53470fc64f2dd2d0c6bca7fcc623fdaa8d7fa5a317098 + version: 1.11.0 + sha256: a394cf3476bcec51c221426a70c39cd1006e889456ba41e4d7f12fd6814be7a5 requires_dist: - etils[array-types] ; extra == 'all' - etils[eapp] ; extra == 'all' @@ -909,13 +772,7 @@ packages: - etils[etree] ; extra == 'etree-tf' - etils[ecolab] ; extra == 'lazy-imports' requires_python: '>=3.10' -- kind: conda - name: etuples - version: 0.3.9 - build: pyhd8ed1ab_0 - subdir: noarch - noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/etuples-0.3.9-pyhd8ed1ab_0.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/etuples-0.3.9-pyhd8ed1ab_0.conda sha256: 7e0742833d2348f4b0607575c98b9d05e3fa323d265bb57f787d410e6970111d md5: bc1fc711e8ec404bd6109ab4eb0e4a67 depends: @@ -928,46 +785,28 @@ packages: - pkg:pypi/etuples?source=hash-mapping size: 17451 timestamp: 1684304361743 -- kind: conda - name: exceptiongroup - version: 1.2.2 - build: pyhd8ed1ab_0 - subdir: noarch - noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.2.2-pyhd8ed1ab_0.conda - sha256: e0edd30c4b7144406bb4da975e6bb97d6bc9c0e999aa4efe66ae108cada5d5b5 - md5: d02ae936e42063ca46af6cdad2dbd1e0 +- conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.2.2-pyhd8ed1ab_1.conda + sha256: cbde2c64ec317118fc06b223c5fd87c8a680255e7348dd60e7b292d2e103e701 + md5: a16662747cdeb9abbac74d0057cc976e depends: - - python >=3.7 + - python >=3.9 license: MIT and PSF-2.0 purls: - pkg:pypi/exceptiongroup?source=hash-mapping - size: 20418 - timestamp: 1720869435725 -- kind: conda - name: executing - version: 2.1.0 - build: pyhd8ed1ab_0 - subdir: noarch - noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/executing-2.1.0-pyhd8ed1ab_0.conda - sha256: a52d7516e2e11d3eb10908e10d3eb3f8ef267fea99ed9b09d52d96c4db3441b8 - md5: d0441db20c827c11721889a241df1220 + size: 20486 + timestamp: 1733208916977 +- conda: https://conda.anaconda.org/conda-forge/noarch/executing-2.1.0-pyhd8ed1ab_1.conda + sha256: 28d25ea375ebab4bf7479228f8430db20986187b04999136ff5c722ebd32eb60 + md5: ef8b5fca76806159fc25b4f48d8737eb depends: - - python >=2.7 + - python >=3.9 license: MIT license_family: MIT purls: - pkg:pypi/executing?source=hash-mapping - size: 28337 - timestamp: 1725214501850 -- kind: conda - name: fasteners - version: 0.17.3 - build: pyhd8ed1ab_0 - subdir: noarch - noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/fasteners-0.17.3-pyhd8ed1ab_0.tar.bz2 + size: 28348 + timestamp: 1733569440265 +- conda: https://conda.anaconda.org/conda-forge/noarch/fasteners-0.17.3-pyhd8ed1ab_0.tar.bz2 sha256: 42be6ac8478051b26751d778490d6a71de12e5c6443e145ff3eddbc577d9bcda md5: 348e27e78a5e39090031448c72f66d5e depends: @@ -978,26 +817,19 @@ packages: - pkg:pypi/fasteners?source=hash-mapping size: 19975 timestamp: 1643971626978 -- kind: conda - name: filelock - version: 3.16.1 - build: pyhd8ed1ab_0 - subdir: noarch - noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/filelock-3.16.1-pyhd8ed1ab_0.conda - sha256: 1da766da9dba05091af87977922fe60dc7464091a9ccffb3765d403189d39be4 - md5: 916f8ec5dd4128cd5f207a3c4c07b2c6 +- conda: https://conda.anaconda.org/conda-forge/noarch/filelock-3.16.1-pyhd8ed1ab_1.conda + sha256: 18dca6e2194732df7ebf824abaefe999e4765ebe8e8a061269406ab88fc418b9 + md5: d692e9ba6f92dc51484bf3477e36ce7c depends: - - python >=3.7 + - python >=3.9 license: Unlicense purls: - pkg:pypi/filelock?source=hash-mapping - size: 17357 - timestamp: 1726613593584 -- kind: pypi + size: 17441 + timestamp: 1733240909987 +- pypi: ../flowjax/ name: flowjax version: 16.0.0 - path: ../flowjax/ sha256: 44c0d14eacfee77e1254f841f2f2b6d169c5d3a34360240d4b9fcf252b9b951c requires_dist: - jax>=0.4.16 @@ -1018,13 +850,7 @@ packages: - numpyro ; extra == 'dev' requires_python: '>=3.10' editable: true -- kind: conda - name: font-ttf-dejavu-sans-mono - version: '2.37' - build: hab24e00_0 - subdir: noarch - noarch: generic - url: https://conda.anaconda.org/conda-forge/noarch/font-ttf-dejavu-sans-mono-2.37-hab24e00_0.tar.bz2 +- conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-dejavu-sans-mono-2.37-hab24e00_0.tar.bz2 sha256: 58d7f40d2940dd0a8aa28651239adbf5613254df0f75789919c4e6762054403b md5: 0c96522c6bdaed4b1566d11387caaf45 license: BSD-3-Clause @@ -1032,13 +858,7 @@ packages: purls: [] size: 397370 timestamp: 1566932522327 -- kind: conda - name: font-ttf-inconsolata - version: '3.000' - build: h77eed37_0 - subdir: noarch - noarch: generic - url: https://conda.anaconda.org/conda-forge/noarch/font-ttf-inconsolata-3.000-h77eed37_0.tar.bz2 +- conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-inconsolata-3.000-h77eed37_0.tar.bz2 sha256: c52a29fdac682c20d252facc50f01e7c2e7ceac52aa9817aaf0bb83f7559ec5c md5: 34893075a5c9e55cdafac56607368fc6 license: OFL-1.1 @@ -1046,13 +866,7 @@ packages: purls: [] size: 96530 timestamp: 1620479909603 -- kind: conda - name: font-ttf-source-code-pro - version: '2.038' - build: h77eed37_0 - subdir: noarch - noarch: generic - url: https://conda.anaconda.org/conda-forge/noarch/font-ttf-source-code-pro-2.038-h77eed37_0.tar.bz2 +- conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-source-code-pro-2.038-h77eed37_0.tar.bz2 sha256: 00925c8c055a2275614b4d983e1df637245e19058d79fc7dd1a93b8d9fb4b139 md5: 4d59c254e01d9cde7957100457e2d5fb license: OFL-1.1 @@ -1060,14 +874,7 @@ packages: purls: [] size: 700814 timestamp: 1620479612257 -- kind: conda - name: font-ttf-ubuntu - version: '0.83' - build: h77eed37_3 - build_number: 3 - subdir: noarch - noarch: generic - url: https://conda.anaconda.org/conda-forge/noarch/font-ttf-ubuntu-0.83-h77eed37_3.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-ubuntu-0.83-h77eed37_3.conda sha256: 2821ec1dc454bd8b9a31d0ed22a7ce22422c0aef163c59f49dfdf915d0f0ca14 md5: 49023d73832ef61042f6a237cb2687e7 license: LicenseRef-Ubuntu-Font-Licence-Version-1.0 @@ -1075,13 +882,7 @@ packages: purls: [] size: 1620504 timestamp: 1727511233259 -- kind: conda - name: fontconfig - version: 2.15.0 - build: h7e30c49_1 - build_number: 1 - subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/fontconfig-2.15.0-h7e30c49_1.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/fontconfig-2.15.0-h7e30c49_1.conda sha256: 7093aa19d6df5ccb6ca50329ef8510c6acb6b0d8001191909397368b65b02113 md5: 8f5b0b297b59e1ac160ad4beec99dbee depends: @@ -1091,18 +892,14 @@ packages: - libgcc >=13 - libuuid >=2.38.1,<3.0a0 - libzlib >=1.3.1,<2.0a0 + arch: x86_64 + platform: linux license: MIT license_family: MIT purls: [] size: 265599 timestamp: 1730283881107 -- kind: conda - name: fonts-conda-ecosystem - version: '1' - build: '0' - subdir: noarch - noarch: generic - url: https://conda.anaconda.org/conda-forge/noarch/fonts-conda-ecosystem-1-0.tar.bz2 +- conda: https://conda.anaconda.org/conda-forge/noarch/fonts-conda-ecosystem-1-0.tar.bz2 sha256: a997f2f1921bb9c9d76e6fa2f6b408b7fa549edd349a77639c9fe7a23ea93e61 md5: fee5683a3f04bd15cbd8318b096a27ab depends: @@ -1112,13 +909,7 @@ packages: purls: [] size: 3667 timestamp: 1566974674465 -- kind: conda - name: fonts-conda-forge - version: '1' - build: '0' - subdir: noarch - noarch: generic - url: https://conda.anaconda.org/conda-forge/noarch/fonts-conda-forge-1-0.tar.bz2 +- conda: https://conda.anaconda.org/conda-forge/noarch/fonts-conda-forge-1-0.tar.bz2 sha256: 53f23a3319466053818540bcdf2091f253cbdbab1e0e9ae7b9e509dcaa2a5e38 md5: f766549260d6815b0c52253f1fb1bb29 depends: @@ -1131,14 +922,9 @@ packages: purls: [] size: 4102 timestamp: 1566932280397 -- kind: conda - name: fonttools - version: 4.55.0 - build: py312h178313f_0 - subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/fonttools-4.55.0-py312h178313f_0.conda - sha256: 2a8d4fe8968828584057f8b07f3e102e326d8ec08d0e30e4ecc21f35031239a0 - md5: f404f4fb99ccaea68b00c1cc64fc1e68 +- conda: https://conda.anaconda.org/conda-forge/linux-64/fonttools-4.55.3-py312h178313f_0.conda + sha256: a5d26a5311fecbf8546a2fd056c7f4c350fa54da998e223b7d5cc74eab3971e1 + md5: 968104bfe69e21fadeb30edd9c3785f9 depends: - __glibc >=2.17,<3.0.a0 - brotli @@ -1147,66 +933,51 @@ packages: - python >=3.12,<3.13.0a0 - python_abi 3.12.* *_cp312 - unicodedata2 >=15.1.0 + arch: x86_64 + platform: linux license: MIT license_family: MIT purls: - pkg:pypi/fonttools?source=hash-mapping - size: 2843090 - timestamp: 1731643626471 -- kind: conda - name: freetype - version: 2.12.1 - build: h267a509_2 - build_number: 2 - subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/freetype-2.12.1-h267a509_2.conda + size: 2860392 + timestamp: 1733909107861 +- conda: https://conda.anaconda.org/conda-forge/linux-64/freetype-2.12.1-h267a509_2.conda sha256: b2e3c449ec9d907dd4656cb0dc93e140f447175b125a3824b31368b06c666bb6 md5: 9ae35c3d96db2c94ce0cef86efdfa2cb depends: - libgcc-ng >=12 - libpng >=1.6.39,<1.7.0a0 - libzlib >=1.2.13,<2.0.0a0 + arch: x86_64 + platform: linux license: GPL-2.0-only OR FTL purls: [] size: 634972 timestamp: 1694615932610 -- kind: conda - name: fribidi - version: 1.0.10 - build: h36c2ea0_0 - subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/fribidi-1.0.10-h36c2ea0_0.tar.bz2 +- conda: https://conda.anaconda.org/conda-forge/linux-64/fribidi-1.0.10-h36c2ea0_0.tar.bz2 sha256: 5d7b6c0ee7743ba41399e9e05a58ccc1cfc903942e49ff6f677f6e423ea7a627 md5: ac7bc6a654f8f41b352b38f4051135f8 depends: - libgcc-ng >=7.5.0 + arch: x86_64 + platform: linux license: LGPL-2.1 purls: [] size: 114383 timestamp: 1604416621168 -- kind: conda - name: gcc - version: 13.3.0 - build: h9576a4e_1 - build_number: 1 - subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/gcc-13.3.0-h9576a4e_1.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/gcc-13.3.0-h9576a4e_1.conda sha256: d0161362430183cbdbc3db9cf95f9a1af1793027f3ab8755b3d3586deb28bf84 md5: 606924335b5bcdf90e9aed9a2f5d22ed depends: - gcc_impl_linux-64 13.3.0.* + arch: x86_64 + platform: linux license: BSD-3-Clause license_family: BSD purls: [] size: 53864 timestamp: 1724801360210 -- kind: conda - name: gcc_impl_linux-64 - version: 13.3.0 - build: hfea6d02_1 - build_number: 1 - subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/gcc_impl_linux-64-13.3.0-hfea6d02_1.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/gcc_impl_linux-64-13.3.0-hfea6d02_1.conda sha256: 998ade1d487e93fc8a7a16b90e2af69ebb227355bf4646488661f7ae5887873c md5: 0d043dbc126b64f79d915a0e96d3a1d5 depends: @@ -1217,35 +988,28 @@ packages: - libsanitizer 13.3.0 heb74ff8_1 - libstdcxx >=13.3.0 - sysroot_linux-64 + arch: x86_64 + platform: linux license: GPL-3.0-only WITH GCC-exception-3.1 license_family: GPL purls: [] size: 67464415 timestamp: 1724801227937 -- kind: conda - name: gcc_linux-64 - version: 13.3.0 - build: hc28eda2_5 - build_number: 5 - subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/gcc_linux-64-13.3.0-hc28eda2_5.conda - sha256: 6778f93159cfd967320f60473447b19e320f303378d4c9da0784caa40073fafa - md5: ffbadbbc3345d9a315ba31c8a9188d4c +- conda: https://conda.anaconda.org/conda-forge/linux-64/gcc_linux-64-13.3.0-hc28eda2_7.conda + sha256: 1e5ac50580a68fdc7d2f5722abcf1a87898c24b1ab6eb5ecd322634742d93645 + md5: ac23afbf5805389eb771e2ad3b476f75 depends: - binutils_linux-64 - gcc_impl_linux-64 13.3.0.* - sysroot_linux-64 + arch: x86_64 + platform: linux license: BSD-3-Clause license_family: BSD purls: [] - size: 31909 - timestamp: 1729281963691 -- kind: conda - name: gdk-pixbuf - version: 2.42.12 - build: hb9ae30d_0 - subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/gdk-pixbuf-2.42.12-hb9ae30d_0.conda + size: 32005 + timestamp: 1731939593317 +- conda: https://conda.anaconda.org/conda-forge/linux-64/gdk-pixbuf-2.42.12-hb9ae30d_0.conda sha256: d5283b95a8d49dcd88d29b360d8b38694aaa905d968d156d72ab71d32b38facb md5: 201db6c2d9a3c5e46573ac4cb2e92f4f depends: @@ -1254,34 +1018,27 @@ packages: - libjpeg-turbo >=3.0.0,<4.0a0 - libpng >=1.6.43,<1.7.0a0 - libtiff >=4.6.0,<4.8.0a0 + arch: x86_64 + platform: linux license: LGPL-2.1-or-later license_family: LGPL purls: [] size: 528149 timestamp: 1715782983957 -- kind: conda - name: graphite2 - version: 1.3.13 - build: h59595ed_1003 - build_number: 1003 - subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/graphite2-1.3.13-h59595ed_1003.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/graphite2-1.3.13-h59595ed_1003.conda sha256: 0595b009f20f8f60f13a6398e7cdcbd2acea5f986633adcf85f5a2283c992add md5: f87c7b7c2cb45f323ffbce941c78ab7c depends: - libgcc-ng >=12 - libstdcxx-ng >=12 + arch: x86_64 + platform: linux license: LGPL-2.0-or-later license_family: LGPL purls: [] size: 96855 timestamp: 1711634169756 -- kind: conda - name: graphviz - version: 12.0.0 - build: hba01fac_0 - subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/graphviz-12.0.0-hba01fac_0.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/graphviz-12.0.0-hba01fac_0.conda sha256: 2eb794ae1de42b688f89811113ae3dcb63698272ee8f87029abce5f77c742c2a md5: 953e31ea00d46beb7e64a79fc291ec44 depends: @@ -1300,18 +1057,14 @@ packages: - libwebp-base >=1.4.0,<2.0a0 - libzlib >=1.3.1,<2.0a0 - pango >=1.50.14,<2.0a0 + arch: x86_64 + platform: linux license: EPL-1.0 license_family: Other purls: [] size: 2303111 timestamp: 1722673717117 -- kind: conda - name: gtk2 - version: 2.24.33 - build: h6470451_5 - build_number: 5 - subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/gtk2-2.24.33-h6470451_5.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/gtk2-2.24.33-h6470451_5.conda sha256: 16644d036321b32635369c183502974c8b989fa516c313bd379f9aa4adcdf642 md5: 1483ba046164be27df7f6eddbcec3a12 depends: @@ -1329,52 +1082,40 @@ packages: - xorg-libx11 >=1.8.9,<2.0a0 - xorg-libxext >=1.3.4,<2.0a0 - xorg-libxrender >=0.9.11,<0.10.0a0 + arch: x86_64 + platform: linux license: LGPL-2.1-or-later purls: [] size: 6501561 timestamp: 1721285940408 -- kind: conda - name: gts - version: 0.7.6 - build: h977cf35_4 - build_number: 4 - subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/gts-0.7.6-h977cf35_4.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/gts-0.7.6-h977cf35_4.conda sha256: b5cd16262fefb836f69dc26d879b6508d29f8a5c5948a966c47fe99e2e19c99b md5: 4d8df0b0db060d33c9a702ada998a8fe depends: - libgcc-ng >=12 - libglib >=2.76.3,<3.0a0 - libstdcxx-ng >=12 + arch: x86_64 + platform: linux license: LGPL-2.0-or-later license_family: LGPL purls: [] size: 318312 timestamp: 1686545244763 -- kind: conda - name: gxx - version: 13.3.0 - build: h9576a4e_1 - build_number: 1 - subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/gxx-13.3.0-h9576a4e_1.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/gxx-13.3.0-h9576a4e_1.conda sha256: 5446f5d1d609d996579f706d2020e83ef48e086d943bfeef7ab807ea246888a0 md5: 209182ca6b20aeff62f442e843961d81 depends: - gcc 13.3.0.* - gxx_impl_linux-64 13.3.0.* + arch: x86_64 + platform: linux license: BSD-3-Clause license_family: BSD purls: [] size: 53338 timestamp: 1724801498389 -- kind: conda - name: gxx_impl_linux-64 - version: 13.3.0 - build: hdbfa832_1 - build_number: 1 - subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/gxx_impl_linux-64-13.3.0-hdbfa832_1.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/gxx_impl_linux-64-13.3.0-hdbfa832_1.conda sha256: 746dff24bb1efc89ab0ec108838d0711683054e3bbbcb94d042943410a98eca1 md5: 806367e23a0a6ad21e51875b34c57d7e depends: @@ -1382,39 +1123,31 @@ packages: - libstdcxx-devel_linux-64 13.3.0 h84ea5a7_101 - sysroot_linux-64 - tzdata + arch: x86_64 + platform: linux license: GPL-3.0-only WITH GCC-exception-3.1 license_family: GPL purls: [] size: 13337720 timestamp: 1724801455825 -- kind: conda - name: gxx_linux-64 - version: 13.3.0 - build: h6834431_5 - build_number: 5 - subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/gxx_linux-64-13.3.0-h6834431_5.conda - sha256: 4ca452f7abc607d9f0ad45a7fa8c7d8436fca05b9cc6715d1ccd239bed90833b - md5: 81ddb2db98fbe3031aa7ebbbf8bb3ffd +- conda: https://conda.anaconda.org/conda-forge/linux-64/gxx_linux-64-13.3.0-h6834431_7.conda + sha256: a9b1ffea76f2cc5aedeead4793fcded7a687cce9d5e3f4fe93629f1b1d5043a6 + md5: 7c82ca9bda609b6f72f670e4219d3787 depends: - binutils_linux-64 - - gcc_linux-64 13.3.0 hc28eda2_5 + - gcc_linux-64 13.3.0 hc28eda2_7 - gxx_impl_linux-64 13.3.0.* - sysroot_linux-64 + arch: x86_64 + platform: linux license: BSD-3-Clause license_family: BSD purls: [] - size: 30284 - timestamp: 1729281975715 -- kind: conda - name: h5netcdf - version: 1.4.1 - build: pyhd8ed1ab_0 - subdir: noarch - noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/h5netcdf-1.4.1-pyhd8ed1ab_0.conda - sha256: e8a3ff94dd511e7f5098f09f75b44487a40241946640a29e14025e8094f0ca6e - md5: 5d0c9dc3425aadc346a969de5f2acc89 + size: 30356 + timestamp: 1731939612705 +- conda: https://conda.anaconda.org/conda-forge/noarch/h5netcdf-1.4.1-pyhd8ed1ab_1.conda + sha256: 1201924ea11ef5bdb0f9fc8793dea1befebef6903536af1f9159202ae8796ea7 + md5: 413d6a08f8fe17af2c6cd1142ba8dccf depends: - h5py - packaging @@ -1423,15 +1156,9 @@ packages: license_family: BSD purls: - pkg:pypi/h5netcdf?source=hash-mapping - size: 47177 - timestamp: 1731517710280 -- kind: conda - name: h5py - version: 3.12.1 - build: nompi_py312hedeef09_102 - build_number: 102 - subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/h5py-3.12.1-nompi_py312hedeef09_102.conda + size: 47573 + timestamp: 1733807542899 +- conda: https://conda.anaconda.org/conda-forge/linux-64/h5py-3.12.1-nompi_py312hedeef09_102.conda sha256: 5acc7c221e792c7aa9bbb2c57d5e0104d7a6e81c2cd29a47a77d574552cd4fd0 md5: ee52559d324594141ce369c527d6d029 depends: @@ -1442,19 +1169,15 @@ packages: - numpy >=1.19,<3 - python >=3.12,<3.13.0a0 - python_abi 3.12.* *_cp312 + arch: x86_64 + platform: linux license: BSD-3-Clause license_family: BSD purls: - pkg:pypi/h5py?source=hash-mapping size: 1380838 timestamp: 1729617970564 -- kind: conda - name: harfbuzz - version: 9.0.0 - build: hda332d3_1 - build_number: 1 - subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/harfbuzz-9.0.0-hda332d3_1.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/harfbuzz-9.0.0-hda332d3_1.conda sha256: 973afa37840b4e55e2540018902255cfb0d953aaed6353bb83a4d120f5256767 md5: 76b32dcf243444aea9c6b804bcfa40b8 depends: @@ -1466,55 +1189,50 @@ packages: - libgcc-ng >=12 - libglib >=2.80.3,<3.0a0 - libstdcxx-ng >=12 + arch: x86_64 + platform: linux license: MIT license_family: MIT purls: [] size: 1603653 timestamp: 1721186240105 -- kind: conda - name: hdf5 - version: 1.14.3 - build: nompi_hdf9ad27_105 - build_number: 105 - subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/hdf5-1.14.3-nompi_hdf9ad27_105.conda - sha256: 2278fa07da6f96e807d402cd55480624d67d2dee202191aaaf278ce5ab23605a - md5: 7e1729554e209627636a0f6fabcdd115 +- conda: https://conda.anaconda.org/conda-forge/linux-64/hdf5-1.14.3-nompi_h2d575fe_108.conda + sha256: 340b997d57eb89c058d8f2e80d426e4716661a51efcd1d857afb2b29f59177a4 + md5: b74598031529dafb2a66f9e90f26f2dc depends: + - __glibc >=2.17,<3.0.a0 - libaec >=1.1.3,<2.0a0 - - libcurl >=8.8.0,<9.0a0 - - libgcc-ng >=12 - - libgfortran-ng - - libgfortran5 >=12.3.0 - - libstdcxx-ng >=12 - - libzlib >=1.2.13,<2.0a0 - - openssl >=3.3.1,<4.0a0 + - libcurl >=8.10.1,<9.0a0 + - libgcc >=13 + - libgfortran + - libgfortran5 >=13.3.0 + - libstdcxx >=13 + - libzlib >=1.3.1,<2.0a0 + - openssl >=3.4.0,<4.0a0 + arch: x86_64 + platform: linux license: BSD-3-Clause license_family: BSD purls: [] - size: 3911675 - timestamp: 1717587866574 -- kind: conda - name: icu - version: '75.1' - build: he02047a_0 - subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/icu-75.1-he02047a_0.conda + size: 3899869 + timestamp: 1733668584836 +- conda: https://conda.anaconda.org/conda-forge/linux-64/icu-75.1-he02047a_0.conda sha256: 71e750d509f5fa3421087ba88ef9a7b9be11c53174af3aa4d06aff4c18b38e8e md5: 8b189310083baabfb622af68fd9d3ae3 depends: - __glibc >=2.17,<3.0.a0 - libgcc-ng >=12 - libstdcxx-ng >=12 + arch: x86_64 + platform: linux license: MIT license_family: MIT purls: [] size: 12129203 timestamp: 1720853576813 -- kind: pypi +- pypi: https://files.pythonhosted.org/packages/76/c6/c88e154df9c4e1a2a66ccf0005a88dfb2650c1dffb6f5ce603dfbd452ce3/idna-3.10-py3-none-any.whl name: idna version: '3.10' - url: https://files.pythonhosted.org/packages/76/c6/c88e154df9c4e1a2a66ccf0005a88dfb2650c1dffb6f5ce603dfbd452ce3/idna-3.10-py3-none-any.whl sha256: 946d195a0d259cbba61165e88e65941f16e9b36ea6ddb97f00452bae8b1287d3 requires_dist: - ruff>=0.6.2 ; extra == 'all' @@ -1522,48 +1240,30 @@ packages: - pytest>=8.3.2 ; extra == 'all' - flake8>=7.1.1 ; extra == 'all' requires_python: '>=3.6' -- kind: conda - name: importlib-metadata - version: 8.5.0 - build: pyha770c72_0 - subdir: noarch - noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.5.0-pyha770c72_0.conda - sha256: 7194700ce1a5ad2621fd68e894dd8c1ceaff9a38723e6e0e5298fdef13017b1c - md5: 54198435fce4d64d8a89af22573012a8 +- conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.5.0-pyha770c72_1.conda + sha256: 13766b88fc5b23581530d3a0287c0c58ad82f60401afefab283bf158d2be55a9 + md5: 315607a3030ad5d5227e76e0733798ff depends: - - python >=3.8 + - python >=3.9 - zipp >=0.5 license: Apache-2.0 license_family: APACHE purls: - - pkg:pypi/importlib-metadata?source=hash-mapping - size: 28646 - timestamp: 1726082927916 -- kind: conda - name: iniconfig - version: 2.0.0 - build: pyhd8ed1ab_0 - subdir: noarch - noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_0.conda - sha256: 38740c939b668b36a50ef455b077e8015b8c9cf89860d421b3fff86048f49666 - md5: f800d2da156d08e289b14e87e43c1ae5 + - pkg:pypi/importlib-metadata?source=compressed-mapping + size: 28623 + timestamp: 1733223207185 +- conda: https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_1.conda + sha256: 0ec8f4d02053cd03b0f3e63168316530949484f80e16f5e2fb199a1d117a89ca + md5: 6837f3eff7dcea42ecd714ce1ac2b108 depends: - - python >=3.7 + - python >=3.9 license: MIT license_family: MIT purls: - pkg:pypi/iniconfig?source=hash-mapping - size: 11101 - timestamp: 1673103208955 -- kind: conda - name: ipykernel - version: 6.29.5 - build: pyh3099207_0 - subdir: noarch - noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/ipykernel-6.29.5-pyh3099207_0.conda + size: 11474 + timestamp: 1733223232820 +- conda: https://conda.anaconda.org/conda-forge/noarch/ipykernel-6.29.5-pyh3099207_0.conda sha256: 33cfd339bb4efac56edf93474b37ddc049e08b1b4930cf036c893cc1f5a1f32a md5: b40131ab6a36ac2c09b7c57d4d3fbf99 depends: @@ -1587,15 +1287,9 @@ packages: - pkg:pypi/ipykernel?source=hash-mapping size: 119084 timestamp: 1719845605084 -- kind: conda - name: ipython - version: 8.29.0 - build: pyh707e725_0 - subdir: noarch - noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/ipython-8.29.0-pyh707e725_0.conda - sha256: 606723272a208cca1036852e04fbb61741b78451784746e75edd1becb70347d2 - md5: 56db21d7d51410fcfbfeca3d1a6b4269 +- conda: https://conda.anaconda.org/conda-forge/noarch/ipython-8.30.0-pyh707e725_0.conda + sha256: 65cdc105e5effea2943d3979cc1592590c923a589009b484d07672faaf047af1 + md5: 5d6e5cb3a4b820f61b2073f0ad5431f1 depends: - __unix - decorator @@ -1613,53 +1307,66 @@ packages: license: BSD-3-Clause license_family: BSD purls: - - pkg:pypi/ipython?source=compressed-mapping - size: 599356 - timestamp: 1729866495921 -- kind: pypi + - pkg:pypi/ipython?source=hash-mapping + size: 600248 + timestamp: 1732897026255 +- conda: https://conda.anaconda.org/conda-forge/noarch/ipywidgets-8.1.5-pyhd8ed1ab_1.conda + sha256: f419657566e3d9bea85b288a0ce3a8e42d76cd82ac1697c6917891df3ae149ab + md5: bb19ad65196475ab6d0bb3532d7f8d96 + depends: + - comm >=0.1.3 + - ipython >=6.1.0 + - jupyterlab_widgets >=3.0.13,<3.1.0 + - python >=3.9 + - traitlets >=4.3.1 + - widgetsnbextension >=4.0.13,<4.1.0 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/ipywidgets?source=hash-mapping + size: 113982 + timestamp: 1733493669268 +- pypi: https://files.pythonhosted.org/packages/5f/3f/6c5553baaa7faa3fa8bae8279b1e46cb54c7ce52360139eae53498786ea5/jax-0.4.37-py3-none-any.whl name: jax - version: 0.4.35 - url: https://files.pythonhosted.org/packages/62/20/6c57c50c0ccc645fea1895950f1e5cd02f961ee44b3ffe83617fa46b0c1d/jax-0.4.35-py3-none-any.whl - sha256: fa99e909a31424abfec750019a6dd36f6acc18a6e7d40e2c0086b932cc351325 + version: 0.4.37 + sha256: bdc0686d7e5a944e2d38026eae632214d98dd2d91869cbcedbf1c11298ae3e3e requires_dist: - - jaxlib>=0.4.34,<=0.4.35 + - jaxlib>=0.4.36,<=0.4.37 - ml-dtypes>=0.4.0 - numpy>=1.24 + - numpy>=1.26.0 ; python_full_version >= '3.12' - opt-einsum - scipy>=1.10 - - numpy>=1.26.0 ; python_full_version >= '3.12' - scipy>=1.11.1 ; python_full_version >= '3.12' - - jaxlib==0.4.34 ; extra == 'ci' - - jaxlib==0.4.34 ; extra == 'cuda' - - jax-cuda12-plugin[with-cuda]>=0.4.34,<=0.4.35 ; extra == 'cuda' - - jaxlib==0.4.34 ; extra == 'cuda12' - - jax-cuda12-plugin[with-cuda]>=0.4.34,<=0.4.35 ; extra == 'cuda12' - - jaxlib==0.4.34 ; extra == 'cuda12-local' - - jax-cuda12-plugin==0.4.34 ; extra == 'cuda12-local' - - jaxlib==0.4.34 ; extra == 'cuda12-pip' - - jax-cuda12-plugin[with-cuda]>=0.4.34,<=0.4.35 ; extra == 'cuda12-pip' - - kubernetes ; extra == 'k8s' - - jaxlib==0.4.34 ; extra == 'minimum-jaxlib' - - jaxlib>=0.4.34,<=0.4.35 ; extra == 'tpu' + - jaxlib==0.4.36 ; extra == 'minimum-jaxlib' + - jaxlib==0.4.35 ; extra == 'ci' + - jaxlib>=0.4.36,<=0.4.37 ; extra == 'tpu' - libtpu-nightly==0.1.dev20241010+nightly.cleanup ; extra == 'tpu' - - libtpu==0.0.2 ; extra == 'tpu' + - libtpu==0.0.6 ; extra == 'tpu' - requests ; extra == 'tpu' + - jaxlib==0.4.36 ; extra == 'cuda' + - jax-cuda12-plugin[with-cuda]>=0.4.36,<=0.4.37 ; extra == 'cuda' + - jaxlib==0.4.36 ; extra == 'cuda12' + - jax-cuda12-plugin[with-cuda]>=0.4.36,<=0.4.37 ; extra == 'cuda12' + - jaxlib==0.4.36 ; extra == 'cuda12-pip' + - jax-cuda12-plugin[with-cuda]>=0.4.36,<=0.4.37 ; extra == 'cuda12-pip' + - jaxlib==0.4.36 ; extra == 'cuda12-local' + - jax-cuda12-plugin==0.4.36 ; extra == 'cuda12-local' + - kubernetes ; extra == 'k8s' requires_python: '>=3.10' -- kind: pypi +- pypi: https://files.pythonhosted.org/packages/04/31/8fd189998732d1c5ecacf6a68b6c9aeaafa300b0eaa85b8c678238edba7c/jax_cuda12_pjrt-0.4.36-py3-none-manylinux2014_x86_64.whl name: jax-cuda12-pjrt - version: 0.4.35 - url: https://files.pythonhosted.org/packages/d7/aa/f15ea857ad9bcff7a0c942dc570ca718b026cc0cc5c513525bb08cacf3c0/jax_cuda12_pjrt-0.4.35-py3-none-manylinux2014_x86_64.whl - sha256: 0ffe7e1ba65659bd5738c2cc5addaf0a56205d2188eec5da194b63c068e1fdd2 -- kind: pypi + version: 0.4.36 + sha256: e3c3705d8db7d63da9abfaebf06f5cd0667f5acb0748a5c5eb00d80041e922ed +- pypi: https://files.pythonhosted.org/packages/4b/b9/aaf71a9878ef3f4e4997dabf8458765cd8085c37f65865631980bfb83d53/jax_cuda12_plugin-0.4.36-cp312-cp312-manylinux2014_x86_64.whl name: jax-cuda12-plugin - version: 0.4.35 - url: https://files.pythonhosted.org/packages/23/a1/781f98da41b9abf63a1468c5babbafa7b1bdb766c081386644a4034fbdef/jax_cuda12_plugin-0.4.35-cp312-cp312-manylinux2014_x86_64.whl - sha256: 80aa5e628e8e9dd4f89b767f73900152033c3bf6d5f49dc2081e93f9bac1c9dc + version: 0.4.36 + sha256: 5d4727fb519fedc06a9a984d5a0714804d81ef126a2cb60cefd5cbc4a3ea2627 requires_dist: - - jax-cuda12-pjrt==0.4.35 + - jax-cuda12-pjrt==0.4.36 - nvidia-cublas-cu12>=12.1.3.1 ; extra == 'with-cuda' - nvidia-cuda-cupti-cu12>=12.1.105 ; extra == 'with-cuda' - - nvidia-cuda-nvcc-cu12>=12.1.105 ; extra == 'with-cuda' + - nvidia-cuda-nvcc-cu12>=12.6.85 ; extra == 'with-cuda' - nvidia-cuda-runtime-cu12>=12.1.105 ; extra == 'with-cuda' - nvidia-cudnn-cu12>=9.1,<10.0 ; extra == 'with-cuda' - nvidia-cufft-cu12>=11.0.2.54 ; extra == 'with-cuda' @@ -1668,55 +1375,41 @@ packages: - nvidia-nccl-cu12>=2.18.1 ; extra == 'with-cuda' - nvidia-nvjitlink-cu12>=12.1.105 ; extra == 'with-cuda' requires_python: '>=3.10' -- kind: pypi +- pypi: https://files.pythonhosted.org/packages/fe/f2/7624a304426daa7b135b85caf1b8eccf879e7cb10bc074656ce628309cb0/jaxlib-0.4.36-cp312-cp312-manylinux2014_x86_64.whl name: jaxlib - version: 0.4.34 - url: https://files.pythonhosted.org/packages/e7/0d/4faf839e3c8ce2a5b615df64427be3e870899c72c0ebfb5859348150aba1/jaxlib-0.4.34-cp312-cp312-manylinux2014_x86_64.whl - sha256: 48272e9034ff868d4328cf0055a07882fd2be93f59dfb6283af7de491f9d1290 + version: 0.4.36 + sha256: be295abc209c980817db0488f21f1fbc0644f87326522895e2b9b64729106357 requires_dist: - scipy>=1.10 - numpy>=1.24 - ml-dtypes>=0.2.0 - scipy>=1.11.1 ; python_full_version >= '3.12' requires_python: '>=3.10' -- kind: pypi +- pypi: https://files.pythonhosted.org/packages/94/99/c83c6a97f4382caf1c9bfeeeca935d3eb1f479f711665aeadf4408048107/jaxtyping-0.2.36-py3-none-any.whl name: jaxtyping - version: 0.2.34 - url: https://files.pythonhosted.org/packages/56/ae/220537f80eb82ae43a299de31edb2a91a28b8c5fb8046e9ff853ec7763cd/jaxtyping-0.2.34-py3-none-any.whl - sha256: 2f81fb6d1586e497a6ea2d28c06dcab37b108a096cbb36ea3fe4fa2e1c1f32e5 + version: 0.2.36 + sha256: b19bcbd4009df8734602203402483a4066ad2eb3382904432e370588e9c9707d requires_dist: - - typeguard==2.13.3 - requires_python: ~=3.9 -- kind: conda - name: jedi - version: 0.19.2 - build: pyhff2d567_0 - subdir: noarch - noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/jedi-0.19.2-pyhff2d567_0.conda - sha256: d37dad14c00d06d33bfb99c378d0abd7645224a9491c433af5028f24863341ab - md5: 11ead81b00e0f7cc901fceb7ccfb92c1 + - typing-extensions ; python_full_version < '3.10' + requires_python: '>=3.9' +- conda: https://conda.anaconda.org/conda-forge/noarch/jedi-0.19.2-pyhd8ed1ab_1.conda + sha256: 92c4d217e2dc68983f724aa983cca5464dcb929c566627b26a2511159667dba8 + md5: a4f4c5dc9b80bc50e0d3dc4e6e8f1bd9 depends: - parso >=0.8.3,<0.9.0 - python >=3.9 license: Apache-2.0 AND MIT purls: - pkg:pypi/jedi?source=hash-mapping - size: 842916 - timestamp: 1731317305873 -- kind: conda - name: jupyter_client - version: 8.6.3 - build: pyhd8ed1ab_0 - subdir: noarch - noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/jupyter_client-8.6.3-pyhd8ed1ab_0.conda - sha256: 4419c85e209a715f551a5c9bead746f29ee9d0fc41e772a76db3868622795671 - md5: a14218cfb29662b4a19ceb04e93e298e + size: 843646 + timestamp: 1733300981994 +- conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_client-8.6.3-pyhd8ed1ab_1.conda + sha256: 19d8bd5bb2fde910ec59e081eeb59529491995ce0d653a5209366611023a0b3a + md5: 4ebae00eae9705b0c3d6d1018a81d047 depends: - importlib-metadata >=4.8.3 - jupyter_core >=4.12,!=5.0.* - - python >=3.8 + - python >=3.9 - python-dateutil >=2.8.2 - pyzmq >=23.0 - tornado >=6.2 @@ -1725,16 +1418,9 @@ packages: license_family: BSD purls: - pkg:pypi/jupyter-client?source=hash-mapping - size: 106055 - timestamp: 1726610805505 -- kind: conda - name: jupyter_core - version: 5.7.2 - build: pyh31011fe_1 - build_number: 1 - subdir: noarch - noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/jupyter_core-5.7.2-pyh31011fe_1.conda + size: 106342 + timestamp: 1733441040958 +- conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_core-5.7.2-pyh31011fe_1.conda sha256: 732b1e8536bc22a5a174baa79842d79db2f4956d90293dd82dc1b3f6099bcccd md5: 0a2980dada0dd7fd0998f0342308b1b1 depends: @@ -1748,14 +1434,20 @@ packages: - pkg:pypi/jupyter-core?source=hash-mapping size: 57671 timestamp: 1727163547058 -- kind: conda - name: kernel-headers_linux-64 - version: 3.10.0 - build: he073ed8_18 - build_number: 18 - subdir: noarch - noarch: generic - url: https://conda.anaconda.org/conda-forge/noarch/kernel-headers_linux-64-3.10.0-he073ed8_18.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/jupyterlab_widgets-3.0.13-pyhd8ed1ab_1.conda + sha256: 206489e417408d2ffc2a7b245008b4735a8beb59df6c9109d4f77e7bc5969d5d + md5: b26e487434032d7f486277beb0cead3a + depends: + - python >=3.9 + constrains: + - jupyterlab >=3,<5 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/jupyterlab-widgets?source=hash-mapping + size: 186358 + timestamp: 1733428156991 +- conda: https://conda.anaconda.org/conda-forge/noarch/kernel-headers_linux-64-3.10.0-he073ed8_18.conda sha256: a922841ad80bd7b222502e65c07ecb67e4176c4fa5b03678a005f39fcc98be4b md5: ad8527bf134a90e1c9ed35fa0b64318c constrains: @@ -1765,26 +1457,18 @@ packages: purls: [] size: 943486 timestamp: 1729794504440 -- kind: conda - name: keyutils - version: 1.6.1 - build: h166bdaf_0 - subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/keyutils-1.6.1-h166bdaf_0.tar.bz2 +- conda: https://conda.anaconda.org/conda-forge/linux-64/keyutils-1.6.1-h166bdaf_0.tar.bz2 sha256: 150c05a6e538610ca7c43beb3a40d65c90537497a4f6a5f4d15ec0451b6f5ebb md5: 30186d27e2c9fa62b45fb1476b7200e3 depends: - libgcc-ng >=10.3.0 + arch: x86_64 + platform: linux license: LGPL-2.1-or-later purls: [] size: 117831 timestamp: 1646151697040 -- kind: conda - name: kiwisolver - version: 1.4.7 - build: py312h68727a3_0 - subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/kiwisolver-1.4.7-py312h68727a3_0.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/kiwisolver-1.4.7-py312h68727a3_0.conda sha256: d752c53071ee5d712baa9742dd1629e60388c5ce4ab11d4e73a1690443e41769 md5: 444266743652a4f1538145e9362f6d3b depends: @@ -1793,18 +1477,15 @@ packages: - libstdcxx >=13 - python >=3.12,<3.13.0a0 - python_abi 3.12.* *_cp312 + arch: x86_64 + platform: linux license: BSD-3-Clause license_family: BSD purls: - pkg:pypi/kiwisolver?source=hash-mapping size: 70922 timestamp: 1725459412788 -- kind: conda - name: krb5 - version: 1.21.3 - build: h659f571_0 - subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/krb5-1.21.3-h659f571_0.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/krb5-1.21.3-h659f571_0.conda sha256: 99df692f7a8a5c27cd14b5fb1374ee55e756631b9c3d659ed3ee60830249b238 md5: 3f43953b7d3fb3aaa1d0d0723d91e368 depends: @@ -1814,85 +1495,69 @@ packages: - libgcc-ng >=12 - libstdcxx-ng >=12 - openssl >=3.3.1,<4.0a0 + arch: x86_64 + platform: linux license: MIT license_family: MIT purls: [] size: 1370023 timestamp: 1719463201255 -- kind: conda - name: lcms2 - version: '2.16' - build: hb7c19ff_0 - subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/lcms2-2.16-hb7c19ff_0.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/lcms2-2.16-hb7c19ff_0.conda sha256: 5c878d104b461b7ef922abe6320711c0d01772f4cd55de18b674f88547870041 md5: 51bb7010fc86f70eee639b4bb7a894f5 depends: - libgcc-ng >=12 - libjpeg-turbo >=3.0.0,<4.0a0 - libtiff >=4.6.0,<4.8.0a0 + arch: x86_64 + platform: linux license: MIT license_family: MIT purls: [] size: 245247 timestamp: 1701647787198 -- kind: conda - name: ld_impl_linux-64 - version: '2.43' - build: h712a8e2_2 - build_number: 2 - subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.43-h712a8e2_2.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.43-h712a8e2_2.conda sha256: 7c91cea91b13f4314d125d1bedb9d03a29ebbd5080ccdea70260363424646dbe md5: 048b02e3962f066da18efe3a21b77672 depends: - __glibc >=2.17,<3.0.a0 constrains: - binutils_impl_linux-64 2.43 + arch: x86_64 + platform: linux license: GPL-3.0-only license_family: GPL purls: [] size: 669211 timestamp: 1729655358674 -- kind: conda - name: lerc - version: 4.0.0 - build: h27087fc_0 - subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/lerc-4.0.0-h27087fc_0.tar.bz2 +- conda: https://conda.anaconda.org/conda-forge/linux-64/lerc-4.0.0-h27087fc_0.tar.bz2 sha256: cb55f36dcd898203927133280ae1dc643368af041a48bcf7c026acb7c47b0c12 md5: 76bbff344f0134279f225174e9064c8f depends: - libgcc-ng >=12 - libstdcxx-ng >=12 + arch: x86_64 + platform: linux license: Apache-2.0 license_family: Apache purls: [] size: 281798 timestamp: 1657977462600 -- kind: conda - name: libaec - version: 1.1.3 - build: h59595ed_0 - subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/libaec-1.1.3-h59595ed_0.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/libaec-1.1.3-h59595ed_0.conda sha256: 2ef420a655528bca9d269086cf33b7e90d2f54ad941b437fb1ed5eca87cee017 md5: 5e97e271911b8b2001a8b71860c32faa depends: - libgcc-ng >=12 - libstdcxx-ng >=12 + arch: x86_64 + platform: linux license: BSD-2-Clause license_family: BSD purls: [] size: 35446 timestamp: 1711021212685 -- kind: conda - name: libblas - version: 3.9.0 - build: 25_linux64_openblas +- conda: https://conda.anaconda.org/conda-forge/linux-64/libblas-3.9.0-25_linux64_openblas.conda build_number: 25 - subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/libblas-3.9.0-25_linux64_openblas.conda sha256: d6d12dc437d060f838820e9e61bf73baab651f91935ac594cf10beb9ef1b4450 md5: 8ea26d42ca88ec5258802715fe1ee10b depends: @@ -1903,71 +1568,56 @@ packages: - libcblas 3.9.0 25_linux64_openblas - blas * openblas - liblapacke 3.9.0 25_linux64_openblas + arch: x86_64 + platform: linux license: BSD-3-Clause license_family: BSD purls: [] size: 15677 timestamp: 1729642900350 -- kind: conda - name: libbrotlicommon - version: 1.1.0 - build: hb9d3cd8_2 - build_number: 2 - subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/libbrotlicommon-1.1.0-hb9d3cd8_2.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlicommon-1.1.0-hb9d3cd8_2.conda sha256: d9db2de60ea917298e658143354a530e9ca5f9c63471c65cf47ab39fd2f429e3 md5: 41b599ed2b02abcfdd84302bff174b23 depends: - __glibc >=2.17,<3.0.a0 - libgcc >=13 + arch: x86_64 + platform: linux license: MIT license_family: MIT purls: [] size: 68851 timestamp: 1725267660471 -- kind: conda - name: libbrotlidec - version: 1.1.0 - build: hb9d3cd8_2 - build_number: 2 - subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/libbrotlidec-1.1.0-hb9d3cd8_2.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlidec-1.1.0-hb9d3cd8_2.conda sha256: 2892d512cad096cb03f1b66361deeab58b64e15ba525d6592bb6d609e7045edf md5: 9566f0bd264fbd463002e759b8a82401 depends: - __glibc >=2.17,<3.0.a0 - libbrotlicommon 1.1.0 hb9d3cd8_2 - libgcc >=13 + arch: x86_64 + platform: linux license: MIT license_family: MIT purls: [] size: 32696 timestamp: 1725267669305 -- kind: conda - name: libbrotlienc - version: 1.1.0 - build: hb9d3cd8_2 - build_number: 2 - subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/libbrotlienc-1.1.0-hb9d3cd8_2.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlienc-1.1.0-hb9d3cd8_2.conda sha256: 779f58174e99de3600e939fa46eddb453ec5d3c60bb46cdaa8b4c127224dbf29 md5: 06f70867945ea6a84d35836af780f1de depends: - __glibc >=2.17,<3.0.a0 - libbrotlicommon 1.1.0 hb9d3cd8_2 - libgcc >=13 + arch: x86_64 + platform: linux license: MIT license_family: MIT purls: [] size: 281750 timestamp: 1725267679782 -- kind: conda - name: libcblas - version: 3.9.0 - build: 25_linux64_openblas +- conda: https://conda.anaconda.org/conda-forge/linux-64/libcblas-3.9.0-25_linux64_openblas.conda build_number: 25 - subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/libcblas-3.9.0-25_linux64_openblas.conda sha256: ab87b0477078837c91d9cda62a9faca18fba7c57cc77aa779ae24b3ac783b5dd md5: 5dbd1b0fc0d01ec5e0e1fbe667281a11 depends: @@ -1976,88 +1626,71 @@ packages: - liblapack 3.9.0 25_linux64_openblas - blas * openblas - liblapacke 3.9.0 25_linux64_openblas + arch: x86_64 + platform: linux license: BSD-3-Clause license_family: BSD purls: [] size: 15613 timestamp: 1729642905619 -- kind: conda - name: libcurl - version: 8.10.1 - build: hbbe4b11_0 - subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/libcurl-8.10.1-hbbe4b11_0.conda - sha256: 54e6114dfce566c3a22ad3b7b309657e3600cdb668398e95f1301360d5d52c99 - md5: 6e801c50a40301f6978c53976917b277 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libcurl-8.11.1-h332b0f4_0.conda + sha256: 3cd4075b2a7b5562e46c8ec626f6f9ca57aeecaa94ff7df57eca26daa94c9906 + md5: 2b3e0081006dc21e8bf53a91c83a055c depends: - __glibc >=2.17,<3.0.a0 - krb5 >=1.21.3,<1.22.0a0 - libgcc >=13 - - libnghttp2 >=1.58.0,<2.0a0 - - libssh2 >=1.11.0,<2.0a0 + - libnghttp2 >=1.64.0,<2.0a0 + - libssh2 >=1.11.1,<2.0a0 - libzlib >=1.3.1,<2.0a0 - - openssl >=3.3.2,<4.0a0 + - openssl >=3.4.0,<4.0a0 - zstd >=1.5.6,<1.6.0a0 + arch: x86_64 + platform: linux license: curl license_family: MIT purls: [] - size: 424900 - timestamp: 1726659794676 -- kind: conda - name: libdeflate - version: '1.22' - build: hb9d3cd8_0 - subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/libdeflate-1.22-hb9d3cd8_0.conda + size: 423011 + timestamp: 1733999897624 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libdeflate-1.22-hb9d3cd8_0.conda sha256: 780f0530a3adfc1497ba49d626931c6afc978c540e1abfde6ccd57128ded6ad6 md5: b422943d5d772b7cc858b36ad2a92db5 depends: - __glibc >=2.17,<3.0.a0 - libgcc >=13 + arch: x86_64 + platform: linux license: MIT license_family: MIT purls: [] size: 72242 timestamp: 1728177071251 -- kind: conda - name: libedit - version: 3.1.20191231 - build: he28a2e2_2 - build_number: 2 - subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/libedit-3.1.20191231-he28a2e2_2.tar.bz2 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libedit-3.1.20191231-he28a2e2_2.tar.bz2 sha256: a57d37c236d8f7c886e01656f4949d9dcca131d2a0728609c6f7fa338b65f1cf md5: 4d331e44109e3f0e19b4cb8f9b82f3e1 depends: - libgcc-ng >=7.5.0 - ncurses >=6.2,<7.0.0a0 + arch: x86_64 + platform: linux license: BSD-2-Clause license_family: BSD purls: [] size: 123878 timestamp: 1597616541093 -- kind: conda - name: libev - version: '4.33' - build: hd590300_2 - build_number: 2 - subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/libev-4.33-hd590300_2.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/libev-4.33-hd590300_2.conda sha256: 1cd6048169fa0395af74ed5d8f1716e22c19a81a8a36f934c110ca3ad4dd27b4 md5: 172bf1cd1ff8629f2b1179945ed45055 depends: - libgcc-ng >=12 + arch: x86_64 + platform: linux license: BSD-2-Clause license_family: BSD purls: [] size: 112766 timestamp: 1702146165126 -- kind: conda - name: libexpat - version: 2.6.4 - build: h5888daf_0 - subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.6.4-h5888daf_0.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.6.4-h5888daf_0.conda sha256: 56541b98447b58e52d824bd59d6382d609e11de1f8adf20b23143e353d2b8d26 md5: db833e03127376d461e1e13e76f09b6c depends: @@ -2065,34 +1698,26 @@ packages: - libgcc >=13 constrains: - expat 2.6.4.* + arch: x86_64 + platform: linux license: MIT license_family: MIT purls: [] size: 73304 timestamp: 1730967041968 -- kind: conda - name: libffi - version: 3.4.2 - build: h7f98852_5 - build_number: 5 - subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.4.2-h7f98852_5.tar.bz2 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.4.2-h7f98852_5.tar.bz2 sha256: ab6e9856c21709b7b517e940ae7028ae0737546122f83c2aa5d692860c3b149e md5: d645c6d2ac96843a2bfaccd2d62b3ac3 depends: - libgcc-ng >=9.4.0 + arch: x86_64 + platform: linux license: MIT license_family: MIT purls: [] size: 58292 timestamp: 1636488182923 -- kind: conda - name: libgcc - version: 14.2.0 - build: h77fa898_1 - build_number: 1 - subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/libgcc-14.2.0-h77fa898_1.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-14.2.0-h77fa898_1.conda sha256: 53eb8a79365e58849e7b1a068d31f4f9e718dc938d6f2c03e960345739a03569 md5: 3cb76c3f10d3bc7f1105b2fc9db984df depends: @@ -2101,19 +1726,14 @@ packages: constrains: - libgomp 14.2.0 h77fa898_1 - libgcc-ng ==14.2.0=*_1 + arch: x86_64 + platform: linux license: GPL-3.0-only WITH GCC-exception-3.1 license_family: GPL purls: [] size: 848745 timestamp: 1729027721139 -- kind: conda - name: libgcc-devel_linux-64 - version: 13.3.0 - build: h84ea5a7_101 - build_number: 101 - subdir: noarch - noarch: generic - url: https://conda.anaconda.org/conda-forge/noarch/libgcc-devel_linux-64-13.3.0-h84ea5a7_101.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/libgcc-devel_linux-64-13.3.0-h84ea5a7_101.conda sha256: 027cfb011328a108bc44f512a2dec6d954db85709e0b79b748c3392f85de0c64 md5: 0ce69d40c142915ac9734bc6134e514a depends: @@ -2123,29 +1743,19 @@ packages: purls: [] size: 2598313 timestamp: 1724801050802 -- kind: conda - name: libgcc-ng - version: 14.2.0 - build: h69a702a_1 - build_number: 1 - subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-14.2.0-h69a702a_1.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-14.2.0-h69a702a_1.conda sha256: 3a76969c80e9af8b6e7a55090088bc41da4cffcde9e2c71b17f44d37b7cb87f7 md5: e39480b9ca41323497b05492a63bc35b depends: - libgcc 14.2.0 h77fa898_1 + arch: x86_64 + platform: linux license: GPL-3.0-only WITH GCC-exception-3.1 license_family: GPL purls: [] size: 54142 timestamp: 1729027726517 -- kind: conda - name: libgd - version: 2.3.3 - build: hd3e95f3_10 - build_number: 10 - subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/libgd-2.3.3-hd3e95f3_10.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/libgd-2.3.3-hd3e95f3_10.conda sha256: b0fa27d4d09fb24750c04e89dbd0aee898dc028bde99e62621065a9bde43efe8 md5: 30ee3a29c84cf7b842a8c5828c4b7c13 depends: @@ -2161,69 +1771,42 @@ packages: - libtiff >=4.6.0,<4.8.0a0 - libwebp-base >=1.4.0,<2.0a0 - libzlib >=1.3.1,<2.0a0 + arch: x86_64 + platform: linux license: GD license_family: BSD purls: [] size: 225113 timestamp: 1722928278395 -- kind: conda - name: libgfortran - version: 14.2.0 - build: h69a702a_1 - build_number: 1 - subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/libgfortran-14.2.0-h69a702a_1.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran-14.2.0-h69a702a_1.conda sha256: fc9e7f22a17faf74da904ebfc4d88699013d2992e55505e4aa0eb01770290977 md5: f1fd30127802683586f768875127a987 depends: - libgfortran5 14.2.0 hd5240d6_1 constrains: - libgfortran-ng ==14.2.0=*_1 + arch: x86_64 + platform: linux license: GPL-3.0-only WITH GCC-exception-3.1 license_family: GPL purls: [] size: 53997 timestamp: 1729027752995 -- kind: conda - name: libgfortran-ng - version: 14.2.0 - build: h69a702a_1 - build_number: 1 - subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/libgfortran-ng-14.2.0-h69a702a_1.conda - sha256: 423f1e2403f0c665748e42d335e421e53fd03c08d457cfb6f360d329d9459851 - md5: 0a7f4cd238267c88e5d69f7826a407eb - depends: - - libgfortran 14.2.0 h69a702a_1 - license: GPL-3.0-only WITH GCC-exception-3.1 - license_family: GPL - purls: [] - size: 54106 - timestamp: 1729027945817 -- kind: conda - name: libgfortran5 - version: 14.2.0 - build: hd5240d6_1 - build_number: 1 - subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/libgfortran5-14.2.0-hd5240d6_1.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran5-14.2.0-hd5240d6_1.conda sha256: d149a37ca73611e425041f33b9d8dbed6e52ec506fe8cc1fc0ee054bddeb6d5d md5: 9822b874ea29af082e5d36098d25427d depends: - libgcc >=14.2.0 constrains: - libgfortran 14.2.0 + arch: x86_64 + platform: linux license: GPL-3.0-only WITH GCC-exception-3.1 license_family: GPL purls: [] size: 1462645 timestamp: 1729027735353 -- kind: conda - name: libglib - version: 2.82.2 - build: h2ff4ddf_0 - subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/libglib-2.82.2-h2ff4ddf_0.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/libglib-2.82.2-h2ff4ddf_0.conda sha256: 49ee9401d483a76423461c50dcd37f91d070efaec7e4dc2828d8cdd2ce694231 md5: 13e8e54035ddd2b91875ba399f0f7c04 depends: @@ -2235,84 +1818,65 @@ packages: - pcre2 >=10.44,<10.45.0a0 constrains: - glib 2.82.2 *_0 + arch: x86_64 + platform: linux license: LGPL-2.1-or-later purls: [] size: 3931898 timestamp: 1729191404130 -- kind: conda - name: libgomp - version: 14.2.0 - build: h77fa898_1 - build_number: 1 - subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/libgomp-14.2.0-h77fa898_1.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-14.2.0-h77fa898_1.conda sha256: 1911c29975ec99b6b906904040c855772ccb265a1c79d5d75c8ceec4ed89cd63 md5: cc3573974587f12dda90d96e3e55a702 depends: - _libgcc_mutex 0.1 conda_forge + arch: x86_64 + platform: linux license: GPL-3.0-only WITH GCC-exception-3.1 license_family: GPL purls: [] size: 460992 timestamp: 1729027639220 -- kind: conda - name: libhwloc - version: 2.11.1 - build: default_hecaa2ac_1000 - build_number: 1000 - subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/libhwloc-2.11.1-default_hecaa2ac_1000.conda - sha256: 8473a300e10b79557ce0ac81602506b47146aff3df4cc3568147a7dd07f480a2 - md5: f54aeebefb5c5ff84eca4fb05ca8aa3a +- conda: https://conda.anaconda.org/conda-forge/linux-64/libhwloc-2.11.2-default_h0d58e46_1001.conda + sha256: d14c016482e1409ae1c50109a9ff933460a50940d2682e745ab1c172b5282a69 + md5: 804ca9e91bcaea0824a341d55b1684f2 depends: - __glibc >=2.17,<3.0.a0 - - libgcc-ng >=12 - - libstdcxx-ng >=12 - - libxml2 >=2.12.7,<3.0a0 + - libgcc >=13 + - libstdcxx >=13 + - libxml2 >=2.13.4,<3.0a0 + arch: x86_64 + platform: linux license: BSD-3-Clause license_family: BSD purls: [] - size: 2417964 - timestamp: 1720460562447 -- kind: conda - name: libiconv - version: '1.17' - build: hd590300_2 - build_number: 2 - subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/libiconv-1.17-hd590300_2.conda + size: 2423200 + timestamp: 1731374922090 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libiconv-1.17-hd590300_2.conda sha256: 8ac2f6a9f186e76539439e50505d98581472fedb347a20e7d1f36429849f05c9 md5: d66573916ffcf376178462f1b61c941e depends: - libgcc-ng >=12 + arch: x86_64 + platform: linux license: LGPL-2.1-only purls: [] size: 705775 timestamp: 1702682170569 -- kind: conda - name: libjpeg-turbo - version: 3.0.0 - build: hd590300_1 - build_number: 1 - subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/libjpeg-turbo-3.0.0-hd590300_1.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/libjpeg-turbo-3.0.0-hd590300_1.conda sha256: b954e09b7e49c2f2433d6f3bb73868eda5e378278b0f8c1dd10a7ef090e14f2f md5: ea25936bb4080d843790b586850f82b8 depends: - libgcc-ng >=12 constrains: - jpeg <0.0.0a + arch: x86_64 + platform: linux license: IJG AND BSD-3-Clause AND Zlib purls: [] size: 618575 timestamp: 1694474974816 -- kind: conda - name: liblapack - version: 3.9.0 - build: 25_linux64_openblas +- conda: https://conda.anaconda.org/conda-forge/linux-64/liblapack-3.9.0-25_linux64_openblas.conda build_number: 25 - subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/liblapack-3.9.0-25_linux64_openblas.conda sha256: 9d1ff017714edb2d84868f0f931a4a0e7c289a971062b2ac66cfc8145df7e20e md5: 4dc03a53fc69371a6158d0ed37214cd3 depends: @@ -2321,18 +1885,15 @@ packages: - liblapacke 3.9.0 25_linux64_openblas - libcblas 3.9.0 25_linux64_openblas - blas * openblas + arch: x86_64 + platform: linux license: BSD-3-Clause license_family: BSD purls: [] size: 15608 timestamp: 1729642910812 -- kind: conda - name: liblapacke - version: 3.9.0 - build: 25_linux64_openblas +- conda: https://conda.anaconda.org/conda-forge/linux-64/liblapacke-3.9.0-25_linux64_openblas.conda build_number: 25 - subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/liblapacke-3.9.0-25_linux64_openblas.conda sha256: f8bc6fe22126ca0bf204c27f829d1e0006069cc98776a33122bf8d0548940b3c md5: 8f5ead31b3a168aedd488b8a87736c41 depends: @@ -2341,35 +1902,40 @@ packages: - liblapack 3.9.0 25_linux64_openblas constrains: - blas * openblas + arch: x86_64 + platform: linux license: BSD-3-Clause license_family: BSD purls: [] size: 15609 timestamp: 1729642916038 -- kind: conda - name: libllvm14 - version: 14.0.6 - build: hcd5def8_4 - build_number: 4 - subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/libllvm14-14.0.6-hcd5def8_4.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/libllvm14-14.0.6-hcd5def8_4.conda sha256: 225cc7c3b20ac1db1bdb37fa18c95bf8aecef4388e984ab2f7540a9f4382106a md5: 73301c133ded2bf71906aa2104edae8b depends: - libgcc-ng >=12 - libstdcxx-ng >=12 - libzlib >=1.2.13,<2.0.0a0 + arch: x86_64 + platform: linux license: Apache-2.0 WITH LLVM-exception license_family: Apache purls: [] size: 31484415 timestamp: 1690557554081 -- kind: conda - name: libnghttp2 - version: 1.64.0 - build: h161d5f1_0 - subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/libnghttp2-1.64.0-h161d5f1_0.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/liblzma-5.6.3-hb9d3cd8_1.conda + sha256: e6e425252f3839e2756e4af1ea2074dffd3396c161bf460629f9dfd6a65f15c6 + md5: 2ecf2f1c7e4e21fcfe6423a51a992d84 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + arch: x86_64 + platform: linux + license: 0BSD + purls: [] + size: 111132 + timestamp: 1733407410083 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libnghttp2-1.64.0-h161d5f1_0.conda sha256: b0f2b3695b13a989f75d8fd7f4778e1c7aabe3b36db83f0fe80b2cd812c0e975 md5: 19e57602824042dfd0446292ef90488b depends: @@ -2381,33 +1947,26 @@ packages: - libstdcxx >=13 - libzlib >=1.3.1,<2.0a0 - openssl >=3.3.2,<4.0a0 + arch: x86_64 + platform: linux license: MIT license_family: MIT purls: [] size: 647599 timestamp: 1729571887612 -- kind: conda - name: libnsl - version: 2.0.1 - build: hd590300_0 - subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/libnsl-2.0.1-hd590300_0.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/libnsl-2.0.1-hd590300_0.conda sha256: 26d77a3bb4dceeedc2a41bd688564fe71bf2d149fdcf117049970bc02ff1add6 md5: 30fd6e37fe21f86f4bd26d6ee73eeec7 depends: - libgcc-ng >=12 + arch: x86_64 + platform: linux license: LGPL-2.1-only license_family: GPL purls: [] size: 33408 timestamp: 1697359010159 -- kind: conda - name: libopenblas - version: 0.3.28 - build: pthreads_h94d23a6_1 - build_number: 1 - subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/libopenblas-0.3.28-pthreads_h94d23a6_1.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/libopenblas-0.3.28-pthreads_h94d23a6_1.conda sha256: 99ba271d8a80a1af2723f2e124ffd91d850074c0389c067e6d96d72a2dbfeabe md5: 62857b389e42b36b686331bec0922050 depends: @@ -2417,33 +1976,27 @@ packages: - libgfortran5 >=14.2.0 constrains: - openblas >=0.3.28,<0.3.29.0a0 + arch: x86_64 + platform: linux license: BSD-3-Clause license_family: BSD purls: [] size: 5578513 timestamp: 1730772671118 -- kind: conda - name: libpng - version: 1.6.44 - build: hadc24fc_0 - subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/libpng-1.6.44-hadc24fc_0.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/libpng-1.6.44-hadc24fc_0.conda sha256: e5b14f7a01c2db4362d8591f42f82f336ed48d5e4079e4d1f65d0c2a3637ea78 md5: f4cc49d7aa68316213e4b12be35308d1 depends: - __glibc >=2.17,<3.0.a0 - libgcc >=13 - libzlib >=1.3.1,<2.0a0 + arch: x86_64 + platform: linux license: zlib-acknowledgement purls: [] size: 290661 timestamp: 1726234747153 -- kind: conda - name: librsvg - version: 2.58.4 - build: hc0ffecb_0 - subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/librsvg-2.58.4-hc0ffecb_0.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/librsvg-2.58.4-hc0ffecb_0.conda sha256: fda3197ffb24512e719d55defa02f9f70286038e56cad8c1d580ed6460f417fa md5: 83f045969988f5c7a65f3950b95a8b35 depends: @@ -2459,99 +2012,77 @@ packages: - pango >=1.54.0,<2.0a0 constrains: - __glibc >=2.17 + arch: x86_64 + platform: linux license: LGPL-2.1-or-later purls: [] size: 6390511 timestamp: 1726227212382 -- kind: conda - name: libsanitizer - version: 13.3.0 - build: heb74ff8_1 - build_number: 1 - subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/libsanitizer-13.3.0-heb74ff8_1.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/libsanitizer-13.3.0-heb74ff8_1.conda sha256: c86d130f0a3099e46ff51aa7ffaab73cb44fc420d27a96076aab3b9a326fc137 md5: c4cb22f270f501f5c59a122dc2adf20a depends: - libgcc >=13.3.0 - libstdcxx >=13.3.0 + arch: x86_64 + platform: linux license: GPL-3.0-only WITH GCC-exception-3.1 license_family: GPL purls: [] size: 4133922 timestamp: 1724801171589 -- kind: conda - name: libsodium - version: 1.0.20 - build: h4ab18f5_0 - subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/libsodium-1.0.20-h4ab18f5_0.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/libsodium-1.0.20-h4ab18f5_0.conda sha256: 0105bd108f19ea8e6a78d2d994a6d4a8db16d19a41212070d2d1d48a63c34161 md5: a587892d3c13b6621a6091be690dbca2 depends: - libgcc-ng >=12 + arch: x86_64 + platform: linux license: ISC purls: [] size: 205978 timestamp: 1716828628198 -- kind: conda - name: libsqlite - version: 3.47.0 - build: hadc24fc_1 - build_number: 1 - subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.47.0-hadc24fc_1.conda - sha256: 8a9aadf996a2399f65b679c6e7f29139d5059f699c63e6d7b50e20db10c00508 - md5: b6f02b52a174e612e89548f4663ce56a +- conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.47.2-hee588c1_0.conda + sha256: 48af21ebc2cbf358976f1e0f4a0ab9e91dfc83d0ef337cf3837c6f5bc22fb352 + md5: b58da17db24b6e08bcbf8fed2fb8c915 depends: - __glibc >=2.17,<3.0.a0 - libgcc >=13 - libzlib >=1.3.1,<2.0a0 + arch: x86_64 + platform: linux license: Unlicense purls: [] - size: 875349 - timestamp: 1730208050020 -- kind: conda - name: libssh2 - version: 1.11.0 - build: h0841786_0 - subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/libssh2-1.11.0-h0841786_0.conda - sha256: 50e47fd9c4f7bf841a11647ae7486f65220cfc988ec422a4475fe8d5a823824d - md5: 1f5a58e686b13bcfde88b93f547d23fe + size: 873551 + timestamp: 1733761824646 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libssh2-1.11.1-hf672d98_0.conda + sha256: 0407ac9fda2bb67e11e357066eff144c845801d00b5f664efbc48813af1e7bb9 + md5: be2de152d8073ef1c01b7728475f2fe7 depends: - - libgcc-ng >=12 - - libzlib >=1.2.13,<2.0.0a0 - - openssl >=3.1.1,<4.0a0 + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - libzlib >=1.3.1,<2.0a0 + - openssl >=3.4.0,<4.0a0 + arch: x86_64 + platform: linux license: BSD-3-Clause license_family: BSD purls: [] - size: 271133 - timestamp: 1685837707056 -- kind: conda - name: libstdcxx - version: 14.2.0 - build: hc0a3c3a_1 - build_number: 1 - subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-14.2.0-hc0a3c3a_1.conda + size: 304278 + timestamp: 1732349402869 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-14.2.0-hc0a3c3a_1.conda sha256: 4661af0eb9bdcbb5fb33e5d0023b001ad4be828fccdcc56500059d56f9869462 md5: 234a5554c53625688d51062645337328 depends: - libgcc 14.2.0 h77fa898_1 + arch: x86_64 + platform: linux license: GPL-3.0-only WITH GCC-exception-3.1 license_family: GPL purls: [] size: 3893695 timestamp: 1729027746910 -- kind: conda - name: libstdcxx-devel_linux-64 - version: 13.3.0 - build: h84ea5a7_101 - build_number: 101 - subdir: noarch - noarch: generic - url: https://conda.anaconda.org/conda-forge/noarch/libstdcxx-devel_linux-64-13.3.0-h84ea5a7_101.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/libstdcxx-devel_linux-64-13.3.0-h84ea5a7_101.conda sha256: 0a9226c1b994f996229ffb54fa40d608cd4e4b48e8dc73a66134bea8ce949412 md5: 29b5a4ed4613fa81a07c21045e3f5bf6 depends: @@ -2561,84 +2092,65 @@ packages: purls: [] size: 14074676 timestamp: 1724801075448 -- kind: conda - name: libstdcxx-ng - version: 14.2.0 - build: h4852527_1 - build_number: 1 - subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-14.2.0-h4852527_1.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-14.2.0-h4852527_1.conda sha256: 25bb30b827d4f6d6f0522cc0579e431695503822f144043b93c50237017fffd8 md5: 8371ac6457591af2cf6159439c1fd051 depends: - libstdcxx 14.2.0 hc0a3c3a_1 + arch: x86_64 + platform: linux license: GPL-3.0-only WITH GCC-exception-3.1 license_family: GPL purls: [] size: 54105 timestamp: 1729027780628 -- kind: conda - name: libtiff - version: 4.7.0 - build: he137b08_1 - build_number: 1 - subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/libtiff-4.7.0-he137b08_1.conda - sha256: 9890121db85f6ef463fe12eb04ef1471176e3ef3b5e2d62e8d6dac713df00df4 - md5: 63872517c98aa305da58a757c443698e +- conda: https://conda.anaconda.org/conda-forge/linux-64/libtiff-4.7.0-hc4654cb_2.conda + sha256: 18653b4a5c73e19c5e86ff72dab9bf59f5cc43d7f404a6be705d152dfd5e0660 + md5: be54fb40ea32e8fe9dbaa94d4528b57e depends: - __glibc >=2.17,<3.0.a0 - lerc >=4.0.0,<5.0a0 - libdeflate >=1.22,<1.23.0a0 - libgcc >=13 - libjpeg-turbo >=3.0.0,<4.0a0 + - liblzma >=5.6.3,<6.0a0 - libstdcxx >=13 - libwebp-base >=1.4.0,<2.0a0 - libzlib >=1.3.1,<2.0a0 - - xz >=5.2.6,<6.0a0 - zstd >=1.5.6,<1.6.0a0 + arch: x86_64 + platform: linux license: HPND purls: [] - size: 428156 - timestamp: 1728232228989 -- kind: conda - name: libuuid - version: 2.38.1 - build: h0b41bf4_0 - subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.38.1-h0b41bf4_0.conda + size: 429018 + timestamp: 1733443013288 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.38.1-h0b41bf4_0.conda sha256: 787eb542f055a2b3de553614b25f09eefb0a0931b0c87dbcce6efdfd92f04f18 md5: 40b61aab5c7ba9ff276c41cfffe6b80b depends: - libgcc-ng >=12 + arch: x86_64 + platform: linux license: BSD-3-Clause license_family: BSD purls: [] size: 33601 timestamp: 1680112270483 -- kind: conda - name: libwebp-base - version: 1.4.0 - build: hd590300_0 - subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/libwebp-base-1.4.0-hd590300_0.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/libwebp-base-1.4.0-hd590300_0.conda sha256: 49bc5f6b1e11cb2babf2a2a731d1a680a5e08a858280876a779dbda06c78c35f md5: b26e8aa824079e1be0294e7152ca4559 depends: - libgcc-ng >=12 constrains: - libwebp 1.4.0 + arch: x86_64 + platform: linux license: BSD-3-Clause license_family: BSD purls: [] size: 438953 timestamp: 1713199854503 -- kind: conda - name: libxcb - version: 1.17.0 - build: h8a09558_0 - subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/libxcb-1.17.0-h8a09558_0.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/libxcb-1.17.0-h8a09558_0.conda sha256: 666c0c431b23c6cec6e492840b176dde533d48b7e6fb8883f5071223433776aa md5: 92ed62436b625154323d40d5f2f11dd7 depends: @@ -2647,53 +2159,42 @@ packages: - pthread-stubs - xorg-libxau >=1.0.11,<2.0a0 - xorg-libxdmcp + arch: x86_64 + platform: linux license: MIT license_family: MIT purls: [] size: 395888 timestamp: 1727278577118 -- kind: conda - name: libxcrypt - version: 4.4.36 - build: hd590300_1 - build_number: 1 - subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/libxcrypt-4.4.36-hd590300_1.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/libxcrypt-4.4.36-hd590300_1.conda sha256: 6ae68e0b86423ef188196fff6207ed0c8195dd84273cb5623b85aa08033a410c md5: 5aa797f8787fe7a17d1b0821485b5adc depends: - libgcc-ng >=12 + arch: x86_64 + platform: linux license: LGPL-2.1-or-later purls: [] size: 100393 timestamp: 1702724383534 -- kind: conda - name: libxml2 - version: 2.13.5 - build: hb346dea_0 - subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/libxml2-2.13.5-hb346dea_0.conda - sha256: 8c9d6a3a421ac5bf965af495d1b0a08c6fb2245ba156550bc064a7b4f8fc7bd8 - md5: c81a9f1118541aaa418ccb22190c817e +- conda: https://conda.anaconda.org/conda-forge/linux-64/libxml2-2.13.5-h8d12d68_1.conda + sha256: c3b05bdc40d27a9249f0bb60f3f71718f94104b8bcd200163a6c9d4ade7aa052 + md5: 1a21e49e190d1ffe58531a81b6e400e1 depends: - __glibc >=2.17,<3.0.a0 - icu >=75.1,<76.0a0 - libgcc >=13 - libiconv >=1.17,<2.0a0 + - liblzma >=5.6.3,<6.0a0 - libzlib >=1.3.1,<2.0a0 - - xz >=5.2.6,<6.0a0 + arch: x86_64 + platform: linux license: MIT license_family: MIT purls: [] - size: 689626 - timestamp: 1731489608971 -- kind: conda - name: libzlib - version: 1.3.1 - build: hb9d3cd8_2 - build_number: 2 - subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.1-hb9d3cd8_2.conda + size: 690589 + timestamp: 1733443667823 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.1-hb9d3cd8_2.conda sha256: d4bfe88d7cb447768e31650f06257995601f89076080e76df55e3112d4e47dc4 md5: edb0dca6bc32e4f4789199455a1dbeb8 depends: @@ -2701,35 +2202,28 @@ packages: - libgcc >=13 constrains: - zlib 1.3.1 *_2 + arch: x86_64 + platform: linux license: Zlib license_family: Other purls: [] size: 60963 timestamp: 1727963148474 -- kind: conda - name: llvm-openmp - version: 19.1.3 - build: h024ca30_0 - subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/llvm-openmp-19.1.3-h024ca30_0.conda - sha256: aede34c8e218c539ccd4593e4a60b55293b9c3e8870df42f2e2d6ab9e7550927 - md5: d36687dc90337917a84a96a45111ad59 +- conda: https://conda.anaconda.org/conda-forge/linux-64/llvm-openmp-19.1.5-h024ca30_0.conda + sha256: e319db1e18dabe23ddeb4a1e04ff1ab5e331069a5a558891ffeb60c8b76d5e6a + md5: dc90d15c25a57f641f0b84c271e4761e depends: - __glibc >=2.17,<3.0.a0 constrains: - - openmp 19.1.3|19.1.3.* + - openmp 19.1.5|19.1.5.* + arch: x86_64 + platform: linux license: Apache-2.0 WITH LLVM-exception license_family: APACHE purls: [] - size: 3192137 - timestamp: 1730363910114 -- kind: conda - name: llvmlite - version: 0.43.0 - build: py312h374181b_1 - build_number: 1 - subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/llvmlite-0.43.0-py312h374181b_1.conda + size: 3191882 + timestamp: 1733375922702 +- conda: https://conda.anaconda.org/conda-forge/linux-64/llvmlite-0.43.0-py312h374181b_1.conda sha256: b260285b29834f9b003e2928d778c19b8ed0ca1aff5aa8aa7ec8f21f9b23c2e4 md5: ed6ead7e9ab9469629c6cfb363b5c6e2 depends: @@ -2740,19 +2234,15 @@ packages: - libzlib >=1.3.1,<2.0a0 - python >=3.12,<3.13.0a0 - python_abi 3.12.* *_cp312 + arch: x86_64 + platform: linux license: BSD-2-Clause license_family: BSD purls: - pkg:pypi/llvmlite?source=hash-mapping size: 3442782 timestamp: 1725305160474 -- kind: conda - name: logical-unification - version: 0.4.6 - build: pyhd8ed1ab_0 - subdir: noarch - noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/logical-unification-0.4.6-pyhd8ed1ab_0.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/logical-unification-0.4.6-pyhd8ed1ab_0.conda sha256: 2b70aa838779516e05f93158f9f5b15671fc080cec20d05ca0e3a992e391a6e9 md5: bd04410bd092c8f62f23a3aea41f47eb depends: @@ -2765,33 +2255,21 @@ packages: - pkg:pypi/logical-unification?source=hash-mapping size: 18160 timestamp: 1683416555508 -- kind: conda - name: markdown-it-py - version: 3.0.0 - build: pyhd8ed1ab_0 - subdir: noarch - noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-3.0.0-pyhd8ed1ab_0.conda - sha256: c041b0eaf7a6af3344d5dd452815cdc148d6284fec25a4fa3f4263b3a021e962 - md5: 93a8e71256479c62074356ef6ebf501b +- conda: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-3.0.0-pyhd8ed1ab_1.conda + sha256: 0fbacdfb31e55964152b24d5567e9a9996e1e7902fb08eb7d91b5fd6ce60803a + md5: fee3164ac23dfca50cfcc8b85ddefb81 depends: - mdurl >=0.1,<1 - - python >=3.8 + - python >=3.9 license: MIT license_family: MIT purls: - pkg:pypi/markdown-it-py?source=hash-mapping - size: 64356 - timestamp: 1686175179621 -- kind: conda - name: matplotlib-base - version: 3.9.2 - build: py312hd3ec401_2 - build_number: 2 - subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/matplotlib-base-3.9.2-py312hd3ec401_2.conda - sha256: f199be5149f45a14c88d465d9cb83cfba5efe17c45a0233354ef62cdcb7eab9e - md5: 2380c9ba933ffaac9ad16d8eac8e3318 + size: 64430 + timestamp: 1733250550053 +- conda: https://conda.anaconda.org/conda-forge/linux-64/matplotlib-base-3.9.3-py312hd3ec401_0.conda + sha256: 8e8f4e20eccc2473ad14d649609dbaae74354630dbd34e58b53870d8f15d663d + md5: b023c7b33ecc2aa6726232dc3061ac6c depends: - __glibc >=2.17,<3.0.a0 - certifi >=2020.06.20 @@ -2812,75 +2290,56 @@ packages: - python_abi 3.12.* *_cp312 - qhull >=2020.2,<2020.3.0a0 - tk >=8.6.13,<8.7.0a0 + arch: x86_64 + platform: linux license: PSF-2.0 license_family: PSF purls: - pkg:pypi/matplotlib?source=hash-mapping - size: 7965171 - timestamp: 1731025360821 -- kind: conda - name: matplotlib-inline - version: 0.1.7 - build: pyhd8ed1ab_0 - subdir: noarch - noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/matplotlib-inline-0.1.7-pyhd8ed1ab_0.conda - sha256: 7ea68676ea35fbb095420bbcc1c82c4767b8be7bb56abb6989b7f89d957a3bab - md5: 779345c95648be40d22aaa89de7d4254 + size: 7923928 + timestamp: 1733176194348 +- conda: https://conda.anaconda.org/conda-forge/noarch/matplotlib-inline-0.1.7-pyhd8ed1ab_1.conda + sha256: 69b7dc7131703d3d60da9b0faa6dd8acbf6f6c396224cf6aef3e855b8c0c41c6 + md5: af6ab708897df59bd6e7283ceab1b56b depends: - - python >=3.6 + - python >=3.9 - traitlets license: BSD-3-Clause license_family: BSD purls: - pkg:pypi/matplotlib-inline?source=hash-mapping - size: 14599 - timestamp: 1713250613726 -- kind: conda - name: maturin - version: 1.7.4 - build: py312h6ab59e4_0 - subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/maturin-1.7.4-py312h6ab59e4_0.conda - sha256: 7cd382f2cf76f1f83c6d324cfd1cd238769aad6f4650892d4a3f1f4fb20f750e - md5: 082a5a7a1de682a2aa1cc1f7c86cd51a + size: 14467 + timestamp: 1733417051523 +- conda: https://conda.anaconda.org/conda-forge/linux-64/maturin-1.7.8-py312h6ab59e4_0.conda + sha256: 19a8adcb4a1b3db4ba2f45f3b2e302d2b039c4647241e5cfc4fceaf4fd4e3289 + md5: 0a2dbad1854d6ed324d7ea1ea4fb83fe depends: - __glibc >=2.17,<3.0.a0 - libgcc >=13 - - openssl >=3.3.2,<4.0a0 + - openssl >=3.4.0,<4.0a0 - python >=3.12,<3.13.0a0 - python_abi 3.12.* *_cp312 - tomli >=1.1.0 + arch: x86_64 + platform: linux license: MIT license_family: MIT purls: - pkg:pypi/maturin?source=hash-mapping - size: 6259502 - timestamp: 1727350499582 -- kind: conda - name: mdurl - version: 0.1.2 - build: pyhd8ed1ab_0 - subdir: noarch - noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_0.conda - sha256: 64073dfb6bb429d52fff30891877b48c7ec0f89625b1bf844905b66a81cce6e1 - md5: 776a8dd9e824f77abac30e6ef43a8f7a + size: 6425132 + timestamp: 1733434151515 +- conda: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_1.conda + sha256: 78c1bbe1723449c52b7a9df1af2ee5f005209f67e40b6e1d3c7619127c43b1c7 + md5: 592132998493b3ff25fd7479396e8351 depends: - - python >=3.6 + - python >=3.9 license: MIT license_family: MIT purls: - pkg:pypi/mdurl?source=hash-mapping - size: 14680 - timestamp: 1704317789138 -- kind: conda - name: minikanren - version: 1.0.3 - build: pyhd8ed1ab_0 - subdir: noarch - noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/minikanren-1.0.3-pyhd8ed1ab_0.tar.bz2 + size: 14465 + timestamp: 1733255681319 +- conda: https://conda.anaconda.org/conda-forge/noarch/minikanren-1.0.3-pyhd8ed1ab_0.tar.bz2 sha256: f0873262d9ea246dabc7e9c17190b9b04c1f973df1fd26426e14208c4ca62236 md5: 0726bd0e32c2edfa48dfbf744579520e depends: @@ -2896,13 +2355,7 @@ packages: - pkg:pypi/minikanren?source=hash-mapping size: 23617 timestamp: 1642650983911 -- kind: conda - name: mkl - version: 2024.2.2 - build: ha957f24_16 - build_number: 16 - subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/mkl-2024.2.2-ha957f24_16.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/mkl-2024.2.2-ha957f24_16.conda sha256: 77906b0acead8f86b489da46f53916e624897338770dbf70b04b8f673c9273c1 md5: 1459379c79dda834673426504d52b319 depends: @@ -2910,17 +2363,14 @@ packages: - _openmp_mutex >=4.5 - llvm-openmp >=19.1.2 - tbb 2021.* + arch: x86_64 + platform: linux license: LicenseRef-IntelSimplifiedSoftwareOct2022 license_family: Proprietary purls: [] size: 124718448 timestamp: 1730231808335 -- kind: conda - name: mkl-service - version: 2.4.2 - build: py312hf224ee7_0 - subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/mkl-service-2.4.2-py312hf224ee7_0.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/mkl-service-2.4.2-py312hf224ee7_0.conda sha256: 405d9f30aca24feb034c0474899613dade19adb52be39efd164d99030c9d3b84 md5: 7874d7976d44512eaccba994989017e3 depends: @@ -2929,16 +2379,17 @@ packages: - mkl >=2024.2.2,<2025.0a0 - python >=3.12,<3.13.0a0 - python_abi 3.12.* *_cp312 + arch: x86_64 + platform: linux license: BSD-3-Clause license_family: BSD purls: - pkg:pypi/mkl-service?source=hash-mapping size: 73420 timestamp: 1728843500808 -- kind: pypi +- pypi: https://files.pythonhosted.org/packages/6f/d3/1321715a95e856d4ef4fba24e4351cf5e4c89d459ad132a8cba5fe257d72/ml_dtypes-0.5.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl name: ml-dtypes version: 0.5.0 - url: https://files.pythonhosted.org/packages/6f/d3/1321715a95e856d4ef4fba24e4351cf5e4c89d459ad132a8cba5fe257d72/ml_dtypes-0.5.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl sha256: a38df8df61194aeaae1ab7579075779b4ad32cd1cffd012c28be227fa7f2a70a requires_dist: - numpy>=1.21 @@ -2952,12 +2403,7 @@ packages: - pylint>=2.6.0 ; extra == 'dev' - pyink ; extra == 'dev' requires_python: '>=3.9' -- kind: conda - name: msgpack-python - version: 1.1.0 - build: py312h68727a3_0 - subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/msgpack-python-1.1.0-py312h68727a3_0.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/msgpack-python-1.1.0-py312h68727a3_0.conda sha256: 4bc53333774dea1330643b7e23aa34fd6880275737fc2e07491795872d3af8dd md5: 5c9b020a3f86799cdc6115e55df06146 depends: @@ -2966,20 +2412,15 @@ packages: - libstdcxx >=13 - python >=3.12,<3.13.0a0 - python_abi 3.12.* *_cp312 + arch: x86_64 + platform: linux license: Apache-2.0 license_family: Apache purls: - pkg:pypi/msgpack?source=hash-mapping size: 105271 timestamp: 1725975182669 -- kind: conda - name: multipledispatch - version: 0.6.0 - build: pyhd8ed1ab_1 - build_number: 1 - subdir: noarch - noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/multipledispatch-0.6.0-pyhd8ed1ab_1.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/multipledispatch-0.6.0-pyhd8ed1ab_1.conda sha256: c6216a21154373b340c64f321f22fec51db4ee6156c2e642fa58368103ac5d09 md5: 121a57fce7fff0857ec70fa03200962f depends: @@ -2991,13 +2432,7 @@ packages: - pkg:pypi/multipledispatch?source=hash-mapping size: 17254 timestamp: 1721907640382 -- kind: conda - name: munkres - version: 1.1.4 - build: pyh9f0ad1d_0 - subdir: noarch - noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/munkres-1.1.4-pyh9f0ad1d_0.tar.bz2 +- conda: https://conda.anaconda.org/conda-forge/noarch/munkres-1.1.4-pyh9f0ad1d_0.tar.bz2 sha256: f86fb22b58e93d04b6f25e0d811b56797689d598788b59dcb47f59045b568306 md5: 2ba8498c1018c1e9c61eb99b973dfe19 depends: @@ -3008,45 +2443,30 @@ packages: - pkg:pypi/munkres?source=hash-mapping size: 12452 timestamp: 1600387789153 -- kind: conda - name: ncurses - version: '6.5' - build: he02047a_1 - build_number: 1 - subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.5-he02047a_1.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.5-he02047a_1.conda sha256: 6a1d5d8634c1a07913f1c525db6455918cbc589d745fac46d9d6e30340c8731a md5: 70caf8bb6cf39a0b6b7efc885f51c0fe depends: - __glibc >=2.17,<3.0.a0 - libgcc-ng >=12 + arch: x86_64 + platform: linux license: X11 AND BSD-3-Clause purls: [] size: 889086 timestamp: 1724658547447 -- kind: conda - name: nest-asyncio - version: 1.6.0 - build: pyhd8ed1ab_0 - subdir: noarch - noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/nest-asyncio-1.6.0-pyhd8ed1ab_0.conda - sha256: 30db21d1f7e59b3408b831a7e0417b83b53ee6223afae56482c5f26da3ceb49a - md5: 6598c056f64dc8800d40add25e4e2c34 +- conda: https://conda.anaconda.org/conda-forge/noarch/nest-asyncio-1.6.0-pyhd8ed1ab_1.conda + sha256: bb7b21d7fd0445ddc0631f64e66d91a179de4ba920b8381f29b9d006a42788c0 + md5: 598fd7d4d0de2455fb74f56063969a97 depends: - - python >=3.5 + - python >=3.9 license: BSD-2-Clause license_family: BSD purls: - pkg:pypi/nest-asyncio?source=hash-mapping - size: 11638 - timestamp: 1705850780510 -- kind: conda - name: numba - version: 0.60.0 - build: py312h83e6fd3_0 - subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/numba-0.60.0-py312h83e6fd3_0.conda + size: 11543 + timestamp: 1733325673691 +- conda: https://conda.anaconda.org/conda-forge/linux-64/numba-0.60.0-py312h83e6fd3_0.conda sha256: af31c1989ddf1cd46f073f32a8150274c606fdc9fced0e4f5aaf0571b97bd09f md5: e064ca33edf91ac117236c4b5dee207a depends: @@ -3065,20 +2485,17 @@ packages: - scipy >=1.0 - libopenblas !=0.3.6 - cudatoolkit >=11.2 + arch: x86_64 + platform: linux license: BSD-2-Clause license_family: BSD purls: - pkg:pypi/numba?source=hash-mapping size: 5695278 timestamp: 1718888170104 -- kind: conda - name: numcodecs - version: 0.14.0 - build: py312hf9745cd_0 - subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/numcodecs-0.14.0-py312hf9745cd_0.conda - sha256: 447f1d54b5e46d6d8ada792a086b04c71ccfd253a3aea5c32cdbc4ccdeda17f7 - md5: a27a76178d062667f3f01d6f70d2d4a3 +- conda: https://conda.anaconda.org/conda-forge/linux-64/numcodecs-0.14.1-py312hf9745cd_0.conda + sha256: f31b39d05eb4c99f9611578ee045ebb0764aa1cc9fa700813362899f11161bc2 + md5: eff78da3a99c42c0950cfd25eb996c20 depends: - __glibc >=2.17,<3.0.a0 - libgcc >=13 @@ -3088,18 +2505,15 @@ packages: - numpy >=1.24 - python >=3.12,<3.13.0a0 - python_abi 3.12.* *_cp312 + arch: x86_64 + platform: linux license: MIT license_family: MIT purls: - pkg:pypi/numcodecs?source=hash-mapping - size: 847070 - timestamp: 1731918955687 -- kind: conda - name: numpy - version: 1.26.4 - build: py312heda63a1_0 - subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/numpy-1.26.4-py312heda63a1_0.conda + size: 841354 + timestamp: 1732243783870 +- conda: https://conda.anaconda.org/conda-forge/linux-64/numpy-1.26.4-py312heda63a1_0.conda sha256: fe3459c75cf84dcef6ef14efcc4adb0ade66038ddd27cadb894f34f4797687d8 md5: d8285bea2a350f63fab23bf460221f3f depends: @@ -3112,144 +2526,136 @@ packages: - python_abi 3.12.* *_cp312 constrains: - numpy-base <0a0 + arch: x86_64 + platform: linux license: BSD-3-Clause license_family: BSD purls: - pkg:pypi/numpy?source=hash-mapping size: 7484186 timestamp: 1707225809722 -- kind: pypi +- pypi: https://files.pythonhosted.org/packages/af/eb/ff4b8c503fa1f1796679dce648854d58751982426e4e4b37d6fce49d259c/nvidia_cublas_cu12-12.6.4.1-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl name: nvidia-cublas-cu12 - version: 12.6.3.3 - url: https://files.pythonhosted.org/packages/f3/e7/c186a31c234fce776436753bfef4807df7f9b4cb3eeff358fcfcbf64b547/nvidia_cublas_cu12-12.6.3.3-py3-none-manylinux2014_x86_64.whl - sha256: f33fb68e101d99470c82d17f92a0dd9f74de2a21685c217f4716cdd63b1316eb + version: 12.6.4.1 + sha256: 08ed2686e9875d01b58e3cb379c6896df8e76c75e0d4a7f7dace3d7b6d9ef8eb requires_python: '>=3' -- kind: pypi +- pypi: https://files.pythonhosted.org/packages/49/60/7b6497946d74bcf1de852a21824d63baad12cd417db4195fc1bfe59db953/nvidia_cuda_cupti_cu12-12.6.80-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl name: nvidia-cuda-cupti-cu12 version: 12.6.80 - url: https://files.pythonhosted.org/packages/a5/24/120ee57b218d9952c379d1e026c4479c9ece9997a4fb46303611ee48f038/nvidia_cuda_cupti_cu12-12.6.80-py3-none-manylinux2014_x86_64.whl - sha256: a3eff6cdfcc6a4c35db968a06fcadb061cbc7d6dde548609a941ff8701b98b73 + sha256: 6768bad6cab4f19e8292125e5f1ac8aa7d1718704012a0e3272a6f61c4bce132 requires_python: '>=3' -- kind: pypi +- pypi: https://files.pythonhosted.org/packages/25/1f/faf9b791027ebd6354be68700da3c3d8a3b3db3bdcf2f8070f2e6871a7f1/nvidia_cuda_nvcc_cu12-12.6.85-py3-none-manylinux1_x86_64.manylinux_2_5_x86_64.whl name: nvidia-cuda-nvcc-cu12 - version: 12.6.77 - url: https://files.pythonhosted.org/packages/62/8f/cd3032281ba7bb531fe3159337af00c5c805fd6a31dc700f0715c8748c8c/nvidia_cuda_nvcc_cu12-12.6.77-py3-none-manylinux2014_x86_64.whl - sha256: b66bb5dd6b8ae62262586691977d3b4a425e91db61b4b9bc2f6b42bcd4154b96 + version: 12.6.85 + sha256: d75d9d74599f4d7c0865df19ed21b739e6cb77a6497a3f73d6f61e8038a765e4 requires_python: '>=3' -- kind: pypi +- pypi: https://files.pythonhosted.org/packages/e1/23/e717c5ac26d26cf39a27fbc076240fad2e3b817e5889d671b67f4f9f49c5/nvidia_cuda_runtime_cu12-12.6.77-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl name: nvidia-cuda-runtime-cu12 version: 12.6.77 - url: https://files.pythonhosted.org/packages/f0/62/65c05e161eeddbafeca24dc461f47de550d9fa8a7e04eb213e32b55cfd99/nvidia_cuda_runtime_cu12-12.6.77-py3-none-manylinux2014_x86_64.whl - sha256: a84d15d5e1da416dd4774cb42edf5e954a3e60cc945698dc1d5be02321c44dc8 + sha256: ba3b56a4f896141e25e19ab287cd71e52a6a0f4b29d0d31609f60e3b4d5219b7 requires_python: '>=3' -- kind: pypi +- pypi: https://files.pythonhosted.org/packages/67/4c/0f18ddce75f2c17cf028d16e067c07f11c421c981b8c2a45c99bc6169af6/nvidia_cudnn_cu12-9.6.0.74-py3-none-manylinux_2_27_x86_64.whl name: nvidia-cudnn-cu12 - version: 9.5.1.17 - url: https://files.pythonhosted.org/packages/2a/78/4535c9c7f859a64781e43c969a3a7e84c54634e319a996d43ef32ce46f83/nvidia_cudnn_cu12-9.5.1.17-py3-none-manylinux_2_28_x86_64.whl - sha256: 30ac3869f6db17d170e0e556dd6cc5eee02647abc31ca856634d5a40f82c15b2 + version: 9.6.0.74 + sha256: cb700ea574ba8ffdbf9381fed2cdfa0b1847852c3811fb5f0d998d8d47a1cf1a requires_dist: - nvidia-cublas-cu12 requires_python: '>=3' -- kind: pypi +- pypi: https://files.pythonhosted.org/packages/8f/16/73727675941ab8e6ffd86ca3a4b7b47065edcca7a997920b831f8147c99d/nvidia_cufft_cu12-11.3.0.4-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl name: nvidia-cufft-cu12 version: 11.3.0.4 - url: https://files.pythonhosted.org/packages/60/de/99ec247a07ea40c969d904fc14f3a356b3e2a704121675b75c366b694ee1/nvidia_cufft_cu12-11.3.0.4-py3-none-manylinux2014_x86_64.whl - sha256: 768160ac89f6f7b459bee747e8d175dbf53619cfe74b2a5636264163138013ca + sha256: ccba62eb9cef5559abd5e0d54ceed2d9934030f51163df018532142a8ec533e5 requires_dist: - nvidia-nvjitlink-cu12 requires_python: '>=3' -- kind: pypi +- pypi: https://files.pythonhosted.org/packages/f0/6e/c2cf12c9ff8b872e92b4a5740701e51ff17689c4d726fca91875b07f655d/nvidia_cusolver_cu12-11.7.1.2-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl name: nvidia-cusolver-cu12 version: 11.7.1.2 - url: https://files.pythonhosted.org/packages/9f/81/baba53585da791d043c10084cf9553e074548408e04ae884cfe9193bd484/nvidia_cusolver_cu12-11.7.1.2-py3-none-manylinux2014_x86_64.whl - sha256: 6cf28f17f64107a0c4d7802be5ff5537b2130bfc112f25d5a30df227058ca0e6 + sha256: e9e49843a7707e42022babb9bcfa33c29857a93b88020c4e4434656a655b698c requires_dist: - nvidia-cublas-cu12 - nvidia-nvjitlink-cu12 - nvidia-cusparse-cu12 requires_python: '>=3' -- kind: pypi +- pypi: https://files.pythonhosted.org/packages/06/1e/b8b7c2f4099a37b96af5c9bb158632ea9e5d9d27d7391d7eb8fc45236674/nvidia_cusparse_cu12-12.5.4.2-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl name: nvidia-cusparse-cu12 version: 12.5.4.2 - url: https://files.pythonhosted.org/packages/43/ac/64c4316ba163e8217a99680c7605f779accffc6a4bcd0c778c12948d3707/nvidia_cusparse_cu12-12.5.4.2-py3-none-manylinux2014_x86_64.whl - sha256: 23749a6571191a215cb74d1cdbff4a86e7b19f1200c071b3fcf844a5bea23a2f + sha256: 7556d9eca156e18184b94947ade0fba5bb47d69cec46bf8660fd2c71a4b48b73 requires_dist: - nvidia-nvjitlink-cu12 requires_python: '>=3' -- kind: pypi +- pypi: https://files.pythonhosted.org/packages/ed/1f/6482380ec8dcec4894e7503490fc536d846b0d59694acad9cf99f27d0e7d/nvidia_nccl_cu12-2.23.4-py3-none-manylinux2014_x86_64.whl name: nvidia-nccl-cu12 version: 2.23.4 - url: https://files.pythonhosted.org/packages/ed/1f/6482380ec8dcec4894e7503490fc536d846b0d59694acad9cf99f27d0e7d/nvidia_nccl_cu12-2.23.4-py3-none-manylinux2014_x86_64.whl sha256: b097258d9aab2fa9f686e33c6fe40ae57b27df60cedbd15d139701bb5509e0c1 requires_python: '>=3' -- kind: pypi +- pypi: https://files.pythonhosted.org/packages/9d/d7/c5383e47c7e9bf1c99d5bd2a8c935af2b6d705ad831a7ec5c97db4d82f4f/nvidia_nvjitlink_cu12-12.6.85-py3-none-manylinux2010_x86_64.manylinux_2_12_x86_64.whl name: nvidia-nvjitlink-cu12 - version: 12.6.77 - url: https://files.pythonhosted.org/packages/fe/e4/486de766851d58699bcfeb3ba6a3beb4d89c3809f75b9d423b9508a8760f/nvidia_nvjitlink_cu12-12.6.77-py3-none-manylinux2014_x86_64.whl - sha256: 9ae346d16203ae4ea513be416495167a0101d33d2d14935aa9c1829a3fb45142 + version: 12.6.85 + sha256: eedc36df9e88b682efe4309aa16b5b4e78c2407eac59e8c10a6a47535164369a requires_python: '>=3' -- kind: conda - name: openblas - version: 0.3.28 - build: pthreads_h6ec200e_1 - build_number: 1 - subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/openblas-0.3.28-pthreads_h6ec200e_1.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/objprint-0.3.0-pyhd8ed1ab_0.conda + sha256: ff58f788e9e8c74a6eb2f194b4c18e5bc39a0000172f0b1ec016afae637961f2 + md5: 8f8399ecb94bd96e0d73e02053525808 + depends: + - python >=3.9 + license: Apache-2.0 + license_family: APACHE + purls: + - pkg:pypi/objprint?source=hash-mapping + size: 38864 + timestamp: 1731340445369 +- conda: https://conda.anaconda.org/conda-forge/linux-64/openblas-0.3.28-pthreads_h6ec200e_1.conda sha256: c558f49a262f43b0c5b6f9feb75b631d0b1eeba53579fd2bbce0df37f1884ef0 md5: 8fe5d50db07e92519cc639cb0aef9b1b depends: - libopenblas 0.3.28 pthreads_h94d23a6_1 + arch: x86_64 + platform: linux license: BSD-3-Clause license_family: BSD purls: [] size: 5727592 timestamp: 1730772687576 -- kind: conda - name: openjpeg - version: 2.5.2 - build: h488ebb8_0 - subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/openjpeg-2.5.2-h488ebb8_0.conda - sha256: 5600a0b82df042bd27d01e4e687187411561dfc11cc05143a08ce29b64bf2af2 - md5: 7f2e286780f072ed750df46dc2631138 +- conda: https://conda.anaconda.org/conda-forge/linux-64/openjpeg-2.5.3-h5fbd93e_0.conda + sha256: 5bee706ea5ba453ed7fd9da7da8380dd88b865c8d30b5aaec14d2b6dd32dbc39 + md5: 9e5816bc95d285c115a3ebc2f8563564 depends: - - libgcc-ng >=12 - - libpng >=1.6.43,<1.7.0a0 - - libstdcxx-ng >=12 - - libtiff >=4.6.0,<4.8.0a0 - - libzlib >=1.2.13,<2.0.0a0 + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - libpng >=1.6.44,<1.7.0a0 + - libstdcxx >=13 + - libtiff >=4.7.0,<4.8.0a0 + - libzlib >=1.3.1,<2.0a0 + arch: x86_64 + platform: linux license: BSD-2-Clause license_family: BSD purls: [] - size: 341592 - timestamp: 1709159244431 -- kind: conda - name: openssl - version: 3.4.0 - build: hb9d3cd8_0 - subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.4.0-hb9d3cd8_0.conda + size: 342988 + timestamp: 1733816638720 +- conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.4.0-hb9d3cd8_0.conda sha256: 814b9dff1847b132c676ee6cc1a8cb2d427320779b93e1b6d76552275c128705 md5: 23cc74f77eb99315c0360ec3533147a9 depends: - __glibc >=2.17,<3.0.a0 - ca-certificates - libgcc >=13 + arch: x86_64 + platform: linux license: Apache-2.0 license_family: Apache purls: [] size: 2947466 timestamp: 1731377666602 -- kind: pypi +- pypi: https://files.pythonhosted.org/packages/23/cd/066e86230ae37ed0be70aae89aabf03ca8d9f39c8aea0dec8029455b5540/opt_einsum-3.4.0-py3-none-any.whl name: opt-einsum version: 3.4.0 - url: https://files.pythonhosted.org/packages/23/cd/066e86230ae37ed0be70aae89aabf03ca8d9f39c8aea0dec8029455b5540/opt_einsum-3.4.0-py3-none-any.whl sha256: 69bb92469f86a1565195ece4ac0323943e83477171b91d24c35afe028a90d7cd requires_python: '>=3.8' -- kind: pypi +- pypi: https://files.pythonhosted.org/packages/5c/24/28d0bb21600a78e46754947333ec9a297044af884d360092eb8561575fe9/optax-0.2.4-py3-none-any.whl name: optax version: 0.2.4 - url: https://files.pythonhosted.org/packages/5c/24/28d0bb21600a78e46754947333ec9a297044af884d360092eb8561575fe9/optax-0.2.4-py3-none-any.whl sha256: db35c04e50b52596662efb002334de08c2a0a74971e4da33f467e84fac08886a requires_dist: - absl-py>=0.7.1 @@ -3286,30 +2692,36 @@ packages: - scipy>=1.7.1 ; extra == 'test' - scikit-learn ; extra == 'test' requires_python: '>=3.9' -- kind: conda - name: packaging - version: '24.2' - build: pyhd8ed1ab_0 - subdir: noarch - noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/packaging-24.2-pyhd8ed1ab_0.conda - sha256: 0f8273bf66c2a5c1de72312a509deae07f163bb0ae8de8273c52e6fe945a0850 - md5: c16469afe1ec91aaafcf4bea966c0465 +- conda: https://conda.anaconda.org/conda-forge/linux-64/orjson-3.10.12-py312h12e396e_0.conda + sha256: e765f9c8296fd5fc53bf55b6929f8f8e125c16ef04d6ab350af63ae103549357 + md5: d7472299039651dfc65ba320192fe666 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + constrains: + - __glibc >=2.17 + arch: x86_64 + platform: linux + license: Apache-2.0 + license_family: Apache + purls: + - pkg:pypi/orjson?source=hash-mapping + size: 305862 + timestamp: 1732413388776 +- conda: https://conda.anaconda.org/conda-forge/noarch/packaging-24.2-pyhd8ed1ab_2.conda + sha256: da157b19bcd398b9804c5c52fc000fcb8ab0525bdb9c70f95beaa0bb42f85af1 + md5: 3bfed7e6228ebf2f7b9eaa47f1b4e2aa depends: - python >=3.8 license: Apache-2.0 license_family: APACHE purls: - pkg:pypi/packaging?source=hash-mapping - size: 60345 - timestamp: 1731457074006 -- kind: conda - name: pandas - version: 2.2.3 - build: py312hf9745cd_1 - build_number: 1 - subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/pandas-2.2.3-py312hf9745cd_1.conda + size: 60164 + timestamp: 1733203368787 +- conda: https://conda.anaconda.org/conda-forge/linux-64/pandas-2.2.3-py312hf9745cd_1.conda sha256: ad275a83bfebfa8a8fee9b0569aaf6f513ada6a246b2f5d5b85903d8ca61887e md5: 8bce4f6caaf8c5448c7ac86d87e26b4b depends: @@ -3323,39 +2735,38 @@ packages: - python-tzdata >=2022a - python_abi 3.12.* *_cp312 - pytz >=2020.1,<2024.2 + arch: x86_64 + platform: linux license: BSD-3-Clause license_family: BSD purls: - pkg:pypi/pandas?source=hash-mapping size: 15436913 timestamp: 1726879054912 -- kind: conda - name: pango - version: 1.54.0 - build: h4c5309f_1 - build_number: 1 - subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/pango-1.54.0-h4c5309f_1.conda - sha256: d362237be82d5a0d532fe66ec8d68018c3b2a9705bad6d73c2b63dae2970da02 - md5: 7df02e445367703cd87a574046e3a6f0 +- conda: https://conda.anaconda.org/conda-forge/linux-64/pango-1.54.0-h3a902e7_3.conda + sha256: b04f43a7968cedb93cc0b52854f2cac21d8b8ac150b40305865d9ff3c3d4da72 + md5: 8c12547e7b143fb70873fb732a4056b9 depends: - - cairo >=1.18.0,<2.0a0 - - fontconfig >=2.14.2,<3.0a0 + - __glibc >=2.17,<3.0.a0 + - cairo >=1.18.2,<2.0a0 + - fontconfig >=2.15.0,<3.0a0 - fonts-conda-ecosystem - freetype >=2.12.1,<3.0a0 - fribidi >=1.0.10,<2.0a0 - harfbuzz >=9.0.0,<10.0a0 - - libgcc-ng >=12 - - libglib >=2.80.2,<3.0a0 - - libpng >=1.6.43,<1.7.0a0 + - libexpat >=2.6.4,<3.0a0 + - libgcc >=13 + - libglib >=2.82.2,<3.0a0 + - libpng >=1.6.44,<1.7.0a0 + arch: x86_64 + platform: linux license: LGPL-2.1-or-later purls: [] - size: 447117 - timestamp: 1719839527713 -- kind: pypi + size: 447446 + timestamp: 1733761801816 +- pypi: https://files.pythonhosted.org/packages/20/f8/7b1f5b84f84e43face7349ac2df23f0f75d36b5b4a1c1c0305edce82bcc8/paramax-0.0.0-py3-none-any.whl name: paramax version: 0.0.0 - url: https://files.pythonhosted.org/packages/20/f8/7b1f5b84f84e43face7349ac2df23f0f75d36b5b4a1c1c0305edce82bcc8/paramax-0.0.0-py3-none-any.whl sha256: 02d0120e626de300680a1661b138feeba14b418031d6e976fd679db5fd03509a requires_dist: - equinox @@ -3369,32 +2780,20 @@ packages: - sphinx-book-theme ; extra == 'dev' - sphinx-copybutton ; extra == 'dev' requires_python: '>=3.10' -- kind: conda - name: parso - version: 0.8.4 - build: pyhd8ed1ab_0 - subdir: noarch - noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/parso-0.8.4-pyhd8ed1ab_0.conda - sha256: bfe404eebb930cc41782d34f8fc04c0388ea692eeebe2c5fc28df8ec8d4d61ae - md5: 81534b420deb77da8833f2289b8d47ac +- conda: https://conda.anaconda.org/conda-forge/noarch/parso-0.8.4-pyhd8ed1ab_1.conda + sha256: 17131120c10401a99205fc6fe436e7903c0fa092f1b3e80452927ab377239bcc + md5: 5c092057b6badd30f75b06244ecd01c9 depends: - - python >=3.6 + - python >=3.9 license: MIT license_family: MIT purls: - pkg:pypi/parso?source=hash-mapping - size: 75191 - timestamp: 1712320447201 -- kind: conda - name: patsy - version: 1.0.1 - build: pyhff2d567_0 - subdir: noarch - noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/patsy-1.0.1-pyhff2d567_0.conda - sha256: f1ec4bb1e70f18518f70df64728b162d0d5ef3c0ed68296d913c27f5bab7a84b - md5: a97b9c7586cedcf4a0a158ef3479975c + size: 75295 + timestamp: 1733271352153 +- conda: https://conda.anaconda.org/conda-forge/noarch/patsy-1.0.1-pyhd8ed1ab_1.conda + sha256: ab52916f056b435757d46d4ce0a93fd73af47df9c11fd72b74cc4b7e1caca563 + md5: ee23fabfd0a8c6b8d6f3729b47b2859d depends: - numpy >=1.4.0 - python >=3.9 @@ -3402,15 +2801,9 @@ packages: license_family: BSD purls: - pkg:pypi/patsy?source=hash-mapping - size: 186599 - timestamp: 1731432296481 -- kind: conda - name: pcre2 - version: '10.44' - build: hba22ea6_2 - build_number: 2 - subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/pcre2-10.44-hba22ea6_2.conda + size: 186594 + timestamp: 1733792482894 +- conda: https://conda.anaconda.org/conda-forge/linux-64/pcre2-10.44-hba22ea6_2.conda sha256: 1087716b399dab91cc9511d6499036ccdc53eb29a288bebcb19cf465c51d7c0d md5: df359c09c41cd186fffb93a2d87aa6f5 depends: @@ -3418,52 +2811,36 @@ packages: - bzip2 >=1.0.8,<2.0a0 - libgcc-ng >=12 - libzlib >=1.3.1,<2.0a0 + arch: x86_64 + platform: linux license: BSD-3-Clause license_family: BSD purls: [] size: 952308 timestamp: 1723488734144 -- kind: conda - name: pexpect - version: 4.9.0 - build: pyhd8ed1ab_0 - subdir: noarch - noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/pexpect-4.9.0-pyhd8ed1ab_0.conda - sha256: 90a09d134a4a43911b716d4d6eb9d169238aff2349056f7323d9db613812667e - md5: 629f3203c99b32e0988910c93e77f3b6 +- conda: https://conda.anaconda.org/conda-forge/noarch/pexpect-4.9.0-pyhd8ed1ab_1.conda + sha256: 202af1de83b585d36445dc1fda94266697341994d1a3328fabde4989e1b3d07a + md5: d0d408b1f18883a944376da5cf8101ea depends: - ptyprocess >=0.5 - - python >=3.7 + - python >=3.9 license: ISC purls: - pkg:pypi/pexpect?source=hash-mapping - size: 53600 - timestamp: 1706113273252 -- kind: conda - name: pickleshare - version: 0.7.5 - build: py_1003 - build_number: 1003 - subdir: noarch - noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/pickleshare-0.7.5-py_1003.tar.bz2 - sha256: a1ed1a094dd0d1b94a09ed85c283a0eb28943f2e6f22161fb45e128d35229738 - md5: 415f0ebb6198cc2801c73438a9fb5761 + size: 53561 + timestamp: 1733302019362 +- conda: https://conda.anaconda.org/conda-forge/noarch/pickleshare-0.7.5-pyhd8ed1ab_1004.conda + sha256: e2ac3d66c367dada209fc6da43e645672364b9fd5f9d28b9f016e24b81af475b + md5: 11a9d1d09a3615fc07c3faf79bc0b943 depends: - - python >=3 + - python >=3.9 license: MIT license_family: MIT purls: - pkg:pypi/pickleshare?source=hash-mapping - size: 9332 - timestamp: 1602536313357 -- kind: conda - name: pillow - version: 11.0.0 - build: py312h7b63e92_0 - subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/pillow-11.0.0-py312h7b63e92_0.conda + size: 11748 + timestamp: 1733327448200 +- conda: https://conda.anaconda.org/conda-forge/linux-64/pillow-11.0.0-py312h7b63e92_0.conda sha256: 13a464bea02c0df0199c20ef6bad24a6bc336aaf55bf8d6a133d0fe664463224 md5: 385f46a4df6f97892503a841121a9acf depends: @@ -3480,18 +2857,14 @@ packages: - python >=3.12,<3.13.0a0 - python_abi 3.12.* *_cp312 - tk >=8.6.13,<8.7.0a0 + arch: x86_64 + platform: linux license: HPND purls: - pkg:pypi/pillow?source=hash-mapping size: 41948418 timestamp: 1729065846594 -- kind: conda - name: pip - version: 24.3.1 - build: pyh8b19718_0 - subdir: noarch - noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/pip-24.3.1-pyh8b19718_0.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/pip-24.3.1-pyh8b19718_0.conda sha256: 499313e72e20225f84c2e9690bbaf5b952c8d7e0bf34b728278538f766b81628 md5: 5dd546fe99b44fda83963d15f84263b7 depends: @@ -3504,65 +2877,45 @@ packages: - pkg:pypi/pip?source=hash-mapping size: 1243168 timestamp: 1730203795600 -- kind: conda - name: pixman - version: 0.43.2 - build: h59595ed_0 - subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/pixman-0.43.2-h59595ed_0.conda - sha256: 366d28e2a0a191d6c535e234741e0cd1d94d713f76073d8af4a5ccb2a266121e - md5: 71004cbf7924e19c02746ccde9fd7123 +- conda: https://conda.anaconda.org/conda-forge/linux-64/pixman-0.44.2-h29eaf8c_0.conda + sha256: 747c58db800d5583fee78e76240bf89cbaeedf7ab1ef339c2990602332b9c4be + md5: 5e2a7acfa2c24188af39e7944e1b3604 depends: - - libgcc-ng >=12 - - libstdcxx-ng >=12 + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - libstdcxx >=13 + arch: x86_64 + platform: linux license: MIT license_family: MIT purls: [] - size: 386826 - timestamp: 1706549500138 -- kind: conda - name: platformdirs - version: 4.3.6 - build: pyhd8ed1ab_0 - subdir: noarch - noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.3.6-pyhd8ed1ab_0.conda - sha256: c81bdeadc4adcda216b2c7b373f0335f5c78cc480d1d55d10f21823590d7e46f - md5: fd8f2b18b65bbf62e8f653100690c8d2 + size: 381072 + timestamp: 1733698987122 +- conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.3.6-pyhd8ed1ab_1.conda + sha256: bb50f6499e8bc1d1a26f17716c97984671121608dc0c3ecd34858112bce59a27 + md5: 577852c7e53901ddccc7e6a9959ddebe depends: - - python >=3.8 + - python >=3.9 license: MIT license_family: MIT purls: - pkg:pypi/platformdirs?source=hash-mapping - size: 20625 - timestamp: 1726613611845 -- kind: conda - name: pluggy - version: 1.5.0 - build: pyhd8ed1ab_0 - subdir: noarch - noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.5.0-pyhd8ed1ab_0.conda - sha256: 33eaa3359948a260ebccf9cdc2fd862cea5a6029783289e13602d8e634cd9a26 - md5: d3483c8fc2dc2cc3f5cf43e26d60cabf + size: 20448 + timestamp: 1733232756001 +- conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.5.0-pyhd8ed1ab_1.conda + sha256: 122433fc5318816b8c69283aaf267c73d87aa2d09ce39f64c9805c9a3b264819 + md5: e9dcbce5f45f9ee500e728ae58b605b6 depends: - - python >=3.8 + - python >=3.9 license: MIT license_family: MIT purls: - pkg:pypi/pluggy?source=hash-mapping - size: 23815 - timestamp: 1713667175451 -- kind: conda - name: polars - version: 1.12.0 - build: py312hfe7c9be_1 - build_number: 1 - subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/polars-1.12.0-py312hfe7c9be_1.conda - sha256: 8aa15e19d3446bba7a245beed39f5a856a841008861d0ed35e0a6988e99c1adc - md5: 0c0e15ac8645e65b7f5afa55046a7c48 + size: 23595 + timestamp: 1733222855563 +- conda: https://conda.anaconda.org/conda-forge/linux-64/polars-1.17.1-py312hda0fa55_0.conda + sha256: 0ffd14a4f73ee1b24b2342a84295f8fb5f1848711865d55676515a1aac66f554 + md5: 7ac74b8f85b43224508108f850617dad depends: - __glibc >=2.17,<3.0.a0 - libgcc >=13 @@ -3572,45 +2925,35 @@ packages: - python_abi 3.12.* *_cp312 constrains: - __glibc >=2.17 + arch: x86_64 + platform: linux license: MIT license_family: MIT purls: - pkg:pypi/polars?source=hash-mapping - size: 22824172 - timestamp: 1731964142746 -- kind: pypi + size: 25634166 + timestamp: 1733806684601 +- pypi: https://files.pythonhosted.org/packages/8f/4d/b72e0782abec07f3d8dabf24cf12673d26b173af2046eb4e67365c776ccf/posteriordb-0.2.0-py3-none-any.whl name: posteriordb version: 0.2.0 - url: https://files.pythonhosted.org/packages/8f/4d/b72e0782abec07f3d8dabf24cf12673d26b173af2046eb4e67365c776ccf/posteriordb-0.2.0-py3-none-any.whl sha256: b6d6f3a349d34db6d4a68da899c818a95e5824c5e23824fc0ebe422f4bd6bac1 requires_dist: - requests -- kind: conda - name: prompt-toolkit - version: 3.0.48 - build: pyha770c72_0 - subdir: noarch - noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/prompt-toolkit-3.0.48-pyha770c72_0.conda - sha256: 44e4e6108d425a666856a52d1523e5d70890256a8920bb0dcd3d55cc750f3207 - md5: 4c05134c48b6a74f33bbb9938e4a115e +- conda: https://conda.anaconda.org/conda-forge/noarch/prompt-toolkit-3.0.48-pyha770c72_1.conda + sha256: 79fb7d1eeb490d4cc1b79f781bb59fe302ae38cf0a30907ecde75a7d399796cc + md5: 368d4aa48358439e07a97ae237491785 depends: - - python >=3.7 + - python >=3.9 - wcwidth constrains: - prompt_toolkit 3.0.48 license: BSD-3-Clause license_family: BSD purls: - - pkg:pypi/prompt-toolkit?source=hash-mapping - size: 270271 - timestamp: 1727341744544 -- kind: conda - name: psutil - version: 6.1.0 - build: py312h66e93f0_0 - subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/psutil-6.1.0-py312h66e93f0_0.conda + - pkg:pypi/prompt-toolkit?source=compressed-mapping + size: 269848 + timestamp: 1733302634979 +- conda: https://conda.anaconda.org/conda-forge/linux-64/psutil-6.1.0-py312h66e93f0_0.conda sha256: 0f309b435174e037d5cfe5ed26c1c5ad8152c68cfe61af17709ec31ec3d9f096 md5: 0524eb91d3d78d76d671c6e3cd7cee82 depends: @@ -3618,111 +2961,80 @@ packages: - libgcc >=13 - python >=3.12,<3.13.0a0 - python_abi 3.12.* *_cp312 + arch: x86_64 + platform: linux license: BSD-3-Clause license_family: BSD purls: - pkg:pypi/psutil?source=hash-mapping size: 488462 timestamp: 1729847159916 -- kind: conda - name: pthread-stubs - version: '0.4' - build: hb9d3cd8_1002 - build_number: 1002 - subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/pthread-stubs-0.4-hb9d3cd8_1002.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/pthread-stubs-0.4-hb9d3cd8_1002.conda sha256: 9c88f8c64590e9567c6c80823f0328e58d3b1efb0e1c539c0315ceca764e0973 md5: b3c17d95b5a10c6e64a21fa17573e70e depends: - __glibc >=2.17,<3.0.a0 - libgcc >=13 + arch: x86_64 + platform: linux license: MIT license_family: MIT purls: [] size: 8252 timestamp: 1726802366959 -- kind: conda - name: ptyprocess - version: 0.7.0 - build: pyhd3deb0d_0 - subdir: noarch - noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/ptyprocess-0.7.0-pyhd3deb0d_0.tar.bz2 - sha256: fb31e006a25eb2e18f3440eb8d17be44c8ccfae559499199f73584566d0a444a - md5: 359eeb6536da0e687af562ed265ec263 +- conda: https://conda.anaconda.org/conda-forge/noarch/ptyprocess-0.7.0-pyhd8ed1ab_1.conda + sha256: a7713dfe30faf17508ec359e0bc7e0983f5d94682492469bd462cdaae9c64d83 + md5: 7d9daffbb8d8e0af0f769dbbcd173a54 depends: - - python + - python >=3.9 license: ISC purls: - pkg:pypi/ptyprocess?source=hash-mapping - size: 16546 - timestamp: 1609419417991 -- kind: conda - name: pure_eval - version: 0.2.3 - build: pyhd8ed1ab_0 - subdir: noarch - noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/pure_eval-0.2.3-pyhd8ed1ab_0.conda - sha256: dcfcb3cee1ae0a89729601582cc3edea20ba13c9493967a03a693c67567af0c8 - md5: 0f051f09d992e0d08941706ad519ee0e + size: 19457 + timestamp: 1733302371990 +- conda: https://conda.anaconda.org/conda-forge/noarch/pure_eval-0.2.3-pyhd8ed1ab_1.conda + sha256: 71bd24600d14bb171a6321d523486f6a06f855e75e547fa0cb2a0953b02047f0 + md5: 3bfdfb8dbcdc4af1ae3f9a8eb3948f04 depends: - - python >=3.5 + - python >=3.9 license: MIT license_family: MIT purls: - pkg:pypi/pure-eval?source=hash-mapping - size: 16551 - timestamp: 1721585805256 -- kind: conda - name: pygments - version: 2.18.0 - build: pyhd8ed1ab_0 - subdir: noarch - noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/pygments-2.18.0-pyhd8ed1ab_0.conda - sha256: 78267adf4e76d0d64ea2ffab008c501156c108bb08fecb703816fb63e279780b - md5: b7f5c092b8f9800150d998a71b76d5a1 + size: 16668 + timestamp: 1733569518868 +- conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.18.0-pyhd8ed1ab_1.conda + sha256: 0d6133545f268b2b89c2617c196fc791f365b538d4057ecd636d658c3b1e885d + md5: b38dc0206e2a530e5c2cf11dc086b31a depends: - - python >=3.8 + - python >=3.9 license: BSD-2-Clause license_family: BSD purls: - pkg:pypi/pygments?source=hash-mapping - size: 879295 - timestamp: 1714846885370 -- kind: conda - name: pymc - version: 5.18.1 - build: hd8ed1ab_0 - subdir: noarch + size: 876700 + timestamp: 1733221731178 +- conda: https://conda.anaconda.org/conda-forge/noarch/pymc-5.19.1-hd8ed1ab_0.conda noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/pymc-5.18.1-hd8ed1ab_0.conda - sha256: 8f2906c978c820975f6840979758bbc90a331374ab2de03df3d19443b36b5c21 - md5: a1b8f92315733a0f3b4e64c6e9aa8396 + sha256: 4d157090014b3890a4feb1652ab07c8ef839cd2b063f58bf6cf94c4229735100 + md5: 1759ccce965ff0a1f8f1c82dc3cb0866 depends: - - pymc-base 5.18.1 pyhd8ed1ab_0 + - pymc-base 5.19.1 pyhd8ed1ab_0 - pytensor - python-graphviz license: Apache-2.0 license_family: Apache purls: [] - size: 11601 - timestamp: 1731621750738 -- kind: conda - name: pymc-base - version: 5.18.1 - build: pyhd8ed1ab_0 - subdir: noarch - noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/pymc-base-5.18.1-pyhd8ed1ab_0.conda - sha256: df3d631671512750a13efdff69a44c15cc8320c60da0b1db5ff10a6f23b894b5 - md5: a25c15d03dd8cd876e468bb6484c20f9 + size: 11591 + timestamp: 1733471168016 +- conda: https://conda.anaconda.org/conda-forge/noarch/pymc-base-5.19.1-pyhd8ed1ab_0.conda + sha256: 5591215ad8ac2fa6f4e8612d7ebde34242a84d1778571050a1f014903324b7e0 + md5: e89ef644f56ba52bc6a118f15974dd55 depends: - arviz >=0.13.0 - cachetools >=4.2.1 - cloudpickle - - numpy >=1.15.0 + - numpy >=1.25.0 - pandas >=0.24.0 - pytensor-base >=2.26.1,<2.27 - python >=3.10 @@ -3734,57 +3046,42 @@ packages: license_family: Apache purls: - pkg:pypi/pymc?source=hash-mapping - size: 334447 - timestamp: 1731621747231 -- kind: conda - name: pyparsing - version: 3.2.0 - build: pyhd8ed1ab_1 - build_number: 1 - subdir: noarch - noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/pyparsing-3.2.0-pyhd8ed1ab_1.conda - sha256: b846e3965cd106438cf0b9dc0de8d519670ac065f822a7d66862e9423e0229cb - md5: 035c17fbf099f50ff60bf2eb303b0a83 + size: 335825 + timestamp: 1733471164844 +- conda: https://conda.anaconda.org/conda-forge/noarch/pyparsing-3.2.0-pyhd8ed1ab_2.conda + sha256: 09a5484532e24a33649ab612674fd0857bbdcfd6640a79d13a6690fb742a36e1 + md5: 4c05a2bcf87bb495512374143b57cf28 depends: - python >=3.9 license: MIT license_family: MIT purls: - pkg:pypi/pyparsing?source=hash-mapping - size: 92444 - timestamp: 1728880549923 -- kind: conda - name: pytensor - version: 2.26.2 - build: py312h97902ae_0 - subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/pytensor-2.26.2-py312h97902ae_0.conda - sha256: 71e64be9e99bccab87ce38f1c1e3b36a58469e769a339cb36f2c099a82cb5554 - md5: 94864a4cad4702d26a93b78c1ef94246 + size: 92319 + timestamp: 1733222687746 +- conda: https://conda.anaconda.org/conda-forge/linux-64/pytensor-2.26.4-py312h97902ae_0.conda + sha256: 134e2dac7ff950b954a4d27243a3378a3cadef25be7ce5c852e48e0be6ea628a + md5: fa443c8e7ef80000b6a361bb0fb9e6c5 depends: - blas - gcc_linux-64 13.* - gxx - gxx_linux-64 13.* - mkl-service - - pytensor-base 2.26.2 py312h25a0e75_0 + - pytensor-base 2.26.4 py312h25a0e75_0 - python >=3.12,<3.13.0a0 - python_abi 3.12.* *_cp312 - sysroot_linux-64 2.17.* + arch: x86_64 + platform: linux license: BSD-3-Clause license_family: BSD purls: [] - size: 9052 - timestamp: 1731337121115 -- kind: conda - name: pytensor-base - version: 2.26.2 - build: py312h25a0e75_0 - subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/pytensor-base-2.26.2-py312h25a0e75_0.conda - sha256: 24a909310e051bdfec08375f34f4677db63e1de78f4a7502616483ec9076fe3a - md5: 469a1729bda15ace5ef46e22cb153796 + size: 9085 + timestamp: 1733304394344 +- conda: https://conda.anaconda.org/conda-forge/linux-64/pytensor-base-2.26.4-py312h25a0e75_0.conda + sha256: 503dc12f9fd5758938ff7bb8ff40dc8b84af8d94f4ad7acb187f621474c7e070 + md5: 329130fd52aa66adc1991f62f8a4c8ae depends: - __glibc >=2.17,<3.0.a0 - cons @@ -3799,28 +3096,24 @@ packages: - python_abi 3.12.* *_cp312 - scipy >=1,<2 - setuptools >=59.0.0 + arch: x86_64 + platform: linux license: BSD-3-Clause license_family: BSD purls: - pkg:pypi/pytensor?source=hash-mapping - size: 2313749 - timestamp: 1731337108392 -- kind: conda - name: pytest - version: 8.3.3 - build: pyhd8ed1ab_0 - subdir: noarch - noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/pytest-8.3.3-pyhd8ed1ab_0.conda - sha256: e99376d0068455712109d233f5790458ff861aeceb458bfda74e353338e4d815 - md5: c03d61f31f38fdb9facf70c29958bf7a + size: 2317596 + timestamp: 1733304380924 +- conda: https://conda.anaconda.org/conda-forge/noarch/pytest-8.3.4-pyhd8ed1ab_1.conda + sha256: 75245ca9d0cbd6d38bb45ec02430189a9d4c21c055c5259739d738a2298d61b3 + md5: 799ed216dc6af62520f32aa39bc1c2bb depends: - colorama - exceptiongroup >=1.0.0rc8 - iniconfig - packaging - pluggy <2,>=1.5 - - python >=3.8 + - python >=3.9 - tomli >=1 constrains: - pytest-faulthandler >=2 @@ -3828,117 +3121,87 @@ packages: license_family: MIT purls: - pkg:pypi/pytest?source=hash-mapping - size: 258293 - timestamp: 1725977334143 -- kind: conda - name: python - version: 3.12.7 - build: hc5c86c4_0_cpython - subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/python-3.12.7-hc5c86c4_0_cpython.conda - sha256: 674be31ff152d9f0e0fe16959a45e3803a730fc4f54d87df6a9ac4e6a698c41d - md5: 0515111a9cdf69f83278f7c197db9807 + size: 259195 + timestamp: 1733217599806 +- conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.12.8-h9e4cc4f_1_cpython.conda + build_number: 1 + sha256: 3f0e0518c992d8ccfe62b189125721309836fe48a010dc424240583e157f9ff0 + md5: 7fd2fd79436d9b473812f14e86746844 depends: - __glibc >=2.17,<3.0.a0 - bzip2 >=1.0.8,<2.0a0 - ld_impl_linux-64 >=2.36.1 - - libexpat >=2.6.3,<3.0a0 + - libexpat >=2.6.4,<3.0a0 - libffi >=3.4,<4.0a0 - libgcc >=13 + - liblzma >=5.6.3,<6.0a0 - libnsl >=2.0.1,<2.1.0a0 - - libsqlite >=3.46.1,<4.0a0 + - libsqlite >=3.47.0,<4.0a0 - libuuid >=2.38.1,<3.0a0 - libxcrypt >=4.4.36 - libzlib >=1.3.1,<2.0a0 - ncurses >=6.5,<7.0a0 - - openssl >=3.3.2,<4.0a0 + - openssl >=3.4.0,<4.0a0 - readline >=8.2,<9.0a0 - tk >=8.6.13,<8.7.0a0 - tzdata - - xz >=5.2.6,<6.0a0 constrains: - python_abi 3.12.* *_cp312 + arch: x86_64 + platform: linux license: Python-2.0 purls: [] - size: 31574780 - timestamp: 1728059777603 -- kind: conda - name: python-dateutil - version: 2.9.0 - build: pyhd8ed1ab_0 - subdir: noarch - noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0-pyhd8ed1ab_0.conda - sha256: f3ceef02ac164a8d3a080d0d32f8e2ebe10dd29e3a685d240e38b3599e146320 - md5: 2cf4264fffb9e6eff6031c5b6884d61c + size: 31565686 + timestamp: 1733410597922 +- conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhff2d567_1.conda + sha256: a50052536f1ef8516ed11a844f9413661829aa083304dc624c5925298d078d79 + md5: 5ba79d7c71f03c678c8ead841f347d6e depends: - - python >=3.7 + - python >=3.9 - six >=1.5 license: Apache-2.0 license_family: APACHE purls: - pkg:pypi/python-dateutil?source=hash-mapping - size: 222742 - timestamp: 1709299922152 -- kind: conda - name: python-graphviz - version: 0.20.3 - build: pyhe28f650_1 - build_number: 1 - subdir: noarch - noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/python-graphviz-0.20.3-pyhe28f650_1.conda - sha256: 0eca3595a52dd7ad83ebca1ee738af50bf21dbd70d623583b0185d84074e21af - md5: 881be78ca9f3f2f5f6aa45d9b38a799f + size: 222505 + timestamp: 1733215763718 +- conda: https://conda.anaconda.org/conda-forge/noarch/python-graphviz-0.20.3-pyh91182bf_2.conda + sha256: c8f5d3d23b5962524217f33549add8d6c5af22fe839b49603f4588771154a51c + md5: f822f0e13849c2283f72ec4aa120eeaa depends: - graphviz >=2.46.1 - - python >=3.8 + - python >=3.9 license: MIT license_family: MIT purls: - pkg:pypi/graphviz?source=hash-mapping - size: 38168 - timestamp: 1727718740290 -- kind: conda - name: python-tzdata - version: '2024.2' - build: pyhd8ed1ab_0 - subdir: noarch - noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/python-tzdata-2024.2-pyhd8ed1ab_0.conda - sha256: fe3f62ce2bc714bdaa222ab3f0344a2815ad9e853c6df38d15c9f25de8a3a6d4 - md5: 986287f89929b2d629bd6ef6497dc307 + size: 38220 + timestamp: 1733792086212 +- conda: https://conda.anaconda.org/conda-forge/noarch/python-tzdata-2024.2-pyhd8ed1ab_1.conda + sha256: 57c9a02ec25926fb48edca59b9ede107823e5d5c473b94a0e05cc0b9a193a642 + md5: c0def296b2f6d2dd7b030c2a7f66bb1f depends: - - python >=3.6 + - python >=3.9 license: Apache-2.0 license_family: APACHE purls: - pkg:pypi/tzdata?source=hash-mapping - size: 142527 - timestamp: 1727140688093 -- kind: conda - name: python_abi - version: '3.12' - build: 5_cp312 + size: 142235 + timestamp: 1733235414217 +- conda: https://conda.anaconda.org/conda-forge/linux-64/python_abi-3.12-5_cp312.conda build_number: 5 - subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/python_abi-3.12-5_cp312.conda sha256: d10e93d759931ffb6372b45d65ff34d95c6000c61a07e298d162a3bc2accebb0 md5: 0424ae29b104430108f5218a66db7260 constrains: - python 3.12.* *_cpython + arch: x86_64 + platform: linux license: BSD-3-Clause license_family: BSD purls: [] size: 6238 timestamp: 1723823388266 -- kind: conda - name: pytz - version: '2024.1' - build: pyhd8ed1ab_0 - subdir: noarch - noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/pytz-2024.1-pyhd8ed1ab_0.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/pytz-2024.1-pyhd8ed1ab_0.conda sha256: 1a7d6b233f7e6e3bbcbad054c8fd51e690a67b129a899a056a5e45dd9f00cb41 md5: 3eeeeb9e4827ace8c0c1419c85d590ad depends: @@ -3949,13 +3212,7 @@ packages: - pkg:pypi/pytz?source=hash-mapping size: 188538 timestamp: 1706886944988 -- kind: conda - name: pyzmq - version: 26.2.0 - build: py312hbf22597_3 - build_number: 3 - subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/pyzmq-26.2.0-py312hbf22597_3.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/pyzmq-26.2.0-py312hbf22597_3.conda sha256: bc303f9b11e04a515f79cd5ad3bfa0e84b9dfec76552626d6263b38789fe6678 md5: 746ce19f0829ec3e19c93007b1a224d3 depends: @@ -3966,50 +3223,43 @@ packages: - python >=3.12,<3.13.0a0 - python_abi 3.12.* *_cp312 - zeromq >=4.3.5,<4.4.0a0 + arch: x86_64 + platform: linux license: BSD-3-Clause license_family: BSD purls: - pkg:pypi/pyzmq?source=hash-mapping size: 378126 timestamp: 1728642454632 -- kind: conda - name: qhull - version: '2020.2' - build: h434a139_5 - build_number: 5 - subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/qhull-2020.2-h434a139_5.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/qhull-2020.2-h434a139_5.conda sha256: 776363493bad83308ba30bcb88c2552632581b143e8ee25b1982c8c743e73abc md5: 353823361b1d27eb3960efb076dfcaf6 depends: - __glibc >=2.17,<3.0.a0 - libgcc-ng >=12 - libstdcxx-ng >=12 + arch: x86_64 + platform: linux license: LicenseRef-Qhull purls: [] size: 552937 timestamp: 1720813982144 -- kind: conda - name: readline - version: '8.2' - build: h8228510_1 - build_number: 1 - subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/readline-8.2-h8228510_1.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.2-h8228510_1.conda sha256: 5435cf39d039387fbdc977b0a762357ea909a7694d9528ab40f005e9208744d7 md5: 47d31b792659ce70f470b5c82fdfb7a4 depends: - libgcc-ng >=12 - ncurses >=6.3,<7.0a0 + arch: x86_64 + platform: linux license: GPL-3.0-only license_family: GPL purls: [] size: 281456 timestamp: 1679532220005 -- kind: pypi +- pypi: https://files.pythonhosted.org/packages/f9/9b/335f9764261e915ed497fcdeb11df5dfd6f7bf257d4a6a2a686d80da4d54/requests-2.32.3-py3-none-any.whl name: requests version: 2.32.3 - url: https://files.pythonhosted.org/packages/f9/9b/335f9764261e915ed497fcdeb11df5dfd6f7bf257d4a6a2a686d80da4d54/requests-2.32.3-py3-none-any.whl sha256: 70761cfe03c773ceb22aa2f671b4757976145175cdfca038c02654d061d6dcc6 requires_dist: - charset-normalizer>=2,<4 @@ -4019,30 +3269,23 @@ packages: - pysocks>=1.5.6,!=1.5.7 ; extra == 'socks' - chardet>=3.0.2,<6 ; extra == 'use-chardet-on-py3' requires_python: '>=3.8' -- kind: conda - name: rich - version: 13.9.4 - build: pyhd8ed1ab_0 - subdir: noarch - noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/rich-13.9.4-pyhd8ed1ab_0.conda - sha256: c009488fc07fd5557434c9c1ad32ab1dd50241d6a766e4b2b4125cd6498585a8 - md5: bcf8cc8924b5d20ead3d122130b8320b +- conda: https://conda.anaconda.org/conda-forge/noarch/rich-13.9.4-pyhd8ed1ab_1.conda + sha256: 06a760c5ae572e72e865d5a87e9fe3cc171e1a9c996e63daf3db52ff1a0b4457 + md5: 7aed65d4ff222bfb7335997aa40b7da5 depends: - markdown-it-py >=2.2.0 - pygments >=2.13.0,<3.0.0 - - python >=3.8 + - python >=3.9 - typing_extensions >=4.0.0,<5.0.0 license: MIT license_family: MIT purls: - pkg:pypi/rich?source=hash-mapping - size: 185481 - timestamp: 1730592349978 -- kind: pypi + size: 185646 + timestamp: 1733342347277 +- pypi: ../pymc-labs/benchmark-pymc name: samplerlab version: '0.1' - path: ../pymc-labs/benchmark-pymc sha256: 3229a0e9de6c13db630469c1501ae97625ca85287d2f955280a154dbadd900cd requires_dist: - numpy @@ -4050,15 +3293,9 @@ packages: - pymc requires_python: '>=3.11' editable: true -- kind: conda - name: scipy - version: 1.14.1 - build: py312h62794b6_1 - build_number: 1 - subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/scipy-1.14.1-py312h62794b6_1.conda - sha256: d069a64edade554261672d8febf4756aeb56a6cb44bd91844eaa944e5d9f4eb9 - md5: b43233a9e2f62fb94affe5607ea79473 +- conda: https://conda.anaconda.org/conda-forge/linux-64/scipy-1.14.1-py312h62794b6_2.conda + sha256: 6e4916d610dc15f9b504517bd6c1f3dbbae019a3c7abf0aeb55f310c452a4474 + md5: 94688dd449f6c092e5f951780235aca1 depends: - __glibc >=2.17,<3.0.a0 - libblas >=3.9.0,<4.0a0 @@ -4073,114 +3310,80 @@ packages: - numpy >=1.23.5 - python >=3.12,<3.13.0a0 - python_abi 3.12.* *_cp312 + arch: x86_64 + platform: linux license: BSD-3-Clause license_family: BSD purls: - pkg:pypi/scipy?source=hash-mapping - size: 17622722 - timestamp: 1729481826601 -- kind: conda - name: seaborn - version: 0.13.2 - build: hd8ed1ab_2 - build_number: 2 - subdir: noarch + size: 17444442 + timestamp: 1733621582568 +- conda: https://conda.anaconda.org/conda-forge/noarch/seaborn-0.13.2-hd8ed1ab_3.conda noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/seaborn-0.13.2-hd8ed1ab_2.conda - sha256: 79943fbbf1fafbf969257989a7d88638c0c3e7b89a81a75c9347c28768dd6141 - md5: a79d8797f62715255308d92d3a91ef2e + sha256: ea29a69b14dd6be5cdeeaa551bf50d78cafeaf0351e271e358f9b820fcab4cb0 + md5: 62afb877ca2c2b4b6f9ecb37320085b6 depends: - - seaborn-base 0.13.2 pyhd8ed1ab_2 + - seaborn-base 0.13.2 pyhd8ed1ab_3 - statsmodels >=0.12 license: BSD-3-Clause license_family: BSD purls: [] - size: 6996 - timestamp: 1714494772218 -- kind: conda - name: seaborn-base - version: 0.13.2 - build: pyhd8ed1ab_2 - build_number: 2 - subdir: noarch - noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/seaborn-base-0.13.2-pyhd8ed1ab_2.conda - sha256: 5de8b9e88a0f2daf58b07e3f144da26f894e9a20071304fa37329664eb2a29a7 - md5: b713b116feaf98acdba93ad4d7f90ca1 + size: 6876 + timestamp: 1733730113224 +- conda: https://conda.anaconda.org/conda-forge/noarch/seaborn-base-0.13.2-pyhd8ed1ab_3.conda + sha256: f209c9c18187570b85ec06283c72d64b8738f825b1b82178f194f4866877f8aa + md5: fd96da444e81f9e6fcaac38590f3dd42 depends: - matplotlib-base >=3.4,!=3.6.1 - numpy >=1.20,!=1.24.0 - pandas >=1.2 - - python >=3.8 + - python >=3.9 - scipy >=1.7 constrains: - - seaborn =0.13.2=*_2 + - seaborn =0.13.2=*_3 license: BSD-3-Clause license_family: BSD purls: - pkg:pypi/seaborn?source=hash-mapping - size: 234550 - timestamp: 1714494767378 -- kind: conda - name: setuptools - version: 75.3.0 - build: pyhd8ed1ab_0 - subdir: noarch - noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/setuptools-75.3.0-pyhd8ed1ab_0.conda - sha256: a36d020b9f32fc3f1a6488a1c4a9c13988c6468faf6895bf30ca69521a61230e - md5: 2ce9825396daf72baabaade36cee16da + size: 227843 + timestamp: 1733730112409 +- conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-75.6.0-pyhff2d567_1.conda + sha256: abb12e1dd515b13660aacb5d0fd43835bc2186cab472df25b7716cd65e095111 + md5: fc80f7995e396cbaeabd23cf46c413dc depends: - - python >=3.8 + - python >=3.9 license: MIT license_family: MIT purls: - pkg:pypi/setuptools?source=hash-mapping - size: 779561 - timestamp: 1730382173961 -- kind: conda - name: six - version: 1.16.0 - build: pyh6c4a22f_0 - subdir: noarch - noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/six-1.16.0-pyh6c4a22f_0.tar.bz2 - sha256: a85c38227b446f42c5b90d9b642f2c0567880c15d72492d8da074a59c8f91dd6 - md5: e5f25f8dbc060e9a8d912e432202afc2 + size: 774252 + timestamp: 1732632769210 +- conda: https://conda.anaconda.org/conda-forge/noarch/six-1.17.0-pyhd8ed1ab_0.conda + sha256: 41db0180680cc67c3fa76544ffd48d6a5679d96f4b71d7498a759e94edc9a2db + md5: a451d576819089b0d672f18768be0f65 depends: - - python + - python >=3.9 license: MIT license_family: MIT purls: - pkg:pypi/six?source=hash-mapping - size: 14259 - timestamp: 1620240338595 -- kind: conda - name: stack_data - version: 0.6.2 - build: pyhd8ed1ab_0 - subdir: noarch - noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/stack_data-0.6.2-pyhd8ed1ab_0.conda - sha256: a58433e75229bec39f3be50c02efbe9b7083e53a1f31d8ee247564f370191eec - md5: e7df0fdd404616638df5ece6e69ba7af + size: 16385 + timestamp: 1733381032766 +- conda: https://conda.anaconda.org/conda-forge/noarch/stack_data-0.6.3-pyhd8ed1ab_1.conda + sha256: 570da295d421661af487f1595045760526964f41471021056e993e73089e9c41 + md5: b1b505328da7a6b246787df4b5a49fbc depends: - asttokens - executing - pure_eval - - python >=3.5 + - python >=3.9 license: MIT license_family: MIT purls: - pkg:pypi/stack-data?source=hash-mapping - size: 26205 - timestamp: 1669632203115 -- kind: conda - name: statsmodels - version: 0.14.4 - build: py312hc0a28a1_0 - subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/statsmodels-0.14.4-py312hc0a28a1_0.conda + size: 26988 + timestamp: 1733569565672 +- conda: https://conda.anaconda.org/conda-forge/linux-64/statsmodels-0.14.4-py312hc0a28a1_0.conda sha256: 6cc65ba902b32207e8a697b0e0408a28d6cc166be04f1882c40739a86a253d22 md5: 97dc960f3d9911964d73c2cf240baea5 depends: @@ -4194,20 +3397,15 @@ packages: - python >=3.12,<3.13.0a0 - python_abi 3.12.* *_cp312 - scipy !=1.9.2,>=1.8 + arch: x86_64 + platform: linux license: BSD-3-Clause license_family: BSD purls: - pkg:pypi/statsmodels?source=hash-mapping size: 12103203 timestamp: 1727987129263 -- kind: conda - name: sysroot_linux-64 - version: '2.17' - build: h4a8ded7_18 - build_number: 18 - subdir: noarch - noarch: generic - url: https://conda.anaconda.org/conda-forge/noarch/sysroot_linux-64-2.17-h4a8ded7_18.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/sysroot_linux-64-2.17-h4a8ded7_18.conda sha256: 23c7ab371c1b74d01a187e05aa7240e3f5654599e364a9adff7f0b02e26f471f md5: 0ea96f90a10838f58412aa84fdd9df09 depends: @@ -4218,31 +3416,22 @@ packages: purls: [] size: 15500960 timestamp: 1729794510631 -- kind: conda - name: tbb - version: 2021.13.0 - build: h84d6215_0 - subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/tbb-2021.13.0-h84d6215_0.conda - sha256: 7d4d3ad608dc6ae5a7e0f431f784985398a18bcde2ba3ce19cc32f61e2defd98 - md5: ee6f7fd1e76061ef1fa307d41fa86a96 +- conda: https://conda.anaconda.org/conda-forge/linux-64/tbb-2021.13.0-hceb3a55_1.conda + sha256: 65463732129899770d54b1fbf30e1bb82fdebda9d7553caf08d23db4590cd691 + md5: ba7726b8df7b9d34ea80e82b097a4893 depends: - __glibc >=2.17,<3.0.a0 - libgcc >=13 - - libhwloc >=2.11.1,<2.11.2.0a0 + - libhwloc >=2.11.2,<2.11.3.0a0 - libstdcxx >=13 + arch: x86_64 + platform: linux license: Apache-2.0 license_family: APACHE purls: [] - size: 175779 - timestamp: 1725532539822 -- kind: conda - name: threadpoolctl - version: 3.5.0 - build: pyhc1e730c_0 - subdir: noarch - noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/threadpoolctl-3.5.0-pyhc1e730c_0.conda + size: 175954 + timestamp: 1732982638805 +- conda: https://conda.anaconda.org/conda-forge/noarch/threadpoolctl-3.5.0-pyhc1e730c_0.conda sha256: 45e402941f6bed094022c5726a2ca494e6224b85180d2367fb6ddd9aea68079d md5: df68d78237980a159bd7149f33c0e8fd depends: @@ -4253,175 +3442,114 @@ packages: - pkg:pypi/threadpoolctl?source=hash-mapping size: 23548 timestamp: 1714400228771 -- kind: conda - name: tk - version: 8.6.13 - build: noxft_h4845f30_101 - build_number: 101 - subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_h4845f30_101.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_h4845f30_101.conda sha256: e0569c9caa68bf476bead1bed3d79650bb080b532c64a4af7d8ca286c08dea4e md5: d453b98d9c83e71da0741bb0ff4d76bc depends: - libgcc-ng >=12 - libzlib >=1.2.13,<2.0.0a0 + arch: x86_64 + platform: linux license: TCL license_family: BSD purls: [] size: 3318875 timestamp: 1699202167581 -- kind: conda - name: tomli - version: 2.1.0 - build: pyhff2d567_0 - subdir: noarch - noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/tomli-2.1.0-pyhff2d567_0.conda - sha256: 354b8a64d4f3311179d85aefc529ca201a36afc1af090d0010c46be7b79f9a47 - md5: 3fa1089b4722df3a900135925f4519d9 +- conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.2.1-pyhd8ed1ab_1.conda + sha256: 18636339a79656962723077df9a56c0ac7b8a864329eb8f847ee3d38495b863e + md5: ac944244f1fed2eb49bae07193ae8215 depends: - python >=3.9 license: MIT license_family: MIT purls: - pkg:pypi/tomli?source=hash-mapping - size: 18741 - timestamp: 1731426862834 -- kind: conda - name: toolz - version: 1.0.0 - build: pyhd8ed1ab_0 - subdir: noarch - noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/toolz-1.0.0-pyhd8ed1ab_0.conda - sha256: 6371cf3cf8292f2abdcc2bf783d6e70203d72f8ff0c1625f55a486711e276c75 - md5: 34feccdd4177f2d3d53c73fc44fd9a37 + size: 19167 + timestamp: 1733256819729 +- conda: https://conda.anaconda.org/conda-forge/noarch/toolz-1.0.0-pyhd8ed1ab_1.conda + sha256: eda38f423c33c2eaeca49ed946a8d3bf466cc3364970e083a65eb2fd85258d87 + md5: 40d0ed782a8aaa16ef248e68c06c168d depends: - - python >=3.8 + - python >=3.9 license: BSD-3-Clause license_family: BSD purls: - pkg:pypi/toolz?source=hash-mapping - size: 52623 - timestamp: 1728059623353 -- kind: conda - name: tornado - version: 6.4.1 - build: py312h66e93f0_1 - build_number: 1 - subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/tornado-6.4.1-py312h66e93f0_1.conda - sha256: c0c9cc7834e8f43702956afaa5af7b0639c4835c285108a43e6b91687ce53ab8 - md5: af648b62462794649066366af4ecd5b0 + size: 52475 + timestamp: 1733736126261 +- conda: https://conda.anaconda.org/conda-forge/linux-64/tornado-6.4.2-py312h66e93f0_0.conda + sha256: 062a3a3a37fa8615ce57929ba7e982c76f5a5810bcebd435950f6d6c4147c310 + md5: e417822cb989e80a0d2b1b576fdd1657 depends: - __glibc >=2.17,<3.0.a0 - libgcc >=13 - python >=3.12,<3.13.0a0 - python_abi 3.12.* *_cp312 + arch: x86_64 + platform: linux license: Apache-2.0 license_family: Apache purls: - pkg:pypi/tornado?source=hash-mapping - size: 837665 - timestamp: 1724956252424 -- kind: pypi + size: 840414 + timestamp: 1732616043734 +- pypi: https://files.pythonhosted.org/packages/d0/30/dc54f88dd4a2b5dc8a0279bdd7270e735851848b762aeb1c1184ed1f6b14/tqdm-4.67.1-py3-none-any.whl name: tqdm - version: 4.67.0 - url: https://files.pythonhosted.org/packages/2b/78/57043611a16c655c8350b4c01b8d6abfb38cc2acb475238b62c2146186d7/tqdm-4.67.0-py3-none-any.whl - sha256: 0cd8af9d56911acab92182e88d763100d4788bdf421d251616040cc4d44863be + version: 4.67.1 + sha256: 26445eca388f82e72884e0d580d5464cd801a3ea01e63e5601bdff9ba6a48de2 requires_dist: - colorama ; platform_system == 'Windows' - pytest>=6 ; extra == 'dev' - pytest-cov ; extra == 'dev' - pytest-timeout ; extra == 'dev' - - pytest-xdist ; extra == 'dev' + - pytest-asyncio>=0.24 ; extra == 'dev' + - nbval ; extra == 'dev' - requests ; extra == 'discord' - - ipywidgets>=6 ; extra == 'notebook' - slack-sdk ; extra == 'slack' - requests ; extra == 'telegram' + - ipywidgets>=6 ; extra == 'notebook' requires_python: '>=3.7' -- kind: conda - name: traitlets - version: 5.14.3 - build: pyhd8ed1ab_0 - subdir: noarch - noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/traitlets-5.14.3-pyhd8ed1ab_0.conda - sha256: 8a64fa0f19022828513667c2c7176cfd125001f3f4b9bc00d33732e627dd2592 - md5: 3df84416a021220d8b5700c613af2dc5 +- conda: https://conda.anaconda.org/conda-forge/noarch/traitlets-5.14.3-pyhd8ed1ab_1.conda + sha256: f39a5620c6e8e9e98357507262a7869de2ae8cc07da8b7f84e517c9fd6c2b959 + md5: 019a7385be9af33791c989871317e1ed depends: - - python >=3.8 + - python >=3.9 license: BSD-3-Clause license_family: BSD purls: - pkg:pypi/traitlets?source=hash-mapping - size: 110187 - timestamp: 1713535244513 -- kind: pypi - name: typeguard - version: 2.13.3 - url: https://files.pythonhosted.org/packages/9a/bb/d43e5c75054e53efce310e79d63df0ac3f25e34c926be5dffb7d283fb2a8/typeguard-2.13.3-py3-none-any.whl - sha256: 5e3e3be01e887e7eafae5af63d1f36c849aaa94e3a0112097312aabfa16284f1 - requires_dist: - - sphinx-rtd-theme ; extra == 'doc' - - sphinx-autodoc-typehints>=1.2.0 ; extra == 'doc' - - pytest ; extra == 'test' - - typing-extensions ; extra == 'test' - - mypy ; platform_python_implementation != 'PyPy' and extra == 'test' - requires_python: '>=3.5.3' -- kind: conda - name: typing-extensions - version: 4.12.2 - build: hd8ed1ab_0 - subdir: noarch + size: 110051 + timestamp: 1733367480074 +- conda: https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.12.2-hd8ed1ab_1.conda noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.12.2-hd8ed1ab_0.conda - sha256: d3b9a8ed6da7c9f9553c5fd8a4fca9c3e0ab712fa5f497859f82337d67533b73 - md5: 52d648bd608f5737b123f510bb5514b5 + sha256: c8e9c1c467b5f960b627d7adc1c65fece8e929a3de89967e91ef0f726422fd32 + md5: b6a408c64b78ec7b779a3e5c7a902433 depends: - - typing_extensions 4.12.2 pyha770c72_0 + - typing_extensions 4.12.2 pyha770c72_1 license: PSF-2.0 license_family: PSF purls: [] - size: 10097 - timestamp: 1717802659025 -- kind: conda - name: typing_extensions - version: 4.12.2 - build: pyha770c72_0 - subdir: noarch - noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.12.2-pyha770c72_0.conda - sha256: 0fce54f8ec3e59f5ef3bb7641863be4e1bf1279623e5af3d3fa726e8f7628ddb - md5: ebe6952715e1d5eb567eeebf25250fa7 + size: 10075 + timestamp: 1733188758872 +- conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.12.2-pyha770c72_1.conda + sha256: 337be7af5af8b2817f115b3b68870208b30c31d3439bec07bfb2d8f4823e3568 + md5: d17f13df8b65464ca316cbc000a3cb64 depends: - - python >=3.8 + - python >=3.9 license: PSF-2.0 license_family: PSF purls: - pkg:pypi/typing-extensions?source=hash-mapping - size: 39888 - timestamp: 1717802653893 -- kind: conda - name: tzdata - version: 2024b - build: hc8b5060_0 - subdir: noarch - noarch: generic - url: https://conda.anaconda.org/conda-forge/noarch/tzdata-2024b-hc8b5060_0.conda + size: 39637 + timestamp: 1733188758212 +- conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2024b-hc8b5060_0.conda sha256: 4fde5c3008bf5d2db82f2b50204464314cc3c91c1d953652f7bd01d9e52aefdf md5: 8ac3367aafb1cc0a068483c580af8015 license: LicenseRef-Public-Domain purls: [] size: 122354 timestamp: 1728047496079 -- kind: conda - name: unicodedata2 - version: 15.1.0 - build: py312h66e93f0_1 - build_number: 1 - subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/unicodedata2-15.1.0-py312h66e93f0_1.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/unicodedata2-15.1.0-py312h66e93f0_1.conda sha256: 1fcba6d363d901d9a06381e1aee2d5634f82389965dd7a339f19b3ae81ce6da0 md5: 588486a61153f94c7c13816f7069e440 depends: @@ -4429,16 +3557,17 @@ packages: - libgcc >=13 - python >=3.12,<3.13.0a0 - python_abi 3.12.* *_cp312 + arch: x86_64 + platform: linux license: Apache-2.0 license_family: Apache purls: - pkg:pypi/unicodedata2?source=hash-mapping size: 368550 timestamp: 1729704685856 -- kind: pypi +- pypi: https://files.pythonhosted.org/packages/ce/d9/5f4c13cecde62396b0d3fe530a50ccea91e7dfc1ccf0e09c228841bb5ba8/urllib3-2.2.3-py3-none-any.whl name: urllib3 version: 2.2.3 - url: https://files.pythonhosted.org/packages/ce/d9/5f4c13cecde62396b0d3fe530a50ccea91e7dfc1ccf0e09c228841bb5ba8/urllib3-2.2.3-py3-none-any.whl sha256: ca899ca043dcb1bafa3e262d73aa25c465bfb49e0bd9dd5d59f1d0acba2f8fac requires_dist: - brotli>=1.0.9 ; platform_python_implementation == 'CPython' and extra == 'brotli' @@ -4447,10 +3576,28 @@ packages: - pysocks>=1.5.6,!=1.5.7,<2.0 ; extra == 'socks' - zstandard>=0.18.0 ; extra == 'zstd' requires_python: '>=3.8' -- kind: pypi +- conda: https://conda.anaconda.org/conda-forge/linux-64/viztracer-1.0.0-py312h3a80f7f_0.conda + sha256: a3d79c45b4d4adc4c061f399324a70ef89318690413f98bd5fcbfe170936cd37 + md5: e022a3d098ce2fac2df49ffc1ccd2240 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc + - libgcc-ng >=12 + - objprint >=0.3.0 + - orjson + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + arch: x86_64 + platform: linux + license: Apache-2.0 + license_family: APACHE + purls: + - pkg:pypi/viztracer?source=hash-mapping + size: 11361364 + timestamp: 1732425850776 +- pypi: https://files.pythonhosted.org/packages/c3/ac/1847959031ce09eb65a70b16d0f07633d7ddaf8a97752cc924f9a8cbe253/watermark-2.5.0-py2.py3-none-any.whl name: watermark version: 2.5.0 - url: https://files.pythonhosted.org/packages/c3/ac/1847959031ce09eb65a70b16d0f07633d7ddaf8a97752cc924f9a8cbe253/watermark-2.5.0-py2.py3-none-any.whl sha256: d775afa075f5ea15152ad9f4c82dfc95bffb9d0cb4341c9b62073b627191464d requires_dist: - ipython>=6.0 @@ -4458,88 +3605,75 @@ packages: - setuptools - py3nvml>=0.2 ; extra == 'gpu' requires_python: '>=3.7' -- kind: conda - name: wcwidth - version: 0.2.13 - build: pyhd8ed1ab_0 - subdir: noarch - noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/wcwidth-0.2.13-pyhd8ed1ab_0.conda - sha256: b6cd2fee7e728e620ec736d8dfee29c6c9e2adbd4e695a31f1d8f834a83e57e3 - md5: 68f0738df502a14213624b288c60c9ad +- conda: https://conda.anaconda.org/conda-forge/noarch/wcwidth-0.2.13-pyhd8ed1ab_1.conda + sha256: f21e63e8f7346f9074fd00ca3b079bd3d2fa4d71f1f89d5b6934bf31446dc2a5 + md5: b68980f2495d096e71c7fd9d7ccf63e6 depends: - - python >=3.8 + - python >=3.9 license: MIT license_family: MIT purls: - pkg:pypi/wcwidth?source=hash-mapping - size: 32709 - timestamp: 1704731373922 -- kind: conda - name: wheel - version: 0.45.0 - build: pyhd8ed1ab_0 - subdir: noarch - noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/wheel-0.45.0-pyhd8ed1ab_0.conda - sha256: 8a51067f8e1a2cb0b5e89672dbcc0369e344a92e869c38b2946584aa09ab7088 - md5: f9751d7c71df27b2d29f5cab3378982e + size: 32581 + timestamp: 1733231433877 +- conda: https://conda.anaconda.org/conda-forge/noarch/wheel-0.45.1-pyhd8ed1ab_1.conda + sha256: 1b34021e815ff89a4d902d879c3bd2040bc1bd6169b32e9427497fa05c55f1ce + md5: 75cb7132eb58d97896e173ef12ac9986 depends: - - python >=3.8 + - python >=3.9 license: MIT license_family: MIT purls: - pkg:pypi/wheel?source=hash-mapping - size: 62755 - timestamp: 1731120002488 -- kind: conda - name: xarray - version: 2024.10.0 - build: pyhd8ed1ab_0 - subdir: noarch - noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/xarray-2024.10.0-pyhd8ed1ab_0.conda - sha256: a35c8291de55f96ecc9121d1ebd4995977ea2f51d9e529e97749abc108afb0e4 - md5: 53e365732dfa053c4d19fc6b927392c4 + size: 62931 + timestamp: 1733130309598 +- conda: https://conda.anaconda.org/conda-forge/noarch/widgetsnbextension-4.0.13-pyhd8ed1ab_1.conda + sha256: a750202ae2a31d8e5ee5a5c127fcc7fa783cd0fbedbc0bf1ab549a109881fa9f + md5: 237db148cc37a466e4222d589029b53e + depends: + - python >=3.9 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/widgetsnbextension?source=hash-mapping + size: 898402 + timestamp: 1733128654300 +- conda: https://conda.anaconda.org/conda-forge/noarch/xarray-2024.11.0-pyhd8ed1ab_0.conda + sha256: 1312af7bc507afdcf24df1599d6aa062ceb252d4c086d5b8e5a022bf8051d980 + md5: 7358eeedbffd742549d372e0066999d3 depends: - numpy >=1.24 - - packaging >=23.1 + - packaging >=23.2 - pandas >=2.1 - python >=3.10 constrains: - - matplotlib-base >=3.7 - - netcdf4 >=1.6.0 - - numba >=0.57 - - hdf5 >=1.12 + - cartopy >=0.22 + - h5py >=3.8 + - h5netcdf >=1.3 - sparse >=0.14 + - dask-core >=2023.11 - cftime >=1.6 + - bottleneck >=1.3 + - netcdf4 >=1.6.0 + - iris >=3.7 - zarr >=2.16 + - seaborn-base >=0.13 + - distributed >=2023.11 + - matplotlib-base >=3.8 + - nc-time-axis >=1.4 + - scipy >=1.11 + - toolz >=0.12 - flox >=0.7 + - numba >=0.57 - pint >=0.22 - - toolz >=0.12 - - scipy >=1.11 - - seaborn-base >=0.12 - - distributed >=2023.9 - - iris >=3.7 - - cartopy >=0.22 - - bottleneck >=1.3 - - dask-core >=2023.9 - - h5py >=3.8 - - h5netcdf >=1.2 - - nc-time-axis >=1.4 + - hdf5 >=1.12 license: Apache-2.0 license_family: APACHE purls: - pkg:pypi/xarray?source=hash-mapping - size: 813754 - timestamp: 1729867978934 -- kind: conda - name: xarray-einstats - version: 0.8.0 - build: pyhd8ed1ab_0 - subdir: noarch - noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/xarray-einstats-0.8.0-pyhd8ed1ab_0.conda + size: 826310 + timestamp: 1732532972254 +- conda: https://conda.anaconda.org/conda-forge/noarch/xarray-einstats-0.8.0-pyhd8ed1ab_0.conda sha256: 8cb41b361184ee06515829e729184716e252c6f661590898242e93c3e87dd415 md5: 729ecac2a5d024cce0837c25cf28f695 depends: @@ -4553,30 +3687,20 @@ packages: - pkg:pypi/xarray-einstats?source=hash-mapping size: 33815 timestamp: 1726758642806 -- kind: conda - name: xorg-libice - version: 1.1.1 - build: hb9d3cd8_1 - build_number: 1 - subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/xorg-libice-1.1.1-hb9d3cd8_1.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libice-1.1.1-hb9d3cd8_1.conda sha256: ec276da68d1c4a3d34a63195b35ca5b248d4aff0812464dcd843d74649b5cec4 md5: 19608a9656912805b2b9a2f6bd257b04 depends: - __glibc >=2.17,<3.0.a0 - libgcc >=13 + arch: x86_64 + platform: linux license: MIT license_family: MIT purls: [] size: 58159 timestamp: 1727531850109 -- kind: conda - name: xorg-libsm - version: 1.2.4 - build: he73a12e_1 - build_number: 1 - subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/xorg-libsm-1.2.4-he73a12e_1.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libsm-1.2.4-he73a12e_1.conda sha256: 70e903370977d44c9120a5641ab563887bd48446e9ef6fc2a3f5f60531c2cd6c md5: 05a8ea5f446de33006171a7afe6ae857 depends: @@ -4584,138 +3708,84 @@ packages: - libgcc >=13 - libuuid >=2.38.1,<3.0a0 - xorg-libice >=1.1.1,<2.0a0 + arch: x86_64 + platform: linux license: MIT license_family: MIT purls: [] size: 27516 timestamp: 1727634669421 -- kind: conda - name: xorg-libx11 - version: 1.8.10 - build: h4f16b4b_0 - subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/xorg-libx11-1.8.10-h4f16b4b_0.conda - sha256: c4650634607864630fb03696474a0535f6fce5fda7d81a6462346e071b53dfa7 - md5: 0b666058a179b744a622d0a4a0c56353 +- conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libx11-1.8.10-h4f16b4b_1.conda + sha256: f53994d54f0604df881c4e984279b3cf6a1648a22d4b2113e2c89829968784c9 + md5: 125f34a17d7b4bea418a83904ea82ea6 depends: - __glibc >=2.17,<3.0.a0 - libgcc >=13 - libxcb >=1.17.0,<2.0a0 - - xorg-xorgproto + arch: x86_64 + platform: linux license: MIT license_family: MIT purls: [] - size: 838308 - timestamp: 1727356837875 -- kind: conda - name: xorg-libxau - version: 1.0.11 - build: hb9d3cd8_1 - build_number: 1 - subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxau-1.0.11-hb9d3cd8_1.conda + size: 837524 + timestamp: 1733324962639 +- conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxau-1.0.11-hb9d3cd8_1.conda sha256: 532a046fee0b3a402db867b6ec55c84ba4cdedb91d817147c8feeae9766be3d6 md5: 77cbc488235ebbaab2b6e912d3934bae depends: - __glibc >=2.17,<3.0.a0 - libgcc >=13 + arch: x86_64 + platform: linux license: MIT license_family: MIT purls: [] size: 14679 timestamp: 1727034741045 -- kind: conda - name: xorg-libxdmcp - version: 1.1.5 - build: hb9d3cd8_0 - subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxdmcp-1.1.5-hb9d3cd8_0.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxdmcp-1.1.5-hb9d3cd8_0.conda sha256: 6b250f3e59db07c2514057944a3ea2044d6a8cdde8a47b6497c254520fade1ee md5: 8035c64cb77ed555e3f150b7b3972480 depends: - __glibc >=2.17,<3.0.a0 - libgcc >=13 + arch: x86_64 + platform: linux license: MIT license_family: MIT purls: [] size: 19901 timestamp: 1727794976192 -- kind: conda - name: xorg-libxext - version: 1.3.6 - build: hb9d3cd8_0 - subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxext-1.3.6-hb9d3cd8_0.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxext-1.3.6-hb9d3cd8_0.conda sha256: da5dc921c017c05f38a38bd75245017463104457b63a1ce633ed41f214159c14 md5: febbab7d15033c913d53c7a2c102309d depends: - __glibc >=2.17,<3.0.a0 - libgcc >=13 - xorg-libx11 >=1.8.10,<2.0a0 + arch: x86_64 + platform: linux license: MIT license_family: MIT purls: [] size: 50060 timestamp: 1727752228921 -- kind: conda - name: xorg-libxrender - version: 0.9.11 - build: hb9d3cd8_1 - build_number: 1 - subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxrender-0.9.11-hb9d3cd8_1.conda - sha256: f1217e902c0b1d8bc5d3ce65e483ebf38b049c823c9117b7198cfb16bd2b9143 - md5: a7a49a8b85122b49214798321e2e96b4 +- conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxrender-0.9.11-hb9d3cd8_2.conda + sha256: a2f533fe2374789413a9dfa1369322573910f4b010fd24386cdd1c5cd977a087 + md5: eef3132295d92678c17ffc8b114b8371 depends: - __glibc >=2.17,<3.0.a0 - libgcc >=13 - xorg-libx11 >=1.8.10,<2.0a0 - - xorg-xorgproto + arch: x86_64 + platform: linux license: MIT license_family: MIT purls: [] - size: 37780 - timestamp: 1727529943015 -- kind: conda - name: xorg-xorgproto - version: '2024.1' - build: hb9d3cd8_1 - build_number: 1 - subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/xorg-xorgproto-2024.1-hb9d3cd8_1.conda - sha256: 1316680be6edddee0156b86ec1102fc8286f51c1a5440366ed1db596a2dc3731 - md5: 7c21106b851ec72c037b162c216d8f05 - depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=13 - license: MIT - license_family: MIT - purls: [] - size: 565425 - timestamp: 1726846388217 -- kind: conda - name: xz - version: 5.2.6 - build: h166bdaf_0 - subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/xz-5.2.6-h166bdaf_0.tar.bz2 - sha256: 03a6d28ded42af8a347345f82f3eebdd6807a08526d47899a42d62d319609162 - md5: 2161070d867d1b1204ea749c8eec4ef0 - depends: - - libgcc-ng >=12 - license: LGPL-2.1 and GPL-2.0 - purls: [] - size: 418368 - timestamp: 1660346797927 -- kind: conda - name: zarr - version: 2.18.3 - build: pyhd8ed1ab_0 - subdir: noarch - noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/zarr-2.18.3-pyhd8ed1ab_0.conda - sha256: 0fd9bf7ba90088115c52dad7b9d44fbffeabe34cb35299b2c38d5f17851fda36 - md5: 41abde21508578e02e3fd492e82a05cd + size: 37638 + timestamp: 1733755897245 +- conda: https://conda.anaconda.org/conda-forge/noarch/zarr-2.18.3-pyhd8ed1ab_1.conda + sha256: 02c045d3ab97bd5a713b0f35b05f017603d33bd728694ce3cf843c45c2906535 + md5: 3e9a0fee25417c432c4780b9597fc312 depends: - asciitree - fasteners @@ -4723,22 +3793,16 @@ packages: - numpy >=1.24,<3.0 - python >=3.10 constrains: - - ipywidgets >=8.0.0 - notebook - ipytree >=0.2.2 + - ipywidgets >=8.0.0 license: MIT license_family: MIT purls: - pkg:pypi/zarr?source=hash-mapping - size: 159273 - timestamp: 1725539879186 -- kind: conda - name: zeromq - version: 4.3.5 - build: h3b0a872_7 - build_number: 7 - subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/zeromq-4.3.5-h3b0a872_7.conda + size: 160013 + timestamp: 1733237313723 +- conda: https://conda.anaconda.org/conda-forge/linux-64/zeromq-4.3.5-h3b0a872_7.conda sha256: a4dc72c96848f764bb5a5176aa93dd1e9b9e52804137b99daeebba277b31ea10 md5: 3947a35e916fcc6b9825449affbf4214 depends: @@ -4747,57 +3811,33 @@ packages: - libgcc >=13 - libsodium >=1.0.20,<1.0.21.0a0 - libstdcxx >=13 + arch: x86_64 + platform: linux license: MPL-2.0 + license_family: MOZILLA purls: [] size: 335400 timestamp: 1731585026517 -- kind: conda - name: zipp - version: 3.21.0 - build: pyhd8ed1ab_0 - subdir: noarch - noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/zipp-3.21.0-pyhd8ed1ab_0.conda - sha256: 232a30e4b0045c9de5e168dda0328dc0e28df9439cdecdfb97dd79c1c82c4cec - md5: fee389bf8a4843bd7a2248ce11b7f188 +- conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.21.0-pyhd8ed1ab_1.conda + sha256: 567c04f124525c97a096b65769834b7acb047db24b15a56888a322bf3966c3e1 + md5: 0c3cc595284c5e8f0f9900a9b228a332 depends: - - python >=3.8 + - python >=3.9 license: MIT license_family: MIT purls: - pkg:pypi/zipp?source=hash-mapping - size: 21702 - timestamp: 1731262194278 -- kind: conda - name: zlib - version: 1.3.1 - build: hb9d3cd8_2 - build_number: 2 - subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/zlib-1.3.1-hb9d3cd8_2.conda - sha256: 5d7c0e5f0005f74112a34a7425179f4eb6e73c92f5d109e6af4ddeca407c92ab - md5: c9f075ab2f33b3bbee9e62d4ad0a6cd8 - depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=13 - - libzlib 1.3.1 hb9d3cd8_2 - license: Zlib - license_family: Other - purls: [] - size: 92286 - timestamp: 1727963153079 -- kind: conda - name: zstd - version: 1.5.6 - build: ha6fb4c9_0 - subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.6-ha6fb4c9_0.conda + size: 21809 + timestamp: 1732827613585 +- conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.6-ha6fb4c9_0.conda sha256: c558b9cc01d9c1444031bd1ce4b9cff86f9085765f17627a6cd85fc623c8a02b md5: 4d056880988120e29d75bfff282e0f45 depends: - libgcc-ng >=12 - libstdcxx-ng >=12 - libzlib >=1.2.13,<2.0.0a0 + arch: x86_64 + platform: linux license: BSD-3-Clause license_family: BSD purls: [] diff --git a/pixi.toml b/pixi.toml index 9315e61..deffa6a 100644 --- a/pixi.toml +++ b/pixi.toml @@ -12,18 +12,20 @@ develop = "maturin develop --release" [dependencies] python = ">=3.12.7,<3.13" -pymc = ">=5.18.0,<5.19" +pymc = ">=5.19.0,<6" numba = ">=0.60.0,<0.61" -pytest = ">=8.3.3,<9" -maturin = ">=1.7.4,<2" +pytest = ">=8.3.4,<9" +maturin = ">=1.7.7,<2" pip = ">=24.3.1,<25" -#jax = ">=0.4.34,<0.5" ipykernel = ">=6.29.5,<7" seaborn = ">=0.13.2,<0.14" threadpoolctl = ">=3.5.0,<4" zarr = ">=2.18.3,<3" -polars = ">=1.12.0,<2" +polars = ">=1.16.0,<2" +viztracer = ">=1.0.0,<2" +ipywidgets = ">=8.1.5,<9" # The jaxlib cuda build seems to be broken around version 0.4.34 +#jax = ">=0.4.35,<0.5" #jaxlib = { version = "*", build = "*cuda12*" } [pypi-dependencies] @@ -32,7 +34,7 @@ bridgestan = ">=2.5.0, <3" flowjax = { path = "../flowjax/", editable = true } samplerlab = { path = "../pymc-labs/benchmark-pymc", editable = true } posteriordb = ">=0.2.0, <0.3" -jax = { version = "==0.4.35", extras = ["cuda12"] } +jax = { version = ">=0.4.35, <0.5", extras = ["cuda12"] } watermark = ">=2.5.0, <3" [system-requirements] From 97477224a9080c6399557b7215fdbc46dcba8191 Mon Sep 17 00:00:00 2001 From: Adrian Seyboldt Date: Fri, 13 Dec 2024 10:47:09 +0100 Subject: [PATCH 26/34] chore: update nuts-rs --- Cargo.lock | 4 +- Cargo.toml | 2 +- pixi.lock | 326 ++++++----------------------------------------------- pixi.toml | 2 +- 4 files changed, 38 insertions(+), 296 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 4693433..263aa2e 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1529,7 +1529,9 @@ dependencies = [ [[package]] name = "nuts-rs" -version = "0.13.0" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "975b57d4d2a3c0755252745d0afc55886b8a0b482be224cb615591b35280f99d" dependencies = [ "anyhow", "arrow", diff --git a/Cargo.toml b/Cargo.toml index 911b3c8..d3cacb3 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -22,7 +22,7 @@ name = "_lib" crate-type = ["cdylib"] [dependencies] -nuts-rs = "0.13.0" +nuts-rs = "0.14.0" numpy = "0.23.0" rand = "0.8.5" thiserror = "2.0.3" diff --git a/pixi.lock b/pixi.lock index 4216fdc..c7fcfe1 100644 --- a/pixi.lock +++ b/pixi.lock @@ -232,10 +232,10 @@ environments: - pypi: https://files.pythonhosted.org/packages/3a/af/411e94c165229882eb2d0a329114826aa52c7c61ef3108d0d3d8ad7189ed/equinox-0.11.10-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/4f/4a/ff8aa2c57300613b69905308c5afe92c5b01112d766c25a305fd6796170a/etils-1.11.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/76/c6/c88e154df9c4e1a2a66ccf0005a88dfb2650c1dffb6f5ce603dfbd452ce3/idna-3.10-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/5f/3f/6c5553baaa7faa3fa8bae8279b1e46cb54c7ce52360139eae53498786ea5/jax-0.4.37-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/04/31/8fd189998732d1c5ecacf6a68b6c9aeaafa300b0eaa85b8c678238edba7c/jax_cuda12_pjrt-0.4.36-py3-none-manylinux2014_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/4b/b9/aaf71a9878ef3f4e4997dabf8458765cd8085c37f65865631980bfb83d53/jax_cuda12_plugin-0.4.36-cp312-cp312-manylinux2014_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/fe/f2/7624a304426daa7b135b85caf1b8eccf879e7cb10bc074656ce628309cb0/jaxlib-0.4.36-cp312-cp312-manylinux2014_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/62/20/6c57c50c0ccc645fea1895950f1e5cd02f961ee44b3ffe83617fa46b0c1d/jax-0.4.35-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d7/aa/f15ea857ad9bcff7a0c942dc570ca718b026cc0cc5c513525bb08cacf3c0/jax_cuda12_pjrt-0.4.35-py3-none-manylinux2014_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/23/a1/781f98da41b9abf63a1468c5babbafa7b1bdb766c081386644a4034fbdef/jax_cuda12_plugin-0.4.35-cp312-cp312-manylinux2014_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/e7/0d/4faf839e3c8ce2a5b615df64427be3e870899c72c0ebfb5859348150aba1/jaxlib-0.4.34-cp312-cp312-manylinux2014_x86_64.whl - pypi: https://files.pythonhosted.org/packages/94/99/c83c6a97f4382caf1c9bfeeeca935d3eb1f479f711665aeadf4408048107/jaxtyping-0.2.36-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/6f/d3/1321715a95e856d4ef4fba24e4351cf5e4c89d459ad132a8cba5fe257d72/ml_dtypes-0.5.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - pypi: https://files.pythonhosted.org/packages/af/eb/ff4b8c503fa1f1796679dce648854d58751982426e4e4b37d6fce49d259c/nvidia_cublas_cu12-12.6.4.1-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl @@ -262,8 +262,6 @@ packages: - conda: https://conda.anaconda.org/conda-forge/linux-64/_libgcc_mutex-0.1-conda_forge.tar.bz2 sha256: fe51de6107f9edc7aa4f786a70f4a883943bc9d39b3bb7307c04c41410990726 md5: d7c89558ba9fa0495403155b64376d81 - arch: x86_64 - platform: linux license: None purls: [] size: 2562 @@ -275,8 +273,6 @@ packages: depends: - _libgcc_mutex 0.1 conda_forge - llvm-openmp >=9.0.1 - arch: x86_64 - platform: linux license: BSD-3-Clause license_family: BSD purls: [] @@ -341,8 +337,6 @@ packages: - libstdcxx-ng >=12 constrains: - atk-1.0 2.38.0 - arch: x86_64 - platform: linux license: LGPL-2.0-or-later license_family: LGPL purls: [] @@ -354,8 +348,6 @@ packages: depends: - ld_impl_linux-64 2.43 h712a8e2_2 - sysroot_linux-64 - arch: x86_64 - platform: linux license: GPL-3.0-only license_family: GPL purls: [] @@ -366,8 +358,6 @@ packages: md5: 18aba879ddf1f8f28145ca6fcb873d8c depends: - binutils_impl_linux-64 2.43 h4bf12b8_2 - arch: x86_64 - platform: linux license: GPL-3.0-only license_family: GPL purls: [] @@ -390,8 +380,6 @@ packages: - liblapack 3.9.0 25_linux64_openblas - liblapacke 3.9.0 25_linux64_openblas - llvm-openmp >=19.1.2 - arch: x86_64 - platform: linux license: BSD-3-Clause license_family: BSD purls: [] @@ -407,8 +395,6 @@ packages: - liblapack 3.9.0 25_linux64_openblas - liblapacke 3.9.0 25_linux64_openblas - openblas 0.3.28.* - arch: x86_64 - platform: linux license: BSD-3-Clause license_family: BSD purls: [] @@ -434,8 +420,6 @@ packages: - libbrotlidec 1.1.0 hb9d3cd8_2 - libbrotlienc 1.1.0 hb9d3cd8_2 - libgcc >=13 - arch: x86_64 - platform: linux license: MIT license_family: MIT purls: [] @@ -449,8 +433,6 @@ packages: - libbrotlidec 1.1.0 hb9d3cd8_2 - libbrotlienc 1.1.0 hb9d3cd8_2 - libgcc >=13 - arch: x86_64 - platform: linux license: MIT license_family: MIT purls: [] @@ -462,8 +444,6 @@ packages: depends: - __glibc >=2.17,<3.0.a0 - libgcc-ng >=12 - arch: x86_64 - platform: linux license: bzip2-1.0.6 license_family: BSD purls: [] @@ -475,8 +455,6 @@ packages: depends: - __glibc >=2.17,<3.0.a0 - libgcc >=13 - arch: x86_64 - platform: linux license: MIT license_family: MIT purls: [] @@ -485,8 +463,6 @@ packages: - conda: https://conda.anaconda.org/conda-forge/linux-64/ca-certificates-2024.8.30-hbcca054_0.conda sha256: afee721baa6d988e27fef1832f68d6f32ac8cc99cdf6015732224c2841a09cea md5: c27d1c142233b5bc9ca570c6e2e0c244 - arch: x86_64 - platform: linux license: ISC purls: [] size: 159003 @@ -546,8 +522,6 @@ packages: - xorg-libx11 >=1.8.10,<2.0a0 - xorg-libxext >=1.3.6,<2.0a0 - xorg-libxrender >=0.9.11,<0.10.0a0 - arch: x86_64 - platform: linux license: LGPL-2.1-only or MPL-1.1 purls: [] size: 978868 @@ -636,8 +610,6 @@ packages: - numpy >=1.23 - python >=3.12,<3.13.0a0 - python_abi 3.12.* *_cp312 - arch: x86_64 - platform: linux license: BSD-3-Clause license_family: BSD purls: @@ -664,8 +636,6 @@ packages: - libstdcxx >=13 - python >=3.12,<3.13.0a0 - python_abi 3.12.* *_cp312 - arch: x86_64 - platform: linux license: MIT license_family: MIT purls: @@ -892,8 +862,6 @@ packages: - libgcc >=13 - libuuid >=2.38.1,<3.0a0 - libzlib >=1.3.1,<2.0a0 - arch: x86_64 - platform: linux license: MIT license_family: MIT purls: [] @@ -933,8 +901,6 @@ packages: - python >=3.12,<3.13.0a0 - python_abi 3.12.* *_cp312 - unicodedata2 >=15.1.0 - arch: x86_64 - platform: linux license: MIT license_family: MIT purls: @@ -948,8 +914,6 @@ packages: - libgcc-ng >=12 - libpng >=1.6.39,<1.7.0a0 - libzlib >=1.2.13,<2.0.0a0 - arch: x86_64 - platform: linux license: GPL-2.0-only OR FTL purls: [] size: 634972 @@ -959,8 +923,6 @@ packages: md5: ac7bc6a654f8f41b352b38f4051135f8 depends: - libgcc-ng >=7.5.0 - arch: x86_64 - platform: linux license: LGPL-2.1 purls: [] size: 114383 @@ -970,8 +932,6 @@ packages: md5: 606924335b5bcdf90e9aed9a2f5d22ed depends: - gcc_impl_linux-64 13.3.0.* - arch: x86_64 - platform: linux license: BSD-3-Clause license_family: BSD purls: [] @@ -988,8 +948,6 @@ packages: - libsanitizer 13.3.0 heb74ff8_1 - libstdcxx >=13.3.0 - sysroot_linux-64 - arch: x86_64 - platform: linux license: GPL-3.0-only WITH GCC-exception-3.1 license_family: GPL purls: [] @@ -1002,8 +960,6 @@ packages: - binutils_linux-64 - gcc_impl_linux-64 13.3.0.* - sysroot_linux-64 - arch: x86_64 - platform: linux license: BSD-3-Clause license_family: BSD purls: [] @@ -1018,8 +974,6 @@ packages: - libjpeg-turbo >=3.0.0,<4.0a0 - libpng >=1.6.43,<1.7.0a0 - libtiff >=4.6.0,<4.8.0a0 - arch: x86_64 - platform: linux license: LGPL-2.1-or-later license_family: LGPL purls: [] @@ -1031,8 +985,6 @@ packages: depends: - libgcc-ng >=12 - libstdcxx-ng >=12 - arch: x86_64 - platform: linux license: LGPL-2.0-or-later license_family: LGPL purls: [] @@ -1057,8 +1009,6 @@ packages: - libwebp-base >=1.4.0,<2.0a0 - libzlib >=1.3.1,<2.0a0 - pango >=1.50.14,<2.0a0 - arch: x86_64 - platform: linux license: EPL-1.0 license_family: Other purls: [] @@ -1082,8 +1032,6 @@ packages: - xorg-libx11 >=1.8.9,<2.0a0 - xorg-libxext >=1.3.4,<2.0a0 - xorg-libxrender >=0.9.11,<0.10.0a0 - arch: x86_64 - platform: linux license: LGPL-2.1-or-later purls: [] size: 6501561 @@ -1095,8 +1043,6 @@ packages: - libgcc-ng >=12 - libglib >=2.76.3,<3.0a0 - libstdcxx-ng >=12 - arch: x86_64 - platform: linux license: LGPL-2.0-or-later license_family: LGPL purls: [] @@ -1108,8 +1054,6 @@ packages: depends: - gcc 13.3.0.* - gxx_impl_linux-64 13.3.0.* - arch: x86_64 - platform: linux license: BSD-3-Clause license_family: BSD purls: [] @@ -1123,8 +1067,6 @@ packages: - libstdcxx-devel_linux-64 13.3.0 h84ea5a7_101 - sysroot_linux-64 - tzdata - arch: x86_64 - platform: linux license: GPL-3.0-only WITH GCC-exception-3.1 license_family: GPL purls: [] @@ -1138,8 +1080,6 @@ packages: - gcc_linux-64 13.3.0 hc28eda2_7 - gxx_impl_linux-64 13.3.0.* - sysroot_linux-64 - arch: x86_64 - platform: linux license: BSD-3-Clause license_family: BSD purls: [] @@ -1169,8 +1109,6 @@ packages: - numpy >=1.19,<3 - python >=3.12,<3.13.0a0 - python_abi 3.12.* *_cp312 - arch: x86_64 - platform: linux license: BSD-3-Clause license_family: BSD purls: @@ -1189,8 +1127,6 @@ packages: - libgcc-ng >=12 - libglib >=2.80.3,<3.0a0 - libstdcxx-ng >=12 - arch: x86_64 - platform: linux license: MIT license_family: MIT purls: [] @@ -1209,8 +1145,6 @@ packages: - libstdcxx >=13 - libzlib >=1.3.1,<2.0a0 - openssl >=3.4.0,<4.0a0 - arch: x86_64 - platform: linux license: BSD-3-Clause license_family: BSD purls: [] @@ -1223,8 +1157,6 @@ packages: - __glibc >=2.17,<3.0.a0 - libgcc-ng >=12 - libstdcxx-ng >=12 - arch: x86_64 - platform: linux license: MIT license_family: MIT purls: [] @@ -1326,47 +1258,47 @@ packages: - pkg:pypi/ipywidgets?source=hash-mapping size: 113982 timestamp: 1733493669268 -- pypi: https://files.pythonhosted.org/packages/5f/3f/6c5553baaa7faa3fa8bae8279b1e46cb54c7ce52360139eae53498786ea5/jax-0.4.37-py3-none-any.whl +- pypi: https://files.pythonhosted.org/packages/62/20/6c57c50c0ccc645fea1895950f1e5cd02f961ee44b3ffe83617fa46b0c1d/jax-0.4.35-py3-none-any.whl name: jax - version: 0.4.37 - sha256: bdc0686d7e5a944e2d38026eae632214d98dd2d91869cbcedbf1c11298ae3e3e + version: 0.4.35 + sha256: fa99e909a31424abfec750019a6dd36f6acc18a6e7d40e2c0086b932cc351325 requires_dist: - - jaxlib>=0.4.36,<=0.4.37 + - jaxlib>=0.4.34,<=0.4.35 - ml-dtypes>=0.4.0 - numpy>=1.24 - - numpy>=1.26.0 ; python_full_version >= '3.12' - opt-einsum - scipy>=1.10 + - numpy>=1.26.0 ; python_full_version >= '3.12' - scipy>=1.11.1 ; python_full_version >= '3.12' - - jaxlib==0.4.36 ; extra == 'minimum-jaxlib' - - jaxlib==0.4.35 ; extra == 'ci' - - jaxlib>=0.4.36,<=0.4.37 ; extra == 'tpu' + - jaxlib==0.4.34 ; extra == 'ci' + - jaxlib==0.4.34 ; extra == 'cuda' + - jax-cuda12-plugin[with-cuda]>=0.4.34,<=0.4.35 ; extra == 'cuda' + - jaxlib==0.4.34 ; extra == 'cuda12' + - jax-cuda12-plugin[with-cuda]>=0.4.34,<=0.4.35 ; extra == 'cuda12' + - jaxlib==0.4.34 ; extra == 'cuda12-local' + - jax-cuda12-plugin==0.4.34 ; extra == 'cuda12-local' + - jaxlib==0.4.34 ; extra == 'cuda12-pip' + - jax-cuda12-plugin[with-cuda]>=0.4.34,<=0.4.35 ; extra == 'cuda12-pip' + - kubernetes ; extra == 'k8s' + - jaxlib==0.4.34 ; extra == 'minimum-jaxlib' + - jaxlib>=0.4.34,<=0.4.35 ; extra == 'tpu' - libtpu-nightly==0.1.dev20241010+nightly.cleanup ; extra == 'tpu' - - libtpu==0.0.6 ; extra == 'tpu' + - libtpu==0.0.2 ; extra == 'tpu' - requests ; extra == 'tpu' - - jaxlib==0.4.36 ; extra == 'cuda' - - jax-cuda12-plugin[with-cuda]>=0.4.36,<=0.4.37 ; extra == 'cuda' - - jaxlib==0.4.36 ; extra == 'cuda12' - - jax-cuda12-plugin[with-cuda]>=0.4.36,<=0.4.37 ; extra == 'cuda12' - - jaxlib==0.4.36 ; extra == 'cuda12-pip' - - jax-cuda12-plugin[with-cuda]>=0.4.36,<=0.4.37 ; extra == 'cuda12-pip' - - jaxlib==0.4.36 ; extra == 'cuda12-local' - - jax-cuda12-plugin==0.4.36 ; extra == 'cuda12-local' - - kubernetes ; extra == 'k8s' requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/04/31/8fd189998732d1c5ecacf6a68b6c9aeaafa300b0eaa85b8c678238edba7c/jax_cuda12_pjrt-0.4.36-py3-none-manylinux2014_x86_64.whl +- pypi: https://files.pythonhosted.org/packages/d7/aa/f15ea857ad9bcff7a0c942dc570ca718b026cc0cc5c513525bb08cacf3c0/jax_cuda12_pjrt-0.4.35-py3-none-manylinux2014_x86_64.whl name: jax-cuda12-pjrt - version: 0.4.36 - sha256: e3c3705d8db7d63da9abfaebf06f5cd0667f5acb0748a5c5eb00d80041e922ed -- pypi: https://files.pythonhosted.org/packages/4b/b9/aaf71a9878ef3f4e4997dabf8458765cd8085c37f65865631980bfb83d53/jax_cuda12_plugin-0.4.36-cp312-cp312-manylinux2014_x86_64.whl + version: 0.4.35 + sha256: 0ffe7e1ba65659bd5738c2cc5addaf0a56205d2188eec5da194b63c068e1fdd2 +- pypi: https://files.pythonhosted.org/packages/23/a1/781f98da41b9abf63a1468c5babbafa7b1bdb766c081386644a4034fbdef/jax_cuda12_plugin-0.4.35-cp312-cp312-manylinux2014_x86_64.whl name: jax-cuda12-plugin - version: 0.4.36 - sha256: 5d4727fb519fedc06a9a984d5a0714804d81ef126a2cb60cefd5cbc4a3ea2627 + version: 0.4.35 + sha256: 80aa5e628e8e9dd4f89b767f73900152033c3bf6d5f49dc2081e93f9bac1c9dc requires_dist: - - jax-cuda12-pjrt==0.4.36 + - jax-cuda12-pjrt==0.4.35 - nvidia-cublas-cu12>=12.1.3.1 ; extra == 'with-cuda' - nvidia-cuda-cupti-cu12>=12.1.105 ; extra == 'with-cuda' - - nvidia-cuda-nvcc-cu12>=12.6.85 ; extra == 'with-cuda' + - nvidia-cuda-nvcc-cu12>=12.1.105 ; extra == 'with-cuda' - nvidia-cuda-runtime-cu12>=12.1.105 ; extra == 'with-cuda' - nvidia-cudnn-cu12>=9.1,<10.0 ; extra == 'with-cuda' - nvidia-cufft-cu12>=11.0.2.54 ; extra == 'with-cuda' @@ -1375,10 +1307,10 @@ packages: - nvidia-nccl-cu12>=2.18.1 ; extra == 'with-cuda' - nvidia-nvjitlink-cu12>=12.1.105 ; extra == 'with-cuda' requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/fe/f2/7624a304426daa7b135b85caf1b8eccf879e7cb10bc074656ce628309cb0/jaxlib-0.4.36-cp312-cp312-manylinux2014_x86_64.whl +- pypi: https://files.pythonhosted.org/packages/e7/0d/4faf839e3c8ce2a5b615df64427be3e870899c72c0ebfb5859348150aba1/jaxlib-0.4.34-cp312-cp312-manylinux2014_x86_64.whl name: jaxlib - version: 0.4.36 - sha256: be295abc209c980817db0488f21f1fbc0644f87326522895e2b9b64729106357 + version: 0.4.34 + sha256: 48272e9034ff868d4328cf0055a07882fd2be93f59dfb6283af7de491f9d1290 requires_dist: - scipy>=1.10 - numpy>=1.24 @@ -1462,8 +1394,6 @@ packages: md5: 30186d27e2c9fa62b45fb1476b7200e3 depends: - libgcc-ng >=10.3.0 - arch: x86_64 - platform: linux license: LGPL-2.1-or-later purls: [] size: 117831 @@ -1477,8 +1407,6 @@ packages: - libstdcxx >=13 - python >=3.12,<3.13.0a0 - python_abi 3.12.* *_cp312 - arch: x86_64 - platform: linux license: BSD-3-Clause license_family: BSD purls: @@ -1495,8 +1423,6 @@ packages: - libgcc-ng >=12 - libstdcxx-ng >=12 - openssl >=3.3.1,<4.0a0 - arch: x86_64 - platform: linux license: MIT license_family: MIT purls: [] @@ -1509,8 +1435,6 @@ packages: - libgcc-ng >=12 - libjpeg-turbo >=3.0.0,<4.0a0 - libtiff >=4.6.0,<4.8.0a0 - arch: x86_64 - platform: linux license: MIT license_family: MIT purls: [] @@ -1523,8 +1447,6 @@ packages: - __glibc >=2.17,<3.0.a0 constrains: - binutils_impl_linux-64 2.43 - arch: x86_64 - platform: linux license: GPL-3.0-only license_family: GPL purls: [] @@ -1536,8 +1458,6 @@ packages: depends: - libgcc-ng >=12 - libstdcxx-ng >=12 - arch: x86_64 - platform: linux license: Apache-2.0 license_family: Apache purls: [] @@ -1549,8 +1469,6 @@ packages: depends: - libgcc-ng >=12 - libstdcxx-ng >=12 - arch: x86_64 - platform: linux license: BSD-2-Clause license_family: BSD purls: [] @@ -1568,8 +1486,6 @@ packages: - libcblas 3.9.0 25_linux64_openblas - blas * openblas - liblapacke 3.9.0 25_linux64_openblas - arch: x86_64 - platform: linux license: BSD-3-Clause license_family: BSD purls: [] @@ -1581,8 +1497,6 @@ packages: depends: - __glibc >=2.17,<3.0.a0 - libgcc >=13 - arch: x86_64 - platform: linux license: MIT license_family: MIT purls: [] @@ -1595,8 +1509,6 @@ packages: - __glibc >=2.17,<3.0.a0 - libbrotlicommon 1.1.0 hb9d3cd8_2 - libgcc >=13 - arch: x86_64 - platform: linux license: MIT license_family: MIT purls: [] @@ -1609,8 +1521,6 @@ packages: - __glibc >=2.17,<3.0.a0 - libbrotlicommon 1.1.0 hb9d3cd8_2 - libgcc >=13 - arch: x86_64 - platform: linux license: MIT license_family: MIT purls: [] @@ -1626,8 +1536,6 @@ packages: - liblapack 3.9.0 25_linux64_openblas - blas * openblas - liblapacke 3.9.0 25_linux64_openblas - arch: x86_64 - platform: linux license: BSD-3-Clause license_family: BSD purls: [] @@ -1645,8 +1553,6 @@ packages: - libzlib >=1.3.1,<2.0a0 - openssl >=3.4.0,<4.0a0 - zstd >=1.5.6,<1.6.0a0 - arch: x86_64 - platform: linux license: curl license_family: MIT purls: [] @@ -1658,8 +1564,6 @@ packages: depends: - __glibc >=2.17,<3.0.a0 - libgcc >=13 - arch: x86_64 - platform: linux license: MIT license_family: MIT purls: [] @@ -1671,8 +1575,6 @@ packages: depends: - libgcc-ng >=7.5.0 - ncurses >=6.2,<7.0.0a0 - arch: x86_64 - platform: linux license: BSD-2-Clause license_family: BSD purls: [] @@ -1683,8 +1585,6 @@ packages: md5: 172bf1cd1ff8629f2b1179945ed45055 depends: - libgcc-ng >=12 - arch: x86_64 - platform: linux license: BSD-2-Clause license_family: BSD purls: [] @@ -1698,8 +1598,6 @@ packages: - libgcc >=13 constrains: - expat 2.6.4.* - arch: x86_64 - platform: linux license: MIT license_family: MIT purls: [] @@ -1710,8 +1608,6 @@ packages: md5: d645c6d2ac96843a2bfaccd2d62b3ac3 depends: - libgcc-ng >=9.4.0 - arch: x86_64 - platform: linux license: MIT license_family: MIT purls: [] @@ -1726,8 +1622,6 @@ packages: constrains: - libgomp 14.2.0 h77fa898_1 - libgcc-ng ==14.2.0=*_1 - arch: x86_64 - platform: linux license: GPL-3.0-only WITH GCC-exception-3.1 license_family: GPL purls: [] @@ -1748,8 +1642,6 @@ packages: md5: e39480b9ca41323497b05492a63bc35b depends: - libgcc 14.2.0 h77fa898_1 - arch: x86_64 - platform: linux license: GPL-3.0-only WITH GCC-exception-3.1 license_family: GPL purls: [] @@ -1771,8 +1663,6 @@ packages: - libtiff >=4.6.0,<4.8.0a0 - libwebp-base >=1.4.0,<2.0a0 - libzlib >=1.3.1,<2.0a0 - arch: x86_64 - platform: linux license: GD license_family: BSD purls: [] @@ -1785,8 +1675,6 @@ packages: - libgfortran5 14.2.0 hd5240d6_1 constrains: - libgfortran-ng ==14.2.0=*_1 - arch: x86_64 - platform: linux license: GPL-3.0-only WITH GCC-exception-3.1 license_family: GPL purls: [] @@ -1799,8 +1687,6 @@ packages: - libgcc >=14.2.0 constrains: - libgfortran 14.2.0 - arch: x86_64 - platform: linux license: GPL-3.0-only WITH GCC-exception-3.1 license_family: GPL purls: [] @@ -1818,8 +1704,6 @@ packages: - pcre2 >=10.44,<10.45.0a0 constrains: - glib 2.82.2 *_0 - arch: x86_64 - platform: linux license: LGPL-2.1-or-later purls: [] size: 3931898 @@ -1829,8 +1713,6 @@ packages: md5: cc3573974587f12dda90d96e3e55a702 depends: - _libgcc_mutex 0.1 conda_forge - arch: x86_64 - platform: linux license: GPL-3.0-only WITH GCC-exception-3.1 license_family: GPL purls: [] @@ -1844,8 +1726,6 @@ packages: - libgcc >=13 - libstdcxx >=13 - libxml2 >=2.13.4,<3.0a0 - arch: x86_64 - platform: linux license: BSD-3-Clause license_family: BSD purls: [] @@ -1856,8 +1736,6 @@ packages: md5: d66573916ffcf376178462f1b61c941e depends: - libgcc-ng >=12 - arch: x86_64 - platform: linux license: LGPL-2.1-only purls: [] size: 705775 @@ -1869,8 +1747,6 @@ packages: - libgcc-ng >=12 constrains: - jpeg <0.0.0a - arch: x86_64 - platform: linux license: IJG AND BSD-3-Clause AND Zlib purls: [] size: 618575 @@ -1885,8 +1761,6 @@ packages: - liblapacke 3.9.0 25_linux64_openblas - libcblas 3.9.0 25_linux64_openblas - blas * openblas - arch: x86_64 - platform: linux license: BSD-3-Clause license_family: BSD purls: [] @@ -1902,8 +1776,6 @@ packages: - liblapack 3.9.0 25_linux64_openblas constrains: - blas * openblas - arch: x86_64 - platform: linux license: BSD-3-Clause license_family: BSD purls: [] @@ -1916,8 +1788,6 @@ packages: - libgcc-ng >=12 - libstdcxx-ng >=12 - libzlib >=1.2.13,<2.0.0a0 - arch: x86_64 - platform: linux license: Apache-2.0 WITH LLVM-exception license_family: Apache purls: [] @@ -1929,8 +1799,6 @@ packages: depends: - __glibc >=2.17,<3.0.a0 - libgcc >=13 - arch: x86_64 - platform: linux license: 0BSD purls: [] size: 111132 @@ -1947,8 +1815,6 @@ packages: - libstdcxx >=13 - libzlib >=1.3.1,<2.0a0 - openssl >=3.3.2,<4.0a0 - arch: x86_64 - platform: linux license: MIT license_family: MIT purls: [] @@ -1959,8 +1825,6 @@ packages: md5: 30fd6e37fe21f86f4bd26d6ee73eeec7 depends: - libgcc-ng >=12 - arch: x86_64 - platform: linux license: LGPL-2.1-only license_family: GPL purls: [] @@ -1976,8 +1840,6 @@ packages: - libgfortran5 >=14.2.0 constrains: - openblas >=0.3.28,<0.3.29.0a0 - arch: x86_64 - platform: linux license: BSD-3-Clause license_family: BSD purls: [] @@ -1990,8 +1852,6 @@ packages: - __glibc >=2.17,<3.0.a0 - libgcc >=13 - libzlib >=1.3.1,<2.0a0 - arch: x86_64 - platform: linux license: zlib-acknowledgement purls: [] size: 290661 @@ -2012,8 +1872,6 @@ packages: - pango >=1.54.0,<2.0a0 constrains: - __glibc >=2.17 - arch: x86_64 - platform: linux license: LGPL-2.1-or-later purls: [] size: 6390511 @@ -2024,8 +1882,6 @@ packages: depends: - libgcc >=13.3.0 - libstdcxx >=13.3.0 - arch: x86_64 - platform: linux license: GPL-3.0-only WITH GCC-exception-3.1 license_family: GPL purls: [] @@ -2036,8 +1892,6 @@ packages: md5: a587892d3c13b6621a6091be690dbca2 depends: - libgcc-ng >=12 - arch: x86_64 - platform: linux license: ISC purls: [] size: 205978 @@ -2049,8 +1903,6 @@ packages: - __glibc >=2.17,<3.0.a0 - libgcc >=13 - libzlib >=1.3.1,<2.0a0 - arch: x86_64 - platform: linux license: Unlicense purls: [] size: 873551 @@ -2063,8 +1915,6 @@ packages: - libgcc >=13 - libzlib >=1.3.1,<2.0a0 - openssl >=3.4.0,<4.0a0 - arch: x86_64 - platform: linux license: BSD-3-Clause license_family: BSD purls: [] @@ -2075,8 +1925,6 @@ packages: md5: 234a5554c53625688d51062645337328 depends: - libgcc 14.2.0 h77fa898_1 - arch: x86_64 - platform: linux license: GPL-3.0-only WITH GCC-exception-3.1 license_family: GPL purls: [] @@ -2097,8 +1945,6 @@ packages: md5: 8371ac6457591af2cf6159439c1fd051 depends: - libstdcxx 14.2.0 hc0a3c3a_1 - arch: x86_64 - platform: linux license: GPL-3.0-only WITH GCC-exception-3.1 license_family: GPL purls: [] @@ -2118,8 +1964,6 @@ packages: - libwebp-base >=1.4.0,<2.0a0 - libzlib >=1.3.1,<2.0a0 - zstd >=1.5.6,<1.6.0a0 - arch: x86_64 - platform: linux license: HPND purls: [] size: 429018 @@ -2129,8 +1973,6 @@ packages: md5: 40b61aab5c7ba9ff276c41cfffe6b80b depends: - libgcc-ng >=12 - arch: x86_64 - platform: linux license: BSD-3-Clause license_family: BSD purls: [] @@ -2143,8 +1985,6 @@ packages: - libgcc-ng >=12 constrains: - libwebp 1.4.0 - arch: x86_64 - platform: linux license: BSD-3-Clause license_family: BSD purls: [] @@ -2159,8 +1999,6 @@ packages: - pthread-stubs - xorg-libxau >=1.0.11,<2.0a0 - xorg-libxdmcp - arch: x86_64 - platform: linux license: MIT license_family: MIT purls: [] @@ -2171,8 +2009,6 @@ packages: md5: 5aa797f8787fe7a17d1b0821485b5adc depends: - libgcc-ng >=12 - arch: x86_64 - platform: linux license: LGPL-2.1-or-later purls: [] size: 100393 @@ -2187,8 +2023,6 @@ packages: - libiconv >=1.17,<2.0a0 - liblzma >=5.6.3,<6.0a0 - libzlib >=1.3.1,<2.0a0 - arch: x86_64 - platform: linux license: MIT license_family: MIT purls: [] @@ -2202,8 +2036,6 @@ packages: - libgcc >=13 constrains: - zlib 1.3.1 *_2 - arch: x86_64 - platform: linux license: Zlib license_family: Other purls: [] @@ -2216,8 +2048,6 @@ packages: - __glibc >=2.17,<3.0.a0 constrains: - openmp 19.1.5|19.1.5.* - arch: x86_64 - platform: linux license: Apache-2.0 WITH LLVM-exception license_family: APACHE purls: [] @@ -2234,8 +2064,6 @@ packages: - libzlib >=1.3.1,<2.0a0 - python >=3.12,<3.13.0a0 - python_abi 3.12.* *_cp312 - arch: x86_64 - platform: linux license: BSD-2-Clause license_family: BSD purls: @@ -2290,8 +2118,6 @@ packages: - python_abi 3.12.* *_cp312 - qhull >=2020.2,<2020.3.0a0 - tk >=8.6.13,<8.7.0a0 - arch: x86_64 - platform: linux license: PSF-2.0 license_family: PSF purls: @@ -2320,8 +2146,6 @@ packages: - python >=3.12,<3.13.0a0 - python_abi 3.12.* *_cp312 - tomli >=1.1.0 - arch: x86_64 - platform: linux license: MIT license_family: MIT purls: @@ -2363,8 +2187,6 @@ packages: - _openmp_mutex >=4.5 - llvm-openmp >=19.1.2 - tbb 2021.* - arch: x86_64 - platform: linux license: LicenseRef-IntelSimplifiedSoftwareOct2022 license_family: Proprietary purls: [] @@ -2379,8 +2201,6 @@ packages: - mkl >=2024.2.2,<2025.0a0 - python >=3.12,<3.13.0a0 - python_abi 3.12.* *_cp312 - arch: x86_64 - platform: linux license: BSD-3-Clause license_family: BSD purls: @@ -2412,8 +2232,6 @@ packages: - libstdcxx >=13 - python >=3.12,<3.13.0a0 - python_abi 3.12.* *_cp312 - arch: x86_64 - platform: linux license: Apache-2.0 license_family: Apache purls: @@ -2449,8 +2267,6 @@ packages: depends: - __glibc >=2.17,<3.0.a0 - libgcc-ng >=12 - arch: x86_64 - platform: linux license: X11 AND BSD-3-Clause purls: [] size: 889086 @@ -2485,8 +2301,6 @@ packages: - scipy >=1.0 - libopenblas !=0.3.6 - cudatoolkit >=11.2 - arch: x86_64 - platform: linux license: BSD-2-Clause license_family: BSD purls: @@ -2505,8 +2319,6 @@ packages: - numpy >=1.24 - python >=3.12,<3.13.0a0 - python_abi 3.12.* *_cp312 - arch: x86_64 - platform: linux license: MIT license_family: MIT purls: @@ -2526,8 +2338,6 @@ packages: - python_abi 3.12.* *_cp312 constrains: - numpy-base <0a0 - arch: x86_64 - platform: linux license: BSD-3-Clause license_family: BSD purls: @@ -2610,8 +2420,6 @@ packages: md5: 8fe5d50db07e92519cc639cb0aef9b1b depends: - libopenblas 0.3.28 pthreads_h94d23a6_1 - arch: x86_64 - platform: linux license: BSD-3-Clause license_family: BSD purls: [] @@ -2627,8 +2435,6 @@ packages: - libstdcxx >=13 - libtiff >=4.7.0,<4.8.0a0 - libzlib >=1.3.1,<2.0a0 - arch: x86_64 - platform: linux license: BSD-2-Clause license_family: BSD purls: [] @@ -2641,8 +2447,6 @@ packages: - __glibc >=2.17,<3.0.a0 - ca-certificates - libgcc >=13 - arch: x86_64 - platform: linux license: Apache-2.0 license_family: Apache purls: [] @@ -2702,8 +2506,6 @@ packages: - python_abi 3.12.* *_cp312 constrains: - __glibc >=2.17 - arch: x86_64 - platform: linux license: Apache-2.0 license_family: Apache purls: @@ -2735,8 +2537,6 @@ packages: - python-tzdata >=2022a - python_abi 3.12.* *_cp312 - pytz >=2020.1,<2024.2 - arch: x86_64 - platform: linux license: BSD-3-Clause license_family: BSD purls: @@ -2758,8 +2558,6 @@ packages: - libgcc >=13 - libglib >=2.82.2,<3.0a0 - libpng >=1.6.44,<1.7.0a0 - arch: x86_64 - platform: linux license: LGPL-2.1-or-later purls: [] size: 447446 @@ -2811,8 +2609,6 @@ packages: - bzip2 >=1.0.8,<2.0a0 - libgcc-ng >=12 - libzlib >=1.3.1,<2.0a0 - arch: x86_64 - platform: linux license: BSD-3-Clause license_family: BSD purls: [] @@ -2857,8 +2653,6 @@ packages: - python >=3.12,<3.13.0a0 - python_abi 3.12.* *_cp312 - tk >=8.6.13,<8.7.0a0 - arch: x86_64 - platform: linux license: HPND purls: - pkg:pypi/pillow?source=hash-mapping @@ -2884,8 +2678,6 @@ packages: - __glibc >=2.17,<3.0.a0 - libgcc >=13 - libstdcxx >=13 - arch: x86_64 - platform: linux license: MIT license_family: MIT purls: [] @@ -2925,8 +2717,6 @@ packages: - python_abi 3.12.* *_cp312 constrains: - __glibc >=2.17 - arch: x86_64 - platform: linux license: MIT license_family: MIT purls: @@ -2961,8 +2751,6 @@ packages: - libgcc >=13 - python >=3.12,<3.13.0a0 - python_abi 3.12.* *_cp312 - arch: x86_64 - platform: linux license: BSD-3-Clause license_family: BSD purls: @@ -2975,8 +2763,6 @@ packages: depends: - __glibc >=2.17,<3.0.a0 - libgcc >=13 - arch: x86_64 - platform: linux license: MIT license_family: MIT purls: [] @@ -3072,8 +2858,6 @@ packages: - python >=3.12,<3.13.0a0 - python_abi 3.12.* *_cp312 - sysroot_linux-64 2.17.* - arch: x86_64 - platform: linux license: BSD-3-Clause license_family: BSD purls: [] @@ -3096,8 +2880,6 @@ packages: - python_abi 3.12.* *_cp312 - scipy >=1,<2 - setuptools >=59.0.0 - arch: x86_64 - platform: linux license: BSD-3-Clause license_family: BSD purls: @@ -3147,8 +2929,6 @@ packages: - tzdata constrains: - python_abi 3.12.* *_cp312 - arch: x86_64 - platform: linux license: Python-2.0 purls: [] size: 31565686 @@ -3194,8 +2974,6 @@ packages: md5: 0424ae29b104430108f5218a66db7260 constrains: - python 3.12.* *_cpython - arch: x86_64 - platform: linux license: BSD-3-Clause license_family: BSD purls: [] @@ -3223,8 +3001,6 @@ packages: - python >=3.12,<3.13.0a0 - python_abi 3.12.* *_cp312 - zeromq >=4.3.5,<4.4.0a0 - arch: x86_64 - platform: linux license: BSD-3-Clause license_family: BSD purls: @@ -3238,8 +3014,6 @@ packages: - __glibc >=2.17,<3.0.a0 - libgcc-ng >=12 - libstdcxx-ng >=12 - arch: x86_64 - platform: linux license: LicenseRef-Qhull purls: [] size: 552937 @@ -3250,8 +3024,6 @@ packages: depends: - libgcc-ng >=12 - ncurses >=6.3,<7.0a0 - arch: x86_64 - platform: linux license: GPL-3.0-only license_family: GPL purls: [] @@ -3310,8 +3082,6 @@ packages: - numpy >=1.23.5 - python >=3.12,<3.13.0a0 - python_abi 3.12.* *_cp312 - arch: x86_64 - platform: linux license: BSD-3-Clause license_family: BSD purls: @@ -3397,8 +3167,6 @@ packages: - python >=3.12,<3.13.0a0 - python_abi 3.12.* *_cp312 - scipy !=1.9.2,>=1.8 - arch: x86_64 - platform: linux license: BSD-3-Clause license_family: BSD purls: @@ -3424,8 +3192,6 @@ packages: - libgcc >=13 - libhwloc >=2.11.2,<2.11.3.0a0 - libstdcxx >=13 - arch: x86_64 - platform: linux license: Apache-2.0 license_family: APACHE purls: [] @@ -3448,8 +3214,6 @@ packages: depends: - libgcc-ng >=12 - libzlib >=1.2.13,<2.0.0a0 - arch: x86_64 - platform: linux license: TCL license_family: BSD purls: [] @@ -3485,8 +3249,6 @@ packages: - libgcc >=13 - python >=3.12,<3.13.0a0 - python_abi 3.12.* *_cp312 - arch: x86_64 - platform: linux license: Apache-2.0 license_family: Apache purls: @@ -3557,8 +3319,6 @@ packages: - libgcc >=13 - python >=3.12,<3.13.0a0 - python_abi 3.12.* *_cp312 - arch: x86_64 - platform: linux license: Apache-2.0 license_family: Apache purls: @@ -3587,8 +3347,6 @@ packages: - orjson - python >=3.12,<3.13.0a0 - python_abi 3.12.* *_cp312 - arch: x86_64 - platform: linux license: Apache-2.0 license_family: APACHE purls: @@ -3693,8 +3451,6 @@ packages: depends: - __glibc >=2.17,<3.0.a0 - libgcc >=13 - arch: x86_64 - platform: linux license: MIT license_family: MIT purls: [] @@ -3708,8 +3464,6 @@ packages: - libgcc >=13 - libuuid >=2.38.1,<3.0a0 - xorg-libice >=1.1.1,<2.0a0 - arch: x86_64 - platform: linux license: MIT license_family: MIT purls: [] @@ -3722,8 +3476,6 @@ packages: - __glibc >=2.17,<3.0.a0 - libgcc >=13 - libxcb >=1.17.0,<2.0a0 - arch: x86_64 - platform: linux license: MIT license_family: MIT purls: [] @@ -3735,8 +3487,6 @@ packages: depends: - __glibc >=2.17,<3.0.a0 - libgcc >=13 - arch: x86_64 - platform: linux license: MIT license_family: MIT purls: [] @@ -3748,8 +3498,6 @@ packages: depends: - __glibc >=2.17,<3.0.a0 - libgcc >=13 - arch: x86_64 - platform: linux license: MIT license_family: MIT purls: [] @@ -3762,8 +3510,6 @@ packages: - __glibc >=2.17,<3.0.a0 - libgcc >=13 - xorg-libx11 >=1.8.10,<2.0a0 - arch: x86_64 - platform: linux license: MIT license_family: MIT purls: [] @@ -3776,8 +3522,6 @@ packages: - __glibc >=2.17,<3.0.a0 - libgcc >=13 - xorg-libx11 >=1.8.10,<2.0a0 - arch: x86_64 - platform: linux license: MIT license_family: MIT purls: [] @@ -3811,8 +3555,6 @@ packages: - libgcc >=13 - libsodium >=1.0.20,<1.0.21.0a0 - libstdcxx >=13 - arch: x86_64 - platform: linux license: MPL-2.0 license_family: MOZILLA purls: [] @@ -3836,8 +3578,6 @@ packages: - libgcc-ng >=12 - libstdcxx-ng >=12 - libzlib >=1.2.13,<2.0.0a0 - arch: x86_64 - platform: linux license: BSD-3-Clause license_family: BSD purls: [] diff --git a/pixi.toml b/pixi.toml index deffa6a..fd6b616 100644 --- a/pixi.toml +++ b/pixi.toml @@ -34,7 +34,7 @@ bridgestan = ">=2.5.0, <3" flowjax = { path = "../flowjax/", editable = true } samplerlab = { path = "../pymc-labs/benchmark-pymc", editable = true } posteriordb = ">=0.2.0, <0.3" -jax = { version = ">=0.4.35, <0.5", extras = ["cuda12"] } +jax = { version = "<0.4.37, <0.5", extras = ["cuda12"] } watermark = ">=2.5.0, <3" [system-requirements] From 5707c03c04be9da62ec61d079e18fbaad53c79d5 Mon Sep 17 00:00:00 2001 From: Adrian Seyboldt Date: Mon, 16 Dec 2024 18:43:41 +0100 Subject: [PATCH 27/34] chore: add items to gitignore --- .gitignore | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.gitignore b/.gitignore index 2d1f0df..6f4df52 100644 --- a/.gitignore +++ b/.gitignore @@ -8,6 +8,7 @@ tvm_libs/* notebooks/*.stan notebooks/*.csv notebooks/*.hpp +notebooks/radon* perf.data* wheels .vscode/ @@ -15,3 +16,4 @@ wheels .zed .cargo *traces* +.pyrightconfig.json From 04af51c5484c7025edc98526da06be91f922115b Mon Sep 17 00:00:00 2001 From: Adrian Seyboldt Date: Mon, 16 Dec 2024 18:44:05 +0100 Subject: [PATCH 28/34] chore: update bridgestan --- Cargo.lock | 148 ++++++++++++----------------------------------------- Cargo.toml | 4 +- 2 files changed, 36 insertions(+), 116 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 263aa2e..79e6311 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -265,25 +265,22 @@ checksum = "8c3c1a368f70d6cf7302d78f8f7093da241fb8e8807c05cc9e51a125895a6d5b" [[package]] name = "bindgen" -version = "0.69.5" +version = "0.71.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "271383c67ccabffb7381723dea0672a673f292304fcb45c01cc648c7a8d58088" +checksum = "5f58bf3d7db68cfbac37cfc485a8d711e87e064c3d0fe0435b92f7a407f9d6b3" dependencies = [ "bitflags 2.6.0", "cexpr", "clang-sys", - "itertools 0.12.1", - "lazy_static", - "lazycell", + "itertools 0.13.0", "log", "prettyplease", "proc-macro2", "quote", "regex", - "rustc-hash 1.1.0", + "rustc-hash", "shlex", "syn", - "which", ] [[package]] @@ -309,15 +306,15 @@ dependencies = [ [[package]] name = "bridgestan" -version = "2.5.0" +version = "2.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc8db213e11ba8b22c444912e269f8164d4af17292e6e78d9d6a4162225e929b" +checksum = "9c5194bc381310a0a90cbf52bbf96132f0951b99fcd939f22ca4da09a5c60589" dependencies = [ "bindgen", "libloading", "log", "path-absolutize", - "thiserror 1.0.69", + "thiserror 2.0.7", ] [[package]] @@ -387,9 +384,9 @@ checksum = "37b2a672a2cb129a2e41c10b1224bb368f9f37a2b16b612598138befd7b37eb5" [[package]] name = "cc" -version = "1.2.3" +version = "1.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "27f657647bcff5394bf56c7317665bbf790a137a50eaaa5c6bfbb9e27a518f2d" +checksum = "9157bbaa6b165880c27a4293a474c91cdcf265cc68cc829bf10be0964a391caf" dependencies = [ "jobserver", "libc", @@ -504,15 +501,15 @@ checksum = "7e8f1e641542c07631228b1e0dc04b69ae3c1d58ef65d5691a439711d805c698" [[package]] name = "console" -version = "0.15.8" +version = "0.15.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e1f83fc076bd6dd27517eacdf25fef6c4dfe5f1d7448bafaaf3a26f13b5e4eb" +checksum = "ea3c6ecd8059b57859df5c69830340ed3c41d30e3da0c1cbed90a96ac853041b" dependencies = [ "encode_unicode", - "lazy_static", "libc", - "unicode-width 0.1.14", - "windows-sys 0.52.0", + "once_cell", + "unicode-width", + "windows-sys 0.59.0", ] [[package]] @@ -603,9 +600,9 @@ dependencies = [ [[package]] name = "crossbeam-deque" -version = "0.8.5" +version = "0.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "613f8cc01fe9cf1a3eb3d7f488fd2fa8388403e97039e2f73692932e291a770d" +checksum = "9dd111b7b7f7d55b72c0a6ae361660ee5853c9af73f70c3c2ef6858b950e2e51" dependencies = [ "crossbeam-epoch", "crossbeam-utils", @@ -622,9 +619,9 @@ dependencies = [ [[package]] name = "crossbeam-utils" -version = "0.8.20" +version = "0.8.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22ec99545bb0ed0ea7bb9b8e1e9122ea386ff8a48c0922e43f36d45ab09e0e80" +checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" [[package]] name = "crunchy" @@ -686,9 +683,9 @@ checksum = "60b1af1c220855b6ceac025d3f6ecdd2b7c4894bfe9cd9bda4fbb4bc7c0d4cf0" [[package]] name = "encode_unicode" -version = "0.3.6" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a357d28ed41a50f9c765dbfe56cbc04a64e53e5fc58ba79fbc34c10ef3df831f" +checksum = "34aa73646ffb006b8f5147f3dc182bd4bcb190227ce861fc4a4844bf8e3cb2c0" [[package]] name = "enum-as-inner" @@ -742,16 +739,6 @@ dependencies = [ "syn", ] -[[package]] -name = "errno" -version = "0.3.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33d852cb9b869c2a9b3df2f71a3074817f01e1844f839a144f5fcef059a4eb5d" -dependencies = [ - "libc", - "windows-sys 0.59.0", -] - [[package]] name = "faer" version = "0.19.4" @@ -982,15 +969,6 @@ dependencies = [ "digest", ] -[[package]] -name = "home" -version = "0.5.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3d1354bf6b7235cb4a0576c2619fd4ed18183f689b12b006a0ee7329eeff9a5" -dependencies = [ - "windows-sys 0.52.0", -] - [[package]] name = "iana-time-zone" version = "0.1.61" @@ -1023,7 +1001,7 @@ dependencies = [ "console", "number_prefix", "portable-atomic", - "unicode-width 0.2.0", + "unicode-width", "web-time", ] @@ -1062,15 +1040,6 @@ dependencies = [ "either", ] -[[package]] -name = "itertools" -version = "0.12.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba291022dbbd398a455acf126c1e341954079855bc60dfdda641363bd6922569" -dependencies = [ - "either", -] - [[package]] name = "itertools" version = "0.13.0" @@ -1111,12 +1080,6 @@ version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" -[[package]] -name = "lazycell" -version = "1.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55" - [[package]] name = "lexical-core" version = "1.0.5" @@ -1203,12 +1166,6 @@ version = "0.2.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8355be11b20d696c8f18f6cc018c4e372165b1fa8126cef092399c9951984ffa" -[[package]] -name = "linux-raw-sys" -version = "0.4.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78b3ae25bc7c8c38cec158d1f2757ee79e9b3740fbc7ccf0e59e4b08d793fa89" - [[package]] name = "log" version = "0.4.22" @@ -1500,12 +1457,12 @@ dependencies = [ "num-integer", "num-traits", "pyo3", - "rustc-hash 2.1.0", + "rustc-hash", ] [[package]] name = "nutpie" -version = "0.14.0" +version = "0.0.0" dependencies = [ "anyhow", "arrow", @@ -1522,7 +1479,7 @@ dependencies = [ "rayon", "smallvec", "tch", - "thiserror 2.0.6", + "thiserror 2.0.7", "time-humanize", "upon", ] @@ -1543,7 +1500,7 @@ dependencies = [ "rand_chacha", "rand_distr", "rayon", - "thiserror 2.0.6", + "thiserror 2.0.7", ] [[package]] @@ -1895,31 +1852,12 @@ version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c" -[[package]] -name = "rustc-hash" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" - [[package]] name = "rustc-hash" version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c7fb8039b3032c191086b10f11f319a6e99e1e82889c5cc6046f515c9db1d497" -[[package]] -name = "rustix" -version = "0.38.42" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f93dc38ecbab2eb790ff964bb77fa94faf256fd3e73285fd7ba0903b76bedb85" -dependencies = [ - "bitflags 2.6.0", - "errno", - "libc", - "linux-raw-sys", - "windows-sys 0.59.0", -] - [[package]] name = "ryu" version = "1.0.18" @@ -2068,9 +2006,9 @@ checksum = "61c41af27dd6d1e27b1b16b489db798443478cef1f06a660c96db617ba5de3b1" [[package]] name = "tch" -version = "0.18.0" +version = "0.18.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f139aa58f0189998a9674f8617b60e054226d98d541e444cd7db5ed986fcc35f" +checksum = "bb3500c87ef72447c23b33ed6f15fac45a616b09bcac53e62e0e4386bddb3b9d" dependencies = [ "half", "lazy_static", @@ -2094,11 +2032,11 @@ dependencies = [ [[package]] name = "thiserror" -version = "2.0.6" +version = "2.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8fec2a1820ebd077e2b90c4df007bebf344cd394098a13c563957d0afc83ea47" +checksum = "93605438cbd668185516ab499d589afb7ee1859ea3d5fc8f6b0755e1c7443767" dependencies = [ - "thiserror-impl 2.0.6", + "thiserror-impl 2.0.7", ] [[package]] @@ -2114,9 +2052,9 @@ dependencies = [ [[package]] name = "thiserror-impl" -version = "2.0.6" +version = "2.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d65750cab40f4ff1929fb1ba509e9914eb756131cef4210da8d5d700d26f6312" +checksum = "e1d8749b4531af2117677a5fcd12b1348a3fe2b81e36e61ffeac5c4aa3273e36" dependencies = [ "proc-macro2", "quote", @@ -2169,9 +2107,9 @@ dependencies = [ [[package]] name = "torch-sys" -version = "0.18.0" +version = "0.18.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c787d00c8e04c9d37db6c4f0048f52820906ee7c42de5bae68a844fa8242fea" +checksum = "61b87ed41261d4278060c3ba3e735c224687cf312403e4565f2ca75310279d73" dependencies = [ "anyhow", "cc", @@ -2191,12 +2129,6 @@ version = "1.0.14" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "adb9e6ca4f869e1180728b7950e35922a7fc6397f7b641499e8f3ef06e50dc83" -[[package]] -name = "unicode-width" -version = "0.1.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7dd6e30e90baa6f72411720665d41d89b9a3d039dc45b8faea1ddd07f617f6af" - [[package]] name = "unicode-width" version = "0.2.0" @@ -2311,18 +2243,6 @@ dependencies = [ "wasm-bindgen", ] -[[package]] -name = "which" -version = "4.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87ba24419a2078cd2b0f2ede2691b6c66d8e47836da3b6db8265ebad47afbfc7" -dependencies = [ - "either", - "home", - "once_cell", - "rustix", -] - [[package]] name = "winapi-util" version = "0.1.9" diff --git a/Cargo.toml b/Cargo.toml index d3cacb3..b470803 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "nutpie" -version = "0.14.0" +#version = "0.14.0" authors = [ "Adrian Seyboldt ", "PyMC Developers ", @@ -32,7 +32,7 @@ rayon = "1.10.0" arrow = { version = "53.1.0", default-features = false, features = ["ffi"] } anyhow = "1.0.72" itertools = "0.13.0" -bridgestan = "2.5.0" +bridgestan = "2.6.0" rand_distr = "0.4.3" smallvec = "1.13.0" upon = { version = "0.8.1", default-features = false, features = [] } From 9a1da91184e89e980b65099ec0d3fa9c5c6ebd45 Mon Sep 17 00:00:00 2001 From: Adrian Seyboldt Date: Mon, 16 Dec 2024 18:45:49 +0100 Subject: [PATCH 29/34] fix: add lock for pymc init point func --- python/nutpie/compile_pymc.py | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/python/nutpie/compile_pymc.py b/python/nutpie/compile_pymc.py index 5510053..7f98ac8 100644 --- a/python/nutpie/compile_pymc.py +++ b/python/nutpie/compile_pymc.py @@ -6,6 +6,7 @@ from importlib.util import find_spec from math import prod from typing import TYPE_CHECKING, Any, Callable, Literal, Optional, Union, cast +import threading import numpy as np import pandas as pd @@ -30,7 +31,7 @@ def intrinsic(f): from pytensor.tensor import TensorVariable, Variable -def rv_dict_to_flat_array_wrapper( +def _rv_dict_to_flat_array_wrapper( fn: Callable[[SeedType], dict[str, np.ndarray]], names: list[str], shapes: list[tuple[int]], @@ -69,7 +70,7 @@ def seeded_array_fn(seed: SeedType = None): for name, shape in zip(names, shapes, strict=True): initial_value = initial_value_dict[name] n = int(np.prod(initial_value.shape)) - if initial_value.shape != shape: + if initial_value.shape != tuple(shape): raise ValueError( f"Size of initial value for {name} is {initial_value.shape}, " f"expected {shape}" @@ -498,6 +499,8 @@ def compile_pymc_model( return_transformed=True, ) + initial_point_fn = _wrap_with_lock(initial_point_fn) + if backend.lower() == "numba": if gradient_backend == "jax": raise ValueError("Gradient backend cannot be jax when using numba backend") @@ -515,6 +518,17 @@ def compile_pymc_model( raise ValueError(f"Backend must be one of numba and jax. Got {backend}") +def _wrap_with_lock(func: Callable) -> Callable: + lock = threading.Lock() + + @wraps(func) + def wrapper(*args, **kwargs): + with lock: + return func(*args, **kwargs) + + return wrapper + + def _compute_shapes(model) -> dict[str, tuple[int, ...]]: import pytensor from pymc.initial_point import make_initial_point_fn @@ -645,7 +659,7 @@ def _make_functions( num_free_vars = count - initial_point_fn = rv_dict_to_flat_array_wrapper( + initial_point_fn = _rv_dict_to_flat_array_wrapper( pymc_initial_point_fn, names=joined_names, shapes=joined_shapes ) From 086997acae3d5e8770f7e684f2ff2615cc6ec508 Mon Sep 17 00:00:00 2001 From: Adrian Seyboldt Date: Fri, 20 Dec 2024 23:38:57 +0100 Subject: [PATCH 30/34] chore: update dependencies --- Cargo.lock | 38 ++++++++++++++++++-------------------- 1 file changed, 18 insertions(+), 20 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 79e6311..22ac157 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -307,14 +307,12 @@ dependencies = [ [[package]] name = "bridgestan" version = "2.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c5194bc381310a0a90cbf52bbf96132f0951b99fcd939f22ca4da09a5c60589" dependencies = [ "bindgen", "libloading", "log", "path-absolutize", - "thiserror 2.0.7", + "thiserror 2.0.8", ] [[package]] @@ -325,18 +323,18 @@ checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c" [[package]] name = "bytemuck" -version = "1.20.0" +version = "1.21.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b37c88a63ffd85d15b406896cc343916d7cf57838a847b3a6f2ca5d39a5695a" +checksum = "ef657dfab802224e671f5818e9a4935f9b1957ed18e58292690cc39e7a4092a3" dependencies = [ "bytemuck_derive", ] [[package]] name = "bytemuck_derive" -version = "1.8.0" +version = "1.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bcfcc3cd946cb52f0bbfdbbcfa2f4e24f75ebb6c0e1002f7c25904fada18b9ec" +checksum = "3fa76293b4f7bb636ab88fd78228235b5248b4d05cc589aed610f954af5d7c7a" dependencies = [ "proc-macro2", "quote", @@ -384,9 +382,9 @@ checksum = "37b2a672a2cb129a2e41c10b1224bb368f9f37a2b16b612598138befd7b37eb5" [[package]] name = "cc" -version = "1.2.4" +version = "1.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9157bbaa6b165880c27a4293a474c91cdcf265cc68cc829bf10be0964a391caf" +checksum = "c31a0499c1dc64f458ad13872de75c0eb7e3fdb0e67964610c914b034fc5956e" dependencies = [ "jobserver", "libc", @@ -1146,9 +1144,9 @@ dependencies = [ [[package]] name = "libc" -version = "0.2.168" +version = "0.2.169" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5aaeb2981e0606ca11d79718f8bb01164f1d6ed75080182d3abf017e6d244b6d" +checksum = "b5aba8db14291edd000dfcc4d620c7ebfb122c613afb886ca8803fa4e128a20a" [[package]] name = "libloading" @@ -1221,9 +1219,9 @@ checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" [[package]] name = "miniz_oxide" -version = "0.8.0" +version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2d80299ef12ff69b16a84bb182e3b9df68b5a91574d3d4fa6e41b65deec4df1" +checksum = "4ffbe83022cedc1d264172192511ae958937694cd57ce297164951b8b3568394" dependencies = [ "adler2", ] @@ -1479,7 +1477,7 @@ dependencies = [ "rayon", "smallvec", "tch", - "thiserror 2.0.7", + "thiserror 2.0.8", "time-humanize", "upon", ] @@ -1500,7 +1498,7 @@ dependencies = [ "rand_chacha", "rand_distr", "rayon", - "thiserror 2.0.7", + "thiserror 2.0.8", ] [[package]] @@ -2032,11 +2030,11 @@ dependencies = [ [[package]] name = "thiserror" -version = "2.0.7" +version = "2.0.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93605438cbd668185516ab499d589afb7ee1859ea3d5fc8f6b0755e1c7443767" +checksum = "08f5383f3e0071702bf93ab5ee99b52d26936be9dedd9413067cbdcddcb6141a" dependencies = [ - "thiserror-impl 2.0.7", + "thiserror-impl 2.0.8", ] [[package]] @@ -2052,9 +2050,9 @@ dependencies = [ [[package]] name = "thiserror-impl" -version = "2.0.7" +version = "2.0.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e1d8749b4531af2117677a5fcd12b1348a3fe2b81e36e61ffeac5c4aa3273e36" +checksum = "f2f357fcec90b3caef6623a099691be676d033b40a058ac95d2a6ade6fa0c943" dependencies = [ "proc-macro2", "quote", From 2a3ad45ac664aaa3ecd702f84d50ed06316d4aa7 Mon Sep 17 00:00:00 2001 From: Adrian Seyboldt Date: Fri, 20 Dec 2024 23:39:35 +0100 Subject: [PATCH 31/34] chore: remove fluff from pyproject --- pyproject.toml | 52 +++++++++++--------------------------------------- 1 file changed, 11 insertions(+), 41 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index af9c60f..37bd345 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -2,14 +2,10 @@ requires = ["maturin>=1.1,<2.0"] build-backend = "maturin" -[tool.maturin] -module-name = "nutpie._lib" -python-source = "python" -features = ["pyo3/extension-module"] - [project] name = "nutpie" description = "Sample Stan or PyMC models" +version = "0.14.0" authors = [{ name = "PyMC Developers", email = "pymc.devs@gmail.com" }] readme = "README.md" requires-python = ">=3.10" @@ -40,47 +36,21 @@ all = [ [tool.ruff] line-length = 88 -target-version = "py39" +target-version = "py310" show-fixes = true output-format = "full" -[tool.ruff.lint] -select = [ - "E", # pycodestyle errors - "W", # pycodestyle warnings - "F", # Pyflakes - "I", # isort - "C4", # flake8-comprehensions - "B", # flake8-bugbear - "UP", # pyupgrade - "RUF", # Ruff-specific rules - "TID", # flake8-tidy-imports - "BLE", # flake8-blind-except - "PTH", # flake8-pathlib - "A", # flake8-builtins -] -ignore = [ - "C408", # unnecessary-collection-call (allow dict(a=1, b=2); clarity over speed!) - # The following list is recommended to disable these when using ruff's formatter. - # (Not all of the following are actually enabled.) - "W191", # tab-indentation - "E111", # indentation-with-invalid-multiple - "E114", # indentation-with-invalid-multiple-comment - "E117", # over-indented - "D206", # indent-with-spaces - "D300", # triple-single-quotes - "Q000", # bad-quotes-inline-string - "Q001", # bad-quotes-multiline-string - "Q002", # bad-quotes-docstring - "Q003", # avoidable-escaped-quote - "COM812", # missing-trailing-comma - "COM819", # prohibited-trailing-comma - "ISC001", # single-line-implicit-string-concatenation - "ISC002", # multi-line-implicit-string-concatenation -] - [tool.ruff.lint.flake8-tidy-imports] ban-relative-imports = "all" [tool.ruff.lint.isort] known-first-party = ["nutpie"] + +[tool.pyright] +venvPath = ".pixi/envs/" +venv = "default" + +[tool.maturin] +module-name = "nutpie._lib" +python-source = "python" +features = ["pyo3/extension-module"] From ccfd9fe8425f99644eb07fa60d259fc957769dbf Mon Sep 17 00:00:00 2001 From: Adrian Seyboldt Date: Fri, 20 Dec 2024 23:40:06 +0100 Subject: [PATCH 32/34] feat: Add option to freeze pymc models --- python/nutpie/compile_pymc.py | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/python/nutpie/compile_pymc.py b/python/nutpie/compile_pymc.py index 7f98ac8..cd917d5 100644 --- a/python/nutpie/compile_pymc.py +++ b/python/nutpie/compile_pymc.py @@ -451,6 +451,7 @@ def compile_pymc_model( default_initialization_strategy: Literal[ "support_point", "prior" ] = "support_point", + freeze_model: bool | None = None, **kwargs, ) -> CompiledModel: """Compile necessary functions for sampling a pymc model. @@ -488,6 +489,14 @@ def compile_pymc_model( "and restart your kernel in case you are in an interactive session." ) + from pymc.model.transform.optimization import freeze_dims_and_data + + if freeze_model is None: + freeze_model = backend == "jax" + + if freeze_model: + model = freeze_dims_and_data(model) + if default_initialization_strategy == "support_point" and jitter_rvs is None: jitter_rvs = set(model.free_RVs) From 48f90195b9c5c51dab7acd3e3e03ff07840af6b4 Mon Sep 17 00:00:00 2001 From: Adrian Seyboldt Date: Fri, 20 Dec 2024 23:41:45 +0100 Subject: [PATCH 33/34] style: Reformat some code --- python/nutpie/transform_adapter.py | 211 +++++++++++++++++++---------- 1 file changed, 140 insertions(+), 71 deletions(-) diff --git a/python/nutpie/transform_adapter.py b/python/nutpie/transform_adapter.py index a5e9338..a8dca26 100644 --- a/python/nutpie/transform_adapter.py +++ b/python/nutpie/transform_adapter.py @@ -2,6 +2,7 @@ _BIJECTION_TRACE = [] + def make_transform_adapter( *, verbose=False, @@ -63,25 +64,31 @@ def __call__( flow = unwrap(eqx.combine(params, static, is_leaf=eqx.is_inexact_array)) if return_elemwise_costs: + def compute_loss(bijection, draw, grad, logp): if True: draw, grad, logp = bijection.inverse_gradient_and_val( draw, grad, logp ) else: - draw, grad, logp = flowjax.bijections.AbstractBijection.inverse_gradient_and_val( - bijection, draw, grad, logp + draw, grad, logp = ( + flowjax.bijections.AbstractBijection.inverse_gradient_and_val( + bijection, draw, grad, logp + ) ) cost = (draw + grad) ** 2 return cost costs = jax.vmap(compute_loss, [None, 0, 0, 0])( - flow.bijection, draws, grads, logps, + flow.bijection, + draws, + grads, + logps, ) return costs.mean(0) - if self._gamma is None: + def compute_loss(bijection, draw, grad, logp): draw, grad, logp = bijection.inverse_gradient_and_val( draw, grad, logp @@ -90,7 +97,10 @@ def compute_loss(bijection, draw, grad, logp): return cost costs = jax.vmap(compute_loss, [None, 0, 0, 0])( - flow.bijection, draws, grads, logps, + flow.bijection, + draws, + grads, + logps, ) if return_all_costs: @@ -102,10 +112,13 @@ def compute_loss(bijection, draw, grad, logp): return jnp.log(costs.mean()) else: + def transform(draw, grad, logp): return flow.bijection.inverse_gradient_and_val(draw, grad, logp) - draws, grads, logps = jax.vmap(transform, [0, 0, 0], (0, 0, 0))(draws, grads, logps) + draws, grads, logps = jax.vmap(transform, [0, 0, 0], (0, 0, 0))( + draws, grads, logps + ) fisher_loss = ((draws + grads) ** 2).sum(1).mean(0) normal_logps = -(draws * draws).sum(1) / 2 var_loss = (logps - normal_logps).var() @@ -168,11 +181,12 @@ def make_flow( diag = jnp.sqrt(pos_std / grad_std) mean = positions.mean(0) + gradients.mean(0) * diag * diag + print("seed", seed) key = jax.random.PRNGKey(seed % (2**63)) diag_param = Parameterize( - lambda x: x + jnp.sqrt(1 + x ** 2), - (diag ** 2 - 1) / (2 * diag), + lambda x: x + jnp.sqrt(1 + x**2), + (diag**2 - 1) / (2 * diag), ) diag_affine = eqx.tree_at( @@ -199,15 +213,17 @@ def make_flow( replace=scale, ) params = jnp.ones(n_dim) * 1e-5 - params = params.at[-1].set(1.) + params = params.at[-1].set(1.0) hh = flowjax.bijections.Householder(params) flows.append( bijections.Sandwich( - bijections.Chain([ - bijections.Vmap(bijections.SoftPlusX(), axis_size=n_dim), - hh, - ]), + bijections.Chain( + [ + bijections.Vmap(bijections.SoftPlusX(), axis_size=n_dim), + hh, + ] + ), affine, ) ) @@ -262,7 +278,9 @@ def add_default_permute(bijection, dim, key): if dim == 2: outer = flowjax.bijections.Flip((dim,)) else: - outer = flowjax.bijections.Permute(jax.random.permutation(key, jnp.arange(dim))) + outer = flowjax.bijections.Permute( + jax.random.permutation(key, jnp.arange(dim)) + ) return flowjax.bijections.Sandwich(outer, bijection) @@ -270,7 +288,7 @@ def add_default_permute(bijection, dim, key): if householder_layer: params = jnp.ones(n_dim) * 1e-5 - params = params.at[0].set(1.) + params = params.at[0].set(1.0) outer = flowjax.bijections.Householder(params) flow = flowjax.bijections.Sandwich(outer, flow) @@ -285,19 +303,25 @@ def add_default_permute(bijection, dim, key): replace=scale, ) params = jnp.ones(n_dim) * 1e-5 - params = params.at[-1].set(1.) + params = params.at[-1].set(1.0) hh = flowjax.bijections.Householder(params) - flow = bijections.Chain([ - bijections.Sandwich( - bijections.Chain([ - bijections.Vmap(bijections.SoftPlusX(), axis_size=n_dim), - hh, - ]), - affine, - ), - flow - ]) + flow = bijections.Chain( + [ + bijections.Sandwich( + bijections.Chain( + [ + bijections.Vmap( + bijections.SoftPlusX(), axis_size=n_dim + ), + hh, + ] + ), + affine, + ), + flow, + ] + ) return flow keys = jax.random.split(key, n_layers) @@ -309,7 +333,6 @@ def add_default_permute(bijection, dim, key): else: layers = [] for i, (key, num_untrafo) in enumerate(zip(keys, untransformed_dim)): - if i % 2 == 0 or not dct_layer: layers.append(make_layer(key, num_untrafo)) else: @@ -367,14 +390,11 @@ def extend_flow( if dct: flow = flowjax.flows.Transformed( flowjax.distributions.StandardNormal(base.shape), - bijections.Chain( - [bijections.DCT(shape=(n_dim,)), base] - ), + bijections.Chain([bijections.DCT(shape=(n_dim,)), base]), ) else: flow = flowjax.flows.Transformed( - flowjax.distributions.StandardNormal(base.shape), - base + flowjax.distributions.StandardNormal(base.shape), base ) params, static = eqx.partition(flow, eqx.is_inexact_array) @@ -421,16 +441,22 @@ def extend_flow( if layer % 2 == 0: pre.append(bijections.Neg(shape=(n_dim,))) - nonlin_affine = bijections.Chain([ - bijections.Sandwich( - bijections.Chain([ - *pre, - bijections.Vmap(bijections.SoftPlusX(), axis_size=n_dim), - ]), - affine, - ), - affine2, - ]) + nonlin_affine = bijections.Chain( + [ + bijections.Sandwich( + bijections.Chain( + [ + *pre, + bijections.Vmap( + bijections.SoftPlusX(), axis_size=n_dim + ), + ] + ), + affine, + ), + affine2, + ] + ) if nn_width is None: width = extension_var_count * 16 @@ -457,7 +483,7 @@ def extend_flow( ) params = jnp.ones(extension_var_count) * 1e-5 - params = params.at[-1].set(1.) + params = params.at[-1].set(1.0) hh = flowjax.bijections.Householder(params) inner_permute = flowjax.bijections.Permute( @@ -528,10 +554,14 @@ def extend_flow( ) inner_permute = flowjax.bijections.Permute( - jnp.concatenate([ - jnp.arange(n_dim - extension_var_count), - jax.random.permutation(key, jnp.arange(n_dim - extension_var_count, n_dim)), - ]) + jnp.concatenate( + [ + jnp.arange(n_dim - extension_var_count), + jax.random.permutation( + key, jnp.arange(n_dim - extension_var_count, n_dim) + ), + ] + ) ) else: coupling = flowjax.bijections.coupling.Coupling( @@ -545,10 +575,14 @@ def extend_flow( ) inner_permute = flowjax.bijections.Permute( - jnp.concatenate([ - jax.random.permutation(key, jnp.arange(n_dim - extension_var_count, n_dim)), - jnp.arange(n_dim - extension_var_count), - ]) + jnp.concatenate( + [ + jax.random.permutation( + key, jnp.arange(n_dim - extension_var_count, n_dim) + ), + jnp.arange(n_dim - extension_var_count), + ] + ) ) if zero_init: @@ -608,10 +642,14 @@ def extend_flow( inner = bijections.Sandwich( inner.outer, - bijections.Chain([ - bijections.Sandwich(bijections.Flip(shape=(n_dim,)), coupling), - inner.inner, - ]), + bijections.Chain( + [ + bijections.Sandwich( + bijections.Flip(shape=(n_dim,)), coupling + ), + inner.inner, + ] + ), ) if dct: @@ -637,10 +675,12 @@ def extend_flow( pre.append(bijections.Neg(shape=(n_dim,))) nonlin_layer = bijections.Sandwich( - bijections.Chain([ - *pre, - bijections.Vmap(bijections.SoftPlusX(), axis_size=n_dim), - ]), + bijections.Chain( + [ + *pre, + bijections.Vmap(bijections.SoftPlusX(), axis_size=n_dim), + ] + ), affine, ) scale = Parameterize( @@ -654,7 +694,6 @@ def extend_flow( ) return bijections.Chain([new_layer, nonlin_layer, affine, base]) - @eqx.filter_jit def _init_from_transformed_position(logp_fn, bijection, transformed_position): bijection = unwrap(bijection) @@ -760,7 +799,9 @@ def __init__( self._window_size = window_size self._initial_skip = initial_skip if make_optimizer is None: - self._make_optimizer = lambda: optax.apply_if_finite(optax.adabelief(learning_rate), 50) + self._make_optimizer = lambda: optax.apply_if_finite( + optax.adabelief(learning_rate), 50 + ) else: self._make_optimizer = make_optimizer self._optimizer = self._make_optimizer() @@ -832,7 +873,9 @@ def update(self, seed, positions, gradients, logps): flowjax.distributions.StandardNormal(fit.shape), fit ) params, static = eqx.partition(flow, eqx.is_inexact_array) - new_loss = self._loss_fn(params, static, positions, gradients, logps) + new_loss = self._loss_fn( + params, static, positions, gradients, logps + ) if self._verbose: print("loss from diag:", new_loss) @@ -843,9 +886,13 @@ def update(self, seed, positions, gradients, logps): return - positions = np.array(positions[self._initial_skip:][-self._window_size :]) - gradients = np.array(gradients[self._initial_skip:][-self._window_size :]) - logps = np.array(logps[self._initial_skip:][-self._window_size:]) + positions = np.array( + positions[self._initial_skip :][-self._window_size :] + ) + gradients = np.array( + gradients[self._initial_skip :][-self._window_size :] + ) + logps = np.array(logps[self._initial_skip :][-self._window_size :]) if len(positions) < 10: return @@ -878,7 +925,13 @@ def update(self, seed, positions, gradients, logps): if self._verbose: print( "loss before optimization: ", - self._loss_fn(params, static, positions[-500:], gradients[-500:], logps[-500:]), + self._loss_fn( + params, + static, + positions[-100:], + gradients[-100:], + logps[-100:], + ), ) else: base = self._bijection @@ -916,7 +969,9 @@ def update(self, seed, positions, gradients, logps): self._bijection, ) params, static = eqx.partition(flow, eqx.is_inexact_array) - old_loss = self._loss_fn(params, static, positions[-100:], gradients[-100:], logps[-100:]) + old_loss = self._loss_fn( + params, static, positions[-128:], gradients[-128:], logps[-128:] + ) if np.isfinite(old_loss) and old_loss < -5 and self.index > 10: if self._verbose: @@ -941,7 +996,9 @@ def update(self, seed, positions, gradients, logps): flowjax.distributions.StandardNormal(fit.shape), fit ) params, static = eqx.partition(flow, eqx.is_inexact_array) - new_loss = self._loss_fn(params, static, positions[-100:], gradients[-100:], logps[-100:]) + new_loss = self._loss_fn( + params, static, positions[-128:], gradients[-128:], logps[-128:] + ) if self._verbose: print( @@ -956,7 +1013,12 @@ def update(self, seed, positions, gradients, logps): params, static = eqx.partition(flow, eqx.is_inexact_array) print( self._loss_fn( - params, static, positions[-100:], gradients[-100:], logps[-100:], return_all_costs=True + params, + static, + positions[-128:], + gradients[-128:], + logps[-128:], + return_all_costs=True, ) ) @@ -967,7 +1029,12 @@ def update(self, seed, positions, gradients, logps): params, static = eqx.partition(flow, eqx.is_inexact_array) print( self._loss_fn( - params, static, positions[-100:], gradients[-100:], logps[-100:], return_all_costs=True + params, + static, + positions[-128:], + gradients[-128:], + logps[-128:], + return_all_costs=True, ) ) @@ -988,7 +1055,9 @@ def update(self, seed, positions, gradients, logps): self._opt_state = opt_state if self._debug_save_bijection: - _BIJECTION_TRACE.append((self.index, fit, (positions, gradients, logps))) + _BIJECTION_TRACE.append( + (self.index, fit, (positions, gradients, logps)) + ) except Exception as e: print("update error:", e) From 94c3e519932134717d5a37458bed3246923edb31 Mon Sep 17 00:00:00 2001 From: Adrian Seyboldt Date: Fri, 20 Dec 2024 23:42:21 +0100 Subject: [PATCH 34/34] fix: Use arrow list with i64 offsets to store trace --- src/pyfunc.rs | 34 +++++++++++++++++----------------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/src/pyfunc.rs b/src/pyfunc.rs index 94a102b..c91d7dc 100644 --- a/src/pyfunc.rs +++ b/src/pyfunc.rs @@ -4,7 +4,7 @@ use anyhow::{anyhow, bail, Context, Result}; use arrow::{ array::{ Array, ArrayBuilder, BooleanBuilder, FixedSizeListBuilder, Float32Builder, Float64Builder, - Int64Builder, ListBuilder, PrimitiveBuilder, StructBuilder, + Int64Builder, LargeListBuilder, ListBuilder, PrimitiveBuilder, StructBuilder, }, datatypes::{DataType, Field, Float32Type, Float64Type, Int64Type}, }; @@ -40,21 +40,21 @@ impl PyVariable { ExpandDtype::Float64 {} => DataType::Float64, ExpandDtype::Float32 {} => DataType::Float32, ExpandDtype::Int64 {} => DataType::Int64, - ExpandDtype::BooleanArray { tensor_type } => { + ExpandDtype::BooleanArray { tensor_type: _ } => { let field = Arc::new(Field::new("item", DataType::Boolean, false)); - DataType::FixedSizeList(field, tensor_type.size() as i32) + DataType::LargeList(field) } ExpandDtype::ArrayFloat64 { tensor_type: _ } => { let field = Arc::new(Field::new("item", DataType::Float64, true)); - DataType::List(field) + DataType::LargeList(field) } - ExpandDtype::ArrayFloat32 { tensor_type } => { + ExpandDtype::ArrayFloat32 { tensor_type: _ } => { let field = Arc::new(Field::new("item", DataType::Float32, false)); - DataType::FixedSizeList(field, tensor_type.size() as i32) + DataType::LargeList(field) } - ExpandDtype::ArrayInt64 { tensor_type } => { + ExpandDtype::ArrayInt64 { tensor_type: _ } => { let field = Arc::new(Field::new("item", DataType::Int64, false)); - DataType::FixedSizeList(field, tensor_type.size() as i32) + DataType::LargeList(field) } } } @@ -512,10 +512,10 @@ impl DrawStorage for PyTrace { let value = value.extract().expect("Return value from expand function could not be converted to int64"); builder.append_value(value) }, - ExpandDtype::BooleanArray { tensor_type} => { - let builder: &mut FixedSizeListBuilder> = + ExpandDtype::BooleanArray { tensor_type } => { + let builder: &mut LargeListBuilder> = self.builder.field_builder(i).context( - "Builder has incorrect type", + "Builder has incorrect type. Expected LargeListBuilder of Bool", )?; let value_builder = builder .values() @@ -531,9 +531,9 @@ impl DrawStorage for PyTrace { }, ExpandDtype::ArrayFloat64 { tensor_type } => { //let builder: &mut FixedSizeListBuilder> = - let builder: &mut ListBuilder> = + let builder: &mut LargeListBuilder> = self.builder.field_builder(i).context( - "Builder has incorrect type", + "Builder has incorrect type. Expected LargeListBuilder of Float64", )?; let value_builder = builder .values() @@ -548,9 +548,9 @@ impl DrawStorage for PyTrace { builder.append(true); }, ExpandDtype::ArrayFloat32 { tensor_type } => { - let builder: &mut FixedSizeListBuilder> = + let builder: &mut LargeListBuilder> = self.builder.field_builder(i).context( - "Builder has incorrect type", + "Builder has incorrect type. Expected LargeListBuilder of Float32", )?; let value_builder = builder .values() @@ -565,9 +565,9 @@ impl DrawStorage for PyTrace { builder.append(true); }, ExpandDtype::ArrayInt64 {tensor_type} => { - let builder: &mut FixedSizeListBuilder> = + let builder: &mut LargeListBuilder> = self.builder.field_builder(i).context( - "Builder has incorrect type", + "Builder has incorrect type. Expected LargeListBuilder of Int64", )?; let value_builder = builder .values()