├── .envrc ├── .gitignore ├── src ├── lib.rs ├── run.rs ├── train.rs ├── tokenizer.rs ├── main.rs └── model.rs ├── Cargo.toml ├── .github └── workflows │ └── ci.yaml ├── examples └── tokenize.rs ├── LICENSE ├── flake.lock ├── flake.nix ├── README.md └── Cargo.lock /.envrc: -------------------------------------------------------------------------------- 1 | use flake 2 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .data 2 | .direnv 3 | result 4 | target 5 | -------------------------------------------------------------------------------- /src/lib.rs: -------------------------------------------------------------------------------- 1 | #![allow(clippy::too_many_arguments)] 2 | 3 | pub mod model; 4 | pub mod tokenizer; 5 | 6 | mod run; 7 | mod train; 8 | 9 | pub use run::run; 10 | pub use train::{train, TrainingConfig}; 11 | 12 | pub const BOLD: &str = "\x1b[1m"; 13 | pub const RESET: &str = "\x1b[0m"; 14 | -------------------------------------------------------------------------------- /Cargo.toml: -------------------------------------------------------------------------------- 1 | [package] 2 | name = "gpt-burn" 3 | version = "0.1.0" 4 | edition = "2021" 5 | 6 | [dependencies] 7 | burn = { version = "0.13", features = [ 8 | "fusion", 9 | "ndarray", 10 | "train", 11 | "vision", 12 | "wgpu", 13 | ] } 14 | bincode = "1" 15 | clap = { version = "4", features = ["derive"] } 16 | indicatif = { version = "0.17", features = ["rayon"] } 17 | rand = "0.8" 18 | rayon = "1" 19 | serde = { version = "1", features = ["derive"] } 20 | -------------------------------------------------------------------------------- /.github/workflows/ci.yaml: -------------------------------------------------------------------------------- 1 | name: CI 2 | 3 | on: 4 | push: 5 | workflow_dispatch: 6 | 7 | jobs: 8 | check: 9 | runs-on: ubuntu-latest 10 | permissions: 11 | id-token: "write" 12 | contents: "read" 13 | steps: 14 | - uses: actions/checkout@v4 15 | - uses: DeterminateSystems/nix-installer-action@main 16 | - uses: DeterminateSystems/magic-nix-cache-action@main 17 | - uses: DeterminateSystems/flake-checker-action@main 18 | - name: Run `nix flake check` 19 | run: nix flake check -L 20 | -------------------------------------------------------------------------------- /examples/tokenize.rs: -------------------------------------------------------------------------------- 1 | use gpt_burn::{ 2 | tokenizer::{CharTokenizer, SimpleVowelTokenizer, Tokenizer}, 3 | BOLD, RESET, 4 | }; 5 | 6 | fn main() { 7 | fn print_tokens(tokenizer: &impl Tokenizer, text: &str) { 8 | println!( 9 | "{BOLD}Tokens:{RESET} {:?}", 10 | tokenizer 11 | .encode(text) 12 | .into_iter() 13 | .map(|id| tokenizer.decode(&[id])) 14 | .collect::>() 15 | ); 16 | println!("{BOLD}Values:{RESET} {:?}", tokenizer.encode(text)); 17 | } 18 | 19 | let text = "Albert Einstein war ein schweizerisch-US-amerikanischer theoretischer Physiker deutscher Herkunft."; 20 | println!("{BOLD}Example text:{RESET} {text}"); 21 | 22 | // CharTokenizer 23 | println!("{BOLD}CharTokenizer{RESET}",); 24 | { 25 | let tokenizer = CharTokenizer::new(); 26 | print_tokens(&tokenizer, text); 27 | } 28 | 29 | // SimpleVowelTokenizer 30 | println!("{BOLD}SimpleVowelTokenizer{RESET}",); 31 | { 32 | let tokenizer = { 33 | let vocab_size = 99; 34 | let tokens = SimpleVowelTokenizer::tokenize(text).collect::>(); 35 | SimpleVowelTokenizer::new(&tokens, vocab_size) 36 | }; 37 | print_tokens(&tokenizer, text); 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /src/run.rs: -------------------------------------------------------------------------------- 1 | use { 2 | crate::{model::Model, tokenizer::Tokenizer, BOLD, RESET}, 3 | burn::{prelude::*, tensor::activation}, 4 | rand::{distributions::WeightedIndex, prelude::*}, 5 | std::io::{self, Write}, 6 | }; 7 | 8 | pub fn run( 9 | model: &Model, 10 | tokenizer: &impl Tokenizer, 11 | prompt: &str, 12 | n_new_tokens: usize, 13 | context_length: usize, 14 | seed: u64, 15 | ) { 16 | let device = ::Device::default(); 17 | let mut rng = StdRng::seed_from_u64(seed); 18 | let mut ids = tokenizer.encode(prompt); 19 | 20 | print!("{BOLD}{prompt}{RESET}"); 21 | for _ in 0..n_new_tokens { 22 | let x = { 23 | let ids_sliced = &ids[(ids.len() as isize - context_length as isize).max(0) as usize..]; 24 | Tensor::::from_data( 25 | Data::new( 26 | ids_sliced.iter().map(|&x| x as i32).collect(), 27 | Shape::new([1, ids_sliced.len()]), 28 | ) 29 | .convert(), 30 | &device, 31 | ) 32 | }; 33 | let logits = model.forward(x); 34 | let n = logits.dims()[1]; 35 | let slice = logits.slice([(0..1), (n - 1..n)]).flatten::<1>(0, 2); 36 | let probs = activation::softmax(slice, 0) 37 | .into_data() 38 | .convert::() 39 | .value; 40 | // don't generate special token 41 | let distribution = WeightedIndex::new(&probs[..probs.len() - 1]).unwrap(); 42 | let prediction = distribution.sample(&mut rng) as usize; 43 | ids.push(prediction); 44 | print!("{}", tokenizer.decode(&[prediction])); 45 | io::stdout().flush().unwrap(); 46 | } 47 | println!() 48 | } 49 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Copyright © 2024 Felix Andreas 2 | 3 | The Universal Permissive License (UPL), Version 1.0 4 | 5 | Subject to the condition set forth below, permission is hereby granted to any person obtaining a copy of this software, associated documentation and/or data (collectively the "Software"), free of charge and under any and all copyright rights in the Software, and any and all patent rights owned or freely licensable by each licensor hereunder covering either (i) the unmodified Software as contributed to or provided by such licensor, or (ii) the Larger Works (as defined below), to deal in both 6 | 7 | (a) the Software, and 8 | 9 | (b) any piece of software and/or hardware listed in the lrgrwrks.txt file if one is included with the Software (each a “Larger Work” to which the Software is contributed by such licensors), 10 | 11 | without restriction, including without limitation the rights to copy, create derivative works of, display, perform, and distribute the Software and make, use, sell, offer for sale, import, export, have made, and have sold the Software and the Larger Work(s), and to sublicense the foregoing rights on either these or other terms. 12 | 13 | This license is subject to the following condition: 14 | 15 | The above copyright notice and either this complete permission notice or at a minimum a reference to the UPL must be included in all copies or substantial portions of the Software. 16 | 17 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 18 | -------------------------------------------------------------------------------- /src/train.rs: -------------------------------------------------------------------------------- 1 | use { 2 | crate::{ 3 | model::{Model, ModelConfig}, 4 | BOLD, RESET, 5 | }, 6 | burn::{ 7 | module::{AutodiffModule, Module}, 8 | optim::{AdamWConfig, GradientsParams, Optimizer}, 9 | prelude::*, 10 | record::CompactRecorder, 11 | tensor::backend::AutodiffBackend, 12 | }, 13 | rand::prelude::*, 14 | std::{ 15 | fs, 16 | time::{Duration, Instant}, 17 | }, 18 | }; 19 | 20 | #[derive(Config)] 21 | pub struct TrainingConfig { 22 | pub n_steps: usize, 23 | pub batch_size: usize, 24 | pub learning_rate: f64, 25 | pub batches_per_step: usize, 26 | pub validation_size: usize, 27 | pub seed: u64, 28 | pub model: ModelConfig, 29 | pub optimizer: AdamWConfig, 30 | } 31 | 32 | pub fn train( 33 | config: &TrainingConfig, 34 | data_train: Tensor, 35 | data_val: Tensor, 36 | save_checkpoints: bool, 37 | ) -> Model { 38 | let device = data_train.device(); 39 | let mut rng = StdRng::seed_from_u64(config.seed); 40 | 41 | B::seed(config.seed); 42 | 43 | let mut model: Model = config.model.init(&device); 44 | let mut optimizer = config.optimizer.init::>(); 45 | 46 | println!( 47 | "{BOLD}start training{RESET} - parameters: {} \n{}", 48 | model.num_params(), 49 | config 50 | ); 51 | let start = Instant::now(); 52 | for step in 0..config.n_steps { 53 | // evaluate validation loss 54 | let loss_val = { 55 | let (x, y) = get_batch( 56 | &mut rng, 57 | data_val.clone(), 58 | config.validation_size, 59 | config.model.context_length, 60 | ); 61 | let model_valid = model.valid(); 62 | let logits = model_valid.forward(x); 63 | let loss = model_valid.loss(logits, y.clone()); 64 | loss.into_scalar().elem::() 65 | }; 66 | 67 | let mut loss_sum = 0.0; 68 | for _ in 0..config.batches_per_step { 69 | let (x, y) = get_batch( 70 | &mut rng, 71 | data_train.clone(), 72 | config.batch_size, 73 | config.model.context_length, 74 | ); 75 | 76 | // forward pass 77 | let logits = model.forward(x); 78 | let loss = model.loss(logits, y.clone()); 79 | loss_sum += loss.clone().into_scalar().elem::(); 80 | 81 | // backward pass 82 | let grads = loss.backward(); 83 | let grads = GradientsParams::from_grads(grads, &model); 84 | model = optimizer.step(config.learning_rate, model, grads); 85 | } 86 | 87 | let elapsed = start.elapsed(); 88 | 89 | let format_duration = |duration: Duration| { 90 | let seconds = duration.as_secs() % 60; 91 | let minutes = (duration.as_secs() / 60) % 60; 92 | let hours = (duration.as_secs() / 60) / 60; 93 | format!("{hours:02}:{minutes:02}:{seconds:02}") 94 | }; 95 | println!( 96 | "step {:>3}/{}: train loss: {:.4}, val loss: {:.4} ({}/{})", 97 | step + 1, 98 | config.n_steps, 99 | loss_sum / config.batches_per_step as f32, 100 | loss_val, 101 | format_duration(elapsed), 102 | format_duration(elapsed.mul_f64(config.n_steps as f64 / (step + 1) as f64)), 103 | ); 104 | 105 | if save_checkpoints && (step + 6) % 10 == 0 { 106 | let model_path = format!( 107 | ".data/checkpoints/{}_{step}", 108 | std::time::UNIX_EPOCH.elapsed().unwrap().as_secs(), 109 | ); 110 | 111 | println!("{BOLD}store checkpoint model to: {model_path}{RESET}"); 112 | fs::create_dir_all(&model_path).ok(); 113 | 114 | config.save(format!("{model_path}/config.json")).unwrap(); 115 | model 116 | .clone() 117 | .save_file(format!("{model_path}/model"), &CompactRecorder::new()) 118 | .unwrap(); 119 | } 120 | } 121 | 122 | model 123 | } 124 | 125 | #[allow(clippy::single_range_in_vec_init)] 126 | fn get_batch( 127 | rng: &mut impl Rng, 128 | data: Tensor, 129 | batch_size: usize, 130 | context_length: usize, 131 | ) -> (Tensor, Tensor) { 132 | let indices = (0..batch_size) 133 | .map(|_| rng.gen_range(0..data.dims()[0] - context_length)) 134 | .collect::>(); 135 | 136 | let x = Tensor::stack::<2>( 137 | indices 138 | .iter() 139 | .map(|&index| data.clone().slice([index..index + context_length])) 140 | .collect::>(), 141 | 0, 142 | ); 143 | let y = Tensor::stack::<2>( 144 | indices 145 | .iter() 146 | .map(|&index| data.clone().slice([index + 1..index + context_length + 1])) 147 | .collect::>(), 148 | 0, 149 | ); 150 | (x, y) 151 | } 152 | -------------------------------------------------------------------------------- /flake.lock: -------------------------------------------------------------------------------- 1 | { 2 | "nodes": { 3 | "crane": { 4 | "inputs": { 5 | "nixpkgs": [ 6 | "nixpkgs" 7 | ] 8 | }, 9 | "locked": { 10 | "lastModified": 1715274763, 11 | "narHash": "sha256-3Iv1PGHJn9sV3HO4FlOVaaztOxa9uGLfOmUWrH7v7+A=", 12 | "owner": "ipetkov", 13 | "repo": "crane", 14 | "rev": "27025ab71bdca30e7ed0a16c88fd74c5970fc7f5", 15 | "type": "github" 16 | }, 17 | "original": { 18 | "owner": "ipetkov", 19 | "repo": "crane", 20 | "type": "github" 21 | } 22 | }, 23 | "devshell": { 24 | "inputs": { 25 | "flake-utils": "flake-utils", 26 | "nixpkgs": [ 27 | "nixpkgs" 28 | ] 29 | }, 30 | "locked": { 31 | "lastModified": 1713532798, 32 | "narHash": "sha256-wtBhsdMJA3Wa32Wtm1eeo84GejtI43pMrFrmwLXrsEc=", 33 | "owner": "numtide", 34 | "repo": "devshell", 35 | "rev": "12e914740a25ea1891ec619bb53cf5e6ca922e40", 36 | "type": "github" 37 | }, 38 | "original": { 39 | "owner": "numtide", 40 | "repo": "devshell", 41 | "type": "github" 42 | } 43 | }, 44 | "flake-utils": { 45 | "inputs": { 46 | "systems": "systems" 47 | }, 48 | "locked": { 49 | "lastModified": 1710146030, 50 | "narHash": "sha256-SZ5L6eA7HJ/nmkzGG7/ISclqe6oZdOZTNoesiInkXPQ=", 51 | "owner": "numtide", 52 | "repo": "flake-utils", 53 | "rev": "b1d9ab70662946ef0850d488da1c9019f3a9752a", 54 | "type": "github" 55 | }, 56 | "original": { 57 | "owner": "numtide", 58 | "repo": "flake-utils", 59 | "type": "github" 60 | } 61 | }, 62 | "flake-utils_2": { 63 | "inputs": { 64 | "systems": "systems_2" 65 | }, 66 | "locked": { 67 | "lastModified": 1710146030, 68 | "narHash": "sha256-SZ5L6eA7HJ/nmkzGG7/ISclqe6oZdOZTNoesiInkXPQ=", 69 | "owner": "numtide", 70 | "repo": "flake-utils", 71 | "rev": "b1d9ab70662946ef0850d488da1c9019f3a9752a", 72 | "type": "github" 73 | }, 74 | "original": { 75 | "owner": "numtide", 76 | "repo": "flake-utils", 77 | "type": "github" 78 | } 79 | }, 80 | "nixpkgs": { 81 | "locked": { 82 | "lastModified": 1715653339, 83 | "narHash": "sha256-7lR9tpVXviSccl07GXI0+ve/natd24HAkuy1sQp0OlI=", 84 | "owner": "NixOS", 85 | "repo": "nixpkgs", 86 | "rev": "abd6d48f8c77bea7dc51beb2adfa6ed3950d2585", 87 | "type": "github" 88 | }, 89 | "original": { 90 | "owner": "NixOS", 91 | "ref": "nixpkgs-unstable", 92 | "repo": "nixpkgs", 93 | "type": "github" 94 | } 95 | }, 96 | "root": { 97 | "inputs": { 98 | "crane": "crane", 99 | "devshell": "devshell", 100 | "nixpkgs": "nixpkgs", 101 | "rust-overlay": "rust-overlay", 102 | "systems": "systems_3" 103 | } 104 | }, 105 | "rust-overlay": { 106 | "inputs": { 107 | "flake-utils": "flake-utils_2", 108 | "nixpkgs": [ 109 | "nixpkgs" 110 | ] 111 | }, 112 | "locked": { 113 | "lastModified": 1715739484, 114 | "narHash": "sha256-5zlSuCM54jH6tXi8OILZ7opT+lBYUkGU9eOMEvJh9HU=", 115 | "owner": "oxalica", 116 | "repo": "rust-overlay", 117 | "rev": "3d27c65641a61d36f1c7616d6150524cd9a2a5f7", 118 | "type": "github" 119 | }, 120 | "original": { 121 | "owner": "oxalica", 122 | "repo": "rust-overlay", 123 | "type": "github" 124 | } 125 | }, 126 | "systems": { 127 | "locked": { 128 | "lastModified": 1681028828, 129 | "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", 130 | "owner": "nix-systems", 131 | "repo": "default", 132 | "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", 133 | "type": "github" 134 | }, 135 | "original": { 136 | "owner": "nix-systems", 137 | "repo": "default", 138 | "type": "github" 139 | } 140 | }, 141 | "systems_2": { 142 | "locked": { 143 | "lastModified": 1681028828, 144 | "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", 145 | "owner": "nix-systems", 146 | "repo": "default", 147 | "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", 148 | "type": "github" 149 | }, 150 | "original": { 151 | "owner": "nix-systems", 152 | "repo": "default", 153 | "type": "github" 154 | } 155 | }, 156 | "systems_3": { 157 | "locked": { 158 | "lastModified": 1681028828, 159 | "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", 160 | "owner": "nix-systems", 161 | "repo": "default", 162 | "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", 163 | "type": "github" 164 | }, 165 | "original": { 166 | "owner": "nix-systems", 167 | "repo": "default", 168 | "type": "github" 169 | } 170 | } 171 | }, 172 | "root": "root", 173 | "version": 7 174 | } 175 | -------------------------------------------------------------------------------- /flake.nix: -------------------------------------------------------------------------------- 1 | { 2 | inputs = { 3 | # base 4 | systems.url = "github:nix-systems/default"; 5 | nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable"; 6 | # extra 7 | crane = { 8 | url = "github:ipetkov/crane"; 9 | inputs.nixpkgs.follows = "nixpkgs"; 10 | }; 11 | devshell = { 12 | url = "github:numtide/devshell"; 13 | inputs.nixpkgs.follows = "nixpkgs"; 14 | # see: https://github.com/NixOS/nix/issues/5790 15 | inputs.flake-utils.inputs.systems.follows = "systems"; 16 | }; 17 | rust-overlay = { 18 | url = "github:oxalica/rust-overlay"; 19 | inputs.nixpkgs.follows = "nixpkgs"; 20 | # see: https://github.com/NixOS/nix/issues/5790 21 | inputs.flake-utils.inputs.systems.follows = "systems"; 22 | }; 23 | }; 24 | 25 | outputs = 26 | { self 27 | # base 28 | , systems 29 | , nixpkgs 30 | # extra 31 | , crane 32 | , devshell 33 | , rust-overlay 34 | } @ inputs: 35 | let 36 | l = inputs.nixpkgs.lib // builtins; 37 | fs = l.fileset; 38 | eachSystem = fn: l.genAttrs (import inputs.systems) fn; 39 | flake = (system: 40 | let 41 | pkgs = import nixpkgs { 42 | inherit system; 43 | overlays = [ 44 | inputs.devshell.overlays.default 45 | (import inputs.rust-overlay) 46 | ]; 47 | }; 48 | nativeDeps = with pkgs;[ 49 | pkg-config 50 | stdenv.cc.cc.lib # for burn dataset loader (sqlite) 51 | zlib # for burn dataset loader (sqlite) 52 | openssl.dev # for burn 53 | vulkan-headers # for burn 54 | vulkan-loader # for burn 55 | vulkan-tools # for burn 56 | ]; 57 | rust-toolchain = pkgs.rust-bin.selectLatestNightlyWith 58 | (toolchain: toolchain.default.override { 59 | extensions = [ "rust-src" "rust-analyzer" ]; 60 | }); 61 | craneLib = (crane.mkLib pkgs).overrideToolchain rust-toolchain; 62 | rustFiles = fs.fileFilter (file: file.hasExt "rs") ./.; 63 | cargoFiles = fs.unions [ 64 | (fs.fileFilter (file: file.name == "Cargo.toml" || file.name == "Cargo.lock") ./.) 65 | ]; 66 | commonArgs = { 67 | pname = "crate"; 68 | version = "0.1"; 69 | nativeBuildInputs = with pkgs; ( 70 | nativeDeps 71 | ++ l.optional stdenv.isLinux clang 72 | ++ l.optionals stdenv.isDarwin [ 73 | darwin.IOKit 74 | darwin.apple_sdk.frameworks.QuartzCore 75 | ] 76 | ); 77 | }; 78 | crateDepsOnly = craneLib.buildDepsOnly (commonArgs // { 79 | cargoCheckCommandcargo = "check --profile release --all-targets --all-features"; 80 | src = fs.toSource { 81 | root = ./.; 82 | fileset = cargoFiles; 83 | }; 84 | }); 85 | crateClippy = craneLib.cargoClippy (commonArgs // { 86 | cargoArtifacts = crateDepsOnly; 87 | cargoClippyExtraArgs = "--all-targets --all-features -- --deny warnings"; 88 | src = fs.toSource { 89 | root = ./.; 90 | fileset = fs.unions ([ 91 | cargoFiles 92 | rustFiles 93 | ]); 94 | }; 95 | }); 96 | in 97 | { 98 | devShell = pkgs.devshell.mkShell { 99 | motd = ""; 100 | packages = with pkgs; [ 101 | # Rust 102 | bacon 103 | cargo-expand 104 | cargo-sort 105 | evcxr 106 | rust-toolchain 107 | # Python 108 | (python311.withPackages (p: with p; [ black httpx ipykernel ipython isort matplotlib numpy pytorch tqdm transformers ])) 109 | ] 110 | ++ nativeDeps; 111 | 112 | env = pkgs.lib.lists.optionals pkgs.stdenv.isLinux [ 113 | { 114 | name = "LD_LIBRARY_PATH"; 115 | prefix = "$DEVSHELL_DIR/lib"; 116 | } 117 | { 118 | name = "PKG_CONFIG_PATH"; 119 | prefix = "$DEVSHELL_DIR/lib/pkgconfig"; 120 | } 121 | ]; 122 | }; 123 | check = crateClippy; 124 | package = craneLib.buildPackage (commonArgs // { 125 | pname = "gpt-burn"; 126 | cargoArtifacts = crateClippy; 127 | src = fs.toSource { 128 | root = ./.; 129 | fileset = fs.unions ([ 130 | cargoFiles 131 | rustFiles 132 | ]); 133 | }; 134 | postFixup = with pkgs; lib.optionalString stdenv.isLinux '' 135 | patchelf --add-rpath ${vulkan-loader}/lib $out/bin/* 136 | ''; 137 | }); 138 | }); 139 | in 140 | { 141 | checks = eachSystem (system: { default = (flake system).check; }); 142 | devShells = eachSystem (system: { default = (flake system).devShell; }); 143 | packages = eachSystem (system: { default = (flake system).package; }); 144 | }; 145 | } 146 | -------------------------------------------------------------------------------- /src/tokenizer.rs: -------------------------------------------------------------------------------- 1 | use { 2 | crate::{BOLD, RESET}, 3 | serde::{Deserialize, Serialize}, 4 | std::{ 5 | collections::HashMap, 6 | fmt::Debug, 7 | fs::File, 8 | io::{BufReader, BufWriter}, 9 | }, 10 | }; 11 | 12 | pub trait Tokenizer { 13 | fn encode(&self, text: &str) -> Vec; 14 | fn decode(&self, ids: &[usize]) -> String; 15 | fn vocab_size(&self) -> usize; 16 | } 17 | 18 | pub struct CharTokenizer { 19 | pub ttoi: HashMap, 20 | pub itot: HashMap, 21 | } 22 | 23 | impl Default for CharTokenizer { 24 | fn default() -> Self { 25 | Self::new() 26 | } 27 | } 28 | 29 | impl CharTokenizer { 30 | pub fn new() -> CharTokenizer { 31 | const CHARS : &str = "\n abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!\"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~0123456789äüöÄÖÜß"; 32 | let itot = HashMap::from_iter(CHARS.chars().enumerate()); 33 | let ttoi = HashMap::from_iter(CHARS.chars().enumerate().map(|(token, id)| (id, token))); 34 | CharTokenizer { ttoi, itot } 35 | } 36 | } 37 | 38 | impl Tokenizer for CharTokenizer { 39 | fn decode(&self, ids: &[usize]) -> String { 40 | ids.iter().map(|id| self.itot[id]).collect() 41 | } 42 | fn encode(&self, text: &str) -> Vec { 43 | let n = self.ttoi.len(); 44 | text.chars() 45 | .map(|char| self.ttoi.get(&char).copied().unwrap_or(n)) 46 | .collect() 47 | } 48 | fn vocab_size(&self) -> usize { 49 | self.ttoi.len() + 1 50 | } 51 | } 52 | 53 | #[derive(Debug, Serialize, Deserialize)] 54 | pub struct SimpleVowelTokenizer { 55 | ttoi: HashMap, 56 | itot: HashMap, 57 | } 58 | 59 | impl SimpleVowelTokenizer { 60 | pub fn new(tokens: &[&str], vocab_size: usize) -> Self { 61 | println!("{BOLD}build new vocab ...{RESET}"); 62 | 63 | const CATCH_ALL_TOKEN: &str = ""; 64 | let mut frequencies = tokens 65 | .iter() 66 | .fold(HashMap::new(), |mut map, &token| { 67 | map.entry(token).and_modify(|freq| *freq += 1).or_insert(1); 68 | map 69 | }) 70 | .into_iter() 71 | .collect::>(); 72 | frequencies.sort_by_key(|x| x.1); 73 | frequencies.reverse(); 74 | frequencies.truncate(vocab_size - 1); 75 | 76 | let mut vocab = frequencies.into_iter().map(|x| x.0).collect::>(); 77 | vocab.sort(); 78 | assert!(!vocab.contains(&CATCH_ALL_TOKEN)); 79 | vocab.push(CATCH_ALL_TOKEN); 80 | println!("vocab ({}): {:?}", vocab.len(), &vocab); 81 | 82 | let itot = HashMap::::from_iter( 83 | vocab 84 | .into_iter() 85 | .enumerate() 86 | .map(|(i, x)| (i, x.to_string())), 87 | ); 88 | let ttoi = HashMap::::from_iter(itot.iter().map(|(&i, t)| (t.clone(), i))); 89 | 90 | // check if vocab is reasonable 91 | let mut contains = 0; 92 | tokens.iter().for_each(|&token| { 93 | contains += ttoi.contains_key(token) as usize; 94 | }); 95 | println!( 96 | "share of tokens contained by vocab: {:.3}", 97 | contains as f32 / tokens.len() as f32 98 | ); 99 | 100 | SimpleVowelTokenizer { ttoi, itot } 101 | } 102 | 103 | pub fn save(&self, path: &str) { 104 | let mut file = BufWriter::new(File::create(path).unwrap()); 105 | bincode::serialize_into(&mut file, &self).unwrap(); 106 | } 107 | 108 | pub fn load(path: &str) -> SimpleVowelTokenizer { 109 | let file = File::open(path).unwrap(); 110 | let mut reader = BufReader::new(file); 111 | bincode::deserialize_from(&mut reader).unwrap() 112 | } 113 | 114 | // TODO: currently drops last token 115 | pub fn tokenize(text: &str) -> impl Iterator { 116 | let mut token_start = 0; 117 | let mut prev_char = 'x'; // dummy value 118 | text.char_indices().filter_map(move |(index, char)| { 119 | let result = if char.is_whitespace() 120 | || char.is_ascii_punctuation() 121 | || prev_char.is_whitespace() 122 | || prev_char.is_ascii_punctuation() 123 | || ((['a', 'e', 'i', 'o', 'u', 'ä', 'ö', 'ü'].contains(&char)) 124 | && index - token_start > 3) 125 | { 126 | let start_index = token_start; 127 | token_start = index; 128 | Some(&text[start_index..index]) 129 | } else if index == text.len() - 1 { 130 | Some(&text[token_start..index + 1]) 131 | } else { 132 | None 133 | }; 134 | prev_char = char; 135 | result 136 | }) 137 | } 138 | } 139 | 140 | impl Tokenizer for SimpleVowelTokenizer { 141 | fn encode(&self, text: &str) -> Vec { 142 | let n = self.ttoi.len(); 143 | SimpleVowelTokenizer::tokenize(text) 144 | .map(|token| self.ttoi.get(token).copied().unwrap_or(n - 1)) 145 | .collect() 146 | } 147 | 148 | fn decode(&self, ids: &[usize]) -> String { 149 | ids.iter() 150 | .map(|token| self.itot.get(token).unwrap().clone()) 151 | .collect::() 152 | } 153 | 154 | fn vocab_size(&self) -> usize { 155 | self.ttoi.len() 156 | } 157 | } 158 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 |
2 | 3 | # GPT-Burn 🔥 4 | 5 | ### Implementation of the GPT architecture in Rust 🦀 + [Burn 🔥](https://burn.dev/). 6 | 7 |
8 | 9 | This project aims to be a clean and concise re-implementation of [GPT-2](https://cdn.openai.com/better-language-models/language_models_are_unsupervised_multitask_learners.pdf). The model implementation, contained in [`src/model.rs`](src/model.rs), is under 300 lines of code. While this was a fun exercise mostly for (my own) educational purposes, it demonstrates the utility of Rust and Burn in the machine learning domain: The entire project compiles into a single binary, making deployment relatively straightforward. 10 | 11 | At the moment, only a character-level tokenizer is supported, so official weights requiring a BPE tokenizer cannot be used yet. However, for fun, you can try out the small toy model I trained ([see inference](#inference)). 12 | 13 | The project also includes a simple CLI for training and inference. 14 | 15 | ``` 16 | Usage: gpt-burn 17 | 18 | Commands: 19 | run Generate text using a pre-trained model 20 | train Train a new model 21 | ``` 22 | 23 | ## Installation 24 | 25 | You can install `gpt-burn` with [Nix](https://nixos.org/): 26 | 27 | ```sh 28 | nix run github:felix-andreas/gpt-burn 29 | ``` 30 | 31 | Or, install with `cargo`: 32 | 33 | ``` 34 | cargo install --git https://github.com/felix-andreas/gpt-burn 35 | ``` 36 | 37 | Alternatively, clone the repo and build from source: 38 | 39 | ```sh 40 | nix develop # optional 41 | cargo run --release 42 | ``` 43 | 44 | If you don't use [Nix](https://nixos.org/) and are on a Ubuntu-based distro, you need to install these additional dependencies: 45 | 46 | ```sh 47 | apt install pkg-config libssl-dev libvulkan1 mesa-vulkan-drivers vulkan-tools 48 | ``` 49 | 50 | ## Inference 51 | 52 | I trained a toy model with a character-level tokenizer on the [German Wikipedia corpus](https://github.com/GermanT5/wikipedia2corpus) for 20,000 batches (batch size of 128) with the following parameters: 53 | 54 | | Parameter | Value | 55 | | -------------- | ------ | 56 | | parameters | 83M | 57 | | context length | 128 | 58 | | `n_layers` | 12 | 59 | | `n_heads` | 12 | 60 | | `d_model` | 768 | 61 | 62 | You can download it [here](https://drive.usercontent.google.com/download?id=1GGLaPnmPQ8Z2B9vJQoI6-K128X9LJKG0&export=download) and extract it afterward. Or, do both in a single command: 63 | 64 | ```sh 65 | curl -s 'https://drive.usercontent.google.com/download?id=1GGLaPnmPQ8Z2B9vJQoI6-K128X9LJKG0&export=download&confirm=t' | tar xzf - 66 | ``` 67 | 68 | Then, run the model: 69 | 70 | ```sh 71 | gpt-burn run ./model_83M 72 | ``` 73 | 74 | You should see something along these lines: 75 | 76 | ``` 77 | So wurden bis 1977 679 nachhaltige Wörgler Torbauten vorgeworfen, die Einwohnerzahl Sirkes bestand 2015 bis 1998. 78 | Sie war trotz weniger als 10.000 ausgedehnter Größen wahrscheinlich auf folgende Breitenauflagen mit 932 km. 79 | 2016 wurden rund 145 Händen nach Deutschland geladen. 80 | ``` 81 | 82 | Further command line options are: 83 | 84 | ``` 85 | Usage: gpt-burn run [OPTIONS] 86 | 87 | Arguments: 88 | 89 | 90 | Options: 91 | -p, --prompt 92 | -n, --n-new-tokens [default: 1000] 93 | -s, --seed [default: 0] 94 | ``` 95 | 96 | ## Training 97 | 98 | To train your own model, run: 99 | 100 | ``` 101 | gpt-burn train --context-length 128 --n-layers 12 --n-heads 12 --d-model 768 --batch-size 128 --learning-rate 0.0003 --seed 0 --text-corpus ./corpus.txt 102 | ``` 103 | 104 | > [!IMPORTANT] 105 | > Make sure `corpus.txt` is a utf-8 encoded text file! 106 | 107 | You can pass most hyperparameters as a command-line option: 108 | 109 | ``` 110 | Usage: gpt-burn train [OPTIONS] 111 | 112 | Options: 113 | -o, --output-path 114 | -c, --context-length [default: 64] 115 | -d, --d-model [default: 64] 116 | -l, --n-layers [default: 2] 117 | -h, --n-heads [default: 2] 118 | -n, --n-steps [default: 50] 119 | -b, --batch-size [default: 32] 120 | -r, --learning-rate [default: 0.003] 121 | -s, --seed [default: 0] 122 | -t, --text-corpus [default: .data/corpus.txt] 123 | -m, --n-mega-bytes Only use first megabytes of dataset for training 124 | -x, --no-save Don't save trained model (useful for debugging) 125 | ``` 126 | 127 | ## Tokenizer 128 | 129 | The model can be used with different tokenizers via the `Tokenizer` trait. Below you see how the following sentence 130 | 131 | ``` 132 | Albert Einstein war ein schweizerisch-US-amerikanischer theoretischer Physiker deutscher Herkunft. 133 | ``` 134 | 135 | is encoded by the different tokenizers. 136 | 137 | ### Character-level tokenizer 138 | 139 | The `CharTokenizer` splits every character into a separate token: 140 | 141 | ``` 142 | Tokens: ["A", "l", "b", "e", "r", "t", " ", "E", "i", "n", "s", "t", "e", "i", "n", " ", "w", "a", "r", " ", "e", "i", "n", " ", "s", "c", "h", "w", "e", "i", "z", "e", "r", "i", "s", "c", "h", "-", "U", "S", "-", "a", "m", "e", "r", "i", "k", "a", "n", "i", "s", "c", "h", "e", "r", " ", "t", "h", "e", "o", "r", "e", "t", "i", "s", "c", "h", "e", "r", " ", "P", "h", "y", "s", "i", "k", "e", "r", " ", "d", "e", "u", "t", "s", "c", "h", "e", "r", " ", "H", "e", "r", "k", "u", "n", "f", "t", "."] 143 | Values: [28, 13, 3, 6, 19, 21, 1, 32, 10, 15, 20, 21, 6, 10, 15, 1, 24, 2, 19, 1, 6, 10, 15, 1, 20, 4, 9, 24, 6, 10, 27, 6, 19, 10, 20, 4, 9, 66, 48, 46, 66, 2, 14, 6, 19, 10, 12, 2, 15, 10, 20, 4, 9, 6, 19, 1, 21, 9, 6, 16, 19, 6, 21, 10, 20, 4, 9, 6, 19, 1, 43, 9, 26, 20, 10, 12, 6, 19, 1, 5, 6, 22, 21, 20, 4, 9, 6, 19, 1, 35, 6, 19, 12, 22, 15, 7, 21, 67] 144 | ``` 145 | 146 | ### Simple-vowel tokenizer 147 | 148 | The `SimpleVowelTokenizer` splits words before the next vowel if the chunk is longer than three characters, creating a result that resembles syllables: 149 | 150 | ``` 151 | Tokens: ["Albert", " ", "Einst", "ein", " ", "war", " ", "ein", " ", "schw", "eizer", "isch", "-", "US", "-", "amer", "ikan", "isch", "er", " ", "theor", "etisch", "er", " ", "Phys", "iker", " ", "deutsch", "er", " ", "Herk", "unft"] 152 | Values: [2, 0, 3, 9, 0, 19, 0, 9, 0, 16, 10, 15, 1, 6, 1, 7, 13, 15, 11, 0, 17, 12, 11, 0, 5, 14, 0, 8, 11, 0, 4, 18] 153 | ``` 154 | 155 | ## References 156 | 157 | * [GPT-2 Paper](https://cdn.openai.com/better-language-models/language_models_are_unsupervised_multitask_learners.pdf) 158 | * [OpenAI's GPT-2 Implementation](https://github.com/openai/gpt-2/blob/master/src/model.py) 159 | * [Huggingface's GPT-2 Implementation](https://github.com/huggingface/transformers/blob/main/src/transformers/models/gpt2/modeling_gpt2.py) 160 | * [Visualization of the GPT Architecture](https://en.wikipedia.org/wiki/Generative_pre-trained_transformer#/media/File:Full_GPT_architecture.svg) 161 | * [Lesson by Andrej Karpathy](https://www.youtube.com/watch?v=kCc8FmEb1nY) 162 | * [The GPT-3 Architecture, on a Napkin](https://dugas.ch/artificial_curiosity/GPT_architecture.html) 163 | -------------------------------------------------------------------------------- /src/main.rs: -------------------------------------------------------------------------------- 1 | #![allow(clippy::too_many_arguments)] 2 | 3 | use { 4 | burn::{ 5 | backend::{Autodiff, Wgpu}, 6 | module::Module, 7 | optim::AdamWConfig, 8 | prelude::*, 9 | record::{CompactRecorder, Recorder}, 10 | }, 11 | clap::{Parser, Subcommand}, 12 | gpt_burn::{ 13 | model::{Model, ModelConfig}, 14 | tokenizer::{CharTokenizer, Tokenizer}, 15 | TrainingConfig, BOLD, RESET, 16 | }, 17 | std::{ 18 | fs::{self, File}, 19 | io::Read, 20 | path::PathBuf, 21 | }, 22 | }; 23 | 24 | fn main() { 25 | type B = Wgpu; // alternative backend: burn::backend::ndarray::NdArray 26 | type AutoB = Autodiff; 27 | 28 | match Cli::parse().command { 29 | Commands::Run { 30 | model_path: path, 31 | prompt, 32 | n_new_tokens, 33 | seed, 34 | .. 35 | } => { 36 | let device = ::Device::default(); 37 | 38 | let tokenizer = CharTokenizer::new(); 39 | let config = TrainingConfig::load(path.join("config.json")).unwrap(); 40 | let model: Model = config.model.init(&device).load_record( 41 | CompactRecorder::new() 42 | .load(path.join("model"), &device) 43 | .unwrap(), 44 | ); 45 | 46 | gpt_burn::run( 47 | &model, 48 | &tokenizer, 49 | &prompt.unwrap_or("\n".into()), 50 | n_new_tokens, 51 | config.model.context_length, 52 | seed, 53 | ); 54 | } 55 | Commands::Train { 56 | text_corpus, 57 | output_path, 58 | no_save, 59 | n_steps, 60 | batch_size, 61 | n_mega_bytes, 62 | context_length, 63 | d_model, 64 | n_layers, 65 | n_heads, 66 | learning_rate, 67 | seed, 68 | .. 69 | } => { 70 | // load text corpus and instantiate tokenizer 71 | println!( 72 | "{BOLD}load {} file {text_corpus:?}{RESET} as dataset", 73 | n_mega_bytes.map_or_else( 74 | || "entire".to_string(), 75 | |n_mega_bytes| format!("first {n_mega_bytes} MiB of") 76 | ) 77 | ); 78 | let (data_train, data_test, tokenizer) = { 79 | let device = as Backend>::Device::default(); 80 | 81 | let mut file = File::open(text_corpus) 82 | .unwrap() 83 | .take(n_mega_bytes.unwrap_or(999) << 20); 84 | let mut text = String::new(); 85 | file.read_to_string(&mut text).unwrap(); 86 | 87 | let tokenizer = CharTokenizer::new(); 88 | let text = text 89 | .chars() 90 | .filter(|char| tokenizer.ttoi.contains_key(char)) 91 | .collect::(); 92 | 93 | let mut train = tokenizer.encode(&text); 94 | let test = train.split_off((0.9 * train.len() as f32) as usize); 95 | 96 | let n_train = train.len(); 97 | let data_train = Tensor::::from_data( 98 | Data::new( 99 | train.into_iter().map(|e| e as i32).collect(), 100 | Shape::new([n_train]), 101 | ) 102 | .convert(), 103 | &device, 104 | ); 105 | 106 | let n_test = test.len(); 107 | let data_test = Tensor::::from_data( 108 | Data::new( 109 | test.into_iter().map(|e| e as i32).collect(), 110 | Shape::new([n_test]), 111 | ) 112 | .convert(), 113 | &device, 114 | ); 115 | (data_train, data_test, tokenizer) 116 | }; 117 | 118 | // train 119 | let config = TrainingConfig { 120 | n_steps, 121 | batch_size, 122 | batches_per_step: 100, 123 | validation_size: 128, 124 | seed, 125 | learning_rate, 126 | model: ModelConfig { 127 | context_length, 128 | vocab_size: tokenizer.vocab_size(), 129 | d_model, 130 | d_hidden: 4 * d_model, 131 | n_heads, 132 | n_layers, 133 | dropout: 0.2, 134 | }, 135 | optimizer: AdamWConfig::new(), 136 | }; 137 | let model = gpt_burn::train(&config, data_train, data_test, !no_save); 138 | 139 | // save trained model 140 | if !no_save { 141 | let output_path = output_path.unwrap_or_else(|| { 142 | format!( 143 | ".data/gpt_{}k_{}context_{}", 144 | model.num_params() >> 10, 145 | config.model.context_length, 146 | std::time::UNIX_EPOCH.elapsed().unwrap().as_secs() 147 | ) 148 | .into() 149 | }); 150 | 151 | println!("{BOLD}store trained model to: {output_path:?}{RESET}"); 152 | fs::remove_dir_all(&output_path).ok(); 153 | fs::create_dir_all(&output_path).ok(); 154 | 155 | config.save(output_path.join("config.json")).unwrap(); 156 | model 157 | .clone() 158 | .save_file(output_path.join("model"), &CompactRecorder::new()) 159 | .unwrap(); 160 | } 161 | 162 | // inference 163 | println!("{BOLD}generate example text{RESET}"); 164 | gpt_burn::run( 165 | &model, 166 | &tokenizer, 167 | "\n", 168 | 200, 169 | config.model.context_length, 170 | seed, 171 | ); 172 | } 173 | } 174 | } 175 | 176 | #[derive(Parser)] 177 | #[clap(disable_help_flag = true)] 178 | struct Cli { 179 | #[command(subcommand)] 180 | command: Commands, 181 | #[clap(long, action = clap::ArgAction::HelpLong)] 182 | help: Option, 183 | } 184 | 185 | #[derive(Subcommand)] 186 | enum Commands { 187 | /// Generate text using a pre-trained model 188 | Run { 189 | model_path: PathBuf, 190 | #[arg(short, long)] 191 | prompt: Option, 192 | #[arg(short, long, default_value_t = 1000)] 193 | n_new_tokens: usize, 194 | #[arg(short, long, default_value_t = 0)] 195 | seed: u64, 196 | #[arg(long , action = clap::ArgAction::HelpLong)] 197 | help: Option, 198 | }, 199 | /// Train a new model 200 | Train { 201 | #[arg(short = 'o', long, value_name = "PATH")] 202 | output_path: Option, 203 | #[arg(short = 'c', long, default_value_t = 64)] 204 | context_length: usize, 205 | #[arg(short = 'd', long, default_value_t = 64)] 206 | d_model: usize, 207 | #[arg(short = 'l', long, default_value_t = 2)] 208 | n_layers: usize, 209 | #[arg(short = 'h', long, default_value_t = 2)] 210 | n_heads: usize, 211 | #[arg(short = 'n', long, default_value_t = 50)] 212 | n_steps: usize, 213 | #[arg(short = 'b', long, default_value_t = 32)] 214 | batch_size: usize, 215 | #[arg(short = 'r', long, default_value_t = 0.003)] 216 | learning_rate: f64, 217 | #[arg(short = 's', long, default_value_t = 0)] 218 | seed: u64, 219 | #[arg(short = 't', long, default_value = ".data/corpus.txt")] 220 | text_corpus: PathBuf, 221 | /// Only use first megabytes of dataset for training 222 | #[arg(short = 'm', long)] 223 | n_mega_bytes: Option, 224 | /// Don't save trained model (useful for debugging) 225 | #[arg(short = 'x', long)] 226 | no_save: bool, 227 | #[arg(long , action = clap::ArgAction::HelpLong)] 228 | help: Option, 229 | }, 230 | } 231 | -------------------------------------------------------------------------------- /src/model.rs: -------------------------------------------------------------------------------- 1 | #![allow(clippy::let_and_return)] 2 | use { 3 | burn::{ 4 | module::Module, 5 | nn::{ 6 | loss::CrossEntropyLossConfig, DropoutConfig, Embedding, EmbeddingConfig, Gelu, 7 | LayerNorm, LayerNormConfig, Linear, LinearConfig, 8 | }, 9 | prelude::*, 10 | tensor::activation, 11 | }, 12 | std::fmt::Debug, 13 | }; 14 | 15 | // Model 16 | 17 | #[derive(Debug, Module)] 18 | pub struct Model { 19 | token_embedding: Embedding, 20 | positional_embedding: Embedding, 21 | dropout: nn::Dropout, 22 | blocks: Vec>, 23 | norm: LayerNorm, 24 | linear: Linear, 25 | } 26 | 27 | #[derive(Debug, Config)] 28 | pub struct ModelConfig { 29 | pub context_length: usize, 30 | pub vocab_size: usize, 31 | pub n_layers: usize, 32 | pub n_heads: usize, 33 | pub d_model: usize, 34 | pub d_hidden: usize, 35 | #[config(default = "0.2")] 36 | pub dropout: f64, 37 | } 38 | 39 | impl ModelConfig { 40 | pub fn init(&self, device: &B::Device) -> Model { 41 | Model { 42 | token_embedding: EmbeddingConfig::new(self.vocab_size, self.d_model) 43 | .with_initializer(nn::Initializer::Normal { 44 | mean: 0.0, 45 | std: 0.02, 46 | }) 47 | .init(device), 48 | positional_embedding: EmbeddingConfig::new(self.context_length, self.d_model) 49 | .with_initializer(nn::Initializer::Normal { 50 | mean: 0.0, 51 | std: 0.02, 52 | }) 53 | .init(device), 54 | dropout: DropoutConfig::new(self.dropout).init(), 55 | blocks: (0..self.n_layers) 56 | .map(|_| { 57 | BlockConfig::new(self.d_model, self.d_hidden, self.n_heads, self.n_layers) 58 | .init(device) 59 | }) 60 | .collect(), 61 | norm: LayerNormConfig::new(self.d_model).init(device), 62 | linear: LinearConfig::new(self.d_model, self.vocab_size) 63 | .with_initializer(nn::Initializer::Normal { 64 | mean: 0.0, 65 | std: 0.02, 66 | }) 67 | .init(device), 68 | } 69 | } 70 | } 71 | 72 | impl Model { 73 | pub fn forward(&self, input: Tensor) -> Tensor { 74 | let x = input.clone(); 75 | 76 | let x = { 77 | let emb_tok = self.token_embedding.forward(x.clone()); 78 | let emb_pos = { 79 | let [_, t] = input.dims(); 80 | self.positional_embedding 81 | .forward(Tensor::arange(0..(t as i64), &x.device()).unsqueeze()) 82 | }; 83 | emb_tok + emb_pos 84 | }; 85 | let x = self.dropout.forward(x); 86 | let x = self.blocks.iter().fold(x, |x, block| block.forward(x)); 87 | let x = self.norm.forward(x); 88 | let x = self.linear.forward(x); 89 | 90 | x 91 | } 92 | 93 | pub fn loss(&self, logits: Tensor, y: Tensor) -> Tensor { 94 | let [b, t, c] = logits.dims(); 95 | CrossEntropyLossConfig::new() 96 | .init(&logits.device()) 97 | .forward(logits.reshape([b * t, c]), y.reshape([b * t])) 98 | } 99 | } 100 | 101 | // Block 102 | 103 | #[derive(Debug, Config)] 104 | pub struct BlockConfig { 105 | d_model: usize, 106 | d_hidden: usize, 107 | n_heads: usize, 108 | // we need to know this for weight initialization 109 | n_layers: usize, 110 | #[config(default = "0.2")] 111 | dropout: f64, 112 | } 113 | 114 | impl BlockConfig { 115 | fn init(&self, device: &B::Device) -> Block { 116 | Block { 117 | norm_1: LayerNormConfig::new(self.d_model).init(device), 118 | multi_head: MultiHeadAttentionConfig::new(self.d_model, self.n_heads, self.n_layers) 119 | .init(device), 120 | norm_2: LayerNormConfig::new(self.d_model).init(device), 121 | pwff: PositionWiseFeedForwardConfig::new(self.d_model, self.d_hidden, self.n_layers) 122 | .init(device), 123 | } 124 | } 125 | } 126 | 127 | #[derive(Debug, Module)] 128 | struct Block { 129 | norm_1: LayerNorm, 130 | multi_head: MultiHeadAttention, 131 | norm_2: LayerNorm, 132 | pwff: PositionWiseFeedForward, 133 | } 134 | 135 | impl Block { 136 | fn forward(&self, input: Tensor) -> Tensor { 137 | let x = input.clone(); 138 | let x = x.clone() + self.multi_head.forward(self.norm_1.forward(x)); 139 | let x = x.clone() + self.pwff.forward(self.norm_2.forward(x)); 140 | 141 | x 142 | } 143 | } 144 | 145 | // Multi-Head Attention 146 | 147 | #[derive(Debug, Config)] 148 | struct MultiHeadAttentionConfig { 149 | d_model: usize, 150 | n_heads: usize, 151 | n_layers: usize, 152 | #[config(default = "0.2")] 153 | dropout: f64, 154 | } 155 | 156 | impl MultiHeadAttentionConfig { 157 | fn init(&self, device: &B::Device) -> MultiHeadAttention { 158 | let d_k = self.d_model / self.n_heads; 159 | assert!(d_k * self.n_heads == self.d_model); 160 | MultiHeadAttention { 161 | n_heads: self.n_heads, 162 | d_k, 163 | query: nn::LinearConfig::new(self.d_model, self.d_model) 164 | .with_bias(false) 165 | .with_initializer(nn::Initializer::Normal { 166 | mean: 0.0, 167 | std: 0.02, 168 | }) 169 | .init(device), 170 | key: nn::LinearConfig::new(self.d_model, self.d_model) 171 | .with_bias(false) 172 | .with_initializer(nn::Initializer::Normal { 173 | mean: 0.0, 174 | std: 0.02, 175 | }) 176 | .init(device), 177 | value: nn::LinearConfig::new(self.d_model, self.d_model) 178 | .with_bias(false) 179 | .with_initializer(nn::Initializer::Normal { 180 | mean: 0.0, 181 | std: 0.02, 182 | }) 183 | .init(device), 184 | out: nn::LinearConfig::new(self.d_model, self.d_model) 185 | .with_bias(false) 186 | // account for accumulation of residual path (see gpt-2 paper section 2.3.) 187 | .with_initializer(nn::Initializer::Normal { 188 | mean: 0.0, 189 | std: 0.02 / (2.0 * self.n_layers as f64).sqrt(), 190 | }) 191 | .init(device), 192 | attn_dropout: nn::DropoutConfig::new(self.dropout).init(), 193 | resid_dropout: nn::DropoutConfig::new(self.dropout).init(), 194 | } 195 | } 196 | } 197 | 198 | #[derive(Debug, Module)] 199 | struct MultiHeadAttention { 200 | n_heads: usize, 201 | d_k: usize, 202 | query: nn::Linear, 203 | key: nn::Linear, 204 | value: nn::Linear, 205 | attn_dropout: nn::Dropout, 206 | out: nn::Linear, 207 | resid_dropout: nn::Dropout, 208 | } 209 | 210 | impl MultiHeadAttention { 211 | fn forward(&self, input: Tensor) -> Tensor { 212 | let [b, t, _] = input.dims(); 213 | 214 | let q = self.query.forward(input.clone()); 215 | let k = self.key.forward(input.clone()); 216 | let v = self.value.forward(input.clone()); 217 | 218 | let q = q.reshape([b, t, self.n_heads, self.d_k]).swap_dims(1, 2); 219 | let k = k.reshape([b, t, self.n_heads, self.d_k]).swap_dims(1, 2); 220 | let v = v.reshape([b, t, self.n_heads, self.d_k]).swap_dims(1, 2); 221 | 222 | let x = q.matmul(k.transpose()).div_scalar((self.d_k as f32).sqrt()); 223 | let x = { 224 | let mask = Tensor::::tril_mask([t, t], 0, &input.device()); 225 | x.mask_fill(mask.unsqueeze(), f32::NEG_INFINITY) // if NaN try 1e-4 226 | }; 227 | let x = activation::softmax(x, 3); 228 | let x = self.attn_dropout.forward(x); 229 | let x = x.matmul(v); 230 | let x = x.swap_dims(1, 2).reshape([b, t, self.n_heads * self.d_k]); 231 | let x = self.resid_dropout.forward(x); 232 | let x = self.out.forward(x); 233 | 234 | x 235 | } 236 | } 237 | 238 | // Position-wise Feed-Forward Network 239 | 240 | #[derive(Config)] 241 | pub struct PositionWiseFeedForwardConfig { 242 | pub d_model: usize, 243 | pub d_hidden: usize, 244 | pub n_layer: usize, 245 | #[config(default = 0.2)] 246 | pub dropout: f64, 247 | } 248 | 249 | impl PositionWiseFeedForwardConfig { 250 | pub fn init(&self, device: &B::Device) -> PositionWiseFeedForward { 251 | PositionWiseFeedForward { 252 | linear_1: LinearConfig::new(self.d_model, self.d_hidden) 253 | .with_initializer(nn::Initializer::Normal { 254 | mean: 0.0, 255 | std: 0.02, 256 | }) 257 | .init(device), 258 | gelu: Gelu::new(), 259 | linear_2: LinearConfig::new(self.d_hidden, self.d_model) 260 | // account for accumulation of residual path (see gpt-2 paper section 2.3.) 261 | .with_initializer(nn::Initializer::Normal { 262 | mean: 0.0, 263 | std: 0.02 / (2.0 * self.n_layer as f64).sqrt(), 264 | }) 265 | .init(device), 266 | dropout: DropoutConfig::new(self.dropout).init(), 267 | } 268 | } 269 | } 270 | 271 | #[derive(Debug, Module)] 272 | pub struct PositionWiseFeedForward { 273 | linear_1: nn::Linear, 274 | gelu: nn::Gelu, 275 | linear_2: nn::Linear, 276 | dropout: nn::Dropout, 277 | } 278 | 279 | impl PositionWiseFeedForward { 280 | pub fn forward(&self, input: Tensor) -> Tensor { 281 | let x = self.linear_1.forward(input); 282 | let x = self.gelu.forward(x); 283 | let x = self.linear_2.forward(x); 284 | let x = self.dropout.forward(x); 285 | 286 | x 287 | } 288 | } 289 | -------------------------------------------------------------------------------- /Cargo.lock: -------------------------------------------------------------------------------- 1 | # This file is automatically @generated by Cargo. 2 | # It is not intended for manual editing. 3 | version = 3 4 | 5 | [[package]] 6 | name = "addr2line" 7 | version = "0.21.0" 8 | source = "registry+https://github.com/rust-lang/crates.io-index" 9 | checksum = "8a30b2e23b9e17a9f90641c7ab1549cd9b44f296d3ccbf309d2863cfe398a0cb" 10 | dependencies = [ 11 | "gimli", 12 | ] 13 | 14 | [[package]] 15 | name = "adler" 16 | version = "1.0.2" 17 | source = "registry+https://github.com/rust-lang/crates.io-index" 18 | checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" 19 | 20 | [[package]] 21 | name = "aes" 22 | version = "0.8.4" 23 | source = "registry+https://github.com/rust-lang/crates.io-index" 24 | checksum = "b169f7a6d4742236a0a00c541b845991d0ac43e546831af1249753ab4c3aa3a0" 25 | dependencies = [ 26 | "cfg-if", 27 | "cipher", 28 | "cpufeatures", 29 | ] 30 | 31 | [[package]] 32 | name = "ahash" 33 | version = "0.8.11" 34 | source = "registry+https://github.com/rust-lang/crates.io-index" 35 | checksum = "e89da841a80418a9b391ebaea17f5c112ffaaa96f621d2c285b5174da76b9011" 36 | dependencies = [ 37 | "cfg-if", 38 | "once_cell", 39 | "version_check", 40 | "zerocopy", 41 | ] 42 | 43 | [[package]] 44 | name = "aho-corasick" 45 | version = "1.1.3" 46 | source = "registry+https://github.com/rust-lang/crates.io-index" 47 | checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916" 48 | dependencies = [ 49 | "memchr", 50 | ] 51 | 52 | [[package]] 53 | name = "allocator-api2" 54 | version = "0.2.18" 55 | source = "registry+https://github.com/rust-lang/crates.io-index" 56 | checksum = "5c6cb57a04249c6480766f7f7cef5467412af1490f8d1e243141daddada3264f" 57 | 58 | [[package]] 59 | name = "android_system_properties" 60 | version = "0.1.5" 61 | source = "registry+https://github.com/rust-lang/crates.io-index" 62 | checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" 63 | dependencies = [ 64 | "libc", 65 | ] 66 | 67 | [[package]] 68 | name = "anstream" 69 | version = "0.6.14" 70 | source = "registry+https://github.com/rust-lang/crates.io-index" 71 | checksum = "418c75fa768af9c03be99d17643f93f79bbba589895012a80e3452a19ddda15b" 72 | dependencies = [ 73 | "anstyle", 74 | "anstyle-parse", 75 | "anstyle-query", 76 | "anstyle-wincon", 77 | "colorchoice", 78 | "is_terminal_polyfill", 79 | "utf8parse", 80 | ] 81 | 82 | [[package]] 83 | name = "anstyle" 84 | version = "1.0.7" 85 | source = "registry+https://github.com/rust-lang/crates.io-index" 86 | checksum = "038dfcf04a5feb68e9c60b21c9625a54c2c0616e79b72b0fd87075a056ae1d1b" 87 | 88 | [[package]] 89 | name = "anstyle-parse" 90 | version = "0.2.4" 91 | source = "registry+https://github.com/rust-lang/crates.io-index" 92 | checksum = "c03a11a9034d92058ceb6ee011ce58af4a9bf61491aa7e1e59ecd24bd40d22d4" 93 | dependencies = [ 94 | "utf8parse", 95 | ] 96 | 97 | [[package]] 98 | name = "anstyle-query" 99 | version = "1.0.3" 100 | source = "registry+https://github.com/rust-lang/crates.io-index" 101 | checksum = "a64c907d4e79225ac72e2a354c9ce84d50ebb4586dee56c82b3ee73004f537f5" 102 | dependencies = [ 103 | "windows-sys 0.52.0", 104 | ] 105 | 106 | [[package]] 107 | name = "anstyle-wincon" 108 | version = "3.0.3" 109 | source = "registry+https://github.com/rust-lang/crates.io-index" 110 | checksum = "61a38449feb7068f52bb06c12759005cf459ee52bb4adc1d5a7c4322d716fb19" 111 | dependencies = [ 112 | "anstyle", 113 | "windows-sys 0.52.0", 114 | ] 115 | 116 | [[package]] 117 | name = "anyhow" 118 | version = "1.0.83" 119 | source = "registry+https://github.com/rust-lang/crates.io-index" 120 | checksum = "25bdb32cbbdce2b519a9cd7df3a678443100e265d5e25ca763b7572a5104f5f3" 121 | 122 | [[package]] 123 | name = "arrayvec" 124 | version = "0.7.4" 125 | source = "registry+https://github.com/rust-lang/crates.io-index" 126 | checksum = "96d30a06541fbafbc7f82ed10c06164cfbd2c401138f6addd8404629c4b16711" 127 | 128 | [[package]] 129 | name = "ash" 130 | version = "0.37.3+1.3.251" 131 | source = "registry+https://github.com/rust-lang/crates.io-index" 132 | checksum = "39e9c3835d686b0a6084ab4234fcd1b07dbf6e4767dce60874b12356a25ecd4a" 133 | dependencies = [ 134 | "libloading 0.7.4", 135 | ] 136 | 137 | [[package]] 138 | name = "async-trait" 139 | version = "0.1.80" 140 | source = "registry+https://github.com/rust-lang/crates.io-index" 141 | checksum = "c6fa2087f2753a7da8cc1c0dbfcf89579dd57458e36769de5ac750b4671737ca" 142 | dependencies = [ 143 | "proc-macro2", 144 | "quote", 145 | "syn 2.0.63", 146 | ] 147 | 148 | [[package]] 149 | name = "autocfg" 150 | version = "1.3.0" 151 | source = "registry+https://github.com/rust-lang/crates.io-index" 152 | checksum = "0c4b4d0bd25bd0b74681c0ad21497610ce1b7c91b1022cd21c80c6fbdd9476b0" 153 | 154 | [[package]] 155 | name = "backtrace" 156 | version = "0.3.71" 157 | source = "registry+https://github.com/rust-lang/crates.io-index" 158 | checksum = "26b05800d2e817c8b3b4b54abd461726265fa9789ae34330622f2db9ee696f9d" 159 | dependencies = [ 160 | "addr2line", 161 | "cc", 162 | "cfg-if", 163 | "libc", 164 | "miniz_oxide", 165 | "object", 166 | "rustc-demangle", 167 | ] 168 | 169 | [[package]] 170 | name = "base64" 171 | version = "0.21.7" 172 | source = "registry+https://github.com/rust-lang/crates.io-index" 173 | checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" 174 | 175 | [[package]] 176 | name = "base64" 177 | version = "0.22.1" 178 | source = "registry+https://github.com/rust-lang/crates.io-index" 179 | checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" 180 | 181 | [[package]] 182 | name = "base64ct" 183 | version = "1.6.0" 184 | source = "registry+https://github.com/rust-lang/crates.io-index" 185 | checksum = "8c3c1a368f70d6cf7302d78f8f7093da241fb8e8807c05cc9e51a125895a6d5b" 186 | 187 | [[package]] 188 | name = "bincode" 189 | version = "1.3.3" 190 | source = "registry+https://github.com/rust-lang/crates.io-index" 191 | checksum = "b1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcad" 192 | dependencies = [ 193 | "serde", 194 | ] 195 | 196 | [[package]] 197 | name = "bincode" 198 | version = "2.0.0-rc.3" 199 | source = "registry+https://github.com/rust-lang/crates.io-index" 200 | checksum = "f11ea1a0346b94ef188834a65c068a03aec181c94896d481d7a0a40d85b0ce95" 201 | dependencies = [ 202 | "serde", 203 | ] 204 | 205 | [[package]] 206 | name = "bit-set" 207 | version = "0.5.3" 208 | source = "registry+https://github.com/rust-lang/crates.io-index" 209 | checksum = "0700ddab506f33b20a03b13996eccd309a48e5ff77d0d95926aa0210fb4e95f1" 210 | dependencies = [ 211 | "bit-vec", 212 | ] 213 | 214 | [[package]] 215 | name = "bit-vec" 216 | version = "0.6.3" 217 | source = "registry+https://github.com/rust-lang/crates.io-index" 218 | checksum = "349f9b6a179ed607305526ca489b34ad0a41aed5f7980fa90eb03160b69598fb" 219 | 220 | [[package]] 221 | name = "bit_field" 222 | version = "0.10.2" 223 | source = "registry+https://github.com/rust-lang/crates.io-index" 224 | checksum = "dc827186963e592360843fb5ba4b973e145841266c1357f7180c43526f2e5b61" 225 | 226 | [[package]] 227 | name = "bitflags" 228 | version = "1.3.2" 229 | source = "registry+https://github.com/rust-lang/crates.io-index" 230 | checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" 231 | 232 | [[package]] 233 | name = "bitflags" 234 | version = "2.5.0" 235 | source = "registry+https://github.com/rust-lang/crates.io-index" 236 | checksum = "cf4b9d6a944f767f8e5e0db018570623c85f3d925ac718db4e06d0187adb21c1" 237 | 238 | [[package]] 239 | name = "block" 240 | version = "0.1.6" 241 | source = "registry+https://github.com/rust-lang/crates.io-index" 242 | checksum = "0d8c1fef690941d3e7788d328517591fecc684c084084702d6ff1641e993699a" 243 | 244 | [[package]] 245 | name = "block-buffer" 246 | version = "0.10.4" 247 | source = "registry+https://github.com/rust-lang/crates.io-index" 248 | checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" 249 | dependencies = [ 250 | "generic-array", 251 | ] 252 | 253 | [[package]] 254 | name = "bstr" 255 | version = "1.9.1" 256 | source = "registry+https://github.com/rust-lang/crates.io-index" 257 | checksum = "05efc5cfd9110c8416e471df0e96702d58690178e206e61b7173706673c93706" 258 | dependencies = [ 259 | "memchr", 260 | "serde", 261 | ] 262 | 263 | [[package]] 264 | name = "bumpalo" 265 | version = "3.16.0" 266 | source = "registry+https://github.com/rust-lang/crates.io-index" 267 | checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c" 268 | 269 | [[package]] 270 | name = "burn" 271 | version = "0.13.2" 272 | source = "registry+https://github.com/rust-lang/crates.io-index" 273 | checksum = "3960b57a6ad4baf54d1dba766965e4559c4b9a8f391107fee5de29db57265840" 274 | dependencies = [ 275 | "burn-core", 276 | "burn-train", 277 | ] 278 | 279 | [[package]] 280 | name = "burn-autodiff" 281 | version = "0.13.2" 282 | source = "registry+https://github.com/rust-lang/crates.io-index" 283 | checksum = "cf9479c28bdce3f2b1541f0a9215628f6256b5f3d66871192a3c56d55171d28e" 284 | dependencies = [ 285 | "burn-common", 286 | "burn-tensor", 287 | "derive-new", 288 | "log", 289 | "spin", 290 | ] 291 | 292 | [[package]] 293 | name = "burn-candle" 294 | version = "0.13.2" 295 | source = "registry+https://github.com/rust-lang/crates.io-index" 296 | checksum = "d811c54fa6d9beb38808a1aabd9515c39090720cae572d54f25c041b1702e8fd" 297 | dependencies = [ 298 | "burn-tensor", 299 | "candle-core", 300 | "derive-new", 301 | "half", 302 | ] 303 | 304 | [[package]] 305 | name = "burn-common" 306 | version = "0.13.2" 307 | source = "registry+https://github.com/rust-lang/crates.io-index" 308 | checksum = "8d9540b2f45a2d337220e702d7a87572c8e1c78db91a200b22924a8c4a6e9be4" 309 | dependencies = [ 310 | "async-trait", 311 | "derive-new", 312 | "getrandom", 313 | "indicatif", 314 | "rand", 315 | "reqwest", 316 | "serde", 317 | "spin", 318 | "tokio", 319 | "uuid", 320 | "web-time", 321 | ] 322 | 323 | [[package]] 324 | name = "burn-compute" 325 | version = "0.13.2" 326 | source = "registry+https://github.com/rust-lang/crates.io-index" 327 | checksum = "3e890d8999b25a1a090c2afe198243fc79f0a299efb531a4871c084b0ab9fa11" 328 | dependencies = [ 329 | "burn-common", 330 | "derive-new", 331 | "dirs", 332 | "hashbrown 0.14.5", 333 | "log", 334 | "md5", 335 | "serde", 336 | "serde_json", 337 | "spin", 338 | "web-time", 339 | ] 340 | 341 | [[package]] 342 | name = "burn-core" 343 | version = "0.13.2" 344 | source = "registry+https://github.com/rust-lang/crates.io-index" 345 | checksum = "8af6bc0afe55a57ff0b08f52302df4e3d09f96805a4f1e15c521f1082cb02b4f" 346 | dependencies = [ 347 | "bincode 2.0.0-rc.3", 348 | "burn-autodiff", 349 | "burn-candle", 350 | "burn-common", 351 | "burn-dataset", 352 | "burn-derive", 353 | "burn-ndarray", 354 | "burn-tch", 355 | "burn-tensor", 356 | "burn-wgpu", 357 | "derive-new", 358 | "flate2", 359 | "half", 360 | "hashbrown 0.14.5", 361 | "log", 362 | "num-traits", 363 | "rand", 364 | "rmp-serde", 365 | "serde", 366 | "serde_json", 367 | "spin", 368 | ] 369 | 370 | [[package]] 371 | name = "burn-dataset" 372 | version = "0.13.2" 373 | source = "registry+https://github.com/rust-lang/crates.io-index" 374 | checksum = "3feae7766b56e947d38ac4d6903388270d848609339a147a513145703426f6db" 375 | dependencies = [ 376 | "burn-common", 377 | "csv", 378 | "derive-new", 379 | "dirs", 380 | "flate2", 381 | "gix-tempfile", 382 | "globwalk", 383 | "image", 384 | "r2d2", 385 | "r2d2_sqlite", 386 | "rand", 387 | "rmp-serde", 388 | "rusqlite", 389 | "sanitize-filename", 390 | "serde", 391 | "serde_json", 392 | "serde_rusqlite", 393 | "strum", 394 | "strum_macros", 395 | "tempfile", 396 | "thiserror", 397 | ] 398 | 399 | [[package]] 400 | name = "burn-derive" 401 | version = "0.13.2" 402 | source = "registry+https://github.com/rust-lang/crates.io-index" 403 | checksum = "8618ac2c171c7054ffd3ce8da15c3d4b11dc805eb393065c74c05882ef79d931" 404 | dependencies = [ 405 | "derive-new", 406 | "proc-macro2", 407 | "quote", 408 | "syn 2.0.63", 409 | ] 410 | 411 | [[package]] 412 | name = "burn-fusion" 413 | version = "0.13.2" 414 | source = "registry+https://github.com/rust-lang/crates.io-index" 415 | checksum = "8d77b882d131a67d15f91b915fb3e0a5add73547e7352310d33c877fbe77c79e" 416 | dependencies = [ 417 | "burn-common", 418 | "burn-tensor", 419 | "derive-new", 420 | "hashbrown 0.14.5", 421 | "log", 422 | "serde", 423 | "spin", 424 | ] 425 | 426 | [[package]] 427 | name = "burn-jit" 428 | version = "0.13.2" 429 | source = "registry+https://github.com/rust-lang/crates.io-index" 430 | checksum = "0cb62a93030a690c329b95c01b43e3064a4bd36031e9111d537641d36e42f3ac" 431 | dependencies = [ 432 | "burn-common", 433 | "burn-compute", 434 | "burn-fusion", 435 | "burn-tensor", 436 | "bytemuck", 437 | "derive-new", 438 | "hashbrown 0.14.5", 439 | "log", 440 | "num-traits", 441 | "rand", 442 | "serde", 443 | "spin", 444 | "text_placeholder", 445 | ] 446 | 447 | [[package]] 448 | name = "burn-ndarray" 449 | version = "0.13.2" 450 | source = "registry+https://github.com/rust-lang/crates.io-index" 451 | checksum = "05f40bb0b5938937a721045752f1ec1baee8a873429fd17e6e6f2155c6cdf33a" 452 | dependencies = [ 453 | "burn-autodiff", 454 | "burn-common", 455 | "burn-tensor", 456 | "derive-new", 457 | "libm", 458 | "matrixmultiply", 459 | "ndarray", 460 | "num-traits", 461 | "rand", 462 | "rayon", 463 | "spin", 464 | ] 465 | 466 | [[package]] 467 | name = "burn-tch" 468 | version = "0.13.2" 469 | source = "registry+https://github.com/rust-lang/crates.io-index" 470 | checksum = "8cb9c2b547499a3d990e93b950965b9a478edfec4a7bf98d5d4412ff8c897129" 471 | dependencies = [ 472 | "burn-tensor", 473 | "half", 474 | "libc", 475 | "rand", 476 | "tch", 477 | ] 478 | 479 | [[package]] 480 | name = "burn-tensor" 481 | version = "0.13.2" 482 | source = "registry+https://github.com/rust-lang/crates.io-index" 483 | checksum = "bfa19c21f54e1a189be3bbaec45efafdf1c89b2763710b381c9f32ae25e7dbe8" 484 | dependencies = [ 485 | "burn-common", 486 | "derive-new", 487 | "half", 488 | "hashbrown 0.14.5", 489 | "num-traits", 490 | "rand", 491 | "rand_distr", 492 | "serde", 493 | ] 494 | 495 | [[package]] 496 | name = "burn-train" 497 | version = "0.13.2" 498 | source = "registry+https://github.com/rust-lang/crates.io-index" 499 | checksum = "0a0014ee82ef967bd82dda378cfaf340f255c39c729e29ac3bc65d3107e4c7ee" 500 | dependencies = [ 501 | "burn-core", 502 | "crossterm", 503 | "derive-new", 504 | "log", 505 | "nvml-wrapper", 506 | "ratatui", 507 | "serde", 508 | "sysinfo", 509 | "systemstat", 510 | "tracing-appender", 511 | "tracing-core", 512 | "tracing-subscriber", 513 | ] 514 | 515 | [[package]] 516 | name = "burn-wgpu" 517 | version = "0.13.2" 518 | source = "registry+https://github.com/rust-lang/crates.io-index" 519 | checksum = "1575890471123109c6aeb725c52ac649fa9e0013e2303f57dc534d5e0cb857e5" 520 | dependencies = [ 521 | "burn-common", 522 | "burn-compute", 523 | "burn-fusion", 524 | "burn-jit", 525 | "burn-tensor", 526 | "bytemuck", 527 | "derive-new", 528 | "futures-intrusive", 529 | "hashbrown 0.14.5", 530 | "log", 531 | "pollster", 532 | "wgpu", 533 | ] 534 | 535 | [[package]] 536 | name = "bytemuck" 537 | version = "1.16.0" 538 | source = "registry+https://github.com/rust-lang/crates.io-index" 539 | checksum = "78834c15cb5d5efe3452d58b1e8ba890dd62d21907f867f383358198e56ebca5" 540 | dependencies = [ 541 | "bytemuck_derive", 542 | ] 543 | 544 | [[package]] 545 | name = "bytemuck_derive" 546 | version = "1.6.0" 547 | source = "registry+https://github.com/rust-lang/crates.io-index" 548 | checksum = "4da9a32f3fed317401fa3c862968128267c3106685286e15d5aaa3d7389c2f60" 549 | dependencies = [ 550 | "proc-macro2", 551 | "quote", 552 | "syn 2.0.63", 553 | ] 554 | 555 | [[package]] 556 | name = "byteorder" 557 | version = "1.5.0" 558 | source = "registry+https://github.com/rust-lang/crates.io-index" 559 | checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" 560 | 561 | [[package]] 562 | name = "bytes" 563 | version = "1.6.0" 564 | source = "registry+https://github.com/rust-lang/crates.io-index" 565 | checksum = "514de17de45fdb8dc022b1a7975556c53c86f9f0aa5f534b98977b171857c2c9" 566 | 567 | [[package]] 568 | name = "bytesize" 569 | version = "1.3.0" 570 | source = "registry+https://github.com/rust-lang/crates.io-index" 571 | checksum = "a3e368af43e418a04d52505cf3dbc23dda4e3407ae2fa99fd0e4f308ce546acc" 572 | 573 | [[package]] 574 | name = "bzip2" 575 | version = "0.4.4" 576 | source = "registry+https://github.com/rust-lang/crates.io-index" 577 | checksum = "bdb116a6ef3f6c3698828873ad02c3014b3c85cadb88496095628e3ef1e347f8" 578 | dependencies = [ 579 | "bzip2-sys", 580 | "libc", 581 | ] 582 | 583 | [[package]] 584 | name = "bzip2-sys" 585 | version = "0.1.11+1.0.8" 586 | source = "registry+https://github.com/rust-lang/crates.io-index" 587 | checksum = "736a955f3fa7875102d57c82b8cac37ec45224a07fd32d58f9f7a186b6cd4cdc" 588 | dependencies = [ 589 | "cc", 590 | "libc", 591 | "pkg-config", 592 | ] 593 | 594 | [[package]] 595 | name = "candle-core" 596 | version = "0.4.1" 597 | source = "registry+https://github.com/rust-lang/crates.io-index" 598 | checksum = "6f1b20174c1707e20f4cb364a355b449803c03e9b0c9193324623cf9787a4e00" 599 | dependencies = [ 600 | "byteorder", 601 | "gemm", 602 | "half", 603 | "memmap2", 604 | "num-traits", 605 | "num_cpus", 606 | "rand", 607 | "rand_distr", 608 | "rayon", 609 | "safetensors 0.4.3", 610 | "thiserror", 611 | "yoke", 612 | "zip", 613 | ] 614 | 615 | [[package]] 616 | name = "cassowary" 617 | version = "0.3.0" 618 | source = "registry+https://github.com/rust-lang/crates.io-index" 619 | checksum = "df8670b8c7b9dae1793364eafadf7239c40d669904660c5960d74cfd80b46a53" 620 | 621 | [[package]] 622 | name = "cc" 623 | version = "1.0.97" 624 | source = "registry+https://github.com/rust-lang/crates.io-index" 625 | checksum = "099a5357d84c4c61eb35fc8eafa9a79a902c2f76911e5747ced4e032edd8d9b4" 626 | dependencies = [ 627 | "jobserver", 628 | "libc", 629 | "once_cell", 630 | ] 631 | 632 | [[package]] 633 | name = "cfg-if" 634 | version = "1.0.0" 635 | source = "registry+https://github.com/rust-lang/crates.io-index" 636 | checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" 637 | 638 | [[package]] 639 | name = "cfg_aliases" 640 | version = "0.1.1" 641 | source = "registry+https://github.com/rust-lang/crates.io-index" 642 | checksum = "fd16c4719339c4530435d38e511904438d07cce7950afa3718a84ac36c10e89e" 643 | 644 | [[package]] 645 | name = "cipher" 646 | version = "0.4.4" 647 | source = "registry+https://github.com/rust-lang/crates.io-index" 648 | checksum = "773f3b9af64447d2ce9850330c473515014aa235e6a783b02db81ff39e4a3dad" 649 | dependencies = [ 650 | "crypto-common", 651 | "inout", 652 | ] 653 | 654 | [[package]] 655 | name = "clap" 656 | version = "4.5.4" 657 | source = "registry+https://github.com/rust-lang/crates.io-index" 658 | checksum = "90bc066a67923782aa8515dbaea16946c5bcc5addbd668bb80af688e53e548a0" 659 | dependencies = [ 660 | "clap_builder", 661 | "clap_derive", 662 | ] 663 | 664 | [[package]] 665 | name = "clap_builder" 666 | version = "4.5.2" 667 | source = "registry+https://github.com/rust-lang/crates.io-index" 668 | checksum = "ae129e2e766ae0ec03484e609954119f123cc1fe650337e155d03b022f24f7b4" 669 | dependencies = [ 670 | "anstream", 671 | "anstyle", 672 | "clap_lex", 673 | "strsim", 674 | ] 675 | 676 | [[package]] 677 | name = "clap_derive" 678 | version = "4.5.4" 679 | source = "registry+https://github.com/rust-lang/crates.io-index" 680 | checksum = "528131438037fd55894f62d6e9f068b8f45ac57ffa77517819645d10aed04f64" 681 | dependencies = [ 682 | "heck 0.5.0", 683 | "proc-macro2", 684 | "quote", 685 | "syn 2.0.63", 686 | ] 687 | 688 | [[package]] 689 | name = "clap_lex" 690 | version = "0.7.0" 691 | source = "registry+https://github.com/rust-lang/crates.io-index" 692 | checksum = "98cc8fbded0c607b7ba9dd60cd98df59af97e84d24e49c8557331cfc26d301ce" 693 | 694 | [[package]] 695 | name = "codespan-reporting" 696 | version = "0.11.1" 697 | source = "registry+https://github.com/rust-lang/crates.io-index" 698 | checksum = "3538270d33cc669650c4b093848450d380def10c331d38c768e34cac80576e6e" 699 | dependencies = [ 700 | "termcolor", 701 | "unicode-width", 702 | ] 703 | 704 | [[package]] 705 | name = "color_quant" 706 | version = "1.1.0" 707 | source = "registry+https://github.com/rust-lang/crates.io-index" 708 | checksum = "3d7b894f5411737b7867f4827955924d7c254fc9f4d91a6aad6b097804b1018b" 709 | 710 | [[package]] 711 | name = "colorchoice" 712 | version = "1.0.1" 713 | source = "registry+https://github.com/rust-lang/crates.io-index" 714 | checksum = "0b6a852b24ab71dffc585bcb46eaf7959d175cb865a7152e35b348d1b2960422" 715 | 716 | [[package]] 717 | name = "com" 718 | version = "0.6.0" 719 | source = "registry+https://github.com/rust-lang/crates.io-index" 720 | checksum = "7e17887fd17353b65b1b2ef1c526c83e26cd72e74f598a8dc1bee13a48f3d9f6" 721 | dependencies = [ 722 | "com_macros", 723 | ] 724 | 725 | [[package]] 726 | name = "com_macros" 727 | version = "0.6.0" 728 | source = "registry+https://github.com/rust-lang/crates.io-index" 729 | checksum = "d375883580a668c7481ea6631fc1a8863e33cc335bf56bfad8d7e6d4b04b13a5" 730 | dependencies = [ 731 | "com_macros_support", 732 | "proc-macro2", 733 | "syn 1.0.109", 734 | ] 735 | 736 | [[package]] 737 | name = "com_macros_support" 738 | version = "0.6.0" 739 | source = "registry+https://github.com/rust-lang/crates.io-index" 740 | checksum = "ad899a1087a9296d5644792d7cb72b8e34c1bec8e7d4fbc002230169a6e8710c" 741 | dependencies = [ 742 | "proc-macro2", 743 | "quote", 744 | "syn 1.0.109", 745 | ] 746 | 747 | [[package]] 748 | name = "console" 749 | version = "0.15.8" 750 | source = "registry+https://github.com/rust-lang/crates.io-index" 751 | checksum = "0e1f83fc076bd6dd27517eacdf25fef6c4dfe5f1d7448bafaaf3a26f13b5e4eb" 752 | dependencies = [ 753 | "encode_unicode", 754 | "lazy_static", 755 | "libc", 756 | "unicode-width", 757 | "windows-sys 0.52.0", 758 | ] 759 | 760 | [[package]] 761 | name = "constant_time_eq" 762 | version = "0.1.5" 763 | source = "registry+https://github.com/rust-lang/crates.io-index" 764 | checksum = "245097e9a4535ee1e3e3931fcfcd55a796a44c643e8596ff6566d68f09b87bbc" 765 | 766 | [[package]] 767 | name = "core-foundation" 768 | version = "0.9.4" 769 | source = "registry+https://github.com/rust-lang/crates.io-index" 770 | checksum = "91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f" 771 | dependencies = [ 772 | "core-foundation-sys", 773 | "libc", 774 | ] 775 | 776 | [[package]] 777 | name = "core-foundation-sys" 778 | version = "0.8.6" 779 | source = "registry+https://github.com/rust-lang/crates.io-index" 780 | checksum = "06ea2b9bc92be3c2baa9334a323ebca2d6f074ff852cd1d7b11064035cd3868f" 781 | 782 | [[package]] 783 | name = "core-graphics-types" 784 | version = "0.1.3" 785 | source = "registry+https://github.com/rust-lang/crates.io-index" 786 | checksum = "45390e6114f68f718cc7a830514a96f903cccd70d02a8f6d9f643ac4ba45afaf" 787 | dependencies = [ 788 | "bitflags 1.3.2", 789 | "core-foundation", 790 | "libc", 791 | ] 792 | 793 | [[package]] 794 | name = "cpufeatures" 795 | version = "0.2.12" 796 | source = "registry+https://github.com/rust-lang/crates.io-index" 797 | checksum = "53fe5e26ff1b7aef8bca9c6080520cfb8d9333c7568e1829cef191a9723e5504" 798 | dependencies = [ 799 | "libc", 800 | ] 801 | 802 | [[package]] 803 | name = "crc32fast" 804 | version = "1.4.0" 805 | source = "registry+https://github.com/rust-lang/crates.io-index" 806 | checksum = "b3855a8a784b474f333699ef2bbca9db2c4a1f6d9088a90a2d25b1eb53111eaa" 807 | dependencies = [ 808 | "cfg-if", 809 | ] 810 | 811 | [[package]] 812 | name = "crossbeam-channel" 813 | version = "0.5.12" 814 | source = "registry+https://github.com/rust-lang/crates.io-index" 815 | checksum = "ab3db02a9c5b5121e1e42fbdb1aeb65f5e02624cc58c43f2884c6ccac0b82f95" 816 | dependencies = [ 817 | "crossbeam-utils", 818 | ] 819 | 820 | [[package]] 821 | name = "crossbeam-deque" 822 | version = "0.8.5" 823 | source = "registry+https://github.com/rust-lang/crates.io-index" 824 | checksum = "613f8cc01fe9cf1a3eb3d7f488fd2fa8388403e97039e2f73692932e291a770d" 825 | dependencies = [ 826 | "crossbeam-epoch", 827 | "crossbeam-utils", 828 | ] 829 | 830 | [[package]] 831 | name = "crossbeam-epoch" 832 | version = "0.9.18" 833 | source = "registry+https://github.com/rust-lang/crates.io-index" 834 | checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e" 835 | dependencies = [ 836 | "crossbeam-utils", 837 | ] 838 | 839 | [[package]] 840 | name = "crossbeam-utils" 841 | version = "0.8.19" 842 | source = "registry+https://github.com/rust-lang/crates.io-index" 843 | checksum = "248e3bacc7dc6baa3b21e405ee045c3047101a49145e7e9eca583ab4c2ca5345" 844 | 845 | [[package]] 846 | name = "crossterm" 847 | version = "0.27.0" 848 | source = "registry+https://github.com/rust-lang/crates.io-index" 849 | checksum = "f476fe445d41c9e991fd07515a6f463074b782242ccf4a5b7b1d1012e70824df" 850 | dependencies = [ 851 | "bitflags 2.5.0", 852 | "crossterm_winapi", 853 | "libc", 854 | "mio", 855 | "parking_lot", 856 | "signal-hook", 857 | "signal-hook-mio", 858 | "winapi", 859 | ] 860 | 861 | [[package]] 862 | name = "crossterm_winapi" 863 | version = "0.9.1" 864 | source = "registry+https://github.com/rust-lang/crates.io-index" 865 | checksum = "acdd7c62a3665c7f6830a51635d9ac9b23ed385797f70a83bb8bafe9c572ab2b" 866 | dependencies = [ 867 | "winapi", 868 | ] 869 | 870 | [[package]] 871 | name = "crunchy" 872 | version = "0.2.2" 873 | source = "registry+https://github.com/rust-lang/crates.io-index" 874 | checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7" 875 | 876 | [[package]] 877 | name = "crypto-common" 878 | version = "0.1.6" 879 | source = "registry+https://github.com/rust-lang/crates.io-index" 880 | checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" 881 | dependencies = [ 882 | "generic-array", 883 | "typenum", 884 | ] 885 | 886 | [[package]] 887 | name = "csv" 888 | version = "1.3.0" 889 | source = "registry+https://github.com/rust-lang/crates.io-index" 890 | checksum = "ac574ff4d437a7b5ad237ef331c17ccca63c46479e5b5453eb8e10bb99a759fe" 891 | dependencies = [ 892 | "csv-core", 893 | "itoa", 894 | "ryu", 895 | "serde", 896 | ] 897 | 898 | [[package]] 899 | name = "csv-core" 900 | version = "0.1.11" 901 | source = "registry+https://github.com/rust-lang/crates.io-index" 902 | checksum = "5efa2b3d7902f4b634a20cae3c9c4e6209dc4779feb6863329607560143efa70" 903 | dependencies = [ 904 | "memchr", 905 | ] 906 | 907 | [[package]] 908 | name = "d3d12" 909 | version = "0.19.0" 910 | source = "registry+https://github.com/rust-lang/crates.io-index" 911 | checksum = "3e3d747f100290a1ca24b752186f61f6637e1deffe3bf6320de6fcb29510a307" 912 | dependencies = [ 913 | "bitflags 2.5.0", 914 | "libloading 0.8.3", 915 | "winapi", 916 | ] 917 | 918 | [[package]] 919 | name = "darling" 920 | version = "0.20.9" 921 | source = "registry+https://github.com/rust-lang/crates.io-index" 922 | checksum = "83b2eb4d90d12bdda5ed17de686c2acb4c57914f8f921b8da7e112b5a36f3fe1" 923 | dependencies = [ 924 | "darling_core", 925 | "darling_macro", 926 | ] 927 | 928 | [[package]] 929 | name = "darling_core" 930 | version = "0.20.9" 931 | source = "registry+https://github.com/rust-lang/crates.io-index" 932 | checksum = "622687fe0bac72a04e5599029151f5796111b90f1baaa9b544d807a5e31cd120" 933 | dependencies = [ 934 | "fnv", 935 | "ident_case", 936 | "proc-macro2", 937 | "quote", 938 | "strsim", 939 | "syn 2.0.63", 940 | ] 941 | 942 | [[package]] 943 | name = "darling_macro" 944 | version = "0.20.9" 945 | source = "registry+https://github.com/rust-lang/crates.io-index" 946 | checksum = "733cabb43482b1a1b53eee8583c2b9e8684d592215ea83efd305dd31bc2f0178" 947 | dependencies = [ 948 | "darling_core", 949 | "quote", 950 | "syn 2.0.63", 951 | ] 952 | 953 | [[package]] 954 | name = "dashmap" 955 | version = "5.5.3" 956 | source = "registry+https://github.com/rust-lang/crates.io-index" 957 | checksum = "978747c1d849a7d2ee5e8adc0159961c48fb7e5db2f06af6723b80123bb53856" 958 | dependencies = [ 959 | "cfg-if", 960 | "hashbrown 0.14.5", 961 | "lock_api", 962 | "once_cell", 963 | "parking_lot_core", 964 | ] 965 | 966 | [[package]] 967 | name = "deranged" 968 | version = "0.3.11" 969 | source = "registry+https://github.com/rust-lang/crates.io-index" 970 | checksum = "b42b6fa04a440b495c8b04d0e71b707c585f83cb9cb28cf8cd0d976c315e31b4" 971 | dependencies = [ 972 | "powerfmt", 973 | ] 974 | 975 | [[package]] 976 | name = "derive-new" 977 | version = "0.6.0" 978 | source = "registry+https://github.com/rust-lang/crates.io-index" 979 | checksum = "d150dea618e920167e5973d70ae6ece4385b7164e0d799fe7c122dd0a5d912ad" 980 | dependencies = [ 981 | "proc-macro2", 982 | "quote", 983 | "syn 2.0.63", 984 | ] 985 | 986 | [[package]] 987 | name = "digest" 988 | version = "0.10.7" 989 | source = "registry+https://github.com/rust-lang/crates.io-index" 990 | checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" 991 | dependencies = [ 992 | "block-buffer", 993 | "crypto-common", 994 | "subtle", 995 | ] 996 | 997 | [[package]] 998 | name = "dirs" 999 | version = "5.0.1" 1000 | source = "registry+https://github.com/rust-lang/crates.io-index" 1001 | checksum = "44c45a9d03d6676652bcb5e724c7e988de1acad23a711b5217ab9cbecbec2225" 1002 | dependencies = [ 1003 | "dirs-sys", 1004 | ] 1005 | 1006 | [[package]] 1007 | name = "dirs-sys" 1008 | version = "0.4.1" 1009 | source = "registry+https://github.com/rust-lang/crates.io-index" 1010 | checksum = "520f05a5cbd335fae5a99ff7a6ab8627577660ee5cfd6a94a6a929b52ff0321c" 1011 | dependencies = [ 1012 | "libc", 1013 | "option-ext", 1014 | "redox_users", 1015 | "windows-sys 0.48.0", 1016 | ] 1017 | 1018 | [[package]] 1019 | name = "dyn-stack" 1020 | version = "0.10.0" 1021 | source = "registry+https://github.com/rust-lang/crates.io-index" 1022 | checksum = "56e53799688f5632f364f8fb387488dd05db9fe45db7011be066fc20e7027f8b" 1023 | dependencies = [ 1024 | "bytemuck", 1025 | "reborrow", 1026 | ] 1027 | 1028 | [[package]] 1029 | name = "either" 1030 | version = "1.11.0" 1031 | source = "registry+https://github.com/rust-lang/crates.io-index" 1032 | checksum = "a47c1c47d2f5964e29c61246e81db715514cd532db6b5116a25ea3c03d6780a2" 1033 | 1034 | [[package]] 1035 | name = "encode_unicode" 1036 | version = "0.3.6" 1037 | source = "registry+https://github.com/rust-lang/crates.io-index" 1038 | checksum = "a357d28ed41a50f9c765dbfe56cbc04a64e53e5fc58ba79fbc34c10ef3df831f" 1039 | 1040 | [[package]] 1041 | name = "encoding_rs" 1042 | version = "0.8.34" 1043 | source = "registry+https://github.com/rust-lang/crates.io-index" 1044 | checksum = "b45de904aa0b010bce2ab45264d0631681847fa7b6f2eaa7dab7619943bc4f59" 1045 | dependencies = [ 1046 | "cfg-if", 1047 | ] 1048 | 1049 | [[package]] 1050 | name = "enum-as-inner" 1051 | version = "0.6.0" 1052 | source = "registry+https://github.com/rust-lang/crates.io-index" 1053 | checksum = "5ffccbb6966c05b32ef8fbac435df276c4ae4d3dc55a8cd0eb9745e6c12f546a" 1054 | dependencies = [ 1055 | "heck 0.4.1", 1056 | "proc-macro2", 1057 | "quote", 1058 | "syn 2.0.63", 1059 | ] 1060 | 1061 | [[package]] 1062 | name = "equivalent" 1063 | version = "1.0.1" 1064 | source = "registry+https://github.com/rust-lang/crates.io-index" 1065 | checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" 1066 | 1067 | [[package]] 1068 | name = "errno" 1069 | version = "0.3.9" 1070 | source = "registry+https://github.com/rust-lang/crates.io-index" 1071 | checksum = "534c5cf6194dfab3db3242765c03bbe257cf92f22b38f6bc0c58d59108a820ba" 1072 | dependencies = [ 1073 | "libc", 1074 | "windows-sys 0.52.0", 1075 | ] 1076 | 1077 | [[package]] 1078 | name = "exr" 1079 | version = "1.72.0" 1080 | source = "registry+https://github.com/rust-lang/crates.io-index" 1081 | checksum = "887d93f60543e9a9362ef8a21beedd0a833c5d9610e18c67abe15a5963dcb1a4" 1082 | dependencies = [ 1083 | "bit_field", 1084 | "flume", 1085 | "half", 1086 | "lebe", 1087 | "miniz_oxide", 1088 | "rayon-core", 1089 | "smallvec", 1090 | "zune-inflate", 1091 | ] 1092 | 1093 | [[package]] 1094 | name = "fallible-iterator" 1095 | version = "0.3.0" 1096 | source = "registry+https://github.com/rust-lang/crates.io-index" 1097 | checksum = "2acce4a10f12dc2fb14a218589d4f1f62ef011b2d0cc4b3cb1bba8e94da14649" 1098 | 1099 | [[package]] 1100 | name = "fallible-streaming-iterator" 1101 | version = "0.1.9" 1102 | source = "registry+https://github.com/rust-lang/crates.io-index" 1103 | checksum = "7360491ce676a36bf9bb3c56c1aa791658183a54d2744120f27285738d90465a" 1104 | 1105 | [[package]] 1106 | name = "faster-hex" 1107 | version = "0.9.0" 1108 | source = "registry+https://github.com/rust-lang/crates.io-index" 1109 | checksum = "a2a2b11eda1d40935b26cf18f6833c526845ae8c41e58d09af6adeb6f0269183" 1110 | dependencies = [ 1111 | "serde", 1112 | ] 1113 | 1114 | [[package]] 1115 | name = "fastrand" 1116 | version = "2.1.0" 1117 | source = "registry+https://github.com/rust-lang/crates.io-index" 1118 | checksum = "9fc0510504f03c51ada170672ac806f1f105a88aa97a5281117e1ddc3368e51a" 1119 | 1120 | [[package]] 1121 | name = "fdeflate" 1122 | version = "0.3.4" 1123 | source = "registry+https://github.com/rust-lang/crates.io-index" 1124 | checksum = "4f9bfee30e4dedf0ab8b422f03af778d9612b63f502710fc500a334ebe2de645" 1125 | dependencies = [ 1126 | "simd-adler32", 1127 | ] 1128 | 1129 | [[package]] 1130 | name = "flate2" 1131 | version = "1.0.30" 1132 | source = "registry+https://github.com/rust-lang/crates.io-index" 1133 | checksum = "5f54427cfd1c7829e2a139fcefea601bf088ebca651d2bf53ebc600eac295dae" 1134 | dependencies = [ 1135 | "crc32fast", 1136 | "miniz_oxide", 1137 | ] 1138 | 1139 | [[package]] 1140 | name = "flume" 1141 | version = "0.11.0" 1142 | source = "registry+https://github.com/rust-lang/crates.io-index" 1143 | checksum = "55ac459de2512911e4b674ce33cf20befaba382d05b62b008afc1c8b57cbf181" 1144 | dependencies = [ 1145 | "spin", 1146 | ] 1147 | 1148 | [[package]] 1149 | name = "fnv" 1150 | version = "1.0.7" 1151 | source = "registry+https://github.com/rust-lang/crates.io-index" 1152 | checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" 1153 | 1154 | [[package]] 1155 | name = "foreign-types" 1156 | version = "0.3.2" 1157 | source = "registry+https://github.com/rust-lang/crates.io-index" 1158 | checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1" 1159 | dependencies = [ 1160 | "foreign-types-shared 0.1.1", 1161 | ] 1162 | 1163 | [[package]] 1164 | name = "foreign-types" 1165 | version = "0.5.0" 1166 | source = "registry+https://github.com/rust-lang/crates.io-index" 1167 | checksum = "d737d9aa519fb7b749cbc3b962edcf310a8dd1f4b67c91c4f83975dbdd17d965" 1168 | dependencies = [ 1169 | "foreign-types-macros", 1170 | "foreign-types-shared 0.3.1", 1171 | ] 1172 | 1173 | [[package]] 1174 | name = "foreign-types-macros" 1175 | version = "0.2.3" 1176 | source = "registry+https://github.com/rust-lang/crates.io-index" 1177 | checksum = "1a5c6c585bc94aaf2c7b51dd4c2ba22680844aba4c687be581871a6f518c5742" 1178 | dependencies = [ 1179 | "proc-macro2", 1180 | "quote", 1181 | "syn 2.0.63", 1182 | ] 1183 | 1184 | [[package]] 1185 | name = "foreign-types-shared" 1186 | version = "0.1.1" 1187 | source = "registry+https://github.com/rust-lang/crates.io-index" 1188 | checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" 1189 | 1190 | [[package]] 1191 | name = "foreign-types-shared" 1192 | version = "0.3.1" 1193 | source = "registry+https://github.com/rust-lang/crates.io-index" 1194 | checksum = "aa9a19cbb55df58761df49b23516a86d432839add4af60fc256da840f66ed35b" 1195 | 1196 | [[package]] 1197 | name = "form_urlencoded" 1198 | version = "1.2.1" 1199 | source = "registry+https://github.com/rust-lang/crates.io-index" 1200 | checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456" 1201 | dependencies = [ 1202 | "percent-encoding", 1203 | ] 1204 | 1205 | [[package]] 1206 | name = "futures-channel" 1207 | version = "0.3.30" 1208 | source = "registry+https://github.com/rust-lang/crates.io-index" 1209 | checksum = "eac8f7d7865dcb88bd4373ab671c8cf4508703796caa2b1985a9ca867b3fcb78" 1210 | dependencies = [ 1211 | "futures-core", 1212 | ] 1213 | 1214 | [[package]] 1215 | name = "futures-core" 1216 | version = "0.3.30" 1217 | source = "registry+https://github.com/rust-lang/crates.io-index" 1218 | checksum = "dfc6580bb841c5a68e9ef15c77ccc837b40a7504914d52e47b8b0e9bbda25a1d" 1219 | 1220 | [[package]] 1221 | name = "futures-intrusive" 1222 | version = "0.5.0" 1223 | source = "registry+https://github.com/rust-lang/crates.io-index" 1224 | checksum = "1d930c203dd0b6ff06e0201a4a2fe9149b43c684fd4420555b26d21b1a02956f" 1225 | dependencies = [ 1226 | "futures-core", 1227 | "lock_api", 1228 | "parking_lot", 1229 | ] 1230 | 1231 | [[package]] 1232 | name = "futures-sink" 1233 | version = "0.3.30" 1234 | source = "registry+https://github.com/rust-lang/crates.io-index" 1235 | checksum = "9fb8e00e87438d937621c1c6269e53f536c14d3fbd6a042bb24879e57d474fb5" 1236 | 1237 | [[package]] 1238 | name = "futures-task" 1239 | version = "0.3.30" 1240 | source = "registry+https://github.com/rust-lang/crates.io-index" 1241 | checksum = "38d84fa142264698cdce1a9f9172cf383a0c82de1bddcf3092901442c4097004" 1242 | 1243 | [[package]] 1244 | name = "futures-util" 1245 | version = "0.3.30" 1246 | source = "registry+https://github.com/rust-lang/crates.io-index" 1247 | checksum = "3d6401deb83407ab3da39eba7e33987a73c3df0c82b4bb5813ee871c19c41d48" 1248 | dependencies = [ 1249 | "futures-core", 1250 | "futures-task", 1251 | "pin-project-lite", 1252 | "pin-utils", 1253 | ] 1254 | 1255 | [[package]] 1256 | name = "gemm" 1257 | version = "0.17.1" 1258 | source = "registry+https://github.com/rust-lang/crates.io-index" 1259 | checksum = "6ab24cc62135b40090e31a76a9b2766a501979f3070fa27f689c27ec04377d32" 1260 | dependencies = [ 1261 | "dyn-stack", 1262 | "gemm-c32", 1263 | "gemm-c64", 1264 | "gemm-common", 1265 | "gemm-f16", 1266 | "gemm-f32", 1267 | "gemm-f64", 1268 | "num-complex", 1269 | "num-traits", 1270 | "paste", 1271 | "raw-cpuid", 1272 | "seq-macro", 1273 | ] 1274 | 1275 | [[package]] 1276 | name = "gemm-c32" 1277 | version = "0.17.1" 1278 | source = "registry+https://github.com/rust-lang/crates.io-index" 1279 | checksum = "b9c030d0b983d1e34a546b86e08f600c11696fde16199f971cd46c12e67512c0" 1280 | dependencies = [ 1281 | "dyn-stack", 1282 | "gemm-common", 1283 | "num-complex", 1284 | "num-traits", 1285 | "paste", 1286 | "raw-cpuid", 1287 | "seq-macro", 1288 | ] 1289 | 1290 | [[package]] 1291 | name = "gemm-c64" 1292 | version = "0.17.1" 1293 | source = "registry+https://github.com/rust-lang/crates.io-index" 1294 | checksum = "fbb5f2e79fefb9693d18e1066a557b4546cd334b226beadc68b11a8f9431852a" 1295 | dependencies = [ 1296 | "dyn-stack", 1297 | "gemm-common", 1298 | "num-complex", 1299 | "num-traits", 1300 | "paste", 1301 | "raw-cpuid", 1302 | "seq-macro", 1303 | ] 1304 | 1305 | [[package]] 1306 | name = "gemm-common" 1307 | version = "0.17.1" 1308 | source = "registry+https://github.com/rust-lang/crates.io-index" 1309 | checksum = "a2e7ea062c987abcd8db95db917b4ffb4ecdfd0668471d8dc54734fdff2354e8" 1310 | dependencies = [ 1311 | "bytemuck", 1312 | "dyn-stack", 1313 | "half", 1314 | "num-complex", 1315 | "num-traits", 1316 | "once_cell", 1317 | "paste", 1318 | "pulp", 1319 | "raw-cpuid", 1320 | "rayon", 1321 | "seq-macro", 1322 | "sysctl", 1323 | ] 1324 | 1325 | [[package]] 1326 | name = "gemm-f16" 1327 | version = "0.17.1" 1328 | source = "registry+https://github.com/rust-lang/crates.io-index" 1329 | checksum = "7ca4c06b9b11952071d317604acb332e924e817bd891bec8dfb494168c7cedd4" 1330 | dependencies = [ 1331 | "dyn-stack", 1332 | "gemm-common", 1333 | "gemm-f32", 1334 | "half", 1335 | "num-complex", 1336 | "num-traits", 1337 | "paste", 1338 | "raw-cpuid", 1339 | "rayon", 1340 | "seq-macro", 1341 | ] 1342 | 1343 | [[package]] 1344 | name = "gemm-f32" 1345 | version = "0.17.1" 1346 | source = "registry+https://github.com/rust-lang/crates.io-index" 1347 | checksum = "e9a69f51aaefbd9cf12d18faf273d3e982d9d711f60775645ed5c8047b4ae113" 1348 | dependencies = [ 1349 | "dyn-stack", 1350 | "gemm-common", 1351 | "num-complex", 1352 | "num-traits", 1353 | "paste", 1354 | "raw-cpuid", 1355 | "seq-macro", 1356 | ] 1357 | 1358 | [[package]] 1359 | name = "gemm-f64" 1360 | version = "0.17.1" 1361 | source = "registry+https://github.com/rust-lang/crates.io-index" 1362 | checksum = "aa397a48544fadf0b81ec8741e5c0fba0043008113f71f2034def1935645d2b0" 1363 | dependencies = [ 1364 | "dyn-stack", 1365 | "gemm-common", 1366 | "num-complex", 1367 | "num-traits", 1368 | "paste", 1369 | "raw-cpuid", 1370 | "seq-macro", 1371 | ] 1372 | 1373 | [[package]] 1374 | name = "generic-array" 1375 | version = "0.14.7" 1376 | source = "registry+https://github.com/rust-lang/crates.io-index" 1377 | checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" 1378 | dependencies = [ 1379 | "typenum", 1380 | "version_check", 1381 | ] 1382 | 1383 | [[package]] 1384 | name = "getrandom" 1385 | version = "0.2.15" 1386 | source = "registry+https://github.com/rust-lang/crates.io-index" 1387 | checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7" 1388 | dependencies = [ 1389 | "cfg-if", 1390 | "js-sys", 1391 | "libc", 1392 | "wasi", 1393 | "wasm-bindgen", 1394 | ] 1395 | 1396 | [[package]] 1397 | name = "gif" 1398 | version = "0.13.1" 1399 | source = "registry+https://github.com/rust-lang/crates.io-index" 1400 | checksum = "3fb2d69b19215e18bb912fa30f7ce15846e301408695e44e0ef719f1da9e19f2" 1401 | dependencies = [ 1402 | "color_quant", 1403 | "weezl", 1404 | ] 1405 | 1406 | [[package]] 1407 | name = "gimli" 1408 | version = "0.28.1" 1409 | source = "registry+https://github.com/rust-lang/crates.io-index" 1410 | checksum = "4271d37baee1b8c7e4b708028c57d816cf9d2434acb33a549475f78c181f6253" 1411 | 1412 | [[package]] 1413 | name = "gix-features" 1414 | version = "0.36.1" 1415 | source = "registry+https://github.com/rust-lang/crates.io-index" 1416 | checksum = "4d46a4a5c6bb5bebec9c0d18b65ada20e6517dbd7cf855b87dd4bbdce3a771b2" 1417 | dependencies = [ 1418 | "gix-hash", 1419 | "gix-trace", 1420 | "libc", 1421 | ] 1422 | 1423 | [[package]] 1424 | name = "gix-fs" 1425 | version = "0.8.1" 1426 | source = "registry+https://github.com/rust-lang/crates.io-index" 1427 | checksum = "20e86eb040f5776a5ade092282e51cdcad398adb77d948b88d17583c2ae4e107" 1428 | dependencies = [ 1429 | "gix-features", 1430 | ] 1431 | 1432 | [[package]] 1433 | name = "gix-hash" 1434 | version = "0.13.3" 1435 | source = "registry+https://github.com/rust-lang/crates.io-index" 1436 | checksum = "1f8cf8c2266f63e582b7eb206799b63aa5fa68ee510ad349f637dfe2d0653de0" 1437 | dependencies = [ 1438 | "faster-hex", 1439 | "thiserror", 1440 | ] 1441 | 1442 | [[package]] 1443 | name = "gix-tempfile" 1444 | version = "11.0.1" 1445 | source = "registry+https://github.com/rust-lang/crates.io-index" 1446 | checksum = "388dd29114a86ec69b28d1e26d6d63a662300ecf61ab3f4cc578f7d7dc9e7e23" 1447 | dependencies = [ 1448 | "dashmap", 1449 | "gix-fs", 1450 | "libc", 1451 | "once_cell", 1452 | "parking_lot", 1453 | "signal-hook", 1454 | "signal-hook-registry", 1455 | "tempfile", 1456 | ] 1457 | 1458 | [[package]] 1459 | name = "gix-trace" 1460 | version = "0.1.9" 1461 | source = "registry+https://github.com/rust-lang/crates.io-index" 1462 | checksum = "f924267408915fddcd558e3f37295cc7d6a3e50f8bd8b606cee0808c3915157e" 1463 | 1464 | [[package]] 1465 | name = "gl_generator" 1466 | version = "0.14.0" 1467 | source = "registry+https://github.com/rust-lang/crates.io-index" 1468 | checksum = "1a95dfc23a2b4a9a2f5ab41d194f8bfda3cabec42af4e39f08c339eb2a0c124d" 1469 | dependencies = [ 1470 | "khronos_api", 1471 | "log", 1472 | "xml-rs", 1473 | ] 1474 | 1475 | [[package]] 1476 | name = "globset" 1477 | version = "0.4.14" 1478 | source = "registry+https://github.com/rust-lang/crates.io-index" 1479 | checksum = "57da3b9b5b85bd66f31093f8c408b90a74431672542466497dcbdfdc02034be1" 1480 | dependencies = [ 1481 | "aho-corasick", 1482 | "bstr", 1483 | "log", 1484 | "regex-automata", 1485 | "regex-syntax", 1486 | ] 1487 | 1488 | [[package]] 1489 | name = "globwalk" 1490 | version = "0.9.1" 1491 | source = "registry+https://github.com/rust-lang/crates.io-index" 1492 | checksum = "0bf760ebf69878d9fd8f110c89703d90ce35095324d1f1edcb595c63945ee757" 1493 | dependencies = [ 1494 | "bitflags 2.5.0", 1495 | "ignore", 1496 | "walkdir", 1497 | ] 1498 | 1499 | [[package]] 1500 | name = "glow" 1501 | version = "0.13.1" 1502 | source = "registry+https://github.com/rust-lang/crates.io-index" 1503 | checksum = "bd348e04c43b32574f2de31c8bb397d96c9fcfa1371bd4ca6d8bdc464ab121b1" 1504 | dependencies = [ 1505 | "js-sys", 1506 | "slotmap", 1507 | "wasm-bindgen", 1508 | "web-sys", 1509 | ] 1510 | 1511 | [[package]] 1512 | name = "glutin_wgl_sys" 1513 | version = "0.5.0" 1514 | source = "registry+https://github.com/rust-lang/crates.io-index" 1515 | checksum = "6c8098adac955faa2d31079b65dc48841251f69efd3ac25477903fc424362ead" 1516 | dependencies = [ 1517 | "gl_generator", 1518 | ] 1519 | 1520 | [[package]] 1521 | name = "gpt-burn" 1522 | version = "0.1.0" 1523 | dependencies = [ 1524 | "bincode 1.3.3", 1525 | "burn", 1526 | "clap", 1527 | "indicatif", 1528 | "rand", 1529 | "rayon", 1530 | "serde", 1531 | ] 1532 | 1533 | [[package]] 1534 | name = "gpu-alloc" 1535 | version = "0.6.0" 1536 | source = "registry+https://github.com/rust-lang/crates.io-index" 1537 | checksum = "fbcd2dba93594b227a1f57ee09b8b9da8892c34d55aa332e034a228d0fe6a171" 1538 | dependencies = [ 1539 | "bitflags 2.5.0", 1540 | "gpu-alloc-types", 1541 | ] 1542 | 1543 | [[package]] 1544 | name = "gpu-alloc-types" 1545 | version = "0.3.0" 1546 | source = "registry+https://github.com/rust-lang/crates.io-index" 1547 | checksum = "98ff03b468aa837d70984d55f5d3f846f6ec31fe34bbb97c4f85219caeee1ca4" 1548 | dependencies = [ 1549 | "bitflags 2.5.0", 1550 | ] 1551 | 1552 | [[package]] 1553 | name = "gpu-allocator" 1554 | version = "0.25.0" 1555 | source = "registry+https://github.com/rust-lang/crates.io-index" 1556 | checksum = "6f56f6318968d03c18e1bcf4857ff88c61157e9da8e47c5f29055d60e1228884" 1557 | dependencies = [ 1558 | "log", 1559 | "presser", 1560 | "thiserror", 1561 | "winapi", 1562 | "windows", 1563 | ] 1564 | 1565 | [[package]] 1566 | name = "gpu-descriptor" 1567 | version = "0.2.4" 1568 | source = "registry+https://github.com/rust-lang/crates.io-index" 1569 | checksum = "cc11df1ace8e7e564511f53af41f3e42ddc95b56fd07b3f4445d2a6048bc682c" 1570 | dependencies = [ 1571 | "bitflags 2.5.0", 1572 | "gpu-descriptor-types", 1573 | "hashbrown 0.14.5", 1574 | ] 1575 | 1576 | [[package]] 1577 | name = "gpu-descriptor-types" 1578 | version = "0.1.2" 1579 | source = "registry+https://github.com/rust-lang/crates.io-index" 1580 | checksum = "6bf0b36e6f090b7e1d8a4b49c0cb81c1f8376f72198c65dd3ad9ff3556b8b78c" 1581 | dependencies = [ 1582 | "bitflags 2.5.0", 1583 | ] 1584 | 1585 | [[package]] 1586 | name = "h2" 1587 | version = "0.3.26" 1588 | source = "registry+https://github.com/rust-lang/crates.io-index" 1589 | checksum = "81fe527a889e1532da5c525686d96d4c2e74cdd345badf8dfef9f6b39dd5f5e8" 1590 | dependencies = [ 1591 | "bytes", 1592 | "fnv", 1593 | "futures-core", 1594 | "futures-sink", 1595 | "futures-util", 1596 | "http", 1597 | "indexmap", 1598 | "slab", 1599 | "tokio", 1600 | "tokio-util", 1601 | "tracing", 1602 | ] 1603 | 1604 | [[package]] 1605 | name = "half" 1606 | version = "2.4.1" 1607 | source = "registry+https://github.com/rust-lang/crates.io-index" 1608 | checksum = "6dd08c532ae367adf81c312a4580bc67f1d0fe8bc9c460520283f4c0ff277888" 1609 | dependencies = [ 1610 | "bytemuck", 1611 | "cfg-if", 1612 | "crunchy", 1613 | "num-traits", 1614 | "rand", 1615 | "rand_distr", 1616 | "serde", 1617 | ] 1618 | 1619 | [[package]] 1620 | name = "hashbrown" 1621 | version = "0.13.2" 1622 | source = "registry+https://github.com/rust-lang/crates.io-index" 1623 | checksum = "43a3c133739dddd0d2990f9a4bdf8eb4b21ef50e4851ca85ab661199821d510e" 1624 | dependencies = [ 1625 | "ahash", 1626 | ] 1627 | 1628 | [[package]] 1629 | name = "hashbrown" 1630 | version = "0.14.5" 1631 | source = "registry+https://github.com/rust-lang/crates.io-index" 1632 | checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" 1633 | dependencies = [ 1634 | "ahash", 1635 | "allocator-api2", 1636 | "serde", 1637 | ] 1638 | 1639 | [[package]] 1640 | name = "hashlink" 1641 | version = "0.8.4" 1642 | source = "registry+https://github.com/rust-lang/crates.io-index" 1643 | checksum = "e8094feaf31ff591f651a2664fb9cfd92bba7a60ce3197265e9482ebe753c8f7" 1644 | dependencies = [ 1645 | "hashbrown 0.14.5", 1646 | ] 1647 | 1648 | [[package]] 1649 | name = "hassle-rs" 1650 | version = "0.11.0" 1651 | source = "registry+https://github.com/rust-lang/crates.io-index" 1652 | checksum = "af2a7e73e1f34c48da31fb668a907f250794837e08faa144fd24f0b8b741e890" 1653 | dependencies = [ 1654 | "bitflags 2.5.0", 1655 | "com", 1656 | "libc", 1657 | "libloading 0.8.3", 1658 | "thiserror", 1659 | "widestring", 1660 | "winapi", 1661 | ] 1662 | 1663 | [[package]] 1664 | name = "heck" 1665 | version = "0.4.1" 1666 | source = "registry+https://github.com/rust-lang/crates.io-index" 1667 | checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" 1668 | 1669 | [[package]] 1670 | name = "heck" 1671 | version = "0.5.0" 1672 | source = "registry+https://github.com/rust-lang/crates.io-index" 1673 | checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" 1674 | 1675 | [[package]] 1676 | name = "hermit-abi" 1677 | version = "0.3.9" 1678 | source = "registry+https://github.com/rust-lang/crates.io-index" 1679 | checksum = "d231dfb89cfffdbc30e7fc41579ed6066ad03abda9e567ccafae602b97ec5024" 1680 | 1681 | [[package]] 1682 | name = "hexf-parse" 1683 | version = "0.2.1" 1684 | source = "registry+https://github.com/rust-lang/crates.io-index" 1685 | checksum = "dfa686283ad6dd069f105e5ab091b04c62850d3e4cf5d67debad1933f55023df" 1686 | 1687 | [[package]] 1688 | name = "hmac" 1689 | version = "0.12.1" 1690 | source = "registry+https://github.com/rust-lang/crates.io-index" 1691 | checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e" 1692 | dependencies = [ 1693 | "digest", 1694 | ] 1695 | 1696 | [[package]] 1697 | name = "http" 1698 | version = "0.2.12" 1699 | source = "registry+https://github.com/rust-lang/crates.io-index" 1700 | checksum = "601cbb57e577e2f5ef5be8e7b83f0f63994f25aa94d673e54a92d5c516d101f1" 1701 | dependencies = [ 1702 | "bytes", 1703 | "fnv", 1704 | "itoa", 1705 | ] 1706 | 1707 | [[package]] 1708 | name = "http-body" 1709 | version = "0.4.6" 1710 | source = "registry+https://github.com/rust-lang/crates.io-index" 1711 | checksum = "7ceab25649e9960c0311ea418d17bee82c0dcec1bd053b5f9a66e265a693bed2" 1712 | dependencies = [ 1713 | "bytes", 1714 | "http", 1715 | "pin-project-lite", 1716 | ] 1717 | 1718 | [[package]] 1719 | name = "httparse" 1720 | version = "1.8.0" 1721 | source = "registry+https://github.com/rust-lang/crates.io-index" 1722 | checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904" 1723 | 1724 | [[package]] 1725 | name = "httpdate" 1726 | version = "1.0.3" 1727 | source = "registry+https://github.com/rust-lang/crates.io-index" 1728 | checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" 1729 | 1730 | [[package]] 1731 | name = "hyper" 1732 | version = "0.14.28" 1733 | source = "registry+https://github.com/rust-lang/crates.io-index" 1734 | checksum = "bf96e135eb83a2a8ddf766e426a841d8ddd7449d5f00d34ea02b41d2f19eef80" 1735 | dependencies = [ 1736 | "bytes", 1737 | "futures-channel", 1738 | "futures-core", 1739 | "futures-util", 1740 | "h2", 1741 | "http", 1742 | "http-body", 1743 | "httparse", 1744 | "httpdate", 1745 | "itoa", 1746 | "pin-project-lite", 1747 | "socket2", 1748 | "tokio", 1749 | "tower-service", 1750 | "tracing", 1751 | "want", 1752 | ] 1753 | 1754 | [[package]] 1755 | name = "hyper-tls" 1756 | version = "0.5.0" 1757 | source = "registry+https://github.com/rust-lang/crates.io-index" 1758 | checksum = "d6183ddfa99b85da61a140bea0efc93fdf56ceaa041b37d553518030827f9905" 1759 | dependencies = [ 1760 | "bytes", 1761 | "hyper", 1762 | "native-tls", 1763 | "tokio", 1764 | "tokio-native-tls", 1765 | ] 1766 | 1767 | [[package]] 1768 | name = "ident_case" 1769 | version = "1.0.1" 1770 | source = "registry+https://github.com/rust-lang/crates.io-index" 1771 | checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" 1772 | 1773 | [[package]] 1774 | name = "idna" 1775 | version = "0.5.0" 1776 | source = "registry+https://github.com/rust-lang/crates.io-index" 1777 | checksum = "634d9b1461af396cad843f47fdba5597a4f9e6ddd4bfb6ff5d85028c25cb12f6" 1778 | dependencies = [ 1779 | "unicode-bidi", 1780 | "unicode-normalization", 1781 | ] 1782 | 1783 | [[package]] 1784 | name = "ignore" 1785 | version = "0.4.22" 1786 | source = "registry+https://github.com/rust-lang/crates.io-index" 1787 | checksum = "b46810df39e66e925525d6e38ce1e7f6e1d208f72dc39757880fcb66e2c58af1" 1788 | dependencies = [ 1789 | "crossbeam-deque", 1790 | "globset", 1791 | "log", 1792 | "memchr", 1793 | "regex-automata", 1794 | "same-file", 1795 | "walkdir", 1796 | "winapi-util", 1797 | ] 1798 | 1799 | [[package]] 1800 | name = "image" 1801 | version = "0.24.9" 1802 | source = "registry+https://github.com/rust-lang/crates.io-index" 1803 | checksum = "5690139d2f55868e080017335e4b94cb7414274c74f1669c84fb5feba2c9f69d" 1804 | dependencies = [ 1805 | "bytemuck", 1806 | "byteorder", 1807 | "color_quant", 1808 | "exr", 1809 | "gif", 1810 | "jpeg-decoder", 1811 | "num-traits", 1812 | "png", 1813 | "qoi", 1814 | "tiff", 1815 | ] 1816 | 1817 | [[package]] 1818 | name = "indexmap" 1819 | version = "2.2.6" 1820 | source = "registry+https://github.com/rust-lang/crates.io-index" 1821 | checksum = "168fb715dda47215e360912c096649d23d58bf392ac62f73919e831745e40f26" 1822 | dependencies = [ 1823 | "equivalent", 1824 | "hashbrown 0.14.5", 1825 | ] 1826 | 1827 | [[package]] 1828 | name = "indicatif" 1829 | version = "0.17.8" 1830 | source = "registry+https://github.com/rust-lang/crates.io-index" 1831 | checksum = "763a5a8f45087d6bcea4222e7b72c291a054edf80e4ef6efd2a4979878c7bea3" 1832 | dependencies = [ 1833 | "console", 1834 | "instant", 1835 | "number_prefix", 1836 | "portable-atomic", 1837 | "rayon", 1838 | "unicode-width", 1839 | ] 1840 | 1841 | [[package]] 1842 | name = "indoc" 1843 | version = "2.0.5" 1844 | source = "registry+https://github.com/rust-lang/crates.io-index" 1845 | checksum = "b248f5224d1d606005e02c97f5aa4e88eeb230488bcc03bc9ca4d7991399f2b5" 1846 | 1847 | [[package]] 1848 | name = "inout" 1849 | version = "0.1.3" 1850 | source = "registry+https://github.com/rust-lang/crates.io-index" 1851 | checksum = "a0c10553d664a4d0bcff9f4215d0aac67a639cc68ef660840afe309b807bc9f5" 1852 | dependencies = [ 1853 | "generic-array", 1854 | ] 1855 | 1856 | [[package]] 1857 | name = "instant" 1858 | version = "0.1.12" 1859 | source = "registry+https://github.com/rust-lang/crates.io-index" 1860 | checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c" 1861 | dependencies = [ 1862 | "cfg-if", 1863 | ] 1864 | 1865 | [[package]] 1866 | name = "ipnet" 1867 | version = "2.9.0" 1868 | source = "registry+https://github.com/rust-lang/crates.io-index" 1869 | checksum = "8f518f335dce6725a761382244631d86cf0ccb2863413590b31338feb467f9c3" 1870 | 1871 | [[package]] 1872 | name = "is_terminal_polyfill" 1873 | version = "1.70.0" 1874 | source = "registry+https://github.com/rust-lang/crates.io-index" 1875 | checksum = "f8478577c03552c21db0e2724ffb8986a5ce7af88107e6be5d2ee6e158c12800" 1876 | 1877 | [[package]] 1878 | name = "itertools" 1879 | version = "0.12.1" 1880 | source = "registry+https://github.com/rust-lang/crates.io-index" 1881 | checksum = "ba291022dbbd398a455acf126c1e341954079855bc60dfdda641363bd6922569" 1882 | dependencies = [ 1883 | "either", 1884 | ] 1885 | 1886 | [[package]] 1887 | name = "itoa" 1888 | version = "1.0.11" 1889 | source = "registry+https://github.com/rust-lang/crates.io-index" 1890 | checksum = "49f1f14873335454500d59611f1cf4a4b0f786f9ac11f4312a78e4cf2566695b" 1891 | 1892 | [[package]] 1893 | name = "jni-sys" 1894 | version = "0.3.0" 1895 | source = "registry+https://github.com/rust-lang/crates.io-index" 1896 | checksum = "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130" 1897 | 1898 | [[package]] 1899 | name = "jobserver" 1900 | version = "0.1.31" 1901 | source = "registry+https://github.com/rust-lang/crates.io-index" 1902 | checksum = "d2b099aaa34a9751c5bf0878add70444e1ed2dd73f347be99003d4577277de6e" 1903 | dependencies = [ 1904 | "libc", 1905 | ] 1906 | 1907 | [[package]] 1908 | name = "jpeg-decoder" 1909 | version = "0.3.1" 1910 | source = "registry+https://github.com/rust-lang/crates.io-index" 1911 | checksum = "f5d4a7da358eff58addd2877a45865158f0d78c911d43a5784ceb7bbf52833b0" 1912 | dependencies = [ 1913 | "rayon", 1914 | ] 1915 | 1916 | [[package]] 1917 | name = "js-sys" 1918 | version = "0.3.69" 1919 | source = "registry+https://github.com/rust-lang/crates.io-index" 1920 | checksum = "29c15563dc2726973df627357ce0c9ddddbea194836909d655df6a75d2cf296d" 1921 | dependencies = [ 1922 | "wasm-bindgen", 1923 | ] 1924 | 1925 | [[package]] 1926 | name = "khronos-egl" 1927 | version = "6.0.0" 1928 | source = "registry+https://github.com/rust-lang/crates.io-index" 1929 | checksum = "6aae1df220ece3c0ada96b8153459b67eebe9ae9212258bb0134ae60416fdf76" 1930 | dependencies = [ 1931 | "libc", 1932 | "libloading 0.8.3", 1933 | "pkg-config", 1934 | ] 1935 | 1936 | [[package]] 1937 | name = "khronos_api" 1938 | version = "3.1.0" 1939 | source = "registry+https://github.com/rust-lang/crates.io-index" 1940 | checksum = "e2db585e1d738fc771bf08a151420d3ed193d9d895a36df7f6f8a9456b911ddc" 1941 | 1942 | [[package]] 1943 | name = "lazy_static" 1944 | version = "1.4.0" 1945 | source = "registry+https://github.com/rust-lang/crates.io-index" 1946 | checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" 1947 | 1948 | [[package]] 1949 | name = "lebe" 1950 | version = "0.5.2" 1951 | source = "registry+https://github.com/rust-lang/crates.io-index" 1952 | checksum = "03087c2bad5e1034e8cace5926dec053fb3790248370865f5117a7d0213354c8" 1953 | 1954 | [[package]] 1955 | name = "libc" 1956 | version = "0.2.154" 1957 | source = "registry+https://github.com/rust-lang/crates.io-index" 1958 | checksum = "ae743338b92ff9146ce83992f766a31066a91a8c84a45e0e9f21e7cf6de6d346" 1959 | 1960 | [[package]] 1961 | name = "libloading" 1962 | version = "0.7.4" 1963 | source = "registry+https://github.com/rust-lang/crates.io-index" 1964 | checksum = "b67380fd3b2fbe7527a606e18729d21c6f3951633d0500574c4dc22d2d638b9f" 1965 | dependencies = [ 1966 | "cfg-if", 1967 | "winapi", 1968 | ] 1969 | 1970 | [[package]] 1971 | name = "libloading" 1972 | version = "0.8.3" 1973 | source = "registry+https://github.com/rust-lang/crates.io-index" 1974 | checksum = "0c2a198fb6b0eada2a8df47933734e6d35d350665a33a3593d7164fa52c75c19" 1975 | dependencies = [ 1976 | "cfg-if", 1977 | "windows-targets 0.52.5", 1978 | ] 1979 | 1980 | [[package]] 1981 | name = "libm" 1982 | version = "0.2.8" 1983 | source = "registry+https://github.com/rust-lang/crates.io-index" 1984 | checksum = "4ec2a862134d2a7d32d7983ddcdd1c4923530833c9f2ea1a44fc5fa473989058" 1985 | 1986 | [[package]] 1987 | name = "libredox" 1988 | version = "0.1.3" 1989 | source = "registry+https://github.com/rust-lang/crates.io-index" 1990 | checksum = "c0ff37bd590ca25063e35af745c343cb7a0271906fb7b37e4813e8f79f00268d" 1991 | dependencies = [ 1992 | "bitflags 2.5.0", 1993 | "libc", 1994 | ] 1995 | 1996 | [[package]] 1997 | name = "libsqlite3-sys" 1998 | version = "0.27.0" 1999 | source = "registry+https://github.com/rust-lang/crates.io-index" 2000 | checksum = "cf4e226dcd58b4be396f7bd3c20da8fdee2911400705297ba7d2d7cc2c30f716" 2001 | dependencies = [ 2002 | "cc", 2003 | "pkg-config", 2004 | "vcpkg", 2005 | ] 2006 | 2007 | [[package]] 2008 | name = "linux-raw-sys" 2009 | version = "0.4.13" 2010 | source = "registry+https://github.com/rust-lang/crates.io-index" 2011 | checksum = "01cda141df6706de531b6c46c3a33ecca755538219bd484262fa09410c13539c" 2012 | 2013 | [[package]] 2014 | name = "lock_api" 2015 | version = "0.4.12" 2016 | source = "registry+https://github.com/rust-lang/crates.io-index" 2017 | checksum = "07af8b9cdd281b7915f413fa73f29ebd5d55d0d3f0155584dade1ff18cea1b17" 2018 | dependencies = [ 2019 | "autocfg", 2020 | "scopeguard", 2021 | ] 2022 | 2023 | [[package]] 2024 | name = "log" 2025 | version = "0.4.21" 2026 | source = "registry+https://github.com/rust-lang/crates.io-index" 2027 | checksum = "90ed8c1e510134f979dbc4f070f87d4313098b704861a105fe34231c70a3901c" 2028 | 2029 | [[package]] 2030 | name = "lru" 2031 | version = "0.12.3" 2032 | source = "registry+https://github.com/rust-lang/crates.io-index" 2033 | checksum = "d3262e75e648fce39813cb56ac41f3c3e3f65217ebf3844d818d1f9398cfb0dc" 2034 | dependencies = [ 2035 | "hashbrown 0.14.5", 2036 | ] 2037 | 2038 | [[package]] 2039 | name = "malloc_buf" 2040 | version = "0.0.6" 2041 | source = "registry+https://github.com/rust-lang/crates.io-index" 2042 | checksum = "62bb907fe88d54d8d9ce32a3cceab4218ed2f6b7d35617cafe9adf84e43919cb" 2043 | dependencies = [ 2044 | "libc", 2045 | ] 2046 | 2047 | [[package]] 2048 | name = "matrixmultiply" 2049 | version = "0.3.8" 2050 | source = "registry+https://github.com/rust-lang/crates.io-index" 2051 | checksum = "7574c1cf36da4798ab73da5b215bbf444f50718207754cb522201d78d1cd0ff2" 2052 | dependencies = [ 2053 | "autocfg", 2054 | "num_cpus", 2055 | "once_cell", 2056 | "rawpointer", 2057 | "thread-tree", 2058 | ] 2059 | 2060 | [[package]] 2061 | name = "md5" 2062 | version = "0.7.0" 2063 | source = "registry+https://github.com/rust-lang/crates.io-index" 2064 | checksum = "490cc448043f947bae3cbee9c203358d62dbee0db12107a74be5c30ccfd09771" 2065 | 2066 | [[package]] 2067 | name = "memchr" 2068 | version = "2.7.2" 2069 | source = "registry+https://github.com/rust-lang/crates.io-index" 2070 | checksum = "6c8640c5d730cb13ebd907d8d04b52f55ac9a2eec55b440c8892f40d56c76c1d" 2071 | 2072 | [[package]] 2073 | name = "memmap2" 2074 | version = "0.9.4" 2075 | source = "registry+https://github.com/rust-lang/crates.io-index" 2076 | checksum = "fe751422e4a8caa417e13c3ea66452215d7d63e19e604f4980461212f3ae1322" 2077 | dependencies = [ 2078 | "libc", 2079 | "stable_deref_trait", 2080 | ] 2081 | 2082 | [[package]] 2083 | name = "metal" 2084 | version = "0.27.0" 2085 | source = "registry+https://github.com/rust-lang/crates.io-index" 2086 | checksum = "c43f73953f8cbe511f021b58f18c3ce1c3d1ae13fe953293e13345bf83217f25" 2087 | dependencies = [ 2088 | "bitflags 2.5.0", 2089 | "block", 2090 | "core-graphics-types", 2091 | "foreign-types 0.5.0", 2092 | "log", 2093 | "objc", 2094 | "paste", 2095 | ] 2096 | 2097 | [[package]] 2098 | name = "mime" 2099 | version = "0.3.17" 2100 | source = "registry+https://github.com/rust-lang/crates.io-index" 2101 | checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" 2102 | 2103 | [[package]] 2104 | name = "minimal-lexical" 2105 | version = "0.2.1" 2106 | source = "registry+https://github.com/rust-lang/crates.io-index" 2107 | checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" 2108 | 2109 | [[package]] 2110 | name = "miniz_oxide" 2111 | version = "0.7.2" 2112 | source = "registry+https://github.com/rust-lang/crates.io-index" 2113 | checksum = "9d811f3e15f28568be3407c8e7fdb6514c1cda3cb30683f15b6a1a1dc4ea14a7" 2114 | dependencies = [ 2115 | "adler", 2116 | "simd-adler32", 2117 | ] 2118 | 2119 | [[package]] 2120 | name = "mio" 2121 | version = "0.8.11" 2122 | source = "registry+https://github.com/rust-lang/crates.io-index" 2123 | checksum = "a4a650543ca06a924e8b371db273b2756685faae30f8487da1b56505a8f78b0c" 2124 | dependencies = [ 2125 | "libc", 2126 | "log", 2127 | "wasi", 2128 | "windows-sys 0.48.0", 2129 | ] 2130 | 2131 | [[package]] 2132 | name = "naga" 2133 | version = "0.19.2" 2134 | source = "registry+https://github.com/rust-lang/crates.io-index" 2135 | checksum = "50e3524642f53d9af419ab5e8dd29d3ba155708267667c2f3f06c88c9e130843" 2136 | dependencies = [ 2137 | "bit-set", 2138 | "bitflags 2.5.0", 2139 | "codespan-reporting", 2140 | "hexf-parse", 2141 | "indexmap", 2142 | "log", 2143 | "num-traits", 2144 | "rustc-hash", 2145 | "spirv", 2146 | "termcolor", 2147 | "thiserror", 2148 | "unicode-xid", 2149 | ] 2150 | 2151 | [[package]] 2152 | name = "native-tls" 2153 | version = "0.2.11" 2154 | source = "registry+https://github.com/rust-lang/crates.io-index" 2155 | checksum = "07226173c32f2926027b63cce4bcd8076c3552846cbe7925f3aaffeac0a3b92e" 2156 | dependencies = [ 2157 | "lazy_static", 2158 | "libc", 2159 | "log", 2160 | "openssl", 2161 | "openssl-probe", 2162 | "openssl-sys", 2163 | "schannel", 2164 | "security-framework", 2165 | "security-framework-sys", 2166 | "tempfile", 2167 | ] 2168 | 2169 | [[package]] 2170 | name = "ndarray" 2171 | version = "0.15.6" 2172 | source = "registry+https://github.com/rust-lang/crates.io-index" 2173 | checksum = "adb12d4e967ec485a5f71c6311fe28158e9d6f4bc4a447b474184d0f91a8fa32" 2174 | dependencies = [ 2175 | "matrixmultiply", 2176 | "num-complex", 2177 | "num-integer", 2178 | "num-traits", 2179 | "rawpointer", 2180 | "rayon", 2181 | ] 2182 | 2183 | [[package]] 2184 | name = "ndk-sys" 2185 | version = "0.5.0+25.2.9519653" 2186 | source = "registry+https://github.com/rust-lang/crates.io-index" 2187 | checksum = "8c196769dd60fd4f363e11d948139556a344e79d451aeb2fa2fd040738ef7691" 2188 | dependencies = [ 2189 | "jni-sys", 2190 | ] 2191 | 2192 | [[package]] 2193 | name = "nom" 2194 | version = "7.1.3" 2195 | source = "registry+https://github.com/rust-lang/crates.io-index" 2196 | checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a" 2197 | dependencies = [ 2198 | "memchr", 2199 | "minimal-lexical", 2200 | ] 2201 | 2202 | [[package]] 2203 | name = "ntapi" 2204 | version = "0.4.1" 2205 | source = "registry+https://github.com/rust-lang/crates.io-index" 2206 | checksum = "e8a3895c6391c39d7fe7ebc444a87eb2991b2a0bc718fdabd071eec617fc68e4" 2207 | dependencies = [ 2208 | "winapi", 2209 | ] 2210 | 2211 | [[package]] 2212 | name = "nu-ansi-term" 2213 | version = "0.46.0" 2214 | source = "registry+https://github.com/rust-lang/crates.io-index" 2215 | checksum = "77a8165726e8236064dbb45459242600304b42a5ea24ee2948e18e023bf7ba84" 2216 | dependencies = [ 2217 | "overload", 2218 | "winapi", 2219 | ] 2220 | 2221 | [[package]] 2222 | name = "num-complex" 2223 | version = "0.4.6" 2224 | source = "registry+https://github.com/rust-lang/crates.io-index" 2225 | checksum = "73f88a1307638156682bada9d7604135552957b7818057dcef22705b4d509495" 2226 | dependencies = [ 2227 | "bytemuck", 2228 | "num-traits", 2229 | ] 2230 | 2231 | [[package]] 2232 | name = "num-conv" 2233 | version = "0.1.0" 2234 | source = "registry+https://github.com/rust-lang/crates.io-index" 2235 | checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9" 2236 | 2237 | [[package]] 2238 | name = "num-integer" 2239 | version = "0.1.46" 2240 | source = "registry+https://github.com/rust-lang/crates.io-index" 2241 | checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f" 2242 | dependencies = [ 2243 | "num-traits", 2244 | ] 2245 | 2246 | [[package]] 2247 | name = "num-traits" 2248 | version = "0.2.19" 2249 | source = "registry+https://github.com/rust-lang/crates.io-index" 2250 | checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" 2251 | dependencies = [ 2252 | "autocfg", 2253 | "libm", 2254 | ] 2255 | 2256 | [[package]] 2257 | name = "num_cpus" 2258 | version = "1.16.0" 2259 | source = "registry+https://github.com/rust-lang/crates.io-index" 2260 | checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43" 2261 | dependencies = [ 2262 | "hermit-abi", 2263 | "libc", 2264 | ] 2265 | 2266 | [[package]] 2267 | name = "num_threads" 2268 | version = "0.1.7" 2269 | source = "registry+https://github.com/rust-lang/crates.io-index" 2270 | checksum = "5c7398b9c8b70908f6371f47ed36737907c87c52af34c268fed0bf0ceb92ead9" 2271 | dependencies = [ 2272 | "libc", 2273 | ] 2274 | 2275 | [[package]] 2276 | name = "number_prefix" 2277 | version = "0.4.0" 2278 | source = "registry+https://github.com/rust-lang/crates.io-index" 2279 | checksum = "830b246a0e5f20af87141b25c173cd1b609bd7779a4617d6ec582abaf90870f3" 2280 | 2281 | [[package]] 2282 | name = "nvml-wrapper" 2283 | version = "0.9.0" 2284 | source = "registry+https://github.com/rust-lang/crates.io-index" 2285 | checksum = "7cd21b9f5a1cce3c3515c9ffa85f5c7443e07162dae0ccf4339bb7ca38ad3454" 2286 | dependencies = [ 2287 | "bitflags 1.3.2", 2288 | "libloading 0.7.4", 2289 | "nvml-wrapper-sys", 2290 | "static_assertions", 2291 | "thiserror", 2292 | "wrapcenum-derive", 2293 | ] 2294 | 2295 | [[package]] 2296 | name = "nvml-wrapper-sys" 2297 | version = "0.7.0" 2298 | source = "registry+https://github.com/rust-lang/crates.io-index" 2299 | checksum = "c961a2ea9e91c59a69b78e69090f6f5b867bb46c0c56de9482da232437c4987e" 2300 | dependencies = [ 2301 | "libloading 0.7.4", 2302 | ] 2303 | 2304 | [[package]] 2305 | name = "objc" 2306 | version = "0.2.7" 2307 | source = "registry+https://github.com/rust-lang/crates.io-index" 2308 | checksum = "915b1b472bc21c53464d6c8461c9d3af805ba1ef837e1cac254428f4a77177b1" 2309 | dependencies = [ 2310 | "malloc_buf", 2311 | "objc_exception", 2312 | ] 2313 | 2314 | [[package]] 2315 | name = "objc_exception" 2316 | version = "0.1.2" 2317 | source = "registry+https://github.com/rust-lang/crates.io-index" 2318 | checksum = "ad970fb455818ad6cba4c122ad012fae53ae8b4795f86378bce65e4f6bab2ca4" 2319 | dependencies = [ 2320 | "cc", 2321 | ] 2322 | 2323 | [[package]] 2324 | name = "object" 2325 | version = "0.32.2" 2326 | source = "registry+https://github.com/rust-lang/crates.io-index" 2327 | checksum = "a6a622008b6e321afc04970976f62ee297fdbaa6f95318ca343e3eebb9648441" 2328 | dependencies = [ 2329 | "memchr", 2330 | ] 2331 | 2332 | [[package]] 2333 | name = "once_cell" 2334 | version = "1.19.0" 2335 | source = "registry+https://github.com/rust-lang/crates.io-index" 2336 | checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" 2337 | 2338 | [[package]] 2339 | name = "openssl" 2340 | version = "0.10.64" 2341 | source = "registry+https://github.com/rust-lang/crates.io-index" 2342 | checksum = "95a0481286a310808298130d22dd1fef0fa571e05a8f44ec801801e84b216b1f" 2343 | dependencies = [ 2344 | "bitflags 2.5.0", 2345 | "cfg-if", 2346 | "foreign-types 0.3.2", 2347 | "libc", 2348 | "once_cell", 2349 | "openssl-macros", 2350 | "openssl-sys", 2351 | ] 2352 | 2353 | [[package]] 2354 | name = "openssl-macros" 2355 | version = "0.1.1" 2356 | source = "registry+https://github.com/rust-lang/crates.io-index" 2357 | checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" 2358 | dependencies = [ 2359 | "proc-macro2", 2360 | "quote", 2361 | "syn 2.0.63", 2362 | ] 2363 | 2364 | [[package]] 2365 | name = "openssl-probe" 2366 | version = "0.1.5" 2367 | source = "registry+https://github.com/rust-lang/crates.io-index" 2368 | checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" 2369 | 2370 | [[package]] 2371 | name = "openssl-sys" 2372 | version = "0.9.102" 2373 | source = "registry+https://github.com/rust-lang/crates.io-index" 2374 | checksum = "c597637d56fbc83893a35eb0dd04b2b8e7a50c91e64e9493e398b5df4fb45fa2" 2375 | dependencies = [ 2376 | "cc", 2377 | "libc", 2378 | "pkg-config", 2379 | "vcpkg", 2380 | ] 2381 | 2382 | [[package]] 2383 | name = "option-ext" 2384 | version = "0.2.0" 2385 | source = "registry+https://github.com/rust-lang/crates.io-index" 2386 | checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d" 2387 | 2388 | [[package]] 2389 | name = "overload" 2390 | version = "0.1.1" 2391 | source = "registry+https://github.com/rust-lang/crates.io-index" 2392 | checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" 2393 | 2394 | [[package]] 2395 | name = "parking_lot" 2396 | version = "0.12.2" 2397 | source = "registry+https://github.com/rust-lang/crates.io-index" 2398 | checksum = "7e4af0ca4f6caed20e900d564c242b8e5d4903fdacf31d3daf527b66fe6f42fb" 2399 | dependencies = [ 2400 | "lock_api", 2401 | "parking_lot_core", 2402 | ] 2403 | 2404 | [[package]] 2405 | name = "parking_lot_core" 2406 | version = "0.9.10" 2407 | source = "registry+https://github.com/rust-lang/crates.io-index" 2408 | checksum = "1e401f977ab385c9e4e3ab30627d6f26d00e2c73eef317493c4ec6d468726cf8" 2409 | dependencies = [ 2410 | "cfg-if", 2411 | "libc", 2412 | "redox_syscall", 2413 | "smallvec", 2414 | "windows-targets 0.52.5", 2415 | ] 2416 | 2417 | [[package]] 2418 | name = "password-hash" 2419 | version = "0.4.2" 2420 | source = "registry+https://github.com/rust-lang/crates.io-index" 2421 | checksum = "7676374caaee8a325c9e7a2ae557f216c5563a171d6997b0ef8a65af35147700" 2422 | dependencies = [ 2423 | "base64ct", 2424 | "rand_core", 2425 | "subtle", 2426 | ] 2427 | 2428 | [[package]] 2429 | name = "paste" 2430 | version = "1.0.15" 2431 | source = "registry+https://github.com/rust-lang/crates.io-index" 2432 | checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" 2433 | 2434 | [[package]] 2435 | name = "pbkdf2" 2436 | version = "0.11.0" 2437 | source = "registry+https://github.com/rust-lang/crates.io-index" 2438 | checksum = "83a0692ec44e4cf1ef28ca317f14f8f07da2d95ec3fa01f86e4467b725e60917" 2439 | dependencies = [ 2440 | "digest", 2441 | "hmac", 2442 | "password-hash", 2443 | "sha2", 2444 | ] 2445 | 2446 | [[package]] 2447 | name = "percent-encoding" 2448 | version = "2.3.1" 2449 | source = "registry+https://github.com/rust-lang/crates.io-index" 2450 | checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" 2451 | 2452 | [[package]] 2453 | name = "pin-project-lite" 2454 | version = "0.2.14" 2455 | source = "registry+https://github.com/rust-lang/crates.io-index" 2456 | checksum = "bda66fc9667c18cb2758a2ac84d1167245054bcf85d5d1aaa6923f45801bdd02" 2457 | 2458 | [[package]] 2459 | name = "pin-utils" 2460 | version = "0.1.0" 2461 | source = "registry+https://github.com/rust-lang/crates.io-index" 2462 | checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" 2463 | 2464 | [[package]] 2465 | name = "pkg-config" 2466 | version = "0.3.30" 2467 | source = "registry+https://github.com/rust-lang/crates.io-index" 2468 | checksum = "d231b230927b5e4ad203db57bbcbee2802f6bce620b1e4a9024a07d94e2907ec" 2469 | 2470 | [[package]] 2471 | name = "png" 2472 | version = "0.17.13" 2473 | source = "registry+https://github.com/rust-lang/crates.io-index" 2474 | checksum = "06e4b0d3d1312775e782c86c91a111aa1f910cbb65e1337f9975b5f9a554b5e1" 2475 | dependencies = [ 2476 | "bitflags 1.3.2", 2477 | "crc32fast", 2478 | "fdeflate", 2479 | "flate2", 2480 | "miniz_oxide", 2481 | ] 2482 | 2483 | [[package]] 2484 | name = "pollster" 2485 | version = "0.3.0" 2486 | source = "registry+https://github.com/rust-lang/crates.io-index" 2487 | checksum = "22686f4785f02a4fcc856d3b3bb19bf6c8160d103f7a99cc258bddd0251dc7f2" 2488 | 2489 | [[package]] 2490 | name = "portable-atomic" 2491 | version = "1.6.0" 2492 | source = "registry+https://github.com/rust-lang/crates.io-index" 2493 | checksum = "7170ef9988bc169ba16dd36a7fa041e5c4cbeb6a35b76d4c03daded371eae7c0" 2494 | 2495 | [[package]] 2496 | name = "powerfmt" 2497 | version = "0.2.0" 2498 | source = "registry+https://github.com/rust-lang/crates.io-index" 2499 | checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" 2500 | 2501 | [[package]] 2502 | name = "ppv-lite86" 2503 | version = "0.2.17" 2504 | source = "registry+https://github.com/rust-lang/crates.io-index" 2505 | checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" 2506 | 2507 | [[package]] 2508 | name = "presser" 2509 | version = "0.3.1" 2510 | source = "registry+https://github.com/rust-lang/crates.io-index" 2511 | checksum = "e8cf8e6a8aa66ce33f63993ffc4ea4271eb5b0530a9002db8455ea6050c77bfa" 2512 | 2513 | [[package]] 2514 | name = "proc-macro2" 2515 | version = "1.0.82" 2516 | source = "registry+https://github.com/rust-lang/crates.io-index" 2517 | checksum = "8ad3d49ab951a01fbaafe34f2ec74122942fe18a3f9814c3268f1bb72042131b" 2518 | dependencies = [ 2519 | "unicode-ident", 2520 | ] 2521 | 2522 | [[package]] 2523 | name = "profiling" 2524 | version = "1.0.15" 2525 | source = "registry+https://github.com/rust-lang/crates.io-index" 2526 | checksum = "43d84d1d7a6ac92673717f9f6d1518374ef257669c24ebc5ac25d5033828be58" 2527 | 2528 | [[package]] 2529 | name = "pulp" 2530 | version = "0.18.12" 2531 | source = "registry+https://github.com/rust-lang/crates.io-index" 2532 | checksum = "140dfe6dada20716bd5f7284406747c73061a56a0a5d4ad5aee7957c5f71606c" 2533 | dependencies = [ 2534 | "bytemuck", 2535 | "libm", 2536 | "num-complex", 2537 | "reborrow", 2538 | ] 2539 | 2540 | [[package]] 2541 | name = "qoi" 2542 | version = "0.4.1" 2543 | source = "registry+https://github.com/rust-lang/crates.io-index" 2544 | checksum = "7f6d64c71eb498fe9eae14ce4ec935c555749aef511cca85b5568910d6e48001" 2545 | dependencies = [ 2546 | "bytemuck", 2547 | ] 2548 | 2549 | [[package]] 2550 | name = "quote" 2551 | version = "1.0.36" 2552 | source = "registry+https://github.com/rust-lang/crates.io-index" 2553 | checksum = "0fa76aaf39101c457836aec0ce2316dbdc3ab723cdda1c6bd4e6ad4208acaca7" 2554 | dependencies = [ 2555 | "proc-macro2", 2556 | ] 2557 | 2558 | [[package]] 2559 | name = "r2d2" 2560 | version = "0.8.10" 2561 | source = "registry+https://github.com/rust-lang/crates.io-index" 2562 | checksum = "51de85fb3fb6524929c8a2eb85e6b6d363de4e8c48f9e2c2eac4944abc181c93" 2563 | dependencies = [ 2564 | "log", 2565 | "parking_lot", 2566 | "scheduled-thread-pool", 2567 | ] 2568 | 2569 | [[package]] 2570 | name = "r2d2_sqlite" 2571 | version = "0.23.0" 2572 | source = "registry+https://github.com/rust-lang/crates.io-index" 2573 | checksum = "4dc290b669d30e20751e813517bbe13662d020419c5c8818ff10b6e8bb7777f6" 2574 | dependencies = [ 2575 | "r2d2", 2576 | "rusqlite", 2577 | "uuid", 2578 | ] 2579 | 2580 | [[package]] 2581 | name = "rand" 2582 | version = "0.8.5" 2583 | source = "registry+https://github.com/rust-lang/crates.io-index" 2584 | checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" 2585 | dependencies = [ 2586 | "libc", 2587 | "rand_chacha", 2588 | "rand_core", 2589 | ] 2590 | 2591 | [[package]] 2592 | name = "rand_chacha" 2593 | version = "0.3.1" 2594 | source = "registry+https://github.com/rust-lang/crates.io-index" 2595 | checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" 2596 | dependencies = [ 2597 | "ppv-lite86", 2598 | "rand_core", 2599 | ] 2600 | 2601 | [[package]] 2602 | name = "rand_core" 2603 | version = "0.6.4" 2604 | source = "registry+https://github.com/rust-lang/crates.io-index" 2605 | checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" 2606 | dependencies = [ 2607 | "getrandom", 2608 | ] 2609 | 2610 | [[package]] 2611 | name = "rand_distr" 2612 | version = "0.4.3" 2613 | source = "registry+https://github.com/rust-lang/crates.io-index" 2614 | checksum = "32cb0b9bc82b0a0876c2dd994a7e7a2683d3e7390ca40e6886785ef0c7e3ee31" 2615 | dependencies = [ 2616 | "num-traits", 2617 | "rand", 2618 | ] 2619 | 2620 | [[package]] 2621 | name = "range-alloc" 2622 | version = "0.1.3" 2623 | source = "registry+https://github.com/rust-lang/crates.io-index" 2624 | checksum = "9c8a99fddc9f0ba0a85884b8d14e3592853e787d581ca1816c91349b10e4eeab" 2625 | 2626 | [[package]] 2627 | name = "ratatui" 2628 | version = "0.25.0" 2629 | source = "registry+https://github.com/rust-lang/crates.io-index" 2630 | checksum = "a5659e52e4ba6e07b2dad9f1158f578ef84a73762625ddb51536019f34d180eb" 2631 | dependencies = [ 2632 | "bitflags 2.5.0", 2633 | "cassowary", 2634 | "crossterm", 2635 | "indoc", 2636 | "itertools", 2637 | "lru", 2638 | "paste", 2639 | "stability", 2640 | "strum", 2641 | "time", 2642 | "unicode-segmentation", 2643 | "unicode-width", 2644 | ] 2645 | 2646 | [[package]] 2647 | name = "raw-cpuid" 2648 | version = "10.7.0" 2649 | source = "registry+https://github.com/rust-lang/crates.io-index" 2650 | checksum = "6c297679cb867470fa8c9f67dbba74a78d78e3e98d7cf2b08d6d71540f797332" 2651 | dependencies = [ 2652 | "bitflags 1.3.2", 2653 | ] 2654 | 2655 | [[package]] 2656 | name = "raw-window-handle" 2657 | version = "0.6.1" 2658 | source = "registry+https://github.com/rust-lang/crates.io-index" 2659 | checksum = "8cc3bcbdb1ddfc11e700e62968e6b4cc9c75bb466464ad28fb61c5b2c964418b" 2660 | 2661 | [[package]] 2662 | name = "rawpointer" 2663 | version = "0.2.1" 2664 | source = "registry+https://github.com/rust-lang/crates.io-index" 2665 | checksum = "60a357793950651c4ed0f3f52338f53b2f809f32d83a07f72909fa13e4c6c1e3" 2666 | 2667 | [[package]] 2668 | name = "rayon" 2669 | version = "1.10.0" 2670 | source = "registry+https://github.com/rust-lang/crates.io-index" 2671 | checksum = "b418a60154510ca1a002a752ca9714984e21e4241e804d32555251faf8b78ffa" 2672 | dependencies = [ 2673 | "either", 2674 | "rayon-core", 2675 | ] 2676 | 2677 | [[package]] 2678 | name = "rayon-core" 2679 | version = "1.12.1" 2680 | source = "registry+https://github.com/rust-lang/crates.io-index" 2681 | checksum = "1465873a3dfdaa8ae7cb14b4383657caab0b3e8a0aa9ae8e04b044854c8dfce2" 2682 | dependencies = [ 2683 | "crossbeam-deque", 2684 | "crossbeam-utils", 2685 | ] 2686 | 2687 | [[package]] 2688 | name = "reborrow" 2689 | version = "0.5.5" 2690 | source = "registry+https://github.com/rust-lang/crates.io-index" 2691 | checksum = "03251193000f4bd3b042892be858ee50e8b3719f2b08e5833ac4353724632430" 2692 | 2693 | [[package]] 2694 | name = "redox_syscall" 2695 | version = "0.5.1" 2696 | source = "registry+https://github.com/rust-lang/crates.io-index" 2697 | checksum = "469052894dcb553421e483e4209ee581a45100d31b4018de03e5a7ad86374a7e" 2698 | dependencies = [ 2699 | "bitflags 2.5.0", 2700 | ] 2701 | 2702 | [[package]] 2703 | name = "redox_users" 2704 | version = "0.4.5" 2705 | source = "registry+https://github.com/rust-lang/crates.io-index" 2706 | checksum = "bd283d9651eeda4b2a83a43c1c91b266c40fd76ecd39a50a8c630ae69dc72891" 2707 | dependencies = [ 2708 | "getrandom", 2709 | "libredox", 2710 | "thiserror", 2711 | ] 2712 | 2713 | [[package]] 2714 | name = "regex" 2715 | version = "1.10.4" 2716 | source = "registry+https://github.com/rust-lang/crates.io-index" 2717 | checksum = "c117dbdfde9c8308975b6a18d71f3f385c89461f7b3fb054288ecf2a2058ba4c" 2718 | dependencies = [ 2719 | "aho-corasick", 2720 | "memchr", 2721 | "regex-automata", 2722 | "regex-syntax", 2723 | ] 2724 | 2725 | [[package]] 2726 | name = "regex-automata" 2727 | version = "0.4.6" 2728 | source = "registry+https://github.com/rust-lang/crates.io-index" 2729 | checksum = "86b83b8b9847f9bf95ef68afb0b8e6cdb80f498442f5179a29fad448fcc1eaea" 2730 | dependencies = [ 2731 | "aho-corasick", 2732 | "memchr", 2733 | "regex-syntax", 2734 | ] 2735 | 2736 | [[package]] 2737 | name = "regex-syntax" 2738 | version = "0.8.3" 2739 | source = "registry+https://github.com/rust-lang/crates.io-index" 2740 | checksum = "adad44e29e4c806119491a7f06f03de4d1af22c3a680dd47f1e6e179439d1f56" 2741 | 2742 | [[package]] 2743 | name = "renderdoc-sys" 2744 | version = "1.1.0" 2745 | source = "registry+https://github.com/rust-lang/crates.io-index" 2746 | checksum = "19b30a45b0cd0bcca8037f3d0dc3421eaf95327a17cad11964fb8179b4fc4832" 2747 | 2748 | [[package]] 2749 | name = "reqwest" 2750 | version = "0.11.27" 2751 | source = "registry+https://github.com/rust-lang/crates.io-index" 2752 | checksum = "dd67538700a17451e7cba03ac727fb961abb7607553461627b97de0b89cf4a62" 2753 | dependencies = [ 2754 | "base64 0.21.7", 2755 | "bytes", 2756 | "encoding_rs", 2757 | "futures-core", 2758 | "futures-util", 2759 | "h2", 2760 | "http", 2761 | "http-body", 2762 | "hyper", 2763 | "hyper-tls", 2764 | "ipnet", 2765 | "js-sys", 2766 | "log", 2767 | "mime", 2768 | "native-tls", 2769 | "once_cell", 2770 | "percent-encoding", 2771 | "pin-project-lite", 2772 | "rustls-pemfile", 2773 | "serde", 2774 | "serde_json", 2775 | "serde_urlencoded", 2776 | "sync_wrapper", 2777 | "system-configuration", 2778 | "tokio", 2779 | "tokio-native-tls", 2780 | "tower-service", 2781 | "url", 2782 | "wasm-bindgen", 2783 | "wasm-bindgen-futures", 2784 | "web-sys", 2785 | "winreg", 2786 | ] 2787 | 2788 | [[package]] 2789 | name = "ring" 2790 | version = "0.17.8" 2791 | source = "registry+https://github.com/rust-lang/crates.io-index" 2792 | checksum = "c17fa4cb658e3583423e915b9f3acc01cceaee1860e33d59ebae66adc3a2dc0d" 2793 | dependencies = [ 2794 | "cc", 2795 | "cfg-if", 2796 | "getrandom", 2797 | "libc", 2798 | "spin", 2799 | "untrusted", 2800 | "windows-sys 0.52.0", 2801 | ] 2802 | 2803 | [[package]] 2804 | name = "rmp" 2805 | version = "0.8.14" 2806 | source = "registry+https://github.com/rust-lang/crates.io-index" 2807 | checksum = "228ed7c16fa39782c3b3468e974aec2795e9089153cd08ee2e9aefb3613334c4" 2808 | dependencies = [ 2809 | "byteorder", 2810 | "num-traits", 2811 | "paste", 2812 | ] 2813 | 2814 | [[package]] 2815 | name = "rmp-serde" 2816 | version = "1.3.0" 2817 | source = "registry+https://github.com/rust-lang/crates.io-index" 2818 | checksum = "52e599a477cf9840e92f2cde9a7189e67b42c57532749bf90aea6ec10facd4db" 2819 | dependencies = [ 2820 | "byteorder", 2821 | "rmp", 2822 | "serde", 2823 | ] 2824 | 2825 | [[package]] 2826 | name = "rusqlite" 2827 | version = "0.30.0" 2828 | source = "registry+https://github.com/rust-lang/crates.io-index" 2829 | checksum = "a78046161564f5e7cd9008aff3b2990b3850dc8e0349119b98e8f251e099f24d" 2830 | dependencies = [ 2831 | "bitflags 2.5.0", 2832 | "fallible-iterator", 2833 | "fallible-streaming-iterator", 2834 | "hashlink", 2835 | "libsqlite3-sys", 2836 | "smallvec", 2837 | ] 2838 | 2839 | [[package]] 2840 | name = "rustc-demangle" 2841 | version = "0.1.24" 2842 | source = "registry+https://github.com/rust-lang/crates.io-index" 2843 | checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f" 2844 | 2845 | [[package]] 2846 | name = "rustc-hash" 2847 | version = "1.1.0" 2848 | source = "registry+https://github.com/rust-lang/crates.io-index" 2849 | checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" 2850 | 2851 | [[package]] 2852 | name = "rustix" 2853 | version = "0.38.34" 2854 | source = "registry+https://github.com/rust-lang/crates.io-index" 2855 | checksum = "70dc5ec042f7a43c4a73241207cecc9873a06d45debb38b329f8541d85c2730f" 2856 | dependencies = [ 2857 | "bitflags 2.5.0", 2858 | "errno", 2859 | "libc", 2860 | "linux-raw-sys", 2861 | "windows-sys 0.52.0", 2862 | ] 2863 | 2864 | [[package]] 2865 | name = "rustls" 2866 | version = "0.22.4" 2867 | source = "registry+https://github.com/rust-lang/crates.io-index" 2868 | checksum = "bf4ef73721ac7bcd79b2b315da7779d8fc09718c6b3d2d1b2d94850eb8c18432" 2869 | dependencies = [ 2870 | "log", 2871 | "ring", 2872 | "rustls-pki-types", 2873 | "rustls-webpki", 2874 | "subtle", 2875 | "zeroize", 2876 | ] 2877 | 2878 | [[package]] 2879 | name = "rustls-pemfile" 2880 | version = "1.0.4" 2881 | source = "registry+https://github.com/rust-lang/crates.io-index" 2882 | checksum = "1c74cae0a4cf6ccbbf5f359f08efdf8ee7e1dc532573bf0db71968cb56b1448c" 2883 | dependencies = [ 2884 | "base64 0.21.7", 2885 | ] 2886 | 2887 | [[package]] 2888 | name = "rustls-pki-types" 2889 | version = "1.7.0" 2890 | source = "registry+https://github.com/rust-lang/crates.io-index" 2891 | checksum = "976295e77ce332211c0d24d92c0e83e50f5c5f046d11082cea19f3df13a3562d" 2892 | 2893 | [[package]] 2894 | name = "rustls-webpki" 2895 | version = "0.102.3" 2896 | source = "registry+https://github.com/rust-lang/crates.io-index" 2897 | checksum = "f3bce581c0dd41bce533ce695a1437fa16a7ab5ac3ccfa99fe1a620a7885eabf" 2898 | dependencies = [ 2899 | "ring", 2900 | "rustls-pki-types", 2901 | "untrusted", 2902 | ] 2903 | 2904 | [[package]] 2905 | name = "rustversion" 2906 | version = "1.0.17" 2907 | source = "registry+https://github.com/rust-lang/crates.io-index" 2908 | checksum = "955d28af4278de8121b7ebeb796b6a45735dc01436d898801014aced2773a3d6" 2909 | 2910 | [[package]] 2911 | name = "ryu" 2912 | version = "1.0.18" 2913 | source = "registry+https://github.com/rust-lang/crates.io-index" 2914 | checksum = "f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f" 2915 | 2916 | [[package]] 2917 | name = "safetensors" 2918 | version = "0.3.3" 2919 | source = "registry+https://github.com/rust-lang/crates.io-index" 2920 | checksum = "d93279b86b3de76f820a8854dd06cbc33cfa57a417b19c47f6a25280112fb1df" 2921 | dependencies = [ 2922 | "serde", 2923 | "serde_json", 2924 | ] 2925 | 2926 | [[package]] 2927 | name = "safetensors" 2928 | version = "0.4.3" 2929 | source = "registry+https://github.com/rust-lang/crates.io-index" 2930 | checksum = "8ced76b22c7fba1162f11a5a75d9d8405264b467a07ae0c9c29be119b9297db9" 2931 | dependencies = [ 2932 | "serde", 2933 | "serde_json", 2934 | ] 2935 | 2936 | [[package]] 2937 | name = "same-file" 2938 | version = "1.0.6" 2939 | source = "registry+https://github.com/rust-lang/crates.io-index" 2940 | checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" 2941 | dependencies = [ 2942 | "winapi-util", 2943 | ] 2944 | 2945 | [[package]] 2946 | name = "sanitize-filename" 2947 | version = "0.5.0" 2948 | source = "registry+https://github.com/rust-lang/crates.io-index" 2949 | checksum = "2ed72fbaf78e6f2d41744923916966c4fbe3d7c74e3037a8ee482f1115572603" 2950 | dependencies = [ 2951 | "lazy_static", 2952 | "regex", 2953 | ] 2954 | 2955 | [[package]] 2956 | name = "schannel" 2957 | version = "0.1.23" 2958 | source = "registry+https://github.com/rust-lang/crates.io-index" 2959 | checksum = "fbc91545643bcf3a0bbb6569265615222618bdf33ce4ffbbd13c4bbd4c093534" 2960 | dependencies = [ 2961 | "windows-sys 0.52.0", 2962 | ] 2963 | 2964 | [[package]] 2965 | name = "scheduled-thread-pool" 2966 | version = "0.2.7" 2967 | source = "registry+https://github.com/rust-lang/crates.io-index" 2968 | checksum = "3cbc66816425a074528352f5789333ecff06ca41b36b0b0efdfbb29edc391a19" 2969 | dependencies = [ 2970 | "parking_lot", 2971 | ] 2972 | 2973 | [[package]] 2974 | name = "scopeguard" 2975 | version = "1.2.0" 2976 | source = "registry+https://github.com/rust-lang/crates.io-index" 2977 | checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" 2978 | 2979 | [[package]] 2980 | name = "security-framework" 2981 | version = "2.11.0" 2982 | source = "registry+https://github.com/rust-lang/crates.io-index" 2983 | checksum = "c627723fd09706bacdb5cf41499e95098555af3c3c29d014dc3c458ef6be11c0" 2984 | dependencies = [ 2985 | "bitflags 2.5.0", 2986 | "core-foundation", 2987 | "core-foundation-sys", 2988 | "libc", 2989 | "security-framework-sys", 2990 | ] 2991 | 2992 | [[package]] 2993 | name = "security-framework-sys" 2994 | version = "2.11.0" 2995 | source = "registry+https://github.com/rust-lang/crates.io-index" 2996 | checksum = "317936bbbd05227752583946b9e66d7ce3b489f84e11a94a510b4437fef407d7" 2997 | dependencies = [ 2998 | "core-foundation-sys", 2999 | "libc", 3000 | ] 3001 | 3002 | [[package]] 3003 | name = "seq-macro" 3004 | version = "0.3.5" 3005 | source = "registry+https://github.com/rust-lang/crates.io-index" 3006 | checksum = "a3f0bf26fd526d2a95683cd0f87bf103b8539e2ca1ef48ce002d67aad59aa0b4" 3007 | 3008 | [[package]] 3009 | name = "serde" 3010 | version = "1.0.202" 3011 | source = "registry+https://github.com/rust-lang/crates.io-index" 3012 | checksum = "226b61a0d411b2ba5ff6d7f73a476ac4f8bb900373459cd00fab8512828ba395" 3013 | dependencies = [ 3014 | "serde_derive", 3015 | ] 3016 | 3017 | [[package]] 3018 | name = "serde_derive" 3019 | version = "1.0.202" 3020 | source = "registry+https://github.com/rust-lang/crates.io-index" 3021 | checksum = "6048858004bcff69094cd972ed40a32500f153bd3be9f716b2eed2e8217c4838" 3022 | dependencies = [ 3023 | "proc-macro2", 3024 | "quote", 3025 | "syn 2.0.63", 3026 | ] 3027 | 3028 | [[package]] 3029 | name = "serde_json" 3030 | version = "1.0.117" 3031 | source = "registry+https://github.com/rust-lang/crates.io-index" 3032 | checksum = "455182ea6142b14f93f4bc5320a2b31c1f266b66a4a5c858b013302a5d8cbfc3" 3033 | dependencies = [ 3034 | "itoa", 3035 | "ryu", 3036 | "serde", 3037 | ] 3038 | 3039 | [[package]] 3040 | name = "serde_rusqlite" 3041 | version = "0.34.0" 3042 | source = "registry+https://github.com/rust-lang/crates.io-index" 3043 | checksum = "4600dac14aada464c5584d327baa164e372153309bc4c0fb1498bbfbaa5a028b" 3044 | dependencies = [ 3045 | "rusqlite", 3046 | "serde", 3047 | ] 3048 | 3049 | [[package]] 3050 | name = "serde_urlencoded" 3051 | version = "0.7.1" 3052 | source = "registry+https://github.com/rust-lang/crates.io-index" 3053 | checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" 3054 | dependencies = [ 3055 | "form_urlencoded", 3056 | "itoa", 3057 | "ryu", 3058 | "serde", 3059 | ] 3060 | 3061 | [[package]] 3062 | name = "sha1" 3063 | version = "0.10.6" 3064 | source = "registry+https://github.com/rust-lang/crates.io-index" 3065 | checksum = "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba" 3066 | dependencies = [ 3067 | "cfg-if", 3068 | "cpufeatures", 3069 | "digest", 3070 | ] 3071 | 3072 | [[package]] 3073 | name = "sha2" 3074 | version = "0.10.8" 3075 | source = "registry+https://github.com/rust-lang/crates.io-index" 3076 | checksum = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8" 3077 | dependencies = [ 3078 | "cfg-if", 3079 | "cpufeatures", 3080 | "digest", 3081 | ] 3082 | 3083 | [[package]] 3084 | name = "sharded-slab" 3085 | version = "0.1.7" 3086 | source = "registry+https://github.com/rust-lang/crates.io-index" 3087 | checksum = "f40ca3c46823713e0d4209592e8d6e826aa57e928f09752619fc696c499637f6" 3088 | dependencies = [ 3089 | "lazy_static", 3090 | ] 3091 | 3092 | [[package]] 3093 | name = "signal-hook" 3094 | version = "0.3.17" 3095 | source = "registry+https://github.com/rust-lang/crates.io-index" 3096 | checksum = "8621587d4798caf8eb44879d42e56b9a93ea5dcd315a6487c357130095b62801" 3097 | dependencies = [ 3098 | "libc", 3099 | "signal-hook-registry", 3100 | ] 3101 | 3102 | [[package]] 3103 | name = "signal-hook-mio" 3104 | version = "0.2.3" 3105 | source = "registry+https://github.com/rust-lang/crates.io-index" 3106 | checksum = "29ad2e15f37ec9a6cc544097b78a1ec90001e9f71b81338ca39f430adaca99af" 3107 | dependencies = [ 3108 | "libc", 3109 | "mio", 3110 | "signal-hook", 3111 | ] 3112 | 3113 | [[package]] 3114 | name = "signal-hook-registry" 3115 | version = "1.4.2" 3116 | source = "registry+https://github.com/rust-lang/crates.io-index" 3117 | checksum = "a9e9e0b4211b72e7b8b6e85c807d36c212bdb33ea8587f7569562a84df5465b1" 3118 | dependencies = [ 3119 | "libc", 3120 | ] 3121 | 3122 | [[package]] 3123 | name = "simd-adler32" 3124 | version = "0.3.7" 3125 | source = "registry+https://github.com/rust-lang/crates.io-index" 3126 | checksum = "d66dc143e6b11c1eddc06d5c423cfc97062865baf299914ab64caa38182078fe" 3127 | 3128 | [[package]] 3129 | name = "slab" 3130 | version = "0.4.9" 3131 | source = "registry+https://github.com/rust-lang/crates.io-index" 3132 | checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" 3133 | dependencies = [ 3134 | "autocfg", 3135 | ] 3136 | 3137 | [[package]] 3138 | name = "slotmap" 3139 | version = "1.0.7" 3140 | source = "registry+https://github.com/rust-lang/crates.io-index" 3141 | checksum = "dbff4acf519f630b3a3ddcfaea6c06b42174d9a44bc70c620e9ed1649d58b82a" 3142 | dependencies = [ 3143 | "version_check", 3144 | ] 3145 | 3146 | [[package]] 3147 | name = "smallvec" 3148 | version = "1.13.2" 3149 | source = "registry+https://github.com/rust-lang/crates.io-index" 3150 | checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" 3151 | 3152 | [[package]] 3153 | name = "socket2" 3154 | version = "0.5.7" 3155 | source = "registry+https://github.com/rust-lang/crates.io-index" 3156 | checksum = "ce305eb0b4296696835b71df73eb912e0f1ffd2556a501fcede6e0c50349191c" 3157 | dependencies = [ 3158 | "libc", 3159 | "windows-sys 0.52.0", 3160 | ] 3161 | 3162 | [[package]] 3163 | name = "spin" 3164 | version = "0.9.8" 3165 | source = "registry+https://github.com/rust-lang/crates.io-index" 3166 | checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" 3167 | dependencies = [ 3168 | "lock_api", 3169 | ] 3170 | 3171 | [[package]] 3172 | name = "spirv" 3173 | version = "0.3.0+sdk-1.3.268.0" 3174 | source = "registry+https://github.com/rust-lang/crates.io-index" 3175 | checksum = "eda41003dc44290527a59b13432d4a0379379fa074b70174882adfbdfd917844" 3176 | dependencies = [ 3177 | "bitflags 2.5.0", 3178 | ] 3179 | 3180 | [[package]] 3181 | name = "stability" 3182 | version = "0.1.1" 3183 | source = "registry+https://github.com/rust-lang/crates.io-index" 3184 | checksum = "ebd1b177894da2a2d9120208c3386066af06a488255caabc5de8ddca22dbc3ce" 3185 | dependencies = [ 3186 | "quote", 3187 | "syn 1.0.109", 3188 | ] 3189 | 3190 | [[package]] 3191 | name = "stable_deref_trait" 3192 | version = "1.2.0" 3193 | source = "registry+https://github.com/rust-lang/crates.io-index" 3194 | checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" 3195 | 3196 | [[package]] 3197 | name = "static_assertions" 3198 | version = "1.1.0" 3199 | source = "registry+https://github.com/rust-lang/crates.io-index" 3200 | checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" 3201 | 3202 | [[package]] 3203 | name = "strsim" 3204 | version = "0.11.1" 3205 | source = "registry+https://github.com/rust-lang/crates.io-index" 3206 | checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" 3207 | 3208 | [[package]] 3209 | name = "strum" 3210 | version = "0.25.0" 3211 | source = "registry+https://github.com/rust-lang/crates.io-index" 3212 | checksum = "290d54ea6f91c969195bdbcd7442c8c2a2ba87da8bf60a7ee86a235d4bc1e125" 3213 | dependencies = [ 3214 | "strum_macros", 3215 | ] 3216 | 3217 | [[package]] 3218 | name = "strum_macros" 3219 | version = "0.25.3" 3220 | source = "registry+https://github.com/rust-lang/crates.io-index" 3221 | checksum = "23dc1fa9ac9c169a78ba62f0b841814b7abae11bdd047b9c58f893439e309ea0" 3222 | dependencies = [ 3223 | "heck 0.4.1", 3224 | "proc-macro2", 3225 | "quote", 3226 | "rustversion", 3227 | "syn 2.0.63", 3228 | ] 3229 | 3230 | [[package]] 3231 | name = "subtle" 3232 | version = "2.5.0" 3233 | source = "registry+https://github.com/rust-lang/crates.io-index" 3234 | checksum = "81cdd64d312baedb58e21336b31bc043b77e01cc99033ce76ef539f78e965ebc" 3235 | 3236 | [[package]] 3237 | name = "syn" 3238 | version = "1.0.109" 3239 | source = "registry+https://github.com/rust-lang/crates.io-index" 3240 | checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" 3241 | dependencies = [ 3242 | "proc-macro2", 3243 | "quote", 3244 | "unicode-ident", 3245 | ] 3246 | 3247 | [[package]] 3248 | name = "syn" 3249 | version = "2.0.63" 3250 | source = "registry+https://github.com/rust-lang/crates.io-index" 3251 | checksum = "bf5be731623ca1a1fb7d8be6f261a3be6d3e2337b8a1f97be944d020c8fcb704" 3252 | dependencies = [ 3253 | "proc-macro2", 3254 | "quote", 3255 | "unicode-ident", 3256 | ] 3257 | 3258 | [[package]] 3259 | name = "sync_wrapper" 3260 | version = "0.1.2" 3261 | source = "registry+https://github.com/rust-lang/crates.io-index" 3262 | checksum = "2047c6ded9c721764247e62cd3b03c09ffc529b2ba5b10ec482ae507a4a70160" 3263 | 3264 | [[package]] 3265 | name = "synstructure" 3266 | version = "0.13.1" 3267 | source = "registry+https://github.com/rust-lang/crates.io-index" 3268 | checksum = "c8af7666ab7b6390ab78131fb5b0fce11d6b7a6951602017c35fa82800708971" 3269 | dependencies = [ 3270 | "proc-macro2", 3271 | "quote", 3272 | "syn 2.0.63", 3273 | ] 3274 | 3275 | [[package]] 3276 | name = "sysctl" 3277 | version = "0.5.5" 3278 | source = "registry+https://github.com/rust-lang/crates.io-index" 3279 | checksum = "ec7dddc5f0fee506baf8b9fdb989e242f17e4b11c61dfbb0635b705217199eea" 3280 | dependencies = [ 3281 | "bitflags 2.5.0", 3282 | "byteorder", 3283 | "enum-as-inner", 3284 | "libc", 3285 | "thiserror", 3286 | "walkdir", 3287 | ] 3288 | 3289 | [[package]] 3290 | name = "sysinfo" 3291 | version = "0.30.12" 3292 | source = "registry+https://github.com/rust-lang/crates.io-index" 3293 | checksum = "732ffa00f53e6b2af46208fba5718d9662a421049204e156328b66791ffa15ae" 3294 | dependencies = [ 3295 | "cfg-if", 3296 | "core-foundation-sys", 3297 | "libc", 3298 | "ntapi", 3299 | "once_cell", 3300 | "rayon", 3301 | "windows", 3302 | ] 3303 | 3304 | [[package]] 3305 | name = "system-configuration" 3306 | version = "0.5.1" 3307 | source = "registry+https://github.com/rust-lang/crates.io-index" 3308 | checksum = "ba3a3adc5c275d719af8cb4272ea1c4a6d668a777f37e115f6d11ddbc1c8e0e7" 3309 | dependencies = [ 3310 | "bitflags 1.3.2", 3311 | "core-foundation", 3312 | "system-configuration-sys", 3313 | ] 3314 | 3315 | [[package]] 3316 | name = "system-configuration-sys" 3317 | version = "0.5.0" 3318 | source = "registry+https://github.com/rust-lang/crates.io-index" 3319 | checksum = "a75fb188eb626b924683e3b95e3a48e63551fcfb51949de2f06a9d91dbee93c9" 3320 | dependencies = [ 3321 | "core-foundation-sys", 3322 | "libc", 3323 | ] 3324 | 3325 | [[package]] 3326 | name = "systemstat" 3327 | version = "0.2.3" 3328 | source = "registry+https://github.com/rust-lang/crates.io-index" 3329 | checksum = "a24aec24a9312c83999a28e3ef9db7e2afd5c64bf47725b758cdc1cafd5b0bd2" 3330 | dependencies = [ 3331 | "bytesize", 3332 | "lazy_static", 3333 | "libc", 3334 | "nom", 3335 | "time", 3336 | "winapi", 3337 | ] 3338 | 3339 | [[package]] 3340 | name = "tch" 3341 | version = "0.15.0" 3342 | source = "registry+https://github.com/rust-lang/crates.io-index" 3343 | checksum = "7c7cb00bc2770454b515388d45be7097a3ded2eca172f3dcdb7ca4cc06c40bf1" 3344 | dependencies = [ 3345 | "half", 3346 | "lazy_static", 3347 | "libc", 3348 | "ndarray", 3349 | "rand", 3350 | "safetensors 0.3.3", 3351 | "thiserror", 3352 | "torch-sys", 3353 | "zip", 3354 | ] 3355 | 3356 | [[package]] 3357 | name = "tempfile" 3358 | version = "3.10.1" 3359 | source = "registry+https://github.com/rust-lang/crates.io-index" 3360 | checksum = "85b77fafb263dd9d05cbeac119526425676db3784113aa9295c88498cbf8bff1" 3361 | dependencies = [ 3362 | "cfg-if", 3363 | "fastrand", 3364 | "rustix", 3365 | "windows-sys 0.52.0", 3366 | ] 3367 | 3368 | [[package]] 3369 | name = "termcolor" 3370 | version = "1.4.1" 3371 | source = "registry+https://github.com/rust-lang/crates.io-index" 3372 | checksum = "06794f8f6c5c898b3275aebefa6b8a1cb24cd2c6c79397ab15774837a0bc5755" 3373 | dependencies = [ 3374 | "winapi-util", 3375 | ] 3376 | 3377 | [[package]] 3378 | name = "text_placeholder" 3379 | version = "0.5.0" 3380 | source = "registry+https://github.com/rust-lang/crates.io-index" 3381 | checksum = "512104f982ce6f50def5340f9d7d14cc21f7a859e9ccd251aa19d12e1345c070" 3382 | dependencies = [ 3383 | "hashbrown 0.13.2", 3384 | "serde", 3385 | "serde_json", 3386 | ] 3387 | 3388 | [[package]] 3389 | name = "thiserror" 3390 | version = "1.0.60" 3391 | source = "registry+https://github.com/rust-lang/crates.io-index" 3392 | checksum = "579e9083ca58dd9dcf91a9923bb9054071b9ebbd800b342194c9feb0ee89fc18" 3393 | dependencies = [ 3394 | "thiserror-impl", 3395 | ] 3396 | 3397 | [[package]] 3398 | name = "thiserror-impl" 3399 | version = "1.0.60" 3400 | source = "registry+https://github.com/rust-lang/crates.io-index" 3401 | checksum = "e2470041c06ec3ac1ab38d0356a6119054dedaea53e12fbefc0de730a1c08524" 3402 | dependencies = [ 3403 | "proc-macro2", 3404 | "quote", 3405 | "syn 2.0.63", 3406 | ] 3407 | 3408 | [[package]] 3409 | name = "thread-tree" 3410 | version = "0.3.3" 3411 | source = "registry+https://github.com/rust-lang/crates.io-index" 3412 | checksum = "ffbd370cb847953a25954d9f63e14824a36113f8c72eecf6eccef5dc4b45d630" 3413 | dependencies = [ 3414 | "crossbeam-channel", 3415 | ] 3416 | 3417 | [[package]] 3418 | name = "thread_local" 3419 | version = "1.1.8" 3420 | source = "registry+https://github.com/rust-lang/crates.io-index" 3421 | checksum = "8b9ef9bad013ada3808854ceac7b46812a6465ba368859a37e2100283d2d719c" 3422 | dependencies = [ 3423 | "cfg-if", 3424 | "once_cell", 3425 | ] 3426 | 3427 | [[package]] 3428 | name = "tiff" 3429 | version = "0.9.1" 3430 | source = "registry+https://github.com/rust-lang/crates.io-index" 3431 | checksum = "ba1310fcea54c6a9a4fd1aad794ecc02c31682f6bfbecdf460bf19533eed1e3e" 3432 | dependencies = [ 3433 | "flate2", 3434 | "jpeg-decoder", 3435 | "weezl", 3436 | ] 3437 | 3438 | [[package]] 3439 | name = "time" 3440 | version = "0.3.36" 3441 | source = "registry+https://github.com/rust-lang/crates.io-index" 3442 | checksum = "5dfd88e563464686c916c7e46e623e520ddc6d79fa6641390f2e3fa86e83e885" 3443 | dependencies = [ 3444 | "deranged", 3445 | "itoa", 3446 | "libc", 3447 | "num-conv", 3448 | "num_threads", 3449 | "powerfmt", 3450 | "serde", 3451 | "time-core", 3452 | "time-macros", 3453 | ] 3454 | 3455 | [[package]] 3456 | name = "time-core" 3457 | version = "0.1.2" 3458 | source = "registry+https://github.com/rust-lang/crates.io-index" 3459 | checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3" 3460 | 3461 | [[package]] 3462 | name = "time-macros" 3463 | version = "0.2.18" 3464 | source = "registry+https://github.com/rust-lang/crates.io-index" 3465 | checksum = "3f252a68540fde3a3877aeea552b832b40ab9a69e318efd078774a01ddee1ccf" 3466 | dependencies = [ 3467 | "num-conv", 3468 | "time-core", 3469 | ] 3470 | 3471 | [[package]] 3472 | name = "tinyvec" 3473 | version = "1.6.0" 3474 | source = "registry+https://github.com/rust-lang/crates.io-index" 3475 | checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50" 3476 | dependencies = [ 3477 | "tinyvec_macros", 3478 | ] 3479 | 3480 | [[package]] 3481 | name = "tinyvec_macros" 3482 | version = "0.1.1" 3483 | source = "registry+https://github.com/rust-lang/crates.io-index" 3484 | checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" 3485 | 3486 | [[package]] 3487 | name = "tokio" 3488 | version = "1.37.0" 3489 | source = "registry+https://github.com/rust-lang/crates.io-index" 3490 | checksum = "1adbebffeca75fcfd058afa480fb6c0b81e165a0323f9c9d39c9697e37c46787" 3491 | dependencies = [ 3492 | "backtrace", 3493 | "bytes", 3494 | "libc", 3495 | "mio", 3496 | "pin-project-lite", 3497 | "socket2", 3498 | "tokio-macros", 3499 | "windows-sys 0.48.0", 3500 | ] 3501 | 3502 | [[package]] 3503 | name = "tokio-macros" 3504 | version = "2.2.0" 3505 | source = "registry+https://github.com/rust-lang/crates.io-index" 3506 | checksum = "5b8a1e28f2deaa14e508979454cb3a223b10b938b45af148bc0986de36f1923b" 3507 | dependencies = [ 3508 | "proc-macro2", 3509 | "quote", 3510 | "syn 2.0.63", 3511 | ] 3512 | 3513 | [[package]] 3514 | name = "tokio-native-tls" 3515 | version = "0.3.1" 3516 | source = "registry+https://github.com/rust-lang/crates.io-index" 3517 | checksum = "bbae76ab933c85776efabc971569dd6119c580d8f5d448769dec1764bf796ef2" 3518 | dependencies = [ 3519 | "native-tls", 3520 | "tokio", 3521 | ] 3522 | 3523 | [[package]] 3524 | name = "tokio-util" 3525 | version = "0.7.11" 3526 | source = "registry+https://github.com/rust-lang/crates.io-index" 3527 | checksum = "9cf6b47b3771c49ac75ad09a6162f53ad4b8088b76ac60e8ec1455b31a189fe1" 3528 | dependencies = [ 3529 | "bytes", 3530 | "futures-core", 3531 | "futures-sink", 3532 | "pin-project-lite", 3533 | "tokio", 3534 | ] 3535 | 3536 | [[package]] 3537 | name = "torch-sys" 3538 | version = "0.15.0" 3539 | source = "registry+https://github.com/rust-lang/crates.io-index" 3540 | checksum = "29e0244e5b148a31dd7fe961165037d1927754d024095c1013937532d7e73a22" 3541 | dependencies = [ 3542 | "anyhow", 3543 | "cc", 3544 | "libc", 3545 | "serde", 3546 | "serde_json", 3547 | "ureq", 3548 | "zip", 3549 | ] 3550 | 3551 | [[package]] 3552 | name = "tower-service" 3553 | version = "0.3.2" 3554 | source = "registry+https://github.com/rust-lang/crates.io-index" 3555 | checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52" 3556 | 3557 | [[package]] 3558 | name = "tracing" 3559 | version = "0.1.40" 3560 | source = "registry+https://github.com/rust-lang/crates.io-index" 3561 | checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef" 3562 | dependencies = [ 3563 | "pin-project-lite", 3564 | "tracing-core", 3565 | ] 3566 | 3567 | [[package]] 3568 | name = "tracing-appender" 3569 | version = "0.2.3" 3570 | source = "registry+https://github.com/rust-lang/crates.io-index" 3571 | checksum = "3566e8ce28cc0a3fe42519fc80e6b4c943cc4c8cef275620eb8dac2d3d4e06cf" 3572 | dependencies = [ 3573 | "crossbeam-channel", 3574 | "thiserror", 3575 | "time", 3576 | "tracing-subscriber", 3577 | ] 3578 | 3579 | [[package]] 3580 | name = "tracing-core" 3581 | version = "0.1.32" 3582 | source = "registry+https://github.com/rust-lang/crates.io-index" 3583 | checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54" 3584 | dependencies = [ 3585 | "once_cell", 3586 | "valuable", 3587 | ] 3588 | 3589 | [[package]] 3590 | name = "tracing-log" 3591 | version = "0.2.0" 3592 | source = "registry+https://github.com/rust-lang/crates.io-index" 3593 | checksum = "ee855f1f400bd0e5c02d150ae5de3840039a3f54b025156404e34c23c03f47c3" 3594 | dependencies = [ 3595 | "log", 3596 | "once_cell", 3597 | "tracing-core", 3598 | ] 3599 | 3600 | [[package]] 3601 | name = "tracing-subscriber" 3602 | version = "0.3.18" 3603 | source = "registry+https://github.com/rust-lang/crates.io-index" 3604 | checksum = "ad0f048c97dbd9faa9b7df56362b8ebcaa52adb06b498c050d2f4e32f90a7a8b" 3605 | dependencies = [ 3606 | "nu-ansi-term", 3607 | "sharded-slab", 3608 | "smallvec", 3609 | "thread_local", 3610 | "tracing-core", 3611 | "tracing-log", 3612 | ] 3613 | 3614 | [[package]] 3615 | name = "try-lock" 3616 | version = "0.2.5" 3617 | source = "registry+https://github.com/rust-lang/crates.io-index" 3618 | checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" 3619 | 3620 | [[package]] 3621 | name = "typenum" 3622 | version = "1.17.0" 3623 | source = "registry+https://github.com/rust-lang/crates.io-index" 3624 | checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" 3625 | 3626 | [[package]] 3627 | name = "unicode-bidi" 3628 | version = "0.3.15" 3629 | source = "registry+https://github.com/rust-lang/crates.io-index" 3630 | checksum = "08f95100a766bf4f8f28f90d77e0a5461bbdb219042e7679bebe79004fed8d75" 3631 | 3632 | [[package]] 3633 | name = "unicode-ident" 3634 | version = "1.0.12" 3635 | source = "registry+https://github.com/rust-lang/crates.io-index" 3636 | checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" 3637 | 3638 | [[package]] 3639 | name = "unicode-normalization" 3640 | version = "0.1.23" 3641 | source = "registry+https://github.com/rust-lang/crates.io-index" 3642 | checksum = "a56d1686db2308d901306f92a263857ef59ea39678a5458e7cb17f01415101f5" 3643 | dependencies = [ 3644 | "tinyvec", 3645 | ] 3646 | 3647 | [[package]] 3648 | name = "unicode-segmentation" 3649 | version = "1.11.0" 3650 | source = "registry+https://github.com/rust-lang/crates.io-index" 3651 | checksum = "d4c87d22b6e3f4a18d4d40ef354e97c90fcb14dd91d7dc0aa9d8a1172ebf7202" 3652 | 3653 | [[package]] 3654 | name = "unicode-width" 3655 | version = "0.1.12" 3656 | source = "registry+https://github.com/rust-lang/crates.io-index" 3657 | checksum = "68f5e5f3158ecfd4b8ff6fe086db7c8467a2dfdac97fe420f2b7c4aa97af66d6" 3658 | 3659 | [[package]] 3660 | name = "unicode-xid" 3661 | version = "0.2.4" 3662 | source = "registry+https://github.com/rust-lang/crates.io-index" 3663 | checksum = "f962df74c8c05a667b5ee8bcf162993134c104e96440b663c8daa176dc772d8c" 3664 | 3665 | [[package]] 3666 | name = "untrusted" 3667 | version = "0.9.0" 3668 | source = "registry+https://github.com/rust-lang/crates.io-index" 3669 | checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" 3670 | 3671 | [[package]] 3672 | name = "ureq" 3673 | version = "2.9.7" 3674 | source = "registry+https://github.com/rust-lang/crates.io-index" 3675 | checksum = "d11a831e3c0b56e438a28308e7c810799e3c118417f342d30ecec080105395cd" 3676 | dependencies = [ 3677 | "base64 0.22.1", 3678 | "flate2", 3679 | "log", 3680 | "once_cell", 3681 | "rustls", 3682 | "rustls-pki-types", 3683 | "rustls-webpki", 3684 | "serde", 3685 | "serde_json", 3686 | "url", 3687 | "webpki-roots", 3688 | ] 3689 | 3690 | [[package]] 3691 | name = "url" 3692 | version = "2.5.0" 3693 | source = "registry+https://github.com/rust-lang/crates.io-index" 3694 | checksum = "31e6302e3bb753d46e83516cae55ae196fc0c309407cf11ab35cc51a4c2a4633" 3695 | dependencies = [ 3696 | "form_urlencoded", 3697 | "idna", 3698 | "percent-encoding", 3699 | ] 3700 | 3701 | [[package]] 3702 | name = "utf8parse" 3703 | version = "0.2.1" 3704 | source = "registry+https://github.com/rust-lang/crates.io-index" 3705 | checksum = "711b9620af191e0cdc7468a8d14e709c3dcdb115b36f838e601583af800a370a" 3706 | 3707 | [[package]] 3708 | name = "uuid" 3709 | version = "1.8.0" 3710 | source = "registry+https://github.com/rust-lang/crates.io-index" 3711 | checksum = "a183cf7feeba97b4dd1c0d46788634f6221d87fa961b305bed08c851829efcc0" 3712 | dependencies = [ 3713 | "getrandom", 3714 | "rand", 3715 | ] 3716 | 3717 | [[package]] 3718 | name = "valuable" 3719 | version = "0.1.0" 3720 | source = "registry+https://github.com/rust-lang/crates.io-index" 3721 | checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d" 3722 | 3723 | [[package]] 3724 | name = "vcpkg" 3725 | version = "0.2.15" 3726 | source = "registry+https://github.com/rust-lang/crates.io-index" 3727 | checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" 3728 | 3729 | [[package]] 3730 | name = "version_check" 3731 | version = "0.9.4" 3732 | source = "registry+https://github.com/rust-lang/crates.io-index" 3733 | checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" 3734 | 3735 | [[package]] 3736 | name = "walkdir" 3737 | version = "2.5.0" 3738 | source = "registry+https://github.com/rust-lang/crates.io-index" 3739 | checksum = "29790946404f91d9c5d06f9874efddea1dc06c5efe94541a7d6863108e3a5e4b" 3740 | dependencies = [ 3741 | "same-file", 3742 | "winapi-util", 3743 | ] 3744 | 3745 | [[package]] 3746 | name = "want" 3747 | version = "0.3.1" 3748 | source = "registry+https://github.com/rust-lang/crates.io-index" 3749 | checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e" 3750 | dependencies = [ 3751 | "try-lock", 3752 | ] 3753 | 3754 | [[package]] 3755 | name = "wasi" 3756 | version = "0.11.0+wasi-snapshot-preview1" 3757 | source = "registry+https://github.com/rust-lang/crates.io-index" 3758 | checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" 3759 | 3760 | [[package]] 3761 | name = "wasm-bindgen" 3762 | version = "0.2.92" 3763 | source = "registry+https://github.com/rust-lang/crates.io-index" 3764 | checksum = "4be2531df63900aeb2bca0daaaddec08491ee64ceecbee5076636a3b026795a8" 3765 | dependencies = [ 3766 | "cfg-if", 3767 | "wasm-bindgen-macro", 3768 | ] 3769 | 3770 | [[package]] 3771 | name = "wasm-bindgen-backend" 3772 | version = "0.2.92" 3773 | source = "registry+https://github.com/rust-lang/crates.io-index" 3774 | checksum = "614d787b966d3989fa7bb98a654e369c762374fd3213d212cfc0251257e747da" 3775 | dependencies = [ 3776 | "bumpalo", 3777 | "log", 3778 | "once_cell", 3779 | "proc-macro2", 3780 | "quote", 3781 | "syn 2.0.63", 3782 | "wasm-bindgen-shared", 3783 | ] 3784 | 3785 | [[package]] 3786 | name = "wasm-bindgen-futures" 3787 | version = "0.4.42" 3788 | source = "registry+https://github.com/rust-lang/crates.io-index" 3789 | checksum = "76bc14366121efc8dbb487ab05bcc9d346b3b5ec0eaa76e46594cabbe51762c0" 3790 | dependencies = [ 3791 | "cfg-if", 3792 | "js-sys", 3793 | "wasm-bindgen", 3794 | "web-sys", 3795 | ] 3796 | 3797 | [[package]] 3798 | name = "wasm-bindgen-macro" 3799 | version = "0.2.92" 3800 | source = "registry+https://github.com/rust-lang/crates.io-index" 3801 | checksum = "a1f8823de937b71b9460c0c34e25f3da88250760bec0ebac694b49997550d726" 3802 | dependencies = [ 3803 | "quote", 3804 | "wasm-bindgen-macro-support", 3805 | ] 3806 | 3807 | [[package]] 3808 | name = "wasm-bindgen-macro-support" 3809 | version = "0.2.92" 3810 | source = "registry+https://github.com/rust-lang/crates.io-index" 3811 | checksum = "e94f17b526d0a461a191c78ea52bbce64071ed5c04c9ffe424dcb38f74171bb7" 3812 | dependencies = [ 3813 | "proc-macro2", 3814 | "quote", 3815 | "syn 2.0.63", 3816 | "wasm-bindgen-backend", 3817 | "wasm-bindgen-shared", 3818 | ] 3819 | 3820 | [[package]] 3821 | name = "wasm-bindgen-shared" 3822 | version = "0.2.92" 3823 | source = "registry+https://github.com/rust-lang/crates.io-index" 3824 | checksum = "af190c94f2773fdb3729c55b007a722abb5384da03bc0986df4c289bf5567e96" 3825 | 3826 | [[package]] 3827 | name = "web-sys" 3828 | version = "0.3.69" 3829 | source = "registry+https://github.com/rust-lang/crates.io-index" 3830 | checksum = "77afa9a11836342370f4817622a2f0f418b134426d91a82dfb48f532d2ec13ef" 3831 | dependencies = [ 3832 | "js-sys", 3833 | "wasm-bindgen", 3834 | ] 3835 | 3836 | [[package]] 3837 | name = "web-time" 3838 | version = "1.1.0" 3839 | source = "registry+https://github.com/rust-lang/crates.io-index" 3840 | checksum = "5a6580f308b1fad9207618087a65c04e7a10bc77e02c8e84e9b00dd4b12fa0bb" 3841 | dependencies = [ 3842 | "js-sys", 3843 | "wasm-bindgen", 3844 | ] 3845 | 3846 | [[package]] 3847 | name = "webpki-roots" 3848 | version = "0.26.1" 3849 | source = "registry+https://github.com/rust-lang/crates.io-index" 3850 | checksum = "b3de34ae270483955a94f4b21bdaaeb83d508bb84a01435f393818edb0012009" 3851 | dependencies = [ 3852 | "rustls-pki-types", 3853 | ] 3854 | 3855 | [[package]] 3856 | name = "weezl" 3857 | version = "0.1.8" 3858 | source = "registry+https://github.com/rust-lang/crates.io-index" 3859 | checksum = "53a85b86a771b1c87058196170769dd264f66c0782acf1ae6cc51bfd64b39082" 3860 | 3861 | [[package]] 3862 | name = "wgpu" 3863 | version = "0.19.4" 3864 | source = "registry+https://github.com/rust-lang/crates.io-index" 3865 | checksum = "cbd7311dbd2abcfebaabf1841a2824ed7c8be443a0f29166e5d3c6a53a762c01" 3866 | dependencies = [ 3867 | "arrayvec", 3868 | "cfg-if", 3869 | "cfg_aliases", 3870 | "js-sys", 3871 | "log", 3872 | "naga", 3873 | "parking_lot", 3874 | "profiling", 3875 | "raw-window-handle", 3876 | "smallvec", 3877 | "static_assertions", 3878 | "wasm-bindgen", 3879 | "wasm-bindgen-futures", 3880 | "web-sys", 3881 | "wgpu-core", 3882 | "wgpu-hal", 3883 | "wgpu-types", 3884 | ] 3885 | 3886 | [[package]] 3887 | name = "wgpu-core" 3888 | version = "0.19.4" 3889 | source = "registry+https://github.com/rust-lang/crates.io-index" 3890 | checksum = "28b94525fc99ba9e5c9a9e24764f2bc29bad0911a7446c12f446a8277369bf3a" 3891 | dependencies = [ 3892 | "arrayvec", 3893 | "bit-vec", 3894 | "bitflags 2.5.0", 3895 | "cfg_aliases", 3896 | "codespan-reporting", 3897 | "indexmap", 3898 | "log", 3899 | "naga", 3900 | "once_cell", 3901 | "parking_lot", 3902 | "profiling", 3903 | "raw-window-handle", 3904 | "rustc-hash", 3905 | "smallvec", 3906 | "thiserror", 3907 | "web-sys", 3908 | "wgpu-hal", 3909 | "wgpu-types", 3910 | ] 3911 | 3912 | [[package]] 3913 | name = "wgpu-hal" 3914 | version = "0.19.4" 3915 | source = "registry+https://github.com/rust-lang/crates.io-index" 3916 | checksum = "fc1a4924366df7ab41a5d8546d6534f1f33231aa5b3f72b9930e300f254e39c3" 3917 | dependencies = [ 3918 | "android_system_properties", 3919 | "arrayvec", 3920 | "ash", 3921 | "bit-set", 3922 | "bitflags 2.5.0", 3923 | "block", 3924 | "cfg_aliases", 3925 | "core-graphics-types", 3926 | "d3d12", 3927 | "glow", 3928 | "glutin_wgl_sys", 3929 | "gpu-alloc", 3930 | "gpu-allocator", 3931 | "gpu-descriptor", 3932 | "hassle-rs", 3933 | "js-sys", 3934 | "khronos-egl", 3935 | "libc", 3936 | "libloading 0.8.3", 3937 | "log", 3938 | "metal", 3939 | "naga", 3940 | "ndk-sys", 3941 | "objc", 3942 | "once_cell", 3943 | "parking_lot", 3944 | "profiling", 3945 | "range-alloc", 3946 | "raw-window-handle", 3947 | "renderdoc-sys", 3948 | "rustc-hash", 3949 | "smallvec", 3950 | "thiserror", 3951 | "wasm-bindgen", 3952 | "web-sys", 3953 | "wgpu-types", 3954 | "winapi", 3955 | ] 3956 | 3957 | [[package]] 3958 | name = "wgpu-types" 3959 | version = "0.19.2" 3960 | source = "registry+https://github.com/rust-lang/crates.io-index" 3961 | checksum = "b671ff9fb03f78b46ff176494ee1ebe7d603393f42664be55b64dc8d53969805" 3962 | dependencies = [ 3963 | "bitflags 2.5.0", 3964 | "js-sys", 3965 | "web-sys", 3966 | ] 3967 | 3968 | [[package]] 3969 | name = "widestring" 3970 | version = "1.1.0" 3971 | source = "registry+https://github.com/rust-lang/crates.io-index" 3972 | checksum = "7219d36b6eac893fa81e84ebe06485e7dcbb616177469b142df14f1f4deb1311" 3973 | 3974 | [[package]] 3975 | name = "winapi" 3976 | version = "0.3.9" 3977 | source = "registry+https://github.com/rust-lang/crates.io-index" 3978 | checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" 3979 | dependencies = [ 3980 | "winapi-i686-pc-windows-gnu", 3981 | "winapi-x86_64-pc-windows-gnu", 3982 | ] 3983 | 3984 | [[package]] 3985 | name = "winapi-i686-pc-windows-gnu" 3986 | version = "0.4.0" 3987 | source = "registry+https://github.com/rust-lang/crates.io-index" 3988 | checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" 3989 | 3990 | [[package]] 3991 | name = "winapi-util" 3992 | version = "0.1.8" 3993 | source = "registry+https://github.com/rust-lang/crates.io-index" 3994 | checksum = "4d4cc384e1e73b93bafa6fb4f1df8c41695c8a91cf9c4c64358067d15a7b6c6b" 3995 | dependencies = [ 3996 | "windows-sys 0.52.0", 3997 | ] 3998 | 3999 | [[package]] 4000 | name = "winapi-x86_64-pc-windows-gnu" 4001 | version = "0.4.0" 4002 | source = "registry+https://github.com/rust-lang/crates.io-index" 4003 | checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" 4004 | 4005 | [[package]] 4006 | name = "windows" 4007 | version = "0.52.0" 4008 | source = "registry+https://github.com/rust-lang/crates.io-index" 4009 | checksum = "e48a53791691ab099e5e2ad123536d0fff50652600abaf43bbf952894110d0be" 4010 | dependencies = [ 4011 | "windows-core", 4012 | "windows-targets 0.52.5", 4013 | ] 4014 | 4015 | [[package]] 4016 | name = "windows-core" 4017 | version = "0.52.0" 4018 | source = "registry+https://github.com/rust-lang/crates.io-index" 4019 | checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9" 4020 | dependencies = [ 4021 | "windows-targets 0.52.5", 4022 | ] 4023 | 4024 | [[package]] 4025 | name = "windows-sys" 4026 | version = "0.48.0" 4027 | source = "registry+https://github.com/rust-lang/crates.io-index" 4028 | checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" 4029 | dependencies = [ 4030 | "windows-targets 0.48.5", 4031 | ] 4032 | 4033 | [[package]] 4034 | name = "windows-sys" 4035 | version = "0.52.0" 4036 | source = "registry+https://github.com/rust-lang/crates.io-index" 4037 | checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" 4038 | dependencies = [ 4039 | "windows-targets 0.52.5", 4040 | ] 4041 | 4042 | [[package]] 4043 | name = "windows-targets" 4044 | version = "0.48.5" 4045 | source = "registry+https://github.com/rust-lang/crates.io-index" 4046 | checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" 4047 | dependencies = [ 4048 | "windows_aarch64_gnullvm 0.48.5", 4049 | "windows_aarch64_msvc 0.48.5", 4050 | "windows_i686_gnu 0.48.5", 4051 | "windows_i686_msvc 0.48.5", 4052 | "windows_x86_64_gnu 0.48.5", 4053 | "windows_x86_64_gnullvm 0.48.5", 4054 | "windows_x86_64_msvc 0.48.5", 4055 | ] 4056 | 4057 | [[package]] 4058 | name = "windows-targets" 4059 | version = "0.52.5" 4060 | source = "registry+https://github.com/rust-lang/crates.io-index" 4061 | checksum = "6f0713a46559409d202e70e28227288446bf7841d3211583a4b53e3f6d96e7eb" 4062 | dependencies = [ 4063 | "windows_aarch64_gnullvm 0.52.5", 4064 | "windows_aarch64_msvc 0.52.5", 4065 | "windows_i686_gnu 0.52.5", 4066 | "windows_i686_gnullvm", 4067 | "windows_i686_msvc 0.52.5", 4068 | "windows_x86_64_gnu 0.52.5", 4069 | "windows_x86_64_gnullvm 0.52.5", 4070 | "windows_x86_64_msvc 0.52.5", 4071 | ] 4072 | 4073 | [[package]] 4074 | name = "windows_aarch64_gnullvm" 4075 | version = "0.48.5" 4076 | source = "registry+https://github.com/rust-lang/crates.io-index" 4077 | checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" 4078 | 4079 | [[package]] 4080 | name = "windows_aarch64_gnullvm" 4081 | version = "0.52.5" 4082 | source = "registry+https://github.com/rust-lang/crates.io-index" 4083 | checksum = "7088eed71e8b8dda258ecc8bac5fb1153c5cffaf2578fc8ff5d61e23578d3263" 4084 | 4085 | [[package]] 4086 | name = "windows_aarch64_msvc" 4087 | version = "0.48.5" 4088 | source = "registry+https://github.com/rust-lang/crates.io-index" 4089 | checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" 4090 | 4091 | [[package]] 4092 | name = "windows_aarch64_msvc" 4093 | version = "0.52.5" 4094 | source = "registry+https://github.com/rust-lang/crates.io-index" 4095 | checksum = "9985fd1504e250c615ca5f281c3f7a6da76213ebd5ccc9561496568a2752afb6" 4096 | 4097 | [[package]] 4098 | name = "windows_i686_gnu" 4099 | version = "0.48.5" 4100 | source = "registry+https://github.com/rust-lang/crates.io-index" 4101 | checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" 4102 | 4103 | [[package]] 4104 | name = "windows_i686_gnu" 4105 | version = "0.52.5" 4106 | source = "registry+https://github.com/rust-lang/crates.io-index" 4107 | checksum = "88ba073cf16d5372720ec942a8ccbf61626074c6d4dd2e745299726ce8b89670" 4108 | 4109 | [[package]] 4110 | name = "windows_i686_gnullvm" 4111 | version = "0.52.5" 4112 | source = "registry+https://github.com/rust-lang/crates.io-index" 4113 | checksum = "87f4261229030a858f36b459e748ae97545d6f1ec60e5e0d6a3d32e0dc232ee9" 4114 | 4115 | [[package]] 4116 | name = "windows_i686_msvc" 4117 | version = "0.48.5" 4118 | source = "registry+https://github.com/rust-lang/crates.io-index" 4119 | checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" 4120 | 4121 | [[package]] 4122 | name = "windows_i686_msvc" 4123 | version = "0.52.5" 4124 | source = "registry+https://github.com/rust-lang/crates.io-index" 4125 | checksum = "db3c2bf3d13d5b658be73463284eaf12830ac9a26a90c717b7f771dfe97487bf" 4126 | 4127 | [[package]] 4128 | name = "windows_x86_64_gnu" 4129 | version = "0.48.5" 4130 | source = "registry+https://github.com/rust-lang/crates.io-index" 4131 | checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" 4132 | 4133 | [[package]] 4134 | name = "windows_x86_64_gnu" 4135 | version = "0.52.5" 4136 | source = "registry+https://github.com/rust-lang/crates.io-index" 4137 | checksum = "4e4246f76bdeff09eb48875a0fd3e2af6aada79d409d33011886d3e1581517d9" 4138 | 4139 | [[package]] 4140 | name = "windows_x86_64_gnullvm" 4141 | version = "0.48.5" 4142 | source = "registry+https://github.com/rust-lang/crates.io-index" 4143 | checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" 4144 | 4145 | [[package]] 4146 | name = "windows_x86_64_gnullvm" 4147 | version = "0.52.5" 4148 | source = "registry+https://github.com/rust-lang/crates.io-index" 4149 | checksum = "852298e482cd67c356ddd9570386e2862b5673c85bd5f88df9ab6802b334c596" 4150 | 4151 | [[package]] 4152 | name = "windows_x86_64_msvc" 4153 | version = "0.48.5" 4154 | source = "registry+https://github.com/rust-lang/crates.io-index" 4155 | checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" 4156 | 4157 | [[package]] 4158 | name = "windows_x86_64_msvc" 4159 | version = "0.52.5" 4160 | source = "registry+https://github.com/rust-lang/crates.io-index" 4161 | checksum = "bec47e5bfd1bff0eeaf6d8b485cc1074891a197ab4225d504cb7a1ab88b02bf0" 4162 | 4163 | [[package]] 4164 | name = "winreg" 4165 | version = "0.50.0" 4166 | source = "registry+https://github.com/rust-lang/crates.io-index" 4167 | checksum = "524e57b2c537c0f9b1e69f1965311ec12182b4122e45035b1508cd24d2adadb1" 4168 | dependencies = [ 4169 | "cfg-if", 4170 | "windows-sys 0.48.0", 4171 | ] 4172 | 4173 | [[package]] 4174 | name = "wrapcenum-derive" 4175 | version = "0.4.1" 4176 | source = "registry+https://github.com/rust-lang/crates.io-index" 4177 | checksum = "a76ff259533532054cfbaefb115c613203c73707017459206380f03b3b3f266e" 4178 | dependencies = [ 4179 | "darling", 4180 | "proc-macro2", 4181 | "quote", 4182 | "syn 2.0.63", 4183 | ] 4184 | 4185 | [[package]] 4186 | name = "xml-rs" 4187 | version = "0.8.20" 4188 | source = "registry+https://github.com/rust-lang/crates.io-index" 4189 | checksum = "791978798f0597cfc70478424c2b4fdc2b7a8024aaff78497ef00f24ef674193" 4190 | 4191 | [[package]] 4192 | name = "yoke" 4193 | version = "0.7.3" 4194 | source = "registry+https://github.com/rust-lang/crates.io-index" 4195 | checksum = "65e71b2e4f287f467794c671e2b8f8a5f3716b3c829079a1c44740148eff07e4" 4196 | dependencies = [ 4197 | "serde", 4198 | "stable_deref_trait", 4199 | "yoke-derive", 4200 | "zerofrom", 4201 | ] 4202 | 4203 | [[package]] 4204 | name = "yoke-derive" 4205 | version = "0.7.3" 4206 | source = "registry+https://github.com/rust-lang/crates.io-index" 4207 | checksum = "9e6936f0cce458098a201c245a11bef556c6a0181129c7034d10d76d1ec3a2b8" 4208 | dependencies = [ 4209 | "proc-macro2", 4210 | "quote", 4211 | "syn 2.0.63", 4212 | "synstructure", 4213 | ] 4214 | 4215 | [[package]] 4216 | name = "zerocopy" 4217 | version = "0.7.34" 4218 | source = "registry+https://github.com/rust-lang/crates.io-index" 4219 | checksum = "ae87e3fcd617500e5d106f0380cf7b77f3c6092aae37191433159dda23cfb087" 4220 | dependencies = [ 4221 | "zerocopy-derive", 4222 | ] 4223 | 4224 | [[package]] 4225 | name = "zerocopy-derive" 4226 | version = "0.7.34" 4227 | source = "registry+https://github.com/rust-lang/crates.io-index" 4228 | checksum = "15e934569e47891f7d9411f1a451d947a60e000ab3bd24fbb970f000387d1b3b" 4229 | dependencies = [ 4230 | "proc-macro2", 4231 | "quote", 4232 | "syn 2.0.63", 4233 | ] 4234 | 4235 | [[package]] 4236 | name = "zerofrom" 4237 | version = "0.1.3" 4238 | source = "registry+https://github.com/rust-lang/crates.io-index" 4239 | checksum = "655b0814c5c0b19ade497851070c640773304939a6c0fd5f5fb43da0696d05b7" 4240 | dependencies = [ 4241 | "zerofrom-derive", 4242 | ] 4243 | 4244 | [[package]] 4245 | name = "zerofrom-derive" 4246 | version = "0.1.3" 4247 | source = "registry+https://github.com/rust-lang/crates.io-index" 4248 | checksum = "e6a647510471d372f2e6c2e6b7219e44d8c574d24fdc11c610a61455782f18c3" 4249 | dependencies = [ 4250 | "proc-macro2", 4251 | "quote", 4252 | "syn 2.0.63", 4253 | "synstructure", 4254 | ] 4255 | 4256 | [[package]] 4257 | name = "zeroize" 4258 | version = "1.7.0" 4259 | source = "registry+https://github.com/rust-lang/crates.io-index" 4260 | checksum = "525b4ec142c6b68a2d10f01f7bbf6755599ca3f81ea53b8431b7dd348f5fdb2d" 4261 | 4262 | [[package]] 4263 | name = "zip" 4264 | version = "0.6.6" 4265 | source = "registry+https://github.com/rust-lang/crates.io-index" 4266 | checksum = "760394e246e4c28189f19d488c058bf16f564016aefac5d32bb1f3b51d5e9261" 4267 | dependencies = [ 4268 | "aes", 4269 | "byteorder", 4270 | "bzip2", 4271 | "constant_time_eq", 4272 | "crc32fast", 4273 | "crossbeam-utils", 4274 | "flate2", 4275 | "hmac", 4276 | "pbkdf2", 4277 | "sha1", 4278 | "time", 4279 | "zstd", 4280 | ] 4281 | 4282 | [[package]] 4283 | name = "zstd" 4284 | version = "0.11.2+zstd.1.5.2" 4285 | source = "registry+https://github.com/rust-lang/crates.io-index" 4286 | checksum = "20cc960326ece64f010d2d2107537f26dc589a6573a316bd5b1dba685fa5fde4" 4287 | dependencies = [ 4288 | "zstd-safe", 4289 | ] 4290 | 4291 | [[package]] 4292 | name = "zstd-safe" 4293 | version = "5.0.2+zstd.1.5.2" 4294 | source = "registry+https://github.com/rust-lang/crates.io-index" 4295 | checksum = "1d2a5585e04f9eea4b2a3d1eca508c4dee9592a89ef6f450c11719da0726f4db" 4296 | dependencies = [ 4297 | "libc", 4298 | "zstd-sys", 4299 | ] 4300 | 4301 | [[package]] 4302 | name = "zstd-sys" 4303 | version = "2.0.10+zstd.1.5.6" 4304 | source = "registry+https://github.com/rust-lang/crates.io-index" 4305 | checksum = "c253a4914af5bafc8fa8c86ee400827e83cf6ec01195ec1f1ed8441bf00d65aa" 4306 | dependencies = [ 4307 | "cc", 4308 | "pkg-config", 4309 | ] 4310 | 4311 | [[package]] 4312 | name = "zune-inflate" 4313 | version = "0.2.54" 4314 | source = "registry+https://github.com/rust-lang/crates.io-index" 4315 | checksum = "73ab332fe2f6680068f3582b16a24f90ad7096d5d39b974d1c0aff0125116f02" 4316 | dependencies = [ 4317 | "simd-adler32", 4318 | ] 4319 | --------------------------------------------------------------------------------