From 0a484378d0c9065b372198073fa98dfc8a845364 Mon Sep 17 00:00:00 2001 From: Edgar Riba Date: Mon, 15 Jul 2024 13:05:14 +0200 Subject: [PATCH] Refactor crates (#97) * refactor repo into sub crates * fix python * fix kornia-serve * workspace definitions * fix docker * fix deps * exclude py package from workspace * add dependency * fix serve docker * exclude py and serve * propagate features to kornia-io * clean deps * use kornia-rs for the examples * fix py and serve * fix readme * move examples to single crates * kornia-py and kornia-serve to excluded members * move benches to crates * update gstreamer 0.23 * remove vscode artifacts * remove vscode artifacts * update py * remove artifacts * define as modules in kornia_rs * improve docs * add docs * remove more artifacts * try to organize better dockers * undo cross docker * polish docs * rename kornia-rs to kornia namespace --- .github/workflows/python_test.yml | 2 +- .github/workflows/rust_release.yml | 2 +- .github/workflows/rust_test.yml | 2 +- .gitignore | 2 + Cargo.lock | 7728 ----------------- Cargo.toml | 88 +- README.md | 22 +- build_wheels.sh | 15 - crates/kornia-core/Cargo.toml | 22 + .../kornia-core/src}/allocator.rs | 6 + crates/kornia-core/src/lib.rs | 29 + .../kornia-core/src}/serde.rs | 4 +- .../kornia-core/src}/storage.rs | 3 +- .../kornia-core/src/tensor.rs | 51 +- crates/kornia-image/Cargo.toml | 22 + {src => crates/kornia-image/src}/image.rs | 98 +- crates/kornia-image/src/lib.rs | 7 + crates/kornia-imgproc/Cargo.toml | 47 + .../kornia-imgproc/benches}/bench_color.rs | 52 +- .../kornia-imgproc/benches}/bench_metrics.rs | 7 +- .../kornia-imgproc/benches}/bench_resize.rs | 9 +- .../kornia-imgproc/benches}/bench_warp.rs | 10 +- .../src}/calibration/distortion.rs | 16 +- .../kornia-imgproc/src}/calibration/mod.rs | 7 + .../kornia-imgproc/src}/color/gray.rs | 10 +- .../kornia-imgproc/src}/color/hsv.rs | 10 +- .../kornia-imgproc/src}/color/mod.rs | 0 {src => crates/kornia-imgproc/src}/core.rs | 15 +- .../kornia-imgproc/src}/distance_transform.rs | 6 +- {src => crates/kornia-imgproc/src}/enhance.rs | 4 +- {src => crates/kornia-imgproc/src}/flip.rs | 18 +- .../kornia-imgproc/src}/histogram.rs | 19 +- .../src}/interpolation/bilinear.rs | 2 +- .../kornia-imgproc/src}/interpolation/grid.rs | 6 +- .../src}/interpolation/interpolate.rs | 4 +- .../kornia-imgproc/src}/interpolation/mod.rs | 0 .../src}/interpolation/nearest.rs | 2 +- .../src}/interpolation/remap.rs | 4 +- crates/kornia-imgproc/src/lib.rs | 40 + .../kornia-imgproc/src}/metrics/huber.rs | 8 +- .../kornia-imgproc/src}/metrics/l1.rs | 25 +- .../kornia-imgproc/src}/metrics/mod.rs | 0 .../kornia-imgproc/src}/metrics/mse.rs | 41 +- .../kornia-imgproc/src}/normalize.rs | 53 +- {src => crates/kornia-imgproc/src}/resize.rs | 38 +- .../kornia-imgproc/src}/threshold.rs | 28 +- .../kornia-imgproc/src}/warp/affine.rs | 24 +- .../kornia-imgproc/src}/warp/mod.rs | 0 .../kornia-imgproc/src}/warp/perspective.rs | 23 +- crates/kornia-io/Cargo.toml | 44 + .../kornia-io/benches}/bench_io.rs | 14 +- .../kornia-io/src}/fps_counter.rs | 15 + .../io => crates/kornia-io/src}/functional.rs | 24 +- {src/io => crates/kornia-io/src}/jpeg.rs | 10 +- crates/kornia-io/src/lib.rs | 20 + .../kornia-io/src}/stream/camera.rs | 7 +- .../io => crates/kornia-io/src}/stream/mod.rs | 21 +- {src/io => crates/kornia-io/src}/webcam.rs | 3 + crates/kornia/Cargo.toml | 22 + crates/kornia/src/lib.rs | 11 + devel-x86_64.Dockerfile | 2 +- devel.sh | 3 - examples/binarize/Cargo.toml | 18 + examples/binarize/README.md | 13 + .../{binarize.rs => binarize/src/main.rs} | 25 +- examples/color_detector/Cargo.toml | 18 + examples/color_detector/README.md | 19 + .../src/main.rs} | 12 +- examples/hello_world.rs | 14 - examples/hello_world/Cargo.toml | 17 + examples/hello_world/README.md | 24 + examples/hello_world/src/main.rs | 24 + examples/histogram/Cargo.toml | 18 + examples/histogram/README.md | 19 + .../{histogram.rs => histogram/src/main.rs} | 20 +- examples/imgproc/Cargo.toml | 17 + examples/imgproc/README.md | 19 + examples/{imgproc.rs => imgproc/src/main.rs} | 29 +- examples/metrics/Cargo.toml | 17 + examples/metrics/README.md | 22 + examples/{metrics.rs => metrics/src/main.rs} | 24 +- examples/normalize/Cargo.toml | 18 + examples/normalize/README.md | 21 + .../{normalize.rs => normalize/src/main.rs} | 22 +- examples/normalize_ii.rs | 31 - examples/normalize_ii/Cargo.toml | 18 + examples/normalize_ii/README.md | 21 + examples/normalize_ii/src/main.rs | 41 + examples/rerun_viz/Cargo.toml | 17 + examples/rerun_viz/README.md | 19 + .../{rerun_viz.rs => rerun_viz/src/main.rs} | 18 +- examples/rotate.rs | 38 - examples/rotate/Cargo.toml | 17 + examples/rotate/README.md | 19 + examples/rotate/src/main.rs | 47 + examples/std_mean/Cargo.toml | 20 + examples/std_mean/REAMDE.md | 14 + .../{std_mean.rs => std_mean/src/main.rs} | 5 +- examples/undistort_image/Cargo.toml | 17 + examples/undistort_image/README.md | 13 + .../src/main.rs} | 17 +- examples/webcam/Cargo.toml | 4 +- examples/webcam/README.md | 14 + examples/webcam/src/main.rs | 13 +- kornia-py/Cargo.lock | 678 +- kornia-py/Cargo.toml | 20 +- kornia-py/src/dlpack.rs | 2 +- kornia-py/src/histogram.rs | 4 +- kornia-py/src/image.rs | 8 +- kornia-py/src/io/functional.rs | 2 +- kornia-py/src/io/jpeg.rs | 2 +- kornia-py/src/resize.rs | 13 +- kornia-py/src/warp.rs | 12 +- kornia-rs.code-workspace | 7 - kornia-serve/Cargo.lock | 366 +- kornia-serve/Cargo.toml | 18 +- kornia-serve/Dockerfile | 4 +- kornia-serve/src/compute.rs | 6 +- release.sh | 3 - run_tests.sh | 2 - src/io/mod.rs | 8 - src/lib.rs | 18 - src/tensor/mod.rs | 14 - 123 files changed, 2469 insertions(+), 8378 deletions(-) delete mode 100644 Cargo.lock delete mode 100755 build_wheels.sh create mode 100644 crates/kornia-core/Cargo.toml rename {src/tensor => crates/kornia-core/src}/allocator.rs (89%) create mode 100644 crates/kornia-core/src/lib.rs rename {src/tensor => crates/kornia-core/src}/serde.rs (94%) rename {src/tensor => crates/kornia-core/src}/storage.rs (97%) rename src/tensor/base.rs => crates/kornia-core/src/tensor.rs (95%) create mode 100644 crates/kornia-image/Cargo.toml rename {src => crates/kornia-image/src}/image.rs (87%) create mode 100644 crates/kornia-image/src/lib.rs create mode 100644 crates/kornia-imgproc/Cargo.toml rename {benches => crates/kornia-imgproc/benches}/bench_color.rs (64%) rename {benches => crates/kornia-imgproc/benches}/bench_metrics.rs (89%) rename {benches => crates/kornia-imgproc/benches}/bench_resize.rs (85%) rename {benches => crates/kornia-imgproc/benches}/bench_warp.rs (85%) rename {src => crates/kornia-imgproc/src}/calibration/distortion.rs (92%) rename {src => crates/kornia-imgproc/src}/calibration/mod.rs (69%) rename {src => crates/kornia-imgproc/src}/color/gray.rs (88%) rename {src => crates/kornia-imgproc/src}/color/hsv.rs (92%) rename {src => crates/kornia-imgproc/src}/color/mod.rs (100%) rename {src => crates/kornia-imgproc/src}/core.rs (93%) rename {src => crates/kornia-imgproc/src}/distance_transform.rs (97%) rename {src => crates/kornia-imgproc/src}/enhance.rs (97%) rename {src => crates/kornia-imgproc/src}/flip.rs (88%) rename {src => crates/kornia-imgproc/src}/histogram.rs (85%) rename {src => crates/kornia-imgproc/src}/interpolation/bilinear.rs (97%) rename {src => crates/kornia-imgproc/src}/interpolation/grid.rs (91%) rename {src => crates/kornia-imgproc/src}/interpolation/interpolate.rs (91%) rename {src => crates/kornia-imgproc/src}/interpolation/mod.rs (100%) rename {src => crates/kornia-imgproc/src}/interpolation/nearest.rs (95%) rename {src => crates/kornia-imgproc/src}/interpolation/remap.rs (97%) create mode 100644 crates/kornia-imgproc/src/lib.rs rename {src => crates/kornia-imgproc/src}/metrics/huber.rs (93%) rename {src => crates/kornia-imgproc/src}/metrics/l1.rs (82%) rename {src => crates/kornia-imgproc/src}/metrics/mod.rs (100%) rename {src => crates/kornia-imgproc/src}/metrics/mse.rs (87%) rename {src => crates/kornia-imgproc/src}/normalize.rs (89%) rename {src => crates/kornia-imgproc/src}/resize.rs (91%) rename {src => crates/kornia-imgproc/src}/threshold.rs (95%) rename {src => crates/kornia-imgproc/src}/warp/affine.rs (92%) rename {src => crates/kornia-imgproc/src}/warp/mod.rs (100%) rename {src => crates/kornia-imgproc/src}/warp/perspective.rs (94%) create mode 100644 crates/kornia-io/Cargo.toml rename {benches => crates/kornia-io/benches}/bench_io.rs (68%) rename {src/io => crates/kornia-io/src}/fps_counter.rs (75%) rename {src/io => crates/kornia-io/src}/functional.rs (88%) rename {src/io => crates/kornia-io/src}/jpeg.rs (93%) create mode 100644 crates/kornia-io/src/lib.rs rename {src/io => crates/kornia-io/src}/stream/camera.rs (98%) rename {src/io => crates/kornia-io/src}/stream/mod.rs (54%) rename {src/io => crates/kornia-io/src}/webcam.rs (91%) create mode 100644 crates/kornia/Cargo.toml create mode 100644 crates/kornia/src/lib.rs delete mode 100755 devel.sh create mode 100644 examples/binarize/Cargo.toml create mode 100644 examples/binarize/README.md rename examples/{binarize.rs => binarize/src/main.rs} (53%) create mode 100644 examples/color_detector/Cargo.toml create mode 100644 examples/color_detector/README.md rename examples/{color_detector.rs => color_detector/src/main.rs} (67%) delete mode 100644 examples/hello_world.rs create mode 100644 examples/hello_world/Cargo.toml create mode 100644 examples/hello_world/README.md create mode 100644 examples/hello_world/src/main.rs create mode 100644 examples/histogram/Cargo.toml create mode 100644 examples/histogram/README.md rename examples/{histogram.rs => histogram/src/main.rs} (83%) create mode 100644 examples/imgproc/Cargo.toml create mode 100644 examples/imgproc/README.md rename examples/{imgproc.rs => imgproc/src/main.rs} (55%) create mode 100644 examples/metrics/Cargo.toml create mode 100644 examples/metrics/README.md rename examples/{metrics.rs => metrics/src/main.rs} (66%) create mode 100644 examples/normalize/Cargo.toml create mode 100644 examples/normalize/README.md rename examples/{normalize.rs => normalize/src/main.rs} (63%) delete mode 100644 examples/normalize_ii.rs create mode 100644 examples/normalize_ii/Cargo.toml create mode 100644 examples/normalize_ii/README.md create mode 100644 examples/normalize_ii/src/main.rs create mode 100644 examples/rerun_viz/Cargo.toml create mode 100644 examples/rerun_viz/README.md rename examples/{rerun_viz.rs => rerun_viz/src/main.rs} (50%) delete mode 100644 examples/rotate.rs create mode 100644 examples/rotate/Cargo.toml create mode 100644 examples/rotate/README.md create mode 100644 examples/rotate/src/main.rs create mode 100644 examples/std_mean/Cargo.toml create mode 100644 examples/std_mean/REAMDE.md rename examples/{std_mean.rs => std_mean/src/main.rs} (96%) create mode 100644 examples/undistort_image/Cargo.toml create mode 100644 examples/undistort_image/README.md rename examples/{undistort_image.rs => undistort_image/src/main.rs} (87%) delete mode 100644 kornia-rs.code-workspace delete mode 100755 release.sh delete mode 100755 run_tests.sh delete mode 100644 src/io/mod.rs delete mode 100644 src/lib.rs delete mode 100644 src/tensor/mod.rs diff --git a/.github/workflows/python_test.yml b/.github/workflows/python_test.yml index 62123d76..84d50e38 100644 --- a/.github/workflows/python_test.yml +++ b/.github/workflows/python_test.yml @@ -22,7 +22,7 @@ jobs: with: python-version: 3.8 - name: Install dependencies - run: sudo apt-get install -y cmake nasm + run: sudo apt-get install -y cmake nasm libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev libunwind-dev - name: Build and test run: make test-python # NOTE: there's a systematic fail with the ci on macos diff --git a/.github/workflows/rust_release.yml b/.github/workflows/rust_release.yml index bb52b9c3..538cbfa4 100644 --- a/.github/workflows/rust_release.yml +++ b/.github/workflows/rust_release.yml @@ -28,5 +28,5 @@ jobs: uses: actions-rs/cargo@v1 with: command: publish - args: --verbose --target ${{ matrix.target }} --features "gstreamer,jpegturbo" + args: --verbose --target ${{ matrix.target }} --all-features use-cross: true diff --git a/.github/workflows/rust_test.yml b/.github/workflows/rust_test.yml index 8ce41c68..00fe46bb 100644 --- a/.github/workflows/rust_test.yml +++ b/.github/workflows/rust_test.yml @@ -30,7 +30,7 @@ jobs: - uses: actions-rs/cargo@v1 with: command: test - args: --target ${{ matrix.target }} --features "gstreamer,jpegturbo" + args: --target ${{ matrix.target }} --all-features use-cross: true build_examples: name: Build Examples diff --git a/.gitignore b/.gitignore index 7243f14f..de476883 100644 --- a/.gitignore +++ b/.gitignore @@ -3,3 +3,5 @@ target/ docker/ examples/*/Cargo.lock +Cargo.lock +*.code-workspace diff --git a/Cargo.lock b/Cargo.lock deleted file mode 100644 index 23be39b0..00000000 --- a/Cargo.lock +++ /dev/null @@ -1,7728 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 3 - -[[package]] -name = "ab_glyph" -version = "0.2.25" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f90148830dac590fac7ccfe78ec4a8ea404c60f75a24e16407a71f0f40de775" -dependencies = [ - "ab_glyph_rasterizer", - "owned_ttf_parser", -] - -[[package]] -name = "ab_glyph_rasterizer" -version = "0.1.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c71b1793ee61086797f5c80b6efa2b8ffa6d5dd703f118545808a7f2e27f7046" - -[[package]] -name = "accesskit" -version = "0.12.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "74a4b14f3d99c1255dcba8f45621ab1a2e7540a0009652d33989005a4d0bfc6b" -dependencies = [ - "enumn", - "serde", -] - -[[package]] -name = "accesskit_consumer" -version = "0.16.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c17cca53c09fbd7288667b22a201274b9becaa27f0b91bf52a526db95de45e6" -dependencies = [ - "accesskit", -] - -[[package]] -name = "accesskit_macos" -version = "0.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd3b6ae1eabbfbced10e840fd3fce8a93ae84f174b3e4ba892ab7bcb42e477a7" -dependencies = [ - "accesskit", - "accesskit_consumer", - "objc2 0.3.0-beta.3.patch-leaks.3", - "once_cell", -] - -[[package]] -name = "accesskit_unix" -version = "0.6.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09f46c18d99ba61ad7123dd13eeb0c104436ab6af1df6a1cd8c11054ed394a08" -dependencies = [ - "accesskit", - "accesskit_consumer", - "async-channel", - "async-once-cell", - "atspi", - "futures-lite 1.13.0", - "once_cell", - "serde", - "zbus", -] - -[[package]] -name = "accesskit_windows" -version = "0.15.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "afcae27ec0974fc7c3b0b318783be89fd1b2e66dd702179fe600166a38ff4a0b" -dependencies = [ - "accesskit", - "accesskit_consumer", - "once_cell", - "paste", - "static_assertions", - "windows 0.48.0", -] - -[[package]] -name = "accesskit_winit" -version = "0.16.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5284218aca17d9e150164428a0ebc7b955f70e3a9a78b4c20894513aabf98a67" -dependencies = [ - "accesskit", - "accesskit_macos", - "accesskit_unix", - "accesskit_windows", - "winit", -] - -[[package]] -name = "addr2line" -version = "0.21.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a30b2e23b9e17a9f90641c7ab1549cd9b44f296d3ccbf309d2863cfe398a0cb" -dependencies = [ - "gimli", -] - -[[package]] -name = "adler" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" - -[[package]] -name = "ahash" -version = "0.8.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e89da841a80418a9b391ebaea17f5c112ffaaa96f621d2c285b5174da76b9011" -dependencies = [ - "cfg-if", - "getrandom", - "once_cell", - "serde", - "version_check", - "zerocopy", -] - -[[package]] -name = "aho-corasick" -version = "1.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916" -dependencies = [ - "memchr", -] - -[[package]] -name = "aligned-vec" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4aa90d7ce82d4be67b64039a3d588d38dbcc6736577de4a847025ce5b0c468d1" - -[[package]] -name = "allocator-api2" -version = "0.2.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c6cb57a04249c6480766f7f7cef5467412af1490f8d1e243141daddada3264f" - -[[package]] -name = "android-activity" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee91c0c2905bae44f84bfa4e044536541df26b7703fd0888deeb9060fcc44289" -dependencies = [ - "android-properties", - "bitflags 2.5.0", - "cc", - "cesu8", - "jni", - "jni-sys", - "libc", - "log", - "ndk", - "ndk-context", - "ndk-sys", - "num_enum", - "thiserror", -] - -[[package]] -name = "android-properties" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc7eb209b1518d6bb87b283c20095f5228ecda460da70b44f0802523dea6da04" - -[[package]] -name = "android_system_properties" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" -dependencies = [ - "libc", -] - -[[package]] -name = "anes" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b46cbb362ab8752921c97e041f5e366ee6297bd428a31275b9fcf1e380f7299" - -[[package]] -name = "anstream" -version = "0.6.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d96bd03f33fe50a863e394ee9718a706f988b9079b20c3784fb726e7678b62fb" -dependencies = [ - "anstyle", - "anstyle-parse", - "anstyle-query", - "anstyle-wincon", - "colorchoice", - "utf8parse", -] - -[[package]] -name = "anstyle" -version = "1.0.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8901269c6307e8d93993578286ac0edf7f195079ffff5ebdeea6a59ffb7e36bc" - -[[package]] -name = "anstyle-parse" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c75ac65da39e5fe5ab759307499ddad880d724eed2f6ce5b5e8a26f4f387928c" -dependencies = [ - "utf8parse", -] - -[[package]] -name = "anstyle-query" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e28923312444cdd728e4738b3f9c9cac739500909bb3d3c94b43551b16517648" -dependencies = [ - "windows-sys 0.52.0", -] - -[[package]] -name = "anstyle-wincon" -version = "3.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1cd54b81ec8d6180e24654d0b371ad22fc3dd083b6ff8ba325b72e00c87660a7" -dependencies = [ - "anstyle", - "windows-sys 0.52.0", -] - -[[package]] -name = "anyhow" -version = "1.0.82" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f538837af36e6f6a9be0faa67f9a314f8119e4e4b5867c6ab40ed60360142519" - -[[package]] -name = "arbitrary" -version = "1.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d5a26814d8dcb93b0e5a0ff3c6d80a8843bafb21b39e8e18a6f05471870e110" - -[[package]] -name = "arboard" -version = "3.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2041f1943049c7978768d84e6d0fd95de98b76d6c4727b09e78ec253d29fa58" -dependencies = [ - "clipboard-win", - "core-graphics", - "image 0.24.9", - "log", - "objc", - "objc-foundation", - "objc_id", - "parking_lot", - "thiserror", - "windows-sys 0.48.0", - "x11rb", -] - -[[package]] -name = "arg_enum_proc_macro" -version = "0.3.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ae92a5119aa49cdbcf6b9f893fe4e1d98b04ccbf82ee0584ad948a44a734dea" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.60", -] - -[[package]] -name = "array-init" -version = "2.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d62b7694a562cdf5a74227903507c56ab2cc8bdd1f781ed5cb4cf9c9f810bfc" - -[[package]] -name = "array-init-cursor" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf7d0a018de4f6aa429b9d33d69edf69072b1c5b1cb8d3e4a5f7ef898fc3eb76" - -[[package]] -name = "arrayvec" -version = "0.7.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96d30a06541fbafbc7f82ed10c06164cfbd2c401138f6addd8404629c4b16711" - -[[package]] -name = "arrow-buffer" -version = "52.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe9b95e825ae838efaf77e366c00d3fc8cca78134c9db497d6bda425f2e7b7c1" -dependencies = [ - "bytes", - "half", - "num", -] - -[[package]] -name = "arrow-format" -version = "0.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07884ea216994cdc32a2d5f8274a8bee979cfe90274b83f86f440866ee3132c7" -dependencies = [ - "planus", - "serde", -] - -[[package]] -name = "as-raw-xcb-connection" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "175571dd1d178ced59193a6fc02dde1b972eb0bc56c892cde9beeceac5bf0f6b" - -[[package]] -name = "ascii" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d92bec98840b8f03a5ff5413de5293bfcd8bf96467cf5452609f939ec6f5de16" - -[[package]] -name = "ash" -version = "0.37.3+1.3.251" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "39e9c3835d686b0a6084ab4234fcd1b07dbf6e4767dce60874b12356a25ecd4a" -dependencies = [ - "libloading 0.7.4", -] - -[[package]] -name = "ashpd" -version = "0.6.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ac22eda5891cc086690cb6fa10121c0390de0e3b04eb269f2d766b00d3f2d81" -dependencies = [ - "async-fs 2.1.1", - "async-net", - "enumflags2", - "futures-channel", - "futures-util", - "once_cell", - "rand", - "serde", - "serde_repr", - "url", - "zbus", -] - -[[package]] -name = "async-broadcast" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7c48ccdbf6ca6b121e0f586cbc0e73ae440e56c67c30fa0873b4e110d9c26d2b" -dependencies = [ - "event-listener 2.5.3", - "futures-core", -] - -[[package]] -name = "async-channel" -version = "2.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "136d4d23bcc79e27423727b36823d86233aad06dfea531837b038394d11e9928" -dependencies = [ - "concurrent-queue", - "event-listener 5.3.0", - "event-listener-strategy 0.5.1", - "futures-core", - "pin-project-lite", -] - -[[package]] -name = "async-executor" -version = "1.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b10202063978b3351199d68f8b22c4e47e4b1b822f8d43fd862d5ea8c006b29a" -dependencies = [ - "async-task", - "concurrent-queue", - "fastrand 2.0.2", - "futures-lite 2.3.0", - "slab", -] - -[[package]] -name = "async-fs" -version = "1.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "279cf904654eeebfa37ac9bb1598880884924aab82e290aa65c9e77a0e142e06" -dependencies = [ - "async-lock 2.8.0", - "autocfg", - "blocking", - "futures-lite 1.13.0", -] - -[[package]] -name = "async-fs" -version = "2.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc19683171f287921f2405677dd2ed2549c3b3bda697a563ebc3a121ace2aba1" -dependencies = [ - "async-lock 3.3.0", - "blocking", - "futures-lite 2.3.0", -] - -[[package]] -name = "async-io" -version = "1.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fc5b45d93ef0529756f812ca52e44c221b35341892d3dcc34132ac02f3dd2af" -dependencies = [ - "async-lock 2.8.0", - "autocfg", - "cfg-if", - "concurrent-queue", - "futures-lite 1.13.0", - "log", - "parking", - "polling 2.8.0", - "rustix 0.37.27", - "slab", - "socket2 0.4.10", - "waker-fn", -] - -[[package]] -name = "async-io" -version = "2.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dcccb0f599cfa2f8ace422d3555572f47424da5648a4382a9dd0310ff8210884" -dependencies = [ - "async-lock 3.3.0", - "cfg-if", - "concurrent-queue", - "futures-io", - "futures-lite 2.3.0", - "parking", - "polling 3.6.0", - "rustix 0.38.32", - "slab", - "tracing", - "windows-sys 0.52.0", -] - -[[package]] -name = "async-lock" -version = "2.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "287272293e9d8c41773cec55e365490fe034813a2f172f502d6ddcf75b2f582b" -dependencies = [ - "event-listener 2.5.3", -] - -[[package]] -name = "async-lock" -version = "3.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d034b430882f8381900d3fe6f0aaa3ad94f2cb4ac519b429692a1bc2dda4ae7b" -dependencies = [ - "event-listener 4.0.3", - "event-listener-strategy 0.4.0", - "pin-project-lite", -] - -[[package]] -name = "async-net" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b948000fad4873c1c9339d60f2623323a0cfd3816e5181033c6a5cb68b2accf7" -dependencies = [ - "async-io 2.3.2", - "blocking", - "futures-lite 2.3.0", -] - -[[package]] -name = "async-once-cell" -version = "0.5.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9338790e78aa95a416786ec8389546c4b6a1dfc3dc36071ed9518a9413a542eb" - -[[package]] -name = "async-process" -version = "1.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea6438ba0a08d81529c69b36700fa2f95837bfe3e776ab39cde9c14d9149da88" -dependencies = [ - "async-io 1.13.0", - "async-lock 2.8.0", - "async-signal", - "blocking", - "cfg-if", - "event-listener 3.1.0", - "futures-lite 1.13.0", - "rustix 0.38.32", - "windows-sys 0.48.0", -] - -[[package]] -name = "async-recursion" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30c5ef0ede93efbf733c1a727f3b6b5a1060bbedd5600183e66f6e4be4af0ec5" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.60", -] - -[[package]] -name = "async-signal" -version = "0.2.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "afe66191c335039c7bb78f99dc7520b0cbb166b3a1cb33a03f53d8a1c6f2afda" -dependencies = [ - "async-io 2.3.2", - "async-lock 3.3.0", - "atomic-waker", - "cfg-if", - "futures-core", - "futures-io", - "rustix 0.38.32", - "signal-hook-registry", - "slab", - "windows-sys 0.52.0", -] - -[[package]] -name = "async-task" -version = "4.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fbb36e985947064623dbd357f727af08ffd077f93d696782f3c56365fa2e2799" - -[[package]] -name = "async-trait" -version = "0.1.80" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c6fa2087f2753a7da8cc1c0dbfcf89579dd57458e36769de5ac750b4671737ca" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.60", -] - -[[package]] -name = "atomic-waker" -version = "1.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" - -[[package]] -name = "atomic_refcell" -version = "0.1.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41e67cd8309bbd06cd603a9e693a784ac2e5d1e955f11286e355089fcab3047c" - -[[package]] -name = "atspi" -version = "0.19.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6059f350ab6f593ea00727b334265c4dfc7fd442ee32d264794bd9bdc68e87ca" -dependencies = [ - "atspi-common", - "atspi-connection", - "atspi-proxies", -] - -[[package]] -name = "atspi-common" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92af95f966d2431f962bc632c2e68eda7777330158bf640c4af4249349b2cdf5" -dependencies = [ - "enumflags2", - "serde", - "static_assertions", - "zbus", - "zbus_names", - "zvariant", -] - -[[package]] -name = "atspi-connection" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a0c65e7d70f86d4c0e3b2d585d9bf3f979f0b19d635a336725a88d279f76b939" -dependencies = [ - "atspi-common", - "atspi-proxies", - "futures-lite 1.13.0", - "zbus", -] - -[[package]] -name = "atspi-proxies" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6495661273703e7a229356dcbe8c8f38223d697aacfaf0e13590a9ac9977bb52" -dependencies = [ - "atspi-common", - "serde", - "zbus", -] - -[[package]] -name = "autocfg" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1fdabc7756949593fe60f30ec81974b613357de856987752631dea1e3394c80" - -[[package]] -name = "av1-grain" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6678909d8c5d46a42abcf571271e15fdbc0a225e3646cf23762cd415046c78bf" -dependencies = [ - "anyhow", - "arrayvec", - "log", - "nom", - "num-rational", - "v_frame", -] - -[[package]] -name = "avif-serialize" -version = "0.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "876c75a42f6364451a033496a14c44bffe41f5f4a8236f697391f11024e596d2" -dependencies = [ - "arrayvec", -] - -[[package]] -name = "az" -version = "1.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b7e4c2464d97fe331d41de9d5db0def0a96f4d823b8b32a2efd503578988973" - -[[package]] -name = "backtrace" -version = "0.3.71" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26b05800d2e817c8b3b4b54abd461726265fa9789ae34330622f2db9ee696f9d" -dependencies = [ - "addr2line", - "cc", - "cfg-if", - "libc", - "miniz_oxide", - "object", - "rustc-demangle", -] - -[[package]] -name = "base64" -version = "0.13.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8" - -[[package]] -name = "base64" -version = "0.21.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" - -[[package]] -name = "bincode" -version = "1.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcad" -dependencies = [ - "serde", -] - -[[package]] -name = "bit-set" -version = "0.5.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0700ddab506f33b20a03b13996eccd309a48e5ff77d0d95926aa0210fb4e95f1" -dependencies = [ - "bit-vec", -] - -[[package]] -name = "bit-vec" -version = "0.6.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "349f9b6a179ed607305526ca489b34ad0a41aed5f7980fa90eb03160b69598fb" - -[[package]] -name = "bit_field" -version = "0.10.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc827186963e592360843fb5ba4b973e145841266c1357f7180c43526f2e5b61" - -[[package]] -name = "bitflags" -version = "1.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" - -[[package]] -name = "bitflags" -version = "2.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf4b9d6a944f767f8e5e0db018570623c85f3d925ac718db4e06d0187adb21c1" -dependencies = [ - "bytemuck", - "serde", -] - -[[package]] -name = "bitstream-io" -version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06c9989a51171e2e81038ab168b6ae22886fe9ded214430dbb4f41c28cf176da" - -[[package]] -name = "block" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d8c1fef690941d3e7788d328517591fecc684c084084702d6ff1641e993699a" - -[[package]] -name = "block-buffer" -version = "0.10.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" -dependencies = [ - "generic-array", -] - -[[package]] -name = "block-sys" -version = "0.1.0-beta.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fa55741ee90902547802152aaf3f8e5248aab7e21468089560d4c8840561146" -dependencies = [ - "objc-sys 0.2.0-beta.2", -] - -[[package]] -name = "block-sys" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae85a0696e7ea3b835a453750bf002770776609115e6d25c6d2ff28a8200f7e7" -dependencies = [ - "objc-sys 0.3.3", -] - -[[package]] -name = "block2" -version = "0.2.0-alpha.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8dd9e63c1744f755c2f60332b88de39d341e5e86239014ad839bd71c106dec42" -dependencies = [ - "block-sys 0.1.0-beta.1", - "objc2-encode 2.0.0-pre.2", -] - -[[package]] -name = "block2" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "15b55663a85f33501257357e6421bb33e769d5c9ffb5ba0921c975a123e35e68" -dependencies = [ - "block-sys 0.2.1", - "objc2 0.4.1", -] - -[[package]] -name = "blocking" -version = "1.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a37913e8dc4ddcc604f0c6d3bf2887c995153af3611de9e23c352b44c1b9118" -dependencies = [ - "async-channel", - "async-lock 3.3.0", - "async-task", - "fastrand 2.0.2", - "futures-io", - "futures-lite 2.3.0", - "piper", - "tracing", -] - -[[package]] -name = "bstr" -version = "0.2.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba3569f383e8f1598449f1a423e72e99569137b47740b1da11ef19af3d5c3223" -dependencies = [ - "lazy_static", - "memchr", - "regex-automata 0.1.10", -] - -[[package]] -name = "built" -version = "0.7.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41bfbdb21256b87a8b5e80fab81a8eed158178e812fd7ba451907518b2742f16" - -[[package]] -name = "bumpalo" -version = "3.16.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c" - -[[package]] -name = "bytecount" -version = "0.6.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ce89b21cab1437276d2650d57e971f9d548a2d9037cc231abdc0562b97498ce" - -[[package]] -name = "bytemuck" -version = "1.15.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d6d68c57235a3a081186990eca2867354726650f42f7516ca50c28d6281fd15" -dependencies = [ - "bytemuck_derive", -] - -[[package]] -name = "bytemuck_derive" -version = "1.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4da9a32f3fed317401fa3c862968128267c3106685286e15d5aaa3d7389c2f60" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.60", -] - -[[package]] -name = "byteorder" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" - -[[package]] -name = "byteorder-lite" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f1fe948ff07f4bd06c30984e69f5b4899c516a3ef74f34df92a2df2ab535495" - -[[package]] -name = "bytes" -version = "1.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "514de17de45fdb8dc022b1a7975556c53c86f9f0aa5f534b98977b171857c2c9" - -[[package]] -name = "calloop" -version = "0.12.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fba7adb4dd5aa98e5553510223000e7148f621165ec5f9acd7113f6ca4995298" -dependencies = [ - "bitflags 2.5.0", - "log", - "polling 3.6.0", - "rustix 0.38.32", - "slab", - "thiserror", -] - -[[package]] -name = "calloop-wayland-source" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f0ea9b9476c7fad82841a8dbb380e2eae480c21910feba80725b46931ed8f02" -dependencies = [ - "calloop", - "rustix 0.38.32", - "wayland-backend", - "wayland-client", -] - -[[package]] -name = "camino" -version = "1.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c59e92b5a388f549b863a7bea62612c09f24c8393560709a54558a9abdfb3b9c" -dependencies = [ - "serde", -] - -[[package]] -name = "candle-core" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6db8659ea87ee8197d2fc627348916cce0561330ee7ae3874e771691d3cecb2f" -dependencies = [ - "byteorder", - "gemm", - "half", - "memmap2", - "num-traits", - "num_cpus", - "rand", - "rand_distr", - "rayon", - "safetensors", - "thiserror", - "yoke", - "zip", -] - -[[package]] -name = "cargo-platform" -version = "0.1.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24b1f0365a6c6bb4020cd05806fd0d33c44d38046b8bd7f0e40814b9763cabfc" -dependencies = [ - "serde", -] - -[[package]] -name = "cargo_metadata" -version = "0.14.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4acbb09d9ee8e23699b9634375c72795d095bf268439da88562cf9b501f181fa" -dependencies = [ - "camino", - "cargo-platform", - "semver", - "serde", - "serde_json", -] - -[[package]] -name = "cargo_metadata" -version = "0.18.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d886547e41f740c616ae73108f6eb70afe6d940c7bc697cb30f13daec073037" -dependencies = [ - "camino", - "cargo-platform", - "semver", - "serde", - "serde_json", - "thiserror", -] - -[[package]] -name = "cast" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "37b2a672a2cb129a2e41c10b1224bb368f9f37a2b16b612598138befd7b37eb5" - -[[package]] -name = "cc" -version = "1.0.95" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d32a725bc159af97c3e629873bb9f88fb8cf8a4867175f76dc987815ea07c83b" -dependencies = [ - "jobserver", - "libc", - "once_cell", -] - -[[package]] -name = "cesu8" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d43a04d8753f35258c91f8ec639f792891f748a1edbd759cf1dcea3382ad83c" - -[[package]] -name = "cfb" -version = "0.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d38f2da7a0a2c4ccf0065be06397cc26a81f4e528be095826eee9d4adbb8c60f" -dependencies = [ - "byteorder", - "fnv", - "uuid", -] - -[[package]] -name = "cfg-expr" -version = "0.15.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d067ad48b8650848b989a59a86c6c36a995d02d2bf778d45c3c5d57bc2718f02" -dependencies = [ - "smallvec", - "target-lexicon", -] - -[[package]] -name = "cfg-if" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" - -[[package]] -name = "cfg_aliases" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd16c4719339c4530435d38e511904438d07cce7950afa3718a84ac36c10e89e" - -[[package]] -name = "cfg_aliases" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77e53693616d3075149f4ead59bdeecd204ac6b8192d8969757601b74bddf00f" - -[[package]] -name = "chrono" -version = "0.4.38" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a21f936df1771bf62b77f047b726c4625ff2e8aa607c01ec06e5a05bd8463401" -dependencies = [ - "num-traits", -] - -[[package]] -name = "chunked_transfer" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e4de3bc4ea267985becf712dc6d9eed8b04c953b3fcfb339ebc87acd9804901" - -[[package]] -name = "ciborium" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42e69ffd6f0917f5c029256a24d0161db17cea3997d185db0d35926308770f0e" -dependencies = [ - "ciborium-io", - "ciborium-ll", - "serde", -] - -[[package]] -name = "ciborium-io" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05afea1e0a06c9be33d539b876f1ce3692f4afea2cb41f740e7743225ed1c757" - -[[package]] -name = "ciborium-ll" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57663b653d948a338bfb3eeba9bb2fd5fcfaecb9e199e87e1eda4d9e8b240fd9" -dependencies = [ - "ciborium-io", - "half", -] - -[[package]] -name = "clang-format" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "696283b40e1a39d208ee614b92e5f6521d16962edeb47c48372585ec92419943" -dependencies = [ - "thiserror", -] - -[[package]] -name = "clap" -version = "4.5.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90bc066a67923782aa8515dbaea16946c5bcc5addbd668bb80af688e53e548a0" -dependencies = [ - "clap_builder", - "clap_derive", -] - -[[package]] -name = "clap_builder" -version = "4.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae129e2e766ae0ec03484e609954119f123cc1fe650337e155d03b022f24f7b4" -dependencies = [ - "anstream", - "anstyle", - "clap_lex", - "strsim", -] - -[[package]] -name = "clap_derive" -version = "4.5.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "528131438037fd55894f62d6e9f068b8f45ac57ffa77517819645d10aed04f64" -dependencies = [ - "heck 0.5.0", - "proc-macro2", - "quote", - "syn 2.0.60", -] - -[[package]] -name = "clap_lex" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "98cc8fbded0c607b7ba9dd60cd98df59af97e84d24e49c8557331cfc26d301ce" - -[[package]] -name = "clean-path" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aaa6b4b263a5d737e9bf6b7c09b72c41a5480aec4d7219af827f6564e950b6a5" - -[[package]] -name = "clipboard-win" -version = "5.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "79f4473f5144e20d9aceaf2972478f06ddf687831eafeeb434fbaf0acc4144ad" -dependencies = [ - "error-code", -] - -[[package]] -name = "cmake" -version = "0.1.50" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a31c789563b815f77f4250caee12365734369f942439b7defd71e18a48197130" -dependencies = [ - "cc", -] - -[[package]] -name = "cocoa" -version = "0.25.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6140449f97a6e97f9511815c5632d84c8aacf8ac271ad77c559218161a1373c" -dependencies = [ - "bitflags 1.3.2", - "block", - "cocoa-foundation", - "core-foundation", - "core-graphics", - "foreign-types", - "libc", - "objc", -] - -[[package]] -name = "cocoa-foundation" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c6234cbb2e4c785b456c0644748b1ac416dd045799740356f8363dfe00c93f7" -dependencies = [ - "bitflags 1.3.2", - "block", - "core-foundation", - "core-graphics-types", - "libc", - "objc", -] - -[[package]] -name = "codespan-reporting" -version = "0.11.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3538270d33cc669650c4b093848450d380def10c331d38c768e34cac80576e6e" -dependencies = [ - "termcolor", - "unicode-width", -] - -[[package]] -name = "color_quant" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d7b894f5411737b7867f4827955924d7c254fc9f4d91a6aad6b097804b1018b" - -[[package]] -name = "colorchoice" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "acbf1af155f9b9ef647e42cdc158db4b64a1b61f743629225fde6f3e0be2a7c7" - -[[package]] -name = "com" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e17887fd17353b65b1b2ef1c526c83e26cd72e74f598a8dc1bee13a48f3d9f6" -dependencies = [ - "com_macros", -] - -[[package]] -name = "com_macros" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d375883580a668c7481ea6631fc1a8863e33cc335bf56bfad8d7e6d4b04b13a5" -dependencies = [ - "com_macros_support", - "proc-macro2", - "syn 1.0.109", -] - -[[package]] -name = "com_macros_support" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad899a1087a9296d5644792d7cb72b8e34c1bec8e7d4fbc002230169a6e8710c" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "combine" -version = "4.6.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba5a308b75df32fe02788e748662718f03fde005016435c444eea572398219fd" -dependencies = [ - "bytes", - "memchr", -] - -[[package]] -name = "comfy-table" -version = "7.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b34115915337defe99b2aff5c2ce6771e5fbc4079f4b506301f5cf394c8452f7" -dependencies = [ - "strum 0.26.2", - "strum_macros 0.26.2", - "unicode-width", -] - -[[package]] -name = "concurrent-queue" -version = "2.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d16048cd947b08fa32c24458a22f5dc5e835264f689f4f5653210c69fd107363" -dependencies = [ - "crossbeam-utils", -] - -[[package]] -name = "console" -version = "0.15.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e1f83fc076bd6dd27517eacdf25fef6c4dfe5f1d7448bafaaf3a26f13b5e4eb" -dependencies = [ - "encode_unicode", - "lazy_static", - "libc", - "unicode-width", - "windows-sys 0.52.0", -] - -[[package]] -name = "convert_case" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec182b0ca2f35d8fc196cf3404988fd8b8c739a4d270ff118a398feb0cbec1ca" -dependencies = [ - "unicode-segmentation", -] - -[[package]] -name = "core-foundation" -version = "0.9.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f" -dependencies = [ - "core-foundation-sys", - "libc", -] - -[[package]] -name = "core-foundation-sys" -version = "0.8.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06ea2b9bc92be3c2baa9334a323ebca2d6f074ff852cd1d7b11064035cd3868f" - -[[package]] -name = "core-graphics" -version = "0.23.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c07782be35f9e1140080c6b96f0d44b739e2278479f64e02fdab4e32dfd8b081" -dependencies = [ - "bitflags 1.3.2", - "core-foundation", - "core-graphics-types", - "foreign-types", - "libc", -] - -[[package]] -name = "core-graphics-types" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "45390e6114f68f718cc7a830514a96f903cccd70d02a8f6d9f643ac4ba45afaf" -dependencies = [ - "bitflags 1.3.2", - "core-foundation", - "libc", -] - -[[package]] -name = "cpufeatures" -version = "0.2.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53fe5e26ff1b7aef8bca9c6080520cfb8d9333c7568e1829cef191a9723e5504" -dependencies = [ - "libc", -] - -[[package]] -name = "crc32fast" -version = "1.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b3855a8a784b474f333699ef2bbca9db2c4a1f6d9088a90a2d25b1eb53111eaa" -dependencies = [ - "cfg-if", -] - -[[package]] -name = "criterion" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2b12d017a929603d80db1831cd3a24082f8137ce19c69e6447f54f5fc8d692f" -dependencies = [ - "anes", - "cast", - "ciborium", - "clap", - "criterion-plot", - "is-terminal", - "itertools 0.10.5", - "num-traits", - "once_cell", - "oorandom", - "plotters", - "rayon", - "regex", - "serde", - "serde_derive", - "serde_json", - "tinytemplate", - "walkdir", -] - -[[package]] -name = "criterion-plot" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b50826342786a51a89e2da3a28f1c32b06e387201bc2d19791f622c673706b1" -dependencies = [ - "cast", - "itertools 0.10.5", -] - -[[package]] -name = "crossbeam" -version = "0.8.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1137cd7e7fc0fb5d3c5a8678be38ec56e819125d8d7907411fe24ccb943faca8" -dependencies = [ - "crossbeam-channel", - "crossbeam-deque", - "crossbeam-epoch", - "crossbeam-queue", - "crossbeam-utils", -] - -[[package]] -name = "crossbeam-channel" -version = "0.5.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ab3db02a9c5b5121e1e42fbdb1aeb65f5e02624cc58c43f2884c6ccac0b82f95" -dependencies = [ - "crossbeam-utils", -] - -[[package]] -name = "crossbeam-deque" -version = "0.8.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "613f8cc01fe9cf1a3eb3d7f488fd2fa8388403e97039e2f73692932e291a770d" -dependencies = [ - "crossbeam-epoch", - "crossbeam-utils", -] - -[[package]] -name = "crossbeam-epoch" -version = "0.9.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e" -dependencies = [ - "crossbeam-utils", -] - -[[package]] -name = "crossbeam-queue" -version = "0.3.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df0346b5d5e76ac2fe4e327c5fd1118d6be7c51dfb18f9b7922923f287471e35" -dependencies = [ - "crossbeam-utils", -] - -[[package]] -name = "crossbeam-utils" -version = "0.8.19" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "248e3bacc7dc6baa3b21e405ee045c3047101a49145e7e9eca583ab4c2ca5345" - -[[package]] -name = "crunchy" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7" - -[[package]] -name = "crypto-common" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" -dependencies = [ - "generic-array", - "typenum", -] - -[[package]] -name = "cursor-icon" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96a6ac251f4a2aca6b3f91340350eab87ae57c3f127ffeb585e92bd336717991" - -[[package]] -name = "darling" -version = "0.20.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "54e36fcd13ed84ffdfda6f5be89b31287cbb80c439841fe69e04841435464391" -dependencies = [ - "darling_core", - "darling_macro", -] - -[[package]] -name = "darling_core" -version = "0.20.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c2cf1c23a687a1feeb728783b993c4e1ad83d99f351801977dd809b48d0a70f" -dependencies = [ - "fnv", - "ident_case", - "proc-macro2", - "quote", - "syn 2.0.60", -] - -[[package]] -name = "darling_macro" -version = "0.20.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a668eda54683121533a393014d8692171709ff57a7d61f187b6e782719f8933f" -dependencies = [ - "darling_core", - "quote", - "syn 2.0.60", -] - -[[package]] -name = "data-encoding" -version = "2.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e962a19be5cfc3f3bf6dd8f61eb50107f356ad6270fbb3ed41476571db78be5" - -[[package]] -name = "deranged" -version = "0.3.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b42b6fa04a440b495c8b04d0e71b707c585f83cb9cb28cf8cd0d976c315e31b4" -dependencies = [ - "powerfmt", - "serde", -] - -[[package]] -name = "derivative" -version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "digest" -version = "0.10.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" -dependencies = [ - "block-buffer", - "crypto-common", -] - -[[package]] -name = "directories-next" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "339ee130d97a610ea5a5872d2bbb130fdf68884ff09d3028b81bec8a1ac23bbc" -dependencies = [ - "cfg-if", - "dirs-sys-next", -] - -[[package]] -name = "dirs-sys-next" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ebda144c4fe02d1f7ea1a7d9641b6fc6b580adcfa024ae48797ecdeb6825b4d" -dependencies = [ - "libc", - "redox_users", - "winapi", -] - -[[package]] -name = "dispatch" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd0c93bb4b0c6d9b77f4435b0ae98c24d17f1c45b2ff844c6151a07256ca923b" - -[[package]] -name = "dlib" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "330c60081dcc4c72131f8eb70510f1ac07223e5d4163db481a04a0befcffa412" -dependencies = [ - "libloading 0.8.3", -] - -[[package]] -name = "document-features" -version = "0.2.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef5282ad69563b5fc40319526ba27e0e7363d552a896f0297d54f767717f9b95" -dependencies = [ - "litrs", -] - -[[package]] -name = "downcast-rs" -version = "1.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75b325c5dbd37f80359721ad39aca5a29fb04c89279657cffdda8736d0c0b9d2" - -[[package]] -name = "dyn-clone" -version = "1.0.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d6ef0072f8a535281e4876be788938b528e9a1d43900b82c2569af7da799125" - -[[package]] -name = "dyn-stack" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56e53799688f5632f364f8fb387488dd05db9fe45db7011be066fc20e7027f8b" -dependencies = [ - "bytemuck", - "reborrow", -] - -[[package]] -name = "ecolor" -version = "0.27.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "20930a432bbd57a6d55e07976089708d4893f3d556cf42a0d79e9e321fa73b10" -dependencies = [ - "bytemuck", - "serde", -] - -[[package]] -name = "eframe" -version = "0.27.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "020e2ccef6bbcec71dbc542f7eed64a5846fc3076727f5746da8fd307c91bab2" -dependencies = [ - "bytemuck", - "cocoa", - "directories-next", - "document-features", - "egui", - "egui-wgpu", - "egui-winit", - "egui_glow", - "image 0.24.9", - "js-sys", - "log", - "objc", - "parking_lot", - "percent-encoding", - "pollster", - "puffin", - "raw-window-handle 0.6.1", - "ron", - "serde", - "static_assertions", - "thiserror", - "wasm-bindgen", - "wasm-bindgen-futures", - "web-sys", - "web-time", - "wgpu", - "winapi", - "winit", -] - -[[package]] -name = "egui" -version = "0.27.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "584c5d1bf9a67b25778a3323af222dbe1a1feb532190e103901187f92c7fe29a" -dependencies = [ - "accesskit", - "ahash", - "backtrace", - "epaint", - "log", - "nohash-hasher", - "puffin", - "ron", - "serde", -] - -[[package]] -name = "egui-wgpu" -version = "0.27.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "469ff65843f88a702b731a1532b7d03b0e8e96d283e70f3a22b0e06c46cb9b37" -dependencies = [ - "bytemuck", - "document-features", - "egui", - "epaint", - "log", - "puffin", - "thiserror", - "type-map", - "web-time", - "wgpu", - "winit", -] - -[[package]] -name = "egui-winit" -version = "0.27.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e3da0cbe020f341450c599b35b92de4af7b00abde85624fd16f09c885573609" -dependencies = [ - "accesskit_winit", - "arboard", - "egui", - "log", - "puffin", - "raw-window-handle 0.6.1", - "serde", - "smithay-clipboard", - "web-time", - "webbrowser", - "winit", -] - -[[package]] -name = "egui_commonmark" -version = "0.15.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "013480797931a2649e03069613ed35514569372d6f79df70fc3653ae18a75c6c" -dependencies = [ - "egui", - "egui_extras", - "pulldown-cmark 0.10.3", -] - -[[package]] -name = "egui_extras" -version = "0.27.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b78779f35ded1a853786c9ce0b43fe1053e10a21ea3b23ebea411805ce41593" -dependencies = [ - "egui", - "ehttp", - "enum-map", - "image 0.24.9", - "log", - "mime_guess2", - "puffin", - "serde", -] - -[[package]] -name = "egui_glow" -version = "0.27.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e0e5d975f3c86edc3d35b1db88bb27c15dde7c55d3b5af164968ab5ede3f44ca" -dependencies = [ - "bytemuck", - "egui", - "egui-winit", - "glow", - "log", - "memoffset 0.9.1", - "puffin", - "wasm-bindgen", - "web-sys", - "winit", -] - -[[package]] -name = "egui_plot" -version = "0.27.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7854b86dc1c2d352c5270db3d600011daa913d6b554141a03939761323288a1" -dependencies = [ - "egui", -] - -[[package]] -name = "egui_tiles" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e2c0ff99daddcbdc54b141dbb7be3b014463da48a03ebc801bf63e500b23d75" -dependencies = [ - "ahash", - "egui", - "itertools 0.12.1", - "log", - "serde", -] - -[[package]] -name = "ehttp" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59a81c221a1e4dad06cb9c9deb19aea1193a5eea084e8cd42d869068132bf876" -dependencies = [ - "document-features", - "futures-util", - "js-sys", - "ureq", - "wasm-bindgen", - "wasm-bindgen-futures", - "wasm-streams", - "web-sys", -] - -[[package]] -name = "either" -version = "1.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a47c1c47d2f5964e29c61246e81db715514cd532db6b5116a25ea3c03d6780a2" - -[[package]] -name = "emath" -version = "0.27.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e4c3a552cfca14630702449d35f41c84a0d15963273771c6059175a803620f3f" -dependencies = [ - "bytemuck", - "serde", -] - -[[package]] -name = "encode_unicode" -version = "0.3.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a357d28ed41a50f9c765dbfe56cbc04a64e53e5fc58ba79fbc34c10ef3df831f" - -[[package]] -name = "enum-as-inner" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ffccbb6966c05b32ef8fbac435df276c4ae4d3dc55a8cd0eb9745e6c12f546a" -dependencies = [ - "heck 0.4.1", - "proc-macro2", - "quote", - "syn 2.0.60", -] - -[[package]] -name = "enum-map" -version = "2.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6866f3bfdf8207509a033af1a75a7b08abda06bbaaeae6669323fd5a097df2e9" -dependencies = [ - "enum-map-derive", - "serde", -] - -[[package]] -name = "enum-map-derive" -version = "0.17.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f282cfdfe92516eb26c2af8589c274c7c17681f5ecc03c18255fe741c6aa64eb" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.60", -] - -[[package]] -name = "enumflags2" -version = "0.7.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3278c9d5fb675e0a51dabcf4c0d355f692b064171535ba72361be1528a9d8e8d" -dependencies = [ - "enumflags2_derive", - "serde", -] - -[[package]] -name = "enumflags2_derive" -version = "0.7.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c785274071b1b420972453b306eeca06acf4633829db4223b58a2a8c5953bc4" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.60", -] - -[[package]] -name = "enumn" -version = "0.1.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6fd000fd6988e73bbe993ea3db9b1aa64906ab88766d654973924340c8cddb42" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.60", -] - -[[package]] -name = "enumset" -version = "1.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "226c0da7462c13fb57e5cc9e0dc8f0635e7d27f276a3a7fd30054647f669007d" -dependencies = [ - "enumset_derive", -] - -[[package]] -name = "enumset_derive" -version = "0.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e08b6c6ab82d70f08844964ba10c7babb716de2ecaeab9be5717918a5177d3af" -dependencies = [ - "darling", - "proc-macro2", - "quote", - "syn 2.0.60", -] - -[[package]] -name = "env_logger" -version = "0.10.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4cd405aab171cb85d6735e5c8d9db038c17d3ca007a4d2c25f337935c3d90580" -dependencies = [ - "humantime", - "is-terminal", - "log", - "termcolor", -] - -[[package]] -name = "epaint" -version = "0.27.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b381f8b149657a4acf837095351839f32cd5c4aec1817fc4df84e18d76334176" -dependencies = [ - "ab_glyph", - "ahash", - "bytemuck", - "ecolor", - "emath", - "log", - "nohash-hasher", - "parking_lot", - "puffin", - "rayon", - "serde", -] - -[[package]] -name = "equivalent" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" - -[[package]] -name = "errno" -version = "0.3.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a258e46cdc063eb8519c00b9fc845fc47bcfca4130e2f08e88665ceda8474245" -dependencies = [ - "libc", - "windows-sys 0.52.0", -] - -[[package]] -name = "error-chain" -version = "0.12.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d2f06b9cac1506ece98fe3231e3cc9c4410ec3d5b1f24ae1c8946f0742cdefc" -dependencies = [ - "version_check", -] - -[[package]] -name = "error-code" -version = "3.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a0474425d51df81997e2f90a21591180b38eccf27292d755f3e30750225c175b" - -[[package]] -name = "ethnum" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b90ca2580b73ab6a1f724b76ca11ab632df820fd6040c336200d2c1df7b3c82c" - -[[package]] -name = "event-listener" -version = "2.5.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0" - -[[package]] -name = "event-listener" -version = "3.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d93877bcde0eb80ca09131a08d23f0a5c18a620b01db137dba666d18cd9b30c2" -dependencies = [ - "concurrent-queue", - "parking", - "pin-project-lite", -] - -[[package]] -name = "event-listener" -version = "4.0.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67b215c49b2b248c855fb73579eb1f4f26c38ffdc12973e20e07b91d78d5646e" -dependencies = [ - "concurrent-queue", - "parking", - "pin-project-lite", -] - -[[package]] -name = "event-listener" -version = "5.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d9944b8ca13534cdfb2800775f8dd4902ff3fc75a50101466decadfdf322a24" -dependencies = [ - "concurrent-queue", - "parking", - "pin-project-lite", -] - -[[package]] -name = "event-listener-strategy" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "958e4d70b6d5e81971bebec42271ec641e7ff4e170a6fa605f2b8a8b65cb97d3" -dependencies = [ - "event-listener 4.0.3", - "pin-project-lite", -] - -[[package]] -name = "event-listener-strategy" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "332f51cb23d20b0de8458b86580878211da09bcd4503cb579c225b3d124cabb3" -dependencies = [ - "event-listener 5.3.0", - "pin-project-lite", -] - -[[package]] -name = "ewebsock" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6177769715c6ec5a324acee995183b22721ea23c58e49af14a828eadec85d120" -dependencies = [ - "document-features", - "js-sys", - "log", - "tungstenite", - "wasm-bindgen", - "wasm-bindgen-futures", - "web-sys", -] - -[[package]] -name = "exr" -version = "1.72.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "887d93f60543e9a9362ef8a21beedd0a833c5d9610e18c67abe15a5963dcb1a4" -dependencies = [ - "bit_field", - "flume", - "half", - "lebe", - "miniz_oxide", - "rayon-core", - "smallvec", - "zune-inflate", -] - -[[package]] -name = "fast_image_resize" -version = "3.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c9d450fac8a334ad72825596173f0f7767ff04dd6e3d59c49c894c4bc2957e8b" -dependencies = [ - "cfg-if", - "num-traits", - "thiserror", -] - -[[package]] -name = "fastrand" -version = "1.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e51093e27b0797c359783294ca4f0a911c270184cb10f85783b118614a1501be" -dependencies = [ - "instant", -] - -[[package]] -name = "fastrand" -version = "2.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "658bd65b1cf4c852a3cc96f18a8ce7b5640f6b703f905c7d74532294c2a63984" - -[[package]] -name = "fdeflate" -version = "0.3.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f9bfee30e4dedf0ab8b422f03af778d9612b63f502710fc500a334ebe2de645" -dependencies = [ - "simd-adler32", -] - -[[package]] -name = "filetime" -version = "0.2.23" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ee447700ac8aa0b2f2bd7bc4462ad686ba06baa6727ac149a2d6277f0d240fd" -dependencies = [ - "cfg-if", - "libc", - "redox_syscall 0.4.1", - "windows-sys 0.52.0", -] - -[[package]] -name = "fixed" -version = "1.27.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2fc715d38bea7b5bf487fcd79bcf8c209f0b58014f3018a7a19c2b855f472048" -dependencies = [ - "az", - "bytemuck", - "half", - "serde", - "typenum", -] - -[[package]] -name = "flatbuffers" -version = "23.5.26" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4dac53e22462d78c16d64a1cd22371b54cc3fe94aa15e7886a2fa6e5d1ab8640" -dependencies = [ - "bitflags 1.3.2", - "rustc_version", -] - -[[package]] -name = "flate2" -version = "1.0.28" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46303f565772937ffe1d394a4fac6f411c6013172fadde9dcdb1e147a086940e" -dependencies = [ - "crc32fast", - "miniz_oxide", -] - -[[package]] -name = "flume" -version = "0.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "55ac459de2512911e4b674ce33cf20befaba382d05b62b008afc1c8b57cbf181" -dependencies = [ - "spin", -] - -[[package]] -name = "fnv" -version = "1.0.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" - -[[package]] -name = "foreign-types" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d737d9aa519fb7b749cbc3b962edcf310a8dd1f4b67c91c4f83975dbdd17d965" -dependencies = [ - "foreign-types-macros", - "foreign-types-shared", -] - -[[package]] -name = "foreign-types-macros" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a5c6c585bc94aaf2c7b51dd4c2ba22680844aba4c687be581871a6f518c5742" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.60", -] - -[[package]] -name = "foreign-types-shared" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa9a19cbb55df58761df49b23516a86d432839add4af60fc256da840f66ed35b" - -[[package]] -name = "foreign_vec" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee1b05cbd864bcaecbd3455d6d967862d446e4ebfc3c2e5e5b9841e53cba6673" - -[[package]] -name = "form_urlencoded" -version = "1.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456" -dependencies = [ - "percent-encoding", -] - -[[package]] -name = "fsevent-sys" -version = "4.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76ee7a02da4d231650c7cea31349b889be2f45ddb3ef3032d2ec8185f6313fd2" -dependencies = [ - "libc", -] - -[[package]] -name = "futures-channel" -version = "0.3.30" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eac8f7d7865dcb88bd4373ab671c8cf4508703796caa2b1985a9ca867b3fcb78" -dependencies = [ - "futures-core", -] - -[[package]] -name = "futures-core" -version = "0.3.30" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dfc6580bb841c5a68e9ef15c77ccc837b40a7504914d52e47b8b0e9bbda25a1d" - -[[package]] -name = "futures-executor" -version = "0.3.30" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a576fc72ae164fca6b9db127eaa9a9dda0d61316034f33a0a0d4eda41f02b01d" -dependencies = [ - "futures-core", - "futures-task", - "futures-util", -] - -[[package]] -name = "futures-io" -version = "0.3.30" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a44623e20b9681a318efdd71c299b6b222ed6f231972bfe2f224ebad6311f0c1" - -[[package]] -name = "futures-lite" -version = "1.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49a9d51ce47660b1e808d3c990b4709f2f415d928835a17dfd16991515c46bce" -dependencies = [ - "fastrand 1.9.0", - "futures-core", - "futures-io", - "memchr", - "parking", - "pin-project-lite", - "waker-fn", -] - -[[package]] -name = "futures-lite" -version = "2.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52527eb5074e35e9339c6b4e8d12600c7128b68fb25dcb9fa9dec18f7c25f3a5" -dependencies = [ - "fastrand 2.0.2", - "futures-core", - "futures-io", - "parking", - "pin-project-lite", -] - -[[package]] -name = "futures-macro" -version = "0.3.30" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87750cf4b7a4c0625b1529e4c543c2182106e4dedc60a2a6455e00d212c489ac" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.60", -] - -[[package]] -name = "futures-sink" -version = "0.3.30" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9fb8e00e87438d937621c1c6269e53f536c14d3fbd6a042bb24879e57d474fb5" - -[[package]] -name = "futures-task" -version = "0.3.30" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38d84fa142264698cdce1a9f9172cf383a0c82de1bddcf3092901442c4097004" - -[[package]] -name = "futures-util" -version = "0.3.30" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d6401deb83407ab3da39eba7e33987a73c3df0c82b4bb5813ee871c19c41d48" -dependencies = [ - "futures-core", - "futures-io", - "futures-macro", - "futures-sink", - "futures-task", - "memchr", - "pin-project-lite", - "pin-utils", - "slab", -] - -[[package]] -name = "gemm" -version = "0.17.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ab24cc62135b40090e31a76a9b2766a501979f3070fa27f689c27ec04377d32" -dependencies = [ - "dyn-stack", - "gemm-c32", - "gemm-c64", - "gemm-common", - "gemm-f16", - "gemm-f32", - "gemm-f64", - "num-complex", - "num-traits", - "paste", - "raw-cpuid", - "seq-macro", -] - -[[package]] -name = "gemm-c32" -version = "0.17.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9c030d0b983d1e34a546b86e08f600c11696fde16199f971cd46c12e67512c0" -dependencies = [ - "dyn-stack", - "gemm-common", - "num-complex", - "num-traits", - "paste", - "raw-cpuid", - "seq-macro", -] - -[[package]] -name = "gemm-c64" -version = "0.17.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fbb5f2e79fefb9693d18e1066a557b4546cd334b226beadc68b11a8f9431852a" -dependencies = [ - "dyn-stack", - "gemm-common", - "num-complex", - "num-traits", - "paste", - "raw-cpuid", - "seq-macro", -] - -[[package]] -name = "gemm-common" -version = "0.17.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2e7ea062c987abcd8db95db917b4ffb4ecdfd0668471d8dc54734fdff2354e8" -dependencies = [ - "bytemuck", - "dyn-stack", - "half", - "num-complex", - "num-traits", - "once_cell", - "paste", - "pulp", - "raw-cpuid", - "rayon", - "seq-macro", - "sysctl", -] - -[[package]] -name = "gemm-f16" -version = "0.17.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ca4c06b9b11952071d317604acb332e924e817bd891bec8dfb494168c7cedd4" -dependencies = [ - "dyn-stack", - "gemm-common", - "gemm-f32", - "half", - "num-complex", - "num-traits", - "paste", - "raw-cpuid", - "rayon", - "seq-macro", -] - -[[package]] -name = "gemm-f32" -version = "0.17.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e9a69f51aaefbd9cf12d18faf273d3e982d9d711f60775645ed5c8047b4ae113" -dependencies = [ - "dyn-stack", - "gemm-common", - "num-complex", - "num-traits", - "paste", - "raw-cpuid", - "seq-macro", -] - -[[package]] -name = "gemm-f64" -version = "0.17.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa397a48544fadf0b81ec8741e5c0fba0043008113f71f2034def1935645d2b0" -dependencies = [ - "dyn-stack", - "gemm-common", - "num-complex", - "num-traits", - "paste", - "raw-cpuid", - "seq-macro", -] - -[[package]] -name = "generic-array" -version = "0.14.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" -dependencies = [ - "typenum", - "version_check", -] - -[[package]] -name = "gethostname" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0176e0459c2e4a1fe232f984bca6890e681076abb9934f6cea7c326f3fc47818" -dependencies = [ - "libc", - "windows-targets 0.48.5", -] - -[[package]] -name = "getrandom" -version = "0.2.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94b22e06ecb0110981051723910cbf0b5f5e09a2062dd7663334ee79a9d1286c" -dependencies = [ - "cfg-if", - "js-sys", - "libc", - "wasi", - "wasm-bindgen", -] - -[[package]] -name = "gif" -version = "0.13.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3fb2d69b19215e18bb912fa30f7ce15846e301408695e44e0ef719f1da9e19f2" -dependencies = [ - "color_quant", - "weezl", -] - -[[package]] -name = "gimli" -version = "0.28.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4271d37baee1b8c7e4b708028c57d816cf9d2434acb33a549475f78c181f6253" - -[[package]] -name = "gio-sys" -version = "0.19.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bcf8e1d9219bb294636753d307b030c1e8a032062cba74f493c431a5c8b81ce4" -dependencies = [ - "glib-sys", - "gobject-sys", - "libc", - "system-deps", - "windows-sys 0.52.0", -] - -[[package]] -name = "gl_generator" -version = "0.14.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a95dfc23a2b4a9a2f5ab41d194f8bfda3cabec42af4e39f08c339eb2a0c124d" -dependencies = [ - "khronos_api", - "log", - "xml-rs", -] - -[[package]] -name = "glam" -version = "0.22.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "12f597d56c1bd55a811a1be189459e8fad2bbc272616375602443bdfb37fa774" -dependencies = [ - "bytemuck", - "serde", -] - -[[package]] -name = "glib" -version = "0.19.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae1407b2ce171e654720be10d57d4054d3ff2f10a13d5b37e6819b41439832f7" -dependencies = [ - "bitflags 2.5.0", - "futures-channel", - "futures-core", - "futures-executor", - "futures-task", - "futures-util", - "gio-sys", - "glib-macros", - "glib-sys", - "gobject-sys", - "libc", - "memchr", - "smallvec", - "thiserror", -] - -[[package]] -name = "glib-macros" -version = "0.19.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8bba315e8ce8aa59631545358450f4962557e89b5f7db7442e7153b47037f71" -dependencies = [ - "heck 0.5.0", - "proc-macro-crate 3.1.0", - "proc-macro2", - "quote", - "syn 2.0.60", -] - -[[package]] -name = "glib-sys" -version = "0.19.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "630f097773d7c7a0bb3258df4e8157b47dc98bbfa0e60ad9ab56174813feced4" -dependencies = [ - "libc", - "system-deps", -] - -[[package]] -name = "glob" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b" - -[[package]] -name = "glow" -version = "0.13.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd348e04c43b32574f2de31c8bb397d96c9fcfa1371bd4ca6d8bdc464ab121b1" -dependencies = [ - "js-sys", - "slotmap", - "wasm-bindgen", - "web-sys", -] - -[[package]] -name = "gltf" -version = "1.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b78f069cf941075835822953c345b9e1edd67ae347b81ace3aea9de38c2ef33" -dependencies = [ - "base64 0.13.1", - "byteorder", - "gltf-json", - "image 0.24.9", - "lazy_static", - "serde_json", - "urlencoding", -] - -[[package]] -name = "gltf-derive" -version = "1.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "438ffe1a5540d75403feaf23636b164e816e93f6f03131674722b3886ce32a57" -dependencies = [ - "inflections", - "proc-macro2", - "quote", - "syn 2.0.60", -] - -[[package]] -name = "gltf-json" -version = "1.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "655951ba557f2bc69ea4b0799446bae281fa78efae6319968bdd2c3e9a06d8e1" -dependencies = [ - "gltf-derive", - "serde", - "serde_derive", - "serde_json", -] - -[[package]] -name = "glutin_wgl_sys" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c8098adac955faa2d31079b65dc48841251f69efd3ac25477903fc424362ead" -dependencies = [ - "gl_generator", -] - -[[package]] -name = "gobject-sys" -version = "0.19.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c85e2b1080b9418dd0c58b498da3a5c826030343e0ef07bde6a955d28de54979" -dependencies = [ - "glib-sys", - "libc", - "system-deps", -] - -[[package]] -name = "gpu-alloc" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fbcd2dba93594b227a1f57ee09b8b9da8892c34d55aa332e034a228d0fe6a171" -dependencies = [ - "bitflags 2.5.0", - "gpu-alloc-types", -] - -[[package]] -name = "gpu-alloc-types" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "98ff03b468aa837d70984d55f5d3f846f6ec31fe34bbb97c4f85219caeee1ca4" -dependencies = [ - "bitflags 2.5.0", -] - -[[package]] -name = "gpu-allocator" -version = "0.25.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f56f6318968d03c18e1bcf4857ff88c61157e9da8e47c5f29055d60e1228884" -dependencies = [ - "log", - "presser", - "thiserror", - "winapi", - "windows 0.52.0", -] - -[[package]] -name = "gpu-descriptor" -version = "0.2.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc11df1ace8e7e564511f53af41f3e42ddc95b56fd07b3f4445d2a6048bc682c" -dependencies = [ - "bitflags 2.5.0", - "gpu-descriptor-types", - "hashbrown", -] - -[[package]] -name = "gpu-descriptor-types" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6bf0b36e6f090b7e1d8a4b49c0cb81c1f8376f72198c65dd3ad9ff3556b8b78c" -dependencies = [ - "bitflags 2.5.0", -] - -[[package]] -name = "gstreamer" -version = "0.22.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc6f2d7dcde4b42b5297d25e9f51914cacfa148c99ba6ddabebf006fb2b18c20" -dependencies = [ - "cfg-if", - "futures-channel", - "futures-core", - "futures-util", - "glib", - "gstreamer-sys", - "itertools 0.12.1", - "libc", - "muldiv", - "num-integer", - "num-rational", - "once_cell", - "option-operations", - "paste", - "pin-project-lite", - "smallvec", - "thiserror", -] - -[[package]] -name = "gstreamer-app" -version = "0.22.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50184e88d3462a796a5924fb329839c102b22f9383c1636323fa4ef5255dea92" -dependencies = [ - "futures-core", - "futures-sink", - "glib", - "gstreamer", - "gstreamer-app-sys", - "gstreamer-base", - "libc", -] - -[[package]] -name = "gstreamer-app-sys" -version = "0.22.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6771c0939f286fb261525494a0aad29435b37e802284756bab24afe3bbca7476" -dependencies = [ - "glib-sys", - "gstreamer-base-sys", - "gstreamer-sys", - "libc", - "system-deps", -] - -[[package]] -name = "gstreamer-base" -version = "0.22.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "514c71195b53c7eced4842b66ca9149833e41cf6a1d949e45e2ca4a4fa929850" -dependencies = [ - "atomic_refcell", - "cfg-if", - "glib", - "gstreamer", - "gstreamer-base-sys", - "libc", -] - -[[package]] -name = "gstreamer-base-sys" -version = "0.22.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "286591e0f85bbda1adf9bab6f21d015acd9ca0a4d4acb61da65e3d0487e23c4e" -dependencies = [ - "glib-sys", - "gobject-sys", - "gstreamer-sys", - "libc", - "system-deps", -] - -[[package]] -name = "gstreamer-sys" -version = "0.22.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d5ddf526b3bf90ea627224c804f00b8bcb0452e3b447978b4d5092f8e8ff5918" -dependencies = [ - "glib-sys", - "gobject-sys", - "libc", - "system-deps", -] - -[[package]] -name = "half" -version = "2.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6dd08c532ae367adf81c312a4580bc67f1d0fe8bc9c460520283f4c0ff277888" -dependencies = [ - "bytemuck", - "cfg-if", - "crunchy", - "num-traits", - "rand", - "rand_distr", -] - -[[package]] -name = "hash_hasher" -version = "2.0.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "74721d007512d0cb3338cd20f0654ac913920061a4c4d0d8708edb3f2a698c0c" - -[[package]] -name = "hashbrown" -version = "0.14.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "290f1a1d9242c78d09ce40a5e87e7554ee637af1351968159f4952f028f75604" -dependencies = [ - "ahash", - "allocator-api2", -] - -[[package]] -name = "hassle-rs" -version = "0.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af2a7e73e1f34c48da31fb668a907f250794837e08faa144fd24f0b8b741e890" -dependencies = [ - "bitflags 2.5.0", - "com", - "libc", - "libloading 0.8.3", - "thiserror", - "widestring", - "winapi", -] - -[[package]] -name = "heck" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" - -[[package]] -name = "heck" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" - -[[package]] -name = "hermit-abi" -version = "0.3.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d231dfb89cfffdbc30e7fc41579ed6066ad03abda9e567ccafae602b97ec5024" - -[[package]] -name = "hex" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" - -[[package]] -name = "hexf-parse" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dfa686283ad6dd069f105e5ab091b04c62850d3e4cf5d67debad1933f55023df" - -[[package]] -name = "home" -version = "0.5.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3d1354bf6b7235cb4a0576c2619fd4ed18183f689b12b006a0ee7329eeff9a5" -dependencies = [ - "windows-sys 0.52.0", -] - -[[package]] -name = "http" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "21b9ddb458710bc376481b842f5da65cdf31522de232c1ca8146abce2a358258" -dependencies = [ - "bytes", - "fnv", - "itoa", -] - -[[package]] -name = "httparse" -version = "1.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904" - -[[package]] -name = "httpdate" -version = "1.0.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" - -[[package]] -name = "humantime" -version = "2.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" - -[[package]] -name = "icrate" -version = "0.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "99d3aaff8a54577104bafdf686ff18565c3b6903ca5782a2026ef06e2c7aa319" -dependencies = [ - "block2 0.3.0", - "dispatch", - "objc2 0.4.1", -] - -[[package]] -name = "ident_case" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" - -[[package]] -name = "idna" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "634d9b1461af396cad843f47fdba5597a4f9e6ddd4bfb6ff5d85028c25cb12f6" -dependencies = [ - "unicode-bidi", - "unicode-normalization", -] - -[[package]] -name = "image" -version = "0.24.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5690139d2f55868e080017335e4b94cb7414274c74f1669c84fb5feba2c9f69d" -dependencies = [ - "bytemuck", - "byteorder", - "color_quant", - "jpeg-decoder", - "num-traits", - "png", - "tiff", -] - -[[package]] -name = "image" -version = "0.25.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd54d660e773627692c524beaad361aca785a4f9f5730ce91f42aabe5bce3d11" -dependencies = [ - "bytemuck", - "byteorder", - "color_quant", - "exr", - "gif", - "image-webp", - "num-traits", - "png", - "qoi", - "ravif", - "rayon", - "rgb", - "tiff", - "zune-core", - "zune-jpeg", -] - -[[package]] -name = "image-webp" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d730b085583c4d789dfd07fdcf185be59501666a90c97c40162b37e4fdad272d" -dependencies = [ - "byteorder-lite", - "thiserror", -] - -[[package]] -name = "imgref" -version = "1.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44feda355f4159a7c757171a77de25daf6411e217b4cabd03bd6650690468126" - -[[package]] -name = "indent" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9f1a0777d972970f204fdf8ef319f1f4f8459131636d7e3c96c5d59570d0fa6" - -[[package]] -name = "indexmap" -version = "2.2.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "168fb715dda47215e360912c096649d23d58bf392ac62f73919e831745e40f26" -dependencies = [ - "equivalent", - "hashbrown", - "serde", -] - -[[package]] -name = "indicatif" -version = "0.17.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "763a5a8f45087d6bcea4222e7b72c291a054edf80e4ef6efd2a4979878c7bea3" -dependencies = [ - "console", - "instant", - "number_prefix", - "portable-atomic", - "rayon", - "unicode-width", -] - -[[package]] -name = "infer" -version = "0.15.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb33622da908807a06f9513c19b3c1ad50fab3e4137d82a78107d502075aa199" -dependencies = [ - "cfb", -] - -[[package]] -name = "inflections" -version = "1.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a257582fdcde896fd96463bf2d40eefea0580021c0712a0e2b028b60b47a837a" - -[[package]] -name = "inotify" -version = "0.9.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8069d3ec154eb856955c1c0fbffefbf5f3c40a104ec912d4797314c1801abff" -dependencies = [ - "bitflags 1.3.2", - "inotify-sys", - "libc", -] - -[[package]] -name = "inotify-sys" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e05c02b5e89bff3b946cedeca278abc628fe811e604f027c45a8aa3cf793d0eb" -dependencies = [ - "libc", -] - -[[package]] -name = "instant" -version = "0.1.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c" -dependencies = [ - "cfg-if", -] - -[[package]] -name = "interpolate_name" -version = "0.2.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c34819042dc3d3971c46c2190835914dfbe0c3c13f61449b2997f4e9722dfa60" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.60", -] - -[[package]] -name = "io-lifetimes" -version = "1.0.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eae7b9aee968036d54dce06cebaefd919e4472e753296daccd6d344e3e2df0c2" -dependencies = [ - "hermit-abi", - "libc", - "windows-sys 0.48.0", -] - -[[package]] -name = "is-terminal" -version = "0.4.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f23ff5ef2b80d608d61efee834934d862cd92461afc0560dedf493e4c033738b" -dependencies = [ - "hermit-abi", - "libc", - "windows-sys 0.52.0", -] - -[[package]] -name = "itertools" -version = "0.10.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473" -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 = "itoa" -version = "1.0.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49f1f14873335454500d59611f1cf4a4b0f786f9ac11f4312a78e4cf2566695b" - -[[package]] -name = "jni" -version = "0.21.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a87aa2bb7d2af34197c04845522473242e1aa17c12f4935d5856491a7fb8c97" -dependencies = [ - "cesu8", - "cfg-if", - "combine", - "jni-sys", - "log", - "thiserror", - "walkdir", - "windows-sys 0.45.0", -] - -[[package]] -name = "jni-sys" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130" - -[[package]] -name = "jobserver" -version = "0.1.30" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "685a7d121ee3f65ae4fddd72b25a04bb36b6af81bc0828f7d5434c0fe60fa3a2" -dependencies = [ - "libc", -] - -[[package]] -name = "jpeg-decoder" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f5d4a7da358eff58addd2877a45865158f0d78c911d43a5784ceb7bbf52833b0" - -[[package]] -name = "js-sys" -version = "0.3.69" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "29c15563dc2726973df627357ce0c9ddddbea194836909d655df6a75d2cf296d" -dependencies = [ - "wasm-bindgen", -] - -[[package]] -name = "khronos-egl" -version = "6.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6aae1df220ece3c0ada96b8153459b67eebe9ae9212258bb0134ae60416fdf76" -dependencies = [ - "libc", - "libloading 0.8.3", - "pkg-config", -] - -[[package]] -name = "khronos_api" -version = "3.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2db585e1d738fc771bf08a151420d3ed193d9d895a36df7f6f8a9456b911ddc" - -[[package]] -name = "kornia-rs" -version = "0.1.6-dev" -dependencies = [ - "anyhow", - "arrow-buffer", - "candle-core", - "clap", - "criterion", - "fast_image_resize", - "gstreamer", - "gstreamer-app", - "image 0.25.1", - "indicatif", - "memmap2", - "ndarray", - "num-traits", - "rayon", - "rerun", - "serde", - "tempfile", - "thiserror", - "tokio", - "turbojpeg", - "walkdir", -] - -[[package]] -name = "kqueue" -version = "1.0.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7447f1ca1b7b563588a205fe93dea8df60fd981423a768bc1c0ded35ed147d0c" -dependencies = [ - "kqueue-sys", - "libc", -] - -[[package]] -name = "kqueue-sys" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed9625ffda8729b85e45cf04090035ac368927b8cebc34898e7c120f52e4838b" -dependencies = [ - "bitflags 1.3.2", - "libc", -] - -[[package]] -name = "lazy_static" -version = "1.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" - -[[package]] -name = "lebe" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03087c2bad5e1034e8cace5926dec053fb3790248370865f5117a7d0213354c8" - -[[package]] -name = "libc" -version = "0.2.153" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c198f91728a82281a64e1f4f9eeb25d82cb32a5de251c6bd1b5154d63a8e7bd" - -[[package]] -name = "libfuzzer-sys" -version = "0.4.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a96cfd5557eb82f2b83fed4955246c988d331975a002961b07c81584d107e7f7" -dependencies = [ - "arbitrary", - "cc", - "once_cell", -] - -[[package]] -name = "libloading" -version = "0.7.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b67380fd3b2fbe7527a606e18729d21c6f3951633d0500574c4dc22d2d638b9f" -dependencies = [ - "cfg-if", - "winapi", -] - -[[package]] -name = "libloading" -version = "0.8.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c2a198fb6b0eada2a8df47933734e6d35d350665a33a3593d7164fa52c75c19" -dependencies = [ - "cfg-if", - "windows-targets 0.52.5", -] - -[[package]] -name = "libm" -version = "0.2.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ec2a862134d2a7d32d7983ddcdd1c4923530833c9f2ea1a44fc5fa473989058" - -[[package]] -name = "libredox" -version = "0.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3af92c55d7d839293953fcd0fda5ecfe93297cfde6ffbdec13b41d99c0ba6607" -dependencies = [ - "bitflags 2.5.0", - "libc", - "redox_syscall 0.4.1", -] - -[[package]] -name = "libredox" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0ff37bd590ca25063e35af745c343cb7a0271906fb7b37e4813e8f79f00268d" -dependencies = [ - "bitflags 2.5.0", - "libc", -] - -[[package]] -name = "linked-hash-map" -version = "0.5.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0717cef1bc8b636c6e1c1bbdefc09e6322da8a9321966e8928ef80d20f7f770f" - -[[package]] -name = "linux-raw-sys" -version = "0.3.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef53942eb7bf7ff43a617b3e2c1c4a5ecf5944a7c1bc12d7ee39bbb15e5c1519" - -[[package]] -name = "linux-raw-sys" -version = "0.4.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01cda141df6706de531b6c46c3a33ecca755538219bd484262fa09410c13539c" - -[[package]] -name = "litrs" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4ce301924b7887e9d637144fdade93f9dfff9b60981d4ac161db09720d39aa5" - -[[package]] -name = "lock_api" -version = "0.4.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c168f8615b12bc01f9c17e2eb0cc07dcae1940121185446edc3744920e8ef45" -dependencies = [ - "autocfg", - "scopeguard", - "serde", -] - -[[package]] -name = "log" -version = "0.4.21" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90ed8c1e510134f979dbc4f070f87d4313098b704861a105fe34231c70a3901c" - -[[package]] -name = "log-once" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d8a05e3879b317b1b6dbf353e5bba7062bedcc59815267bb23eaa0c576cebf0" -dependencies = [ - "log", -] - -[[package]] -name = "loop9" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fae87c125b03c1d2c0150c90365d7d6bcc53fb73a9acaef207d2d065860f062" -dependencies = [ - "imgref", -] - -[[package]] -name = "lz4_flex" -version = "0.11.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75761162ae2b0e580d7e7c390558127e5f01b4194debd6221fd8c207fc80e3f5" -dependencies = [ - "twox-hash", -] - -[[package]] -name = "macaw" -version = "0.18.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8fdbfdf07a7e53090afb7fd427eb0a4b46fc51cb484b2deba27b47919762dfb" -dependencies = [ - "glam", - "num-traits", - "serde", -] - -[[package]] -name = "malloc_buf" -version = "0.0.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62bb907fe88d54d8d9ce32a3cceab4218ed2f6b7d35617cafe9adf84e43919cb" -dependencies = [ - "libc", -] - -[[package]] -name = "matrixmultiply" -version = "0.3.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7574c1cf36da4798ab73da5b215bbf444f50718207754cb522201d78d1cd0ff2" -dependencies = [ - "autocfg", - "rawpointer", -] - -[[package]] -name = "maybe-rayon" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ea1f30cedd69f0a2954655f7188c6a834246d2bcf1e315e2ac40c4b24dc9519" -dependencies = [ - "cfg-if", - "rayon", -] - -[[package]] -name = "memchr" -version = "2.7.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c8640c5d730cb13ebd907d8d04b52f55ac9a2eec55b440c8892f40d56c76c1d" - -[[package]] -name = "memmap2" -version = "0.9.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe751422e4a8caa417e13c3ea66452215d7d63e19e604f4980461212f3ae1322" -dependencies = [ - "libc", - "stable_deref_trait", -] - -[[package]] -name = "memoffset" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5de893c32cde5f383baa4c04c5d6dbdd735cfd4a794b0debdb2bb1b421da5ff4" -dependencies = [ - "autocfg", -] - -[[package]] -name = "memoffset" -version = "0.9.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "488016bfae457b036d996092f6cb448677611ce4449e970ceaf42695203f218a" -dependencies = [ - "autocfg", -] - -[[package]] -name = "memory-stats" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34f79cf9964c5c9545493acda1263f1912f8d2c56c8a2ffee2606cb960acaacc" -dependencies = [ - "libc", - "winapi", -] - -[[package]] -name = "metal" -version = "0.27.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c43f73953f8cbe511f021b58f18c3ce1c3d1ae13fe953293e13345bf83217f25" -dependencies = [ - "bitflags 2.5.0", - "block", - "core-graphics-types", - "foreign-types", - "log", - "objc", - "paste", -] - -[[package]] -name = "mime" -version = "0.3.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" - -[[package]] -name = "mime_guess2" -version = "2.0.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "25a3333bb1609500601edc766a39b4c1772874a4ce26022f4d866854dc020c41" -dependencies = [ - "mime", - "unicase", -] - -[[package]] -name = "minimal-lexical" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" - -[[package]] -name = "miniz_oxide" -version = "0.7.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d811f3e15f28568be3407c8e7fdb6514c1cda3cb30683f15b6a1a1dc4ea14a7" -dependencies = [ - "adler", - "simd-adler32", -] - -[[package]] -name = "mio" -version = "0.8.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4a650543ca06a924e8b371db273b2756685faae30f8487da1b56505a8f78b0c" -dependencies = [ - "libc", - "log", - "wasi", - "windows-sys 0.48.0", -] - -[[package]] -name = "muldiv" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "956787520e75e9bd233246045d19f42fb73242759cc57fba9611d940ae96d4b0" - -[[package]] -name = "naga" -version = "0.19.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50e3524642f53d9af419ab5e8dd29d3ba155708267667c2f3f06c88c9e130843" -dependencies = [ - "bit-set", - "bitflags 2.5.0", - "codespan-reporting", - "hexf-parse", - "indexmap", - "log", - "num-traits", - "rustc-hash", - "spirv", - "termcolor", - "thiserror", - "unicode-xid", -] - -[[package]] -name = "natord" -version = "1.0.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "308d96db8debc727c3fd9744aac51751243420e46edf401010908da7f8d5e57c" - -[[package]] -name = "ndarray" -version = "0.15.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "adb12d4e967ec485a5f71c6311fe28158e9d6f4bc4a447b474184d0f91a8fa32" -dependencies = [ - "matrixmultiply", - "num-complex", - "num-integer", - "num-traits", - "rawpointer", - "rayon", -] - -[[package]] -name = "ndk" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2076a31b7010b17a38c01907c45b945e8f11495ee4dd588309718901b1f7a5b7" -dependencies = [ - "bitflags 2.5.0", - "jni-sys", - "log", - "ndk-sys", - "num_enum", - "raw-window-handle 0.6.1", - "thiserror", -] - -[[package]] -name = "ndk-context" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "27b02d87554356db9e9a873add8782d4ea6e3e58ea071a9adb9a2e8ddb884a8b" - -[[package]] -name = "ndk-sys" -version = "0.5.0+25.2.9519653" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c196769dd60fd4f363e11d948139556a344e79d451aeb2fa2fd040738ef7691" -dependencies = [ - "jni-sys", -] - -[[package]] -name = "never" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c96aba5aa877601bb3f6dd6a63a969e1f82e60646e81e71b14496995e9853c91" - -[[package]] -name = "new_debug_unreachable" -version = "1.0.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "650eef8c711430f1a879fdd01d4745a7deea475becfb90269c06775983bbf086" - -[[package]] -name = "nix" -version = "0.26.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "598beaf3cc6fdd9a5dfb1630c2800c7acd31df7aaf0f565796fba2b53ca1af1b" -dependencies = [ - "bitflags 1.3.2", - "cfg-if", - "libc", - "memoffset 0.7.1", -] - -[[package]] -name = "nohash-hasher" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2bf50223579dc7cdcfb3bfcacf7069ff68243f8c363f62ffa99cf000a6b9c451" - -[[package]] -name = "nom" -version = "7.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a" -dependencies = [ - "memchr", - "minimal-lexical", -] - -[[package]] -name = "noop_proc_macro" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0676bb32a98c1a483ce53e500a81ad9c3d5b3f7c920c28c24e9cb0980d0b5bc8" - -[[package]] -name = "notify" -version = "6.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6205bd8bb1e454ad2e27422015fb5e4f2bcc7e08fa8f27058670d208324a4d2d" -dependencies = [ - "bitflags 2.5.0", - "crossbeam-channel", - "filetime", - "fsevent-sys", - "inotify", - "kqueue", - "libc", - "log", - "mio", - "walkdir", - "windows-sys 0.48.0", -] - -[[package]] -name = "ntapi" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8a3895c6391c39d7fe7ebc444a87eb2991b2a0bc718fdabd071eec617fc68e4" -dependencies = [ - "winapi", -] - -[[package]] -name = "num" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "35bd024e8b2ff75562e5f34e7f4905839deb4b22955ef5e73d2fea1b9813cb23" -dependencies = [ - "num-bigint", - "num-complex", - "num-integer", - "num-iter", - "num-rational", - "num-traits", -] - -[[package]] -name = "num-bigint" -version = "0.4.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a5e44f723f1133c9deac646763579fdb3ac745e418f2a7af9cd0c431da1f20b9" -dependencies = [ - "num-integer", - "num-traits", -] - -[[package]] -name = "num-complex" -version = "0.4.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "73f88a1307638156682bada9d7604135552957b7818057dcef22705b4d509495" -dependencies = [ - "bytemuck", - "num-traits", -] - -[[package]] -name = "num-conv" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9" - -[[package]] -name = "num-derive" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed3955f1a9c7c0c15e092f9c887db08b1fc683305fdf6eb6684f22555355e202" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.60", -] - -[[package]] -name = "num-integer" -version = "0.1.46" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f" -dependencies = [ - "num-traits", -] - -[[package]] -name = "num-iter" -version = "0.1.45" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1429034a0490724d0075ebb2bc9e875d6503c3cf69e235a8941aa757d83ef5bf" -dependencies = [ - "autocfg", - "num-integer", - "num-traits", -] - -[[package]] -name = "num-rational" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f83d14da390562dca69fc84082e73e548e1ad308d24accdedd2720017cb37824" -dependencies = [ - "num-bigint", - "num-integer", - "num-traits", -] - -[[package]] -name = "num-traits" -version = "0.2.19" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" -dependencies = [ - "autocfg", - "libm", -] - -[[package]] -name = "num_cpus" -version = "1.16.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43" -dependencies = [ - "hermit-abi", - "libc", -] - -[[package]] -name = "num_enum" -version = "0.7.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02339744ee7253741199f897151b38e72257d13802d4ee837285cc2990a90845" -dependencies = [ - "num_enum_derive", -] - -[[package]] -name = "num_enum_derive" -version = "0.7.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "681030a937600a36906c185595136d26abfebb4aa9c65701cefcaf8578bb982b" -dependencies = [ - "proc-macro-crate 3.1.0", - "proc-macro2", - "quote", - "syn 2.0.60", -] - -[[package]] -name = "num_threads" -version = "0.1.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c7398b9c8b70908f6371f47ed36737907c87c52af34c268fed0bf0ceb92ead9" -dependencies = [ - "libc", -] - -[[package]] -name = "number_prefix" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "830b246a0e5f20af87141b25c173cd1b609bd7779a4617d6ec582abaf90870f3" - -[[package]] -name = "objc" -version = "0.2.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "915b1b472bc21c53464d6c8461c9d3af805ba1ef837e1cac254428f4a77177b1" -dependencies = [ - "malloc_buf", - "objc_exception", -] - -[[package]] -name = "objc-foundation" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1add1b659e36c9607c7aab864a76c7a4c2760cd0cd2e120f3fb8b952c7e22bf9" -dependencies = [ - "block", - "objc", - "objc_id", -] - -[[package]] -name = "objc-sys" -version = "0.2.0-beta.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df3b9834c1e95694a05a828b59f55fa2afec6288359cda67146126b3f90a55d7" - -[[package]] -name = "objc-sys" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da284c198fb9b7b0603f8635185e85fbd5b64ee154b1ed406d489077de2d6d60" - -[[package]] -name = "objc2" -version = "0.3.0-beta.3.patch-leaks.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e01640f9f2cb1220bbe80325e179e532cb3379ebcd1bf2279d703c19fe3a468" -dependencies = [ - "block2 0.2.0-alpha.6", - "objc-sys 0.2.0-beta.2", - "objc2-encode 2.0.0-pre.2", -] - -[[package]] -name = "objc2" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "559c5a40fdd30eb5e344fbceacf7595a81e242529fb4e21cf5f43fb4f11ff98d" -dependencies = [ - "objc-sys 0.3.3", - "objc2-encode 3.0.0", -] - -[[package]] -name = "objc2-encode" -version = "2.0.0-pre.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "abfcac41015b00a120608fdaa6938c44cb983fee294351cc4bac7638b4e50512" -dependencies = [ - "objc-sys 0.2.0-beta.2", -] - -[[package]] -name = "objc2-encode" -version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d079845b37af429bfe5dfa76e6d087d788031045b25cfc6fd898486fd9847666" - -[[package]] -name = "objc_exception" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad970fb455818ad6cba4c122ad012fae53ae8b4795f86378bce65e4f6bab2ca4" -dependencies = [ - "cc", -] - -[[package]] -name = "objc_id" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c92d4ddb4bd7b50d730c215ff871754d0da6b2178849f8a2a2ab69712d0c073b" -dependencies = [ - "objc", -] - -[[package]] -name = "object" -version = "0.32.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a6a622008b6e321afc04970976f62ee297fdbaa6f95318ca343e3eebb9648441" -dependencies = [ - "memchr", -] - -[[package]] -name = "once_cell" -version = "1.19.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" - -[[package]] -name = "oorandom" -version = "11.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ab1bc2a289d34bd04a330323ac98a1b4bc82c9d9fcb1e66b63caa84da26b575" - -[[package]] -name = "option-operations" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7c26d27bb1aeab65138e4bf7666045169d1717febcc9ff870166be8348b223d0" -dependencies = [ - "paste", -] - -[[package]] -name = "orbclient" -version = "0.3.47" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52f0d54bde9774d3a51dcf281a5def240c71996bc6ca05d2c847ec8b2b216166" -dependencies = [ - "libredox 0.0.2", -] - -[[package]] -name = "ordered-float" -version = "4.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a76df7075c7d4d01fdcb46c912dd17fba5b60c78ea480b475f2b6ab6f666584e" -dependencies = [ - "num-traits", -] - -[[package]] -name = "ordered-stream" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9aa2b01e1d916879f73a53d01d1d6cee68adbb31d6d9177a8cfce093cced1d50" -dependencies = [ - "futures-core", - "pin-project-lite", -] - -[[package]] -name = "owned_ttf_parser" -version = "0.20.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d4586edfe4c648c71797a74c84bacb32b52b212eff5dfe2bb9f2c599844023e7" -dependencies = [ - "ttf-parser", -] - -[[package]] -name = "parking" -version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb813b8af86854136c6922af0598d719255ecb2179515e6e7730d468f05c9cae" - -[[package]] -name = "parking_lot" -version = "0.12.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f" -dependencies = [ - "lock_api", - "parking_lot_core", -] - -[[package]] -name = "parking_lot_core" -version = "0.9.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c42a9226546d68acdd9c0a280d17ce19bfe27a46bf68784e4066115788d008e" -dependencies = [ - "cfg-if", - "libc", - "redox_syscall 0.4.1", - "smallvec", - "windows-targets 0.48.5", -] - -[[package]] -name = "paste" -version = "1.0.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "de3145af08024dea9fa9914f381a17b8fc6034dfb00f3a84013f7ff43f29ed4c" - -[[package]] -name = "pathdiff" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8835116a5c179084a830efb3adc117ab007512b535bc1a21c991d3b32a6b44dd" - -[[package]] -name = "peg" -version = "0.6.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f76678828272f177ac33b7e2ac2e3e73cc6c1cd1e3e387928aa69562fa51367" -dependencies = [ - "peg-macros", - "peg-runtime", -] - -[[package]] -name = "peg-macros" -version = "0.6.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "636d60acf97633e48d266d7415a9355d4389cea327a193f87df395d88cd2b14d" -dependencies = [ - "peg-runtime", - "proc-macro2", - "quote", -] - -[[package]] -name = "peg-runtime" -version = "0.6.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9555b1514d2d99d78150d3c799d4c357a3e2c2a8062cd108e93a06d9057629c5" - -[[package]] -name = "percent-encoding" -version = "2.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" - -[[package]] -name = "pin-project-lite" -version = "0.2.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bda66fc9667c18cb2758a2ac84d1167245054bcf85d5d1aaa6923f45801bdd02" - -[[package]] -name = "pin-utils" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" - -[[package]] -name = "piper" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "668d31b1c4eba19242f2088b2bf3316b82ca31082a8335764db4e083db7485d4" -dependencies = [ - "atomic-waker", - "fastrand 2.0.2", - "futures-io", -] - -[[package]] -name = "pkg-config" -version = "0.3.30" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d231b230927b5e4ad203db57bbcbee2802f6bce620b1e4a9024a07d94e2907ec" - -[[package]] -name = "planus" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc1691dd09e82f428ce8d6310bd6d5da2557c82ff17694d2a32cad7242aea89f" -dependencies = [ - "array-init-cursor", -] - -[[package]] -name = "plotters" -version = "0.3.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2c224ba00d7cadd4d5c660deaf2098e5e80e07846537c51f9cfa4be50c1fd45" -dependencies = [ - "num-traits", - "plotters-backend", - "plotters-svg", - "wasm-bindgen", - "web-sys", -] - -[[package]] -name = "plotters-backend" -version = "0.3.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e76628b4d3a7581389a35d5b6e2139607ad7c75b17aed325f210aa91f4a9609" - -[[package]] -name = "plotters-svg" -version = "0.3.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38f6d39893cca0701371e3c27294f09797214b86f1fb951b89ade8ec04e2abab" -dependencies = [ - "plotters-backend", -] - -[[package]] -name = "ply-rs" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dbadf9cb4a79d516de4c64806fe64ffbd8161d1ac685d000be789fb628b88963" -dependencies = [ - "byteorder", - "linked-hash-map", - "peg", - "skeptic", -] - -[[package]] -name = "png" -version = "0.17.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06e4b0d3d1312775e782c86c91a111aa1f910cbb65e1337f9975b5f9a554b5e1" -dependencies = [ - "bitflags 1.3.2", - "crc32fast", - "fdeflate", - "flate2", - "miniz_oxide", -] - -[[package]] -name = "poll-promise" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f6a58fecbf9da8965bcdb20ce4fd29788d1acee68ddbb64f0ba1b81bccdb7df" -dependencies = [ - "document-features", - "static_assertions", - "wasm-bindgen", - "wasm-bindgen-futures", -] - -[[package]] -name = "polling" -version = "2.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b2d323e8ca7996b3e23126511a523f7e62924d93ecd5ae73b333815b0eb3dce" -dependencies = [ - "autocfg", - "bitflags 1.3.2", - "cfg-if", - "concurrent-queue", - "libc", - "log", - "pin-project-lite", - "windows-sys 0.48.0", -] - -[[package]] -name = "polling" -version = "3.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e0c976a60b2d7e99d6f229e414670a9b85d13ac305cc6d1e9c134de58c5aaaf6" -dependencies = [ - "cfg-if", - "concurrent-queue", - "hermit-abi", - "pin-project-lite", - "rustix 0.38.32", - "tracing", - "windows-sys 0.52.0", -] - -[[package]] -name = "pollster" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22686f4785f02a4fcc856d3b3bb19bf6c8160d103f7a99cc258bddd0251dc7f2" - -[[package]] -name = "portable-atomic" -version = "1.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7170ef9988bc169ba16dd36a7fa041e5c4cbeb6a35b76d4c03daded371eae7c0" - -[[package]] -name = "powerfmt" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" - -[[package]] -name = "ppv-lite86" -version = "0.2.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" - -[[package]] -name = "presser" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8cf8e6a8aa66ce33f63993ffc4ea4271eb5b0530a9002db8455ea6050c77bfa" - -[[package]] -name = "prettyplease" -version = "0.2.19" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ac2cf0f2e4f42b49f5ffd07dae8d746508ef7526c13940e5f524012ae6c6550" -dependencies = [ - "proc-macro2", - "syn 2.0.60", -] - -[[package]] -name = "proc-macro-crate" -version = "1.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f4c021e1093a56626774e81216a4ce732a735e5bad4868a03f3ed65ca0c3919" -dependencies = [ - "once_cell", - "toml_edit 0.19.15", -] - -[[package]] -name = "proc-macro-crate" -version = "3.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d37c51ca738a55da99dc0c4a34860fd675453b8b36209178c2249bb13651284" -dependencies = [ - "toml_edit 0.21.1", -] - -[[package]] -name = "proc-macro2" -version = "1.0.81" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d1597b0c024618f09a9c3b8655b7e430397a36d23fdafec26d6965e9eec3eba" -dependencies = [ - "unicode-ident", -] - -[[package]] -name = "profiling" -version = "1.0.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43d84d1d7a6ac92673717f9f6d1518374ef257669c24ebc5ac25d5033828be58" -dependencies = [ - "profiling-procmacros", - "puffin", -] - -[[package]] -name = "profiling-procmacros" -version = "1.0.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8021cf59c8ec9c432cfc2526ac6b8aa508ecaf29cd415f271b8406c1b851c3fd" -dependencies = [ - "quote", - "syn 2.0.60", -] - -[[package]] -name = "puffin" -version = "0.19.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9f76ad4bb049fded4e572df72cbb6381ff5d1f41f85c3a04b56e4eca287a02f" -dependencies = [ - "anyhow", - "bincode", - "byteorder", - "cfg-if", - "lz4_flex", - "once_cell", - "parking_lot", - "serde", -] - -[[package]] -name = "puffin_http" -version = "0.16.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4936c085e48efc86f6d96609dc5086d1d236afe3ec4676f09b157a4f4be83ff6" -dependencies = [ - "anyhow", - "crossbeam-channel", - "log", - "parking_lot", - "puffin", -] - -[[package]] -name = "pulldown-cmark" -version = "0.9.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57206b407293d2bcd3af849ce869d52068623f19e1b5ff8e8778e3309439682b" -dependencies = [ - "bitflags 2.5.0", - "memchr", - "unicase", -] - -[[package]] -name = "pulldown-cmark" -version = "0.10.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76979bea66e7875e7509c4ec5300112b316af87fa7a252ca91c448b32dfe3993" -dependencies = [ - "bitflags 2.5.0", - "memchr", - "unicase", -] - -[[package]] -name = "pulp" -version = "0.18.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e14989307e408d9f4245d4fda09a7b144a08114ba124e26cab60ab83dc98db10" -dependencies = [ - "bytemuck", - "libm", - "num-complex", - "reborrow", -] - -[[package]] -name = "qoi" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f6d64c71eb498fe9eae14ce4ec935c555749aef511cca85b5568910d6e48001" -dependencies = [ - "bytemuck", -] - -[[package]] -name = "quick-error" -version = "2.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a993555f31e5a609f617c12db6250dedcac1b0a85076912c436e6fc9b2c8e6a3" - -[[package]] -name = "quick-xml" -version = "0.31.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1004a344b30a54e2ee58d66a71b32d2db2feb0a31f9a2d302bf0536f15de2a33" -dependencies = [ - "memchr", -] - -[[package]] -name = "quote" -version = "1.0.36" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fa76aaf39101c457836aec0ce2316dbdc3ab723cdda1c6bd4e6ad4208acaca7" -dependencies = [ - "proc-macro2", -] - -[[package]] -name = "rand" -version = "0.8.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" -dependencies = [ - "libc", - "rand_chacha", - "rand_core", -] - -[[package]] -name = "rand_chacha" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" -dependencies = [ - "ppv-lite86", - "rand_core", -] - -[[package]] -name = "rand_core" -version = "0.6.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" -dependencies = [ - "getrandom", -] - -[[package]] -name = "rand_distr" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32cb0b9bc82b0a0876c2dd994a7e7a2683d3e7390ca40e6886785ef0c7e3ee31" -dependencies = [ - "num-traits", - "rand", -] - -[[package]] -name = "rav1e" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd87ce80a7665b1cce111f8a16c1f3929f6547ce91ade6addf4ec86a8dda5ce9" -dependencies = [ - "arbitrary", - "arg_enum_proc_macro", - "arrayvec", - "av1-grain", - "bitstream-io", - "built", - "cfg-if", - "interpolate_name", - "itertools 0.12.1", - "libc", - "libfuzzer-sys", - "log", - "maybe-rayon", - "new_debug_unreachable", - "noop_proc_macro", - "num-derive", - "num-traits", - "once_cell", - "paste", - "profiling", - "rand", - "rand_chacha", - "simd_helpers", - "system-deps", - "thiserror", - "v_frame", - "wasm-bindgen", -] - -[[package]] -name = "ravif" -version = "0.11.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc13288f5ab39e6d7c9d501759712e6969fcc9734220846fc9ed26cae2cc4234" -dependencies = [ - "avif-serialize", - "imgref", - "loop9", - "quick-error", - "rav1e", - "rayon", - "rgb", -] - -[[package]] -name = "raw-cpuid" -version = "10.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c297679cb867470fa8c9f67dbba74a78d78e3e98d7cf2b08d6d71540f797332" -dependencies = [ - "bitflags 1.3.2", -] - -[[package]] -name = "raw-window-handle" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2ff9a1f06a88b01621b7ae906ef0211290d1c8a168a15542486a8f61c0833b9" - -[[package]] -name = "raw-window-handle" -version = "0.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8cc3bcbdb1ddfc11e700e62968e6b4cc9c75bb466464ad28fb61c5b2c964418b" - -[[package]] -name = "rawpointer" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "60a357793950651c4ed0f3f52338f53b2f809f32d83a07f72909fa13e4c6c1e3" - -[[package]] -name = "rayon" -version = "1.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b418a60154510ca1a002a752ca9714984e21e4241e804d32555251faf8b78ffa" -dependencies = [ - "either", - "rayon-core", -] - -[[package]] -name = "rayon-core" -version = "1.12.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1465873a3dfdaa8ae7cb14b4383657caab0b3e8a0aa9ae8e04b044854c8dfce2" -dependencies = [ - "crossbeam-deque", - "crossbeam-utils", -] - -[[package]] -name = "re_analytics" -version = "0.16.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "18d7fe9aa78465a54fa6585fb4eb4b1e300e2b5ed3801b6119091e149978c603" -dependencies = [ - "crossbeam", - "directories-next", - "ehttp", - "re_build_info", - "re_build_tools", - "re_log", - "serde", - "serde_json", - "sha2", - "thiserror", - "time", - "url", - "uuid", - "web-sys", -] - -[[package]] -name = "re_arrow2" -version = "0.17.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1285f33f03e2faf9f77b06c19f32f8c54792a4cbb19df762b9ea70b79e0773d" -dependencies = [ - "ahash", - "arrow-format", - "bytemuck", - "chrono", - "comfy-table", - "dyn-clone", - "either", - "ethnum", - "foreign_vec", - "getrandom", - "hash_hasher", - "hashbrown", - "num-traits", - "rustc_version", - "simdutf8", -] - -[[package]] -name = "re_build_info" -version = "0.16.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e447892e1b6a9640913b9091056206382bebddcfaddac7ab72b9f4b4f8930d1" -dependencies = [ - "serde", -] - -[[package]] -name = "re_build_tools" -version = "0.16.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "027b9b1499d23b230f342c1cc7e5e5c848638212e70cc7bf532bb1627d7b9662" -dependencies = [ - "anyhow", - "cargo_metadata 0.18.1", - "glob", - "sha2", - "time", - "unindent", - "walkdir", -] - -[[package]] -name = "re_crash_handler" -version = "0.16.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "37b370a631a5af1db5b7cc2a80b40ecc536b3479c7c03e3619b3afa5ff4d215c" -dependencies = [ - "backtrace", - "itertools 0.12.1", - "libc", - "parking_lot", - "re_analytics", - "re_build_info", -] - -[[package]] -name = "re_data_loader" -version = "0.16.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "47d39102084b54bd72ba1faa9b9c2b9c0a2cd7afebe9763980f6fdf4da64843e" -dependencies = [ - "ahash", - "anyhow", - "image 0.24.9", - "once_cell", - "parking_lot", - "rayon", - "re_build_info", - "re_build_tools", - "re_log", - "re_log_encoding", - "re_log_types", - "re_smart_channel", - "re_tracing", - "re_types", - "thiserror", - "walkdir", -] - -[[package]] -name = "re_data_source" -version = "0.16.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a98e5da0adf32d43f12cd250bb3102b8902cbd8588d0cb53169d70cf49981dbf" -dependencies = [ - "anyhow", - "itertools 0.12.1", - "rayon", - "re_build_tools", - "re_data_loader", - "re_log", - "re_log_encoding", - "re_log_types", - "re_smart_channel", - "re_tracing", - "re_ws_comms", -] - -[[package]] -name = "re_data_store" -version = "0.16.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "772f3340a2b0d5d73e5c1912e945ed3073f38c3c98ee51878f87f157bacffe5e" -dependencies = [ - "ahash", - "document-features", - "indent", - "itertools 0.12.1", - "nohash-hasher", - "once_cell", - "parking_lot", - "re_arrow2", - "re_format", - "re_format_arrow", - "re_log", - "re_log_types", - "re_tracing", - "re_types_core", - "smallvec", - "thiserror", - "web-time", -] - -[[package]] -name = "re_data_ui" -version = "0.16.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ab07aea1a1be00de24d79a93596b4f7753b33205abfca8c7887ed04ed0e54b6" -dependencies = [ - "ahash", - "anyhow", - "bytemuck", - "egui", - "egui_extras", - "egui_plot", - "image 0.24.9", - "itertools 0.12.1", - "re_data_store", - "re_entity_db", - "re_error", - "re_format", - "re_log", - "re_log_types", - "re_renderer", - "re_smart_channel", - "re_tracing", - "re_types", - "re_types_blueprint", - "re_types_core", - "re_ui", - "re_viewer_context", - "rfd", -] - -[[package]] -name = "re_entity_db" -version = "0.16.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85933b1066c8db3683445f85ea94bfbb5017d40efea28fc9539fd3dc0c548140" -dependencies = [ - "ahash", - "document-features", - "emath", - "getrandom", - "itertools 0.12.1", - "nohash-hasher", - "parking_lot", - "re_build_info", - "re_data_store", - "re_format", - "re_int_histogram", - "re_log", - "re_log_encoding", - "re_log_types", - "re_query", - "re_smart_channel", - "re_tracing", - "re_types_core", - "rmp-serde", - "serde", - "thiserror", - "web-time", -] - -[[package]] -name = "re_error" -version = "0.16.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0a853b403ef6de568c54166eafed03f0a8326d0615026d821fb8d3449cd80f79" - -[[package]] -name = "re_format" -version = "0.16.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e4d4653a2812e973b9c6099f97c9e8a58be11bc3973b260fba7804d1701adbbb" -dependencies = [ - "num-traits", -] - -[[package]] -name = "re_format_arrow" -version = "0.16.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "132ee83f840d088db4e619ea41779c6ad2d7b96bb53fdd670e2a834e146be048" -dependencies = [ - "comfy-table", - "re_arrow2", - "re_tuid", - "re_types_core", -] - -[[package]] -name = "re_int_histogram" -version = "0.16.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a01e90c43c588e43bc0917d6ba315e25424972e91642893f5c84cc162a6f0fe" -dependencies = [ - "smallvec", - "static_assertions", -] - -[[package]] -name = "re_log" -version = "0.16.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfbce8abe38c347da9154b239a7d2ac130065d56b1f94a2679ce931ea5984ac4" -dependencies = [ - "env_logger", - "js-sys", - "log", - "log-once", - "parking_lot", - "tracing", - "wasm-bindgen", -] - -[[package]] -name = "re_log_encoding" -version = "0.16.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d6f1626b2ad9a920cb51178bd62f83666e8d8c16e01f3c1bbb5a0adae224ca77" -dependencies = [ - "ehttp", - "js-sys", - "lz4_flex", - "parking_lot", - "re_build_info", - "re_log", - "re_log_types", - "re_smart_channel", - "re_tracing", - "rmp-serde", - "thiserror", - "wasm-bindgen", - "wasm-bindgen-futures", - "web-sys", - "web-time", -] - -[[package]] -name = "re_log_types" -version = "0.16.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "901d042635863554e7cfd8e953c5e662d951cc1f56adbd85b1c84f0b74c12693" -dependencies = [ - "ahash", - "anyhow", - "backtrace", - "clean-path", - "crossbeam", - "document-features", - "fixed", - "half", - "itertools 0.12.1", - "natord", - "nohash-hasher", - "num-derive", - "num-traits", - "re_arrow2", - "re_build_info", - "re_format", - "re_format_arrow", - "re_log", - "re_string_interner", - "re_tracing", - "re_tuid", - "re_types_core", - "serde", - "serde_bytes", - "similar-asserts", - "smallvec", - "static_assertions", - "thiserror", - "time", - "typenum", - "uuid", - "web-time", -] - -[[package]] -name = "re_memory" -version = "0.16.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e4ef61d6289db630708eed4e86d14abeb070d9774e40b8c9ff0e51765419612" -dependencies = [ - "ahash", - "backtrace", - "emath", - "itertools 0.12.1", - "memory-stats", - "nohash-hasher", - "once_cell", - "parking_lot", - "re_format", - "re_log", - "re_tracing", - "smallvec", - "sysinfo", - "wasm-bindgen", - "web-time", -] - -[[package]] -name = "re_query" -version = "0.16.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94fcd9366540d9026c7cc1058c0d319d18830056aa7aea0911f25290a8cf45e3" -dependencies = [ - "ahash", - "anyhow", - "backtrace", - "indent", - "indexmap", - "itertools 0.12.1", - "nohash-hasher", - "parking_lot", - "paste", - "re_arrow2", - "re_data_store", - "re_error", - "re_format", - "re_log", - "re_log_types", - "re_tracing", - "re_tuid", - "re_types", - "re_types_blueprint", - "re_types_core", - "seq-macro", - "static_assertions", - "thiserror", -] - -[[package]] -name = "re_renderer" -version = "0.16.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9079334f423b2a38d0430db4a98d19554a7fb12b965c5b7905003abcc3bde715" -dependencies = [ - "ahash", - "anyhow", - "bitflags 2.5.0", - "bytemuck", - "cfg-if", - "cfg_aliases 0.2.0", - "clean-path", - "crossbeam", - "document-features", - "ecolor", - "enumset", - "getrandom", - "glam", - "gltf", - "half", - "itertools 0.12.1", - "macaw", - "never", - "notify", - "ordered-float", - "parking_lot", - "pathdiff", - "profiling", - "re_arrow2", - "re_build_tools", - "re_error", - "re_log", - "re_tracing", - "serde", - "slotmap", - "smallvec", - "static_assertions", - "thiserror", - "tinystl", - "tobj", - "type-map", - "walkdir", - "wasm-bindgen-futures", - "wgpu", - "wgpu-core", -] - -[[package]] -name = "re_sdk" -version = "0.16.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "add118305aab6549417923fc062e7c8043da95a6729849ff88b64844868fc0f5" -dependencies = [ - "ahash", - "crossbeam", - "document-features", - "itertools 0.12.1", - "libc", - "once_cell", - "parking_lot", - "re_build_info", - "re_build_tools", - "re_data_loader", - "re_log", - "re_log_encoding", - "re_log_types", - "re_memory", - "re_sdk_comms", - "re_smart_channel", - "re_types_core", - "thiserror", -] - -[[package]] -name = "re_sdk_comms" -version = "0.16.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f8d49df45288c39c8107a2605a4a76a96190a5b728e50d20cfb2100c294eb38" -dependencies = [ - "ahash", - "crossbeam", - "document-features", - "rand", - "re_build_info", - "re_log", - "re_log_encoding", - "re_log_types", - "re_smart_channel", - "thiserror", -] - -[[package]] -name = "re_smart_channel" -version = "0.16.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "387b30502e7b4b9e1c51f778cd99f928ec94076949bb1b24fdb5fc17e05599db" -dependencies = [ - "crossbeam", - "parking_lot", - "re_tracing", - "serde", - "web-time", -] - -[[package]] -name = "re_space_view" -version = "0.16.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "80146ff1d97bd5cffdadbf448c87e40b6f7aa33d781f2988f5a304b317dfc9d0" -dependencies = [ - "egui", - "itertools 0.12.1", - "nohash-hasher", - "re_data_store", - "re_entity_db", - "re_log", - "re_log_types", - "re_query", - "re_tracing", - "re_types", - "re_types_core", - "re_viewer_context", - "slotmap", - "smallvec", -] - -[[package]] -name = "re_space_view_bar_chart" -version = "0.16.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42a3969c950ed465e9ce72ca8774b6bb87bbcc3e9a60906d5dc3b207a0c226d4" -dependencies = [ - "egui", - "egui_plot", - "re_data_store", - "re_entity_db", - "re_log", - "re_log_types", - "re_renderer", - "re_space_view", - "re_tracing", - "re_types", - "re_ui", - "re_viewer_context", -] - -[[package]] -name = "re_space_view_dataframe" -version = "0.16.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93f497b550a3f9f797610638993d3e8f1ca7cd42829b6aa9ead719e91586828b" -dependencies = [ - "egui", - "egui_extras", - "re_data_store", - "re_data_ui", - "re_entity_db", - "re_log_types", - "re_renderer", - "re_tracing", - "re_types_core", - "re_ui", - "re_viewer_context", -] - -[[package]] -name = "re_space_view_spatial" -version = "0.16.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8557a5d1e2bbc1fbec6aba422c39e737a142cd8bdd9c498062e26149a0926da0" -dependencies = [ - "ahash", - "anyhow", - "bitflags 2.5.0", - "bytemuck", - "egui", - "glam", - "itertools 0.12.1", - "macaw", - "nohash-hasher", - "once_cell", - "re_data_store", - "re_data_ui", - "re_entity_db", - "re_error", - "re_format", - "re_log", - "re_log_types", - "re_query", - "re_renderer", - "re_space_view", - "re_tracing", - "re_types", - "re_ui", - "re_viewer_context", - "serde", - "smallvec", - "web-time", -] - -[[package]] -name = "re_space_view_tensor" -version = "0.16.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0493d6f3a9f04d09e86525a0a27b34808b961107f40f0171b50c307fd170c5ff" -dependencies = [ - "ahash", - "anyhow", - "bytemuck", - "egui", - "half", - "ndarray", - "re_data_store", - "re_data_ui", - "re_entity_db", - "re_log", - "re_log_types", - "re_renderer", - "re_space_view", - "re_tracing", - "re_types", - "re_ui", - "re_viewer_context", - "serde", - "thiserror", - "wgpu", -] - -[[package]] -name = "re_space_view_text_document" -version = "0.16.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6dbcf78181db2dc902a996222068af62aa566b87d46cad1004fe11bf20f4feb5" -dependencies = [ - "egui", - "egui_commonmark", - "re_data_store", - "re_log", - "re_renderer", - "re_space_view", - "re_tracing", - "re_types", - "re_ui", - "re_viewer_context", -] - -[[package]] -name = "re_space_view_text_log" -version = "0.16.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a2cb1ecdf9b2d61b0083869fd4fdb102f3f82f6de1549e9eaf7b4ecc087d338" -dependencies = [ - "egui", - "egui_extras", - "itertools 0.12.1", - "re_data_store", - "re_data_ui", - "re_entity_db", - "re_log", - "re_log_types", - "re_query", - "re_renderer", - "re_tracing", - "re_types", - "re_ui", - "re_viewer_context", -] - -[[package]] -name = "re_space_view_time_series" -version = "0.16.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e239413d646fed058addde87fe12f3e3e0b936f549ad7b755675d26430e6ebb" -dependencies = [ - "egui", - "egui_plot", - "itertools 0.12.1", - "rayon", - "re_data_store", - "re_format", - "re_log", - "re_log_types", - "re_query", - "re_renderer", - "re_space_view", - "re_tracing", - "re_types", - "re_ui", - "re_viewer_context", -] - -[[package]] -name = "re_string_interner" -version = "0.16.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e887141123e8acd1190bc26543445ac9d16b5f4777c441e3517e60a9a42e50d4" -dependencies = [ - "ahash", - "nohash-hasher", - "once_cell", - "parking_lot", - "serde", - "static_assertions", -] - -[[package]] -name = "re_time_panel" -version = "0.16.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e3ef1121da399a74d0902a5bc1e368f4da88562d04a307f260d32908c9c5294" -dependencies = [ - "egui", - "itertools 0.12.1", - "re_data_store", - "re_data_ui", - "re_entity_db", - "re_format", - "re_log_types", - "re_tracing", - "re_ui", - "re_viewer_context", - "re_viewport", - "serde", - "vec1", -] - -[[package]] -name = "re_tracing" -version = "0.16.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba54fcb0ef7073475be5734bef0541abac3bfd7ec90ebf8d2c683c97fa769646" -dependencies = [ - "puffin", - "puffin_http", - "re_log", - "rfd", -] - -[[package]] -name = "re_tuid" -version = "0.16.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a35d942cb86ddeefb1ddd2a0a0bfa3f4746e817011fe3587680fb30e5b7a097" -dependencies = [ - "document-features", - "getrandom", - "once_cell", - "serde", - "web-time", -] - -[[package]] -name = "re_types" -version = "0.16.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56b20ac547a5f986ccd0ca90c67c31de1726967b7bf206b3924f533eaf9e8b21" -dependencies = [ - "anyhow", - "array-init", - "bytemuck", - "document-features", - "ecolor", - "egui_plot", - "emath", - "glam", - "half", - "image 0.24.9", - "infer", - "itertools 0.12.1", - "linked-hash-map", - "mime_guess2", - "ndarray", - "nohash-hasher", - "once_cell", - "ply-rs", - "rayon", - "re_arrow2", - "re_build_tools", - "re_log", - "re_tracing", - "re_types_builder", - "re_types_core", - "smallvec", - "thiserror", - "uuid", - "zune-core", - "zune-jpeg", -] - -[[package]] -name = "re_types_blueprint" -version = "0.16.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec9ccf862bb08d34dfca050ad98ea7b625b41f8882e5c7a4e977a38e049a4d68" -dependencies = [ - "array-init", - "bytemuck", - "once_cell", - "re_arrow2", - "re_tracing", - "re_types", - "re_types_core", -] - -[[package]] -name = "re_types_builder" -version = "0.16.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5414034022dfc93fd6d407b8f14f10aeeb6876f3156188ab799c3d158bad86c3" -dependencies = [ - "anyhow", - "camino", - "clang-format", - "convert_case", - "flatbuffers", - "indent", - "itertools 0.12.1", - "prettyplease", - "proc-macro2", - "quote", - "rayon", - "re_arrow2", - "re_build_tools", - "re_error", - "re_log", - "re_tracing", - "rust-format", - "syn 2.0.60", - "tempfile", - "unindent", - "xshell", -] - -[[package]] -name = "re_types_core" -version = "0.16.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "459bd8a42629dcc6ca6b8b7f9ab061b5eab4d1089636c72150124374a029aaab" -dependencies = [ - "anyhow", - "backtrace", - "document-features", - "itertools 0.12.1", - "once_cell", - "re_arrow2", - "re_error", - "re_string_interner", - "re_tracing", - "re_tuid", - "serde", - "smallvec", - "thiserror", -] - -[[package]] -name = "re_ui" -version = "0.16.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b28c505ac74c293d82e5d793c9e038033ee3ca32111390db20329844c6ac742" -dependencies = [ - "eframe", - "egui", - "egui_commonmark", - "egui_extras", - "egui_tiles", - "parking_lot", - "rand", - "re_entity_db", - "re_format", - "re_log", - "re_log_types", - "serde", - "serde_json", - "strum 0.25.0", - "strum_macros 0.25.3", - "sublime_fuzzy", -] - -[[package]] -name = "re_viewer" -version = "0.16.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81270fb9e928656646890a6ac9477ffd8ca07d3286d41ccf239581e0dd796cd2" -dependencies = [ - "ahash", - "anyhow", - "bytemuck", - "cfg-if", - "eframe", - "egui", - "egui-wgpu", - "egui_extras", - "egui_plot", - "egui_tiles", - "ehttp", - "image 0.24.9", - "itertools 0.12.1", - "js-sys", - "once_cell", - "poll-promise", - "re_analytics", - "re_build_info", - "re_build_tools", - "re_data_loader", - "re_data_source", - "re_data_store", - "re_data_ui", - "re_entity_db", - "re_error", - "re_format", - "re_log", - "re_log_encoding", - "re_log_types", - "re_memory", - "re_query", - "re_renderer", - "re_sdk_comms", - "re_smart_channel", - "re_space_view", - "re_space_view_bar_chart", - "re_space_view_dataframe", - "re_space_view_spatial", - "re_space_view_tensor", - "re_space_view_text_document", - "re_space_view_text_log", - "re_space_view_time_series", - "re_time_panel", - "re_tracing", - "re_types", - "re_types_blueprint", - "re_types_core", - "re_ui", - "re_viewer_context", - "re_viewport", - "re_ws_comms", - "rfd", - "ron", - "serde", - "serde_json", - "static_assertions", - "thiserror", - "time", - "wasm-bindgen", - "wasm-bindgen-futures", - "web-sys", - "web-time", - "wgpu", -] - -[[package]] -name = "re_viewer_context" -version = "0.16.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a64f31938e4408a2e4f337ca1a24b16c8e0dd04c2f249005d3f512c6cc6afff7" -dependencies = [ - "ahash", - "anyhow", - "arboard", - "bit-vec", - "bytemuck", - "egui", - "egui-wgpu", - "egui_tiles", - "glam", - "half", - "indexmap", - "itertools 0.12.1", - "macaw", - "ndarray", - "nohash-hasher", - "once_cell", - "parking_lot", - "re_data_source", - "re_data_store", - "re_entity_db", - "re_log", - "re_log_types", - "re_query", - "re_renderer", - "re_smart_channel", - "re_string_interner", - "re_tracing", - "re_types", - "re_ui", - "serde", - "slotmap", - "smallvec", - "thiserror", - "uuid", - "wgpu", -] - -[[package]] -name = "re_viewport" -version = "0.16.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fdcc1dddd32029649181f500e6411ef6d9db29c840afe86330bfd9e04a702aa3" -dependencies = [ - "ahash", - "egui", - "egui_tiles", - "glam", - "image 0.24.9", - "itertools 0.12.1", - "nohash-hasher", - "once_cell", - "rayon", - "re_data_store", - "re_data_ui", - "re_entity_db", - "re_log", - "re_log_types", - "re_renderer", - "re_smart_channel", - "re_space_view", - "re_tracing", - "re_types", - "re_types_blueprint", - "re_types_core", - "re_ui", - "re_viewer_context", - "smallvec", - "static_assertions", -] - -[[package]] -name = "re_web_viewer_server" -version = "0.16.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2dd7e37e51db2eb3304ffcd8982440c9b064d63150940a4801d714ca35126ef2" -dependencies = [ - "document-features", - "re_analytics", - "re_log", - "thiserror", - "tiny_http", -] - -[[package]] -name = "re_ws_comms" -version = "0.16.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "340cc1b1903a4c4752d5cee5c5993d19117cdc40d6de2cce05e6c934c0c99e7a" -dependencies = [ - "anyhow", - "bincode", - "document-features", - "ewebsock", - "re_format", - "re_log", - "re_log_types", - "re_memory", - "re_tracing", - "thiserror", -] - -[[package]] -name = "reborrow" -version = "0.5.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03251193000f4bd3b042892be858ee50e8b3719f2b08e5833ac4353724632430" - -[[package]] -name = "redox_syscall" -version = "0.3.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "567664f262709473930a4bf9e51bf2ebf3348f2e748ccc50dea20646858f8f29" -dependencies = [ - "bitflags 1.3.2", -] - -[[package]] -name = "redox_syscall" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4722d768eff46b75989dd134e5c353f0d6296e5aaa3132e776cbdb56be7731aa" -dependencies = [ - "bitflags 1.3.2", -] - -[[package]] -name = "redox_users" -version = "0.4.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd283d9651eeda4b2a83a43c1c91b266c40fd76ecd39a50a8c630ae69dc72891" -dependencies = [ - "getrandom", - "libredox 0.1.3", - "thiserror", -] - -[[package]] -name = "regex" -version = "1.10.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c117dbdfde9c8308975b6a18d71f3f385c89461f7b3fb054288ecf2a2058ba4c" -dependencies = [ - "aho-corasick", - "memchr", - "regex-automata 0.4.6", - "regex-syntax", -] - -[[package]] -name = "regex-automata" -version = "0.1.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132" - -[[package]] -name = "regex-automata" -version = "0.4.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "86b83b8b9847f9bf95ef68afb0b8e6cdb80f498442f5179a29fad448fcc1eaea" -dependencies = [ - "aho-corasick", - "memchr", - "regex-syntax", -] - -[[package]] -name = "regex-syntax" -version = "0.8.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "adad44e29e4c806119491a7f06f03de4d1af22c3a680dd47f1e6e179439d1f56" - -[[package]] -name = "renderdoc-sys" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19b30a45b0cd0bcca8037f3d0dc3421eaf95327a17cad11964fb8179b4fc4832" - -[[package]] -name = "rerun" -version = "0.16.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3433cf3552d70e2f5d267e943145fcdea1724adbc3b6dc4615e8a5337939b16d" -dependencies = [ - "anyhow", - "document-features", - "env_logger", - "itertools 0.12.1", - "log", - "puffin", - "rayon", - "re_analytics", - "re_build_info", - "re_build_tools", - "re_crash_handler", - "re_entity_db", - "re_format", - "re_log", - "re_log_types", - "re_memory", - "re_sdk", - "re_sdk_comms", - "re_smart_channel", - "re_tracing", - "re_types", - "re_viewer", - "re_web_viewer_server", -] - -[[package]] -name = "rfd" -version = "0.12.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c9e7b57df6e8472152674607f6cc68aa14a748a3157a857a94f516e11aeacc2" -dependencies = [ - "ashpd", - "async-io 1.13.0", - "block", - "dispatch", - "futures-util", - "js-sys", - "log", - "objc", - "objc-foundation", - "objc_id", - "pollster", - "raw-window-handle 0.5.2", - "urlencoding", - "wasm-bindgen", - "wasm-bindgen-futures", - "web-sys", - "windows-sys 0.48.0", -] - -[[package]] -name = "rgb" -version = "0.8.37" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05aaa8004b64fd573fc9d002f4e632d51ad4f026c2b5ba95fcb6c2f32c2c47d8" -dependencies = [ - "bytemuck", -] - -[[package]] -name = "ring" -version = "0.17.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c17fa4cb658e3583423e915b9f3acc01cceaee1860e33d59ebae66adc3a2dc0d" -dependencies = [ - "cc", - "cfg-if", - "getrandom", - "libc", - "spin", - "untrusted", - "windows-sys 0.52.0", -] - -[[package]] -name = "rmp" -version = "0.8.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "228ed7c16fa39782c3b3468e974aec2795e9089153cd08ee2e9aefb3613334c4" -dependencies = [ - "byteorder", - "num-traits", - "paste", -] - -[[package]] -name = "rmp-serde" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "938a142ab806f18b88a97b0dea523d39e0fd730a064b035726adcfc58a8a5188" -dependencies = [ - "byteorder", - "rmp", - "serde", -] - -[[package]] -name = "ron" -version = "0.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b91f7eff05f748767f183df4320a63d6936e9c6107d97c9e6bdd9784f4289c94" -dependencies = [ - "base64 0.21.7", - "bitflags 2.5.0", - "serde", - "serde_derive", -] - -[[package]] -name = "rust-format" -version = "0.3.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "60e7c00b6c3bf5e38a880eec01d7e829d12ca682079f8238a464def3c4b31627" - -[[package]] -name = "rustc-demangle" -version = "0.1.23" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76" - -[[package]] -name = "rustc-hash" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" - -[[package]] -name = "rustc_version" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" -dependencies = [ - "semver", -] - -[[package]] -name = "rustix" -version = "0.37.27" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fea8ca367a3a01fe35e6943c400addf443c0f57670e6ec51196f71a4b8762dd2" -dependencies = [ - "bitflags 1.3.2", - "errno", - "io-lifetimes", - "libc", - "linux-raw-sys 0.3.8", - "windows-sys 0.48.0", -] - -[[package]] -name = "rustix" -version = "0.38.32" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "65e04861e65f21776e67888bfbea442b3642beaa0138fdb1dd7a84a52dffdb89" -dependencies = [ - "bitflags 2.5.0", - "errno", - "libc", - "linux-raw-sys 0.4.13", - "windows-sys 0.52.0", -] - -[[package]] -name = "rustls" -version = "0.22.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf4ef73721ac7bcd79b2b315da7779d8fc09718c6b3d2d1b2d94850eb8c18432" -dependencies = [ - "log", - "ring", - "rustls-pki-types", - "rustls-webpki", - "subtle", - "zeroize", -] - -[[package]] -name = "rustls-pki-types" -version = "1.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ecd36cc4259e3e4514335c4a138c6b43171a8d61d8f5c9348f9fc7529416f247" - -[[package]] -name = "rustls-webpki" -version = "0.102.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "faaa0a62740bedb9b2ef5afa303da42764c012f743917351dc9a237ea1663610" -dependencies = [ - "ring", - "rustls-pki-types", - "untrusted", -] - -[[package]] -name = "rustversion" -version = "1.0.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "80af6f9131f277a45a3fba6ce8e2258037bb0477a67e610d3c1fe046ab31de47" - -[[package]] -name = "ryu" -version = "1.0.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e86697c916019a8588c99b5fac3cead74ec0b4b819707a682fd4d23fa0ce1ba1" - -[[package]] -name = "safetensors" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ced76b22c7fba1162f11a5a75d9d8405264b467a07ae0c9c29be119b9297db9" -dependencies = [ - "serde", - "serde_json", -] - -[[package]] -name = "same-file" -version = "1.0.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" -dependencies = [ - "winapi-util", -] - -[[package]] -name = "scoped-tls" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e1cf6437eb19a8f4a6cc0f7dca544973b0b78843adbfeb3683d1a94a0024a294" - -[[package]] -name = "scopeguard" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" - -[[package]] -name = "semver" -version = "1.0.22" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92d43fe69e652f3df9bdc2b85b2854a0825b86e4fb76bc44d945137d053639ca" -dependencies = [ - "serde", -] - -[[package]] -name = "seq-macro" -version = "0.3.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a3f0bf26fd526d2a95683cd0f87bf103b8539e2ca1ef48ce002d67aad59aa0b4" - -[[package]] -name = "serde" -version = "1.0.198" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9846a40c979031340571da2545a4e5b7c4163bdae79b301d5f86d03979451fcc" -dependencies = [ - "serde_derive", -] - -[[package]] -name = "serde_bytes" -version = "0.11.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b8497c313fd43ab992087548117643f6fcd935cbf36f176ffda0aacf9591734" -dependencies = [ - "serde", -] - -[[package]] -name = "serde_derive" -version = "1.0.198" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e88edab869b01783ba905e7d0153f9fc1a6505a96e4ad3018011eedb838566d9" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.60", -] - -[[package]] -name = "serde_json" -version = "1.0.116" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e17db7126d17feb94eb3fad46bf1a96b034e8aacbc2e775fe81505f8b0b2813" -dependencies = [ - "itoa", - "ryu", - "serde", -] - -[[package]] -name = "serde_repr" -version = "0.1.19" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c64451ba24fc7a6a2d60fc75dd9c83c90903b19028d4eff35e88fc1e86564e9" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.60", -] - -[[package]] -name = "serde_spanned" -version = "0.6.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eb3622f419d1296904700073ea6cc23ad690adbd66f13ea683df73298736f0c1" -dependencies = [ - "serde", -] - -[[package]] -name = "sha1" -version = "0.10.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba" -dependencies = [ - "cfg-if", - "cpufeatures", - "digest", -] - -[[package]] -name = "sha2" -version = "0.10.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8" -dependencies = [ - "cfg-if", - "cpufeatures", - "digest", -] - -[[package]] -name = "signal-hook-registry" -version = "1.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8229b473baa5980ac72ef434c4415e70c4b5e71b423043adb4ba059f89c99a1" -dependencies = [ - "libc", -] - -[[package]] -name = "simd-adler32" -version = "0.3.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d66dc143e6b11c1eddc06d5c423cfc97062865baf299914ab64caa38182078fe" - -[[package]] -name = "simd_helpers" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95890f873bec569a0362c235787f3aca6e1e887302ba4840839bcc6459c42da6" -dependencies = [ - "quote", -] - -[[package]] -name = "simdutf8" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f27f6278552951f1f2b8cf9da965d10969b2efdea95a6ec47987ab46edfe263a" - -[[package]] -name = "similar" -version = "2.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa42c91313f1d05da9b26f267f931cf178d4aba455b4c4622dd7355eb80c6640" -dependencies = [ - "bstr", - "unicode-segmentation", -] - -[[package]] -name = "similar-asserts" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e041bb827d1bfca18f213411d51b665309f1afb37a04a5d1464530e13779fc0f" -dependencies = [ - "console", - "similar", -] - -[[package]] -name = "skeptic" -version = "0.13.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "16d23b015676c90a0f01c197bfdc786c20342c73a0afdda9025adb0bc42940a8" -dependencies = [ - "bytecount", - "cargo_metadata 0.14.2", - "error-chain", - "glob", - "pulldown-cmark 0.9.6", - "tempfile", - "walkdir", -] - -[[package]] -name = "slab" -version = "0.4.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" -dependencies = [ - "autocfg", -] - -[[package]] -name = "slotmap" -version = "1.0.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dbff4acf519f630b3a3ddcfaea6c06b42174d9a44bc70c620e9ed1649d58b82a" -dependencies = [ - "serde", - "version_check", -] - -[[package]] -name = "smallvec" -version = "1.13.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" -dependencies = [ - "serde", -] - -[[package]] -name = "smithay-client-toolkit" -version = "0.18.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "922fd3eeab3bd820d76537ce8f582b1cf951eceb5475c28500c7457d9d17f53a" -dependencies = [ - "bitflags 2.5.0", - "calloop", - "calloop-wayland-source", - "cursor-icon", - "libc", - "log", - "memmap2", - "rustix 0.38.32", - "thiserror", - "wayland-backend", - "wayland-client", - "wayland-csd-frame", - "wayland-cursor", - "wayland-protocols", - "wayland-protocols-wlr", - "wayland-scanner", - "xkeysym", -] - -[[package]] -name = "smithay-clipboard" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c091e7354ea8059d6ad99eace06dd13ddeedbb0ac72d40a9a6e7ff790525882d" -dependencies = [ - "libc", - "smithay-client-toolkit", - "wayland-backend", -] - -[[package]] -name = "smol_str" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6845563ada680337a52d43bb0b29f396f2d911616f6573012645b9e3d048a49" -dependencies = [ - "serde", -] - -[[package]] -name = "socket2" -version = "0.4.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f7916fc008ca5542385b89a3d3ce689953c143e9304a9bf8beec1de48994c0d" -dependencies = [ - "libc", - "winapi", -] - -[[package]] -name = "socket2" -version = "0.5.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05ffd9c0a93b7543e062e759284fcf5f5e3b098501104bfbdde4d404db792871" -dependencies = [ - "libc", - "windows-sys 0.52.0", -] - -[[package]] -name = "spin" -version = "0.9.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" -dependencies = [ - "lock_api", -] - -[[package]] -name = "spirv" -version = "0.3.0+sdk-1.3.268.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eda41003dc44290527a59b13432d4a0379379fa074b70174882adfbdfd917844" -dependencies = [ - "bitflags 2.5.0", -] - -[[package]] -name = "stable_deref_trait" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" - -[[package]] -name = "static_assertions" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" - -[[package]] -name = "strsim" -version = "0.11.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" - -[[package]] -name = "strum" -version = "0.25.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "290d54ea6f91c969195bdbcd7442c8c2a2ba87da8bf60a7ee86a235d4bc1e125" -dependencies = [ - "strum_macros 0.25.3", -] - -[[package]] -name = "strum" -version = "0.26.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d8cec3501a5194c432b2b7976db6b7d10ec95c253208b45f83f7136aa985e29" - -[[package]] -name = "strum_macros" -version = "0.25.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23dc1fa9ac9c169a78ba62f0b841814b7abae11bdd047b9c58f893439e309ea0" -dependencies = [ - "heck 0.4.1", - "proc-macro2", - "quote", - "rustversion", - "syn 2.0.60", -] - -[[package]] -name = "strum_macros" -version = "0.26.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c6cf59daf282c0a494ba14fd21610a0325f9f90ec9d1231dea26bcb1d696c946" -dependencies = [ - "heck 0.4.1", - "proc-macro2", - "quote", - "rustversion", - "syn 2.0.60", -] - -[[package]] -name = "sublime_fuzzy" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa7986063f7c0ab374407e586d7048a3d5aac94f103f751088bf398e07cd5400" - -[[package]] -name = "subtle" -version = "2.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81cdd64d312baedb58e21336b31bc043b77e01cc99033ce76ef539f78e965ebc" - -[[package]] -name = "syn" -version = "1.0.109" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" -dependencies = [ - "proc-macro2", - "quote", - "unicode-ident", -] - -[[package]] -name = "syn" -version = "2.0.60" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "909518bc7b1c9b779f1bbf07f2929d35af9f0f37e47c6e9ef7f9dddc1e1821f3" -dependencies = [ - "proc-macro2", - "quote", - "unicode-ident", -] - -[[package]] -name = "synstructure" -version = "0.13.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8af7666ab7b6390ab78131fb5b0fce11d6b7a6951602017c35fa82800708971" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.60", -] - -[[package]] -name = "sysctl" -version = "0.5.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec7dddc5f0fee506baf8b9fdb989e242f17e4b11c61dfbb0635b705217199eea" -dependencies = [ - "bitflags 2.5.0", - "byteorder", - "enum-as-inner", - "libc", - "thiserror", - "walkdir", -] - -[[package]] -name = "sysinfo" -version = "0.30.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87341a165d73787554941cd5ef55ad728011566fe714e987d1b976c15dbc3a83" -dependencies = [ - "cfg-if", - "core-foundation-sys", - "libc", - "ntapi", - "once_cell", - "windows 0.52.0", -] - -[[package]] -name = "system-deps" -version = "6.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a3e535eb8dded36d55ec13eddacd30dec501792ff23a0b1682c38601b8cf2349" -dependencies = [ - "cfg-expr", - "heck 0.5.0", - "pkg-config", - "toml", - "version-compare", -] - -[[package]] -name = "target-lexicon" -version = "0.12.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e1fc403891a21bcfb7c37834ba66a547a8f402146eba7265b5a6d88059c9ff2f" - -[[package]] -name = "tempfile" -version = "3.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85b77fafb263dd9d05cbeac119526425676db3784113aa9295c88498cbf8bff1" -dependencies = [ - "cfg-if", - "fastrand 2.0.2", - "rustix 0.38.32", - "windows-sys 0.52.0", -] - -[[package]] -name = "termcolor" -version = "1.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06794f8f6c5c898b3275aebefa6b8a1cb24cd2c6c79397ab15774837a0bc5755" -dependencies = [ - "winapi-util", -] - -[[package]] -name = "thiserror" -version = "1.0.59" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0126ad08bff79f29fc3ae6a55cc72352056dfff61e3ff8bb7129476d44b23aa" -dependencies = [ - "thiserror-impl", -] - -[[package]] -name = "thiserror-impl" -version = "1.0.59" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d1cd413b5d558b4c5bf3680e324a6fa5014e7b7c067a51e69dbdf47eb7148b66" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.60", -] - -[[package]] -name = "tiff" -version = "0.9.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba1310fcea54c6a9a4fd1aad794ecc02c31682f6bfbecdf460bf19533eed1e3e" -dependencies = [ - "flate2", - "jpeg-decoder", - "weezl", -] - -[[package]] -name = "time" -version = "0.3.36" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5dfd88e563464686c916c7e46e623e520ddc6d79fa6641390f2e3fa86e83e885" -dependencies = [ - "deranged", - "itoa", - "js-sys", - "libc", - "num-conv", - "num_threads", - "powerfmt", - "serde", - "time-core", - "time-macros", -] - -[[package]] -name = "time-core" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3" - -[[package]] -name = "time-macros" -version = "0.2.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f252a68540fde3a3877aeea552b832b40ab9a69e318efd078774a01ddee1ccf" -dependencies = [ - "num-conv", - "time-core", -] - -[[package]] -name = "tiny_http" -version = "0.12.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "389915df6413a2e74fb181895f933386023c71110878cd0825588928e64cdc82" -dependencies = [ - "ascii", - "chunked_transfer", - "httpdate", - "log", -] - -[[package]] -name = "tinystl" -version = "0.0.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fdbcdda2f86a57b89b5d9ac17cd4c9f3917ec8edcde403badf3d992d2947af2a" -dependencies = [ - "bytemuck", -] - -[[package]] -name = "tinytemplate" -version = "1.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be4d6b5f19ff7664e8c98d03e2139cb510db9b0a60b55f8e8709b689d939b6bc" -dependencies = [ - "serde", - "serde_json", -] - -[[package]] -name = "tinyvec" -version = "1.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50" -dependencies = [ - "tinyvec_macros", -] - -[[package]] -name = "tinyvec_macros" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" - -[[package]] -name = "tobj" -version = "4.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3bd4ba05f29e4c65b6c0c11a58b6465ffa820bac890d76ad407b4e81d8372e8" -dependencies = [ - "ahash", -] - -[[package]] -name = "tokio" -version = "1.37.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1adbebffeca75fcfd058afa480fb6c0b81e165a0323f9c9d39c9697e37c46787" -dependencies = [ - "backtrace", - "bytes", - "libc", - "mio", - "num_cpus", - "parking_lot", - "pin-project-lite", - "signal-hook-registry", - "socket2 0.5.6", - "tokio-macros", - "windows-sys 0.48.0", -] - -[[package]] -name = "tokio-macros" -version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b8a1e28f2deaa14e508979454cb3a223b10b938b45af148bc0986de36f1923b" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.60", -] - -[[package]] -name = "toml" -version = "0.8.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e9dd1545e8208b4a5af1aa9bbd0b4cf7e9ea08fabc5d0a5c67fcaafa17433aa3" -dependencies = [ - "serde", - "serde_spanned", - "toml_datetime", - "toml_edit 0.22.12", -] - -[[package]] -name = "toml_datetime" -version = "0.6.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3550f4e9685620ac18a50ed434eb3aec30db8ba93b0287467bca5826ea25baf1" -dependencies = [ - "serde", -] - -[[package]] -name = "toml_edit" -version = "0.19.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421" -dependencies = [ - "indexmap", - "toml_datetime", - "winnow 0.5.40", -] - -[[package]] -name = "toml_edit" -version = "0.21.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a8534fd7f78b5405e860340ad6575217ce99f38d4d5c8f2442cb5ecb50090e1" -dependencies = [ - "indexmap", - "toml_datetime", - "winnow 0.5.40", -] - -[[package]] -name = "toml_edit" -version = "0.22.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3328d4f68a705b2a4498da1d580585d39a6510f98318a2cec3018a7ec61ddef" -dependencies = [ - "indexmap", - "serde", - "serde_spanned", - "toml_datetime", - "winnow 0.6.6", -] - -[[package]] -name = "tracing" -version = "0.1.40" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef" -dependencies = [ - "log", - "pin-project-lite", - "tracing-attributes", - "tracing-core", -] - -[[package]] -name = "tracing-attributes" -version = "0.1.27" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.60", -] - -[[package]] -name = "tracing-core" -version = "0.1.32" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54" -dependencies = [ - "once_cell", -] - -[[package]] -name = "ttf-parser" -version = "0.20.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17f77d76d837a7830fe1d4f12b7b4ba4192c1888001c7164257e4bc6d21d96b4" - -[[package]] -name = "tungstenite" -version = "0.21.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ef1a641ea34f399a848dea702823bbecfb4c486f911735368f1f137cb8257e1" -dependencies = [ - "byteorder", - "bytes", - "data-encoding", - "http", - "httparse", - "log", - "rand", - "sha1", - "thiserror", - "url", - "utf-8", -] - -[[package]] -name = "turbojpeg" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "291e4517c03ca0b7a6fc7b69a9c5a0034e268de7b5a4ddf21d26dcc4c9cbadaa" -dependencies = [ - "libc", - "thiserror", - "turbojpeg-sys", -] - -[[package]] -name = "turbojpeg-sys" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3fa6daade3b979fb7454cce5ebcb9772ce7a1cf476ea27ed20ed06e13d9bc983" -dependencies = [ - "anyhow", - "cmake", - "libc", - "pkg-config", -] - -[[package]] -name = "twox-hash" -version = "1.6.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97fee6b57c6a41524a810daee9286c02d7752c4253064d0b05472833a438f675" -dependencies = [ - "cfg-if", - "static_assertions", -] - -[[package]] -name = "type-map" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "deb68604048ff8fa93347f02441e4487594adc20bb8a084f9e564d2b827a0a9f" -dependencies = [ - "rustc-hash", -] - -[[package]] -name = "typenum" -version = "1.17.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" - -[[package]] -name = "uds_windows" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89daebc3e6fd160ac4aa9fc8b3bf71e1f74fbf92367ae71fb83a037e8bf164b9" -dependencies = [ - "memoffset 0.9.1", - "tempfile", - "winapi", -] - -[[package]] -name = "unicase" -version = "2.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f7d2d4dafb69621809a81864c9c1b864479e1235c0dd4e199924b9742439ed89" -dependencies = [ - "version_check", -] - -[[package]] -name = "unicode-bidi" -version = "0.3.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08f95100a766bf4f8f28f90d77e0a5461bbdb219042e7679bebe79004fed8d75" - -[[package]] -name = "unicode-ident" -version = "1.0.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" - -[[package]] -name = "unicode-normalization" -version = "0.1.23" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a56d1686db2308d901306f92a263857ef59ea39678a5458e7cb17f01415101f5" -dependencies = [ - "tinyvec", -] - -[[package]] -name = "unicode-segmentation" -version = "1.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d4c87d22b6e3f4a18d4d40ef354e97c90fcb14dd91d7dc0aa9d8a1172ebf7202" - -[[package]] -name = "unicode-width" -version = "0.1.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e51733f11c9c4f72aa0c160008246859e340b00807569a0da0e7a1079b27ba85" - -[[package]] -name = "unicode-xid" -version = "0.2.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f962df74c8c05a667b5ee8bcf162993134c104e96440b663c8daa176dc772d8c" - -[[package]] -name = "unindent" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c7de7d73e1754487cb58364ee906a499937a0dfabd86bcb980fa99ec8c8fa2ce" - -[[package]] -name = "untrusted" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" - -[[package]] -name = "ureq" -version = "2.9.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "11f214ce18d8b2cbe84ed3aa6486ed3f5b285cf8d8fbdbce9f3f767a724adc35" -dependencies = [ - "base64 0.21.7", - "flate2", - "log", - "once_cell", - "rustls", - "rustls-pki-types", - "rustls-webpki", - "url", - "webpki-roots", -] - -[[package]] -name = "url" -version = "2.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "31e6302e3bb753d46e83516cae55ae196fc0c309407cf11ab35cc51a4c2a4633" -dependencies = [ - "form_urlencoded", - "idna", - "percent-encoding", - "serde", -] - -[[package]] -name = "urlencoding" -version = "2.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "daf8dba3b7eb870caf1ddeed7bc9d2a049f3cfdfae7cb521b087cc33ae4c49da" - -[[package]] -name = "utf-8" -version = "0.7.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9" - -[[package]] -name = "utf8parse" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "711b9620af191e0cdc7468a8d14e709c3dcdb115b36f838e601583af800a370a" - -[[package]] -name = "uuid" -version = "1.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a183cf7feeba97b4dd1c0d46788634f6221d87fa961b305bed08c851829efcc0" -dependencies = [ - "getrandom", - "serde", - "wasm-bindgen", -] - -[[package]] -name = "v_frame" -version = "0.3.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d6f32aaa24bacd11e488aa9ba66369c7cd514885742c9fe08cfe85884db3e92b" -dependencies = [ - "aligned-vec", - "num-traits", - "wasm-bindgen", -] - -[[package]] -name = "vec1" -version = "1.12.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ffb60dcfffc189bfd4e2a81333c268619fee9db53da71bce2bcbd8e129c56936" - -[[package]] -name = "version-compare" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "852e951cb7832cb45cb1169900d19760cfa39b82bc0ea9c0e5a14ae88411c98b" - -[[package]] -name = "version_check" -version = "0.9.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" - -[[package]] -name = "waker-fn" -version = "1.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3c4517f54858c779bbcbf228f4fca63d121bf85fbecb2dc578cdf4a39395690" - -[[package]] -name = "walkdir" -version = "2.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "29790946404f91d9c5d06f9874efddea1dc06c5efe94541a7d6863108e3a5e4b" -dependencies = [ - "same-file", - "winapi-util", -] - -[[package]] -name = "wasi" -version = "0.11.0+wasi-snapshot-preview1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" - -[[package]] -name = "wasm-bindgen" -version = "0.2.92" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4be2531df63900aeb2bca0daaaddec08491ee64ceecbee5076636a3b026795a8" -dependencies = [ - "cfg-if", - "wasm-bindgen-macro", -] - -[[package]] -name = "wasm-bindgen-backend" -version = "0.2.92" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "614d787b966d3989fa7bb98a654e369c762374fd3213d212cfc0251257e747da" -dependencies = [ - "bumpalo", - "log", - "once_cell", - "proc-macro2", - "quote", - "syn 2.0.60", - "wasm-bindgen-shared", -] - -[[package]] -name = "wasm-bindgen-futures" -version = "0.4.42" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76bc14366121efc8dbb487ab05bcc9d346b3b5ec0eaa76e46594cabbe51762c0" -dependencies = [ - "cfg-if", - "js-sys", - "wasm-bindgen", - "web-sys", -] - -[[package]] -name = "wasm-bindgen-macro" -version = "0.2.92" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1f8823de937b71b9460c0c34e25f3da88250760bec0ebac694b49997550d726" -dependencies = [ - "quote", - "wasm-bindgen-macro-support", -] - -[[package]] -name = "wasm-bindgen-macro-support" -version = "0.2.92" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e94f17b526d0a461a191c78ea52bbce64071ed5c04c9ffe424dcb38f74171bb7" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.60", - "wasm-bindgen-backend", - "wasm-bindgen-shared", -] - -[[package]] -name = "wasm-bindgen-shared" -version = "0.2.92" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af190c94f2773fdb3729c55b007a722abb5384da03bc0986df4c289bf5567e96" - -[[package]] -name = "wasm-streams" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b65dc4c90b63b118468cf747d8bf3566c1913ef60be765b5730ead9e0a3ba129" -dependencies = [ - "futures-util", - "js-sys", - "wasm-bindgen", - "wasm-bindgen-futures", - "web-sys", -] - -[[package]] -name = "wayland-backend" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d50fa61ce90d76474c87f5fc002828d81b32677340112b4ef08079a9d459a40" -dependencies = [ - "cc", - "downcast-rs", - "rustix 0.38.32", - "scoped-tls", - "smallvec", - "wayland-sys", -] - -[[package]] -name = "wayland-client" -version = "0.31.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "82fb96ee935c2cea6668ccb470fb7771f6215d1691746c2d896b447a00ad3f1f" -dependencies = [ - "bitflags 2.5.0", - "rustix 0.38.32", - "wayland-backend", - "wayland-scanner", -] - -[[package]] -name = "wayland-csd-frame" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "625c5029dbd43d25e6aa9615e88b829a5cad13b2819c4ae129fdbb7c31ab4c7e" -dependencies = [ - "bitflags 2.5.0", - "cursor-icon", - "wayland-backend", -] - -[[package]] -name = "wayland-cursor" -version = "0.31.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "71ce5fa868dd13d11a0d04c5e2e65726d0897be8de247c0c5a65886e283231ba" -dependencies = [ - "rustix 0.38.32", - "wayland-client", - "xcursor", -] - -[[package]] -name = "wayland-protocols" -version = "0.31.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f81f365b8b4a97f422ac0e8737c438024b5951734506b0e1d775c73030561f4" -dependencies = [ - "bitflags 2.5.0", - "wayland-backend", - "wayland-client", - "wayland-scanner", -] - -[[package]] -name = "wayland-protocols-plasma" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23803551115ff9ea9bce586860c5c5a971e360825a0309264102a9495a5ff479" -dependencies = [ - "bitflags 2.5.0", - "wayland-backend", - "wayland-client", - "wayland-protocols", - "wayland-scanner", -] - -[[package]] -name = "wayland-protocols-wlr" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad1f61b76b6c2d8742e10f9ba5c3737f6530b4c243132c2a2ccc8aa96fe25cd6" -dependencies = [ - "bitflags 2.5.0", - "wayland-backend", - "wayland-client", - "wayland-protocols", - "wayland-scanner", -] - -[[package]] -name = "wayland-scanner" -version = "0.31.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "63b3a62929287001986fb58c789dce9b67604a397c15c611ad9f747300b6c283" -dependencies = [ - "proc-macro2", - "quick-xml", - "quote", -] - -[[package]] -name = "wayland-sys" -version = "0.31.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "15a0c8eaff5216d07f226cb7a549159267f3467b289d9a2e52fd3ef5aae2b7af" -dependencies = [ - "dlib", - "log", - "once_cell", - "pkg-config", -] - -[[package]] -name = "web-sys" -version = "0.3.67" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "58cd2333b6e0be7a39605f0e255892fd7418a682d8da8fe042fe25128794d2ed" -dependencies = [ - "js-sys", - "wasm-bindgen", -] - -[[package]] -name = "web-time" -version = "0.2.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa30049b1c872b72c89866d458eae9f20380ab280ffd1b1e18df2d3e2d98cfe0" -dependencies = [ - "js-sys", - "wasm-bindgen", -] - -[[package]] -name = "webbrowser" -version = "0.8.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db67ae75a9405634f5882791678772c94ff5f16a66535aae186e26aa0841fc8b" -dependencies = [ - "core-foundation", - "home", - "jni", - "log", - "ndk-context", - "objc", - "raw-window-handle 0.5.2", - "url", - "web-sys", -] - -[[package]] -name = "webpki-roots" -version = "0.26.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b3de34ae270483955a94f4b21bdaaeb83d508bb84a01435f393818edb0012009" -dependencies = [ - "rustls-pki-types", -] - -[[package]] -name = "weezl" -version = "0.1.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53a85b86a771b1c87058196170769dd264f66c0782acf1ae6cc51bfd64b39082" - -[[package]] -name = "wgpu" -version = "0.19.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cbd7311dbd2abcfebaabf1841a2824ed7c8be443a0f29166e5d3c6a53a762c01" -dependencies = [ - "arrayvec", - "cfg-if", - "cfg_aliases 0.1.1", - "js-sys", - "log", - "naga", - "parking_lot", - "profiling", - "raw-window-handle 0.6.1", - "smallvec", - "static_assertions", - "wasm-bindgen", - "wasm-bindgen-futures", - "web-sys", - "wgpu-core", - "wgpu-hal", - "wgpu-types", -] - -[[package]] -name = "wgpu-core" -version = "0.19.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28b94525fc99ba9e5c9a9e24764f2bc29bad0911a7446c12f446a8277369bf3a" -dependencies = [ - "arrayvec", - "bit-vec", - "bitflags 2.5.0", - "cfg_aliases 0.1.1", - "codespan-reporting", - "indexmap", - "log", - "naga", - "once_cell", - "parking_lot", - "profiling", - "raw-window-handle 0.6.1", - "rustc-hash", - "smallvec", - "thiserror", - "web-sys", - "wgpu-hal", - "wgpu-types", -] - -[[package]] -name = "wgpu-hal" -version = "0.19.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc1a4924366df7ab41a5d8546d6534f1f33231aa5b3f72b9930e300f254e39c3" -dependencies = [ - "android_system_properties", - "arrayvec", - "ash", - "bitflags 2.5.0", - "block", - "cfg_aliases 0.1.1", - "core-graphics-types", - "glow", - "glutin_wgl_sys", - "gpu-alloc", - "gpu-allocator", - "gpu-descriptor", - "hassle-rs", - "js-sys", - "khronos-egl", - "libc", - "libloading 0.8.3", - "log", - "metal", - "naga", - "ndk-sys", - "objc", - "once_cell", - "parking_lot", - "profiling", - "raw-window-handle 0.6.1", - "renderdoc-sys", - "rustc-hash", - "smallvec", - "thiserror", - "wasm-bindgen", - "web-sys", - "wgpu-types", - "winapi", -] - -[[package]] -name = "wgpu-types" -version = "0.19.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b671ff9fb03f78b46ff176494ee1ebe7d603393f42664be55b64dc8d53969805" -dependencies = [ - "bitflags 2.5.0", - "js-sys", - "web-sys", -] - -[[package]] -name = "widestring" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7219d36b6eac893fa81e84ebe06485e7dcbb616177469b142df14f1f4deb1311" - -[[package]] -name = "winapi" -version = "0.3.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" -dependencies = [ - "winapi-i686-pc-windows-gnu", - "winapi-x86_64-pc-windows-gnu", -] - -[[package]] -name = "winapi-i686-pc-windows-gnu" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" - -[[package]] -name = "winapi-util" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f29e6f9198ba0d26b4c9f07dbe6f9ed633e1f3d5b8b414090084349e46a52596" -dependencies = [ - "winapi", -] - -[[package]] -name = "winapi-x86_64-pc-windows-gnu" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" - -[[package]] -name = "windows" -version = "0.48.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e686886bc078bc1b0b600cac0147aadb815089b6e4da64016cbd754b6342700f" -dependencies = [ - "windows-implement", - "windows-interface", - "windows-targets 0.48.5", -] - -[[package]] -name = "windows" -version = "0.52.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e48a53791691ab099e5e2ad123536d0fff50652600abaf43bbf952894110d0be" -dependencies = [ - "windows-core", - "windows-targets 0.52.5", -] - -[[package]] -name = "windows-core" -version = "0.52.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9" -dependencies = [ - "windows-targets 0.52.5", -] - -[[package]] -name = "windows-implement" -version = "0.48.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e2ee588991b9e7e6c8338edf3333fbe4da35dc72092643958ebb43f0ab2c49c" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "windows-interface" -version = "0.48.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6fb8df20c9bcaa8ad6ab513f7b40104840c8867d5751126e4df3b08388d0cc7" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "windows-sys" -version = "0.45.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0" -dependencies = [ - "windows-targets 0.42.2", -] - -[[package]] -name = "windows-sys" -version = "0.48.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" -dependencies = [ - "windows-targets 0.48.5", -] - -[[package]] -name = "windows-sys" -version = "0.52.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" -dependencies = [ - "windows-targets 0.52.5", -] - -[[package]] -name = "windows-targets" -version = "0.42.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071" -dependencies = [ - "windows_aarch64_gnullvm 0.42.2", - "windows_aarch64_msvc 0.42.2", - "windows_i686_gnu 0.42.2", - "windows_i686_msvc 0.42.2", - "windows_x86_64_gnu 0.42.2", - "windows_x86_64_gnullvm 0.42.2", - "windows_x86_64_msvc 0.42.2", -] - -[[package]] -name = "windows-targets" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" -dependencies = [ - "windows_aarch64_gnullvm 0.48.5", - "windows_aarch64_msvc 0.48.5", - "windows_i686_gnu 0.48.5", - "windows_i686_msvc 0.48.5", - "windows_x86_64_gnu 0.48.5", - "windows_x86_64_gnullvm 0.48.5", - "windows_x86_64_msvc 0.48.5", -] - -[[package]] -name = "windows-targets" -version = "0.52.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f0713a46559409d202e70e28227288446bf7841d3211583a4b53e3f6d96e7eb" -dependencies = [ - "windows_aarch64_gnullvm 0.52.5", - "windows_aarch64_msvc 0.52.5", - "windows_i686_gnu 0.52.5", - "windows_i686_gnullvm", - "windows_i686_msvc 0.52.5", - "windows_x86_64_gnu 0.52.5", - "windows_x86_64_gnullvm 0.52.5", - "windows_x86_64_msvc 0.52.5", -] - -[[package]] -name = "windows_aarch64_gnullvm" -version = "0.42.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8" - -[[package]] -name = "windows_aarch64_gnullvm" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" - -[[package]] -name = "windows_aarch64_gnullvm" -version = "0.52.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7088eed71e8b8dda258ecc8bac5fb1153c5cffaf2578fc8ff5d61e23578d3263" - -[[package]] -name = "windows_aarch64_msvc" -version = "0.42.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43" - -[[package]] -name = "windows_aarch64_msvc" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" - -[[package]] -name = "windows_aarch64_msvc" -version = "0.52.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9985fd1504e250c615ca5f281c3f7a6da76213ebd5ccc9561496568a2752afb6" - -[[package]] -name = "windows_i686_gnu" -version = "0.42.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f" - -[[package]] -name = "windows_i686_gnu" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" - -[[package]] -name = "windows_i686_gnu" -version = "0.52.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "88ba073cf16d5372720ec942a8ccbf61626074c6d4dd2e745299726ce8b89670" - -[[package]] -name = "windows_i686_gnullvm" -version = "0.52.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87f4261229030a858f36b459e748ae97545d6f1ec60e5e0d6a3d32e0dc232ee9" - -[[package]] -name = "windows_i686_msvc" -version = "0.42.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060" - -[[package]] -name = "windows_i686_msvc" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" - -[[package]] -name = "windows_i686_msvc" -version = "0.52.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db3c2bf3d13d5b658be73463284eaf12830ac9a26a90c717b7f771dfe97487bf" - -[[package]] -name = "windows_x86_64_gnu" -version = "0.42.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36" - -[[package]] -name = "windows_x86_64_gnu" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" - -[[package]] -name = "windows_x86_64_gnu" -version = "0.52.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e4246f76bdeff09eb48875a0fd3e2af6aada79d409d33011886d3e1581517d9" - -[[package]] -name = "windows_x86_64_gnullvm" -version = "0.42.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3" - -[[package]] -name = "windows_x86_64_gnullvm" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" - -[[package]] -name = "windows_x86_64_gnullvm" -version = "0.52.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "852298e482cd67c356ddd9570386e2862b5673c85bd5f88df9ab6802b334c596" - -[[package]] -name = "windows_x86_64_msvc" -version = "0.42.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0" - -[[package]] -name = "windows_x86_64_msvc" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" - -[[package]] -name = "windows_x86_64_msvc" -version = "0.52.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bec47e5bfd1bff0eeaf6d8b485cc1074891a197ab4225d504cb7a1ab88b02bf0" - -[[package]] -name = "winit" -version = "0.29.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d59ad965a635657faf09c8f062badd885748428933dad8e8bdd64064d92e5ca" -dependencies = [ - "ahash", - "android-activity", - "atomic-waker", - "bitflags 2.5.0", - "bytemuck", - "calloop", - "cfg_aliases 0.1.1", - "core-foundation", - "core-graphics", - "cursor-icon", - "icrate", - "js-sys", - "libc", - "log", - "memmap2", - "ndk", - "ndk-sys", - "objc2 0.4.1", - "once_cell", - "orbclient", - "percent-encoding", - "raw-window-handle 0.6.1", - "redox_syscall 0.3.5", - "rustix 0.38.32", - "smithay-client-toolkit", - "smol_str", - "unicode-segmentation", - "wasm-bindgen", - "wasm-bindgen-futures", - "wayland-backend", - "wayland-client", - "wayland-protocols", - "wayland-protocols-plasma", - "web-sys", - "web-time", - "windows-sys 0.48.0", - "x11-dl", - "x11rb", - "xkbcommon-dl", -] - -[[package]] -name = "winnow" -version = "0.5.40" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f593a95398737aeed53e489c785df13f3618e41dbcd6718c6addbf1395aa6876" -dependencies = [ - "memchr", -] - -[[package]] -name = "winnow" -version = "0.6.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0c976aaaa0e1f90dbb21e9587cdaf1d9679a1cde8875c0d6bd83ab96a208352" -dependencies = [ - "memchr", -] - -[[package]] -name = "x11-dl" -version = "2.21.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38735924fedd5314a6e548792904ed8c6de6636285cb9fec04d5b1db85c1516f" -dependencies = [ - "libc", - "once_cell", - "pkg-config", -] - -[[package]] -name = "x11rb" -version = "0.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8f25ead8c7e4cba123243a6367da5d3990e0d3affa708ea19dce96356bd9f1a" -dependencies = [ - "as-raw-xcb-connection", - "gethostname", - "libc", - "libloading 0.8.3", - "once_cell", - "rustix 0.38.32", - "x11rb-protocol", -] - -[[package]] -name = "x11rb-protocol" -version = "0.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e63e71c4b8bd9ffec2c963173a4dc4cbde9ee96961d4fcb4429db9929b606c34" - -[[package]] -name = "xcursor" -version = "0.3.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a0ccd7b4a5345edfcd0c3535718a4e9ff7798ffc536bb5b5a0e26ff84732911" - -[[package]] -name = "xdg-home" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "21e5a325c3cb8398ad6cf859c1135b25dd29e186679cf2da7581d9679f63b38e" -dependencies = [ - "libc", - "winapi", -] - -[[package]] -name = "xkbcommon-dl" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d039de8032a9a8856a6be89cea3e5d12fdd82306ab7c94d74e6deab2460651c5" -dependencies = [ - "bitflags 2.5.0", - "dlib", - "log", - "once_cell", - "xkeysym", -] - -[[package]] -name = "xkeysym" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "054a8e68b76250b253f671d1268cb7f1ae089ec35e195b2efb2a4e9a836d0621" - -[[package]] -name = "xml-rs" -version = "0.8.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "791978798f0597cfc70478424c2b4fdc2b7a8024aaff78497ef00f24ef674193" - -[[package]] -name = "xshell" -version = "0.2.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6db0ab86eae739efd1b054a8d3d16041914030ac4e01cd1dca0cf252fd8b6437" -dependencies = [ - "xshell-macros", -] - -[[package]] -name = "xshell-macros" -version = "0.2.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d422e8e38ec76e2f06ee439ccc765e9c6a9638b9e7c9f2e8255e4d41e8bd852" - -[[package]] -name = "yoke" -version = "0.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "65e71b2e4f287f467794c671e2b8f8a5f3716b3c829079a1c44740148eff07e4" -dependencies = [ - "serde", - "stable_deref_trait", - "yoke-derive", - "zerofrom", -] - -[[package]] -name = "yoke-derive" -version = "0.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e6936f0cce458098a201c245a11bef556c6a0181129c7034d10d76d1ec3a2b8" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.60", - "synstructure", -] - -[[package]] -name = "zbus" -version = "3.15.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "675d170b632a6ad49804c8cf2105d7c31eddd3312555cffd4b740e08e97c25e6" -dependencies = [ - "async-broadcast", - "async-executor", - "async-fs 1.6.0", - "async-io 1.13.0", - "async-lock 2.8.0", - "async-process", - "async-recursion", - "async-task", - "async-trait", - "blocking", - "byteorder", - "derivative", - "enumflags2", - "event-listener 2.5.3", - "futures-core", - "futures-sink", - "futures-util", - "hex", - "nix", - "once_cell", - "ordered-stream", - "rand", - "serde", - "serde_repr", - "sha1", - "static_assertions", - "tracing", - "uds_windows", - "winapi", - "xdg-home", - "zbus_macros", - "zbus_names", - "zvariant", -] - -[[package]] -name = "zbus_macros" -version = "3.15.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7131497b0f887e8061b430c530240063d33bf9455fa34438f388a245da69e0a5" -dependencies = [ - "proc-macro-crate 1.3.1", - "proc-macro2", - "quote", - "regex", - "syn 1.0.109", - "zvariant_utils", -] - -[[package]] -name = "zbus_names" -version = "2.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "437d738d3750bed6ca9b8d423ccc7a8eb284f6b1d6d4e225a0e4e6258d864c8d" -dependencies = [ - "serde", - "static_assertions", - "zvariant", -] - -[[package]] -name = "zerocopy" -version = "0.7.32" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "74d4d3961e53fa4c9a25a8637fc2bfaf2595b3d3ae34875568a5cf64787716be" -dependencies = [ - "zerocopy-derive", -] - -[[package]] -name = "zerocopy-derive" -version = "0.7.32" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ce1b18ccd8e73a9321186f97e46f9f04b778851177567b1975109d26a08d2a6" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.60", -] - -[[package]] -name = "zerofrom" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "655b0814c5c0b19ade497851070c640773304939a6c0fd5f5fb43da0696d05b7" -dependencies = [ - "zerofrom-derive", -] - -[[package]] -name = "zerofrom-derive" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6a647510471d372f2e6c2e6b7219e44d8c574d24fdc11c610a61455782f18c3" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.60", - "synstructure", -] - -[[package]] -name = "zeroize" -version = "1.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "525b4ec142c6b68a2d10f01f7bbf6755599ca3f81ea53b8431b7dd348f5fdb2d" - -[[package]] -name = "zip" -version = "0.6.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "760394e246e4c28189f19d488c058bf16f564016aefac5d32bb1f3b51d5e9261" -dependencies = [ - "byteorder", - "crc32fast", - "crossbeam-utils", -] - -[[package]] -name = "zune-core" -version = "0.4.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f423a2c17029964870cfaabb1f13dfab7d092a62a29a89264f4d36990ca414a" - -[[package]] -name = "zune-inflate" -version = "0.2.54" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "73ab332fe2f6680068f3582b16a24f90ad7096d5d39b974d1c0aff0125116f02" -dependencies = [ - "simd-adler32", -] - -[[package]] -name = "zune-jpeg" -version = "0.4.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec866b44a2a1fd6133d363f073ca1b179f438f99e7e5bfb1e33f7181facfe448" -dependencies = [ - "zune-core", -] - -[[package]] -name = "zvariant" -version = "3.15.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4eef2be88ba09b358d3b58aca6e41cd853631d44787f319a1383ca83424fb2db" -dependencies = [ - "byteorder", - "enumflags2", - "libc", - "serde", - "static_assertions", - "url", - "zvariant_derive", -] - -[[package]] -name = "zvariant_derive" -version = "3.15.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "37c24dc0bed72f5f90d1f8bb5b07228cbf63b3c6e9f82d82559d4bae666e7ed9" -dependencies = [ - "proc-macro-crate 1.3.1", - "proc-macro2", - "quote", - "syn 1.0.109", - "zvariant_utils", -] - -[[package]] -name = "zvariant_utils" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7234f0d811589db492d16893e3f21e8e2fd282e6d01b0cddee310322062cc200" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", -] diff --git a/Cargo.toml b/Cargo.toml index 5fc8b408..f7793e54 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,62 +1,32 @@ -[package] -name = "kornia-rs" -version = "0.1.6-dev" -edition = "2021" +[workspace] +resolver = "2" +members = [ + "crates/kornia-core", + "crates/kornia-image", + "crates/kornia-io", + "crates/kornia-imgproc", + "crates/kornia", + "examples/*", +] +exclude = ["kornia-py", "kornia-serve"] + +[workspace.package] +authors = ["kornia.org "] +categories = ["computer-vision", "science::robotics"] description = "Low-level computer vision library in Rust" +edition = "2021" homepage = "http://kornia.org" -repository = "https://github.com/kornia/kornia-rs" -categories = ["computer-vision", "science::robotics"] +include = ["Cargo.toml"] +license = "Apache-2.0" license-file = "LICENSE" - -[dependencies] -anyhow = "1.0.80" -arrow-buffer = "52.0.0" -fast_image_resize = "3.0.4" -image = { version = "0.25.0" } -ndarray = { version = "0.15.6", features = ["rayon"] } -# optional dependencies -gst = { version = "0.22.2", package = "gstreamer", optional = true } -gst-app = { version = "0.22.0", package = "gstreamer-app", optional = true } -memmap2 = "0.9.4" -num-traits = "0.2.17" -serde = { version = "1", features = ["derive"] } -thiserror = "1" -tokio = { version = "1", features = ["full"], optional = true } -turbojpeg = { version = "1.0.0", optional = true } -# this is experimental and only used for benchmarking, so it's optional -# consider removing it in the future. -candle-core = { version = "0.3.2", optional = true } - -[dev-dependencies] -clap = { version = "4.5.3", features = ["derive"] } -criterion = { version = "0.5.1", features = ["html_reports"] } -indicatif = { version = "0.17.8", features = ["rayon"] } -tempfile = "3.9.0" -rayon = "1.10.0" -rerun = "0.16.0" -walkdir = "2.5.0" - -[features] -candle = ["candle-core"] -gstreamer = ["gst", "gst-app", "tokio"] -jpegturbo = ["turbojpeg"] - -[[bench]] -name = "bench_color" -harness = false - -[[bench]] -name = "bench_resize" -harness = false - -[[bench]] -name = "bench_metrics" -harness = false - -[[bench]] -name = "bench_io" -harness = false - -[[bench]] -name = "bench_warp" -harness = false +readme = "README.md" +repository = "https://github.com/kornia/kornia-rs" +rust-version = "1.76" +version = "0.1.6+dev" + +[workspace.dependencies] +kornia-core = { path = "crates/kornia-core" } +kornia-image = { path = "crates/kornia-image" } +kornia-io = { path = "crates/kornia-io" } +kornia-imgproc = { path = "crates/kornia-imgproc" } +kornia = { path = "crates/kornia" } diff --git a/README.md b/README.md index 601c874c..50e4f2aa 100644 --- a/README.md +++ b/README.md @@ -15,8 +15,8 @@ Use the library to perform image I/O, visualisation and other low level operatio `cargo run --example hello_world` ```rust -use kornia_rs::image::Image; -use kornia_rs::io::functional as F; +use kornia::image::Image; +use kornia::io::functional as F; fn main() -> Result<(), Box> { // read the image @@ -32,7 +32,7 @@ fn main() -> Result<(), Box> { ``` ```bash -Hello, world! +Hello, world! 🦀 Loaded Image size: ImageSize { width: 258, height: 195 } Goodbyte! @@ -85,13 +85,13 @@ Add the following to your `Cargo.toml`: ```toml [dependencies] -kornia-rs = { version = "0.1.2", features = ["gstreamer"] } +kornia = { version = "0.1.6", features = ["gstreamer"] } ``` Alternatively, you can use the `cargo` command to add the dependency: ```bash -cargo add kornia-rs +cargo add kornia ``` ### 🐍 Python @@ -107,8 +107,8 @@ The following example shows how to read an image, convert it to grayscale and re Checkout all the examples in the [`examples`](https://github.com/kornia/kornia-rs/tree/main/examples) directory to see more use cases. ```rust -use kornia_rs::image::Image; -use kornia_rs::io::functional as F; +use kornia::{image::{Image, ImageSize}, imgproc}; +use kornia::io::functional as F; fn main() -> Result<(), Box> { // read the image @@ -119,15 +119,15 @@ fn main() -> Result<(), Box> { let image_f32: Image = image.cast_and_scale::(1.0 / 255.0)?; // convert the image to grayscale - let gray: Image = kornia_rs::color::gray_from_rgb(&image_f32)?; + let gray: Image = imgproc::color::gray_from_rgb(&image_f32)?; - let gray_resize: Image = kornia_rs::resize::resize_native( + let gray_resize: Image = imgproc::resize::resize_native( &gray, - kornia_rs::image::ImageSize { + ImageSize { width: 128, height: 128, }, - kornia_rs::resize::InterpolationMode::Bilinear, + imgproc::resize::InterpolationMode::Bilinear, )?; println!("gray_resize: {:?}", gray_resize.size()); diff --git a/build_wheels.sh b/build_wheels.sh deleted file mode 100755 index 4c8f39fd..00000000 --- a/build_wheels.sh +++ /dev/null @@ -1,15 +0,0 @@ -#!/bin/bash -e -set -e -x - -cargo clean -rm -rf ./wheelhouse - -for PYBIN in /opt/python/cp3[789]*/bin; do - "${PYBIN}/pip" install maturin -U - "${PYBIN}/maturin" --version - "${PYBIN}/maturin" build -i "${PYBIN}/python" --release -done - -for wheel in ./target/wheels/*.whl; do - auditwheel repair "${wheel}" -done diff --git a/crates/kornia-core/Cargo.toml b/crates/kornia-core/Cargo.toml new file mode 100644 index 00000000..7ce29eb9 --- /dev/null +++ b/crates/kornia-core/Cargo.toml @@ -0,0 +1,22 @@ +[package] +name = "kornia-core" +authors.workspace = true +description = "Lightweight tensor library in Rust for computer vision" +edition.workspace = true +homepage.workspace = true +license.workspace = true +publish = true +repository.workspace = true +rust-version.workspace = true +version.workspace = true + +[dependencies] + +# external +arrow-buffer = "52.0.0" +serde = { version = "1", features = ["derive"] } +thiserror = "1" + + +[dev-dependencies] +kornia.workspace = true diff --git a/src/tensor/allocator.rs b/crates/kornia-core/src/allocator.rs similarity index 89% rename from src/tensor/allocator.rs rename to crates/kornia-core/src/allocator.rs index da5913e8..823b8098 100644 --- a/src/tensor/allocator.rs +++ b/crates/kornia-core/src/allocator.rs @@ -2,11 +2,14 @@ use std::alloc::{GlobalAlloc, Layout, System}; use thiserror::Error; +/// An error type for tensor allocator operations. #[derive(Debug, Error)] pub enum TensorAllocatorError { + /// An error occurred during memory allocation. #[error("Invalid tensor layout {0}")] LayoutError(core::alloc::LayoutError), + /// An error occurred during memory allocation. #[error("Null pointer")] NullPointer, } @@ -22,7 +25,10 @@ pub enum TensorAllocatorError { /// * `alloc` - Allocates memory for a tensor with the given layout. /// * `dealloc` - Deallocates memory for a tensor with the given layout. pub trait TensorAllocator: Clone { + /// Allocates memory for a tensor with the given layout. fn alloc(&self, layout: Layout) -> Result<*mut u8, TensorAllocatorError>; + + /// Deallocates memory for a tensor with the given layout. fn dealloc(&self, ptr: *mut u8, layout: Layout); } diff --git a/crates/kornia-core/src/lib.rs b/crates/kornia-core/src/lib.rs new file mode 100644 index 00000000..bb7507d1 --- /dev/null +++ b/crates/kornia-core/src/lib.rs @@ -0,0 +1,29 @@ +#![deny(missing_docs)] +//! Core module containing the tensor and storage implementations. + +/// allocator module containing the memory management utilities. +pub mod allocator; + +/// tensor module containing the tensor and storage implementations. +pub mod tensor; + +/// serde module containing the serialization and deserialization utilities. +pub mod serde; + +/// storage module containing the storage implementations. +pub mod storage; + +pub use crate::allocator::{CpuAllocator, TensorAllocator}; +pub use crate::tensor::{Tensor, TensorError}; + +/// Type alias for a 1-dimensional tensor. +pub type Tensor1 = Tensor; + +/// Type alias for a 2-dimensional tensor. +pub type Tensor2 = Tensor; + +/// Type alias for a 3-dimensional tensor. +pub type Tensor3 = Tensor; + +/// Type alias for a 4-dimensional tensor. +pub type Tensor4 = Tensor; diff --git a/src/tensor/serde.rs b/crates/kornia-core/src/serde.rs similarity index 94% rename from src/tensor/serde.rs rename to crates/kornia-core/src/serde.rs index c8317dca..79892e01 100644 --- a/src/tensor/serde.rs +++ b/crates/kornia-core/src/serde.rs @@ -1,7 +1,5 @@ -use crate::tensor::storage::TensorStorage; +use crate::{allocator::TensorAllocator, storage::TensorStorage, Tensor}; -use super::allocator::TensorAllocator; -use super::Tensor; use serde::ser::SerializeStruct; use serde::Deserialize; diff --git a/src/tensor/storage.rs b/crates/kornia-core/src/storage.rs similarity index 97% rename from src/tensor/storage.rs rename to crates/kornia-core/src/storage.rs index 4149fb24..109555e6 100644 --- a/src/tensor/storage.rs +++ b/crates/kornia-core/src/storage.rs @@ -18,6 +18,7 @@ use std::{alloc::Layout, ptr::NonNull}; /// * `alloc` - The allocator used to allocate the tensor storage. /// * `marker` - The marker type for the tensor storage. pub struct TensorStorage { + /// The buffer containing the tensor storage. pub data: Buffer, alloc: A, marker: PhantomData, @@ -98,7 +99,7 @@ where #[cfg(test)] mod tests { use super::*; - use crate::tensor::allocator::CpuAllocator; + use crate::allocator::CpuAllocator; #[test] fn test_tensor_storage() -> Result<(), TensorAllocatorError> { diff --git a/src/tensor/base.rs b/crates/kornia-core/src/tensor.rs similarity index 95% rename from src/tensor/base.rs rename to crates/kornia-core/src/tensor.rs index 3bebb073..ee1bfba5 100644 --- a/src/tensor/base.rs +++ b/crates/kornia-core/src/tensor.rs @@ -5,14 +5,18 @@ use super::{ storage::TensorStorage, }; +/// An error type for tensor operations. #[derive(Error, Debug)] pub enum TensorError { + /// The number of elements in the data does not match the shape of the tensor. #[error("The number of elements in the data does not match the shape of the tensor: {0}")] InvalidShape(usize), + /// Index out of bounds. #[error("Index out of bounds. The index {0} is out of bounds.")] IndexOutOfBounds(usize), + /// Error with the tensor storage. #[error("Error with the tensor storage: {0}")] StorageError(#[from] TensorAllocatorError), } @@ -50,7 +54,7 @@ fn get_strides_from_shape(shape: [usize; N]) -> [usize; N] { /// # Example /// /// ``` -/// use kornia_rs::tensor::{Tensor, CpuAllocator}; +/// use kornia::core::{Tensor, CpuAllocator}; /// /// let data: Vec = vec![1, 2, 3, 4]; /// let t = Tensor::::new_uninitialized([2, 2], CpuAllocator).unwrap(); @@ -59,8 +63,11 @@ pub struct Tensor where T: arrow_buffer::ArrowNativeType, { + /// The storage of the tensor. pub storage: TensorStorage, + /// The shape of the tensor. pub shape: [usize; N], + /// The strides of the tensor data in memory. pub strides: [usize; N], } @@ -133,7 +140,7 @@ where /// # Example /// /// ``` - /// use kornia_rs::tensor::{Tensor, CpuAllocator}; + /// use kornia::core::{Tensor, CpuAllocator}; /// /// let data: Vec = vec![1, 2, 3, 4]; /// let t = Tensor::::from_shape_vec([2, 2], data, CpuAllocator).unwrap(); @@ -167,7 +174,7 @@ where /// # Example /// /// ``` - /// use kornia_rs::tensor::{Tensor, CpuAllocator}; + /// use kornia::core::{Tensor, CpuAllocator}; /// /// let t = Tensor::::from_shape_val([4], 0, CpuAllocator).unwrap(); /// assert_eq!(t.as_slice(), vec![0, 0, 0, 0]); @@ -208,7 +215,7 @@ where /// # Example /// /// ``` - /// use kornia_rs::tensor::{Tensor, CpuAllocator}; + /// use kornia::core::{Tensor, CpuAllocator}; /// /// let t = Tensor::::from_shape_fn([4], |[i]| i as u8, CpuAllocator); /// assert_eq!(t.as_slice(), vec![0, 1, 2, 3]); @@ -246,7 +253,15 @@ where self.storage.data.len() } - // TODO: find a better name + /// Get the offset of the element at the given index. + /// + /// # Arguments + /// + /// * `index` - The list of indices to get the element from. + /// + /// # Returns + /// + /// The offset of the element at the given index. pub fn get_iter_offset(&self, index: [usize; N]) -> usize { let mut offset = 0; for (i, &idx) in index.iter().enumerate() { @@ -268,7 +283,7 @@ where /// # Example /// /// ``` - /// use kornia_rs::tensor::{Tensor, CpuAllocator}; + /// use kornia::core::{Tensor, CpuAllocator}; /// /// let data: Vec = vec![1, 2, 3, 4]; /// @@ -300,7 +315,7 @@ where /// # Example /// /// ``` - /// use kornia_rs::tensor::{Tensor, CpuAllocator}; + /// use kornia::core::{Tensor, CpuAllocator}; /// /// let data: Vec = vec![1, 2, 3, 4]; /// @@ -341,7 +356,7 @@ where /// # Example /// /// ``` - /// use kornia_rs::tensor::{Tensor, CpuAllocator}; + /// use kornia::core::{Tensor, CpuAllocator}; /// /// let data: Vec = vec![1, 2, 3, 4]; /// @@ -384,7 +399,7 @@ where /// # Example /// /// ``` - /// use kornia_rs::tensor::{Tensor, CpuAllocator}; + /// use kornia::core::{Tensor, CpuAllocator}; /// /// let data1: Vec = vec![1, 2, 3, 4]; /// let t1 = Tensor::::from_shape_vec([4], data1, CpuAllocator).unwrap(); @@ -441,7 +456,7 @@ where /// # Example /// /// ``` - /// use kornia_rs::tensor::{Tensor, CpuAllocator}; + /// use kornia::core::{Tensor, CpuAllocator}; /// /// let data1: Vec = vec![1, 2, 3, 4]; /// let t1 = Tensor::::from_shape_vec([4], data1, CpuAllocator).unwrap(); @@ -472,7 +487,7 @@ where /// # Example /// /// ``` - /// use kornia_rs::tensor::{Tensor, CpuAllocator}; + /// use kornia::core::{Tensor, CpuAllocator}; /// /// let data1: Vec = vec![1, 2, 3, 4]; /// let t1 = Tensor::::from_shape_vec([4], data1, CpuAllocator).unwrap(); @@ -503,7 +518,7 @@ where /// # Example /// /// ``` - /// use kornia_rs::tensor::{Tensor, CpuAllocator}; + /// use kornia::core::{Tensor, CpuAllocator}; /// /// let data1: Vec = vec![1, 2, 3, 4]; /// let t1 = Tensor::::from_shape_vec([4], data1, CpuAllocator).unwrap(); @@ -534,7 +549,7 @@ where /// # Example /// /// ``` - /// use kornia_rs::tensor::{Tensor, CpuAllocator}; + /// use kornia::core::{Tensor, CpuAllocator}; /// /// let data1: Vec = vec![1, 2, 3, 4]; /// let t1 = Tensor::::from_shape_vec([4], data1, CpuAllocator).unwrap(); @@ -565,7 +580,7 @@ where /// # Example /// /// ``` - /// use kornia_rs::tensor::{Tensor, CpuAllocator}; + /// use kornia::core::{Tensor, CpuAllocator}; /// /// let t = Tensor::::zeros([4], CpuAllocator); /// assert_eq!(t.as_slice(), vec![0, 0, 0, 0]); @@ -593,7 +608,7 @@ where /// # Example /// /// ``` - /// use kornia_rs::tensor::{Tensor, CpuAllocator}; + /// use kornia::core::{Tensor, CpuAllocator}; /// /// let data: Vec = vec![1, 2, 3, 4]; /// let t = Tensor::::from_shape_vec([4], data, CpuAllocator).unwrap(); @@ -623,7 +638,7 @@ where /// # Example /// /// ``` - /// use kornia_rs::tensor::{Tensor, CpuAllocator}; + /// use kornia::core::{Tensor, CpuAllocator}; /// /// let data: Vec = vec![1, 2, 3, 4]; /// let t = Tensor::::from_shape_vec([4], data, CpuAllocator).unwrap(); @@ -671,8 +686,8 @@ where #[cfg(test)] mod tests { - use crate::tensor::allocator::CpuAllocator; - use crate::tensor::{Tensor, TensorError}; + use crate::allocator::CpuAllocator; + use crate::{Tensor, TensorError}; #[test] fn constructor_1d() -> Result<(), TensorError> { diff --git a/crates/kornia-image/Cargo.toml b/crates/kornia-image/Cargo.toml new file mode 100644 index 00000000..ba455a7f --- /dev/null +++ b/crates/kornia-image/Cargo.toml @@ -0,0 +1,22 @@ +[package] +name = "kornia-image" +authors.workspace = true +description = "Image types and traits for generating and manipulating images" +edition.workspace = true +homepage.workspace = true +license.workspace = true +publish = true +repository.workspace = true +rust-version.workspace = true +version.workspace = true + +[dependencies] + +# external +anyhow = "1" +ndarray = { version = "0.15", features = ["rayon"] } +num-traits = "0.2" +thiserror = "1" + +[dev-dependencies] +kornia.workspace = true diff --git a/src/image.rs b/crates/kornia-image/src/image.rs similarity index 87% rename from src/image.rs rename to crates/kornia-image/src/image.rs index e61bffe1..ea0c3963 100644 --- a/src/image.rs +++ b/crates/kornia-image/src/image.rs @@ -1,4 +1,3 @@ -//use crate::io; use anyhow::Result; use num_traits::Float; @@ -9,12 +8,13 @@ use num_traits::Float; /// # Examples /// /// ``` -/// use kornia_rs::image::ImageSize; +/// use kornia::image::ImageSize; /// /// let image_size = ImageSize { -/// width: 10, +/// width: 10, /// height: 20, /// }; +/// /// assert_eq!(image_size.width, 10); /// assert_eq!(image_size.height, 20); /// ``` @@ -37,8 +37,10 @@ impl std::fmt::Display for ImageSize { } /// Trait for image data types. -// Send and Sync is required for ndarray::Zip::par_for_each +/// +/// Send and Sync is required for ndarray::Zip::par_for_each pub trait ImageDtype: Copy + Default + Into + Send + Sync { + /// Convert a f32 value to the image data type. fn from_f32(x: f32) -> Self; } @@ -84,7 +86,7 @@ impl Image { /// # Examples /// /// ``` - /// use kornia_rs::image::{Image, ImageSize}; + /// use kornia::image::{Image, ImageSize}; /// /// let image = Image::::new( /// ImageSize { @@ -133,7 +135,7 @@ impl Image { /// # Examples /// /// ``` - /// use kornia_rs::image::{Image, ImageSize}; + /// use kornia::image::{Image, ImageSize}; /// /// let image = Image::::from_size_val( /// ImageSize { @@ -172,7 +174,7 @@ impl Image { /// # Examples /// /// ``` - /// use kornia_rs::image::{Image, ImageSize}; + /// use kornia::image::{Image, ImageSize}; /// /// let data = vec![0., 1., 2., 3., 4., 5.]; /// @@ -223,7 +225,7 @@ impl Image { /// # Examples /// /// ``` - /// use kornia_rs::image::{Image, ImageSize}; + /// use kornia::image::{Image, ImageSize}; /// /// let data = vec![0u8, 0, 255, 0, 0, 255]; /// @@ -297,7 +299,7 @@ impl Image { /// # Examples /// /// ``` - /// use kornia_rs::image::{Image, ImageSize}; + /// use kornia::image::{Image, ImageSize}; /// /// let image = Image::::from_size_val( /// ImageSize { @@ -321,7 +323,15 @@ impl Image { Ok(channels) } - // TODO: optimize this + /// Multiply the pixel data with a scalar. + /// + /// # Arguments + /// + /// * `scale` - The scalar to multiply the pixel data with. + /// + /// # Returns + /// + /// A new image with the pixel data multiplied by the scalar. pub fn mul(&self, scale: T) -> Self where T: Copy + std::ops::Mul, @@ -330,7 +340,15 @@ impl Image { Image { data: scaled_data } } - // TODO: optimize this + /// Divide the pixel data by a scalar. + /// + /// # Arguments + /// + /// * `scale` - The scalar to divide the pixel data by. + /// + /// # Returns + /// + /// A new image with the pixel data divided by the scalar. pub fn div(&self, scale: T) -> Self where T: Copy + std::ops::Div, @@ -339,7 +357,15 @@ impl Image { Image { data: scaled_data } } - // TODO: optimize this + /// Subtract two images. + /// + /// # Arguments + /// + /// * `other` - The other image to add. + /// + /// # Returns + /// + /// A new image with the pixel data added. pub fn sub(&self, other: &Self) -> Self where T: Copy + std::ops::Sub, @@ -348,7 +374,15 @@ impl Image { Image { data: diff } } - // TODO: optimize this + /// Apply the power function to the pixel data. + /// + /// # Arguments + /// + /// * `n` - The power to raise the pixel data to. + /// + /// # Returns + /// + /// A new image with the pixel data raised to the power. pub fn powi(&self, n: i32) -> Self where T: Copy + Float, @@ -357,7 +391,11 @@ impl Image { Image { data: powered_data } } - // TODO: optimize this + /// Compute the mean of the pixel data. + /// + /// # Returns + /// + /// The mean of the pixel data. pub fn mean(&self) -> T where T: Copy + Float, @@ -365,6 +403,11 @@ impl Image { self.data.fold(T::zero(), |acc, &x| acc + x) / T::from(self.data.len()).unwrap() } + /// Compute absolute value of the pixel data. + /// + /// # Returns + /// + /// A new image with the pixel data absolute value. pub fn abs(&self) -> Self where T: Copy + Float, @@ -390,10 +433,12 @@ impl Image { } } + /// Get the number of columns of the image. pub fn cols(&self) -> usize { self.width() } + /// Get the number of rows of the image. pub fn rows(&self) -> usize { self.height() } @@ -433,7 +478,16 @@ impl Image { self.data.insert_axis(ndarray::Axis(0)) } - // NOTE: experimental api + /// Set the pixel data of the image. + /// + /// NOTE: this is an experimental api + /// + /// # Arguments + /// + /// * `x` - The x-coordinate of the pixel. + /// * `y` - The y-coordinate of the pixel. + /// * `ch` - The channel index of the pixel. + /// * `val` - The value to set the pixel to. pub fn set_pixel(&mut self, x: usize, y: usize, ch: usize, val: T) -> Result<()> where T: Copy, @@ -461,7 +515,19 @@ impl Image { Ok(()) } - // NOTE: experimental api + /// Get the pixel data of the image. + /// + /// NOTE: experimental api + /// + /// # Arguments + /// + /// * `x` - The x-coordinate of the pixel. + /// * `y` - The y-coordinate of the pixel. + /// * `ch` - The channel index of the pixel. + /// + /// # Returns + /// + /// The pixel value at the given coordinates. pub fn get_pixel(&self, x: usize, y: usize, ch: usize) -> Result where T: Copy, diff --git a/crates/kornia-image/src/lib.rs b/crates/kornia-image/src/lib.rs new file mode 100644 index 00000000..9ffb194d --- /dev/null +++ b/crates/kornia-image/src/lib.rs @@ -0,0 +1,7 @@ +#![deny(missing_docs)] +//! Image types and traits for generating and manipulating images + +/// image representation for computer vision purposes. +pub mod image; + +pub use crate::image::{Image, ImageDtype, ImageSize}; diff --git a/crates/kornia-imgproc/Cargo.toml b/crates/kornia-imgproc/Cargo.toml new file mode 100644 index 00000000..725beaad --- /dev/null +++ b/crates/kornia-imgproc/Cargo.toml @@ -0,0 +1,47 @@ +[package] +name = "kornia-imgproc" +authors.workspace = true +description = "Image processing operations in Rust" +edition.workspace = true +homepage.workspace = true +license.workspace = true +publish = true +repository.workspace = true +rust-version.workspace = true +version.workspace = true + +[dependencies] + +# kornia +kornia-image.workspace = true + +# external +anyhow = "1" +fast_image_resize = "3.0.4" +ndarray = { version = "0.15", features = ["rayon"] } +num-traits = "0.2" +thiserror = "1" + +[dev-dependencies] +kornia-io.workspace = true +kornia.workspace = true + +criterion = "0.5" +image = "0.25.1" +ndarray = { version = "0.15", features = ["rayon"] } + +[[bench]] +name = "bench_color" +harness = false + +[[bench]] +name = "bench_resize" +harness = false + +[[bench]] +name = "bench_metrics" +harness = false + +[[bench]] +name = "bench_warp" +harness = false diff --git a/benches/bench_color.rs b/crates/kornia-imgproc/benches/bench_color.rs similarity index 64% rename from benches/bench_color.rs rename to crates/kornia-imgproc/benches/bench_color.rs index b3d1e068..f125c5af 100644 --- a/benches/bench_color.rs +++ b/crates/kornia-imgproc/benches/bench_color.rs @@ -1,15 +1,9 @@ use criterion::{black_box, criterion_group, criterion_main, BenchmarkId, Criterion}; -use kornia_rs::color as F; -use kornia_rs::image::{Image, ImageSize}; +use kornia::imgproc::color::gray_from_rgb; +use kornia_image::{Image, ImageSize}; use ndarray::s; -#[cfg(feature = "candle")] -use candle_core::{DType, Device, Storage, Tensor}; - -#[cfg(feature = "candle")] -use std::ops::Deref; - // vanilla version fn gray_iter(image: &Image) -> Image { let data = vec![0u8; image.size().width * image.size().height]; @@ -41,46 +35,6 @@ fn gray_vec(image: &Image) -> Image { Image::new(image.size(), gray_u8.into_raw_vec()).unwrap() } -#[cfg(feature = "candle")] -fn gray_candle(image: Image) -> Image { - let image_data = image.data.as_slice().unwrap(); - let shape = (image.size().height, image.size().width, 3); - - let device = Device::Cpu; - let image_u8 = Tensor::from_vec(image_data.to_vec(), shape, &device).unwrap(); - //println!("image_t: {:?}", image_u8.shape()); - - let image_f32 = image_u8.to_dtype(DType::F32).unwrap(); - - let weight = Tensor::from_vec(vec![76.0f32, 150.0, 29.0], (1, 1, 3), &device).unwrap(); - - let gray_f32 = image_f32.broadcast_mul(&weight).unwrap(); - let gray_f32 = gray_f32.sum_keepdim(2).unwrap(); - let gray_f32 = (gray_f32 / 255.0).unwrap(); - let gray_f32 = gray_f32.repeat((1, 1, 3)).unwrap(); - //println!("gray_f32: {:?}", gray_f32.shape()); - - let gray_u8 = gray_f32.to_dtype(DType::U8).unwrap(); - - // https://github.com/huggingface/candle/issues/973 - let (storage, _layout) = gray_u8.storage_and_layout(); - - let data = match storage.deref() { - Storage::Cpu(storage) => { - let data = storage.as_slice().unwrap(); - data.to_vec() - } - Storage::Cuda(_) => { - panic!("Cuda not implemented yet"); - } - Storage::Metal(_) => { - panic!("Metal not implemented yet"); - } - }; - - Image::new(image.size(), data).unwrap() -} - fn gray_image_crate(image: &Image) -> Image { let image_data = image.data.as_slice().unwrap(); let rgb = image::RgbImage::from_raw( @@ -106,7 +60,7 @@ fn bench_grayscale(c: &mut Criterion) { let image = Image::new(ImageSize { width, height }, image_data).unwrap(); let image_f32 = image.clone().cast::().unwrap(); group.bench_with_input(BenchmarkId::new("zip", &id), &image_f32, |b, i| { - b.iter(|| F::gray_from_rgb(black_box(i))) + b.iter(|| gray_from_rgb(black_box(i))) }); group.bench_with_input(BenchmarkId::new("iter", &id), &image_f32, |b, i| { b.iter(|| gray_iter(black_box(&i.clone()))) diff --git a/benches/bench_metrics.rs b/crates/kornia-imgproc/benches/bench_metrics.rs similarity index 89% rename from benches/bench_metrics.rs rename to crates/kornia-imgproc/benches/bench_metrics.rs index 6b4d98c5..7211b1dc 100644 --- a/benches/bench_metrics.rs +++ b/crates/kornia-imgproc/benches/bench_metrics.rs @@ -1,6 +1,9 @@ use criterion::{black_box, criterion_group, criterion_main, BenchmarkId, Criterion}; -use kornia_rs::image::{Image, ImageSize}; +use kornia::{ + image::{Image, ImageSize}, + imgproc::metrics, +}; // TODO: figure how to auto select a function backend based on the input size fn mse_zip(image1: &Image, image2: &Image) -> f32 { @@ -20,7 +23,7 @@ fn bench_mse(c: &mut Criterion) { let image = Image::::new(image_size, vec![0u8; width * height * 3]).unwrap(); let image_f32 = image.cast::().unwrap(); group.bench_with_input(BenchmarkId::new("mapv", &id), &image_f32, |b, i| { - b.iter(|| kornia_rs::metrics::mse(black_box(i), black_box(i))) + b.iter(|| metrics::mse(black_box(i), black_box(i))) }); group.bench_with_input(BenchmarkId::new("zip", &id), &image_f32, |b, i| { b.iter(|| mse_zip(black_box(i), black_box(i))) diff --git a/benches/bench_resize.rs b/crates/kornia-imgproc/benches/bench_resize.rs similarity index 85% rename from benches/bench_resize.rs rename to crates/kornia-imgproc/benches/bench_resize.rs index 3ab384bf..0912e283 100644 --- a/benches/bench_resize.rs +++ b/crates/kornia-imgproc/benches/bench_resize.rs @@ -1,8 +1,7 @@ use criterion::{black_box, criterion_group, criterion_main, BenchmarkId, Criterion}; -use kornia_rs::image::{Image, ImageSize}; -use kornia_rs::interpolation::InterpolationMode; -use kornia_rs::resize as F; +use kornia::image::{Image, ImageSize}; +use kornia::imgproc::{interpolation::InterpolationMode, resize}; fn resize_image_crate(image: Image, new_size: ImageSize) -> Image { let image_data = image.data.as_slice().unwrap(); @@ -37,13 +36,13 @@ fn bench_resize(c: &mut Criterion) { height: height / 2, }; group.bench_with_input(BenchmarkId::new("native", &id), &image_f32, |b, i| { - b.iter(|| F::resize_native(black_box(i), new_size, InterpolationMode::Nearest)) + b.iter(|| resize::resize_native(black_box(i), new_size, InterpolationMode::Nearest)) }); group.bench_with_input(BenchmarkId::new("image_rs", &id), &image, |b, i| { b.iter(|| resize_image_crate(black_box(i.clone()), new_size)) }); group.bench_with_input(BenchmarkId::new("fast", &id), &image, |b, i| { - b.iter(|| F::resize_fast(black_box(i), new_size, InterpolationMode::Nearest)) + b.iter(|| resize::resize_fast(black_box(i), new_size, InterpolationMode::Nearest)) }); } group.finish(); diff --git a/benches/bench_warp.rs b/crates/kornia-imgproc/benches/bench_warp.rs similarity index 85% rename from benches/bench_warp.rs rename to crates/kornia-imgproc/benches/bench_warp.rs index 8127ca7b..817b7036 100644 --- a/benches/bench_warp.rs +++ b/crates/kornia-imgproc/benches/bench_warp.rs @@ -1,8 +1,12 @@ use criterion::{black_box, criterion_group, criterion_main, BenchmarkId, Criterion}; -use kornia_rs::image::{Image, ImageSize}; -use kornia_rs::interpolation::InterpolationMode; -use kornia_rs::warp::{get_rotation_matrix2d, warp_affine}; +use kornia::{ + image::{Image, ImageSize}, + imgproc::{ + interpolation::InterpolationMode, + warp::{get_rotation_matrix2d, warp_affine}, + }, +}; fn bench_warp_affine(c: &mut Criterion) { let mut group = c.benchmark_group("warp_affine"); diff --git a/src/calibration/distortion.rs b/crates/kornia-imgproc/src/calibration/distortion.rs similarity index 92% rename from src/calibration/distortion.rs rename to crates/kornia-imgproc/src/calibration/distortion.rs index cb6e5a30..48befc9d 100644 --- a/src/calibration/distortion.rs +++ b/crates/kornia-imgproc/src/calibration/distortion.rs @@ -1,8 +1,6 @@ use super::{CameraExtrinsic, CameraIntrinsic}; -use crate::{ - image::{Image, ImageSize}, - interpolation::meshgrid, -}; +use crate::interpolation::meshgrid; +use kornia_image::{Image, ImageSize}; /// Represents the polynomial distortion parameters of a camera /// @@ -17,13 +15,21 @@ use crate::{ /// * `p1` - The first tangential distortion coefficient /// * `p2` - The second tangential distortion coefficient pub struct PolynomialDistortion { + /// The first radial distortion coefficient pub k1: f64, + /// The second radial distortion coefficient pub k2: f64, + /// The third radial distortion coefficient pub k3: f64, + /// The fourth radial distortion coefficient pub k4: f64, + /// The fifth radial distortion coefficient pub k5: f64, + /// The sixth radial distortion coefficient pub k6: f64, + /// The first tangential distortion coefficient pub p1: f64, + /// The second tangential distortion coefficient pub p2: f64, } @@ -135,7 +141,7 @@ pub fn generate_correction_map_polynomial( mod tests { use super::*; - use crate::image::ImageSize; + use kornia_image::ImageSize; #[test] fn test_distort_point_polynomial() { diff --git a/src/calibration/mod.rs b/crates/kornia-imgproc/src/calibration/mod.rs similarity index 69% rename from src/calibration/mod.rs rename to crates/kornia-imgproc/src/calibration/mod.rs index c5731536..8dae4d9a 100644 --- a/src/calibration/mod.rs +++ b/crates/kornia-imgproc/src/calibration/mod.rs @@ -1,3 +1,4 @@ +/// image distortion module. pub mod distortion; /// Represents the instrinsic parameters of a pinhole camera @@ -9,9 +10,13 @@ pub mod distortion; /// * `cx` - The x coordinate of the principal point /// * `cy` - The y coordinate of the principal point pub struct CameraIntrinsic { + /// The focal length in the x direction pub fx: f64, + /// The focal length in the y direction pub fy: f64, + /// The x coordinate of the principal point pub cx: f64, + /// The y coordinate of the principal point pub cy: f64, } @@ -22,6 +27,8 @@ pub struct CameraIntrinsic { /// * `rotation` - The rotation matrix of the camera 3x3 /// * `translation` - The translation vector of the camera 3x1 pub struct CameraExtrinsic { + /// The rotation matrix of the camera 3x3 pub rotation: [[f64; 3]; 3], + /// The translation vector of the camera 3x1 pub translation: [f64; 3], } diff --git a/src/color/gray.rs b/crates/kornia-imgproc/src/color/gray.rs similarity index 88% rename from src/color/gray.rs rename to crates/kornia-imgproc/src/color/gray.rs index cbadde8d..90882bf9 100644 --- a/src/color/gray.rs +++ b/crates/kornia-imgproc/src/color/gray.rs @@ -1,5 +1,5 @@ -use crate::image::Image; use anyhow::Result; +use kornia_image::Image; /// Define the RGB weights for the grayscale conversion. const RW: f64 = 0.299; @@ -23,7 +23,7 @@ const BW: f64 = 0.114; /// # Example /// /// ``` -/// use kornia_rs::image::{Image, ImageSize}; +/// use kornia::image::{Image, ImageSize}; /// /// let image = Image::::new( /// ImageSize { @@ -33,7 +33,7 @@ const BW: f64 = 0.114; /// vec![0f32; 4 * 5 * 3], /// ) /// .unwrap(); -/// let gray: Image = kornia_rs::color::gray_from_rgb(&image).unwrap(); +/// let gray: Image = kornia::imgproc::color::gray_from_rgb(&image).unwrap(); /// assert_eq!(gray.num_channels(), 1); /// assert_eq!(gray.size().width, 4); /// assert_eq!(gray.size().height, 5); @@ -65,12 +65,12 @@ where #[cfg(test)] mod tests { - use crate::io::functional as F; use anyhow::Result; + use kornia_io::functional as F; #[test] fn gray_from_rgb() -> Result<()> { - let image_path = std::path::Path::new("tests/data/dog.jpeg"); + let image_path = std::path::Path::new("../../tests/data/dog.jpeg"); let image = F::read_image_any(image_path)?; let image_norm = image.cast_and_scale::(1. / 255.0)?; let gray = super::gray_from_rgb(&image_norm.cast::()?)?; diff --git a/src/color/hsv.rs b/crates/kornia-imgproc/src/color/hsv.rs similarity index 92% rename from src/color/hsv.rs rename to crates/kornia-imgproc/src/color/hsv.rs index 83e93680..3b2bb3ca 100644 --- a/src/color/hsv.rs +++ b/crates/kornia-imgproc/src/color/hsv.rs @@ -1,5 +1,5 @@ -use crate::image::Image; use anyhow::Result; +use kornia_image::Image; /// Convert an RGB image to an HSV image. /// @@ -22,7 +22,8 @@ use anyhow::Result; /// # Example /// /// ``` -/// use kornia_rs::image::{Image, ImageSize}; +/// use kornia::image::{Image, ImageSize}; +/// use kornia::imgproc::color::hsv_from_rgb; /// /// let image = Image::::new( /// ImageSize { @@ -33,7 +34,8 @@ use anyhow::Result; /// ) /// .unwrap(); /// -/// let hsv: Image = kornia_rs::color::hsv_from_rgb(&image).unwrap(); +/// let hsv: Image = hsv_from_rgb(&image).unwrap(); +/// /// assert_eq!(hsv.num_channels(), 3); /// assert_eq!(hsv.size().width, 4); /// assert_eq!(hsv.size().height, 5); @@ -91,8 +93,8 @@ pub fn hsv_from_rgb(image: &Image) -> Result> { #[cfg(test)] mod tests { - use crate::image::{Image, ImageSize}; use anyhow::Result; + use kornia_image::{Image, ImageSize}; #[test] fn hsv_from_rgb() -> Result<()> { diff --git a/src/color/mod.rs b/crates/kornia-imgproc/src/color/mod.rs similarity index 100% rename from src/color/mod.rs rename to crates/kornia-imgproc/src/color/mod.rs diff --git a/src/core.rs b/crates/kornia-imgproc/src/core.rs similarity index 93% rename from src/core.rs rename to crates/kornia-imgproc/src/core.rs index f068e76a..650e6824 100644 --- a/src/core.rs +++ b/crates/kornia-imgproc/src/core.rs @@ -1,6 +1,6 @@ // reference: https://www.strchr.com/standard_deviation_in_one_pass -use crate::image::Image; use anyhow::Result; +use kornia_image::Image; /// Compute the mean and standard deviation of an image. /// @@ -20,7 +20,8 @@ use anyhow::Result; /// # Example /// /// ``` -/// use kornia_rs::image::{Image, ImageSize}; +/// use kornia::image::{Image, ImageSize}; +/// use kornia::imgproc::core::std_mean; /// /// let image = Image::::new( /// ImageSize { @@ -30,7 +31,8 @@ use anyhow::Result; /// vec![0, 1, 2, 253, 254, 255, 128, 129, 130, 64, 65, 66], /// ).unwrap(); /// -/// let (std, mean) = kornia_rs::core::std_mean(&image); +/// let (std, mean) = std_mean(&image); +/// /// assert_eq!(std, [93.5183805462862, 93.5183805462862, 93.5183805462862]); /// assert_eq!(mean, [111.25, 112.25, 113.25]); /// ``` @@ -74,7 +76,8 @@ pub fn std_mean(image: &Image) -> (Vec, Vec) { /// # Example /// /// ``` -/// use kornia_rs::image::{Image, ImageSize}; +/// use kornia::image::{Image, ImageSize}; +/// use kornia::imgproc::core::bitwise_and; /// /// let image = Image::::new( /// ImageSize { @@ -92,7 +95,7 @@ pub fn std_mean(image: &Image) -> (Vec, Vec) { /// vec![255, 0, 255, 0], /// ).unwrap(); /// -/// let output = kornia_rs::core::bitwise_and(&image, &image, &mask).unwrap(); +/// let output = bitwise_and(&image, &image, &mask).unwrap(); /// /// assert_eq!(output.size().width, 2); /// assert_eq!(output.size().height, 2); @@ -134,8 +137,8 @@ pub fn bitwise_and( #[cfg(test)] mod tests { - use crate::image::{Image, ImageSize}; use anyhow::Result; + use kornia_image::{Image, ImageSize}; #[test] fn test_std_mean() -> Result<()> { diff --git a/src/distance_transform.rs b/crates/kornia-imgproc/src/distance_transform.rs similarity index 97% rename from src/distance_transform.rs rename to crates/kornia-imgproc/src/distance_transform.rs index 51708ae0..c4b10c13 100644 --- a/src/distance_transform.rs +++ b/crates/kornia-imgproc/src/distance_transform.rs @@ -1,5 +1,5 @@ -use crate::image::Image; use anyhow::Result; +use kornia_image::Image; pub(crate) fn euclidean_distance(x1: Vec, x2: Vec) -> f32 { ((x1[0] - x2[0]).powi(2) + (x1[1] - x2[1]).powi(2)).sqrt() @@ -87,12 +87,12 @@ pub fn distance_transform(image: &Image) -> Result> { #[cfg(test)] mod tests { use crate::distance_transform::distance_transform_vanilla; - use crate::image::Image; + use kornia_image::Image; #[test] fn distance_transform_vanilla_smoke() { let image = Image::::new( - crate::image::ImageSize { + kornia_image::ImageSize { width: 3, height: 4, }, diff --git a/src/enhance.rs b/crates/kornia-imgproc/src/enhance.rs similarity index 97% rename from src/enhance.rs rename to crates/kornia-imgproc/src/enhance.rs index 5c732f0c..296ddaac 100644 --- a/src/enhance.rs +++ b/crates/kornia-imgproc/src/enhance.rs @@ -1,5 +1,5 @@ -use crate::image::Image; use anyhow::Result; +use kornia_image::Image; /// Performs weighted addition of two images `src1` and `src2` with weights `alpha` /// and `beta`, and an optional scalar `gamma`. The formula used is: @@ -57,8 +57,8 @@ where #[cfg(test)] mod tests { - use crate::image::{Image, ImageSize}; use anyhow::Result; + use kornia_image::{Image, ImageSize}; #[test] fn test_add_weighted() -> Result<()> { diff --git a/src/flip.rs b/crates/kornia-imgproc/src/flip.rs similarity index 88% rename from src/flip.rs rename to crates/kornia-imgproc/src/flip.rs index 72f35b1d..44dfe740 100644 --- a/src/flip.rs +++ b/crates/kornia-imgproc/src/flip.rs @@ -1,5 +1,5 @@ -use crate::image::Image; use anyhow::Result; +use kornia_image::Image; /// Flip the input image horizontally. /// @@ -14,7 +14,8 @@ use anyhow::Result; /// # Example /// /// ``` -/// use kornia_rs::image::{Image, ImageSize}; +/// use kornia::image::{Image, ImageSize}; +/// use kornia::imgproc::flip::horizontal_flip; /// /// let image = Image::::new( /// ImageSize { @@ -24,7 +25,9 @@ use anyhow::Result; /// vec![0f32; 2 * 3 * 3], /// ) /// .unwrap(); -/// let flipped: Image = kornia_rs::flip::horizontal_flip(&image).unwrap(); +/// +/// let flipped: Image = horizontal_flip(&image).unwrap(); +/// /// assert_eq!(flipped.size().width, 2); /// assert_eq!(flipped.size().height, 3); /// ``` @@ -66,7 +69,8 @@ where /// # Example /// /// ``` -/// use kornia_rs::image::{Image, ImageSize}; +/// use kornia::image::{Image, ImageSize}; +/// use kornia::imgproc::flip::vertical_flip; /// /// let image = Image::::new( /// ImageSize { @@ -76,7 +80,9 @@ where /// vec![0f32; 2 * 3 * 3], /// ) /// .unwrap(); -/// let flipped: Image = kornia_rs::flip::vertical_flip(&image).unwrap(); +/// +/// let flipped: Image = vertical_flip(&image).unwrap(); +/// /// assert_eq!(flipped.size().width, 2); /// assert_eq!(flipped.size().height, 3); /// ``` @@ -107,8 +113,8 @@ where #[cfg(test)] mod tests { - use crate::image::{Image, ImageSize}; use anyhow::Result; + use kornia_image::{Image, ImageSize}; #[test] fn test_hflip() -> Result<()> { diff --git a/src/histogram.rs b/crates/kornia-imgproc/src/histogram.rs similarity index 85% rename from src/histogram.rs rename to crates/kornia-imgproc/src/histogram.rs index 41b8b834..374a60c8 100644 --- a/src/histogram.rs +++ b/crates/kornia-imgproc/src/histogram.rs @@ -1,6 +1,5 @@ use anyhow::Result; - -use crate::image::Image; +use kornia_image::Image; /// Compute the pixel intensity histogram of an image. /// @@ -22,15 +21,15 @@ use crate::image::Image; /// # Example /// /// ``` -/// use kornia_rs::image::{Image, ImageSize}; -/// use kornia_rs::histogram::compute_histogram; +/// use kornia::image::{Image, ImageSize}; +/// use kornia::imgproc::histogram::compute_histogram; /// /// let image = Image::::new( -/// ImageSize { -/// width: 3, -/// height: 3, -/// }, -/// vec![0, 2, 4, 128, 130, 132, 254, 255, 255], +/// ImageSize { +/// width: 3, +/// height: 3, +/// }, +/// vec![0, 2, 4, 128, 130, 132, 254, 255, 255], /// ).unwrap(); /// /// let histogram = compute_histogram(&image, 3).unwrap(); @@ -59,8 +58,8 @@ pub fn compute_histogram(image: &Image, num_bins: usize) -> Result Result<()> { diff --git a/src/interpolation/bilinear.rs b/crates/kornia-imgproc/src/interpolation/bilinear.rs similarity index 97% rename from src/interpolation/bilinear.rs rename to crates/kornia-imgproc/src/interpolation/bilinear.rs index 5617d600..688b92b8 100644 --- a/src/interpolation/bilinear.rs +++ b/crates/kornia-imgproc/src/interpolation/bilinear.rs @@ -1,4 +1,4 @@ -use crate::image::ImageDtype; +use kornia_image::ImageDtype; use ndarray::Array3; /// Kernel for bilinear interpolation diff --git a/src/interpolation/grid.rs b/crates/kornia-imgproc/src/interpolation/grid.rs similarity index 91% rename from src/interpolation/grid.rs rename to crates/kornia-imgproc/src/interpolation/grid.rs index 34bfbae9..e35a671d 100644 --- a/src/interpolation/grid.rs +++ b/crates/kornia-imgproc/src/interpolation/grid.rs @@ -14,9 +14,13 @@ use ndarray::Array2; /// # Example /// /// ``` +/// use kornia::imgproc::interpolation::meshgrid; +/// /// let x = ndarray::Array::linspace(0., 4., 5).insert_axis(ndarray::Axis(0)); /// let y = ndarray::Array::linspace(0., 3., 4).insert_axis(ndarray::Axis(0)); -/// let (xx, yy) = kornia_rs::interpolation::meshgrid(&x, &y); +/// +/// let (xx, yy) = meshgrid(&x, &y); +/// /// assert_eq!(xx.shape(), &[4, 5]); /// assert_eq!(yy.shape(), &[4, 5]); /// assert_eq!(xx[[0, 0]], 0.); diff --git a/src/interpolation/interpolate.rs b/crates/kornia-imgproc/src/interpolation/interpolate.rs similarity index 91% rename from src/interpolation/interpolate.rs rename to crates/kornia-imgproc/src/interpolation/interpolate.rs index a292c294..a1031939 100644 --- a/src/interpolation/interpolate.rs +++ b/crates/kornia-imgproc/src/interpolation/interpolate.rs @@ -1,12 +1,14 @@ use super::bilinear::bilinear_interpolation; use super::nearest::nearest_neighbor_interpolation; -use crate::image::ImageDtype; +use kornia_image::ImageDtype; use ndarray::Array3; /// Interpolation mode for the resize operation #[derive(Debug, Clone, Copy, PartialEq)] pub enum InterpolationMode { + /// Bilinear interpolation Bilinear, + /// Nearest neighbor interpolation Nearest, } diff --git a/src/interpolation/mod.rs b/crates/kornia-imgproc/src/interpolation/mod.rs similarity index 100% rename from src/interpolation/mod.rs rename to crates/kornia-imgproc/src/interpolation/mod.rs diff --git a/src/interpolation/nearest.rs b/crates/kornia-imgproc/src/interpolation/nearest.rs similarity index 95% rename from src/interpolation/nearest.rs rename to crates/kornia-imgproc/src/interpolation/nearest.rs index d22f5cf4..cb81b080 100644 --- a/src/interpolation/nearest.rs +++ b/crates/kornia-imgproc/src/interpolation/nearest.rs @@ -1,4 +1,4 @@ -use crate::image::ImageDtype; +use kornia_image::ImageDtype; use ndarray::Array3; /// Kernel for nearest neighbor interpolation diff --git a/src/interpolation/remap.rs b/crates/kornia-imgproc/src/interpolation/remap.rs similarity index 97% rename from src/interpolation/remap.rs rename to crates/kornia-imgproc/src/interpolation/remap.rs index b9f8f7e3..adcd87a3 100644 --- a/src/interpolation/remap.rs +++ b/crates/kornia-imgproc/src/interpolation/remap.rs @@ -1,7 +1,7 @@ use super::interpolate::interpolate_pixel; use super::InterpolationMode; -use crate::image::Image; use anyhow::Result; +use kornia_image::Image; /// Applyu generic geometric transformation to an image. /// @@ -50,7 +50,7 @@ mod tests { #[test] fn remap_smoke() -> Result<()> { - use crate::image::{Image, ImageSize}; + use kornia_image::{Image, ImageSize}; let image = Image::<_, 1>::new( ImageSize { width: 3, diff --git a/crates/kornia-imgproc/src/lib.rs b/crates/kornia-imgproc/src/lib.rs new file mode 100644 index 00000000..cebc99c4 --- /dev/null +++ b/crates/kornia-imgproc/src/lib.rs @@ -0,0 +1,40 @@ +//! Image processing operations. +#![deny(missing_docs)] + +/// image undistortion module. +pub mod calibration; + +/// color transformations module. +pub mod color; + +/// image basic operations module. +pub mod core; +// NOTE: not ready yet +// pub mod distance_transform; + +/// image enhancement module. +pub mod enhance; + +/// image flipping module. +pub mod flip; + +/// compute image histogram module. +pub mod histogram; + +/// utilities for interpolation. +pub mod interpolation; + +/// image processing metrics module. +pub mod metrics; + +/// operations to normalize images. +pub mod normalize; + +/// utility functions for resizing images. +pub mod resize; + +/// operations to threshold images. +pub mod threshold; + +/// image geometric transformations module. +pub mod warp; diff --git a/src/metrics/huber.rs b/crates/kornia-imgproc/src/metrics/huber.rs similarity index 93% rename from src/metrics/huber.rs rename to crates/kornia-imgproc/src/metrics/huber.rs index 9b009589..96fd5770 100644 --- a/src/metrics/huber.rs +++ b/crates/kornia-imgproc/src/metrics/huber.rs @@ -1,4 +1,4 @@ -use crate::image::Image; +use kornia_image::Image; /// Compute the Huber loss between two images. /// @@ -23,7 +23,7 @@ use crate::image::Image; /// # Example /// /// ``` -/// use kornia_rs::image::{Image, ImageSize}; +/// use kornia::image::{Image, ImageSize}; /// /// let image1 = Image::::new( /// ImageSize { @@ -43,7 +43,7 @@ use crate::image::Image; /// ) /// .unwrap(); /// -/// let huber = kornia_rs::metrics::huber(&image1, &image2, 1.0); +/// let huber = kornia::imgproc::metrics::huber(&image1, &image2, 1.0); /// assert_eq!(huber, 2.5); /// ``` /// @@ -76,8 +76,8 @@ pub fn huber( #[cfg(test)] mod tests { - use crate::image::{Image, ImageSize}; use anyhow::Result; + use kornia_image::{Image, ImageSize}; #[test] fn test_huber() -> Result<()> { diff --git a/src/metrics/l1.rs b/crates/kornia-imgproc/src/metrics/l1.rs similarity index 82% rename from src/metrics/l1.rs rename to crates/kornia-imgproc/src/metrics/l1.rs index 5e27a489..6dad9287 100644 --- a/src/metrics/l1.rs +++ b/crates/kornia-imgproc/src/metrics/l1.rs @@ -1,4 +1,4 @@ -use crate::image::Image; +use kornia_image::Image; /// Compute the L1 loss between two images. /// @@ -22,27 +22,28 @@ use crate::image::Image; /// # Example /// /// ``` -/// use kornia_rs::image::{Image, ImageSize}; +/// use kornia::image::{Image, ImageSize}; +/// use kornia::imgproc::metrics::l1_loss; /// /// let image1 = Image::::new( /// ImageSize { /// width: 2, -/// height: 3, -/// }, -/// vec![0f32, 1f32, 2f32, 3f32, 4f32, 5f32], +/// height: 3, +/// }, +/// vec![0f32, 1f32, 2f32, 3f32, 4f32, 5f32], /// ) /// .unwrap(); /// /// let image2 = Image::::new( -/// ImageSize { -/// width: 2, -/// height: 3, -/// }, -/// vec![5f32, 4f32, 3f32, 2f32, 1f32, 0f32], +/// ImageSize { +/// width: 2, +/// height: 3, +/// }, +/// vec![5f32, 4f32, 3f32, 2f32, 1f32, 0f32], /// ) /// .unwrap(); /// -/// let l1_loss = kornia_rs::metrics::l1_loss(&image1, &image2); +/// let l1_loss = l1_loss(&image1, &image2); /// assert_eq!(l1_loss, 3.0); /// ``` /// @@ -67,8 +68,8 @@ pub fn l1_loss( #[cfg(test)] mod tests { - use crate::image::{Image, ImageSize}; use anyhow::Result; + use kornia_image::{Image, ImageSize}; #[test] fn test_l1_loss() -> Result<()> { diff --git a/src/metrics/mod.rs b/crates/kornia-imgproc/src/metrics/mod.rs similarity index 100% rename from src/metrics/mod.rs rename to crates/kornia-imgproc/src/metrics/mod.rs diff --git a/src/metrics/mse.rs b/crates/kornia-imgproc/src/metrics/mse.rs similarity index 87% rename from src/metrics/mse.rs rename to crates/kornia-imgproc/src/metrics/mse.rs index ef265c15..4761bc6b 100644 --- a/src/metrics/mse.rs +++ b/crates/kornia-imgproc/src/metrics/mse.rs @@ -1,4 +1,4 @@ -use crate::image::Image; +use kornia_image::Image; /// Compute the mean squared error (MSE) between two images. /// @@ -20,27 +20,28 @@ use crate::image::Image; /// # Example /// /// ``` -/// use kornia_rs::image::{Image, ImageSize}; +/// use kornia::image::{Image, ImageSize}; +/// use kornia::imgproc::metrics::mse; /// /// let image1 = Image::::new( /// ImageSize { -/// width: 2, +/// width: 2, /// height: 3, -/// }, -/// vec![0f32, 1f32, 2f32, 3f32, 4f32, 5f32], +/// }, +/// vec![0f32, 1f32, 2f32, 3f32, 4f32, 5f32], /// ) /// .unwrap(); /// /// let image2 = Image::::new( /// ImageSize { /// width: 2, -/// height: 3, -/// }, -/// vec![0f32, 1f32, 2f32, 3f32, 4f32, 5f32], +/// height: 3, +/// }, +/// vec![0f32, 1f32, 2f32, 3f32, 4f32, 5f32], /// ) /// .unwrap(); /// -/// let mse = kornia_rs::metrics::mse(&image1, &image2); +/// let mse = mse(&image1, &image2); /// assert_eq!(mse, 0f32); /// ``` /// @@ -76,27 +77,29 @@ pub fn mse( /// /// # Example /// ``` -/// use kornia_rs::image::{Image, ImageSize}; +/// use kornia::image::{Image, ImageSize}; +/// use kornia::imgproc::metrics::psnr; /// /// let image1 = Image::::new( /// ImageSize { /// width: 1, -/// height: 2, -/// }, -/// vec![0f32, 1f32, 2f32, 3f32, 4f32, 5f32], +/// height: 2, +/// }, +/// vec![0f32, 1f32, 2f32, 3f32, 4f32, 5f32], /// ) /// .unwrap(); /// /// let image2 = Image::::new( /// ImageSize { -/// width: 1, -/// height: 2, -/// }, -/// vec![1f32, 3f32, 2f32, 4f32, 5f32, 6f32], +/// width: 1, +/// height: 2, +/// }, +/// vec![1f32, 3f32, 2f32, 4f32, 5f32, 6f32], /// ) /// .unwrap(); /// -/// let psnr = kornia_rs::metrics::psnr(&image1, &image2, 1.0); +/// let psnr = psnr(&image1, &image2, 1.0); +/// /// assert_eq!(psnr, 320.15698); /// ``` /// @@ -126,8 +129,8 @@ pub fn psnr( #[cfg(test)] mod tests { - use crate::image::{Image, ImageSize}; use anyhow::Result; + use kornia_image::{Image, ImageSize}; #[test] fn test_equal() -> Result<()> { diff --git a/src/normalize.rs b/crates/kornia-imgproc/src/normalize.rs similarity index 89% rename from src/normalize.rs rename to crates/kornia-imgproc/src/normalize.rs index 2ae4eece..568181be 100644 --- a/src/normalize.rs +++ b/crates/kornia-imgproc/src/normalize.rs @@ -1,5 +1,5 @@ -use crate::image::Image; use anyhow::Result; +use kornia_image::Image; /// Normalize an image using the mean and standard deviation. /// @@ -22,23 +22,26 @@ use anyhow::Result; /// # Example /// /// ``` -/// use kornia_rs::image::{Image, ImageSize}; +/// use kornia::image::{Image, ImageSize}; +/// use kornia::imgproc::normalize::normalize_mean_std; /// /// let image_data = vec![0f32, 1.0, 0.0, 1.0, 2.0, 3.0, 0.0, 1.0, 0.0, 1.0, 2.0, 3.0]; /// let image = Image::::new( -/// ImageSize { -/// width: 2, -/// height: 2, -/// }, -/// image_data, +/// ImageSize { +/// width: 2, +/// height: 2, +/// }, +/// image_data, /// ) /// .unwrap(); -/// let image_normalized = kornia_rs::normalize::normalize_mean_std( +/// +/// let image_normalized = normalize_mean_std( /// &image, /// &[0.5, 1.0, 0.5], /// &[1.0, 1.0, 1.0], /// ) /// .unwrap(); +/// /// assert_eq!(image_normalized.num_channels(), 3); /// assert_eq!(image_normalized.size().width, 2); /// assert_eq!(image_normalized.size().height, 2); @@ -81,19 +84,20 @@ where /// # Example /// /// ``` -/// use kornia_rs::image::{Image, ImageSize}; +/// use kornia::image::{Image, ImageSize}; +/// use kornia::imgproc::normalize::find_min_max; /// /// let image_data = vec![0u8, 1, 0, 1, 2, 3, 0, 1, 0, 1, 2, 3]; /// let image = Image::::new( -/// ImageSize { -/// width: 2, -/// height: 2, -/// }, -/// image_data, +/// ImageSize { +/// width: 2, +/// height: 2, +/// }, +/// image_data, /// ) /// .unwrap(); /// -/// let (min, max) = kornia_rs::normalize::find_min_max(&image).unwrap(); +/// let (min, max) = find_min_max(&image).unwrap(); /// assert_eq!(min, 0); /// assert_eq!(max, 3); /// ``` @@ -143,18 +147,21 @@ where /// # Example /// /// ``` -/// use kornia_rs::image::{Image, ImageSize}; +/// use kornia::image::{Image, ImageSize}; +/// use kornia::imgproc::normalize::normalize_min_max; /// /// let image_data = vec![0.0f32, 1.0, 0.0, 1.0, 2.0, 3.0, 0.0, 1.0, 0.0, 1.0, 2.0, 3.0]; /// let image = Image::::new( -/// ImageSize { -/// width: 2, -/// height: 2, -/// }, -/// image_data, +/// ImageSize { +/// width: 2, +/// height: 2, +/// }, +/// image_data, /// ) /// .unwrap(); -/// let image_normalized = kornia_rs::normalize::normalize_min_max(&image, 0.0, 1.0).unwrap(); +/// +/// let image_normalized = normalize_min_max(&image, 0.0, 1.0).unwrap(); +/// /// assert_eq!(image_normalized.num_channels(), 3); /// assert_eq!(image_normalized.size().width, 2); /// assert_eq!(image_normalized.size().height, 2); @@ -190,8 +197,8 @@ where #[cfg(test)] mod tests { - use crate::image::{Image, ImageSize}; use anyhow::Result; + use kornia_image::{Image, ImageSize}; #[test] fn normalize_mean_std() -> Result<()> { diff --git a/src/resize.rs b/crates/kornia-imgproc/src/resize.rs similarity index 91% rename from src/resize.rs rename to crates/kornia-imgproc/src/resize.rs index e8b47a13..258cdac6 100644 --- a/src/resize.rs +++ b/crates/kornia-imgproc/src/resize.rs @@ -1,7 +1,7 @@ -use crate::image::{Image, ImageDtype, ImageSize}; use crate::interpolation::{interpolate_pixel, meshgrid, InterpolationMode}; use anyhow::Result; use fast_image_resize as fr; +use kornia_image::{Image, ImageDtype, ImageSize}; use ndarray::stack; use std::num::NonZeroU32; @@ -23,7 +23,10 @@ use std::num::NonZeroU32; /// # Example /// /// ``` -/// use kornia_rs::image::{Image, ImageSize}; +/// use kornia::image::{Image, ImageSize}; +/// use kornia::imgproc::resize::resize_native; +/// use kornia::imgproc::interpolation::InterpolationMode; +/// /// let image = Image::<_, 3>::new( /// ImageSize { /// width: 4, @@ -32,15 +35,17 @@ use std::num::NonZeroU32; /// vec![0f32; 4 * 5 * 3], /// ) /// .unwrap(); -/// let image_resized: Image = kornia_rs::resize::resize_native( +/// +/// let image_resized: Image = resize_native( /// &image, /// ImageSize { /// width: 2, /// height: 3, /// }, -/// kornia_rs::interpolation::InterpolationMode::Nearest, +/// InterpolationMode::Nearest, /// ) /// .unwrap(); +/// /// assert_eq!(image_resized.num_channels(), 3); /// assert_eq!(image_resized.size().width, 2); /// assert_eq!(image_resized.size().height, 3); @@ -106,7 +111,10 @@ pub fn resize_native( /// # Example /// /// ``` -/// use kornia_rs::image::{Image, ImageSize}; +/// use kornia::image::{Image, ImageSize}; +/// use kornia::imgproc::resize::resize_fast; +/// use kornia::imgproc::interpolation::InterpolationMode; +/// /// let image = Image::<_, 3>::new( /// ImageSize { /// width: 4, @@ -115,15 +123,17 @@ pub fn resize_native( /// vec![0u8; 4 * 5 * 3], /// ) /// .unwrap(); -/// let image_resized: Image = kornia_rs::resize::resize_fast( +/// +/// let image_resized: Image = resize_fast( /// &image, -/// ImageSize { -/// width: 2, -/// height: 3, -/// }, -/// kornia_rs::interpolation::InterpolationMode::Nearest, +/// ImageSize { +/// width: 2, +/// height: 3, +/// }, +/// InterpolationMode::Nearest, /// ) /// .unwrap(); +/// /// assert_eq!(image_resized.num_channels(), 3); /// assert_eq!(image_resized.size().width, 2); /// assert_eq!(image_resized.size().height, 3); @@ -186,7 +196,7 @@ mod tests { #[test] fn resize_smoke_ch3() -> Result<()> { - use crate::image::{Image, ImageSize}; + use kornia_image::{Image, ImageSize}; let image = Image::<_, 3>::new( ImageSize { width: 4, @@ -211,7 +221,7 @@ mod tests { #[test] fn resize_smoke_ch1() -> Result<()> { - use crate::image::{Image, ImageSize}; + use kornia_image::{Image, ImageSize}; let image = Image::<_, 1>::new( ImageSize { width: 4, @@ -248,7 +258,7 @@ mod tests { #[test] fn resize_fast() -> Result<()> { - use crate::image::{Image, ImageSize}; + use kornia_image::{Image, ImageSize}; let image = Image::<_, 3>::new( ImageSize { width: 4, diff --git a/src/threshold.rs b/crates/kornia-imgproc/src/threshold.rs similarity index 95% rename from src/threshold.rs rename to crates/kornia-imgproc/src/threshold.rs index c0bbff18..bf69a9d4 100644 --- a/src/threshold.rs +++ b/crates/kornia-imgproc/src/threshold.rs @@ -1,5 +1,5 @@ -use crate::image::Image; use anyhow::Result; +use kornia_image::Image; /// Apply a binary threshold to an image. /// @@ -16,8 +16,8 @@ use anyhow::Result; /// # Examples /// /// ``` -/// use kornia_rs::image::{Image, ImageSize}; -/// use kornia_rs::threshold::threshold_binary; +/// use kornia::image::{Image, ImageSize}; +/// use kornia::imgproc::threshold::threshold_binary; /// /// let data = vec![100u8, 200, 50, 150, 200, 250]; /// let image = Image::<_, 1>::new(ImageSize { width: 2, height: 3 }, data).unwrap(); @@ -65,8 +65,8 @@ where /// # Examples /// /// ``` -/// use kornia_rs::image::{Image, ImageSize}; -/// use kornia_rs::threshold::threshold_binary_inverse; +/// use kornia::image::{Image, ImageSize}; +/// use kornia::imgproc::threshold::threshold_binary_inverse; /// /// let data = vec![100u8, 200, 50, 150, 200, 250]; /// let image = Image::<_, 1>::new(ImageSize { width: 2, height: 3 }, data).unwrap(); @@ -113,8 +113,8 @@ where /// # Examples /// /// ``` -/// use kornia_rs::image::{Image, ImageSize}; -/// use kornia_rs::threshold::threshold_truncate; +/// use kornia::image::{Image, ImageSize}; +/// use kornia::imgproc::threshold::threshold_truncate; /// /// let data = vec![100u8, 200, 50, 150, 200, 250]; /// let image = Image::<_, 1>::new(ImageSize { width: 2, height: 3 }, data).unwrap(); @@ -156,8 +156,8 @@ where /// # Examples /// /// ``` -/// use kornia_rs::image::{Image, ImageSize}; -/// use kornia_rs::threshold::threshold_to_zero; +/// use kornia::image::{Image, ImageSize}; +/// use kornia::imgproc::threshold::threshold_to_zero; /// /// let data = vec![100u8, 200, 50, 150, 200, 250]; /// let image = Image::<_, 3>::new(ImageSize { width: 2, height: 1 }, data).unwrap(); @@ -199,8 +199,8 @@ where /// # Examples /// /// ``` -/// use kornia_rs::image::{Image, ImageSize}; -/// use kornia_rs::threshold::threshold_to_zero_inverse; +/// use kornia::image::{Image, ImageSize}; +/// use kornia::imgproc::threshold::threshold_to_zero_inverse; /// /// let data = vec![100u8, 200, 50, 150, 200, 250]; /// let image = Image::<_, 3>::new(ImageSize { width: 2, height: 1 }, data).unwrap(); @@ -246,8 +246,8 @@ where /// # Examples /// /// ``` -/// use kornia_rs::image::{Image, ImageSize}; -/// use kornia_rs::threshold::in_range; +/// use kornia::image::{Image, ImageSize}; +/// use kornia::imgproc::threshold::in_range; /// /// let data = vec![100u8, 200, 50, 150, 200, 250]; /// @@ -296,8 +296,8 @@ where #[cfg(test)] mod tests { - use crate::image::{Image, ImageSize}; use anyhow::Result; + use kornia_image::{Image, ImageSize}; #[test] fn threshold_binary() -> Result<()> { diff --git a/src/warp/affine.rs b/crates/kornia-imgproc/src/warp/affine.rs similarity index 92% rename from src/warp/affine.rs rename to crates/kornia-imgproc/src/warp/affine.rs index c69e7ed3..8adb4068 100644 --- a/src/warp/affine.rs +++ b/crates/kornia-imgproc/src/warp/affine.rs @@ -1,9 +1,9 @@ use std::f32::consts::PI; -use crate::image::{Image, ImageSize}; use crate::interpolation::meshgrid; use crate::interpolation::{interpolate_pixel, InterpolationMode}; use anyhow::Result; +use kornia_image::{Image, ImageSize}; use ndarray::stack; type AffineMatrix = (f32, f32, f32, f32, f32, f32); @@ -62,7 +62,7 @@ pub fn invert_affine_transform(m: AffineMatrix) -> AffineMatrix { /// # Example /// /// ``` -/// use kornia_rs::warp::get_rotation_matrix2d; +/// use kornia::imgproc::warp::get_rotation_matrix2d; /// /// let center = (0.0, 0.0); /// let angle = 90.0; @@ -95,10 +95,12 @@ pub fn get_rotation_matrix2d(center: (f32, f32), angle: f32, scale: f32) -> Affi /// # Example /// /// ``` -/// use kornia_rs::warp::warp_affine; +/// use kornia::image::{Image, ImageSize}; +/// use kornia::imgproc::interpolation::InterpolationMode; +/// use kornia::imgproc::warp::warp_affine; /// -/// let src = kornia_rs::image::Image::<_, 3>::from_size_val( -/// kornia_rs::image::ImageSize { +/// let src = Image::<_, 3>::from_size_val( +/// ImageSize { /// width: 4, /// height: 5, /// }, @@ -106,12 +108,12 @@ pub fn get_rotation_matrix2d(center: (f32, f32), angle: f32, scale: f32) -> Affi /// ).unwrap(); /// /// let m = (1.0, 0.0, 0.0, 0.0, 1.0, 0.0); -/// let new_size = kornia_rs::image::ImageSize { +/// let new_size = ImageSize { /// width: 4, /// height: 5, /// }; /// -/// let output = warp_affine(&src, m, new_size, kornia_rs::interpolation::InterpolationMode::Nearest).unwrap(); +/// let output = warp_affine(&src, m, new_size, InterpolationMode::Nearest).unwrap(); /// /// assert_eq!(output.size().width, 4); /// assert_eq!(output.size().height, 5); @@ -180,7 +182,7 @@ mod tests { #[test] fn warp_affine_smoke_ch3() -> Result<()> { - use crate::image::{Image, ImageSize}; + use kornia_image::{Image, ImageSize}; let image = Image::<_, 3>::new( ImageSize { width: 4, @@ -205,7 +207,7 @@ mod tests { #[test] fn warp_affine_smoke_ch1() -> Result<()> { - use crate::image::{Image, ImageSize}; + use kornia_image::{Image, ImageSize}; let image = Image::<_, 1>::new( ImageSize { width: 4, @@ -230,7 +232,7 @@ mod tests { #[test] fn warp_affine_correctness_identity() -> Result<()> { - use crate::image::{Image, ImageSize}; + use kornia_image::{Image, ImageSize}; let image = Image::<_, 1>::new( ImageSize { width: 4, @@ -254,7 +256,7 @@ mod tests { #[test] fn warp_affine_correctness_rot90() -> Result<()> { - use crate::image::{Image, ImageSize}; + use kornia_image::{Image, ImageSize}; let image = Image::<_, 1>::new( ImageSize { width: 2, diff --git a/src/warp/mod.rs b/crates/kornia-imgproc/src/warp/mod.rs similarity index 100% rename from src/warp/mod.rs rename to crates/kornia-imgproc/src/warp/mod.rs diff --git a/src/warp/perspective.rs b/crates/kornia-imgproc/src/warp/perspective.rs similarity index 94% rename from src/warp/perspective.rs rename to crates/kornia-imgproc/src/warp/perspective.rs index 97955ba9..d83eb955 100644 --- a/src/warp/perspective.rs +++ b/crates/kornia-imgproc/src/warp/perspective.rs @@ -1,12 +1,10 @@ -use crate::interpolation::{interpolate_pixel, InterpolationMode}; -use crate::{ - image::{Image, ImageSize}, - interpolation::meshgrid, -}; +use crate::interpolation::{interpolate_pixel, meshgrid, InterpolationMode}; + use anyhow::Result; +use kornia_image::{Image, ImageSize}; use ndarray::stack; -// flat representation of a 3x3 matrix +/// flat representation of a 3x3 matrix pub type PerspectiveMatrix = [f32; 9]; #[rustfmt::skip] @@ -71,8 +69,9 @@ fn transform_point(x: f32, y: f32, m: PerspectiveMatrix) -> (f32, f32) { /// # Example /// /// ``` -/// use kornia_rs::image::{Image, ImageSize}; -/// use kornia_rs::warp::warp_perspective; +/// use kornia::image::{Image, ImageSize}; +/// use kornia::imgproc::interpolation::InterpolationMode; +/// use kornia::imgproc::warp::warp_perspective; /// /// let src = Image::::new( /// ImageSize { @@ -88,7 +87,7 @@ fn transform_point(x: f32, y: f32, m: PerspectiveMatrix) -> (f32, f32) { /// width: 2, /// height: 3, /// }, -/// kornia_rs::interpolation::InterpolationMode::Bilinear +/// InterpolationMode::Bilinear /// ).unwrap(); /// /// assert_eq!(dst.size().width, 2); @@ -166,7 +165,7 @@ mod tests { #[test] fn warp_perspective_identity() -> Result<()> { - use crate::image::{Image, ImageSize}; + use kornia_image::{Image, ImageSize}; let image: Image = Image::from_size_val( ImageSize { width: 4, @@ -197,7 +196,7 @@ mod tests { #[test] fn warp_perspective_hflip() -> Result<()> { - use crate::image::{Image, ImageSize}; + use kornia_image::{Image, ImageSize}; let image = Image::<_, 1>::new( ImageSize { width: 2, @@ -232,7 +231,7 @@ mod tests { #[test] fn test_warp_perspective_resize() -> Result<()> { - use crate::image::{Image, ImageSize}; + use kornia_image::{Image, ImageSize}; let image = Image::<_, 1>::new( ImageSize { width: 4, diff --git a/crates/kornia-io/Cargo.toml b/crates/kornia-io/Cargo.toml new file mode 100644 index 00000000..b8359a95 --- /dev/null +++ b/crates/kornia-io/Cargo.toml @@ -0,0 +1,44 @@ +[package] +name = "kornia-io" +authors.workspace = true +description = "Image and Video IO library in Rust for computer vision" +edition.workspace = true +homepage.workspace = true +license.workspace = true +publish = true +repository.workspace = true +rust-version.workspace = true +version.workspace = true + +[package.metadata.docs.rs] +all-features = true + +[dependencies] + +# kornia +kornia-image.workspace = true + +# external +anyhow = "1" +image = { version = "0.25" } +thiserror = "1" + +# optional dependencies +gst = { version = "0.23.0", package = "gstreamer", optional = true } +gst-app = { version = "0.23.0", package = "gstreamer-app", optional = true } +memmap2 = "0.9.4" +tokio = { version = "1", features = ["full"], optional = true } +turbojpeg = { version = "1.0.0", optional = true } + +[dev-dependencies] +criterion = "0.5" +tempfile = "3.10" +kornia = { workspace = true, features = ["jpegturbo"] } + +[features] +gstreamer = ["gst", "gst-app", "tokio"] +jpegturbo = ["turbojpeg"] + +[[bench]] +name = "bench_io" +harness = false diff --git a/benches/bench_io.rs b/crates/kornia-io/benches/bench_io.rs similarity index 68% rename from benches/bench_io.rs rename to crates/kornia-io/benches/bench_io.rs index 5c71088c..ffb6c640 100644 --- a/benches/bench_io.rs +++ b/crates/kornia-io/benches/bench_io.rs @@ -1,26 +1,26 @@ use criterion::{black_box, criterion_group, criterion_main, Criterion}; struct JpegReader { - decoder: kornia_rs::io::jpeg::ImageDecoder, + decoder: kornia::io::jpeg::ImageDecoder, } impl JpegReader { fn new() -> Self { Self { - decoder: kornia_rs::io::jpeg::ImageDecoder::new().unwrap(), + decoder: kornia::io::jpeg::ImageDecoder::new().unwrap(), } } - fn read(&mut self, file_path: &std::path::Path) -> kornia_rs::image::Image { + fn read(&mut self, file_path: &std::path::Path) -> kornia_image::Image { let file = std::fs::File::open(file_path).unwrap(); let mmap = unsafe { memmap2::Mmap::map(&file).unwrap() }; self.decoder.decode(&mmap).unwrap() } } -fn read_no_mmap(file_path: &std::path::Path) -> kornia_rs::image::Image { +fn read_no_mmap(file_path: &std::path::Path) -> kornia_image::Image { let file = std::fs::read(file_path).unwrap(); - kornia_rs::io::jpeg::ImageDecoder::new() + kornia::io::jpeg::ImageDecoder::new() .unwrap() .decode(&file) .unwrap() @@ -33,11 +33,11 @@ fn bench_read_jpeg(c: &mut Criterion) { // NOTE: this is the fastest method group.bench_function("jpegturbo", |b| { - b.iter(|| kornia_rs::io::functional::read_image_jpeg(black_box(img_path)).unwrap()) + b.iter(|| kornia::io::functional::read_image_jpeg(black_box(img_path)).unwrap()) }); group.bench_function("image", |b| { - b.iter(|| kornia_rs::io::functional::read_image_any(black_box(img_path)).unwrap()) + b.iter(|| kornia::io::functional::read_image_any(black_box(img_path)).unwrap()) }); // NOTE: similar to the functional::read_image_jpeg diff --git a/src/io/fps_counter.rs b/crates/kornia-io/src/fps_counter.rs similarity index 75% rename from src/io/fps_counter.rs rename to crates/kornia-io/src/fps_counter.rs index 0fa4e8be..b7c833e0 100644 --- a/src/io/fps_counter.rs +++ b/crates/kornia-io/src/fps_counter.rs @@ -1,11 +1,25 @@ use std::time::{Duration, Instant}; +/// A simple frame per second (FPS) counter. +/// +/// # Examples +/// +/// ``` +/// use kornia_io::fps_counter::FpsCounter; +/// +/// let mut fps_counter = FpsCounter::new(); +/// +/// for _ in 0..100 { +/// fps_counter.new_frame(); +/// } +/// ``` pub struct FpsCounter { last_time: Instant, frame_count: u32, } impl FpsCounter { + /// Creates a new `FpsCounter`. pub fn new() -> Self { Self { last_time: Instant::now(), @@ -13,6 +27,7 @@ impl FpsCounter { } } + /// Updates the frame count and calculates the FPS. pub fn new_frame(&mut self) { self.frame_count += 1; diff --git a/src/io/functional.rs b/crates/kornia-io/src/functional.rs similarity index 88% rename from src/io/functional.rs rename to crates/kornia-io/src/functional.rs index 550177d2..3d576994 100644 --- a/src/io/functional.rs +++ b/crates/kornia-io/src/functional.rs @@ -1,7 +1,7 @@ use anyhow::Result; use std::path::Path; -use crate::image::{Image, ImageSize}; +use kornia_image::{Image, ImageSize}; #[cfg(feature = "jpegturbo")] use super::jpeg::{ImageDecoder, ImageEncoder}; @@ -22,10 +22,10 @@ use super::jpeg::{ImageDecoder, ImageEncoder}; /// # Example /// /// ``` -/// use kornia_rs::image::Image; -/// use kornia_rs::io::functional as F; +/// use kornia::image::Image; +/// use kornia::io::functional as F; /// -/// let image_path = std::path::Path::new("tests/data/dog.jpeg"); +/// let image_path = std::path::Path::new("../../tests/data/dog.jpeg"); /// let image: Image = F::read_image_jpeg(image_path).unwrap(); /// assert_eq!(image.size().width, 258); /// assert_eq!(image.size().height, 195); @@ -94,10 +94,10 @@ pub fn write_image_jpeg(file_path: &Path, image: &Image) -> Result<()> { /// # Example /// /// ``` -/// use kornia_rs::image::Image; -/// use kornia_rs::io::functional as F; +/// use kornia::image::Image; +/// use kornia::io::functional as F; /// -/// let image_path = std::path::Path::new("tests/data/dog.jpeg"); +/// let image_path = std::path::Path::new("../../tests/data/dog.jpeg"); /// let image: Image = F::read_image_any(image_path).unwrap(); /// assert_eq!(image.size().width, 258); /// assert_eq!(image.size().height, 195); @@ -139,14 +139,14 @@ mod tests { use anyhow::Result; use std::path::Path; - use crate::io::functional::read_image_any; + use crate::functional::read_image_any; #[cfg(feature = "jpegturbo")] - use crate::io::functional::{read_image_jpeg, write_image_jpeg}; + use crate::functional::{read_image_jpeg, write_image_jpeg}; #[test] fn read_any() -> Result<()> { - let image_path = Path::new("tests/data/dog.jpeg"); + let image_path = Path::new("../../tests/data/dog.jpeg"); let image = read_image_any(image_path)?; assert_eq!(image.size().width, 258); assert_eq!(image.size().height, 195); @@ -157,7 +157,7 @@ mod tests { #[test] #[cfg(feature = "jpegturbo")] fn read_jpeg() -> Result<()> { - let image_path = Path::new("tests/data/dog.jpeg"); + let image_path = Path::new("../../tests/data/dog.jpeg"); let image = read_image_jpeg(image_path)?; assert_eq!(image.size().width, 258); assert_eq!(image.size().height, 195); @@ -168,7 +168,7 @@ mod tests { #[test] #[cfg(feature = "jpegturbo")] fn read_write_jpeg() -> Result<()> { - let image_path_read = Path::new("tests/data/dog.jpeg"); + let image_path_read = Path::new("../../tests/data/dog.jpeg"); let tmp_dir = tempfile::tempdir()?; std::fs::create_dir_all(tmp_dir.path())?; let file_path = tmp_dir.path().join("dog.jpeg"); diff --git a/src/io/jpeg.rs b/crates/kornia-io/src/jpeg.rs similarity index 93% rename from src/io/jpeg.rs rename to crates/kornia-io/src/jpeg.rs index f7c64f8c..6c8a1f48 100644 --- a/src/io/jpeg.rs +++ b/crates/kornia-io/src/jpeg.rs @@ -1,15 +1,17 @@ use anyhow::Result; use turbojpeg; -use crate::image::{Image, ImageSize}; +use kornia_image::{Image, ImageSize}; /// A JPEG decoder using the turbojpeg library. pub struct ImageDecoder { + /// The turbojpeg decompressor. pub decompressor: turbojpeg::Decompressor, } /// A JPEG encoder using the turbojpeg library. pub struct ImageEncoder { + /// The turbojpeg compressor. pub compressor: turbojpeg::Compressor, } @@ -148,12 +150,12 @@ impl ImageDecoder { #[cfg(test)] mod tests { - use crate::io::jpeg::{ImageDecoder, ImageEncoder}; + use crate::jpeg::{ImageDecoder, ImageEncoder}; use anyhow::Result; #[test] fn image_decoder() -> Result<()> { - let jpeg_data = std::fs::read("tests/data/dog.jpeg").unwrap(); + let jpeg_data = std::fs::read("../../tests/data/dog.jpeg").unwrap(); // read the header let image_size = ImageDecoder::new()?.read_header(&jpeg_data)?; assert_eq!(image_size.width, 258); @@ -168,7 +170,7 @@ mod tests { #[test] fn image_encoder() -> Result<()> { - let jpeg_data_fs = std::fs::read("tests/data/dog.jpeg")?; + let jpeg_data_fs = std::fs::read("../../tests/data/dog.jpeg")?; let image = ImageDecoder::new()?.decode(&jpeg_data_fs)?; let jpeg_data = ImageEncoder::new()?.encode(&image)?; let image_back = ImageDecoder::new()?.decode(&jpeg_data)?; diff --git a/crates/kornia-io/src/lib.rs b/crates/kornia-io/src/lib.rs new file mode 100644 index 00000000..62cd6818 --- /dev/null +++ b/crates/kornia-io/src/lib.rs @@ -0,0 +1,20 @@ +//! I/O utilities for real-time image and video processing. +#![deny(missing_docs)] + +/// Module to handle the camera frame rate. +pub mod fps_counter; + +/// High-level read and write functions for images. +pub mod functional; + +/// TurboJPEG image encoding and decoding. +#[cfg(feature = "jpegturbo")] +pub mod jpeg; + +/// GStreamer video module for real-time video processing. +#[cfg(feature = "gstreamer")] +pub mod stream; + +/// Webcam video module for real-time video processing. +#[cfg(feature = "gstreamer")] +pub mod webcam; diff --git a/src/io/stream/camera.rs b/crates/kornia-io/src/stream/camera.rs similarity index 98% rename from src/io/stream/camera.rs rename to crates/kornia-io/src/stream/camera.rs index 761b5ba1..1cfaa508 100644 --- a/src/io/stream/camera.rs +++ b/crates/kornia-io/src/stream/camera.rs @@ -1,6 +1,6 @@ use super::StreamCaptureError; -use crate::image::{Image, ImageSize}; use gst::prelude::*; +use kornia_image::{Image, ImageSize}; /// A builder for creating a CameraCapture object pub struct CameraCaptureBuilder { @@ -73,13 +73,14 @@ impl Default for CameraCaptureBuilder { /// # Example /// /// ```no_run -/// use kornia_rs::{image::ImageSize, io::stream::CameraCaptureBuilder}; +/// use kornia::image::ImageSize; +/// use kornia::io::stream::CameraCapture; /// /// #[tokio::main] /// async fn main() -> Result<(), Box> { /// // create a webcam capture object with camera id 0 /// // and force the image size to 640x480 -/// let mut webcam = CameraCaptureBuilder::new() +/// let mut webcam = CameraCapture::builder() /// .camera_id(0) /// .with_fps(30) /// .with_size(ImageSize { diff --git a/src/io/stream/mod.rs b/crates/kornia-io/src/stream/mod.rs similarity index 54% rename from src/io/stream/mod.rs rename to crates/kornia-io/src/stream/mod.rs index 5c8c4d72..5936f0db 100644 --- a/src/io/stream/mod.rs +++ b/crates/kornia-io/src/stream/mod.rs @@ -1,54 +1,71 @@ -mod camera; -pub use camera::{CameraCapture, CameraCaptureBuilder}; +/// A module for capturing video streams from different sources. +pub mod camera; + +pub use crate::stream::camera::{CameraCapture, CameraCaptureBuilder}; /// An error type for WebcamCapture #[derive(thiserror::Error, Debug)] pub enum StreamCaptureError { + /// An error occurred during GStreamer initialization. #[error("Failed to initialize GStreamer")] GStreamerError(#[from] gst::glib::Error), + /// An error occurred during GStreamer downcast of pipeline element. #[error("Failed to downcast pipeline")] DowncastPipelineError(gst::Element), + /// An error occurred during GStreamer downcast of appsink. #[error("Failed to downcast appsink")] DowncastAppSinkError, + /// An error occurred during GStreamer to get the bus. #[error("Failed to get the bus")] BusError, + /// An error occurred during GStreamer to set the pipeline state. #[error("Failed to set the pipeline state")] SetPipelineStateError(#[from] gst::StateChangeError), + /// An error occurred during GStreamer to pull sample from appsink. #[error("Failed to pull sample from appsink")] PullSampleError(#[from] gst::glib::BoolError), + /// An error occurred during GStreamer to get the caps from the sample. #[error("Failed to get the caps from the sample")] GetCapsError, + /// An error occurred during GStreamer to get the structure from the caps. #[error("Failed to get the structure")] GetStructureError, // TODO: figure out the #[from] macro for this error + /// An error occurred during GStreamer to get the height from the structure. #[error("Failed to get the height from the structure")] GetHeightError, // TODO: figure out the #[from] macro for this error + /// An error occurred during GStreamer to get the width from the structure. #[error("Failed to get the width from the structure")] GetWidthError, + /// An error occurred during GStreamer to get the buffer from the sample. #[error("Failed to get the buffer from the sample")] GetBufferError, + /// An error occurred during GStreamer to map the buffer to an ImageFrame. #[error("Failed to create an image frame")] CreateImageFrameError, // TODO: support later on ImageError + /// An error occurred during processing the image frame. #[error("Failed processing the image frame")] ProcessImageFrameError(#[from] Box), + /// An error occurred during GStreamer to send eos event. #[error("Failed to send eos event")] SendEosError, + /// An error occurred during GStreamer to send flush start event. #[error("Pipeline cancelled by the user")] PipelineCancelled, } diff --git a/src/io/webcam.rs b/crates/kornia-io/src/webcam.rs similarity index 91% rename from src/io/webcam.rs rename to crates/kornia-io/src/webcam.rs index 68020081..82ca8083 100644 --- a/src/io/webcam.rs +++ b/crates/kornia-io/src/webcam.rs @@ -5,6 +5,7 @@ use super::stream::{CameraCapture, CameraCaptureBuilder}; note = "This module is deprecated and will be removed in the next release. \ Please use the `StreamCaptureError` type from the `stream` module" )] +#[allow(missing_docs)] pub type StreamCaptureError = super::stream::StreamCaptureError; #[deprecated( @@ -12,6 +13,7 @@ pub type StreamCaptureError = super::stream::StreamCaptureError; note = "This module is deprecated and will be removed in the next release. \ Please use the `CameraCaptureBuilder` struct from the `stream` module" )] +#[allow(missing_docs)] pub type WebcamCaptureBuilder = CameraCaptureBuilder; #[deprecated( @@ -19,4 +21,5 @@ pub type WebcamCaptureBuilder = CameraCaptureBuilder; note = "This module is deprecated and will be removed in the next release. \ Please use the `CameraCapture` struct from the `stream` module" )] +#[allow(missing_docs)] pub type WebcamCapture = CameraCapture; diff --git a/crates/kornia/Cargo.toml b/crates/kornia/Cargo.toml new file mode 100644 index 00000000..075283de --- /dev/null +++ b/crates/kornia/Cargo.toml @@ -0,0 +1,22 @@ +[package] +name = "kornia" +authors.workspace = true +description = "Kornia top-level crate" +edition.workspace = true +homepage.workspace = true +license.workspace = true +publish = true +readme.workspace = true +repository.workspace = true +rust-version.workspace = true +version.workspace = true + +[features] +gstreamer = ["kornia-io/gstreamer"] +jpegturbo = ["kornia-io/jpegturbo"] + +[dependencies] +kornia-core.workspace = true +kornia-image.workspace = true +kornia-imgproc.workspace = true +kornia-io = { workspace = true, features = [] } diff --git a/crates/kornia/src/lib.rs b/crates/kornia/src/lib.rs new file mode 100644 index 00000000..c494ce0e --- /dev/null +++ b/crates/kornia/src/lib.rs @@ -0,0 +1,11 @@ +#[doc(inline)] +pub use kornia_core as core; + +#[doc(inline)] +pub use kornia_image as image; + +#[doc(inline)] +pub use kornia_imgproc as imgproc; + +#[doc(inline)] +pub use kornia_io as io; diff --git a/devel-x86_64.Dockerfile b/devel-x86_64.Dockerfile index 28ac0b42..290d7332 100644 --- a/devel-x86_64.Dockerfile +++ b/devel-x86_64.Dockerfile @@ -1,4 +1,4 @@ -FROM rust:1.77 +FROM rust:1.79 RUN rustup update stable diff --git a/devel.sh b/devel.sh deleted file mode 100755 index 38b1ad4d..00000000 --- a/devel.sh +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/bash -e -DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )" -$DIR/docker/devel.sh $@ diff --git a/examples/binarize/Cargo.toml b/examples/binarize/Cargo.toml new file mode 100644 index 00000000..a0b328f3 --- /dev/null +++ b/examples/binarize/Cargo.toml @@ -0,0 +1,18 @@ +[package] +name = "binarize" +authors.workspace = true +categories.workspace = true +description.workspace = true +edition.workspace = true +homepage.workspace = true +include.workspace = true +license.workspace = true +repository.workspace = true +rust-version.workspace = true +version.workspace = true +publish = false + +[dependencies] +clap = { version = "4.5.9", features = ["derive"] } +kornia.workspace = true +rerun = "0.16.0" diff --git a/examples/binarize/README.md b/examples/binarize/README.md new file mode 100644 index 00000000..5dd86da4 --- /dev/null +++ b/examples/binarize/README.md @@ -0,0 +1,13 @@ +Example showing to binarize an image using the Kornia Rust image processing library. + +```bash +Usage: binarize --image-path + +Options: + -i, --image-path + -h, --help Print help +``` + +Output: + +TODO: add image output diff --git a/examples/binarize.rs b/examples/binarize/src/main.rs similarity index 53% rename from examples/binarize.rs rename to examples/binarize/src/main.rs index a2832807..1aba31d3 100644 --- a/examples/binarize.rs +++ b/examples/binarize/src/main.rs @@ -1,23 +1,32 @@ -use kornia_rs::image::Image; -use kornia_rs::io::functional as F; +use clap::Parser; +use std::path::PathBuf; + +use kornia::io::functional as F; +use kornia::{image::Image, imgproc}; + +#[derive(Parser)] +struct Args { + #[arg(short, long)] + image_path: PathBuf, +} fn main() -> Result<(), Box> { + let args = Args::parse(); + // read the image - let image_path = std::path::Path::new("tests/data/dog.jpeg"); - let image: Image = F::read_image_any(image_path)?; + let image: Image = F::read_image_any(&args.image_path)?; // binarize the image as u8 - let _image_bin: Image = - kornia_rs::threshold::threshold_binary(&image.clone(), 127, 255)?; + let _image_bin: Image = imgproc::threshold::threshold_binary(&image.clone(), 127, 255)?; // normalize the image between 0 and 1 let image_f32: Image = image.cast_and_scale::(1.0 / 255.0)?; // convert to grayscale as floating point - let gray_f32: Image = kornia_rs::color::gray_from_rgb(&image_f32)?; + let gray_f32: Image = imgproc::color::gray_from_rgb(&image_f32)?; // binarize the gray image as floating point - let gray_bin: Image = kornia_rs::threshold::threshold_binary(&gray_f32, 0.5, 1.0)?; + let gray_bin: Image = imgproc::threshold::threshold_binary(&gray_f32, 0.5, 1.0)?; // create a Rerun recording stream let rec = rerun::RecordingStreamBuilder::new("Kornia App").spawn()?; diff --git a/examples/color_detector/Cargo.toml b/examples/color_detector/Cargo.toml new file mode 100644 index 00000000..5dfa5429 --- /dev/null +++ b/examples/color_detector/Cargo.toml @@ -0,0 +1,18 @@ +[package] +name = "color_detector" +authors.workspace = true +categories.workspace = true +description.workspace = true +edition.workspace = true +homepage.workspace = true +include.workspace = true +license.workspace = true +repository.workspace = true +rust-version.workspace = true +version.workspace = true +publish = false + +[dependencies] +clap = { version = "4.5.9", features = ["derive"] } +kornia.workspace = true +rerun = "0.16.0" diff --git a/examples/color_detector/README.md b/examples/color_detector/README.md new file mode 100644 index 00000000..93e58c08 --- /dev/null +++ b/examples/color_detector/README.md @@ -0,0 +1,19 @@ +Example showing to detect segment by color using the Kornia Rust image processing library. + +```bash +Usage: color_detector --image-path + +Options: + -i, --image-path + -h, --help Print help +``` + +Example: + +```bash +cargo run -p color_detector -- --image-path path/to/image.jpg +``` + +Output: + +TODO: add image output diff --git a/examples/color_detector.rs b/examples/color_detector/src/main.rs similarity index 67% rename from examples/color_detector.rs rename to examples/color_detector/src/main.rs index 01f1e8e0..7a4874ad 100644 --- a/examples/color_detector.rs +++ b/examples/color_detector/src/main.rs @@ -1,7 +1,9 @@ use clap::Parser; - use std::path::PathBuf; +use kornia::imgproc; +use kornia::io::functional as F; + #[derive(Parser)] struct Args { #[arg(short, long)] @@ -12,16 +14,16 @@ fn main() -> Result<(), Box> { let args = Args::parse(); // read the image - let rgb = kornia_rs::io::functional::read_image_any(&args.image_path)?; + let rgb = F::read_image_any(&args.image_path)?; // binarize the image as u8 - let hsv = kornia_rs::color::hsv_from_rgb(&rgb.clone().cast()?)?; // convert to u8 (0-255) + let hsv = imgproc::color::hsv_from_rgb(&rgb.clone().cast()?)?; // convert to u8 (0-255) // create the mask for the green color - let mask = kornia_rs::threshold::in_range(&hsv, &[40.0, 110.0, 50.0], &[90.0, 255.0, 255.0])?; + let mask = imgproc::threshold::in_range(&hsv, &[40.0, 110.0, 50.0], &[90.0, 255.0, 255.0])?; // apply the mask to the image - let output = kornia_rs::core::bitwise_and(&rgb, &rgb, &mask)?; + let output = imgproc::core::bitwise_and(&rgb, &rgb, &mask)?; // create a Rerun recording stream let rec = rerun::RecordingStreamBuilder::new("Kornia App").spawn()?; diff --git a/examples/hello_world.rs b/examples/hello_world.rs deleted file mode 100644 index b81d7f67..00000000 --- a/examples/hello_world.rs +++ /dev/null @@ -1,14 +0,0 @@ -use kornia_rs::image::Image; -use kornia_rs::io::functional as F; - -fn main() -> Result<(), Box> { - // read the image - let image_path = std::path::Path::new("tests/data/dog.jpeg"); - let image: Image = F::read_image_any(image_path)?; - - println!("Hello, world!"); - println!("Loaded Image size: {:?}", image.size()); - println!("\nGoodbyte!"); - - Ok(()) -} diff --git a/examples/hello_world/Cargo.toml b/examples/hello_world/Cargo.toml new file mode 100644 index 00000000..15d87340 --- /dev/null +++ b/examples/hello_world/Cargo.toml @@ -0,0 +1,17 @@ +[package] +name = "hello_world" +authors.workspace = true +categories.workspace = true +description.workspace = true +edition.workspace = true +homepage.workspace = true +include.workspace = true +license.workspace = true +repository.workspace = true +rust-version.workspace = true +version.workspace = true +publish = false + +[dependencies] +clap = { version = "4.5.9", features = ["derive"] } +kornia.workspace = true diff --git a/examples/hello_world/README.md b/examples/hello_world/README.md new file mode 100644 index 00000000..d96fdc6d --- /dev/null +++ b/examples/hello_world/README.md @@ -0,0 +1,24 @@ +Hello world example for the Kornia Rust library. + +```bash +Usage: hello_world --image-path + +Options: + -i, --image-path + -h, --help Print help +``` + +Example: + +```bash +cargo run -p hello_world -- --image-path path/to/image.jpg +``` + +Output: + +```bash +Hello, world! 🦀 +Loaded Image size: ImageSize { width: 258, height: 195 } + +Goodbyte! +``` diff --git a/examples/hello_world/src/main.rs b/examples/hello_world/src/main.rs new file mode 100644 index 00000000..1b6e31be --- /dev/null +++ b/examples/hello_world/src/main.rs @@ -0,0 +1,24 @@ +use clap::Parser; +use std::path::PathBuf; + +use kornia::image::Image; +use kornia::io::functional as F; + +#[derive(Parser)] +struct Args { + #[arg(short, long)] + image_path: PathBuf, +} + +fn main() -> Result<(), Box> { + let args = Args::parse(); + + // read the image + let image: Image = F::read_image_any(&args.image_path)?; + + println!("Hello, world! 🦀"); + println!("Loaded Image size: {:?}", image.size()); + println!("\nGoodbyte!"); + + Ok(()) +} diff --git a/examples/histogram/Cargo.toml b/examples/histogram/Cargo.toml new file mode 100644 index 00000000..07ae9591 --- /dev/null +++ b/examples/histogram/Cargo.toml @@ -0,0 +1,18 @@ +[package] +name = "histogram" +authors.workspace = true +categories.workspace = true +description.workspace = true +edition.workspace = true +homepage.workspace = true +include.workspace = true +license.workspace = true +repository.workspace = true +rust-version.workspace = true +version.workspace = true +publish = false + +[dependencies] +clap = { version = "4.5.9", features = ["derive"] } +kornia.workspace = true +rerun = "0.16.0" diff --git a/examples/histogram/README.md b/examples/histogram/README.md new file mode 100644 index 00000000..c35f2848 --- /dev/null +++ b/examples/histogram/README.md @@ -0,0 +1,19 @@ +Example showing to compute the histogram of an image using the Kornia Rust image processing library. + +```bash +Usage: histogram --image-path + +Options: + -i, --image-path + -h, --help Print help +``` + +Example: + +```bash +cargo run -p histogram -- --image-path path/to/image.jpg +``` + +Output: + +TODO: add image output diff --git a/examples/histogram.rs b/examples/histogram/src/main.rs similarity index 83% rename from examples/histogram.rs rename to examples/histogram/src/main.rs index 85d511e9..fa35813b 100644 --- a/examples/histogram.rs +++ b/examples/histogram/src/main.rs @@ -1,10 +1,20 @@ -use kornia_rs::image::Image; -use kornia_rs::io::functional as F; +use clap::Parser; +use std::path::PathBuf; + +use kornia::io::functional as F; +use kornia::{image::Image, imgproc}; + +#[derive(Parser)] +struct Args { + #[arg(short, long)] + image_path: PathBuf, +} fn main() -> Result<(), Box> { + let args = Args::parse(); + // read the image - let image_path = std::path::Path::new("tests/data/dog.jpeg"); - let image: Image = F::read_image_any(image_path)?; + let image: Image = F::read_image_any(&args.image_path)?; // create a Rerun recording stream let rec = rerun::RecordingStreamBuilder::new("Kornia App").spawn()?; @@ -13,7 +23,7 @@ fn main() -> Result<(), Box> { let histogram = image .split_channels()? .iter() - .map(|ch| kornia_rs::histogram::compute_histogram(ch, 256)) + .map(|ch| imgproc::histogram::compute_histogram(ch, 256)) .collect::, _>>()?; // log the image and the histogram diff --git a/examples/imgproc/Cargo.toml b/examples/imgproc/Cargo.toml new file mode 100644 index 00000000..ef09d66d --- /dev/null +++ b/examples/imgproc/Cargo.toml @@ -0,0 +1,17 @@ +[package] +name = "imgproc" +authors.workspace = true +categories.workspace = true +description.workspace = true +edition.workspace = true +homepage.workspace = true +include.workspace = true +license.workspace = true +repository.workspace = true +rust-version.workspace = true +version.workspace = true + +[dependencies] +clap = { version = "4.5.9", features = ["derive"] } +kornia.workspace = true +rerun = "0.16.0" diff --git a/examples/imgproc/README.md b/examples/imgproc/README.md new file mode 100644 index 00000000..02b15806 --- /dev/null +++ b/examples/imgproc/README.md @@ -0,0 +1,19 @@ +Example how to perform basic image processing operations using Kornia Rust library. + +```bash +Usage: imgproc --image-path + +Options: + -i, --image-path + -h, --help Print help +``` + +Example: + +```bash +cargo run -p imgproc -- --image-path path/to/image.jpg +``` + +Output: + +TODO: add output here diff --git a/examples/imgproc.rs b/examples/imgproc/src/main.rs similarity index 55% rename from examples/imgproc.rs rename to examples/imgproc/src/main.rs index 4358b414..a4af0552 100644 --- a/examples/imgproc.rs +++ b/examples/imgproc/src/main.rs @@ -1,23 +1,36 @@ -use kornia_rs::image::Image; -use kornia_rs::io::functional as F; +use clap::Parser; +use std::path::PathBuf; + +use kornia::io::functional as F; +use kornia::{ + image::{Image, ImageSize}, + imgproc, +}; + +#[derive(Parser)] +struct Args { + #[arg(short, long)] + image_path: PathBuf, +} fn main() -> Result<(), Box> { + let args = Args::parse(); + // read the image - let image_path = std::path::Path::new("tests/data/dog.jpeg"); - let image: Image = F::read_image_any(image_path)?; + let image: Image = F::read_image_any(&args.image_path)?; let image_f32: Image = image.cast_and_scale::(1.0 / 255.0)?; // convert the image to grayscale - let gray: Image = kornia_rs::color::gray_from_rgb(&image_f32)?; + let gray: Image = imgproc::color::gray_from_rgb(&image_f32)?; - let gray_resize: Image = kornia_rs::resize::resize_native( + let gray_resize: Image = imgproc::resize::resize_native( &gray, - kornia_rs::image::ImageSize { + ImageSize { width: 128, height: 128, }, - kornia_rs::interpolation::InterpolationMode::Bilinear, + imgproc::interpolation::InterpolationMode::Bilinear, )?; println!("gray_resize: {:?}", gray_resize.size()); diff --git a/examples/metrics/Cargo.toml b/examples/metrics/Cargo.toml new file mode 100644 index 00000000..23d593e1 --- /dev/null +++ b/examples/metrics/Cargo.toml @@ -0,0 +1,17 @@ +[package] +name = "metrics" +authors.workspace = true +categories.workspace = true +description.workspace = true +edition.workspace = true +homepage.workspace = true +include.workspace = true +license.workspace = true +repository.workspace = true +rust-version.workspace = true +version.workspace = true + +[dependencies] +clap = { version = "4.5.9", features = ["derive"] } +kornia.workspace = true +rerun = "0.16.0" diff --git a/examples/metrics/README.md b/examples/metrics/README.md new file mode 100644 index 00000000..06eb83cb --- /dev/null +++ b/examples/metrics/README.md @@ -0,0 +1,22 @@ +Example how to compute the metrics (mse, psnr) of an image using the Kornia Rust image processing library. + +```bash +Usage: metrics --image-path + +Options: + -i, --image-path + -h, --help Print help +``` + +Example: + +```bash +cargo run -p metrics -- --image-path path/to/image.jpg +``` + +Output: + +```bash +MSE error: 0.020697484 +PSNR error: -23.751804 +``` diff --git a/examples/metrics.rs b/examples/metrics/src/main.rs similarity index 66% rename from examples/metrics.rs rename to examples/metrics/src/main.rs index 795198b6..6cd670f1 100644 --- a/examples/metrics.rs +++ b/examples/metrics/src/main.rs @@ -1,20 +1,30 @@ -use kornia_rs::image::Image; -use kornia_rs::io::functional as F; +use clap::Parser; +use std::path::PathBuf; + +use kornia::io::functional as F; +use kornia::{image::Image, imgproc}; + +#[derive(Parser)] +struct Args { + #[arg(short, long)] + image_path: PathBuf, +} fn main() -> Result<(), Box> { + let args = Args::parse(); + // read the image - let image_path = std::path::Path::new("tests/data/dog.jpeg"); - let image: Image = F::read_image_any(image_path)?; + let image: Image = F::read_image_any(&args.image_path)?; // convert the image to f32 and scale it let image: Image = image.cast_and_scale::(1.0 / 255.0)?; // modify the image to see the changes - let image_dirty = kornia_rs::flip::horizontal_flip(&image)?; + let image_dirty = imgproc::flip::horizontal_flip(&image)?; // compute the mean squared error (mse) between the original and the modified image - let mse = kornia_rs::metrics::mse(&image, &image_dirty); - let psnr = kornia_rs::metrics::psnr(&image, &image_dirty, 1.0); + let mse = imgproc::metrics::mse(&image, &image_dirty); + let psnr = imgproc::metrics::psnr(&image, &image_dirty, 1.0); // print the mse error println!("MSE error: {:?}", mse); diff --git a/examples/normalize/Cargo.toml b/examples/normalize/Cargo.toml new file mode 100644 index 00000000..5eeea15b --- /dev/null +++ b/examples/normalize/Cargo.toml @@ -0,0 +1,18 @@ +[package] +name = "normalize" +authors.workspace = true +categories.workspace = true +description.workspace = true +edition.workspace = true +homepage.workspace = true +include.workspace = true +license.workspace = true +repository.workspace = true +rust-version.workspace = true +version.workspace = true +publish = false + +[dependencies] +clap = { version = "4.5.9", features = ["derive"] } +kornia.workspace = true +rerun = "0.16.0" diff --git a/examples/normalize/README.md b/examples/normalize/README.md new file mode 100644 index 00000000..e41dd8d2 --- /dev/null +++ b/examples/normalize/README.md @@ -0,0 +1,21 @@ +Example showing how to normalize and compute the min and max of an image. + +```bash +Usage: normalize --image-path + +Options: + -i, --image-path + -h, --help Print help +``` + +Example: + +```bash +cargo run -p normalize -- --image-path path/to/image.jpg +``` + +output: + +```bash +min: 0.0, max: 255.0 +``` diff --git a/examples/normalize.rs b/examples/normalize/src/main.rs similarity index 63% rename from examples/normalize.rs rename to examples/normalize/src/main.rs index 6dc52d75..7c371cbe 100644 --- a/examples/normalize.rs +++ b/examples/normalize/src/main.rs @@ -1,16 +1,26 @@ -use kornia_rs::image::Image; -use kornia_rs::io::functional as F; +use clap::Parser; +use std::path::PathBuf; + +use kornia::io::functional as F; +use kornia::{image::Image, imgproc}; + +#[derive(Parser)] +struct Args { + #[arg(short, long)] + image_path: PathBuf, +} fn main() -> Result<(), Box> { + let args = Args::parse(); + // read the image - let image_path = std::path::Path::new("tests/data/dog.jpeg"); - let image: Image = F::read_image_any(image_path)?; + let image: Image = F::read_image_any(&args.image_path)?; // cast the image to floating point let image_f32: Image = image.clone().cast::()?; // normalize the image between 0 and 255 - let _image_f32_norm: Image = kornia_rs::normalize::normalize_mean_std( + let _image_f32_norm: Image = imgproc::normalize::normalize_mean_std( &image_f32, &[127.5, 127.5, 127.5], &[127.5, 127.5, 127.5], @@ -24,7 +34,7 @@ fn main() -> Result<(), Box> { let _image_f32_norm: Image = image_f32.mul(1.0 / 255.0); // Or: let image_f32_norm = image_f32.div(255.0); - let (min, max) = kornia_rs::normalize::find_min_max(&image_f32)?; + let (min, max) = imgproc::normalize::find_min_max(&image_f32)?; println!("min: {:?}, max: {:?}", min, max); Ok(()) diff --git a/examples/normalize_ii.rs b/examples/normalize_ii.rs deleted file mode 100644 index 66a253d3..00000000 --- a/examples/normalize_ii.rs +++ /dev/null @@ -1,31 +0,0 @@ -use kornia_rs::image::Image; -use kornia_rs::io::functional as F; - -fn main() -> Result<(), Box> { - // read the image - let image_path = std::path::Path::new("tests/data/dog.jpeg"); - let image: Image = F::read_image_any(image_path)?; - - // cast the image to floating point - let image_f32: Image = image.clone().cast_and_scale::(1.0 / 255.0)?; - - // convert to grayscale - let gray_f32: Image = kornia_rs::color::gray_from_rgb(&image_f32)?; - - // normalize the image each channel - let _image_norm: Image = - kornia_rs::normalize::normalize_mean_std(&image_f32, &[0.5, 0.5, 0.5], &[0.5, 0.5, 0.5])?; - - // normalize the grayscale image - let _gray_norm: Image = - kornia_rs::normalize::normalize_mean_std(&gray_f32, &[0.5], &[0.5])?; - - // alternative way to normalize the image between 0 and 255 - // let _gray_norm_min_max = kornia_rs::normalize::normalize_min_max( - // &gray, 0.0, 255.0)?; - - let (min, max) = kornia_rs::normalize::find_min_max(&gray_f32)?; - println!("min: {:?}, max: {:?}", min, max); - - Ok(()) -} diff --git a/examples/normalize_ii/Cargo.toml b/examples/normalize_ii/Cargo.toml new file mode 100644 index 00000000..d5c0d25a --- /dev/null +++ b/examples/normalize_ii/Cargo.toml @@ -0,0 +1,18 @@ +[package] +name = "normalize_ii" +authors.workspace = true +categories.workspace = true +description.workspace = true +edition.workspace = true +homepage.workspace = true +include.workspace = true +license.workspace = true +repository.workspace = true +rust-version.workspace = true +version.workspace = true +publish = false + +[dependencies] +clap = { version = "4.5.9", features = ["derive"] } +kornia.workspace = true +rerun = "0.16.0" diff --git a/examples/normalize_ii/README.md b/examples/normalize_ii/README.md new file mode 100644 index 00000000..d998b7cc --- /dev/null +++ b/examples/normalize_ii/README.md @@ -0,0 +1,21 @@ +Example to perform image normalization by computing the mean and standard deviation of the image and then normalizing the image using the computed values. + +```bash +Usage: normalize_ii --image-path + +Options: + -i, --image-path + -h, --help Print help +``` + +Example: + +```bash +cargo run -p normalize_ii -- --image-path path/to/image.jpg +``` + +Output: + +```bash +min: 0.0, max: 1.0 +``` diff --git a/examples/normalize_ii/src/main.rs b/examples/normalize_ii/src/main.rs new file mode 100644 index 00000000..60337610 --- /dev/null +++ b/examples/normalize_ii/src/main.rs @@ -0,0 +1,41 @@ +use clap::Parser; +use std::path::PathBuf; + +use kornia::io::functional as F; +use kornia::{image::Image, imgproc}; + +#[derive(Parser)] +struct Args { + #[arg(short, long)] + image_path: PathBuf, +} + +fn main() -> Result<(), Box> { + let args = Args::parse(); + + // read the image + let image: Image = F::read_image_any(&args.image_path)?; + + // cast the image to floating point + let image_f32: Image = image.clone().cast_and_scale::(1.0 / 255.0)?; + + // convert to grayscale + let gray_f32: Image = imgproc::color::gray_from_rgb(&image_f32)?; + + // normalize the image each channel + let _image_norm: Image = + imgproc::normalize::normalize_mean_std(&image_f32, &[0.5, 0.5, 0.5], &[0.5, 0.5, 0.5])?; + + // normalize the grayscale image + let _gray_norm: Image = + imgproc::normalize::normalize_mean_std(&gray_f32, &[0.5], &[0.5])?; + + // alternative way to normalize the image between 0 and 255 + // let _gray_norm_min_max = imgproc::normalize::normalize_min_max( + // &gray, 0.0, 255.0)?; + + let (min, max) = imgproc::normalize::find_min_max(&gray_f32)?; + println!("min: {:?}, max: {:?}", min, max); + + Ok(()) +} diff --git a/examples/rerun_viz/Cargo.toml b/examples/rerun_viz/Cargo.toml new file mode 100644 index 00000000..b2b6cb28 --- /dev/null +++ b/examples/rerun_viz/Cargo.toml @@ -0,0 +1,17 @@ +[package] +name = "rerun_viz" +authors.workspace = true +categories.workspace = true +description.workspace = true +edition.workspace = true +homepage.workspace = true +include.workspace = true +license.workspace = true +repository.workspace = true +rust-version.workspace = true +version.workspace = true + +[dependencies] +clap = { version = "4.5.9", features = ["derive"] } +kornia.workspace = true +rerun = "0.16.0" diff --git a/examples/rerun_viz/README.md b/examples/rerun_viz/README.md new file mode 100644 index 00000000..266563b6 --- /dev/null +++ b/examples/rerun_viz/README.md @@ -0,0 +1,19 @@ +Example showing how to visualize the results of a model using Kornia and Rerun.io + +```bash +Usage: rerun_viz --image-path + +Options: + -i, --image-path + -h, --help Print help +``` + +Example: + +```bash +cargo run -p rerun_viz -- --image-path path/to/image.jpg +``` + +Output: + +TODO: add image output diff --git a/examples/rerun_viz.rs b/examples/rerun_viz/src/main.rs similarity index 50% rename from examples/rerun_viz.rs rename to examples/rerun_viz/src/main.rs index b7821d1c..8a1e41d2 100644 --- a/examples/rerun_viz.rs +++ b/examples/rerun_viz/src/main.rs @@ -1,10 +1,20 @@ -use kornia_rs::image::Image; -use kornia_rs::io::functional as F; +use clap::Parser; +use std::path::PathBuf; + +use kornia::image::Image; +use kornia::io::functional as F; + +#[derive(Parser)] +struct Args { + #[arg(short, long)] + image_path: PathBuf, +} fn main() -> Result<(), Box> { + let args = Args::parse(); + // read the image - let image_path = std::path::Path::new("tests/data/dog.jpeg"); - let image: Image = F::read_image_any(image_path)?; + let image: Image = F::read_image_any(&args.image_path)?; // create a Rerun recording stream let rec = rerun::RecordingStreamBuilder::new("Kornia App").spawn()?; diff --git a/examples/rotate.rs b/examples/rotate.rs deleted file mode 100644 index 64442713..00000000 --- a/examples/rotate.rs +++ /dev/null @@ -1,38 +0,0 @@ -use kornia_rs::image::Image; -use kornia_rs::io::functional as F; - -fn main() -> Result<(), Box> { - // read the image - let image_path = std::path::Path::new("tests/data/dog.jpeg"); - - let image: Image = F::read_image_any(image_path)?; - let image = image.cast::()?; - - let rec = rerun::RecordingStreamBuilder::new("Kornia App").spawn()?; - - // rotate the image - - let center = ( - image.size().width as f32 / 2.0, - image.size().height as f32 / 2.0, - ); - - for i in 0..360 { - let angle = i as f32; - let scale = i as f32 / 360.0; - let rotation_matrix = kornia_rs::warp::get_rotation_matrix2d(center, angle, scale); - - let output = kornia_rs::warp::warp_affine( - &image, - rotation_matrix, - image.size(), - kornia_rs::interpolation::InterpolationMode::Bilinear, - )?; - - let output = kornia_rs::normalize::normalize_min_max(&output, 0.0, 255.0)?; - - rec.log("image", &rerun::Image::try_from(output.data)?)?; - } - - Ok(()) -} diff --git a/examples/rotate/Cargo.toml b/examples/rotate/Cargo.toml new file mode 100644 index 00000000..142592df --- /dev/null +++ b/examples/rotate/Cargo.toml @@ -0,0 +1,17 @@ +[package] +name = "rotate" +authors.workspace = true +categories.workspace = true +description.workspace = true +edition.workspace = true +homepage.workspace = true +include.workspace = true +license.workspace = true +repository.workspace = true +rust-version.workspace = true +version.workspace = true + +[dependencies] +clap = { version = "4.5.9", features = ["derive"] } +kornia.workspace = true +rerun = "0.16.0" diff --git a/examples/rotate/README.md b/examples/rotate/README.md new file mode 100644 index 00000000..3296ec18 --- /dev/null +++ b/examples/rotate/README.md @@ -0,0 +1,19 @@ +Example showing how to rotate an image using Kornia Rust. + +```bash +Usage: rotate --image-path + +Options: + -i, --image-path + -h, --help Print help +``` + +Example: + +```bash +cargo run -p rotate -- --image-path path/to/image.jpg +``` + +Output: + +TODO: add image output diff --git a/examples/rotate/src/main.rs b/examples/rotate/src/main.rs new file mode 100644 index 00000000..b3ff4d8b --- /dev/null +++ b/examples/rotate/src/main.rs @@ -0,0 +1,47 @@ +use clap::Parser; +use std::path::PathBuf; + +use kornia::io::functional as F; +use kornia::{image::Image, imgproc}; + +#[derive(Parser)] +struct Args { + #[arg(short, long)] + image_path: PathBuf, +} + +fn main() -> Result<(), Box> { + let args = Args::parse(); + + // read the image + let image: Image = F::read_image_any(&args.image_path)?; + let image: Image = image.cast::()?; + + let rec = rerun::RecordingStreamBuilder::new("Kornia App").spawn()?; + + // rotate the image + + let center = ( + image.size().width as f32 / 2.0, + image.size().height as f32 / 2.0, + ); + + for i in 0..360 { + let angle = i as f32; + let scale = i as f32 / 360.0; + let rotation_matrix = imgproc::warp::get_rotation_matrix2d(center, angle, scale); + + let output = imgproc::warp::warp_affine( + &image, + rotation_matrix, + image.size(), + imgproc::interpolation::InterpolationMode::Bilinear, + )?; + + let output = imgproc::normalize::normalize_min_max(&output, 0.0, 255.0)?; + + rec.log("image", &rerun::Image::try_from(output.data)?)?; + } + + Ok(()) +} diff --git a/examples/std_mean/Cargo.toml b/examples/std_mean/Cargo.toml new file mode 100644 index 00000000..68957802 --- /dev/null +++ b/examples/std_mean/Cargo.toml @@ -0,0 +1,20 @@ +[package] +name = "std_mean" +authors.workspace = true +categories.workspace = true +description.workspace = true +edition.workspace = true +homepage.workspace = true +include.workspace = true +license.workspace = true +repository.workspace = true +rust-version.workspace = true +version.workspace = true +publish = false + +[dependencies] +clap = { version = "4.5.9", features = ["derive"] } +kornia.workspace = true +indicatif = { version = "0.17", features = ["rayon"] } +rayon = "1" +walkdir = "2" diff --git a/examples/std_mean/REAMDE.md b/examples/std_mean/REAMDE.md new file mode 100644 index 00000000..44e554d2 --- /dev/null +++ b/examples/std_mean/REAMDE.md @@ -0,0 +1,14 @@ +Example showing how to compute the standard deviation and mean of an image dataset using Kornia Rust. + +```bash +Usage: std_mean [OPTIONS] --images-dir + +Options: + -i, --images-dir + -n, --num-threads [default: 8] + -h, --help Print help +``` + +Output: + +TODO: add output diff --git a/examples/std_mean.rs b/examples/std_mean/src/main.rs similarity index 96% rename from examples/std_mean.rs rename to examples/std_mean/src/main.rs index fec1b07d..d674ac22 100644 --- a/examples/std_mean.rs +++ b/examples/std_mean/src/main.rs @@ -7,7 +7,8 @@ use clap::Parser; use indicatif::{ParallelProgressIterator, ProgressStyle}; use rayon::iter::{IntoParallelIterator, ParallelIterator}; -use kornia_rs::io::functional as F; +use kornia::imgproc; +use kornia::io::functional as F; #[derive(Parser, Debug)] struct Args { @@ -72,7 +73,7 @@ fn main() -> Result<(), Box> { let image = F::read_image_any(&image_path).expect("Failed to read image"); // compute the std and mean - let (std, mean) = kornia_rs::core::std_mean(&image); + let (std, mean) = imgproc::core::std_mean(&image); // update the total std and mean diff --git a/examples/undistort_image/Cargo.toml b/examples/undistort_image/Cargo.toml new file mode 100644 index 00000000..5de4e55f --- /dev/null +++ b/examples/undistort_image/Cargo.toml @@ -0,0 +1,17 @@ +[package] +name = "undistort" +authors.workspace = true +categories.workspace = true +description.workspace = true +edition.workspace = true +homepage.workspace = true +include.workspace = true +license.workspace = true +repository.workspace = true +rust-version.workspace = true +version.workspace = true + +[dependencies] +clap = { version = "4.5.9", features = ["derive"] } +kornia.workspace = true +rerun = "0.16.0" diff --git a/examples/undistort_image/README.md b/examples/undistort_image/README.md new file mode 100644 index 00000000..a741663e --- /dev/null +++ b/examples/undistort_image/README.md @@ -0,0 +1,13 @@ +Example showing how to undistort an image from an OAK-D camera using Kornia Rust. + +```bash +Usage: undistort --image-path + +Options: + -i, --image-path + -h, --help Print help +``` + +Output: + +TODO: add output diff --git a/examples/undistort_image.rs b/examples/undistort_image/src/main.rs similarity index 87% rename from examples/undistort_image.rs rename to examples/undistort_image/src/main.rs index 29844541..7362ec7f 100644 --- a/examples/undistort_image.rs +++ b/examples/undistort_image/src/main.rs @@ -1,12 +1,15 @@ use clap::Parser; -use kornia_rs::{ - calibration::{ +use std::path::PathBuf; + +use kornia::{ + image::ImageSize, + imgproc, + imgproc::calibration::{ distortion::{generate_correction_map_polynomial, PolynomialDistortion}, {CameraExtrinsic, CameraIntrinsic}, }, - image::ImageSize, + io::functional as F, }; -use std::path::PathBuf; #[derive(Parser)] struct Args { @@ -18,7 +21,7 @@ fn main() -> Result<(), Box> { let args = Args::parse(); // read the image - let img = kornia_rs::io::functional::read_image_any(&args.image_path)?; + let img = F::read_image_any(&args.image_path)?; // the intrinsic parameters of an Oak-D camera let intrinsic = CameraIntrinsic { @@ -59,11 +62,11 @@ fn main() -> Result<(), Box> { ); // apply the remap - let img_undistorted = kornia_rs::interpolation::remap( + let img_undistorted = imgproc::interpolation::remap( &img.clone().cast()?, &map_x, &map_y, - kornia_rs::interpolation::InterpolationMode::Bilinear, + imgproc::interpolation::InterpolationMode::Bilinear, )?; // create a Rerun recording stream diff --git a/examples/webcam/Cargo.toml b/examples/webcam/Cargo.toml index d9aaff26..ccf11b25 100644 --- a/examples/webcam/Cargo.toml +++ b/examples/webcam/Cargo.toml @@ -1,5 +1,5 @@ [package] -name = "webcam_simple" +name = "webcam" version = "0.1.0" authors = ["Edgar Riba "] license = "Apache-2.0" @@ -9,6 +9,6 @@ publish = false [dependencies] clap = { version = "4.5.4", features = ["derive"] } ctrlc = "3.4.4" -kornia-rs = { path = "../../", features = ["gstreamer"] } +kornia = { workspace = true, features = ["gstreamer"] } rerun = "0.16.0" tokio = { version = "1" } diff --git a/examples/webcam/README.md b/examples/webcam/README.md index 0e640daf..0ae607a2 100644 --- a/examples/webcam/README.md +++ b/examples/webcam/README.md @@ -2,6 +2,20 @@ An example showing how to use the webcam with the `kornia::io` module with the a NOTE: This example requires the gstremer backend to be enabled. To enable the gstreamer backend, use the `gstreamer` feature flag when building the `kornia` crate and its dependencies. +```bash +Usage: webcam [OPTIONS] + +Options: + -c, --camera-id [default: 0] + -f, --fps [default: 30] + -d, --duration + -h, --help Print help +``` + +Example: + ```bash cargo run --release -- --camera-id 0 --duration 5 --fps 30 ``` + +TODO: add output diff --git a/examples/webcam/src/main.rs b/examples/webcam/src/main.rs index 92cb936a..fd76bc67 100644 --- a/examples/webcam/src/main.rs +++ b/examples/webcam/src/main.rs @@ -4,8 +4,9 @@ use std::sync::{ {Arc, Mutex}, }; -use kornia_rs::{ +use kornia::{ image::ImageSize, + imgproc, io::{ fps_counter::FpsCounter, stream::{CameraCapture, StreamCaptureError}, @@ -77,21 +78,21 @@ async fn main() -> Result<(), Box> { } // lets resize the image to 256x256 - let img = kornia_rs::resize::resize_fast( + let img = imgproc::resize::resize_fast( &img, - kornia_rs::image::ImageSize { + ImageSize { width: 256, height: 256, }, - kornia_rs::interpolation::InterpolationMode::Bilinear, + imgproc::interpolation::InterpolationMode::Bilinear, )?; // convert the image to f32 and normalize before processing let img = img.cast_and_scale::(1. / 255.)?; // convert the image to grayscale and binarize - let gray = kornia_rs::color::gray_from_rgb(&img)?; - let bin = kornia_rs::threshold::threshold_binary(&gray, 0.35, 0.65)?; + let gray = imgproc::color::gray_from_rgb(&img)?; + let bin = imgproc::threshold::threshold_binary(&gray, 0.35, 0.65)?; // update the fps counter fps_counter diff --git a/kornia-py/Cargo.lock b/kornia-py/Cargo.lock index 32ad9968..f170906e 100644 --- a/kornia-py/Cargo.lock +++ b/kornia-py/Cargo.lock @@ -2,6 +2,15 @@ # It is not intended for manual editing. version = 3 +[[package]] +name = "addr2line" +version = "0.22.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e4503c46a5c0c7844e948c9a4d6acd9f50cccb4de1c48eb9e291ea17470c678" +dependencies = [ + "gimli", +] + [[package]] name = "adler" version = "1.0.2" @@ -43,6 +52,23 @@ version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "96d30a06541fbafbc7f82ed10c06164cfbd2c401138f6addd8404629c4b16711" +[[package]] +name = "arrow-buffer" +version = "52.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cae6970bab043c4fbc10aee1660ceb5b306d0c42c8cc5f6ae564efcd9759b663" +dependencies = [ + "bytes", + "half", + "num", +] + +[[package]] +name = "atomic_refcell" +version = "0.1.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41e67cd8309bbd06cd603a9e693a784ac2e5d1e955f11286e355089fcab3047c" + [[package]] name = "autocfg" version = "1.3.0" @@ -72,6 +98,21 @@ dependencies = [ "arrayvec", ] +[[package]] +name = "backtrace" +version = "0.3.73" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5cc23269a4f8976d0a4d2e7109211a419fe30e8d88d677cd60b6bc79c5732e0a" +dependencies = [ + "addr2line", + "cc", + "cfg-if", + "libc", + "miniz_oxide", + "object", + "rustc-demangle", +] + [[package]] name = "bit_field" version = "0.10.2" @@ -86,9 +127,9 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "bitflags" -version = "2.5.0" +version = "2.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf4b9d6a944f767f8e5e0db018570623c85f3d925ac718db4e06d0187adb21c1" +checksum = "b048fb63fd8b5923fc5aa7b340d8e156aec7ec02f0c78fa8a6ddc2613f6f71de" [[package]] name = "bitstream-io" @@ -126,6 +167,12 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8f1fe948ff07f4bd06c30984e69f5b4899c516a3ef74f34df92a2df2ab535495" +[[package]] +name = "bytes" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "514de17de45fdb8dc022b1a7975556c53c86f9f0aa5f534b98977b171857c2c9" + [[package]] name = "cc" version = "1.0.98" @@ -275,6 +322,69 @@ dependencies = [ "spin", ] +[[package]] +name = "futures-channel" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eac8f7d7865dcb88bd4373ab671c8cf4508703796caa2b1985a9ca867b3fcb78" +dependencies = [ + "futures-core", +] + +[[package]] +name = "futures-core" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dfc6580bb841c5a68e9ef15c77ccc837b40a7504914d52e47b8b0e9bbda25a1d" + +[[package]] +name = "futures-executor" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a576fc72ae164fca6b9db127eaa9a9dda0d61316034f33a0a0d4eda41f02b01d" +dependencies = [ + "futures-core", + "futures-task", + "futures-util", +] + +[[package]] +name = "futures-macro" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87750cf4b7a4c0625b1529e4c543c2182106e4dedc60a2a6455e00d212c489ac" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "futures-sink" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9fb8e00e87438d937621c1c6269e53f536c14d3fbd6a042bb24879e57d474fb5" + +[[package]] +name = "futures-task" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38d84fa142264698cdce1a9f9172cf383a0c82de1bddcf3092901442c4097004" + +[[package]] +name = "futures-util" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d6401deb83407ab3da39eba7e33987a73c3df0c82b4bb5813ee871c19c41d48" +dependencies = [ + "futures-core", + "futures-macro", + "futures-task", + "pin-project-lite", + "pin-utils", + "slab", +] + [[package]] name = "getrandom" version = "0.2.15" @@ -296,6 +406,173 @@ dependencies = [ "weezl", ] +[[package]] +name = "gimli" +version = "0.29.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "40ecd4077b5ae9fd2e9e169b102c6c330d0605168eb0e8bf79952b256dbefffd" + +[[package]] +name = "gio-sys" +version = "0.20.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e4feb96b31c32730ea3e1e89aecd2e4e37ecb1c473ad8f685e3430a159419f63" +dependencies = [ + "glib-sys", + "gobject-sys", + "libc", + "system-deps 7.0.1", + "windows-sys 0.52.0", +] + +[[package]] +name = "glib" +version = "0.20.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fee90a615ce05be7a32932cfb8adf2c4bbb4700e80d37713c981fb24c0c56238" +dependencies = [ + "bitflags 2.6.0", + "futures-channel", + "futures-core", + "futures-executor", + "futures-task", + "futures-util", + "gio-sys", + "glib-macros", + "glib-sys", + "gobject-sys", + "libc", + "memchr", + "smallvec", + "thiserror", +] + +[[package]] +name = "glib-macros" +version = "0.20.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4da558d8177c0c8c54368818b508a4244e1286fce2858cef4e547023f0cfa5ef" +dependencies = [ + "heck 0.5.0", + "proc-macro-crate", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "glib-sys" +version = "0.20.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4958c26e5a01c9af00dea669a97369eccbec29a8e6d125c24ea2d85ee7467b60" +dependencies = [ + "libc", + "system-deps 7.0.1", +] + +[[package]] +name = "gobject-sys" +version = "0.20.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c6908864f5ffff15b56df7e90346863904f49b949337ed0456b9287af61903b8" +dependencies = [ + "glib-sys", + "libc", + "system-deps 7.0.1", +] + +[[package]] +name = "gstreamer" +version = "0.23.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "21e95b1d1153239a621ec143501fdcca6c1ad3efb87d268597285f85c4136f73" +dependencies = [ + "cfg-if", + "futures-channel", + "futures-core", + "futures-util", + "glib", + "gstreamer-sys", + "itertools 0.13.0", + "libc", + "muldiv", + "num-integer", + "num-rational", + "once_cell", + "option-operations", + "paste", + "pin-project-lite", + "smallvec", + "thiserror", +] + +[[package]] +name = "gstreamer-app" +version = "0.23.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e0c86915cc4cdfa030532301a46c725e0ce0c6c2b57a68c44ce9b34db587e552" +dependencies = [ + "futures-core", + "futures-sink", + "glib", + "gstreamer", + "gstreamer-app-sys", + "gstreamer-base", + "libc", +] + +[[package]] +name = "gstreamer-app-sys" +version = "0.23.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "37066c1b93ba57aa070ebc1e0a564bc1a9adda78fb0850e624861fad46fd1448" +dependencies = [ + "glib-sys", + "gstreamer-base-sys", + "gstreamer-sys", + "libc", + "system-deps 7.0.1", +] + +[[package]] +name = "gstreamer-base" +version = "0.23.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a3faa0b3cf361bf538dcb25b5cb7f6e73bd872ed031d85f3997b42d3fbd66409" +dependencies = [ + "atomic_refcell", + "cfg-if", + "glib", + "gstreamer", + "gstreamer-base-sys", + "libc", +] + +[[package]] +name = "gstreamer-base-sys" +version = "0.23.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4a6643ef963c636b8022adc93aa19eac6f356bd174a187c499339fc5d64c1e05" +dependencies = [ + "glib-sys", + "gobject-sys", + "gstreamer-sys", + "libc", + "system-deps 7.0.1", +] + +[[package]] +name = "gstreamer-sys" +version = "0.23.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d9c9005b55dd2b1784645963c1ec409f9d420a56f6348d0ae69c2eaff584bcc3" +dependencies = [ + "glib-sys", + "gobject-sys", + "libc", + "system-deps 7.0.1", +] + [[package]] name = "half" version = "2.4.1" @@ -324,6 +601,12 @@ version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" +[[package]] +name = "hermit-abi" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d231dfb89cfffdbc30e7fc41579ed6066ad03abda9e567ccafae602b97ec5024" + [[package]] name = "image" version = "0.25.1" @@ -399,6 +682,15 @@ dependencies = [ "either", ] +[[package]] +name = "itertools" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "413ee7dfc52ee1a4949ceeb7dbc8a33f2d6c088194d9f922fb8318faf1f01186" +dependencies = [ + "either", +] + [[package]] name = "jobserver" version = "0.1.31" @@ -415,28 +707,71 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f5d4a7da358eff58addd2877a45865158f0d78c911d43a5784ceb7bbf52833b0" [[package]] -name = "kornia-py" -version = "0.1.3" +name = "kornia-core" +version = "0.1.6+dev" +dependencies = [ + "arrow-buffer", + "serde", + "thiserror", +] + +[[package]] +name = "kornia-image" +version = "0.1.6+dev" dependencies = [ "anyhow", - "kornia-rs", - "numpy", - "pyo3", + "ndarray", + "num-traits", + "thiserror", ] [[package]] -name = "kornia-rs" -version = "0.1.3" +name = "kornia-imgproc" +version = "0.1.6+dev" dependencies = [ "anyhow", "fast_image_resize", - "image", - "memmap2", + "kornia-image", "ndarray", "num-traits", + "thiserror", +] + +[[package]] +name = "kornia-io" +version = "0.1.6+dev" +dependencies = [ + "anyhow", + "gstreamer", + "gstreamer-app", + "image", + "kornia-image", + "memmap2", + "thiserror", + "tokio", "turbojpeg", ] +[[package]] +name = "kornia-py" +version = "0.1.6+dev" +dependencies = [ + "anyhow", + "kornia-rs", + "numpy", + "pyo3", +] + +[[package]] +name = "kornia-rs" +version = "0.1.6+dev" +dependencies = [ + "kornia-core", + "kornia-image", + "kornia-imgproc", + "kornia-io", +] + [[package]] name = "lebe" version = "0.5.2" @@ -507,9 +842,9 @@ dependencies = [ [[package]] name = "memchr" -version = "2.7.2" +version = "2.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c8640c5d730cb13ebd907d8d04b52f55ac9a2eec55b440c8892f40d56c76c1d" +checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" [[package]] name = "memmap2" @@ -545,6 +880,23 @@ dependencies = [ "simd-adler32", ] +[[package]] +name = "mio" +version = "0.8.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4a650543ca06a924e8b371db273b2756685faae30f8487da1b56505a8f78b0c" +dependencies = [ + "libc", + "wasi", + "windows-sys 0.48.0", +] + +[[package]] +name = "muldiv" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "956787520e75e9bd233246045d19f42fb73242759cc57fba9611d940ae96d4b0" + [[package]] name = "ndarray" version = "0.15.6" @@ -581,6 +933,20 @@ version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0676bb32a98c1a483ce53e500a81ad9c3d5b3f7c920c28c24e9cb0980d0b5bc8" +[[package]] +name = "num" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "35bd024e8b2ff75562e5f34e7f4905839deb4b22955ef5e73d2fea1b9813cb23" +dependencies = [ + "num-bigint", + "num-complex", + "num-integer", + "num-iter", + "num-rational", + "num-traits", +] + [[package]] name = "num-bigint" version = "0.4.5" @@ -620,6 +986,17 @@ dependencies = [ "num-traits", ] +[[package]] +name = "num-iter" +version = "0.1.45" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1429034a0490724d0075ebb2bc9e875d6503c3cf69e235a8941aa757d83ef5bf" +dependencies = [ + "autocfg", + "num-integer", + "num-traits", +] + [[package]] name = "num-rational" version = "0.4.2" @@ -640,11 +1017,21 @@ dependencies = [ "autocfg", ] +[[package]] +name = "num_cpus" +version = "1.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43" +dependencies = [ + "hermit-abi", + "libc", +] + [[package]] name = "numpy" -version = "0.20.0" +version = "0.21.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bef41cbb417ea83b30525259e30ccef6af39b31c240bda578889494c5392d331" +checksum = "ec170733ca37175f5d75a5bea5911d6ff45d2cd52849ce98b685394e4f2f37f4" dependencies = [ "libc", "ndarray", @@ -655,12 +1042,30 @@ dependencies = [ "rustc-hash", ] +[[package]] +name = "object" +version = "0.36.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "081b846d1d56ddfc18fdf1a922e4f6e07a11768ea1b92dec44e42b72712ccfce" +dependencies = [ + "memchr", +] + [[package]] name = "once_cell" version = "1.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" +[[package]] +name = "option-operations" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7c26d27bb1aeab65138e4bf7666045169d1717febcc9ff870166be8348b223d0" +dependencies = [ + "paste", +] + [[package]] name = "parking_lot" version = "0.12.3" @@ -681,7 +1086,7 @@ dependencies = [ "libc", "redox_syscall", "smallvec", - "windows-targets", + "windows-targets 0.52.5", ] [[package]] @@ -690,6 +1095,18 @@ version = "1.0.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" +[[package]] +name = "pin-project-lite" +version = "0.2.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bda66fc9667c18cb2758a2ac84d1167245054bcf85d5d1aaa6923f45801bdd02" + +[[package]] +name = "pin-utils" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" + [[package]] name = "pkg-config" version = "0.3.30" @@ -721,6 +1138,15 @@ version = "0.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" +[[package]] +name = "proc-macro-crate" +version = "3.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d37c51ca738a55da99dc0c4a34860fd675453b8b36209178c2249bb13651284" +dependencies = [ + "toml_edit 0.21.1", +] + [[package]] name = "proc-macro2" version = "1.0.85" @@ -751,9 +1177,9 @@ dependencies = [ [[package]] name = "pyo3" -version = "0.20.3" +version = "0.21.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53bdbb96d49157e65d45cc287af5f32ffadd5f4761438b527b055fb0d4bb8233" +checksum = "a5e00b96a521718e08e03b1a622f01c8a8deb50719335de3f60b3b3950f069d8" dependencies = [ "cfg-if", "indoc", @@ -769,9 +1195,9 @@ dependencies = [ [[package]] name = "pyo3-build-config" -version = "0.20.3" +version = "0.21.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "deaa5745de3f5231ce10517a1f5dd97d53e5a2fd77aa6b5842292085831d48d7" +checksum = "7883df5835fafdad87c0d888b266c8ec0f4c9ca48a5bed6bbb592e8dedee1b50" dependencies = [ "once_cell", "target-lexicon", @@ -779,9 +1205,9 @@ dependencies = [ [[package]] name = "pyo3-ffi" -version = "0.20.3" +version = "0.21.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62b42531d03e08d4ef1f6e85a2ed422eb678b8cd62b762e53891c05faf0d4afa" +checksum = "01be5843dc60b916ab4dad1dca6d20b9b4e6ddc8e15f50c47fe6d85f1fb97403" dependencies = [ "libc", "pyo3-build-config", @@ -789,9 +1215,9 @@ dependencies = [ [[package]] name = "pyo3-macros" -version = "0.20.3" +version = "0.21.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7305c720fa01b8055ec95e484a6eca7a83c841267f0dd5280f0c8b8551d2c158" +checksum = "77b34069fc0682e11b31dbd10321cbf94808394c56fd996796ce45217dfac53c" dependencies = [ "proc-macro2", "pyo3-macros-backend", @@ -801,9 +1227,9 @@ dependencies = [ [[package]] name = "pyo3-macros-backend" -version = "0.20.3" +version = "0.21.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7c7e9b68bb9c3149c5b0cade5d07f953d6d125eb4337723c4ccdb665f1f96185" +checksum = "08260721f32db5e1a5beae69a55553f56b99bd0e1c3e6e0a5e8851a9d0f5a85c" dependencies = [ "heck 0.4.1", "proc-macro2", @@ -880,7 +1306,7 @@ dependencies = [ "built", "cfg-if", "interpolate_name", - "itertools", + "itertools 0.12.1", "libc", "libfuzzer-sys", "log", @@ -895,7 +1321,7 @@ dependencies = [ "rand", "rand_chacha", "simd_helpers", - "system-deps", + "system-deps 6.2.2", "thiserror", "v_frame", "wasm-bindgen", @@ -948,7 +1374,7 @@ version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "469052894dcb553421e483e4209ee581a45100d31b4018de03e5a7ad86374a7e" dependencies = [ - "bitflags 2.5.0", + "bitflags 2.6.0", ] [[package]] @@ -960,6 +1386,12 @@ dependencies = [ "bytemuck", ] +[[package]] +name = "rustc-demangle" +version = "0.1.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f" + [[package]] name = "rustc-hash" version = "1.1.0" @@ -1001,6 +1433,15 @@ dependencies = [ "serde", ] +[[package]] +name = "signal-hook-registry" +version = "1.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a9e9e0b4211b72e7b8b6e85c807d36c212bdb33ea8587f7569562a84df5465b1" +dependencies = [ + "libc", +] + [[package]] name = "simd-adler32" version = "0.3.7" @@ -1016,12 +1457,31 @@ dependencies = [ "quote", ] +[[package]] +name = "slab" +version = "0.4.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" +dependencies = [ + "autocfg", +] + [[package]] name = "smallvec" version = "1.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" +[[package]] +name = "socket2" +version = "0.5.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce305eb0b4296696835b71df73eb912e0f1ffd2556a501fcede6e0c50349191c" +dependencies = [ + "libc", + "windows-sys 0.52.0", +] + [[package]] name = "spin" version = "0.9.8" @@ -1033,9 +1493,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.66" +version = "2.0.71" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c42f3f41a2de00b01c0aaad383c5a45241efc8b2d1eda5661812fda5f3cdcff5" +checksum = "b146dcf730474b4bcd16c311627b31ede9ab149045db4d6088b3becaea046462" dependencies = [ "proc-macro2", "quote", @@ -1055,6 +1515,19 @@ dependencies = [ "version-compare", ] +[[package]] +name = "system-deps" +version = "7.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c81f13d9a334a6c242465140bd262fae382b752ff2011c4f7419919a9c97922" +dependencies = [ + "cfg-expr", + "heck 0.5.0", + "pkg-config", + "toml", + "version-compare", +] + [[package]] name = "target-lexicon" version = "0.12.14" @@ -1092,6 +1565,36 @@ dependencies = [ "weezl", ] +[[package]] +name = "tokio" +version = "1.38.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba4f4a02a7a80d6f274636f0aa95c7e383b912d41fe721a31f29e29698585a4a" +dependencies = [ + "backtrace", + "bytes", + "libc", + "mio", + "num_cpus", + "parking_lot", + "pin-project-lite", + "signal-hook-registry", + "socket2", + "tokio-macros", + "windows-sys 0.48.0", +] + +[[package]] +name = "tokio-macros" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f5ae998a069d4b5aba8ee9dad856af7d520c3699e6159b185c2acd48155d39a" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + [[package]] name = "toml" version = "0.8.13" @@ -1101,7 +1604,7 @@ dependencies = [ "serde", "serde_spanned", "toml_datetime", - "toml_edit", + "toml_edit 0.22.13", ] [[package]] @@ -1113,6 +1616,17 @@ dependencies = [ "serde", ] +[[package]] +name = "toml_edit" +version = "0.21.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a8534fd7f78b5405e860340ad6575217ce99f38d4d5c8f2442cb5ecb50090e1" +dependencies = [ + "indexmap", + "toml_datetime", + "winnow 0.5.40", +] + [[package]] name = "toml_edit" version = "0.22.13" @@ -1123,7 +1637,7 @@ dependencies = [ "serde", "serde_spanned", "toml_datetime", - "winnow", + "winnow 0.6.9", ] [[package]] @@ -1244,34 +1758,85 @@ version = "0.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "53a85b86a771b1c87058196170769dd264f66c0782acf1ae6cc51bfd64b39082" +[[package]] +name = "windows-sys" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" +dependencies = [ + "windows-targets 0.48.5", +] + +[[package]] +name = "windows-sys" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" +dependencies = [ + "windows-targets 0.52.5", +] + +[[package]] +name = "windows-targets" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" +dependencies = [ + "windows_aarch64_gnullvm 0.48.5", + "windows_aarch64_msvc 0.48.5", + "windows_i686_gnu 0.48.5", + "windows_i686_msvc 0.48.5", + "windows_x86_64_gnu 0.48.5", + "windows_x86_64_gnullvm 0.48.5", + "windows_x86_64_msvc 0.48.5", +] + [[package]] name = "windows-targets" version = "0.52.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6f0713a46559409d202e70e28227288446bf7841d3211583a4b53e3f6d96e7eb" dependencies = [ - "windows_aarch64_gnullvm", - "windows_aarch64_msvc", - "windows_i686_gnu", + "windows_aarch64_gnullvm 0.52.5", + "windows_aarch64_msvc 0.52.5", + "windows_i686_gnu 0.52.5", "windows_i686_gnullvm", - "windows_i686_msvc", - "windows_x86_64_gnu", - "windows_x86_64_gnullvm", - "windows_x86_64_msvc", + "windows_i686_msvc 0.52.5", + "windows_x86_64_gnu 0.52.5", + "windows_x86_64_gnullvm 0.52.5", + "windows_x86_64_msvc 0.52.5", ] +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" + [[package]] name = "windows_aarch64_gnullvm" version = "0.52.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7088eed71e8b8dda258ecc8bac5fb1153c5cffaf2578fc8ff5d61e23578d3263" +[[package]] +name = "windows_aarch64_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" + [[package]] name = "windows_aarch64_msvc" version = "0.52.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9985fd1504e250c615ca5f281c3f7a6da76213ebd5ccc9561496568a2752afb6" +[[package]] +name = "windows_i686_gnu" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" + [[package]] name = "windows_i686_gnu" version = "0.52.5" @@ -1284,30 +1849,63 @@ version = "0.52.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "87f4261229030a858f36b459e748ae97545d6f1ec60e5e0d6a3d32e0dc232ee9" +[[package]] +name = "windows_i686_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" + [[package]] name = "windows_i686_msvc" version = "0.52.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "db3c2bf3d13d5b658be73463284eaf12830ac9a26a90c717b7f771dfe97487bf" +[[package]] +name = "windows_x86_64_gnu" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" + [[package]] name = "windows_x86_64_gnu" version = "0.52.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4e4246f76bdeff09eb48875a0fd3e2af6aada79d409d33011886d3e1581517d9" +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" + [[package]] name = "windows_x86_64_gnullvm" version = "0.52.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "852298e482cd67c356ddd9570386e2862b5673c85bd5f88df9ab6802b334c596" +[[package]] +name = "windows_x86_64_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" + [[package]] name = "windows_x86_64_msvc" version = "0.52.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bec47e5bfd1bff0eeaf6d8b485cc1074891a197ab4225d504cb7a1ab88b02bf0" +[[package]] +name = "winnow" +version = "0.5.40" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f593a95398737aeed53e489c785df13f3618e41dbcd6718c6addbf1395aa6876" +dependencies = [ + "memchr", +] + [[package]] name = "winnow" version = "0.6.9" diff --git a/kornia-py/Cargo.toml b/kornia-py/Cargo.toml index d18ce380..06a08560 100644 --- a/kornia-py/Cargo.toml +++ b/kornia-py/Cargo.toml @@ -1,14 +1,26 @@ [package] name = "kornia-py" -version = "0.1.6-dev" +categories = ["computer-vision", "science::robotics"] +description = "Python bindings for Kornia Rust library" edition = "2021" +homepage = "http://kornia.org" +include = ["Cargo.toml"] +license = "Apache-2.0" +license-file = "LICENSE" +repository = "https://github.com/kornia/kornia-rs" +rust-version = "1.76" +version = "0.1.6+dev" [lib] name = "kornia_rs" crate-type = ["cdylib"] [dependencies] + +# kornia +kornia = { path = "../crates/kornia", features = ["gstreamer", "jpegturbo"] } + +# external anyhow = "1.0.80" -kornia-rs = { path = "../", features = ["jpegturbo"] } -pyo3 = { version = "0.20", features = ["extension-module"] } -numpy = { version = "0.20" } +pyo3 = { version = "0.21.0", features = ["extension-module"] } +numpy = { version = "0.21.0" } diff --git a/kornia-py/src/dlpack.rs b/kornia-py/src/dlpack.rs index 2a3f0efa..d030dc6b 100644 --- a/kornia-py/src/dlpack.rs +++ b/kornia-py/src/dlpack.rs @@ -3,7 +3,7 @@ //! NOTE: this is deprecated and will be removed in the future. //! use dlpack_rs as dlpack; -use kornia_rs::tensor::Tensor; +use kornia_tensor::Tensor; use pyo3::prelude::*; use std::ffi::{c_void, CStr, CString}; diff --git a/kornia-py/src/histogram.rs b/kornia-py/src/histogram.rs index 0db378bc..7c2b1ada 100644 --- a/kornia-py/src/histogram.rs +++ b/kornia-py/src/histogram.rs @@ -1,7 +1,7 @@ use pyo3::prelude::*; use crate::image::{FromPyImage, PyImage}; -use kornia_rs::image::Image; +use kornia::{image::Image, imgproc}; /// Compute the pixel-wise histogram of an image. /// -- @@ -21,7 +21,7 @@ pub fn compute_histogram(image: PyImage, num_bins: usize) -> PyResult let image = Image::from_pyimage(image) .map_err(|e| PyErr::new::(format!("{}", e)))?; - let histogram = kornia_rs::histogram::compute_histogram(&image, num_bins) + let histogram = imgproc::histogram::compute_histogram(&image, num_bins) .map_err(|e| PyErr::new::(format!("{}", e)))?; Ok(histogram) diff --git a/kornia-py/src/image.rs b/kornia-py/src/image.rs index e9ffb93b..7c248577 100644 --- a/kornia-py/src/image.rs +++ b/kornia-py/src/image.rs @@ -1,7 +1,7 @@ use anyhow::Result; use numpy::{PyArray3, ToPyArray}; -use kornia_rs::image::{Image, ImageSize}; +use kornia::image::{Image, ImageSize}; use pyo3::prelude::*; // type alias for a 3D numpy array of u8 @@ -12,7 +12,7 @@ pub trait ToPyImage { fn to_pyimage(self) -> PyImage; } -impl ToPyImage for kornia_rs::image::Image { +impl ToPyImage for Image { fn to_pyimage(self) -> PyImage { Python::with_gil(|py| self.data.to_pyarray(py).to_owned()) } @@ -23,7 +23,7 @@ pub trait FromPyImage { fn from_pyimage(image: PyImage) -> Result>; } -impl FromPyImage for kornia_rs::image::Image { +impl FromPyImage for Image { fn from_pyimage(image: PyImage) -> Result> { Python::with_gil(|py| { let array = image.as_ref(py).to_owned_array(); @@ -35,7 +35,7 @@ impl FromPyImage for kornia_rs::image::Image PyResult { diff --git a/kornia-py/src/io/jpeg.rs b/kornia-py/src/io/jpeg.rs index ba9585d4..303b2518 100644 --- a/kornia-py/src/io/jpeg.rs +++ b/kornia-py/src/io/jpeg.rs @@ -1,4 +1,4 @@ -use kornia_rs::{ +use kornia::{ image::Image, io::jpeg::{ImageDecoder, ImageEncoder}, }; diff --git a/kornia-py/src/resize.rs b/kornia-py/src/resize.rs index e500dcec..b349a49e 100644 --- a/kornia-py/src/resize.rs +++ b/kornia-py/src/resize.rs @@ -1,21 +1,24 @@ use pyo3::prelude::*; use crate::image::{FromPyImage, PyImage, ToPyImage}; -use kornia_rs::image::Image; +use kornia::{ + image::{Image, ImageSize}, + imgproc::{interpolation::InterpolationMode, resize::resize_fast}, +}; #[pyfunction] pub fn resize(image: PyImage, new_size: (usize, usize), interpolation: &str) -> PyResult { let image = Image::from_pyimage(image) .map_err(|e| PyErr::new::(format!("{}", e)))?; - let new_size = kornia_rs::image::ImageSize { + let new_size = ImageSize { height: new_size.0, width: new_size.1, }; let interpolation = match interpolation.to_lowercase().as_str() { - "nearest" => kornia_rs::interpolation::InterpolationMode::Nearest, - "bilinear" => kornia_rs::interpolation::InterpolationMode::Bilinear, + "nearest" => InterpolationMode::Nearest, + "bilinear" => InterpolationMode::Bilinear, _ => { return Err(PyErr::new::( "Invalid interpolation mode", @@ -23,7 +26,7 @@ pub fn resize(image: PyImage, new_size: (usize, usize), interpolation: &str) -> } }; - let image = kornia_rs::resize::resize_fast(&image, new_size, interpolation) + let image = resize_fast(&image, new_size, interpolation) .map_err(|e| PyErr::new::(format!("{}", e)))?; Ok(image.to_pyimage()) diff --git a/kornia-py/src/warp.rs b/kornia-py/src/warp.rs index c0f3b88a..16b418f4 100644 --- a/kornia-py/src/warp.rs +++ b/kornia-py/src/warp.rs @@ -1,7 +1,9 @@ use pyo3::prelude::*; use crate::image::{FromPyImage, PyImage, ToPyImage}; -use kornia_rs::image::Image; +use kornia::image::{Image, ImageSize}; +use kornia::imgproc::interpolation::InterpolationMode; +use kornia::imgproc::warp; #[pyfunction] pub fn warp_affine( @@ -15,14 +17,14 @@ pub fn warp_affine( let image: Image = Image::from_pyimage(image) .map_err(|e| PyErr::new::(format!("{}", e)))?; - let new_size = kornia_rs::image::ImageSize { + let new_size = ImageSize { height: new_size.0, width: new_size.1, }; let interpolation = match interpolation.to_lowercase().as_str() { - "nearest" => kornia_rs::interpolation::InterpolationMode::Nearest, - "bilinear" => kornia_rs::interpolation::InterpolationMode::Bilinear, + "nearest" => InterpolationMode::Nearest, + "bilinear" => InterpolationMode::Bilinear, _ => { return Err(PyErr::new::( "Invalid interpolation mode", @@ -35,7 +37,7 @@ pub fn warp_affine( .cast::() .map_err(|e| PyErr::new::(format!("{}", e)))?; - let image = kornia_rs::warp::warp_affine(&image, m, new_size, interpolation) + let image = warp::warp_affine(&image, m, new_size, interpolation) .map_err(|e| PyErr::new::(format!("{}", e)))?; // NOTE: for bicubic interpolation (not implemented yet), f32 may overshoot 255 diff --git a/kornia-rs.code-workspace b/kornia-rs.code-workspace deleted file mode 100644 index 8f4183e8..00000000 --- a/kornia-rs.code-workspace +++ /dev/null @@ -1,7 +0,0 @@ -{ - "folders": [ - { - "path": "." - } - ] -} diff --git a/kornia-serve/Cargo.lock b/kornia-serve/Cargo.lock index c0d95038..284ff783 100644 --- a/kornia-serve/Cargo.lock +++ b/kornia-serve/Cargo.lock @@ -109,6 +109,17 @@ version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "96d30a06541fbafbc7f82ed10c06164cfbd2c401138f6addd8404629c4b16711" +[[package]] +name = "arrow-buffer" +version = "52.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cae6970bab043c4fbc10aee1660ceb5b306d0c42c8cc5f6ae564efcd9759b663" +dependencies = [ + "bytes", + "half", + "num", +] + [[package]] name = "async-trait" version = "0.1.80" @@ -120,6 +131,12 @@ dependencies = [ "syn", ] +[[package]] +name = "atomic_refcell" +version = "0.1.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41e67cd8309bbd06cd603a9e693a784ac2e5d1e955f11286e355089fcab3047c" + [[package]] name = "autocfg" version = "1.2.0" @@ -231,6 +248,12 @@ version = "1.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" +[[package]] +name = "bitflags" +version = "2.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b048fb63fd8b5923fc5aa7b340d8e156aec7ec02f0c78fa8a6ddc2613f6f71de" + [[package]] name = "bitstream-io" version = "2.2.0" @@ -500,6 +523,34 @@ version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dfc6580bb841c5a68e9ef15c77ccc837b40a7504914d52e47b8b0e9bbda25a1d" +[[package]] +name = "futures-executor" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a576fc72ae164fca6b9db127eaa9a9dda0d61316034f33a0a0d4eda41f02b01d" +dependencies = [ + "futures-core", + "futures-task", + "futures-util", +] + +[[package]] +name = "futures-macro" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87750cf4b7a4c0625b1529e4c543c2182106e4dedc60a2a6455e00d212c489ac" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "futures-sink" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9fb8e00e87438d937621c1c6269e53f536c14d3fbd6a042bb24879e57d474fb5" + [[package]] name = "futures-task" version = "0.3.30" @@ -513,9 +564,11 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3d6401deb83407ab3da39eba7e33987a73c3df0c82b4bb5813ee871c19c41d48" dependencies = [ "futures-core", + "futures-macro", "futures-task", "pin-project-lite", "pin-utils", + "slab", ] [[package]] @@ -545,6 +598,167 @@ version = "0.28.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4271d37baee1b8c7e4b708028c57d816cf9d2434acb33a549475f78c181f6253" +[[package]] +name = "gio-sys" +version = "0.19.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2cd743ba4714d671ad6b6234e8ab2a13b42304d0e13ab7eba1dcdd78a7d6d4ef" +dependencies = [ + "glib-sys", + "gobject-sys", + "libc", + "system-deps", + "windows-sys 0.52.0", +] + +[[package]] +name = "glib" +version = "0.19.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "39650279f135469465018daae0ba53357942a5212137515777d5fdca74984a44" +dependencies = [ + "bitflags 2.6.0", + "futures-channel", + "futures-core", + "futures-executor", + "futures-task", + "futures-util", + "gio-sys", + "glib-macros", + "glib-sys", + "gobject-sys", + "libc", + "memchr", + "smallvec", + "thiserror", +] + +[[package]] +name = "glib-macros" +version = "0.19.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4429b0277a14ae9751350ad9b658b1be0abb5b54faa5bcdf6e74a3372582fad7" +dependencies = [ + "heck", + "proc-macro-crate", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "glib-sys" +version = "0.19.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c2dc18d3a82b0006d470b13304fbbb3e0a9bd4884cf985a60a7ed733ac2c4a5" +dependencies = [ + "libc", + "system-deps", +] + +[[package]] +name = "gobject-sys" +version = "0.19.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2e697e252d6e0416fd1d9e169bda51c0f1c926026c39ca21fbe8b1bb5c3b8b9e" +dependencies = [ + "glib-sys", + "libc", + "system-deps", +] + +[[package]] +name = "gstreamer" +version = "0.22.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "080daaf35d22367a398aefd032af80cc36238c76fac7b8822894f5e5be073795" +dependencies = [ + "cfg-if", + "futures-channel", + "futures-core", + "futures-util", + "glib", + "gstreamer-sys", + "itertools 0.13.0", + "libc", + "muldiv", + "num-integer", + "num-rational", + "once_cell", + "option-operations", + "paste", + "pin-project-lite", + "smallvec", + "thiserror", +] + +[[package]] +name = "gstreamer-app" +version = "0.22.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1363313eb1931d66ac0b82c9b477fdd066af9dc118ea844966f85b6d99f261fd" +dependencies = [ + "futures-core", + "futures-sink", + "glib", + "gstreamer", + "gstreamer-app-sys", + "gstreamer-base", + "libc", +] + +[[package]] +name = "gstreamer-app-sys" +version = "0.22.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed667453517b47754b9f9d28c096074e5d565f1cc48c6fa2483b1ea10d7688d3" +dependencies = [ + "glib-sys", + "gstreamer-base-sys", + "gstreamer-sys", + "libc", + "system-deps", +] + +[[package]] +name = "gstreamer-base" +version = "0.22.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "39d55668b23fc69f1843daa42b43d289c00fe38e9586c5453b134783d2dd75a3" +dependencies = [ + "atomic_refcell", + "cfg-if", + "glib", + "gstreamer", + "gstreamer-base-sys", + "libc", +] + +[[package]] +name = "gstreamer-base-sys" +version = "0.22.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5448abb00c197e3ad306710293bf757303cbeab4036b5ccad21c7642b8bf00c9" +dependencies = [ + "glib-sys", + "gobject-sys", + "gstreamer-sys", + "libc", + "system-deps", +] + +[[package]] +name = "gstreamer-sys" +version = "0.22.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "71f147e7c6bc9313d5569eb15da61f6f64026ec69791922749de230583a07286" +dependencies = [ + "glib-sys", + "gobject-sys", + "libc", + "system-deps", +] + [[package]] name = "half" version = "2.4.1" @@ -752,6 +966,15 @@ dependencies = [ "either", ] +[[package]] +name = "itertools" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "413ee7dfc52ee1a4949ceeb7dbc8a33f2d6c088194d9f922fb8318faf1f01186" +dependencies = [ + "either", +] + [[package]] name = "itoa" version = "1.0.11" @@ -774,23 +997,64 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f5d4a7da358eff58addd2877a45865158f0d78c911d43a5784ceb7bbf52833b0" [[package]] -name = "kornia-rs" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb5f8413cc49444d93c18be32d16c44bdfb08411b05007f42763e88b3e02dea0" +name = "kornia-core" +version = "0.1.6+dev" +dependencies = [ + "arrow-buffer", + "serde", + "thiserror", +] + +[[package]] +name = "kornia-image" +version = "0.1.6+dev" +dependencies = [ + "anyhow", + "ndarray", + "num-traits", + "thiserror", +] + +[[package]] +name = "kornia-imgproc" +version = "0.1.6+dev" dependencies = [ "anyhow", "fast_image_resize", - "image", - "memmap2", + "kornia-image", "ndarray", "num-traits", + "thiserror", +] + +[[package]] +name = "kornia-io" +version = "0.1.6+dev" +dependencies = [ + "anyhow", + "gstreamer", + "gstreamer-app", + "image", + "kornia-image", + "memmap2", + "thiserror", + "tokio", "turbojpeg", ] +[[package]] +name = "kornia-rs" +version = "0.1.6+dev" +dependencies = [ + "kornia-core", + "kornia-image", + "kornia-imgproc", + "kornia-io", +] + [[package]] name = "kornia-serve" -version = "0.1.0" +version = "0.1.6+dev" dependencies = [ "axum", "env_logger", @@ -933,6 +1197,12 @@ dependencies = [ "windows-sys 0.48.0", ] +[[package]] +name = "muldiv" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "956787520e75e9bd233246045d19f42fb73242759cc57fba9611d940ae96d4b0" + [[package]] name = "ndarray" version = "0.15.6" @@ -969,6 +1239,20 @@ version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0676bb32a98c1a483ce53e500a81ad9c3d5b3f7c920c28c24e9cb0980d0b5bc8" +[[package]] +name = "num" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3135b08af27d103b0a51f2ae0f8632117b7b185ccf931445affa8df530576a41" +dependencies = [ + "num-bigint", + "num-complex", + "num-integer", + "num-iter", + "num-rational", + "num-traits", +] + [[package]] name = "num-bigint" version = "0.4.4" @@ -1009,6 +1293,17 @@ dependencies = [ "num-traits", ] +[[package]] +name = "num-iter" +version = "0.1.45" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1429034a0490724d0075ebb2bc9e875d6503c3cf69e235a8941aa757d83ef5bf" +dependencies = [ + "autocfg", + "num-integer", + "num-traits", +] + [[package]] name = "num-rational" version = "0.4.1" @@ -1061,6 +1356,15 @@ version = "1.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" +[[package]] +name = "option-operations" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7c26d27bb1aeab65138e4bf7666045169d1717febcc9ff870166be8348b223d0" +dependencies = [ + "paste", +] + [[package]] name = "parking_lot" version = "0.12.1" @@ -1140,7 +1444,7 @@ version = "0.17.13" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "06e4b0d3d1312775e782c86c91a111aa1f910cbb65e1337f9975b5f9a554b5e1" dependencies = [ - "bitflags", + "bitflags 1.3.2", "crc32fast", "fdeflate", "flate2", @@ -1159,6 +1463,15 @@ version = "0.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" +[[package]] +name = "proc-macro-crate" +version = "3.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d37c51ca738a55da99dc0c4a34860fd675453b8b36209178c2249bb13651284" +dependencies = [ + "toml_edit 0.21.1", +] + [[package]] name = "proc-macro2" version = "1.0.81" @@ -1255,7 +1568,7 @@ dependencies = [ "built", "cfg-if", "interpolate_name", - "itertools", + "itertools 0.12.1", "libc", "libfuzzer-sys", "log", @@ -1323,7 +1636,7 @@ version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4722d768eff46b75989dd134e5c353f0d6296e5aaa3132e776cbdb56be7731aa" dependencies = [ - "bitflags", + "bitflags 1.3.2", ] [[package]] @@ -1483,6 +1796,15 @@ dependencies = [ "quote", ] +[[package]] +name = "slab" +version = "0.4.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" +dependencies = [ + "autocfg", +] + [[package]] name = "smallvec" version = "1.13.2" @@ -1620,7 +1942,7 @@ dependencies = [ "serde", "serde_spanned", "toml_datetime", - "toml_edit", + "toml_edit 0.22.12", ] [[package]] @@ -1632,6 +1954,17 @@ dependencies = [ "serde", ] +[[package]] +name = "toml_edit" +version = "0.21.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a8534fd7f78b5405e860340ad6575217ce99f38d4d5c8f2442cb5ecb50090e1" +dependencies = [ + "indexmap", + "toml_datetime", + "winnow 0.5.40", +] + [[package]] name = "toml_edit" version = "0.22.12" @@ -1642,7 +1975,7 @@ dependencies = [ "serde", "serde_spanned", "toml_datetime", - "winnow", + "winnow 0.6.6", ] [[package]] @@ -1997,6 +2330,15 @@ version = "0.52.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bec47e5bfd1bff0eeaf6d8b485cc1074891a197ab4225d504cb7a1ab88b02bf0" +[[package]] +name = "winnow" +version = "0.5.40" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f593a95398737aeed53e489c785df13f3618e41dbcd6718c6addbf1395aa6876" +dependencies = [ + "memchr", +] + [[package]] name = "winnow" version = "0.6.6" diff --git a/kornia-serve/Cargo.toml b/kornia-serve/Cargo.toml index e8097103..09574075 100644 --- a/kornia-serve/Cargo.toml +++ b/kornia-serve/Cargo.toml @@ -1,13 +1,25 @@ [package] name = "kornia-serve" -version = "0.1.0" +categories = ["computer-vision", "science::robotics"] +description = "Kornia serving library for computer vision and deep learning" edition = "2021" +homepage = "http://kornia.org" +include = ["Cargo.toml"] +license = "Apache-2.0" +license-file = "LICENSE" +repository = "https://github.com/kornia/kornia-rs" +rust-version = "1.76" +version = "0.1.6+dev" [dependencies] + +# kornia +kornia = { path = "../crates/kornia", features = ["gstreamer", "jpegturbo"] } + +# external axum = "0.7.5" env_logger = "0.11.3" -kornia-rs = "0.1.3" -indicatif = { version = "0.17.8", features=["rayon"] } +indicatif = { version = "0.17.8", features = ["rayon"] } log = "0.4" rayon = "1.10" serde = { version = "1.0", features = ["derive"] } diff --git a/kornia-serve/Dockerfile b/kornia-serve/Dockerfile index 1e78fc69..5e055fea 100644 --- a/kornia-serve/Dockerfile +++ b/kornia-serve/Dockerfile @@ -1,5 +1,5 @@ # Use an official Rust runtime as a parent image -FROM rust:1.77-buster as builder +FROM rust:1.79-bullseye as builder # Set the working directory in the image to /app WORKDIR /app @@ -10,6 +10,8 @@ COPY . /app # Install the required dependencies RUN apt-get update && apt-get install -y \ cmake \ + libgstreamer1.0-dev \ + libgstreamer-plugins-base1.0-dev \ nasm # Build the application in release mode diff --git a/kornia-serve/src/compute.rs b/kornia-serve/src/compute.rs index 7b6137d5..0cb9c49c 100644 --- a/kornia-serve/src/compute.rs +++ b/kornia-serve/src/compute.rs @@ -70,11 +70,11 @@ pub async fn compute_mean_std(query: Json) -> impl IntoResponse { .progress_with(pb) .for_each(|image_path| { // read the image - let image = kornia_rs::io::functional::read_image_jpeg(&image_path) - .expect("Failed to read image"); + let image = + kornia::io::functional::read_image_jpeg(&image_path).expect("Failed to read image"); // compute the std and mean - let (std, mean) = kornia_rs::core::std_mean(&image); + let (std, mean) = kornia::imgproc::core::std_mean(&image); // update the total std and mean diff --git a/release.sh b/release.sh deleted file mode 100755 index 141ff76b..00000000 --- a/release.sh +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/bash -e -DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )" -$DIR/docker/release.sh $@ diff --git a/run_tests.sh b/run_tests.sh deleted file mode 100755 index a6e7c910..00000000 --- a/run_tests.sh +++ /dev/null @@ -1,2 +0,0 @@ -#!/bin/bash -e -./devel.sh "python3 -m venv .venv; source .venv/bin/activate; maturin develop --extras dev --all-features; pytest test/" diff --git a/src/io/mod.rs b/src/io/mod.rs deleted file mode 100644 index de33ca0c..00000000 --- a/src/io/mod.rs +++ /dev/null @@ -1,8 +0,0 @@ -pub mod fps_counter; -pub mod functional; -#[cfg(feature = "jpegturbo")] -pub mod jpeg; -#[cfg(feature = "gstreamer")] -pub mod stream; -#[cfg(feature = "gstreamer")] -pub mod webcam; diff --git a/src/lib.rs b/src/lib.rs deleted file mode 100644 index c51f7b7b..00000000 --- a/src/lib.rs +++ /dev/null @@ -1,18 +0,0 @@ -pub mod calibration; -pub mod color; -pub mod core; -// NOTE: not ready yet -// pub mod distance_transform; -pub mod flip; -pub mod histogram; -pub mod image; -pub mod interpolation; -pub mod io; -pub mod metrics; -pub mod normalize; -pub mod resize; -// NOTE: not ready yet -pub mod enhance; -pub mod tensor; -pub mod threshold; -pub mod warp; diff --git a/src/tensor/mod.rs b/src/tensor/mod.rs deleted file mode 100644 index cb2ab321..00000000 --- a/src/tensor/mod.rs +++ /dev/null @@ -1,14 +0,0 @@ -pub mod allocator; -mod base; -// TODO: mod ops; -mod serde; -mod storage; - -pub use allocator::{CpuAllocator, TensorAllocator}; -pub use base::{Tensor, TensorError}; - -// aliases -pub type Tensor1 = Tensor; -pub type Tensor2 = Tensor; -pub type Tensor3 = Tensor; -pub type Tensor4 = Tensor;