From 618cd1cb4d7452d62b844a930816dad51398aad4 Mon Sep 17 00:00:00 2001 From: Jon Mease Date: Sat, 9 Nov 2024 20:55:39 -0500 Subject: [PATCH] v2-docs: Add docs for inline datasets, grpc, and port legacy docs (#535) * Add logical plan and substrait plan enums items for VegaFusionDataset * flag proto/substrait * Add simple inline_dataset examples * Add logical plan dataset example * Add inline datasets doc page * add grpc page, better dark-mode logo. * Add about and community docs --- Cargo.lock | 273 +- Cargo.toml | 16 +- docs/source/_static/VegaFusionDarkTitle.svg | 1 + docs/source/_static/VegaFusionLightTitle.svg | 1 + docs/source/_static/VegaFusionLogo-Color.svg | 1 + docs/source/_static/custom.css | 6 + docs/source/_static/favicon.ico | Bin 0 -> 15086 bytes docs/source/_static/vegafusion_social.png | Bin 0 -> 32913 bytes docs/source/about_the_name.md | 4 + docs/source/background.md | 18 + docs/source/citation.md | 17 + docs/source/conf.py | 13 +- docs/source/governance.md | 2 + docs/source/grpc.md | 43 + docs/source/how_it_works.md | 15 + docs/source/index.md | 57 +- docs/source/inline_datasets.md | 39 + docs/source/license.md | 4 + docs/source/related_projects.md | 23 + docs/source/stewardship.md | 9 + docs/source/technology.md | 8 + docs/source/transform_data.md | 2 +- docs/source/transform_spec.md | 2 +- docs/source/vega-lite.md | 2 + examples/datasets/movies.parquet | Bin 0 -> 131007 bytes examples/python-examples/grpc.py | 177 + examples/python-examples/inline_datasets.py | 423 + examples/rust-examples/Cargo.toml | 6 +- examples/rust-examples/examples/grpc.rs | 211 + .../rust-examples/examples/inline_datasets.rs | 194 + .../examples/inline_datasets_plan.rs | 209 + pixi.lock | 7712 ++++++++++------- pixi.toml | 6 +- vegafusion-common/Cargo.toml | 10 +- vegafusion-common/src/error.rs | 23 +- vegafusion-core/Cargo.toml | 8 +- vegafusion-core/build.rs | 2 +- vegafusion-core/src/data/dataset.rs | 11 + vegafusion-core/src/proto/prost_gen/errors.rs | 3 - .../src/proto/prost_gen/expression.rs | 65 +- .../src/proto/prost_gen/pretransform.rs | 23 +- .../src/proto/prost_gen/services.rs | 10 - vegafusion-core/src/proto/prost_gen/tasks.rs | 62 +- .../src/proto/prost_gen/transforms.rs | 146 +- vegafusion-core/src/proto/tasks.proto | 16 +- vegafusion-core/src/proto/tonic_gen/errors.rs | 3 - .../src/proto/tonic_gen/expression.rs | 65 +- .../src/proto/tonic_gen/pretransform.rs | 23 +- .../src/proto/tonic_gen/services.rs | 103 +- vegafusion-core/src/proto/tonic_gen/tasks.rs | 62 +- .../src/proto/tonic_gen/transforms.rs | 146 +- vegafusion-core/src/runtime/mod.rs | 10 +- vegafusion-core/src/runtime/runtime.rs | 41 +- vegafusion-python/Cargo.toml | 4 +- vegafusion-python/src/lib.rs | 4 +- vegafusion-python/vegafusion/runtime.py | 28 +- vegafusion-python/vegafusion/utils.py | 14 +- vegafusion-runtime/Cargo.toml | 13 +- vegafusion-runtime/src/data/tasks.rs | 3 + .../src/task_graph}/grpc_runtime.rs | 5 +- vegafusion-runtime/src/task_graph/mod.rs | 5 + vegafusion-runtime/src/task_graph/runtime.rs | 69 +- vegafusion-server/Cargo.toml | 10 +- vegafusion-server/src/main.rs | 37 +- vegafusion-wasm/src/lib.rs | 4 +- 65 files changed, 6483 insertions(+), 4039 deletions(-) create mode 100644 docs/source/_static/VegaFusionDarkTitle.svg create mode 100644 docs/source/_static/VegaFusionLightTitle.svg create mode 100644 docs/source/_static/VegaFusionLogo-Color.svg create mode 100644 docs/source/_static/custom.css create mode 100644 docs/source/_static/favicon.ico create mode 100644 docs/source/_static/vegafusion_social.png create mode 100644 docs/source/about_the_name.md create mode 100644 docs/source/background.md create mode 100644 docs/source/citation.md create mode 100644 docs/source/governance.md create mode 100644 docs/source/grpc.md create mode 100644 docs/source/how_it_works.md create mode 100644 docs/source/inline_datasets.md create mode 100644 docs/source/license.md create mode 100644 docs/source/related_projects.md create mode 100644 docs/source/stewardship.md create mode 100644 docs/source/technology.md create mode 100644 docs/source/vega-lite.md create mode 100644 examples/datasets/movies.parquet create mode 100644 examples/python-examples/grpc.py create mode 100644 examples/python-examples/inline_datasets.py create mode 100644 examples/rust-examples/examples/grpc.rs create mode 100644 examples/rust-examples/examples/inline_datasets.rs create mode 100644 examples/rust-examples/examples/inline_datasets_plan.rs rename {vegafusion-core/src/runtime => vegafusion-runtime/src/task_graph}/grpc_runtime.rs (95%) diff --git a/Cargo.lock b/Cargo.lock index beb146cab..dd446d15e 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -520,18 +520,17 @@ dependencies = [ [[package]] name = "axum" -version = "0.6.20" +version = "0.7.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b829e4e32b91e643de6eafe82b1d90675f5874230191a4ffbc1b336dec4d6bf" +checksum = "504e3947307ac8326a5437504c517c4b56716c9d98fac0028c2acc7ca47d70ae" dependencies = [ "async-trait", "axum-core", - "bitflags 1.3.2", "bytes", "futures-util", - "http 0.2.12", - "http-body 0.4.6", - "hyper 0.14.31", + "http 1.1.0", + "http-body 1.0.1", + "http-body-util", "itoa", "matchit", "memchr", @@ -540,25 +539,28 @@ dependencies = [ "pin-project-lite", "rustversion", "serde", - "sync_wrapper 0.1.2", - "tower", + "sync_wrapper 1.0.1", + "tower 0.5.1", "tower-layer", "tower-service", ] [[package]] name = "axum-core" -version = "0.3.4" +version = "0.4.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "759fa577a247914fd3f7f76d62972792636412fbfd634cd452f6a385a74d2d2c" +checksum = "09f2bd6146b97ae3359fa0cc6d6b376d9539582c7b4220f041a33ec24c226199" dependencies = [ "async-trait", "bytes", "futures-util", - "http 0.2.12", - "http-body 0.4.6", + "http 1.1.0", + "http-body 1.0.1", + "http-body-util", "mime", + "pin-project-lite", "rustversion", + "sync_wrapper 1.0.1", "tower-layer", "tower-service", ] @@ -1498,7 +1500,7 @@ dependencies = [ "datafusion-expr", "datafusion-proto-common", "object_store", - "prost 0.13.3", + "prost", ] [[package]] @@ -1510,7 +1512,7 @@ dependencies = [ "chrono", "datafusion-common", "object_store", - "prost 0.13.3", + "prost", ] [[package]] @@ -1981,12 +1983,6 @@ dependencies = [ "pin-project-lite", ] -[[package]] -name = "http-range-header" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "add0ab9360ddbd88cfeb3bd9574a1d85cfdfa14db10b3e21d3700dbc4328758f" - [[package]] name = "httparse" version = "1.9.5" @@ -2042,6 +2038,7 @@ dependencies = [ "http 1.1.0", "http-body 1.0.1", "httparse", + "httpdate", "itoa", "pin-project-lite", "smallvec", @@ -2059,25 +2056,26 @@ dependencies = [ "http 1.1.0", "hyper 1.5.0", "hyper-util", - "rustls 0.23.15", + "rustls", "rustls-native-certs", "rustls-pki-types", "tokio", - "tokio-rustls 0.26.0", + "tokio-rustls", "tower-service", "webpki-roots", ] [[package]] name = "hyper-timeout" -version = "0.4.1" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bbb958482e8c7be4bc3cf272a766a2b0bf1a6755e7a6ae777f017a31d11b13b1" +checksum = "3203a961e5c83b6f5498933e78b6b263e208c197b63e9c6c53cc82ffd3f63793" dependencies = [ - "hyper 0.14.31", + "hyper 1.5.0", + "hyper-util", "pin-project-lite", "tokio", - "tokio-io-timeout", + "tower-service", ] [[package]] @@ -2236,15 +2234,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" @@ -3105,16 +3094,6 @@ dependencies = [ "unicode-ident", ] -[[package]] -name = "prost" -version = "0.12.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "deb1435c188b76130da55f17a466d252ff7b1418b2ad3e037d127b94e3411f29" -dependencies = [ - "bytes", - "prost-derive 0.12.6", -] - [[package]] name = "prost" version = "0.13.3" @@ -3122,43 +3101,30 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7b0487d90e047de87f984913713b85c601c05609aad5b0df4b4573fbf69aa13f" dependencies = [ "bytes", - "prost-derive 0.13.3", + "prost-derive", ] [[package]] name = "prost-build" -version = "0.12.6" +version = "0.13.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22505a5c94da8e3b7c2996394d1c933236c4d743e81a410bcca4e6989fc066a4" +checksum = "0c1318b19085f08681016926435853bbf7858f9c082d0999b80550ff5d9abe15" dependencies = [ "bytes", "heck 0.5.0", - "itertools 0.12.1", + "itertools 0.13.0", "log", "multimap", "once_cell", "petgraph", "prettyplease", - "prost 0.12.6", + "prost", "prost-types", "regex", "syn 2.0.85", "tempfile", ] -[[package]] -name = "prost-derive" -version = "0.12.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81bddcdb20abf9501610992b6759a4c888aef7d1a7247ef75e2404275ac24af1" -dependencies = [ - "anyhow", - "itertools 0.12.1", - "proc-macro2", - "quote", - "syn 2.0.85", -] - [[package]] name = "prost-derive" version = "0.13.3" @@ -3174,11 +3140,11 @@ dependencies = [ [[package]] name = "prost-types" -version = "0.12.6" +version = "0.13.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9091c90b0a32608e984ff2fa4091273cbdd755d54935c51d520887f4a1dbd5b0" +checksum = "4759aa0d3a6232fb8dbdb97b61de2c20047c68aca932c7ed76da9d788508d670" dependencies = [ - "prost 0.12.6", + "prost", ] [[package]] @@ -3303,7 +3269,7 @@ dependencies = [ "quinn-proto", "quinn-udp", "rustc-hash 2.0.0", - "rustls 0.23.15", + "rustls", "socket2", "thiserror", "tokio", @@ -3320,7 +3286,7 @@ dependencies = [ "rand", "ring", "rustc-hash 2.0.0", - "rustls 0.23.15", + "rustls", "slab", "thiserror", "tinyvec", @@ -3513,16 +3479,16 @@ dependencies = [ "percent-encoding", "pin-project-lite", "quinn", - "rustls 0.23.15", + "rustls", "rustls-native-certs", - "rustls-pemfile 2.2.0", + "rustls-pemfile", "rustls-pki-types", "serde", "serde_json", "serde_urlencoded", "sync_wrapper 1.0.1", "tokio", - "tokio-rustls 0.26.0", + "tokio-rustls", "tokio-util", "tower-service", "url", @@ -3591,8 +3557,12 @@ dependencies = [ name = "rust-examples" version = "0.1.0" dependencies = [ + "datafusion", + "reqwest 0.12.8", "serde_json", "tokio", + "tonic", + "vegafusion-common", "vegafusion-core", "vegafusion-runtime", ] @@ -3637,28 +3607,17 @@ dependencies = [ "windows-sys 0.52.0", ] -[[package]] -name = "rustls" -version = "0.21.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f56a14d1f48b391359b22f731fd4bd7e43c97f3c50eee276f3aa09c94784d3e" -dependencies = [ - "log", - "ring", - "rustls-webpki 0.101.7", - "sct", -] - [[package]] name = "rustls" version = "0.23.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5fbb44d7acc4e873d613422379f69f237a1b141928c02f6bc6ccfddddc2d7993" dependencies = [ + "log", "once_cell", "ring", "rustls-pki-types", - "rustls-webpki 0.102.8", + "rustls-webpki", "subtle", "zeroize", ] @@ -3670,21 +3629,12 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fcaf18a4f2be7326cd874a5fa579fae794320a0f388d365dca7e480e55f83f8a" dependencies = [ "openssl-probe", - "rustls-pemfile 2.2.0", + "rustls-pemfile", "rustls-pki-types", "schannel", "security-framework", ] -[[package]] -name = "rustls-pemfile" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c74cae0a4cf6ccbbf5f359f08efdf8ee7e1dc532573bf0db71968cb56b1448c" -dependencies = [ - "base64 0.21.7", -] - [[package]] name = "rustls-pemfile" version = "2.2.0" @@ -3700,16 +3650,6 @@ version = "1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "16f1201b3c9a7ee8039bcadc17b7e605e2945b27eee7631788c1bd2b0643674b" -[[package]] -name = "rustls-webpki" -version = "0.101.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b6275d1ee7a1cd780b64aca7726599a1dbc893b1e64144529e55c3c2f745765" -dependencies = [ - "ring", - "untrusted", -] - [[package]] name = "rustls-webpki" version = "0.102.8" @@ -3769,16 +3709,6 @@ version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" -[[package]] -name = "sct" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da046153aa2352493d6cb7da4b6e5c0c057d8a1d0a9aa8560baffdd945acd414" -dependencies = [ - "ring", - "untrusted", -] - [[package]] name = "security-framework" version = "2.11.1" @@ -3816,9 +3746,9 @@ checksum = "a3f0bf26fd526d2a95683cd0f87bf103b8539e2ca1ef48ce002d67aad59aa0b4" [[package]] name = "serde" -version = "1.0.213" +version = "1.0.214" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ea7893ff5e2466df8d720bb615088341b295f849602c6956047f8f80f0e9bc1" +checksum = "f55c3193aca71c12ad7890f1785d2b73e1b9f63a0bbc353c08ef26fe03fc56b5" dependencies = [ "serde_derive", ] @@ -3836,9 +3766,9 @@ dependencies = [ [[package]] name = "serde_derive" -version = "1.0.213" +version = "1.0.214" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e85ad2009c50b58e87caa8cd6dac16bdf511bbfb7af6c33df902396aa480fa5" +checksum = "de523f781f095e28fa605cdce0f8307e451cc0fd14e2eb4cd2e98a355b147766" dependencies = [ "proc-macro2", "quote", @@ -4271,16 +4201,6 @@ dependencies = [ "windows-sys 0.52.0", ] -[[package]] -name = "tokio-io-timeout" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30b74022ada614a1b4834de765f9bb43877f910cc8ce4be40e89042c9223a8bf" -dependencies = [ - "pin-project-lite", - "tokio", -] - [[package]] name = "tokio-macros" version = "2.4.0" @@ -4292,23 +4212,13 @@ dependencies = [ "syn 2.0.85", ] -[[package]] -name = "tokio-rustls" -version = "0.24.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c28327cf380ac148141087fbfb9de9d7bd4e84ab5d2c28fbc911d753de8a7081" -dependencies = [ - "rustls 0.21.12", - "tokio", -] - [[package]] name = "tokio-rustls" version = "0.26.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0c7bc40d0e5a97695bb96e27995cd3a08538541b0a846f65bba7a359f36700d4" dependencies = [ - "rustls 0.23.15", + "rustls", "rustls-pki-types", "tokio", ] @@ -4339,29 +4249,31 @@ dependencies = [ [[package]] name = "tonic" -version = "0.10.2" +version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d560933a0de61cf715926b9cac824d4c883c2c43142f787595e48280c40a1d0e" +checksum = "877c5b330756d856ffcc4553ab34a5684481ade925ecc54bcd1bf02b1d0d4d52" dependencies = [ "async-stream", "async-trait", "axum", - "base64 0.21.7", + "base64 0.22.1", "bytes", - "h2 0.3.26", - "http 0.2.12", - "http-body 0.4.6", - "hyper 0.14.31", + "h2 0.4.6", + "http 1.1.0", + "http-body 1.0.1", + "http-body-util", + "hyper 1.5.0", "hyper-timeout", + "hyper-util", "percent-encoding", "pin-project", - "prost 0.12.6", - "rustls 0.21.12", - "rustls-pemfile 1.0.4", + "prost", + "rustls-pemfile", + "socket2", "tokio", - "tokio-rustls 0.24.1", + "tokio-rustls", "tokio-stream", - "tower", + "tower 0.4.13", "tower-layer", "tower-service", "tracing", @@ -4369,28 +4281,29 @@ dependencies = [ [[package]] name = "tonic-build" -version = "0.10.2" +version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d021fc044c18582b9a2408cd0dd05b1596e3ecdb5c4df822bb0183545683889" +checksum = "9557ce109ea773b399c9b9e5dca39294110b74f1f342cb347a80d1fce8c26a11" dependencies = [ "prettyplease", "proc-macro2", "prost-build", + "prost-types", "quote", "syn 2.0.85", ] [[package]] name = "tonic-web" -version = "0.10.2" +version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fddb2a37b247e6adcb9f239f4e5cefdcc5ed526141a416b943929f13aea2cce" +checksum = "5299dd20801ad736dccb4a5ea0da7376e59cd98f213bf1c3d478cf53f4834b58" dependencies = [ - "base64 0.21.7", + "base64 0.22.1", "bytes", - "http 0.2.12", - "http-body 0.4.6", - "hyper 0.14.31", + "http 1.1.0", + "http-body 1.0.1", + "http-body-util", "pin-project", "tokio-stream", "tonic", @@ -4420,19 +4333,31 @@ dependencies = [ "tracing", ] +[[package]] +name = "tower" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2873938d487c3cfb9aed7546dc9f2711d867c9f90c46b889989a2cb84eba6b4f" +dependencies = [ + "futures-core", + "futures-util", + "pin-project-lite", + "sync_wrapper 0.1.2", + "tower-layer", + "tower-service", +] + [[package]] name = "tower-http" -version = "0.4.4" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61c5bb1d698276a2443e5ecfabc1008bf15a36c12e6a7176e7bf089ea9131140" +checksum = "1e9cd434a998747dd2c4276bc96ee2e0c7a2eadf3cae88e52be55a05fa9053f5" dependencies = [ "bitflags 2.6.0", "bytes", - "futures-core", - "futures-util", - "http 0.2.12", - "http-body 0.4.6", - "http-range-header", + "http 1.1.0", + "http-body 1.0.1", + "http-body-util", "pin-project-lite", "tower-layer", "tower-service", @@ -4593,7 +4518,7 @@ dependencies = [ "env_logger", "lazy_static", "log", - "prost 0.12.6", + "prost", "pyo3", "pyo3-arrow", "pythonize", @@ -4624,6 +4549,7 @@ dependencies = [ "deterministic-hash", "jni", "object_store", + "prost", "pyo3", "pyo3-arrow", "serde_json", @@ -4636,7 +4562,6 @@ dependencies = [ name = "vegafusion-core" version = "1.6.9" dependencies = [ - "async-mutex", "async-trait", "bytes", "chrono", @@ -4646,10 +4571,11 @@ dependencies = [ "itertools 0.10.5", "json-patch", "lazy_static", + "log", "num-complex", "ordered-float 3.9.2", "petgraph", - "prost 0.12.6", + "prost", "prost-build", "prost-types", "protobuf-src", @@ -4670,6 +4596,7 @@ name = "vegafusion-runtime" version = "1.6.9" dependencies = [ "async-lock", + "async-mutex", "async-recursion", "async-trait", "base64 0.21.7", @@ -4687,6 +4614,7 @@ dependencies = [ "datafusion-functions-window", "datafusion-optimizer", "datafusion-physical-expr", + "datafusion-proto", "deterministic-hash", "env_logger", "float-cmp", @@ -4702,7 +4630,7 @@ dependencies = [ "object_store", "ordered-float 3.9.2", "pixelmatch", - "prost 0.12.6", + "prost", "regex", "reqwest 0.12.8", "rgb", @@ -4713,6 +4641,7 @@ dependencies = [ "tempfile", "test-case", "tokio", + "tonic", "url", "uuid", "vegafusion-common", @@ -4729,7 +4658,7 @@ dependencies = [ "futures-util", "h2 0.3.26", "predicates", - "prost 0.12.6", + "prost", "prost-build", "protobuf-src", "regex", @@ -4754,7 +4683,7 @@ dependencies = [ "getrandom", "indexmap 1.9.3", "js-sys", - "prost 0.12.6", + "prost", "serde", "serde-wasm-bindgen", "serde_json", diff --git a/Cargo.toml b/Cargo.toml index 3155db5e7..6f6caee5b 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -47,6 +47,15 @@ features = [ "case-insensitive", "filter-by-regex",] version = "0.12.8" default-features = false +[workspace.dependencies.tonic] +version = "0.12.3" + +[workspace.dependencies.tonic-web] +version = "0.12.3" + +[workspace.dependencies.tonic-build] +version = "0.12.3" + [workspace.dependencies.tokio] version = "1.36.0" @@ -61,10 +70,13 @@ version = "0.5.1" default-features = false [workspace.dependencies.prost] -version = "0.12.3" +version = "0.13.3" [workspace.dependencies.prost-types] -version = "0.12.3" +version = "0.13.3" + +[workspace.dependencies.prost-build] +version = "0.13.3" [workspace.dependencies.object_store] version = "0.11.0" diff --git a/docs/source/_static/VegaFusionDarkTitle.svg b/docs/source/_static/VegaFusionDarkTitle.svg new file mode 100644 index 000000000..c7b9ae91f --- /dev/null +++ b/docs/source/_static/VegaFusionDarkTitle.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/source/_static/VegaFusionLightTitle.svg b/docs/source/_static/VegaFusionLightTitle.svg new file mode 100644 index 000000000..a3fb0d607 --- /dev/null +++ b/docs/source/_static/VegaFusionLightTitle.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/source/_static/VegaFusionLogo-Color.svg b/docs/source/_static/VegaFusionLogo-Color.svg new file mode 100644 index 000000000..7aedc2deb --- /dev/null +++ b/docs/source/_static/VegaFusionLogo-Color.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/source/_static/custom.css b/docs/source/_static/custom.css new file mode 100644 index 000000000..16336b7d3 --- /dev/null +++ b/docs/source/_static/custom.css @@ -0,0 +1,6 @@ +.sidebar-logo { + max-width: 100px; + width: auto; + height: auto; + margin-left: 0; +} diff --git a/docs/source/_static/favicon.ico b/docs/source/_static/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..504863429451d6fa7f63407ba2783a6bb456110c GIT binary patch literal 15086 zcmeI2c~lf<62RLv#^kwAVv=Xx%eu-Ypdbu~qYfYn#_?7J6%SMn4}y4s*C2vSki!u? z0J#ql!2^w&-~j?EM2zv=b=5>!0dE13K}C)ksI70Xb<#B5fXvH3^Z9;M_cz~HRbBSX z^i&l^b)&jdW@Z#hUFv{7MGdDYN>}&o`DYYWf^(mtB(HmXL{TBQzyR0a7RnVN^QxiO zBD8eow0`2nejT;d)$6y4vh>4-{|xHLL|L$I@)cM& zG8;YdWSaCA(q&^i%Gtrdzg8-=2yjY8oS(Aei~*sz}h!-pLM zCcfi}V2#~1PQ0f7=b@dn8YYLxVM2HfjE#5&qhnvgsN`B0kyZy52kK$ikwzGjrF7`( zxYPQ!3xB-3ZRn4{Bxqy~thWC*FEf2An)v)T%TgSn?RBM$78==eT$cwzUBP>=O~N1(*Iqi=~JT2(t#863|KbnX6>@M zw}A_nrKQze?_UyslN=@BJv6YZu3?vH+I|E$F-g0)ewDtKv>i5`l*TTHBIE_auuK{ttL) zba%h=CA~*eGS(!vZ-Q~W0s&5p5|+?DID0(&$HK)WN(8uYTYPURy+>0r$tc!4(I^&p zXhQx z{J7$FTXxvy_Zn=oN*fps?ZBFCKbdoPhaPiQKdnT73r9(LaXb76lWZ8$mM!M|-hr}c z1b8R|3c4}(s-MqZTONY|7qiw@)U?NcK~B>Sb=_?ppS6{Kl%XG5jsOpVZRw!rXG+Sg z9M@L>A9jJ&3Xb~sAtfr_F~jHiT?Dwm_rTM3 z_z#26!9+fTncqtF4t}#)%*8&vKpQ?i^y@SHtBhv&Jr{FfC#{(?e#dLEIP$gFHUUYg z7hCK>4%Ul@9aD%g{$fF%LTsE5-_m-uQX2tn1hf&*MnD?@Z3MIt=xhW)H7KgnQc1Sr z{`WFKbzV;~rHyJ{PSJ9J>b#7ibjW^`J=Nv8x92FklX+T7v7d>YOU-(!_DjvWt0ZOd zR{GGg8<}sW{N73>MFmil692WxW{R@G^KLD&p2z_dRZo-?NsOWd)zF+I55c;KE%L5U zt5d)DQGs@7Bk&hSV4bLN#(ImwbQV&i6#PxouK8P@y%~T#5o}0D6@8~k`?3+IzYem< zYubSJ{l2@_=eWoUKwSY9?MqO3>uMD;_37|urYOWRqOblP=HZ>lV5x7 zl69mm9Bq>NJlZrBn8cW-x?!#H4+NMjSXOq5dHq~zo!8mpbt=ZM1tjP8IGGOB7Q5r$7>5NPn9Oag57zHd;ko$tx>FoKy z69Fa*mOiMo-&A#Yl1!dCHu6=rZG3Gm_QB+0A5X6N&r04rGXr@7uwfywN3&u+9~UtydFUorL2=jj7wYtr>)z(O%wP9Jmhvu0r)p9$vm>n36C ziu58et{;r^npV>Gm~x+9&^5OF_I|zK0One9?kX+)WTvFDdZte$Fqs-yUBPBwkgL4R zri)x(##V2kHs^dP04FYJj{yr6V7O z*ibrU0hoH>86;0Z(h|DJyF3MNH4qp7#lu&0@vAkWa|;M-Ezdi#eLrxy=x22%($DsN zpZ!ML^A=p|nXiS4PTcju--PdbtbhB{_cL?7`gyqM*kICY8$9CFyWZN>)2>%d4XVz^ z-q~F2nawrMfq$y+Q9q6_KNv##Eq5TR@b>`SUpZ&p(=yU~OL}ev*-aAlJ@he&6ZYGc z(mi*p>@J_8`|1`gD!xqHH$AOny`DHh(kQi_t7pqy?-;1{RMok=-{b7*PaeE0{(axg zu5H9G7ti~b>7E+w@9>|n?Ukd=?l+FYBMNKUZz3~|q#tA7#dEs%BE@irs&`iA{`|!bSC>?&ky1d^70GP>mxW0efnJhjr}%Px3B4A kRW24&r$ovL_(UYf|LHOUcIrH^p{PRS*X}K-uP4X<2bgdi0{{R3 literal 0 HcmV?d00001 diff --git a/docs/source/_static/vegafusion_social.png b/docs/source/_static/vegafusion_social.png new file mode 100644 index 0000000000000000000000000000000000000000..615f47b564dbe3043027cf8a2d32a0e9e387c606 GIT binary patch literal 32913 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 N. Kruchten, J. Mease and D. Moritz, "VegaFusion: Automatic Server-Side Scaling for Interactive Vega Visualizations," _2022 IEEE Visualization and Visual Analytics (VIS)_, Oklahoma City, OK, USA, 2022, pp. 11-15, doi: 10.1109/VIS54862.2022.00011. + +Or in BibTeX: +```bibtex +@INPROCEEDINGS{9973205, + author={Kruchten, Nicolas and Mease, Jon and Moritz, Dominik}, + booktitle={2022 IEEE Visualization and Visual Analytics (VIS)}, + title={VegaFusion: Automatic Server-Side Scaling for Interactive Vega Visualizations}, + year={2022}, + volume={}, + number={}, + pages={11-15}, + doi={10.1109/VIS54862.2022.00011}} +``` \ No newline at end of file diff --git a/docs/source/conf.py b/docs/source/conf.py index 21c9899c6..050ccfca2 100644 --- a/docs/source/conf.py +++ b/docs/source/conf.py @@ -11,7 +11,13 @@ # Theme settings html_theme = 'furo' -# html_static_path = ['_static'] +html_static_path = ['_static'] +html_logo = "_static/VegaFusionLogo-Color.svg" +html_favicon = "_static/favicon.ico" + +_social_img = "https://vegafusion.io/_static/vegafusion_social.png" +_description = "VegaFusion provides serverside scaling for Vega visualizations" +_title = "VegaFusion" # MyST settings myst_enable_extensions = [ @@ -20,4 +26,9 @@ "fieldlist", # Field lists "tasklist", # Task lists "attrs_inline", # Inline attributes +] + +# Add custom CSS +html_css_files = [ + 'custom.css', ] \ No newline at end of file diff --git a/docs/source/governance.md b/docs/source/governance.md new file mode 100644 index 000000000..4553dfe3f --- /dev/null +++ b/docs/source/governance.md @@ -0,0 +1,2 @@ +# Governance +The VegaFusion project is governed by the documents that reside in the [project-docs](https://github.com/vega/.github/tree/main/project-docs) directory of the Vega Organizational GitHub repository. \ No newline at end of file diff --git a/docs/source/grpc.md b/docs/source/grpc.md new file mode 100644 index 000000000..551071f3f --- /dev/null +++ b/docs/source/grpc.md @@ -0,0 +1,43 @@ +# gRPC +The VegaFusion Runtime can run as a [gRPC](https://grpc.io/) service, which makes it possible for multiple clients to connect to the same runtime, and share a cache. This also makes it possible for the Runtime to reside on a different host than the client. + +:::{warning} +VegaFusion's gRPC server does not currently support authentication, and chart specifications may reference the local file system of the machine running the server. It is not currently recommended to use VegaFusion server with untrusted Vega specifications unless other measures are taken to isolate the service. +::: + +## VegaFusion Server +The gRPC service is called VegaFusion Server. Executables for common architectures are published as [GitHub Release](https://github.com/vega/vegafusion/releases) artifacts. The server can also be compiled from source using + +``` +cargo install vegafusion-server +``` + +The server may then be launched using a particular port as follows: + +``` +vegafusion-server --port 50051 +``` + +## Python +The `vf.runtime.grpc_connect` method is used to connect the Python client to a VegaFusion Server instance. + +For example, to connect to a server running locally on port 50051 + +``` +import vegafusion as vf +vf.runtime.grpc_connect("http://127.0.0.1:50051") +``` + +This will cause all VegaFusion runtime operations to be dispatched to the VegaFusion Server. + +See [grpc.py](https://github.com/vega/vegafusion/tree/v2/examples/python-examples/grpc.py) for a complete example. + +## Rust +The `GrpcVegaFusionRuntime` struct is an alternative to the `VegaFusionRuntime` struct that provides the same interface, but connects to a VegaFusion Server. + +See [grpc.rs](https://github.com/vega/vegafusion/tree/v2/examples/rust-examples/grpc.rs) for a complete example. + +## JavaScript +The `vegafusion-wasm` package can connect to an instance of VegaFusion Server over [gRPC-Web](https://github.com/grpc/grpc-web). + +See the [editor-demo](https://github.com/vega/vegafusion/tree/v2/examples/editor-demo/README.md) example for more information. diff --git a/docs/source/how_it_works.md b/docs/source/how_it_works.md new file mode 100644 index 000000000..748642bb1 --- /dev/null +++ b/docs/source/how_it_works.md @@ -0,0 +1,15 @@ +# How it Works +VegaFusion has two main components: The Planner and the Runtime. + +(planner)= +## Planner +The Planner starts with an arbitrary Vega specification (typically generated by Vega-Lite, but this is not a requirement). The Planner's job is to partition the specification into two valid Vega specifications, one that will execute in the browser with the Vega JavaScript library, and one that will execute on the server with the VegaFusion Runtime. + +VegaFusion does not (yet) provide full coverage of all of Vega's transforms and all the features of the Vega expression language. The planner uses information about which transforms and expression functions are supported to make decisions about which parts of the original Vega specification can be included in the resulting server specification. The advantage of this approach is that VegaFusion can accept any Vega specification, and as more support is added over time, more of the input specification will be eligible for inclusion in the server specification. + +Along with the client and server specifications, the planner also creates a communication plan. The communication plan is a specification of the datasets and signals that must be passed from server to client, and from client to server in order for the interactive behavior of the original specification to be preserved. + +## Runtime +After planning, the server specification is compiled into a VegaFusion task graph. The job of the Runtime is to calculate the value of requested nodes within a task graph. + +A task graph includes the values of the root nodes (those with no parents), but it does not include the values of any of the interior nodes (those with parents). Each node in the task graph is a pure function of the values of its parents. This enables the Runtime to calculate the value of any node in the Task graph from the specification, while keeping the overall task graph size small enough to be efficiently transferred between the client and the server. The Runtime uses fingerprinting and precise caching to avoid repeated calculations of the same nodes. The cache is "precise" in the sense that cached values can be shared across visualizations that share a common substructure, even if the full specifications are not identical. diff --git a/docs/source/index.md b/docs/source/index.md index 0b4386dae..70446b603 100644 --- a/docs/source/index.md +++ b/docs/source/index.md @@ -1,9 +1,20 @@ - - -Welcome to the VegaFusion documentation! +```{raw} html +
+ + +
+

Building blocks for scaling Vega visualizations

+``` # Purpose @@ -14,12 +25,42 @@ If you've arrived here looking for information on how to scale Vega-Altair visua ::: ```{toctree} -:maxdepth: 2 -:caption: Contents +:maxdepth: 1 +:caption: Features column_usage transform_data transform_spec transform_extract chart_state +inline_datasets +grpc +vega-lite +``` + +```{toctree} +:maxdepth: 2 +:hidden: true +:caption: About + +background +how_it_works +technology +related_projects +about_the_name +license +stewardship +citation +``` + +```{toctree} +:maxdepth: 1 +:hidden: true +:caption: "Community" + +Source Code +Report an Issue +Start a Discussion +Code of Conduct +governance ``` diff --git a/docs/source/inline_datasets.md b/docs/source/inline_datasets.md new file mode 100644 index 000000000..99d523493 --- /dev/null +++ b/docs/source/inline_datasets.md @@ -0,0 +1,39 @@ +# Inline Datasets +The VegaFusion transform methods ([data](./transform_data.md), [spec](./transform_spec.md), and [extract](./transform_extract.md)) and [chart state](./chart_state.md) all support an `inline_datasets` argument. This may be used to pass Arrow tables, DataFrames, or DataFusion logical plans into Vega specifications. + +Vega-Altair's `"vegafusion"` data transformer uses this approach to reference DataFrames from Vega specs without writing them to disk or converting them to JSON. + +## Overview +Vega specs may include `data` entries with a `url` of the form `"vegafusion+dataset://{dataset_name}`, where a dataset named `{dataset_name}` is expected to be provided using `inline_datasets`. + +Here is an example Vega specification: + +``` +{ + ... + "data": [ + { + "name": "source0", + "url": "vegafusion+dataset://movies", + "transform": [ + ... + ] + } + ], + ... +} +``` + +In this case, VegaFusion expects that `inline_datasets` will contain a dataset named `movies`. + +## Python +In Python, `inline_datasets` should be a `dict` from dataset names (e.g. `movies` in the example above) to DataFrames or Arrow tables. "DataFrames" may be of any type supported by [Narwhals](https://narwhals-dev.github.io/narwhals/) (including [pandas](https://pandas.pydata.org/), [Polars](https://pola.rs/), [PyArrow](https://arrow.apache.org/docs/python/index.html), [Vaex](https://vaex.io/), [Ibis](https://ibis-project.org/), etc.) and "Arrow tables" may be any object supporting the [Arrow PyCapsule interface](https://arrow.apache.org/docs/format/CDataInterface/PyCapsuleInterface.html) (e.g. [arro3](https://github.com/kylebarron/arro3), [nanoarrow](https://arrow.apache.org/nanoarrow/latest/getting-started/python.html), etc.). + +In the case of types supported by Narwhals, VegaFusion will use [`get_column_usage`](./column_usage.md) to project down to the minimal collection of columns that are required, then rely on Narwhals' support for the Arrow PyCapsule API to convert these required columns to an `arro3` Arrow table for zero-copy transfer to Rust. + +See [inline_datasets.py](https://github.com/vega/vegafusion/tree/v2/examples/python-examples/inline_datasets.py) for a complete example with pandas. + +## Rust +In Rust, `inline_datasets` should be a `HashMap` from dataset names (e.g. `movies` in the example above) to `VegaFusionDataset` instances. `VegaFusionDataset` is an enum that may be either a `VegaFusionTable` (which is a thin wrapper around Arrow RecordBatches), or a DataFusion [`LocalPlan`](https://docs.rs/datafusion/latest/datafusion/logical_expr/enum.LogicalPlan.html) (which represents an arbitrary DataFusion query). + +See [inline_datasets.rs](https://github.com/vega/vegafusion/tree/v2/examples/rust-examples/examples/inline_datasets.rs) for a complete example using a `VegaFusionTable`, and see [inline_datasets_plan.rs](https://github.com/vega/vegafusion/tree/v2/examples/rust-examples/examples/inline_datasets_plan.rs) for a complete example using a DataFusion ``LogicalPlan``. diff --git a/docs/source/license.md b/docs/source/license.md new file mode 100644 index 000000000..6fa5dbdc6 --- /dev/null +++ b/docs/source/license.md @@ -0,0 +1,4 @@ +# License +Since version 1.0, VegaFusion is licensed under the [BSD-3](https://opensource.org/licenses/BSD-3-Clause) license. This is the same license used by Vega, Vega-Lite, and Altair. + +Versions prior to 1.0 were released under the [AGPLv3 license](https://www.gnu.org/licenses/agpl-3.0.en.html). diff --git a/docs/source/related_projects.md b/docs/source/related_projects.md new file mode 100644 index 000000000..39ce1c820 --- /dev/null +++ b/docs/source/related_projects.md @@ -0,0 +1,23 @@ +# Related Projects +Here are a few related projects that have some overlap with the goals of VegaFusion. + +## [`altair-transform`](https://github.com/altair-viz/altair-transform) +`altair-transform` is a Python library created by Jake Vanderplas, one of the creators of Altair. It consists of pandas implementations of most of the Vega expression language and Vega Transforms that are available through Altair. It supports two main use cases: + + 1. [Extracting Data](https://github.com/altair-viz/altair-transform#example-extracting-data): Given a Chart with transforms, `altair-transform` can be used to construct a Pandas DataFrame representing the result of the Chart's transforms, and the input to the Chart's mark. + 2. [Pre-Aggregating Large Datasets](https://github.com/altair-viz/altair-transform#example-pre-aggregating-large-datasets): Given a Chart with transforms, `altair-transform` can be used to evaluate the transforms and create a new Chart instance that refers only to this evaluated dataset. For aggregation charts like histograms, this can result in a much smaller dataset being transferred to the browser. + +These workflows were not supported by the initial version of VegaFusion, but support for both was added in version 1.0. + +`altair-transform` does not support evaluating transforms on the server in interactive workflows like linked histogram brushing, which was the initial focus of VegaFusion. + +## [`ibis-vega-transform`](https://github.com/Quansight/ibis-vega-transform) +`ibis-vega-transform` is a Python library and JupyterLab extension developed by [Quansight](https://www.quansight.com/). It translates pipelines of Vega transforms into [Ibis](https://ibis-project.org/) query expressions, which can then be evaluated with a variety of Ibis database backends (in particular, OmniSci). + +The JupyterLab extension makes two-way communication between the browser and the Python kernel possible, and this is used to support interactive visualizations like histogram brushing. + +In contrast to the Planner approach used by VegaFusion, `ibis-vega-transform` replaces pipelines of Vega transforms with a custom transform type and then registers a JavaScript handler for this custom transform type. This JavaScript handler then uses Jupyter Comms to communicate with the Python portion of the library. The Python library converts the requested Vega transforms into an ibis query, evaluates the query, and sends the resulting dataset back to the browser using a Jupyter Comm. + +An advantage of this approach is that the Vega JavaScript library remains in control of the entire specification so the external `ibis-vega-transform` library does not need to maintain an independent task graph in order to support interactivity. A downside of this approach is that the result of every transform pipeline must be sent back to the client and be stored in the Vega dataflow graph. Often times this is not a problem, because the transform pipeline includes an aggregation stage that significantly reduces the dataset size. However, sometimes the result of a transform pipeline is quite large, but it is only used as input to other transform pipelines. In this case, it is advantageous to keep the large intermediary result cached on the server and to not send it to the client at all. This use case is one of the reasons that VegaFusion uses the Planner+Runtime architecture described previously. + +Currently, VegaFusion implements all of its transform logic in the Python process (with efficient multi-threading) and has no capability to connect to external data providers like databases. This is certainly a desirable capability, and may be enabled in VegaFusion by the [datafusion-federation](https://github.com/datafusion-contrib/datafusion-federation) project. diff --git a/docs/source/stewardship.md b/docs/source/stewardship.md new file mode 100644 index 000000000..5fb3168a2 --- /dev/null +++ b/docs/source/stewardship.md @@ -0,0 +1,9 @@ +# Stewardship +VegaFusion was developed by [Jon Mease](https://jonmmease.dev/) and acquired by [Hex Technologies](https://hex.tech/) in 2022. Hex donated VegaFusion to the Vega Project in 2024 and continues to support its development and maintenance. + +```{image} https://user-images.githubusercontent.com/15064365/213193272-b9617431-84a0-4733-8b58-1309d25e925b.svg +:alt: Hex Logo +:width: 200px +:align: center +:target: https://hex.tech +``` diff --git a/docs/source/technology.md b/docs/source/technology.md new file mode 100644 index 000000000..3cc5cda99 --- /dev/null +++ b/docs/source/technology.md @@ -0,0 +1,8 @@ +# Technology +## VegaFusion Technology Stack +VegaFusion uses a fairly diverse technology stack. The planner and runtime are both implemented in Rust with wrappers for Python and JavaScript. + +The Task Graph specifications are defined as protocol buffer messages. The [prost](https://github.com/tokio-rs/prost) library is used to generate Rust data structures from these protocol buffer messages. When Arrow tables appear as task graph root values, they are serialized inside the protocol buffer specification using the [Apache Arrow IPC format](https://arrow.apache.org/docs/format/Columnar.html#serialization-and-interprocess-communication-ipc). The binary representation of the task graph protocol buffer message is what is transferred across the Jupyter Comms protocol. + +## DataFusion integration +[Apache Arrow DataFusion](https://github.com/apache/arrow-datafusion) is an SQL compatible query engine that integrates with the Rust implementation of Apache Arrow. VegaFusion uses DataFusion to implement many of the Vega transforms, and it compiles the Vega expression language directly into the DataFusion expression language. In addition to being very fast, a particularly powerful characteristic of DataFusion is that it provides many interfaces that can be extended with custom Rust logic. For example, VegaFusion defines a few custom UDFs that are designed to implement the precise semantics of the Vega transforms and the Vega expression language. diff --git a/docs/source/transform_data.md b/docs/source/transform_data.md index 9f58a153b..a3ab661f2 100644 --- a/docs/source/transform_data.md +++ b/docs/source/transform_data.md @@ -1,4 +1,4 @@ -# Transformed Data +# Transform Data VegaFusion can be used to evaluate datasets in a Vega spec and return them as arrow tables or DataFrames. This is the foundation for Vega-Altair's [`chart.transformed_data`](https://altair-viz.github.io/user_guide/transform/index.html#accessing-transformed-data) method. diff --git a/docs/source/transform_spec.md b/docs/source/transform_spec.md index 727815e46..4800f73d7 100644 --- a/docs/source/transform_spec.md +++ b/docs/source/transform_spec.md @@ -1,4 +1,4 @@ -# Transformed Spec +# Transform Spec VegaFusion can be used to evaluate datasets in a Vega spec, remove unused columns, and inline the results in a transformed Vega spec. This transformed Vega spec is self-contained and may be displayed with the standard Vega JavaScript library. diff --git a/docs/source/vega-lite.md b/docs/source/vega-lite.md new file mode 100644 index 000000000..04e39d7f3 --- /dev/null +++ b/docs/source/vega-lite.md @@ -0,0 +1,2 @@ +# Vega-Lite +[Vega-Lite](https://vega.github.io/vega-lite/) is a high-level specification for charts that is compiled to standard Vega specification by the Vega-Lite TypeScript library. VegaFusion operates exclusively on Vega specifications, so it does not directly support Vega-Lite. The [vl-convert](https://github.com/vega/vl-convert) project provides Rust and Python libraries that can be used to convert Vega-Lite chart specifications to Vega specifications that are compatible with VegaFusion. Vega-Altair's `"vegafusion"` data transformer uses this approach. diff --git a/examples/datasets/movies.parquet b/examples/datasets/movies.parquet new file mode 100644 index 0000000000000000000000000000000000000000..b6c888aecd18ab5c3f4fcb7bccff12c274a32abd GIT binary patch literal 131007 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 kho3Jh6dQQ-Ura dict[str, Any]: + """ + Based on https://vega.github.io/editor/#/examples/vega/histogram-null-values + """ + spec_str = """ +{ + "$schema": "https://vega.github.io/schema/vega/v5.json", + "description": "A histogram of film ratings, modified to include null values.", + "width": 400, + "height": 200, + "padding": 5, + "autosize": {"type": "fit", "resize": true}, + "data": [ + { + "name": "table", + "url": "data/movies.json", + "transform": [ + { + "type": "extent", "field": "IMDB Rating", + "signal": "extent" + }, + { + "type": "bin", "signal": "bins", + "field": "IMDB Rating", "extent": {"signal": "extent"}, + "maxbins": 10 + } + ] + }, + { + "name": "counts", + "source": "table", + "transform": [ + { + "type": "filter", + "expr": "datum['IMDB Rating'] != null" + }, + { + "type": "aggregate", + "groupby": ["bin0", "bin1"] + } + ] + }, + { + "name": "nulls", + "source": "table", + "transform": [ + { + "type": "filter", + "expr": "datum['IMDB Rating'] == null" + }, + { + "type": "aggregate", + "groupby": [] + } + ] + } + ], + "signals": [ + { + "name": "maxbins", "value": 10 + }, + { + "name": "binCount", + "update": "(bins.stop - bins.start) / bins.step" + }, + { + "name": "nullGap", "value": 10 + }, + { + "name": "barStep", + "update": "(width - nullGap) / (1 + binCount)" + } + ], + "scales": [ + { + "name": "yscale", + "type": "linear", + "range": "height", + "round": true, "nice": true, + "domain": { + "fields": [ + {"data": "counts", "field": "count"}, + {"data": "nulls", "field": "count"} + ] + } + }, + { + "name": "xscale", + "type": "linear", + "range": [{"signal": "barStep + nullGap"}, {"signal": "width"}], + "round": true, + "domain": {"signal": "[bins.start, bins.stop]"}, + "bins": {"signal": "bins"} + }, + { + "name": "xscale-null", + "type": "band", + "range": [0, {"signal": "barStep"}], + "round": true, + "domain": [null] + } + ], + + "axes": [ + {"orient": "bottom", "scale": "xscale", "tickMinStep": 0.5}, + {"orient": "bottom", "scale": "xscale-null"}, + {"orient": "left", "scale": "yscale", "tickCount": 5, "offset": 5} + ], + + "marks": [ + { + "type": "rect", + "from": {"data": "counts"}, + "encode": { + "update": { + "x": {"scale": "xscale", "field": "bin0", "offset": 1}, + "x2": {"scale": "xscale", "field": "bin1"}, + "y": {"scale": "yscale", "field": "count"}, + "y2": {"scale": "yscale", "value": 0}, + "fill": {"value": "steelblue"} + }, + "hover": { + "fill": {"value": "firebrick"} + } + } + }, + { + "type": "rect", + "from": {"data": "nulls"}, + "encode": { + "update": { + "x": {"scale": "xscale-null", "value": null, "offset": 1}, + "x2": {"scale": "xscale-null", "band": 1}, + "y": {"scale": "yscale", "field": "count"}, + "y2": {"scale": "yscale", "value": 0}, + "fill": {"value": "#aaa"} + }, + "hover": { + "fill": {"value": "firebrick"} + } + } + } + ] +} + + """ + return json.loads(spec_str) + + +if __name__ == "__main__": + main() diff --git a/examples/python-examples/inline_datasets.py b/examples/python-examples/inline_datasets.py new file mode 100644 index 000000000..2d5d37c8c --- /dev/null +++ b/examples/python-examples/inline_datasets.py @@ -0,0 +1,423 @@ +import json +from typing import Any + +import vegafusion as vf +import pandas as pd + + +# This example demonstrates how to use the `pre_transform_spec` method with an inline dataset +# (a pandas DataFrame in this case) to create a new spec with supported transforms pre-evaluated. +def main(): + movies_df = pd.read_json( + "https://raw.githubusercontent.com/vega/vega-datasets/refs/heads/main/data/movies.json" + ) + spec = get_spec() + transformed_spec, warnings = vf.runtime.pre_transform_spec( + spec, inline_datasets={"movies": movies_df} + ) + assert warnings == [] + assert transformed_spec == expected_spec() + + +def get_spec() -> dict[str, Any]: + """ + Based on https://vega.github.io/editor/#/examples/vega/histogram-null-values + """ + spec_str = """ +{ + "$schema": "https://vega.github.io/schema/vega/v5.json", + "description": "A histogram of film ratings, modified to include null values.", + "width": 400, + "height": 200, + "padding": 5, + "autosize": {"type": "fit", "resize": true}, + "data": [ + { + "name": "table", + "url": "vegafusion+dataset://movies", + "transform": [ + { + "type": "extent", "field": "IMDB Rating", + "signal": "extent" + }, + { + "type": "bin", "signal": "bins", + "field": "IMDB Rating", "extent": {"signal": "extent"}, + "maxbins": 10 + } + ] + }, + { + "name": "counts", + "source": "table", + "transform": [ + { + "type": "filter", + "expr": "datum['IMDB Rating'] != null" + }, + { + "type": "aggregate", + "groupby": ["bin0", "bin1"] + } + ] + }, + { + "name": "nulls", + "source": "table", + "transform": [ + { + "type": "filter", + "expr": "datum['IMDB Rating'] == null" + }, + { + "type": "aggregate", + "groupby": [] + } + ] + } + ], + "signals": [ + { + "name": "maxbins", "value": 10 + }, + { + "name": "binCount", + "update": "(bins.stop - bins.start) / bins.step" + }, + { + "name": "nullGap", "value": 10 + }, + { + "name": "barStep", + "update": "(width - nullGap) / (1 + binCount)" + } + ], + "scales": [ + { + "name": "yscale", + "type": "linear", + "range": "height", + "round": true, "nice": true, + "domain": { + "fields": [ + {"data": "counts", "field": "count"}, + {"data": "nulls", "field": "count"} + ] + } + }, + { + "name": "xscale", + "type": "linear", + "range": [{"signal": "barStep + nullGap"}, {"signal": "width"}], + "round": true, + "domain": {"signal": "[bins.start, bins.stop]"}, + "bins": {"signal": "bins"} + }, + { + "name": "xscale-null", + "type": "band", + "range": [0, {"signal": "barStep"}], + "round": true, + "domain": [null] + } + ], + + "axes": [ + {"orient": "bottom", "scale": "xscale", "tickMinStep": 0.5}, + {"orient": "bottom", "scale": "xscale-null"}, + {"orient": "left", "scale": "yscale", "tickCount": 5, "offset": 5} + ], + + "marks": [ + { + "type": "rect", + "from": {"data": "counts"}, + "encode": { + "update": { + "x": {"scale": "xscale", "field": "bin0", "offset": 1}, + "x2": {"scale": "xscale", "field": "bin1"}, + "y": {"scale": "yscale", "field": "count"}, + "y2": {"scale": "yscale", "value": 0}, + "fill": {"value": "steelblue"} + }, + "hover": { + "fill": {"value": "firebrick"} + } + } + }, + { + "type": "rect", + "from": {"data": "nulls"}, + "encode": { + "update": { + "x": {"scale": "xscale-null", "value": null, "offset": 1}, + "x2": {"scale": "xscale-null", "band": 1}, + "y": {"scale": "yscale", "field": "count"}, + "y2": {"scale": "yscale", "value": 0}, + "fill": {"value": "#aaa"} + }, + "hover": { + "fill": {"value": "firebrick"} + } + } + } + ] +} + + """ + return json.loads(spec_str) + + +def expected_spec() -> dict[str, Any]: + return json.loads(""" + { + "$schema": "https://vega.github.io/schema/vega/v5.json", + "data": [ + { + "name": "table" + }, + { + "name": "counts", + "values": [ + { + "bin0": 6.0, + "bin1": 7.0, + "count": 985 + }, + { + "bin0": 3.0, + "bin1": 4.0, + "count": 100 + }, + { + "bin0": 7.0, + "bin1": 8.0, + "count": 741 + }, + { + "bin0": 5.0, + "bin1": 6.0, + "count": 633 + }, + { + "bin0": 8.0, + "bin1": 9.0, + "count": 204 + }, + { + "bin0": 2.0, + "bin1": 3.0, + "count": 43 + }, + { + "bin0": 4.0, + "bin1": 5.0, + "count": 273 + }, + { + "bin0": 9.0, + "bin1": 10.0, + "count": 4 + }, + { + "bin0": 1.0, + "bin1": 2.0, + "count": 5 + } + ] + }, + { + "name": "nulls", + "values": [ + { + "count": 213 + } + ] + } + ], + "signals": [ + { + "name": "bins", + "value": { + "fields": [ + "IMDB Rating" + ], + "fname": "bin_IMDB Rating", + "start": 1.0, + "step": 1.0, + "stop": 10.0 + } + }, + { + "name": "maxbins", + "value": 10 + }, + { + "name": "binCount", + "update": "(bins.stop - bins.start) / bins.step" + }, + { + "name": "nullGap", + "value": 10 + }, + { + "name": "barStep", + "update": "(width - nullGap) / (1 + binCount)" + } + ], + "marks": [ + { + "type": "rect", + "from": { + "data": "counts" + }, + "encode": { + "update": { + "y": { + "field": "count", + "scale": "yscale" + }, + "fill": { + "value": "steelblue" + }, + "x2": { + "field": "bin1", + "scale": "xscale" + }, + "x": { + "field": "bin0", + "scale": "xscale", + "offset": 1 + }, + "y2": { + "value": 0, + "scale": "yscale" + } + }, + "hover": { + "fill": { + "value": "firebrick" + } + } + } + }, + { + "type": "rect", + "from": { + "data": "nulls" + }, + "encode": { + "hover": { + "fill": { + "value": "firebrick" + } + }, + "update": { + "x2": { + "scale": "xscale-null", + "band": 1 + }, + "y": { + "field": "count", + "scale": "yscale" + }, + "y2": { + "value": 0, + "scale": "yscale" + }, + "fill": { + "value": "#aaa" + }, + "x": { + "scale": "xscale-null", + "offset": 1 + } + } + } + } + ], + "scales": [ + { + "name": "yscale", + "type": "linear", + "domain": { + "fields": [ + { + "data": "counts", + "field": "count" + }, + { + "data": "nulls", + "field": "count" + } + ] + }, + "range": "height", + "nice": true, + "round": true + }, + { + "name": "xscale", + "type": "linear", + "domain": { + "signal": "[bins.start, bins.stop]" + }, + "range": [ + { + "signal": "barStep + nullGap" + }, + { + "signal": "width" + } + ], + "bins": { + "signal": "bins" + }, + "round": true + }, + { + "name": "xscale-null", + "type": "band", + "domain": [ + null + ], + "range": [ + 0, + { + "signal": "barStep" + } + ], + "round": true + } + ], + "axes": [ + { + "scale": "xscale", + "tickMinStep": 0.5, + "orient": "bottom" + }, + { + "scale": "xscale-null", + "orient": "bottom" + }, + { + "scale": "yscale", + "tickCount": 5, + "offset": 5, + "orient": "left" + } + ], + "width": 400, + "height": 200, + "description": "A histogram of film ratings, modified to include null values.", + "padding": 5, + "autosize": { + "type": "fit", + "resize": true + } +} + """) + + +if __name__ == "__main__": + main() diff --git a/examples/rust-examples/Cargo.toml b/examples/rust-examples/Cargo.toml index ef3ee6e66..3805f20c7 100644 --- a/examples/rust-examples/Cargo.toml +++ b/examples/rust-examples/Cargo.toml @@ -5,6 +5,10 @@ edition = "2021" [dev-dependencies] serde_json = { workspace = true } +vegafusion-common = { path = "../../vegafusion-common" } vegafusion-core = { path = "../../vegafusion-core" } vegafusion-runtime = { path = "../../vegafusion-runtime" } -tokio = "1.41.1" \ No newline at end of file +datafusion = { workspace = true } +reqwest = { workspace = true } +tonic = { workspace = true } +tokio = { workspace = true } \ No newline at end of file diff --git a/examples/rust-examples/examples/grpc.rs b/examples/rust-examples/examples/grpc.rs new file mode 100644 index 000000000..23ef0f460 --- /dev/null +++ b/examples/rust-examples/examples/grpc.rs @@ -0,0 +1,211 @@ +use std::str::FromStr; +use tonic::transport::{Channel, Uri}; +use vegafusion_core::proto::gen::tasks::Variable; +use vegafusion_core::runtime::VegaFusionRuntimeTrait; +use vegafusion_core::spec::chart::ChartSpec; +use vegafusion_core::task_graph::task_value::TaskValue; +use vegafusion_runtime::task_graph::GrpcVegaFusionRuntime; + +/// This example demonstrates how to connect to a VegaFusion Server instance over gRPC then use +/// the `pre_transform_values` method to get transformed datasets as Arrow tables. +/// +/// Be sure to start an instance of VegaFusionServer with +/// +/// ``` +/// vegafusion-server --port 50051 +/// ``` +#[tokio::main] +async fn main() { + let spec = get_spec(); + + // Build URI + let uri = Uri::from_str("http://127.0.0.1:50051").unwrap(); + + // Build gRPC channel + let channel = Channel::builder(uri).connect().await.unwrap(); + + // Build GrpcVegaFusionRuntime + let runtime = GrpcVegaFusionRuntime::try_new(channel).await.unwrap(); + + let (values, warnings) = runtime + .pre_transform_values( + &spec, + &[(Variable::new_data("counts"), vec![])], + &Default::default(), // Inline datasets + &Default::default(), // Options + ) + .await + .unwrap(); + + assert_eq!(values.len(), 1); + assert_eq!(warnings.len(), 0); + + let TaskValue::Table(counts_table) = &values[0] else { + panic!("Expected a table") + }; + + let tbl_repr = counts_table.pretty_format(None).unwrap(); + + assert_eq!( + tbl_repr, + "\ ++------+------+-------+ +| bin0 | bin1 | count | ++------+------+-------+ +| 6.0 | 7.0 | 985 | +| 3.0 | 4.0 | 100 | +| 7.0 | 8.0 | 741 | +| 5.0 | 6.0 | 633 | +| 8.0 | 9.0 | 204 | +| 2.0 | 3.0 | 43 | +| 4.0 | 5.0 | 273 | +| 9.0 | 10.0 | 4 | +| 1.0 | 2.0 | 5 | ++------+------+-------+" + ) +} + +fn get_spec() -> ChartSpec { + let spec_str = r##" + { + "$schema": "https://vega.github.io/schema/vega/v5.json", + "description": "A histogram of film ratings, modified to include null values.", + "width": 400, + "height": 200, + "padding": 5, + "autosize": {"type": "fit", "resize": true}, + "data": [ + { + "name": "table", + "url": "data/movies.json", + "transform": [ + { + "type": "extent", "field": "IMDB Rating", + "signal": "extent" + }, + { + "type": "bin", "signal": "bins", + "field": "IMDB Rating", "extent": {"signal": "extent"}, + "maxbins": 10 + } + ] + }, + { + "name": "counts", + "source": "table", + "transform": [ + { + "type": "filter", + "expr": "datum['IMDB Rating'] != null" + }, + { + "type": "aggregate", + "groupby": ["bin0", "bin1"] + } + ] + }, + { + "name": "nulls", + "source": "table", + "transform": [ + { + "type": "filter", + "expr": "datum['IMDB Rating'] == null" + }, + { + "type": "aggregate", + "groupby": [] + } + ] + } + ], + "signals": [ + { + "name": "maxbins", "value": 10 + }, + { + "name": "binCount", + "update": "(bins.stop - bins.start) / bins.step" + }, + { + "name": "nullGap", "value": 10 + }, + { + "name": "barStep", + "update": "(width - nullGap) / (1 + binCount)" + } + ], + "scales": [ + { + "name": "yscale", + "type": "linear", + "range": "height", + "round": true, "nice": true, + "domain": { + "fields": [ + {"data": "counts", "field": "count"}, + {"data": "nulls", "field": "count"} + ] + } + }, + { + "name": "xscale", + "type": "linear", + "range": [{"signal": "barStep + nullGap"}, {"signal": "width"}], + "round": true, + "domain": {"signal": "[bins.start, bins.stop]"}, + "bins": {"signal": "bins"} + }, + { + "name": "xscale-null", + "type": "band", + "range": [0, {"signal": "barStep"}], + "round": true, + "domain": [null] + } + ], + + "axes": [ + {"orient": "bottom", "scale": "xscale", "tickMinStep": 0.5}, + {"orient": "bottom", "scale": "xscale-null"}, + {"orient": "left", "scale": "yscale", "tickCount": 5, "offset": 5} + ], + + "marks": [ + { + "type": "rect", + "from": {"data": "counts"}, + "encode": { + "update": { + "x": {"scale": "xscale", "field": "bin0", "offset": 1}, + "x2": {"scale": "xscale", "field": "bin1"}, + "y": {"scale": "yscale", "field": "count"}, + "y2": {"scale": "yscale", "value": 0}, + "fill": {"value": "steelblue"} + }, + "hover": { + "fill": {"value": "firebrick"} + } + } + }, + { + "type": "rect", + "from": {"data": "nulls"}, + "encode": { + "update": { + "x": {"scale": "xscale-null", "value": null, "offset": 1}, + "x2": {"scale": "xscale-null", "band": 1}, + "y": {"scale": "yscale", "field": "count"}, + "y2": {"scale": "yscale", "value": 0}, + "fill": {"value": "#aaa"} + }, + "hover": { + "fill": {"value": "firebrick"} + } + } + } + ] + } + "##; + serde_json::from_str(spec_str).unwrap() +} diff --git a/examples/rust-examples/examples/inline_datasets.rs b/examples/rust-examples/examples/inline_datasets.rs new file mode 100644 index 000000000..d36ba09da --- /dev/null +++ b/examples/rust-examples/examples/inline_datasets.rs @@ -0,0 +1,194 @@ +use std::collections::HashMap; +use vegafusion_common::data::table::VegaFusionTable; +use vegafusion_core::data::dataset::VegaFusionDataset; +use vegafusion_core::runtime::VegaFusionRuntimeTrait; +use vegafusion_core::spec::chart::ChartSpec; +use vegafusion_runtime::task_graph::runtime::VegaFusionRuntime; + +/// This example demonstrates how to use the `pre_transform_spec` method with an inline +/// Arrow table to create a new spec with supported transforms pre-evaluated. +#[tokio::main] +async fn main() { + let spec = get_spec(); + + // Fetch movies dataset as json + let client = reqwest::ClientBuilder::new().build().unwrap(); + let movies_json: serde_json::Value = client + .get( + "https://raw.githubusercontent.com/vega/vega-datasets/refs/heads/main/data/movies.json", + ) + .send() + .await + .unwrap() + .json() + .await + .unwrap(); + + // Construct VegaFusionTable and wrap in VegaFusionDataset + let table = VegaFusionTable::from_json(&movies_json).unwrap(); + let dataset = VegaFusionDataset::from_table(table, None).unwrap(); + let inline_datasets: HashMap = + vec![("movies".to_string(), dataset)].into_iter().collect(); + + let runtime = VegaFusionRuntime::new(None); + + let (transformed_spec, warnings) = runtime + .pre_transform_spec( + &spec, + &inline_datasets, // Inline datasets + &Default::default(), // Options + ) + .await + .unwrap(); + + assert_eq!(warnings.len(), 0); + println!( + "{}", + serde_json::to_string_pretty(&transformed_spec).unwrap() + ); +} + +fn get_spec() -> ChartSpec { + let spec_str = r##" + { + "$schema": "https://vega.github.io/schema/vega/v5.json", + "description": "A histogram of film ratings, modified to include null values.", + "width": 400, + "height": 200, + "padding": 5, + "autosize": {"type": "fit", "resize": true}, + "data": [ + { + "name": "table", + "url": "vegafusion+dataset://movies", + "transform": [ + { + "type": "extent", "field": "IMDB Rating", + "signal": "extent" + }, + { + "type": "bin", "signal": "bins", + "field": "IMDB Rating", "extent": {"signal": "extent"}, + "maxbins": 10 + } + ] + }, + { + "name": "counts", + "source": "table", + "transform": [ + { + "type": "filter", + "expr": "datum['IMDB Rating'] != null" + }, + { + "type": "aggregate", + "groupby": ["bin0", "bin1"] + } + ] + }, + { + "name": "nulls", + "source": "table", + "transform": [ + { + "type": "filter", + "expr": "datum['IMDB Rating'] == null" + }, + { + "type": "aggregate", + "groupby": [] + } + ] + } + ], + "signals": [ + { + "name": "maxbins", "value": 10 + }, + { + "name": "binCount", + "update": "(bins.stop - bins.start) / bins.step" + }, + { + "name": "nullGap", "value": 10 + }, + { + "name": "barStep", + "update": "(width - nullGap) / (1 + binCount)" + } + ], + "scales": [ + { + "name": "yscale", + "type": "linear", + "range": "height", + "round": true, "nice": true, + "domain": { + "fields": [ + {"data": "counts", "field": "count"}, + {"data": "nulls", "field": "count"} + ] + } + }, + { + "name": "xscale", + "type": "linear", + "range": [{"signal": "barStep + nullGap"}, {"signal": "width"}], + "round": true, + "domain": {"signal": "[bins.start, bins.stop]"}, + "bins": {"signal": "bins"} + }, + { + "name": "xscale-null", + "type": "band", + "range": [0, {"signal": "barStep"}], + "round": true, + "domain": [null] + } + ], + + "axes": [ + {"orient": "bottom", "scale": "xscale", "tickMinStep": 0.5}, + {"orient": "bottom", "scale": "xscale-null"}, + {"orient": "left", "scale": "yscale", "tickCount": 5, "offset": 5} + ], + + "marks": [ + { + "type": "rect", + "from": {"data": "counts"}, + "encode": { + "update": { + "x": {"scale": "xscale", "field": "bin0", "offset": 1}, + "x2": {"scale": "xscale", "field": "bin1"}, + "y": {"scale": "yscale", "field": "count"}, + "y2": {"scale": "yscale", "value": 0}, + "fill": {"value": "steelblue"} + }, + "hover": { + "fill": {"value": "firebrick"} + } + } + }, + { + "type": "rect", + "from": {"data": "nulls"}, + "encode": { + "update": { + "x": {"scale": "xscale-null", "value": null, "offset": 1}, + "x2": {"scale": "xscale-null", "band": 1}, + "y": {"scale": "yscale", "field": "count"}, + "y2": {"scale": "yscale", "value": 0}, + "fill": {"value": "#aaa"} + }, + "hover": { + "fill": {"value": "firebrick"} + } + } + } + ] + } + "##; + serde_json::from_str(spec_str).unwrap() +} diff --git a/examples/rust-examples/examples/inline_datasets_plan.rs b/examples/rust-examples/examples/inline_datasets_plan.rs new file mode 100644 index 000000000..d867a939a --- /dev/null +++ b/examples/rust-examples/examples/inline_datasets_plan.rs @@ -0,0 +1,209 @@ +use datafusion::logical_expr::lit; +use datafusion::prelude::{col, SessionContext}; +use std::collections::HashMap; +use std::path::PathBuf; +use vegafusion_core::data::dataset::VegaFusionDataset; +use vegafusion_core::runtime::VegaFusionRuntimeTrait; +use vegafusion_core::spec::chart::ChartSpec; +use vegafusion_runtime::task_graph::runtime::VegaFusionRuntime; + +/// This example demonstrates how to use the `pre_transform_spec` method with an inline +/// dataset that wraps a DataFusion logical plan to create a new spec with supported +/// transforms pre-evaluated. +#[tokio::main] +async fn main() -> vegafusion_common::error::Result<()> { + // Construct default DataFusion session context + let ctx = SessionContext::new(); + + // Build path to parquet file + let parquet_path = PathBuf::from(env!("CARGO_MANIFEST_DIR")) + .parent() + .unwrap() + .join("datasets") + .join("movies.parquet") + .display() + .to_string(); + + // Read parquet file into dataframe + let df = ctx + .read_parquet(parquet_path, Default::default()) + .await? + .filter(col("MPAA Rating").eq(lit("PG")))?; + + // Extract logical plan from DataFrame + // let plan = df.into_optimized_plan()?; + let plan = df.logical_plan().clone(); + + // Load chart spec + let spec = get_spec(); + + // Create VegaFusionDataset from the logical plan + let dataset = VegaFusionDataset::from_plan(plan); + + let inline_datasets: HashMap = + vec![("movies".to_string(), dataset)].into_iter().collect(); + + let runtime = VegaFusionRuntime::new(None); + + let (transformed_spec, warnings) = runtime + .pre_transform_spec( + &spec, + &inline_datasets, // Inline datasets + &Default::default(), // Options + ) + .await + .unwrap(); + + assert_eq!(warnings.len(), 0); + println!( + "{}", + serde_json::to_string_pretty(&transformed_spec).unwrap() + ); + + Ok(()) +} + +fn get_spec() -> ChartSpec { + let spec_str = r##" + { + "$schema": "https://vega.github.io/schema/vega/v5.json", + "description": "A histogram of film ratings, modified to include null values.", + "width": 400, + "height": 200, + "padding": 5, + "autosize": {"type": "fit", "resize": true}, + "data": [ + { + "name": "table", + "url": "vegafusion+dataset://movies", + "transform": [ + { + "type": "extent", "field": "IMDB Rating", + "signal": "extent" + }, + { + "type": "bin", "signal": "bins", + "field": "IMDB Rating", "extent": {"signal": "extent"}, + "maxbins": 10 + } + ] + }, + { + "name": "counts", + "source": "table", + "transform": [ + { + "type": "filter", + "expr": "datum['IMDB Rating'] != null" + }, + { + "type": "aggregate", + "groupby": ["bin0", "bin1"] + } + ] + }, + { + "name": "nulls", + "source": "table", + "transform": [ + { + "type": "filter", + "expr": "datum['IMDB Rating'] == null" + }, + { + "type": "aggregate", + "groupby": [] + } + ] + } + ], + "signals": [ + { + "name": "maxbins", "value": 10 + }, + { + "name": "binCount", + "update": "(bins.stop - bins.start) / bins.step" + }, + { + "name": "nullGap", "value": 10 + }, + { + "name": "barStep", + "update": "(width - nullGap) / (1 + binCount)" + } + ], + "scales": [ + { + "name": "yscale", + "type": "linear", + "range": "height", + "round": true, "nice": true, + "domain": { + "fields": [ + {"data": "counts", "field": "count"}, + {"data": "nulls", "field": "count"} + ] + } + }, + { + "name": "xscale", + "type": "linear", + "range": [{"signal": "barStep + nullGap"}, {"signal": "width"}], + "round": true, + "domain": {"signal": "[bins.start, bins.stop]"}, + "bins": {"signal": "bins"} + }, + { + "name": "xscale-null", + "type": "band", + "range": [0, {"signal": "barStep"}], + "round": true, + "domain": [null] + } + ], + + "axes": [ + {"orient": "bottom", "scale": "xscale", "tickMinStep": 0.5}, + {"orient": "bottom", "scale": "xscale-null"}, + {"orient": "left", "scale": "yscale", "tickCount": 5, "offset": 5} + ], + + "marks": [ + { + "type": "rect", + "from": {"data": "counts"}, + "encode": { + "update": { + "x": {"scale": "xscale", "field": "bin0", "offset": 1}, + "x2": {"scale": "xscale", "field": "bin1"}, + "y": {"scale": "yscale", "field": "count"}, + "y2": {"scale": "yscale", "value": 0}, + "fill": {"value": "steelblue"} + }, + "hover": { + "fill": {"value": "firebrick"} + } + } + }, + { + "type": "rect", + "from": {"data": "nulls"}, + "encode": { + "update": { + "x": {"scale": "xscale-null", "value": null, "offset": 1}, + "x2": {"scale": "xscale-null", "band": 1}, + "y": {"scale": "yscale", "field": "count"}, + "y2": {"scale": "yscale", "value": 0}, + "fill": {"value": "#aaa"} + }, + "hover": { + "fill": {"value": "firebrick"} + } + } + } + ] + } + "##; + serde_json::from_str(spec_str).unwrap() +} diff --git a/pixi.lock b/pixi.lock index 895b7e87a..7d761ee7b 100644 --- a/pixi.lock +++ b/pixi.lock @@ -14,40 +14,50 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/altair-5.4.1-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/anyio-4.6.2.post1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/anywidget-0.9.13-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aom-3.9.1-hac33072_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/argon2-cffi-23.1.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/argon2-cffi-bindings-21.2.0-py310ha75aee5_5.conda - conda: https://conda.anaconda.org/conda-forge/noarch/arrow-1.3.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/noarch/async-lru-2.0.4-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/attrs-24.2.0-pyh71513ae_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-auth-0.8.0-h7205bc0_5.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-cal-0.8.0-he70792b_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-common-0.10.0-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-compression-0.3.0-hba2fe39_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-event-stream-0.5.0-h18ad228_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-http-0.9.0-hc1812d8_4.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-io-0.15.0-h9a7ba4f_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-mqtt-0.11.0-h7f264a7_4.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-s3-0.7.0-hdd898f0_6.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-sdkutils-0.2.0-hba2fe39_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-checksums-0.2.0-hba2fe39_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-crt-cpp-0.29.1-hd83ed67_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-sdk-cpp-1.11.407-h4a57546_8.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/azure-core-cpp-1.14.0-h5cfcd09_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/azure-identity-cpp-1.10.0-h113e628_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/azure-storage-blobs-cpp-12.13.0-h3cf044e_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/azure-storage-common-cpp-12.8.0-h736e048_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/azure-storage-files-datalake-cpp-12.12.0-ha633028_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/babel-2.14.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/beautifulsoup4-4.12.3-pyha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/binutils_impl_linux-64-2.43-h4bf12b8_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/bleach-6.1.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/blosc-1.21.5-h0f2a231_0.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/brotli-python-1.1.0-py310hf71b8c6_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/brunsli-0.1-h9c3ff4c_0.tar.bz2 - 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.2-heb4867d_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/c-blosc2-2.12.0-hb4ffafa_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/linux-64/cairo-1.18.0-h3faef2a_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2024.8.30-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/cffi-1.17.1-py310h8deb56e_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/charls-2.4.2-h59595ed_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.4.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.1.6-unix_pyh707e725_0.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/configparser-7.1.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/coverage-7.6.3-py310h89163eb_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/dav1d-1.2.1-hd590300_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/debugpy-1.8.7-py310hf71b8c6_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/coverage-7.6.4-py310h89163eb_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/debugpy-1.8.8-py310hf71b8c6_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/defusedxml-0.7.1-pyhd8ed1ab_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/docutils-0.21.2-pyhd8ed1ab_0.conda @@ -68,9 +78,11 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/furo-2024.8.6-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/future-1.0.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/gcc_impl_linux-64-14.2.0-h6b349bd_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/gflags-2.2.2-h5888daf_1005.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/giflib-5.2.2-hd590300_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/glog-0.7.1-hbabe93e_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/grpcio-1.56.2-py310h1b8f574_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/grpcio-1.67.1-py310h1a6248f_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/h11-0.14.0-pyhd8ed1ab_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/h2-4.1.0-pyhd8ed1ab_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/linux-64/harfbuzz-8.5.0-hfac3d4d_0.conda @@ -78,8 +90,6 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/hyperframe-6.0.1-pyhd8ed1ab_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/linux-64/icu-73.2-h59595ed_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.10-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/imagecodecs-2023.9.18-py310h3a85d3a_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/imageio-2.36.0-pyh12aca89_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/imagesize-1.4.1-pyhd8ed1ab_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.5.0-pyha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/importlib_metadata-8.5.0-hd8ed1ab_0.conda @@ -107,26 +117,29 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/jupyterlab_server-2.27.3-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jupyterlab_widgets-3.0.13-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jupytext-1.15.0-pyhcff175f_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/jxrlib-1.1-hd590300_3.conda - conda: https://conda.anaconda.org/conda-forge/noarch/kernel-headers_linux-64-3.10.0-he073ed8_17.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/krb5-1.21.3-h659f571_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/lazy-loader-0.4-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/lazy_loader-0.4-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/lcms2-2.15-h7f713cb_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.43-h712a8e2_1.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-20230125.3-cxx17_h59595ed_0.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/libavif16-1.1.1-h104a339_1.conda + - 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/libarrow-16.1.0-h95b9e66_38_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-acero-16.1.0-h5888daf_38_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-dataset-16.1.0-h5888daf_38_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-substrait-16.1.0-h5c8f2c3_38_cpu.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libblas-3.9.0-24_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-24_linux64_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libcrc32c-1.1.2-h9c3ff4c_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/linux-64/libcups-2.3.3-h4637d8d_4.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.19-hd590300_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/libevent-2.1.12-hf998b51_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.6.3-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 @@ -137,30 +150,38 @@ 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.56.2-h3905398_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgoogle-cloud-2.30.0-h804f50b_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgoogle-cloud-storage-2.30.0-h0121fbd_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgrpc-1.67.1-hc2c308b_0.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-2.1.5.1-hd590300_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/liblapack-3.9.0-24_linux64_openblas.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.27-pthreads_hac2b453_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libparquet-16.1.0-h6bd9018_38_cpu.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-4.23.3-hd1fb520_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libprotobuf-5.28.2-h5b01275_0.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/libsanitizer-14.2.0-h2a3dede_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.46.1-hadc24fc_0.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/linux-64/libstdcxx-ng-14.2.0-h4852527_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libthrift-0.21.0-h0e7cc3e_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libtiff-4.6.0-h29866fb_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libutf8proc-2.8.0-h166bdaf_0.tar.bz2 - 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/libuv-1.44.2-hd590300_1.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/libwebp-base-1.3.2-hd590300_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libxcb-1.15-h0b41bf4_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.12.7-h4c95cb1_3.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/libzopfli-1.0.3-h9c3ff4c_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/linux-64/lz4-c-1.9.4-hcb278e6_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/markupsafe-3.0.1-py310h89163eb_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/markupsafe-3.0.2-py310h89163eb_0.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.2.3-py310h75e40e8_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/mdit-py-plugins-0.4.2-pyhd8ed1ab_0.conda @@ -168,7 +189,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/minio-7.1.17-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/minio-server-2023.09.23.03.47.50-hbcca054_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/mistune-3.0.2-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/mypy-1.12.0-py310ha75aee5_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/mypy-1.13.0-py310ha75aee5_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/mypy_extensions-1.0.0-pyha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/myst-parser-4.0.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/narwhals-1.9.4-pyhd8ed1ab_0.conda @@ -180,13 +201,12 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/nbval-0.9.6-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/networkx-3.4.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/nodejs-20.5.1-hb753e55_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/notebook-shim-0.2.4-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/numpy-1.26.4-py310hb13e2d6_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/numpy-2.1.3-py310hd6e36ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/openjdk-20.0.0-hfea2f88_2.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.3.2-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/orc-2.0.2-he039a57_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/outcome-1.3.0.post0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/overrides-7.7.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-24.1-pyhd8ed1ab_0.conda @@ -197,7 +217,6 @@ environments: - 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-10.0.1-py310h29da1c1_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pip-23.2.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pixi-pycharm-0.0.8-unix_1234567_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/pixman-0.43.2-h59595ed_0.conda @@ -207,12 +226,13 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/polars-1.8.2-py310h4a863d9_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/prometheus_client-0.21.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/protobuf-4.23.3-py310hb875b13_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/psutil-5.9.5-py310h2372a71_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/psygnal-0.11.1-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/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/linux-64/pyarrow-16.1.0-py310hb7f781d_6.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pyarrow-core-16.1.0-py310hac404ae_6_cpu.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-2.22-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/pysocks-1.7.1-pyha2e5f31_6.tar.bz2 @@ -226,28 +246,26 @@ 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.10-5_cp310.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pytz-2024.1-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/pywavelets-1.7.0-py310hf462985_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/pyyaml-6.0.2-py310ha75aee5_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/pyzmq-26.2.0-py310h71f11fc_3.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/rav1e-0.6.6-he8a937b_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/re2-2023.03.02-h8c504da_0.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/referencing-0.35.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/requests-2.32.3-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/rfc3339-validator-0.1.4-pyhd8ed1ab_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/rfc3986-validator-0.1.1-pyh9f0ad1d_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/linux-64/rpds-py-0.20.0-py310h505e2c1_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/rpds-py-0.21.0-py310h505e2c1_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/ruff-0.6.9-py310h624018c_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/rust-1.80.1-h0a17960_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/rust-std-x86_64-unknown-linux-gnu-1.80.1-h2c6d0dc_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/scikit-image-0.24.0-py310h0cd1892_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/scipy-1.14.1-py310ha3fb0e1_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/s2n-1.5.6-h0e56266_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/scipy-1.14.1-py310hfcf56fc_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/selenium-4.11.2-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/selenium-manager-4.11.0-he8a937b_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/send2trash-1.8.3-pyh0d859eb_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-75.1.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/linux-64/snappy-1.1.10-hdb0a2a9_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/snappy-1.2.1-ha2e4443_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/sniffio-1.3.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/snowballstemmer-2.2.0-pyhd8ed1ab_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/sortedcontainers-2.4.0-pyhd8ed1ab_0.tar.bz2 @@ -262,12 +280,10 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-qthelp-2.0.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-serializinghtml-1.1.10-pyhd8ed1ab_0.conda - 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/svt-av1-2.2.1-h5888daf_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/sysroot_linux-64-2.17-h4a8ded7_17.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/taplo-0.9.3-h53e704d_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tenacity-8.2.3-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/terminado-0.18.1-pyh0d859eb_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/tifffile-2024.9.20-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tinycss2-1.3.0-pyhd8ed1ab_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/toml-0.10.2-pyhd8ed1ab_0.tar.bz2 @@ -318,19 +334,21 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/yaml-0.2.5-h7f98852_2.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/yarn-3.6.1-h31011fe_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/zeromq-4.3.5-h3b0a872_6.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/zfp-1.0.1-h5888daf_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.20.2-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/zlib-ng-2.0.7-h0b41bf4_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/zstandard-0.23.0-py310ha39cb0e_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.6-ha6fb4c9_0.conda - - pypi: https://files.pythonhosted.org/packages/83/b7/77b5a755560329ebe12b16a7a15074fb003685e1cbcfef8dcab0a05fdd58/pyarrow-16.0.0-cp310-cp310-manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/4e/e7/26045404a30c8a200e960fb54fbaf4b73d12e58cd28e03b306b084253f4f/imageio-2.36.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/83/60/d497a310bde3f01cb805196ac61b7ad6dc5dcf8dce66634dc34364b20b4f/lazy_loader-0.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b9/54/dd730b32ea14ea797530a4479b2ed46a6fb250f682a9cfb997e968bf0261/networkx-3.4.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/41/c3/94f33af0762ed76b5a237c5797e088aa57f2b7fa8ee7932d399087be66a8/pillow-11.0.0-cp310-cp310-manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/40/2e/8b39cd2c347490dbe10adf21fd50bbddb1dada5bb0512c3a39371285eb62/scikit_image-0.24.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/50/0a/435d5d7ec64d1c8b422ac9ebe42d2f3b2ac0b3f8a56f5c04dd0f3b7ba83c/tifffile-2024.9.20-py3-none-any.whl osx-64: - conda: https://conda.anaconda.org/conda-forge/noarch/alabaster-0.7.16-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/altair-5.4.1-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/anyio-4.6.2.post1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/anywidget-0.9.13-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/aom-3.9.1-hf036a51_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/appnope-0.1.4-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/argon2-cffi-23.1.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/argon2-cffi-bindings-21.2.0-py310h837254d_5.conda @@ -338,31 +356,42 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/asttokens-2.4.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/async-lru-2.0.4-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/attrs-24.2.0-pyh71513ae_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/aws-c-auth-0.8.0-hd72fed8_5.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/aws-c-cal-0.8.0-h814e318_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/aws-c-common-0.10.0-ha44c9a9_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/aws-c-compression-0.3.0-h814e318_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/aws-c-event-stream-0.5.0-h533bc8e_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/aws-c-http-0.9.0-h9fe673a_4.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/aws-c-io-0.15.0-hc38bfe9_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/aws-c-mqtt-0.11.0-h104da76_4.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/aws-c-s3-0.7.0-h851ab20_6.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/aws-c-sdkutils-0.2.0-h814e318_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/aws-checksums-0.2.0-h814e318_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/aws-crt-cpp-0.29.1-h44d7a32_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/aws-sdk-cpp-1.11.407-h50b115f_8.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/azure-core-cpp-1.14.0-h9a36307_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/azure-identity-cpp-1.10.0-ha4e2ba9_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/azure-storage-blobs-cpp-12.13.0-h3d2f5f1_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/azure-storage-common-cpp-12.8.0-h1ccc5ac_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/azure-storage-files-datalake-cpp-12.12.0-h86941f0_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/babel-2.14.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/beautifulsoup4-4.12.3-pyha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/bleach-6.1.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/blosc-1.21.5-heccf04b_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/brotli-1.1.0-h00291cd_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/brotli-bin-1.1.0-h00291cd_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/brotli-python-1.1.0-py310h53e7c6a_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/brunsli-0.1-h046ec9c_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/osx-64/bzip2-1.0.8-hfdf4475_7.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/c-ares-1.34.2-h32b1619_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/c-blosc2-2.14.3-h0ae8482_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/ca-certificates-2024.8.30-h8857fd0_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/certifi-2024.8.30-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/cffi-1.17.1-py310hfce808e_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/charls-2.4.2-he965462_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.4.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.1.6-unix_pyh707e725_0.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/configparser-7.1.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/coverage-7.6.3-py310h72eadd2_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/dav1d-1.2.1-h0dc2134_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/debugpy-1.8.7-py310h53e7c6a_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/coverage-7.6.4-py310h72eadd2_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/debugpy-1.8.8-py310h6954a95_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/defusedxml-0.7.1-pyhd8ed1ab_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/docutils-0.21.2-pyhd8ed1ab_0.conda @@ -371,19 +400,17 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/executing-2.1.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/flaky-3.8.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/fqdn-1.5.1-pyhd8ed1ab_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/osx-64/freetype-2.12.1-h60636b9_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/furo-2024.8.6-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/future-1.0.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/giflib-5.2.2-h10d778d_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/grpcio-1.56.2-py310h0d4bf3c_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/gflags-2.2.2-hac325c4_1005.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/glog-0.7.1-h2790a97_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/grpcio-1.67.1-py310h8ec686d_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/h11-0.14.0-pyhd8ed1ab_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/h2-4.1.0-pyhd8ed1ab_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/hpack-4.0.0-pyh9f0ad1d_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/hyperframe-6.0.1-pyhd8ed1ab_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/osx-64/icu-73.2-hf5e326d_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.10-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/imagecodecs-2024.1.1-py310h89a1481_3.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/imageio-2.36.0-pyh12aca89_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/imagesize-1.4.1-pyhd8ed1ab_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.5.0-pyha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/importlib_metadata-8.5.0-hd8ed1ab_0.conda @@ -411,46 +438,48 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/jupyterlab_server-2.27.3-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jupyterlab_widgets-3.0.13-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jupytext-1.15.0-pyhcff175f_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/jxrlib-1.1-h10d778d_3.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/krb5-1.21.3-h37d8d59_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/lazy-loader-0.4-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/lazy_loader-0.4-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/lcms2-2.16-ha2f27b4_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/lerc-4.0.0-hb486fe8_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/osx-64/libabseil-20230125.3-cxx17_h000cb23_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/libaec-1.1.3-h73e2aa4_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/libavif16-1.1.1-ha49a9e2_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libabseil-20240722.0-cxx17_hac325c4_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libarrow-16.1.0-he6cdb6e_38_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libarrow-acero-16.1.0-h240833e_38_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libarrow-dataset-16.1.0-h240833e_38_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libarrow-substrait-16.1.0-h5c0c8cd_38_cpu.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/libblas-3.9.0-22_osx64_openblas.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/libbrotlicommon-1.1.0-h00291cd_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/libbrotlidec-1.1.0-h00291cd_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/libbrotlienc-1.1.0-h00291cd_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/libcblas-3.9.0-22_osx64_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libcrc32c-1.1.2-he49afe7_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/osx-64/libcurl-8.10.1-h58e7537_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/libcxx-19.1.2-hf95d169_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/libdeflate-1.20-h49d49c5_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/libedit-3.1.20191231-h0678c8f_2.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/osx-64/libev-4.33-h10d778d_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libevent-2.1.12-ha90c15b_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/libffi-3.4.2-h0d85af4_5.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/osx-64/libgfortran-5.0.0-13_2_0_h97931a8_3.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/libgfortran5-13.2.0-h2873a65_3.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/libgrpc-1.56.2-he6801ca_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/libhwy-1.1.0-h7728843_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/libjpeg-turbo-3.0.0-h0dc2134_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/libjxl-0.10.3-hfb90b89_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libgoogle-cloud-2.30.0-hd00c612_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libgoogle-cloud-storage-2.30.0-h3f2b517_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libgrpc-1.67.1-he6e0b18_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libiconv-1.17-hd75f5a5_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/liblapack-3.9.0-22_osx64_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libnghttp2-1.64.0-hc7306c3_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/libopenblas-0.3.27-openmp_h8869122_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/libpng-1.6.44-h4b8f8c9_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/libprotobuf-4.23.3-h5feb325_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libparquet-16.1.0-hc957f30_38_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libprotobuf-5.28.2-h8b30cf6_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libre2-11-2024.07.02-hd530cb8_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/libsodium-1.0.20-hfdf4475_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/libsqlite-3.46.1-h4b8f8c9_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/libtiff-4.6.0-h129831d_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libssh2-1.11.0-hd019ec5_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libthrift-0.21.0-h75589b3_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libutf8proc-2.8.0-hb7f2c08_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/osx-64/libuv-1.44.2-h0dc2134_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/libwebp-base-1.4.0-h10d778d_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/libxcb-1.17.0-hf1f96e2_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libxml2-2.12.7-hc603aa4_3.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/libzlib-1.3.1-hd23fc13_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/libzopfli-1.0.3-h046ec9c_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/osx-64/llvm-openmp-19.1.2-hf78d878_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/lz4-c-1.9.4-hf0c8a7f_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/osx-64/markupsafe-3.0.1-py310h618ceed_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/markupsafe-3.0.2-py310h72eadd2_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/matplotlib-inline-0.1.7-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/maturin-1.2.3-py310hcdf1ef2_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/mdit-py-plugins-0.4.2-pyhd8ed1ab_0.conda @@ -458,7 +487,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/minio-7.1.17-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/minio-server-2023.09.23.03.47.50-h8857fd0_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/mistune-3.0.2-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/mypy-1.12.0-py310hb9d19b6_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/mypy-1.13.0-py310hb9d19b6_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/mypy_extensions-1.0.0-pyha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/myst-parser-4.0.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/narwhals-1.9.4-pyhd8ed1ab_0.conda @@ -470,13 +499,12 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/nbval-0.9.6-pyh9f0ad1d_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/osx-64/ncurses-6.5-hf036a51_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/networkx-3.4.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/nodejs-20.5.1-h119ffd7_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/notebook-shim-0.2.4-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/numpy-1.26.4-py310h4bfa8fc_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/numpy-2.1.3-py310hdf3e1fd_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/openjdk-20.0.0-h7d26f99_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/openjpeg-2.5.2-h7310d3a_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/openssl-3.3.2-hd23fc13_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/orc-2.0.2-hb8ce1e1_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/outcome-1.3.0.post0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/overrides-7.7.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-24.1-pyhd8ed1ab_0.conda @@ -486,7 +514,6 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/parso-0.8.4-pyhd8ed1ab_0.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/osx-64/pillow-10.4.0-py310h4e5c94f_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pip-23.2.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pixi-pycharm-0.0.8-unix_1234567_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pkgutil-resolve-name-1.3.10-pyhd8ed1ab_1.conda @@ -495,12 +522,12 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-64/polars-1.8.2-py310h5ef5ada_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/prometheus_client-0.21.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/osx-64/protobuf-4.23.3-py310h4e8a696_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/psutil-5.9.5-py310h6729b98_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/psygnal-0.11.1-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/pthread-stubs-0.4-h00291cd_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/osx-64/pyarrow-16.1.0-py310h58fd45c_6.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/pyarrow-core-16.1.0-py310h86202ae_6_cpu.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-2.22-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/osx-64/pyobjc-core-10.3.1-py310h1c7075f_1.conda @@ -516,28 +543,25 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/python-tzdata-2024.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/python_abi-3.10-5_cp310.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pytz-2024.1-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/pywavelets-1.7.0-py310hcda71e8_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/pyyaml-6.0.2-py310h837254d_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/pyzmq-26.2.0-py310h0c870a2_3.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/rav1e-0.6.6-h7205ca4_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/re2-2023.03.02-h096449b_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/re2-2024.07.02-h2fb0a26_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/readline-8.2-h9e318b2_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/referencing-0.35.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/requests-2.32.3-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/rfc3339-validator-0.1.4-pyhd8ed1ab_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/rfc3986-validator-0.1.1-pyh9f0ad1d_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/osx-64/rpds-py-0.20.0-py310h4bd000d_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/rpds-py-0.21.0-py310h98870a7_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/ruff-0.6.9-py310h4f26fa7_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/rust-1.80.1-h6c54e5d_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/rust-std-x86_64-apple-darwin-1.80.1-h38e4360_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/scikit-image-0.24.0-py310hbf2a7f0_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/scipy-1.14.1-py310h59907b9_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/scipy-1.14.1-py310h9ad1863_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/selenium-4.11.2-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/selenium-manager-4.11.0-h7205ca4_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/send2trash-1.8.3-pyh31c8845_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-75.1.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/osx-64/snappy-1.1.10-h6dc393e_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/snappy-1.2.1-he1e6707_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/sniffio-1.3.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/snowballstemmer-2.2.0-pyhd8ed1ab_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/sortedcontainers-2.4.0-pyhd8ed1ab_0.tar.bz2 @@ -552,11 +576,9 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-qthelp-2.0.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-serializinghtml-1.1.10-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/stack_data-0.6.2-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/svt-av1-2.2.1-hac325c4_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/taplo-0.9.3-hf3953a5_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tenacity-8.2.3-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/terminado-0.18.1-pyh31c8845_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/tifffile-2024.9.20-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tinycss2-1.3.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/tk-8.6.13-h1abcd95_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/toml-0.10.2-pyhd8ed1ab_0.tar.bz2 @@ -585,25 +607,25 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/widgetsnbextension-4.0.13-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/wrapt-1.16.0-py310h837254d_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/wsproto-1.2.0-pyhd8ed1ab_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/osx-64/xorg-libxau-1.0.11-h00291cd_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/xorg-libxdmcp-1.1.5-h00291cd_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/xz-5.2.6-h775f41a_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/osx-64/yaml-0.2.5-h0d85af4_2.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/yarn-3.6.1-h31011fe_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/zeromq-4.3.5-he4ceba3_6.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/zfp-1.0.1-h469392a_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.20.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/zlib-1.3.1-hd23fc13_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/zlib-ng-2.0.7-hb7f2c08_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/zstandard-0.23.0-py310h41d873f_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/zstd-1.5.6-h915ae27_0.conda - - pypi: https://files.pythonhosted.org/packages/fd/5c/a4349f50b36382d3f40b304b91a3587ac433baceed9bec2434d663393a51/pyarrow-16.0.0-cp310-cp310-macosx_10_15_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/4e/e7/26045404a30c8a200e960fb54fbaf4b73d12e58cd28e03b306b084253f4f/imageio-2.36.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/83/60/d497a310bde3f01cb805196ac61b7ad6dc5dcf8dce66634dc34364b20b4f/lazy_loader-0.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b9/54/dd730b32ea14ea797530a4479b2ed46a6fb250f682a9cfb997e968bf0261/networkx-3.4.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/98/fb/a6ce6836bd7fd93fbf9144bf54789e02babc27403b50a9e1583ee877d6da/pillow-11.0.0-cp310-cp310-macosx_10_10_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/b7/82/d4eaa6e441f28a783762093a3c74bcc4a67f1c65bf011414ad4ea85187d8/scikit_image-0.24.0-cp310-cp310-macosx_10_9_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/50/0a/435d5d7ec64d1c8b422ac9ebe42d2f3b2ac0b3f8a56f5c04dd0f3b7ba83c/tifffile-2024.9.20-py3-none-any.whl osx-arm64: - conda: https://conda.anaconda.org/conda-forge/noarch/alabaster-0.7.16-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/altair-5.4.1-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/anyio-4.6.2.post1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/anywidget-0.9.13-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aom-3.5.0-h7ea286d_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/appnope-0.1.4-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/argon2-cffi-23.1.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/argon2-cffi-bindings-21.2.0-py310h493c2e1_5.conda @@ -611,33 +633,38 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/asttokens-2.4.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/async-lru-2.0.4-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/attrs-24.2.0-pyh71513ae_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-auth-0.7.22-h3776fb2_6.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-cal-0.6.15-h94d0942_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-common-0.9.23-h99b78c6_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-compression-0.2.18-h94d0942_7.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-event-stream-0.4.2-he43e89f_14.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-http-0.8.2-h4f006d9_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-io-0.14.9-ha70251c_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-mqtt-0.10.4-h80c1ce3_7.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-s3-0.5.10-h6cb31ac_4.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-sdkutils-0.1.16-h94d0942_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-checksums-0.1.18-h94d0942_7.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-crt-cpp-0.26.12-h431af13_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-sdk-cpp-1.11.329-h617e15d_6.conda - conda: https://conda.anaconda.org/conda-forge/noarch/babel-2.14.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/beautifulsoup4-4.12.3-pyha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/bleach-6.1.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/blosc-1.21.5-hc338f07_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/brotli-1.0.9-h1a8c8d9_9.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/brotli-bin-1.0.9-h1a8c8d9_9.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/brotli-python-1.0.9-py310h0f1eb42_9.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/brunsli-0.1-h9f76cd9_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/brotli-python-1.1.0-py310hb4ad77e_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/bzip2-1.0.8-h99b78c6_7.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/c-ares-1.34.2-h7ab814d_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/c-blosc2-2.12.0-ha57e6be_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ca-certificates-2024.8.30-hf0a4a13_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/osx-arm64/cairo-1.16.0-hc5b65c1_1017.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/cairo-1.16.0-h1e71087_1016.conda - conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2024.8.30-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/cffi-1.17.1-py310h497396d_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/cfitsio-4.2.0-h2f961c4_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/charls-2.4.2-h13dd4ca_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.4.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.1.6-unix_pyh707e725_0.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/configparser-7.1.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/coverage-7.6.3-py310h5799be4_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/dav1d-1.2.1-hb547adb_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/debugpy-1.8.7-py310hb4ad77e_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/coverage-7.6.4-py310h5799be4_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/debugpy-1.8.8-py310h853098b_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/defusedxml-0.7.1-pyhd8ed1ab_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/docutils-0.21.2-pyhd8ed1ab_0.conda @@ -661,20 +688,20 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/gdk-pixbuf-2.42.10-h9bcf4fe_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/gettext-0.22.5-h8414b35_3.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/gettext-tools-0.22.5-h8414b35_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/gflags-2.2.2-hf9b8971_1005.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/giflib-5.2.1-h1a8c8d9_3.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/glib-2.76.4-ha614eb4_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/glib-tools-2.76.4-ha614eb4_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/glog-0.7.1-heb240a5_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/graphite2-1.3.13-hebf3989_1003.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/grpcio-1.56.2-py310h95b248a_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/grpcio-1.62.2-py310hf7687f1_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/h11-0.14.0-pyhd8ed1ab_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/h2-4.1.0-pyhd8ed1ab_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/harfbuzz-8.2.0-hf1a6348_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/harfbuzz-7.3.0-h46e5fef_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/hpack-4.0.0-pyh9f0ad1d_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/hyperframe-6.0.1-pyhd8ed1ab_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/icu-73.2-hc8870d7_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/icu-72.1-he12128b_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.10-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/imagecodecs-2023.1.23-py310hd30fb6a_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/imageio-2.36.0-pyh12aca89_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/imagesize-1.4.1-pyhd8ed1ab_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.5.0-pyha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/importlib_metadata-8.5.0-hd8ed1ab_0.conda @@ -703,27 +730,27 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/jupyterlab_server-2.27.3-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jupyterlab_widgets-3.0.13-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jupytext-1.15.0-pyhcff175f_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/jxrlib-1.1-h93a5062_3.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/krb5-1.21.3-h237132a_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/lazy-loader-0.4-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/lazy_loader-0.4-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lcms2-2.15-h481adae_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lerc-4.0.0-h9a09cb3_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libabseil-20230125.3-cxx17_h13dd4ca_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libaec-1.1.3-hebf3989_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libabseil-20240116.2-cxx17_h00cdb27_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libarrow-16.1.0-h431211a_9_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libarrow-acero-16.1.0-h00cdb27_9_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libarrow-dataset-16.1.0-h00cdb27_9_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libarrow-substrait-16.1.0-hc68f6b8_9_cpu.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libasprintf-0.22.5-h8414b35_3.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libasprintf-devel-0.22.5-h8414b35_3.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libavif-0.11.1-h9f83d30_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libblas-3.9.0-24_osxarm64_openblas.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libbrotlicommon-1.0.9-h1a8c8d9_9.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libbrotlidec-1.0.9-h1a8c8d9_9.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libbrotlienc-1.0.9-h1a8c8d9_9.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libbrotlicommon-1.1.0-hd74edd7_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libbrotlidec-1.1.0-hd74edd7_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libbrotlienc-1.1.0-hd74edd7_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcblas-3.9.0-24_osxarm64_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcrc32c-1.1.2-hbdafb3b_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcurl-8.10.1-h13a7ad3_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-19.1.2-ha82da77_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libdeflate-1.17-h1a8c8d9_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libedit-3.1.20191231-hc8eb9b7_2.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libev-4.33-h93a5062_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libevent-2.1.12-h2757513_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libexpat-2.6.3-hf9b8971_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libffi-3.4.2-h3422bc3_5.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgettextpo-0.22.5-h8414b35_3.conda @@ -731,30 +758,34 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgfortran-5.0.0-13_2_0_hd922786_3.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgfortran5-13.2.0-hf226fd6_3.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libglib-2.76.4-h24e9cb9_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgrpc-1.56.2-h9075ed4_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgoogle-cloud-2.25.0-hfe08963_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgoogle-cloud-storage-2.25.0-h3fa5b87_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgrpc-1.62.2-h9c18a4f_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libiconv-1.17-h0d3ecfb_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libintl-0.22.5-h8414b35_3.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libintl-devel-0.22.5-h8414b35_3.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblapack-3.9.0-24_osxarm64_openblas.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libnghttp2-1.58.0-ha4dd798_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libopenblas-0.3.27-openmp_h517c56d_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libparquet-16.1.0-hcf52c46_9_cpu.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libpng-1.6.39-h76d750c_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libprotobuf-4.23.3-hf32f9b9_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libprotobuf-4.25.3-hc39d83c_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libre2-11-2023.09.01-h7b2c953_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/librsvg-2.56.3-h0db3404_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsodium-1.0.20-h99b78c6_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.46.1-hc14010f_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libssh2-1.11.0-h7a5bd25_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libthrift-0.19.0-h026a170_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libtiff-4.5.0-h5dffbdd_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libutf8proc-2.8.0-h1a8c8d9_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libuv-1.44.2-hb547adb_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libwebp-base-1.4.0-h93a5062_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libxcb-1.13-h9b22ae9_1004.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libxml2-2.12.7-h9a80f22_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libwebp-base-1.2.4-h1a8c8d9_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libxml2-2.11.5-he3bdae6_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libzlib-1.3.1-h8359307_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libzopfli-1.0.3-h9f76cd9_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/llvm-openmp-19.1.2-hb52a8e5_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lz4-c-1.9.4-hb7217d7_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/osx-arm64/markupsafe-3.0.1-py310h6a095d7_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/markupsafe-3.0.2-py310h5799be4_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/matplotlib-inline-0.1.7-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/maturin-1.2.3-py310hdd3b5e7_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/mdit-py-plugins-0.4.2-pyhd8ed1ab_0.conda @@ -762,7 +793,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/minio-7.1.17-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/minio-server-2023.09.23.03.47.50-hf0a4a13_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/mistune-3.0.2-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/mypy-1.12.0-py310hf9df320_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/mypy-1.13.0-py310hf9df320_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/mypy_extensions-1.0.0-pyha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/myst-parser-4.0.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/narwhals-1.9.4-pyhd8ed1ab_0.conda @@ -774,25 +805,23 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/nbval-0.9.6-pyh9f0ad1d_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ncurses-6.5-h7bae524_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/networkx-3.4.1-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/nodejs-20.5.1-h5f47a4d_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/nodejs-20.5.1-ha2ed473_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/notebook-shim-0.2.4-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/numpy-1.26.4-py310hd45542a_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/numpy-2.1.3-py310h530be0a_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/openjdk-20.0.0-hbe7ddab_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/openjpeg-2.5.0-hbc2ba62_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/openssl-3.3.2-h8359307_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/orc-2.0.1-h47ade37_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/outcome-1.3.0.post0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/overrides-7.7.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-24.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pandas-2.2.3-py310hfd37619_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pandoc-3.5-hce30654_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pandocfilters-1.5.0-pyhd8ed1ab_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pango-1.50.14-hcf40dda_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pango-1.50.14-h9f7e0c6_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/parso-0.8.4-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pcre2-10.40-hb34f9b4_0.tar.bz2 - 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/osx-arm64/pillow-9.4.0-py310h5a7539a_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pip-23.2.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pixi-pycharm-0.0.8-unix_1234567_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pixman-0.43.4-hebf3989_0.conda @@ -803,12 +832,12 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/polars-1.8.2-py310hb6ae7db_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/prometheus_client-0.21.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/osx-arm64/protobuf-4.23.3-py310hf4e154e_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/psutil-5.9.5-py310h2aa6e3c_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/psygnal-0.11.1-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pthread-stubs-0.4-hd74edd7_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/osx-arm64/pyarrow-16.1.0-py310h24597f5_4.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pyarrow-core-16.1.0-py310h2e300fa_4_cpu.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-2.22-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/osx-arm64/pyobjc-core-10.3.1-py310hb3dec1a_1.conda @@ -824,27 +853,25 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/python-tzdata-2024.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python_abi-3.10-5_cp310.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pytz-2024.1-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pywavelets-1.7.0-py310h003b70b_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pyyaml-6.0.2-py310h493c2e1_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pyzmq-26.2.0-py310h82ef58e_3.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/re2-2023.03.02-hc5e2d97_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/re2-2023.09.01-h4cba328_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/readline-8.2-h92ec313_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/referencing-0.35.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/requests-2.32.3-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/rfc3339-validator-0.1.4-pyhd8ed1ab_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/rfc3986-validator-0.1.1-pyh9f0ad1d_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/rpds-py-0.20.0-py310h7a930dc_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/rpds-py-0.21.0-py310hde4708a_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ruff-0.6.9-py310he174661_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/rust-1.80.1-h4ff7c5d_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/rust-std-aarch64-apple-darwin-1.80.1-hf6ec828_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/scikit-image-0.24.0-py310h2216879_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/scipy-1.14.1-py310h35b72dc_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/scipy-1.14.1-py310hc05a576_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/selenium-4.11.2-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/selenium-manager-4.11.0-h69fbcac_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/send2trash-1.8.3-pyh31c8845_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-75.1.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/osx-arm64/snappy-1.1.10-hd04f947_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/snappy-1.2.1-hd02b534_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/sniffio-1.3.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/snowballstemmer-2.2.0-pyhd8ed1ab_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/sortedcontainers-2.4.0-pyhd8ed1ab_0.tar.bz2 @@ -862,7 +889,6 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/taplo-0.9.3-hdf53557_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tenacity-8.2.3-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/terminado-0.18.1-pyh31c8845_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/tifffile-2023.8.12-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tinycss2-1.3.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tk-8.6.13-h5083fa2_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/toml-0.10.2-pyhd8ed1ab_0.tar.bz2 @@ -891,54 +917,63 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/widgetsnbextension-4.0.13-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/wrapt-1.16.0-py310h493c2e1_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/wsproto-1.2.0-pyhd8ed1ab_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/xorg-libxau-1.0.11-hd74edd7_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/xorg-libxdmcp-1.1.5-hd74edd7_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/xz-5.2.6-h57fd34a_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/yaml-0.2.5-h3422bc3_2.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/yarn-3.6.1-h31011fe_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zeromq-4.3.5-h9f5b81c_6.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zfp-1.0.1-h1c5d8ea_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.20.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zlib-1.3.1-h8359307_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zlib-ng-2.0.7-h1a8c8d9_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zstandard-0.23.0-py310h2665a74_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zstd-1.5.6-hb46c0d2_0.conda - - pypi: https://files.pythonhosted.org/packages/5b/04/c2a6f3ae840d96a00de2e07d68a3d30591b413b15b4385242e47e2ae0e97/pyarrow-16.0.0-cp310-cp310-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/4e/e7/26045404a30c8a200e960fb54fbaf4b73d12e58cd28e03b306b084253f4f/imageio-2.36.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/83/60/d497a310bde3f01cb805196ac61b7ad6dc5dcf8dce66634dc34364b20b4f/lazy_loader-0.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b9/54/dd730b32ea14ea797530a4479b2ed46a6fb250f682a9cfb997e968bf0261/networkx-3.4.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/6a/1d/1f51e6e912d8ff316bb3935a8cda617c801783e0b998bf7a894e91d3bd4c/pillow-11.0.0-cp310-cp310-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/65/15/1879307aaa2c771aa8ef8f00a171a85033bffc6b2553cfd2657426881452/scikit_image-0.24.0-cp310-cp310-macosx_12_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/50/0a/435d5d7ec64d1c8b422ac9ebe42d2f3b2ac0b3f8a56f5c04dd0f3b7ba83c/tifffile-2024.9.20-py3-none-any.whl win-64: - conda: https://conda.anaconda.org/conda-forge/noarch/alabaster-0.7.16-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/altair-5.4.1-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/anyio-4.6.2.post1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/anywidget-0.9.13-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/aom-3.7.1-h63175ca_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/argon2-cffi-23.1.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/argon2-cffi-bindings-21.2.0-py310ha8f682b_5.conda - conda: https://conda.anaconda.org/conda-forge/noarch/arrow-1.3.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/noarch/async-lru-2.0.4-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/attrs-24.2.0-pyh71513ae_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/aws-c-auth-0.8.0-h5c9daf7_5.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/aws-c-cal-0.8.0-hf66253b_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/aws-c-common-0.10.0-h2466b09_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/aws-c-compression-0.3.0-hf66253b_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/aws-c-event-stream-0.5.0-h100ddae_3.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/aws-c-http-0.9.0-h5e3777a_4.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/aws-c-io-0.15.0-h78a6df4_3.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/aws-c-mqtt-0.11.0-hbba0651_4.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/aws-c-s3-0.7.0-h0e513c4_6.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/aws-c-sdkutils-0.2.0-hf66253b_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/aws-checksums-0.2.0-hf66253b_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/aws-crt-cpp-0.29.1-h20dc212_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/aws-sdk-cpp-1.11.407-hb809a3a_8.conda - conda: https://conda.anaconda.org/conda-forge/noarch/babel-2.14.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/beautifulsoup4-4.12.3-pyha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/bleach-6.1.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/blosc-1.21.5-hdccc3a2_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/brotli-python-1.1.0-py310h9e98ed7_2.conda - conda: https://conda.anaconda.org/conda-forge/win-64/bzip2-1.0.8-h2466b09_7.conda - conda: https://conda.anaconda.org/conda-forge/win-64/c-ares-1.34.2-h2466b09_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/c-blosc2-2.14.3-h183a6f4_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/ca-certificates-2024.8.30-h56e8100_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/certifi-2024.8.30-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/cffi-1.17.1-py310ha8f682b_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/charls-2.4.2-h1537add_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.4.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.1.6-win_pyh7428d3b_0.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/configparser-7.1.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/coverage-7.6.3-py310h38315fa_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/coverage-7.6.4-py310h38315fa_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cpython-3.10.15-py310hd8ed1ab_2.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/dav1d-1.2.1-hcfcfb64_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/debugpy-1.8.7-py310h9e98ed7_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/debugpy-1.8.8-py310h9e98ed7_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/defusedxml-0.7.1-pyhd8ed1ab_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/docutils-0.21.2-pyhd8ed1ab_0.conda @@ -947,18 +982,14 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/executing-2.1.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/flaky-3.8.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/fqdn-1.5.1-pyhd8ed1ab_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/win-64/freetype-2.12.1-hdaf720e_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/furo-2024.8.6-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/future-1.0.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/giflib-5.2.2-h64bf75a_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/grpcio-1.56.2-py310hb84602e_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/grpcio-1.67.1-py310h0288bfe_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/h11-0.14.0-pyhd8ed1ab_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/h2-4.1.0-pyhd8ed1ab_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/hpack-4.0.0-pyh9f0ad1d_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/hyperframe-6.0.1-pyhd8ed1ab_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.10-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/imagecodecs-2024.1.1-py310hda7f504_3.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/imageio-2.36.0-pyh12aca89_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/imagesize-1.4.1-pyhd8ed1ab_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.5.0-pyha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/importlib_metadata-8.5.0-hd8ed1ab_0.conda @@ -987,37 +1018,37 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/jupyterlab_server-2.27.3-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jupyterlab_widgets-3.0.13-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jupytext-1.15.0-pyhcff175f_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/jxrlib-1.1-hcfcfb64_3.conda - conda: https://conda.anaconda.org/conda-forge/win-64/krb5-1.21.3-hdf4eb48_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/lazy-loader-0.4-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/lazy_loader-0.4-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/lcms2-2.16-h67d730c_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/lerc-4.0.0-h63175ca_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/win-64/libabseil-20230125.3-cxx17_h63175ca_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libaec-1.1.3-h63175ca_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libavif-1.0.1-h7a9aacb_3.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libabseil-20240722.0-cxx17_he0c23c2_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libarrow-16.1.0-h25ef0db_38_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libarrow-acero-16.1.0-hac47afa_38_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libarrow-dataset-16.1.0-hac47afa_38_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libarrow-substrait-16.1.0-hcd1cebd_38_cpu.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libblas-3.9.0-24_win64_mkl.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libbrotlicommon-1.1.0-h2466b09_2.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libbrotlidec-1.1.0-h2466b09_2.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libbrotlienc-1.1.0-h2466b09_2.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libcblas-3.9.0-24_win64_mkl.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libdeflate-1.20-hcfcfb64_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libcrc32c-1.1.2-h0e60522_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/win-64/libcurl-8.10.1-h1ee3ff0_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libevent-2.1.12-h3671451_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libffi-3.4.2-h8ffe710_5.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/win-64/libgrpc-1.56.2-hea2d5f7_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libgoogle-cloud-2.30.0-h07d40e7_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libgoogle-cloud-storage-2.30.0-he5eb982_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libgrpc-1.67.1-h7aa3b8a_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libhwloc-2.11.1-default_h8125262_1000.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libiconv-1.17-hcfcfb64_2.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libjpeg-turbo-3.0.0-hcfcfb64_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/liblapack-3.9.0-24_win64_mkl.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libpng-1.6.44-h3ca93ac_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libprotobuf-4.23.3-h1975477_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libparquet-16.1.0-h59f2d37_38_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libprotobuf-5.28.2-hcaed137_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libre2-11-2024.07.02-h4eb7d71_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libsodium-1.0.20-hc70643c_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libsqlite-3.46.1-h2466b09_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libtiff-4.6.0-hddb2be6_3.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libwebp-base-1.4.0-hcfcfb64_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libxcb-1.16-h013a479_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libssh2-1.11.0-h7dfc565_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libthrift-0.21.0-hbe90ef8_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libutf8proc-2.8.0-h82a8f57_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/win-64/libxml2-2.12.7-h0f24e4e_4.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libzlib-1.3.1-h2466b09_2.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libzopfli-1.0.3-h0e60522_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/win-64/lz4-c-1.9.4-hcfcfb64_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/m2w64-gcc-libgfortran-5.3.0-6.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/win-64/m2w64-gcc-libs-5.3.0-7.tar.bz2 @@ -1025,7 +1056,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/win-64/m2w64-gmp-6.1.0-2.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/win-64/m2w64-libwinpthread-git-5.0.0.4634.697f757-2.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-3.0.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/markupsafe-3.0.1-py310h38315fa_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/markupsafe-3.0.2-py310h38315fa_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/matplotlib-inline-0.1.7-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/maturin-1.2.3-py310he2c049f_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/mdit-py-plugins-0.4.2-pyhd8ed1ab_0.conda @@ -1035,7 +1066,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/mistune-3.0.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/mkl-2024.1.0-h66d3029_694.conda - conda: https://conda.anaconda.org/conda-forge/win-64/msys2-conda-epoch-20160418-1.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/win-64/mypy-1.12.0-py310ha8f682b_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/mypy-1.13.0-py310ha8f682b_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/mypy_extensions-1.0.0-pyha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/myst-parser-4.0.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/narwhals-1.9.4-pyhd8ed1ab_0.conda @@ -1046,13 +1077,12 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/nbformat-5.10.4-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/nbval-0.9.6-pyh9f0ad1d_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/nest-asyncio-1.6.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/networkx-3.4.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/nodejs-20.5.1-h57928b3_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/notebook-shim-0.2.4-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/numpy-1.26.4-py310hf667824_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/numpy-2.1.3-py310h1ec8c79_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/openjdk-20.0.0-h57928b3_2.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/openjpeg-2.5.2-h3d672ee_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/openssl-3.3.2-h2466b09_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/orc-2.0.2-h34659fe_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/outcome-1.3.0.post0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/overrides-7.7.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-24.1-pyhd8ed1ab_0.conda @@ -1061,7 +1091,6 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/pandocfilters-1.5.0-pyhd8ed1ab_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/parso-0.8.4-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/win-64/pillow-10.4.0-py310h3e38d90_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pip-23.2.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pixi-pycharm-0.0.8-win_1234567_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pkgutil-resolve-name-1.3.10-pyhd8ed1ab_1.conda @@ -1070,12 +1099,12 @@ environments: - conda: https://conda.anaconda.org/conda-forge/win-64/polars-1.8.2-py310hc41e00b_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/prometheus_client-0.21.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/win-64/protobuf-4.23.3-py310ha3d488f_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/psutil-5.9.5-py310h8d17308_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/psygnal-0.11.1-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/pthread-stubs-0.4-hcd874cb_1001.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/win-64/pthreads-win32-2.9.1-h2466b09_4.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pure_eval-0.2.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/pyarrow-16.1.0-py310h05ea346_6.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/pyarrow-core-16.1.0-py310h399dd74_6_cpu.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-2.22-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/pysocks-1.7.1-pyh0701188_6.tar.bz2 @@ -1089,29 +1118,26 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/python-tzdata-2024.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/python_abi-3.10-5_cp310.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pytz-2024.1-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/pywavelets-1.7.0-py310hb0944cc_2.conda - conda: https://conda.anaconda.org/conda-forge/win-64/pywin32-307-py310h9e98ed7_3.conda - conda: https://conda.anaconda.org/conda-forge/win-64/pywinpty-2.0.14-py310h9e98ed7_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/pyyaml-6.0.2-py310ha8f682b_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/pyzmq-26.2.0-py310h656833d_3.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/rav1e-0.6.6-h975169c_2.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/re2-2023.03.02-hd4eee63_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/re2-2024.07.02-hd3b24a8_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/referencing-0.35.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/requests-2.32.3-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/rfc3339-validator-0.1.4-pyhd8ed1ab_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/rfc3986-validator-0.1.1-pyh9f0ad1d_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/win-64/rpds-py-0.20.0-py310hc226416_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/rpds-py-0.21.0-py310hc226416_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/ruff-0.6.9-py310h11b6ba5_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/rust-1.80.1-hf8d6059_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/rust-std-x86_64-pc-windows-msvc-1.80.1-h17fc481_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/scikit-image-0.24.0-py310hb4db72f_2.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/scipy-1.14.1-py310h46043a1_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/scipy-1.14.1-py310hbd0dde3_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/selenium-4.11.2-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/selenium-manager-4.11.0-h975169c_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/send2trash-1.8.3-pyh5737063_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-75.1.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/win-64/snappy-1.1.10-hfb803bf_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/snappy-1.2.1-h23299a8_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/sniffio-1.3.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/snowballstemmer-2.2.0-pyhd8ed1ab_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/sortedcontainers-2.4.0-pyhd8ed1ab_0.tar.bz2 @@ -1126,13 +1152,11 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-qthelp-2.0.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-serializinghtml-1.1.10-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/stack_data-0.6.2-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/svt-av1-1.7.0-h63175ca_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/symlink-exe-runtime-1.0-hcfcfb64_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/win-64/taplo-0.9.3-ha073cba_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/tbb-2021.13.0-hc790b64_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tenacity-8.2.3-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/terminado-0.18.1-pyh5737063_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/tifffile-2024.9.20-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tinycss2-1.3.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/tk-8.6.13-h5226925_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/toml-0.10.2-pyhd8ed1ab_0.tar.bz2 @@ -1167,18 +1191,19 @@ environments: - conda: https://conda.anaconda.org/conda-forge/win-64/winpty-0.4.3-4.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/win-64/wrapt-1.16.0-py310ha8f682b_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/wsproto-1.2.0-pyhd8ed1ab_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/win-64/xorg-libxau-1.0.11-hcd874cb_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/xorg-libxdmcp-1.1.3-hcd874cb_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/win-64/xz-5.2.6-h8d14728_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/win-64/yaml-0.2.5-h8ffe710_2.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/yarn-3.6.1-h5737063_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/zeromq-4.3.5-ha9f60a1_6.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/zfp-1.0.1-he0c23c2_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.20.2-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/zlib-ng-2.0.7-hcfcfb64_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/zstandard-0.23.0-py310he5e10e1_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/zstd-1.5.6-h0ea2cb4_0.conda - - pypi: https://files.pythonhosted.org/packages/95/7a/36243efd5a9c1a0ac1146fa69044f4676eac13a162c8fb388869262330fe/pyarrow-16.0.0-cp310-cp310-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/4e/e7/26045404a30c8a200e960fb54fbaf4b73d12e58cd28e03b306b084253f4f/imageio-2.36.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/83/60/d497a310bde3f01cb805196ac61b7ad6dc5dcf8dce66634dc34364b20b4f/lazy_loader-0.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b9/54/dd730b32ea14ea797530a4479b2ed46a6fb250f682a9cfb997e968bf0261/networkx-3.4.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d5/4e/78f7c5202ea2a772a5ab05069c1b82503e6353cd79c7e474d4945f4b82c3/pillow-11.0.0-cp310-cp310-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/99/89/3fcd68d034db5d29c974e964d03deec9d0fbf9410ff0a0b95efff70947f6/scikit_image-0.24.0-cp310-cp310-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/50/0a/435d5d7ec64d1c8b422ac9ebe42d2f3b2ac0b3f8a56f5c04dd0f3b7ba83c/tifffile-2024.9.20-py3-none-any.whl packages: - kind: conda name: _libgcc_mutex @@ -1312,70 +1337,6 @@ packages: - pkg:pypi/anywidget?source=hash-mapping size: 66391 timestamp: 1719028676289 -- kind: conda - name: aom - version: 3.5.0 - build: h7ea286d_0 - subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/aom-3.5.0-h7ea286d_0.tar.bz2 - sha256: 3a238c39da0bb29da396ae9f88655a1a6b05926055539ecc29cef9533671d71c - md5: afb32d2a714ef2c3268508fdc85fc7c4 - depends: - - libcxx >=14.0.4 - license: BSD-2-Clause - license_family: BSD - purls: [] - size: 2485267 - timestamp: 1663808577638 -- kind: conda - name: aom - version: 3.7.1 - build: h63175ca_0 - subdir: win-64 - url: https://conda.anaconda.org/conda-forge/win-64/aom-3.7.1-h63175ca_0.conda - sha256: aa317fd3271b4fabbfe3b800cc0d55a9bbfb9b5aa7f91bfb08c86f2da08d2729 - md5: 1b52cb3995f780a5c0a52fc1bb81b337 - depends: - - ucrt >=10.0.20348.0 - - vc >=14.2,<15 - - vc14_runtime >=14.29.30139 - license: BSD-2-Clause - license_family: BSD - purls: [] - size: 1955945 - timestamp: 1700530921759 -- kind: conda - name: aom - version: 3.9.1 - build: hac33072_0 - subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/aom-3.9.1-hac33072_0.conda - sha256: b08ef033817b5f9f76ce62dfcac7694e7b6b4006420372de22494503decac855 - md5: 346722a0be40f6edc53f12640d301338 - depends: - - libgcc-ng >=12 - - libstdcxx-ng >=12 - license: BSD-2-Clause - license_family: BSD - purls: [] - size: 2706396 - timestamp: 1718551242397 -- kind: conda - name: aom - version: 3.9.1 - build: hf036a51_0 - subdir: osx-64 - url: https://conda.anaconda.org/conda-forge/osx-64/aom-3.9.1-hf036a51_0.conda - sha256: 3032f2f55d6eceb10d53217c2a7f43e1eac83603d91e21ce502e8179e63a75f5 - md5: 3f17bc32cb7fcb2b4bf3d8d37f656eb8 - depends: - - __osx >=10.13 - - libcxx >=16 - license: BSD-2-Clause - license_family: BSD - purls: [] - size: 2749186 - timestamp: 1718551450314 - kind: conda name: appnope version: 0.1.4 @@ -1571,292 +1532,1326 @@ packages: size: 56048 timestamp: 1722977241383 - kind: conda - name: babel - version: 2.14.0 - build: pyhd8ed1ab_0 - subdir: noarch - noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/babel-2.14.0-pyhd8ed1ab_0.conda - sha256: 8584e3da58e92b72641c89ff9b98c51f0d5dbe76e527867804cbdf03ac91d8e6 - md5: 9669586875baeced8fc30c0826c3270e + name: aws-c-auth + version: 0.7.22 + build: h3776fb2_6 + build_number: 6 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-auth-0.7.22-h3776fb2_6.conda + sha256: f5782cdbfb47e7d8a69a97eab6a7494f0c6e15b98be847021f1044c9fd450ffc + md5: a4e9f4127d7d7ace991b8521f09c82a1 depends: - - python >=3.7 - - pytz - - setuptools - license: BSD-3-Clause - license_family: BSD - purls: - - pkg:pypi/babel?source=hash-mapping - size: 7609750 - timestamp: 1702422720584 + - __osx >=11.0 + - aws-c-cal >=0.6.15,<0.6.16.0a0 + - aws-c-common >=0.9.23,<0.9.24.0a0 + - aws-c-http >=0.8.2,<0.8.3.0a0 + - aws-c-io >=0.14.9,<0.14.10.0a0 + - aws-c-sdkutils >=0.1.16,<0.1.17.0a0 + license: Apache-2.0 + license_family: Apache + purls: [] + size: 91099 + timestamp: 1719009711146 - kind: conda - name: beautifulsoup4 - version: 4.12.3 - build: pyha770c72_0 - subdir: noarch - noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/beautifulsoup4-4.12.3-pyha770c72_0.conda - sha256: 7b05b2d0669029326c623b9df7a29fa49d1982a9e7e31b2fea34b4c9a4a72317 - md5: 332493000404d8411859539a5a630865 + name: aws-c-auth + version: 0.8.0 + build: h5c9daf7_5 + build_number: 5 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/aws-c-auth-0.8.0-h5c9daf7_5.conda + sha256: bbb9cb891919b31419421dd97fa156d81cbcb9aa9697f59a633cdcf15362e988 + md5: 2d7809b68a0723cb42637fb0c2139e18 + depends: + - aws-c-cal >=0.8.0,<0.8.1.0a0 + - aws-c-common >=0.10.0,<0.10.1.0a0 + - aws-c-http >=0.9.0,<0.9.1.0a0 + - aws-c-io >=0.15.0,<0.15.1.0a0 + - aws-c-sdkutils >=0.2.0,<0.2.1.0a0 + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + license: Apache-2.0 + license_family: Apache + purls: [] + size: 102563 + timestamp: 1730835141790 +- kind: conda + name: aws-c-auth + version: 0.8.0 + build: h7205bc0_5 + build_number: 5 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/aws-c-auth-0.8.0-h7205bc0_5.conda + sha256: 2766c542d8b6d004ef254828b20e0b909db46da1897f0d7c2b2cd626f5433293 + md5: 0296fd25b7060e8bf16fe2371eb81da1 depends: - - python >=3.6 - - soupsieve >=1.2 - license: MIT - license_family: MIT - purls: - - pkg:pypi/beautifulsoup4?source=hash-mapping - size: 118200 - timestamp: 1705564819537 + - __glibc >=2.17,<3.0.a0 + - aws-c-cal >=0.8.0,<0.8.1.0a0 + - aws-c-common >=0.10.0,<0.10.1.0a0 + - aws-c-http >=0.9.0,<0.9.1.0a0 + - aws-c-io >=0.15.0,<0.15.1.0a0 + - aws-c-sdkutils >=0.2.0,<0.2.1.0a0 + - libgcc >=13 + license: Apache-2.0 + license_family: Apache + purls: [] + size: 107640 + timestamp: 1730834736484 - kind: conda - name: binutils_impl_linux-64 - version: '2.43' - build: h4bf12b8_1 + name: aws-c-auth + version: 0.8.0 + build: hd72fed8_5 + build_number: 5 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/aws-c-auth-0.8.0-hd72fed8_5.conda + sha256: ee6a1e1ededbedc5f361395f629d78f071316bf57761d72ce3ff8de8dd1f2f92 + md5: cfda7e961f4248ab9a5a0f058166a25d + depends: + - __osx >=10.13 + - aws-c-cal >=0.8.0,<0.8.1.0a0 + - aws-c-common >=0.10.0,<0.10.1.0a0 + - aws-c-http >=0.9.0,<0.9.1.0a0 + - aws-c-io >=0.15.0,<0.15.1.0a0 + - aws-c-sdkutils >=0.2.0,<0.2.1.0a0 + license: Apache-2.0 + license_family: Apache + purls: [] + size: 94411 + timestamp: 1730835068177 +- kind: conda + name: aws-c-cal + version: 0.6.15 + build: h94d0942_1 build_number: 1 - subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/binutils_impl_linux-64-2.43-h4bf12b8_1.conda - sha256: 6f945b3b150112c7c6e4783e6c3132410a7b226f2a8965adfd23895318151d46 - md5: 5f354010f194e85dc681dec92405ef9e + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-cal-0.6.15-h94d0942_1.conda + sha256: 33a6c36f69ea8814f92e2aac39b9d95d6168333cf8c957141d5ef6ec42fcf9b1 + md5: 30f6d420ef82734a00963ac45443c7b2 depends: - - ld_impl_linux-64 2.43 h712a8e2_1 - - sysroot_linux-64 - license: GPL-3.0-only - license_family: GPL + - __osx >=11.0 + - aws-c-common >=0.9.23,<0.9.24.0a0 + license: Apache-2.0 + license_family: Apache purls: [] - size: 6233238 - timestamp: 1727304698672 + size: 40069 + timestamp: 1718967327330 - kind: conda - name: bleach - version: 6.1.0 - build: pyhd8ed1ab_0 - subdir: noarch - noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/bleach-6.1.0-pyhd8ed1ab_0.conda - sha256: 845e77ef495376c5c3c328ccfd746ca0ef1978150cae8eae61a300fe7755fb08 - md5: 0ed9d7c0e9afa7c025807a9a8136ea3e + name: aws-c-cal + version: 0.8.0 + build: h814e318_1 + build_number: 1 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/aws-c-cal-0.8.0-h814e318_1.conda + sha256: 004de52b7d7abca21d28f81408983f1cebd0f9b379842e89c69b4e3a617a8aea + md5: 532f048c811213cf7f9c0c280ed5b760 depends: - - packaging - - python >=3.6 - - setuptools - - six >=1.9.0 - - webencodings + - __osx >=10.13 + - aws-c-common >=0.10.0,<0.10.1.0a0 + - openssl >=3.3.1,<4.0a0 license: Apache-2.0 license_family: Apache - purls: - - pkg:pypi/bleach?source=hash-mapping - size: 131220 - timestamp: 1696630354218 + purls: [] + size: 39186 + timestamp: 1729804029376 - kind: conda - name: blosc - version: 1.21.5 - build: h0f2a231_0 + name: aws-c-cal + version: 0.8.0 + build: he70792b_1 + build_number: 1 subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/blosc-1.21.5-h0f2a231_0.conda - sha256: e2b15b017775d1bda8edbb1bc48e545e45364edefa4d926732fc5488cc600731 - md5: 009521b7ed97cca25f8f997f9e745976 + url: https://conda.anaconda.org/conda-forge/linux-64/aws-c-cal-0.8.0-he70792b_1.conda + sha256: 83724251e3d8a98c8236d478a9ea9d164b55c4031dbdf45f728fa1bdbc43d6ef + md5: 9b81a9d9395fb2abd60984fcfe7eb01a depends: - - libgcc-ng >=12 - - libstdcxx-ng >=12 - - libzlib >=1.2.13,<2.0.0a0 - - lz4-c >=1.9.3,<1.10.0a0 - - snappy >=1.1.10,<1.2.0a0 - - zstd >=1.5.5,<1.6.0a0 - license: BSD-3-Clause - license_family: BSD + - __glibc >=2.17,<3.0.a0 + - aws-c-common >=0.10.0,<0.10.1.0a0 + - libgcc >=13 + - openssl >=3.3.1,<4.0a0 + license: Apache-2.0 + license_family: Apache + purls: [] + size: 47883 + timestamp: 1729803879383 +- kind: conda + name: aws-c-cal + version: 0.8.0 + build: hf66253b_1 + build_number: 1 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/aws-c-cal-0.8.0-hf66253b_1.conda + sha256: bbf74ca9dba3a27ba9c17ab2ecf9f0b1e4e705a4c74aa3dcea19acbc8e31e949 + md5: 5320b98ffdcad04620b4c7114824dd5f + depends: + - aws-c-common >=0.10.0,<0.10.1.0a0 + - openssl >=3.3.1,<4.0a0 + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + license: Apache-2.0 + license_family: Apache purls: [] - size: 48692 - timestamp: 1693657088079 + size: 46897 + timestamp: 1729804318827 - kind: conda - name: blosc - version: 1.21.5 - build: hc338f07_0 + name: aws-c-common + version: 0.9.23 + build: h99b78c6_0 subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/blosc-1.21.5-hc338f07_0.conda - sha256: 81f206dd843fe0da894d0480ea9d689fe948fa4b3cad060f97b016af4ac7b3a1 - md5: 93fccb1150aa377576107ecd0ad375b3 + url: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-common-0.9.23-h99b78c6_0.conda + sha256: 15e965a0d1c37927e23d46691e632cf8b39afee5c9ba735f2d535fdb7b58b19e + md5: d9f2adf47d2078d44a23480140e76550 depends: - - libcxx >=15.0.7 - - libzlib >=1.2.13,<2.0.0a0 - - lz4-c >=1.9.3,<1.10.0a0 - - snappy >=1.1.10,<1.2.0a0 - - zstd >=1.5.5,<1.6.0a0 - license: BSD-3-Clause - license_family: BSD + - __osx >=11.0 + license: Apache-2.0 + license_family: Apache purls: [] - size: 33450 - timestamp: 1693657320331 + size: 220102 + timestamp: 1718918149063 - kind: conda - name: blosc - version: 1.21.5 - build: hdccc3a2_0 + name: aws-c-common + version: 0.10.0 + build: h2466b09_0 subdir: win-64 - url: https://conda.anaconda.org/conda-forge/win-64/blosc-1.21.5-hdccc3a2_0.conda - sha256: 73cee35e5366ce998ef36ccccb4c11ef9ead297886cc08269379f91539131288 - md5: 77a5cea2ce92907b7d1e7954457a526a + url: https://conda.anaconda.org/conda-forge/win-64/aws-c-common-0.10.0-h2466b09_0.conda + sha256: 6de9af51355bac3805d4ffca07332ff327f86b00327443b1deda419062f74176 + md5: a6462c0d801bb99fd4f70989a0a88da9 depends: - - libzlib >=1.2.13,<2.0.0a0 - - lz4-c >=1.9.3,<1.10.0a0 - - snappy >=1.1.10,<1.2.0a0 - ucrt >=10.0.20348.0 - vc >=14.2,<15 - vc14_runtime >=14.29.30139 - - zstd >=1.5.5,<1.6.0a0 - license: BSD-3-Clause - license_family: BSD + license: Apache-2.0 + license_family: Apache purls: [] - size: 50069 - timestamp: 1693657396550 + size: 234077 + timestamp: 1729771336756 - kind: conda - name: blosc - version: 1.21.5 - build: heccf04b_0 + name: aws-c-common + version: 0.10.0 + build: ha44c9a9_0 subdir: osx-64 - url: https://conda.anaconda.org/conda-forge/osx-64/blosc-1.21.5-heccf04b_0.conda - sha256: db629047f1721d5a6e3bd41b07c1a3bacd0dee70f4063b61db2aa46f19a0b8b4 - md5: 3003fa6dd18769db1a616982dcee5b40 + url: https://conda.anaconda.org/conda-forge/osx-64/aws-c-common-0.10.0-ha44c9a9_0.conda + sha256: 797fa5eac65ad3f95795a88aef23f938cc31cd1e365b6537147dea50ba28d7e8 + md5: 49cfcde38ade26d72fc6a103bede21f5 depends: - - libcxx >=15.0.7 - - libzlib >=1.2.13,<2.0.0a0 - - lz4-c >=1.9.3,<1.10.0a0 - - snappy >=1.1.10,<1.2.0a0 - - zstd >=1.5.5,<1.6.0a0 - license: BSD-3-Clause - license_family: BSD + - __osx >=10.13 + license: Apache-2.0 + license_family: Apache purls: [] - size: 49891 - timestamp: 1693657206065 + size: 225514 + timestamp: 1729771152132 - kind: conda - name: brotli - version: 1.0.9 - build: h1a8c8d9_9 - build_number: 9 + name: aws-c-common + version: 0.10.0 + build: hb9d3cd8_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/aws-c-common-0.10.0-hb9d3cd8_0.conda + sha256: cf825c991332f4803fbc552bee92e46d2d5e2919a5521fa55043207f39882e3c + md5: f6495bc3a19a4400d3407052d22bef13 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + license: Apache-2.0 + license_family: Apache + purls: [] + size: 235797 + timestamp: 1729771036246 +- kind: conda + name: aws-c-compression + version: 0.2.18 + build: h94d0942_7 + build_number: 7 subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/brotli-1.0.9-h1a8c8d9_9.conda - sha256: 92c3062dd7e593a502c2f8d12e9ccca7ae1ef0363eb0b12faa47e1bb4fae42c7 - md5: 856692dff5e450c269465e3256e1277b + url: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-compression-0.2.18-h94d0942_7.conda + sha256: d0244c7638853f8f8feb4a3107844fc6be23c6e29312fc5eda9221df5817b8a7 + md5: c9a37f68bef48f48782746404f4050a2 depends: - - brotli-bin 1.0.9 h1a8c8d9_9 - - libbrotlidec 1.0.9 h1a8c8d9_9 - - libbrotlienc 1.0.9 h1a8c8d9_9 - license: MIT - license_family: MIT + - __osx >=11.0 + - aws-c-common >=0.9.23,<0.9.24.0a0 + license: Apache-2.0 + license_family: Apache purls: [] - size: 20228 - timestamp: 1687884815549 + size: 18226 + timestamp: 1718967294106 - kind: conda - name: brotli - version: 1.1.0 - build: h00291cd_2 - build_number: 2 + name: aws-c-compression + version: 0.3.0 + build: h814e318_1 + build_number: 1 subdir: osx-64 - url: https://conda.anaconda.org/conda-forge/osx-64/brotli-1.1.0-h00291cd_2.conda - sha256: 624954bc08b3d7885a58c7d547282cfb9a201ce79b748b358f801de53e20f523 - md5: 2db0c38a7f2321c5bdaf32b181e832c7 + url: https://conda.anaconda.org/conda-forge/osx-64/aws-c-compression-0.3.0-h814e318_1.conda + sha256: 16d388ad30be1b338507a19088a2022b9c9a6bb5e1f5171ac686093b61007364 + md5: ec975f9c7d27591f84dd4da0957ec1a0 depends: - __osx >=10.13 - - brotli-bin 1.1.0 h00291cd_2 - - libbrotlidec 1.1.0 h00291cd_2 - - libbrotlienc 1.1.0 h00291cd_2 - license: MIT - license_family: MIT + - aws-c-common >=0.10.0,<0.10.1.0a0 + license: Apache-2.0 + license_family: Apache purls: [] - size: 19450 - timestamp: 1725267851605 + size: 17996 + timestamp: 1730809547391 - kind: conda - name: brotli - version: 1.1.0 - build: hb9d3cd8_2 - build_number: 2 + name: aws-c-compression + version: 0.3.0 + build: hba2fe39_1 + build_number: 1 subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/brotli-1.1.0-hb9d3cd8_2.conda - sha256: fcb0b5b28ba7492093e54f3184435144e074dfceab27ac8e6a9457e736565b0b - md5: 98514fe74548d768907ce7a13f680e8f + url: https://conda.anaconda.org/conda-forge/linux-64/aws-c-compression-0.3.0-hba2fe39_1.conda + sha256: c7930aa52911ddc01de6ff92e5c93f1c71ecf3fc36d85ffe920b5dc422f6de4a + md5: c6133966058e553727f0afe21ab38cd2 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 + - aws-c-common >=0.10.0,<0.10.1.0a0 - libgcc >=13 - license: MIT - license_family: MIT + license: Apache-2.0 + license_family: Apache purls: [] - size: 19264 - timestamp: 1725267697072 + size: 19043 + timestamp: 1730809538448 - kind: conda - name: brotli-bin - version: 1.0.9 - build: h1a8c8d9_9 - build_number: 9 + name: aws-c-compression + version: 0.3.0 + build: hf66253b_1 + build_number: 1 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/aws-c-compression-0.3.0-hf66253b_1.conda + sha256: 70c889cee867f93db815ce0085a2958a4f3363f8c42f9b19fd1f8933d0c5e76c + md5: 1bc3248e156f0f2e76512004226dc5b5 + depends: + - aws-c-common >=0.10.0,<0.10.1.0a0 + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + license: Apache-2.0 + license_family: Apache + purls: [] + size: 22507 + timestamp: 1730809900283 +- kind: conda + name: aws-c-event-stream + version: 0.4.2 + build: he43e89f_14 + build_number: 14 subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/brotli-bin-1.0.9-h1a8c8d9_9.conda - sha256: 4731892fb855f5993129515c5b63b36d049cc64e70611c6afa8f64aae5f51323 - md5: 19ad562adca69541e67613022b41df5b + url: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-event-stream-0.4.2-he43e89f_14.conda + sha256: 74da88265e7ad47edc62160c30cd1e25dff8b5468c0a1e38b1fa04052e348653 + md5: 80418a84df5d4ad87f3a35df31c6398d + depends: + - __osx >=11.0 + - aws-c-common >=0.9.23,<0.9.24.0a0 + - aws-c-io >=0.14.9,<0.14.10.0a0 + - aws-checksums >=0.1.18,<0.1.19.0a0 + - libcxx >=16 + license: Apache-2.0 + license_family: Apache + purls: [] + size: 47513 + timestamp: 1718996179063 +- kind: conda + name: aws-c-event-stream + version: 0.5.0 + build: h100ddae_3 + build_number: 3 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/aws-c-event-stream-0.5.0-h100ddae_3.conda + sha256: 065232f21c97462e289e45d87ee3f538c3872ac64dc5c0eb82748fab70de1789 + md5: 33def45b32205f481f0a5f87f80ab66b + depends: + - aws-c-common >=0.10.0,<0.10.1.0a0 + - aws-c-io >=0.15.0,<0.15.1.0a0 + - aws-checksums >=0.2.0,<0.2.1.0a0 + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + license: Apache-2.0 + license_family: Apache + purls: [] + size: 54165 + timestamp: 1729831835357 +- kind: conda + name: aws-c-event-stream + version: 0.5.0 + build: h18ad228_3 + build_number: 3 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/aws-c-event-stream-0.5.0-h18ad228_3.conda + sha256: 763a3a819971e4a9558b7ceb6c9c141f1ba87a999bf05a452c4e07d37e72611c + md5: e2a8337ea24d24969cce807cccddd44c depends: - - libbrotlidec 1.0.9 h1a8c8d9_9 - - libbrotlienc 1.0.9 h1a8c8d9_9 + - __glibc >=2.17,<3.0.a0 + - aws-c-common >=0.10.0,<0.10.1.0a0 + - aws-c-io >=0.15.0,<0.15.1.0a0 + - aws-checksums >=0.2.0,<0.2.1.0a0 + - libgcc >=13 + - libstdcxx >=13 + license: Apache-2.0 + license_family: Apache + purls: [] + size: 53700 + timestamp: 1729831531662 +- kind: conda + name: aws-c-event-stream + version: 0.5.0 + build: h533bc8e_3 + build_number: 3 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/aws-c-event-stream-0.5.0-h533bc8e_3.conda + sha256: 891edd0199152256b9e06d825f7f647890e3d992b2e1ea7812ff268d61755846 + md5: f8f0c8a7e3d3b148e8b13ed5675db5e2 + depends: + - __osx >=10.13 + - aws-c-common >=0.10.0,<0.10.1.0a0 + - aws-c-io >=0.15.0,<0.15.1.0a0 + - aws-checksums >=0.2.0,<0.2.1.0a0 + - libcxx >=17 + license: Apache-2.0 + license_family: Apache + purls: [] + size: 46527 + timestamp: 1729831637408 +- kind: conda + name: aws-c-http + version: 0.8.2 + build: h4f006d9_3 + build_number: 3 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-http-0.8.2-h4f006d9_3.conda + sha256: e48877117cd6323e726190e5dfe148ac5bef1c2042bed2811968d0a25dbb44fb + md5: 5291d125026d9e4c0d5bda8cf616d9c8 + depends: + - __osx >=11.0 + - aws-c-cal >=0.6.15,<0.6.16.0a0 + - aws-c-common >=0.9.23,<0.9.24.0a0 + - aws-c-compression >=0.2.18,<0.2.19.0a0 + - aws-c-io >=0.14.9,<0.14.10.0a0 + license: Apache-2.0 + license_family: Apache + purls: [] + size: 151952 + timestamp: 1718996101845 +- kind: conda + name: aws-c-http + version: 0.9.0 + build: h5e3777a_4 + build_number: 4 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/aws-c-http-0.9.0-h5e3777a_4.conda + sha256: abda84d62895912a16cb3a1bea61fada19e9204527e7959e32b47fc5fadc9071 + md5: cf3e670b262ad42ff012599b05876a6e + depends: + - aws-c-cal >=0.8.0,<0.8.1.0a0 + - aws-c-common >=0.10.0,<0.10.1.0a0 + - aws-c-compression >=0.3.0,<0.3.1.0a0 + - aws-c-io >=0.15.0,<0.15.1.0a0 + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + license: Apache-2.0 + license_family: Apache + purls: [] + size: 182414 + timestamp: 1730823441594 +- kind: conda + name: aws-c-http + version: 0.9.0 + build: h9fe673a_4 + build_number: 4 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/aws-c-http-0.9.0-h9fe673a_4.conda + sha256: 24da723f907be22dfdbc72d3e21928b42f73a76a4fdc98bd14856cb450e911f8 + md5: 597178c664990e6f5168f5566416764e + depends: + - __osx >=10.13 + - aws-c-cal >=0.8.0,<0.8.1.0a0 + - aws-c-common >=0.10.0,<0.10.1.0a0 + - aws-c-compression >=0.3.0,<0.3.1.0a0 + - aws-c-io >=0.15.0,<0.15.1.0a0 + license: Apache-2.0 + license_family: Apache + purls: [] + size: 164719 + timestamp: 1730823321958 +- kind: conda + name: aws-c-http + version: 0.9.0 + build: hc1812d8_4 + build_number: 4 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/aws-c-http-0.9.0-hc1812d8_4.conda + sha256: 39fee8e197ea36b942a5b1db2430414044b1c5464e58d77f2659622eacc53af9 + md5: 29aa54d7bf307812d687d82718318e04 + depends: + - __glibc >=2.17,<3.0.a0 + - aws-c-cal >=0.8.0,<0.8.1.0a0 + - aws-c-common >=0.10.0,<0.10.1.0a0 + - aws-c-compression >=0.3.0,<0.3.1.0a0 + - aws-c-io >=0.15.0,<0.15.1.0a0 + - libgcc >=13 + license: Apache-2.0 + license_family: Apache + purls: [] + size: 196833 + timestamp: 1730823058596 +- kind: conda + name: aws-c-io + version: 0.14.9 + build: ha70251c_3 + build_number: 3 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-io-0.14.9-ha70251c_3.conda + sha256: 9f3e9babaa3cca51b46f18aa3f0d345e11e70b993021fe8087f2ec743a6b1cb8 + md5: a1c93896b2a9c1a4fba1b88e329bd1f5 + depends: + - __osx >=11.0 + - aws-c-cal >=0.6.15,<0.6.16.0a0 + - aws-c-common >=0.9.23,<0.9.24.0a0 + license: Apache-2.0 + license_family: Apache + purls: [] + size: 137195 + timestamp: 1718979773380 +- kind: conda + name: aws-c-io + version: 0.15.0 + build: h78a6df4_3 + build_number: 3 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/aws-c-io-0.15.0-h78a6df4_3.conda + sha256: 01a1ee75c2043a90773a0495e3c80136b8930842de64d60e0daca9f8b4d2f41b + md5: aafa0192288d77edb705a4a41f0ed444 + depends: + - aws-c-cal >=0.8.0,<0.8.1.0a0 + - aws-c-common >=0.10.0,<0.10.1.0a0 + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + license: Apache-2.0 + license_family: Apache + purls: [] + size: 159986 + timestamp: 1729817319373 +- kind: conda + name: aws-c-io + version: 0.15.0 + build: h9a7ba4f_3 + build_number: 3 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/aws-c-io-0.15.0-h9a7ba4f_3.conda + sha256: 16c5410484ccf31aca6b762788be427182a5ac35f0de1bf7a2152e41b0ff5578 + md5: 08b4dcba0112e40f4b340e12aa8981c8 + depends: + - __glibc >=2.17,<3.0.a0 + - aws-c-cal >=0.8.0,<0.8.1.0a0 + - aws-c-common >=0.10.0,<0.10.1.0a0 + - libgcc >=13 + - s2n >=1.5.6,<1.5.7.0a0 + license: Apache-2.0 + license_family: Apache + purls: [] + size: 159331 + timestamp: 1729816951128 +- kind: conda + name: aws-c-io + version: 0.15.0 + build: hc38bfe9_3 + build_number: 3 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/aws-c-io-0.15.0-hc38bfe9_3.conda + sha256: cbe9bfc1e782d31cdcbe8b3b764c22c5f4dcf47f199d582e77684da7d755240e + md5: ccdc52ce779e4f9a04d4ee5d6864dc03 + depends: + - __osx >=10.13 + - aws-c-cal >=0.8.0,<0.8.1.0a0 + - aws-c-common >=0.10.0,<0.10.1.0a0 + license: Apache-2.0 + license_family: Apache + purls: [] + size: 138528 + timestamp: 1729817117559 +- kind: conda + name: aws-c-mqtt + version: 0.10.4 + build: h80c1ce3_7 + build_number: 7 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-mqtt-0.10.4-h80c1ce3_7.conda + sha256: b2d6d92a9daed8db9de940b87aae7c699c3e96e723335f2fea4310e2d1486bed + md5: 1c3749103857d0f31826d7f37f9776e9 + depends: + - __osx >=11.0 + - aws-c-common >=0.9.23,<0.9.24.0a0 + - aws-c-http >=0.8.2,<0.8.3.0a0 + - aws-c-io >=0.14.9,<0.14.10.0a0 + license: Apache-2.0 + license_family: Apache + purls: [] + size: 118299 + timestamp: 1719010608651 +- kind: conda + name: aws-c-mqtt + version: 0.11.0 + build: h104da76_4 + build_number: 4 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/aws-c-mqtt-0.11.0-h104da76_4.conda + sha256: 237e6d220b1373b5b95d13ba9250ab051336eda05033ba98866c789f624b67d4 + md5: 72d871d7b97c4e985367ff20da92a84b + depends: + - __osx >=10.13 + - aws-c-common >=0.10.0,<0.10.1.0a0 + - aws-c-http >=0.9.0,<0.9.1.0a0 + - aws-c-io >=0.15.0,<0.15.1.0a0 + license: Apache-2.0 + license_family: Apache + purls: [] + size: 164481 + timestamp: 1730987495068 +- kind: conda + name: aws-c-mqtt + version: 0.11.0 + build: h7f264a7_4 + build_number: 4 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/aws-c-mqtt-0.11.0-h7f264a7_4.conda + sha256: 8d8b74ff75feae98ee608ea49aabc180cd8f788269bd919e3e43af306682e0e4 + md5: e02f038dc083df2028f33d58b4601667 + depends: + - __glibc >=2.17,<3.0.a0 + - aws-c-common >=0.10.0,<0.10.1.0a0 + - aws-c-http >=0.9.0,<0.9.1.0a0 + - aws-c-io >=0.15.0,<0.15.1.0a0 + - libgcc >=13 + license: Apache-2.0 + license_family: Apache + purls: [] + size: 194089 + timestamp: 1730987483659 +- kind: conda + name: aws-c-mqtt + version: 0.11.0 + build: hbba0651_4 + build_number: 4 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/aws-c-mqtt-0.11.0-hbba0651_4.conda + sha256: 1bd45e7718cb99fc37fd6c08fc021f35fe37fbab550f9a89fa0d795cf5e4cc8c + md5: f5fb547b012f19a3aaa547156d4bdbe0 + depends: + - aws-c-common >=0.10.0,<0.10.1.0a0 + - aws-c-http >=0.9.0,<0.9.1.0a0 + - aws-c-io >=0.15.0,<0.15.1.0a0 + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + license: Apache-2.0 + license_family: Apache + purls: [] + size: 186510 + timestamp: 1730987757752 +- kind: conda + name: aws-c-s3 + version: 0.5.10 + build: h6cb31ac_4 + build_number: 4 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-s3-0.5.10-h6cb31ac_4.conda + sha256: 243317cf99529f947fd5da371d45af6ea53723bef957361f2472a3ae995a2c50 + md5: 76d2ac9cb6e7f27814178811f958da77 + depends: + - __osx >=11.0 + - aws-c-auth >=0.7.22,<0.7.23.0a0 + - aws-c-cal >=0.6.15,<0.6.16.0a0 + - aws-c-common >=0.9.23,<0.9.24.0a0 + - aws-c-http >=0.8.2,<0.8.3.0a0 + - aws-c-io >=0.14.9,<0.14.10.0a0 + - aws-checksums >=0.1.18,<0.1.19.0a0 + license: Apache-2.0 + license_family: Apache + purls: [] + size: 94000 + timestamp: 1719024135855 +- kind: conda + name: aws-c-s3 + version: 0.7.0 + build: h0e513c4_6 + build_number: 6 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/aws-c-s3-0.7.0-h0e513c4_6.conda + sha256: 1a295d3e3818790b1fb2c7f6ea26175b4d8e4fb1cf17dd19ebf471ff2b9fea72 + md5: b0022a7f32f9bd812c9b0d25d84ac294 + depends: + - aws-c-auth >=0.8.0,<0.8.1.0a0 + - aws-c-cal >=0.8.0,<0.8.1.0a0 + - aws-c-common >=0.10.0,<0.10.1.0a0 + - aws-c-http >=0.9.0,<0.9.1.0a0 + - aws-c-io >=0.15.0,<0.15.1.0a0 + - aws-checksums >=0.2.0,<0.2.1.0a0 + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + license: Apache-2.0 + license_family: Apache + purls: [] + size: 108633 + timestamp: 1730847290683 +- kind: conda + name: aws-c-s3 + version: 0.7.0 + build: h851ab20_6 + build_number: 6 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/aws-c-s3-0.7.0-h851ab20_6.conda + sha256: b68f8e14a47b500736c49d9988dba2ed72fa74d4721714d5defc6a79e96c798c + md5: 16f4cac7a0b08b22cec5af3817b077c8 + depends: + - __osx >=10.13 + - aws-c-auth >=0.8.0,<0.8.1.0a0 + - aws-c-cal >=0.8.0,<0.8.1.0a0 + - aws-c-common >=0.10.0,<0.10.1.0a0 + - aws-c-http >=0.9.0,<0.9.1.0a0 + - aws-c-io >=0.15.0,<0.15.1.0a0 + - aws-checksums >=0.2.0,<0.2.1.0a0 + license: Apache-2.0 + license_family: Apache + purls: [] + size: 97933 + timestamp: 1730847231392 +- kind: conda + name: aws-c-s3 + version: 0.7.0 + build: hdd898f0_6 + build_number: 6 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/aws-c-s3-0.7.0-hdd898f0_6.conda + sha256: bf1880aec9874061fc8e8f83c0bddf99de7ab63211d2c93a1cb04b682ed3393c + md5: 34ac940b2f4746327b0e4378a245c813 + depends: + - __glibc >=2.17,<3.0.a0 + - aws-c-auth >=0.8.0,<0.8.1.0a0 + - aws-c-cal >=0.8.0,<0.8.1.0a0 + - aws-c-common >=0.10.0,<0.10.1.0a0 + - aws-c-http >=0.9.0,<0.9.1.0a0 + - aws-c-io >=0.15.0,<0.15.1.0a0 + - aws-checksums >=0.2.0,<0.2.1.0a0 + - libgcc >=13 + - openssl >=3.3.2,<4.0a0 + license: Apache-2.0 + license_family: Apache + purls: [] + size: 113582 + timestamp: 1730847118213 +- kind: conda + name: aws-c-sdkutils + version: 0.1.16 + build: h94d0942_3 + build_number: 3 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-sdkutils-0.1.16-h94d0942_3.conda + sha256: 4303f310b156abeca86ea8a4b4c8be5cfb96dd4214c2ebcfeef1bec3fa1dc793 + md5: 1f9dd57e79cf2191ed139491aa460e24 + depends: + - __osx >=11.0 + - aws-c-common >=0.9.23,<0.9.24.0a0 + license: Apache-2.0 + license_family: Apache + purls: [] + size: 49180 + timestamp: 1718973550277 +- kind: conda + name: aws-c-sdkutils + version: 0.2.0 + build: h814e318_1 + build_number: 1 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/aws-c-sdkutils-0.2.0-h814e318_1.conda + sha256: 1e6240f16ea602aed94aed0498bd85bb83ba0adfb81639349de85ef6ce8cb5af + md5: 81ee70ee8c0d978bb52aec66f1a6e170 + depends: + - __osx >=10.13 + - aws-c-common >=0.10.0,<0.10.1.0a0 + license: Apache-2.0 + license_family: Apache + purls: [] + size: 51056 + timestamp: 1729811186255 +- kind: conda + name: aws-c-sdkutils + version: 0.2.0 + build: hba2fe39_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/aws-c-sdkutils-0.2.0-hba2fe39_1.conda + sha256: 9289e0e2c1ee7ab5cfb7ca357b4292f343c4c9c32221d0c1e747e4ed4818fb16 + md5: dd386cc30c281149b7cb88339bcc54dc + depends: + - __glibc >=2.17,<3.0.a0 + - aws-c-common >=0.10.0,<0.10.1.0a0 + - libgcc >=13 + license: Apache-2.0 + license_family: Apache + purls: [] + size: 55964 + timestamp: 1729811129404 +- kind: conda + name: aws-c-sdkutils + version: 0.2.0 + build: hf66253b_1 + build_number: 1 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/aws-c-sdkutils-0.2.0-hf66253b_1.conda + sha256: ee61dac637e34a1c63011c38699e0d96eb991e9c71cae199eeca11414f6c1f1d + md5: 95922b83af5467cf7787ad89efbbb5f4 + depends: + - aws-c-common >=0.10.0,<0.10.1.0a0 + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + license: Apache-2.0 + license_family: Apache + purls: [] + size: 55155 + timestamp: 1729811368614 +- kind: conda + name: aws-checksums + version: 0.1.18 + build: h94d0942_7 + build_number: 7 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/aws-checksums-0.1.18-h94d0942_7.conda + sha256: cdd08a5b6b4ebadf05087238987681dc370bd0336ed410d0047171020f160187 + md5: fbd0be30bdd84b6735dfa3d6c5916b2e + depends: + - __osx >=11.0 + - aws-c-common >=0.9.23,<0.9.24.0a0 + license: Apache-2.0 + license_family: Apache + purls: [] + size: 49160 + timestamp: 1718973261942 +- kind: conda + name: aws-checksums + version: 0.2.0 + build: h814e318_1 + build_number: 1 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/aws-checksums-0.2.0-h814e318_1.conda + sha256: 13bdf44125c9be9c3e92d96bfe696562412187454a565d8c438e0bef01e7ae29 + md5: 40d2ba11f708ec9beccf99a4387a0a25 + depends: + - __osx >=10.13 + - aws-c-common >=0.10.0,<0.10.1.0a0 + license: Apache-2.0 + license_family: Apache + purls: [] + size: 70860 + timestamp: 1729811254287 +- kind: conda + name: aws-checksums + version: 0.2.0 + build: hba2fe39_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/aws-checksums-0.2.0-hba2fe39_1.conda + sha256: 6c87c69df9dc2293d7159cb56b265da0a5bd12521ff4c664c6e57c24b1cfcc90 + md5: ac8d58d81bdcefa5bce4e883c6b88c42 + depends: + - __glibc >=2.17,<3.0.a0 + - aws-c-common >=0.10.0,<0.10.1.0a0 + - libgcc >=13 + license: Apache-2.0 + license_family: Apache + purls: [] + size: 72674 + timestamp: 1729811180752 +- kind: conda + name: aws-checksums + version: 0.2.0 + build: hf66253b_1 + build_number: 1 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/aws-checksums-0.2.0-hf66253b_1.conda + sha256: 411d48da9aa8a2dddd5b107e41630d4aa3c3febbc6df53850b9de7d62eb3b613 + md5: 3cffe95307082f02b37813933333b55b + depends: + - aws-c-common >=0.10.0,<0.10.1.0a0 + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + license: Apache-2.0 + license_family: Apache + purls: [] + size: 75498 + timestamp: 1729811641880 +- kind: conda + name: aws-crt-cpp + version: 0.26.12 + build: h431af13_1 + build_number: 1 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/aws-crt-cpp-0.26.12-h431af13_1.conda + sha256: 7df55dce75a31b65c77b2486e6f7e6ecdd4faa43f1d96411a9b574ee0df86037 + md5: 5c612e67e6e17c40dc51044787e38999 + depends: + - __osx >=11.0 + - aws-c-auth >=0.7.22,<0.7.23.0a0 + - aws-c-cal >=0.6.15,<0.6.16.0a0 + - aws-c-common >=0.9.23,<0.9.24.0a0 + - aws-c-event-stream >=0.4.2,<0.4.3.0a0 + - aws-c-http >=0.8.2,<0.8.3.0a0 + - aws-c-io >=0.14.9,<0.14.10.0a0 + - aws-c-mqtt >=0.10.4,<0.10.5.0a0 + - aws-c-s3 >=0.5.10,<0.5.11.0a0 + - aws-c-sdkutils >=0.1.16,<0.1.17.0a0 + - libcxx >=16 + license: Apache-2.0 + license_family: Apache + purls: [] + size: 224668 + timestamp: 1719334807811 +- kind: conda + name: aws-crt-cpp + version: 0.29.1 + build: h20dc212_1 + build_number: 1 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/aws-crt-cpp-0.29.1-h20dc212_1.conda + sha256: 5a06a9d2767a784f2c3b5fef8aa79290fb0eee1cb96d80fdb497b85878ae902b + md5: c2414d04e84eb634cdd7da19eb836767 + depends: + - aws-c-auth >=0.8.0,<0.8.1.0a0 + - aws-c-cal >=0.8.0,<0.8.1.0a0 + - aws-c-common >=0.10.0,<0.10.1.0a0 + - aws-c-event-stream >=0.5.0,<0.5.1.0a0 + - aws-c-http >=0.9.0,<0.9.1.0a0 + - aws-c-io >=0.15.0,<0.15.1.0a0 + - aws-c-mqtt >=0.11.0,<0.11.1.0a0 + - aws-c-s3 >=0.7.0,<0.7.1.0a0 + - aws-c-sdkutils >=0.2.0,<0.2.1.0a0 + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + license: Apache-2.0 + license_family: Apache + purls: [] + size: 254994 + timestamp: 1730860371474 +- kind: conda + name: aws-crt-cpp + version: 0.29.1 + build: h44d7a32_1 + build_number: 1 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/aws-crt-cpp-0.29.1-h44d7a32_1.conda + sha256: 999b53edf0b83949cfe358d09632ef9f741744cb040e80aeefb2381d08c156b0 + md5: 8f7b46d6d1f1ef5546e260fb40281023 + depends: + - __osx >=10.13 + - aws-c-auth >=0.8.0,<0.8.1.0a0 + - aws-c-cal >=0.8.0,<0.8.1.0a0 + - aws-c-common >=0.10.0,<0.10.1.0a0 + - aws-c-event-stream >=0.5.0,<0.5.1.0a0 + - aws-c-http >=0.9.0,<0.9.1.0a0 + - aws-c-io >=0.15.0,<0.15.1.0a0 + - aws-c-mqtt >=0.11.0,<0.11.1.0a0 + - aws-c-s3 >=0.7.0,<0.7.1.0a0 + - aws-c-sdkutils >=0.2.0,<0.2.1.0a0 + - libcxx >=18 + license: Apache-2.0 + license_family: Apache + purls: [] + size: 290062 + timestamp: 1730860485358 +- kind: conda + name: aws-crt-cpp + version: 0.29.1 + build: hd83ed67_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/aws-crt-cpp-0.29.1-hd83ed67_1.conda + sha256: fa8f6fed52a951666b48595ce5944cc5ac659ae835a3f39103ebeb81f8b31780 + md5: 0fa527267a6192b4e0072a185439a6e4 + depends: + - __glibc >=2.17,<3.0.a0 + - aws-c-auth >=0.8.0,<0.8.1.0a0 + - aws-c-cal >=0.8.0,<0.8.1.0a0 + - aws-c-common >=0.10.0,<0.10.1.0a0 + - aws-c-event-stream >=0.5.0,<0.5.1.0a0 + - aws-c-http >=0.9.0,<0.9.1.0a0 + - aws-c-io >=0.15.0,<0.15.1.0a0 + - aws-c-mqtt >=0.11.0,<0.11.1.0a0 + - aws-c-s3 >=0.7.0,<0.7.1.0a0 + - aws-c-sdkutils >=0.2.0,<0.2.1.0a0 + - libgcc >=13 + - libstdcxx >=13 + license: Apache-2.0 + license_family: Apache + purls: [] + size: 345688 + timestamp: 1730860190329 +- kind: conda + name: aws-sdk-cpp + version: 1.11.329 + build: h617e15d_6 + build_number: 6 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/aws-sdk-cpp-1.11.329-h617e15d_6.conda + sha256: 8776f7efd9ab8931f38472dc088f04770d3134c2c8296101ba25399c197072ed + md5: baa8ea126452f9abbe08bce56f1878bc + depends: + - __osx >=11.0 + - aws-c-common >=0.9.23,<0.9.24.0a0 + - aws-c-event-stream >=0.4.2,<0.4.3.0a0 + - aws-checksums >=0.1.18,<0.1.19.0a0 + - aws-crt-cpp >=0.26.12,<0.26.13.0a0 + - libcurl >=8.8.0,<9.0a0 + - libcxx >=16 + - libzlib >=1.3.1,<2.0a0 + - openssl >=3.3.1,<4.0a0 + license: Apache-2.0 + license_family: Apache + purls: [] + size: 3357288 + timestamp: 1719360395825 +- kind: conda + name: aws-sdk-cpp + version: 1.11.407 + build: h4a57546_8 + build_number: 8 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/aws-sdk-cpp-1.11.407-h4a57546_8.conda + sha256: e9d200576515fb06a8da070244dd025d898a2c087b2b99bb9e967ac4d60c9620 + md5: 38e282f1ec8da68b5c79ab7e6bb03062 + depends: + - __glibc >=2.17,<3.0.a0 + - aws-c-common >=0.10.0,<0.10.1.0a0 + - aws-c-event-stream >=0.5.0,<0.5.1.0a0 + - aws-checksums >=0.2.0,<0.2.1.0a0 + - aws-crt-cpp >=0.29.1,<0.29.2.0a0 + - libcurl >=8.10.1,<9.0a0 + - libgcc >=13 + - libstdcxx >=13 + - libzlib >=1.3.1,<2.0a0 + - openssl >=3.3.2,<4.0a0 + license: Apache-2.0 + license_family: Apache + purls: [] + size: 2924063 + timestamp: 1730895781946 +- kind: conda + name: aws-sdk-cpp + version: 1.11.407 + build: h50b115f_8 + build_number: 8 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/aws-sdk-cpp-1.11.407-h50b115f_8.conda + sha256: 930ac64231f2ceba8cc1571e2ad8e6c48a5fd9809b89b0a8c22504e70c3c2ca5 + md5: 13a91d0a9555ca6204a0ed6b89ccd1cc + depends: + - __osx >=10.13 + - aws-c-common >=0.10.0,<0.10.1.0a0 + - aws-c-event-stream >=0.5.0,<0.5.1.0a0 + - aws-checksums >=0.2.0,<0.2.1.0a0 + - aws-crt-cpp >=0.29.1,<0.29.2.0a0 + - libcurl >=8.10.1,<9.0a0 + - libcxx >=18 + - libzlib >=1.3.1,<2.0a0 + - openssl >=3.3.2,<4.0a0 + license: Apache-2.0 + license_family: Apache + purls: [] + size: 2750565 + timestamp: 1730896587403 +- kind: conda + name: aws-sdk-cpp + version: 1.11.407 + build: hb809a3a_8 + build_number: 8 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/aws-sdk-cpp-1.11.407-hb809a3a_8.conda + sha256: a102ec92df337c13c198e55a7445ecfe08925c58c702fac7e791cad29d870b3b + md5: 7ae40a8ea2813dce0de6d885bb6847e5 + depends: + - aws-c-common >=0.10.0,<0.10.1.0a0 + - aws-c-event-stream >=0.5.0,<0.5.1.0a0 + - aws-checksums >=0.2.0,<0.2.1.0a0 + - aws-crt-cpp >=0.29.1,<0.29.2.0a0 + - libzlib >=1.3.1,<2.0a0 + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + license: Apache-2.0 + license_family: Apache + purls: [] + size: 2825541 + timestamp: 1730896894158 +- kind: conda + name: azure-core-cpp + version: 1.14.0 + build: h5cfcd09_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/azure-core-cpp-1.14.0-h5cfcd09_0.conda + sha256: fe07debdb089a3db17f40a7f20d283d75284bb4fc269ef727b8ba6fc93f7cb5a + md5: 0a8838771cc2e985cd295e01ae83baf1 + depends: + - __glibc >=2.17,<3.0.a0 + - libcurl >=8.10.1,<9.0a0 + - libgcc >=13 + - libstdcxx >=13 + - openssl >=3.3.2,<4.0a0 + license: MIT + license_family: MIT + purls: [] + size: 345117 + timestamp: 1728053909574 +- kind: conda + name: azure-core-cpp + version: 1.14.0 + build: h9a36307_0 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/azure-core-cpp-1.14.0-h9a36307_0.conda + sha256: c7694fc16b9aebeb6ee5e4f80019b477a181d961a3e4d9b6a66b77777eb754fe + md5: 1082a031824b12a2be731d600cfa5ccb + depends: + - __osx >=10.13 + - libcurl >=8.10.1,<9.0a0 + - libcxx >=17 + - openssl >=3.3.2,<4.0a0 + license: MIT + license_family: MIT + purls: [] + size: 303166 + timestamp: 1728053999891 +- kind: conda + name: azure-identity-cpp + version: 1.10.0 + build: h113e628_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/azure-identity-cpp-1.10.0-h113e628_0.conda + sha256: 286b31616c191486626cb49e9ceb5920d29394b9e913c23adb7eb637629ba4de + md5: 73f73f60854f325a55f1d31459f2ab73 + depends: + - __glibc >=2.17,<3.0.a0 + - azure-core-cpp >=1.14.0,<1.14.1.0a0 + - libgcc >=13 + - libstdcxx >=13 + - openssl >=3.3.2,<4.0a0 + license: MIT + license_family: MIT + purls: [] + size: 232351 + timestamp: 1728486729511 +- kind: conda + name: azure-identity-cpp + version: 1.10.0 + build: ha4e2ba9_0 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/azure-identity-cpp-1.10.0-ha4e2ba9_0.conda + sha256: b9899b9698a6c7353fc5078c449105aae58635d217befbc8ca9d5a527198019b + md5: ad56b6a4b8931d37a2cf5bc724a46f01 + depends: + - __osx >=10.13 + - azure-core-cpp >=1.14.0,<1.14.1.0a0 + - libcxx >=17 + - openssl >=3.3.2,<4.0a0 + license: MIT + license_family: MIT + purls: [] + size: 175344 + timestamp: 1728487066445 +- kind: conda + name: azure-storage-blobs-cpp + version: 12.13.0 + build: h3cf044e_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/azure-storage-blobs-cpp-12.13.0-h3cf044e_1.conda + sha256: 2606260e5379eed255bcdc6adc39b93fb31477337bcd911c121fc43cd29bf394 + md5: 7eb66060455c7a47d9dcdbfa9f46579b + depends: + - __glibc >=2.17,<3.0.a0 + - azure-core-cpp >=1.14.0,<1.14.1.0a0 + - azure-storage-common-cpp >=12.8.0,<12.8.1.0a0 + - libgcc >=13 + - libstdcxx >=13 + license: MIT + license_family: MIT + purls: [] + size: 549342 + timestamp: 1728578123088 +- kind: conda + name: azure-storage-blobs-cpp + version: 12.13.0 + build: h3d2f5f1_1 + build_number: 1 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/azure-storage-blobs-cpp-12.13.0-h3d2f5f1_1.conda + sha256: 31984e52450230d04ca98d5232dbe256e5ef6e32b15d46124135c6e64790010d + md5: 3df4fb5d6d0e7b3fb28e071aff23787e + depends: + - __osx >=10.13 + - azure-core-cpp >=1.14.0,<1.14.1.0a0 + - azure-storage-common-cpp >=12.8.0,<12.8.1.0a0 + - libcxx >=17 + license: MIT + license_family: MIT + purls: [] + size: 445040 + timestamp: 1728578180436 +- kind: conda + name: azure-storage-common-cpp + version: 12.8.0 + build: h1ccc5ac_1 + build_number: 1 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/azure-storage-common-cpp-12.8.0-h1ccc5ac_1.conda + sha256: 51fb67d2991d105b8f7b97b4810cd63bac4dc421a4a9c83c15a98ca520a42e1e + md5: 5b3e79eb148d6e30d6c697788bad9960 + depends: + - __osx >=10.13 + - azure-core-cpp >=1.14.0,<1.14.1.0a0 + - libcxx >=17 + - libxml2 >=2.12.7,<3.0a0 + - openssl >=3.3.2,<4.0a0 + license: MIT + license_family: MIT + purls: [] + size: 126229 + timestamp: 1728563580392 +- kind: conda + name: azure-storage-common-cpp + version: 12.8.0 + build: h736e048_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/azure-storage-common-cpp-12.8.0-h736e048_1.conda + sha256: 273475f002b091b66ce7366da04bf164c3732c03f8692ab2ee2d23335b6a82ba + md5: 13de36be8de3ae3f05ba127631599213 + depends: + - __glibc >=2.17,<3.0.a0 + - azure-core-cpp >=1.14.0,<1.14.1.0a0 + - libgcc >=13 + - libstdcxx >=13 + - libxml2 >=2.12.7,<3.0a0 + - openssl >=3.3.2,<4.0a0 license: MIT license_family: MIT purls: [] - size: 18182 - timestamp: 1687884787034 + size: 149312 + timestamp: 1728563338704 - kind: conda - name: brotli-bin - version: 1.1.0 - build: h00291cd_2 - build_number: 2 + name: azure-storage-files-datalake-cpp + version: 12.12.0 + build: h86941f0_1 + build_number: 1 subdir: osx-64 - url: https://conda.anaconda.org/conda-forge/osx-64/brotli-bin-1.1.0-h00291cd_2.conda - sha256: 642a8492491109fd8270c1e2c33b18126712df0cedb94aaa2b1c6b02505a4bfa - md5: 049933ecbf552479a12c7917f0a4ce59 + url: https://conda.anaconda.org/conda-forge/osx-64/azure-storage-files-datalake-cpp-12.12.0-h86941f0_1.conda + sha256: 12d95251a8793ea2e78f494e69353a930e9ea06bbaaaa4ccb6e5b3e35ee0744f + md5: 60452336e7f61f6fdaaff69264ee112e depends: - __osx >=10.13 - - libbrotlidec 1.1.0 h00291cd_2 - - libbrotlienc 1.1.0 h00291cd_2 + - azure-core-cpp >=1.14.0,<1.14.1.0a0 + - azure-storage-blobs-cpp >=12.13.0,<12.13.1.0a0 + - azure-storage-common-cpp >=12.8.0,<12.8.1.0a0 + - libcxx >=17 license: MIT license_family: MIT purls: [] - size: 16643 - timestamp: 1725267837325 + size: 200991 + timestamp: 1728729588371 - kind: conda - name: brotli-bin - version: 1.1.0 - build: hb9d3cd8_2 - build_number: 2 + name: azure-storage-files-datalake-cpp + version: 12.12.0 + build: ha633028_1 + build_number: 1 subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/brotli-bin-1.1.0-hb9d3cd8_2.conda - sha256: 261364d7445513b9a4debc345650fad13c627029bfc800655a266bf1e375bc65 - md5: c63b5e52939e795ba8d26e35d767a843 + url: https://conda.anaconda.org/conda-forge/linux-64/azure-storage-files-datalake-cpp-12.12.0-ha633028_1.conda + sha256: 5371e4f3f920933bb89b926a85a67f24388227419abd6e99f6086481e5e8d5f2 + md5: 7c1980f89dd41b097549782121a73490 depends: - __glibc >=2.17,<3.0.a0 - - libbrotlidec 1.1.0 hb9d3cd8_2 - - libbrotlienc 1.1.0 hb9d3cd8_2 + - azure-core-cpp >=1.14.0,<1.14.1.0a0 + - azure-storage-blobs-cpp >=12.13.0,<12.13.1.0a0 + - azure-storage-common-cpp >=12.8.0,<12.8.1.0a0 - libgcc >=13 + - libstdcxx >=13 license: MIT license_family: MIT purls: [] - size: 18881 - timestamp: 1725267688731 + size: 287366 + timestamp: 1728729530295 - kind: conda - name: brotli-python - version: 1.0.9 - build: py310h0f1eb42_9 - build_number: 9 - subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/brotli-python-1.0.9-py310h0f1eb42_9.conda - sha256: 5a006513c2be8726688ce1f25f88788c59c26c6c0e28d14455c534584b83ed8f - md5: 907f4a8f11d2e49fcf85322a8b71a188 + name: babel + version: 2.14.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/babel-2.14.0-pyhd8ed1ab_0.conda + sha256: 8584e3da58e92b72641c89ff9b98c51f0d5dbe76e527867804cbdf03ac91d8e6 + md5: 9669586875baeced8fc30c0826c3270e depends: - - libcxx >=14.0.6 - - python >=3.10,<3.11.0a0 - - python >=3.10,<3.11.0a0 *_cpython - - python_abi 3.10.* *_cp310 - constrains: - - libbrotlicommon 1.0.9 h1a8c8d9_9 + - python >=3.7 + - pytz + - setuptools + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/babel?source=hash-mapping + size: 7609750 + timestamp: 1702422720584 +- kind: conda + name: beautifulsoup4 + version: 4.12.3 + build: pyha770c72_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/beautifulsoup4-4.12.3-pyha770c72_0.conda + sha256: 7b05b2d0669029326c623b9df7a29fa49d1982a9e7e31b2fea34b4c9a4a72317 + md5: 332493000404d8411859539a5a630865 + depends: + - python >=3.6 + - soupsieve >=1.2 license: MIT license_family: MIT purls: - - pkg:pypi/brotli?source=hash-mapping - size: 325644 - timestamp: 1687884931491 + - pkg:pypi/beautifulsoup4?source=hash-mapping + size: 118200 + timestamp: 1705564819537 +- kind: conda + name: binutils_impl_linux-64 + version: '2.43' + build: h4bf12b8_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/binutils_impl_linux-64-2.43-h4bf12b8_1.conda + sha256: 6f945b3b150112c7c6e4783e6c3132410a7b226f2a8965adfd23895318151d46 + md5: 5f354010f194e85dc681dec92405ef9e + depends: + - ld_impl_linux-64 2.43 h712a8e2_1 + - sysroot_linux-64 + license: GPL-3.0-only + license_family: GPL + purls: [] + size: 6233238 + timestamp: 1727304698672 +- kind: conda + name: bleach + version: 6.1.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/bleach-6.1.0-pyhd8ed1ab_0.conda + sha256: 845e77ef495376c5c3c328ccfd746ca0ef1978150cae8eae61a300fe7755fb08 + md5: 0ed9d7c0e9afa7c025807a9a8136ea3e + depends: + - packaging + - python >=3.6 + - setuptools + - six >=1.9.0 + - webencodings + license: Apache-2.0 + license_family: Apache + purls: + - pkg:pypi/bleach?source=hash-mapping + size: 131220 + timestamp: 1696630354218 - kind: conda name: brotli-python version: 1.1.0 @@ -1902,6 +2897,29 @@ packages: - pkg:pypi/brotli?source=hash-mapping size: 321576 timestamp: 1725268612274 +- kind: conda + name: brotli-python + version: 1.1.0 + build: py310hb4ad77e_2 + build_number: 2 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/brotli-python-1.1.0-py310hb4ad77e_2.conda + sha256: a824cc3da3975a2812fac81a53902c07c5cf47d9dd344b783ff4401894de851f + md5: 3117b40143698e1afd17bca69f04e2d9 + depends: + - __osx >=11.0 + - libcxx >=17 + - python >=3.10,<3.11.0a0 + - python >=3.10,<3.11.0a0 *_cpython + - python_abi 3.10.* *_cp310 + constrains: + - libbrotlicommon 1.1.0 hd74edd7_2 + license: MIT + license_family: MIT + purls: + - pkg:pypi/brotli?source=hash-mapping + size: 339329 + timestamp: 1725268335778 - kind: conda name: brotli-python version: 1.1.0 @@ -1925,55 +2943,6 @@ packages: - pkg:pypi/brotli?source=hash-mapping size: 349668 timestamp: 1725267875087 -- kind: conda - name: brunsli - version: '0.1' - build: h046ec9c_0 - subdir: osx-64 - url: https://conda.anaconda.org/conda-forge/osx-64/brunsli-0.1-h046ec9c_0.tar.bz2 - sha256: e9abc53437889e03013b466521f928903fa27de770d16eb5f4ac6c4266a7b6a4 - md5: 28d47920c95b85499c9a61994cc49b87 - depends: - - brotli >=1.0.9,<2.0a0 - - libcxx >=11.0.0 - license: MIT - license_family: MIT - purls: [] - size: 183140 - timestamp: 1607309287088 -- kind: conda - name: brunsli - version: '0.1' - build: h9c3ff4c_0 - subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/brunsli-0.1-h9c3ff4c_0.tar.bz2 - sha256: 36da32e5a6beab7a9af39be1c8f42e5eca716e64562cb9d5e0d559c14406b11d - md5: c1ac6229d0bfd14f8354ff9ad2a26cad - depends: - - brotli >=1.0.9,<2.0a0 - - libgcc-ng >=9.3.0 - - libstdcxx-ng >=9.3.0 - license: MIT - license_family: MIT - purls: [] - size: 204879 - timestamp: 1607309237341 -- kind: conda - name: brunsli - version: '0.1' - build: h9f76cd9_0 - subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/brunsli-0.1-h9f76cd9_0.tar.bz2 - sha256: 816f929193a614b9a663e76e4267994ad99d04812b8a8e513e957d750deb4b04 - md5: 37a072dad6b844df1b5a32428bb08692 - depends: - - brotli >=1.0.9,<2.0a0 - - libcxx >=11.0.0 - license: MIT - license_family: MIT - purls: [] - size: 178300 - timestamp: 1607309265926 - kind: conda name: bzip2 version: 1.0.8 @@ -2104,81 +3073,6 @@ packages: purls: [] size: 205797 timestamp: 1729006575652 -- kind: conda - name: c-blosc2 - version: 2.12.0 - build: ha57e6be_0 - subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/c-blosc2-2.12.0-ha57e6be_0.conda - sha256: d111fbf3f73c55ae2d199b94b15f75eb9d363704196698767e7e105134fa2f9f - md5: c8ff2be7193a43f105c1cab36f5f39a0 - depends: - - libcxx >=15 - - lz4-c >=1.9.3,<1.10.0a0 - - zlib-ng >=2.0.7,<2.1.0a0 - - zstd >=1.5.5,<1.6.0a0 - license: BSD-3-Clause - license_family: BSD - purls: [] - size: 237019 - timestamp: 1703769395331 -- kind: conda - name: c-blosc2 - version: 2.12.0 - build: hb4ffafa_0 - subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/c-blosc2-2.12.0-hb4ffafa_0.conda - sha256: 68ae377f7baeb616e5a24facadebd8bf7a9cd48a297124be9d814ba92ff5e40f - md5: 1a9b16afb84d734a1bb2d196c308d477 - depends: - - libgcc-ng >=12 - - libstdcxx-ng >=12 - - lz4-c >=1.9.3,<1.10.0a0 - - zlib-ng >=2.0.7,<2.1.0a0 - - zstd >=1.5.5,<1.6.0a0 - license: BSD-3-Clause - license_family: BSD - purls: [] - size: 333736 - timestamp: 1703769067617 -- kind: conda - name: c-blosc2 - version: 2.14.3 - build: h0ae8482_0 - subdir: osx-64 - url: https://conda.anaconda.org/conda-forge/osx-64/c-blosc2-2.14.3-h0ae8482_0.conda - sha256: 98ae52dc0d1408452b70481730c02e4bf941a9600d1f9b1f21ecb4e89bf504a3 - md5: 67bb1c7bc9b81c13a206aaf2e1bcb9cd - depends: - - libcxx >=16 - - lz4-c >=1.9.3,<1.10.0a0 - - zlib-ng >=2.0.7,<2.1.0a0 - - zstd >=1.5.5,<1.6.0a0 - license: BSD-3-Clause - license_family: BSD - purls: [] - size: 278429 - timestamp: 1712415524207 -- kind: conda - name: c-blosc2 - version: 2.14.3 - build: h183a6f4_0 - subdir: win-64 - url: https://conda.anaconda.org/conda-forge/win-64/c-blosc2-2.14.3-h183a6f4_0.conda - sha256: 32aa27a47c96975f28fce8618d57d5d0b2a00cc4dc60836a214732fa1c0e4993 - md5: cb3c2e859ac57ae26fe5b0b35546fda9 - depends: - - lz4-c >=1.9.3,<1.10.0a0 - - ucrt >=10.0.20348.0 - - vc >=14.2,<15 - - vc14_runtime >=14.29.30139 - - zlib-ng >=2.0.7,<2.1.0a0 - - zstd >=1.5.5,<1.6.0a0 - license: BSD-3-Clause - license_family: BSD - purls: [] - size: 210505 - timestamp: 1712415661052 - kind: conda name: ca-certificates version: 2024.8.30 @@ -2265,26 +3159,26 @@ packages: - kind: conda name: cairo version: 1.16.0 - build: hc5b65c1_1017 - build_number: 1017 + build: h1e71087_1016 + build_number: 1016 subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/cairo-1.16.0-hc5b65c1_1017.conda - sha256: aa7571a6a16a41730659bd3fb4aac6df93c15ffaf1e583c9c6d8629f20cb12f3 - md5: 927bb81770b8a71936ff8c9a737eacea + url: https://conda.anaconda.org/conda-forge/osx-arm64/cairo-1.16.0-h1e71087_1016.conda + sha256: 318cad8770aa5aa14a5808e1d6b39458e11d2c2411254e795269986467f864ea + md5: be77f5630cabe6a116a033f6fd241aa2 depends: - fontconfig >=2.14.2,<3.0a0 - fonts-conda-ecosystem - freetype >=2.12.1,<3.0a0 - - icu >=73.2,<74.0a0 - - libglib >=2.76.4,<3.0a0 + - icu >=72.1,<73.0a0 + - libglib >=2.76.2,<3.0a0 - libpng >=1.6.39,<1.7.0a0 - libzlib >=1.2.13,<2.0.0a0 - pixman >=0.40.0,<1.0a0 - zlib license: LGPL-2.1-only or MPL-1.1 purls: [] - size: 998078 - timestamp: 1692961080870 + size: 996907 + timestamp: 1684639742046 - kind: conda name: cairo version: 1.18.0 @@ -2414,87 +3308,6 @@ packages: - pkg:pypi/cffi?source=hash-mapping size: 229844 timestamp: 1725560765436 -- kind: conda - name: cfitsio - version: 4.2.0 - build: h2f961c4_0 - subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/cfitsio-4.2.0-h2f961c4_0.conda - sha256: f9068349eacf0fcf26fcebba89185eb97d35cdc0ac74fbd7ed7d7eb307e717ab - md5: 10112a8b1b7b479c7d4e87c9ade892eb - depends: - - bzip2 >=1.0.8,<2.0a0 - - libcurl >=7.86.0,<9.0a0 - - libgfortran 5.* - - libgfortran5 >=11.3.0 - - libzlib >=1.2.13,<2.0.0a0 - license: LicenseRef-fitsio - purls: [] - size: 748569 - timestamp: 1668757847978 -- kind: conda - name: charls - version: 2.4.2 - build: h13dd4ca_0 - subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/charls-2.4.2-h13dd4ca_0.conda - sha256: b9f79954e6d37ad59016b434abfdd096a75ff08c6de14e5198bcea497a10fae5 - md5: 6faf3cf8df25572c7f70138a45f37363 - depends: - - libcxx >=15.0.7 - license: BSD-3-Clause - license_family: BSD - purls: [] - size: 116255 - timestamp: 1684263271583 -- kind: conda - name: charls - version: 2.4.2 - build: h1537add_0 - subdir: win-64 - url: https://conda.anaconda.org/conda-forge/win-64/charls-2.4.2-h1537add_0.conda - sha256: e6a3eab3fe65389900f39a78dc3bd86bbc030e2a746addb8b69a997495ca867c - md5: 0935766a50dfe44315b62ec0046a8779 - depends: - - ucrt >=10.0.20348.0 - - vc >=14.2,<15 - - vc14_runtime >=14.29.30139 - license: BSD-3-Clause - license_family: BSD - purls: [] - size: 95857 - timestamp: 1684263404702 -- kind: conda - name: charls - version: 2.4.2 - build: h59595ed_0 - subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/charls-2.4.2-h59595ed_0.conda - sha256: 18f1c43f91ccf28297f92b094c2c8dbe9c6e8241c0d3cbd6cda014a990660fdd - md5: 4336bd67920dd504cd8c6761d6a99645 - depends: - - libgcc-ng >=12 - - libstdcxx-ng >=12 - license: BSD-3-Clause - license_family: BSD - purls: [] - size: 150272 - timestamp: 1684262827894 -- kind: conda - name: charls - version: 2.4.2 - build: he965462_0 - subdir: osx-64 - url: https://conda.anaconda.org/conda-forge/osx-64/charls-2.4.2-he965462_0.conda - sha256: 5167aafc0bcc3849373dd8afb448cc387078210236e597f2ef8d2b1fe3d0b1a2 - md5: c267b3955138953f8ca4cb4d1f4f2d84 - depends: - - libcxx >=15.0.7 - license: BSD-3-Clause - license_family: BSD - purls: [] - size: 138062 - timestamp: 1684263362836 - kind: conda name: charset-normalizer version: 3.4.0 @@ -2603,13 +3416,12 @@ packages: timestamp: 1724028414707 - kind: conda name: coverage - version: 7.6.3 - build: py310h38315fa_1 - build_number: 1 + version: 7.6.4 + build: py310h38315fa_0 subdir: win-64 - url: https://conda.anaconda.org/conda-forge/win-64/coverage-7.6.3-py310h38315fa_1.conda - sha256: 6b87b8efd96afec06568522a13e2c3ff83abf8eaf91777421abb19285d9cd8d2 - md5: fae4f76cd69477dd64b4d2e16fc88419 + url: https://conda.anaconda.org/conda-forge/win-64/coverage-7.6.4-py310h38315fa_0.conda + sha256: 119e078840f9920c72dc6188649412ec6525af38a1a99cad7310a2e56a898729 + md5: f9fbf2c23507d4bd03ccb19760194b54 depends: - python >=3.10,<3.11.0a0 - python_abi 3.10.* *_cp310 @@ -2621,17 +3433,16 @@ packages: license_family: APACHE purls: - pkg:pypi/coverage?source=hash-mapping - size: 319322 - timestamp: 1729007403734 + size: 318570 + timestamp: 1729610642048 - kind: conda name: coverage - version: 7.6.3 - build: py310h5799be4_1 - build_number: 1 + version: 7.6.4 + build: py310h5799be4_0 subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/coverage-7.6.3-py310h5799be4_1.conda - sha256: 4c745ee746f1318a4bd878f41f75573b569a1fd995bbb8294ad9325f76203b34 - md5: 90767bf37c0ae9b36f097ff0d741bcd2 + url: https://conda.anaconda.org/conda-forge/osx-arm64/coverage-7.6.4-py310h5799be4_0.conda + sha256: 44d0cd60e7ed89500e191d43510bedb1d5002aeaf1f6e7afee734234cd954782 + md5: 380821e5415e15e36f5e85a2581dcbca depends: - __osx >=11.0 - python >=3.10,<3.11.0a0 @@ -2642,17 +3453,16 @@ packages: license_family: APACHE purls: - pkg:pypi/coverage?source=hash-mapping - size: 293572 - timestamp: 1729007047754 + size: 292349 + timestamp: 1729610262681 - kind: conda name: coverage - version: 7.6.3 - build: py310h72eadd2_1 - build_number: 1 + version: 7.6.4 + build: py310h72eadd2_0 subdir: osx-64 - url: https://conda.anaconda.org/conda-forge/osx-64/coverage-7.6.3-py310h72eadd2_1.conda - sha256: 5ca28369b39e10cf8411b80aebdf41a2e6decb6768caa3fda2edfd98758b8786 - md5: f5550aef0898d020b315a98100cb80bb + url: https://conda.anaconda.org/conda-forge/osx-64/coverage-7.6.4-py310h72eadd2_0.conda + sha256: 2ffc0d699648c1cdec8cee478c77b78dbf3d6cb8385b194a6994d3ddde104eca + md5: 9ccd2a6bb82330b55d40cbcd91e4a0a6 depends: - __osx >=10.13 - python >=3.10,<3.11.0a0 @@ -2662,17 +3472,16 @@ packages: license_family: APACHE purls: - pkg:pypi/coverage?source=hash-mapping - size: 292648 - timestamp: 1729007051764 + size: 293001 + timestamp: 1729610253701 - kind: conda name: coverage - version: 7.6.3 - build: py310h89163eb_1 - build_number: 1 + version: 7.6.4 + build: py310h89163eb_0 subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/coverage-7.6.3-py310h89163eb_1.conda - sha256: 53b497f02743ef0609c89e2a5f3cec5a2713d17ed39176cf5e5061a77cb7d6bf - md5: 24770578b1413dfbfedc865fd72cc298 + url: https://conda.anaconda.org/conda-forge/linux-64/coverage-7.6.4-py310h89163eb_0.conda + sha256: b4df2e45f8c43bc47c1695bfbd4c526ce5224812f9c41d9451c88541c36655ea + md5: 5222543cdb180f0fecc0d4b9f6b4a225 depends: - __glibc >=2.17,<3.0.a0 - libgcc >=13 @@ -2683,8 +3492,8 @@ packages: license_family: APACHE purls: - pkg:pypi/coverage?source=hash-mapping - size: 293977 - timestamp: 1729007175750 + size: 292863 + timestamp: 1729610244611 - kind: conda name: cpython version: 3.10.15 @@ -2702,131 +3511,73 @@ packages: purls: [] size: 48936 timestamp: 1729041693552 -- kind: conda - name: dav1d - version: 1.2.1 - build: h0dc2134_0 - subdir: osx-64 - url: https://conda.anaconda.org/conda-forge/osx-64/dav1d-1.2.1-h0dc2134_0.conda - sha256: ec71a835866b42e946cd2039a5f7a6458851a21890d315476f5e66790ac11c96 - md5: 9d88733c715300a39f8ca2e936b7808d - license: BSD-2-Clause - license_family: BSD - purls: [] - size: 668439 - timestamp: 1685696184631 -- kind: conda - name: dav1d - version: 1.2.1 - build: hb547adb_0 - subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/dav1d-1.2.1-hb547adb_0.conda - sha256: 93e077b880a85baec8227e8c72199220c7f87849ad32d02c14fb3807368260b8 - md5: 5a74cdee497e6b65173e10d94582fae6 - license: BSD-2-Clause - license_family: BSD - purls: [] - size: 316394 - timestamp: 1685695959391 -- kind: conda - name: dav1d - version: 1.2.1 - build: hcfcfb64_0 - subdir: win-64 - url: https://conda.anaconda.org/conda-forge/win-64/dav1d-1.2.1-hcfcfb64_0.conda - sha256: 2aa2083c9c186da7d6f975ccfbef654ed54fff27f4bc321dbcd12cee932ec2c4 - md5: ed2c27bda330e3f0ab41577cf8b9b585 - depends: - - ucrt >=10.0.20348.0 - - vc >=14.2,<15 - - vc14_runtime >=14.29.30139 - license: BSD-2-Clause - license_family: BSD - purls: [] - size: 618643 - timestamp: 1685696352968 -- kind: conda - name: dav1d - version: 1.2.1 - build: hd590300_0 - subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/dav1d-1.2.1-hd590300_0.conda - sha256: 22053a5842ca8ee1cf8e1a817138cdb5e647eb2c46979f84153f6ad7bde73020 - md5: 418c6ca5929a611cbd69204907a83995 - depends: - - libgcc-ng >=12 - license: BSD-2-Clause - license_family: BSD - purls: [] - size: 760229 - timestamp: 1685695754230 - kind: conda name: debugpy - version: 1.8.7 - build: py310h53e7c6a_0 + version: 1.8.8 + build: py310h6954a95_0 subdir: osx-64 - url: https://conda.anaconda.org/conda-forge/osx-64/debugpy-1.8.7-py310h53e7c6a_0.conda - sha256: 95585e6a4f65cd359dec24abd766c0c3941bf2e7cbba68d00e2167d5e35ededf - md5: 71cc2da398329bee8b2fdb078c6c502f + url: https://conda.anaconda.org/conda-forge/osx-64/debugpy-1.8.8-py310h6954a95_0.conda + sha256: 44209be80c5bda926a22eefd99834098a79e89873023501ce3031a667f9ea1a1 + md5: caedebaddb0d26c236b11999599ceef5 depends: - __osx >=10.13 - - libcxx >=17 + - libcxx >=18 - python >=3.10,<3.11.0a0 - python_abi 3.10.* *_cp310 license: MIT license_family: MIT purls: - pkg:pypi/debugpy?source=hash-mapping - size: 2049152 - timestamp: 1728594342700 + size: 2055174 + timestamp: 1731045112027 - kind: conda name: debugpy - version: 1.8.7 - build: py310h9e98ed7_0 - subdir: win-64 - url: https://conda.anaconda.org/conda-forge/win-64/debugpy-1.8.7-py310h9e98ed7_0.conda - sha256: 8a4efe16d3034ab0ccd6243e055b9e421f180abe34e20968bfa7cd3b83a08518 - md5: 8c8390e399f1728f701186227cfe4d3a + version: 1.8.8 + build: py310h853098b_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/debugpy-1.8.8-py310h853098b_0.conda + sha256: 42dd02b5ba94f694245fcd789de86ded910bfc6a02a2b98593fd3024384bc000 + md5: 09128a873697e8a8e375bc9ea390e2d1 depends: + - __osx >=11.0 + - libcxx >=18 - python >=3.10,<3.11.0a0 + - python >=3.10,<3.11.0a0 *_cpython - python_abi 3.10.* *_cp310 - - ucrt >=10.0.20348.0 - - vc >=14.2,<15 - - vc14_runtime >=14.29.30139 license: MIT license_family: MIT purls: - pkg:pypi/debugpy?source=hash-mapping - size: 3092827 - timestamp: 1728594977065 + size: 2092262 + timestamp: 1731045180185 - kind: conda name: debugpy - version: 1.8.7 - build: py310hb4ad77e_0 - subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/debugpy-1.8.7-py310hb4ad77e_0.conda - sha256: b80310c7b22ba18fe84e8f6902d8852f815ffa79b64898b869066b338e9d0643 - md5: 298692f5fe67ee787bb4e157dab81ada + version: 1.8.8 + build: py310h9e98ed7_0 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/debugpy-1.8.8-py310h9e98ed7_0.conda + sha256: 090fa899742496e0b23e973a5324615628e5271d156015a15c01a85592ddcdd2 + md5: 4639298197f4e09b47b166412dd92b5c depends: - - __osx >=11.0 - - libcxx >=17 - python >=3.10,<3.11.0a0 - - python >=3.10,<3.11.0a0 *_cpython - python_abi 3.10.* *_cp310 + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 license: MIT license_family: MIT purls: - pkg:pypi/debugpy?source=hash-mapping - size: 2051562 - timestamp: 1728594341189 + size: 3112822 + timestamp: 1731045130190 - kind: conda name: debugpy - version: 1.8.7 + version: 1.8.8 build: py310hf71b8c6_0 subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/debugpy-1.8.7-py310hf71b8c6_0.conda - sha256: 8ac9105a307992a8ba58a2d95c825d8ad60a7511fb51da8cfa8d2e3b8859ca82 - md5: 62f74768159cd1b97db23a4d6d05516e + url: https://conda.anaconda.org/conda-forge/linux-64/debugpy-1.8.8-py310hf71b8c6_0.conda + sha256: 7f41768a009d06f7551e86fd38e7c95c32a7620b559f46dfb78c9e2d1f54c86a + md5: 1e12c55d575c0820836bf008f12cd98c depends: - __glibc >=2.17,<3.0.a0 - libgcc >=13 @@ -2837,8 +3588,8 @@ packages: license_family: MIT purls: - pkg:pypi/debugpy?source=hash-mapping - size: 2169154 - timestamp: 1728594300052 + size: 2140733 + timestamp: 1731045018424 - kind: conda name: decorator version: 5.1.1 @@ -3152,22 +3903,6 @@ packages: purls: [] size: 634972 timestamp: 1694615932610 -- kind: conda - name: freetype - version: 2.12.1 - build: h60636b9_2 - build_number: 2 - subdir: osx-64 - url: https://conda.anaconda.org/conda-forge/osx-64/freetype-2.12.1-h60636b9_2.conda - sha256: b292cf5a25f094eeb4b66e37d99a97894aafd04a5683980852a8cbddccdc8e4e - md5: 25152fce119320c980e5470e64834b50 - depends: - - libpng >=1.6.39,<1.7.0a0 - - libzlib >=1.2.13,<2.0.0a0 - license: GPL-2.0-only OR FTL - purls: [] - size: 599300 - timestamp: 1694616137838 - kind: conda name: freetype version: 2.12.1 @@ -3184,25 +3919,6 @@ packages: purls: [] size: 596430 timestamp: 1694616332835 -- kind: conda - name: freetype - version: 2.12.1 - build: hdaf720e_2 - build_number: 2 - subdir: win-64 - url: https://conda.anaconda.org/conda-forge/win-64/freetype-2.12.1-hdaf720e_2.conda - sha256: 2c53ee8879e05e149a9e525481d36adfd660a6abda26fd731376fa64ff03e728 - md5: 3761b23693f768dc75a8fd0a73ca053f - depends: - - libpng >=1.6.39,<1.7.0a0 - - libzlib >=1.2.13,<2.0.0a0 - - ucrt >=10.0.20348.0 - - vc >=14.2,<15 - - vc14_runtime >=14.29.30139 - license: GPL-2.0-only OR FTL - purls: [] - size: 510306 - timestamp: 1694616398888 - kind: conda name: fribidi version: 1.0.10 @@ -3336,6 +4052,58 @@ packages: purls: [] size: 2467439 timestamp: 1723627140130 +- kind: conda + name: gflags + version: 2.2.2 + build: h5888daf_1005 + build_number: 1005 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/gflags-2.2.2-h5888daf_1005.conda + sha256: 6c33bf0c4d8f418546ba9c250db4e4221040936aef8956353bc764d4877bc39a + md5: d411fc29e338efb48c5fd4576d71d881 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - libstdcxx >=13 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 119654 + timestamp: 1726600001928 +- kind: conda + name: gflags + version: 2.2.2 + build: hac325c4_1005 + build_number: 1005 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/gflags-2.2.2-hac325c4_1005.conda + sha256: c0bea66f71a6f4baa8d4f0248e17f65033d558d9e882c0af571b38bcca3e4b46 + md5: a26de8814083a6971f14f9c8c3cb36c2 + depends: + - __osx >=10.13 + - libcxx >=17 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 84946 + timestamp: 1726600054963 +- kind: conda + name: gflags + version: 2.2.2 + build: hf9b8971_1005 + build_number: 1005 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/gflags-2.2.2-hf9b8971_1005.conda + sha256: fd56ed8a1dab72ab90d8a8929b6f916a6d9220ca297ff077f8f04c5ed3408e20 + md5: 57a511a5905caa37540eb914dfcbf1fb + depends: + - __osx >=11.0 + - libcxx >=17 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 82090 + timestamp: 1726600145480 - kind: conda name: giflib version: 5.2.1 @@ -3350,36 +4118,6 @@ packages: purls: [] size: 71963 timestamp: 1678718059849 -- kind: conda - name: giflib - version: 5.2.2 - build: h10d778d_0 - subdir: osx-64 - url: https://conda.anaconda.org/conda-forge/osx-64/giflib-5.2.2-h10d778d_0.conda - sha256: 2c825df829097536314a195ae5cacaa8695209da6b4400135a65d8e23c008ff8 - md5: 03e8c9b4d3da5f3d6eabdd020c2d63ac - license: MIT - license_family: MIT - purls: [] - size: 74516 - timestamp: 1712692686914 -- kind: conda - name: giflib - version: 5.2.2 - build: h64bf75a_0 - subdir: win-64 - url: https://conda.anaconda.org/conda-forge/win-64/giflib-5.2.2-h64bf75a_0.conda - sha256: 85fa240e749a1a88a588b6895c53f253d990697749b3a7b1ed8bb92ebb3d64c8 - md5: 72f424715c78a04fd5b991ee5dca820f - depends: - - ucrt >=10.0.20348.0 - - vc >=14.2,<15 - - vc14_runtime >=14.29.30139 - license: MIT - license_family: MIT - purls: [] - size: 84497 - timestamp: 1712692952874 - kind: conda name: giflib version: 5.2.2 @@ -3430,6 +4168,57 @@ packages: purls: [] size: 100669 timestamp: 1688694886885 +- kind: conda + name: glog + version: 0.7.1 + build: h2790a97_0 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/glog-0.7.1-h2790a97_0.conda + sha256: dd56547db8625eb5c91bb0a9fbe8bd6f5c7fbf5b6059d46365e94472c46b24f9 + md5: 06cf91665775b0da395229cd4331b27d + depends: + - __osx >=10.13 + - gflags >=2.2.2,<2.3.0a0 + - libcxx >=16 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 117017 + timestamp: 1718284325443 +- kind: conda + name: glog + version: 0.7.1 + build: hbabe93e_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/glog-0.7.1-hbabe93e_0.conda + sha256: dc824dc1d0aa358e28da2ecbbb9f03d932d976c8dca11214aa1dcdfcbd054ba2 + md5: ff862eebdfeb2fd048ae9dc92510baca + depends: + - gflags >=2.2.2,<2.3.0a0 + - libgcc-ng >=12 + - libstdcxx-ng >=12 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 143452 + timestamp: 1718284177264 +- kind: conda + name: glog + version: 0.7.1 + build: heb240a5_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/glog-0.7.1-heb240a5_0.conda + sha256: 9fc77de416953aa959039db72bc41bfa4600ae3ff84acad04a7d0c1ab9552602 + md5: fef68d0a95aa5b84b5c1a4f6f3bf40e1 + depends: + - __osx >=11.0 + - gflags >=2.2.2,<2.3.0a0 + - libcxx >=16 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 112215 + timestamp: 1718284365403 - kind: conda name: graphite2 version: 1.3.13 @@ -3465,93 +4254,90 @@ packages: timestamp: 1711634444608 - kind: conda name: grpcio - version: 1.56.2 - build: py310h0d4bf3c_1 - build_number: 1 - subdir: osx-64 - url: https://conda.anaconda.org/conda-forge/osx-64/grpcio-1.56.2-py310h0d4bf3c_1.conda - sha256: ab9c89203aaa5e32cbfbc955ab8fdb6e36a59827f8658f072e148205f9daf082 - md5: 07b3f0664ef56646ee40424ee7657e78 + version: 1.62.2 + build: py310hf7687f1_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/grpcio-1.62.2-py310hf7687f1_0.conda + sha256: c02dfeffddf5e45ca8ec24c6130a9664dff583929b60b573fb429827fa57fbdc + md5: 620f17aeaa77ae3c8b3c6fce60a4f360 depends: - - __osx >=10.13 - - libcxx >=15.0.7 - - libgrpc 1.56.2 he6801ca_1 + - libcxx >=16 + - libgrpc 1.62.2 h9c18a4f_0 - libzlib >=1.2.13,<2.0.0a0 - python >=3.10,<3.11.0a0 + - python >=3.10,<3.11.0a0 *_cpython - python_abi 3.10.* *_cp310 license: Apache-2.0 license_family: APACHE purls: - pkg:pypi/grpcio?source=hash-mapping - size: 710917 - timestamp: 1692025409041 + size: 933115 + timestamp: 1713393249932 - kind: conda name: grpcio - version: 1.56.2 - build: py310h1b8f574_1 - build_number: 1 - subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/grpcio-1.56.2-py310h1b8f574_1.conda - sha256: c2eda195f4de3210c1798439a37c075337d331ab2fe0cc9e4a6acb115a15a1ab - md5: 08d2538a6907851ea70d8f7cddc2f0d3 + version: 1.67.1 + build: py310h0288bfe_0 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/grpcio-1.67.1-py310h0288bfe_0.conda + sha256: 2e84a4a105341d3450f323f8ffffd41ceeb5b35d5b9bc28dfdd86291e862fff2 + md5: b576b4d8af5eb19cbce7bf5234a040fc depends: - - libgcc-ng >=12 - - libgrpc 1.56.2 h3905398_1 - - libstdcxx-ng >=12 - - libzlib >=1.2.13,<2.0.0a0 + - libgrpc 1.67.1 h7aa3b8a_0 + - libzlib >=1.3.1,<2.0a0 - python >=3.10,<3.11.0a0 - python_abi 3.10.* *_cp310 + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 license: Apache-2.0 license_family: APACHE purls: - pkg:pypi/grpcio?source=hash-mapping - size: 764791 - timestamp: 1692023633876 + size: 687004 + timestamp: 1730238001328 - kind: conda name: grpcio - version: 1.56.2 - build: py310h95b248a_1 - build_number: 1 - subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/grpcio-1.56.2-py310h95b248a_1.conda - sha256: f1b22c8492fcbb41021e909c75786a6c864eb29115098076a8af0a5efe45288e - md5: ed8ce58613462ac09ebe53a3606a74d5 + version: 1.67.1 + build: py310h1a6248f_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/grpcio-1.67.1-py310h1a6248f_0.conda + sha256: 326e1a23b39cd25b3895e12766cd20103eacb9f2b29ab7e86774dfbb62a4eada + md5: 957e6c171e1625b11a731457dbdce5de depends: - - libcxx >=15.0.7 - - libgrpc 1.56.2 h9075ed4_1 - - libzlib >=1.2.13,<2.0.0a0 + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - libgrpc 1.67.1 hc2c308b_0 + - libstdcxx >=13 + - libzlib >=1.3.1,<2.0a0 - python >=3.10,<3.11.0a0 - - python >=3.10,<3.11.0a0 *_cpython - python_abi 3.10.* *_cp310 license: Apache-2.0 license_family: APACHE purls: - pkg:pypi/grpcio?source=hash-mapping - size: 695887 - timestamp: 1692025592968 + size: 850957 + timestamp: 1730236627853 - kind: conda name: grpcio - version: 1.56.2 - build: py310hb84602e_1 - build_number: 1 - subdir: win-64 - url: https://conda.anaconda.org/conda-forge/win-64/grpcio-1.56.2-py310hb84602e_1.conda - sha256: bc0bcd5a1aa53f87ae6d2ca35f2a1b5f38145fc337c18e4e0f77bc275aa0a669 - md5: 9a0b9fafd6453839c986d8d876ce202a + version: 1.67.1 + build: py310h8ec686d_0 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/grpcio-1.67.1-py310h8ec686d_0.conda + sha256: 358cc64f4755fc9883540dc9443fdaee43414e9b0051ade8113ae0bf222d6d52 + md5: b028ce33c683df70e6b3c04c3b86398b depends: - - libgrpc 1.56.2 hea2d5f7_1 - - libzlib >=1.2.13,<2.0.0a0 + - __osx >=10.13 + - libcxx >=17 + - libgrpc 1.67.1 he6e0b18_0 + - libzlib >=1.3.1,<2.0a0 - python >=3.10,<3.11.0a0 - python_abi 3.10.* *_cp310 - - ucrt >=10.0.20348.0 - - vc >=14.2,<15 - - vc14_runtime >=14.29.30139 license: Apache-2.0 license_family: APACHE purls: - pkg:pypi/grpcio?source=hash-mapping - size: 607527 - timestamp: 1692025811162 + size: 785172 + timestamp: 1730236256862 - kind: conda name: h11 version: 0.14.0 @@ -3591,24 +4377,24 @@ packages: timestamp: 1634280590080 - kind: conda name: harfbuzz - version: 8.2.0 - build: hf1a6348_0 + version: 7.3.0 + build: h46e5fef_0 subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/harfbuzz-8.2.0-hf1a6348_0.conda - sha256: 7992f8d1045e89226333f93a5958aa20922f9b733b4dcd030577a2a6880d27e5 - md5: 62de902c66efe9888a4ff24257020c8f + url: https://conda.anaconda.org/conda-forge/osx-arm64/harfbuzz-7.3.0-h46e5fef_0.conda + sha256: 29a2eb09dce14b93687660cf0efcdd2fb879a3786bce17ab73e56fbb05b3d26a + md5: 5247712cd97eeda510d1436560b13833 depends: - cairo >=1.16.0,<2.0a0 - freetype >=2.12.1,<3.0a0 - graphite2 - - icu >=73.2,<74.0a0 + - icu >=72.1,<73.0a0 - libcxx >=15.0.7 - - libglib >=2.76.4,<3.0a0 + - libglib >=2.76.2,<3.0a0 license: MIT license_family: MIT purls: [] - size: 1244033 - timestamp: 1694361324971 + size: 1197980 + timestamp: 1683685100684 - kind: conda name: harfbuzz version: 8.5.0 @@ -3664,6 +4450,19 @@ packages: - pkg:pypi/hyperframe?source=hash-mapping size: 14646 timestamp: 1619110249723 +- kind: conda + name: icu + version: '72.1' + build: he12128b_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/icu-72.1-he12128b_0.conda + sha256: 997835c56e899f4717b6707ab0734c27e7cdd8c735c952334314a7c9d59808e1 + md5: d1a11dfc54168a07856dbf87f393ca82 + license: MIT + license_family: MIT + purls: [] + size: 11700891 + timestamp: 1679315525149 - kind: conda name: icu version: '73.2' @@ -3680,19 +4479,6 @@ packages: purls: [] size: 12089150 timestamp: 1692900650789 -- kind: conda - name: icu - version: '73.2' - build: hc8870d7_0 - subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/icu-73.2-hc8870d7_0.conda - sha256: ff9cd0c6cd1349954c801fb443c94192b637e1b414514539f3c49c56a39f51b1 - md5: 8521bd47c0e11c5902535bb1a17c565f - license: MIT - license_family: MIT - purls: [] - size: 11997841 - timestamp: 1692902104771 - kind: conda name: icu version: '73.2' @@ -3723,217 +4509,71 @@ packages: - pkg:pypi/idna?source=hash-mapping size: 49837 timestamp: 1726459583613 -- kind: conda - name: imagecodecs - version: 2023.1.23 - build: py310hd30fb6a_0 - subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/imagecodecs-2023.1.23-py310hd30fb6a_0.conda - sha256: a83e53dd6934d54e228f437e8f4e76491b2d5af070ff32a944e47472556f2862 - md5: 5aef93755b0fd85fc100cba5fa43f63a - depends: - - blosc >=1.21.3,<2.0a0 - - brunsli >=0.1,<1.0a0 - - bzip2 >=1.0.8,<2.0a0 - - c-blosc2 >=2.6.1,<2.13.0a0 - - cfitsio >=4.2.0,<4.2.1.0a0 - - charls >=2.4.1,<2.5.0a0 - - giflib >=5.2.1,<5.3.0a0 - - jpeg >=9e,<10a - - jxrlib >=1.1,<1.2.0a0 - - lcms2 >=2.14,<3.0a0 - - lerc >=4.0.0,<5.0a0 - - libaec >=1.0.6,<2.0a0 - - libavif >=0.11.1,<0.11.2.0a0 - - libbrotlicommon >=1.0.9,<1.1.0a0 - - libbrotlidec >=1.0.9,<1.1.0a0 - - libbrotlienc >=1.0.9,<1.1.0a0 - - libcxx >=14.0.6 - - libdeflate >=1.17,<1.18.0a0 - - libpng >=1.6.39,<1.7.0a0 - - libtiff >=4.5.0,<4.6.0a0 - - libwebp-base >=1.2.4,<2.0a0 - - libzlib >=1.2.13,<2.0.0a0 - - libzopfli >=1.0.3,<1.1.0a0 - - lz4-c >=1.9.3,<1.10.0a0 - - numpy >=1.21.6,<2.0a0 - - openjpeg >=2.5.0,<3.0a0 - - python >=3.10,<3.11.0a0 - - python >=3.10,<3.11.0a0 *_cpython - - python_abi 3.10.* *_cp310 - - snappy >=1.1.9,<1.2.0a0 - - xz >=5.2.6,<6.0a0 - - zfp >=1.0.0,<2.0a0 - - zstd >=1.5.2,<1.6.0a0 - license: BSD-3-Clause - license_family: BSD - purls: - - pkg:pypi/imagecodecs?source=hash-mapping - size: 1612235 - timestamp: 1674483915355 -- kind: conda - name: imagecodecs - version: 2023.9.18 - build: py310h3a85d3a_0 - subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/imagecodecs-2023.9.18-py310h3a85d3a_0.conda - sha256: 29ff98858cf4e9d149ccc047221de61b3e5e3171457fa52b9e0dc8d0f8579d79 - md5: 717a5eec4b393f58f161c9c84386931b - depends: - - blosc >=1.21.5,<2.0a0 - - brunsli >=0.1,<1.0a0 - - bzip2 >=1.0.8,<2.0a0 - - c-blosc2 >=2.10.2,<2.13.0a0 - - charls >=2.4.2,<2.5.0a0 - - giflib >=5.2.1,<5.3.0a0 - - jxrlib >=1.1,<1.2.0a0 - - lcms2 >=2.15,<3.0a0 - - lerc >=4.0.0,<5.0a0 - - libaec >=1.0.6,<2.0a0 - - libavif16 >=1.0.1,<2.0a0 - - libbrotlicommon >=1.1.0,<1.2.0a0 - - libbrotlidec >=1.1.0,<1.2.0a0 - - libbrotlienc >=1.1.0,<1.2.0a0 - - libdeflate >=1.19,<1.20.0a0 - - libgcc-ng >=12 - - libjpeg-turbo >=2.1.5.1,<3.0a0 - - libpng >=1.6.39,<1.7.0a0 - - libstdcxx-ng >=12 - - libtiff >=4.6.0,<4.8.0a0 - - libwebp-base >=1.3.2,<2.0a0 - - libzlib >=1.2.13,<2.0.0a0 - - libzopfli >=1.0.3,<1.1.0a0 - - lz4-c >=1.9.3,<1.10.0a0 - - numpy >=1.22.4,<2.0a0 - - openjpeg >=2.5.0,<3.0a0 - - python >=3.10,<3.11.0a0 - - python_abi 3.10.* *_cp310 - - snappy >=1.1.10,<1.2.0a0 - - xz >=5.2.6,<6.0a0 - - zfp >=1.0.0,<2.0a0 - - zstd >=1.5.5,<1.6.0a0 - license: BSD-3-Clause - license_family: BSD - purls: - - pkg:pypi/imagecodecs?source=hash-mapping - size: 1924280 - timestamp: 1695139671006 -- kind: conda - name: imagecodecs - version: 2024.1.1 - build: py310h89a1481_3 - build_number: 3 - subdir: osx-64 - url: https://conda.anaconda.org/conda-forge/osx-64/imagecodecs-2024.1.1-py310h89a1481_3.conda - sha256: eca133b2fc45e1b48d7187c6fb2e7401056b8b09725d26e0b3504dd09e286b36 - md5: a3817d728ce12379a17d4b560e94f123 - depends: - - blosc >=1.21.5,<2.0a0 - - brunsli >=0.1,<1.0a0 - - bzip2 >=1.0.8,<2.0a0 - - c-blosc2 >=2.13.2,<2.14.4.0a0 - - charls >=2.4.2,<2.5.0a0 - - giflib >=5.2.1,<5.3.0a0 - - jxrlib >=1.1,<1.2.0a0 - - lcms2 >=2.16,<3.0a0 - - lerc >=4.0.0,<5.0a0 - - libaec >=1.1.3,<2.0a0 - - libavif16 >=1.0.1,<2.0a0 - - libbrotlicommon >=1.1.0,<1.2.0a0 - - libbrotlidec >=1.1.0,<1.2.0a0 - - libbrotlienc >=1.1.0,<1.2.0a0 - - libcxx >=16 - - libdeflate >=1.20,<1.21.0a0 - - libjpeg-turbo >=3.0.0,<4.0a0 - - libjxl >=0.10,<0.11.0a0 - - libpng >=1.6.43,<1.7.0a0 - - libtiff >=4.6.0,<4.8.0a0 - - libwebp-base >=1.3.2,<2.0a0 - - libzlib >=1.2.13,<2.0.0a0 - - libzopfli >=1.0.3,<1.1.0a0 - - lz4-c >=1.9.3,<1.10.0a0 - - numpy >=1.22.4,<2.0a0 - - openjpeg >=2.5.2,<3.0a0 - - python >=3.10,<3.11.0a0 - - python_abi 3.10.* *_cp310 - - snappy >=1.1.10,<1.2.0a0 - - xz >=5.2.6,<6.0a0 - - zfp >=1.0.1,<2.0a0 - - zstd >=1.5.5,<1.6.0a0 - license: BSD-3-Clause - license_family: BSD - purls: - - pkg:pypi/imagecodecs?source=hash-mapping - size: 1647027 - timestamp: 1711243512917 -- kind: conda - name: imagecodecs - version: 2024.1.1 - build: py310hda7f504_3 - build_number: 3 - subdir: win-64 - url: https://conda.anaconda.org/conda-forge/win-64/imagecodecs-2024.1.1-py310hda7f504_3.conda - sha256: 9f5fc6486ae2e1c15280f220998dbc4e8dce4957796bb9d3be47facbd86d2e0f - md5: 7283584a831c8cd864181437d8ea9709 - depends: - - blosc >=1.21.5,<2.0a0 - - bzip2 >=1.0.8,<2.0a0 - - c-blosc2 >=2.13.2,<2.14.4.0a0 - - charls >=2.4.2,<2.5.0a0 - - giflib >=5.2.1,<5.3.0a0 - - jxrlib >=1.1,<1.2.0a0 - - lcms2 >=2.16,<3.0a0 - - lerc >=4.0.0,<5.0a0 - - libaec >=1.1.3,<2.0a0 - - libavif >=1.0.1,<1.0.2.0a0 - - libbrotlicommon >=1.1.0,<1.2.0a0 - - libbrotlidec >=1.1.0,<1.2.0a0 - - libbrotlienc >=1.1.0,<1.2.0a0 - - libdeflate >=1.20,<1.21.0a0 - - libjpeg-turbo >=3.0.0,<4.0a0 - - libpng >=1.6.43,<1.7.0a0 - - libtiff >=4.6.0,<4.8.0a0 - - libwebp-base >=1.3.2,<2.0a0 - - libzlib >=1.2.13,<2.0.0a0 - - libzopfli >=1.0.3,<1.1.0a0 - - lz4-c >=1.9.3,<1.10.0a0 - - numpy >=1.22.4,<2.0a0 - - openjpeg >=2.5.2,<3.0a0 - - python >=3.10,<3.11.0a0 - - python_abi 3.10.* *_cp310 - - snappy >=1.1.10,<1.2.0a0 - - ucrt >=10.0.20348.0 - - vc >=14.2,<15 - - vc14_runtime >=14.29.30139 - - xz >=5.2.6,<6.0a0 - - zfp >=1.0.1,<2.0a0 - - zstd >=1.5.5,<1.6.0a0 - license: BSD-3-Clause - license_family: BSD - purls: - - pkg:pypi/imagecodecs?source=hash-mapping - size: 1579418 - timestamp: 1711243735862 -- kind: conda +- kind: pypi name: imageio version: 2.36.0 - build: pyh12aca89_1 - build_number: 1 - subdir: noarch - noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/imageio-2.36.0-pyh12aca89_1.conda - sha256: 1fbe1bdbef2c19643c6f4e2c216305d8d54860db80968fecfa7566277518132f - md5: 36349844ff73fcd0140ee7f30745f0bf - depends: + url: https://files.pythonhosted.org/packages/4e/e7/26045404a30c8a200e960fb54fbaf4b73d12e58cd28e03b306b084253f4f/imageio-2.36.0-py3-none-any.whl + sha256: 471f1eda55618ee44a3c9960911c35e647d9284c68f077e868df633398f137f0 + requires_dist: - numpy - - pillow >=8.3.2 - - python >=3 - license: BSD-2-Clause - license_family: BSD - purls: - - pkg:pypi/imageio?source=hash-mapping - size: 292067 - timestamp: 1729190805302 + - pillow>=8.3.2 + - astropy ; extra == 'all-plugins' + - av ; extra == 'all-plugins' + - imageio-ffmpeg ; extra == 'all-plugins' + - numpy>2 ; extra == 'all-plugins' + - pillow-heif ; extra == 'all-plugins' + - psutil ; extra == 'all-plugins' + - rawpy ; extra == 'all-plugins' + - tifffile ; extra == 'all-plugins' + - av ; extra == 'all-plugins-pypy' + - imageio-ffmpeg ; extra == 'all-plugins-pypy' + - pillow-heif ; extra == 'all-plugins-pypy' + - psutil ; extra == 'all-plugins-pypy' + - tifffile ; extra == 'all-plugins-pypy' + - wheel ; extra == 'build' + - pytest ; extra == 'dev' + - pytest-cov ; extra == 'dev' + - fsspec[github] ; extra == 'dev' + - black ; extra == 'dev' + - flake8 ; extra == 'dev' + - sphinx<6 ; extra == 'docs' + - numpydoc ; extra == 'docs' + - pydata-sphinx-theme ; extra == 'docs' + - imageio-ffmpeg ; extra == 'ffmpeg' + - psutil ; extra == 'ffmpeg' + - astropy ; extra == 'fits' + - astropy ; extra == 'full' + - av ; extra == 'full' + - black ; extra == 'full' + - flake8 ; extra == 'full' + - fsspec[github] ; extra == 'full' + - gdal ; extra == 'full' + - imageio-ffmpeg ; extra == 'full' + - itk ; extra == 'full' + - numpy>2 ; extra == 'full' + - numpydoc ; extra == 'full' + - pillow-heif ; extra == 'full' + - psutil ; extra == 'full' + - pydata-sphinx-theme ; extra == 'full' + - pytest ; extra == 'full' + - pytest-cov ; extra == 'full' + - rawpy ; extra == 'full' + - sphinx<6 ; extra == 'full' + - tifffile ; extra == 'full' + - wheel ; extra == 'full' + - gdal ; extra == 'gdal' + - itk ; extra == 'itk' + - black ; extra == 'linting' + - flake8 ; extra == 'linting' + - pillow-heif ; extra == 'pillow-heif' + - av ; extra == 'pyav' + - rawpy ; extra == 'rawpy' + - numpy>2 ; extra == 'rawpy' + - pytest ; extra == 'test' + - pytest-cov ; extra == 'test' + - fsspec[github] ; extra == 'test' + - tifffile ; extra == 'tifffile' + requires_python: '>=3.9' - kind: conda name: imagesize version: 1.4.1 @@ -4711,68 +5351,6 @@ packages: - pkg:pypi/jupytext?source=hash-mapping size: 179371 timestamp: 1690758199047 -- kind: conda - name: jxrlib - version: '1.1' - build: h10d778d_3 - build_number: 3 - subdir: osx-64 - url: https://conda.anaconda.org/conda-forge/osx-64/jxrlib-1.1-h10d778d_3.conda - sha256: a548a4be14a4c76d6d992a5c1feffcbb08062f5c57abc6e4278d40c2c9a7185b - md5: cfaf81d843a80812fe16a68bdae60562 - license: BSD-2-Clause - license_family: BSD - purls: [] - size: 220376 - timestamp: 1703334073774 -- kind: conda - name: jxrlib - version: '1.1' - build: h93a5062_3 - build_number: 3 - subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/jxrlib-1.1-h93a5062_3.conda - sha256: c9e0d3cf9255d4585fa9b3d07ace3bd934fdc6a67ef4532e5507282eff2364ab - md5: 879997fd868f8e9e4c2a12aec8583799 - license: BSD-2-Clause - license_family: BSD - purls: [] - size: 197843 - timestamp: 1703334079437 -- kind: conda - name: jxrlib - version: '1.1' - build: hcfcfb64_3 - build_number: 3 - subdir: win-64 - url: https://conda.anaconda.org/conda-forge/win-64/jxrlib-1.1-hcfcfb64_3.conda - sha256: a9ac265bcf65fce57cfb6512a1b072d5489445d14aa1b60c9bdf73370cf261b2 - md5: a9dff8432c11dfa980346e934c29ca3f - depends: - - ucrt >=10.0.20348.0 - - vc >=14.2,<15 - - vc14_runtime >=14.29.30139 - license: BSD-2-Clause - license_family: BSD - purls: [] - size: 355340 - timestamp: 1703334132631 -- kind: conda - name: jxrlib - version: '1.1' - build: hd590300_3 - build_number: 3 - subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/jxrlib-1.1-hd590300_3.conda - sha256: 2057ca87b313bde5b74b93b0e696f8faab69acd4cb0edebb78469f3f388040c0 - md5: 5aeabe88534ea4169d4c49998f293d6c - depends: - - libgcc-ng >=12 - license: BSD-2-Clause - license_family: BSD - purls: [] - size: 239104 - timestamp: 1703333860145 - kind: conda name: kernel-headers_linux-64 version: 3.10.0 @@ -4880,60 +5458,19 @@ packages: purls: [] size: 712034 timestamp: 1719463874284 -- kind: conda +- kind: pypi name: lazy-loader version: '0.4' - build: pyhd8ed1ab_1 - build_number: 1 - subdir: noarch - noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/lazy-loader-0.4-pyhd8ed1ab_1.conda - sha256: c1ca8dc910d7c32d431d8ef4acdea8da2e876c62f096b99591f712fd62cf7269 - md5: 4809b9f4c6ce106d443c3f90b8e10db2 - depends: - - importlib-metadata + url: https://files.pythonhosted.org/packages/83/60/d497a310bde3f01cb805196ac61b7ad6dc5dcf8dce66634dc34364b20b4f/lazy_loader-0.4-py3-none-any.whl + sha256: 342aa8e14d543a154047afb4ba8ef17f5563baad3fc610d7b15b213b0f119efc + requires_dist: - packaging - - python >=3.7 - license: BSD-3-Clause - license_family: BSD - purls: - - pkg:pypi/lazy-loader?source=hash-mapping - size: 16193 - timestamp: 1723774444381 -- kind: conda - name: lazy_loader - version: '0.4' - build: pyhd8ed1ab_1 - build_number: 1 - subdir: noarch - noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/lazy_loader-0.4-pyhd8ed1ab_1.conda - sha256: bf5a563f4e7d2bd5d3ec0644c0cb452b1e9e4ee68a221f6c9718872a22d4fa7a - md5: ec6f70b8a5242936567d4f886726a372 - depends: - - lazy-loader 0.4 pyhd8ed1ab_1 - - python >=3.7 - license: BSD-3-Clause - license_family: BSD - purls: [] - size: 6513 - timestamp: 1723774453792 -- kind: conda - name: lcms2 - version: '2.15' - build: h481adae_0 - subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/lcms2-2.15-h481adae_0.conda - sha256: 225028d2cea4e2974415245e4521c85f4baca08bc1103de44b5f8d6994bf2b9f - md5: 806395a21421da524d72aa4e0b69d54c - depends: - - jpeg >=9e,<10a - - libtiff >=4.5.0,<4.6.0a0 - license: MIT - license_family: MIT - purls: [] - size: 205835 - timestamp: 1678104773395 + - importlib-metadata ; python_full_version < '3.8' + - changelist==0.5 ; extra == 'dev' + - pre-commit==3.7.0 ; extra == 'lint' + - pytest>=7.4 ; extra == 'test' + - pytest-cov>=4.1 ; extra == 'test' + requires_python: '>=3.7' - kind: conda name: lcms2 version: '2.15' @@ -4952,41 +5489,6 @@ packages: purls: [] size: 240620 timestamp: 1694650174930 -- kind: conda - name: lcms2 - version: '2.16' - build: h67d730c_0 - subdir: win-64 - url: https://conda.anaconda.org/conda-forge/win-64/lcms2-2.16-h67d730c_0.conda - sha256: f9fd9e80e46358a57d9bb97b1e37a03da4022143b019aa3c4476d8a7795de290 - md5: d3592435917b62a8becff3a60db674f6 - depends: - - libjpeg-turbo >=3.0.0,<4.0a0 - - libtiff >=4.6.0,<4.8.0a0 - - ucrt >=10.0.20348.0 - - vc >=14.2,<15 - - vc14_runtime >=14.29.30139 - license: MIT - license_family: MIT - purls: [] - size: 507632 - timestamp: 1701648249706 -- kind: conda - name: lcms2 - version: '2.16' - build: ha2f27b4_0 - subdir: osx-64 - url: https://conda.anaconda.org/conda-forge/osx-64/lcms2-2.16-ha2f27b4_0.conda - sha256: 222ebc0a55544b9922f61e75015d02861e65b48f12113af41d48ba0814e14e4e - md5: 1442db8f03517834843666c422238c9b - depends: - - libjpeg-turbo >=3.0.0,<4.0a0 - - libtiff >=4.6.0,<4.8.0a0 - license: MIT - license_family: MIT - purls: [] - size: 224432 - timestamp: 1701648089496 - kind: conda name: ld_impl_linux-64 version: '2.43' @@ -5021,22 +5523,6 @@ packages: purls: [] size: 281798 timestamp: 1657977462600 -- kind: conda - name: lerc - version: 4.0.0 - build: h63175ca_0 - subdir: win-64 - url: https://conda.anaconda.org/conda-forge/win-64/lerc-4.0.0-h63175ca_0.tar.bz2 - sha256: f4f39d7f6a2f9b407f8fb567a6c25755270421731d70f0ff331f5de4fa367488 - md5: 1900cb3cab5055833cfddb0ba233b074 - depends: - - vc >=14.2,<15 - - vs2015_runtime >=14.29.30037 - license: Apache-2.0 - license_family: Apache - purls: [] - size: 194365 - timestamp: 1657977692274 - kind: conda name: lerc version: 4.0.0 @@ -5053,158 +5539,505 @@ packages: size: 215721 timestamp: 1657977558796 - kind: conda - name: lerc - version: 4.0.0 - build: hb486fe8_0 - subdir: osx-64 - url: https://conda.anaconda.org/conda-forge/osx-64/lerc-4.0.0-hb486fe8_0.tar.bz2 - sha256: e41790fc0f4089726369b3c7f813117bbc14b533e0ed8b94cf75aba252e82497 - md5: f9d6a4c82889d5ecedec1d90eb673c55 + name: libabseil + version: '20240116.2' + build: cxx17_h00cdb27_1 + build_number: 1 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libabseil-20240116.2-cxx17_h00cdb27_1.conda + sha256: a9517c8683924f4b3b9380cdaa50fdd2009cd8d5f3918c92f64394238189d3cb + md5: f16963d88aed907af8b90878b8d8a05c depends: - - libcxx >=13.0.1 + - __osx >=11.0 + - libcxx >=16 + constrains: + - abseil-cpp =20240116.2 + - libabseil-static =20240116.2=cxx17* license: Apache-2.0 license_family: Apache purls: [] - size: 290319 - timestamp: 1657977526749 + size: 1136123 + timestamp: 1720857649214 - kind: conda name: libabseil - version: '20230125.3' - build: cxx17_h000cb23_0 - subdir: osx-64 - url: https://conda.anaconda.org/conda-forge/osx-64/libabseil-20230125.3-cxx17_h000cb23_0.conda - sha256: 915e61c37e1b57a296bf075c7b7ccf3f08f7cb2e873edf69e3c1b39e895dc61e - md5: 1d883cd421a0b0af624c38fa8d043f98 + 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: - - libcxx >=15.0.7 + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - libstdcxx >=13 constrains: - - libabseil-static =20230125.3=cxx17* - - abseil-cpp =20230125.3 + - libabseil-static =20240722.0=cxx17* + - abseil-cpp =20240722.0 license: Apache-2.0 license_family: Apache purls: [] - size: 1128875 - timestamp: 1688113187054 + size: 1310521 + timestamp: 1727295454064 - kind: conda name: libabseil - version: '20230125.3' - build: cxx17_h13dd4ca_0 - subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/libabseil-20230125.3-cxx17_h13dd4ca_0.conda - sha256: dacf281442b411eb4a4dece69618c247dbaacaa71669ca6631fc924be86ceab8 - md5: e9edfc273c30153b3427332e90110422 + version: '20240722.0' + build: cxx17_hac325c4_1 + build_number: 1 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/libabseil-20240722.0-cxx17_hac325c4_1.conda + sha256: b548e80280242ad1d93d8d7fb48a30af7e4124959ba2031c65c9675b98163652 + md5: 40373920232a6ac0404eee9cf39a9f09 depends: - - libcxx >=15.0.7 + - __osx >=10.13 + - libcxx >=17 constrains: - - libabseil-static =20230125.3=cxx17* - - abseil-cpp =20230125.3 + - abseil-cpp =20240722.0 + - libabseil-static =20240722.0=cxx17* license: Apache-2.0 license_family: Apache purls: [] - size: 1160586 - timestamp: 1688113314656 + size: 1170354 + timestamp: 1727295597292 - kind: conda name: libabseil - version: '20230125.3' - build: cxx17_h59595ed_0 - subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/libabseil-20230125.3-cxx17_h59595ed_0.conda - sha256: 3c6fab31ed4dc8428605588454596b307b1bd59d33b0c7073c407ab51408b011 - md5: d1db1b8be7c3a8983dcbbbfe4f0765de + version: '20240722.0' + build: cxx17_he0c23c2_1 + build_number: 1 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/libabseil-20240722.0-cxx17_he0c23c2_1.conda + sha256: 52ff148dee1871ef1d5c298bae20309707e866b44714a0a333a5ed2cf9a38832 + md5: 3f59a73b07a05530b252ecb07dd882b9 depends: - - libgcc-ng >=12 - - libstdcxx-ng >=12 + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 constrains: - - abseil-cpp =20230125.3 - - libabseil-static =20230125.3=cxx17* + - libabseil-static =20240722.0=cxx17* + - abseil-cpp =20240722.0 license: Apache-2.0 license_family: Apache purls: [] - size: 1240376 - timestamp: 1688112986128 + size: 1777570 + timestamp: 1727296115119 - kind: conda - name: libabseil - version: '20230125.3' - build: cxx17_h63175ca_0 + name: libarrow + version: 16.1.0 + build: h25ef0db_38_cpu + build_number: 38 subdir: win-64 - url: https://conda.anaconda.org/conda-forge/win-64/libabseil-20230125.3-cxx17_h63175ca_0.conda - sha256: d788ab2062bcfa5ae997d36825a403f4aca2cab3e2bfac15158bd0933189736b - md5: 219d819db61ee021a82ecee3d69642cd + url: https://conda.anaconda.org/conda-forge/win-64/libarrow-16.1.0-h25ef0db_38_cpu.conda + sha256: c1831301e5ff5f303b98c53d5a51458f7f451dbffcbd98c817ba558c5fdd4955 + md5: 413d798278cda073e363710dfe19dcba depends: + - aws-crt-cpp >=0.29.1,<0.29.2.0a0 + - aws-sdk-cpp >=1.11.407,<1.11.408.0a0 + - bzip2 >=1.0.8,<2.0a0 + - libabseil * cxx17* + - libabseil >=20240722.0,<20240723.0a0 + - libbrotlidec >=1.1.0,<1.2.0a0 + - libbrotlienc >=1.1.0,<1.2.0a0 + - libcrc32c >=1.1.2,<1.2.0a0 + - libcurl >=8.10.1,<9.0a0 + - libgoogle-cloud >=2.30.0,<2.31.0a0 + - libgoogle-cloud-storage >=2.30.0,<2.31.0a0 + - libre2-11 >=2024.7.2 + - libutf8proc >=2.8.0,<3.0a0 + - libzlib >=1.3.1,<2.0a0 + - lz4-c >=1.9.3,<1.10.0a0 + - orc >=2.0.2,<2.0.3.0a0 + - re2 + - snappy >=1.2.1,<1.3.0a0 - ucrt >=10.0.20348.0 - - vc >=14.2,<15 - - vc14_runtime >=14.29.30139 + - vc >=14.3,<15 + - vc14_runtime >=14.40.33810 + - zstd >=1.5.6,<1.6.0a0 constrains: - - abseil-cpp =20230125.3 - - libabseil-static =20230125.3=cxx17* + - arrow-cpp <0.0a0 + - parquet-cpp <0.0a0 + - apache-arrow-proc =*=cpu license: Apache-2.0 - license_family: Apache + license_family: APACHE purls: [] - size: 1504536 - timestamp: 1688113294765 + size: 5034059 + timestamp: 1730826997904 - kind: conda - name: libaec - version: 1.1.3 - build: h59595ed_0 + name: libarrow + version: 16.1.0 + build: h431211a_9_cpu + build_number: 9 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libarrow-16.1.0-h431211a_9_cpu.conda + sha256: 4f95a408928ed018b9da4d9a89cf173365658c67e8b50a7db9e9abf1217275ea + md5: ad48aafb919b6a21e19266f7e14d276e + depends: + - __osx >=11.0 + - aws-crt-cpp >=0.26.12,<0.26.13.0a0 + - aws-sdk-cpp >=1.11.329,<1.11.330.0a0 + - bzip2 >=1.0.8,<2.0a0 + - glog >=0.7.1,<0.8.0a0 + - libabseil * cxx17* + - libabseil >=20240116.2,<20240117.0a0 + - libbrotlidec >=1.1.0,<1.2.0a0 + - libbrotlienc >=1.1.0,<1.2.0a0 + - libcxx >=16 + - libgoogle-cloud >=2.25.0,<2.26.0a0 + - libgoogle-cloud-storage >=2.25.0,<2.26.0a0 + - libre2-11 >=2023.9.1 + - libutf8proc >=2.8.0,<3.0a0 + - libzlib >=1.3.1,<2.0a0 + - lz4-c >=1.9.3,<1.10.0a0 + - orc >=2.0.1,<2.0.2.0a0 + - re2 + - snappy >=1.2.0,<1.3.0a0 + - zstd >=1.5.6,<1.6.0a0 + constrains: + - apache-arrow-proc =*=cpu + - parquet-cpp <0.0a0 + - arrow-cpp <0.0a0 + license: Apache-2.0 + license_family: APACHE + purls: [] + size: 5220348 + timestamp: 1718327234022 +- kind: conda + name: libarrow + version: 16.1.0 + build: h95b9e66_38_cpu + build_number: 38 subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/libaec-1.1.3-h59595ed_0.conda - sha256: 2ef420a655528bca9d269086cf33b7e90d2f54ad941b437fb1ed5eca87cee017 - md5: 5e97e271911b8b2001a8b71860c32faa + url: https://conda.anaconda.org/conda-forge/linux-64/libarrow-16.1.0-h95b9e66_38_cpu.conda + sha256: e8de1ada6893497fc97369ab56953a86d73cf4951534be359a28a987d03d526d + md5: 3869547faab9ad6d75f60959b8fd70ba depends: - - libgcc-ng >=12 - - libstdcxx-ng >=12 - license: BSD-2-Clause - license_family: BSD + - __glibc >=2.17,<3.0.a0 + - aws-crt-cpp >=0.29.1,<0.29.2.0a0 + - aws-sdk-cpp >=1.11.407,<1.11.408.0a0 + - azure-core-cpp >=1.14.0,<1.14.1.0a0 + - azure-identity-cpp >=1.10.0,<1.10.1.0a0 + - azure-storage-blobs-cpp >=12.13.0,<12.13.1.0a0 + - azure-storage-files-datalake-cpp >=12.12.0,<12.12.1.0a0 + - bzip2 >=1.0.8,<2.0a0 + - gflags >=2.2.2,<2.3.0a0 + - glog >=0.7.1,<0.8.0a0 + - libabseil * cxx17* + - libabseil >=20240722.0,<20240723.0a0 + - libbrotlidec >=1.1.0,<1.2.0a0 + - libbrotlienc >=1.1.0,<1.2.0a0 + - libgcc >=13 + - libgoogle-cloud >=2.30.0,<2.31.0a0 + - libgoogle-cloud-storage >=2.30.0,<2.31.0a0 + - libre2-11 >=2024.7.2 + - libstdcxx >=13 + - libutf8proc >=2.8.0,<3.0a0 + - libzlib >=1.3.1,<2.0a0 + - lz4-c >=1.9.3,<1.10.0a0 + - orc >=2.0.2,<2.0.3.0a0 + - re2 + - snappy >=1.2.1,<1.3.0a0 + - zstd >=1.5.6,<1.6.0a0 + constrains: + - parquet-cpp <0.0a0 + - arrow-cpp <0.0a0 + - apache-arrow-proc =*=cpu + license: Apache-2.0 + license_family: APACHE + purls: [] + size: 8463217 + timestamp: 1730824269812 +- kind: conda + name: libarrow + version: 16.1.0 + build: he6cdb6e_38_cpu + build_number: 38 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/libarrow-16.1.0-he6cdb6e_38_cpu.conda + sha256: 1932c1b2c42fb046481e9b853c1dd709956a12d947a8f1331e2c1a02df3300f8 + md5: 6ce8cad5a8b2778d72c5350d4083accc + depends: + - __osx >=10.13 + - aws-crt-cpp >=0.29.1,<0.29.2.0a0 + - aws-sdk-cpp >=1.11.407,<1.11.408.0a0 + - azure-core-cpp >=1.14.0,<1.14.1.0a0 + - azure-identity-cpp >=1.10.0,<1.10.1.0a0 + - azure-storage-blobs-cpp >=12.13.0,<12.13.1.0a0 + - azure-storage-files-datalake-cpp >=12.12.0,<12.12.1.0a0 + - bzip2 >=1.0.8,<2.0a0 + - glog >=0.7.1,<0.8.0a0 + - libabseil * cxx17* + - libabseil >=20240722.0,<20240723.0a0 + - libbrotlidec >=1.1.0,<1.2.0a0 + - libbrotlienc >=1.1.0,<1.2.0a0 + - libcxx >=18 + - libgoogle-cloud >=2.30.0,<2.31.0a0 + - libgoogle-cloud-storage >=2.30.0,<2.31.0a0 + - libre2-11 >=2024.7.2 + - libutf8proc >=2.8.0,<3.0a0 + - libzlib >=1.3.1,<2.0a0 + - lz4-c >=1.9.3,<1.10.0a0 + - orc >=2.0.2,<2.0.3.0a0 + - re2 + - snappy >=1.2.1,<1.3.0a0 + - zstd >=1.5.6,<1.6.0a0 + constrains: + - apache-arrow-proc =*=cpu + - parquet-cpp <0.0a0 + - arrow-cpp <0.0a0 + license: Apache-2.0 + license_family: APACHE + purls: [] + size: 5870477 + timestamp: 1730824041276 +- kind: conda + name: libarrow-acero + version: 16.1.0 + build: h00cdb27_9_cpu + build_number: 9 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libarrow-acero-16.1.0-h00cdb27_9_cpu.conda + sha256: f79746bfad436da1a07b45c8cc7f654661c4fd1b8662db171b76bbd16362a511 + md5: 176c3595ef50c480e0aec823a0ccf6d4 + depends: + - __osx >=11.0 + - libarrow 16.1.0 h431211a_9_cpu + - libcxx >=16 + license: Apache-2.0 + license_family: APACHE + purls: [] + size: 487517 + timestamp: 1718327316021 +- kind: conda + name: libarrow-acero + version: 16.1.0 + build: h240833e_38_cpu + build_number: 38 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/libarrow-acero-16.1.0-h240833e_38_cpu.conda + sha256: 0dea833d19124ad11bea397c3ca3ea76b40bfa71ca5498d8c2400bb38a747053 + md5: 52623d189691c6ed02f0a5d24813ff87 + depends: + - __osx >=10.13 + - libarrow 16.1.0 he6cdb6e_38_cpu + - libcxx >=18 + license: Apache-2.0 + license_family: APACHE + purls: [] + size: 521933 + timestamp: 1730824182832 +- kind: conda + name: libarrow-acero + version: 16.1.0 + build: h5888daf_38_cpu + build_number: 38 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libarrow-acero-16.1.0-h5888daf_38_cpu.conda + sha256: 33d8be18399f6103ee2521b33d13d1c7affeb8315983ba08d7ead0925a6385a0 + md5: 1fbb022b0f17636b1b4823a745f59cc2 + depends: + - __glibc >=2.17,<3.0.a0 + - libarrow 16.1.0 h95b9e66_38_cpu + - libgcc >=13 + - libstdcxx >=13 + license: Apache-2.0 + license_family: APACHE + purls: [] + size: 609965 + timestamp: 1730824310810 +- kind: conda + name: libarrow-acero + version: 16.1.0 + build: hac47afa_38_cpu + build_number: 38 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/libarrow-acero-16.1.0-hac47afa_38_cpu.conda + sha256: 89a6cd77c9103bd9affba940dd8c1d0c850ca13c007c0b3388cab3f7f8995b08 + md5: 7a6cf894de34a2ece2571e80072bd2ff + depends: + - libarrow 16.1.0 h25ef0db_38_cpu + - ucrt >=10.0.20348.0 + - vc >=14.3,<15 + - vc14_runtime >=14.40.33810 + license: Apache-2.0 + license_family: APACHE + purls: [] + size: 447163 + timestamp: 1730827061338 +- kind: conda + name: libarrow-dataset + version: 16.1.0 + build: h00cdb27_9_cpu + build_number: 9 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libarrow-dataset-16.1.0-h00cdb27_9_cpu.conda + sha256: adc7741aca9203b4de4b5d03e8f84072ca5a86af527754116ca4e526b82986ec + md5: 30ecd0317353e9de4d546860fa14d702 + depends: + - __osx >=11.0 + - libarrow 16.1.0 h431211a_9_cpu + - libarrow-acero 16.1.0 h00cdb27_9_cpu + - libcxx >=16 + - libparquet 16.1.0 hcf52c46_9_cpu + license: Apache-2.0 + license_family: APACHE + purls: [] + size: 494193 + timestamp: 1718328226146 +- kind: conda + name: libarrow-dataset + version: 16.1.0 + build: h240833e_38_cpu + build_number: 38 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/libarrow-dataset-16.1.0-h240833e_38_cpu.conda + sha256: 5fb72ed916f011603ef4793ddb3b76a6d9eb2657c3089806024b51cea8ea104c + md5: 9c31d0608e32ca5b9cf12d42e1855432 + depends: + - __osx >=10.13 + - libarrow 16.1.0 he6cdb6e_38_cpu + - libarrow-acero 16.1.0 h240833e_38_cpu + - libcxx >=18 + - libparquet 16.1.0 hc957f30_38_cpu + license: Apache-2.0 + license_family: APACHE + purls: [] + size: 513452 + timestamp: 1730825375139 +- kind: conda + name: libarrow-dataset + version: 16.1.0 + build: h5888daf_38_cpu + build_number: 38 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libarrow-dataset-16.1.0-h5888daf_38_cpu.conda + sha256: 7961a61e35e12418f4a16c450d90b986e06529305d0d42539189e293bf23eef0 + md5: 100ee909f45593bb88aa6eb7f7f43986 + depends: + - __glibc >=2.17,<3.0.a0 + - libarrow 16.1.0 h95b9e66_38_cpu + - libarrow-acero 16.1.0 h5888daf_38_cpu + - libgcc >=13 + - libparquet 16.1.0 h6bd9018_38_cpu + - libstdcxx >=13 + license: Apache-2.0 + license_family: APACHE + purls: [] + size: 583574 + timestamp: 1730824394991 +- kind: conda + name: libarrow-dataset + version: 16.1.0 + build: hac47afa_38_cpu + build_number: 38 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/libarrow-dataset-16.1.0-hac47afa_38_cpu.conda + sha256: 4156ea3187d09641c33f1933a37d419a377e5be187588f29233dea52080a5311 + md5: 221ce240ee18c04c4beab1080bd5d4ba + depends: + - libarrow 16.1.0 h25ef0db_38_cpu + - libarrow-acero 16.1.0 hac47afa_38_cpu + - libparquet 16.1.0 h59f2d37_38_cpu + - ucrt >=10.0.20348.0 + - vc >=14.3,<15 + - vc14_runtime >=14.40.33810 + license: Apache-2.0 + license_family: APACHE purls: [] - size: 35446 - timestamp: 1711021212685 + size: 432638 + timestamp: 1730827290413 - kind: conda - name: libaec - version: 1.1.3 - build: h63175ca_0 - subdir: win-64 - url: https://conda.anaconda.org/conda-forge/win-64/libaec-1.1.3-h63175ca_0.conda - sha256: f5c293d3cfc00f71dfdb64bd65ab53625565f8778fc2d5790575bef238976ebf - md5: 8723000f6ffdbdaef16025f0a01b64c5 + name: libarrow-substrait + version: 16.1.0 + build: h5c0c8cd_38_cpu + build_number: 38 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/libarrow-substrait-16.1.0-h5c0c8cd_38_cpu.conda + sha256: 19404f2d1aacdd32c6dce5100901b012da79dad02acbdea70eb60b4c506dbe35 + md5: b40d69b2475b40b1ebf273d627afb5bd depends: - - ucrt >=10.0.20348.0 - - vc >=14.2,<15 - - vc14_runtime >=14.29.30139 - license: BSD-2-Clause - license_family: BSD + - __osx >=10.13 + - libabseil * cxx17* + - libabseil >=20240722.0,<20240723.0a0 + - libarrow 16.1.0 he6cdb6e_38_cpu + - libarrow-acero 16.1.0 h240833e_38_cpu + - libarrow-dataset 16.1.0 h240833e_38_cpu + - libcxx >=18 + - libprotobuf >=5.28.2,<5.28.3.0a0 + license: Apache-2.0 + license_family: APACHE purls: [] - size: 32567 - timestamp: 1711021603471 + size: 463905 + timestamp: 1730825534479 - kind: conda - name: libaec - version: 1.1.3 - build: h73e2aa4_0 - subdir: osx-64 - url: https://conda.anaconda.org/conda-forge/osx-64/libaec-1.1.3-h73e2aa4_0.conda - sha256: dae5921339c5d89f4bf58a95fd4e9c76270dbf7f6a94f3c5081b574905fcccf8 - md5: 66d3c1f6dd4636216b4fca7a748d50eb + name: libarrow-substrait + version: 16.1.0 + build: h5c8f2c3_38_cpu + build_number: 38 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libarrow-substrait-16.1.0-h5c8f2c3_38_cpu.conda + sha256: 0199eaa04947858c547b0c5132a6de81ec2a6ee79c666ec4c49e5fb570623ecf + md5: e6f4050e180189aeb22d2b9c039c8fe7 depends: - - libcxx >=16 - license: BSD-2-Clause - license_family: BSD + - __glibc >=2.17,<3.0.a0 + - libabseil * cxx17* + - libabseil >=20240722.0,<20240723.0a0 + - libarrow 16.1.0 h95b9e66_38_cpu + - libarrow-acero 16.1.0 h5888daf_38_cpu + - libarrow-dataset 16.1.0 h5888daf_38_cpu + - libgcc >=13 + - libprotobuf >=5.28.2,<5.28.3.0a0 + - libstdcxx >=13 + license: Apache-2.0 + license_family: APACHE purls: [] - size: 28602 - timestamp: 1711021419744 + size: 517895 + timestamp: 1730824435115 - kind: conda - name: libaec - version: 1.1.3 - build: hebf3989_0 + name: libarrow-substrait + version: 16.1.0 + build: hc68f6b8_9_cpu + build_number: 9 subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/libaec-1.1.3-hebf3989_0.conda - sha256: 896189b7b48a194c46a3556ea04943ef81cbe0498521231f8eb25816a68bc8ed - md5: 6f0b8e56d2e7bae12a18fc5b2cd9f310 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libarrow-substrait-16.1.0-hc68f6b8_9_cpu.conda + sha256: a5802c6ac946cda338498d9020b93cb4d157c40f3ec6579d579584a55f05e02a + md5: 51a3f33608fa5185ef0034aebc0aa77e depends: + - __osx >=11.0 + - libabseil * cxx17* + - libabseil >=20240116.2,<20240117.0a0 + - libarrow 16.1.0 h431211a_9_cpu + - libarrow-acero 16.1.0 h00cdb27_9_cpu + - libarrow-dataset 16.1.0 h00cdb27_9_cpu - libcxx >=16 - license: BSD-2-Clause - license_family: BSD + - libprotobuf >=4.25.3,<4.25.4.0a0 + license: Apache-2.0 + license_family: APACHE + purls: [] + size: 473904 + timestamp: 1718328402864 +- kind: conda + name: libarrow-substrait + version: 16.1.0 + build: hcd1cebd_38_cpu + build_number: 38 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/libarrow-substrait-16.1.0-hcd1cebd_38_cpu.conda + sha256: fb1bff9762aedbe668e9e75a6744a2196c33cd181207fd43c344436279f76454 + md5: b77793291f1ca486c9403f52c226f2a8 + depends: + - libabseil * cxx17* + - libabseil >=20240722.0,<20240723.0a0 + - libarrow 16.1.0 h25ef0db_38_cpu + - libarrow-acero 16.1.0 hac47afa_38_cpu + - libarrow-dataset 16.1.0 hac47afa_38_cpu + - libprotobuf >=5.28.2,<5.28.3.0a0 + - ucrt >=10.0.20348.0 + - vc >=14.3,<15 + - vc14_runtime >=14.40.33810 + license: Apache-2.0 + license_family: APACHE purls: [] - size: 28451 - timestamp: 1711021498493 + size: 363178 + timestamp: 1730827384578 - kind: conda name: libasprintf version: 0.22.5 @@ -5237,86 +6070,6 @@ packages: purls: [] size: 34648 timestamp: 1723626983419 -- kind: conda - name: libavif - version: 0.11.1 - build: h9f83d30_2 - build_number: 2 - subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/libavif-0.11.1-h9f83d30_2.conda - sha256: 5483c8d9465e114e66d55b4361fce56a963333da13dc731f8657033b7d9237e8 - md5: 868373284a509437a328d90ad6a5e460 - depends: - - aom >=3.5.0,<3.6.0a0 - - dav1d >=1.2.1,<1.2.2.0a0 - license: BSD-2-Clause - license_family: BSD - purls: [] - size: 88849 - timestamp: 1685725242079 -- kind: conda - name: libavif - version: 1.0.1 - build: h7a9aacb_3 - build_number: 3 - subdir: win-64 - url: https://conda.anaconda.org/conda-forge/win-64/libavif-1.0.1-h7a9aacb_3.conda - sha256: 7a02658e292c40e1d99aa9b587a02cb5807cce7a784bd17f196a6ce74e24ced7 - md5: 105425ab3c95efc316bb3277bbc4a75f - depends: - - aom >=3.7.0,<3.8.0a0 - - dav1d >=1.2.1,<1.2.2.0a0 - - rav1e >=0.6.6,<1.0a0 - - svt-av1 >=1.7.0,<1.7.1.0a0 - - ucrt >=10.0.20348.0 - - vc >=14.2,<15 - - vc14_runtime >=14.29.30139 - license: BSD-2-Clause - license_family: BSD - purls: [] - size: 104651 - timestamp: 1699878685050 -- kind: conda - name: libavif16 - version: 1.1.1 - build: h104a339_1 - build_number: 1 - subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/libavif16-1.1.1-h104a339_1.conda - sha256: 6de4cbccfe7193ee749beadf34a6ab140e2cd361efc4685621c0a785a73d4aca - md5: 9ef052c2eee74c792833ac2e820e481e - depends: - - __glibc >=2.17,<3.0.a0 - - aom >=3.9.1,<3.10.0a0 - - dav1d >=1.2.1,<1.2.2.0a0 - - libgcc-ng >=13 - - rav1e >=0.6.6,<1.0a0 - - svt-av1 >=2.2.1,<2.2.2.0a0 - license: BSD-2-Clause - license_family: BSD - purls: [] - size: 116148 - timestamp: 1724672468333 -- kind: conda - name: libavif16 - version: 1.1.1 - build: ha49a9e2_1 - build_number: 1 - subdir: osx-64 - url: https://conda.anaconda.org/conda-forge/osx-64/libavif16-1.1.1-ha49a9e2_1.conda - sha256: a98f374a75f516a423dea3e0132875d4f5f64da849d0888c1eeb96ead18c687a - md5: a64379d1e329008a66f5ff88d2618e38 - depends: - - __osx >=10.13 - - aom >=3.9.1,<3.10.0a0 - - dav1d >=1.2.1,<1.2.2.0a0 - - rav1e >=0.6.6,<1.0a0 - - svt-av1 >=2.2.1,<2.2.2.0a0 - license: BSD-2-Clause - license_family: BSD - purls: [] - size: 108831 - timestamp: 1724672620708 - kind: conda name: libblas version: 3.9.0 @@ -5404,20 +6157,6 @@ packages: purls: [] size: 5183540 timestamp: 1726669397923 -- kind: conda - name: libbrotlicommon - version: 1.0.9 - build: h1a8c8d9_9 - build_number: 9 - subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/libbrotlicommon-1.0.9-h1a8c8d9_9.conda - sha256: 53f4a6cc4f5795adf33fda00b86a0e91513c534ae44859754e9c07954d3a7148 - md5: 82354022c67480c61419b6e47377af89 - license: MIT - license_family: MIT - purls: [] - size: 70285 - timestamp: 1687884697998 - kind: conda name: libbrotlicommon version: 1.1.0 @@ -5470,21 +6209,21 @@ packages: size: 68851 timestamp: 1725267660471 - kind: conda - name: libbrotlidec - version: 1.0.9 - build: h1a8c8d9_9 - build_number: 9 + name: libbrotlicommon + version: 1.1.0 + build: hd74edd7_2 + build_number: 2 subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/libbrotlidec-1.0.9-h1a8c8d9_9.conda - sha256: 2de613dcccbbe40f90a256784ab23f7292aaa0985642ca35496cb9c177d8220b - md5: af03c66e8cb688221bdc9e2b0faaa2bf + url: https://conda.anaconda.org/conda-forge/osx-arm64/libbrotlicommon-1.1.0-hd74edd7_2.conda + sha256: 839dacb741bdbb25e58f42088a2001b649f4f12195aeb700b5ddfca3267749e5 + md5: d0bf1dff146b799b319ea0434b93f779 depends: - - libbrotlicommon 1.0.9 h1a8c8d9_9 + - __osx >=11.0 license: MIT license_family: MIT purls: [] - size: 29129 - timestamp: 1687884725821 + size: 68426 + timestamp: 1725267943211 - kind: conda name: libbrotlidec version: 1.1.0 @@ -5540,21 +6279,22 @@ packages: size: 32696 timestamp: 1725267669305 - kind: conda - name: libbrotlienc - version: 1.0.9 - build: h1a8c8d9_9 - build_number: 9 + name: libbrotlidec + version: 1.1.0 + build: hd74edd7_2 + build_number: 2 subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/libbrotlienc-1.0.9-h1a8c8d9_9.conda - sha256: 37e766c0b87d06637bdfc68e072c227ce2dac82b81d26b5f9ac57fb948e2e2b7 - md5: 8231f81e72b1113eb2ed8d2586c82691 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libbrotlidec-1.1.0-hd74edd7_2.conda + sha256: 6c6862eb274f21a7c0b60e5345467a12e6dda8b9af4438c66d496a2c1a538264 + md5: 55e66e68ce55523a6811633dd1ac74e2 depends: - - libbrotlicommon 1.0.9 h1a8c8d9_9 + - __osx >=11.0 + - libbrotlicommon 1.1.0 hd74edd7_2 license: MIT license_family: MIT purls: [] - size: 263314 - timestamp: 1687884758242 + size: 28378 + timestamp: 1725267980316 - kind: conda name: libbrotlienc version: 1.1.0 @@ -5609,6 +6349,23 @@ packages: purls: [] size: 281750 timestamp: 1725267679782 +- kind: conda + name: libbrotlienc + version: 1.1.0 + build: hd74edd7_2 + build_number: 2 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libbrotlienc-1.1.0-hd74edd7_2.conda + sha256: eeb1eb0d58b9d02bc1b98dc0a058f104ab168eb2f7d1c7bfa0570a12cfcdb7b7 + md5: 4f3a434504c67b2c42565c0b85c1885c + depends: + - __osx >=11.0 + - libbrotlicommon 1.1.0 hd74edd7_2 + license: MIT + license_family: MIT + purls: [] + size: 279644 + timestamp: 1725268003553 - kind: conda name: libcblas version: 3.9.0 @@ -5689,6 +6446,68 @@ packages: purls: [] size: 5174668 timestamp: 1726669449378 +- kind: conda + name: libcrc32c + version: 1.1.2 + build: h0e60522_0 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/libcrc32c-1.1.2-h0e60522_0.tar.bz2 + sha256: 75e60fbe436ba8a11c170c89af5213e8bec0418f88b7771ab7e3d9710b70c54e + md5: cd4cc2d0c610c8cb5419ccc979f2d6ce + depends: + - vc >=14.1,<15.0a0 + - vs2015_runtime >=14.16.27012 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 25694 + timestamp: 1633684287072 +- kind: conda + name: libcrc32c + version: 1.1.2 + build: h9c3ff4c_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libcrc32c-1.1.2-h9c3ff4c_0.tar.bz2 + sha256: fd1d153962764433fe6233f34a72cdeed5dcf8a883a85769e8295ce940b5b0c5 + md5: c965a5aa0d5c1c37ffc62dff36e28400 + depends: + - libgcc-ng >=9.4.0 + - libstdcxx-ng >=9.4.0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 20440 + timestamp: 1633683576494 +- kind: conda + name: libcrc32c + version: 1.1.2 + build: hbdafb3b_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libcrc32c-1.1.2-hbdafb3b_0.tar.bz2 + sha256: 58477b67cc719060b5b069ba57161e20ba69b8695d154a719cb4b60caf577929 + md5: 32bd82a6a625ea6ce090a81c3d34edeb + depends: + - libcxx >=11.1.0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 18765 + timestamp: 1633683992603 +- kind: conda + name: libcrc32c + version: 1.1.2 + build: he49afe7_0 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/libcrc32c-1.1.2-he49afe7_0.tar.bz2 + sha256: 3043869ac1ee84554f177695e92f2f3c2c507b260edad38a0bf3981fce1632ff + md5: 23d6d5a69918a438355d7cbc4c3d54c9 + depends: + - libcxx >=11.1.0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 20128 + timestamp: 1633683906221 - kind: conda name: libcups version: 2.3.3 @@ -5729,6 +6548,69 @@ packages: purls: [] size: 379948 timestamp: 1726660033582 +- kind: conda + name: libcurl + version: 8.10.1 + build: h1ee3ff0_0 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/libcurl-8.10.1-h1ee3ff0_0.conda + sha256: dfbac497c4fee74f67391f9c4a40cab559468b7d04ff9fad4b404a26b5e1d5b8 + md5: 7ead800e22ff7b4bccb73e42a8f7a0f4 + depends: + - krb5 >=1.21.3,<1.22.0a0 + - libssh2 >=1.11.0,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + license: curl + license_family: MIT + purls: [] + size: 342388 + timestamp: 1726660508261 +- kind: conda + name: libcurl + version: 8.10.1 + build: h58e7537_0 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/libcurl-8.10.1-h58e7537_0.conda + sha256: 662fe145459ed58dee882e525588d1da4dcc4cbd10cfca0725d1fc3840461798 + md5: 6c8669d8228a2bbd0283911cc6d6726e + depends: + - __osx >=10.13 + - krb5 >=1.21.3,<1.22.0a0 + - 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: 402588 + timestamp: 1726660264675 +- 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: libcxx version: 19.1.2 @@ -5787,36 +6669,6 @@ packages: purls: [] size: 67080 timestamp: 1694922285678 -- kind: conda - name: libdeflate - version: '1.20' - build: h49d49c5_0 - subdir: osx-64 - url: https://conda.anaconda.org/conda-forge/osx-64/libdeflate-1.20-h49d49c5_0.conda - sha256: 8c2087952db55c4118dd2e29381176a54606da47033fd61ebb1b0f4391fcd28d - md5: d46104f6a896a0bc6a1d37b88b2edf5c - license: MIT - license_family: MIT - purls: [] - size: 70364 - timestamp: 1711196727346 -- kind: conda - name: libdeflate - version: '1.20' - build: hcfcfb64_0 - subdir: win-64 - url: https://conda.anaconda.org/conda-forge/win-64/libdeflate-1.20-hcfcfb64_0.conda - sha256: 6628a5b76ad70c1a0909563c637ddc446ee824739ba7c348d4da2f0aa6ac9527 - md5: b12b5bde5eb201a1df75e49320cc938a - depends: - - ucrt >=10.0.20348.0 - - vc >=14.2,<15 - - vc14_runtime >=14.29.30139 - license: MIT - license_family: MIT - purls: [] - size: 155358 - timestamp: 1711197066985 - kind: conda name: libedit version: 3.1.20191231 @@ -5867,19 +6719,117 @@ packages: size: 123878 timestamp: 1597616541093 - kind: conda - name: libev - version: '4.33' - build: h93a5062_2 - build_number: 2 - subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/libev-4.33-h93a5062_2.conda - sha256: 95cecb3902fbe0399c3a7e67a5bed1db813e5ab0e22f4023a5e0f722f2cc214f - md5: 36d33e440c31857372a72137f78bacf5 - license: BSD-2-Clause + name: libev + version: '4.33' + build: h10d778d_2 + build_number: 2 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/libev-4.33-h10d778d_2.conda + sha256: 0d238488564a7992942aa165ff994eca540f687753b4f0998b29b4e4d030ff43 + md5: 899db79329439820b7e8f8de41bca902 + license: BSD-2-Clause + license_family: BSD + purls: [] + size: 106663 + timestamp: 1702146352558 +- kind: conda + name: libev + version: '4.33' + build: h93a5062_2 + build_number: 2 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libev-4.33-h93a5062_2.conda + sha256: 95cecb3902fbe0399c3a7e67a5bed1db813e5ab0e22f4023a5e0f722f2cc214f + md5: 36d33e440c31857372a72137f78bacf5 + license: BSD-2-Clause + license_family: BSD + purls: [] + size: 107458 + timestamp: 1702146414478 +- 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: libevent + version: 2.1.12 + build: h2757513_1 + build_number: 1 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libevent-2.1.12-h2757513_1.conda + sha256: 8c136d7586259bb5c0d2b913aaadc5b9737787ae4f40e3ad1beaf96c80b919b7 + md5: 1a109764bff3bdc7bdd84088347d71dc + depends: + - openssl >=3.1.1,<4.0a0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 368167 + timestamp: 1685726248899 +- kind: conda + name: libevent + version: 2.1.12 + build: h3671451_1 + build_number: 1 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/libevent-2.1.12-h3671451_1.conda + sha256: af03882afb7a7135288becf340c2f0cf8aa8221138a9a7b108aaeb308a486da1 + md5: 25efbd786caceef438be46da78a7b5ef + depends: + - openssl >=3.1.1,<4.0a0 + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 410555 + timestamp: 1685726568668 +- kind: conda + name: libevent + version: 2.1.12 + build: ha90c15b_1 + build_number: 1 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/libevent-2.1.12-ha90c15b_1.conda + sha256: e0bd9af2a29f8dd74309c0ae4f17a7c2b8c4b89f875ff1d6540c941eefbd07fb + md5: e38e467e577bd193a7d5de7c2c540b04 + depends: + - openssl >=3.1.1,<4.0a0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 372661 + timestamp: 1685726378869 +- kind: conda + name: libevent + version: 2.1.12 + build: hf998b51_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libevent-2.1.12-hf998b51_1.conda + sha256: 2e14399d81fb348e9d231a82ca4d816bf855206923759b69ad006ba482764131 + md5: a1cfcc585f0c42bf8d5546bb1dfb668d + depends: + - libgcc-ng >=12 + - openssl >=3.1.1,<4.0a0 + license: BSD-3-Clause license_family: BSD purls: [] - size: 107458 - timestamp: 1702146414478 + size: 427426 + timestamp: 1685725977222 - kind: conda name: libexpat version: 2.6.3 @@ -6245,109 +7195,302 @@ packages: size: 460992 timestamp: 1729027639220 - kind: conda - name: libgrpc - version: 1.56.2 - build: h3905398_1 + name: libgoogle-cloud + version: 2.25.0 + build: hfe08963_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libgoogle-cloud-2.25.0-hfe08963_0.conda + sha256: 9b059dc7cc61736abe986c0a08ed60e396ad6f97a9ecf50b86f6aa92d9059fbc + md5: b62654d7efeec851f7dbd3f1a8293901 + depends: + - __osx >=11.0 + - libabseil * cxx17* + - libabseil >=20240116.2,<20240117.0a0 + - libcurl >=8.8.0,<9.0a0 + - libcxx >=16 + - libgrpc >=1.62.2,<1.63.0a0 + - libprotobuf >=4.25.3,<4.25.4.0a0 + - openssl >=3.3.1,<4.0a0 + constrains: + - libgoogle-cloud 2.25.0 *_0 + license: Apache-2.0 + license_family: Apache + purls: [] + size: 858988 + timestamp: 1717568164614 +- kind: conda + name: libgoogle-cloud + version: 2.30.0 + build: h07d40e7_1 + build_number: 1 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/libgoogle-cloud-2.30.0-h07d40e7_1.conda + sha256: ceff63cd0bb16e652c9a707a4b3d890a361fadd4ec42d872ea4cf49bdb59a617 + md5: c406a2688a84b8513ae60be2b7e43b5d + depends: + - libabseil * cxx17* + - libabseil >=20240722.0,<20240723.0a0 + - libcurl >=8.10.1,<9.0a0 + - libgrpc >=1.67.1,<1.68.0a0 + - libprotobuf >=5.28.2,<5.28.3.0a0 + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + constrains: + - libgoogle-cloud 2.30.0 *_1 + license: Apache-2.0 + license_family: Apache + purls: [] + size: 14363 + timestamp: 1730638330291 +- kind: conda + name: libgoogle-cloud + version: 2.30.0 + build: h804f50b_1 build_number: 1 subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/libgrpc-1.56.2-h3905398_1.conda - sha256: 587c14bd5969d49f3a0a94dd933efbeabe77864319306d91714905b5caa5aa35 - md5: 0b01e6ff8002994bd4ddbffcdbec7856 + url: https://conda.anaconda.org/conda-forge/linux-64/libgoogle-cloud-2.30.0-h804f50b_1.conda + sha256: 2766d13648adf974638a016c258890de1eaecf79186f67ca2d43b2687d27d5c4 + md5: 0a1c61bdbf27a966bbb0c8bf9df37b02 depends: - - c-ares >=1.19.1,<2.0a0 + - __glibc >=2.17,<3.0.a0 - libabseil * cxx17* - - libabseil >=20230125.3,<20230126.0a0 - - libgcc-ng >=12 - - libprotobuf >=4.23.3,<4.23.4.0a0 - - libstdcxx-ng >=12 - - libzlib >=1.2.13,<2.0.0a0 - - openssl >=3.1.2,<4.0a0 - - re2 >=2023.3.2,<2023.3.3.0a0 + - libabseil >=20240722.0,<20240723.0a0 + - libcurl >=8.10.1,<9.0a0 + - libgcc >=13 + - libgrpc >=1.67.1,<1.68.0a0 + - libprotobuf >=5.28.2,<5.28.3.0a0 + - libstdcxx >=13 + - openssl >=3.3.2,<4.0a0 constrains: - - grpc-cpp =1.56.2 + - libgoogle-cloud 2.30.0 *_1 license: Apache-2.0 - license_family: APACHE + license_family: Apache purls: [] - size: 6331805 - timestamp: 1692023574803 + size: 1199922 + timestamp: 1730638010447 - kind: conda - name: libgrpc - version: 1.56.2 - build: h9075ed4_1 + name: libgoogle-cloud + version: 2.30.0 + build: hd00c612_1 build_number: 1 - subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/libgrpc-1.56.2-h9075ed4_1.conda - sha256: 1bbc06147fe298b95a7b7dcb22db0c9f95fe7383195fa9eb05e23ca73548f225 - md5: 7d9c580f8d0379e8b5cb7e78a357bf60 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/libgoogle-cloud-2.30.0-hd00c612_1.conda + sha256: 886a2b1595bb2fa95f013e142f03eddd468486707d76165ad5a341b656ab1a9f + md5: 5abc1fd3e6b08617d090a03ac6dcf961 depends: - - c-ares >=1.19.1,<2.0a0 + - __osx >=10.13 - libabseil * cxx17* - - libabseil >=20230125.3,<20230126.0a0 - - libcxx >=15.0.7 - - libprotobuf >=4.23.3,<4.23.4.0a0 - - libzlib >=1.2.13,<2.0.0a0 - - openssl >=3.1.2,<4.0a0 - - re2 >=2023.3.2,<2023.3.3.0a0 + - libabseil >=20240722.0,<20240723.0a0 + - libcurl >=8.10.1,<9.0a0 + - libcxx >=18 + - libgrpc >=1.67.1,<1.68.0a0 + - libprotobuf >=5.28.2,<5.28.3.0a0 + - openssl >=3.3.2,<4.0a0 constrains: - - grpc-cpp =1.56.2 + - libgoogle-cloud 2.30.0 *_1 license: Apache-2.0 - license_family: APACHE + license_family: Apache purls: [] - size: 4357621 - timestamp: 1692025115126 + size: 860027 + timestamp: 1730637282977 - kind: conda - name: libgrpc - version: 1.56.2 - build: he6801ca_1 + name: libgoogle-cloud-storage + version: 2.25.0 + build: h3fa5b87_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libgoogle-cloud-storage-2.25.0-h3fa5b87_0.conda + sha256: de208c7a8439baf34c409135c113c6b2a8aa48fcd1ee19a994058feb38f411af + md5: 812582944070a2218de1de5be4008509 + depends: + - __osx >=11.0 + - libabseil + - libcrc32c >=1.1.2,<1.2.0a0 + - libcurl + - libcxx >=16 + - libgoogle-cloud 2.25.0 hfe08963_0 + - libzlib >=1.2.13,<2.0a0 + - openssl + license: Apache-2.0 + license_family: Apache + purls: [] + size: 534544 + timestamp: 1717569680951 +- kind: conda + name: libgoogle-cloud-storage + version: 2.30.0 + build: h0121fbd_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libgoogle-cloud-storage-2.30.0-h0121fbd_1.conda + sha256: b171fc442de5ee010f515c4cb913cabc916619953188cb8d54fc38b8915e4cf3 + md5: afbbf507f8c96faa95a2efa376ad484c + depends: + - __glibc >=2.17,<3.0.a0 + - libabseil + - libcrc32c >=1.1.2,<1.2.0a0 + - libcurl + - libgcc >=13 + - libgoogle-cloud 2.30.0 h804f50b_1 + - libstdcxx >=13 + - libzlib >=1.3.1,<2.0a0 + - openssl + license: Apache-2.0 + license_family: Apache + purls: [] + size: 782150 + timestamp: 1730638134018 +- kind: conda + name: libgoogle-cloud-storage + version: 2.30.0 + build: h3f2b517_1 build_number: 1 subdir: osx-64 - url: https://conda.anaconda.org/conda-forge/osx-64/libgrpc-1.56.2-he6801ca_1.conda - sha256: 26d86fe9037c5f85f68ef46710d11f94c4d1b3795ff94231892f199cd5c625cd - md5: 23e94509afba7c596f4e854054f4b267 + url: https://conda.anaconda.org/conda-forge/osx-64/libgoogle-cloud-storage-2.30.0-h3f2b517_1.conda + sha256: e90836e026b3eb3750cb698560005f698705e830768bc549332ac4ad942b890d + md5: a2d97c91e722e844449e77c46189b064 depends: - __osx >=10.13 - - c-ares >=1.19.1,<2.0a0 + - libabseil + - libcrc32c >=1.1.2,<1.2.0a0 + - libcurl + - libcxx >=18 + - libgoogle-cloud 2.30.0 hd00c612_1 + - libzlib >=1.3.1,<2.0a0 + - openssl + license: Apache-2.0 + license_family: Apache + purls: [] + size: 541692 + timestamp: 1730638316405 +- kind: conda + name: libgoogle-cloud-storage + version: 2.30.0 + build: he5eb982_1 + build_number: 1 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/libgoogle-cloud-storage-2.30.0-he5eb982_1.conda + sha256: 19409f8f6af94a80e7d861d04ab31d1445f7fe71c0d1f9d611345215d21ceaee + md5: 88962ac40ea47dde5ef3ab328e72cda4 + depends: + - libabseil + - libcrc32c >=1.1.2,<1.2.0a0 + - libcurl + - libgoogle-cloud 2.30.0 h07d40e7_1 + - libzlib >=1.3.1,<2.0a0 + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + license: Apache-2.0 + license_family: Apache + purls: [] + size: 14248 + timestamp: 1730638517313 +- kind: conda + name: libgrpc + version: 1.62.2 + build: h9c18a4f_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libgrpc-1.62.2-h9c18a4f_0.conda + sha256: d2c5b5a828f6f1242c11e8c91968f48f64446f7dd5cbfa1197545e465eb7d47a + md5: e624fc11026dbb84c549435eccd08623 + depends: + - c-ares >=1.28.1,<2.0a0 - libabseil * cxx17* - - libabseil >=20230125.3,<20230126.0a0 - - libcxx >=15.0.7 - - libprotobuf >=4.23.3,<4.23.4.0a0 + - libabseil >=20240116.1,<20240117.0a0 + - libcxx >=16 + - libprotobuf >=4.25.3,<4.25.4.0a0 + - libre2-11 >=2023.9.1 - libzlib >=1.2.13,<2.0.0a0 - - openssl >=3.1.2,<4.0a0 - - re2 >=2023.3.2,<2023.3.3.0a0 + - openssl >=3.2.1,<4.0a0 + - re2 constrains: - - grpc-cpp =1.56.2 + - grpc-cpp =1.62.2 license: Apache-2.0 license_family: APACHE purls: [] - size: 4311474 - timestamp: 1692025032875 + size: 5016525 + timestamp: 1713392846329 - kind: conda name: libgrpc - version: 1.56.2 - build: hea2d5f7_1 - build_number: 1 + version: 1.67.1 + build: h7aa3b8a_0 subdir: win-64 - url: https://conda.anaconda.org/conda-forge/win-64/libgrpc-1.56.2-hea2d5f7_1.conda - sha256: 2371c46e341052cb21b2148418f35127baf129939bb169bb5a233ecb265ca323 - md5: 706baf79d5928afd39e7b747dc43b5ae + url: https://conda.anaconda.org/conda-forge/win-64/libgrpc-1.67.1-h7aa3b8a_0.conda + sha256: 986dafe9c3219e88a82389e679a2804d4256aa9ddaead193f91b7d6b4ef89ea1 + md5: daad5d4a1c24c1afe748afbb83377e43 depends: - - c-ares >=1.19.1,<2.0a0 + - c-ares >=1.34.2,<2.0a0 - libabseil * cxx17* - - libabseil >=20230125.3,<20230126.0a0 - - libprotobuf >=4.23.3,<4.23.4.0a0 - - libzlib >=1.2.13,<2.0.0a0 - - openssl >=3.1.2,<4.0a0 - - re2 >=2023.3.2,<2023.3.3.0a0 + - libabseil >=20240722.0,<20240723.0a0 + - libprotobuf >=5.28.2,<5.28.3.0a0 + - libre2-11 >=2024.7.2 + - libzlib >=1.3.1,<2.0a0 + - openssl >=3.3.2,<4.0a0 + - re2 - ucrt >=10.0.20348.0 - vc >=14.2,<15 - vc14_runtime >=14.29.30139 constrains: - - grpc-cpp =1.56.2 + - grpc-cpp =1.67.1 + license: Apache-2.0 + license_family: APACHE + purls: [] + size: 17167461 + timestamp: 1730236510917 +- kind: conda + name: libgrpc + version: 1.67.1 + build: hc2c308b_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libgrpc-1.67.1-hc2c308b_0.conda + sha256: 870550c1faf524e9a695262cd4c31441b18ad542f16893bd3c5dbc93106705f7 + md5: 4606a4647bfe857e3cfe21ca12ac3afb + 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.28.2,<5.28.3.0a0 + - libre2-11 >=2024.7.2 + - libstdcxx >=13 + - libzlib >=1.3.1,<2.0a0 + - openssl >=3.3.2,<4.0a0 + - re2 + constrains: + - grpc-cpp =1.67.1 + license: Apache-2.0 + license_family: APACHE + purls: [] + size: 7362336 + timestamp: 1730236333879 +- kind: conda + name: libgrpc + version: 1.67.1 + build: he6e0b18_0 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/libgrpc-1.67.1-he6e0b18_0.conda + sha256: 0884aaa894617fac40c0e0d03a03d2ea6ea486fe9692a0ff854cbe4b080e4c6a + md5: 05ea1754e8da5d0e8faf9ec599505834 + depends: + - __osx >=10.13 + - c-ares >=1.34.2,<2.0a0 + - libabseil * cxx17* + - libabseil >=20240722.0,<20240723.0a0 + - libcxx >=17 + - libprotobuf >=5.28.2,<5.28.3.0a0 + - libre2-11 >=2024.7.2 + - libzlib >=1.3.1,<2.0a0 + - openssl >=3.3.2,<4.0a0 + - re2 + constrains: + - grpc-cpp =1.67.1 license: Apache-2.0 license_family: APACHE purls: [] - size: 12851376 - timestamp: 1692025226820 + size: 5335099 + timestamp: 1730235623016 - kind: conda name: libhwloc version: 2.11.1 @@ -6368,21 +7511,6 @@ packages: purls: [] size: 2379689 timestamp: 1720461835526 -- kind: conda - name: libhwy - version: 1.1.0 - build: h7728843_0 - subdir: osx-64 - url: https://conda.anaconda.org/conda-forge/osx-64/libhwy-1.1.0-h7728843_0.conda - sha256: 153504156c3e35496e07af7dc8c25e29fe894632985cebce239a9609e1a70daa - md5: 1e87bbdfa248e26a2d13c0a8e8d63d08 - depends: - - libcxx >=16 - license: Apache-2.0 - license_family: Apache - purls: [] - size: 778925 - timestamp: 1708225689339 - kind: conda name: libiconv version: '1.17' @@ -6428,6 +7556,19 @@ packages: purls: [] size: 705775 timestamp: 1702682170569 +- kind: conda + name: libiconv + version: '1.17' + build: hd75f5a5_2 + build_number: 2 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/libiconv-1.17-hd75f5a5_2.conda + sha256: 23d4923baeca359423a7347c2ed7aaf48c68603df0cf8b87cc94a10b0d4e9a23 + md5: 6c3628d047e151efba7cf08c5e54d1ca + license: LGPL-2.1-only + purls: [] + size: 666538 + timestamp: 1702682713201 - kind: conda name: libintl version: 0.22.5 @@ -6478,59 +7619,6 @@ packages: purls: [] size: 496449 timestamp: 1694566464059 -- kind: conda - name: libjpeg-turbo - version: 3.0.0 - build: h0dc2134_1 - build_number: 1 - subdir: osx-64 - url: https://conda.anaconda.org/conda-forge/osx-64/libjpeg-turbo-3.0.0-h0dc2134_1.conda - sha256: d9572fd1024adc374aae7c247d0f29fdf4b122f1e3586fe62acc18067f40d02f - md5: 72507f8e3961bc968af17435060b6dd6 - constrains: - - jpeg <0.0.0a - license: IJG AND BSD-3-Clause AND Zlib - purls: [] - size: 579748 - timestamp: 1694475265912 -- kind: conda - name: libjpeg-turbo - version: 3.0.0 - build: hcfcfb64_1 - build_number: 1 - subdir: win-64 - url: https://conda.anaconda.org/conda-forge/win-64/libjpeg-turbo-3.0.0-hcfcfb64_1.conda - sha256: 4e7808e3098b4b4ed7e287f63bb24f9045cc4d95bfd39f0db870fc2837d74dff - md5: 3f1b948619c45b1ca714d60c7389092c - depends: - - ucrt >=10.0.20348.0 - - vc >=14.2,<15 - - vc14_runtime >=14.29.30139 - constrains: - - jpeg <0.0.0a - license: IJG AND BSD-3-Clause AND Zlib - purls: [] - size: 822966 - timestamp: 1694475223854 -- kind: conda - name: libjxl - version: 0.10.3 - build: hfb90b89_0 - subdir: osx-64 - url: https://conda.anaconda.org/conda-forge/osx-64/libjxl-0.10.3-hfb90b89_0.conda - sha256: 910d123abbfce3454fb6bc9bf6bb4045653be1331b4b80e24847a3d3cd75b59b - md5: 1eaaa53596c649ff6198062a234fc773 - depends: - - __osx >=10.13 - - libbrotlidec >=1.1.0,<1.2.0a0 - - libbrotlienc >=1.1.0,<1.2.0a0 - - libcxx >=16 - - libhwy >=1.1.0,<1.2.0a0 - license: BSD-3-Clause - license_family: BSD - purls: [] - size: 1404105 - timestamp: 1720754049517 - kind: conda name: liblapack version: 3.9.0 @@ -6633,6 +7721,49 @@ packages: purls: [] size: 565451 timestamp: 1702130473930 +- 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: libnghttp2 + version: 1.64.0 + build: hc7306c3_0 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/libnghttp2-1.64.0-hc7306c3_0.conda + sha256: 0dcfdcf3a445d2d7de4f3b186ab0a794dc872f4ea21622f9b997be72712c027f + md5: ab21007194b97beade22ceb7a3f6fee5 + depends: + - __osx >=10.13 + - c-ares >=1.34.2,<2.0a0 + - libcxx >=17 + - libev >=4.33,<4.34.0a0 + - libev >=4.33,<5.0a0 + - libzlib >=1.3.1,<2.0a0 + - openssl >=3.3.2,<4.0a0 + license: MIT + license_family: MIT + purls: [] + size: 606663 + timestamp: 1729572019083 - kind: conda name: libnsl version: 2.0.1 @@ -6691,25 +7822,107 @@ packages: size: 6047513 timestamp: 1720426759731 - kind: conda - name: libopenblas - version: 0.3.27 - build: pthreads_hac2b453_1 - build_number: 1 - subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/libopenblas-0.3.27-pthreads_hac2b453_1.conda - sha256: 714cb82d7c4620ea2635a92d3df263ab841676c9b183d0c01992767bb2451c39 - md5: ae05ece66d3924ac3d48b4aa3fa96cec + name: libopenblas + version: 0.3.27 + build: pthreads_hac2b453_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libopenblas-0.3.27-pthreads_hac2b453_1.conda + sha256: 714cb82d7c4620ea2635a92d3df263ab841676c9b183d0c01992767bb2451c39 + md5: ae05ece66d3924ac3d48b4aa3fa96cec + depends: + - libgcc-ng >=12 + - libgfortran-ng + - libgfortran5 >=12.3.0 + constrains: + - openblas >=0.3.27,<0.3.28.0a0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 5563053 + timestamp: 1720426334043 +- kind: conda + name: libparquet + version: 16.1.0 + build: h59f2d37_38_cpu + build_number: 38 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/libparquet-16.1.0-h59f2d37_38_cpu.conda + sha256: 3bb26485d787e2bd4d20d4a68b4cfb7c16eacf8ab5d958f2fb9295409aebf281 + md5: eb1b5b7551e48074836c5798e44abfcb + depends: + - libarrow 16.1.0 h25ef0db_38_cpu + - libthrift >=0.21.0,<0.21.1.0a0 + - openssl >=3.3.2,<4.0a0 + - ucrt >=10.0.20348.0 + - vc >=14.3,<15 + - vc14_runtime >=14.40.33810 + license: Apache-2.0 + license_family: APACHE + purls: [] + size: 792200 + timestamp: 1730827244401 +- kind: conda + name: libparquet + version: 16.1.0 + build: h6bd9018_38_cpu + build_number: 38 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libparquet-16.1.0-h6bd9018_38_cpu.conda + sha256: 4867cf51a9c23cfa03db6eb7e59427d32c11258e0958383c7554b9238107ba78 + md5: 0d793510a3736c797d97f5c4bf692f63 + depends: + - __glibc >=2.17,<3.0.a0 + - libarrow 16.1.0 h95b9e66_38_cpu + - libgcc >=13 + - libstdcxx >=13 + - libthrift >=0.21.0,<0.21.1.0a0 + - openssl >=3.3.2,<4.0a0 + license: Apache-2.0 + license_family: APACHE + purls: [] + size: 1200879 + timestamp: 1730824374959 +- kind: conda + name: libparquet + version: 16.1.0 + build: hc957f30_38_cpu + build_number: 38 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/libparquet-16.1.0-hc957f30_38_cpu.conda + sha256: bf87189f0225e3b7fc5f99a254113357256eb3cc4ba025b93d7d1276779d9137 + md5: 74774ca0a0f7ac54da4c9c9662b1de8b + depends: + - __osx >=10.13 + - libarrow 16.1.0 he6cdb6e_38_cpu + - libcxx >=18 + - libthrift >=0.21.0,<0.21.1.0a0 + - openssl >=3.3.2,<4.0a0 + license: Apache-2.0 + license_family: APACHE + purls: [] + size: 931277 + timestamp: 1730825282114 +- kind: conda + name: libparquet + version: 16.1.0 + build: hcf52c46_9_cpu + build_number: 9 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libparquet-16.1.0-hcf52c46_9_cpu.conda + sha256: a7b6d8ccd4c82bc7e9b298780c513aee8eb4ed249e5abaf21fb52de602cf1f5c + md5: dd2cd31c1a52c1c083fda9303e0238ff depends: - - libgcc-ng >=12 - - libgfortran-ng - - libgfortran5 >=12.3.0 - constrains: - - openblas >=0.3.27,<0.3.28.0a0 - license: BSD-3-Clause - license_family: BSD + - __osx >=11.0 + - libarrow 16.1.0 h431211a_9_cpu + - libcxx >=16 + - libthrift >=0.19.0,<0.19.1.0a0 + - openssl >=3.3.1,<4.0a0 + license: Apache-2.0 + license_family: APACHE purls: [] - size: 5563053 - timestamp: 1720426334043 + size: 878795 + timestamp: 1718328157756 - kind: conda name: libpng version: 1.6.39 @@ -6727,130 +7940,183 @@ packages: - kind: conda name: libpng version: 1.6.44 - build: h3ca93ac_0 - subdir: win-64 - url: https://conda.anaconda.org/conda-forge/win-64/libpng-1.6.44-h3ca93ac_0.conda - sha256: 0d3d6ff9225f6918ac225e3839c0d91e5af1da08a4ebf59cac1bfd86018db945 - md5: 639ac6b55a40aa5de7b8c1b4d78f9e81 + 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 - - ucrt >=10.0.20348.0 - - vc >=14.2,<15 - - vc14_runtime >=14.29.30139 license: zlib-acknowledgement purls: [] - size: 348933 - timestamp: 1726235196095 + size: 290661 + timestamp: 1726234747153 - kind: conda - name: libpng - version: 1.6.44 - build: h4b8f8c9_0 - subdir: osx-64 - url: https://conda.anaconda.org/conda-forge/osx-64/libpng-1.6.44-h4b8f8c9_0.conda - sha256: 12b44e58f8832798d7a5c0a7480c95e905dbd6c3558dec09739062411f9e08d1 - md5: f32ac2c8dd390dbf169f550887ed09d9 + name: libprotobuf + version: 4.25.3 + build: hc39d83c_1 + build_number: 1 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libprotobuf-4.25.3-hc39d83c_1.conda + sha256: f51bde2dfe73968ab3090c1098f520b65a8d8f11e945cb13bf74d19e30966b61 + md5: fa77986d9170450c014586ab87e144f8 depends: - - __osx >=10.13 + - __osx >=11.0 + - libabseil * cxx17* + - libabseil >=20240116.2,<20240117.0a0 + - libcxx >=17 - libzlib >=1.3.1,<2.0a0 - license: zlib-acknowledgement + license: BSD-3-Clause + license_family: BSD purls: [] - size: 268073 - timestamp: 1726234803010 + size: 2177164 + timestamp: 1727160770879 - kind: conda - name: libpng - version: 1.6.44 - build: hadc24fc_0 + name: libprotobuf + version: 5.28.2 + build: h5b01275_0 subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/libpng-1.6.44-hadc24fc_0.conda - sha256: e5b14f7a01c2db4362d8591f42f82f336ed48d5e4079e4d1f65d0c2a3637ea78 - md5: f4cc49d7aa68316213e4b12be35308d1 + url: https://conda.anaconda.org/conda-forge/linux-64/libprotobuf-5.28.2-h5b01275_0.conda + sha256: 5e8fd4aa00193c85602ce6101dd28fe31306dff85c9725048f6dc828dfa7c421 + md5: ab0bff36363bec94720275a681af8b83 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: zlib-acknowledgement + license: BSD-3-Clause + license_family: BSD purls: [] - size: 290661 - timestamp: 1726234747153 + size: 2945348 + timestamp: 1728565355702 - kind: conda name: libprotobuf - version: 4.23.3 - build: h1975477_1 - build_number: 1 + version: 5.28.2 + build: h8b30cf6_0 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/libprotobuf-5.28.2-h8b30cf6_0.conda + sha256: e240c2003e301ede0a0f4af7688adb8456559ffaa4af2eed3fce879c22c80a0e + md5: 2302089e5bcb04ce891ce765c963befb + depends: + - __osx >=10.13 + - libabseil * cxx17* + - libabseil >=20240722.0,<20240723.0a0 + - libcxx >=17 + - libzlib >=1.3.1,<2.0a0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 2428926 + timestamp: 1728565541606 +- kind: conda + name: libprotobuf + version: 5.28.2 + build: hcaed137_0 subdir: win-64 - url: https://conda.anaconda.org/conda-forge/win-64/libprotobuf-4.23.3-h1975477_1.conda - sha256: ed3ac552a1c27e624d16bc476e45929dcde6a672ec4cc4bd761b490e94b97b09 - md5: efa7ba46d136b9db9bb128e5dfb9808f + url: https://conda.anaconda.org/conda-forge/win-64/libprotobuf-5.28.2-hcaed137_0.conda + sha256: 798c6675fb709ceaa6a9bd83e9cffe06bc98e83f519c7d7d881243d2e6d0c34d + md5: 97c6d2f83edd7b400a22660e2a4d1488 depends: - libabseil * cxx17* - - libabseil >=20230125.3,<20230126.0a0 - - libzlib >=1.2.13,<2.0.0a0 + - libabseil >=20240722.0,<20240723.0a0 + - libzlib >=1.3.1,<2.0a0 - ucrt >=10.0.20348.0 - vc >=14.2,<15 - vc14_runtime >=14.29.30139 license: BSD-3-Clause license_family: BSD purls: [] - size: 5175646 - timestamp: 1693582672609 + size: 6033581 + timestamp: 1728565880841 - kind: conda - name: libprotobuf - version: 4.23.3 - build: h5feb325_1 + name: libre2-11 + version: 2023.09.01 + build: h7b2c953_2 + build_number: 2 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libre2-11-2023.09.01-h7b2c953_2.conda + sha256: c8a0a6e7a627dc9c66ffb8858f8f6d499f67fd269b6636b25dc5169760610f05 + md5: 0b7b2ced046d6b5fe6e9d46b1ee0324c + depends: + - libabseil * cxx17* + - libabseil >=20240116.1,<20240117.0a0 + - libcxx >=16 + constrains: + - re2 2023.09.01.* + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 171443 + timestamp: 1708947163461 +- kind: conda + name: libre2-11 + version: 2024.07.02 + build: h4eb7d71_1 build_number: 1 - subdir: osx-64 - url: https://conda.anaconda.org/conda-forge/osx-64/libprotobuf-4.23.3-h5feb325_1.conda - sha256: dab9b3aea591600b0d90f9eb243e8a4d0396e9e551a79cea0b5362b8bce5fdd6 - md5: 4b9dd0dfe441ea2b3588b582e820ad36 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/libre2-11-2024.07.02-h4eb7d71_1.conda + sha256: 39908d18620d48406ea3492bf111eface5b3a88c1a2d166c6d513b03f450df5d + md5: d8dbfb066c8e3e85439687613d32057d depends: - libabseil * cxx17* - - libabseil >=20230125.3,<20230126.0a0 - - libcxx >=15.0.7 - - libzlib >=1.2.13,<2.0.0a0 + - libabseil >=20240722.0,<20240723.0a0 + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + constrains: + - re2 2024.07.02.* license: BSD-3-Clause license_family: BSD purls: [] - size: 2062096 - timestamp: 1693582623797 + size: 260860 + timestamp: 1728779502416 - kind: conda - name: libprotobuf - version: 4.23.3 - build: hd1fb520_1 + 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/libprotobuf-4.23.3-hd1fb520_1.conda - sha256: 2e2a9b612b8ef8b928f8efac835cd2914722bbab348fa643b99db2efd3b34185 - md5: 78c10e8637a6f8d377f9989327d0267d + 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 >=20230125.3,<20230126.0a0 - - libgcc-ng >=12 - - libstdcxx-ng >=12 - - libzlib >=1.2.13,<2.0.0a0 + - libabseil >=20240722.0,<20240723.0a0 + - libgcc >=13 + - libstdcxx >=13 + constrains: + - re2 2024.07.02.* license: BSD-3-Clause license_family: BSD purls: [] - size: 2495057 - timestamp: 1693582252190 + size: 211096 + timestamp: 1728778964655 - kind: conda - name: libprotobuf - version: 4.23.3 - build: hf32f9b9_1 + name: libre2-11 + version: 2024.07.02 + build: hd530cb8_1 build_number: 1 - subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/libprotobuf-4.23.3-hf32f9b9_1.conda - sha256: fd4b442b4a99b500437fd0e562630f698ae579f0b31d36daecbce0f479223047 - md5: cdbf60d61de5e619297def60107a00c3 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/libre2-11-2024.07.02-hd530cb8_1.conda + sha256: 2fac39fb704ded9584d1a9e7511163830016803f83852a724c2ccef1cc16e17b + md5: 1e14c67a5e8a9273a98b83fbc0905b99 depends: + - __osx >=10.13 - libabseil * cxx17* - - libabseil >=20230125.3,<20230126.0a0 - - libcxx >=15.0.7 - - libzlib >=1.2.13,<2.0.0a0 + - libabseil >=20240722.0,<20240723.0a0 + - libcxx >=17 + constrains: + - re2 2024.07.02.* license: BSD-3-Clause license_family: BSD purls: [] - size: 2059613 - timestamp: 1693582457881 + size: 178580 + timestamp: 1728779037721 - kind: conda name: librsvg version: 2.56.3 @@ -7007,6 +8273,23 @@ packages: purls: [] size: 829500 timestamp: 1725353720793 +- 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: libssh2 version: 1.11.0 @@ -7023,6 +8306,41 @@ packages: purls: [] size: 255610 timestamp: 1685837894256 +- kind: conda + name: libssh2 + version: 1.11.0 + build: h7dfc565_0 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/libssh2-1.11.0-h7dfc565_0.conda + sha256: 813fd04eed2a2d5d9c36e53c554f9c1f08e9324e2922bd60c9c52dbbed2dbcec + md5: dc262d03aae04fe26825062879141a41 + depends: + - libzlib >=1.2.13,<2.0.0a0 + - openssl >=3.1.1,<4.0a0 + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 266806 + timestamp: 1685838242099 +- kind: conda + name: libssh2 + version: 1.11.0 + build: hd019ec5_0 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/libssh2-1.11.0-hd019ec5_0.conda + sha256: f3886763b88f4b24265db6036535ef77b7b77ce91b1cbe588c0fbdd861eec515 + md5: ca3a72efba692c59a90d4b9fc0dfe774 + depends: + - libzlib >=1.2.13,<2.0.0a0 + - openssl >=3.1.1,<4.0a0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 259556 + timestamp: 1685837820566 - kind: conda name: libstdcxx version: 14.2.0 @@ -7055,6 +8373,84 @@ packages: purls: [] size: 54105 timestamp: 1729027780628 +- kind: conda + name: libthrift + version: 0.19.0 + build: h026a170_1 + build_number: 1 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libthrift-0.19.0-h026a170_1.conda + sha256: b2c1b30d36f0412c0c0313db76a0236d736f3a9b887b8ed16182f531e4b7cb80 + md5: 4b8b21eb00d9019e9fa351141da2a6ac + depends: + - libcxx >=15.0.7 + - libevent >=2.1.12,<2.1.13.0a0 + - libzlib >=1.2.13,<2.0.0a0 + - openssl >=3.1.3,<4.0a0 + license: Apache-2.0 + license_family: APACHE + purls: [] + size: 331154 + timestamp: 1695958512679 +- kind: conda + name: libthrift + version: 0.21.0 + build: h0e7cc3e_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libthrift-0.21.0-h0e7cc3e_0.conda + sha256: ebb395232973c18745b86c9a399a4725b2c39293c9a91b8e59251be013db42f0 + md5: dcb95c0a98ba9ff737f7ae482aef7833 + depends: + - __glibc >=2.17,<3.0.a0 + - libevent >=2.1.12,<2.1.13.0a0 + - libgcc >=13 + - libstdcxx >=13 + - libzlib >=1.3.1,<2.0a0 + - openssl >=3.3.2,<4.0a0 + license: Apache-2.0 + license_family: APACHE + purls: [] + size: 425773 + timestamp: 1727205853307 +- kind: conda + name: libthrift + version: 0.21.0 + build: h75589b3_0 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/libthrift-0.21.0-h75589b3_0.conda + sha256: 3f82eddd6de435a408538ac81a7a2c0c155877534761ec9cd7a2906c005cece2 + md5: 7a472cd20d9ae866aeb6e292b33381d6 + depends: + - __osx >=10.13 + - libcxx >=17 + - libevent >=2.1.12,<2.1.13.0a0 + - libzlib >=1.3.1,<2.0a0 + - openssl >=3.3.2,<4.0a0 + license: Apache-2.0 + license_family: APACHE + purls: [] + size: 332651 + timestamp: 1727206546431 +- kind: conda + name: libthrift + version: 0.21.0 + build: hbe90ef8_0 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/libthrift-0.21.0-hbe90ef8_0.conda + sha256: 81ca4873ba09055c307f8777fb7d967b5c26291f38095785ae52caed75946488 + md5: 7699570e1f97de7001a7107aabf2d677 + depends: + - libevent >=2.1.12,<2.1.13.0a0 + - libzlib >=1.3.1,<2.0a0 + - openssl >=3.3.2,<4.0a0 + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + license: Apache-2.0 + license_family: APACHE + purls: [] + size: 633857 + timestamp: 1727206429954 - kind: conda name: libtiff version: 4.5.0 @@ -7077,28 +8473,6 @@ packages: purls: [] size: 347549 timestamp: 1673818160649 -- kind: conda - name: libtiff - version: 4.6.0 - build: h129831d_3 - build_number: 3 - subdir: osx-64 - url: https://conda.anaconda.org/conda-forge/osx-64/libtiff-4.6.0-h129831d_3.conda - sha256: f9b35c5ec1aea9a2cc20e9275a0bb8f056482faa8c5a62feb243ed780755ea30 - md5: 568593071d2e6cea7b5fc1f75bfa10ca - depends: - - lerc >=4.0.0,<5.0a0 - - libcxx >=16 - - libdeflate >=1.20,<1.21.0a0 - - libjpeg-turbo >=3.0.0,<4.0a0 - - libwebp-base >=1.3.2,<2.0a0 - - libzlib >=1.2.13,<2.0.0a0 - - xz >=5.2.6,<6.0a0 - - zstd >=1.5.5,<1.6.0a0 - license: HPND - purls: [] - size: 257489 - timestamp: 1711218113053 - kind: conda name: libtiff version: 4.6.0 @@ -7123,28 +8497,63 @@ packages: size: 277480 timestamp: 1694958140034 - kind: conda - name: libtiff - version: 4.6.0 - build: hddb2be6_3 - build_number: 3 + name: libutf8proc + version: 2.8.0 + build: h166bdaf_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libutf8proc-2.8.0-h166bdaf_0.tar.bz2 + sha256: 49082ee8d01339b225f7f8c60f32a2a2c05fe3b16f31b554b4fb2c1dea237d1c + md5: ede4266dc02e875fe1ea77b25dd43747 + depends: + - libgcc-ng >=12 + license: MIT + license_family: MIT + purls: [] + size: 101070 + timestamp: 1667316029302 +- kind: conda + name: libutf8proc + version: 2.8.0 + build: h1a8c8d9_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libutf8proc-2.8.0-h1a8c8d9_0.tar.bz2 + sha256: a3faddac08efd930fa3a1cc254b5053b4ed9428c49a888d437bf084d403c931a + md5: f8c9c41a122ab3abdf8943b13f4957ee + license: MIT + license_family: MIT + purls: [] + size: 103492 + timestamp: 1667316405233 +- kind: conda + name: libutf8proc + version: 2.8.0 + build: h82a8f57_0 subdir: win-64 - url: https://conda.anaconda.org/conda-forge/win-64/libtiff-4.6.0-hddb2be6_3.conda - sha256: 2e04844865cfe0286d70482c129f159542b325f4e45774aaff5fbe5027b30b0a - md5: 6d1828c9039929e2f185c5fa9d133018 + url: https://conda.anaconda.org/conda-forge/win-64/libutf8proc-2.8.0-h82a8f57_0.tar.bz2 + sha256: 6efa83e3f2fb9acaf096a18d21d0f679d110934798348c5defc780d4b759a76c + md5: 076894846fe9f068f91c57d158c90cba depends: - - lerc >=4.0.0,<5.0a0 - - libdeflate >=1.20,<1.21.0a0 - - libjpeg-turbo >=3.0.0,<4.0a0 - - libzlib >=1.2.13,<2.0.0a0 - ucrt >=10.0.20348.0 - vc >=14.2,<15 - - vc14_runtime >=14.29.30139 - - xz >=5.2.6,<6.0a0 - - zstd >=1.5.5,<1.6.0a0 - license: HPND + - vs2015_runtime >=14.29.30139 + license: MIT + license_family: MIT + purls: [] + size: 104389 + timestamp: 1667316359211 +- kind: conda + name: libutf8proc + version: 2.8.0 + build: hb7f2c08_0 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/libutf8proc-2.8.0-hb7f2c08_0.tar.bz2 + sha256: 55a7f96b2802e94def207fdfe92bc52c24d705d139bb6cdb3d936cbe85e1c505 + md5: db98dc3e58cbc11583180609c429c17d + license: MIT + license_family: MIT purls: [] - size: 787198 - timestamp: 1711218639912 + size: 98942 + timestamp: 1667316472080 - kind: conda name: libuuid version: 2.38.1 @@ -7202,92 +8611,41 @@ packages: license: MIT license_family: MIT purls: [] - size: 823882 - timestamp: 1690371294300 -- kind: conda - name: libwebp-base - version: 1.4.0 - build: h10d778d_0 - subdir: osx-64 - url: https://conda.anaconda.org/conda-forge/osx-64/libwebp-base-1.4.0-h10d778d_0.conda - sha256: 7bafd8f4c637778cd0aa390bf3a894feef0e1fcf6ea6000c7ffc25c4c5a65538 - md5: b2c0047ea73819d992484faacbbe1c24 - constrains: - - libwebp 1.4.0 - license: BSD-3-Clause - license_family: BSD - purls: [] - size: 355099 - timestamp: 1713200298965 -- kind: conda - name: libwebp-base - version: 1.4.0 - build: h93a5062_0 - subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/libwebp-base-1.4.0-h93a5062_0.conda - sha256: 0d4bad713a512d79bfeb4d61821f447afab8b0792aca823f505ce6b195e9fde5 - md5: c0af0edfebe780b19940e94871f1a765 - constrains: - - libwebp 1.4.0 - license: BSD-3-Clause - license_family: BSD - purls: [] - size: 287750 - timestamp: 1713200194013 + size: 823882 + timestamp: 1690371294300 - kind: conda name: libwebp-base - version: 1.4.0 - build: hcfcfb64_0 - subdir: win-64 - url: https://conda.anaconda.org/conda-forge/win-64/libwebp-base-1.4.0-hcfcfb64_0.conda - sha256: d0ca51cb1de9192be9a3238e71fbcca5a535619c499c4f4c9b2ed41c14d36770 - md5: abd61d0ab127ec5cd68f62c2969e6f34 - depends: - - ucrt >=10.0.20348.0 - - vc >=14.2,<15 - - vc14_runtime >=14.29.30139 + version: 1.2.4 + build: h1a8c8d9_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libwebp-base-1.2.4-h1a8c8d9_0.conda + sha256: aba1657df54c0847b80a42acf33bf19dc8e601408f99f8d2934cb5680b600a1e + md5: 480b5b992632e7d17778abf01bad473b constrains: - - libwebp 1.4.0 + - libwebp 1.2.4 license: BSD-3-Clause license_family: BSD purls: [] - size: 274359 - timestamp: 1713200524021 + size: 263418 + timestamp: 1678664706077 - kind: conda name: libwebp-base - version: 1.4.0 - build: hd590300_0 + version: 1.3.2 + build: hd590300_1 + build_number: 1 subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/libwebp-base-1.4.0-hd590300_0.conda - sha256: 49bc5f6b1e11cb2babf2a2a731d1a680a5e08a858280876a779dbda06c78c35f - md5: b26e8aa824079e1be0294e7152ca4559 + url: https://conda.anaconda.org/conda-forge/linux-64/libwebp-base-1.3.2-hd590300_1.conda + sha256: c230e238646d0481851a44086767581cf7e112f27e97bb1c0b89175a079d961d + md5: 049b7df8bae5e184d1de42cdf64855f8 depends: - libgcc-ng >=12 constrains: - - libwebp 1.4.0 + - libwebp 1.3.2 license: BSD-3-Clause license_family: BSD purls: [] - size: 438953 - timestamp: 1713199854503 -- kind: conda - name: libxcb - version: '1.13' - build: h9b22ae9_1004 - build_number: 1004 - subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/libxcb-1.13-h9b22ae9_1004.tar.bz2 - sha256: a89b1e46650c01a8791c201c108d6d49a0a5604dd24ddb18902057bbd90f7dbb - md5: 6b3457a192f8091cb413962f65740ac4 - depends: - - pthread-stubs - - xorg-libxau - - xorg-libxdmcp - license: MIT - license_family: MIT - purls: [] - size: 353124 - timestamp: 1636659450212 + size: 434659 + timestamp: 1712602397804 - kind: conda name: libxcb version: '1.15' @@ -7306,44 +8664,6 @@ packages: purls: [] size: 384238 timestamp: 1682082368177 -- kind: conda - name: libxcb - version: '1.16' - build: h013a479_1 - build_number: 1 - subdir: win-64 - url: https://conda.anaconda.org/conda-forge/win-64/libxcb-1.16-h013a479_1.conda - sha256: abae56e12a4c62730b899fdfb82628a9ac171c4ce144fc9f34ae024957a82a0e - md5: f0b599acdc82d5bc7e3b105833e7c5c8 - depends: - - m2w64-gcc-libs - - m2w64-gcc-libs-core - - pthread-stubs - - xorg-libxau >=1.0.11,<2.0a0 - - xorg-libxdmcp - license: MIT - license_family: MIT - purls: [] - size: 989459 - timestamp: 1724419883091 -- kind: conda - name: libxcb - version: 1.17.0 - build: hf1f96e2_0 - subdir: osx-64 - url: https://conda.anaconda.org/conda-forge/osx-64/libxcb-1.17.0-hf1f96e2_0.conda - sha256: 8896cd5deff6f57d102734f3e672bc17120613647288f9122bec69098e839af7 - md5: bbeca862892e2898bdb45792a61c4afc - depends: - - __osx >=10.13 - - pthread-stubs - - xorg-libxau >=1.0.11,<2.0a0 - - xorg-libxdmcp - license: MIT - license_family: MIT - purls: [] - size: 323770 - timestamp: 1727278927545 - kind: conda name: libxcrypt version: 4.4.36 @@ -7359,6 +8679,24 @@ packages: purls: [] size: 100393 timestamp: 1702724383534 +- kind: conda + name: libxml2 + version: 2.11.5 + build: he3bdae6_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libxml2-2.11.5-he3bdae6_0.conda + sha256: add8ddef1e79ea52a9649cd2bc7135b0d49524acc0a92fd3b71ea97558f1be49 + md5: 2a3b45f84f55113ccfaf0ab6836152fa + depends: + - icu >=72.1,<73.0a0 + - libiconv >=1.17,<2.0a0 + - libzlib >=1.2.13,<2.0.0a0 + - xz >=5.2.6,<6.0a0 + license: MIT + license_family: MIT + purls: [] + size: 615813 + timestamp: 1691593272628 - kind: conda name: libxml2 version: 2.12.7 @@ -7382,14 +8720,35 @@ packages: - kind: conda name: libxml2 version: 2.12.7 - build: h9a80f22_3 + build: h4c95cb1_3 build_number: 3 - subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/libxml2-2.12.7-h9a80f22_3.conda - sha256: 760d05981dd32d55ee820a0f35f714a7af32c1c4cc209bf705a0ede93d5bd683 - md5: 705829a78a7ce3dff19a967f0f0f5ed3 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libxml2-2.12.7-h4c95cb1_3.conda + sha256: 11a346aed187405a7d3710a79b815fd66ff80fec3b9b7f840a24531324742acf + md5: 0ac9aff6010a7751961c8e4b863a40e7 depends: - - __osx >=11.0 + - __glibc >=2.17,<3.0.a0 + - icu >=73.2,<74.0a0 + - libgcc-ng >=12 + - libiconv >=1.17,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + - xz >=5.2.6,<6.0a0 + license: MIT + license_family: MIT + purls: [] + size: 705701 + timestamp: 1720772684071 +- kind: conda + name: libxml2 + version: 2.12.7 + build: hc603aa4_3 + build_number: 3 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/libxml2-2.12.7-hc603aa4_3.conda + sha256: b0cf4a1d3e628876613665ea957a4c0adc30460be859fa859a1eed7eac87330b + md5: c188d96aea8eaa16efec573fe36a9a13 + depends: + - __osx >=10.13 - icu >=73.2,<74.0a0 - libiconv >=1.17,<2.0a0 - libzlib >=1.3.1,<2.0a0 @@ -7397,8 +8756,8 @@ packages: license: MIT license_family: MIT purls: [] - size: 588441 - timestamp: 1720772863811 + size: 620129 + timestamp: 1720772795289 - kind: conda name: libzlib version: 1.3.1 @@ -7474,68 +8833,6 @@ packages: purls: [] size: 57133 timestamp: 1727963183990 -- kind: conda - name: libzopfli - version: 1.0.3 - build: h046ec9c_0 - subdir: osx-64 - url: https://conda.anaconda.org/conda-forge/osx-64/libzopfli-1.0.3-h046ec9c_0.tar.bz2 - sha256: 3f35f8adf997467699a01819aeabba153ef554e796618c446a9626c2173aee90 - md5: 55f3f5c9bccca18d33cb3a4bcfe002d7 - depends: - - libcxx >=11.0.0 - license: Apache-2.0 - license_family: Apache - purls: [] - size: 162262 - timestamp: 1607309210977 -- kind: conda - name: libzopfli - version: 1.0.3 - build: h0e60522_0 - subdir: win-64 - url: https://conda.anaconda.org/conda-forge/win-64/libzopfli-1.0.3-h0e60522_0.tar.bz2 - sha256: c6f2ee6f4758f6e286a2ba9b7503cff25b178fcddeda997921d3012961ce9a62 - md5: b4b0cbc0abc9f26b730231ffdabf3881 - depends: - - vc >=14.1,<15.0a0 - - vs2015_runtime >=14.16.27012 - license: Apache-2.0 - license_family: Apache - purls: [] - size: 207974 - timestamp: 1607309596528 -- kind: conda - name: libzopfli - version: 1.0.3 - build: h9c3ff4c_0 - subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/libzopfli-1.0.3-h9c3ff4c_0.tar.bz2 - sha256: ff94f30b2e86cbad6296cf3e5804d442d9e881f7ba8080d92170981662528c6e - md5: c66fe2d123249af7651ebde8984c51c2 - depends: - - libgcc-ng >=9.3.0 - - libstdcxx-ng >=9.3.0 - license: Apache-2.0 - license_family: Apache - purls: [] - size: 168074 - timestamp: 1607309189989 -- kind: conda - name: libzopfli - version: 1.0.3 - build: h9f76cd9_0 - subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/libzopfli-1.0.3-h9f76cd9_0.tar.bz2 - sha256: e3003b8efe551902dc60b21c81d7164b291b26b7862704421368d26ba5c10fa0 - md5: a0758d74f57741aa0d9ede13fd592e56 - depends: - - libcxx >=11.0.0 - license: Apache-2.0 - license_family: Apache - purls: [] - size: 147901 - timestamp: 1607309166373 - kind: conda name: llvm-openmp version: 19.1.2 @@ -7735,13 +9032,12 @@ packages: timestamp: 1686175179621 - kind: conda name: markupsafe - version: 3.0.1 - build: py310h38315fa_1 - build_number: 1 + version: 3.0.2 + build: py310h38315fa_0 subdir: win-64 - url: https://conda.anaconda.org/conda-forge/win-64/markupsafe-3.0.1-py310h38315fa_1.conda - sha256: 93d54a6caddc23abd7ecb84bbdc4d655e9ec2d2414e6987004721287d8a96322 - md5: 00ef9769e33394ca8b0feb554a85ccf6 + url: https://conda.anaconda.org/conda-forge/win-64/markupsafe-3.0.2-py310h38315fa_0.conda + sha256: 5b36e67eb43cafb8ea219aeda792a9623b1f5fb1778457f814442ed434e78c25 + md5: d67a799792d5d5d7b1dcf6fd4e35c6c7 depends: - python >=3.10,<3.11.0a0 - python_abi 3.10.* *_cp310 @@ -7754,20 +9050,20 @@ packages: license_family: BSD purls: - pkg:pypi/markupsafe?source=hash-mapping - size: 26043 - timestamp: 1728489726622 + size: 25910 + timestamp: 1729351690024 - kind: conda name: markupsafe - version: 3.0.1 - build: py310h618ceed_1 - build_number: 1 - subdir: osx-64 - url: https://conda.anaconda.org/conda-forge/osx-64/markupsafe-3.0.1-py310h618ceed_1.conda - sha256: ed1ef60e60f4ab60f9900743973c0e7ad4cc3e7125d32c363ecfb2469e802438 - md5: 08d81999930011f0804122b08bad1321 + version: 3.0.2 + build: py310h5799be4_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/markupsafe-3.0.2-py310h5799be4_0.conda + sha256: a66713d5df1481ad71c7064b5e4b1edd9011e972f912cab730b215d517b11d85 + md5: 8bdc8aea9bd86d8630bcc0fa0ceff66b depends: - - __osx >=10.13 + - __osx >=11.0 - python >=3.10,<3.11.0a0 + - python >=3.10,<3.11.0a0 *_cpython - python_abi 3.10.* *_cp310 constrains: - jinja2 >=3.0.0 @@ -7775,21 +9071,19 @@ packages: license_family: BSD purls: - pkg:pypi/markupsafe?source=hash-mapping - size: 22130 - timestamp: 1728489284167 + size: 22752 + timestamp: 1729351484481 - kind: conda name: markupsafe - version: 3.0.1 - build: py310h6a095d7_1 - build_number: 1 - subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/markupsafe-3.0.1-py310h6a095d7_1.conda - sha256: 81f3e269af104956b5f8bebc77205d9950c367ee7e50cb46e1d84b88086c313a - md5: 5d92141140ad1845032a79bef5384c90 + version: 3.0.2 + build: py310h72eadd2_0 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/markupsafe-3.0.2-py310h72eadd2_0.conda + sha256: 7ddd71cada5db21ffb960368a79f4dc46f3563d9495cc275e2a2ebe1623a6834 + md5: 66b9cc4fe7b3ef8bb6ada106f94adbbb depends: - - __osx >=11.0 + - __osx >=10.13 - python >=3.10,<3.11.0a0 - - python >=3.10,<3.11.0a0 *_cpython - python_abi 3.10.* *_cp310 constrains: - jinja2 >=3.0.0 @@ -7797,17 +9091,16 @@ packages: license_family: BSD purls: - pkg:pypi/markupsafe?source=hash-mapping - size: 22821 - timestamp: 1728489325901 + size: 21976 + timestamp: 1729351462576 - kind: conda name: markupsafe - version: 3.0.1 - build: py310h89163eb_1 - build_number: 1 + version: 3.0.2 + build: py310h89163eb_0 subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/markupsafe-3.0.1-py310h89163eb_1.conda - sha256: 7a9746f19052288bc2b137952be868143e207d0d8cbc08bc55e63ccb55daf532 - md5: 7d6206ca7c2b3f4663fdce7afdd71ead + url: https://conda.anaconda.org/conda-forge/linux-64/markupsafe-3.0.2-py310h89163eb_0.conda + sha256: cd30ab169cf8685a405d5ff65d6b6887603b5d3c9acfc844b5ff5ff09de21213 + md5: 5415555830a54d9b4a1307e3e9d942c7 depends: - __glibc >=2.17,<3.0.a0 - libgcc >=13 @@ -7819,8 +9112,8 @@ packages: license_family: BSD purls: - pkg:pypi/markupsafe?source=hash-mapping - size: 22956 - timestamp: 1728489176185 + size: 22993 + timestamp: 1729351433689 - kind: conda name: matplotlib-inline version: 0.1.7 @@ -8082,12 +9375,12 @@ packages: timestamp: 1608166968312 - kind: conda name: mypy - version: 1.12.0 + version: 1.13.0 build: py310ha75aee5_0 subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/mypy-1.12.0-py310ha75aee5_0.conda - sha256: d2f78d97274a5247213a65dff027a2df381293fa10c2453bdc3bccc0ad8a4427 - md5: 603dc67fb9c4b8338037e234c7277b52 + url: https://conda.anaconda.org/conda-forge/linux-64/mypy-1.13.0-py310ha75aee5_0.conda + sha256: f27ee5c45bffe2f83a7b5234fdc6d6d4c7433e38989cfa0314738839d5428a67 + md5: 8fefd2dc8dac219c0bde063e08ea849d depends: - __glibc >=2.17,<3.0.a0 - libgcc >=13 @@ -8101,16 +9394,16 @@ packages: license_family: MIT purls: - pkg:pypi/mypy?source=hash-mapping - size: 17970790 - timestamp: 1728976159955 + size: 17946771 + timestamp: 1729644508105 - kind: conda name: mypy - version: 1.12.0 + version: 1.13.0 build: py310ha8f682b_0 subdir: win-64 - url: https://conda.anaconda.org/conda-forge/win-64/mypy-1.12.0-py310ha8f682b_0.conda - sha256: 360c9a473846cd3b8a6c4ed2938d86f88d53f3786b18262417e4e8a0c41a677f - md5: 4634e032f33f6e6fa497dc7c1a406efb + url: https://conda.anaconda.org/conda-forge/win-64/mypy-1.13.0-py310ha8f682b_0.conda + sha256: ae3303b3b841a13196470fdebe908325690b94b356c8fc556480427d22d6c006 + md5: 5fb3ac99fc40566c8e98b921b13cc636 depends: - mypy_extensions >=1.0.0 - psutil >=4.0 @@ -8125,16 +9418,16 @@ packages: license_family: MIT purls: - pkg:pypi/mypy?source=hash-mapping - size: 9716555 - timestamp: 1728975971866 + size: 9762121 + timestamp: 1729644340764 - kind: conda name: mypy - version: 1.12.0 + version: 1.13.0 build: py310hb9d19b6_0 subdir: osx-64 - url: https://conda.anaconda.org/conda-forge/osx-64/mypy-1.12.0-py310hb9d19b6_0.conda - sha256: 666d4bf909948c82120d2a78181a77756cb1b695ce6dfe88ac31309d296c0849 - md5: abba106c725052a3b86462880f5ede89 + url: https://conda.anaconda.org/conda-forge/osx-64/mypy-1.13.0-py310hb9d19b6_0.conda + sha256: a45b0d69c1ae3ab0198e00394199cee947893cd3b30888d42d9f5386cf8925ab + md5: 69ef2ab722b7d5f3962511682f45a660 depends: - __osx >=10.13 - mypy_extensions >=1.0.0 @@ -8147,16 +9440,16 @@ packages: license_family: MIT purls: - pkg:pypi/mypy?source=hash-mapping - size: 11884329 - timestamp: 1728975916781 + size: 11831524 + timestamp: 1729644272091 - kind: conda name: mypy - version: 1.12.0 + version: 1.13.0 build: py310hf9df320_0 subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/mypy-1.12.0-py310hf9df320_0.conda - sha256: 604ebf1d05e53a8cd34fc3fe330b523bfd34637c5f9ca6e5f7e721a0e8a88826 - md5: dadb274792ed73444a189d96f5b75e67 + url: https://conda.anaconda.org/conda-forge/osx-arm64/mypy-1.13.0-py310hf9df320_0.conda + sha256: d6106053436d24d7244857d783e20e8186599f1b3fbad7e937663c7cd615b985 + md5: fc8b463ac044ebf3d6f55ccfc5f75d5d depends: - __osx >=11.0 - mypy_extensions >=1.0.0 @@ -8170,8 +9463,8 @@ packages: license_family: MIT purls: - pkg:pypi/mypy?source=hash-mapping - size: 9306383 - timestamp: 1728976153084 + size: 9382045 + timestamp: 1729644753309 - kind: conda name: mypy_extensions version: 1.0.0 @@ -8430,28 +9723,42 @@ packages: - pkg:pypi/nest-asyncio?source=hash-mapping size: 11638 timestamp: 1705850780510 -- kind: conda +- kind: pypi name: networkx - version: 3.4.1 - build: pyhd8ed1ab_0 - subdir: noarch - noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/networkx-3.4.1-pyhd8ed1ab_0.conda - sha256: f753c9a2be8ad02077f027f4e03d9531b305c5297d3708c410cf95b99195b335 - md5: 4994669899eb2e84ab855edcb71efc58 - depends: - - python >=3.10 - constrains: - - scipy >=1.10,!=1.11.0,!=1.11.1 - - numpy >=1.24 - - matplotlib >=3.7 - - pandas >=2.0 - license: BSD-3-Clause - license_family: BSD - purls: - - pkg:pypi/networkx?source=hash-mapping - size: 1197665 - timestamp: 1728721145589 + version: 3.4.2 + url: https://files.pythonhosted.org/packages/b9/54/dd730b32ea14ea797530a4479b2ed46a6fb250f682a9cfb997e968bf0261/networkx-3.4.2-py3-none-any.whl + sha256: df5d4365b724cf81b8c6a7312509d0c22386097011ad1abe274afd5e9d3bbc5f + requires_dist: + - numpy>=1.24 ; extra == 'default' + - scipy!=1.11.0,!=1.11.1,>=1.10 ; extra == 'default' + - matplotlib>=3.7 ; extra == 'default' + - pandas>=2.0 ; extra == 'default' + - changelist==0.5 ; extra == 'developer' + - pre-commit>=3.2 ; extra == 'developer' + - mypy>=1.1 ; extra == 'developer' + - rtoml ; extra == 'developer' + - sphinx>=7.3 ; extra == 'doc' + - pydata-sphinx-theme>=0.15 ; extra == 'doc' + - sphinx-gallery>=0.16 ; extra == 'doc' + - numpydoc>=1.8.0 ; extra == 'doc' + - pillow>=9.4 ; extra == 'doc' + - texext>=0.6.7 ; extra == 'doc' + - myst-nb>=1.1 ; extra == 'doc' + - intersphinx-registry ; extra == 'doc' + - osmnx>=1.9 ; extra == 'example' + - momepy>=0.7.2 ; extra == 'example' + - contextily>=1.6 ; extra == 'example' + - seaborn>=0.13 ; extra == 'example' + - cairocffi>=1.7 ; extra == 'example' + - igraph>=0.11 ; extra == 'example' + - scikit-learn>=1.5 ; extra == 'example' + - lxml>=4.6 ; extra == 'extra' + - pygraphviz>=1.14 ; extra == 'extra' + - pydot>=3.0.1 ; extra == 'extra' + - sympy>=1.10 ; extra == 'extra' + - pytest>=7.2 ; extra == 'test' + - pytest-cov>=4.0 ; extra == 'test' + requires_python: '>=3.10' - kind: conda name: nodejs version: 20.5.1 @@ -8492,14 +9799,13 @@ packages: - kind: conda name: nodejs version: 20.5.1 - build: h5f47a4d_1 - build_number: 1 + build: ha2ed473_0 subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/nodejs-20.5.1-h5f47a4d_1.conda - sha256: 8dd6e358423357839c46af632e0927c3d3987a23c8cdfc5c1ff7c5d45c68bada - md5: 771879f28f334321c8840fc59d6de330 + url: https://conda.anaconda.org/conda-forge/osx-arm64/nodejs-20.5.1-ha2ed473_0.conda + sha256: 3714032f2be16a64e0e33dc859b8dff35adb62284cff888d9368206c45385627 + md5: 70b9d24d6840d7bac3b76e6d549ac3a4 depends: - - icu >=73.2,<74.0a0 + - icu >=72.1,<73.0a0 - libcxx >=15.0.7 - libuv >=1.44.2,<1.45.0a0 - libzlib >=1.2.13,<2.0.0a0 @@ -8508,8 +9814,8 @@ packages: license: MIT license_family: MIT purls: [] - size: 11664910 - timestamp: 1693005275313 + size: 11647587 + timestamp: 1692133104947 - kind: conda name: nodejs version: 20.5.1 @@ -8553,42 +9859,45 @@ packages: timestamp: 1707957948029 - kind: conda name: numpy - version: 1.26.4 - build: py310h4bfa8fc_0 - subdir: osx-64 - url: https://conda.anaconda.org/conda-forge/osx-64/numpy-1.26.4-py310h4bfa8fc_0.conda - sha256: 914476e2d3273fdf9c0419a7bdcb7b31a5ec25949e4afbc847297ff3a50c62c8 - md5: cd6a2298387f558c9ea70ee73a189791 + version: 2.1.3 + build: py310h1ec8c79_0 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/numpy-2.1.3-py310h1ec8c79_0.conda + sha256: 5c47cabe3da23a791b6163acbc6ff8c4b4debd6a72e41f9f4f5294738bc3b321 + md5: 478874a4b6f52f275e71641284343488 depends: - libblas >=3.9.0,<4.0a0 - libcblas >=3.9.0,<4.0a0 - - libcxx >=16 - liblapack >=3.9.0,<4.0a0 - python >=3.10,<3.11.0a0 - python_abi 3.10.* *_cp310 + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 constrains: - numpy-base <0a0 license: BSD-3-Clause license_family: BSD purls: - pkg:pypi/numpy?source=hash-mapping - size: 6491938 - timestamp: 1707226191321 + size: 6513869 + timestamp: 1730588869612 - kind: conda name: numpy - version: 1.26.4 - build: py310hb13e2d6_0 - subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/numpy-1.26.4-py310hb13e2d6_0.conda - sha256: 028fe2ea8e915a0a032b75165f11747770326f3d767e642880540c60a3256425 - md5: 6593de64c935768b6bad3e19b3e978be + version: 2.1.3 + build: py310h530be0a_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/numpy-2.1.3-py310h530be0a_0.conda + sha256: 006b3a60d912f53c244e2b2a1062b4b092be631191204b2502e1f3e45e7decca + md5: 197700c4ca191088c1d47bab613020a4 depends: + - __osx >=11.0 - libblas >=3.9.0,<4.0a0 - libcblas >=3.9.0,<4.0a0 - - libgcc-ng >=12 + - libcxx >=18 - liblapack >=3.9.0,<4.0a0 - - libstdcxx-ng >=12 - python >=3.10,<3.11.0a0 + - python >=3.10,<3.11.0a0 *_cpython - python_abi 3.10.* *_cp310 constrains: - numpy-base <0a0 @@ -8596,23 +9905,24 @@ packages: license_family: BSD purls: - pkg:pypi/numpy?source=hash-mapping - size: 7009070 - timestamp: 1707225917496 + size: 5934307 + timestamp: 1730588442975 - kind: conda name: numpy - version: 1.26.4 - build: py310hd45542a_0 - subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/numpy-1.26.4-py310hd45542a_0.conda - sha256: e3078108a4973e73c813b89228f4bd8095ec58f96ca29f55d2e45a6223a9a1db - md5: 267ee89a3a0b8c8fa838a2353f9ea0c0 + version: 2.1.3 + build: py310hd6e36ab_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/numpy-2.1.3-py310hd6e36ab_0.conda + sha256: f75a5ffd197be7b4f965307770d89234c7ea42431ecd4a72a584a8be29bc3616 + md5: b67f4f02236b75765deec42f5cf2b35b depends: + - __glibc >=2.17,<3.0.a0 - libblas >=3.9.0,<4.0a0 - libcblas >=3.9.0,<4.0a0 - - libcxx >=16 + - libgcc >=13 - liblapack >=3.9.0,<4.0a0 + - libstdcxx >=13 - python >=3.10,<3.11.0a0 - - python >=3.10,<3.11.0a0 *_cpython - python_abi 3.10.* *_cp310 constrains: - numpy-base <0a0 @@ -8620,33 +9930,32 @@ packages: license_family: BSD purls: - pkg:pypi/numpy?source=hash-mapping - size: 5475744 - timestamp: 1707226187124 + size: 7879497 + timestamp: 1730588558893 - kind: conda name: numpy - version: 1.26.4 - build: py310hf667824_0 - subdir: win-64 - url: https://conda.anaconda.org/conda-forge/win-64/numpy-1.26.4-py310hf667824_0.conda - sha256: 20ca447a8f840c01961f2bdf0847fc7b7785a62968e867d7aa4ca8a66d70f9ad - md5: 93e881c391880df90e74e43a4b67c16d + version: 2.1.3 + build: py310hdf3e1fd_0 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/numpy-2.1.3-py310hdf3e1fd_0.conda + sha256: 61b9b926da3edbf5da3a75ac80b0aee147f9c86769b1afa72b5cd2e785989928 + md5: 16d444220234224c8725b370dd57bfe2 depends: + - __osx >=10.13 - libblas >=3.9.0,<4.0a0 - libcblas >=3.9.0,<4.0a0 + - libcxx >=18 - liblapack >=3.9.0,<4.0a0 - python >=3.10,<3.11.0a0 - python_abi 3.10.* *_cp310 - - ucrt >=10.0.20348.0 - - vc >=14.2,<15 - - vc14_runtime >=14.29.30139 constrains: - numpy-base <0a0 license: BSD-3-Clause license_family: BSD purls: - pkg:pypi/numpy?source=hash-mapping - size: 5977469 - timestamp: 1707226445438 + size: 7051614 + timestamp: 1730588496876 - kind: conda name: openjdk version: 20.0.0 @@ -8732,82 +10041,6 @@ packages: purls: [] size: 176652534 timestamp: 1693902583962 -- kind: conda - name: openjpeg - version: 2.5.0 - build: hbc2ba62_2 - build_number: 2 - subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/openjpeg-2.5.0-hbc2ba62_2.conda - sha256: 2bb159e385e633a08cc164f50b4e39fa465b85f54c376a5c20aa15f57ef407b3 - md5: c3e184f0810a4614863569488b1ac709 - depends: - - libcxx >=14.0.6 - - libpng >=1.6.39,<1.7.0a0 - - libtiff >=4.5.0,<4.6.0a0 - - libzlib >=1.2.13,<2.0.0a0 - license: BSD-2-Clause - license_family: BSD - purls: [] - size: 307087 - timestamp: 1671435439914 -- kind: conda - name: openjpeg - version: 2.5.2 - build: h3d672ee_0 - subdir: win-64 - url: https://conda.anaconda.org/conda-forge/win-64/openjpeg-2.5.2-h3d672ee_0.conda - sha256: dda71cbe094234ab208f3552dec1f4ca6f2e614175d010808d6cb66ecf0bc753 - md5: 7e7099ad94ac3b599808950cec30ad4e - depends: - - libpng >=1.6.43,<1.7.0a0 - - libtiff >=4.6.0,<4.8.0a0 - - libzlib >=1.2.13,<2.0.0a0 - - ucrt >=10.0.20348.0 - - vc >=14.2,<15 - - vc14_runtime >=14.29.30139 - license: BSD-2-Clause - license_family: BSD - purls: [] - size: 237974 - timestamp: 1709159764160 -- 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: openjpeg - version: 2.5.2 - build: h7310d3a_0 - subdir: osx-64 - url: https://conda.anaconda.org/conda-forge/osx-64/openjpeg-2.5.2-h7310d3a_0.conda - sha256: dc9c405119b9b54f8ca5984da27ba498bd848ab4f0f580da6f293009ca5adc13 - md5: 05a14cc9d725dd74995927968d6547e3 - depends: - - libcxx >=16 - - libpng >=1.6.43,<1.7.0a0 - - libtiff >=4.6.0,<4.8.0a0 - - libzlib >=1.2.13,<2.0.0a0 - license: BSD-2-Clause - license_family: BSD - purls: [] - size: 331273 - timestamp: 1709159538792 - kind: conda name: openssl version: 3.3.2 @@ -8868,13 +10101,107 @@ packages: sha256: 2b75d4b56e45992adf172b158143742daeb316c35274b36f385ccb6644e93268 md5: 2ff47134c8e292868a4609519b1ea3b6 depends: - - __osx >=10.13 - - ca-certificates + - __osx >=10.13 + - ca-certificates + license: Apache-2.0 + license_family: Apache + purls: [] + size: 2544654 + timestamp: 1725410973572 +- kind: conda + name: orc + version: 2.0.1 + build: h47ade37_1 + build_number: 1 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/orc-2.0.1-h47ade37_1.conda + sha256: 567a9677258cdd03484e3045255bf10a9d8f1031c5030ef83f1fdc1a1ad6f401 + md5: cd1013678ccef9b552335004f20a2d26 + depends: + - __osx >=11.0 + - libcxx >=16 + - libprotobuf >=4.25.3,<4.25.4.0a0 + - libzlib >=1.2.13,<2.0.0a0 + - lz4-c >=1.9.3,<1.10.0a0 + - snappy >=1.2.0,<1.3.0a0 + - tzdata + - zstd >=1.5.6,<1.6.0a0 + license: Apache-2.0 + license_family: Apache + purls: [] + size: 417136 + timestamp: 1716789821766 +- kind: conda + name: orc + version: 2.0.2 + build: h34659fe_2 + build_number: 2 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/orc-2.0.2-h34659fe_2.conda + sha256: cddfcfb854b076acc6587d1b541f994b5c8dec7641caf165fdd2af58d332a966 + md5: c37dc0499a654f4282c0a16c0d324d1b + depends: + - libprotobuf >=5.28.2,<5.28.3.0a0 + - libzlib >=1.3.1,<2.0a0 + - lz4-c >=1.9.3,<1.10.0a0 + - snappy >=1.2.1,<1.3.0a0 + - tzdata + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + - zstd >=1.5.6,<1.6.0a0 + license: Apache-2.0 + license_family: Apache + purls: [] + size: 898128 + timestamp: 1729549259522 +- kind: conda + name: orc + version: 2.0.2 + build: hb8ce1e1_2 + build_number: 2 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/orc-2.0.2-hb8ce1e1_2.conda + sha256: 3a068269489e5ab1447148be4d63f64a479450cdb107feb69ba21e1542a2afbe + md5: 4943ece8238f5b0385cad55b50544f8a + depends: + - __osx >=10.13 + - libcxx >=17 + - libprotobuf >=5.28.2,<5.28.3.0a0 + - libzlib >=1.3.1,<2.0a0 + - lz4-c >=1.9.3,<1.10.0a0 + - snappy >=1.2.1,<1.3.0a0 + - tzdata + - zstd >=1.5.6,<1.6.0a0 + license: Apache-2.0 + license_family: Apache + purls: [] + size: 476150 + timestamp: 1729549239240 +- kind: conda + name: orc + version: 2.0.2 + build: he039a57_2 + build_number: 2 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/orc-2.0.2-he039a57_2.conda + sha256: cfc92e5b6be25e5ebee117cd54336ce71a0115c251974c379f4765b35d7466fe + md5: 5e7bb9779cc5c200e63475eb2538d382 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - libprotobuf >=5.28.2,<5.28.3.0a0 + - libstdcxx >=13 + - libzlib >=1.3.1,<2.0a0 + - lz4-c >=1.9.3,<1.10.0a0 + - snappy >=1.2.1,<1.3.0a0 + - tzdata + - zstd >=1.5.6,<1.6.0a0 license: Apache-2.0 license_family: Apache purls: [] - size: 2544654 - timestamp: 1725410973572 + size: 1186861 + timestamp: 1729548981923 - kind: conda name: outcome version: 1.3.0.post0 @@ -9103,25 +10430,25 @@ packages: - kind: conda name: pango version: 1.50.14 - build: hcf40dda_2 - build_number: 2 + build: h9f7e0c6_1 + build_number: 1 subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/pango-1.50.14-hcf40dda_2.conda - sha256: e17f649192ce06c68893b50fa2492db87d2d82ae6d3c6058cc62dcc44dde8b2e - md5: 79026cbb74d69b444e5dc2be0fb4b4a9 + url: https://conda.anaconda.org/conda-forge/osx-arm64/pango-1.50.14-h9f7e0c6_1.conda + sha256: 9ff56d9aba2ec9337e7b41b297571f6cf490dcb0c51f636bc6b839c8c55aab1a + md5: cab8c807d6529fc354ca14a598d11850 depends: - cairo >=1.16.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 >=8.1.1,<9.0a0 - - libglib >=2.76.4,<3.0a0 + - harfbuzz >=7.1.0,<8.0a0 + - libglib >=2.76.1,<3.0a0 - libpng >=1.6.39,<1.7.0a0 license: LGPL-2.1-or-later purls: [] - size: 426303 - timestamp: 1693056536154 + size: 427247 + timestamp: 1681983976189 - kind: conda name: parso version: 0.8.4 @@ -9209,116 +10536,114 @@ packages: - pkg:pypi/pickleshare?source=hash-mapping size: 9332 timestamp: 1602536313357 -- kind: conda +- kind: pypi name: pillow - version: 9.4.0 - build: py310h5a7539a_1 - build_number: 1 - subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/pillow-9.4.0-py310h5a7539a_1.conda - sha256: dc1e74039820e86b876c4ad3563ab0522218dc978cf1fda34358eb640f950312 - md5: b3c94458ef1002c937b89979c79eb486 - depends: - - freetype >=2.12.1,<3.0a0 - - jpeg >=9e,<10a - - lcms2 >=2.14,<3.0a0 - - libtiff >=4.5.0,<4.6.0a0 - - libwebp-base >=1.2.4,<2.0a0 - - libxcb >=1.13,<1.14.0a0 - - libzlib >=1.2.13,<2.0.0a0 - - openjpeg >=2.5.0,<3.0a0 - - python >=3.10,<3.11.0a0 - - python >=3.10,<3.11.0a0 *_cpython - - python_abi 3.10.* *_cp310 - - tk >=8.6.12,<8.7.0a0 - license: LicenseRef-PIL - purls: - - pkg:pypi/pillow?source=hash-mapping - size: 46538172 - timestamp: 1675487797070 -- kind: conda + version: 11.0.0 + url: https://files.pythonhosted.org/packages/41/c3/94f33af0762ed76b5a237c5797e088aa57f2b7fa8ee7932d399087be66a8/pillow-11.0.0-cp310-cp310-manylinux_2_28_x86_64.whl + sha256: 1a61b54f87ab5786b8479f81c4b11f4d61702830354520837f8cc791ebba0f5f + requires_dist: + - furo ; extra == 'docs' + - olefile ; extra == 'docs' + - sphinx>=8.1 ; extra == 'docs' + - sphinx-copybutton ; extra == 'docs' + - sphinx-inline-tabs ; extra == 'docs' + - sphinxext-opengraph ; extra == 'docs' + - olefile ; extra == 'fpx' + - olefile ; extra == 'mic' + - check-manifest ; extra == 'tests' + - coverage ; extra == 'tests' + - defusedxml ; extra == 'tests' + - markdown2 ; extra == 'tests' + - olefile ; extra == 'tests' + - packaging ; extra == 'tests' + - pyroma ; extra == 'tests' + - pytest ; extra == 'tests' + - pytest-cov ; extra == 'tests' + - pytest-timeout ; extra == 'tests' + - typing-extensions ; python_full_version < '3.10' and extra == 'typing' + - defusedxml ; extra == 'xmp' + requires_python: '>=3.9' +- kind: pypi name: pillow - version: 10.0.1 - build: py310h29da1c1_1 - build_number: 1 - subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/pillow-10.0.1-py310h29da1c1_1.conda - sha256: 4c18593b1b90299e0f1f7a279ccce6dbe0aba694758ee039c0850e0119d3b3e8 - md5: 8e93b1c69cddf89fd412178d3d418bae - depends: - - freetype >=2.12.1,<3.0a0 - - lcms2 >=2.15,<3.0a0 - - libgcc-ng >=12 - - libjpeg-turbo >=2.1.5.1,<3.0a0 - - libtiff >=4.6.0,<4.8.0a0 - - libwebp-base >=1.3.2,<2.0a0 - - libxcb >=1.15,<1.16.0a0 - - libzlib >=1.2.13,<2.0.0a0 - - openjpeg >=2.5.0,<3.0a0 - - python >=3.10,<3.11.0a0 - - python_abi 3.10.* *_cp310 - - tk >=8.6.12,<8.7.0a0 - license: HPND - purls: - - pkg:pypi/pillow?source=hash-mapping - size: 46384048 - timestamp: 1695247436468 -- kind: conda + version: 11.0.0 + url: https://files.pythonhosted.org/packages/6a/1d/1f51e6e912d8ff316bb3935a8cda617c801783e0b998bf7a894e91d3bd4c/pillow-11.0.0-cp310-cp310-macosx_11_0_arm64.whl + sha256: b3c5ac4bed7519088103d9450a1107f76308ecf91d6dabc8a33a2fcfb18d0fba + requires_dist: + - furo ; extra == 'docs' + - olefile ; extra == 'docs' + - sphinx>=8.1 ; extra == 'docs' + - sphinx-copybutton ; extra == 'docs' + - sphinx-inline-tabs ; extra == 'docs' + - sphinxext-opengraph ; extra == 'docs' + - olefile ; extra == 'fpx' + - olefile ; extra == 'mic' + - check-manifest ; extra == 'tests' + - coverage ; extra == 'tests' + - defusedxml ; extra == 'tests' + - markdown2 ; extra == 'tests' + - olefile ; extra == 'tests' + - packaging ; extra == 'tests' + - pyroma ; extra == 'tests' + - pytest ; extra == 'tests' + - pytest-cov ; extra == 'tests' + - pytest-timeout ; extra == 'tests' + - typing-extensions ; python_full_version < '3.10' and extra == 'typing' + - defusedxml ; extra == 'xmp' + requires_python: '>=3.9' +- kind: pypi name: pillow - version: 10.4.0 - build: py310h3e38d90_1 - build_number: 1 - subdir: win-64 - url: https://conda.anaconda.org/conda-forge/win-64/pillow-10.4.0-py310h3e38d90_1.conda - sha256: fb730c9510ccf16579762db20383eaee447bda3f5f2f0b0691029c87af462c7a - md5: d9a32c4725436b99df60fdc9c14545d1 - depends: - - freetype >=2.12.1,<3.0a0 - - lcms2 >=2.16,<3.0a0 - - libjpeg-turbo >=3.0.0,<4.0a0 - - libtiff >=4.6.0,<4.8.0a0 - - libwebp-base >=1.4.0,<2.0a0 - - libxcb >=1.16,<2.0.0a0 - - libzlib >=1.3.1,<2.0a0 - - openjpeg >=2.5.2,<3.0a0 - - python >=3.10,<3.11.0a0 - - python_abi 3.10.* *_cp310 - - tk >=8.6.13,<8.7.0a0 - - ucrt >=10.0.20348.0 - - vc >=14.2,<15 - - vc14_runtime >=14.29.30139 - license: HPND - purls: - - pkg:pypi/pillow?source=hash-mapping - size: 42223178 - timestamp: 1726075720583 -- kind: conda + version: 11.0.0 + url: https://files.pythonhosted.org/packages/98/fb/a6ce6836bd7fd93fbf9144bf54789e02babc27403b50a9e1583ee877d6da/pillow-11.0.0-cp310-cp310-macosx_10_10_x86_64.whl + sha256: 6619654954dc4936fcff82db8eb6401d3159ec6be81e33c6000dfd76ae189947 + requires_dist: + - furo ; extra == 'docs' + - olefile ; extra == 'docs' + - sphinx>=8.1 ; extra == 'docs' + - sphinx-copybutton ; extra == 'docs' + - sphinx-inline-tabs ; extra == 'docs' + - sphinxext-opengraph ; extra == 'docs' + - olefile ; extra == 'fpx' + - olefile ; extra == 'mic' + - check-manifest ; extra == 'tests' + - coverage ; extra == 'tests' + - defusedxml ; extra == 'tests' + - markdown2 ; extra == 'tests' + - olefile ; extra == 'tests' + - packaging ; extra == 'tests' + - pyroma ; extra == 'tests' + - pytest ; extra == 'tests' + - pytest-cov ; extra == 'tests' + - pytest-timeout ; extra == 'tests' + - typing-extensions ; python_full_version < '3.10' and extra == 'typing' + - defusedxml ; extra == 'xmp' + requires_python: '>=3.9' +- kind: pypi name: pillow - version: 10.4.0 - build: py310h4e5c94f_1 - build_number: 1 - subdir: osx-64 - url: https://conda.anaconda.org/conda-forge/osx-64/pillow-10.4.0-py310h4e5c94f_1.conda - sha256: cf128b95b56f00899554cf9a5aaa27cfe2848a206ecf2213c61611618ef1dc2a - md5: 31b33895efed8544cf692daf0d39190d - depends: - - __osx >=10.13 - - freetype >=2.12.1,<3.0a0 - - lcms2 >=2.16,<3.0a0 - - libjpeg-turbo >=3.0.0,<4.0a0 - - libtiff >=4.6.0,<4.8.0a0 - - libwebp-base >=1.4.0,<2.0a0 - - libxcb >=1.16,<2.0.0a0 - - libzlib >=1.3.1,<2.0a0 - - openjpeg >=2.5.2,<3.0a0 - - python >=3.10,<3.11.0a0 - - python_abi 3.10.* *_cp310 - - tk >=8.6.13,<8.7.0a0 - license: HPND - purls: - - pkg:pypi/pillow?source=hash-mapping - size: 42531285 - timestamp: 1726075316302 + version: 11.0.0 + url: https://files.pythonhosted.org/packages/d5/4e/78f7c5202ea2a772a5ab05069c1b82503e6353cd79c7e474d4945f4b82c3/pillow-11.0.0-cp310-cp310-win_amd64.whl + sha256: a5629742881bcbc1f42e840af185fd4d83a5edeb96475a575f4da50d6ede337c + requires_dist: + - furo ; extra == 'docs' + - olefile ; extra == 'docs' + - sphinx>=8.1 ; extra == 'docs' + - sphinx-copybutton ; extra == 'docs' + - sphinx-inline-tabs ; extra == 'docs' + - sphinxext-opengraph ; extra == 'docs' + - olefile ; extra == 'fpx' + - olefile ; extra == 'mic' + - check-manifest ; extra == 'tests' + - coverage ; extra == 'tests' + - defusedxml ; extra == 'tests' + - markdown2 ; extra == 'tests' + - olefile ; extra == 'tests' + - packaging ; extra == 'tests' + - pyroma ; extra == 'tests' + - pytest ; extra == 'tests' + - pytest-cov ; extra == 'tests' + - pytest-timeout ; extra == 'tests' + - typing-extensions ; python_full_version < '3.10' and extra == 'typing' + - defusedxml ; extra == 'xmp' + requires_python: '>=3.9' - kind: conda name: pip version: 23.2.1 @@ -9602,98 +10927,6 @@ packages: - pkg:pypi/prompt-toolkit?source=hash-mapping size: 270271 timestamp: 1727341744544 -- kind: conda - name: protobuf - version: 4.23.3 - build: py310h4e8a696_0 - subdir: osx-64 - url: https://conda.anaconda.org/conda-forge/osx-64/protobuf-4.23.3-py310h4e8a696_0.conda - sha256: 28801d92d3ea66ac6f1ad961af1974479f9499cf62940616bd269ab62ca08d44 - md5: 8da9b5d52ebad6a80785fdf5f2c57ff9 - depends: - - libabseil * cxx17* - - libabseil >=20230125.3,<20230126.0a0 - - libcxx >=15.0.7 - - libprotobuf >=4.23.3,<4.23.4.0a0 - - python >=3.10,<3.11.0a0 - - python_abi 3.10.* *_cp310 - - setuptools - license: BSD-3-Clause - license_family: BSD - purls: - - pkg:pypi/protobuf?source=hash-mapping - size: 304050 - timestamp: 1688121734447 -- kind: conda - name: protobuf - version: 4.23.3 - build: py310ha3d488f_0 - subdir: win-64 - url: https://conda.anaconda.org/conda-forge/win-64/protobuf-4.23.3-py310ha3d488f_0.conda - sha256: ebb697fed21b185a1b2a8611f869d517da86de007c7e814acc6d5838cd2d7b8e - md5: a65f902a101c1ec7bedfe48b65756379 - depends: - - libabseil * cxx17* - - libabseil >=20230125.3,<20230126.0a0 - - libprotobuf >=4.23.3,<4.23.4.0a0 - - python >=3.10,<3.11.0a0 - - python_abi 3.10.* *_cp310 - - setuptools - - ucrt >=10.0.20348.0 - - vc >=14.2,<15 - - vc14_runtime >=14.29.30139 - license: BSD-3-Clause - license_family: BSD - purls: - - pkg:pypi/protobuf?source=hash-mapping - size: 305533 - timestamp: 1688121734729 -- kind: conda - name: protobuf - version: 4.23.3 - build: py310hb875b13_0 - subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/protobuf-4.23.3-py310hb875b13_0.conda - sha256: b92f2c7728f1625003a247721af5b22c8100a92714596ce8158a07790221c40e - md5: 27ce7010f8821add3b955ec88f663bb6 - depends: - - libabseil * cxx17* - - libabseil >=20230125.3,<20230126.0a0 - - libgcc-ng >=12 - - libprotobuf >=4.23.3,<4.23.4.0a0 - - libstdcxx-ng >=12 - - python >=3.10,<3.11.0a0 - - python_abi 3.10.* *_cp310 - - setuptools - license: BSD-3-Clause - license_family: BSD - purls: - - pkg:pypi/protobuf?source=hash-mapping - size: 325773 - timestamp: 1688121366252 -- kind: conda - name: protobuf - version: 4.23.3 - build: py310hf4e154e_0 - subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/protobuf-4.23.3-py310hf4e154e_0.conda - sha256: 6a2bc6b6f9bba49ea6e6597316ee0cba53a5fb895358a74ac65c06e810799314 - md5: 1380d038b8479490f5128f29c0d3cbc1 - depends: - - libabseil * cxx17* - - libabseil >=20230125.3,<20230126.0a0 - - libcxx >=15.0.7 - - libprotobuf >=4.23.3,<4.23.4.0a0 - - python >=3.10,<3.11.0a0 - - python >=3.10,<3.11.0a0 *_cpython - - python_abi 3.10.* *_cp310 - - setuptools - license: BSD-3-Clause - license_family: BSD - purls: - - pkg:pypi/protobuf?source=hash-mapping - size: 309752 - timestamp: 1688121806045 - kind: conda name: psutil version: 5.9.5 @@ -9790,22 +11023,6 @@ packages: - pkg:pypi/psygnal?source=hash-mapping size: 63627 timestamp: 1715085720906 -- kind: conda - name: pthread-stubs - version: '0.4' - build: h00291cd_1002 - build_number: 1002 - subdir: osx-64 - url: https://conda.anaconda.org/conda-forge/osx-64/pthread-stubs-0.4-h00291cd_1002.conda - sha256: 05944ca3445f31614f8c674c560bca02ff05cb51637a96f665cb2bbe496099e5 - md5: 8bcf980d2c6b17094961198284b8e862 - depends: - - __osx >=10.13 - license: MIT - license_family: MIT - purls: [] - size: 8364 - timestamp: 1726802331537 - kind: conda name: pthread-stubs version: '0.4' @@ -9824,119 +11041,258 @@ packages: size: 8252 timestamp: 1726802366959 - kind: conda - name: pthread-stubs - version: '0.4' - build: hcd874cb_1001 - build_number: 1001 + name: pthreads-win32 + version: 2.9.1 + build: h2466b09_4 + build_number: 4 subdir: win-64 - url: https://conda.anaconda.org/conda-forge/win-64/pthread-stubs-0.4-hcd874cb_1001.tar.bz2 - sha256: bb5a6ddf1a609a63addd6d7b488b0f58d05092ea84e9203283409bff539e202a - md5: a1f820480193ea83582b13249a7e7bd9 + url: https://conda.anaconda.org/conda-forge/win-64/pthreads-win32-2.9.1-h2466b09_4.conda + sha256: b989bdcf0a22ba05a238adac1ad3452c11871681f565e509f629e225a26b7d45 + md5: cf98a67a1ec8040b42455002a24f0b0b depends: - - m2w64-gcc-libs + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + license: LGPL-2.1-or-later + purls: [] + size: 265827 + timestamp: 1728400965968 +- 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: pyarrow + version: 16.1.0 + build: py310h05ea346_6 + build_number: 6 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/pyarrow-16.1.0-py310h05ea346_6.conda + sha256: 3892e14986107666b165ff055e8539e1c332c540b8dc025f30094bfc6ae4025c + md5: 84a0fe106561e80bee97362e05852ba3 + depends: + - libarrow-acero 16.1.0.* + - libarrow-dataset 16.1.0.* + - libarrow-substrait 16.1.0.* + - libparquet 16.1.0.* + - numpy >=1.19,<3 + - pyarrow-core 16.1.0 *_6_* + - python >=3.10,<3.11.0a0 + - python_abi 3.10.* *_cp310 + license: Apache-2.0 + license_family: APACHE purls: [] - size: 6417 - timestamp: 1606147814351 + size: 28621 + timestamp: 1730170385743 - kind: conda - name: pthread-stubs - version: '0.4' - build: hd74edd7_1002 - build_number: 1002 + name: pyarrow + version: 16.1.0 + build: py310h24597f5_4 + build_number: 4 subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/pthread-stubs-0.4-hd74edd7_1002.conda - sha256: 8ed65e17fbb0ca944bfb8093b60086e3f9dd678c3448b5de212017394c247ee3 - md5: 415816daf82e0b23a736a069a75e9da7 + url: https://conda.anaconda.org/conda-forge/osx-arm64/pyarrow-16.1.0-py310h24597f5_4.conda + sha256: 4d6682f14cd10758592875c37e35c7e5e244bf26f62d716a4b9edc7ed6d45774 + md5: b8c448a3f70f295c05e15913a6a94588 depends: - - __osx >=11.0 - license: MIT - license_family: MIT + - libarrow-acero 16.1.0.* + - libarrow-dataset 16.1.0.* + - libarrow-substrait 16.1.0.* + - libparquet 16.1.0.* + - numpy >=1.19,<3 + - pyarrow-core 16.1.0 *_4_* + - python >=3.10,<3.11.0a0 + - python_abi 3.10.* *_cp310 + license: Apache-2.0 + license_family: APACHE purls: [] - size: 8381 - timestamp: 1726802424786 + size: 28438 + timestamp: 1719451267298 - kind: conda - name: pthreads-win32 - version: 2.9.1 - build: h2466b09_4 + name: pyarrow + version: 16.1.0 + build: py310h58fd45c_6 + build_number: 6 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/pyarrow-16.1.0-py310h58fd45c_6.conda + sha256: 979dcc5be978881bedb47f5e9182e2ce2c2c2b5b3f97b762201cb905099b95e5 + md5: fa8def271556069b6a5b63eee35d85a3 + depends: + - libarrow-acero 16.1.0.* + - libarrow-dataset 16.1.0.* + - libarrow-substrait 16.1.0.* + - libparquet 16.1.0.* + - numpy >=1.19,<3 + - pyarrow-core 16.1.0 *_6_* + - python >=3.10,<3.11.0a0 + - python_abi 3.10.* *_cp310 + license: Apache-2.0 + license_family: APACHE + purls: [] + size: 28205 + timestamp: 1730173866649 +- kind: conda + name: pyarrow + version: 16.1.0 + build: py310hb7f781d_6 + build_number: 6 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/pyarrow-16.1.0-py310hb7f781d_6.conda + sha256: d417cf50d3090f22ad63f7641fb4d4efc6fd1cb77d2412fac4649b801b9bf585 + md5: fdb4acd5dd835ffadde6a8fffe4dff6c + depends: + - libarrow-acero 16.1.0.* + - libarrow-dataset 16.1.0.* + - libarrow-substrait 16.1.0.* + - libparquet 16.1.0.* + - numpy >=1.19,<3 + - pyarrow-core 16.1.0 *_6_* + - python >=3.10,<3.11.0a0 + - python_abi 3.10.* *_cp310 + license: Apache-2.0 + license_family: APACHE + purls: [] + size: 28026 + timestamp: 1730169796447 +- kind: conda + name: pyarrow-core + version: 16.1.0 + build: py310h2e300fa_4_cpu build_number: 4 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/pyarrow-core-16.1.0-py310h2e300fa_4_cpu.conda + sha256: 41553c3b1ea285dabbb3df20cff7d286aba13414f1c8dfe2ba60e9cd82a88cd8 + md5: b4829fd36c8630411657840a12bcf215 + depends: + - __osx >=11.0 + - libarrow 16.1.0.* *cpu + - libcxx >=16 + - libzlib >=1.3.1,<2.0a0 + - numpy >=1.19,<3 + - python >=3.10,<3.11.0a0 + - python >=3.10,<3.11.0a0 *_cpython + - python_abi 3.10.* *_cp310 + constrains: + - aws-crt-cpp >=0.26.12 + - orc >=2.0.1 + - apache-arrow-proc =*=cpu + license: Apache-2.0 + license_family: APACHE + purls: + - pkg:pypi/pyarrow?source=hash-mapping + size: 3805883 + timestamp: 1719451185702 +- kind: conda + name: pyarrow-core + version: 16.1.0 + build: py310h399dd74_6_cpu + build_number: 6 subdir: win-64 - url: https://conda.anaconda.org/conda-forge/win-64/pthreads-win32-2.9.1-h2466b09_4.conda - sha256: b989bdcf0a22ba05a238adac1ad3452c11871681f565e509f629e225a26b7d45 - md5: cf98a67a1ec8040b42455002a24f0b0b + url: https://conda.anaconda.org/conda-forge/win-64/pyarrow-core-16.1.0-py310h399dd74_6_cpu.conda + sha256: c71426c64f9064256ccc334638597b78bf142686f7bd8984ee7f8a255e4eea1b + md5: 6325384d3059a511c8842b16aee5d12d depends: + - libarrow 16.1.0.* *cpu + - libzlib >=1.3.1,<2.0a0 + - numpy >=1.19,<3 + - python >=3.10,<3.11.0a0 + - python_abi 3.10.* *_cp310 - ucrt >=10.0.20348.0 - vc >=14.2,<15 - vc14_runtime >=14.29.30139 - license: LGPL-2.1-or-later - purls: [] - size: 265827 - timestamp: 1728400965968 + constrains: + - orc >=2.0.1 + - apache-arrow-proc =*=cpu + - libgoogle-cloud >=2.26 + license: Apache-2.0 + license_family: APACHE + purls: + - pkg:pypi/pyarrow?source=hash-mapping + size: 3339824 + timestamp: 1730169690826 - 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 + name: pyarrow-core + version: 16.1.0 + build: py310h86202ae_6_cpu + build_number: 6 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/pyarrow-core-16.1.0-py310h86202ae_6_cpu.conda + sha256: 7494a338af7f963943c06efceb6e12e83116b902d7c84a18b433dc64e9e2bfb1 + md5: b4e4a0a00625d672394335ae3a6b9885 depends: - - python - license: ISC + - __osx >=10.13 + - libarrow 16.1.0.* *cpu + - libcxx >=18 + - libzlib >=1.3.1,<2.0a0 + - numpy >=1.19,<3 + - python >=3.10,<3.11.0a0 + - python_abi 3.10.* *_cp310 + constrains: + - apache-arrow-proc =*=cpu + - libgoogle-cloud >=2.26 + - orc >=2.0.1 + license: Apache-2.0 + license_family: APACHE purls: - - pkg:pypi/ptyprocess?source=hash-mapping - size: 16546 - timestamp: 1609419417991 + - pkg:pypi/pyarrow?source=hash-mapping + size: 3855575 + timestamp: 1730173845027 - 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 + name: pyarrow-core + version: 16.1.0 + build: py310hac404ae_6_cpu + build_number: 6 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/pyarrow-core-16.1.0-py310hac404ae_6_cpu.conda + sha256: 83235db29b43fbc0b5e58927e5b9da932b706551be1268ad038382b0d85c37ad + md5: d1200399b0a5fe0cf0eb31f3991ede0c depends: - - python >=3.5 - license: MIT - license_family: MIT + - __glibc >=2.17,<3.0.a0 + - libarrow 16.1.0.* *cpu + - libgcc >=13 + - libstdcxx >=13 + - libzlib >=1.3.1,<2.0a0 + - numpy >=1.19,<3 + - python >=3.10,<3.11.0a0 + - python_abi 3.10.* *_cp310 + constrains: + - orc >=2.0.1 + - apache-arrow-proc =*=cpu + - libgoogle-cloud >=2.26 + license: Apache-2.0 + license_family: APACHE purls: - - pkg:pypi/pure-eval?source=hash-mapping - size: 16551 - timestamp: 1721585805256 -- kind: pypi - name: pyarrow - version: 16.0.0 - url: https://files.pythonhosted.org/packages/5b/04/c2a6f3ae840d96a00de2e07d68a3d30591b413b15b4385242e47e2ae0e97/pyarrow-16.0.0-cp310-cp310-macosx_11_0_arm64.whl - sha256: 574a00260a4ed9d118a14770edbd440b848fcae5a3024128be9d0274dbcaf858 - requires_dist: - - numpy>=1.16.6 - requires_python: '>=3.8' -- kind: pypi - name: pyarrow - version: 16.0.0 - url: https://files.pythonhosted.org/packages/83/b7/77b5a755560329ebe12b16a7a15074fb003685e1cbcfef8dcab0a05fdd58/pyarrow-16.0.0-cp310-cp310-manylinux_2_28_x86_64.whl - sha256: 91d28f9a40f1264eab2af7905a4d95320ac2f287891e9c8b0035f264fe3c3a4b - requires_dist: - - numpy>=1.16.6 - requires_python: '>=3.8' -- kind: pypi - name: pyarrow - version: 16.0.0 - url: https://files.pythonhosted.org/packages/95/7a/36243efd5a9c1a0ac1146fa69044f4676eac13a162c8fb388869262330fe/pyarrow-16.0.0-cp310-cp310-win_amd64.whl - sha256: 99af421ee451a78884d7faea23816c429e263bd3618b22d38e7992c9ce2a7ad9 - requires_dist: - - numpy>=1.16.6 - requires_python: '>=3.8' -- kind: pypi - name: pyarrow - version: 16.0.0 - url: https://files.pythonhosted.org/packages/fd/5c/a4349f50b36382d3f40b304b91a3587ac433baceed9bec2434d663393a51/pyarrow-16.0.0-cp310-cp310-macosx_10_15_x86_64.whl - sha256: 22a1fdb1254e5095d629e29cd1ea98ed04b4bbfd8e42cc670a6b639ccc208b60 - requires_dist: - - numpy>=1.16.6 - requires_python: '>=3.8' + - pkg:pypi/pyarrow?source=hash-mapping + size: 4428953 + timestamp: 1730169442255 - kind: conda name: pycparser version: '2.22' @@ -10483,94 +11839,6 @@ packages: - pkg:pypi/pytz?source=hash-mapping size: 188538 timestamp: 1706886944988 -- kind: conda - name: pywavelets - version: 1.7.0 - build: py310h003b70b_2 - build_number: 2 - subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/pywavelets-1.7.0-py310h003b70b_2.conda - sha256: 08501c5710f21f6505793f90f2839ba85110350c562a9146417957f69112568e - md5: 9803408e916ae8aa2449802b57529e17 - depends: - - __osx >=11.0 - - numpy >=1.19,<3 - - numpy >=1.23,<3 - - python >=3.10,<3.11.0a0 - - python >=3.10,<3.11.0a0 *_cpython - - python_abi 3.10.* *_cp310 - license: MIT - license_family: MIT - purls: - - pkg:pypi/pywavelets?source=hash-mapping - size: 3616171 - timestamp: 1728928836206 -- kind: conda - name: pywavelets - version: 1.7.0 - build: py310hb0944cc_2 - build_number: 2 - subdir: win-64 - url: https://conda.anaconda.org/conda-forge/win-64/pywavelets-1.7.0-py310hb0944cc_2.conda - sha256: 8c785f583155c9513333f79b8065eb9b6f9c659ac57e348c7228440d446832e3 - md5: d54acde60f766f1178137b17b65c74bf - depends: - - numpy >=1.19,<3 - - numpy >=1.23,<3 - - python >=3.10,<3.11.0a0 - - python_abi 3.10.* *_cp310 - - ucrt >=10.0.20348.0 - - vc >=14.2,<15 - - vc14_runtime >=14.29.30139 - license: MIT - license_family: MIT - purls: - - pkg:pypi/pywavelets?source=hash-mapping - size: 3554116 - timestamp: 1728929614357 -- kind: conda - name: pywavelets - version: 1.7.0 - build: py310hcda71e8_2 - build_number: 2 - subdir: osx-64 - url: https://conda.anaconda.org/conda-forge/osx-64/pywavelets-1.7.0-py310hcda71e8_2.conda - sha256: 8c4f1a4c6fb290e748f6be40950f399013ddb36c2b58b8331f3b8c029aa1fb76 - md5: b1c615709b950a208cccd0b93dbe29e7 - depends: - - __osx >=10.13 - - numpy >=1.19,<3 - - numpy >=1.23,<3 - - python >=3.10,<3.11.0a0 - - python_abi 3.10.* *_cp310 - license: MIT - license_family: MIT - purls: - - pkg:pypi/pywavelets?source=hash-mapping - size: 3603856 - timestamp: 1728928865129 -- kind: conda - name: pywavelets - version: 1.7.0 - build: py310hf462985_2 - build_number: 2 - subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/pywavelets-1.7.0-py310hf462985_2.conda - sha256: 902be1151055b0bdb0c6ea1be8de26a600c8019a93116bf1c9c531ebb7c20c24 - md5: bb603a9ffd8f7e97c93c74a5e3c3febd - depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=13 - - numpy >=1.19,<3 - - numpy >=1.23,<3 - - python >=3.10,<3.11.0a0 - - python_abi 3.10.* *_cp310 - license: MIT - license_family: MIT - purls: - - pkg:pypi/pywavelets?source=hash-mapping - size: 3689659 - timestamp: 1728928688572 - kind: conda name: pywin32 version: '307' @@ -10789,116 +12057,69 @@ packages: size: 314132 timestamp: 1728642745677 - kind: conda - name: rav1e - version: 0.6.6 - build: h7205ca4_2 - build_number: 2 - subdir: osx-64 - url: https://conda.anaconda.org/conda-forge/osx-64/rav1e-0.6.6-h7205ca4_2.conda - sha256: 046ac50530590cd2a5d9bcb1e581bdd168e06049230ad3afd8cce2fa71b429d9 - md5: ab03527926f8ce85f84a91fd35520ef2 - license: BSD-2-Clause - license_family: BSD - purls: [] - size: 1767853 - timestamp: 1694329738983 -- kind: conda - name: rav1e - version: 0.6.6 - build: h975169c_2 - build_number: 2 - subdir: win-64 - url: https://conda.anaconda.org/conda-forge/win-64/rav1e-0.6.6-h975169c_2.conda - sha256: 3193451440e5ac737b7d5d2a79f9e012d426c0c53e41e60df4992150bfc39565 - md5: bd32cc2ed62374932f9d57a2e3eb2863 - depends: - - ucrt >=10.0.20348.0 - - vc >=14.2,<15 - - vc14_runtime >=14.29.30139 - license: BSD-2-Clause - license_family: BSD - purls: [] - size: 1523119 - timestamp: 1694330157594 -- kind: conda - name: rav1e - version: 0.6.6 - build: he8a937b_2 + name: re2 + version: 2023.09.01 + build: h4cba328_2 build_number: 2 - subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/rav1e-0.6.6-he8a937b_2.conda - sha256: 91b3c1ced90d04ee2eded1f72cf3cbc19ff05a25e41876ef0758266a5bab009f - md5: 77d9955b4abddb811cb8ab1aa7d743e4 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/re2-2023.09.01-h4cba328_2.conda + sha256: 0e0d44414381c39a7e6f3da442cb41c637df0dcb383a07425f19c19ccffa0118 + md5: 0342882197116478a42fa4ea35af79c1 depends: - - libgcc-ng >=12 - license: BSD-2-Clause + - libre2-11 2023.09.01 h7b2c953_2 + license: BSD-3-Clause license_family: BSD purls: [] - size: 15423721 - timestamp: 1694329261357 + size: 26770 + timestamp: 1708947220914 - kind: conda name: re2 - version: 2023.03.02 - build: h096449b_0 + version: 2024.07.02 + build: h2fb0a26_1 + build_number: 1 subdir: osx-64 - url: https://conda.anaconda.org/conda-forge/osx-64/re2-2023.03.02-h096449b_0.conda - sha256: 6faebc3e5cb65bdf1ca5f1333d83118ec4b92c0d6fc27044cc998dab7e501a11 - md5: 68580e997396899915eef7771ef3a646 + url: https://conda.anaconda.org/conda-forge/osx-64/re2-2024.07.02-h2fb0a26_1.conda + sha256: 49ec4ed6249efe9cda173745e036137f8de1f0b22edf9b0ca4f9c6409b2b68f9 + md5: aa8ea927cdbdf690efeae3e575716131 depends: - - libcxx >=14.0.6 + - libre2-11 2024.07.02 hd530cb8_1 license: BSD-3-Clause license_family: BSD purls: [] - size: 185478 - timestamp: 1677699240835 + size: 26864 + timestamp: 1728779054104 - kind: conda name: re2 - version: 2023.03.02 - build: h8c504da_0 + version: 2024.07.02 + build: h77b4e00_1 + build_number: 1 subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/re2-2023.03.02-h8c504da_0.conda - sha256: 1727f893a352ca735fb96b09f9edf6fe18c409d65550fd37e8a192919e8c827b - md5: 206f8fa808748f6e90599c3368a1114e - depends: - - libgcc-ng >=12 - - libstdcxx-ng >=12 - license: BSD-3-Clause - license_family: BSD - purls: [] - size: 201211 - timestamp: 1677698930545 -- kind: conda - name: re2 - version: 2023.03.02 - build: hc5e2d97_0 - subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/re2-2023.03.02-hc5e2d97_0.conda - sha256: 39bc32dcef3b699e6f748cc51d5e6b05ab788334d5787c64f069f0122e74c0c5 - md5: 7a851c0ab05247e3246eca2c3b243b9a + url: https://conda.anaconda.org/conda-forge/linux-64/re2-2024.07.02-h77b4e00_1.conda + sha256: c1721cb80f7201652fc9801f49c214c88aee835d957f2376e301bd40a8415742 + md5: 01093ff37c1b5e6bf9f17c0116747d11 depends: - - libcxx >=14.0.6 + - libre2-11 2024.07.02 hbbce691_1 license: BSD-3-Clause license_family: BSD purls: [] - size: 169959 - timestamp: 1677699275465 + size: 26665 + timestamp: 1728778975855 - kind: conda name: re2 - version: 2023.03.02 - build: hd4eee63_0 + version: 2024.07.02 + build: hd3b24a8_1 + build_number: 1 subdir: win-64 - url: https://conda.anaconda.org/conda-forge/win-64/re2-2023.03.02-hd4eee63_0.conda - sha256: 8e1bccfe360351251b6a7140bebe66e9f678d940926bb7a92b1b2b06325fdd34 - md5: a59c371d7364446cf1d0b8299e05c1ea + url: https://conda.anaconda.org/conda-forge/win-64/re2-2024.07.02-hd3b24a8_1.conda + sha256: 5ac1c50d731c323bb52c78113792a71c5f8f060e5767c0a202120a948e0fc85b + md5: b4abdc84c969587219e7e759116a3e8b depends: - - ucrt >=10.0.20348.0 - - vc >=14.2,<15 - - vs2015_runtime >=14.29.30139 + - libre2-11 2024.07.02 h4eb7d71_1 license: BSD-3-Clause license_family: BSD purls: [] - size: 378635 - timestamp: 1677699429007 + size: 214858 + timestamp: 1728779526745 - kind: conda name: readline version: '8.2' @@ -11027,90 +12248,86 @@ packages: timestamp: 1598024297745 - kind: conda name: rpds-py - version: 0.20.0 - build: py310h4bd000d_1 - build_number: 1 - subdir: osx-64 - url: https://conda.anaconda.org/conda-forge/osx-64/rpds-py-0.20.0-py310h4bd000d_1.conda - sha256: dd2b65ec7205e25f70f758f6b2a5a000cd2daf12de33b360c0a1ed070b85f335 - md5: 3e37416afbb67e62d881d3742ef4af1b + version: 0.21.0 + build: py310h505e2c1_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/rpds-py-0.21.0-py310h505e2c1_0.conda + sha256: ec1575ef0faf919b396c4d93a06c571c9b104872ebc2cb0cfc01eb822009c75b + md5: 060aac00c8de3dcf3d329c1a7c2250fb depends: - - __osx >=10.13 + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 - python >=3.10,<3.11.0a0 - python_abi 3.10.* *_cp310 constrains: - - __osx >=10.13 + - __glibc >=2.17 license: MIT license_family: MIT purls: - pkg:pypi/rpds-py?source=hash-mapping - size: 297517 - timestamp: 1725327314240 + size: 334229 + timestamp: 1730922794405 - kind: conda name: rpds-py - version: 0.20.0 - build: py310h505e2c1_1 - build_number: 1 - subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/rpds-py-0.20.0-py310h505e2c1_1.conda - sha256: 30b77b0487e78092117a60df392568d622c784138bccc026b4bcd32492c388aa - md5: 315cebbd626f425e8abfa9a447fbe924 + version: 0.21.0 + build: py310h98870a7_0 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/rpds-py-0.21.0-py310h98870a7_0.conda + sha256: 3c90af5e14e35c54c70d76e02d5c581a0cf4ebecbf34b9063199fa9913faeedb + md5: b0df68b633d87349f58d24cb94a26efd depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=13 + - __osx >=10.13 - python >=3.10,<3.11.0a0 - python_abi 3.10.* *_cp310 constrains: - - __glibc >=2.17 + - __osx >=10.13 license: MIT license_family: MIT purls: - pkg:pypi/rpds-py?source=hash-mapping - size: 331772 - timestamp: 1725327229240 + size: 301434 + timestamp: 1730923015524 - kind: conda name: rpds-py - version: 0.20.0 - build: py310h7a930dc_1 - build_number: 1 - subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/rpds-py-0.20.0-py310h7a930dc_1.conda - sha256: c07e7cb6f7ef073ef0a2850b6ec6fa07e911774b3bb09239fcfac53b6f56b83f - md5: a099b39eeb1515df02708cdf460325ec + version: 0.21.0 + build: py310hc226416_0 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/rpds-py-0.21.0-py310hc226416_0.conda + sha256: f6655c46f0d8b43aa4d867f0c536578443207239dc208b8c4ce1ddc3fd57b971 + md5: d369f36636cd4ee9b1b945642fed0b78 depends: - - __osx >=11.0 - python >=3.10,<3.11.0a0 - - python >=3.10,<3.11.0a0 *_cpython - python_abi 3.10.* *_cp310 - constrains: - - __osx >=11.0 + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 license: MIT license_family: MIT purls: - pkg:pypi/rpds-py?source=hash-mapping - size: 290841 - timestamp: 1725327382953 + size: 210921 + timestamp: 1730923228038 - kind: conda name: rpds-py - version: 0.20.0 - build: py310hc226416_1 - build_number: 1 - subdir: win-64 - url: https://conda.anaconda.org/conda-forge/win-64/rpds-py-0.20.0-py310hc226416_1.conda - sha256: 292147469719f2e4aa77730c296bd72bba533da1a70f12709ddcc285966cea8c - md5: 693680d5c99d64bbe1c8297a1d30cc97 + version: 0.21.0 + build: py310hde4708a_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/rpds-py-0.21.0-py310hde4708a_0.conda + sha256: 614584781ee1c8b4f87495de488e41a7bfef6f399ec374eecccf793a9b6fce7e + md5: badb14a248d4f5955da67aae0243d2d6 depends: + - __osx >=11.0 - python >=3.10,<3.11.0a0 + - python >=3.10,<3.11.0a0 *_cpython - python_abi 3.10.* *_cp310 - - ucrt >=10.0.20348.0 - - vc >=14.2,<15 - - vc14_runtime >=14.29.30139 + constrains: + - __osx >=11.0 license: MIT license_family: MIT purls: - pkg:pypi/rpds-py?source=hash-mapping - size: 208391 - timestamp: 1725327781774 + size: 293748 + timestamp: 1730923008139 - kind: conda name: ruff version: 0.6.9 @@ -11332,174 +12549,301 @@ packages: size: 33938994 timestamp: 1723153507938 - kind: conda - name: scikit-image - version: 0.24.0 - build: py310h0cd1892_2 - build_number: 2 + name: s2n + version: 1.5.6 + build: h0e56266_0 subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/scikit-image-0.24.0-py310h0cd1892_2.conda - sha256: 39e41c38a0313569330c6b867b72665d98439c265b6f555e20562a0829fd173a - md5: 537b6062b8cbca1ebaa205c5b8cb42d1 + url: https://conda.anaconda.org/conda-forge/linux-64/s2n-1.5.6-h0e56266_0.conda + sha256: 59a4f0c77a34ebd48bf1b8e422fa486d3d51ae948b93662a6ccceb47f816f5b8 + md5: 54752411d7559a8bbd4c0204a8f1cf35 depends: - __glibc >=2.17,<3.0.a0 - - imageio >=2.27 - - lazy_loader >=0.2 - - libgcc-ng >=12 - - libstdcxx-ng >=12 - - networkx >=2.8 - - numpy >=1.19,<3 - - packaging >=21 - - pillow >=9.0.1 - - python >=3.10,<3.11.0a0 - - python_abi 3.10.* *_cp310 - - pywavelets >=1.1.1 - - scipy >=1.8 - - tifffile >=2022.8.12 - constrains: - - dask-core >=2021.1.0 - - numpy >=1.23 - - cloudpickle >=0.2.1 - - cytoolz >=0.11.0 - - matplotlib-base >=3.5 - - toolz >=0.10.0 - - scikit-learn >=1.0 - - astropy >=5.0 - - pooch >=1.6.0 - license: BSD-3-Clause - license_family: BSD - purls: - - pkg:pypi/scikit-image?source=hash-mapping - size: 10851117 - timestamp: 1723842695596 -- kind: conda + - libgcc >=13 + - openssl >=3.3.2,<4.0a0 + license: Apache-2.0 + license_family: Apache + purls: [] + size: 354579 + timestamp: 1729748467988 +- kind: pypi name: scikit-image version: 0.24.0 - build: py310h2216879_2 - build_number: 2 - subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/scikit-image-0.24.0-py310h2216879_2.conda - sha256: 5bacf7ef37070dd2d91bc69a49e41f4d858ccf535ce8274317965b9354642414 - md5: 200bd8287af9884199c84ab41c9adf14 - depends: - - __osx >=11.0 - - imageio >=2.27 - - lazy_loader >=0.2 - - libcxx >=16 - - networkx >=2.8 - - numpy >=1.19,<3 - - packaging >=21 - - pillow >=9.0.1 - - python >=3.10,<3.11.0a0 - - python >=3.10,<3.11.0a0 *_cpython - - python_abi 3.10.* *_cp310 - - pywavelets >=1.1.1 - - scipy >=1.8 - - tifffile >=2022.8.12 - constrains: - - matplotlib-base >=3.5 - - cytoolz >=0.11.0 - - astropy >=5.0 - - cloudpickle >=0.2.1 - - numpy >=1.23 - - scikit-learn >=1.0 - - toolz >=0.10.0 - - pooch >=1.6.0 - - dask-core >=2021.1.0 - license: BSD-3-Clause - license_family: BSD - purls: - - pkg:pypi/scikit-image?source=hash-mapping - size: 10299600 - timestamp: 1723843263974 -- kind: conda + url: https://files.pythonhosted.org/packages/40/2e/8b39cd2c347490dbe10adf21fd50bbddb1dada5bb0512c3a39371285eb62/scikit_image-0.24.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + sha256: 39ee0af13435c57351a3397eb379e72164ff85161923eec0c38849fecf1b4764 + requires_dist: + - numpy>=1.23 + - scipy>=1.9 + - networkx>=2.8 + - pillow>=9.1 + - imageio>=2.33 + - tifffile>=2022.8.12 + - packaging>=21 + - lazy-loader>=0.4 + - meson-python>=0.15 ; extra == 'build' + - wheel ; extra == 'build' + - setuptools>=67 ; extra == 'build' + - packaging>=21 ; extra == 'build' + - ninja ; extra == 'build' + - cython>=3.0.4 ; extra == 'build' + - pythran ; extra == 'build' + - numpy>=2.0.0rc1 ; extra == 'build' + - spin==0.8 ; extra == 'build' + - build ; extra == 'build' + - pooch>=1.6.0 ; extra == 'data' + - pre-commit ; extra == 'developer' + - ipython ; extra == 'developer' + - tomli ; python_full_version < '3.11' and extra == 'developer' + - sphinx>=7.3 ; extra == 'docs' + - sphinx-gallery>=0.14 ; extra == 'docs' + - numpydoc>=1.7 ; extra == 'docs' + - sphinx-copybutton ; extra == 'docs' + - pytest-runner ; extra == 'docs' + - matplotlib>=3.6 ; extra == 'docs' + - dask[array]>=2022.9.2 ; extra == 'docs' + - pandas>=1.5 ; extra == 'docs' + - seaborn>=0.11 ; extra == 'docs' + - pooch>=1.6 ; extra == 'docs' + - tifffile>=2022.8.12 ; extra == 'docs' + - myst-parser ; extra == 'docs' + - ipywidgets ; extra == 'docs' + - ipykernel ; extra == 'docs' + - plotly>=5.10 ; extra == 'docs' + - kaleido ; extra == 'docs' + - scikit-learn>=1.1 ; extra == 'docs' + - sphinx-design>=0.5 ; extra == 'docs' + - pydata-sphinx-theme>=0.15.2 ; extra == 'docs' + - pywavelets>=1.1.1 ; extra == 'docs' + - pytest-doctestplus ; extra == 'docs' + - simpleitk ; extra == 'optional' + - astropy>=5.0 ; extra == 'optional' + - cloudpickle>=0.2.1 ; extra == 'optional' + - dask[array]>=2021.1.0 ; extra == 'optional' + - matplotlib>=3.6 ; extra == 'optional' + - pooch>=1.6.0 ; extra == 'optional' + - pyamg ; extra == 'optional' + - pywavelets>=1.1.1 ; extra == 'optional' + - scikit-learn>=1.1 ; extra == 'optional' + - asv ; extra == 'test' + - numpydoc>=1.7 ; extra == 'test' + - pooch>=1.6.0 ; extra == 'test' + - pytest>=7.0 ; extra == 'test' + - pytest-cov>=2.11.0 ; extra == 'test' + - pytest-localserver ; extra == 'test' + - pytest-faulthandler ; extra == 'test' + - pytest-doctestplus ; extra == 'test' + requires_python: '>=3.9' +- kind: pypi name: scikit-image - version: 0.24.0 - build: py310hb4db72f_2 - build_number: 2 - subdir: win-64 - url: https://conda.anaconda.org/conda-forge/win-64/scikit-image-0.24.0-py310hb4db72f_2.conda - sha256: fba44e6e25749e39aa8d505126fccff141cc2e0a76346fee2fc6e531b7d0ea29 - md5: 18007c127db1548b78fca391a262e4f9 - depends: - - imageio >=2.27 - - lazy_loader >=0.2 - - networkx >=2.8 - - numpy >=1.19,<3 - - packaging >=21 - - pillow >=9.0.1 - - python >=3.10,<3.11.0a0 - - python_abi 3.10.* *_cp310 - - pywavelets >=1.1.1 - - scipy >=1.8 - - tifffile >=2022.8.12 - - ucrt >=10.0.20348.0 - - vc >=14.2,<15 - - vc14_runtime >=14.29.30139 - constrains: - - astropy >=5.0 - - dask-core >=2021.1.0 - - cytoolz >=0.11.0 - - toolz >=0.10.0 - - cloudpickle >=0.2.1 - - matplotlib-base >=3.5 - - numpy >=1.23 - - pooch >=1.6.0 - - scikit-learn >=1.0 - license: BSD-3-Clause - license_family: BSD - purls: - - pkg:pypi/scikit-image?source=hash-mapping - size: 10068930 - timestamp: 1723843202594 -- kind: conda + version: 0.24.0 + url: https://files.pythonhosted.org/packages/65/15/1879307aaa2c771aa8ef8f00a171a85033bffc6b2553cfd2657426881452/scikit_image-0.24.0-cp310-cp310-macosx_12_0_arm64.whl + sha256: 9c7a52e20cdd760738da38564ba1fed7942b623c0317489af1a598a8dedf088b + requires_dist: + - numpy>=1.23 + - scipy>=1.9 + - networkx>=2.8 + - pillow>=9.1 + - imageio>=2.33 + - tifffile>=2022.8.12 + - packaging>=21 + - lazy-loader>=0.4 + - meson-python>=0.15 ; extra == 'build' + - wheel ; extra == 'build' + - setuptools>=67 ; extra == 'build' + - packaging>=21 ; extra == 'build' + - ninja ; extra == 'build' + - cython>=3.0.4 ; extra == 'build' + - pythran ; extra == 'build' + - numpy>=2.0.0rc1 ; extra == 'build' + - spin==0.8 ; extra == 'build' + - build ; extra == 'build' + - pooch>=1.6.0 ; extra == 'data' + - pre-commit ; extra == 'developer' + - ipython ; extra == 'developer' + - tomli ; python_full_version < '3.11' and extra == 'developer' + - sphinx>=7.3 ; extra == 'docs' + - sphinx-gallery>=0.14 ; extra == 'docs' + - numpydoc>=1.7 ; extra == 'docs' + - sphinx-copybutton ; extra == 'docs' + - pytest-runner ; extra == 'docs' + - matplotlib>=3.6 ; extra == 'docs' + - dask[array]>=2022.9.2 ; extra == 'docs' + - pandas>=1.5 ; extra == 'docs' + - seaborn>=0.11 ; extra == 'docs' + - pooch>=1.6 ; extra == 'docs' + - tifffile>=2022.8.12 ; extra == 'docs' + - myst-parser ; extra == 'docs' + - ipywidgets ; extra == 'docs' + - ipykernel ; extra == 'docs' + - plotly>=5.10 ; extra == 'docs' + - kaleido ; extra == 'docs' + - scikit-learn>=1.1 ; extra == 'docs' + - sphinx-design>=0.5 ; extra == 'docs' + - pydata-sphinx-theme>=0.15.2 ; extra == 'docs' + - pywavelets>=1.1.1 ; extra == 'docs' + - pytest-doctestplus ; extra == 'docs' + - simpleitk ; extra == 'optional' + - astropy>=5.0 ; extra == 'optional' + - cloudpickle>=0.2.1 ; extra == 'optional' + - dask[array]>=2021.1.0 ; extra == 'optional' + - matplotlib>=3.6 ; extra == 'optional' + - pooch>=1.6.0 ; extra == 'optional' + - pyamg ; extra == 'optional' + - pywavelets>=1.1.1 ; extra == 'optional' + - scikit-learn>=1.1 ; extra == 'optional' + - asv ; extra == 'test' + - numpydoc>=1.7 ; extra == 'test' + - pooch>=1.6.0 ; extra == 'test' + - pytest>=7.0 ; extra == 'test' + - pytest-cov>=2.11.0 ; extra == 'test' + - pytest-localserver ; extra == 'test' + - pytest-faulthandler ; extra == 'test' + - pytest-doctestplus ; extra == 'test' + requires_python: '>=3.9' +- kind: pypi name: scikit-image version: 0.24.0 - build: py310hbf2a7f0_2 - build_number: 2 - subdir: osx-64 - url: https://conda.anaconda.org/conda-forge/osx-64/scikit-image-0.24.0-py310hbf2a7f0_2.conda - sha256: 93306bb576602beb0ba6b26f5d8ee139cf3d5d29291644d325e5fbd9aae32a85 - md5: 9506093eea5288a2e172b74c1a01c697 - depends: - - __osx >=10.13 - - imageio >=2.27 - - lazy_loader >=0.2 - - libcxx >=16 - - networkx >=2.8 - - numpy >=1.19,<3 - - packaging >=21 - - pillow >=9.0.1 - - python >=3.10,<3.11.0a0 - - python_abi 3.10.* *_cp310 - - pywavelets >=1.1.1 - - scipy >=1.8 - - tifffile >=2022.8.12 - constrains: - - cytoolz >=0.11.0 - - pooch >=1.6.0 - - astropy >=5.0 - - cloudpickle >=0.2.1 - - numpy >=1.23 - - scikit-learn >=1.0 - - matplotlib-base >=3.5 - - dask-core >=2021.1.0 - - toolz >=0.10.0 - license: BSD-3-Clause - license_family: BSD - purls: - - pkg:pypi/scikit-image?source=hash-mapping - size: 10254367 - timestamp: 1723842754501 + url: https://files.pythonhosted.org/packages/99/89/3fcd68d034db5d29c974e964d03deec9d0fbf9410ff0a0b95efff70947f6/scikit_image-0.24.0-cp310-cp310-win_amd64.whl + sha256: 7ac7913b028b8aa780ffae85922894a69e33d1c0bf270ea1774f382fe8bf95e7 + requires_dist: + - numpy>=1.23 + - scipy>=1.9 + - networkx>=2.8 + - pillow>=9.1 + - imageio>=2.33 + - tifffile>=2022.8.12 + - packaging>=21 + - lazy-loader>=0.4 + - meson-python>=0.15 ; extra == 'build' + - wheel ; extra == 'build' + - setuptools>=67 ; extra == 'build' + - packaging>=21 ; extra == 'build' + - ninja ; extra == 'build' + - cython>=3.0.4 ; extra == 'build' + - pythran ; extra == 'build' + - numpy>=2.0.0rc1 ; extra == 'build' + - spin==0.8 ; extra == 'build' + - build ; extra == 'build' + - pooch>=1.6.0 ; extra == 'data' + - pre-commit ; extra == 'developer' + - ipython ; extra == 'developer' + - tomli ; python_full_version < '3.11' and extra == 'developer' + - sphinx>=7.3 ; extra == 'docs' + - sphinx-gallery>=0.14 ; extra == 'docs' + - numpydoc>=1.7 ; extra == 'docs' + - sphinx-copybutton ; extra == 'docs' + - pytest-runner ; extra == 'docs' + - matplotlib>=3.6 ; extra == 'docs' + - dask[array]>=2022.9.2 ; extra == 'docs' + - pandas>=1.5 ; extra == 'docs' + - seaborn>=0.11 ; extra == 'docs' + - pooch>=1.6 ; extra == 'docs' + - tifffile>=2022.8.12 ; extra == 'docs' + - myst-parser ; extra == 'docs' + - ipywidgets ; extra == 'docs' + - ipykernel ; extra == 'docs' + - plotly>=5.10 ; extra == 'docs' + - kaleido ; extra == 'docs' + - scikit-learn>=1.1 ; extra == 'docs' + - sphinx-design>=0.5 ; extra == 'docs' + - pydata-sphinx-theme>=0.15.2 ; extra == 'docs' + - pywavelets>=1.1.1 ; extra == 'docs' + - pytest-doctestplus ; extra == 'docs' + - simpleitk ; extra == 'optional' + - astropy>=5.0 ; extra == 'optional' + - cloudpickle>=0.2.1 ; extra == 'optional' + - dask[array]>=2021.1.0 ; extra == 'optional' + - matplotlib>=3.6 ; extra == 'optional' + - pooch>=1.6.0 ; extra == 'optional' + - pyamg ; extra == 'optional' + - pywavelets>=1.1.1 ; extra == 'optional' + - scikit-learn>=1.1 ; extra == 'optional' + - asv ; extra == 'test' + - numpydoc>=1.7 ; extra == 'test' + - pooch>=1.6.0 ; extra == 'test' + - pytest>=7.0 ; extra == 'test' + - pytest-cov>=2.11.0 ; extra == 'test' + - pytest-localserver ; extra == 'test' + - pytest-faulthandler ; extra == 'test' + - pytest-doctestplus ; extra == 'test' + requires_python: '>=3.9' +- kind: pypi + name: scikit-image + version: 0.24.0 + url: https://files.pythonhosted.org/packages/b7/82/d4eaa6e441f28a783762093a3c74bcc4a67f1c65bf011414ad4ea85187d8/scikit_image-0.24.0-cp310-cp310-macosx_10_9_x86_64.whl + sha256: cb3bc0264b6ab30b43c4179ee6156bc18b4861e78bb329dd8d16537b7bbf827a + requires_dist: + - numpy>=1.23 + - scipy>=1.9 + - networkx>=2.8 + - pillow>=9.1 + - imageio>=2.33 + - tifffile>=2022.8.12 + - packaging>=21 + - lazy-loader>=0.4 + - meson-python>=0.15 ; extra == 'build' + - wheel ; extra == 'build' + - setuptools>=67 ; extra == 'build' + - packaging>=21 ; extra == 'build' + - ninja ; extra == 'build' + - cython>=3.0.4 ; extra == 'build' + - pythran ; extra == 'build' + - numpy>=2.0.0rc1 ; extra == 'build' + - spin==0.8 ; extra == 'build' + - build ; extra == 'build' + - pooch>=1.6.0 ; extra == 'data' + - pre-commit ; extra == 'developer' + - ipython ; extra == 'developer' + - tomli ; python_full_version < '3.11' and extra == 'developer' + - sphinx>=7.3 ; extra == 'docs' + - sphinx-gallery>=0.14 ; extra == 'docs' + - numpydoc>=1.7 ; extra == 'docs' + - sphinx-copybutton ; extra == 'docs' + - pytest-runner ; extra == 'docs' + - matplotlib>=3.6 ; extra == 'docs' + - dask[array]>=2022.9.2 ; extra == 'docs' + - pandas>=1.5 ; extra == 'docs' + - seaborn>=0.11 ; extra == 'docs' + - pooch>=1.6 ; extra == 'docs' + - tifffile>=2022.8.12 ; extra == 'docs' + - myst-parser ; extra == 'docs' + - ipywidgets ; extra == 'docs' + - ipykernel ; extra == 'docs' + - plotly>=5.10 ; extra == 'docs' + - kaleido ; extra == 'docs' + - scikit-learn>=1.1 ; extra == 'docs' + - sphinx-design>=0.5 ; extra == 'docs' + - pydata-sphinx-theme>=0.15.2 ; extra == 'docs' + - pywavelets>=1.1.1 ; extra == 'docs' + - pytest-doctestplus ; extra == 'docs' + - simpleitk ; extra == 'optional' + - astropy>=5.0 ; extra == 'optional' + - cloudpickle>=0.2.1 ; extra == 'optional' + - dask[array]>=2021.1.0 ; extra == 'optional' + - matplotlib>=3.6 ; extra == 'optional' + - pooch>=1.6.0 ; extra == 'optional' + - pyamg ; extra == 'optional' + - pywavelets>=1.1.1 ; extra == 'optional' + - scikit-learn>=1.1 ; extra == 'optional' + - asv ; extra == 'test' + - numpydoc>=1.7 ; extra == 'test' + - pooch>=1.6.0 ; extra == 'test' + - pytest>=7.0 ; extra == 'test' + - pytest-cov>=2.11.0 ; extra == 'test' + - pytest-localserver ; extra == 'test' + - pytest-faulthandler ; extra == 'test' + - pytest-doctestplus ; extra == 'test' + requires_python: '>=3.9' - kind: conda name: scipy version: 1.14.1 - build: py310h35b72dc_0 - subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/scipy-1.14.1-py310h35b72dc_0.conda - sha256: 4ed7db44f9fa326dd04bd87ac9aa3884a75cab266d41c2cd2a5d47256bd4162d - md5: 3c1bd4038f5e9f492baaa267e97a02bf + build: py310h9ad1863_1 + build_number: 1 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/scipy-1.14.1-py310h9ad1863_1.conda + sha256: a94cf47f246064581fb74f8934aedf8f9a9ef629d9819ef4ec05cce9dff3d8c9 + md5: 481a6063c89dd8864258ff46839c4a3a depends: - - __osx >=11.0 + - __osx >=10.13 - libblas >=3.9.0,<4.0a0 - libcblas >=3.9.0,<4.0a0 - libcxx >=17 @@ -11510,22 +12854,22 @@ packages: - numpy >=1.19,<3 - numpy >=1.23.5 - python >=3.10,<3.11.0a0 - - python >=3.10,<3.11.0a0 *_cpython - python_abi 3.10.* *_cp310 license: BSD-3-Clause license_family: BSD purls: - pkg:pypi/scipy?source=hash-mapping - size: 14390392 - timestamp: 1724328287521 + size: 15340233 + timestamp: 1729481574945 - kind: conda name: scipy version: 1.14.1 - build: py310h46043a1_0 + build: py310hbd0dde3_1 + build_number: 1 subdir: win-64 - url: https://conda.anaconda.org/conda-forge/win-64/scipy-1.14.1-py310h46043a1_0.conda - sha256: f9d5f582e255cf6333bf7e81c141e1d4578123dbd914bed0c60785847fb34178 - md5: 3f957422c7a31c21641c0a032dbb4b06 + url: https://conda.anaconda.org/conda-forge/win-64/scipy-1.14.1-py310hbd0dde3_1.conda + sha256: 6ba7d1ab0cc549931bb5979c5230d3fa64791a23a23dd8142813da9759ba2b1a + md5: 40856f1a065530263c38af13fe7d8f25 depends: - libblas >=3.9.0,<4.0a0 - libcblas >=3.9.0,<4.0a0 @@ -11542,18 +12886,19 @@ packages: license_family: BSD purls: - pkg:pypi/scipy?source=hash-mapping - size: 15256041 - timestamp: 1724329403169 + size: 15353009 + timestamp: 1729482895418 - kind: conda name: scipy version: 1.14.1 - build: py310h59907b9_0 - subdir: osx-64 - url: https://conda.anaconda.org/conda-forge/osx-64/scipy-1.14.1-py310h59907b9_0.conda - sha256: 15a05b2818580c04ef55730d672aa577632c13034b6a7bdbf607d9e78d274b6d - md5: 77c1165640a83f50b4cfefaf8fa64801 + build: py310hc05a576_1 + build_number: 1 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/scipy-1.14.1-py310hc05a576_1.conda + sha256: 14014398bd36591fc173bbf71e4673119eac69468cca26b43fa897e5bf2099b1 + md5: ed7fe288f8210a19a86dc8c00abe5f65 depends: - - __osx >=10.13 + - __osx >=11.0 - libblas >=3.9.0,<4.0a0 - libcblas >=3.9.0,<4.0a0 - libcxx >=17 @@ -11564,30 +12909,32 @@ packages: - numpy >=1.19,<3 - numpy >=1.23.5 - python >=3.10,<3.11.0a0 + - python >=3.10,<3.11.0a0 *_cpython - python_abi 3.10.* *_cp310 license: BSD-3-Clause license_family: BSD purls: - pkg:pypi/scipy?source=hash-mapping - size: 15462354 - timestamp: 1724328454550 + size: 14146255 + timestamp: 1729481983023 - kind: conda name: scipy version: 1.14.1 - build: py310ha3fb0e1_0 + build: py310hfcf56fc_1 + build_number: 1 subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/scipy-1.14.1-py310ha3fb0e1_0.conda - sha256: abd577d8a89cb6d4f21ac07bdf9fbc2d105794ed4e1348482d5f3819eea83d09 - md5: dcca3051fda0f861e8111c6368842a28 + url: https://conda.anaconda.org/conda-forge/linux-64/scipy-1.14.1-py310hfcf56fc_1.conda + sha256: df95244cd5faf7ede8560081db49892cb8ae99e202044d9eb00e4792d9d29af0 + md5: d9b1b75a227dbc42f3fe0e8bc852b805 depends: - __glibc >=2.17,<3.0.a0 - libblas >=3.9.0,<4.0a0 - libcblas >=3.9.0,<4.0a0 - - libgcc-ng >=13 - - libgfortran-ng + - libgcc >=13 + - libgfortran - libgfortran5 >=13.3.0 - liblapack >=3.9.0,<4.0a0 - - libstdcxx-ng >=13 + - libstdcxx >=13 - numpy <2.3 - numpy >=1.19,<3 - numpy >=1.23.5 @@ -11597,8 +12944,8 @@ packages: license_family: BSD purls: - pkg:pypi/scipy?source=hash-mapping - size: 16907009 - timestamp: 1724328294898 + size: 16856618 + timestamp: 1729481945376 - kind: conda name: selenium version: 4.11.2 @@ -11772,71 +13119,69 @@ packages: timestamp: 1620240338595 - kind: conda name: snappy - version: 1.1.10 - build: h6dc393e_1 - build_number: 1 - subdir: osx-64 - url: https://conda.anaconda.org/conda-forge/osx-64/snappy-1.1.10-h6dc393e_1.conda - sha256: 902133a046a264c7179278d09270e47a420961358c409dd1938a20b6436b82cf - md5: 61ef3240d413e733ba4e547657d8a9db + version: 1.2.1 + build: h23299a8_0 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/snappy-1.2.1-h23299a8_0.conda + sha256: 5b9450f619aabcfbf3d284a272964250b2e1971ab0f7a7ef9143dda0ecc537b8 + md5: 7635a408509e20dcfc7653ca305ad799 depends: - - libcxx >=16 + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 license: BSD-3-Clause license_family: BSD purls: [] - size: 34852 - timestamp: 1712591354627 + size: 59350 + timestamp: 1720004197144 - kind: conda name: snappy - version: 1.1.10 - build: hd04f947_1 - build_number: 1 - subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/snappy-1.1.10-hd04f947_1.conda - sha256: d7f7b14bb299019419ef9984ce0eae1990fab1cf3708b04766b0b31fe193aa3d - md5: 1506177f0a11c04cd16f330b2f4ad21d + version: 1.2.1 + build: ha2e4443_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/snappy-1.2.1-ha2e4443_0.conda + sha256: dc7c8e0e8c3e8702aae81c52d940bfaabe756953ee51b1f1757e891bab62cf7f + md5: 6b7dcc7349efd123d493d2dbe85a045f depends: - - libcxx >=16 + - libgcc-ng >=12 + - libstdcxx-ng >=12 license: BSD-3-Clause license_family: BSD purls: [] - size: 34330 - timestamp: 1712591417982 + size: 42465 + timestamp: 1720003704360 - kind: conda name: snappy - version: 1.1.10 - build: hdb0a2a9_1 - build_number: 1 - subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/snappy-1.1.10-hdb0a2a9_1.conda - sha256: 082eadbc355016e948f1acc2f16e721ae362ecdaa204cbd60136ada19bd43f3a - md5: 78b8b85bdf1f42b8a2b3cb577d8742d1 + version: 1.2.1 + build: hd02b534_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/snappy-1.2.1-hd02b534_0.conda + sha256: cb7a9440241c6092e0f1c795fdca149c4767023e783eaf9cfebc501f906b4897 + md5: 69d0f9694f3294418ee935da3d5f7272 depends: - - libgcc-ng >=12 - - libstdcxx-ng >=12 + - __osx >=11.0 + - libcxx >=16 license: BSD-3-Clause license_family: BSD purls: [] - size: 40135 - timestamp: 1712590996060 + size: 35708 + timestamp: 1720003794374 - kind: conda name: snappy - version: 1.1.10 - build: hfb803bf_1 - build_number: 1 - subdir: win-64 - url: https://conda.anaconda.org/conda-forge/win-64/snappy-1.1.10-hfb803bf_1.conda - sha256: a96f79a6ed5714ff3d2daebccdb9296a9c08394ed934ff78cec1a31dd15e29ec - md5: c6837784f15b2dd7a1927c4e8b8dcecd + version: 1.2.1 + build: he1e6707_0 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/snappy-1.2.1-he1e6707_0.conda + sha256: a979319cd4916f0e7450aa92bb3cf4c2518afa80be50de99f31d075e693a6dd9 + md5: ddceef5df973c8ff7d6b32353c0cb358 depends: - - ucrt >=10.0.20348.0 - - vc >=14.2,<15 - - vc14_runtime >=14.29.30139 + - __osx >=10.13 + - libcxx >=16 license: BSD-3-Clause license_family: BSD purls: [] - size: 57651 - timestamp: 1712591561466 + size: 37036 + timestamp: 1720003862906 - kind: conda name: sniffio version: 1.3.1 @@ -12105,56 +13450,6 @@ packages: - pkg:pypi/stack-data?source=hash-mapping size: 26205 timestamp: 1669632203115 -- kind: conda - name: svt-av1 - version: 1.7.0 - build: h63175ca_0 - subdir: win-64 - url: https://conda.anaconda.org/conda-forge/win-64/svt-av1-1.7.0-h63175ca_0.conda - sha256: 3d52d959e9b4e4654c36d03765fb4e8dbebfc1d17f271a46033bf301737a25cc - md5: fe5d2314e6fc3be8f8e3e2e73c14ab02 - depends: - - ucrt >=10.0.20348.0 - - vc >=14.2,<15 - - vc14_runtime >=14.29.30139 - license: BSD-2-Clause - license_family: BSD - purls: [] - size: 2353906 - timestamp: 1692967156046 -- kind: conda - name: svt-av1 - version: 2.2.1 - build: h5888daf_0 - subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/svt-av1-2.2.1-h5888daf_0.conda - sha256: a1c197ea17dac43ad6c223e42d78726b9f37f31f63d65e0c062e418cb98c7a8f - md5: 0d9c441855be3d8dfdb2e800fe755059 - depends: - - __glibc >=2.17,<3.0.a0 - - libgcc-ng >=13 - - libstdcxx-ng >=13 - license: BSD-2-Clause - license_family: BSD - purls: [] - size: 2404332 - timestamp: 1724459503486 -- kind: conda - name: svt-av1 - version: 2.2.1 - build: hac325c4_0 - subdir: osx-64 - url: https://conda.anaconda.org/conda-forge/osx-64/svt-av1-2.2.1-hac325c4_0.conda - sha256: 9e229a7e34d0526c9e52bac85e3aa4c3d8c25df4f8618274bc135f9c19140a5d - md5: 07799aecfd86318fa5b4c5202b7acdce - depends: - - __osx >=10.13 - - libcxx >=17 - license: BSD-2-Clause - license_family: BSD - purls: [] - size: 2153628 - timestamp: 1724459465920 - kind: conda name: symlink-exe-runtime version: '1.0' @@ -12361,48 +13656,41 @@ packages: - pkg:pypi/terminado?source=hash-mapping size: 22883 timestamp: 1710262943966 -- kind: conda - name: tifffile - version: 2023.8.12 - build: pyhd8ed1ab_0 - subdir: noarch - noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/tifffile-2023.8.12-pyhd8ed1ab_0.conda - sha256: 13f9aa25981d3c1d01f262eb57671b4c02828bd3c49718eeb446614b46b1fc6d - md5: 8011f62c4f00db4aa7c37e0088827bad - depends: - - imagecodecs >=2023.1.23 - - numpy >=1.19.2,<2.0.0a0 - - python >=3.9 - constrains: - - matplotlib-base >=3.3 - license: BSD-3-Clause - license_family: BSD - purls: - - pkg:pypi/tifffile?source=hash-mapping - size: 174995 - timestamp: 1692120265599 -- kind: conda +- kind: pypi name: tifffile version: 2024.9.20 - build: pyhd8ed1ab_0 - subdir: noarch - noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/tifffile-2024.9.20-pyhd8ed1ab_0.conda - sha256: 10b70ee019158ef75f2c861724b2b2c11002643031f862b3a8ca99014607ceed - md5: 6de55c7859ed314159eaf2b7b4f19cc7 - depends: - - imagecodecs >=2023.8.12 - - numpy >=1.19.2 - - python >=3.10 - constrains: - - matplotlib-base >=3.3 - license: BSD-3-Clause - license_family: BSD - purls: - - pkg:pypi/tifffile?source=hash-mapping - size: 180655 - timestamp: 1727250532025 + url: https://files.pythonhosted.org/packages/50/0a/435d5d7ec64d1c8b422ac9ebe42d2f3b2ac0b3f8a56f5c04dd0f3b7ba83c/tifffile-2024.9.20-py3-none-any.whl + sha256: c54dc85bc1065d972cb8a6ffb3181389d597876aa80177933459733e4ed243dd + requires_dist: + - numpy + - imagecodecs>=2023.8.12 ; extra == 'all' + - matplotlib ; extra == 'all' + - defusedxml ; extra == 'all' + - lxml ; extra == 'all' + - zarr ; extra == 'all' + - fsspec ; extra == 'all' + - imagecodecs>=2023.8.12 ; extra == 'codecs' + - matplotlib ; extra == 'plot' + - pytest ; extra == 'test' + - imagecodecs ; extra == 'test' + - czifile ; extra == 'test' + - cmapfile ; extra == 'test' + - oiffile ; extra == 'test' + - lfdfiles ; extra == 'test' + - psdtags ; extra == 'test' + - roifile ; extra == 'test' + - lxml ; extra == 'test' + - zarr ; extra == 'test' + - dask ; extra == 'test' + - xarray ; extra == 'test' + - fsspec ; extra == 'test' + - defusedxml ; extra == 'test' + - ndtiff ; extra == 'test' + - defusedxml ; extra == 'xml' + - lxml ; extra == 'xml' + - zarr ; extra == 'zarr' + - fsspec ; extra == 'zarr' + requires_python: '>=3.10' - kind: conda name: tinycss2 version: 1.3.0 @@ -13555,22 +14843,6 @@ packages: purls: [] size: 828060 timestamp: 1712415742569 -- kind: conda - name: xorg-libxau - version: 1.0.11 - build: h00291cd_1 - build_number: 1 - subdir: osx-64 - url: https://conda.anaconda.org/conda-forge/osx-64/xorg-libxau-1.0.11-h00291cd_1.conda - sha256: 96177823ec38336b0f4b7e7c2413da61f8d008d800cc4a5b8ad21f9128fb7de0 - md5: c6cc91149a08402bbb313c5dc0142567 - depends: - - __osx >=10.13 - license: MIT - license_family: MIT - purls: [] - size: 13176 - timestamp: 1727034772877 - kind: conda name: xorg-libxau version: 1.0.11 @@ -13588,68 +14860,6 @@ packages: purls: [] size: 14679 timestamp: 1727034741045 -- kind: conda - name: xorg-libxau - version: 1.0.11 - build: hcd874cb_0 - subdir: win-64 - url: https://conda.anaconda.org/conda-forge/win-64/xorg-libxau-1.0.11-hcd874cb_0.conda - sha256: 8c5b976e3b36001bdefdb41fb70415f9c07eff631f1f0155f3225a7649320e77 - md5: c46ba8712093cb0114404ae8a7582e1a - depends: - - m2w64-gcc-libs - - m2w64-gcc-libs-core - license: MIT - license_family: MIT - purls: [] - size: 51297 - timestamp: 1684638355740 -- kind: conda - name: xorg-libxau - version: 1.0.11 - build: hd74edd7_1 - build_number: 1 - subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/xorg-libxau-1.0.11-hd74edd7_1.conda - sha256: 7113618021cf6c80831a429b2ebb9d639f3c43cf7fe2257d235dc6ae0ab43289 - md5: 7e0125f8fb619620a0011dc9297e2493 - depends: - - __osx >=11.0 - license: MIT - license_family: MIT - purls: [] - size: 13515 - timestamp: 1727034783560 -- kind: conda - name: xorg-libxdmcp - version: 1.1.3 - build: hcd874cb_0 - subdir: win-64 - url: https://conda.anaconda.org/conda-forge/win-64/xorg-libxdmcp-1.1.3-hcd874cb_0.tar.bz2 - sha256: f51205d33c07d744ec177243e5d9b874002910c731954f2c8da82459be462b93 - md5: 46878ebb6b9cbd8afcf8088d7ef00ece - depends: - - m2w64-gcc-libs - license: MIT - license_family: MIT - purls: [] - size: 67908 - timestamp: 1610072296570 -- kind: conda - name: xorg-libxdmcp - version: 1.1.5 - build: h00291cd_0 - subdir: osx-64 - url: https://conda.anaconda.org/conda-forge/osx-64/xorg-libxdmcp-1.1.5-h00291cd_0.conda - sha256: bb4d1ef9cafef535494adf9296130b6193b3a44375883185b5167de03eb1ac7f - md5: 9f438e1b6f4e73fd9e6d78bfe7c36743 - depends: - - __osx >=10.13 - license: MIT - license_family: MIT - purls: [] - size: 18465 - timestamp: 1727794980957 - kind: conda name: xorg-libxdmcp version: 1.1.5 @@ -13666,21 +14876,6 @@ packages: purls: [] size: 19901 timestamp: 1727794976192 -- kind: conda - name: xorg-libxdmcp - version: 1.1.5 - build: hd74edd7_0 - subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/xorg-libxdmcp-1.1.5-hd74edd7_0.conda - sha256: 9939a166d780700d81023546759102b33fdc2c5f11ef09f5f66c77210fd334c8 - md5: 77c447f48cab5d3a15ac224edb86a968 - depends: - - __osx >=11.0 - license: MIT - license_family: MIT - purls: [] - size: 18487 - timestamp: 1727795205022 - kind: conda name: xorg-libxext version: 1.3.4 @@ -14095,79 +15290,6 @@ packages: purls: [] size: 290634 timestamp: 1728364170966 -- kind: conda - name: zfp - version: 1.0.1 - build: h1c5d8ea_2 - build_number: 2 - subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/zfp-1.0.1-h1c5d8ea_2.conda - sha256: 814af9f9429cca403aa308cef46455e745284fb1ecbad83a5722bfc58db8b11a - md5: 8066eb9d5acdbaf825cf8cf689517a33 - depends: - - __osx >=11.0 - - libcxx >=17 - - llvm-openmp >=17.0.6 - license: BSD-3-Clause - license_family: BSD - purls: [] - size: 200112 - timestamp: 1726925701356 -- kind: conda - name: zfp - version: 1.0.1 - build: h469392a_2 - build_number: 2 - subdir: osx-64 - url: https://conda.anaconda.org/conda-forge/osx-64/zfp-1.0.1-h469392a_2.conda - sha256: aa7cd8353640b4187dcc1e322b79f6b5c8450a036761208fb68a44f592337b6b - md5: 2c03b469587f7a2222e4879ccca3dcb4 - depends: - - __osx >=10.13 - - libcxx >=17 - - llvm-openmp >=17.0.6 - license: BSD-3-Clause - license_family: BSD - purls: [] - size: 210590 - timestamp: 1726925557854 -- kind: conda - name: zfp - version: 1.0.1 - build: h5888daf_2 - build_number: 2 - subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/zfp-1.0.1-h5888daf_2.conda - sha256: 0dfafc75c72f308c0200836f2b973766cdcb8741b1ab61e0b462a34dd6b6ad20 - md5: e0409515c467b87176b070bff5d9442e - depends: - - __glibc >=2.17,<3.0.a0 - - _openmp_mutex >=4.5 - - libgcc >=13 - - libstdcxx >=13 - license: BSD-3-Clause - license_family: BSD - purls: [] - size: 279120 - timestamp: 1726925529897 -- kind: conda - name: zfp - version: 1.0.1 - build: he0c23c2_2 - build_number: 2 - subdir: win-64 - url: https://conda.anaconda.org/conda-forge/win-64/zfp-1.0.1-he0c23c2_2.conda - sha256: 8fa0491c8ce89b3a37dd3f84b7a670e260e8f8eae3c70a861f80e85e35456b09 - md5: 66b2e227c0d5c78df52e62390b71032d - depends: - - ucrt >=10.0.20348.0 - - vc >=14.2,<15 - - vc14_runtime >=14.29.30139 - license: BSD-3-Clause - license_family: BSD - purls: [] - size: 235412 - timestamp: 1726926095834 - kind: conda name: zipp version: 3.20.2 @@ -14237,64 +15359,6 @@ packages: purls: [] size: 88544 timestamp: 1727963189976 -- kind: conda - name: zlib-ng - version: 2.0.7 - build: h0b41bf4_0 - subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/zlib-ng-2.0.7-h0b41bf4_0.conda - sha256: 6b3a22b7cc219e8d83f16c1ceba67aa51e0b7e3bcc4a647b97a0a510559b0477 - md5: 49e8329110001f04923fe7e864990b0c - depends: - - libgcc-ng >=12 - license: Zlib - license_family: Other - purls: [] - size: 94553 - timestamp: 1679094841423 -- kind: conda - name: zlib-ng - version: 2.0.7 - build: h1a8c8d9_0 - subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/zlib-ng-2.0.7-h1a8c8d9_0.conda - sha256: c526e4b6351e351c89ed0c60ca43b9f04668363a58e355583dc7701efb4fca89 - md5: 4852d8981e833f34c8ed32e4fb8e103b - license: Zlib - license_family: Other - purls: [] - size: 84057 - timestamp: 1679095058609 -- kind: conda - name: zlib-ng - version: 2.0.7 - build: hb7f2c08_0 - subdir: osx-64 - url: https://conda.anaconda.org/conda-forge/osx-64/zlib-ng-2.0.7-hb7f2c08_0.conda - sha256: 701bf17f3e22c7ba24ca547ccf4b2b5b4b58eda579ddaf68c0571427b10aa366 - md5: 813b5ad3ba92b75b84f40602b6d34ffb - license: Zlib - license_family: Other - purls: [] - size: 93171 - timestamp: 1679095009343 -- kind: conda - name: zlib-ng - version: 2.0.7 - build: hcfcfb64_0 - subdir: win-64 - url: https://conda.anaconda.org/conda-forge/win-64/zlib-ng-2.0.7-hcfcfb64_0.conda - sha256: 61a4e4c209f04d3f426213a187686262ebc2dccac9a97a0743c2ebbf6e3e3dd8 - md5: c72bb979d406650d3a78743ff888c451 - depends: - - ucrt >=10.0.20348.0 - - vc >=14.2,<15 - - vs2015_runtime >=14.29.30139 - license: Zlib - license_family: Other - purls: [] - size: 90788 - timestamp: 1679095380986 - kind: conda name: zstandard version: 0.23.0 diff --git a/pixi.toml b/pixi.toml index 6473ab631..5a6b2aafe 100644 --- a/pixi.toml +++ b/pixi.toml @@ -126,7 +126,6 @@ yarn = "3.6.1.*" jupyterlab = "4.0.5.*" nbval = "0.9.6.*" selenium = "4.11.2.*" -scikit-image = "0.24.*" toml = "0.10.2.*" pytest = ">=4.6" click = "8.1.6.*" @@ -159,15 +158,16 @@ furo = ">=2024.8.6" [dependencies] psutil = "5.9.5.*" altair = "5.4.*" -protobuf = "4.23.3.*" ipywidgets = "8.1.0.*" vl-convert-python = "1.7.*" anywidget = ">=0.9.6,<0.10" polars = "1.8.*" grpcio = ">=1.56.2,<2" +pyarrow = "16.*" [pypi-dependencies] -pyarrow = "==16" +# Works around pixi solve conflict with arrow >13 +scikit-image = ">=0.24" [target.osx-arm64.build-dependencies] # These dependencies are for building node canvas from source on apple silicon diff --git a/vegafusion-common/Cargo.toml b/vegafusion-common/Cargo.toml index 84d2ee984..36cc65843 100644 --- a/vegafusion-common/Cargo.toml +++ b/vegafusion-common/Cargo.toml @@ -9,7 +9,7 @@ license = "BSD-3-Clause" py = ["pyo3", "pyo3-arrow"] json = ["serde_json/preserve_order", "arrow/json", "chrono"] prettyprint = ["arrow/prettyprint"] -proto = ["datafusion-proto", "datafusion-proto-common"] +proto = ["datafusion-proto", "datafusion-proto-common", "prost"] [dependencies] thiserror = "^1.0.29" @@ -51,10 +51,16 @@ workspace = true [dependencies.datafusion-proto] workspace = true optional = true +default-features = false [dependencies.datafusion-proto-common] workspace = true optional = true +default-features = false + +[dependencies.prost] +workspace = true +optional = true [dependencies.pyo3] workspace = true @@ -78,4 +84,4 @@ optional = true [dependencies.object_store] workspace = true -optional = true \ No newline at end of file +optional = true diff --git a/vegafusion-common/src/error.rs b/vegafusion-common/src/error.rs index 2101e331b..9351e619f 100644 --- a/vegafusion-common/src/error.rs +++ b/vegafusion-common/src/error.rs @@ -5,7 +5,7 @@ use std::result; use thiserror::Error; #[cfg(feature = "proto")] -use datafusion_proto_common::to_proto::Error as DataFusionProtoError; +use {datafusion_proto_common::to_proto::Error as DataFusionProtoError, prost::DecodeError}; #[cfg(feature = "pyo3")] use pyo3::{exceptions::PyValueError, PyErr}; @@ -34,6 +34,7 @@ impl std::fmt::Display for ErrorContext { for (i, context) in self.contexts.iter().enumerate() { writeln!(f, " Context[{i}]: {context}")?; } + Ok(()) } } @@ -74,6 +75,10 @@ pub enum VegaFusionError { #[error("DataFusion proto error: {0}\n{1}")] DataFusionProtoError(DataFusionProtoError, ErrorContext), + #[cfg(feature = "proto")] + #[error("Prost decode error: {0}\n{1}")] + ProstDecodeError(DecodeError, ErrorContext), + #[error("IO Error: {0}\n{1}")] IOError(std::io::Error, ErrorContext), @@ -160,6 +165,11 @@ impl VegaFusionError { context.contexts.push(context_fn().into()); VegaFusionError::DataFusionProtoError(err, context) } + #[cfg(feature = "proto")] + ProstDecodeError(err, mut context) => { + context.contexts.push(context_fn().into()); + VegaFusionError::ProstDecodeError(err.clone(), context) + } IOError(err, mut context) => { context.contexts.push(context_fn().into()); VegaFusionError::IOError(err, context) @@ -265,6 +275,10 @@ impl VegaFusionError { DataFusionProtoError(err, context) => { VegaFusionError::ExternalError(err.to_string(), context.clone()) } + #[cfg(feature = "proto")] + ProstDecodeError(err, context) => { + VegaFusionError::ProstDecodeError(err.clone(), context.clone()) + } IOError(err, context) => { VegaFusionError::ExternalError(err.to_string(), context.clone()) } @@ -356,6 +370,13 @@ impl From for VegaFusionError { } } +#[cfg(feature = "proto")] +impl From for VegaFusionError { + fn from(err: DecodeError) -> Self { + Self::ProstDecodeError(err, Default::default()) + } +} + impl From for VegaFusionError { fn from(err: std::fmt::Error) -> Self { Self::FormatError(err, Default::default()) diff --git a/vegafusion-core/Cargo.toml b/vegafusion-core/Cargo.toml index 6ec405aa2..c241997e6 100644 --- a/vegafusion-core/Cargo.toml +++ b/vegafusion-core/Cargo.toml @@ -20,7 +20,7 @@ chrono = "0.4.23" num-complex = "0.4.2" rand = "0.8.5" json-patch = "1.0.0" -async-mutex = "1.4.0" +log = "0.4.22" [dependencies.lazy_static] workspace = true @@ -66,14 +66,14 @@ version = "1.0.137" features = ["derive"] [dependencies.tonic] -version = "0.10.2" +workspace = true optional = true [build-dependencies.prost-build] -version = "0.12.1" +workspace = true [build-dependencies.tonic-build] -version = "0.10.2" +workspace = true optional = true [build-dependencies.protobuf-src] diff --git a/vegafusion-core/build.rs b/vegafusion-core/build.rs index 279442423..659485cb5 100644 --- a/vegafusion-core/build.rs +++ b/vegafusion-core/build.rs @@ -40,7 +40,7 @@ fn gen_tonic() { config.protoc_arg("--experimental_allow_proto3_optional"); builder - .compile_with_config( + .compile_protos_with_config( config, &[ "src/proto/expression.proto", diff --git a/vegafusion-core/src/data/dataset.rs b/vegafusion-core/src/data/dataset.rs index 701549ae3..adefaa0cf 100644 --- a/vegafusion-core/src/data/dataset.rs +++ b/vegafusion-core/src/data/dataset.rs @@ -2,16 +2,23 @@ use crate::error::Result; use std::collections::hash_map::DefaultHasher; use std::hash::{Hash, Hasher}; use vegafusion_common::data::table::VegaFusionTable; +use vegafusion_common::datafusion_expr::LogicalPlan; #[derive(Clone)] pub enum VegaFusionDataset { Table { table: VegaFusionTable, hash: u64 }, + Plan { plan: LogicalPlan }, } impl VegaFusionDataset { pub fn fingerprint(&self) -> String { match self { VegaFusionDataset::Table { hash, .. } => hash.to_string(), + VegaFusionDataset::Plan { plan } => { + let mut hasher = deterministic_hash::DeterministicHasher::new(DefaultHasher::new()); + plan.hash(&mut hasher); + hasher.finish().to_string() + } } } @@ -28,4 +35,8 @@ impl VegaFusionDataset { let table = VegaFusionTable::from_ipc_bytes(ipc_bytes)?; Ok(Self::Table { table, hash }) } + + pub fn from_plan(plan: LogicalPlan) -> Self { + Self::Plan { plan } + } } diff --git a/vegafusion-core/src/proto/prost_gen/errors.rs b/vegafusion-core/src/proto/prost_gen/errors.rs index e57f6c030..cd484ee8f 100644 --- a/vegafusion-core/src/proto/prost_gen/errors.rs +++ b/vegafusion-core/src/proto/prost_gen/errors.rs @@ -1,11 +1,9 @@ // This file is @generated by prost-build. -#[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct TaskGraphValueError { #[prost(string, tag = "1")] pub msg: ::prost::alloc::string::String, } -#[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct Error { #[prost(oneof = "error::Errorkind", tags = "1")] @@ -13,7 +11,6 @@ pub struct Error { } /// Nested message and enum types in `Error`. pub mod error { - #[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Oneof)] pub enum Errorkind { #[prost(message, tag = "1")] diff --git a/vegafusion-core/src/proto/prost_gen/expression.rs b/vegafusion-core/src/proto/prost_gen/expression.rs index 62fa3cd9c..fbfc6ba32 100644 --- a/vegafusion-core/src/proto/prost_gen/expression.rs +++ b/vegafusion-core/src/proto/prost_gen/expression.rs @@ -1,14 +1,12 @@ // This file is @generated by prost-build. /// ESTree-style AST nodes -#[allow(clippy::derive_partial_eq_without_eq)] -#[derive(Clone, PartialEq, ::prost::Message)] +#[derive(Clone, Copy, PartialEq, ::prost::Message)] pub struct Span { #[prost(int32, tag = "1")] pub start: i32, #[prost(int32, tag = "2")] pub end: i32, } -#[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct Literal { #[prost(string, tag = "1")] @@ -18,7 +16,6 @@ pub struct Literal { } /// Nested message and enum types in `Literal`. pub mod literal { - #[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Oneof)] pub enum Value { #[prost(string, tag = "2")] @@ -31,19 +28,16 @@ pub mod literal { Null(bool), } } -#[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct IdentifierAbc { #[prost(string, tag = "1")] pub name: ::prost::alloc::string::String, } -#[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct Identifier { #[prost(string, tag = "1")] pub name: ::prost::alloc::string::String, } -#[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct UnaryExpression { #[prost(enumeration = "UnaryOperator", tag = "1")] @@ -53,7 +47,6 @@ pub struct UnaryExpression { #[prost(message, optional, boxed, tag = "3")] pub argument: ::core::option::Option<::prost::alloc::boxed::Box>, } -#[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct LogicalExpression { #[prost(message, optional, boxed, tag = "1")] @@ -63,7 +56,6 @@ pub struct LogicalExpression { #[prost(message, optional, boxed, tag = "3")] pub right: ::core::option::Option<::prost::alloc::boxed::Box>, } -#[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct BinaryExpression { #[prost(message, optional, boxed, tag = "1")] @@ -73,7 +65,6 @@ pub struct BinaryExpression { #[prost(message, optional, boxed, tag = "3")] pub right: ::core::option::Option<::prost::alloc::boxed::Box>, } -#[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct ConditionalExpression { #[prost(message, optional, boxed, tag = "1")] @@ -83,7 +74,6 @@ pub struct ConditionalExpression { #[prost(message, optional, boxed, tag = "3")] pub alternate: ::core::option::Option<::prost::alloc::boxed::Box>, } -#[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct MemberExpression { #[prost(message, optional, boxed, tag = "1")] @@ -93,13 +83,11 @@ pub struct MemberExpression { #[prost(bool, tag = "3")] pub computed: bool, } -#[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct ArrayExpression { #[prost(message, repeated, tag = "1")] pub elements: ::prost::alloc::vec::Vec, } -#[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct CallExpression { #[prost(string, tag = "1")] @@ -107,7 +95,6 @@ pub struct CallExpression { #[prost(message, repeated, tag = "2")] pub arguments: ::prost::alloc::vec::Vec, } -#[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct Property { #[prost(message, optional, tag = "3")] @@ -119,7 +106,6 @@ pub struct Property { } /// Nested message and enum types in `Property`. pub mod property { - #[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Oneof)] pub enum Key { #[prost(message, tag = "1")] @@ -128,14 +114,12 @@ pub mod property { Identifier(super::Identifier), } } -#[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct ObjectExpression { #[prost(message, repeated, tag = "1")] pub properties: ::prost::alloc::vec::Vec, } /// Top-level expression -#[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct Expression { #[prost(message, optional, tag = "11")] @@ -145,7 +129,6 @@ pub struct Expression { } /// Nested message and enum types in `Expression`. pub mod expression { - #[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Oneof)] pub enum Expr { #[prost(message, tag = "1")] @@ -184,9 +167,9 @@ impl UnaryOperator { /// (if the ProtoBuf definition does not change) and safe for programmatic use. pub fn as_str_name(&self) -> &'static str { match self { - UnaryOperator::Pos => "Pos", - UnaryOperator::Neg => "Neg", - UnaryOperator::Not => "Not", + Self::Pos => "Pos", + Self::Neg => "Neg", + Self::Not => "Not", } } /// Creates an enum from field names used in the ProtoBuf definition. @@ -212,8 +195,8 @@ impl LogicalOperator { /// (if the ProtoBuf definition does not change) and safe for programmatic use. pub fn as_str_name(&self) -> &'static str { match self { - LogicalOperator::Or => "Or", - LogicalOperator::And => "And", + Self::Or => "Or", + Self::And => "And", } } /// Creates an enum from field names used in the ProtoBuf definition. @@ -254,24 +237,24 @@ impl BinaryOperator { /// (if the ProtoBuf definition does not change) and safe for programmatic use. pub fn as_str_name(&self) -> &'static str { match self { - BinaryOperator::Equals => "Equals", - BinaryOperator::NotEquals => "NotEquals", - BinaryOperator::StrictEquals => "StrictEquals", - BinaryOperator::NotStrictEquals => "NotStrictEquals", - BinaryOperator::LessThan => "LessThan", - BinaryOperator::LessThanEqual => "LessThanEqual", - BinaryOperator::GreaterThan => "GreaterThan", - BinaryOperator::GreaterThanEqual => "GreaterThanEqual", - BinaryOperator::Plus => "Plus", - BinaryOperator::Minus => "Minus", - BinaryOperator::Mult => "Mult", - BinaryOperator::Div => "Div", - BinaryOperator::Mod => "Mod", - BinaryOperator::BitwiseAnd => "BitwiseAnd", - BinaryOperator::BitwiseOr => "BitwiseOr", - BinaryOperator::BitwiseXor => "BitwiseXor", - BinaryOperator::BitwiseShiftLeft => "BitwiseShiftLeft", - BinaryOperator::BitwiseShiftRight => "BitwiseShiftRight", + Self::Equals => "Equals", + Self::NotEquals => "NotEquals", + Self::StrictEquals => "StrictEquals", + Self::NotStrictEquals => "NotStrictEquals", + Self::LessThan => "LessThan", + Self::LessThanEqual => "LessThanEqual", + Self::GreaterThan => "GreaterThan", + Self::GreaterThanEqual => "GreaterThanEqual", + Self::Plus => "Plus", + Self::Minus => "Minus", + Self::Mult => "Mult", + Self::Div => "Div", + Self::Mod => "Mod", + Self::BitwiseAnd => "BitwiseAnd", + Self::BitwiseOr => "BitwiseOr", + Self::BitwiseXor => "BitwiseXor", + Self::BitwiseShiftLeft => "BitwiseShiftLeft", + Self::BitwiseShiftRight => "BitwiseShiftRight", } } /// Creates an enum from field names used in the ProtoBuf definition. diff --git a/vegafusion-core/src/proto/prost_gen/pretransform.rs b/vegafusion-core/src/proto/prost_gen/pretransform.rs index e314003ff..f684c5978 100644 --- a/vegafusion-core/src/proto/prost_gen/pretransform.rs +++ b/vegafusion-core/src/proto/prost_gen/pretransform.rs @@ -1,6 +1,5 @@ // This file is @generated by prost-build. /// / Pre transform spec messages -#[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct PreTransformSpecOpts { #[prost(uint32, optional, tag = "1")] @@ -14,7 +13,6 @@ pub struct PreTransformSpecOpts { #[prost(string, optional, tag = "5")] pub default_input_tz: ::core::option::Option<::prost::alloc::string::String>, } -#[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct PreTransformSpecRequest { #[prost(string, tag = "1")] @@ -24,7 +22,6 @@ pub struct PreTransformSpecRequest { #[prost(message, optional, tag = "3")] pub opts: ::core::option::Option, } -#[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct PreTransformSpecResponse { #[prost(string, tag = "1")] @@ -32,7 +29,6 @@ pub struct PreTransformSpecResponse { #[prost(message, repeated, tag = "2")] pub warnings: ::prost::alloc::vec::Vec, } -#[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct PreTransformSpecWarning { #[prost(oneof = "pre_transform_spec_warning::WarningType", tags = "1, 2, 3, 4")] @@ -40,7 +36,6 @@ pub struct PreTransformSpecWarning { } /// Nested message and enum types in `PreTransformSpecWarning`. pub mod pre_transform_spec_warning { - #[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Oneof)] pub enum WarningType { #[prost(message, tag = "1")] @@ -53,23 +48,19 @@ pub mod pre_transform_spec_warning { Planner(super::PlannerWarning), } } -#[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct PreTransformRowLimitWarning { #[prost(message, repeated, tag = "1")] pub datasets: ::prost::alloc::vec::Vec, } -#[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct PreTransformBrokenInteractivityWarning { #[prost(message, repeated, tag = "1")] pub vars: ::prost::alloc::vec::Vec, } -#[allow(clippy::derive_partial_eq_without_eq)] -#[derive(Clone, PartialEq, ::prost::Message)] +#[derive(Clone, Copy, PartialEq, ::prost::Message)] pub struct PreTransformUnsupportedWarning {} /// / Pre transform value messages -#[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct PreTransformVariable { #[prost(message, optional, tag = "1")] @@ -77,7 +68,6 @@ pub struct PreTransformVariable { #[prost(uint32, repeated, tag = "2")] pub scope: ::prost::alloc::vec::Vec, } -#[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct PreTransformValuesOpts { #[prost(uint32, optional, tag = "1")] @@ -87,7 +77,6 @@ pub struct PreTransformValuesOpts { #[prost(string, optional, tag = "3")] pub default_input_tz: ::core::option::Option<::prost::alloc::string::String>, } -#[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct PreTransformValuesRequest { #[prost(string, tag = "1")] @@ -99,7 +88,6 @@ pub struct PreTransformValuesRequest { #[prost(message, optional, tag = "4")] pub opts: ::core::option::Option, } -#[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct PreTransformValuesResponse { #[prost(message, repeated, tag = "1")] @@ -107,7 +95,6 @@ pub struct PreTransformValuesResponse { #[prost(message, repeated, tag = "2")] pub warnings: ::prost::alloc::vec::Vec, } -#[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct PreTransformValuesWarning { #[prost(oneof = "pre_transform_values_warning::WarningType", tags = "1, 2")] @@ -115,7 +102,6 @@ pub struct PreTransformValuesWarning { } /// Nested message and enum types in `PreTransformValuesWarning`. pub mod pre_transform_values_warning { - #[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Oneof)] pub enum WarningType { #[prost(message, tag = "1")] @@ -125,14 +111,12 @@ pub mod pre_transform_values_warning { } } /// / Common pre-transform messages -#[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct PlannerWarning { #[prost(string, tag = "1")] pub message: ::prost::alloc::string::String, } /// / Pre Transform Extract Datasets -#[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct PreTransformExtractDataset { /// Result dataset name @@ -145,7 +129,6 @@ pub struct PreTransformExtractDataset { #[prost(bytes = "vec", tag = "3")] pub table: ::prost::alloc::vec::Vec, } -#[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct PreTransformExtractOpts { #[prost(string, tag = "1")] @@ -159,7 +142,6 @@ pub struct PreTransformExtractOpts { #[prost(message, repeated, tag = "5")] pub keep_variables: ::prost::alloc::vec::Vec, } -#[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct PreTransformExtractWarning { #[prost(oneof = "pre_transform_extract_warning::WarningType", tags = "1")] @@ -167,14 +149,12 @@ pub struct PreTransformExtractWarning { } /// Nested message and enum types in `PreTransformExtractWarning`. pub mod pre_transform_extract_warning { - #[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Oneof)] pub enum WarningType { #[prost(message, tag = "1")] Planner(super::PlannerWarning), } } -#[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct PreTransformExtractResponse { #[prost(string, tag = "1")] @@ -184,7 +164,6 @@ pub struct PreTransformExtractResponse { #[prost(message, repeated, tag = "3")] pub warnings: ::prost::alloc::vec::Vec, } -#[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct PreTransformExtractRequest { #[prost(string, tag = "1")] diff --git a/vegafusion-core/src/proto/prost_gen/services.rs b/vegafusion-core/src/proto/prost_gen/services.rs index 6868a08c8..310233641 100644 --- a/vegafusion-core/src/proto/prost_gen/services.rs +++ b/vegafusion-core/src/proto/prost_gen/services.rs @@ -1,5 +1,4 @@ // This file is @generated by prost-build. -#[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct QueryRequest { #[prost(oneof = "query_request::Request", tags = "1")] @@ -7,14 +6,12 @@ pub struct QueryRequest { } /// Nested message and enum types in `QueryRequest`. pub mod query_request { - #[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Oneof)] pub enum Request { #[prost(message, tag = "1")] TaskGraphValues(super::super::tasks::TaskGraphValueRequest), } } -#[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct QueryResult { #[prost(oneof = "query_result::Response", tags = "1, 2")] @@ -22,7 +19,6 @@ pub struct QueryResult { } /// Nested message and enum types in `QueryResult`. pub mod query_result { - #[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Oneof)] pub enum Response { #[prost(message, tag = "1")] @@ -31,7 +27,6 @@ pub mod query_result { TaskGraphValues(super::super::tasks::TaskGraphValueResponse), } } -#[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct PreTransformSpecResult { #[prost(oneof = "pre_transform_spec_result::Result", tags = "1, 2")] @@ -39,7 +34,6 @@ pub struct PreTransformSpecResult { } /// Nested message and enum types in `PreTransformSpecResult`. pub mod pre_transform_spec_result { - #[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Oneof)] pub enum Result { #[prost(message, tag = "1")] @@ -48,7 +42,6 @@ pub mod pre_transform_spec_result { Response(super::super::pretransform::PreTransformSpecResponse), } } -#[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct PreTransformValuesResult { #[prost(oneof = "pre_transform_values_result::Result", tags = "1, 2")] @@ -56,7 +49,6 @@ pub struct PreTransformValuesResult { } /// Nested message and enum types in `PreTransformValuesResult`. pub mod pre_transform_values_result { - #[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Oneof)] pub enum Result { #[prost(message, tag = "1")] @@ -65,7 +57,6 @@ pub mod pre_transform_values_result { Response(super::super::pretransform::PreTransformValuesResponse), } } -#[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct PreTransformExtractResult { #[prost(oneof = "pre_transform_extract_result::Result", tags = "1, 2")] @@ -73,7 +64,6 @@ pub struct PreTransformExtractResult { } /// Nested message and enum types in `PreTransformExtractResult`. pub mod pre_transform_extract_result { - #[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Oneof)] pub enum Result { #[prost(message, tag = "1")] diff --git a/vegafusion-core/src/proto/prost_gen/tasks.rs b/vegafusion-core/src/proto/prost_gen/tasks.rs index df00a25bd..5d7f6f233 100644 --- a/vegafusion-core/src/proto/prost_gen/tasks.rs +++ b/vegafusion-core/src/proto/prost_gen/tasks.rs @@ -1,6 +1,5 @@ // This file is @generated by prost-build. /// ## Task Value -#[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct TaskValue { #[prost(oneof = "task_value::Data", tags = "1, 2")] @@ -8,7 +7,6 @@ pub struct TaskValue { } /// Nested message and enum types in `TaskValue`. pub mod task_value { - #[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Oneof)] pub enum Data { /// @@ -21,7 +19,6 @@ pub mod task_value { Table(::prost::alloc::vec::Vec), } } -#[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct Variable { #[prost(string, tag = "1")] @@ -30,7 +27,6 @@ pub struct Variable { pub namespace: i32, } /// ## Scan URL Task -#[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct ParseFieldSpec { #[prost(string, tag = "1")] @@ -38,13 +34,11 @@ pub struct ParseFieldSpec { #[prost(string, tag = "2")] pub datatype: ::prost::alloc::string::String, } -#[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct ParseFieldSpecs { #[prost(message, repeated, tag = "1")] pub specs: ::prost::alloc::vec::Vec, } -#[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct ScanUrlFormat { /// @@ -84,7 +78,6 @@ pub mod scan_url_format { /// parses the modified_on field in each input record as a Date value. Specific date formats can /// be provided (e.g., {"foo": "date:'%m%d%Y'"}), using the d3-time-format syntax. UTC date format /// parsing is supported similarly (e.g., {"foo": "utc:'%m%d%Y'"}). - #[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Oneof)] pub enum Parse { #[prost(string, tag = "2")] @@ -93,7 +86,6 @@ pub mod scan_url_format { Object(super::ParseFieldSpecs), } } -#[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct DataUrlTask { #[prost(int32, tag = "3")] @@ -107,7 +99,6 @@ pub struct DataUrlTask { } /// Nested message and enum types in `DataUrlTask`. pub mod data_url_task { - #[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Oneof)] pub enum Url { #[prost(string, tag = "1")] @@ -117,7 +108,6 @@ pub mod data_url_task { } } /// ## Inline values task -#[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct DataValuesTask { #[prost(bytes = "vec", tag = "1")] @@ -128,7 +118,6 @@ pub struct DataValuesTask { pub pipeline: ::core::option::Option, } /// ## Transform Task -#[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct DataSourceTask { #[prost(string, tag = "1")] @@ -137,14 +126,12 @@ pub struct DataSourceTask { pub pipeline: ::core::option::Option, } /// ## Signal Task -#[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct SignalTask { #[prost(message, optional, tag = "2")] pub expr: ::core::option::Option, } /// ## Timezone config -#[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct TzConfig { #[prost(string, tag = "1")] @@ -153,7 +140,6 @@ pub struct TzConfig { pub default_input_tz: ::core::option::Option<::prost::alloc::string::String>, } /// ## Top-level Task -#[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct Task { #[prost(message, optional, tag = "1")] @@ -167,7 +153,6 @@ pub struct Task { } /// Nested message and enum types in `Task`. pub mod task { - #[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Oneof)] pub enum TaskKind { #[prost(message, tag = "3")] @@ -183,23 +168,20 @@ pub mod task { } } /// ## Task Graph -#[allow(clippy::derive_partial_eq_without_eq)] -#[derive(Clone, PartialEq, ::prost::Message)] +#[derive(Clone, Copy, PartialEq, ::prost::Message)] pub struct IncomingEdge { #[prost(uint32, tag = "1")] pub source: u32, #[prost(uint32, optional, tag = "2")] pub output: ::core::option::Option, } -#[allow(clippy::derive_partial_eq_without_eq)] -#[derive(Clone, PartialEq, ::prost::Message)] +#[derive(Clone, Copy, PartialEq, ::prost::Message)] pub struct OutgoingEdge { #[prost(uint32, tag = "1")] pub target: u32, #[prost(bool, tag = "2")] pub propagate: bool, } -#[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct TaskNode { #[prost(message, optional, tag = "1")] @@ -213,21 +195,18 @@ pub struct TaskNode { #[prost(uint64, tag = "5")] pub state_fingerprint: u64, } -#[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct TaskGraph { #[prost(message, repeated, tag = "1")] pub nodes: ::prost::alloc::vec::Vec, } -#[allow(clippy::derive_partial_eq_without_eq)] -#[derive(Clone, PartialEq, ::prost::Message)] +#[derive(Clone, Copy, PartialEq, ::prost::Message)] pub struct NodeValueIndex { #[prost(uint32, tag = "1")] pub node_index: u32, #[prost(uint32, optional, tag = "2")] pub output_index: ::core::option::Option, } -#[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct TaskGraphValueRequest { #[prost(message, optional, tag = "1")] @@ -237,7 +216,6 @@ pub struct TaskGraphValueRequest { #[prost(message, repeated, tag = "3")] pub inline_datasets: ::prost::alloc::vec::Vec, } -#[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct ResponseTaskValue { #[prost(message, optional, tag = "1")] @@ -247,15 +225,13 @@ pub struct ResponseTaskValue { #[prost(message, optional, tag = "3")] pub value: ::core::option::Option, } -#[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct TaskGraphValueResponse { #[prost(message, repeated, tag = "1")] pub response_values: ::prost::alloc::vec::Vec, } -#[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] -pub struct InlineDataset { +pub struct InlineDatasetTable { /// Inline dataset name #[prost(string, tag = "1")] pub name: ::prost::alloc::string::String, @@ -263,6 +239,30 @@ pub struct InlineDataset { #[prost(bytes = "vec", tag = "2")] pub table: ::prost::alloc::vec::Vec, } +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct InlineDatasetPlan { + /// Inline dataset name + #[prost(string, tag = "1")] + pub name: ::prost::alloc::string::String, + /// Serialized DataFusion plan in protobuf format + #[prost(bytes = "vec", tag = "2")] + pub plan: ::prost::alloc::vec::Vec, +} +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct InlineDataset { + #[prost(oneof = "inline_dataset::Dataset", tags = "1, 2")] + pub dataset: ::core::option::Option, +} +/// Nested message and enum types in `InlineDataset`. +pub mod inline_dataset { + #[derive(Clone, PartialEq, ::prost::Oneof)] + pub enum Dataset { + #[prost(message, tag = "1")] + Table(super::InlineDatasetTable), + #[prost(message, tag = "2")] + Plan(super::InlineDatasetPlan), + } +} /// ## Variable #[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)] #[repr(i32)] @@ -278,9 +278,9 @@ impl VariableNamespace { /// (if the ProtoBuf definition does not change) and safe for programmatic use. pub fn as_str_name(&self) -> &'static str { match self { - VariableNamespace::Signal => "Signal", - VariableNamespace::Data => "Data", - VariableNamespace::Scale => "Scale", + Self::Signal => "Signal", + Self::Data => "Data", + Self::Scale => "Scale", } } /// Creates an enum from field names used in the ProtoBuf definition. diff --git a/vegafusion-core/src/proto/prost_gen/transforms.rs b/vegafusion-core/src/proto/prost_gen/transforms.rs index 19bca1240..fa9f3283e 100644 --- a/vegafusion-core/src/proto/prost_gen/transforms.rs +++ b/vegafusion-core/src/proto/prost_gen/transforms.rs @@ -1,13 +1,11 @@ // This file is @generated by prost-build. /// Filter -#[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct Filter { #[prost(message, optional, tag = "1")] pub expr: ::core::option::Option, } /// Formula -#[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct Formula { #[prost(message, optional, tag = "1")] @@ -16,7 +14,6 @@ pub struct Formula { pub r#as: ::prost::alloc::string::String, } /// Extent -#[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct Extent { #[prost(string, tag = "1")] @@ -25,7 +22,6 @@ pub struct Extent { pub signal: ::core::option::Option<::prost::alloc::string::String>, } /// Collect -#[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct Collect { #[prost(string, repeated, tag = "1")] @@ -34,7 +30,6 @@ pub struct Collect { pub order: ::prost::alloc::vec::Vec, } /// Bin -#[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct Bin { #[prost(string, tag = "1")] @@ -79,7 +74,6 @@ pub struct Bin { pub nice: bool, } /// Aggregate -#[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct Aggregate { #[prost(string, repeated, tag = "1")] @@ -92,7 +86,6 @@ pub struct Aggregate { pub ops: ::prost::alloc::vec::Vec, } /// JoinAggregate -#[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct JoinAggregate { #[prost(string, repeated, tag = "1")] @@ -105,7 +98,6 @@ pub struct JoinAggregate { pub aliases: ::prost::alloc::vec::Vec<::prost::alloc::string::String>, } /// TimeUnit -#[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct TimeUnit { #[prost(string, tag = "1")] @@ -121,16 +113,14 @@ pub struct TimeUnit { #[prost(enumeration = "TimeUnitTimeZone", optional, tag = "6")] pub timezone: ::core::option::Option, } -#[allow(clippy::derive_partial_eq_without_eq)] -#[derive(Clone, PartialEq, ::prost::Message)] +#[derive(Clone, Copy, PartialEq, ::prost::Message)] pub struct WindowTransformOp { #[prost(oneof = "window_transform_op::Op", tags = "1, 2")] pub op: ::core::option::Option, } /// Nested message and enum types in `WindowTransformOp`. pub mod window_transform_op { - #[allow(clippy::derive_partial_eq_without_eq)] - #[derive(Clone, PartialEq, ::prost::Oneof)] + #[derive(Clone, Copy, PartialEq, ::prost::Oneof)] pub enum Op { #[prost(enumeration = "super::AggregateOp", tag = "1")] AggregateOp(i32), @@ -138,7 +128,6 @@ pub mod window_transform_op { WindowOp(i32), } } -#[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct Window { #[prost(enumeration = "SortOrder", repeated, tag = "1")] @@ -160,8 +149,7 @@ pub struct Window { #[prost(bool, optional, tag = "9")] pub ignore_peers: ::core::option::Option, } -#[allow(clippy::derive_partial_eq_without_eq)] -#[derive(Clone, PartialEq, ::prost::Message)] +#[derive(Clone, Copy, PartialEq, ::prost::Message)] pub struct WindowFrame { #[prost(int64, optional, tag = "1")] pub start: ::core::option::Option, @@ -169,14 +157,12 @@ pub struct WindowFrame { pub end: ::core::option::Option, } /// Project -#[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct Project { #[prost(string, repeated, tag = "1")] pub fields: ::prost::alloc::vec::Vec<::prost::alloc::string::String>, } /// Stack -#[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct Stack { #[prost(string, tag = "1")] @@ -195,7 +181,6 @@ pub struct Stack { pub alias_1: ::core::option::Option<::prost::alloc::string::String>, } /// Impute -#[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct Impute { #[prost(string, tag = "1")] @@ -210,7 +195,6 @@ pub struct Impute { pub value_json: ::core::option::Option<::prost::alloc::string::String>, } /// Pivot -#[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct Pivot { #[prost(string, tag = "1")] @@ -225,14 +209,12 @@ pub struct Pivot { pub op: ::core::option::Option, } /// Identifier -#[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct Identifier { #[prost(string, tag = "1")] pub r#as: ::prost::alloc::string::String, } /// Fold -#[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct Fold { #[prost(string, repeated, tag = "1")] @@ -241,7 +223,6 @@ pub struct Fold { pub r#as: ::prost::alloc::vec::Vec<::prost::alloc::string::String>, } /// Sequence -#[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct Sequence { #[prost(message, optional, tag = "1")] @@ -254,7 +235,6 @@ pub struct Sequence { pub r#as: ::core::option::Option<::prost::alloc::string::String>, } /// Top-level transform -#[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct Transform { #[prost( @@ -265,7 +245,6 @@ pub struct Transform { } /// Nested message and enum types in `Transform`. pub mod transform { - #[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Oneof)] pub enum TransformKind { #[prost(message, tag = "1")] @@ -302,7 +281,6 @@ pub mod transform { Sequence(super::Sequence), } } -#[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct TransformPipeline { #[prost(message, repeated, tag = "1")] @@ -321,8 +299,8 @@ impl SortOrder { /// (if the ProtoBuf definition does not change) and safe for programmatic use. pub fn as_str_name(&self) -> &'static str { match self { - SortOrder::Descending => "Descending", - SortOrder::Ascending => "Ascending", + Self::Descending => "Descending", + Self::Ascending => "Ascending", } } /// Creates an enum from field names used in the ProtoBuf definition. @@ -368,29 +346,29 @@ impl AggregateOp { /// (if the ProtoBuf definition does not change) and safe for programmatic use. pub fn as_str_name(&self) -> &'static str { match self { - AggregateOp::Count => "Count", - AggregateOp::Valid => "Valid", - AggregateOp::Missing => "Missing", - AggregateOp::Distinct => "Distinct", - AggregateOp::Sum => "Sum", - AggregateOp::Product => "Product", - AggregateOp::Mean => "Mean", - AggregateOp::Average => "Average", - AggregateOp::Variance => "Variance", - AggregateOp::Variancep => "Variancep", - AggregateOp::Stdev => "Stdev", - AggregateOp::Stdevp => "Stdevp", - AggregateOp::Stderr => "Stderr", - AggregateOp::Median => "Median", - AggregateOp::Q1 => "Q1", - AggregateOp::Q3 => "Q3", - AggregateOp::Ci0 => "Ci0", - AggregateOp::Ci1 => "Ci1", - AggregateOp::Min => "Min", - AggregateOp::Max => "Max", - AggregateOp::Argmin => "Argmin", - AggregateOp::Argmax => "Argmax", - AggregateOp::Values => "Values", + Self::Count => "Count", + Self::Valid => "Valid", + Self::Missing => "Missing", + Self::Distinct => "Distinct", + Self::Sum => "Sum", + Self::Product => "Product", + Self::Mean => "Mean", + Self::Average => "Average", + Self::Variance => "Variance", + Self::Variancep => "Variancep", + Self::Stdev => "Stdev", + Self::Stdevp => "Stdevp", + Self::Stderr => "Stderr", + Self::Median => "Median", + Self::Q1 => "Q1", + Self::Q3 => "Q3", + Self::Ci0 => "Ci0", + Self::Ci1 => "Ci1", + Self::Min => "Min", + Self::Max => "Max", + Self::Argmin => "Argmin", + Self::Argmax => "Argmax", + Self::Values => "Values", } } /// Creates an enum from field names used in the ProtoBuf definition. @@ -445,17 +423,17 @@ impl TimeUnitUnit { /// (if the ProtoBuf definition does not change) and safe for programmatic use. pub fn as_str_name(&self) -> &'static str { match self { - TimeUnitUnit::Year => "Year", - TimeUnitUnit::Quarter => "Quarter", - TimeUnitUnit::Month => "Month", - TimeUnitUnit::Date => "Date", - TimeUnitUnit::Week => "Week", - TimeUnitUnit::Day => "Day", - TimeUnitUnit::DayOfYear => "DayOfYear", - TimeUnitUnit::Hours => "Hours", - TimeUnitUnit::Minutes => "Minutes", - TimeUnitUnit::Seconds => "Seconds", - TimeUnitUnit::Milliseconds => "Milliseconds", + Self::Year => "Year", + Self::Quarter => "Quarter", + Self::Month => "Month", + Self::Date => "Date", + Self::Week => "Week", + Self::Day => "Day", + Self::DayOfYear => "DayOfYear", + Self::Hours => "Hours", + Self::Minutes => "Minutes", + Self::Seconds => "Seconds", + Self::Milliseconds => "Milliseconds", } } /// Creates an enum from field names used in the ProtoBuf definition. @@ -489,8 +467,8 @@ impl TimeUnitTimeZone { /// (if the ProtoBuf definition does not change) and safe for programmatic use. pub fn as_str_name(&self) -> &'static str { match self { - TimeUnitTimeZone::Local => "Local", - TimeUnitTimeZone::Utc => "Utc", + Self::Local => "Local", + Self::Utc => "Utc", } } /// Creates an enum from field names used in the ProtoBuf definition. @@ -527,19 +505,19 @@ impl WindowOp { /// (if the ProtoBuf definition does not change) and safe for programmatic use. pub fn as_str_name(&self) -> &'static str { match self { - WindowOp::RowNumber => "RowNumber", - WindowOp::Rank => "Rank", - WindowOp::DenseRank => "DenseRank", - WindowOp::PercentileRank => "PercentileRank", - WindowOp::CumeDist => "CumeDist", - WindowOp::NTile => "NTile", - WindowOp::Lag => "Lag", - WindowOp::Lead => "Lead", - WindowOp::FirstValue => "FirstValue", - WindowOp::LastValue => "LastValue", - WindowOp::NthValue => "NthValue", - WindowOp::PrevValue => "PrevValue", - WindowOp::NextValue => "NextValue", + Self::RowNumber => "RowNumber", + Self::Rank => "Rank", + Self::DenseRank => "DenseRank", + Self::PercentileRank => "PercentileRank", + Self::CumeDist => "CumeDist", + Self::NTile => "NTile", + Self::Lag => "Lag", + Self::Lead => "Lead", + Self::FirstValue => "FirstValue", + Self::LastValue => "LastValue", + Self::NthValue => "NthValue", + Self::PrevValue => "PrevValue", + Self::NextValue => "NextValue", } } /// Creates an enum from field names used in the ProtoBuf definition. @@ -576,9 +554,9 @@ impl StackOffset { /// (if the ProtoBuf definition does not change) and safe for programmatic use. pub fn as_str_name(&self) -> &'static str { match self { - StackOffset::Zero => "Zero", - StackOffset::Center => "Center", - StackOffset::Normalize => "Normalize", + Self::Zero => "Zero", + Self::Center => "Center", + Self::Normalize => "Normalize", } } /// Creates an enum from field names used in the ProtoBuf definition. @@ -607,11 +585,11 @@ impl ImputeMethod { /// (if the ProtoBuf definition does not change) and safe for programmatic use. pub fn as_str_name(&self) -> &'static str { match self { - ImputeMethod::ImputeValue => "ImputeValue", - ImputeMethod::ImputeMean => "ImputeMean", - ImputeMethod::ImputeMedian => "ImputeMedian", - ImputeMethod::ImputeMax => "ImputeMax", - ImputeMethod::ImputeMin => "ImputeMin", + Self::ImputeValue => "ImputeValue", + Self::ImputeMean => "ImputeMean", + Self::ImputeMedian => "ImputeMedian", + Self::ImputeMax => "ImputeMax", + Self::ImputeMin => "ImputeMin", } } /// Creates an enum from field names used in the ProtoBuf definition. diff --git a/vegafusion-core/src/proto/tasks.proto b/vegafusion-core/src/proto/tasks.proto index 43dad8e3c..c4fb76c75 100644 --- a/vegafusion-core/src/proto/tasks.proto +++ b/vegafusion-core/src/proto/tasks.proto @@ -163,9 +163,23 @@ message TaskGraphValueResponse { repeated ResponseTaskValue response_values = 1; } -message InlineDataset { +message InlineDatasetTable { // Inline dataset name string name = 1; // Serialized Arrow record batch in Arrow IPC format bytes table = 2; +} + +message InlineDatasetPlan { + // Inline dataset name + string name = 1; + // Serialized DataFusion plan in protobuf format + bytes plan = 2; +} + +message InlineDataset { + oneof dataset { + InlineDatasetTable table = 1; + InlineDatasetPlan plan = 2; + } } \ No newline at end of file diff --git a/vegafusion-core/src/proto/tonic_gen/errors.rs b/vegafusion-core/src/proto/tonic_gen/errors.rs index e57f6c030..cd484ee8f 100644 --- a/vegafusion-core/src/proto/tonic_gen/errors.rs +++ b/vegafusion-core/src/proto/tonic_gen/errors.rs @@ -1,11 +1,9 @@ // This file is @generated by prost-build. -#[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct TaskGraphValueError { #[prost(string, tag = "1")] pub msg: ::prost::alloc::string::String, } -#[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct Error { #[prost(oneof = "error::Errorkind", tags = "1")] @@ -13,7 +11,6 @@ pub struct Error { } /// Nested message and enum types in `Error`. pub mod error { - #[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Oneof)] pub enum Errorkind { #[prost(message, tag = "1")] diff --git a/vegafusion-core/src/proto/tonic_gen/expression.rs b/vegafusion-core/src/proto/tonic_gen/expression.rs index 62fa3cd9c..fbfc6ba32 100644 --- a/vegafusion-core/src/proto/tonic_gen/expression.rs +++ b/vegafusion-core/src/proto/tonic_gen/expression.rs @@ -1,14 +1,12 @@ // This file is @generated by prost-build. /// ESTree-style AST nodes -#[allow(clippy::derive_partial_eq_without_eq)] -#[derive(Clone, PartialEq, ::prost::Message)] +#[derive(Clone, Copy, PartialEq, ::prost::Message)] pub struct Span { #[prost(int32, tag = "1")] pub start: i32, #[prost(int32, tag = "2")] pub end: i32, } -#[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct Literal { #[prost(string, tag = "1")] @@ -18,7 +16,6 @@ pub struct Literal { } /// Nested message and enum types in `Literal`. pub mod literal { - #[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Oneof)] pub enum Value { #[prost(string, tag = "2")] @@ -31,19 +28,16 @@ pub mod literal { Null(bool), } } -#[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct IdentifierAbc { #[prost(string, tag = "1")] pub name: ::prost::alloc::string::String, } -#[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct Identifier { #[prost(string, tag = "1")] pub name: ::prost::alloc::string::String, } -#[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct UnaryExpression { #[prost(enumeration = "UnaryOperator", tag = "1")] @@ -53,7 +47,6 @@ pub struct UnaryExpression { #[prost(message, optional, boxed, tag = "3")] pub argument: ::core::option::Option<::prost::alloc::boxed::Box>, } -#[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct LogicalExpression { #[prost(message, optional, boxed, tag = "1")] @@ -63,7 +56,6 @@ pub struct LogicalExpression { #[prost(message, optional, boxed, tag = "3")] pub right: ::core::option::Option<::prost::alloc::boxed::Box>, } -#[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct BinaryExpression { #[prost(message, optional, boxed, tag = "1")] @@ -73,7 +65,6 @@ pub struct BinaryExpression { #[prost(message, optional, boxed, tag = "3")] pub right: ::core::option::Option<::prost::alloc::boxed::Box>, } -#[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct ConditionalExpression { #[prost(message, optional, boxed, tag = "1")] @@ -83,7 +74,6 @@ pub struct ConditionalExpression { #[prost(message, optional, boxed, tag = "3")] pub alternate: ::core::option::Option<::prost::alloc::boxed::Box>, } -#[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct MemberExpression { #[prost(message, optional, boxed, tag = "1")] @@ -93,13 +83,11 @@ pub struct MemberExpression { #[prost(bool, tag = "3")] pub computed: bool, } -#[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct ArrayExpression { #[prost(message, repeated, tag = "1")] pub elements: ::prost::alloc::vec::Vec, } -#[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct CallExpression { #[prost(string, tag = "1")] @@ -107,7 +95,6 @@ pub struct CallExpression { #[prost(message, repeated, tag = "2")] pub arguments: ::prost::alloc::vec::Vec, } -#[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct Property { #[prost(message, optional, tag = "3")] @@ -119,7 +106,6 @@ pub struct Property { } /// Nested message and enum types in `Property`. pub mod property { - #[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Oneof)] pub enum Key { #[prost(message, tag = "1")] @@ -128,14 +114,12 @@ pub mod property { Identifier(super::Identifier), } } -#[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct ObjectExpression { #[prost(message, repeated, tag = "1")] pub properties: ::prost::alloc::vec::Vec, } /// Top-level expression -#[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct Expression { #[prost(message, optional, tag = "11")] @@ -145,7 +129,6 @@ pub struct Expression { } /// Nested message and enum types in `Expression`. pub mod expression { - #[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Oneof)] pub enum Expr { #[prost(message, tag = "1")] @@ -184,9 +167,9 @@ impl UnaryOperator { /// (if the ProtoBuf definition does not change) and safe for programmatic use. pub fn as_str_name(&self) -> &'static str { match self { - UnaryOperator::Pos => "Pos", - UnaryOperator::Neg => "Neg", - UnaryOperator::Not => "Not", + Self::Pos => "Pos", + Self::Neg => "Neg", + Self::Not => "Not", } } /// Creates an enum from field names used in the ProtoBuf definition. @@ -212,8 +195,8 @@ impl LogicalOperator { /// (if the ProtoBuf definition does not change) and safe for programmatic use. pub fn as_str_name(&self) -> &'static str { match self { - LogicalOperator::Or => "Or", - LogicalOperator::And => "And", + Self::Or => "Or", + Self::And => "And", } } /// Creates an enum from field names used in the ProtoBuf definition. @@ -254,24 +237,24 @@ impl BinaryOperator { /// (if the ProtoBuf definition does not change) and safe for programmatic use. pub fn as_str_name(&self) -> &'static str { match self { - BinaryOperator::Equals => "Equals", - BinaryOperator::NotEquals => "NotEquals", - BinaryOperator::StrictEquals => "StrictEquals", - BinaryOperator::NotStrictEquals => "NotStrictEquals", - BinaryOperator::LessThan => "LessThan", - BinaryOperator::LessThanEqual => "LessThanEqual", - BinaryOperator::GreaterThan => "GreaterThan", - BinaryOperator::GreaterThanEqual => "GreaterThanEqual", - BinaryOperator::Plus => "Plus", - BinaryOperator::Minus => "Minus", - BinaryOperator::Mult => "Mult", - BinaryOperator::Div => "Div", - BinaryOperator::Mod => "Mod", - BinaryOperator::BitwiseAnd => "BitwiseAnd", - BinaryOperator::BitwiseOr => "BitwiseOr", - BinaryOperator::BitwiseXor => "BitwiseXor", - BinaryOperator::BitwiseShiftLeft => "BitwiseShiftLeft", - BinaryOperator::BitwiseShiftRight => "BitwiseShiftRight", + Self::Equals => "Equals", + Self::NotEquals => "NotEquals", + Self::StrictEquals => "StrictEquals", + Self::NotStrictEquals => "NotStrictEquals", + Self::LessThan => "LessThan", + Self::LessThanEqual => "LessThanEqual", + Self::GreaterThan => "GreaterThan", + Self::GreaterThanEqual => "GreaterThanEqual", + Self::Plus => "Plus", + Self::Minus => "Minus", + Self::Mult => "Mult", + Self::Div => "Div", + Self::Mod => "Mod", + Self::BitwiseAnd => "BitwiseAnd", + Self::BitwiseOr => "BitwiseOr", + Self::BitwiseXor => "BitwiseXor", + Self::BitwiseShiftLeft => "BitwiseShiftLeft", + Self::BitwiseShiftRight => "BitwiseShiftRight", } } /// Creates an enum from field names used in the ProtoBuf definition. diff --git a/vegafusion-core/src/proto/tonic_gen/pretransform.rs b/vegafusion-core/src/proto/tonic_gen/pretransform.rs index e314003ff..f684c5978 100644 --- a/vegafusion-core/src/proto/tonic_gen/pretransform.rs +++ b/vegafusion-core/src/proto/tonic_gen/pretransform.rs @@ -1,6 +1,5 @@ // This file is @generated by prost-build. /// / Pre transform spec messages -#[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct PreTransformSpecOpts { #[prost(uint32, optional, tag = "1")] @@ -14,7 +13,6 @@ pub struct PreTransformSpecOpts { #[prost(string, optional, tag = "5")] pub default_input_tz: ::core::option::Option<::prost::alloc::string::String>, } -#[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct PreTransformSpecRequest { #[prost(string, tag = "1")] @@ -24,7 +22,6 @@ pub struct PreTransformSpecRequest { #[prost(message, optional, tag = "3")] pub opts: ::core::option::Option, } -#[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct PreTransformSpecResponse { #[prost(string, tag = "1")] @@ -32,7 +29,6 @@ pub struct PreTransformSpecResponse { #[prost(message, repeated, tag = "2")] pub warnings: ::prost::alloc::vec::Vec, } -#[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct PreTransformSpecWarning { #[prost(oneof = "pre_transform_spec_warning::WarningType", tags = "1, 2, 3, 4")] @@ -40,7 +36,6 @@ pub struct PreTransformSpecWarning { } /// Nested message and enum types in `PreTransformSpecWarning`. pub mod pre_transform_spec_warning { - #[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Oneof)] pub enum WarningType { #[prost(message, tag = "1")] @@ -53,23 +48,19 @@ pub mod pre_transform_spec_warning { Planner(super::PlannerWarning), } } -#[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct PreTransformRowLimitWarning { #[prost(message, repeated, tag = "1")] pub datasets: ::prost::alloc::vec::Vec, } -#[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct PreTransformBrokenInteractivityWarning { #[prost(message, repeated, tag = "1")] pub vars: ::prost::alloc::vec::Vec, } -#[allow(clippy::derive_partial_eq_without_eq)] -#[derive(Clone, PartialEq, ::prost::Message)] +#[derive(Clone, Copy, PartialEq, ::prost::Message)] pub struct PreTransformUnsupportedWarning {} /// / Pre transform value messages -#[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct PreTransformVariable { #[prost(message, optional, tag = "1")] @@ -77,7 +68,6 @@ pub struct PreTransformVariable { #[prost(uint32, repeated, tag = "2")] pub scope: ::prost::alloc::vec::Vec, } -#[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct PreTransformValuesOpts { #[prost(uint32, optional, tag = "1")] @@ -87,7 +77,6 @@ pub struct PreTransformValuesOpts { #[prost(string, optional, tag = "3")] pub default_input_tz: ::core::option::Option<::prost::alloc::string::String>, } -#[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct PreTransformValuesRequest { #[prost(string, tag = "1")] @@ -99,7 +88,6 @@ pub struct PreTransformValuesRequest { #[prost(message, optional, tag = "4")] pub opts: ::core::option::Option, } -#[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct PreTransformValuesResponse { #[prost(message, repeated, tag = "1")] @@ -107,7 +95,6 @@ pub struct PreTransformValuesResponse { #[prost(message, repeated, tag = "2")] pub warnings: ::prost::alloc::vec::Vec, } -#[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct PreTransformValuesWarning { #[prost(oneof = "pre_transform_values_warning::WarningType", tags = "1, 2")] @@ -115,7 +102,6 @@ pub struct PreTransformValuesWarning { } /// Nested message and enum types in `PreTransformValuesWarning`. pub mod pre_transform_values_warning { - #[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Oneof)] pub enum WarningType { #[prost(message, tag = "1")] @@ -125,14 +111,12 @@ pub mod pre_transform_values_warning { } } /// / Common pre-transform messages -#[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct PlannerWarning { #[prost(string, tag = "1")] pub message: ::prost::alloc::string::String, } /// / Pre Transform Extract Datasets -#[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct PreTransformExtractDataset { /// Result dataset name @@ -145,7 +129,6 @@ pub struct PreTransformExtractDataset { #[prost(bytes = "vec", tag = "3")] pub table: ::prost::alloc::vec::Vec, } -#[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct PreTransformExtractOpts { #[prost(string, tag = "1")] @@ -159,7 +142,6 @@ pub struct PreTransformExtractOpts { #[prost(message, repeated, tag = "5")] pub keep_variables: ::prost::alloc::vec::Vec, } -#[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct PreTransformExtractWarning { #[prost(oneof = "pre_transform_extract_warning::WarningType", tags = "1")] @@ -167,14 +149,12 @@ pub struct PreTransformExtractWarning { } /// Nested message and enum types in `PreTransformExtractWarning`. pub mod pre_transform_extract_warning { - #[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Oneof)] pub enum WarningType { #[prost(message, tag = "1")] Planner(super::PlannerWarning), } } -#[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct PreTransformExtractResponse { #[prost(string, tag = "1")] @@ -184,7 +164,6 @@ pub struct PreTransformExtractResponse { #[prost(message, repeated, tag = "3")] pub warnings: ::prost::alloc::vec::Vec, } -#[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct PreTransformExtractRequest { #[prost(string, tag = "1")] diff --git a/vegafusion-core/src/proto/tonic_gen/services.rs b/vegafusion-core/src/proto/tonic_gen/services.rs index 805524b13..56878659b 100644 --- a/vegafusion-core/src/proto/tonic_gen/services.rs +++ b/vegafusion-core/src/proto/tonic_gen/services.rs @@ -1,5 +1,4 @@ // This file is @generated by prost-build. -#[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct QueryRequest { #[prost(oneof = "query_request::Request", tags = "1")] @@ -7,14 +6,12 @@ pub struct QueryRequest { } /// Nested message and enum types in `QueryRequest`. pub mod query_request { - #[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Oneof)] pub enum Request { #[prost(message, tag = "1")] TaskGraphValues(super::super::tasks::TaskGraphValueRequest), } } -#[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct QueryResult { #[prost(oneof = "query_result::Response", tags = "1, 2")] @@ -22,7 +19,6 @@ pub struct QueryResult { } /// Nested message and enum types in `QueryResult`. pub mod query_result { - #[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Oneof)] pub enum Response { #[prost(message, tag = "1")] @@ -31,7 +27,6 @@ pub mod query_result { TaskGraphValues(super::super::tasks::TaskGraphValueResponse), } } -#[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct PreTransformSpecResult { #[prost(oneof = "pre_transform_spec_result::Result", tags = "1, 2")] @@ -39,7 +34,6 @@ pub struct PreTransformSpecResult { } /// Nested message and enum types in `PreTransformSpecResult`. pub mod pre_transform_spec_result { - #[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Oneof)] pub enum Result { #[prost(message, tag = "1")] @@ -48,7 +42,6 @@ pub mod pre_transform_spec_result { Response(super::super::pretransform::PreTransformSpecResponse), } } -#[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct PreTransformValuesResult { #[prost(oneof = "pre_transform_values_result::Result", tags = "1, 2")] @@ -56,7 +49,6 @@ pub struct PreTransformValuesResult { } /// Nested message and enum types in `PreTransformValuesResult`. pub mod pre_transform_values_result { - #[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Oneof)] pub enum Result { #[prost(message, tag = "1")] @@ -65,7 +57,6 @@ pub mod pre_transform_values_result { Response(super::super::pretransform::PreTransformValuesResponse), } } -#[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct PreTransformExtractResult { #[prost(oneof = "pre_transform_extract_result::Result", tags = "1, 2")] @@ -73,7 +64,6 @@ pub struct PreTransformExtractResult { } /// Nested message and enum types in `PreTransformExtractResult`. pub mod pre_transform_extract_result { - #[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Oneof)] pub enum Result { #[prost(message, tag = "1")] @@ -84,7 +74,13 @@ pub mod pre_transform_extract_result { } /// Generated client implementations. pub mod vega_fusion_runtime_client { - #![allow(unused_variables, dead_code, missing_docs, clippy::let_unit_value)] + #![allow( + unused_variables, + dead_code, + missing_docs, + clippy::wildcard_imports, + clippy::let_unit_value, + )] use tonic::codegen::*; use tonic::codegen::http::Uri; #[derive(Debug, Clone)] @@ -106,8 +102,8 @@ pub mod vega_fusion_runtime_client { where T: tonic::client::GrpcService, T::Error: Into, - T::ResponseBody: Body + Send + 'static, - ::Error: Into + Send, + T::ResponseBody: Body + std::marker::Send + 'static, + ::Error: Into + std::marker::Send, { pub fn new(inner: T) -> Self { let inner = tonic::client::Grpc::new(inner); @@ -132,7 +128,7 @@ pub mod vega_fusion_runtime_client { >, , - >>::Error: Into + Send + Sync, + >>::Error: Into + std::marker::Send + std::marker::Sync, { VegaFusionRuntimeClient::new(InterceptedService::new(inner, interceptor)) } @@ -175,8 +171,7 @@ pub mod vega_fusion_runtime_client { .ready() .await .map_err(|e| { - tonic::Status::new( - tonic::Code::Unknown, + tonic::Status::unknown( format!("Service was not ready: {}", e.into()), ) })?; @@ -202,8 +197,7 @@ pub mod vega_fusion_runtime_client { .ready() .await .map_err(|e| { - tonic::Status::new( - tonic::Code::Unknown, + tonic::Status::unknown( format!("Service was not ready: {}", e.into()), ) })?; @@ -231,8 +225,7 @@ pub mod vega_fusion_runtime_client { .ready() .await .map_err(|e| { - tonic::Status::new( - tonic::Code::Unknown, + tonic::Status::unknown( format!("Service was not ready: {}", e.into()), ) })?; @@ -260,8 +253,7 @@ pub mod vega_fusion_runtime_client { .ready() .await .map_err(|e| { - tonic::Status::new( - tonic::Code::Unknown, + tonic::Status::unknown( format!("Service was not ready: {}", e.into()), ) })?; @@ -280,11 +272,17 @@ pub mod vega_fusion_runtime_client { } /// Generated server implementations. pub mod vega_fusion_runtime_server { - #![allow(unused_variables, dead_code, missing_docs, clippy::let_unit_value)] + #![allow( + unused_variables, + dead_code, + missing_docs, + clippy::wildcard_imports, + clippy::let_unit_value, + )] use tonic::codegen::*; /// Generated trait containing gRPC methods that should be implemented for use with VegaFusionRuntimeServer. #[async_trait] - pub trait VegaFusionRuntime: Send + Sync + 'static { + pub trait VegaFusionRuntime: std::marker::Send + std::marker::Sync + 'static { async fn task_graph_query( &self, request: tonic::Request, @@ -316,20 +314,18 @@ pub mod vega_fusion_runtime_server { >; } #[derive(Debug)] - pub struct VegaFusionRuntimeServer { - inner: _Inner, + pub struct VegaFusionRuntimeServer { + inner: Arc, accept_compression_encodings: EnabledCompressionEncodings, send_compression_encodings: EnabledCompressionEncodings, max_decoding_message_size: Option, max_encoding_message_size: Option, } - struct _Inner(Arc); - impl VegaFusionRuntimeServer { + impl VegaFusionRuntimeServer { pub fn new(inner: T) -> Self { Self::from_arc(Arc::new(inner)) } pub fn from_arc(inner: Arc) -> Self { - let inner = _Inner(inner); Self { inner, accept_compression_encodings: Default::default(), @@ -379,8 +375,8 @@ pub mod vega_fusion_runtime_server { impl tonic::codegen::Service> for VegaFusionRuntimeServer where T: VegaFusionRuntime, - B: Body + Send + 'static, - B::Error: Into + Send + 'static, + B: Body + std::marker::Send + 'static, + B::Error: Into + std::marker::Send + 'static, { type Response = http::Response; type Error = std::convert::Infallible; @@ -392,7 +388,6 @@ pub mod vega_fusion_runtime_server { Poll::Ready(Ok(())) } fn call(&mut self, req: http::Request) -> Self::Future { - let inner = self.inner.clone(); match req.uri().path() { "/services.VegaFusionRuntime/TaskGraphQuery" => { #[allow(non_camel_case_types)] @@ -424,7 +419,6 @@ pub mod vega_fusion_runtime_server { let max_encoding_message_size = self.max_encoding_message_size; let inner = self.inner.clone(); let fut = async move { - let inner = inner.0; let method = TaskGraphQuerySvc(inner); let codec = tonic::codec::ProstCodec::default(); let mut grpc = tonic::server::Grpc::new(codec) @@ -477,7 +471,6 @@ pub mod vega_fusion_runtime_server { let max_encoding_message_size = self.max_encoding_message_size; let inner = self.inner.clone(); let fut = async move { - let inner = inner.0; let method = PreTransformSpecSvc(inner); let codec = tonic::codec::ProstCodec::default(); let mut grpc = tonic::server::Grpc::new(codec) @@ -530,7 +523,6 @@ pub mod vega_fusion_runtime_server { let max_encoding_message_size = self.max_encoding_message_size; let inner = self.inner.clone(); let fut = async move { - let inner = inner.0; let method = PreTransformValuesSvc(inner); let codec = tonic::codec::ProstCodec::default(); let mut grpc = tonic::server::Grpc::new(codec) @@ -583,7 +575,6 @@ pub mod vega_fusion_runtime_server { let max_encoding_message_size = self.max_encoding_message_size; let inner = self.inner.clone(); let fut = async move { - let inner = inner.0; let method = PreTransformExtractSvc(inner); let codec = tonic::codec::ProstCodec::default(); let mut grpc = tonic::server::Grpc::new(codec) @@ -602,20 +593,25 @@ pub mod vega_fusion_runtime_server { } _ => { Box::pin(async move { - Ok( - http::Response::builder() - .status(200) - .header("grpc-status", "12") - .header("content-type", "application/grpc") - .body(empty_body()) - .unwrap(), - ) + let mut response = http::Response::new(empty_body()); + let headers = response.headers_mut(); + headers + .insert( + tonic::Status::GRPC_STATUS, + (tonic::Code::Unimplemented as i32).into(), + ); + headers + .insert( + http::header::CONTENT_TYPE, + tonic::metadata::GRPC_CONTENT_TYPE, + ); + Ok(response) }) } } } } - impl Clone for VegaFusionRuntimeServer { + impl Clone for VegaFusionRuntimeServer { fn clone(&self) -> Self { let inner = self.inner.clone(); Self { @@ -627,18 +623,9 @@ pub mod vega_fusion_runtime_server { } } } - impl Clone for _Inner { - fn clone(&self) -> Self { - Self(Arc::clone(&self.0)) - } - } - impl std::fmt::Debug for _Inner { - fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { - write!(f, "{:?}", self.0) - } - } - impl tonic::server::NamedService - for VegaFusionRuntimeServer { - const NAME: &'static str = "services.VegaFusionRuntime"; + /// Generated gRPC service name + pub const SERVICE_NAME: &str = "services.VegaFusionRuntime"; + impl tonic::server::NamedService for VegaFusionRuntimeServer { + const NAME: &'static str = SERVICE_NAME; } } diff --git a/vegafusion-core/src/proto/tonic_gen/tasks.rs b/vegafusion-core/src/proto/tonic_gen/tasks.rs index df00a25bd..5d7f6f233 100644 --- a/vegafusion-core/src/proto/tonic_gen/tasks.rs +++ b/vegafusion-core/src/proto/tonic_gen/tasks.rs @@ -1,6 +1,5 @@ // This file is @generated by prost-build. /// ## Task Value -#[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct TaskValue { #[prost(oneof = "task_value::Data", tags = "1, 2")] @@ -8,7 +7,6 @@ pub struct TaskValue { } /// Nested message and enum types in `TaskValue`. pub mod task_value { - #[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Oneof)] pub enum Data { /// @@ -21,7 +19,6 @@ pub mod task_value { Table(::prost::alloc::vec::Vec), } } -#[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct Variable { #[prost(string, tag = "1")] @@ -30,7 +27,6 @@ pub struct Variable { pub namespace: i32, } /// ## Scan URL Task -#[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct ParseFieldSpec { #[prost(string, tag = "1")] @@ -38,13 +34,11 @@ pub struct ParseFieldSpec { #[prost(string, tag = "2")] pub datatype: ::prost::alloc::string::String, } -#[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct ParseFieldSpecs { #[prost(message, repeated, tag = "1")] pub specs: ::prost::alloc::vec::Vec, } -#[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct ScanUrlFormat { /// @@ -84,7 +78,6 @@ pub mod scan_url_format { /// parses the modified_on field in each input record as a Date value. Specific date formats can /// be provided (e.g., {"foo": "date:'%m%d%Y'"}), using the d3-time-format syntax. UTC date format /// parsing is supported similarly (e.g., {"foo": "utc:'%m%d%Y'"}). - #[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Oneof)] pub enum Parse { #[prost(string, tag = "2")] @@ -93,7 +86,6 @@ pub mod scan_url_format { Object(super::ParseFieldSpecs), } } -#[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct DataUrlTask { #[prost(int32, tag = "3")] @@ -107,7 +99,6 @@ pub struct DataUrlTask { } /// Nested message and enum types in `DataUrlTask`. pub mod data_url_task { - #[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Oneof)] pub enum Url { #[prost(string, tag = "1")] @@ -117,7 +108,6 @@ pub mod data_url_task { } } /// ## Inline values task -#[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct DataValuesTask { #[prost(bytes = "vec", tag = "1")] @@ -128,7 +118,6 @@ pub struct DataValuesTask { pub pipeline: ::core::option::Option, } /// ## Transform Task -#[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct DataSourceTask { #[prost(string, tag = "1")] @@ -137,14 +126,12 @@ pub struct DataSourceTask { pub pipeline: ::core::option::Option, } /// ## Signal Task -#[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct SignalTask { #[prost(message, optional, tag = "2")] pub expr: ::core::option::Option, } /// ## Timezone config -#[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct TzConfig { #[prost(string, tag = "1")] @@ -153,7 +140,6 @@ pub struct TzConfig { pub default_input_tz: ::core::option::Option<::prost::alloc::string::String>, } /// ## Top-level Task -#[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct Task { #[prost(message, optional, tag = "1")] @@ -167,7 +153,6 @@ pub struct Task { } /// Nested message and enum types in `Task`. pub mod task { - #[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Oneof)] pub enum TaskKind { #[prost(message, tag = "3")] @@ -183,23 +168,20 @@ pub mod task { } } /// ## Task Graph -#[allow(clippy::derive_partial_eq_without_eq)] -#[derive(Clone, PartialEq, ::prost::Message)] +#[derive(Clone, Copy, PartialEq, ::prost::Message)] pub struct IncomingEdge { #[prost(uint32, tag = "1")] pub source: u32, #[prost(uint32, optional, tag = "2")] pub output: ::core::option::Option, } -#[allow(clippy::derive_partial_eq_without_eq)] -#[derive(Clone, PartialEq, ::prost::Message)] +#[derive(Clone, Copy, PartialEq, ::prost::Message)] pub struct OutgoingEdge { #[prost(uint32, tag = "1")] pub target: u32, #[prost(bool, tag = "2")] pub propagate: bool, } -#[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct TaskNode { #[prost(message, optional, tag = "1")] @@ -213,21 +195,18 @@ pub struct TaskNode { #[prost(uint64, tag = "5")] pub state_fingerprint: u64, } -#[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct TaskGraph { #[prost(message, repeated, tag = "1")] pub nodes: ::prost::alloc::vec::Vec, } -#[allow(clippy::derive_partial_eq_without_eq)] -#[derive(Clone, PartialEq, ::prost::Message)] +#[derive(Clone, Copy, PartialEq, ::prost::Message)] pub struct NodeValueIndex { #[prost(uint32, tag = "1")] pub node_index: u32, #[prost(uint32, optional, tag = "2")] pub output_index: ::core::option::Option, } -#[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct TaskGraphValueRequest { #[prost(message, optional, tag = "1")] @@ -237,7 +216,6 @@ pub struct TaskGraphValueRequest { #[prost(message, repeated, tag = "3")] pub inline_datasets: ::prost::alloc::vec::Vec, } -#[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct ResponseTaskValue { #[prost(message, optional, tag = "1")] @@ -247,15 +225,13 @@ pub struct ResponseTaskValue { #[prost(message, optional, tag = "3")] pub value: ::core::option::Option, } -#[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct TaskGraphValueResponse { #[prost(message, repeated, tag = "1")] pub response_values: ::prost::alloc::vec::Vec, } -#[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] -pub struct InlineDataset { +pub struct InlineDatasetTable { /// Inline dataset name #[prost(string, tag = "1")] pub name: ::prost::alloc::string::String, @@ -263,6 +239,30 @@ pub struct InlineDataset { #[prost(bytes = "vec", tag = "2")] pub table: ::prost::alloc::vec::Vec, } +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct InlineDatasetPlan { + /// Inline dataset name + #[prost(string, tag = "1")] + pub name: ::prost::alloc::string::String, + /// Serialized DataFusion plan in protobuf format + #[prost(bytes = "vec", tag = "2")] + pub plan: ::prost::alloc::vec::Vec, +} +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct InlineDataset { + #[prost(oneof = "inline_dataset::Dataset", tags = "1, 2")] + pub dataset: ::core::option::Option, +} +/// Nested message and enum types in `InlineDataset`. +pub mod inline_dataset { + #[derive(Clone, PartialEq, ::prost::Oneof)] + pub enum Dataset { + #[prost(message, tag = "1")] + Table(super::InlineDatasetTable), + #[prost(message, tag = "2")] + Plan(super::InlineDatasetPlan), + } +} /// ## Variable #[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)] #[repr(i32)] @@ -278,9 +278,9 @@ impl VariableNamespace { /// (if the ProtoBuf definition does not change) and safe for programmatic use. pub fn as_str_name(&self) -> &'static str { match self { - VariableNamespace::Signal => "Signal", - VariableNamespace::Data => "Data", - VariableNamespace::Scale => "Scale", + Self::Signal => "Signal", + Self::Data => "Data", + Self::Scale => "Scale", } } /// Creates an enum from field names used in the ProtoBuf definition. diff --git a/vegafusion-core/src/proto/tonic_gen/transforms.rs b/vegafusion-core/src/proto/tonic_gen/transforms.rs index 19bca1240..fa9f3283e 100644 --- a/vegafusion-core/src/proto/tonic_gen/transforms.rs +++ b/vegafusion-core/src/proto/tonic_gen/transforms.rs @@ -1,13 +1,11 @@ // This file is @generated by prost-build. /// Filter -#[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct Filter { #[prost(message, optional, tag = "1")] pub expr: ::core::option::Option, } /// Formula -#[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct Formula { #[prost(message, optional, tag = "1")] @@ -16,7 +14,6 @@ pub struct Formula { pub r#as: ::prost::alloc::string::String, } /// Extent -#[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct Extent { #[prost(string, tag = "1")] @@ -25,7 +22,6 @@ pub struct Extent { pub signal: ::core::option::Option<::prost::alloc::string::String>, } /// Collect -#[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct Collect { #[prost(string, repeated, tag = "1")] @@ -34,7 +30,6 @@ pub struct Collect { pub order: ::prost::alloc::vec::Vec, } /// Bin -#[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct Bin { #[prost(string, tag = "1")] @@ -79,7 +74,6 @@ pub struct Bin { pub nice: bool, } /// Aggregate -#[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct Aggregate { #[prost(string, repeated, tag = "1")] @@ -92,7 +86,6 @@ pub struct Aggregate { pub ops: ::prost::alloc::vec::Vec, } /// JoinAggregate -#[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct JoinAggregate { #[prost(string, repeated, tag = "1")] @@ -105,7 +98,6 @@ pub struct JoinAggregate { pub aliases: ::prost::alloc::vec::Vec<::prost::alloc::string::String>, } /// TimeUnit -#[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct TimeUnit { #[prost(string, tag = "1")] @@ -121,16 +113,14 @@ pub struct TimeUnit { #[prost(enumeration = "TimeUnitTimeZone", optional, tag = "6")] pub timezone: ::core::option::Option, } -#[allow(clippy::derive_partial_eq_without_eq)] -#[derive(Clone, PartialEq, ::prost::Message)] +#[derive(Clone, Copy, PartialEq, ::prost::Message)] pub struct WindowTransformOp { #[prost(oneof = "window_transform_op::Op", tags = "1, 2")] pub op: ::core::option::Option, } /// Nested message and enum types in `WindowTransformOp`. pub mod window_transform_op { - #[allow(clippy::derive_partial_eq_without_eq)] - #[derive(Clone, PartialEq, ::prost::Oneof)] + #[derive(Clone, Copy, PartialEq, ::prost::Oneof)] pub enum Op { #[prost(enumeration = "super::AggregateOp", tag = "1")] AggregateOp(i32), @@ -138,7 +128,6 @@ pub mod window_transform_op { WindowOp(i32), } } -#[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct Window { #[prost(enumeration = "SortOrder", repeated, tag = "1")] @@ -160,8 +149,7 @@ pub struct Window { #[prost(bool, optional, tag = "9")] pub ignore_peers: ::core::option::Option, } -#[allow(clippy::derive_partial_eq_without_eq)] -#[derive(Clone, PartialEq, ::prost::Message)] +#[derive(Clone, Copy, PartialEq, ::prost::Message)] pub struct WindowFrame { #[prost(int64, optional, tag = "1")] pub start: ::core::option::Option, @@ -169,14 +157,12 @@ pub struct WindowFrame { pub end: ::core::option::Option, } /// Project -#[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct Project { #[prost(string, repeated, tag = "1")] pub fields: ::prost::alloc::vec::Vec<::prost::alloc::string::String>, } /// Stack -#[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct Stack { #[prost(string, tag = "1")] @@ -195,7 +181,6 @@ pub struct Stack { pub alias_1: ::core::option::Option<::prost::alloc::string::String>, } /// Impute -#[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct Impute { #[prost(string, tag = "1")] @@ -210,7 +195,6 @@ pub struct Impute { pub value_json: ::core::option::Option<::prost::alloc::string::String>, } /// Pivot -#[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct Pivot { #[prost(string, tag = "1")] @@ -225,14 +209,12 @@ pub struct Pivot { pub op: ::core::option::Option, } /// Identifier -#[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct Identifier { #[prost(string, tag = "1")] pub r#as: ::prost::alloc::string::String, } /// Fold -#[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct Fold { #[prost(string, repeated, tag = "1")] @@ -241,7 +223,6 @@ pub struct Fold { pub r#as: ::prost::alloc::vec::Vec<::prost::alloc::string::String>, } /// Sequence -#[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct Sequence { #[prost(message, optional, tag = "1")] @@ -254,7 +235,6 @@ pub struct Sequence { pub r#as: ::core::option::Option<::prost::alloc::string::String>, } /// Top-level transform -#[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct Transform { #[prost( @@ -265,7 +245,6 @@ pub struct Transform { } /// Nested message and enum types in `Transform`. pub mod transform { - #[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Oneof)] pub enum TransformKind { #[prost(message, tag = "1")] @@ -302,7 +281,6 @@ pub mod transform { Sequence(super::Sequence), } } -#[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct TransformPipeline { #[prost(message, repeated, tag = "1")] @@ -321,8 +299,8 @@ impl SortOrder { /// (if the ProtoBuf definition does not change) and safe for programmatic use. pub fn as_str_name(&self) -> &'static str { match self { - SortOrder::Descending => "Descending", - SortOrder::Ascending => "Ascending", + Self::Descending => "Descending", + Self::Ascending => "Ascending", } } /// Creates an enum from field names used in the ProtoBuf definition. @@ -368,29 +346,29 @@ impl AggregateOp { /// (if the ProtoBuf definition does not change) and safe for programmatic use. pub fn as_str_name(&self) -> &'static str { match self { - AggregateOp::Count => "Count", - AggregateOp::Valid => "Valid", - AggregateOp::Missing => "Missing", - AggregateOp::Distinct => "Distinct", - AggregateOp::Sum => "Sum", - AggregateOp::Product => "Product", - AggregateOp::Mean => "Mean", - AggregateOp::Average => "Average", - AggregateOp::Variance => "Variance", - AggregateOp::Variancep => "Variancep", - AggregateOp::Stdev => "Stdev", - AggregateOp::Stdevp => "Stdevp", - AggregateOp::Stderr => "Stderr", - AggregateOp::Median => "Median", - AggregateOp::Q1 => "Q1", - AggregateOp::Q3 => "Q3", - AggregateOp::Ci0 => "Ci0", - AggregateOp::Ci1 => "Ci1", - AggregateOp::Min => "Min", - AggregateOp::Max => "Max", - AggregateOp::Argmin => "Argmin", - AggregateOp::Argmax => "Argmax", - AggregateOp::Values => "Values", + Self::Count => "Count", + Self::Valid => "Valid", + Self::Missing => "Missing", + Self::Distinct => "Distinct", + Self::Sum => "Sum", + Self::Product => "Product", + Self::Mean => "Mean", + Self::Average => "Average", + Self::Variance => "Variance", + Self::Variancep => "Variancep", + Self::Stdev => "Stdev", + Self::Stdevp => "Stdevp", + Self::Stderr => "Stderr", + Self::Median => "Median", + Self::Q1 => "Q1", + Self::Q3 => "Q3", + Self::Ci0 => "Ci0", + Self::Ci1 => "Ci1", + Self::Min => "Min", + Self::Max => "Max", + Self::Argmin => "Argmin", + Self::Argmax => "Argmax", + Self::Values => "Values", } } /// Creates an enum from field names used in the ProtoBuf definition. @@ -445,17 +423,17 @@ impl TimeUnitUnit { /// (if the ProtoBuf definition does not change) and safe for programmatic use. pub fn as_str_name(&self) -> &'static str { match self { - TimeUnitUnit::Year => "Year", - TimeUnitUnit::Quarter => "Quarter", - TimeUnitUnit::Month => "Month", - TimeUnitUnit::Date => "Date", - TimeUnitUnit::Week => "Week", - TimeUnitUnit::Day => "Day", - TimeUnitUnit::DayOfYear => "DayOfYear", - TimeUnitUnit::Hours => "Hours", - TimeUnitUnit::Minutes => "Minutes", - TimeUnitUnit::Seconds => "Seconds", - TimeUnitUnit::Milliseconds => "Milliseconds", + Self::Year => "Year", + Self::Quarter => "Quarter", + Self::Month => "Month", + Self::Date => "Date", + Self::Week => "Week", + Self::Day => "Day", + Self::DayOfYear => "DayOfYear", + Self::Hours => "Hours", + Self::Minutes => "Minutes", + Self::Seconds => "Seconds", + Self::Milliseconds => "Milliseconds", } } /// Creates an enum from field names used in the ProtoBuf definition. @@ -489,8 +467,8 @@ impl TimeUnitTimeZone { /// (if the ProtoBuf definition does not change) and safe for programmatic use. pub fn as_str_name(&self) -> &'static str { match self { - TimeUnitTimeZone::Local => "Local", - TimeUnitTimeZone::Utc => "Utc", + Self::Local => "Local", + Self::Utc => "Utc", } } /// Creates an enum from field names used in the ProtoBuf definition. @@ -527,19 +505,19 @@ impl WindowOp { /// (if the ProtoBuf definition does not change) and safe for programmatic use. pub fn as_str_name(&self) -> &'static str { match self { - WindowOp::RowNumber => "RowNumber", - WindowOp::Rank => "Rank", - WindowOp::DenseRank => "DenseRank", - WindowOp::PercentileRank => "PercentileRank", - WindowOp::CumeDist => "CumeDist", - WindowOp::NTile => "NTile", - WindowOp::Lag => "Lag", - WindowOp::Lead => "Lead", - WindowOp::FirstValue => "FirstValue", - WindowOp::LastValue => "LastValue", - WindowOp::NthValue => "NthValue", - WindowOp::PrevValue => "PrevValue", - WindowOp::NextValue => "NextValue", + Self::RowNumber => "RowNumber", + Self::Rank => "Rank", + Self::DenseRank => "DenseRank", + Self::PercentileRank => "PercentileRank", + Self::CumeDist => "CumeDist", + Self::NTile => "NTile", + Self::Lag => "Lag", + Self::Lead => "Lead", + Self::FirstValue => "FirstValue", + Self::LastValue => "LastValue", + Self::NthValue => "NthValue", + Self::PrevValue => "PrevValue", + Self::NextValue => "NextValue", } } /// Creates an enum from field names used in the ProtoBuf definition. @@ -576,9 +554,9 @@ impl StackOffset { /// (if the ProtoBuf definition does not change) and safe for programmatic use. pub fn as_str_name(&self) -> &'static str { match self { - StackOffset::Zero => "Zero", - StackOffset::Center => "Center", - StackOffset::Normalize => "Normalize", + Self::Zero => "Zero", + Self::Center => "Center", + Self::Normalize => "Normalize", } } /// Creates an enum from field names used in the ProtoBuf definition. @@ -607,11 +585,11 @@ impl ImputeMethod { /// (if the ProtoBuf definition does not change) and safe for programmatic use. pub fn as_str_name(&self) -> &'static str { match self { - ImputeMethod::ImputeValue => "ImputeValue", - ImputeMethod::ImputeMean => "ImputeMean", - ImputeMethod::ImputeMedian => "ImputeMedian", - ImputeMethod::ImputeMax => "ImputeMax", - ImputeMethod::ImputeMin => "ImputeMin", + Self::ImputeValue => "ImputeValue", + Self::ImputeMean => "ImputeMean", + Self::ImputeMedian => "ImputeMedian", + Self::ImputeMax => "ImputeMax", + Self::ImputeMin => "ImputeMin", } } /// Creates an enum from field names used in the ProtoBuf definition. diff --git a/vegafusion-core/src/runtime/mod.rs b/vegafusion-core/src/runtime/mod.rs index 31a3c2404..d78775f92 100644 --- a/vegafusion-core/src/runtime/mod.rs +++ b/vegafusion-core/src/runtime/mod.rs @@ -1,10 +1,2 @@ mod runtime; -pub use runtime::{ - decode_inline_datasets, encode_inline_datasets, PreTransformExtractTable, - VegaFusionRuntimeTrait, -}; - -#[cfg(feature = "tonic_support")] -mod grpc_runtime; -#[cfg(feature = "tonic_support")] -pub use grpc_runtime::GrpcVegaFusionRuntime; +pub use runtime::{PreTransformExtractTable, VegaFusionRuntimeTrait}; diff --git a/vegafusion-core/src/runtime/runtime.rs b/vegafusion-core/src/runtime/runtime.rs index 400d0f7dd..52ddff22d 100644 --- a/vegafusion-core/src/runtime/runtime.rs +++ b/vegafusion-core/src/runtime/runtime.rs @@ -1,11 +1,5 @@ use std::{any::Any, collections::HashMap, sync::Arc}; -use async_trait::async_trait; -use vegafusion_common::{ - data::table::VegaFusionTable, - error::{Result, ResultWithContext, VegaFusionError}, -}; - use crate::proto::gen::pretransform::pre_transform_values_warning::WarningType as ValuesWarningType; use crate::{ data::dataset::VegaFusionDataset, @@ -21,7 +15,7 @@ use crate::{ PreTransformExtractWarning, PreTransformRowLimitWarning, PreTransformSpecOpts, PreTransformSpecWarning, PreTransformValuesOpts, PreTransformValuesWarning, }, - tasks::{InlineDataset, NodeValueIndex, TaskGraph, TzConfig, VariableNamespace}, + tasks::{NodeValueIndex, TaskGraph, TzConfig, VariableNamespace}, }, spec::{chart::ChartSpec, values::MissingNullOrValue}, task_graph::{ @@ -29,6 +23,11 @@ use crate::{ task_value::{NamedTaskValue, TaskValue}, }, }; +use async_trait::async_trait; +use vegafusion_common::{ + data::table::VegaFusionTable, + error::{Result, ResultWithContext, VegaFusionError}, +}; #[derive(Clone, Debug)] pub struct PreTransformExtractTable { @@ -373,31 +372,3 @@ pub trait VegaFusionRuntimeTrait: Send + Sync { Ok((task_values, warnings)) } } - -pub fn decode_inline_datasets( - inline_pretransform_datasets: Vec, -) -> Result> { - let inline_datasets = inline_pretransform_datasets - .iter() - .map(|inline_dataset| { - let dataset = VegaFusionDataset::from_table_ipc_bytes(&inline_dataset.table)?; - Ok((inline_dataset.name.clone(), dataset)) - }) - .collect::>>()?; - Ok(inline_datasets) -} - -pub fn encode_inline_datasets( - datasets: &HashMap, -) -> Result> { - datasets - .iter() - .map(|(name, dataset)| { - let VegaFusionDataset::Table { table, hash: _ } = dataset; - Ok(InlineDataset { - name: name.clone(), - table: table.to_ipc_bytes()?, - }) - }) - .collect::>>() -} diff --git a/vegafusion-python/Cargo.toml b/vegafusion-python/Cargo.toml index 8a0a80a14..dc29bbfd4 100644 --- a/vegafusion-python/Cargo.toml +++ b/vegafusion-python/Cargo.toml @@ -31,7 +31,7 @@ workspace = true workspace = true [dependencies.tonic] -version = "0.10.2" +workspace = true features = ["tls"] [dependencies.deterministic-hash] @@ -63,7 +63,7 @@ version = "1.6.9" [dependencies.tokio] workspace = true -features = ["macros", "rt-multi-thread"] +features = ["macros", "rt-multi-thread", "time"] [dependencies.pyo3] workspace = true diff --git a/vegafusion-python/src/lib.rs b/vegafusion-python/src/lib.rs index 2c5983ceb..8a553409c 100644 --- a/vegafusion-python/src/lib.rs +++ b/vegafusion-python/src/lib.rs @@ -16,7 +16,7 @@ use vegafusion_core::proto::gen::pretransform::{ PreTransformExtractOpts, PreTransformSpecOpts, PreTransformValuesOpts, PreTransformVariable, }; use vegafusion_core::proto::gen::tasks::{TzConfig, Variable}; -use vegafusion_core::runtime::GrpcVegaFusionRuntime; +use vegafusion_runtime::task_graph::GrpcVegaFusionRuntime; use vegafusion_runtime::task_graph::runtime::VegaFusionRuntime; @@ -225,7 +225,7 @@ impl PyVegaFusionRuntime { pub fn new_grpc(url: &str) -> PyResult { let tokio_runtime = Arc::new( tokio::runtime::Builder::new_multi_thread() - .enable_io() + .enable_all() .build()?, ); let runtime = tokio_runtime.block_on(async move { diff --git a/vegafusion-python/vegafusion/runtime.py b/vegafusion-python/vegafusion/runtime.py index b7a86acc8..3b58abd12 100644 --- a/vegafusion-python/vegafusion/runtime.py +++ b/vegafusion-python/vegafusion/runtime.py @@ -289,7 +289,7 @@ def _import_inline_datasets( df_nw = nw.from_dict(value, native_namespace=_get_default_namespace()) imported_inline_datasets[name] = Table(df_nw) else: - # Import through PyCapsule interface on narwhals + # Import through PyCapsule interface or narwhals try: df_nw = nw.from_native(value) @@ -362,7 +362,9 @@ def pre_transform_spec( as a string and the second element is the nested scope of the dataset as a list of integers - Returns: Two-element tuple + Returns: + tuple[dict[str, Any], list[PreTransformWarning]]: + Two-element tuple of * The Vega specification as a dict with pre-transformed datasets included inline @@ -423,7 +425,7 @@ def new_chart_state( 'table://{dataset_name}'. Returns: - ChartState object. + ChartState """ local_tz = local_tz or get_local_tz() inline_arrow_dataset = self._import_inline_datasets( @@ -485,11 +487,14 @@ def pre_transform_datasets( * ``"pyarrow"``: pyarrow.Table * ``"arro3"``: arro3.Table - Returns: Two-element tuple - * List of pandas DataFrames corresponding to the input datasets list - * A list of warnings as dictionaries. Each warning dict has a 'type' - key indicating the warning type, and a 'message' key containing a - description of the warning. + Returns: + tuple[list[DataFrameLike], list[PreTransformWarning]]: + Two-element tuple of + + * List of pandas DataFrames corresponding to the input datasets list + * A list of warnings as dictionaries. Each warning dict has a 'type' + key indicating the warning type, and a 'message' key containing a + description of the warning. """ local_tz = local_tz or get_local_tz() @@ -647,7 +652,10 @@ def pre_transform_extract( as a string and the second element is the nested scope of the dataset as a list of integers - Returns: Three-element tuple + Returns: + tuple[dict[str, Any], list[tuple[str, list[int], pa.Table]], list[PreTransformWarning]]: + Three-element tuple of + * The Vega specification as a dict with pre-transformed datasets included but left empty. * Extracted datasets as a list of three element tuples @@ -664,7 +672,7 @@ def pre_transform_extract( broken in the resulting Vega specification * ``'Unsupported'``: No transforms in the provided Vega specification were eligible for pre-transforming - """ + """ # noqa: E501 local_tz = local_tz or get_local_tz() inline_arrow_dataset = self._import_inline_datasets( diff --git a/vegafusion-python/vegafusion/utils.py b/vegafusion-python/vegafusion/utils.py index bd3b2f0e8..69e8dfbe0 100644 --- a/vegafusion-python/vegafusion/utils.py +++ b/vegafusion-python/vegafusion/utils.py @@ -20,12 +20,14 @@ def get_column_usage(spec: dict[str, Any]) -> dict[str, list[str] | None]: spec: Vega spec Returns: - dict[str, list[str] | None]: Dict from root-level dataset name - to either: - - A list of columns that are referenced in this dataset if this can - be determined precisely - - None if it was not possible to determine the full set of columns - that are referenced from this dataset + dict[str, list[str] | None]: + Dict from root-level dataset name to either + + * A list of columns that are referenced in this dataset if this can + be determined precisely + * None if it was not possible to determine the full set of columns + that are referenced from this dataset + """ return cast("dict[str, list[str] | None]", _get_column_usage(spec)) diff --git a/vegafusion-runtime/Cargo.toml b/vegafusion-runtime/Cargo.toml index a6f9e7a43..41989e901 100644 --- a/vegafusion-runtime/Cargo.toml +++ b/vegafusion-runtime/Cargo.toml @@ -10,8 +10,10 @@ version = "1.6.9" description = "VegaFusion Runtime" [features] -default = ["fs", "multi-thread", "rustls-tls", "s3", "http", "parquet"] +default = ["fs", "multi-thread", "rustls-tls", "s3", "http", "parquet", "proto", "tonic"] py = ["vegafusion-core/py"] +proto = ["vegafusion-common/proto", "dep:datafusion-proto"] +tonic = ["dep:tonic", "vegafusion-core/tonic_support", "proto"] protobuf-src = ["vegafusion-core/protobuf-src"] s3 = ["object_store/aws"] http = ["object_store/http"] @@ -36,6 +38,7 @@ deterministic-hash = "1.0.1" log = "0.4.17" env_logger = "0.10.0" ordered-float = "3.6.0" +async-mutex = "1.4.0" [dev-dependencies] futures-util = "0.3.21" @@ -129,10 +132,18 @@ workspace = true [dependencies.datafusion-functions-window] workspace = true +[dependencies.datafusion-proto] +workspace = true +optional = true + [dependencies.tokio] workspace = true features = ["macros"] +[dependencies.tonic] +workspace = true +optional = true + [dependencies.reqwest] workspace = true default-features = false diff --git a/vegafusion-runtime/src/data/tasks.rs b/vegafusion-runtime/src/data/tasks.rs index 2877a0c77..f1b82b3d4 100644 --- a/vegafusion-runtime/src/data/tasks.rs +++ b/vegafusion-runtime/src/data/tasks.rs @@ -139,6 +139,9 @@ impl TaskCall for DataUrlTask { let table = table.clone().with_ordering()?; ctx.vegafusion_table(table).await? } + VegaFusionDataset::Plan { plan } => { + ctx.execute_logical_plan(plan.clone()).await? + } } } else if let Ok(df) = ctx.table(&inline_name).await { df diff --git a/vegafusion-core/src/runtime/grpc_runtime.rs b/vegafusion-runtime/src/task_graph/grpc_runtime.rs similarity index 95% rename from vegafusion-core/src/runtime/grpc_runtime.rs rename to vegafusion-runtime/src/task_graph/grpc_runtime.rs index 9789d6fa9..43360a7be 100644 --- a/vegafusion-core/src/runtime/grpc_runtime.rs +++ b/vegafusion-runtime/src/task_graph/grpc_runtime.rs @@ -1,4 +1,4 @@ -use crate::{ +use vegafusion_core::{ data::dataset::VegaFusionDataset, proto::gen::{ services::{ @@ -7,10 +7,11 @@ use crate::{ }, tasks::{NodeValueIndex, TaskGraph, TaskGraphValueRequest}, }, + runtime::VegaFusionRuntimeTrait, task_graph::task_value::NamedTaskValue, }; -use super::{runtime::encode_inline_datasets, VegaFusionRuntimeTrait}; +use crate::task_graph::runtime::encode_inline_datasets; use async_mutex::Mutex; use async_trait::async_trait; use std::collections::HashMap; diff --git a/vegafusion-runtime/src/task_graph/mod.rs b/vegafusion-runtime/src/task_graph/mod.rs index b933fe077..62a85b8ca 100644 --- a/vegafusion-runtime/src/task_graph/mod.rs +++ b/vegafusion-runtime/src/task_graph/mod.rs @@ -2,3 +2,8 @@ pub mod cache; pub mod runtime; pub mod task; pub mod timezone; + +#[cfg(feature = "tonic")] +mod grpc_runtime; +#[cfg(feature = "tonic")] +pub use grpc_runtime::GrpcVegaFusionRuntime; diff --git a/vegafusion-runtime/src/task_graph/runtime.rs b/vegafusion-runtime/src/task_graph/runtime.rs index 8ad2c2c43..96a357201 100644 --- a/vegafusion-runtime/src/task_graph/runtime.rs +++ b/vegafusion-runtime/src/task_graph/runtime.rs @@ -13,10 +13,19 @@ use std::panic::AssertUnwindSafe; use std::sync::Arc; use vegafusion_core::data::dataset::VegaFusionDataset; use vegafusion_core::error::{Result, ResultWithContext, VegaFusionError}; -use vegafusion_core::proto::gen::tasks::{task::TaskKind, NodeValueIndex, TaskGraph}; +use vegafusion_core::proto::gen::tasks::inline_dataset::Dataset; +use vegafusion_core::proto::gen::tasks::{ + task::TaskKind, InlineDataset, InlineDatasetTable, NodeValueIndex, TaskGraph, +}; use vegafusion_core::runtime::VegaFusionRuntimeTrait; use vegafusion_core::task_graph::task_value::{NamedTaskValue, TaskValue}; +#[cfg(feature = "proto")] +use { + datafusion_proto::bytes::{logical_plan_from_bytes, logical_plan_to_bytes}, + vegafusion_core::proto::gen::tasks::InlineDatasetPlan, +}; + type CacheValue = (TaskValue, Vec); #[derive(Clone)] @@ -215,7 +224,63 @@ async fn get_or_compute_node_value( }; // get or construct from cache - cache.get_or_try_insert_with(cache_key, fut).await } } + +pub async fn decode_inline_datasets( + inline_pretransform_datasets: Vec, + ctx: &SessionContext, +) -> Result> { + let mut inline_datasets = HashMap::new(); + for inline_dataset in inline_pretransform_datasets { + let (name, dataset) = match inline_dataset.dataset.as_ref().unwrap() { + Dataset::Table(table) => { + let dataset = VegaFusionDataset::from_table_ipc_bytes(&table.table)?; + (table.name.clone(), dataset) + } + #[cfg(feature = "proto")] + Dataset::Plan(plan) => { + let logical_plan = logical_plan_from_bytes(&plan.plan, ctx)?; + let dataset = VegaFusionDataset::from_plan(logical_plan); + (plan.name.clone(), dataset) + } + #[cfg(not(feature = "proto"))] + Dataset::Plan(_plan) => { + return Err(VegaFusionError::internal("proto feature is not enabled")) + } + }; + inline_datasets.insert(name, dataset); + } + Ok(inline_datasets) +} + +pub fn encode_inline_datasets( + datasets: &HashMap, +) -> Result> { + datasets + .iter() + .map(|(name, dataset)| { + let encoded_dataset = match dataset { + VegaFusionDataset::Table { table, .. } => InlineDataset { + dataset: Some(Dataset::Table(InlineDatasetTable { + name: name.clone(), + table: table.to_ipc_bytes()?, + })), + }, + #[cfg(feature = "proto")] + VegaFusionDataset::Plan { plan } => InlineDataset { + dataset: Some(Dataset::Plan(InlineDatasetPlan { + name: name.clone(), + plan: logical_plan_to_bytes(&plan)?.to_vec(), + })), + }, + #[cfg(not(feature = "proto"))] + VegaFusionDataset::Plan { .. } => { + return Err(VegaFusionError::internal("proto feature is not enabled")) + } + }; + Ok(encoded_dataset) + }) + .collect::>>() +} diff --git a/vegafusion-server/Cargo.toml b/vegafusion-server/Cargo.toml index 89b548a42..284312841 100644 --- a/vegafusion-server/Cargo.toml +++ b/vegafusion-server/Cargo.toml @@ -24,8 +24,8 @@ assert_cmd = "2.0" predicates = "3.0.2" [build-dependencies] -tonic-build = "0.10.2" -prost-build = "0.12.1" +tonic-build = {workspace = true} +prost-build = { workspace = true } [dependencies.prost] workspace = true @@ -48,16 +48,16 @@ version = "1.6.9" [dependencies.tokio] workspace = true -features = ["rt-multi-thread", "macros"] +features = ["rt-multi-thread", "macros", "time"] [dependencies.datafusion] workspace = true [dependencies.tonic-web] -version = "0.10.2" +workspace = true [dependencies.tonic] -version = "0.10.2" +workspace = true features = ["tls"] [dependencies.clap] diff --git a/vegafusion-server/src/main.rs b/vegafusion-server/src/main.rs index 2d0ecf9ef..bbfcd549f 100644 --- a/vegafusion-server/src/main.rs +++ b/vegafusion-server/src/main.rs @@ -14,10 +14,10 @@ use vegafusion_core::proto::gen::services::{ }; use vegafusion_core::proto::gen::tasks::TaskGraphValueResponse; use vegafusion_core::proto::gen::tasks::{ResponseTaskValue, TaskValue as ProtoTaskValue}; -use vegafusion_core::runtime::{decode_inline_datasets, VegaFusionRuntimeTrait}; +use vegafusion_core::runtime::VegaFusionRuntimeTrait; use vegafusion_core::spec::chart::ChartSpec; use vegafusion_core::task_graph::graph::ScopedVariable; -use vegafusion_runtime::task_graph::runtime::VegaFusionRuntime; +use vegafusion_runtime::task_graph::runtime::{decode_inline_datasets, VegaFusionRuntime}; use clap::Parser; use regex::Regex; @@ -27,6 +27,7 @@ use vegafusion_core::proto::gen::pretransform::{ PreTransformValuesOpts, PreTransformValuesRequest, PreTransformValuesResponse, }; use vegafusion_runtime::task_graph::cache::VegaFusionCache; +use vegafusion_runtime::tokio_runtime::TOKIO_THREAD_STACK_SIZE; #[derive(Clone)] pub struct VegaFusionRuntimeGrpc { @@ -46,7 +47,11 @@ impl VegaFusionRuntimeGrpc { Some(query_request::Request::TaskGraphValues(task_graph_values)) => { let task_graph = Arc::new(task_graph_values.task_graph.unwrap()); let indices = &task_graph_values.indices; - let inline_datasets = decode_inline_datasets(task_graph_values.inline_datasets)?; + let inline_datasets = decode_inline_datasets( + task_graph_values.inline_datasets, + self.runtime.ctx.as_ref(), + ) + .await?; match self .runtime @@ -98,7 +103,8 @@ impl VegaFusionRuntimeGrpc { }); // Decode inline datasets to VegaFusionDatasets - let inline_datasets = decode_inline_datasets(request.inline_datasets)?; + let inline_datasets = + decode_inline_datasets(request.inline_datasets, self.runtime.ctx.as_ref()).await?; // Parse spec let spec: ChartSpec = serde_json::from_str(&request.spec)?; @@ -129,7 +135,8 @@ impl VegaFusionRuntimeGrpc { ) -> Result { // Extract and deserialize inline datasets let inline_pretransform_datasets = request.inline_datasets; - let inline_datasets = decode_inline_datasets(inline_pretransform_datasets)?; + let inline_datasets = + decode_inline_datasets(inline_pretransform_datasets, self.runtime.ctx.as_ref()).await?; let opts = request.opts.unwrap(); // Parse spec @@ -187,7 +194,8 @@ impl VegaFusionRuntimeGrpc { .collect::>(); // Extract and deserialize inline datasets - let inline_datasets = decode_inline_datasets(request.inline_datasets)?; + let inline_datasets = + decode_inline_datasets(request.inline_datasets, self.runtime.ctx.as_ref()).await?; // Parse spec let spec_string = request.spec; @@ -301,8 +309,7 @@ struct Args { pub web: bool, } -#[tokio::main] -async fn main() -> Result<(), VegaFusionError> { +fn main() -> Result<(), VegaFusionError> { let args = Args::parse(); // Create addresse @@ -321,14 +328,22 @@ async fn main() -> Result<(), VegaFusionError> { None }; + let tokio_runtime = tokio::runtime::Builder::new_multi_thread() + .enable_all() + .thread_stack_size(TOKIO_THREAD_STACK_SIZE) + .build() + .expect("Failed to create tokio runtime"); + let tg_runtime = VegaFusionRuntime::new(Some(VegaFusionCache::new( Some(args.capacity), memory_limit, ))); - grpc_server(grpc_address, tg_runtime.clone(), args.web) - .await - .expect("Failed to start grpc service"); + tokio_runtime.block_on(async move { + grpc_server(grpc_address, tg_runtime.clone(), args.web) + .await + .expect("Failed to start grpc service"); + }); Ok(()) } diff --git a/vegafusion-wasm/src/lib.rs b/vegafusion-wasm/src/lib.rs index 637a3bd4f..dfdcd1b6d 100644 --- a/vegafusion-wasm/src/lib.rs +++ b/vegafusion-wasm/src/lib.rs @@ -26,13 +26,13 @@ use vegafusion_core::planning::watch::{ExportUpdateJSON, ExportUpdateNamespace, use vegafusion_core::proto::gen::services::{ query_request, query_result, QueryRequest, QueryResult, }; -use vegafusion_core::runtime::{encode_inline_datasets, VegaFusionRuntimeTrait}; +use vegafusion_core::runtime::VegaFusionRuntimeTrait; use vegafusion_core::spec::chart::ChartSpec; use vegafusion_core::chart_state::{ChartState, ChartStateOpts}; use vegafusion_core::data::dataset::VegaFusionDataset; use vegafusion_core::get_column_usage; -use vegafusion_runtime::task_graph::runtime::VegaFusionRuntime; +use vegafusion_runtime::task_graph::runtime::{encode_inline_datasets, VegaFusionRuntime}; use web_sys::Element; fn set_panic_hook() {