diff --git a/.gitattributes b/.gitattributes index 43fc914..8177356 100644 --- a/.gitattributes +++ b/.gitattributes @@ -6,3 +6,5 @@ *.ply binary *.splat binary + +*.lock -diff diff --git a/.github/workflows/deploy-pages.yml b/.github/workflows/deploy-pages.yml deleted file mode 100644 index 8bcdba4..0000000 --- a/.github/workflows/deploy-pages.yml +++ /dev/null @@ -1,57 +0,0 @@ -name: deploy github pages - -on: - push: - branches: - - main - workflow_dispatch: - -permissions: - contents: write - -env: - CARGO_TERM_COLOR: always - RUST_BACKTRACE: 1 - - -jobs: - deploy: - runs-on: macos-latest - - steps: - - name: checkout repository - uses: actions/checkout@v3 - - - name: setup nightly rust toolchain with caching - uses: brndnmtthws/rust-action@v1 - with: - toolchain: nightly - components: rustfmt, clippy - enable-sccache: "false" - - - name: install wasm32-unknown-unknown - run: rustup target add wasm32-unknown-unknown - - - name: install wasm-bindgen-cli - run: cargo install wasm-bindgen-cli - - # - name: install wasm-opt - # run: cargo install wasm-opt --locked - - - name: build wasm artifacts - run: cargo build -p bevy_burn_dino --target wasm32-unknown-unknown --release --no-default-features --features "web" - - # - name: optimize wasm artifacts - # run: wasm-opt -O -ol 100 -s 100 -o ./target/wasm32-unknown-unknown/release/bevy_burn_dino_opt.wasm ./target/wasm32-unknown-unknown/release/bevy_burn_dino.wasm - - - name: generate bindings with wasm-bindgen - run: wasm-bindgen --out-dir ./crates/bevy_burn_dino/www/out/ --target web ./target/wasm32-unknown-unknown/release/bevy_burn_dino.wasm - - - name: copy assets - run: mkdir -p ./crates/bevy_burn_dino/www/assets && cp -r ./assets/* ./crates/bevy_burn_dino/assets/ && cp -r ./crates/bevy_burn_dino/assets/* ./crates/bevy_burn_dino/www/assets/ - - - name: deploy to github pages - uses: JamesIves/github-pages-deploy-action@v4 - with: - folder: ./crates/bevy_burn_dino/www - branch: www diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 7f47cbf..726cc82 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -34,4 +34,4 @@ jobs: enable-sccache: "false" - name: test (default) - run: cargo test + run: cargo test --no-default-features --features backend_ndarray diff --git a/.gitignore b/.gitignore index f7bdbba..5e79b24 100644 --- a/.gitignore +++ b/.gitignore @@ -15,6 +15,8 @@ out/ *.safetensors assets/model/ +__pycache__/ + .DS_Store test_depth.png diff --git a/Cargo.lock b/Cargo.lock index 16465d8..8c664a9 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2,6 +2,63 @@ # It is not intended for manual editing. version = 4 +[[package]] +name = "accesskit" +version = "0.21.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf203f9d3bd8f29f98833d1fbef628df18f759248a547e7e01cfbf63cda36a99" + +[[package]] +name = "accesskit_consumer" +version = "0.31.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db81010a6895d8707f9072e6ce98070579b43b717193d2614014abd5cb17dd43" +dependencies = [ + "accesskit", + "hashbrown 0.15.5", +] + +[[package]] +name = "accesskit_macos" +version = "0.22.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a0089e5c0ac0ca281e13ea374773898d9354cc28d15af9f0f7394d44a495b575" +dependencies = [ + "accesskit", + "accesskit_consumer", + "hashbrown 0.15.5", + "objc2 0.5.2", + "objc2-app-kit", + "objc2-foundation", +] + +[[package]] +name = "accesskit_windows" +version = "0.29.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2d63dd5041e49c363d83f5419a896ecb074d309c414036f616dc0b04faca971" +dependencies = [ + "accesskit", + "accesskit_consumer", + "hashbrown 0.15.5", + "static_assertions", + "windows 0.61.3", + "windows-core 0.61.2", +] + +[[package]] +name = "accesskit_winit" +version = "0.29.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8cfabe59d0eaca7412bfb1f70198dd31e3b0496fee7e15b066f9c36a1a140a0" +dependencies = [ + "accesskit", + "accesskit_macos", + "accesskit_windows", + "raw-window-handle", + "winit", +] + [[package]] name = "adler2" version = "2.0.1" @@ -14,7 +71,7 @@ version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b169f7a6d4742236a0a00c541b845991d0ac43e546831af1249753ab4c3aa3a0" dependencies = [ - "cfg-if", + "cfg-if 1.0.4", "cipher", "cpufeatures", ] @@ -25,7 +82,7 @@ version = "0.8.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5a15f179cd60c4584b8a8c596927aadc462e27f2ca70c04e0071964a73ba7a75" dependencies = [ - "cfg-if", + "cfg-if 1.0.4", "once_cell", "version_check", "zerocopy", @@ -55,6 +112,39 @@ version = "0.2.21" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923" +[[package]] +name = "android-activity" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef6978589202a00cd7e118380c448a08b6ed394c3a8df3a430d0898e3a42d046" +dependencies = [ + "android-properties", + "bitflags 2.10.0", + "cc", + "cesu8", + "jni", + "jni-sys", + "libc", + "log", + "ndk", + "ndk-context", + "ndk-sys", + "num_enum", + "thiserror 1.0.69", +] + +[[package]] +name = "android-properties" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc7eb209b1518d6bb87b283c20095f5228ecda460da70b44f0802523dea6da04" + +[[package]] +name = "android_log-sys" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "84521a3cf562bc62942e294181d9eef17eb38ceb8c68677bc49f144e4c3d4f8d" + [[package]] name = "android_system_properties" version = "0.1.5" @@ -126,6 +216,15 @@ version = "1.0.100" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a23eb6b1614318a8071c9b2521f36b424b2c83db5eb3a0fead4a6c0809af6e61" +[[package]] +name = "approx" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cab112f0a86d568ea0e627cc1d6be74a1e9cd55214684db5561995f6dad897c6" +dependencies = [ + "num-traits", +] + [[package]] name = "arbitrary" version = "1.4.2" @@ -143,15 +242,27 @@ checksum = "0ae92a5119aa49cdbcf6b9f893fe4e1d98b04ccbf82ee0584ad948a44a734dea" dependencies = [ "proc-macro2", "quote", - "syn 2.0.108", + "syn 2.0.109", ] +[[package]] +name = "arrayref" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "76a2e8124351fda1ef8aaaa3bbd7ebbcb486bbcd4225aca0aa0d84bb2db8fecb" + [[package]] name = "arrayvec" version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50" +[[package]] +name = "as-raw-xcb-connection" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "175571dd1d178ced59193a6fc02dde1b972eb0bc56c892cde9beeceac5bf0f6b" + [[package]] name = "ash" version = "0.38.0+1.3.281" @@ -161,6 +272,29 @@ dependencies = [ "libloading", ] +[[package]] +name = "assert_type_match" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f548ad2c4031f2902e3edc1f29c29e835829437de49562d8eb5dc5584d3a1043" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.109", +] + +[[package]] +name = "async-broadcast" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "435a87a52755b8f27fcf321ac4f04b2802e337c8c4872923137471ec39c37532" +dependencies = [ + "event-listener", + "event-listener-strategy", + "futures-core", + "pin-project-lite", +] + [[package]] name = "async-channel" version = "2.5.0" @@ -173,11 +307,59 @@ dependencies = [ "pin-project-lite", ] +[[package]] +name = "async-executor" +version = "1.13.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "497c00e0fd83a72a79a39fcbd8e3e2f055d6f6c7e025f3b3d91f4f8e76527fb8" +dependencies = [ + "async-task", + "concurrent-queue", + "fastrand", + "futures-lite", + "pin-project-lite", + "slab", +] + +[[package]] +name = "async-fs" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8034a681df4aed8b8edbd7fbe472401ecf009251c8b40556b304567052e294c5" +dependencies = [ + "async-lock", + "blocking", + "futures-lite", +] + +[[package]] +name = "async-lock" +version = "3.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5fd03604047cee9b6ce9de9f70c6cd540a0520c813cbd49bae61f33ab80ed1dc" +dependencies = [ + "event-listener", + "event-listener-strategy", + "pin-project-lite", +] + +[[package]] +name = "async-task" +version = "4.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b75356056920673b02621b35afd0f7dda9306d03c79a30f5c56c44cf256e3de" +dependencies = [ + "portable-atomic", +] + [[package]] name = "atomic-waker" version = "1.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" +dependencies = [ + "portable-atomic", +] [[package]] name = "atomic_float" @@ -185,6 +367,16 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "628d228f918ac3b82fe590352cc719d30664a0c13ca3a60266fe02c7132d480a" +[[package]] +name = "atomicow" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f52e8890bb9844440d0c412fa74b67fd2f14e85248b6e00708059b6da9e5f8bf" +dependencies = [ + "portable-atomic", + "portable-atomic-util", +] + [[package]] name = "autocfg" version = "1.5.0" @@ -282,120 +474,1258 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "55248b47b0caf0546f7988906588779981c43bb1bc9d0c44087278f80cdb44ba" [[package]] -name = "bincode" -version = "2.0.1" +name = "bevy" +version = "0.17.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "36eaf5d7b090263e8150820482d5d93cd964a81e4019913c972f4edcc6edb740" +checksum = "342f7e9335416dc98642d5747c4ed8a6ad9f7244a36d5b2b7a1b7910e4d8f524" dependencies = [ - "serde", - "unty", + "bevy_internal", ] [[package]] -name = "bindgen" -version = "0.71.1" +name = "bevy_a11y" +version = "0.17.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f58bf3d7db68cfbac37cfc485a8d711e87e064c3d0fe0435b92f7a407f9d6b3" +checksum = "3917cd35096fb2fe176632740b68a4b53cb61006cfff13d66ef47ee2c2478d53" dependencies = [ - "bitflags 2.10.0", - "cexpr", - "clang-sys", - "itertools 0.13.0", - "log", - "prettyplease 0.2.37", - "proc-macro2", - "quote", - "regex", - "rustc-hash 2.1.1", - "shlex", - "syn 2.0.108", + "accesskit", + "bevy_app", + "bevy_derive", + "bevy_ecs", + "bevy_reflect", ] [[package]] -name = "bit-set" -version = "0.8.0" +name = "bevy_android" +version = "0.17.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08807e080ed7f9d5433fa9b275196cfc35414f66a0c79d864dc51a0d825231a3" +checksum = "c2a9dd9488c77fa2ea31b5da2f978aab7f1cc82e6d2c3be0adf637d9fd7cb6c8" dependencies = [ - "bit-vec", + "android-activity", ] [[package]] -name = "bit-vec" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e764a1d40d510daf35e07be9eb06e75770908c27d411ee6c92109c9840eaaf7" - -[[package]] -name = "bit_field" -version = "0.10.3" +name = "bevy_anti_alias" +version = "0.17.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e4b40c7323adcfc0a41c4b88143ed58346ff65a288fc144329c5c45e05d70c6" +checksum = "38c1adb85fe0956d6c3b6f90777b829785bb7e29a48f58febeeefd2bad317713" +dependencies = [ + "bevy_app", + "bevy_asset", + "bevy_camera", + "bevy_core_pipeline", + "bevy_derive", + "bevy_diagnostic", + "bevy_ecs", + "bevy_image", + "bevy_math", + "bevy_reflect", + "bevy_render", + "bevy_shader", + "bevy_utils", + "tracing", +] [[package]] -name = "bitflags" -version = "1.3.2" +name = "bevy_app" +version = "0.17.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" +checksum = "9f582409b4ed3850d9b66ee94e71a0e2c20e7068121d372530060c4dfcba66fa" +dependencies = [ + "bevy_derive", + "bevy_ecs", + "bevy_platform", + "bevy_reflect", + "bevy_tasks", + "bevy_utils", + "cfg-if 1.0.4", + "console_error_panic_hook", + "ctrlc", + "downcast-rs", + "log", + "thiserror 2.0.17", + "variadics_please", + "wasm-bindgen", + "web-sys", +] [[package]] -name = "bitflags" -version = "2.10.0" +name = "bevy_args" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "812e12b5285cc515a9c72a5c1d3b6d46a19dac5acfef5265968c166106e31dd3" +checksum = "78be90b7057af29f4d871d241718a974f921ee9cd04efc1d8e3c8eb1d40c8b8a" dependencies = [ - "serde_core", + "bevy", + "clap", + "console_error_panic_hook", + "serde", + "serde_json", + "wasm-bindgen", + "web-sys", ] [[package]] -name = "bitstream-io" -version = "2.6.0" +name = "bevy_asset" +version = "0.17.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6099cdc01846bc367c4e7dd630dc5966dccf36b652fae7a74e17b640411a91b2" +checksum = "9e6ee42e74a64a46ab91bd1c0155f8abe5b732bdb948a9b26e541456cc7940e5" +dependencies = [ + "async-broadcast", + "async-fs", + "async-lock", + "atomicow", + "bevy_android", + "bevy_app", + "bevy_asset_macros", + "bevy_ecs", + "bevy_platform", + "bevy_reflect", + "bevy_tasks", + "bevy_utils", + "bitflags 2.10.0", + "blake3", + "crossbeam-channel", + "derive_more", + "disqualified", + "downcast-rs", + "either", + "futures-io", + "futures-lite", + "js-sys", + "parking_lot", + "ron", + "serde", + "stackfuture", + "thiserror 2.0.17", + "tracing", + "uuid", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", +] [[package]] -name = "block" -version = "0.1.6" +name = "bevy_asset_macros" +version = "0.17.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d8c1fef690941d3e7788d328517591fecc684c084084702d6ff1641e993699a" +checksum = "d03711d2c087227f64ba85dd38a99d4d6893f80d2475c2e77fb90a883760a055" +dependencies = [ + "bevy_macro_utils", + "proc-macro2", + "quote", + "syn 2.0.109", +] [[package]] -name = "block-buffer" -version = "0.10.4" +name = "bevy_burn" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" +checksum = "1ff62e1c3105d1ce251eca77f6db3e4d9718f174444507e6205c9bd5fbd95363" dependencies = [ - "generic-array", + "bevy", + "burn", + "burn-core", + "burn-cubecl", + "burn-fusion", + "burn-wgpu", + "bytemuck", + "console_error_panic_hook", + "cubecl", + "getrandom 0.3.4", + "wasm-bindgen", + "web-sys", + "wgpu", ] [[package]] -name = "bstr" -version = "1.12.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "63044e1ae8e69f3b5a92c736ca6269b8d12fa7efe39bf34ddb06d102cf0e2cab" +name = "bevy_burn_depth" +version = "0.1.0" dependencies = [ - "memchr", - "regex-automata", + "bevy", + "bevy_args", + "bevy_burn", + "burn", + "burn_depth", + "clap", + "console_error_panic_hook", + "futures", + "futures-intrusive", + "image", + "js-sys", + "nokhwa", + "once_cell", "serde", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", ] [[package]] -name = "built" -version = "0.7.7" +name = "bevy_camera" +version = "0.17.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56ed6191a7e78c36abdb16ab65341eefd73d64d303fffccdbb00d51e4205967b" +checksum = "b70d79ccbd8bfefc79f33a104dfd82ae2f5276ce04d6df75787bfa3edc4c4c1a" +dependencies = [ + "bevy_app", + "bevy_asset", + "bevy_color", + "bevy_derive", + "bevy_ecs", + "bevy_image", + "bevy_math", + "bevy_mesh", + "bevy_reflect", + "bevy_transform", + "bevy_utils", + "bevy_window", + "derive_more", + "downcast-rs", + "serde", + "smallvec", + "thiserror 2.0.17", + "wgpu-types", +] [[package]] -name = "bumpalo" -version = "3.19.0" +name = "bevy_color" +version = "0.17.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94dc78477c1c208c0cd221c64e907aba8ba165f39bebb72adc6180e1a13e8938" +dependencies = [ + "bevy_math", + "bevy_reflect", + "bytemuck", + "derive_more", + "encase", + "serde", + "thiserror 2.0.17", + "wgpu-types", +] + +[[package]] +name = "bevy_core_pipeline" +version = "0.17.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c866a2fe33ec27a612d883223d30f1857aa852766b21a9603628735dace632f" +dependencies = [ + "bevy_app", + "bevy_asset", + "bevy_camera", + "bevy_color", + "bevy_derive", + "bevy_ecs", + "bevy_image", + "bevy_math", + "bevy_platform", + "bevy_reflect", + "bevy_render", + "bevy_shader", + "bevy_transform", + "bevy_utils", + "bevy_window", + "bitflags 2.10.0", + "nonmax", + "radsort", + "smallvec", + "thiserror 2.0.17", + "tracing", +] + +[[package]] +name = "bevy_derive" +version = "0.17.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8c733807158f8fcac68e23222e69ed91a6492ae9410fc2c145b9bb182cfd63e" +dependencies = [ + "bevy_macro_utils", + "quote", + "syn 2.0.109", +] + +[[package]] +name = "bevy_diagnostic" +version = "0.17.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f12fa32312818c08aa4035bebe9fb3f62aaf7efae33688e718dd6ee6c0147493" +dependencies = [ + "atomic-waker", + "bevy_app", + "bevy_ecs", + "bevy_platform", + "bevy_tasks", + "bevy_time", + "const-fnv1a-hash", + "log", + "serde", +] + +[[package]] +name = "bevy_ecs" +version = "0.17.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "69d929d32190cfcde6efd2df493601c4dbc18a691fd9775a544c951c3c112e1a" +dependencies = [ + "arrayvec", + "bevy_ecs_macros", + "bevy_platform", + "bevy_ptr", + "bevy_reflect", + "bevy_tasks", + "bevy_utils", + "bitflags 2.10.0", + "bumpalo", + "concurrent-queue", + "derive_more", + "fixedbitset 0.5.7", + "indexmap", + "log", + "nonmax", + "serde", + "slotmap", + "smallvec", + "thiserror 2.0.17", + "variadics_please", +] + +[[package]] +name = "bevy_ecs_macros" +version = "0.17.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6eeddfb80a2e000663e87be9229c26b4da92bddbc06c8776bc0d1f4a7f679079" +dependencies = [ + "bevy_macro_utils", + "proc-macro2", + "quote", + "syn 2.0.109", +] + +[[package]] +name = "bevy_encase_derive" +version = "0.17.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7449e5903594a00f007732ba232af0c527ad4e6e3d29bc3e195ec78dbd20c8b2" +dependencies = [ + "bevy_macro_utils", + "encase_derive_impl", +] + +[[package]] +name = "bevy_gizmos" +version = "0.17.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d3f174faa13041634060dd99f6f59c29997fd62f40252f0466c2ebea8603d4d" +dependencies = [ + "bevy_app", + "bevy_asset", + "bevy_camera", + "bevy_color", + "bevy_core_pipeline", + "bevy_ecs", + "bevy_gizmos_macros", + "bevy_image", + "bevy_light", + "bevy_math", + "bevy_mesh", + "bevy_pbr", + "bevy_reflect", + "bevy_render", + "bevy_shader", + "bevy_sprite_render", + "bevy_time", + "bevy_transform", + "bevy_utils", + "bytemuck", + "tracing", +] + +[[package]] +name = "bevy_gizmos_macros" +version = "0.17.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "714273aa7f285c0aaa874b7fbe37fe4e6e45355e3e6f3321aefa1b78cda259e0" +dependencies = [ + "bevy_macro_utils", + "quote", + "syn 2.0.109", +] + +[[package]] +name = "bevy_image" +version = "0.17.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "168de8239b2aedd2eeef9f76ae1909b2fdf859b11dcdb4d4d01b93f5f2c771be" +dependencies = [ + "bevy_app", + "bevy_asset", + "bevy_color", + "bevy_ecs", + "bevy_math", + "bevy_platform", + "bevy_reflect", + "bevy_utils", + "bitflags 2.10.0", + "bytemuck", + "futures-lite", + "guillotiere", + "half", + "image", + "ktx2", + "rectangle-pack", + "ruzstd", + "serde", + "thiserror 2.0.17", + "tracing", + "wgpu-types", +] + +[[package]] +name = "bevy_input" +version = "0.17.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3cf4074b2d0d6680b4deb308ded7b4e8b1b99181c0502e2632e78af815b26f01" +dependencies = [ + "bevy_app", + "bevy_ecs", + "bevy_math", + "bevy_platform", + "bevy_reflect", + "derive_more", + "log", + "smol_str", + "thiserror 2.0.17", +] + +[[package]] +name = "bevy_input_focus" +version = "0.17.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "70761eba0f616a1caa761457bff2b8ae80c9916f39d167fab8c2d5c98d2b8951" +dependencies = [ + "bevy_app", + "bevy_ecs", + "bevy_input", + "bevy_math", + "bevy_picking", + "bevy_reflect", + "bevy_window", + "log", + "thiserror 2.0.17", +] + +[[package]] +name = "bevy_internal" +version = "0.17.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f43985739584f3a5d43026aa1edd772f064830be46c497518f05f7dfbc886bba" +dependencies = [ + "bevy_a11y", + "bevy_android", + "bevy_anti_alias", + "bevy_app", + "bevy_asset", + "bevy_camera", + "bevy_color", + "bevy_core_pipeline", + "bevy_derive", + "bevy_diagnostic", + "bevy_ecs", + "bevy_gizmos", + "bevy_image", + "bevy_input", + "bevy_input_focus", + "bevy_light", + "bevy_log", + "bevy_math", + "bevy_mesh", + "bevy_pbr", + "bevy_platform", + "bevy_ptr", + "bevy_reflect", + "bevy_render", + "bevy_shader", + "bevy_sprite", + "bevy_sprite_render", + "bevy_state", + "bevy_tasks", + "bevy_text", + "bevy_time", + "bevy_transform", + "bevy_ui", + "bevy_ui_render", + "bevy_utils", + "bevy_window", + "bevy_winit", +] + +[[package]] +name = "bevy_light" +version = "0.17.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cad00ab66d1e93edb928be66606a71066f3b1cbc9f414720e290ef5361eb6237" +dependencies = [ + "bevy_app", + "bevy_asset", + "bevy_camera", + "bevy_color", + "bevy_ecs", + "bevy_image", + "bevy_math", + "bevy_mesh", + "bevy_platform", + "bevy_reflect", + "bevy_transform", + "bevy_utils", + "tracing", +] + +[[package]] +name = "bevy_log" +version = "0.17.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ae217a035714a37b779487f82edc4c7c1223f7088d7ad94054f29f524d61c51" +dependencies = [ + "android_log-sys", + "bevy_app", + "bevy_ecs", + "bevy_platform", + "bevy_utils", + "tracing", + "tracing-log", + "tracing-oslog", + "tracing-subscriber", + "tracing-wasm", +] + +[[package]] +name = "bevy_macro_utils" +version = "0.17.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "17dbc3f8948da58b3c17767d20fd3cd35fe4721ed19a9a3204a6f1d6c9951bdd" +dependencies = [ + "parking_lot", + "proc-macro2", + "quote", + "syn 2.0.109", + "toml_edit 0.23.7", +] + +[[package]] +name = "bevy_math" +version = "0.17.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f7a41e368ffa95ae2a353197d1ae3993f4d3d471444d80b65c932db667ea7b9e" +dependencies = [ + "approx", + "bevy_reflect", + "derive_more", + "glam", + "itertools 0.14.0", + "libm", + "rand 0.9.2", + "rand_distr", + "serde", + "smallvec", + "thiserror 2.0.17", + "variadics_please", +] + +[[package]] +name = "bevy_mesh" +version = "0.17.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6255244b71153b305fddb4e6f827cb97ed51f276b6e632f5fc46538647948f6" +dependencies = [ + "bevy_app", + "bevy_asset", + "bevy_derive", + "bevy_ecs", + "bevy_image", + "bevy_math", + "bevy_mikktspace", + "bevy_platform", + "bevy_reflect", + "bevy_transform", + "bitflags 2.10.0", + "bytemuck", + "derive_more", + "hexasphere", + "thiserror 2.0.17", + "tracing", + "wgpu-types", +] + +[[package]] +name = "bevy_mikktspace" +version = "0.17.0-dev" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ef8e4b7e61dfe7719bb03c884dc270cd46a82efb40f93e9933b990c5c190c59" + +[[package]] +name = "bevy_pbr" +version = "0.17.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf8c76337a6ae9d73d50be168aeee974d05fdeda9129a413eaff719e3b7b5fea" +dependencies = [ + "bevy_app", + "bevy_asset", + "bevy_camera", + "bevy_color", + "bevy_core_pipeline", + "bevy_derive", + "bevy_diagnostic", + "bevy_ecs", + "bevy_image", + "bevy_light", + "bevy_math", + "bevy_mesh", + "bevy_platform", + "bevy_reflect", + "bevy_render", + "bevy_shader", + "bevy_transform", + "bevy_utils", + "bitflags 2.10.0", + "bytemuck", + "derive_more", + "fixedbitset 0.5.7", + "nonmax", + "offset-allocator", + "smallvec", + "static_assertions", + "thiserror 2.0.17", + "tracing", +] + +[[package]] +name = "bevy_picking" +version = "0.17.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3a232a8ea4dc9b83c08226f56b868acb1ead06946a95d8b9c8cbbcc860cd8090" +dependencies = [ + "bevy_app", + "bevy_asset", + "bevy_camera", + "bevy_derive", + "bevy_ecs", + "bevy_input", + "bevy_math", + "bevy_platform", + "bevy_reflect", + "bevy_time", + "bevy_transform", + "bevy_window", + "tracing", + "uuid", +] + +[[package]] +name = "bevy_platform" +version = "0.17.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "10cf8cda162688c95250e74cffaa1c3a04597f105d4ca35554106f107308ea57" +dependencies = [ + "critical-section", + "foldhash 0.2.0", + "futures-channel", + "getrandom 0.3.4", + "hashbrown 0.16.0", + "js-sys", + "portable-atomic", + "portable-atomic-util", + "serde", + "spin 0.10.0", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-time", +] + +[[package]] +name = "bevy_ptr" +version = "0.17.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "28ab4074e7b781bab84e9b0a41ede245d673d1f75646ce0db27643aedcfb3a85" + +[[package]] +name = "bevy_reflect" +version = "0.17.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "333df3f5947b7e62728eb5c0b51d679716b16c7c5283118fed4563f13230954e" +dependencies = [ + "assert_type_match", + "bevy_platform", + "bevy_ptr", + "bevy_reflect_derive", + "bevy_utils", + "derive_more", + "disqualified", + "downcast-rs", + "erased-serde", + "foldhash 0.2.0", + "glam", + "inventory", + "serde", + "smallvec", + "smol_str", + "thiserror 2.0.17", + "uuid", + "variadics_please", + "wgpu-types", +] + +[[package]] +name = "bevy_reflect_derive" +version = "0.17.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0205dce9c5a4d8d041b263bcfd96e9d9d6f3d49416e12db347ab5778b3071fe1" +dependencies = [ + "bevy_macro_utils", + "indexmap", + "proc-macro2", + "quote", + "syn 2.0.109", + "uuid", +] + +[[package]] +name = "bevy_render" +version = "0.17.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "70d6a5d47ebb247e4ecaaf4a3b0310b7c518728ff2362c69f4220d0d3228e17d" +dependencies = [ + "async-channel", + "bevy_app", + "bevy_asset", + "bevy_camera", + "bevy_color", + "bevy_derive", + "bevy_diagnostic", + "bevy_ecs", + "bevy_encase_derive", + "bevy_image", + "bevy_math", + "bevy_mesh", + "bevy_platform", + "bevy_reflect", + "bevy_render_macros", + "bevy_shader", + "bevy_tasks", + "bevy_time", + "bevy_transform", + "bevy_utils", + "bevy_window", + "bitflags 2.10.0", + "bytemuck", + "derive_more", + "downcast-rs", + "encase", + "fixedbitset 0.5.7", + "image", + "indexmap", + "js-sys", + "naga", + "nonmax", + "offset-allocator", + "send_wrapper", + "smallvec", + "thiserror 2.0.17", + "tracing", + "variadics_please", + "wasm-bindgen", + "web-sys", + "wgpu", +] + +[[package]] +name = "bevy_render_macros" +version = "0.17.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a7e8b553adf0a4f9f059c5c2dcb52d9ac09abede1c322a92b43b9f4bb11c3843" +dependencies = [ + "bevy_macro_utils", + "proc-macro2", + "quote", + "syn 2.0.109", +] + +[[package]] +name = "bevy_shader" +version = "0.17.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3cef8f8e53776d286eb62bb60164f30671f07005ff407e94ec1176e9426d1477" +dependencies = [ + "bevy_asset", + "bevy_platform", + "bevy_reflect", + "naga", + "naga_oil", + "serde", + "thiserror 2.0.17", + "tracing", + "wgpu-types", +] + +[[package]] +name = "bevy_sprite" +version = "0.17.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "74bb52fa52caa1cc8d95acf45e52efc0c72b59755c2f0801a30fdab367921db0" +dependencies = [ + "bevy_app", + "bevy_asset", + "bevy_camera", + "bevy_color", + "bevy_derive", + "bevy_ecs", + "bevy_image", + "bevy_math", + "bevy_mesh", + "bevy_reflect", + "bevy_text", + "bevy_transform", + "bevy_window", + "radsort", + "tracing", + "wgpu-types", +] + +[[package]] +name = "bevy_sprite_render" +version = "0.17.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "31bb90a9139b04568bd30b2492ba61234092d95a7f7e3c84b55369b16d7e261b" +dependencies = [ + "bevy_app", + "bevy_asset", + "bevy_camera", + "bevy_color", + "bevy_core_pipeline", + "bevy_derive", + "bevy_ecs", + "bevy_image", + "bevy_math", + "bevy_mesh", + "bevy_platform", + "bevy_reflect", + "bevy_render", + "bevy_shader", + "bevy_sprite", + "bevy_text", + "bevy_transform", + "bevy_utils", + "bitflags 2.10.0", + "bytemuck", + "derive_more", + "fixedbitset 0.5.7", + "nonmax", + "tracing", +] + +[[package]] +name = "bevy_state" +version = "0.17.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fe4e955f36cdc7b31556e4619a653dcf65d46967d90d36fb788f746c8e89257e" +dependencies = [ + "bevy_app", + "bevy_ecs", + "bevy_platform", + "bevy_reflect", + "bevy_state_macros", + "bevy_utils", + "log", + "variadics_please", +] + +[[package]] +name = "bevy_state_macros" +version = "0.17.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c3e4e32b1b96585740a2b447661af7db1b9d688db5e4d96da50461cd8f5ce63" +dependencies = [ + "bevy_macro_utils", + "quote", + "syn 2.0.109", +] + +[[package]] +name = "bevy_tasks" +version = "0.17.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "18839182775f30d26f0f84d9de85d25361bb593c99517a80b64ede6cbaf41adc" +dependencies = [ + "async-channel", + "async-executor", + "async-task", + "atomic-waker", + "bevy_platform", + "crossbeam-queue", + "derive_more", + "futures-lite", + "heapless", + "pin-project", +] + +[[package]] +name = "bevy_text" +version = "0.17.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc1b759cf2ed8992132bd541ebb9ffcfa777d2faf3596d418fb25984bc6677d8" +dependencies = [ + "bevy_app", + "bevy_asset", + "bevy_color", + "bevy_derive", + "bevy_ecs", + "bevy_image", + "bevy_log", + "bevy_math", + "bevy_platform", + "bevy_reflect", + "bevy_utils", + "cosmic-text", + "serde", + "smallvec", + "sys-locale", + "thiserror 2.0.17", + "tracing", + "wgpu-types", +] + +[[package]] +name = "bevy_time" +version = "0.17.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a52edd3d30ed94074f646ba1c9914e407af9abe5b6fb7a4322c855341a536cc" +dependencies = [ + "bevy_app", + "bevy_ecs", + "bevy_platform", + "bevy_reflect", + "crossbeam-channel", + "log", + "serde", +] + +[[package]] +name = "bevy_transform" +version = "0.17.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7995ae14430b1a268d1e4f098ab770e8af880d2df5e4e37161b47d8d9e9625bd" +dependencies = [ + "bevy_app", + "bevy_ecs", + "bevy_log", + "bevy_math", + "bevy_reflect", + "bevy_tasks", + "bevy_utils", + "derive_more", + "serde", + "thiserror 2.0.17", +] + +[[package]] +name = "bevy_ui" +version = "0.17.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc999815a67a6b2fc911df9eea27af703ff656aed6fd31d8606dced701f07fd6" +dependencies = [ + "accesskit", + "bevy_a11y", + "bevy_app", + "bevy_asset", + "bevy_camera", + "bevy_color", + "bevy_derive", + "bevy_ecs", + "bevy_image", + "bevy_input", + "bevy_math", + "bevy_platform", + "bevy_reflect", + "bevy_sprite", + "bevy_text", + "bevy_transform", + "bevy_utils", + "bevy_window", + "derive_more", + "smallvec", + "taffy", + "thiserror 2.0.17", + "tracing", +] + +[[package]] +name = "bevy_ui_render" +version = "0.17.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "adae9770089e04339d003afe7abe7153fe71600d81c828f964c7ac329b04d5b9" +dependencies = [ + "bevy_app", + "bevy_asset", + "bevy_camera", + "bevy_color", + "bevy_core_pipeline", + "bevy_derive", + "bevy_ecs", + "bevy_image", + "bevy_math", + "bevy_mesh", + "bevy_platform", + "bevy_reflect", + "bevy_render", + "bevy_shader", + "bevy_sprite", + "bevy_sprite_render", + "bevy_text", + "bevy_transform", + "bevy_ui", + "bevy_utils", + "bytemuck", + "derive_more", + "tracing", +] + +[[package]] +name = "bevy_utils" +version = "0.17.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "080254083c74d5f6eb0649d7cd6181bda277e8fe3c509ec68990a5d56ec23f24" +dependencies = [ + "bevy_platform", + "disqualified", + "thread_local", +] + +[[package]] +name = "bevy_window" +version = "0.17.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f582478606d6b6e5c53befbe7612f038fdfb73f8a27f7aae644406637347acd4" +dependencies = [ + "bevy_app", + "bevy_ecs", + "bevy_input", + "bevy_math", + "bevy_platform", + "bevy_reflect", + "log", + "raw-window-handle", + "serde", +] + +[[package]] +name = "bevy_winit" +version = "0.17.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eb0ccf2faca4b4c156a26284d1bbf90a8cac8568a273adcd6c1a270c1342f3df" +dependencies = [ + "accesskit", + "accesskit_winit", + "approx", + "bevy_a11y", + "bevy_android", + "bevy_app", + "bevy_derive", + "bevy_ecs", + "bevy_input", + "bevy_input_focus", + "bevy_log", + "bevy_math", + "bevy_platform", + "bevy_reflect", + "bevy_tasks", + "bevy_window", + "cfg-if 1.0.4", + "tracing", + "wasm-bindgen", + "web-sys", + "winit", +] + +[[package]] +name = "bincode" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "36eaf5d7b090263e8150820482d5d93cd964a81e4019913c972f4edcc6edb740" +dependencies = [ + "serde", + "unty", +] + +[[package]] +name = "bindgen" +version = "0.65.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cfdf7b466f9a4903edc73f95d6d2bcd5baf8ae620638762244d3f60143643cc5" +dependencies = [ + "bitflags 1.3.2", + "cexpr", + "clang-sys", + "lazy_static", + "lazycell", + "log", + "peeking_take_while", + "prettyplease 0.2.37", + "proc-macro2", + "quote", + "regex", + "rustc-hash 1.1.0", + "shlex", + "syn 2.0.109", + "which", +] + +[[package]] +name = "bindgen" +version = "0.71.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f58bf3d7db68cfbac37cfc485a8d711e87e064c3d0fe0435b92f7a407f9d6b3" +dependencies = [ + "bitflags 2.10.0", + "cexpr", + "clang-sys", + "itertools 0.13.0", + "log", + "prettyplease 0.2.37", + "proc-macro2", + "quote", + "regex", + "rustc-hash 2.1.1", + "shlex", + "syn 2.0.109", +] + +[[package]] +name = "bit-set" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08807e080ed7f9d5433fa9b275196cfc35414f66a0c79d864dc51a0d825231a3" +dependencies = [ + "bit-vec", +] + +[[package]] +name = "bit-vec" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5e764a1d40d510daf35e07be9eb06e75770908c27d411ee6c92109c9840eaaf7" + +[[package]] +name = "bit_field" +version = "0.10.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e4b40c7323adcfc0a41c4b88143ed58346ff65a288fc144329c5c45e05d70c6" + +[[package]] +name = "bitflags" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" + +[[package]] +name = "bitflags" +version = "2.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "812e12b5285cc515a9c72a5c1d3b6d46a19dac5acfef5265968c166106e31dd3" +dependencies = [ + "bytemuck", + "serde_core", +] + +[[package]] +name = "bitstream-io" +version = "2.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6099cdc01846bc367c4e7dd630dc5966dccf36b652fae7a74e17b640411a91b2" + +[[package]] +name = "blake3" +version = "1.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3888aaa89e4b2a40fca9848e400f6a658a5a3978de7be858e209cafa8be9a4a0" +dependencies = [ + "arrayref", + "arrayvec", + "cc", + "cfg-if 1.0.4", + "constant_time_eq 0.3.1", +] + +[[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 = "block2" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2c132eebf10f5cad5289222520a4a058514204aed6d791f1cf4fe8088b82d15f" +dependencies = [ + "objc2 0.5.2", +] + +[[package]] +name = "block2" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cdeb9d870516001442e364c5220d3574d2da8dc765554b4a617230d33fa58ef5" +dependencies = [ + "objc2 0.6.3", +] + +[[package]] +name = "blocking" +version = "1.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e83f8d02be6967315521be875afa792a316e28d57b5a2d401897e2a7921b7f21" +dependencies = [ + "async-channel", + "async-task", + "futures-io", + "futures-lite", + "piper", +] + +[[package]] +name = "bstr" +version = "1.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "63044e1ae8e69f3b5a92c736ca6269b8d12fa7efe39bf34ddb06d102cf0e2cab" +dependencies = [ + "memchr", + "regex-automata", + "serde", +] + +[[package]] +name = "built" +version = "0.7.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56ed6191a7e78c36abdb16ab65341eefd73d64d303fffccdbb00d51e4205967b" + +[[package]] +name = "bumpalo" +version = "3.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "46c5e41b57b8bba42a04676d81cb89e9ee8e859a1a66f80a5a72e1cb76b34d43" [[package]] name = "burn" -version = "0.19.0" +version = "0.19.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ddecb408e100eedc1175cf0fd8092507dcea92ef5c22e1e25be85af7fed4cd7f" +checksum = "0291ea5c68786545e239a02f63331cfe39da7485164ae05197d5be6f148d0557" dependencies = [ "burn-autodiff", "burn-candle", @@ -418,9 +1748,9 @@ dependencies = [ [[package]] name = "burn-autodiff" -version = "0.19.0" +version = "0.19.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a76610cf4fd32a9dd35b62989feb40a137a807f6ebfb015166a0b785b55657ff" +checksum = "917423a74bf4d39f17a6799089869648e3d2b6ac89d93901aab4aeb9a7f82138" dependencies = [ "burn-common", "burn-tensor", @@ -429,14 +1759,14 @@ dependencies = [ "log", "num-traits", "portable-atomic", - "spin", + "spin 0.10.0", ] [[package]] name = "burn-candle" -version = "0.19.0" +version = "0.19.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "336126c4874dac8458f65fe743958397833e08a50b702740c042cad6ead8343b" +checksum = "2891811d41ae30b5f1f660e7615b757b2cb4128af5e311b213656de3875e4acb" dependencies = [ "burn-common", "burn-tensor", @@ -447,9 +1777,9 @@ dependencies = [ [[package]] name = "burn-collective" -version = "0.19.0" +version = "0.19.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17e9ece52b1a09b9a813b6b43363ec943b404af2797c3c3c1fc2eef2b9ba2aba" +checksum = "78abb99dcf39d0eeca7caf4606afba32924036ed7c387342a0bb855e936ba93c" dependencies = [ "burn-common", "burn-communication", @@ -465,9 +1795,9 @@ dependencies = [ [[package]] name = "burn-common" -version = "0.19.0" +version = "0.19.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "226fe90c2a4a182dd6e58630ec836772efb8fb263c173bd4cda6f76a08924ac7" +checksum = "5eb445304e4f91f8633d23c9a5258cd93639d13ce2ee47d4821fd519b683bf02" dependencies = [ "cubecl-common", "rayon", @@ -476,9 +1806,9 @@ dependencies = [ [[package]] name = "burn-communication" -version = "0.19.0" +version = "0.19.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89193f9a64b9899cade766df4f6b496d087d92e37376b62f161c72e586704284" +checksum = "675c33a2bd0b3861dc672d5f1c9b8469ce1fbb8cbd191b247767fdd2a76f08bf" dependencies = [ "axum", "burn-common", @@ -500,9 +1830,9 @@ dependencies = [ [[package]] name = "burn-core" -version = "0.19.0" +version = "0.19.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9621a37f59cdfa4492398f84925acdb0a9fb10d515d4e6809b62353e27e21f5d" +checksum = "20c93e754864080a8c27b9a47e3b6f7d79013cf82c9ce00ed57c9ba51a3e34c5" dependencies = [ "ahash", "bincode", @@ -524,16 +1854,16 @@ dependencies = [ "rmp-serde", "serde", "serde_json", - "spin", + "spin 0.10.0", "thiserror 2.0.17", "uuid", ] [[package]] name = "burn-cpu" -version = "0.19.0" +version = "0.19.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0a8ca74168b23e7dd40d790a213c0e7bd0e9e0fb1f83243888e9f87ab16d988" +checksum = "c4807930d243f1aa9dde99db372af56ac532cc6635fd3187156aee375fbadc07" dependencies = [ "burn-cubecl", "burn-fusion", @@ -547,9 +1877,9 @@ dependencies = [ [[package]] name = "burn-cubecl" -version = "0.19.0" +version = "0.19.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6089a87d4646d62b56b527f09120ec11fdd699cce773c93d029ef3f7751911e" +checksum = "0dd16308b7b0291c77f2d7acf428bc8254ec3db88a430a26cf3d3b0b63ae2d46" dependencies = [ "burn-common", "burn-cubecl-fusion", @@ -567,15 +1897,15 @@ dependencies = [ "num-traits", "rand 0.9.2", "serde", - "spin", + "spin 0.10.0", "text_placeholder", ] [[package]] name = "burn-cubecl-fusion" -version = "0.19.0" +version = "0.19.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50398855bd40bfa74e10667c312fe7422986cfc230e854d4512fb709a28f4a81" +checksum = "cc21cf88201dfbf242cadb638a0cc924010727fc37d6a719f7e10548b339c63a" dependencies = [ "burn-common", "burn-fusion", @@ -590,9 +1920,9 @@ dependencies = [ [[package]] name = "burn-cuda" -version = "0.19.0" +version = "0.19.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc7adaf3f97a129c2394eb3170040410ada7b58d9f1aa28f5ec6cd6deb6f37f1" +checksum = "1e104dcf07eac70c7b5864b51d792df3360b11b00febb60543b4283bb414bb61" dependencies = [ "burn-cubecl", "burn-fusion", @@ -606,9 +1936,9 @@ dependencies = [ [[package]] name = "burn-dataset" -version = "0.19.0" +version = "0.19.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6cda16435acac1c6ea9c3f9bed5a4210a4cebbdb14abc30a1aeeff45460e3b6e" +checksum = "534d4398fd6aaec32f8caeb3f20ddffcd8a059bdefc01cc2794b91b4e984e8ea" dependencies = [ "csv", "derive-new", @@ -631,21 +1961,21 @@ dependencies = [ [[package]] name = "burn-derive" -version = "0.19.0" +version = "0.19.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "16277c15ea0eeeab321e8f7251be786483d6e7755e579ab39d7dd15043f7c3e1" +checksum = "3bcf49261de086b8206de6c8962d2adf23feb476119a18e384f5b2c9af07c0cf" dependencies = [ "derive-new", "proc-macro2", "quote", - "syn 2.0.108", + "syn 2.0.109", ] [[package]] name = "burn-fusion" -version = "0.19.0" +version = "0.19.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b706d24d5dba3517ad0239e7591cd41c79dd5331a828ad736988b7735aa3e94a" +checksum = "662bf2679c04be34a0c3f1b11f77f6ff49456af1620d1eca311bc2562bbb56c9" dependencies = [ "burn-common", "burn-ir", @@ -655,14 +1985,14 @@ dependencies = [ "hashbrown 0.15.5", "log", "serde", - "spin", + "spin 0.10.0", ] [[package]] name = "burn-import" -version = "0.19.0" +version = "0.19.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "86f8cdde63a792b0205abeaf4a73709d76562fe28fc72146bda8e83b3a5f0a08" +checksum = "240eb2026f4bf9de4707449f123eac12adc4246ae07c849b1f73e5ce5790cc8a" dependencies = [ "burn", "burn-ndarray", @@ -678,7 +2008,7 @@ dependencies = [ "rust-format", "serde", "serde_json", - "syn 2.0.108", + "syn 2.0.109", "thiserror 2.0.17", "tracing-core", "tracing-subscriber", @@ -687,9 +2017,9 @@ dependencies = [ [[package]] name = "burn-ir" -version = "0.19.0" +version = "0.19.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "69150047c338878c0fc1a4d8e26c399d1e2d9c97c4f87eecc4130dd03c2472a1" +checksum = "9161239d5691c4ab6f470f2c65aaec5c0a7c1f0b0da390700bcd59f5a77d1d7b" dependencies = [ "burn-tensor", "hashbrown 0.15.5", @@ -699,9 +2029,9 @@ dependencies = [ [[package]] name = "burn-ndarray" -version = "0.19.0" +version = "0.19.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed9b60c14a706bf2ddc9e1a49e9eb48eb1828b11c719785de676ee7372603de6" +checksum = "b78bcf4a3508043342f918e796dc79108b5f3252398403eb73952847e7683374" dependencies = [ "atomic_float", "burn-autodiff", @@ -721,14 +2051,14 @@ dependencies = [ "portable-atomic-util", "rand 0.9.2", "seq-macro", - "spin", + "spin 0.10.0", ] [[package]] name = "burn-nn" -version = "0.19.0" +version = "0.19.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2b73072f9c77798f641a7f66dc6fa3e1092021cf39322e8ea68ff7f572c17ae" +checksum = "dc7829c87c4dd6c7929b50fd981e7e8d1b77414323da30ce2067a3e8b7ea422b" dependencies = [ "burn-core", "num-traits", @@ -736,9 +2066,9 @@ dependencies = [ [[package]] name = "burn-optim" -version = "0.19.0" +version = "0.19.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d0f89c10e95d5d4691e5bba54d510e7148687cda9b2a2394eef29683a981cbdd" +checksum = "31758c02e50247f12457fca1905ed8684ac1b1c5292e10cbbfffb9fa0048d4bd" dependencies = [ "burn-core", "derive-new", @@ -750,9 +2080,9 @@ dependencies = [ [[package]] name = "burn-remote" -version = "0.19.0" +version = "0.19.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6bcb86e558e06c11d8a06619dc6c68a9b872d7e623ab521b2e9e38e42173407a" +checksum = "dcb8e7c0d5466776f884b951ba94eac61ea0c340e7ed2b547a790e303f360c0c" dependencies = [ "async-channel", "axum", @@ -777,9 +2107,9 @@ dependencies = [ [[package]] name = "burn-rocm" -version = "0.19.0" +version = "0.19.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f08f8fea5ef76b67731c79529d9346f8623091832789dcc9e47aa85b50fe9d5f" +checksum = "5e1ceb87b6e7349b42d7995477c9a69d0e6c458c64eafa10af3b8b9070f260aa" dependencies = [ "burn-cubecl", "burn-fusion", @@ -793,23 +2123,23 @@ dependencies = [ [[package]] name = "burn-router" -version = "0.19.0" +version = "0.19.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9342581c5ca083db421a1c51d2c4c4b3326f5d86dae3d21a81420ac564be4057" +checksum = "45f40403c500b5df380bee47aa0f23032350bdfde5402812d6fcec4d6ff6fbad" dependencies = [ "burn-common", "burn-ir", "burn-tensor", "hashbrown 0.15.5", "log", - "spin", + "spin 0.10.0", ] [[package]] name = "burn-store" -version = "0.19.0" +version = "0.19.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c742ebf6d46a092c7324237f6f89a9cff8502c8c48db3961b435e6ee00bc316d" +checksum = "0a2a163486242fcb0c6e2cb89c5a803ab8588673652bb46ecd7af6378d06152f" dependencies = [ "burn-core", "burn-nn", @@ -827,9 +2157,9 @@ dependencies = [ [[package]] name = "burn-tch" -version = "0.19.0" +version = "0.19.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4eff2dc23cae54b6b3317931c5d454315a465e03f2faf9478c49a34514a286c4" +checksum = "ddf3bc363952fcb0d3d92daec70e04111d94beb5c48aded06ee6719d0b22f8a8" dependencies = [ "burn-common", "burn-tensor", @@ -843,9 +2173,9 @@ dependencies = [ [[package]] name = "burn-tensor" -version = "0.19.0" +version = "0.19.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48ff77a13d211fbf7a861e07eefc93bd1fb07a84da34e913c6e13ec1271208cc" +checksum = "df8861f7c21d3b07a2b19d028f6eb8903990949708b2ec825559b5200786877c" dependencies = [ "burn-common", "bytemuck", @@ -864,9 +2194,9 @@ dependencies = [ [[package]] name = "burn-train" -version = "0.19.0" +version = "0.19.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c35107c50d97b73f2fc96d9c1beaab732e0f27bf5f9b847b8e3f6619ee85873" +checksum = "b0f1553197d50668823a4bafc187c62439df49b218973f0ca79e034b57ce38d6" dependencies = [ "async-channel", "burn-core", @@ -887,9 +2217,9 @@ dependencies = [ [[package]] name = "burn-wgpu" -version = "0.19.0" +version = "0.19.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f2361ddac1bdc98e4f10dd8f62ded836537c316ca78ca4f41577ced0de4f21f" +checksum = "c17aeaa2eadaa4831a64672b99f62ffcdf4874fe4757080633d8a6c4452e2b38" dependencies = [ "burn-cubecl", "burn-fusion", @@ -904,6 +2234,7 @@ dependencies = [ "burn", "burn-import", "burn-store", + "burn_dino", "clap", "console_error_panic_hook", "criterion", @@ -919,6 +2250,19 @@ dependencies = [ "wgpu", ] +[[package]] +name = "burn_dino" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96141bff70c0b3bb6ab51ab8e9b01fce0a61332115f361fb42212e830fa2dcd8" +dependencies = [ + "burn", + "console_error_panic_hook", + "safetensors 0.6.2", + "wasm-bindgen", + "web-sys", +] + [[package]] name = "bytemuck" version = "1.24.0" @@ -936,7 +2280,7 @@ checksum = "f9abbd1bc6865053c427f7198e6af43bfdedc55ab791faed4fbd361d789575ff" dependencies = [ "proc-macro2", "quote", - "syn 2.0.108", + "syn 2.0.109", ] [[package]] @@ -992,6 +2336,20 @@ dependencies = [ "pkg-config", ] +[[package]] +name = "calloop" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b99da2f8558ca23c71f4fd15dc57c906239752dd27ff3c00a1d56b685b7cbfec" +dependencies = [ + "bitflags 2.10.0", + "log", + "polling", + "rustix 0.38.44", + "slab", + "thiserror 1.0.69", +] + [[package]] name = "candle-core" version = "0.9.1" @@ -1046,9 +2404,9 @@ dependencies = [ [[package]] name = "cc" -version = "1.2.44" +version = "1.2.45" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "37521ac7aabe3d13122dc382493e20c9416f299d2ccd5b3a5340a2570cdeb0f3" +checksum = "35900b6c8d709fb1d854671ae27aeaa9eec2f8b01b364e1619a40da3e6fe2afe" dependencies = [ "find-msvc-tools", "jobserver", @@ -1056,6 +2414,12 @@ dependencies = [ "shlex", ] +[[package]] +name = "cesu8" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d43a04d8753f35258c91f8ec639f792891f748a1edbd759cf1dcea3382ad83c" + [[package]] name = "cexpr" version = "0.6.0" @@ -1075,6 +2439,12 @@ dependencies = [ "target-lexicon", ] +[[package]] +name = "cfg-if" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822" + [[package]] name = "cfg-if" version = "1.0.4" @@ -1166,7 +2536,7 @@ dependencies = [ "heck", "proc-macro2", "quote", - "syn 2.0.108", + "syn 2.0.109", ] [[package]] @@ -1175,6 +2545,34 @@ version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a1d728cc89cf3aee9ff92b05e62b19ee65a02b5702cff7d5a377e32c6ae29d8d" +[[package]] +name = "cocoa" +version = "0.20.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c49e86fc36d5704151f5996b7b3795385f50ce09e3be0f47a0cfde869681cf8" +dependencies = [ + "bitflags 1.3.2", + "block", + "core-foundation 0.7.0", + "core-graphics 0.19.2", + "foreign-types 0.3.2", + "libc", + "objc", +] + +[[package]] +name = "cocoa-foundation" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "81411967c50ee9a1fc11365f8c585f863a22a9697c89239c452292c40ba79b0d" +dependencies = [ + "bitflags 2.10.0", + "block", + "core-foundation 0.10.1", + "core-graphics-types 0.2.0", + "objc", +] + [[package]] name = "codespan-reporting" version = "0.12.0" @@ -1207,6 +2605,16 @@ dependencies = [ "windows-sys 0.59.0", ] +[[package]] +name = "combine" +version = "4.6.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba5a308b75df32fe02788e748662718f03fde005016435c444eea572398219fd" +dependencies = [ + "bytes", + "memchr", +] + [[package]] name = "compact_str" version = "0.8.1" @@ -1214,7 +2622,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3b79c4069c6cad78e2e0cdfcbd26275770669fb39fd308a752dc110e83b9af32" dependencies = [ "castaway", - "cfg-if", + "cfg-if 1.0.4", "itoa", "rustversion", "ryu", @@ -1242,6 +2650,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4ca0197aee26d1ae37445ee532fefce43251d24cc7c166799f4d46817f1d3973" dependencies = [ "crossbeam-utils", + "portable-atomic", ] [[package]] @@ -1250,10 +2659,16 @@ version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a06aeb73f470f66dcdbf7223caeebb85984942f22f1adb2a088cf9668146bbbc" dependencies = [ - "cfg-if", + "cfg-if 1.0.4", "wasm-bindgen", ] +[[package]] +name = "const-fnv1a-hash" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32b13ea120a812beba79e34316b3942a857c86ec1593cb34f27bb28272ce2cca" + [[package]] name = "const-random" version = "0.1.18" @@ -1274,6 +2689,21 @@ dependencies = [ "tiny-keccak", ] +[[package]] +name = "const_panic" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e262cdaac42494e3ae34c43969f9cdeb7da178bdb4b66fa6a1ea2edb4c8ae652" +dependencies = [ + "typewit", +] + +[[package]] +name = "const_soft_float" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87ca1caa64ef4ed453e68bb3db612e51cf1b2f5b871337f0fcab1c8f87cc3dff" + [[package]] name = "constant_time_eq" version = "0.1.5" @@ -1286,6 +2716,15 @@ version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7c74b8349d32d297c9134b8c88677813a227df8f779daa29bfc29c183fe3dca6" +[[package]] +name = "constgebra" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e1aaf9b65849a68662ac6c0810c8893a765c960b907dd7cfab9c4a50bf764fbc" +dependencies = [ + "const_soft_float", +] + [[package]] name = "convert_case" version = "0.8.0" @@ -1295,22 +2734,84 @@ dependencies = [ "unicode-segmentation", ] +[[package]] +name = "core-foundation" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57d24c7a13c43e870e37c1556b74555437870a04514f7685f5b354e090567171" +dependencies = [ + "core-foundation-sys 0.7.0", + "libc", +] + +[[package]] +name = "core-foundation" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f" +dependencies = [ + "core-foundation-sys 0.8.7", + "libc", +] + [[package]] name = "core-foundation" version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b2a6cd9ae233e7f62ba4e9353e81a88df7fc8a5987b8d445b4d90c879bd156f6" dependencies = [ - "core-foundation-sys", + "core-foundation-sys 0.8.7", "libc", ] +[[package]] +name = "core-foundation-sys" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b3a71ab494c0b5b860bdc8407ae08978052417070c2ced38573a9157ad75b8ac" + [[package]] name = "core-foundation-sys" version = "0.8.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" +[[package]] +name = "core-graphics" +version = "0.19.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b3889374e6ea6ab25dba90bb5d96202f61108058361f6dc72e8b03e6f8bbe923" +dependencies = [ + "bitflags 1.3.2", + "core-foundation 0.7.0", + "foreign-types 0.3.2", + "libc", +] + +[[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 0.9.4", + "core-graphics-types 0.1.3", + "foreign-types 0.5.0", + "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 0.9.4", + "libc", +] + [[package]] name = "core-graphics-types" version = "0.2.0" @@ -1318,8 +2819,56 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3d44a101f213f6c4cdc1853d4b78aef6db6bdfa3468798cc1d9912f4735013eb" dependencies = [ "bitflags 2.10.0", - "core-foundation", + "core-foundation 0.10.1", + "libc", +] + +[[package]] +name = "core-media-sys" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "273bf3fc5bf51fd06a7766a84788c1540b6527130a0bce39e00567d6ab9f31f1" +dependencies = [ + "cfg-if 0.1.10", + "core-foundation-sys 0.7.0", + "libc", +] + +[[package]] +name = "core-video-sys" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34ecad23610ad9757664d644e369246edde1803fcb43ed72876565098a5d3828" +dependencies = [ + "cfg-if 0.1.10", + "core-foundation-sys 0.7.0", + "core-graphics 0.19.2", "libc", + "metal 0.18.0", + "objc", +] + +[[package]] +name = "cosmic-text" +version = "0.14.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da46a9d5a8905cc538a4a5bceb6a4510de7a51049c5588c0114efce102bcbbe8" +dependencies = [ + "bitflags 2.10.0", + "fontdb", + "log", + "rangemap", + "rustc-hash 1.1.0", + "rustybuzz", + "self_cell", + "smol_str", + "swash", + "sys-locale", + "ttf-parser 0.21.1", + "unicode-bidi", + "unicode-linebreak", + "unicode-script", + "unicode-segmentation", ] [[package]] @@ -1352,7 +2901,7 @@ version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9481c1c90cbf2ac953f07c8d4a58aa3945c425b7185c9154d67a65e4230da511" dependencies = [ - "cfg-if", + "cfg-if 1.0.4", ] [[package]] @@ -1422,6 +2971,15 @@ dependencies = [ "crossbeam-utils", ] +[[package]] +name = "crossbeam-queue" +version = "0.3.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0f58bbc28f91df819d0aa2a2c00cd19754769c2fad90579b3592b1c9ba7a3115" +dependencies = [ + "crossbeam-utils", +] + [[package]] name = "crossbeam-utils" version = "0.8.21" @@ -1490,11 +3048,22 @@ dependencies = [ "memchr", ] +[[package]] +name = "ctrlc" +version = "3.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73736a89c4aff73035ba2ed2e565061954da00d4970fc9ac25dcc85a2a20d790" +dependencies = [ + "dispatch2", + "nix", + "windows-sys 0.61.2", +] + [[package]] name = "cubecl" -version = "0.8.0" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a3f2f345e729b90e342089acfbecb2818d170ff7ecccb2eba441903283f583fe" +checksum = "b8b7c74ecaca9356c9ae79d0ebf1db04f02bd98be09eea61f51d73373dffe758" dependencies = [ "cubecl-convolution", "cubecl-core", @@ -1512,12 +3081,12 @@ dependencies = [ [[package]] name = "cubecl-common" -version = "0.8.0" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d733d3437e87635378a16dd6d26062b7f184e5a4dd3437486ed953514bf1efd" +checksum = "4556981155bffc057a8effcd4549b52b51df3e9edec43af6ccae2dd03fc8fbff" dependencies = [ "bytemuck", - "cfg-if", + "cfg-if 1.0.4", "cfg_aliases", "derive-new", "derive_more", @@ -1539,16 +3108,16 @@ dependencies = [ "serde", "serde_bytes", "serde_json", - "spin", + "spin 0.10.0", "wasm-bindgen-futures", "web-time", ] [[package]] name = "cubecl-convolution" -version = "0.8.0" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a6a77dce74132f4c44c7557a01375beb92a25eed242c9082563cb9b6172832b5" +checksum = "27c624ec400b7203673bf2db86d7ff30d1384839d497d2dd029c19b1b7371e0d" dependencies = [ "bytemuck", "cubecl-common", @@ -1565,9 +3134,9 @@ dependencies = [ [[package]] name = "cubecl-core" -version = "0.8.0" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "850dbdac9cedfa367248e4eae7f26c2011c1ec4b6f4e1d88028a1f947d0d73c2" +checksum = "0ffc10af538ee74535cda260e581f5a177c243803dd30b698934a515f0114b55" dependencies = [ "bitflags 2.10.0", "bytemuck", @@ -1590,9 +3159,9 @@ dependencies = [ [[package]] name = "cubecl-cpp" -version = "0.8.0" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8732743cd1167eca4cf4045d3e9f9e219520d92dae17d8aa9bd18d6c2eb49663" +checksum = "d630e4d10cdd3af268ac753914ca79b48f01d1e36c5b5039970a817acc925fea" dependencies = [ "bytemuck", "cubecl-common", @@ -1607,9 +3176,9 @@ dependencies = [ [[package]] name = "cubecl-cpu" -version = "0.8.0" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "baaa77f85342f7ccf6d33b5707e789a1beab339b00145b5868f7d590c319f4a4" +checksum = "ac1693555277d74152afb61a23e30d1f17d72cebd317a648faf50a8e69380f08" dependencies = [ "bytemuck", "cubecl-common", @@ -1631,9 +3200,9 @@ dependencies = [ [[package]] name = "cubecl-cuda" -version = "0.8.0" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "839ba85c69d3158b8d11f54e887f794507067be7f5be8547ac53b833f4a58784" +checksum = "67215fcd552a9e8bc68494a71cf2979f2e2bbcbda60f0695f56f86705b89ed5f" dependencies = [ "bytemuck", "cubecl-common", @@ -1649,9 +3218,9 @@ dependencies = [ [[package]] name = "cubecl-hip" -version = "0.8.0" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "73fa7d3f53a8a07656a1caa6414cf94700e25d876a2ff33dff9dea3190736b5b" +checksum = "d5e2e6a257f702fb2eb6f24e640e228a94695e4a4c73a4c549578cbb02ad4ec5" dependencies = [ "bytemuck", "cubecl-common", @@ -1679,9 +3248,9 @@ dependencies = [ [[package]] name = "cubecl-ir" -version = "0.8.0" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d8c468ca6c904ad97ed562fb61f77f3cdc929bc322f54b7c39e33cc49b20646" +checksum = "bf5d3aa7857e6aee1622aef128d6ad8d9289ed57362b4e65d10cc182aafc585f" dependencies = [ "cubecl-common", "cubecl-macros-internal", @@ -1699,9 +3268,9 @@ dependencies = [ [[package]] name = "cubecl-macros" -version = "0.8.0" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d0ac86afe6b0a48569cc839605cf62d1d46e482f3476a87130d5166dafcc5c0" +checksum = "5200fb619be424749901e3c6e8e66ae71146c8f83636a74f171bd980cba379d7" dependencies = [ "cubecl-common", "darling 0.21.3", @@ -1710,26 +3279,26 @@ dependencies = [ "prettyplease 0.2.37", "proc-macro2", "quote", - "syn 2.0.108", + "syn 2.0.109", ] [[package]] name = "cubecl-macros-internal" -version = "0.8.0" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7287548e87dcb8226852c3fbd503b2c3b9a7e9f311b0ea14b7e8123a41012824" +checksum = "8a1b673f303396fba18df83368aa4eced474584f1bca34852dccc42bd4ff050c" dependencies = [ "darling 0.21.3", "proc-macro2", "quote", - "syn 2.0.108", + "syn 2.0.109", ] [[package]] name = "cubecl-matmul" -version = "0.8.0" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bdcca3ffa29b2f1abffab6b27046b2f86a9ebedfed597c405e4179984a004f8d" +checksum = "d1cf0a00609a249d5357c27cafea477f35218579db2ab00582d8d5800be4a5a3" dependencies = [ "bytemuck", "cubecl-common", @@ -1745,9 +3314,9 @@ dependencies = [ [[package]] name = "cubecl-opt" -version = "0.8.0" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03c32810f85959e6c76dd336bf85d5a85b2752edb27310f0993d5b6b2243a308" +checksum = "870ca4b52f9eebd358c9b360b89cdc9f82bde05682db63f0e90c666b3c85a04d" dependencies = [ "cubecl-common", "cubecl-core", @@ -1763,9 +3332,9 @@ dependencies = [ [[package]] name = "cubecl-quant" -version = "0.8.0" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "880705a7c0254b619ec30465db8dc8943c3ddba5ea81d644d21e95084f68a4f4" +checksum = "9be3e1202c219078d85dbad7f30d1195fe4f9d42cbfad2c94ab0ea1a6d9f01f6" dependencies = [ "cubecl-common", "cubecl-core", @@ -1777,9 +3346,9 @@ dependencies = [ [[package]] name = "cubecl-random" -version = "0.8.0" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7632ca58b1080ac883dd9313f7374757476b3e9c741a32353c71ec5765fa7f9b" +checksum = "9a293a05caa68663675823bab66205bca094a21a2c0f6686ad9f20b392516179" dependencies = [ "cubecl-common", "cubecl-core", @@ -1793,9 +3362,9 @@ dependencies = [ [[package]] name = "cubecl-reduce" -version = "0.8.0" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19b759b19145c2e3a9d270200745c0fdbb9129c269f33f0b2ceab5e29f794e27" +checksum = "53306ace81f6262f7ae794370f47e6b5019842b27e8800240e5b039386b3ac3a" dependencies = [ "cubecl-core", "cubecl-runtime", @@ -1809,26 +3378,26 @@ dependencies = [ [[package]] name = "cubecl-runtime" -version = "0.8.0" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b04e944b2097b7c8931498a57615b290cdda755197d7a24d272c306af6e1edd9" +checksum = "91b823bb5899a6fa8809bf7aa36f93f72ced6de58ab9d6edea2c730b235eeda3" dependencies = [ "async-channel", "bytemuck", - "cfg-if", + "cfg-if 1.0.4", "cfg_aliases", "cubecl-common", "cubecl-ir", "derive-new", "dirs", "enumset", - "foldhash", + "foldhash 0.1.5", "hashbrown 0.15.5", "log", "md5", "serde", "serde_json", - "spin", + "spin 0.10.0", "thiserror 2.0.17", "toml 0.9.8", "variadics_please", @@ -1837,30 +3406,30 @@ dependencies = [ [[package]] name = "cubecl-std" -version = "0.8.0" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e83ca684200a5c77231460ec613a654ccb7cd46a9ec22d13cc94bc6c78d1a102" +checksum = "24536998f9fff84f9a1dd2a90f981d5aa4d15eb35cddec5021c4fcf977d2e75e" dependencies = [ "cubecl-common", "cubecl-core", "cubecl-runtime", - "foldhash", + "foldhash 0.1.5", "half", "paste", "serde", - "spin", + "spin 0.10.0", "variadics_please", ] [[package]] name = "cubecl-wgpu" -version = "0.8.0" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08ec904606258323e0cf56e05935989121cf40f344970023e783682ed757439c" +checksum = "d59a7d737259a784247595e2f0cc5a97d3e50f45cdaefbd4cc7d7fd2126f7a58" dependencies = [ "async-channel", "bytemuck", - "cfg-if", + "cfg-if 1.0.4", "cfg_aliases", "cubecl-common", "cubecl-core", @@ -1876,12 +3445,19 @@ dependencies = [ [[package]] name = "cudarc" -version = "0.17.3" -source = "git+https://github.com/coreylowman/cudarc?tag=v0.17.3#fdf313cc10cf5504953ac9fe6a5dc78dc6ec4152" +version = "0.17.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff0da1a70ec91e66731c1752deb9fda3044f1154fe4ceb5873e3f96ed34cafa3" dependencies = [ "libloading", ] +[[package]] +name = "cursor-icon" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f27ae1dd37df86211c42e150270f82743308803d90a6f6e6651cd730d5e1732f" + [[package]] name = "darling" version = "0.20.11" @@ -1913,7 +3489,7 @@ dependencies = [ "proc-macro2", "quote", "strsim", - "syn 2.0.108", + "syn 2.0.109", ] [[package]] @@ -1927,7 +3503,7 @@ dependencies = [ "proc-macro2", "quote", "strsim", - "syn 2.0.108", + "syn 2.0.109", ] [[package]] @@ -1938,7 +3514,7 @@ checksum = "fc34b93ccb385b40dc71c6fceac4b2ad23662c7eeb248cf10d529b7e055b6ead" dependencies = [ "darling_core 0.20.11", "quote", - "syn 2.0.108", + "syn 2.0.109", ] [[package]] @@ -1949,7 +3525,7 @@ checksum = "d38308df82d1080de0afee5d069fa14b0326a88c14f15c5ccda35b4a6c414c81" dependencies = [ "darling_core 0.21.3", "quote", - "syn 2.0.108", + "syn 2.0.109", ] [[package]] @@ -1958,7 +3534,7 @@ version = "6.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5041cc499144891f3790297212f32a74fb938e5136a14943f338ef9e0ae276cf" dependencies = [ - "cfg-if", + "cfg-if 1.0.4", "crossbeam-utils", "hashbrown 0.14.5", "lock_api", @@ -1995,7 +3571,7 @@ checksum = "2cdc8d50f426189eef89dac62fabfa0abb27d5cc008f25bf4156a0203325becc" dependencies = [ "proc-macro2", "quote", - "syn 2.0.108", + "syn 2.0.109", ] [[package]] @@ -2006,7 +3582,7 @@ checksum = "1e567bd82dcff979e4b03460c307b3cdc9e96fde3d73bed1496d2bc75d9dd62a" dependencies = [ "proc-macro2", "quote", - "syn 2.0.108", + "syn 2.0.109", ] [[package]] @@ -2026,7 +3602,7 @@ checksum = "bda628edc44c4bb645fbe0f758797143e4e07926f7ebf4e9bdfbd3d2ce621df3" dependencies = [ "proc-macro2", "quote", - "syn 2.0.108", + "syn 2.0.109", "unicode-xid", ] @@ -2074,15 +3650,48 @@ dependencies = [ "windows-sys 0.61.2", ] +[[package]] +name = "dispatch" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd0c93bb4b0c6d9b77f4435b0ae98c24d17f1c45b2ff844c6151a07256ca923b" + +[[package]] +name = "dispatch2" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "89a09f22a6c6069a18470eb92d2298acf25463f14256d24778e1230d789a2aec" +dependencies = [ + "bitflags 2.10.0", + "block2 0.6.2", + "libc", + "objc2 0.6.3", +] + [[package]] name = "displaydoc" version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" +checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.109", +] + +[[package]] +name = "disqualified" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c9c272297e804878a2a4b707cfcfc6d2328b5bb936944613b4fdf2b9269afdfd" + +[[package]] +name = "dlib" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "330c60081dcc4c72131f8eb70510f1ac07223e5d4163db481a04a0befcffa412" dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.108", + "libloading", ] [[package]] @@ -2094,6 +3703,24 @@ dependencies = [ "litrs", ] +[[package]] +name = "downcast-rs" +version = "2.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "117240f60069e65410b3ae1bb213295bd828f707b5bec6596a1afc8793ce0cbc" + +[[package]] +name = "dpi" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d8b14ccef22fc6f5a8f4d7d768562a182c04ce9a3b3157b91390b52ddfdf1a76" + +[[package]] +name = "dunce" +version = "1.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "92773504d58c093f6de2459af4af33faa518c13451eb8f2b5698ed3d36e7c813" + [[package]] name = "dyn-stack" version = "0.10.0" @@ -2138,7 +3765,7 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f820157f198ada183ad62e0a66f554c610cdcd1a9f27d4b316358103ced7a1f8" dependencies = [ - "cfg-if", + "cfg-if 1.0.4", "critical-section", "document-features", "embassy-time-driver", @@ -2182,6 +3809,38 @@ dependencies = [ "embedded-hal 1.0.0", ] +[[package]] +name = "encase" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "02ba239319a4f60905966390f5e52799d868103a533bb7e27822792332504ddd" +dependencies = [ + "const_panic", + "encase_derive", + "glam", + "thiserror 2.0.17", +] + +[[package]] +name = "encase_derive" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5223d6c647f09870553224f6e37261fe5567bc5a4f4cf13ed337476e79990f2f" +dependencies = [ + "encase_derive_impl", +] + +[[package]] +name = "encase_derive_impl" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1796db3d892515842ca2dfb11124c4bb4a9e58d9f2c5c1072e5bca1b2334507b" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.109", +] + [[package]] name = "entities" version = "1.0.1" @@ -2197,7 +3856,7 @@ dependencies = [ "heck", "proc-macro2", "quote", - "syn 2.0.108", + "syn 2.0.109", ] [[package]] @@ -2218,7 +3877,7 @@ dependencies = [ "darling 0.21.3", "proc-macro2", "quote", - "syn 2.0.108", + "syn 2.0.109", ] [[package]] @@ -2238,7 +3897,7 @@ checksum = "44f23cf4b44bfce11a86ace86f8a73ffdec849c9fd00a386a53d278bd9e81fb3" dependencies = [ "proc-macro2", "quote", - "syn 2.0.108", + "syn 2.0.109", ] [[package]] @@ -2247,6 +3906,17 @@ version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" +[[package]] +name = "erased-serde" +version = "0.4.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "89e8918065695684b2b0702da20382d5ae6065cf3327bc2d6436bd49a71ce9f3" +dependencies = [ + "serde", + "serde_core", + "typeid", +] + [[package]] name = "errno" version = "0.3.14" @@ -2257,6 +3927,15 @@ dependencies = [ "windows-sys 0.61.2", ] +[[package]] +name = "euclid" +version = "0.22.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ad9cdb4b747e485a12abb0e6566612956c7a1bafa3bdb8d682c5b6d403589e48" +dependencies = [ + "num-traits", +] + [[package]] name = "event-listener" version = "5.4.1" @@ -2328,7 +4007,7 @@ checksum = "a0aca10fb742cb43f9e7bb8467c91aa9bcb8e3ffbc6a6f7389bb93ffc920577d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.108", + "syn 2.0.109", ] [[package]] @@ -2346,7 +4025,7 @@ version = "0.2.26" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bc0505cd1b6fa6580283f6bdf70a73fcf4aba1184038c90902b92b3dd0df63ed" dependencies = [ - "cfg-if", + "cfg-if 1.0.4", "libc", "libredox", "windows-sys 0.60.2", @@ -2364,6 +4043,12 @@ version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80" +[[package]] +name = "fixedbitset" +version = "0.5.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d674e81391d1e1ab681a28d99df07927c6d4aa5b027d7da16ba32d1d21ecd99" + [[package]] name = "flate2" version = "1.1.5" @@ -2396,6 +4081,18 @@ dependencies = [ "half", ] +[[package]] +name = "flume" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da0e4dd2a88388a1f4ccc7c9ce104604dab68d9f408dc34cd45823d5a9069095" +dependencies = [ + "futures-core", + "futures-sink", + "nanorand", + "spin 0.9.8", +] + [[package]] name = "fnv" version = "1.0.7" @@ -2408,6 +4105,53 @@ version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2" +[[package]] +name = "foldhash" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77ce24cb58228fbb8aa041425bb1050850ac19177686ea6e0f41a70416f56fdb" + +[[package]] +name = "font-types" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "39a654f404bbcbd48ea58c617c2993ee91d1cb63727a37bf2323a4edeed1b8c5" +dependencies = [ + "bytemuck", +] + +[[package]] +name = "fontconfig-parser" +version = "0.5.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbc773e24e02d4ddd8395fd30dc147524273a83e54e0f312d986ea30de5f5646" +dependencies = [ + "roxmltree", +] + +[[package]] +name = "fontdb" +version = "0.16.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b0299020c3ef3f60f526a4f64ab4a3d4ce116b1acbf24cdd22da0068e5d81dc3" +dependencies = [ + "fontconfig-parser", + "log", + "memmap2", + "slotmap", + "tinyvec", + "ttf-parser 0.20.0", +] + +[[package]] +name = "foreign-types" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1" +dependencies = [ + "foreign-types-shared 0.1.1", +] + [[package]] name = "foreign-types" version = "0.5.0" @@ -2415,7 +4159,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d737d9aa519fb7b749cbc3b962edcf310a8dd1f4b67c91c4f83975dbdd17d965" dependencies = [ "foreign-types-macros", - "foreign-types-shared", + "foreign-types-shared 0.3.1", ] [[package]] @@ -2426,9 +4170,15 @@ checksum = "1a5c6c585bc94aaf2c7b51dd4c2ba22680844aba4c687be581871a6f518c5742" dependencies = [ "proc-macro2", "quote", - "syn 2.0.108", + "syn 2.0.109", ] +[[package]] +name = "foreign-types-shared" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" + [[package]] name = "foreign-types-shared" version = "0.3.1" @@ -2524,7 +4274,7 @@ checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" dependencies = [ "proc-macro2", "quote", - "syn 2.0.108", + "syn 2.0.109", ] [[package]] @@ -2810,13 +4560,23 @@ dependencies = [ "version_check", ] +[[package]] +name = "gethostname" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bd49230192a3797a9a4d6abe9b3eed6f7fa4c8a8a4947977c6f80025f92cbd8" +dependencies = [ + "rustix 1.1.2", + "windows-link 0.2.1", +] + [[package]] name = "getrandom" version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "335ff9f135e4384c8150d6f27c6daed433577f86b4750418338c01a1a2528592" dependencies = [ - "cfg-if", + "cfg-if 1.0.4", "js-sys", "libc", "wasi", @@ -2829,7 +4589,7 @@ version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "899def5c37c4fd7b2664648c28120ecec138e4d395b459e5ca34f9cce2dd77fd" dependencies = [ - "cfg-if", + "cfg-if 1.0.4", "js-sys", "libc", "r-efi", @@ -2937,6 +4697,18 @@ dependencies = [ "xml-rs", ] +[[package]] +name = "glam" +version = "0.30.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd47b05dddf0005d850e5644cae7f2b14ac3df487979dbfff3b56f20b1a6ae46" +dependencies = [ + "bytemuck", + "libm", + "rand 0.9.2", + "serde_core", +] + [[package]] name = "glob" version = "0.3.3" @@ -3015,6 +4787,22 @@ dependencies = [ "bitflags 2.10.0", ] +[[package]] +name = "grid" +version = "0.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "36119f3a540b086b4e436bb2b588cf98a68863470e0e880f4d0842f112a3183a" + +[[package]] +name = "guillotiere" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b62d5865c036cb1393e23c50693df631d3f5d7bcca4c04fe4cc0fd592e74a782" +dependencies = [ + "euclid", + "svg_fmt", +] + [[package]] name = "h2" version = "0.4.12" @@ -3041,7 +4829,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6ea2d84b969582b4b1864a92dc5d27cd2b77b622a8d79306834f1be5ba20d84b" dependencies = [ "bytemuck", - "cfg-if", + "cfg-if 1.0.4", "crunchy", "num-traits", "rand 0.9.2", @@ -3050,6 +4838,15 @@ dependencies = [ "zerocopy", ] +[[package]] +name = "hash32" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "47d60b12902ba28e2730cd37e95b8c9223af2808df9e902d4df49588d1470606" +dependencies = [ + "byteorder", +] + [[package]] name = "hashbrown" version = "0.13.2" @@ -3073,7 +4870,7 @@ checksum = "9229cfe53dfd69f0609a49f65461bd93001ea1ef889cd5529dd176593f5338a1" dependencies = [ "allocator-api2", "equivalent", - "foldhash", + "foldhash 0.1.5", "serde", ] @@ -3082,6 +4879,10 @@ name = "hashbrown" version = "0.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5419bdc4f6a9207fbeba6d11b604d481addf78ecd10c11ad51e76c2f6482748d" +dependencies = [ + "equivalent", + "serde", +] [[package]] name = "hashlink" @@ -3092,6 +4893,17 @@ dependencies = [ "hashbrown 0.15.5", ] +[[package]] +name = "heapless" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0bfb9eb618601c89945a70e254898da93b13be0388091d42117462b265bb3fad" +dependencies = [ + "hash32", + "portable-atomic", + "stable_deref_trait", +] + [[package]] name = "heck" version = "0.5.0" @@ -3104,6 +4916,17 @@ version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fc0fef456e4baa96da950455cd02c081ca953b141298e41db3fc7e36b1da849c" +[[package]] +name = "hexasphere" +version = "16.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29a164ceff4500f2a72b1d21beaa8aa8ad83aec2b641844c659b190cb3ea2e0b" +dependencies = [ + "constgebra", + "glam", + "tinyvec", +] + [[package]] name = "hexf-parse" version = "0.2.1" @@ -3424,7 +5247,7 @@ dependencies = [ "indoc", "proc-macro2", "quote", - "syn 2.0.108", + "syn 2.0.109", ] [[package]] @@ -3435,7 +5258,16 @@ checksum = "c34819042dc3d3971c46c2190835914dfbe0c3c13f61449b2997f4e9722dfa60" dependencies = [ "proc-macro2", "quote", - "syn 2.0.108", + "syn 2.0.109", +] + +[[package]] +name = "inventory" +version = "0.3.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bc61209c082fbeb19919bee74b176221b27223e27b65d781eb91af24eb1fb46e" +dependencies = [ + "rustversion", ] [[package]] @@ -3493,6 +5325,22 @@ version = "1.0.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c" +[[package]] +name = "jni" +version = "0.21.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a87aa2bb7d2af34197c04845522473242e1aa17c12f4935d5856491a7fb8c97" +dependencies = [ + "cesu8", + "cfg-if 1.0.4", + "combine", + "jni-sys", + "log", + "thiserror 1.0.69", + "walkdir", + "windows-sys 0.45.0", +] + [[package]] name = "jni-sys" version = "0.3.0" @@ -3536,12 +5384,27 @@ version = "3.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e2db585e1d738fc771bf08a151420d3ed193d9d895a36df7f6f8a9456b911ddc" +[[package]] +name = "ktx2" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff7f53bdf698e7aa7ec916411bbdc8078135da11b66db5182675b2227f6c0d07" +dependencies = [ + "bitflags 2.10.0", +] + [[package]] name = "lazy_static" version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" +[[package]] +name = "lazycell" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55" + [[package]] name = "lebe" version = "0.5.3" @@ -3576,7 +5439,7 @@ version = "0.8.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d7c4b02199fee7c5d21a5ae7d8cfa79a6ef5bb2fc834d6e9058e89c825efdc55" dependencies = [ - "cfg-if", + "cfg-if 1.0.4", "windows-link 0.2.1", ] @@ -3615,7 +5478,7 @@ checksum = "416f7e718bdb06000964960ffa43b4335ad4012ae8b99060261aa4a8088d5ccb" dependencies = [ "bitflags 2.10.0", "libc", - "redox_syscall", + "redox_syscall 0.5.18", ] [[package]] @@ -3736,7 +5599,7 @@ dependencies = [ "darling 0.20.11", "proc-macro2", "quote", - "syn 2.0.108", + "syn 2.0.109", ] [[package]] @@ -3748,6 +5611,15 @@ dependencies = [ "libc", ] +[[package]] +name = "matchers" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d1525a2a28c7f4fa0fc98bb91ae755d1e2d1505079e05539e35bc876b5d65ae9" +dependencies = [ + "regex-automata", +] + [[package]] name = "matchit" version = "0.8.4" @@ -3773,7 +5645,7 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8ea1f30cedd69f0a2954655f7188c6a834246d2bcf1e315e2ac40c4b24dc9519" dependencies = [ - "cfg-if", + "cfg-if 1.0.4", "rayon", ] @@ -3799,6 +5671,21 @@ dependencies = [ "stable_deref_trait", ] +[[package]] +name = "metal" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e198a0ee42bdbe9ef2c09d0b9426f3b2b47d90d93a4a9b0395c4cea605e92dc0" +dependencies = [ + "bitflags 1.3.2", + "block", + "cocoa", + "core-graphics 0.19.2", + "foreign-types 0.3.2", + "log", + "objc", +] + [[package]] name = "metal" version = "0.32.0" @@ -3807,8 +5694,8 @@ checksum = "00c15a6f673ff72ddcc22394663290f870fb224c1bfce55734a75c414150e605" dependencies = [ "bitflags 2.10.0", "block", - "core-graphics-types", - "foreign-types", + "core-graphics-types 0.2.0", + "foreign-types 0.5.0", "log", "objc", "paste", @@ -3865,29 +5752,91 @@ dependencies = [ ] [[package]] -name = "naga" -version = "26.0.0" +name = "mozjpeg" +version = "0.10.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b7891b80aaa86097d38d276eb98b3805d6280708c4e0a1e6f6aed9380c51fec9" +dependencies = [ + "arrayvec", + "bytemuck", + "libc", + "mozjpeg-sys", + "rgb", +] + +[[package]] +name = "mozjpeg-sys" +version = "2.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f0dc668bf9bf888c88e2fb1ab16a406d2c380f1d082b20d51dd540ab2aa70c1" +dependencies = [ + "cc", + "dunce", + "libc", + "nasm-rs", +] + +[[package]] +name = "naga" +version = "26.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "916cbc7cb27db60be930a4e2da243cf4bc39569195f22fd8ee419cd31d5b662c" +dependencies = [ + "arrayvec", + "bit-set", + "bitflags 2.10.0", + "cfg-if 1.0.4", + "cfg_aliases", + "codespan-reporting", + "half", + "hashbrown 0.15.5", + "hexf-parse", + "indexmap", + "libm", + "log", + "num-traits", + "once_cell", + "pp-rs", + "rustc-hash 1.1.0", + "spirv", + "thiserror 2.0.17", + "unicode-ident", +] + +[[package]] +name = "naga_oil" +version = "0.19.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b586d3cf5c9b7e13fe2af6e114406ff70773fd80881960378933b63e76f37dd" +dependencies = [ + "codespan-reporting", + "data-encoding", + "indexmap", + "naga", + "regex", + "rustc-hash 1.1.0", + "thiserror 2.0.17", + "tracing", + "unicode-ident", +] + +[[package]] +name = "nanorand" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a51313c5820b0b02bd422f4b44776fbf47961755c74ce64afc73bfad10226c3" +dependencies = [ + "getrandom 0.2.16", +] + +[[package]] +name = "nasm-rs" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "916cbc7cb27db60be930a4e2da243cf4bc39569195f22fd8ee419cd31d5b662c" +checksum = "34f676553b60ccbb76f41f9ae8f2428dac3f259ff8f1c2468a174778d06a1af9" dependencies = [ - "arrayvec", - "bit-set", - "bitflags 2.10.0", - "cfg-if", - "cfg_aliases", - "codespan-reporting", - "half", - "hashbrown 0.15.5", - "hexf-parse", - "indexmap", - "libm", + "jobserver", "log", - "num-traits", - "once_cell", - "rustc-hash 1.1.0", - "spirv", - "thiserror 2.0.17", - "unicode-ident", ] [[package]] @@ -3921,6 +5870,27 @@ dependencies = [ "rayon", ] +[[package]] +name = "ndk" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3f42e7bbe13d351b6bead8286a43aac9534b82bd3cc43e47037f012ebfd62d4" +dependencies = [ + "bitflags 2.10.0", + "jni-sys", + "log", + "ndk-sys", + "num_enum", + "raw-window-handle", + "thiserror 1.0.69", +] + +[[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.6.0+11769913" @@ -3936,12 +5906,91 @@ version = "1.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "650eef8c711430f1a879fdd01d4745a7deea475becfb90269c06775983bbf086" +[[package]] +name = "nix" +version = "0.30.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "74523f3a35e05aba87a1d978330aef40f67b0304ac79c1c00b294c9830543db6" +dependencies = [ + "bitflags 2.10.0", + "cfg-if 1.0.4", + "cfg_aliases", + "libc", +] + [[package]] name = "no-std-compat" version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "df270209a7f04d62459240d890ecb792714d5db12c92937823574a09930276b4" +[[package]] +name = "nokhwa" +version = "0.10.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c4cae50786bfa1214ed441f98addbea51ca1b9aaa9e4bf5369cda36654b3efaa" +dependencies = [ + "flume", + "image", + "nokhwa-bindings-linux", + "nokhwa-bindings-macos", + "nokhwa-bindings-windows", + "nokhwa-core", + "parking_lot", + "paste", + "thiserror 2.0.17", +] + +[[package]] +name = "nokhwa-bindings-linux" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4bd666aaa41d14357817bd9a981773a73c4d00b34d344cfc244e47ebd397b1ec" +dependencies = [ + "nokhwa-core", + "v4l", +] + +[[package]] +name = "nokhwa-bindings-macos" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "de78eb4a2d47a68f490899aa0516070d7a972f853ec2bb374ab53be0bd39b60f" +dependencies = [ + "block", + "cocoa-foundation", + "core-foundation 0.10.1", + "core-media-sys", + "core-video-sys", + "flume", + "nokhwa-core", + "objc", + "once_cell", +] + +[[package]] +name = "nokhwa-bindings-windows" +version = "0.4.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "899799275c93ef69bbe8cb888cf6f8249abe751cbc50be5299105022aec14a1c" +dependencies = [ + "nokhwa-core", + "once_cell", + "windows 0.62.2", +] + +[[package]] +name = "nokhwa-core" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "109975552bbd690894f613bce3d408222911e317197c72b2e8b9a1912dc261ae" +dependencies = [ + "bytes", + "image", + "mozjpeg", + "thiserror 2.0.17", +] + [[package]] name = "nom" version = "7.1.3" @@ -3961,6 +6010,12 @@ dependencies = [ "memchr", ] +[[package]] +name = "nonmax" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "610a5acd306ec67f907abe5567859a3c693fb9886eb1f012ab8f2a47bef3db51" + [[package]] name = "noop_proc_macro" version = "0.3.0" @@ -4031,142 +6086,374 @@ version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ed3955f1a9c7c0c15e092f9c887db08b1fc683305fdf6eb6684f22555355e202" dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.108", + "proc-macro2", + "quote", + "syn 2.0.109", +] + +[[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.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91df4bbde75afed763b708b7eee1e8e7651e02d97f6d5dd763e89367e957b23b" +dependencies = [ + "hermit-abi", + "libc", +] + +[[package]] +name = "num_enum" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1207a7e20ad57b847bbddc6776b968420d38292bbfe2089accff5e19e82454c" +dependencies = [ + "num_enum_derive", + "rustversion", +] + +[[package]] +name = "num_enum_derive" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff32365de1b6743cb203b710788263c44a03de03802daf96092f2da4fe6ba4d7" +dependencies = [ + "proc-macro-crate", + "proc-macro2", + "quote", + "syn 2.0.109", +] + +[[package]] +name = "num_threads" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c7398b9c8b70908f6371f47ed36737907c87c52af34c268fed0bf0ceb92ead9" +dependencies = [ + "libc", +] + +[[package]] +name = "nvml-wrapper" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d5c6c0ef9702176a570f06ad94f3198bc29c524c8b498f1b9346e1b1bdcbb3a" +dependencies = [ + "bitflags 2.10.0", + "libloading", + "nvml-wrapper-sys", + "static_assertions", + "thiserror 1.0.69", + "wrapcenum-derive", +] + +[[package]] +name = "nvml-wrapper-sys" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd23dbe2eb8d8335d2bce0299e0a07d6a63c089243d626ca75b770a962ff49e6" +dependencies = [ + "libloading", +] + +[[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-sys" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cdb91bdd390c7ce1a8607f35f3ca7151b65afc0ff5ff3b34fa350f7d7c7e4310" + +[[package]] +name = "objc2" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "46a785d4eeff09c14c487497c162e92766fbb3e4059a71840cecc03d9a50b804" +dependencies = [ + "objc-sys", + "objc2-encode", +] + +[[package]] +name = "objc2" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b7c2599ce0ec54857b29ce62166b0ed9b4f6f1a70ccc9a71165b6154caca8c05" +dependencies = [ + "objc2-encode", +] + +[[package]] +name = "objc2-app-kit" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e4e89ad9e3d7d297152b17d39ed92cd50ca8063a89a9fa569046d41568891eff" +dependencies = [ + "bitflags 2.10.0", + "block2 0.5.1", + "libc", + "objc2 0.5.2", + "objc2-core-data", + "objc2-core-image", + "objc2-foundation", + "objc2-quartz-core", +] + +[[package]] +name = "objc2-cloud-kit" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "74dd3b56391c7a0596a295029734d3c1c5e7e510a4cb30245f8221ccea96b009" +dependencies = [ + "bitflags 2.10.0", + "block2 0.5.1", + "objc2 0.5.2", + "objc2-core-location", + "objc2-foundation", +] + +[[package]] +name = "objc2-contacts" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a5ff520e9c33812fd374d8deecef01d4a840e7b41862d849513de77e44aa4889" +dependencies = [ + "block2 0.5.1", + "objc2 0.5.2", + "objc2-foundation", +] + +[[package]] +name = "objc2-core-data" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "617fbf49e071c178c0b24c080767db52958f716d9eabdf0890523aeae54773ef" +dependencies = [ + "bitflags 2.10.0", + "block2 0.5.1", + "objc2 0.5.2", + "objc2-foundation", +] + +[[package]] +name = "objc2-core-foundation" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2a180dd8642fa45cdb7dd721cd4c11b1cadd4929ce112ebd8b9f5803cc79d536" +dependencies = [ + "bitflags 2.10.0", ] [[package]] -name = "num-integer" -version = "0.1.46" +name = "objc2-core-image" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f" +checksum = "55260963a527c99f1819c4f8e3b47fe04f9650694ef348ffd2227e8196d34c80" dependencies = [ - "num-traits", + "block2 0.5.1", + "objc2 0.5.2", + "objc2-foundation", + "objc2-metal", ] [[package]] -name = "num-iter" -version = "0.1.45" +name = "objc2-core-location" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1429034a0490724d0075ebb2bc9e875d6503c3cf69e235a8941aa757d83ef5bf" +checksum = "000cfee34e683244f284252ee206a27953279d370e309649dc3ee317b37e5781" dependencies = [ - "autocfg", - "num-integer", - "num-traits", + "block2 0.5.1", + "objc2 0.5.2", + "objc2-contacts", + "objc2-foundation", ] [[package]] -name = "num-rational" -version = "0.4.2" +name = "objc2-encode" +version = "4.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f83d14da390562dca69fc84082e73e548e1ad308d24accdedd2720017cb37824" -dependencies = [ - "num-bigint", - "num-integer", - "num-traits", -] +checksum = "ef25abbcd74fb2609453eb695bd2f860d389e457f67dc17cafc8b8cbc89d0c33" [[package]] -name = "num-traits" -version = "0.2.19" +name = "objc2-foundation" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" +checksum = "0ee638a5da3799329310ad4cfa62fbf045d5f56e3ef5ba4149e7452dcf89d5a8" dependencies = [ - "autocfg", - "libm", + "bitflags 2.10.0", + "block2 0.5.1", + "dispatch", + "libc", + "objc2 0.5.2", ] [[package]] -name = "num_cpus" -version = "1.17.0" +name = "objc2-io-kit" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91df4bbde75afed763b708b7eee1e8e7651e02d97f6d5dd763e89367e957b23b" +checksum = "33fafba39597d6dc1fb709123dfa8289d39406734be322956a69f0931c73bb15" dependencies = [ - "hermit-abi", "libc", + "objc2-core-foundation", ] [[package]] -name = "num_enum" -version = "0.7.5" +name = "objc2-link-presentation" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1207a7e20ad57b847bbddc6776b968420d38292bbfe2089accff5e19e82454c" +checksum = "a1a1ae721c5e35be65f01a03b6d2ac13a54cb4fa70d8a5da293d7b0020261398" dependencies = [ - "num_enum_derive", - "rustversion", + "block2 0.5.1", + "objc2 0.5.2", + "objc2-app-kit", + "objc2-foundation", ] [[package]] -name = "num_enum_derive" -version = "0.7.5" +name = "objc2-metal" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff32365de1b6743cb203b710788263c44a03de03802daf96092f2da4fe6ba4d7" +checksum = "dd0cba1276f6023976a406a14ffa85e1fdd19df6b0f737b063b95f6c8c7aadd6" dependencies = [ - "proc-macro-crate", - "proc-macro2", - "quote", - "syn 2.0.108", + "bitflags 2.10.0", + "block2 0.5.1", + "objc2 0.5.2", + "objc2-foundation", ] [[package]] -name = "num_threads" -version = "0.1.7" +name = "objc2-quartz-core" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c7398b9c8b70908f6371f47ed36737907c87c52af34c268fed0bf0ceb92ead9" +checksum = "e42bee7bff906b14b167da2bac5efe6b6a07e6f7c0a21a7308d40c960242dc7a" dependencies = [ - "libc", + "bitflags 2.10.0", + "block2 0.5.1", + "objc2 0.5.2", + "objc2-foundation", + "objc2-metal", ] [[package]] -name = "nvml-wrapper" -version = "0.11.0" +name = "objc2-symbols" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d5c6c0ef9702176a570f06ad94f3198bc29c524c8b498f1b9346e1b1bdcbb3a" +checksum = "0a684efe3dec1b305badae1a28f6555f6ddd3bb2c2267896782858d5a78404dc" dependencies = [ - "bitflags 2.10.0", - "libloading", - "nvml-wrapper-sys", - "static_assertions", - "thiserror 1.0.69", - "wrapcenum-derive", + "objc2 0.5.2", + "objc2-foundation", ] [[package]] -name = "nvml-wrapper-sys" -version = "0.9.0" +name = "objc2-ui-kit" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd23dbe2eb8d8335d2bce0299e0a07d6a63c089243d626ca75b770a962ff49e6" +checksum = "b8bb46798b20cd6b91cbd113524c490f1686f4c4e8f49502431415f3512e2b6f" dependencies = [ - "libloading", + "bitflags 2.10.0", + "block2 0.5.1", + "objc2 0.5.2", + "objc2-cloud-kit", + "objc2-core-data", + "objc2-core-image", + "objc2-core-location", + "objc2-foundation", + "objc2-link-presentation", + "objc2-quartz-core", + "objc2-symbols", + "objc2-uniform-type-identifiers", + "objc2-user-notifications", +] + +[[package]] +name = "objc2-uniform-type-identifiers" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "44fa5f9748dbfe1ca6c0b79ad20725a11eca7c2218bceb4b005cb1be26273bfe" +dependencies = [ + "block2 0.5.1", + "objc2 0.5.2", + "objc2-foundation", ] [[package]] -name = "objc" -version = "0.2.7" +name = "objc2-user-notifications" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "915b1b472bc21c53464d6c8461c9d3af805ba1ef837e1cac254428f4a77177b1" +checksum = "76cfcbf642358e8689af64cee815d139339f3ed8ad05103ed5eaf73db8d84cb3" dependencies = [ - "malloc_buf", + "bitflags 2.10.0", + "block2 0.5.1", + "objc2 0.5.2", + "objc2-core-location", + "objc2-foundation", ] [[package]] -name = "objc2-core-foundation" -version = "0.3.2" +name = "objc_exception" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a180dd8642fa45cdb7dd721cd4c11b1cadd4929ce112ebd8b9f5803cc79d536" +checksum = "ad970fb455818ad6cba4c122ad012fae53ae8b4795f86378bce65e4f6bab2ca4" dependencies = [ - "bitflags 2.10.0", + "cc", ] [[package]] -name = "objc2-io-kit" -version = "0.3.2" +name = "offset-allocator" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33fafba39597d6dc1fb709123dfa8289d39406734be322956a69f0931c73bb15" +checksum = "e234d535da3521eb95106f40f0b73483d80bfb3aacf27c40d7e2b72f1a3e00a2" dependencies = [ - "libc", - "objc2-core-foundation", + "log", + "nonmax", ] [[package]] @@ -4183,9 +6470,9 @@ checksum = "384b8ab6d37215f3c5301a95a4accb5d64aa607f1fcb26a11b5303878451b4fe" [[package]] name = "onnx-ir" -version = "0.19.0" +version = "0.19.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8e4728f82add48aed8e36d8ce55ad109e316ca1a9daf2f2ea6ce1120da0a36c" +checksum = "8f9057cdc3e6ac04c5a82699fa501d50bc7b8d62bc56d583de4071c0daad1d4f" dependencies = [ "bytemuck", "derive-new", @@ -4210,6 +6497,15 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d" +[[package]] +name = "orbclient" +version = "0.3.49" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "247ad146e19b9437f8604c21f8652423595cf710ad108af40e77d3ae6e96b827" +dependencies = [ + "libredox", +] + [[package]] name = "ordered-float" version = "5.0.0" @@ -4241,9 +6537,9 @@ version = "0.9.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2621685985a2ebf1c516881c026032ac7deafcda1a2c9b7850dc81e3dfcb64c1" dependencies = [ - "cfg-if", + "cfg-if 1.0.4", "libc", - "redox_syscall", + "redox_syscall 0.5.18", "smallvec", "windows-link 0.2.1", ] @@ -4287,6 +6583,12 @@ dependencies = [ "hmac", ] +[[package]] +name = "peeking_take_while" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "19b17cddbe7ec3f8bc800887bab5e717348c95ea2ca0b1bf0837fb964dc67099" + [[package]] name = "percent-encoding" version = "2.3.2" @@ -4299,10 +6601,30 @@ version = "0.6.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b4c5cc86750666a3ed20bdaf5ca2a0344f9c67674cae0515bec2da16fbaa47db" dependencies = [ - "fixedbitset", + "fixedbitset 0.4.2", "indexmap", ] +[[package]] +name = "pin-project" +version = "1.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "677f1add503faace112b9f1373e43e9e054bfdd22ff1a63c1bc485eaec6a6a8a" +dependencies = [ + "pin-project-internal", +] + +[[package]] +name = "pin-project-internal" +version = "1.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e918e4ff8c4549eb882f14b3a4bc8c8bc93de829416eacf579f1207a8fbf861" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.109", +] + [[package]] name = "pin-project-lite" version = "0.2.16" @@ -4315,6 +6637,17 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" +[[package]] +name = "piper" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96c8c490f422ef9a4efd2cb5b42b76c8613d7e7dfc1caf667b8a3350a5acc066" +dependencies = [ + "atomic-waker", + "fastrand", + "futures-io", +] + [[package]] name = "pkg-config" version = "0.3.32" @@ -4362,6 +6695,20 @@ dependencies = [ "miniz_oxide", ] +[[package]] +name = "polling" +version = "3.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d0e4f59085d47d8241c88ead0f274e8a0cb551f3625263c05eb8dd897c34218" +dependencies = [ + "cfg-if 1.0.4", + "concurrent-queue", + "hermit-abi", + "pin-project-lite", + "rustix 1.1.2", + "windows-sys 0.61.2", +] + [[package]] name = "pollster" version = "0.4.0" @@ -4401,6 +6748,15 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" +[[package]] +name = "pp-rs" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb458bb7f6e250e6eb79d5026badc10a3ebb8f9a15d1fff0f13d17c71f4d6dee" +dependencies = [ + "unicode-xid", +] + [[package]] name = "ppmd-rust" version = "1.3.0" @@ -4449,7 +6805,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "479ca8adacdd7ce8f1fb39ce9ecccbfe93a3f1344b3d0d97f20bc0196208f62b" dependencies = [ "proc-macro2", - "syn 2.0.108", + "syn 2.0.109", ] [[package]] @@ -4486,7 +6842,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "52717f9a02b6965224f95ca2a81e2e0c5c43baacd28ca057577988930b6c3d5b" dependencies = [ "quote", - "syn 2.0.108", + "syn 2.0.109", ] [[package]] @@ -4560,7 +6916,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "96b86df24f0a7ddd5e4b95c94fc9ed8a98f1ca94d3b01bdce2824097e7835907" dependencies = [ "bytemuck", - "cfg-if", + "cfg-if 1.0.4", "libm", "num-complex", "reborrow", @@ -4648,9 +7004,9 @@ dependencies = [ [[package]] name = "quote" -version = "1.0.41" +version = "1.0.42" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce25767e7b499d1b604768e7cde645d14cc8584231ea6b295e9c9eb22c02e1d1" +checksum = "a338cc41d27e6cc6dce6cefc13a0729dfbb81c262b1f519331575dd80ef3067f" dependencies = [ "proc-macro2", ] @@ -4683,6 +7039,12 @@ dependencies = [ "uuid", ] +[[package]] +name = "radsort" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "019b4b213425016d7d84a153c4c73afb0946fbb4840e4eece7ba8848b9d6da22" + [[package]] name = "rand" version = "0.8.5" @@ -4758,6 +7120,12 @@ version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c3d6831663a5098ea164f89cff59c6284e95f4e3c76ce9848d4529f5ccca9bde" +[[package]] +name = "rangemap" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f93e7e49bb0bf967717f7bd674458b3d6b0c5f48ec7e3038166026a69fc22223" + [[package]] name = "ratatui" version = "0.29.0" @@ -4792,7 +7160,7 @@ dependencies = [ "av1-grain", "bitstream-io", "built", - "cfg-if", + "cfg-if 1.0.4", "interpolate_name", "itertools 0.12.1", "libc", @@ -4880,12 +7248,37 @@ dependencies = [ "crossbeam-utils", ] +[[package]] +name = "read-fonts" +version = "0.35.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6717cf23b488adf64b9d711329542ba34de147df262370221940dfabc2c91358" +dependencies = [ + "bytemuck", + "font-types", +] + [[package]] name = "reborrow" version = "0.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "03251193000f4bd3b042892be858ee50e8b3719f2b08e5833ac4353724632430" +[[package]] +name = "rectangle-pack" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a0d463f2884048e7153449a55166f91028d5b0ea53c79377099ce4e8cf0cf9bb" + +[[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_syscall" version = "0.5.18" @@ -4993,6 +7386,9 @@ name = "rgb" version = "0.8.52" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0c6a884d2998352bb4daf0183589aec883f16a6da1f4dde84d8e2e9a5409a1ce" +dependencies = [ + "bytemuck", +] [[package]] name = "ring" @@ -5001,7 +7397,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a4689e6c2294d81e88dc6261c768b63bc4fcdb852be6d1352498b114f61383b7" dependencies = [ "cc", - "cfg-if", + "cfg-if 1.0.4", "getrandom 0.2.16", "libc", "untrusted", @@ -5030,6 +7426,25 @@ dependencies = [ "serde", ] +[[package]] +name = "ron" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "beceb6f7bf81c73e73aeef6dd1356d9a1b2b4909e1f0fc3e59b034f9572d7b7f" +dependencies = [ + "base64", + "bitflags 2.10.0", + "serde", + "serde_derive", + "unicode-ident", +] + +[[package]] +name = "roxmltree" +version = "0.20.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c20b6793b5c2fa6553b250154b78d6d0db37e72700ae35fad9387a46f487c97" + [[package]] name = "rstest" version = "0.26.1" @@ -5047,7 +7462,7 @@ version = "0.26.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9c845311f0ff7951c5506121a9ad75aec44d083c31583b2ea5a30bcb0b0abba0" dependencies = [ - "cfg-if", + "cfg-if 1.0.4", "glob", "proc-macro-crate", "proc-macro2", @@ -5055,7 +7470,7 @@ dependencies = [ "regex", "relative-path", "rustc_version", - "syn 2.0.108", + "syn 2.0.109", "unicode-ident", ] @@ -5173,6 +7588,32 @@ version = "1.0.22" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d" +[[package]] +name = "rustybuzz" +version = "0.14.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cfb9cf8877777222e4a3bc7eb247e398b56baba500c38c1c46842431adc8b55c" +dependencies = [ + "bitflags 2.10.0", + "bytemuck", + "libm", + "smallvec", + "ttf-parser 0.21.1", + "unicode-bidi-mirroring", + "unicode-ccc", + "unicode-properties", + "unicode-script", +] + +[[package]] +name = "ruzstd" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5ff0cc5e135c8870a775d3320910cd9b564ec036b4dc0b8741629020be63f01" +dependencies = [ + "twox-hash", +] + [[package]] name = "ryu" version = "1.0.20" @@ -5242,12 +7683,24 @@ version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" +[[package]] +name = "self_cell" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "16c2f82143577edb4921b71ede051dac62ca3c16084e918bf7b40c96ae10eb33" + [[package]] name = "semver" version = "1.0.27" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d767eb0aabc880b29956c35734170f26ed551a859dbd361d140cdbeca61ab1e2" +[[package]] +name = "send_wrapper" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd0b0ec5f1c1ca621c432a25813d8d60c88abe6d3e08a3eb9cf37d97a0fe3d73" + [[package]] name = "seq-macro" version = "0.3.6" @@ -5291,7 +7744,7 @@ checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79" dependencies = [ "proc-macro2", "quote", - "syn 2.0.108", + "syn 2.0.109", ] [[package]] @@ -5364,7 +7817,7 @@ version = "0.10.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba" dependencies = [ - "cfg-if", + "cfg-if 1.0.4", "cpufeatures", "digest", ] @@ -5375,7 +7828,7 @@ version = "0.10.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a7507d819769d01a365ab707794a4084392c824f54a7a6a7862f8c3d0892b283" dependencies = [ - "cfg-if", + "cfg-if 1.0.4", "cpufeatures", "digest", ] @@ -5440,6 +7893,16 @@ dependencies = [ "quote", ] +[[package]] +name = "skrifa" +version = "0.37.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8c31071dedf532758ecf3fed987cdb4bd9509f900e026ab684b4ecb81ea49841" +dependencies = [ + "bytemuck", + "read-fonts", +] + [[package]] name = "slab" version = "0.4.11" @@ -5471,6 +7934,15 @@ version = "1.15.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03" +[[package]] +name = "smol_str" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd538fb6910ac1099850255cf94a94df6551fbdd602454387d0adb2d1ca6dead" +dependencies = [ + "serde", +] + [[package]] name = "socket2" version = "0.6.1" @@ -5481,6 +7953,15 @@ dependencies = [ "windows-sys 0.60.2", ] +[[package]] +name = "spin" +version = "0.9.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" +dependencies = [ + "lock_api", +] + [[package]] name = "spin" version = "0.10.0" @@ -5515,6 +7996,12 @@ version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6ce2be8dc25455e1f91df71bfa12ad37d7af1092ae736f3a6cd0e37bc7810596" +[[package]] +name = "stackfuture" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6eae92052b72ef70dafa16eddbabffc77e5ca3574be2f7bc1127b36f0a7ad7f2" + [[package]] name = "static_assertions" version = "1.1.0" @@ -5555,7 +8042,7 @@ dependencies = [ "proc-macro2", "quote", "rustversion", - "syn 2.0.108", + "syn 2.0.109", ] [[package]] @@ -5567,7 +8054,7 @@ dependencies = [ "heck", "proc-macro2", "quote", - "syn 2.0.108", + "syn 2.0.109", ] [[package]] @@ -5576,6 +8063,23 @@ version = "2.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" +[[package]] +name = "svg_fmt" +version = "0.4.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0193cc4331cfd2f3d2011ef287590868599a2f33c3e69bc22c1a3d3acf9e02fb" + +[[package]] +name = "swash" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "47846491253e976bdd07d0f9cc24b7daf24720d11309302ccbbc6e6b6e53550a" +dependencies = [ + "skrifa", + "yazi", + "zeno", +] + [[package]] name = "syn" version = "1.0.109" @@ -5588,9 +8092,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.108" +version = "2.0.109" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da58917d35242480a05c2897064da0a80589a2a0476c9a3f2fdc83b53502e917" +checksum = "2f17c7e013e88258aa9543dcbe81aca68a667a9ac37cd69c9fbc07858bfe0e2f" dependencies = [ "proc-macro2", "quote", @@ -5614,7 +8118,16 @@ checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2" dependencies = [ "proc-macro2", "quote", - "syn 2.0.108", + "syn 2.0.109", +] + +[[package]] +name = "sys-locale" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8eab9a99a024a169fe8a903cf9d4a3b3601109bcc13bd9e3c6fff259138626c4" +dependencies = [ + "libc", ] [[package]] @@ -5700,6 +8213,18 @@ dependencies = [ "winapi", ] +[[package]] +name = "taffy" +version = "0.7.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ab4f4d046dd956a47a7e1a2947083d7ac3e6aa3cfaaead36173ceaa5ab11878c" +dependencies = [ + "arrayvec", + "grid", + "serde", + "slotmap", +] + [[package]] name = "tar" version = "0.4.44" @@ -5793,7 +8318,7 @@ checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" dependencies = [ "proc-macro2", "quote", - "syn 2.0.108", + "syn 2.0.109", ] [[package]] @@ -5804,7 +8329,7 @@ checksum = "3ff15c8ecd7de3849db632e14d18d2571fa09dfc5ed93479bc4485c7a517c913" dependencies = [ "proc-macro2", "quote", - "syn 2.0.108", + "syn 2.0.109", ] [[package]] @@ -5822,7 +8347,7 @@ version = "1.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f60246a4944f24f6e018aa17cdeffb7818b76356965d03b07d6a9886e8962185" dependencies = [ - "cfg-if", + "cfg-if 1.0.4", ] [[package]] @@ -5940,7 +8465,7 @@ checksum = "af407857209536a95c8e56f8231ef2c2e2aff839b22e07a1ffcbc617e9db9fa5" dependencies = [ "proc-macro2", "quote", - "syn 2.0.108", + "syn 2.0.109", ] [[package]] @@ -6174,7 +8699,7 @@ dependencies = [ "proc-macro2", "quote", "regex", - "syn 2.0.108", + "syn 2.0.109", "tracel-llvm-bundler", "tracel-tblgen-rs", "unindent", @@ -6186,7 +8711,7 @@ version = "20.1.4-5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "89c805f361a6f927ba3c404866bd2e6568cb4ae638328305648917ff05ca2413" dependencies = [ - "bindgen", + "bindgen 0.71.1", "tracel-llvm-bundler", ] @@ -6196,7 +8721,7 @@ version = "20.1.4-5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a8bbcec2bc5d8c8b5d0f02694e986296a997c49e9b4395a31a54327545556107" dependencies = [ - "bindgen", + "bindgen 0.71.1", "cc", "paste", "thiserror 2.0.17", @@ -6235,7 +8760,7 @@ checksum = "81383ab64e72a7a8b8e13130c49e3dab29def6d0c7d76a03087b3cf71c5c6903" dependencies = [ "proc-macro2", "quote", - "syn 2.0.108", + "syn 2.0.109", ] [[package]] @@ -6259,26 +8784,65 @@ dependencies = [ "tracing-core", ] +[[package]] +name = "tracing-oslog" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d76902d2a8d5f9f55a81155c08971734071968c90f2d9bfe645fe700579b2950" +dependencies = [ + "cc", + "cfg-if 1.0.4", + "tracing-core", + "tracing-subscriber", +] + [[package]] name = "tracing-subscriber" version = "0.3.20" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2054a14f5307d601f88daf0553e1cbf472acc4f2c51afab632431cdcd72124d5" dependencies = [ + "matchers", "nu-ansi-term", + "once_cell", + "regex-automata", "sharded-slab", "smallvec", "thread_local", + "tracing", "tracing-core", "tracing-log", ] +[[package]] +name = "tracing-wasm" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4575c663a174420fa2d78f4108ff68f65bf2fbb7dd89f33749b6e826b3626e07" +dependencies = [ + "tracing", + "tracing-subscriber", + "wasm-bindgen", +] + [[package]] name = "try-lock" version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" +[[package]] +name = "ttf-parser" +version = "0.20.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "17f77d76d837a7830fe1d4f12b7b4ba4192c1888001c7164257e4bc6d21d96b4" + +[[package]] +name = "ttf-parser" +version = "0.21.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2c591d83f69777866b9126b24c6dd9a18351f177e49d625920d19f989fd31cf8" + [[package]] name = "tungstenite" version = "0.28.0" @@ -6296,6 +8860,12 @@ dependencies = [ "utf-8", ] +[[package]] +name = "twox-hash" +version = "2.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ea3136b675547379c4bd395ca6b938e5ad3c3d20fad76e7fe85f9e0d011419c" + [[package]] name = "type-map" version = "0.5.1" @@ -6311,12 +8881,24 @@ version = "2.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6af6ae20167a9ece4bcb41af5b80f8a1f1df981f6391189ce00fd257af04126a" +[[package]] +name = "typeid" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bc7d623258602320d5c55d1bc22793b57daff0ec7efc270ea7d55ce1d5f5471c" + [[package]] name = "typenum" version = "1.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "562d481066bde0658276a35467c4af00bdc6ee726305698a55b86e61d7ad82bb" +[[package]] +name = "typewit" +version = "1.14.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8c1ae7cc0fdb8b842d65d127cb981574b0d2b249b74d1c7a2986863dc134f71" + [[package]] name = "ug" version = "0.4.0" @@ -6338,12 +8920,36 @@ dependencies = [ "yoke 0.7.5", ] +[[package]] +name = "unicode-bidi" +version = "0.3.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c1cb5db39152898a79168971543b1cb5020dff7fe43c8dc468b0885f5e29df5" + +[[package]] +name = "unicode-bidi-mirroring" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23cb788ffebc92c5948d0e997106233eeb1d8b9512f93f41651f52b6c5f5af86" + +[[package]] +name = "unicode-ccc" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1df77b101bcc4ea3d78dafc5ad7e4f58ceffe0b2b16bf446aeb50b6cb4157656" + [[package]] name = "unicode-ident" version = "1.0.22" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9312f7c4f6ff9069b165498234ce8be658059c6728633667c526e27dc2cf1df5" +[[package]] +name = "unicode-linebreak" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b09c83c3c29d37506a3e260c08c03743a6bb66a9cd432c6934ab501a190571f" + [[package]] name = "unicode-normalization" version = "0.1.25" @@ -6353,6 +8959,18 @@ dependencies = [ "tinyvec", ] +[[package]] +name = "unicode-properties" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7df058c713841ad818f1dc5d3fd88063241cc61f49f5fbea4b951e8cf5a8d71d" + +[[package]] +name = "unicode-script" +version = "0.5.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9fb421b350c9aff471779e262955939f565ec18b86c15364e6bdf0d662ca7c1f" + [[package]] name = "unicode-segmentation" version = "1.12.0" @@ -6469,9 +9087,30 @@ dependencies = [ "getrandom 0.3.4", "js-sys", "rand 0.9.2", + "serde", "wasm-bindgen", ] +[[package]] +name = "v4l" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d8fbfea44a46799d62c55323f3c55d06df722fbe577851d848d328a1041c3403" +dependencies = [ + "bitflags 1.3.2", + "libc", + "v4l2-sys-mit", +] + +[[package]] +name = "v4l2-sys-mit" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6779878362b9bacadc7893eac76abe69612e8837ef746573c4a5239daf11990b" +dependencies = [ + "bindgen 0.65.1", +] + [[package]] name = "v_frame" version = "0.3.9" @@ -6497,7 +9136,7 @@ checksum = "41b6d82be61465f97d42bd1d15bf20f3b0a3a0905018f38f9d6f6962055b0b5c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.108", + "syn 2.0.109", ] [[package]] @@ -6564,7 +9203,7 @@ version = "0.2.105" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "da95793dfc411fbbd93f5be7715b0578ec61fe87cb1a42b12eb625caa5c5ea60" dependencies = [ - "cfg-if", + "cfg-if 1.0.4", "once_cell", "rustversion", "wasm-bindgen-macro", @@ -6577,7 +9216,7 @@ version = "0.4.55" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "551f88106c6d5e7ccc7cd9a16f312dd3b5d36ea8b4954304657d5dfba115d4a0" dependencies = [ - "cfg-if", + "cfg-if 1.0.4", "js-sys", "once_cell", "wasm-bindgen", @@ -6603,7 +9242,7 @@ dependencies = [ "bumpalo", "proc-macro2", "quote", - "syn 2.0.108", + "syn 2.0.109", "wasm-bindgen-shared", ] @@ -6668,7 +9307,7 @@ checksum = "70b6ff82bbf6e9206828e1a3178e851f8c20f1c9028e74dd3a8090741ccd5798" dependencies = [ "arrayvec", "bitflags 2.10.0", - "cfg-if", + "cfg-if 1.0.4", "cfg_aliases", "document-features", "hashbrown 0.15.5", @@ -6760,9 +9399,9 @@ dependencies = [ "bitflags 2.10.0", "block", "bytemuck", - "cfg-if", + "cfg-if 1.0.4", "cfg_aliases", - "core-graphics-types", + "core-graphics-types 0.2.0", "glow", "glutin_wgl_sys", "gpu-alloc", @@ -6774,7 +9413,7 @@ dependencies = [ "libc", "libloading", "log", - "metal", + "metal 0.32.0", "naga", "ndk-sys", "objc", @@ -6805,6 +9444,7 @@ dependencies = [ "bytemuck", "js-sys", "log", + "serde", "thiserror 2.0.17", "web-sys", ] @@ -6868,11 +9508,23 @@ version = "0.61.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9babd3a767a4c1aef6900409f85f5d53ce2544ccdfaa86dad48c91782c6d6893" dependencies = [ - "windows-collections", + "windows-collections 0.2.0", "windows-core 0.61.2", - "windows-future", + "windows-future 0.2.1", "windows-link 0.1.3", - "windows-numerics", + "windows-numerics 0.2.0", +] + +[[package]] +name = "windows" +version = "0.62.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "527fadee13e0c05939a6a05d5bd6eec6cd2e3dbd648b9f8e447c6518133d8580" +dependencies = [ + "windows-collections 0.3.2", + "windows-core 0.62.2", + "windows-future 0.3.2", + "windows-numerics 0.3.1", ] [[package]] @@ -6884,6 +9536,15 @@ dependencies = [ "windows-core 0.61.2", ] +[[package]] +name = "windows-collections" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23b2d95af1a8a14a3c7367e1ed4fc9c20e0a26e79551b1454d72583c97cc6610" +dependencies = [ + "windows-core 0.62.2", +] + [[package]] name = "windows-core" version = "0.58.0" @@ -6910,6 +9571,19 @@ dependencies = [ "windows-strings 0.4.2", ] +[[package]] +name = "windows-core" +version = "0.62.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8e83a14d34d0623b51dce9581199302a221863196a1dde71a7663a4c2be9deb" +dependencies = [ + "windows-implement 0.60.2", + "windows-interface 0.59.3", + "windows-link 0.2.1", + "windows-result 0.4.1", + "windows-strings 0.5.1", +] + [[package]] name = "windows-future" version = "0.2.1" @@ -6918,7 +9592,18 @@ checksum = "fc6a41e98427b19fe4b73c550f060b59fa592d7d686537eebf9385621bfbad8e" dependencies = [ "windows-core 0.61.2", "windows-link 0.1.3", - "windows-threading", + "windows-threading 0.1.0", +] + +[[package]] +name = "windows-future" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e1d6f90251fe18a279739e78025bd6ddc52a7e22f921070ccdc67dde84c605cb" +dependencies = [ + "windows-core 0.62.2", + "windows-link 0.2.1", + "windows-threading 0.2.1", ] [[package]] @@ -6929,7 +9614,7 @@ checksum = "2bbd5b46c938e506ecbce286b6628a02171d56153ba733b6c741fc627ec9579b" dependencies = [ "proc-macro2", "quote", - "syn 2.0.108", + "syn 2.0.109", ] [[package]] @@ -6940,7 +9625,7 @@ checksum = "053e2e040ab57b9dc951b72c264860db7eb3b0200ba345b4e4c3b14f67855ddf" dependencies = [ "proc-macro2", "quote", - "syn 2.0.108", + "syn 2.0.109", ] [[package]] @@ -6951,7 +9636,7 @@ checksum = "053c4c462dc91d3b1504c6fe5a726dd15e216ba718e84a0e46a88fbe5ded3515" dependencies = [ "proc-macro2", "quote", - "syn 2.0.108", + "syn 2.0.109", ] [[package]] @@ -6962,7 +9647,7 @@ checksum = "3f316c4a2570ba26bbec722032c4099d8c8bc095efccdc15688708623367e358" dependencies = [ "proc-macro2", "quote", - "syn 2.0.108", + "syn 2.0.109", ] [[package]] @@ -6987,6 +9672,16 @@ dependencies = [ "windows-link 0.1.3", ] +[[package]] +name = "windows-numerics" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e2e40844ac143cdb44aead537bbf727de9b044e107a0f1220392177d15b0f26" +dependencies = [ + "windows-core 0.62.2", + "windows-link 0.2.1", +] + [[package]] name = "windows-result" version = "0.2.0" @@ -7005,6 +9700,15 @@ dependencies = [ "windows-link 0.1.3", ] +[[package]] +name = "windows-result" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7781fa89eaf60850ac3d2da7af8e5242a5ea78d1a11c49bf2910bb5a73853eb5" +dependencies = [ + "windows-link 0.2.1", +] + [[package]] name = "windows-strings" version = "0.1.0" @@ -7024,6 +9728,24 @@ dependencies = [ "windows-link 0.1.3", ] +[[package]] +name = "windows-strings" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7837d08f69c77cf6b07689544538e017c1bfcf57e34b4c0ff58e6c2cd3b37091" +dependencies = [ + "windows-link 0.2.1", +] + +[[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.52.0" @@ -7060,6 +9782,21 @@ dependencies = [ "windows-link 0.2.1", ] +[[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.52.6" @@ -7102,6 +9839,21 @@ dependencies = [ "windows-link 0.1.3", ] +[[package]] +name = "windows-threading" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3949bd5b99cafdf1c7ca86b43ca564028dfe27d66958f2470940f73d86d75b37" +dependencies = [ + "windows-link 0.2.1", +] + +[[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.52.6" @@ -7114,6 +9866,12 @@ version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a9d8416fa8b42f5c947f8482c43e7d89e73a173cead56d044f6a56104a6d1b53" +[[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.52.6" @@ -7126,6 +9884,12 @@ version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b9d782e804c2f632e395708e99a94275910eb9100b2114651e04744e9b125006" +[[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.52.6" @@ -7150,6 +9914,12 @@ version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fa7359d10048f68ab8b09fa71c3daccfb0e9b559aed648a8f95469c27057180c" +[[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.52.6" @@ -7162,6 +9932,12 @@ version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1e7ac75179f18232fe9c285163565a57ef8d3c89254a30685b57d83a38d326c2" +[[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.52.6" @@ -7174,6 +9950,12 @@ version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9c3842cdd74a865a8066ab39c8a7a473c0778a3f29370b5fd6b4b9aa7df4a499" +[[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.52.6" @@ -7186,6 +9968,12 @@ version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0ffa179e2d07eee8ad8f57493436566c7cc30ac536a3379fdf008f47f6bb7ae1" +[[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.52.6" @@ -7198,6 +9986,50 @@ version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d6bbff5f0aada427a1e5a6da5f1f98158182f26556f345ac9e04d36d0ebed650" +[[package]] +name = "winit" +version = "0.30.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c66d4b9ed69c4009f6321f762d6e61ad8a2389cd431b97cb1e146812e9e6c732" +dependencies = [ + "android-activity", + "atomic-waker", + "bitflags 2.10.0", + "block2 0.5.1", + "bytemuck", + "calloop", + "cfg_aliases", + "concurrent-queue", + "core-foundation 0.9.4", + "core-graphics 0.23.2", + "cursor-icon", + "dpi", + "js-sys", + "libc", + "ndk", + "objc2 0.5.2", + "objc2-app-kit", + "objc2-foundation", + "objc2-ui-kit", + "orbclient", + "percent-encoding", + "pin-project", + "raw-window-handle", + "redox_syscall 0.4.1", + "rustix 0.38.44", + "smol_str", + "tracing", + "unicode-segmentation", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", + "web-time", + "windows-sys 0.52.0", + "x11-dl", + "x11rb", + "xkbcommon-dl", +] + [[package]] name = "winnow" version = "0.7.13" @@ -7222,7 +10054,7 @@ dependencies = [ "darling 0.20.11", "proc-macro2", "quote", - "syn 2.0.108", + "syn 2.0.109", ] [[package]] @@ -7231,6 +10063,38 @@ version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9edde0db4769d2dc68579893f2306b26c6ecfbe0ef499b013d731b7b9247e0b9" +[[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.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9993aa5be5a26815fe2c3eacfc1fde061fc1a1f094bf1ad2a18bf9c495dd7414" +dependencies = [ + "as-raw-xcb-connection", + "gethostname", + "libc", + "libloading", + "once_cell", + "rustix 1.1.2", + "x11rb-protocol", +] + +[[package]] +name = "x11rb-protocol" +version = "0.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ea6fc2961e4ef194dcbfe56bb845534d0dc8098940c7e5c012a258bfec6701bd" + [[package]] name = "xattr" version = "1.6.1" @@ -7241,6 +10105,25 @@ dependencies = [ "rustix 1.1.2", ] +[[package]] +name = "xkbcommon-dl" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d039de8032a9a8856a6be89cea3e5d12fdd82306ab7c94d74e6deab2460651c5" +dependencies = [ + "bitflags 2.10.0", + "dlib", + "log", + "once_cell", + "xkeysym", +] + +[[package]] +name = "xkeysym" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9cc00251562a284751c9973bace760d86c0276c471b4be569fe6b068ee97a56" + [[package]] name = "xml-rs" version = "0.8.28" @@ -7253,6 +10136,12 @@ version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cfe53a6657fd280eaa890a3bc59152892ffa3e30101319d168b781ed6529b049" +[[package]] +name = "yazi" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e01738255b5a16e78bbb83e7fbba0a1e7dd506905cfc53f4622d89015a03fbb5" + [[package]] name = "yoke" version = "0.7.5" @@ -7284,7 +10173,7 @@ checksum = "2380878cad4ac9aac1e2435f3eb4020e8374b5f13c296cb75b4620ff8e229154" dependencies = [ "proc-macro2", "quote", - "syn 2.0.108", + "syn 2.0.109", "synstructure", ] @@ -7296,10 +10185,16 @@ checksum = "b659052874eb698efe5b9e8cf382204678a0086ebf46982b79d6ca3182927e5d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.108", + "syn 2.0.109", "synstructure", ] +[[package]] +name = "zeno" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6df3dc4292935e51816d896edcd52aa30bc297907c26167fec31e2b0c6a32524" + [[package]] name = "zerocopy" version = "0.8.27" @@ -7317,7 +10212,7 @@ checksum = "88d2b8d9c68ad2b9e4340d7832716a4d21a22a1154777ad56ea55c51a9cf3831" dependencies = [ "proc-macro2", "quote", - "syn 2.0.108", + "syn 2.0.109", ] [[package]] @@ -7337,7 +10232,7 @@ checksum = "d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502" dependencies = [ "proc-macro2", "quote", - "syn 2.0.108", + "syn 2.0.109", "synstructure", ] @@ -7358,7 +10253,7 @@ checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" dependencies = [ "proc-macro2", "quote", - "syn 2.0.108", + "syn 2.0.109", ] [[package]] @@ -7391,7 +10286,7 @@ checksum = "eadce39539ca5cb3985590102671f2567e659fca9666581ad3411d59207951f3" dependencies = [ "proc-macro2", "quote", - "syn 2.0.108", + "syn 2.0.109", ] [[package]] @@ -7544,3 +10439,8 @@ checksum = "29ce2c8a9384ad323cf564b67da86e21d3cfdff87908bc1223ed5c99bc792713" dependencies = [ "zune-core", ] + +[[patch.unused]] +name = "cudarc" +version = "0.17.3" +source = "git+https://github.com/coreylowman/cudarc?tag=v0.17.3#fdf313cc10cf5504953ac9fe6a5dc78dc6ec4152" diff --git a/Cargo.toml b/Cargo.toml index 1f8f01d..c7591fb 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -26,15 +26,21 @@ exclude = [ "credits", ] +[workspace] +members = [ + "crates/bevy_burn_depth", +] +resolver = "2" + [features] default = [ - # "backend_fusion", + "backend_fusion", # "backend_cpu", - # "backend_cuda", + "backend_cuda", - "backend_ndarray", + # "backend_ndarray", ] import = [ @@ -48,15 +54,16 @@ import = [ ] # note: one-hot requirement -backend_cpu = ["burn/cpu"] -backend_cuda =["burn/cuda"] +backend_cpu = ["burn/cpu", "burn_dino/backend_cpu"] +backend_cuda = ["burn/cuda", "burn_dino/backend_cuda"] backend_fusion = ["burn/fusion"] -backend_ndarray = ["burn/ndarray"] -backend_wgpu = ["burn/wgpu", "half"] +backend_ndarray = ["burn/ndarray", "burn_dino/backend_ndarray"] +backend_wgpu = ["burn/wgpu", "burn_dino/backend_wgpu", "half"] [dependencies] burn = "0.19" +burn_dino = { version = "0.5.2", default-features = false } half = { version = "2", optional = true } diff --git a/bench/inference.rs b/bench/inference.rs index 5749082..2eaf170 100644 --- a/bench/inference.rs +++ b/bench/inference.rs @@ -3,14 +3,11 @@ use burn::prelude::*; use burn_depth::{ InferenceBackend, - model::depth_pro::{ - DepthPro, DepthProConfig, - }, + model::depth_pro::{DepthPro, DepthProConfig}, }; use criterion::{Criterion, Throughput, criterion_group, criterion_main}; use std::hint::black_box; - criterion_group! { name = depth_pro_benchmarks; config = Criterion::default().sample_size(10); @@ -18,7 +15,6 @@ criterion_group! { } criterion_main!(depth_pro_benchmarks); - fn inference_benchmark(c: &mut Criterion) { let device = ::Device::default(); let model = DepthPro::::new(&device, DepthProConfig::default()); diff --git a/bench/interpolate.rs b/bench/interpolate.rs index a1877da..11f4a18 100644 --- a/bench/interpolate.rs +++ b/bench/interpolate.rs @@ -3,15 +3,11 @@ use burn::prelude::*; use burn_depth::{ InferenceBackend, - model::depth_pro::{ - InterpolationMethod, - resize_bilinear_align_corners_false, - }, + model::depth_pro::{InterpolationMethod, resize_bilinear_align_corners_false}, }; use criterion::{Criterion, Throughput, criterion_group, criterion_main}; use std::hint::black_box; - criterion_group! { name = interpolation_benchmarks; config = Criterion::default().sample_size(100); @@ -19,7 +15,6 @@ criterion_group! { } criterion_main!(interpolation_benchmarks); - fn interpolation_benchmark(c: &mut Criterion) { let device = ::Device::default(); let bench_device = device.clone(); diff --git a/crates/bevy_burn_depth/Cargo.toml b/crates/bevy_burn_depth/Cargo.toml new file mode 100644 index 0000000..17702da --- /dev/null +++ b/crates/bevy_burn_depth/Cargo.toml @@ -0,0 +1,110 @@ +[package] +name = "bevy_burn_depth" +version = "0.1.0" +edition = "2021" +authors = ["mosure "] +license = "MIT OR Apache-2.0" +keywords = [ + "bevy", + "burn", + "depth", + "nokhwa", +] +categories = [ + "computer-vision", +] + + +[features] +default = ["native"] + +fusion_backend = ["burn/fusion"] + +native = ["futures", "nokhwa", "fusion_backend"] +web = [] + +editor = [] +perftest = [] + + + +[dependencies] +bevy_args = "2.0" +bevy_burn = "0.4" +burn_depth = { path = "../../", default-features = false, features = ["backend_wgpu"] } +clap = { version = "4.5", features = ["derive"] } +futures = { version = "0.3", optional = true } +futures-intrusive = "0.5" +image = { version = "0.25.2", default-features = false, features = ["jpeg", "png"] } +nokhwa = { version = "0.10", features = ["input-native", "output-threaded"], optional = true } +once_cell = "1.19" +serde = "1.0" + + +[dependencies.bevy] +version = "0.17" +default-features = false +features = [ + "bevy_asset", + "bevy_camera", + "bevy_core_pipeline", + "bevy_image", + "bevy_log", + "bevy_pbr", + "bevy_render", + "bevy_sprite", + "bevy_text", + "bevy_ui", + "bevy_ui_render", + "bevy_window", + "bevy_winit", + "debug", + "default_font", + "png", + "std", + "tonemapping_luts", + "webgpu", + "x11", + "zstd_rust", +] + +[dependencies.burn] +version = "0.19" +default-features = false +features = [ + # "fusion", + "std", + # "template", + "wgpu", +] + + +[target.'cfg(target_arch = "wasm32")'.dependencies] +console_error_panic_hook = "0.1" +js-sys = "0.3" +wasm-bindgen = "0.2" +wasm-bindgen-futures = "0.4" + + +[dependencies.web-sys] +version = "0.3" +features = [ + 'Document', + 'Element', + 'HtmlElement', + 'Location', + 'Node', + 'Request', + 'RequestInit', + 'RequestMode', + 'Response', + 'Window', +] + + +[lib] +path = "src/lib.rs" + +[[bin]] +name = "bevy_burn_depth" +path = "src/main.rs" diff --git a/crates/bevy_burn_depth/assets/fonts/Caveat-Bold.ttf b/crates/bevy_burn_depth/assets/fonts/Caveat-Bold.ttf new file mode 100644 index 0000000..5b05296 Binary files /dev/null and b/crates/bevy_burn_depth/assets/fonts/Caveat-Bold.ttf differ diff --git a/crates/bevy_burn_depth/assets/fonts/Caveat-Medium.ttf b/crates/bevy_burn_depth/assets/fonts/Caveat-Medium.ttf new file mode 100644 index 0000000..ec96174 Binary files /dev/null and b/crates/bevy_burn_depth/assets/fonts/Caveat-Medium.ttf differ diff --git a/crates/bevy_burn_depth/assets/fonts/Caveat-Regular.ttf b/crates/bevy_burn_depth/assets/fonts/Caveat-Regular.ttf new file mode 100644 index 0000000..9654095 Binary files /dev/null and b/crates/bevy_burn_depth/assets/fonts/Caveat-Regular.ttf differ diff --git a/crates/bevy_burn_depth/assets/fonts/Caveat-SemiBold.ttf b/crates/bevy_burn_depth/assets/fonts/Caveat-SemiBold.ttf new file mode 100644 index 0000000..113d70d Binary files /dev/null and b/crates/bevy_burn_depth/assets/fonts/Caveat-SemiBold.ttf differ diff --git a/crates/bevy_burn_depth/src/lib.rs b/crates/bevy_burn_depth/src/lib.rs new file mode 100644 index 0000000..5614fba --- /dev/null +++ b/crates/bevy_burn_depth/src/lib.rs @@ -0,0 +1,64 @@ +use std::sync::{Arc, Mutex}; + +use burn::prelude::*; +use burn_depth::{ + inference::infer_from_rgb, + model::depth_pro::DepthPro, +}; +use image::RgbImage; + +pub mod platform; + +pub async fn process_frame( + frame: RgbImage, + model: Arc>>, + device: B::Device, +) -> Tensor { + let width = frame.width() as usize; + let height = frame.height() as usize; + let pixels = frame.into_raw(); + + let inference = { + let guard = model.lock().expect("depth model poisoned"); + infer_from_rgb(&*guard, &pixels, width, height, &device) + .expect("failed to run inference") + }; + + let depth_map: Tensor = inference.depth.squeeze_dim(0); + let dims: [usize; 2] = depth_map.shape().dims(); + let height = dims[0]; + let width = dims[1]; + + let min_depth = depth_map + .clone() + .min() + .into_scalar_async() + .await + .elem::(); + let max_depth = depth_map + .clone() + .max() + .into_scalar_async() + .await + .elem::(); + let range = (max_depth - min_depth).max(f32::EPSILON); + + let normalized = depth_map + .sub_scalar(min_depth) + .div_scalar(range) + .clamp(0.0, 1.0) + .reshape([height as i32, width as i32, 1]); + + let rgb = Tensor::::cat( + vec![ + normalized.clone(), + normalized.clone(), + normalized.clone(), + ], + 2, + ); + + let alpha = Tensor::::ones([height, width, 1], &device); + + Tensor::::cat(vec![rgb, alpha], 2).reshape([height as i32, width as i32, 4]) +} diff --git a/crates/bevy_burn_depth/src/main.rs b/crates/bevy_burn_depth/src/main.rs new file mode 100644 index 0000000..f565c8d --- /dev/null +++ b/crates/bevy_burn_depth/src/main.rs @@ -0,0 +1,578 @@ +#![recursion_limit = "256"] + +use std::{ + path::PathBuf, + sync::{Arc, Mutex}, +}; + +use bevy::asset::RenderAssetUsages; +use bevy::{ + color::palettes::css::GOLD, + diagnostic::{ + Diagnostic, DiagnosticPath, Diagnostics, DiagnosticsStore, FrameTimeDiagnosticsPlugin, + RegisterDiagnostic, + }, + ecs::world::CommandQueue, + prelude::*, + render::{ + render_resource::{Extent3d, TextureDimension, TextureFormat, TextureUsages}, + settings::{RenderCreation, WgpuFeatures, WgpuSettings}, + RenderPlugin, + }, + tasks::{block_on, futures_lite::future, AsyncComputeTaskPool, Task}, + ui::widget::ImageNode, + window::WindowResolution, +}; +use bevy_args::{parse_args, Deserialize, Parser, Serialize}; +use bevy_burn::{BevyBurnBridgePlugin, BevyBurnHandle, BindingDirection, TransferKind}; +use bevy_burn_depth::{platform::camera::receive_image, process_frame}; +use burn::{ + backend::wgpu::graphics::AutoGraphicsApi, + backend::wgpu::{init_setup_async, Wgpu}, + prelude::*, +}; +use burn_depth::model::depth_pro::{DepthPro, DepthProConfig}; +use image::RgbImage; + +const DEFAULT_CHECKPOINT: &str = "assets/model/depth_pro.mpk"; +const MAX_IN_FLIGHT_TASKS: usize = 1; + +#[derive(Resource, Clone, Debug, Serialize, Deserialize, Parser, Reflect)] +#[reflect(Resource)] +#[command(about = "bevy_burn_depth", version, long_about = None)] +pub struct BevyBurnDepthConfig { + #[arg(long, default_value = "true")] + pub press_esc_to_close: bool, + + #[arg(long, default_value = "true")] + pub show_fps: bool, + + #[arg(long, default_value = DEFAULT_CHECKPOINT)] + pub checkpoint: PathBuf, + + #[arg(long)] + pub image_path: Option, +} + +impl Default for BevyBurnDepthConfig { + fn default() -> Self { + Self { + press_esc_to_close: true, + show_fps: true, + checkpoint: PathBuf::from(DEFAULT_CHECKPOINT), + image_path: None, + } + } +} + +#[cfg(feature = "native")] +mod io { + use std::path::Path; + + use burn::prelude::*; + use burn_depth::model::depth_pro::{DepthPro, DepthProConfig}; + + pub async fn load_model( + config: DepthProConfig, + checkpoint: &Path, + device: &B::Device, + ) -> DepthPro { + DepthPro::load_with_config(device, config, checkpoint) + .expect("failed to load DepthPro checkpoint") + } +} + +#[cfg(feature = "web")] +mod io { + use burn::{ + prelude::*, + record::{HalfPrecisionSettings, NamedMpkBytesRecorder, Recorder}, + }; + use burn_depth::model::depth_pro::{DepthPro, DepthProConfig}; + use js_sys::Uint8Array; + use wasm_bindgen::JsCast; + use wasm_bindgen_futures::JsFuture; + use web_sys::{window, Request, RequestInit, RequestMode, Response}; + + pub async fn load_model( + config: DepthProConfig, + checkpoint: &str, + device: &B::Device, + ) -> DepthPro { + let mut opts = RequestInit::new(); + opts.set_method("GET"); + opts.set_mode(RequestMode::Cors); + + let request = Request::new_with_str_and_init(checkpoint, &opts) + .unwrap_or_else(|_| panic!("failed to construct request for {checkpoint}")); + + let window = window().expect("missing browser window"); + let response = JsFuture::from(window.fetch_with_request(&request)) + .await + .expect("failed to fetch checkpoint"); + let response: Response = response.dyn_into().expect("invalid response type"); + + let buffer = JsFuture::from( + response + .array_buffer() + .expect("failed to retrieve checkpoint buffer"), + ) + .await + .expect("failed to read checkpoint buffer"); + let bytes = Uint8Array::new(&buffer); + + let mut data = vec![0; bytes.length() as usize]; + bytes.copy_to(&mut data); + + let record = NamedMpkBytesRecorder::::default() + .load(data, &Default::default()) + .expect("failed to decode checkpoint"); + + let model = DepthPro::new(device, config); + model.load_record(record) + } +} + +#[derive(Resource)] +struct DepthModel { + device: B::Device, + model: Arc>>, +} + +#[derive(Resource)] +struct DepthTexture { + image: Handle, + entity: Option, + width: u32, + height: u32, +} + +impl Default for DepthTexture { + fn default() -> Self { + Self { + image: Handle::default(), + entity: None, + width: 1, + height: 1, + } + } +} + +#[derive(Resource, Default, Clone)] +struct StaticFrame(Option>); + +#[derive(Component)] +struct ProcessDepth(Task); + +fn process_frames( + mut commands: Commands, + depth_model: Res>, + depth_texture: Res, + static_frame: Res, + active_tasks: Query<&ProcessDepth>, +) { + let Some(image_entity) = depth_texture.entity else { + return; + }; + + if active_tasks.iter().count() >= MAX_IN_FLIGHT_TASKS { + return; + } + + let frame_source = if let Some(frame) = static_frame.0.as_ref() { + Some((**frame).clone()) + } else { + receive_image() + }; + + if let Some(frame) = frame_source { + let thread_pool = AsyncComputeTaskPool::get(); + let task_entity = commands.spawn_empty().id(); + let device = depth_model.device.clone(); + let model = depth_model.model.clone(); + + let task = thread_pool.spawn({ + let target = image_entity; + async move { + let tensor = process_frame(frame, model.clone(), device.clone()).await; + let [tensor_height, tensor_width, _] = tensor.dims(); + + let mut queue = CommandQueue::default(); + queue.push(move |world: &mut World| { + let mut image_handle = None; + if let Ok(mut entity) = world.get_entity_mut(target) { + if let Some(mut handle) = entity.get_mut::>() { + image_handle = Some(handle.bevy_image.clone()); + handle.tensor = tensor.clone(); + handle.upload = true; + } + } + + if let Some(handle) = image_handle { + if let Some(mut images) = world.get_resource_mut::>() { + let desired = Extent3d { + width: tensor_width as u32, + height: tensor_height as u32, + depth_or_array_layers: 1, + }; + + let needs_resize = images + .get(handle.id()) + .map(|image| { + image.texture_descriptor.size.width != desired.width + || image.texture_descriptor.size.height != desired.height + }) + .unwrap_or(true); + + if needs_resize { + let (fill_bytes, texture_format, _, texture_usage) = + depth_image_setup(); + let mut replacement = Image::new_fill( + desired, + TextureDimension::D2, + fill_bytes, + texture_format, + RenderAssetUsages::RENDER_WORLD, + ); + replacement.texture_descriptor.usage |= texture_usage; + + let _ = images.insert(handle.id(), replacement); + } + } + } + + if let Some(mut texture_meta) = world.get_resource_mut::() { + texture_meta.width = tensor_width as u32; + texture_meta.height = tensor_height as u32; + } + + if let Ok(mut tracker) = world.get_entity_mut(task_entity) { + tracker.remove::(); + tracker.despawn(); + } + }); + + queue + } + }); + + commands.entity(task_entity).insert(ProcessDepth(task)); + } +} + +fn handle_tasks( + mut commands: Commands, + mut diagnostics: Diagnostics, + mut last_frame: Local>, + mut active_tasks: Query<&mut ProcessDepth>, +) { + for mut task in &mut active_tasks { + if let Some(mut queue) = block_on(future::poll_once(&mut task.0)) { + if let Some(last_instant) = last_frame.last_update() { + let delta_seconds = last_instant.elapsed().as_secs_f64(); + if delta_seconds > 0.0 { + diagnostics.add_measurement(&INFERENCE_FPS, || 1.0 / delta_seconds); + } + } + last_frame.update(); + + commands.append(&mut queue); + } + } +} + +#[cfg(target_arch = "wasm32")] +fn depth_image_setup() -> (&'static [u8], TextureFormat, TransferKind, TextureUsages) { + ( + &[0u8; 4], + TextureFormat::Rgba8UnormSrgb, + TransferKind::Cpu, + TextureUsages::COPY_SRC | TextureUsages::COPY_DST | TextureUsages::TEXTURE_BINDING, + ) +} + +#[cfg(not(target_arch = "wasm32"))] +fn depth_image_setup() -> (&'static [u8], TextureFormat, TransferKind, TextureUsages) { + ( + &[0u8; 16], + TextureFormat::Rgba32Float, + TransferKind::Gpu, + TextureUsages::COPY_SRC + | TextureUsages::COPY_DST + | TextureUsages::TEXTURE_BINDING + | TextureUsages::STORAGE_BINDING, + ) +} + +fn setup_ui( + mut commands: Commands, + depth: Res>, + mut depth_texture: ResMut, + mut images: ResMut>, +) { + let size = Extent3d { + width: depth_texture.width.max(1), + height: depth_texture.height.max(1), + depth_or_array_layers: 1, + }; + + let (fill_bytes, texture_format, transfer_kind, texture_usage) = depth_image_setup(); + let mut image = Image::new_fill( + size, + TextureDimension::D2, + fill_bytes, + texture_format, + RenderAssetUsages::RENDER_WORLD, + ); + image.texture_descriptor.usage |= texture_usage; + depth_texture.image = images.add(image); + + let mut image_entity = None; + commands + .spawn(Node { + display: Display::Grid, + width: Val::Percent(100.0), + height: Val::Percent(100.0), + grid_template_columns: RepeatedGridTrack::flex(1, 1.0), + grid_template_rows: RepeatedGridTrack::flex(1, 1.0), + ..default() + }) + .with_children(|builder| { + let entity = builder + .spawn(( + ImageNode::new(depth_texture.image.clone()).with_mode(NodeImageMode::Stretch), + BevyBurnHandle:: { + bevy_image: depth_texture.image.clone(), + tensor: Tensor::::zeros( + [ + depth_texture.height.max(1) as usize, + depth_texture.width.max(1) as usize, + 4, + ], + &depth.device, + ), + upload: true, + direction: BindingDirection::BurnToBevy, + xfer: transfer_kind, + }, + )) + .id(); + image_entity = Some(entity); + }); + + depth_texture.entity = image_entity; + + commands.spawn(Camera2d); +} + +pub fn viewer_app(args: BevyBurnDepthConfig) -> App { + let mut app = App::new(); + app.insert_resource(args.clone()); + + let title = "bevy_burn_depth".to_string(); + + #[cfg(target_arch = "wasm32")] + let primary_window = Some(Window { + canvas: Some("#bevy".to_string()), + mode: bevy::window::WindowMode::Windowed, + prevent_default_event_handling: true, + title: title.clone(), + #[cfg(feature = "perftest")] + present_mode: bevy::window::PresentMode::AutoNoVsync, + #[cfg(not(feature = "perftest"))] + present_mode: bevy::window::PresentMode::AutoVsync, + ..default() + }); + + #[cfg(not(target_arch = "wasm32"))] + let primary_window = Some(Window { + mode: bevy::window::WindowMode::Windowed, + prevent_default_event_handling: false, + resolution: WindowResolution::new(1024, 1024), + title, + #[cfg(feature = "perftest")] + present_mode: bevy::window::PresentMode::AutoNoVsync, + #[cfg(not(feature = "perftest"))] + present_mode: bevy::window::PresentMode::AutoVsync, + ..default() + }); + + app.insert_resource(ClearColor(Color::srgba(0.0, 0.0, 0.0, 0.0))); + + let default_plugins = DefaultPlugins + .set(ImagePlugin::default_nearest()) + .set(RenderPlugin { + render_creation: RenderCreation::Automatic(WgpuSettings { + features: WgpuFeatures::TEXTURE_ADAPTER_SPECIFIC_FORMAT_FEATURES, + ..Default::default() + }), + ..Default::default() + }) + .set(WindowPlugin { + primary_window, + ..default() + }); + + app.add_plugins(default_plugins); + app.add_plugins(BevyBurnBridgePlugin::::default()); + + if args.press_esc_to_close { + app.add_systems(Update, press_esc_close); + } + + if args.show_fps { + app.add_plugins(FrameTimeDiagnosticsPlugin::default()); + app.register_diagnostic(Diagnostic::new(INFERENCE_FPS)); + app.add_systems(Startup, fps_display_setup); + app.add_systems(Update, fps_update_system); + } + + app +} + +fn press_esc_close(keys: Res>, mut exit: MessageWriter) { + if keys.just_pressed(KeyCode::Escape) { + exit.write(AppExit::Success); + } +} + +const INFERENCE_FPS: DiagnosticPath = DiagnosticPath::const_new("inference_fps"); + +fn fps_display_setup(mut commands: Commands) { + commands + .spawn(( + Text("fps: ".to_string()), + TextFont { + font_size: 60.0, + ..Default::default() + }, + TextColor(Color::WHITE), + Node { + position_type: PositionType::Absolute, + bottom: Val::Px(5.0), + left: Val::Px(15.0), + ..default() + }, + ZIndex(2), + )) + .with_child(( + FpsText, + TextColor(Color::Srgba(GOLD)), + TextFont { + font_size: 60.0, + ..Default::default() + }, + TextSpan::default(), + )); +} + +#[derive(Component)] +struct FpsText; + +fn fps_update_system( + diagnostics: Res, + mut query: Query<&mut TextSpan, With>, +) { + for mut text in &mut query { + if let Some(fps) = diagnostics.get(&INFERENCE_FPS) { + if let Some(value) = fps.smoothed() { + **text = format!("{value:.2}"); + } + } + } +} + +async fn run_app(args: BevyBurnDepthConfig) { + log("running app..."); + log(&format!("{args:?}")); + + let device = Default::default(); + init_setup_async::(&device, Default::default()).await; + log("device created"); + + let config = DepthProConfig::default(); + + log("loading depth model..."); + + #[cfg(feature = "native")] + let depth = io::load_model::(config.clone(), args.checkpoint.as_path(), &device).await; + + #[cfg(feature = "web")] + let depth = io::load_model::( + config.clone(), + args.checkpoint.to_string_lossy().as_ref(), + &device, + ) + .await; + + let image_size = depth.img_size(); + log(&format!("depth model ready (inference resolution: {image_size}px)")); + + let static_frame = args.image_path.as_ref().map(|path| { + image::open(path) + .unwrap_or_else(|err| panic!("failed to load image `{}`: {err}", path.display())) + .to_rgb8() + }); + let static_frame = static_frame.map(Arc::new); + + let mut depth_texture = DepthTexture::default(); + if let Some(frame) = static_frame.as_ref() { + depth_texture.width = frame.width(); + depth_texture.height = frame.height(); + } + + let mut app = viewer_app(args.clone()); + + app.insert_resource(depth_texture); + app.insert_resource(StaticFrame(static_frame.clone())); + app.insert_resource(DepthModel { + device: device.clone(), + model: Arc::new(Mutex::new(depth)), + }); + + app.add_systems(Startup, setup_ui); + app.add_systems(Update, (handle_tasks, process_frames)); + + log("launching Bevy application..."); + app.run(); + + #[cfg(feature = "native")] + if let Some(sender) = bevy_burn_depth::platform::camera::APP_RUN_SENDER.get() { + let _ = sender.send(()); + } +} + +pub fn log(message: &str) { + #[cfg(debug_assertions)] + #[cfg(target_arch = "wasm32")] + { + web_sys::console::log_1(&message.into()); + } + + #[cfg(debug_assertions)] + #[cfg(not(target_arch = "wasm32"))] + { + println!("{message}"); + } +} + +fn main() { + #[cfg(feature = "native")] + { + let args = parse_args::(); + if args.image_path.is_none() { + std::thread::spawn(bevy_burn_depth::platform::camera::native_camera_thread); + } + futures::executor::block_on(run_app(args)); + } + + #[cfg(target_arch = "wasm32")] + { + let args = parse_args::(); + + #[cfg(debug_assertions)] + console_error_panic_hook::set_once(); + + wasm_bindgen_futures::spawn_local(run_app(args)); + } +} diff --git a/crates/bevy_burn_depth/src/platform.rs b/crates/bevy_burn_depth/src/platform.rs new file mode 100644 index 0000000..f4937a8 --- /dev/null +++ b/crates/bevy_burn_depth/src/platform.rs @@ -0,0 +1,113 @@ +#[cfg(feature = "native")] +pub mod camera { + use std::sync::{ + mpsc::{self, Receiver, Sender, SyncSender, TryRecvError}, + Arc, Mutex, + }; + + use image::RgbImage; + use nokhwa::{ + nokhwa_initialize, + pixel_format::RgbFormat, + query, + utils::{ApiBackend, RequestedFormat, RequestedFormatType}, + CallbackCamera, + }; + use once_cell::sync::OnceCell; + + pub static SAMPLE_RECEIVER: OnceCell>>> = OnceCell::new(); + pub static SAMPLE_SENDER: OnceCell> = OnceCell::new(); + + pub static APP_RUN_RECEIVER: OnceCell>>> = OnceCell::new(); + pub static APP_RUN_SENDER: OnceCell> = OnceCell::new(); + + pub fn native_camera_thread() { + let (sample_sender, sample_receiver) = mpsc::sync_channel(1); + SAMPLE_RECEIVER + .set(Arc::new(Mutex::new(sample_receiver))) + .unwrap(); + SAMPLE_SENDER.set(sample_sender).unwrap(); + + let (app_run_sender, app_run_receiver) = mpsc::channel(); + APP_RUN_RECEIVER + .set(Arc::new(Mutex::new(app_run_receiver))) + .unwrap(); + APP_RUN_SENDER.set(app_run_sender).unwrap(); + + nokhwa_initialize(|granted| { + if !granted { + panic!("failed to initialize camera"); + } + }); + + let devices = query(ApiBackend::Auto).unwrap(); + let index = devices.first().unwrap().index(); + + let format = RequestedFormat::new::(RequestedFormatType::None); + let mut camera = CallbackCamera::new(index.clone(), format, |buffer| { + let image = buffer.decode_image::().unwrap(); + let sender = SAMPLE_SENDER.get().unwrap(); + sender.send(image).unwrap(); + }) + .unwrap(); + + camera.open_stream().unwrap(); + + loop { + camera.poll_frame().unwrap(); + + let receiver = APP_RUN_RECEIVER.get().unwrap(); + match receiver.lock().unwrap().try_recv() { + Ok(_) => break, + Err(TryRecvError::Empty) => continue, + Err(TryRecvError::Disconnected) => break, + }; + } + + camera.stop_stream().unwrap(); + } + + pub fn receive_image() -> Option { + let receiver = SAMPLE_RECEIVER.get().unwrap(); + let mut last_image = None; + + { + let receiver = receiver.lock().unwrap(); + while let Ok(image) = receiver.try_recv() { + last_image = Some(image); + } + } + + last_image + } +} + +#[cfg(feature = "web")] +pub mod camera { + use std::cell::RefCell; + + use image::{DynamicImage, RgbImage, RgbaImage}; + use wasm_bindgen::prelude::*; + + thread_local! { + pub static SAMPLE_RECEIVER: RefCell> = RefCell::new(None); + } + + #[wasm_bindgen] + pub fn frame_input(pixel_data: &[u8], width: u32, height: u32) { + let rgba_image = RgbaImage::from_raw(width, height, pixel_data.to_vec()) + .expect("failed to create RgbImage"); + + // TODO: perform video element -> burn's webgpu texture conversion directly + let dynamic_image = DynamicImage::ImageRgba8(rgba_image); + let rgb_image: RgbImage = dynamic_image.to_rgb8(); + + SAMPLE_RECEIVER.with(|receiver| { + *receiver.borrow_mut() = Some(rgb_image); + }); + } + + pub fn receive_image() -> Option { + SAMPLE_RECEIVER.with(|receiver| receiver.borrow_mut().take()) + } +} diff --git a/crates/bevy_burn_depth/www/index.html b/crates/bevy_burn_depth/www/index.html new file mode 100644 index 0000000..6652545 --- /dev/null +++ b/crates/bevy_burn_depth/www/index.html @@ -0,0 +1,122 @@ + + + + bevy_burn_dino + + + + + + +
+ + + + diff --git a/example/inference.rs b/example/inference.rs index 678b121..56ebacd 100644 --- a/example/inference.rs +++ b/example/inference.rs @@ -30,9 +30,8 @@ fn main() -> Result<(), Box> { let width = orig_width as usize; let height = orig_height as usize; - let result = - infer_from_rgb::(&model, rgb.as_raw(), width, height, &device) - .map_err(|err| format!("Failed to run inference: {err}"))?; + let result = infer_from_rgb::(&model, rgb.as_raw(), width, height, &device) + .map_err(|err| format!("Failed to run inference: {err}"))?; let depth_data = result.depth.clone().into_data().convert::(); let shape = depth_data.shape.clone(); @@ -94,7 +93,8 @@ fn main() -> Result<(), Box> { let focal_values = focal_data .to_vec::() .map_err(|err| format!("Failed to read focal length tensor: {err:?}"))?; - let fovy_values = result.fovy_rad + let fovy_values = result + .fovy_rad .clone() .into_data() .convert::() diff --git a/src/inference.rs b/src/inference.rs index 08a5e05..682d498 100644 --- a/src/inference.rs +++ b/src/inference.rs @@ -5,7 +5,9 @@ use crate::model::depth_pro::{DepthPro, DepthProInference}; /// Converts packed RGB bytes into a normalized tensor suitable for `DepthPro::infer`. /// /// The input slice must contain `width * height * 3` bytes in row-major order. -/// The output tensor is channel-first (`NCHW`) with values scaled to `[-1, 1]`. +/// Each pixel is converted to floats in `[0, 1]`, then normalized with the ImageNet +/// mean / standard deviation expected by the DINO encoder. The output tensor is +/// channel-first (`NCHW`). pub fn rgb_to_input_tensor( rgb: &[u8], width: usize, @@ -27,11 +29,17 @@ pub fn rgb_to_input_tensor( let hw = width * height; let mut data = vec![0.0f32; 3 * hw]; + const MEAN: [f32; 3] = [0.485, 0.456, 0.406]; + const STD: [f32; 3] = [0.229, 0.224, 0.225]; + for (idx, pixel) in rgb.chunks_exact(3).enumerate() { - for channel in 0..3 { - let value = pixel[channel] as f32 / 255.0; - data[channel * hw + idx] = value * 2.0 - 1.0; - } + let r = pixel[0] as f32 / 255.0; + let g = pixel[1] as f32 / 255.0; + let b = pixel[2] as f32 / 255.0; + + data[idx] = (r - MEAN[0]) / STD[0]; + data[hw + idx] = (g - MEAN[1]) / STD[1]; + data[2 * hw + idx] = (b - MEAN[2]) / STD[2]; } Ok( @@ -51,7 +59,7 @@ pub fn rgb_to_input_tensor( /// the preprocessing pipeline. pub fn infer_from_rgb( model: &DepthPro, - rgb: &[u8], // TODO: use an image type here + rgb: &[u8], // TODO: use an image type here width: usize, height: usize, device: &B::Device, @@ -78,7 +86,15 @@ mod tests { assert_eq!(data.shape.as_slice(), &[1, 3, 2, 1]); let values = data.to_vec::().unwrap(); - let expected = [-1.0f32, 1.0f32, 1.0f32, -1.0f32, 0.0039215689, 0.0039215689]; + // Expected values computed using f32 precision to align with PyTorch's normalization. + let expected = [ + -2.1179039, + 2.2489083, + 2.4285715, + -2.0357141, + 0.42649257, + 0.42649257, + ]; assert_eq!(values.len(), expected.len()); for (value, expected) in values.iter().zip(expected.iter()) { assert!((value - expected).abs() < 1e-6); diff --git a/src/lib.rs b/src/lib.rs index 9c095c0..0ee50ad 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -33,7 +33,7 @@ mod tests { #[cfg(feature = "backend_wgpu")] use burn::backend::{ - Wgpu as WgpuBackend, + Wgpu, wgpu::{RuntimeOptions, graphics::AutoGraphicsApi, init_setup}, }; diff --git a/src/model/depth_pro/layers/encoder.rs b/src/model/depth_pro/layers/encoder.rs index 6d32bb8..f5fcb10 100644 --- a/src/model/depth_pro/layers/encoder.rs +++ b/src/model/depth_pro/layers/encoder.rs @@ -4,10 +4,8 @@ use burn::{ prelude::*, }; -use crate::model::{ - depth_pro::{InterpolationMethod, layers::vit::ViTConfig, resize_bilinear_scale}, - dino::DinoVisionTransformer, -}; +use crate::model::depth_pro::{InterpolationMethod, layers::vit::ViTConfig, resize_bilinear_scale}; +use burn_dino::model::dino::DinoVisionTransformer; #[derive(Clone)] struct PatchSplit { @@ -132,6 +130,7 @@ impl DepthProEncoder { patch_encoder: DinoVisionTransformer, patch_config: &ViTConfig, image_encoder: DinoVisionTransformer, + image_embed_dim: usize, hook_block_ids: Vec, decoder_features: usize, interpolation: InterpolationMethod, @@ -155,12 +154,10 @@ impl DepthProEncoder { let upsample1 = upsample_block(patch_config.embed_dim, dims_encoder[2], 1, None); let upsample2 = upsample_block(patch_config.embed_dim, dims_encoder[3], 1, None); - let upsample_lowres = ConvTranspose2dConfig::new( - [image_encoder.embedding_dimension(), dims_encoder[3]], - [2, 2], - ) - .with_stride([2, 2]) - .init(device); + let upsample_lowres = + ConvTranspose2dConfig::new([image_embed_dim, dims_encoder[3]], [2, 2]) + .with_stride([2, 2]) + .init(device); let fuse_lowres = Conv2dConfig::new([dims_encoder[3] * 2, dims_encoder[3]], [1, 1]) .with_bias(true) @@ -339,10 +336,9 @@ impl DepthProEncoder { hook_tokens.len() >= 2, "DepthPro encoder expects at least two hook tokens" ); - let patch_output = patch_output.x_norm_patchtokens; let x_pyramid_encodings = - self.reshape_feature(patch_output, self.out_size, self.out_size, 0); + self.reshape_feature(patch_output.x_norm_patchtokens, self.out_size, self.out_size, 0); let len0 = x0_split.tensor.shape().dims::<4>()[0]; let len1 = x1_split.tensor.shape().dims::<4>()[0]; @@ -455,7 +451,7 @@ mod tests { device: &::Device, ) -> (DepthProEncoder, ViTConfig) { let (patch_encoder, patch_config) = create_vit::(device, DINOV2_L16_128); - let (image_encoder, _) = create_vit::(device, DINOV2_L16_128); + let (image_encoder, image_config) = create_vit::(device, DINOV2_L16_128); let encoder = DepthProEncoder::new( device, @@ -463,6 +459,7 @@ mod tests { patch_encoder, &patch_config, image_encoder, + image_config.embed_dim, patch_config.encoder_feature_layer_ids.clone(), 64, InterpolationMethod::Custom, diff --git a/src/model/depth_pro/layers/fov.rs b/src/model/depth_pro/layers/fov.rs index bb06bab..7e66b17 100644 --- a/src/model/depth_pro/layers/fov.rs +++ b/src/model/depth_pro/layers/fov.rs @@ -7,11 +7,11 @@ use burn::{ prelude::*, }; -use crate::model::{ - depth_pro::{InterpolationMethod, resize_bilinear_align_corners_false, resize_bilinear_scale}, - dino::DinoVisionTransformer, +use crate::model::depth_pro::{ + InterpolationMethod, resize_bilinear_align_corners_false, resize_bilinear_scale, }; use burn::tensor::activation::relu; +use burn_dino::model::dino::DinoVisionTransformer; #[derive(Module, Debug)] struct ConvActivation { @@ -63,7 +63,7 @@ impl FOVNetwork { pub fn new( device: &B::Device, num_features: usize, - fov_encoder: Option>, + fov_encoder: Option<(DinoVisionTransformer, usize)>, interpolation: InterpolationMethod, ) -> Self { let mut downsample_blocks = Vec::new(); @@ -72,8 +72,7 @@ impl FOVNetwork { let mut downsample_input_scale = None; let mut encoder = None; - if let Some(model) = fov_encoder { - let embed_dim = model.embedding_dimension(); + if let Some((model, embed_dim)) = fov_encoder { encoder_proj = Some(LinearConfig::new(embed_dim, num_features / 2).init(device)); downsample_input_scale = Some([0.25, 0.25]); diff --git a/src/model/depth_pro/layers/vit.rs b/src/model/depth_pro/layers/vit.rs index 4d2bc0d..d4406d2 100644 --- a/src/model/depth_pro/layers/vit.rs +++ b/src/model/depth_pro/layers/vit.rs @@ -1,6 +1,5 @@ use burn::prelude::*; - -use crate::model::dino::{DinoVisionTransformer, DinoVisionTransformerConfig}; +use burn_dino::model::dino::{DinoVisionTransformer, DinoVisionTransformerConfig}; #[derive(Clone, Debug)] pub struct ViTConfig { @@ -50,18 +49,49 @@ pub fn create_vit( let config = vit_config_from_preset(preset) .unwrap_or_else(|| panic!("unsupported ViT preset `{preset}`")); - let vit = match preset { - DINOV2_L16_384 => { - DinoVisionTransformerConfig::vitl(Some(config.img_size), Some(config.patch_size)) - .init(device) - } - DINOV2_L16_128 => { + let mut builder = match preset { + DINOV2_L16_384 | DINOV2_L16_128 => { DinoVisionTransformerConfig::vitl(Some(config.img_size), Some(config.patch_size)) - .init(device) } // Safety: unreachable due to unwrap above. _ => unreachable!(), }; + builder.block_config.attn.quiet_softmax = false; + builder.register_token_count = 0; + builder.use_register_tokens = false; + builder.normalize_intermediate_tokens = false; + + let vit = builder.init(device); + (vit, config) } + +#[cfg(test)] +mod tests { + use super::*; + + type TestBackend = crate::InferenceBackend; + + #[test] + fn dinov2_patch_count_matches_grid() { + let device = ::Device::default(); + let (vit, config) = create_vit::(&device, DINOV2_L16_384); + let grid = config.grid_size(); + + let input = Tensor::::ones( + [1, config.in_chans, config.img_size, config.img_size], + &device, + ); + let output = vit.forward(input, None); + let dims: [usize; 3] = output.x_norm_patchtokens.shape().dims(); + + assert_eq!( + dims[1], + grid * grid, + "patch tokens ({}) did not match expected grid size ({})", + dims[1], + grid * grid + ); + } +} diff --git a/src/model/depth_pro/mod.rs b/src/model/depth_pro/mod.rs index 09caf97..55555b3 100644 --- a/src/model/depth_pro/mod.rs +++ b/src/model/depth_pro/mod.rs @@ -144,21 +144,16 @@ pub struct HeadDebug { impl DepthPro { pub fn new(device: &B::Device, config: DepthProConfig) -> Self { let (patch_encoder, patch_config) = create_vit(device, &config.patch_encoder_preset); - let (image_encoder, _) = create_vit(device, &config.image_encoder_preset); + let (image_encoder, image_config) = create_vit(device, &config.image_encoder_preset); let interpolation = config.interpolation; - let fov_encoder = config - .fov_encoder_preset - .as_ref() - .filter(|_| config.use_fov_head) - .map(|preset| create_vit(device, preset).0); - let encoder = DepthProEncoder::new( device, patch_config.encoder_feature_dims.clone(), patch_encoder, &patch_config, image_encoder, + image_config.embed_dim, patch_config.encoder_feature_layer_ids.clone(), config.decoder_features, interpolation, @@ -171,9 +166,20 @@ impl DepthPro { let head = DepthHead::new(device, config.decoder_features, (32, 1)); - let fov = config - .use_fov_head - .then(|| FOVNetwork::new(device, config.decoder_features, fov_encoder, interpolation)); + let fov = if config.use_fov_head { + let fov_encoder = config.fov_encoder_preset.as_ref().map(|preset| { + let (encoder, vit_config) = create_vit(device, preset); + (encoder, vit_config.embed_dim) + }); + Some(FOVNetwork::new( + device, + config.decoder_features, + fov_encoder, + interpolation, + )) + } else { + None + }; Self { encoder, @@ -358,7 +364,6 @@ impl DepthPro { } } - /// fovy = 2 * atan( (H/W) * tan(fovx/2) ) /// uses raján atan approx on [0,1] with range reduction for |x|>1. /// input: fovx_rad (radians), output: fovy_rad (radians). @@ -367,7 +372,7 @@ pub fn fovy_from_fovx_rad( h: usize, w: usize, ) -> Tensor { - let k = 0.273; // raján constant + let k = 0.273; // raján constant let pi_over_4 = core::f64::consts::FRAC_PI_4; let pi_over_2 = core::f64::consts::FRAC_PI_2; @@ -380,17 +385,27 @@ pub fn fovy_from_fovx_rad( // atan(t): range reduction + raján on [0,1] let s = t.clone().sign(); let ax = t.abs(); - let use_inv = ax.clone().greater_elem(1.0).float(); // 1 where |x|>1 else 0 + let use_inv = ax.clone().greater_elem(1.0).float(); // 1 where |x|>1 else 0 let inv = ax.clone().recip(); - let xr = ax.mul(use_inv.clone().neg().add_scalar(1.0)) // (1-use_inv)*ax - .add(inv.mul(use_inv.clone())); // + use_inv*(1/ax) + let xr = ax + .mul(use_inv.clone().neg().add_scalar(1.0)) // (1-use_inv)*ax + .add(inv.mul(use_inv.clone())); // + use_inv*(1/ax) // atan(xr) ≈ xr * (π/4 + k*(1 - xr)), xr∈[0,1] - let inner = xr.clone().neg().add_scalar(1.0).mul_scalar(k).add_scalar(pi_over_4); + let inner = xr + .clone() + .neg() + .add_scalar(1.0) + .mul_scalar(k) + .add_scalar(pi_over_4); let atan_reduced = xr.mul(inner); // undo reduction: atan(ax) = atan_reduced + use_inv * (π/2 - 2*atan_reduced) - let delta = atan_reduced.clone().mul_scalar(2.0).neg().add_scalar(pi_over_2); + let delta = atan_reduced + .clone() + .mul_scalar(2.0) + .neg() + .add_scalar(pi_over_2); let atan_ax = atan_reduced.add(delta.mul(use_inv)); // restore sign and finish @@ -398,7 +413,6 @@ pub fn fovy_from_fovx_rad( atan_t.mul_scalar(2.0) } - pub(crate) fn maybe_fix_conv_transpose2d(conv: &mut ConvTranspose2d) { let weight = conv.weight.val(); let dims: [usize; 4] = weight.shape().dims(); @@ -416,7 +430,6 @@ pub(crate) fn maybe_fix_conv_transpose2d(conv: &mut ConvTranspose2d< } } - #[cfg(test)] mod tests { use super::*; diff --git a/src/model/dino/layers/attention.rs b/src/model/dino/layers/attention.rs deleted file mode 100644 index 99c7411..0000000 --- a/src/model/dino/layers/attention.rs +++ /dev/null @@ -1,105 +0,0 @@ -use burn::{ - prelude::*, - tensor::activation::{quiet_softmax, softmax}, -}; - -#[derive(Config, Debug)] -pub struct AttentionConfig { - pub dim: usize, - pub num_heads: usize, - pub qkv_bias: bool, - pub proj_bias: bool, - pub attn_drop: f64, - pub proj_drop: f64, - pub quiet_softmax: bool, -} - -impl Default for AttentionConfig { - fn default() -> Self { - Self { - dim: 768, - num_heads: 12, - qkv_bias: true, - proj_bias: true, - attn_drop: 0.0, - proj_drop: 0.0, - quiet_softmax: false, - } - } -} - -impl AttentionConfig { - pub fn init(&self, device: &B::Device) -> Attention { - Attention::new(device, self.clone()) - } -} - -#[derive(Module, Debug)] -pub struct Attention { - pub qkv: nn::Linear, - pub attn_drop: nn::Dropout, - pub proj: nn::Linear, - pub proj_drop: nn::Dropout, - pub num_heads: usize, - pub scale: f32, - pub quiet_softmax: bool, -} - -impl Attention { - pub fn new(device: &B::Device, config: AttentionConfig) -> Self { - let head_dim = config.dim / config.num_heads; - let scale = (head_dim as f32).powf(-0.5); - - let qkv = nn::LinearConfig::new(config.dim, config.dim * 3) - .with_bias(config.qkv_bias) - .init::(device); - - let attn_drop = nn::DropoutConfig::new(config.attn_drop).init(); - - let proj = nn::LinearConfig::new(config.dim, config.dim) - .with_bias(config.proj_bias) - .init::(device); - - let proj_drop = nn::DropoutConfig::new(config.proj_drop).init(); - - Self { - qkv, - attn_drop, - proj, - proj_drop, - num_heads: config.num_heads, - scale, - quiet_softmax: config.quiet_softmax, - } - } - - #[allow(non_snake_case, clippy::single_range_in_vec_init)] - pub fn forward(&self, x: Tensor) -> Tensor { - let [B, N, C] = x.shape().dims(); - - let qkv = self - .qkv - .forward(x) - .reshape([B, N, 3, self.num_heads, C / self.num_heads]) - .permute([2, 0, 3, 1, 4]); - - let q: Tensor = qkv.clone().slice([0..1]).squeeze_dim(0) * self.scale; - let k = qkv.clone().slice([1..2]).squeeze_dim(0); - let v = qkv.slice([2..3]).squeeze_dim(0); - - let attn = q.matmul(k.swap_dims(2, 3)); - - let attn = if self.quiet_softmax { - quiet_softmax(attn, 3) - } else { - softmax(attn, 3) - }; - - let attn = self.attn_drop.forward(attn); - - let x = attn.matmul(v).swap_dims(1, 2).reshape([B, N, C]); - - let x = self.proj.forward(x); - self.proj_drop.forward(x) - } -} diff --git a/src/model/dino/layers/block.rs b/src/model/dino/layers/block.rs deleted file mode 100644 index 765161f..0000000 --- a/src/model/dino/layers/block.rs +++ /dev/null @@ -1,105 +0,0 @@ -use burn::prelude::*; - -use crate::model::dino::layers::{ - attention::{Attention, AttentionConfig}, - layer_norm::{LayerNorm, LayerNormConfig}, - layer_scale::{LayerScale, LayerScaleConfig}, - mlp::{Mlp, MlpConfig}, -}; - -#[derive(Config, Debug)] -pub struct BlockConfig { - pub attn: AttentionConfig, - pub layer_scale: Option, - pub mlp_ratio: f32, -} - -impl Default for BlockConfig { - fn default() -> Self { - Self { - attn: AttentionConfig::default(), - layer_scale: None, - mlp_ratio: 4.0, - } - } -} - -impl BlockConfig { - pub fn init(&self, device: &B::Device) -> Block { - Block::new(device, self.clone()) - } -} - -#[derive(Module, Debug)] -pub struct Block { - norm1: LayerNorm, - attn: Attention, - ls1: Option>, - // TODO: drop_path_1 - norm2: LayerNorm, - mlp: Mlp, - ls2: Option>, - // TODO: drop_path_2 -} - -impl Block { - pub fn new(device: &B::Device, config: BlockConfig) -> Self { - let norm1 = LayerNormConfig::new(config.attn.dim).init(device); - let attn = config.attn.init(device); - - // self.ls1 = LayerScale(dim, init_values=init_values) if init_values else nn.Identity() - // self.drop_path1 = DropPath(drop_path) if drop_path > 0.0 else nn.Identity() - let ls1 = if let Some(layer_scale_config) = &config.layer_scale { - layer_scale_config.init::(device).into() - } else { - None - }; - - let norm2 = LayerNormConfig::new(config.attn.dim).init(device); - - let mlp_hidden_dim = (config.attn.dim as f32 * config.mlp_ratio) as usize; - let mlp = MlpConfig::new(config.attn.dim) - .with_hidden_features(mlp_hidden_dim.into()) - .with_bias(true.into()) - .init::(device); - - let ls2 = if let Some(layer_scale_config) = &config.layer_scale { - layer_scale_config.init::(device).into() - } else { - None - }; - // self.drop_path2 = DropPath(drop_path) if drop_path > 0.0 else nn.Identity() - - Self { - norm1, - attn, - ls1, - norm2, - mlp, - ls2, - } - } - - pub fn forward(&self, x: Tensor) -> Tensor { - // TODO: implement train mode drop_path and `drop_add_residual_stochastic_depth` for sample_drop_ratio > 0.1 - - let norm = self.norm1.forward(x.clone()); - let residual = self.attn.forward(norm.clone()); - let residual = if let Some(ls1) = &self.ls1 { - ls1.forward(residual) - } else { - residual - }; - - let x = x + residual; - - let norm = self.norm2.forward(x.clone()); - let mlp = self.mlp.forward(norm.clone()); - let residual = if let Some(ls2) = &self.ls2 { - ls2.forward(mlp.clone()) - } else { - mlp.clone() - }; - x + residual - } -} diff --git a/src/model/dino/layers/layer_norm.rs b/src/model/dino/layers/layer_norm.rs deleted file mode 100644 index b6185d5..0000000 --- a/src/model/dino/layers/layer_norm.rs +++ /dev/null @@ -1,48 +0,0 @@ -use burn::{module::Param, nn::Initializer, prelude::*}; - -#[derive(Config, Debug)] -pub struct LayerNormConfig { - pub dim: usize, -} - -impl Default for LayerNormConfig { - fn default() -> Self { - Self::new(0) - } -} - -impl LayerNormConfig { - pub fn init(&self, device: &B::Device) -> LayerNorm { - LayerNorm::new(device, self) - } -} - -#[derive(Module, Debug)] -pub struct LayerNorm { - pub gamma: Param>, - pub beta: Param>, -} - -impl LayerNorm { - pub fn new(device: &B::Device, config: &LayerNormConfig) -> Self { - let gamma = Initializer::Ones.init([config.dim], device); - let beta = Initializer::Zeros.init([config.dim], device); - - Self { gamma, beta } - } - - pub fn forward(&self, x: Tensor) -> Tensor { - let n = x.shape().dims[D - 1] as f32; - - let mean = x.clone().mean_dim(D - 1); - let diff = x.clone().sub(mean); - let var = diff.clone().powi_scalar(2).sum_dim(D - 1).div_scalar(n); - - let input_normalized = diff.div(var.add_scalar(1e-5).sqrt()); - - // TODO: numerically different than torch layernorm, write test - input_normalized - .mul(self.gamma.val().unsqueeze()) - .add(self.beta.val().unsqueeze()) - } -} diff --git a/src/model/dino/layers/layer_scale.rs b/src/model/dino/layers/layer_scale.rs deleted file mode 100644 index 28729af..0000000 --- a/src/model/dino/layers/layer_scale.rs +++ /dev/null @@ -1,36 +0,0 @@ -use burn::{module::Param, nn::Initializer, prelude::*}; - -#[derive(Config, Debug)] -pub struct LayerScaleConfig { - pub dim: usize, -} - -impl Default for LayerScaleConfig { - fn default() -> Self { - Self::new(0) - } -} - -impl LayerScaleConfig { - pub fn init(&self, device: &B::Device) -> LayerScale { - LayerScale::new(device, self) - } -} - -#[derive(Module, Debug)] -pub struct LayerScale { - pub gamma: Param>, -} - -impl LayerScale { - pub fn new(device: &B::Device, config: &LayerScaleConfig) -> Self { - let gamma = Initializer::Constant { value: 1e-5 }.init([config.dim], device); - - Self { gamma } - } - - pub fn forward(&self, x: Tensor) -> Tensor { - let shape = x.shape(); - x.mul(self.gamma.val().expand(shape)) - } -} diff --git a/src/model/dino/layers/mlp.rs b/src/model/dino/layers/mlp.rs deleted file mode 100644 index 7f4f702..0000000 --- a/src/model/dino/layers/mlp.rs +++ /dev/null @@ -1,56 +0,0 @@ -use burn::prelude::*; - -#[derive(Config, Debug)] -pub struct MlpConfig { - pub in_features: usize, - pub hidden_features: Option, - pub out_features: Option, - pub dropout: Option, - pub bias: Option, -} - -impl MlpConfig { - pub fn init(&self, device: &B::Device) -> Mlp { - Mlp::new(device, self.clone()) - } -} - -#[derive(Module, Debug)] -pub struct Mlp { - pub act: nn::Gelu, - pub dropout: nn::Dropout, - pub fc1: nn::Linear, - pub fc2: nn::Linear, -} - -impl Mlp { - fn new(device: &B::Device, config: MlpConfig) -> Self { - let hidden_features = config.hidden_features.unwrap_or(config.in_features); - let fc1 = nn::LinearConfig::new(config.in_features, hidden_features) - .with_bias(config.bias.unwrap_or(false)) - .init(device); - - let out_features = config.out_features.unwrap_or(config.in_features); - let fc2 = nn::LinearConfig::new(hidden_features, out_features) - .with_bias(config.bias.unwrap_or(false)) - .init(device); - - let act = nn::Gelu::new(); - let dropout = config.dropout.unwrap_or(nn::DropoutConfig::new(0.0)).init(); - - Self { - act, - dropout, - fc1, - fc2, - } - } - - pub fn forward(&self, x: Tensor) -> Tensor { - let x = self.fc1.forward(x); - let x = self.act.forward(x); - let x = self.dropout.forward(x); - let x = self.fc2.forward(x); - self.dropout.forward(x) - } -} diff --git a/src/model/dino/layers/mod.rs b/src/model/dino/layers/mod.rs deleted file mode 100644 index a17a7fd..0000000 --- a/src/model/dino/layers/mod.rs +++ /dev/null @@ -1,6 +0,0 @@ -pub mod attention; -pub mod block; -pub mod layer_norm; -pub mod layer_scale; -pub mod mlp; -pub mod patch_embed; diff --git a/src/model/dino/layers/patch_embed.rs b/src/model/dino/layers/patch_embed.rs deleted file mode 100644 index 7d880ec..0000000 --- a/src/model/dino/layers/patch_embed.rs +++ /dev/null @@ -1,50 +0,0 @@ -use burn::prelude::*; - -#[derive(Config, Debug)] -pub struct PatchEmbedConfig { - pub image_size: usize, - pub patch_size: usize, - pub input_channels: usize, - pub embedding_dimension: usize, -} - -impl Default for PatchEmbedConfig { - fn default() -> Self { - Self { - image_size: 224, - patch_size: 16, - input_channels: 3, - embedding_dimension: 768, - } - } -} - -impl PatchEmbedConfig { - pub fn init(&self, device: &B::Device) -> PatchEmbed { - PatchEmbed::new(device, self.clone()) - } -} - -#[derive(Module, Debug)] -pub struct PatchEmbed { - proj: nn::conv::Conv2d, -} - -impl PatchEmbed { - pub fn new(device: &B::Device, config: PatchEmbedConfig) -> Self { - let kernel_size = [config.patch_size, config.patch_size]; - let proj = nn::conv::Conv2dConfig::new( - [config.input_channels, config.embedding_dimension], - kernel_size, - ) - .with_stride(kernel_size) - .init(device); - - Self { proj } - } - - #[allow(non_snake_case)] - pub fn forward(&self, x: Tensor) -> Tensor { - self.proj.forward(x).flatten(2, 3).swap_dims(1, 2) - } -} diff --git a/src/model/dino/mod.rs b/src/model/dino/mod.rs deleted file mode 100644 index 7194162..0000000 --- a/src/model/dino/mod.rs +++ /dev/null @@ -1,390 +0,0 @@ -use burn::{ - module::Param, - nn::{Gelu, Initializer}, - prelude::*, -}; - -use layers::{ - attention::AttentionConfig, - block::{Block, BlockConfig}, - layer_norm::{LayerNorm, LayerNormConfig}, - layer_scale::LayerScaleConfig, - patch_embed::{PatchEmbed, PatchEmbedConfig}, -}; - -pub mod layers; - -#[derive(Config, Debug)] -pub struct DinoVisionTransformerConfig { - pub image_size: usize, - pub patch_size: usize, - pub input_channels: usize, - pub embedding_dimension: usize, - pub depth: usize, - pub block_config: BlockConfig, - pub positional_encoding_interpolate: nn::interpolate::Interpolate2dConfig, - pub num_patches: usize, - - #[config(default = "Initializer::Normal{mean:0.02, std:1.0}")] - pub initializer: Initializer, -} - -impl DinoVisionTransformerConfig { - pub fn init(&self, device: &B::Device) -> DinoVisionTransformer { - DinoVisionTransformer::new(device, self.clone()) - } - - #[allow(non_snake_case)] - pub fn from_size(image_size: Option, patch_size: Option) -> Self { - let image_size = image_size.unwrap_or(518); - let patch_size = patch_size.unwrap_or(14); - - let interpolate_size = [image_size / patch_size, image_size / patch_size]; - - let dim = 768; - - let w0 = image_size / patch_size; - let h0 = image_size / patch_size; - let num_patches = w0 * h0; - - // let M = num_patches.isqrt(); - // let sx = (w0 as f32 * 0.1) / M as f32; - // let sy = (h0 as f32 * 0.1) / M as f32; - - Self::new( - image_size, - patch_size, - 3, - dim, - 12, - BlockConfig { - attn: AttentionConfig { - dim, - ..Default::default() - }, - layer_scale: LayerScaleConfig { dim }.into(), - ..Default::default() - }, - nn::interpolate::Interpolate2dConfig { - mode: nn::interpolate::InterpolateMode::Cubic, - output_size: interpolate_size.into(), - scale_factor: None, //[sx, sy].into(), - }, - num_patches, - ) - } - - pub fn vits(image_size: Option, patch_size: Option) -> Self { - let embedding_dimension = 384; - Self { - embedding_dimension, - block_config: BlockConfig { - attn: AttentionConfig { - dim: embedding_dimension, - num_heads: 6, - ..Default::default() - }, - layer_scale: LayerScaleConfig { - dim: embedding_dimension, - } - .into(), - ..Default::default() - }, - ..Self::from_size(image_size, patch_size) - } - } - - pub fn vitb(image_size: Option, patch_size: Option) -> Self { - Self::from_size(image_size, patch_size) - } - - pub fn vitl(image_size: Option, patch_size: Option) -> Self { - let embedding_dimension = 1024; - Self { - embedding_dimension, - depth: 24, - block_config: BlockConfig { - attn: AttentionConfig { - dim: embedding_dimension, - num_heads: 16, - ..Default::default() - }, - layer_scale: LayerScaleConfig { - dim: embedding_dimension, - } - .into(), - ..Default::default() - }, - ..Self::from_size(image_size, patch_size) - } - } - - pub fn vitg(image_size: Option, patch_size: Option) -> Self { - let embedding_dimension = 1536; - Self { - embedding_dimension, - depth: 40, - block_config: BlockConfig { - attn: AttentionConfig { - dim: embedding_dimension, - num_heads: 24, - ..Default::default() - }, - layer_scale: LayerScaleConfig { - dim: embedding_dimension, - } - .into(), - ..Default::default() - }, - ..Self::from_size(image_size, patch_size) - } - } -} - -#[derive(Debug, Clone)] -pub struct DinoOutput { - pub x_norm_clstoken: Tensor, - pub x_norm_patchtokens: Tensor, - pub x_prenorm: Tensor, - pub masks: Option>, -} - -#[derive(Module, Debug)] -pub struct DinoVisionTransformer { - activation: Gelu, - cls_token: Param>, - pub pos_embed: Param>, - mask_token: Param>, - interpolate: nn::interpolate::Interpolate2d, - patch_embed: PatchEmbed, - norm: LayerNorm, - blocks: Vec>, - patch_size: usize, -} - -impl DinoVisionTransformer { - fn finalize_output( - &self, - tokens: Tensor, - masks: Option>, - ) -> DinoOutput { - let x_norm = self.norm.forward(tokens.clone()); - - let b_dim = tokens.shape().dims[0]; - let n_dim = tokens.shape().dims[1]; - - let x_norm_clstoken = x_norm.clone().slice([0..b_dim, 0..1]).squeeze_dim(1); - let x_norm_patchtokens = x_norm.clone().slice([0..b_dim, 1..n_dim]); - - DinoOutput { - x_norm_clstoken, - x_norm_patchtokens, - x_prenorm: tokens, - masks, - } - } - - pub fn new(device: &B::Device, config: DinoVisionTransformerConfig) -> Self { - // TODO: initialize cls_token and pos_embed with trainable weights - // trunc_normal_(self.pos_embed, std=0.02) - // nn.init.normal_(self.cls_token, std=1e-6) - // if self.register_tokens is not None: - // nn.init.normal_(self.register_tokens, std=1e-6) - // named_apply(init_weights_vit_timm, self) - // if isinstance(module, nn.Linear): - // trunc_normal_(module.weight, std=0.02) - // if module.bias is not None: - // nn.init.zeros_(module.bias) - - let cls_token = config - .initializer - .init([1, 1, config.embedding_dimension], device); - - let num_tokens = 1; - let pos_embed = config.initializer.init( - [ - 1, - config.num_patches + num_tokens, - config.embedding_dimension, - ], - device, - ); - - let mask_token = config - .initializer - .init([1, config.embedding_dimension], device); - - let interpolate = config.positional_encoding_interpolate.init(); - - let patch_embed = PatchEmbedConfig::new( - config.image_size, - config.patch_size, - config.input_channels, - config.embedding_dimension, - ) - .init(device); - - let norm: LayerNorm = LayerNormConfig::new(config.embedding_dimension).init(device); - - let mut blocks = Vec::with_capacity(config.depth); - for _ in 0..config.depth { - let block = config.block_config.init(device); - blocks.push(block); - } - - Self { - activation: Gelu::new(), - cls_token, - pos_embed, - mask_token, - interpolate, - patch_embed, - norm, - blocks, - patch_size: config.patch_size, - } - } - - #[allow(non_snake_case)] - pub fn interpolate_pos_encoding(&self, x: Tensor, W: usize, H: usize) -> Tensor { - let npatch = x.shape().dims[1] - 1; - let N = self.pos_embed.shape().dims[1] - 1; - - if npatch == N && W == H { - return self.pos_embed.val().clone(); - } - - let b_dim = self.pos_embed.shape().dims[0]; - let n_dim = self.pos_embed.shape().dims[1]; - // let c_dim: usize = self.pos_embed.shape().dims[2]; - - let class_pos_embed: Tensor = self - .pos_embed - .val() - .clone() - .slice([0..b_dim, 0..1]) - .squeeze_dim(1); - let patch_pos_embed = self.pos_embed.val().clone().slice([0..b_dim, 1..n_dim]); - let dim = x.shape().dims[2]; - let M = N.isqrt(); - - assert!(N == M * M, "number of patches should be a square number",); - - let patch_pos_embed = self - .interpolate - .forward( - patch_pos_embed - .reshape([1, M, M, dim]) - .permute([0, 3, 1, 2]), - ) - .permute([0, 2, 3, 1]) - .reshape([1_i32, -1, dim as i32]); - - Tensor::cat(vec![class_pos_embed.unsqueeze_dim(0), patch_pos_embed], 1) - } - - #[allow(non_snake_case)] - pub fn prepare_tokens_with_masks( - &self, - x: Tensor, - mask: Option>, - ) -> Tensor { - // TODO: H, W? - let [_B, _C, W, H] = x.shape().dims(); - - let x = self.patch_embed.forward(x); - let x = if let Some(mask) = mask { - x.mask_where(mask, self.mask_token.val().unsqueeze_dim(0)) - } else { - x - }; - - let x = Tensor::cat( - vec![ - self.cls_token - .val() - .expand([x.shape().dims[0] as i64, -1, -1]), - x, - ], - 1, - ); - - let residual = self.interpolate_pos_encoding(x.clone(), W, H); - x + residual.clone() - } - - #[allow(non_snake_case)] - pub fn intermediate_layers( - &self, - x: Tensor, - layers: &[usize], - ) -> (Vec>, Vec>) { - let mut x = self.prepare_tokens_with_masks(x, None); - - let mut class_tokens = Vec::with_capacity(layers.len()); - let mut output = Vec::with_capacity(layers.len()); - - for (i, block) in self.blocks.iter().enumerate() { - x = block.forward(x); - - if layers.contains(&i) { - let x = self.norm.forward(x.clone()); - - let class_token: Tensor = - x.clone().slice([0..x.shape().dims[0], 0..1]).squeeze_dim(1); - let out = x - .clone() - .slice([0..x.shape().dims[0], 1..x.shape().dims[1]]); - - let [B, _, W, H] = x.shape().dims(); - let reshaped = out - .reshape([ - B as i32, - (W / self.patch_size) as i32, - (H / self.patch_size) as i32, - -1, - ]) - .permute([0, 3, 1, 2]); - - class_tokens.push(class_token); - output.push(reshaped); - } - } - - (class_tokens, output) - } - - pub fn forward_with_intermediate_tokens( - &self, - x: Tensor, - layers: &[usize], - ) -> (DinoOutput, Vec>) { - let mut tokens = self.prepare_tokens_with_masks(x, None); - let mut selected = Vec::with_capacity(layers.len()); - - for (index, block) in self.blocks.iter().enumerate() { - tokens = block.forward(tokens); - - if layers.contains(&index) { - selected.push(tokens.clone()); - } - } - - let output = self.finalize_output(tokens, None); - (output, selected) - } - - pub fn embedding_dimension(&self) -> usize { - self.cls_token.val().shape().dims[2] - } - - pub fn forward(&self, x: Tensor, masks: Option>) -> DinoOutput { - let mut tokens = self.prepare_tokens_with_masks(x, None); - - for block in &self.blocks { - tokens = block.forward(tokens); - } - - self.finalize_output(tokens, masks) - } -} diff --git a/src/model/mod.rs b/src/model/mod.rs index 18bfea2..4ef4c80 100644 --- a/src/model/mod.rs +++ b/src/model/mod.rs @@ -1,2 +1 @@ pub mod depth_pro; -pub mod dino;