diff --git a/backends/candle/src/lib.rs b/backends/candle/src/lib.rs index 75c41333..30cf5762 100644 --- a/backends/candle/src/lib.rs +++ b/backends/candle/src/lib.rs @@ -13,7 +13,7 @@ use crate::compute_cap::{ use crate::models::{ BertConfig, BertModel, DistilBertConfig, DistilBertModel, GTEConfig, GTEModel, JinaBertModel, JinaCodeBertModel, MPNetConfig, MPNetModel, MistralConfig, Model, ModernBertConfig, - ModernBertModel, NomicBertModel, NomicConfig, Qwen2Config, Qwen3Config, + ModernBertModel, NomicBertModel, NomicConfig, Qwen2Config, Qwen3Config, Qwen3Model, }; #[cfg(feature = "cuda")] use crate::models::{ @@ -275,10 +275,10 @@ impl CandleBackend { "Qwen2 is only supported on Cuda devices in fp16 with flash attention enabled" .to_string(), )), - (Config::Qwen3(_), Device::Cpu | Device::Metal(_)) => Err(BackendError::Start( - "Qwen3 is only supported on Cuda devices in fp16 with flash attention enabled" - .to_string(), - )), + (Config::Qwen3(config), Device::Cpu | Device::Metal(_)) => { + tracing::info!("Starting Qwen3 model on {:?}", device); + Ok(Box::new(Qwen3Model::load(vb, &config, model_type).s()?)) + }, (Config::MPNet(config), _) => { tracing::info!("Starting MPNet model on {:?}", device); Ok(Box::new(MPNetModel::load(vb, &config, model_type).s()?)) diff --git a/backends/candle/src/models/mod.rs b/backends/candle/src/models/mod.rs index 8d610251..0d4d5506 100644 --- a/backends/candle/src/models/mod.rs +++ b/backends/candle/src/models/mod.rs @@ -59,7 +59,7 @@ pub use modernbert::{ModernBertConfig, ModernBertModel}; pub use mpnet::{MPNetConfig, MPNetModel}; pub use nomic::{NomicBertModel, NomicConfig}; pub use qwen2::Qwen2Config; -pub use qwen3::Qwen3Config; +pub use qwen3::{Qwen3Config, Qwen3Model}; use text_embeddings_backend_core::Batch; #[cfg(feature = "cuda")] diff --git a/backends/candle/src/models/qwen3.rs b/backends/candle/src/models/qwen3.rs index 7bc06db9..be8a421e 100644 --- a/backends/candle/src/models/qwen3.rs +++ b/backends/candle/src/models/qwen3.rs @@ -1,5 +1,9 @@ -use crate::layers::HiddenAct; +use crate::layers::{apply_rotary, get_cos_sin, get_inv_freqs, HiddenAct, Linear, RMSNorm}; +use crate::models::Model; +use candle::{Device, IndexOp, Result, Tensor, D}; +use candle_nn::{Embedding, Module, VarBuilder}; use serde::Deserialize; +use text_embeddings_backend_core::{Batch, ModelType, Pool}; #[derive(Debug, Clone, PartialEq, Deserialize)] pub struct Qwen3Config { @@ -18,3 +22,577 @@ pub struct Qwen3Config { pub sliding_window: Option, pub use_sliding_window: bool, } + +struct Qwen3Attention { + q_proj: Linear, + k_proj: Linear, + v_proj: Linear, + o_proj: Linear, + q_norm: RMSNorm, + k_norm: RMSNorm, + + num_attention_heads: usize, + num_key_value_heads: usize, + attention_head_size: usize, + + softmax_scale: f64, + + span: tracing::Span, +} + +impl Qwen3Attention { + pub fn load(vb: VarBuilder, config: &Qwen3Config) -> Result { + if config.use_sliding_window { + candle::bail!("Sliding window is not supported for Qwen3"); + } + + let num_attention_heads = config.num_attention_heads; + let attention_head_size = config + .head_dim + .unwrap_or(config.hidden_size / config.num_attention_heads); + let num_key_value_heads = config.num_key_value_heads; + let hidden_size = config.hidden_size; + + let query_weight = vb.pp("q_proj").get( + (num_attention_heads * attention_head_size, hidden_size), + "weight", + )?; + let query_bias = if config.attention_bias { + Some(vb.pp("q_proj").get(num_attention_heads * attention_head_size, "bias")?) + } else { + None + }; + let q_proj = Linear::new(query_weight, query_bias, None); + + let key_weight = vb.pp("k_proj").get( + (num_key_value_heads * attention_head_size, hidden_size), + "weight", + )?; + let key_bias = if config.attention_bias { + Some( + vb.pp("k_proj") + .get(num_key_value_heads * attention_head_size, "bias")?, + ) + } else { + None + }; + let k_proj = Linear::new(key_weight, key_bias, None); + + let value_weight = vb.pp("v_proj").get( + (num_key_value_heads * attention_head_size, hidden_size), + "weight", + )?; + let value_bias = if config.attention_bias { + Some( + vb.pp("v_proj") + .get(num_key_value_heads * attention_head_size, "bias")?, + ) + } else { + None + }; + let v_proj = Linear::new(value_weight, value_bias, None); + + let o_proj_weight = vb.pp("o_proj").get( + (hidden_size, num_attention_heads * attention_head_size), + "weight", + )?; + let o_proj = Linear::new(o_proj_weight, None, None); + + let q_norm = RMSNorm::load(vb.pp("q_norm"), attention_head_size, config.rms_norm_eps)?; + let k_norm = RMSNorm::load(vb.pp("k_norm"), attention_head_size, config.rms_norm_eps)?; + + let softmax_scale = 1.0 / (attention_head_size as f64).sqrt(); + + Ok(Self { + q_proj, + k_proj, + v_proj, + o_proj, + q_norm, + k_norm, + num_attention_heads, + num_key_value_heads, + attention_head_size, + softmax_scale, + span: tracing::span!(tracing::Level::TRACE, "attention"), + }) + } + + pub fn forward( + &self, + hidden_states: &Tensor, + attention_bias: Option<&Tensor>, + cos: &Tensor, + sin: &Tensor, + ) -> Result { + let _enter = self.span.enter(); + + let q = self.q_proj.forward(hidden_states)?; + let k = self.k_proj.forward(hidden_states)?; + let v = self.v_proj.forward(hidden_states)?; + + let input_dims = hidden_states.dims(); + let input_shape = &input_dims[..input_dims.len() - 1]; + + // Reshape to [batch, seq_len, heads, head_dim] + let q = q.reshape( + [ + input_shape, + &[self.num_attention_heads, self.attention_head_size], + ] + .concat(), + )?; + let k = k.reshape( + [ + input_shape, + &[self.num_key_value_heads, self.attention_head_size], + ] + .concat(), + )?; + let v = v.reshape( + [ + input_shape, + &[self.num_key_value_heads, self.attention_head_size], + ] + .concat(), + )?; + + // Apply q_norm and k_norm + let (q, _res) = self.q_norm.forward(&q, None)?; + let (k, _res) = self.k_norm.forward(&k, None)?; + + // Transpose to [batch, heads, seq_len, head_dim] for compatibility with apply_rotary + let q = q.transpose(1, 2)?; + let k = k.transpose(1, 2)?; + let v = v.transpose(1, 2)?; + + // Apply rotary embeddings + let q = apply_rotary(&q, cos, sin, self.attention_head_size)?; + let k = apply_rotary(&k, cos, sin, self.attention_head_size)?; + + // For simplicity, expand k and v to match number of q heads if needed (GQA) + let k = if self.num_key_value_heads != self.num_attention_heads { + let repeat_factor = self.num_attention_heads / self.num_key_value_heads; + let (b, h, s, d) = k.shape().dims4()?; + let k = k.unsqueeze(2)?.expand((b, h, repeat_factor, s, d))?; + k.reshape((b, h * repeat_factor, s, d))? + } else { + k + }; + let v = if self.num_key_value_heads != self.num_attention_heads { + let repeat_factor = self.num_attention_heads / self.num_key_value_heads; + let (b, h, s, d) = v.shape().dims4()?; + let v = v.unsqueeze(2)?.expand((b, h, repeat_factor, s, d))?; + v.reshape((b, h * repeat_factor, s, d))? + } else { + v + }; + + let attention_scores = q.matmul(&k.t()?)?; + let mut attention_scores = (attention_scores * self.softmax_scale)?; + + if let Some(attention_bias) = attention_bias { + attention_scores = attention_scores.add(attention_bias)?; + } + + let attention_probs = candle_nn::ops::softmax_last_dim(&attention_scores)?; + let context_layer = attention_probs.matmul(&v.contiguous()?)?; + + // Transpose back and flatten: [batch, heads, seq_len, head_dim] -> [batch, seq_len, hidden_size] + let context_layer = context_layer.transpose(1, 2)?.flatten_from(D::Minus2)?; + + self.o_proj.forward(&context_layer) + } +} + +struct Qwen3MLP { + gate_up_proj: Linear, + down_proj: Linear, + + intermediate_size: usize, + + span: tracing::Span, +} + +impl Qwen3MLP { + pub fn load(vb: VarBuilder, config: &Qwen3Config) -> Result { + let intermediate_size = config.intermediate_size; + + let gate_proj_weight = vb + .pp("gate_proj") + .get((intermediate_size, config.hidden_size), "weight")?; + + let up_proj_weight = vb + .pp("up_proj") + .get((intermediate_size, config.hidden_size), "weight")?; + + let gate_up_proj_weight = Tensor::cat(&[&gate_proj_weight, &up_proj_weight], 0)?; + let gate_up_proj = Linear::new(gate_up_proj_weight, None, None); + + let down_proj_weight = vb + .pp("down_proj") + .get((config.hidden_size, intermediate_size), "weight")?; + let down_proj = Linear::new(down_proj_weight, None, None); + + Ok(Self { + gate_up_proj, + down_proj, + intermediate_size, + span: tracing::span!(tracing::Level::TRACE, "mlp"), + }) + } + + pub fn forward(&self, hidden_states: &Tensor) -> Result { + let _enter = self.span.enter(); + + let gate_up_states = self.gate_up_proj.forward(hidden_states)?; + let gate_states = gate_up_states.narrow(D::Minus1, 0, self.intermediate_size)?; + let up_states = gate_up_states.narrow(D::Minus1, self.intermediate_size, self.intermediate_size)?; + + let gate_states = gate_states.silu()?; + self.down_proj.forward(&(gate_states * up_states)?) + } +} + +struct Qwen3Layer { + attention: Qwen3Attention, + mlp: Qwen3MLP, + input_layer_norm: RMSNorm, + post_attention_layer_norm: RMSNorm, + + span: tracing::Span, +} + +impl Qwen3Layer { + pub fn load(vb: VarBuilder, config: &Qwen3Config) -> Result { + let attention = Qwen3Attention::load(vb.pp("self_attn"), config)?; + let mlp = Qwen3MLP::load(vb.pp("mlp"), config)?; + + let input_layer_norm = RMSNorm::load( + vb.pp("input_layernorm"), + config.hidden_size, + config.rms_norm_eps, + )?; + let post_attention_layer_norm = RMSNorm::load( + vb.pp("post_attention_layernorm"), + config.hidden_size, + config.rms_norm_eps, + )?; + + Ok(Self { + attention, + mlp, + input_layer_norm, + post_attention_layer_norm, + span: tracing::span!(tracing::Level::TRACE, "layer"), + }) + } + + pub fn forward( + &self, + hidden_states: &Tensor, + attention_bias: Option<&Tensor>, + cos: &Tensor, + sin: &Tensor, + ) -> Result { + let _enter = self.span.enter(); + + let (normed_hidden_states, res) = self.input_layer_norm.forward(hidden_states, None)?; + let attn_output = self.attention.forward(&normed_hidden_states, attention_bias, cos, sin)?; + let (normed_attn_res_output, attn_res) = self.post_attention_layer_norm.forward(&attn_output, Some(&res))?; + let mlp_output = self.mlp.forward(&normed_attn_res_output)?; + + // Add residual connections + let output = (&mlp_output + &attn_res)?; + Ok(output) + } +} + +pub struct Qwen3Model { + embeddings: Embedding, + layers: Vec, + norm: RMSNorm, + rotary_cache: (Tensor, Tensor), + rotary_dim: usize, + pool: Pool, + pub device: Device, + num_attention_heads: usize, + + span: tracing::Span, +} + +impl Qwen3Model { + pub fn load(vb: VarBuilder, config: &Qwen3Config, model_type: ModelType) -> Result { + let pool = match model_type { + ModelType::Classifier => { + candle::bail!("`classifier` model type is not supported for Qwen3") + } + ModelType::Embedding(pool) => pool, + }; + + // Handle potential "model" prefix for reranker models + let vb = if vb.contains_tensor("model.embed_tokens.weight") { + vb.pp("model") + } else { + vb + }; + + let embeddings = Embedding::new( + vb.pp("embed_tokens") + .get((config.vocab_size, config.hidden_size), "weight")?, + config.hidden_size, + ); + + let layers = (0..config.num_hidden_layers) + .map(|index| Qwen3Layer::load(vb.pp(format!("layers.{index}")), config)) + .collect::>>()?; + + let norm = RMSNorm::load(vb.pp("norm"), config.hidden_size, config.rms_norm_eps)?; + + let rotary_dim = config + .head_dim + .unwrap_or(config.hidden_size / config.num_attention_heads); + + let inv_freqs = get_inv_freqs( + rotary_dim, + config.rope_theta, + vb.device(), + None, + )?; + + let rotary_cache = get_cos_sin( + config.max_position_embeddings, + &inv_freqs, + vb.dtype(), + true, + )?; + + Ok(Self { + embeddings, + layers, + norm, + rotary_cache, + rotary_dim, + pool, + device: vb.device().clone(), + num_attention_heads: config.num_attention_heads, + span: tracing::span!(tracing::Level::TRACE, "model"), + }) + } + + pub fn forward(&self, batch: Batch) -> Result<(Option, Option)> { + let _enter = self.span.enter(); + + let batch_size = batch.len(); + let max_length = batch.max_length as usize; + + let shape = (batch_size, max_length); + + let (input_ids, position_ids, input_lengths, attention_bias, _attention_mask) = + if batch_size > 1 { + // Prepare padded batch + let elems = batch_size * max_length; + + let mut input_ids = Vec::with_capacity(elems); + let mut position_ids = Vec::with_capacity(elems); + let mut attention_mask = Vec::with_capacity(elems); + let mut attention_bias = Vec::with_capacity(elems); + let mut input_lengths = Vec::with_capacity(batch_size); + let mut masking = false; + + for i in 0..batch_size { + let start = batch.cumulative_seq_lengths[i] as usize; + let end = batch.cumulative_seq_lengths[i + 1] as usize; + let seq_length = end - start; + input_lengths.push(seq_length); + + // Input ids + for j in start..end { + input_ids.push(batch.input_ids[j]); + position_ids.push(batch.position_ids[j]); + attention_mask.push(1.0_f32); + attention_bias.push(0.0); + } + + // Pad to max_length + for _ in seq_length..max_length { + input_ids.push(0); + position_ids.push(0); + attention_mask.push(0.0_f32); + attention_bias.push(f32::NEG_INFINITY); + masking = true; + } + } + + let input_ids = Tensor::from_vec(input_ids, shape, &self.device)?; + let position_ids = Tensor::from_vec(position_ids, shape, &self.device)?; + let attention_mask = if masking { + Some(Tensor::from_vec(attention_mask, shape, &self.device)?) + } else { + None + }; + + let attention_bias = if masking { + let attention_bias = Tensor::from_vec( + attention_bias, + (batch_size, 1, 1, max_length), + &self.device, + )?; + // Broadcast once instead of at every layer + let attention_bias = attention_bias + .broadcast_as(( + batch_size, + self.num_attention_heads, + max_length, + max_length, + ))? + .contiguous()?; + Some(attention_bias) + } else { + None + }; + + (input_ids, position_ids, input_lengths, attention_bias, attention_mask) + } else { + // Single sequence + let input_ids = Tensor::from_vec(batch.input_ids.clone(), (1, batch.input_ids.len()), &self.device)?; + let position_ids = Tensor::from_vec(batch.position_ids.clone(), (1, batch.position_ids.len()), &self.device)?; + let input_lengths = vec![batch.input_ids.len()]; + + (input_ids, position_ids, input_lengths, None, None) + }; + + let mut hidden_states = self.embeddings.forward(&input_ids)?; + + let cos = self.rotary_cache.0.index_select(&position_ids.flatten_all()?, 0)?; + let sin = self.rotary_cache.1.index_select(&position_ids.flatten_all()?, 0)?; + + let cos = cos.reshape((batch_size, 1, max_length, self.rotary_dim))?; + let sin = sin.reshape((batch_size, 1, max_length, self.rotary_dim))?; + + for layer in &self.layers { + hidden_states = layer.forward(&hidden_states, attention_bias.as_ref(), &cos, &sin)?; + } + + let (outputs, _) = self.norm.forward(&hidden_states, None)?; + + let has_pooling_requests = !batch.pooled_indices.is_empty(); + let has_raw_requests = !batch.raw_indices.is_empty(); + + let pooled_embeddings = if has_pooling_requests { + match self.pool { + Pool::Cls => { + if batch_size > 1 { + let pooled_indices = Tensor::from_vec( + batch.pooled_indices.clone(), + batch.pooled_indices.len(), + &self.device, + )?; + + let cls_indices = if has_raw_requests { + Tensor::zeros(batch.pooled_indices.len(), candle::DType::U32, &self.device)? + } else { + Tensor::arange(0u32, batch_size as u32, &self.device)? + }; + + Some(outputs.i((&pooled_indices, &cls_indices))?) + } else { + Some(outputs.i((0, 0))?.unsqueeze(0)?) + } + } + Pool::LastToken => { + if batch_size > 1 { + let results: Result> = batch + .pooled_indices + .iter() + .map(|&i| { + let i = i as usize; + let last_token_idx = input_lengths[i] - 1; + outputs.i((i, last_token_idx))?.unsqueeze(0) + }) + .collect(); + + Some(Tensor::cat(&results?, 0)?) + } else { + let last_idx = input_lengths[0] - 1; + Some(outputs.i((0, last_idx))?.unsqueeze(0)?) + } + } + Pool::Mean => { + if batch_size > 1 { + let results: Result> = batch + .pooled_indices + .iter() + .map(|&i| { + let i = i as usize; + let length = input_lengths[i]; + + let embeddings = outputs.i((i, ..length))?; + let sum = embeddings.sum_keepdim(0)?; + sum / (length as f64) + }) + .collect(); + + Some(Tensor::cat(&results?, 0)?) + } else { + let length = input_lengths[0] as f64; + let embeddings = outputs.i((0, ..input_lengths[0]))?; + Some((embeddings.sum_keepdim(0)? / length)?) + } + } + Pool::Splade => { + unreachable!("Splade is not supported for Qwen3"); + } + } + } else { + None + }; + + // Note: L2 normalization removed to match flash implementation behavior + // let pooled_embeddings = if let Some(embeddings) = pooled_embeddings { + // let norm = embeddings.sqr()?.sum_keepdim(D::Minus1)?.sqrt()?; + // Some(embeddings.broadcast_div(&norm)?) + // } else { + // None + // }; + + let raw_embeddings = if has_raw_requests { + if batch_size > 1 && has_pooling_requests { + let mut final_embeddings = Vec::new(); + for &i in &batch.raw_indices { + let i = i as usize; + let length = input_lengths[i]; + final_embeddings.push(outputs.i((i, ..length))?); + } + Some(Tensor::cat(&final_embeddings, 0)?) + } else { + // Single batch or all raw requests + if batch_size == 1 { + let length = input_lengths[0]; + Some(outputs.i((0, ..length))?) + } else { + // Multiple sequences, all raw + let mut all_embeddings = Vec::new(); + for (i, &length) in input_lengths.iter().enumerate().take(batch_size) { + all_embeddings.push(outputs.i((i, ..length))?); + } + Some(Tensor::cat(&all_embeddings, 0)?) + } + } + } else { + None + }; + + Ok((pooled_embeddings, raw_embeddings)) + } +} + +impl Model for Qwen3Model { + fn is_padded(&self) -> bool { + true + } + + fn embed(&self, batch: Batch) -> Result<(Option, Option)> { + self.forward(batch) + } +} diff --git a/backends/candle/tests/snapshots/test_qwen3__qwen3_cpu_batch.snap b/backends/candle/tests/snapshots/test_qwen3__qwen3_cpu_batch.snap new file mode 100644 index 00000000..8455838a --- /dev/null +++ b/backends/candle/tests/snapshots/test_qwen3__qwen3_cpu_batch.snap @@ -0,0 +1,3076 @@ +--- +source: backends/candle/tests/test_qwen3.rs +expression: embeddings_batch +--- +- - -1.0537152 + - 11.840553 + - 0.2541843 + - -3.9493227 + - -2.493444 + - 3.147579 + - -2.6826935 + - -0.3261378 + - -8.100885 + - 0.090357766 + - -1.481247 + - -11.877387 + - 3.658843 + - 0.5837535 + - -5.3898907 + - -1.1656011 + - -2.8392048 + - 4.7844677 + - 3.0748394 + - -9.754476 + - -0.67621404 + - 4.874153 + - -3.6391025 + - 7.7182574 + - -10.884343 + - 1.4398134 + - -1.1289243 + - 3.848481 + - -4.431309 + - 1.744337 + - -0.028037999 + - 7.3849034 + - 1.7568059 + - -1.4742123 + - -3.5546567 + - 0.70163804 + - -4.068962 + - 4.7105656 + - 4.0045676 + - 0.9946143 + - -1.7000505 + - -10.778717 + - 3.6060991 + - 0.4994913 + - 7.011027 + - 6.645163 + - -3.1697602 + - -2.4546366 + - 5.08044 + - -2.6876516 + - 3.4067738 + - -5.6228843 + - 6.845399 + - 1.9844933 + - 3.7493474 + - -11.77839 + - 0.0011319626 + - 6.7125716 + - 1.6186159 + - -3.2566564 + - -10.71649 + - -6.9967003 + - -7.7738657 + - 1.5714281 + - -1.5363543 + - -2.5508192 + - -1.0800791 + - -6.5405374 + - 3.3792906 + - -1.7983487 + - 0.19637054 + - 2.305406 + - -2.290362 + - 1.6852262 + - -0.30437437 + - -4.6390414 + - -2.2013125 + - -2.8945398 + - -3.0206194 + - 7.3430924 + - -2.166948 + - 0.7037571 + - -5.2451377 + - -0.9597764 + - 2.9712124 + - -2.6359582 + - -0.7173016 + - -3.161498 + - 2.5499308 + - 6.6335835 + - -4.97941 + - 3.6654825 + - 8.784596 + - -0.7566341 + - 4.776138 + - -6.251274 + - -3.776686 + - 6.328579 + - -4.0978017 + - -0.21631396 + - 1.1184362 + - 3.2935023 + - -2.4475389 + - -4.2273755 + - 1.9973049 + - 5.8665924 + - -2.7950685 + - 2.3710246 + - -2.865988 + - -1.8932068 + - -7.190564 + - 2.8801794 + - -3.767424 + - 0.5903187 + - -1.1342036 + - -10.0779 + - -3.0789077 + - -0.8649639 + - 1.9994396 + - -4.09259 + - 2.9838285 + - 3.5132134 + - 0.13216774 + - 2.1787443 + - -1.9491249 + - -2.5089195 + - 4.6671553 + - -3.3925495 + - 2.6916046 + - 0.46813467 + - 1.6933384 + - -3.4893522 + - -0.12831178 + - -6.019945 + - -0.7323647 + - 0.32182005 + - 2.3388345 + - -1.5495859 + - 0.6743184 + - -2.8721628 + - 1.0267498 + - 4.625679 + - -0.17840388 + - 0.48651752 + - -2.226009 + - 0.060731124 + - -1.1039553 + - -2.3598785 + - -1.0622556 + - -0.9171112 + - -4.6334934 + - -1.9109834 + - 2.671017 + - -0.18857571 + - 0.6246482 + - 2.804751 + - -3.7006886 + - 0.63309544 + - 2.2860084 + - -5.637607 + - -1.3547279 + - -8.567899 + - -0.671982 + - 7.0011625 + - -3.3811522 + - 0.37995687 + - -0.6991432 + - 2.4264534 + - 3.4007764 + - 3.4080002 + - -2.1790762 + - 2.1684418 + - 1.5803468 + - 0.1864253 + - -2.658031 + - 1.3290331 + - -2.0736706 + - 0.24138805 + - -4.9533176 + - -1.7400397 + - -3.7687535 + - -3.8891025 + - -3.162285 + - -0.3696984 + - 4.208351 + - -4.6933737 + - 0.9254856 + - 2.0925035 + - -4.2759953 + - 0.0956119 + - 3.4892163 + - 4.3994737 + - -2.47472 + - -2.221485 + - 3.4001334 + - -0.15081218 + - -5.905734 + - 1.6194074 + - -1.2066908 + - 3.7668004 + - -1.9514014 + - 3.6567144 + - -1.4095931 + - 0.29409075 + - -3.350481 + - -3.510666 + - -8.86275 + - -1.9711957 + - -4.9340916 + - 0.879745 + - 5.000707 + - -2.4542959 + - -0.5822913 + - -0.8801625 + - 1.0181965 + - 3.1072955 + - -0.6443376 + - 1.1627988 + - -3.0738804 + - 0.7069967 + - 2.810048 + - -0.12523171 + - -1.2567481 + - -0.7798489 + - 9.056283 + - -2.015246 + - -0.84381706 + - -3.5828338 + - 4.2370186 + - 3.0754259 + - -0.5852522 + - -2.2230701 + - -0.3058408 + - -1.9467287 + - -0.9755088 + - 0.21705666 + - -2.709553 + - -7.185512 + - -0.8534978 + - -0.10527132 + - 0.7526942 + - -1.1150272 + - 5.2170434 + - -1.9912485 + - -1.1453707 + - 0.201271 + - -0.64587176 + - 0.6107384 + - 0.2337578 + - -5.353915 + - -0.8673629 + - -7.274271 + - 1.6903902 + - 2.3477771 + - -2.8014596 + - -5.575906 + - -0.3478016 + - -4.9921193 + - -0.62580174 + - -0.94932944 + - -0.083093785 + - -2.0155888 + - 0.77539027 + - -3.4750862 + - 1.018756 + - -1.8080918 + - 3.3592324 + - -4.552879 + - -1.6366758 + - -0.8927283 + - -3.484976 + - 0.559705 + - 1.1043789 + - 3.5844984 + - 0.21255606 + - -3.6781456 + - 2.8081686 + - -6.514091 + - -5.0512156 + - 1.4481763 + - 1.5755559 + - 1.5855029 + - -4.3524175 + - -1.9807128 + - 0.84120303 + - 1.5830044 + - 4.65786 + - 3.0038462 + - 0.85908866 + - 0.3357391 + - 1.5633724 + - 1.3886636 + - 1.257783 + - 3.2620046 + - -0.4822218 + - 1.6677825 + - 1.5393988 + - 4.3257074 + - 6.619031 + - 3.7933238 + - -5.920084 + - -0.49981526 + - -4.005239 + - 1.5348297 + - -4.69566 + - -0.40562633 + - -4.31496 + - -0.9908878 + - 2.0911458 + - -1.2742764 + - -2.9201405 + - 6.3777285 + - 1.9906979 + - -4.4170594 + - -3.6238017 + - 1.9203658 + - 1.0824982 + - -1.1781363 + - 0.96519965 + - -3.6292617 + - -2.3011417 + - 0.8329867 + - 0.92985 + - -7.6149464 + - 2.2863202 + - 1.4564254 + - 6.2060413 + - 5.5580225 + - 2.481657 + - 2.245742 + - -8.416468 + - 2.3793118 + - -0.4550395 + - 1.1293831 + - 4.2148514 + - 0.8049778 + - 3.0389621 + - -0.06296453 + - -2.1938195 + - 1.1437137 + - -4.4697948 + - 3.6332529 + - -2.6871762 + - 0.9431128 + - -3.9308925 + - -2.0948792 + - -7.612096 + - 4.2491875 + - 0.63180554 + - -0.82747513 + - -0.25084564 + - 5.4257975 + - -1.8153335 + - 1.228823 + - -0.5317236 + - -9.02199 + - -1.0492728 + - 6.37459 + - -4.6638637 + - 3.2762156 + - 0.18226404 + - -2.6201077 + - -0.9712144 + - -4.039741 + - 1.6072584 + - 1.0163945 + - -1.7488295 + - 0.29116598 + - 2.9258373 + - -6.0597672 + - 2.824281 + - 6.357384 + - 4.4187956 + - -5.1477895 + - -2.3107464 + - 4.3574657 + - 7.883704 + - -3.7531958 + - 1.1308156 + - -4.7984614 + - 4.0430408 + - 4.053595 + - 3.0399244 + - 4.9145217 + - 5.6871176 + - -0.41362816 + - -0.58514154 + - 0.20407487 + - -1.4700352 + - 3.5264807 + - -0.802187 + - 2.063442 + - -0.554533 + - -3.6035748 + - 0.65720737 + - -0.36224332 + - -3.6043375 + - -2.680295 + - -0.95847565 + - -3.1540675 + - -0.056701627 + - -3.2449837 + - -4.2041373 + - -2.86999 + - -4.8214455 + - -3.0246642 + - -3.513831 + - -2.6680026 + - -3.8617277 + - 5.1352415 + - -4.1297708 + - -2.8914652 + - -3.6218145 + - 2.1424046 + - 2.9953258 + - 3.6670997 + - 0.56706816 + - -2.5301883 + - -1.6296372 + - 0.5005934 + - 3.1574576 + - -2.864514 + - -4.547427 + - 5.7109637 + - -2.7189429 + - 1.8240416 + - 1.5518471 + - 1.8525954 + - 0.8502877 + - 7.5954967 + - -1.3237265 + - 2.085663 + - -1.6836542 + - 1.9364892 + - -3.1232505 + - 0.65915865 + - 9.312633 + - 4.2850156 + - -0.4349609 + - -2.3973153 + - 1.0739372 + - 2.4539926 + - -0.82915306 + - -3.345684 + - -0.46574947 + - -3.5428886 + - -1.8616221 + - -5.3194823 + - 5.8674088 + - -4.3306932 + - -8.578859 + - -6.1446304 + - 0.695807 + - -3.7624571 + - -3.434175 + - -3.2220452 + - -5.070276 + - -1.3114101 + - -1.0586846 + - 0.6499892 + - 3.7090983 + - -10.069666 + - 0.27494398 + - 1.2969985 + - -1.6788083 + - 3.7625468 + - 6.3158045 + - -3.9305384 + - 4.83497 + - 1.5231564 + - -1.9985716 + - -2.687611 + - 0.35205585 + - 1.2829185 + - 1.4362789 + - 0.18262029 + - -0.6551498 + - -0.6704644 + - -6.123908 + - -4.417453 + - 1.1994668 + - -3.5858412 + - 4.321372 + - 3.004313 + - 2.7559419 + - 8.914267 + - -5.703394 + - 1.700789 + - -1.3749808 + - -0.7107079 + - -1.0552399 + - -3.6239166 + - 0.71552414 + - -1.6684421 + - -0.39533496 + - -0.6676831 + - -9.071935 + - -1.1240509 + - -3.5325382 + - -6.2979097 + - -0.46517837 + - -0.47743842 + - 0.10094284 + - -3.0825043 + - -1.6607 + - -1.3836876 + - -5.723437 + - 1.1285266 + - 5.269397 + - -1.0590172 + - -1.6180583 + - -1.7633011 + - 7.1866045 + - 9.528116 + - -1.9868356 + - 2.5410972 + - -2.2577925 + - 2.0751674 + - 5.3928976 + - 5.689237 + - -5.502613 + - 1.2983891 + - 2.7446697 + - -2.6898248 + - -4.6122675 + - 3.9624753 + - -4.031171 + - -2.37054 + - -0.55106395 + - 0.8961895 + - -1.658761 + - -2.7195601 + - -5.937019 + - -2.299553 + - -2.5396166 + - -1.6210669 + - -0.71016586 + - -2.0367734 + - 0.9144753 + - 7.6337876 + - -3.1107793 + - -6.3734155 + - -1.3663243 + - -0.24385846 + - 1.8494992 + - -4.9769287 + - -2.0867069 + - -6.562626 + - -3.2282064 + - 9.593213 + - 0.04292361 + - -2.485713 + - 0.49503013 + - -2.74517 + - 0.5368128 + - 3.8330038 + - 1.2710532 + - -0.32724413 + - -2.8632793 + - -5.7201347 + - -1.5309284 + - 2.162038 + - 4.848124 + - 5.199176 + - 4.249807 + - -0.03691411 + - -1.2487468 + - 2.3556569 + - -6.0764875 + - -5.995244 + - -1.7848527 + - -1.6492233 + - 4.894366 + - 0.23290639 + - -4.109241 + - 2.3862646 + - 1.6538112 + - -2.8757591 + - 0.99255806 + - -4.17201 + - 2.6368084 + - -3.7345147 + - 0.7056722 + - -1.5975246 + - 4.1508894 + - -4.0326066 + - -1.3198193 + - -4.6885986 + - 4.422108 + - -2.4053204 + - 4.3768525 + - -5.84482 + - 2.0820544 + - -1.6192827 + - 8.277947 + - 0.068074755 + - 1.4900881 + - 1.3434064 + - 0.13695113 + - -2.3642225 + - 1.6699535 + - -0.4961788 + - -6.8136783 + - -4.740184 + - -6.7116723 + - -1.4982705 + - -6.805703 + - 0.32665032 + - -6.6877937 + - 4.154818 + - -3.9466057 + - 2.119218 + - -3.1234152 + - 0.92797524 + - 6.5539484 + - 0.27228168 + - 1.3977884 + - 2.8468835 + - -6.171675 + - 5.300914 + - 1.9073359 + - -3.6546664 + - 3.2333791 + - -0.40842393 + - -0.9136765 + - 3.406905 + - -7.500883 + - -0.49134707 + - 0.18644574 + - -7.2011514 + - -1.6151054 + - 2.0053577 + - -3.6664526 + - 2.3045082 + - 2.2926326 + - -0.6436203 + - -5.8690434 + - 2.1197476 + - 1.9564877 + - 2.113366 + - 6.108699 + - -2.8382082 + - -1.6122615 + - 0.9121576 + - 2.246898 + - 2.3345835 + - 0.50401384 + - 0.7449231 + - -0.89278734 + - -0.2679138 + - 3.1503623 + - 0.29751018 + - 1.3814625 + - -1.835515 + - 5.879749 + - 2.1812105 + - 2.8661265 + - 2.157553 + - 4.9823866 + - 1.8515795 + - 1.5633613 + - -2.5508907 + - 3.4206114 + - -4.357426 + - -3.6862888 + - -0.8478252 + - 1.7201853 + - 0.6994589 + - 4.0416765 + - 0.11718422 + - -0.40739024 + - 4.62443 + - -5.3924303 + - 0.40209454 + - -4.7290144 + - -0.7569418 + - 1.7479484 + - 2.1523728 + - -7.207888 + - -3.4054418 + - -1.9194454 + - -7.5284147 + - -3.8592541 + - -4.8773155 + - 4.1194224 + - -3.340664 + - -4.5585876 + - 1.4571277 + - -5.1743927 + - -0.08393535 + - 1.0339096 + - 0.6941066 + - 7.506607 + - -6.2840514 + - 1.1007128 + - 1.7458568 + - -0.65463376 + - -0.28213653 + - -9.568279 + - -1.2782973 + - -4.963854 + - -2.1420822 + - 0.37933198 + - -4.043418 + - -0.18266758 + - -4.911052 + - -5.5182886 + - -3.4087052 + - -2.6015823 + - -0.23507884 + - -0.25599584 + - -4.48417 + - -1.4467865 + - -1.0994607 + - 8.71557 + - -1.6676441 + - -6.467756 + - -1.6164587 + - 3.6856346 + - 3.0496607 + - -0.44016206 + - -5.2475624 + - 1.7439294 + - 0.9407555 + - -1.5126117 + - 3.6406443 + - -1.1180142 + - 2.8264558 + - 2.444568 + - 3.2337782 + - 0.43768397 + - -3.1063294 + - -4.1396174 + - 2.1945024 + - -1.23551 + - 2.313437 + - 0.16126977 + - 1.9486477 + - -5.9810557 + - 6.9298363 + - 5.5014377 + - -1.0552108 + - -3.8001108 + - -3.82887 + - -5.8966737 + - 3.1995335 + - -1.7885337 + - -3.4366376 + - -0.2655162 + - -2.6738067 + - 5.026934 + - 6.472039 + - 0.20841897 + - 0.5321252 + - -5.4687915 + - -1.3423098 + - -1.5168505 + - 2.830349 + - 4.922177 + - 1.6076913 + - -3.5679805 + - -1.0408674 + - -0.44167113 + - -0.46553215 + - 5.1820283 + - -3.60695 + - 3.252668 + - 1.0293504 + - 0.32243 + - -6.3493285 + - 4.4303837 + - 1.7409859 + - 0.8239831 + - -0.58831394 + - -6.3351245 + - -0.057905424 + - 1.2615657 + - -0.47355768 + - 2.1266441 + - 3.8746088 + - 6.2978497 + - -2.2413757 + - -1.0918285 + - -2.2074988 + - 7.01531 + - -0.95961195 + - 1.3068424 + - -2.3714426 + - -0.7093064 + - 3.9563618 + - 0.45849365 + - -0.30326536 + - -3.7311132 + - -5.8800273 + - -3.1298509 + - -1.6180604 + - -2.091224 + - 3.1982257 + - -1.0801117 + - -2.6163378 + - 1.9094913 + - 0.35927263 + - -0.052694235 + - -2.906473 + - -2.4074287 + - -5.2031837 + - -2.6326065 + - 8.851427 + - 0.8607019 + - -1.7636074 + - 7.210094 + - 3.0621352 + - 3.3951278 + - 3.927517 + - 5.7721004 + - 3.3105857 + - 2.2137737 + - -3.5856006 + - 5.1802077 + - 6.5620565 + - -4.304164 + - 6.364655 + - -0.3274833 + - -5.6761603 + - -0.33871496 + - -3.1257923 + - 0.759167 + - 0.86740404 + - 5.7731414 + - 3.918887 + - -5.3874474 + - -4.5683737 + - 1.8111383 + - 1.5146264 + - 0.012583772 + - 5.63429 + - -0.48400456 + - -0.9151734 + - 2.2343702 + - 5.850412 + - -1.484924 + - -0.15450744 + - -1.7453172 + - -4.3732295 + - -5.872301 + - -1.8024436 + - 1.1455986 + - 3.9509351 + - -2.3671017 + - -1.8143802 + - 0.73535424 + - 1.367502 + - -2.6125307 + - 1.4523216 + - 1.6912707 + - 0.9363414 + - -1.588423 + - 4.5527706 + - -1.2202564 + - 1.4847957 + - -4.111244 + - -0.95591336 + - -6.166087 + - -3.0361512 + - -1.1713599 + - 2.1050649 + - -3.386768 + - 3.2129035 + - -5.0625253 + - 1.3808321 + - 4.5229254 + - 1.6405114 + - 1.6389394 + - 1.156656 + - 3.8262446 + - 3.0218728 + - 3.8390045 + - -0.9285645 + - -3.5141962 + - 1.3532553 + - -0.5861115 + - 2.5439007 + - -5.076675 + - -1.127417 + - -0.47271362 + - 0.5847938 + - -1.5766839 + - 4.8018746 + - -2.6528673 + - 3.471805 + - -3.2719977 + - 0.37700388 + - -1.721279 + - 2.589708 + - -3.2630315 + - -4.5534754 + - -5.461294 + - -1.1239568 + - -1.1247851 + - -3.1884136 + - -1.069765 + - 0.6118498 + - 3.40644 + - -4.959282 + - -5.7157216 + - -1.0724398 + - 5.716257 + - 3.3773115 + - 3.6611385 + - -1.4593177 + - -4.1181374 + - 5.3271456 + - 6.161973 + - 3.8974743 + - 0.5164339 + - 2.0238364 + - 1.0345948 + - -3.489914 + - -0.5999031 + - -1.6560122 + - -1.7238566 + - 1.9771208 + - -0.06474113 + - 5.4260526 + - -6.8269143 + - 0.28510028 + - 4.4657025 + - 4.2370095 + - 0.84410584 + - 0.8680598 + - -0.86441875 + - -2.842243 + - 2.8549247 + - -0.6904234 + - 0.11616059 + - 1.1621947 + - -1.0783253 + - 2.1134677 + - -1.4899899 + - 6.5458097 + - 0.89546704 + - -3.5351946 + - -7.579106 + - 1.1072668 + - 6.9947357 + - 0.6494694 + - -4.024993 + - 0.60075796 + - 0.022905719 + - 3.5747802 + - 1.4017162 + - -4.2853603 + - -6.0821624 + - 0.5446563 + - -1.1982385 + - -0.58982587 + - -6.691073 + - -3.3535728 + - -2.440248 + - -0.008025723 + - 2.982255 + - -1.4815017 + - -1.3256948 + - 7.9773293 + - 8.410116 + - -1.513188 + - 3.021662 + - 4.7291894 + - 3.101133 + - -4.556101 + - 3.6403332 + - -1.1872239 + - -0.030934617 + - 6.247772 + - 2.5143042 + - 0.38465488 + - 1.6374089 + - -1.2668817 + - -5.356737 + - -0.49598595 + - -0.90198267 + - 3.3143213 + - 4.439772 + - 1.8715417 + - -4.466426 + - -1.5513788 + - 1.6867278 + - 1.5099977 + - -4.204352 + - 3.9289916 + - -4.4377065 + - -0.86298394 + - 4.8430076 + - -4.908376 + - 1.2954383 + - -3.2773132 + - 3.9593124 + - 2.2893672 + - -0.5038326 + - 5.7128158 + - -1.9708877 + - -6.1027436 + - 2.054459 + - 0.037195977 + - -3.5170512 + - -2.4083931 + - 0.65073544 + - 1.5663671 + - 3.074177 + - -2.699525 + - -4.1435814 + - -0.84019905 + - 4.473301 + - 3.5279915 + - -0.58654606 + - 1.0714568 + - 0.1430093 + - 2.7464309 + - -1.4365237 + - 1.319976 + - 4.816919 + - 1.2606165 + - 9.576307 + - 5.739152 +- - 1.9356916 + - -0.6240984 + - 0.37996075 + - -13.695179 + - -8.722859 + - 5.1210184 + - -4.2038116 + - -13.446329 + - -5.846591 + - 3.8387766 + - -2.6187122 + - -4.969217 + - -0.7695479 + - 0.63198656 + - -1.8875492 + - 0.29203987 + - -8.454947 + - 7.81375 + - -1.8412884 + - 1.1673623 + - -7.499516 + - 7.0044384 + - 2.3112805 + - -8.274962 + - -0.7735424 + - -5.637083 + - -3.6580431 + - 7.495967 + - 3.2906702 + - -1.3523564 + - 2.7860718 + - 4.7463727 + - -2.2653003 + - -5.2699113 + - 1.9887148 + - 0.8186712 + - 1.1366408 + - 5.5656877 + - -0.83984375 + - 7.579066 + - -1.869412 + - -6.239297 + - -3.251951 + - -4.075418 + - -3.4887195 + - -0.93754935 + - 5.5600276 + - -5.191839 + - 3.2901971 + - 1.9719354 + - -0.6211979 + - 2.2923667 + - 0.7531423 + - 0.5957142 + - 3.5483515 + - -2.387186 + - -0.88976055 + - 7.112675 + - 2.6473966 + - 0.96171576 + - -6.145538 + - 4.165902 + - -0.03223901 + - 7.5331173 + - 0.9306572 + - 2.571834 + - -3.1986122 + - -6.2228 + - 9.873071 + - -2.619424 + - 0.8044841 + - 5.3194294 + - -4.7348804 + - -2.597042 + - -5.7148223 + - -1.1036952 + - -0.50389934 + - -1.8586986 + - -4.1585565 + - 8.000266 + - -1.3583525 + - 3.9535537 + - -7.599758 + - 2.3599296 + - 1.9566034 + - 6.4139357 + - -6.1841025 + - -0.1585832 + - 1.2116104 + - 0.40403992 + - -7.341764 + - 2.3956618 + - 0.79433024 + - -3.2178013 + - 4.897968 + - -0.14725128 + - -3.0520055 + - 5.0676107 + - -6.44383 + - -3.9284089 + - 1.6108137 + - 0.73635286 + - -10.102538 + - -0.82609326 + - 2.2340512 + - 4.9466634 + - -6.091268 + - 3.5975306 + - -0.08416144 + - 3.8400838 + - 1.0664845 + - 4.3590584 + - -3.6271694 + - -6.727146 + - -3.8780098 + - -10.393907 + - -6.0602326 + - 0.22173032 + - 1.3255334 + - 2.0863516 + - 3.0202408 + - -1.8848857 + - 1.7248796 + - -4.426695 + - 4.9597692 + - -1.2267817 + - 8.347916 + - 1.0418766 + - 6.3461494 + - -0.39808497 + - 3.570923 + - -1.1188978 + - -0.4308431 + - -5.7547894 + - -0.7036468 + - -0.78964895 + - 2.8744965 + - 0.40274668 + - 5.548045 + - 2.478365 + - 7.922875 + - 0.011718597 + - 1.6211708 + - -0.9821606 + - -1.9620924 + - 4.383073 + - 1.0479729 + - -3.9225888 + - 0.7066765 + - 1.1469871 + - -3.90536 + - -0.27603212 + - 5.0769258 + - 0.23171721 + - -3.3699737 + - -0.25931346 + - -5.063128 + - -0.8741577 + - -1.2574152 + - 1.6329788 + - -1.6577618 + - -3.209293 + - 0.47586772 + - 1.2620646 + - -1.0375261 + - 0.5364254 + - 5.252071 + - -0.29595426 + - 7.324168 + - -2.5076087 + - 3.2833283 + - -0.8780623 + - 1.5803152 + - -2.333644 + - -1.8714154 + - 4.4511757 + - -3.547205 + - -8.10575 + - -0.04870603 + - 3.807047 + - 1.9086684 + - -1.3176311 + - 0.3129706 + - -0.79231757 + - 9.712209 + - -0.59312654 + - 2.03598 + - -0.54062784 + - -1.3209325 + - 1.9941254 + - -1.2047657 + - 1.2350148 + - -3.475038 + - 4.952962 + - 4.302695 + - -0.19714779 + - 0.14459038 + - 0.49604633 + - -2.6574876 + - 3.197363 + - -2.5831647 + - -0.7869595 + - -5.8598213 + - -0.39479443 + - 1.5957322 + - -4.1827602 + - -3.0343158 + - 1.1028521 + - -5.41252 + - 1.7974287 + - 3.5935671 + - 1.295416 + - 4.885639 + - -0.68773353 + - 1.1610643 + - -1.4204162 + - 2.8335142 + - -3.18089 + - 0.016054407 + - 1.5198398 + - 1.7954137 + - -0.6280288 + - -1.645038 + - -1.0377176 + - 0.2868468 + - 2.6577027 + - -2.7341413 + - -1.5487833 + - 6.1103725 + - 1.2631333 + - 0.16197985 + - -4.608879 + - 1.9107052 + - 5.714381 + - -2.24651 + - 0.21630812 + - 1.1260674 + - 2.7175326 + - -0.7333612 + - 7.269696 + - 0.22871324 + - 5.09269 + - 1.6693946 + - -1.3305895 + - -2.4754548 + - -0.048506647 + - 0.6467056 + - -2.7260087 + - 0.90032125 + - -2.4908578 + - -1.6315597 + - -2.5796914 + - 1.0144392 + - 2.1732247 + - -0.3257843 + - -1.749545 + - 0.26150632 + - -0.014139013 + - -1.1174402 + - -0.5928163 + - 2.97562 + - -4.1918025 + - 0.28479326 + - 0.587338 + - 1.5072336 + - -4.1045313 + - 4.043206 + - -0.49654236 + - 3.5223336 + - -1.3540527 + - -0.94824785 + - -0.1794953 + - 2.8954945 + - 4.357288 + - 0.6943645 + - 5.5408835 + - 4.796431 + - 0.33206075 + - -0.76182264 + - 5.420771 + - -3.5224752 + - -0.40776452 + - 1.3349377 + - -3.864071 + - -5.591399 + - 1.0796564 + - 3.9146397 + - -3.4910748 + - 0.74162525 + - -0.8091661 + - -2.0274136 + - -6.062958 + - 2.4608781 + - 5.1475086 + - -3.1921153 + - -4.506642 + - -1.5239264 + - 0.009790426 + - 1.4343959 + - 4.9679375 + - -3.3608706 + - -2.420982 + - -3.889612 + - 2.8468983 + - -2.4504697 + - -5.395104 + - 1.6415076 + - -0.75104564 + - -0.053366497 + - -3.219737 + - 0.5432486 + - -0.6236159 + - 4.35061 + - -2.7862527 + - -5.1213255 + - -0.52747256 + - 0.28507543 + - -2.1836097 + - -5.050571 + - -3.484788 + - 6.4462886 + - 2.3092911 + - 4.9030523 + - 1.2873696 + - 1.0160179 + - 5.744276 + - -6.3664055 + - 3.917366 + - 2.6559198 + - -6.85135 + - 5.517158 + - 6.665499 + - 5.078759 + - 0.035529356 + - 1.2311428 + - 1.4577217 + - 4.7208676 + - 2.8670015 + - 0.31587303 + - 5.3396077 + - -4.8404617 + - 0.14541559 + - 3.3986194 + - 2.4548724 + - 2.922557 + - -5.182862 + - -5.038844 + - 2.6236172 + - -2.4635904 + - -6.876122 + - 0.55164814 + - -3.4091172 + - 3.2528236 + - 0.5330769 + - -0.3091712 + - -2.9438922 + - 0.7366008 + - 2.6814525 + - -2.6672018 + - -2.0381427 + - -2.017297 + - 0.9725337 + - -2.811828 + - 1.3797814 + - 4.630082 + - 6.634165 + - -0.6398153 + - 3.1694899 + - -2.284006 + - -3.2936387 + - -8.437194 + - 2.8336549 + - 9.1288395 + - 4.461083 + - -9.258004 + - -3.2966714 + - 0.28558144 + - 3.2821443 + - 0.4391441 + - 2.8227012 + - 0.23954126 + - -0.13812445 + - 2.716084 + - 4.5270224 + - -0.44838765 + - 1.0965089 + - -4.803445 + - 0.17183869 + - -1.571574 + - 3.0257068 + - 3.308804 + - 2.6417277 + - 3.4679797 + - 1.0023756 + - -1.7867284 + - -2.4955583 + - 0.34504116 + - -0.2656238 + - 2.6875842 + - -5.125634 + - 2.8267672 + - 10.302705 + - 2.6562688 + - 2.6521792 + - 0.123434566 + - -3.7377217 + - -2.184541 + - -3.8147748 + - -2.4391227 + - 4.5453634 + - 3.56705 + - -2.8470457 + - -3.2066314 + - -3.5501597 + - 1.7930534 + - 2.1222436 + - 6.7394214 + - 2.7919452 + - 1.3967342 + - -2.292553 + - 5.507129 + - -1.3286811 + - -4.1636815 + - -0.2792076 + - -2.2006347 + - 0.18563025 + - -0.30979386 + - 5.997888 + - 4.5960655 + - -0.24140754 + - -1.194254 + - 1.7971147 + - 2.69879 + - 3.1611254 + - 4.861772 + - 0.5717125 + - 4.4148493 + - 6.7655697 + - 7.889467 + - -2.2520204 + - -3.053852 + - 0.50229365 + - -3.763287 + - 2.3752828 + - 6.6091256 + - 2.382873 + - -5.023298 + - 1.7040154 + - 0.73501253 + - -1.843662 + - -4.4718466 + - -0.84680575 + - 0.831927 + - -3.5000951 + - -2.1436462 + - -2.0003846 + - -3.4876585 + - -1.2253431 + - 2.4587529 + - 3.1507137 + - -0.20991467 + - -3.6230907 + - 1.6922675 + - -2.4379263 + - -3.138502 + - -2.481818 + - 8.020982 + - 3.1985905 + - 2.1859448 + - -3.4866881 + - -4.864091 + - -6.1968284 + - 0.3160932 + - 2.6697745 + - -1.2961046 + - 1.4899408 + - -5.318452 + - -0.36032617 + - -8.973731 + - 6.995389 + - 4.5941424 + - -0.15127234 + - 2.1946635 + - 7.1451674 + - -2.186284 + - 3.8897831 + - -5.650713 + - -3.564068 + - -0.1068555 + - 1.7897475 + - 0.51994354 + - 9.135012 + - 0.4950546 + - -2.591254 + - 1.1784751 + - 6.060755 + - -3.7165408 + - -4.5861964 + - 1.9820492 + - 4.369032 + - 2.5919142 + - 1.1618717 + - -0.81635827 + - -3.5167663 + - 1.0153253 + - 4.7781615 + - 2.864752 + - -0.9922342 + - 5.649041 + - -5.5735793 + - -4.641045 + - -0.6903997 + - -1.1808997 + - 2.0086153 + - -1.4501162 + - 2.2949822 + - -0.8038427 + - 7.361604 + - 3.132387 + - 4.307918 + - -1.3820469 + - 1.2015624 + - 1.3017988 + - 5.152954 + - -6.3220387 + - -2.3503802 + - -0.7697383 + - 0.93353033 + - 5.305783 + - -2.6864994 + - 0.9238767 + - 0.174549 + - 4.4985805 + - -0.1059169 + - -7.1552763 + - -7.682183 + - -0.8677171 + - -3.368763 + - 3.7216167 + - 0.8814153 + - -7.414112 + - -0.48155665 + - 4.565454 + - -1.6019051 + - 0.9754921 + - -4.0732746 + - 1.840324 + - -8.689777 + - -3.1589518 + - 6.3145056 + - 5.4352136 + - 0.33773866 + - -4.6557646 + - 5.441703 + - 5.6072674 + - 3.5869598 + - 0.94421375 + - 1.186368 + - -3.1537504 + - -0.18810757 + - -0.7070316 + - -0.5448553 + - -5.0341167 + - 2.756673 + - 3.1836329 + - -0.35707274 + - 0.29260013 + - 4.257874 + - -0.85281813 + - -4.141162 + - -5.556802 + - 1.2179136 + - -0.42547956 + - 1.2888836 + - -0.5176524 + - 3.0460968 + - 1.1362524 + - -1.0597732 + - 1.6508367 + - -2.556299 + - 1.798404 + - 1.7169889 + - 2.7303865 + - -2.1983025 + - 1.3783575 + - 2.6862416 + - 1.5250754 + - -0.5018672 + - 1.9233106 + - 1.8204317 + - 2.46843 + - -1.4681647 + - 2.3364632 + - 5.09199 + - -1.0624199 + - -0.2279825 + - 2.2758062 + - -0.08549928 + - -1.3054274 + - 0.08407866 + - -2.2026803 + - 3.5719478 + - 0.7398134 + - -4.355313 + - -0.642448 + - -0.06627391 + - -0.28608498 + - -2.5283074 + - -0.05334326 + - 7.8417 + - -2.007733 + - -1.6963121 + - 4.904969 + - -3.7996082 + - 2.4137034 + - 7.0019236 + - -2.8952916 + - 0.16809851 + - -0.9777466 + - 5.3386774 + - -2.713064 + - -1.1734126 + - -1.9222565 + - -2.6917984 + - 3.5579314 + - 4.4858084 + - -2.003109 + - 7.7308326 + - 5.635259 + - -8.819095 + - 6.376318 + - -0.67139 + - 0.8228078 + - 2.585237 + - 5.958832 + - 0.053650048 + - -5.4631047 + - -1.1987593 + - 4.0836544 + - 1.5998417 + - 0.30617213 + - -3.0240781 + - -3.047981 + - 1.4284147 + - 3.428398 + - 1.2109905 + - 3.1219196 + - -1.7711568 + - -1.5775738 + - 2.1560807 + - 1.4130273 + - -1.9972235 + - 1.4325782 + - -6.1785336 + - 0.82259905 + - 4.1850653 + - 0.9305706 + - 8.024512 + - 7.856785 + - 0.32287595 + - -3.8493886 + - 2.5100634 + - -2.442539 + - 0.5273989 + - 0.19865431 + - -7.176081 + - -0.24906845 + - -0.9963309 + - 3.731071 + - -2.1028814 + - 0.4727908 + - 4.0786247 + - -0.80662405 + - 1.1076987 + - 2.1903286 + - -3.4288034 + - 0.6631121 + - -3.9156291 + - -3.8883162 + - 1.4230078 + - -1.1535891 + - -3.7555223 + - 1.0353003 + - 2.028303 + - 2.5980542 + - 1.4999186 + - -6.1360383 + - -0.36904052 + - -2.5603733 + - 0.5683684 + - -1.3941216 + - 1.0463642 + - 8.090935 + - -4.4859686 + - -3.4370556 + - 4.6723957 + - 0.96971494 + - -0.13858557 + - -3.6378443 + - -1.4615623 + - -1.5991538 + - -3.4573183 + - -4.448671 + - 0.83507425 + - -1.0748514 + - -0.5535598 + - -5.642699 + - 3.735956 + - -1.7995142 + - -0.29789096 + - 1.7928902 + - -0.40229103 + - -1.1321644 + - -3.6517792 + - 5.0369186 + - -6.544561 + - -1.6951227 + - 2.6655552 + - 7.8715143 + - 0.38866425 + - -1.5073551 + - 3.534642 + - -4.8837156 + - 3.1080437 + - 4.1417904 + - -0.9472733 + - 0.032857977 + - -0.4740722 + - -2.231927 + - 1.9907724 + - 2.1095617 + - -4.6072206 + - -0.27993008 + - -0.6228722 + - 1.7250009 + - -4.3506064 + - -3.260308 + - -0.1161937 + - -1.2956892 + - 1.094168 + - 8.899615 + - -0.07317445 + - -4.8785615 + - -1.2956922 + - -4.8308396 + - 2.9554007 + - -1.271427 + - -3.6361585 + - -1.2113787 + - -3.847117 + - 0.096961915 + - -4.555567 + - -0.23989476 + - 3.7803407 + - -2.0416906 + - 6.0252833 + - -1.919977 + - 5.286515 + - 1.0201753 + - -3.405025 + - -4.28162 + - -1.7105299 + - 3.7298696 + - 4.9694047 + - 0.90555906 + - 0.36706808 + - -4.3779354 + - 3.435882 + - -2.5388253 + - -4.3397675 + - 0.55791456 + - 1.1306785 + - 1.4367512 + - 2.4528959 + - -7.3536577 + - -2.7498195 + - 4.6901813 + - 1.0969869 + - 1.7430645 + - -1.5032202 + - -0.7417103 + - 2.606439 + - 3.1173096 + - 2.8644907 + - 0.5639822 + - -0.5152176 + - 2.6185198 + - -2.0196903 + - 8.119439 + - -2.6332624 + - 1.7182169 + - -1.7735062 + - 2.6346717 + - -2.9998786 + - -2.269773 + - -3.4018955 + - -0.87990767 + - 0.08460969 + - 1.5819722 + - -6.4386535 + - 3.5028126 + - 7.103899 + - -2.7490573 + - -5.1610413 + - -4.9691086 + - -4.1829824 + - 4.7104254 + - 5.9894476 + - 3.678535 + - -0.31422016 + - 5.7384543 + - 2.7675695 + - -1.5676994 + - 2.019775 + - 2.5589685 + - -1.2388422 + - -2.2915692 + - -0.9855544 + - 9.1898775 + - 4.9981027 + - -0.7246338 + - 2.798965 + - 4.9549713 + - 3.4475756 + - 2.6643465 + - -0.9520566 + - 3.87626 + - -2.9115229 + - -1.5185884 + - -3.6489816 + - -4.828569 + - 1.0750796 + - 2.4698532 + - -2.516785 + - 4.8055654 + - -3.5230994 + - 8.10993 + - 5.070884 + - -0.302964 + - 4.245472 + - -4.070587 + - -2.9132462 + - 0.4249146 + - 4.4988647 + - 1.4659619 + - -2.6418278 + - 3.189982 + - -0.8978926 + - 3.521353 + - -2.8904731 + - -5.2794366 + - -2.1825624 + - -1.8181564 + - -0.82343245 + - -4.3987703 + - 1.6653824 + - -5.5608826 + - 5.9046335 + - 2.449523 + - 1.496427 + - 0.43904957 + - -1.3439952 + - -2.4879053 + - -5.300846 + - -2.7133749 + - 1.1792383 + - -0.41589433 + - 2.138072 + - -4.9658513 + - -2.7126284 + - 8.39324 + - -0.15536213 + - -1.9018238 + - 1.5417383 + - -1.0935245 + - 1.6102118 + - 9.998159 + - 3.7701294 + - -3.873384 + - 1.253483 + - -4.482645 + - 0.28375235 + - 0.05088889 + - -5.404273 + - 1.6322818 + - -1.1642864 + - 4.0759325 + - -2.58962 + - -0.7518721 + - 5.6040983 + - 2.9668581 + - 1.5022204 + - -3.2929406 + - 0.4072332 + - -8.463772 + - 0.0828407 + - -2.5432982 + - -2.0122428 + - 6.624173 + - -4.162691 + - 0.8705308 + - 0.47720277 + - 2.75209 + - 1.703867 + - -4.365777 + - -2.6400218 + - 3.1331167 + - -5.2336817 + - 0.19301872 + - 2.0210445 + - -6.432838 + - 7.3757834 + - 2.1261933 + - 2.26889 + - 4.2546024 + - -0.4559552 + - -3.346466 + - 1.1705956 + - -2.5083148 + - -3.3773797 + - 0.22612506 + - -2.351677 + - 2.0816128 + - -0.40361598 + - -2.5447333 + - 1.9215052 + - -2.6654394 + - -1.8254589 + - 1.8438792 + - 2.814274 + - 2.4042807 + - -0.6088508 + - 3.3440917 + - 3.7498028 + - -4.3523593 + - -2.3761013 + - -3.0400755 + - -2.2094836 + - -1.1089859 + - 3.0064294 + - 2.2366102 + - 2.7864413 + - -7.66899 + - 4.8717866 + - 2.7941127 + - 2.5259495 + - -1.8376921 + - -0.11832557 + - 0.46231616 + - 1.3587246 + - 7.3157854 + - -1.3831595 + - -1.7059962 + - 5.645568 + - -2.562538 + - -0.23603979 + - 1.6177899 + - 1.784965 + - -0.998628 + - -2.0936618 + - -0.3641389 + - -0.8150455 + - 2.5176241 + - 2.495767 + - 4.393156 + - 0.3469251 + - -1.7742747 + - 4.103935 + - -2.0932226 + - -0.53421015 + - -2.8835115 + - 3.6341426 + - -0.28915265 + - -0.75162137 + - 1.3624977 + - -1.3634014 + - 0.6888055 + - -3.8224828 + - -0.68059456 + - 2.5437796 + - 6.9950056 + - 0.83672994 + - -1.5202479 + - -0.01705222 + - -2.7239227 + - -0.5977611 + - 4.037115 + - 0.5923689 + - 2.8413227 + - -0.3442944 + - -3.1019263 + - -2.9419522 + - 2.4727151 + - 0.75342166 + - -4.194418 + - -1.2661114 + - -1.47623 + - 0.54792464 + - -1.0549732 + - -3.6007566 + - -2.182444 + - -3.2694929 + - 3.8807333 + - -6.0530624 + - 1.2607942 + - -2.109062 + - 2.4328983 + - 0.16993248 + - -6.5526395 + - 0.5386703 + - -4.472634 + - -3.7272975 + - -0.47265086 + - -1.9537004 + - -3.9254024 + - 1.613719 + - 1.9210505 + - 1.3679838 + - 0.6315999 + - -0.41879615 + - 4.667693 + - 3.122138 + - 2.2360954 + - 7.109888 +- - -1.0537152 + - 11.840553 + - 0.2541843 + - -3.9493227 + - -2.493444 + - 3.147579 + - -2.6826935 + - -0.3261378 + - -8.100885 + - 0.090357766 + - -1.481247 + - -11.877387 + - 3.658843 + - 0.5837535 + - -5.3898907 + - -1.1656011 + - -2.8392048 + - 4.7844677 + - 3.0748394 + - -9.754476 + - -0.67621404 + - 4.874153 + - -3.6391025 + - 7.7182574 + - -10.884343 + - 1.4398134 + - -1.1289243 + - 3.848481 + - -4.431309 + - 1.744337 + - -0.028037999 + - 7.3849034 + - 1.7568059 + - -1.4742123 + - -3.5546567 + - 0.70163804 + - -4.068962 + - 4.7105656 + - 4.0045676 + - 0.9946143 + - -1.7000505 + - -10.778717 + - 3.6060991 + - 0.4994913 + - 7.011027 + - 6.645163 + - -3.1697602 + - -2.4546366 + - 5.08044 + - -2.6876516 + - 3.4067738 + - -5.6228843 + - 6.845399 + - 1.9844933 + - 3.7493474 + - -11.77839 + - 0.0011319626 + - 6.7125716 + - 1.6186159 + - -3.2566564 + - -10.71649 + - -6.9967003 + - -7.7738657 + - 1.5714281 + - -1.5363543 + - -2.5508192 + - -1.0800791 + - -6.5405374 + - 3.3792906 + - -1.7983487 + - 0.19637054 + - 2.305406 + - -2.290362 + - 1.6852262 + - -0.30437437 + - -4.6390414 + - -2.2013125 + - -2.8945398 + - -3.0206194 + - 7.3430924 + - -2.166948 + - 0.7037571 + - -5.2451377 + - -0.9597764 + - 2.9712124 + - -2.6359582 + - -0.7173016 + - -3.161498 + - 2.5499308 + - 6.6335835 + - -4.97941 + - 3.6654825 + - 8.784596 + - -0.7566341 + - 4.776138 + - -6.251274 + - -3.776686 + - 6.328579 + - -4.0978017 + - -0.21631396 + - 1.1184362 + - 3.2935023 + - -2.4475389 + - -4.2273755 + - 1.9973049 + - 5.8665924 + - -2.7950685 + - 2.3710246 + - -2.865988 + - -1.8932068 + - -7.190564 + - 2.8801794 + - -3.767424 + - 0.5903187 + - -1.1342036 + - -10.0779 + - -3.0789077 + - -0.8649639 + - 1.9994396 + - -4.09259 + - 2.9838285 + - 3.5132134 + - 0.13216774 + - 2.1787443 + - -1.9491249 + - -2.5089195 + - 4.6671553 + - -3.3925495 + - 2.6916046 + - 0.46813467 + - 1.6933384 + - -3.4893522 + - -0.12831178 + - -6.019945 + - -0.7323647 + - 0.32182005 + - 2.3388345 + - -1.5495859 + - 0.6743184 + - -2.8721628 + - 1.0267498 + - 4.625679 + - -0.17840388 + - 0.48651752 + - -2.226009 + - 0.060731124 + - -1.1039553 + - -2.3598785 + - -1.0622556 + - -0.9171112 + - -4.6334934 + - -1.9109834 + - 2.671017 + - -0.18857571 + - 0.6246482 + - 2.804751 + - -3.7006886 + - 0.63309544 + - 2.2860084 + - -5.637607 + - -1.3547279 + - -8.567899 + - -0.671982 + - 7.0011625 + - -3.3811522 + - 0.37995687 + - -0.6991432 + - 2.4264534 + - 3.4007764 + - 3.4080002 + - -2.1790762 + - 2.1684418 + - 1.5803468 + - 0.1864253 + - -2.658031 + - 1.3290331 + - -2.0736706 + - 0.24138805 + - -4.9533176 + - -1.7400397 + - -3.7687535 + - -3.8891025 + - -3.162285 + - -0.3696984 + - 4.208351 + - -4.6933737 + - 0.9254856 + - 2.0925035 + - -4.2759953 + - 0.0956119 + - 3.4892163 + - 4.3994737 + - -2.47472 + - -2.221485 + - 3.4001334 + - -0.15081218 + - -5.905734 + - 1.6194074 + - -1.2066908 + - 3.7668004 + - -1.9514014 + - 3.6567144 + - -1.4095931 + - 0.29409075 + - -3.350481 + - -3.510666 + - -8.86275 + - -1.9711957 + - -4.9340916 + - 0.879745 + - 5.000707 + - -2.4542959 + - -0.5822913 + - -0.8801625 + - 1.0181965 + - 3.1072955 + - -0.6443376 + - 1.1627988 + - -3.0738804 + - 0.7069967 + - 2.810048 + - -0.12523171 + - -1.2567481 + - -0.7798489 + - 9.056283 + - -2.015246 + - -0.84381706 + - -3.5828338 + - 4.2370186 + - 3.0754259 + - -0.5852522 + - -2.2230701 + - -0.3058408 + - -1.9467287 + - -0.9755088 + - 0.21705666 + - -2.709553 + - -7.185512 + - -0.8534978 + - -0.10527132 + - 0.7526942 + - -1.1150272 + - 5.2170434 + - -1.9912485 + - -1.1453707 + - 0.201271 + - -0.64587176 + - 0.6107384 + - 0.2337578 + - -5.353915 + - -0.8673629 + - -7.274271 + - 1.6903902 + - 2.3477771 + - -2.8014596 + - -5.575906 + - -0.3478016 + - -4.9921193 + - -0.62580174 + - -0.94932944 + - -0.083093785 + - -2.0155888 + - 0.77539027 + - -3.4750862 + - 1.018756 + - -1.8080918 + - 3.3592324 + - -4.552879 + - -1.6366758 + - -0.8927283 + - -3.484976 + - 0.559705 + - 1.1043789 + - 3.5844984 + - 0.21255606 + - -3.6781456 + - 2.8081686 + - -6.514091 + - -5.0512156 + - 1.4481763 + - 1.5755559 + - 1.5855029 + - -4.3524175 + - -1.9807128 + - 0.84120303 + - 1.5830044 + - 4.65786 + - 3.0038462 + - 0.85908866 + - 0.3357391 + - 1.5633724 + - 1.3886636 + - 1.257783 + - 3.2620046 + - -0.4822218 + - 1.6677825 + - 1.5393988 + - 4.3257074 + - 6.619031 + - 3.7933238 + - -5.920084 + - -0.49981526 + - -4.005239 + - 1.5348297 + - -4.69566 + - -0.40562633 + - -4.31496 + - -0.9908878 + - 2.0911458 + - -1.2742764 + - -2.9201405 + - 6.3777285 + - 1.9906979 + - -4.4170594 + - -3.6238017 + - 1.9203658 + - 1.0824982 + - -1.1781363 + - 0.96519965 + - -3.6292617 + - -2.3011417 + - 0.8329867 + - 0.92985 + - -7.6149464 + - 2.2863202 + - 1.4564254 + - 6.2060413 + - 5.5580225 + - 2.481657 + - 2.245742 + - -8.416468 + - 2.3793118 + - -0.4550395 + - 1.1293831 + - 4.2148514 + - 0.8049778 + - 3.0389621 + - -0.06296453 + - -2.1938195 + - 1.1437137 + - -4.4697948 + - 3.6332529 + - -2.6871762 + - 0.9431128 + - -3.9308925 + - -2.0948792 + - -7.612096 + - 4.2491875 + - 0.63180554 + - -0.82747513 + - -0.25084564 + - 5.4257975 + - -1.8153335 + - 1.228823 + - -0.5317236 + - -9.02199 + - -1.0492728 + - 6.37459 + - -4.6638637 + - 3.2762156 + - 0.18226404 + - -2.6201077 + - -0.9712144 + - -4.039741 + - 1.6072584 + - 1.0163945 + - -1.7488295 + - 0.29116598 + - 2.9258373 + - -6.0597672 + - 2.824281 + - 6.357384 + - 4.4187956 + - -5.1477895 + - -2.3107464 + - 4.3574657 + - 7.883704 + - -3.7531958 + - 1.1308156 + - -4.7984614 + - 4.0430408 + - 4.053595 + - 3.0399244 + - 4.9145217 + - 5.6871176 + - -0.41362816 + - -0.58514154 + - 0.20407487 + - -1.4700352 + - 3.5264807 + - -0.802187 + - 2.063442 + - -0.554533 + - -3.6035748 + - 0.65720737 + - -0.36224332 + - -3.6043375 + - -2.680295 + - -0.95847565 + - -3.1540675 + - -0.056701627 + - -3.2449837 + - -4.2041373 + - -2.86999 + - -4.8214455 + - -3.0246642 + - -3.513831 + - -2.6680026 + - -3.8617277 + - 5.1352415 + - -4.1297708 + - -2.8914652 + - -3.6218145 + - 2.1424046 + - 2.9953258 + - 3.6670997 + - 0.56706816 + - -2.5301883 + - -1.6296372 + - 0.5005934 + - 3.1574576 + - -2.864514 + - -4.547427 + - 5.7109637 + - -2.7189429 + - 1.8240416 + - 1.5518471 + - 1.8525954 + - 0.8502877 + - 7.5954967 + - -1.3237265 + - 2.085663 + - -1.6836542 + - 1.9364892 + - -3.1232505 + - 0.65915865 + - 9.312633 + - 4.2850156 + - -0.4349609 + - -2.3973153 + - 1.0739372 + - 2.4539926 + - -0.82915306 + - -3.345684 + - -0.46574947 + - -3.5428886 + - -1.8616221 + - -5.3194823 + - 5.8674088 + - -4.3306932 + - -8.578859 + - -6.1446304 + - 0.695807 + - -3.7624571 + - -3.434175 + - -3.2220452 + - -5.070276 + - -1.3114101 + - -1.0586846 + - 0.6499892 + - 3.7090983 + - -10.069666 + - 0.27494398 + - 1.2969985 + - -1.6788083 + - 3.7625468 + - 6.3158045 + - -3.9305384 + - 4.83497 + - 1.5231564 + - -1.9985716 + - -2.687611 + - 0.35205585 + - 1.2829185 + - 1.4362789 + - 0.18262029 + - -0.6551498 + - -0.6704644 + - -6.123908 + - -4.417453 + - 1.1994668 + - -3.5858412 + - 4.321372 + - 3.004313 + - 2.7559419 + - 8.914267 + - -5.703394 + - 1.700789 + - -1.3749808 + - -0.7107079 + - -1.0552399 + - -3.6239166 + - 0.71552414 + - -1.6684421 + - -0.39533496 + - -0.6676831 + - -9.071935 + - -1.1240509 + - -3.5325382 + - -6.2979097 + - -0.46517837 + - -0.47743842 + - 0.10094284 + - -3.0825043 + - -1.6607 + - -1.3836876 + - -5.723437 + - 1.1285266 + - 5.269397 + - -1.0590172 + - -1.6180583 + - -1.7633011 + - 7.1866045 + - 9.528116 + - -1.9868356 + - 2.5410972 + - -2.2577925 + - 2.0751674 + - 5.3928976 + - 5.689237 + - -5.502613 + - 1.2983891 + - 2.7446697 + - -2.6898248 + - -4.6122675 + - 3.9624753 + - -4.031171 + - -2.37054 + - -0.55106395 + - 0.8961895 + - -1.658761 + - -2.7195601 + - -5.937019 + - -2.299553 + - -2.5396166 + - -1.6210669 + - -0.71016586 + - -2.0367734 + - 0.9144753 + - 7.6337876 + - -3.1107793 + - -6.3734155 + - -1.3663243 + - -0.24385846 + - 1.8494992 + - -4.9769287 + - -2.0867069 + - -6.562626 + - -3.2282064 + - 9.593213 + - 0.04292361 + - -2.485713 + - 0.49503013 + - -2.74517 + - 0.5368128 + - 3.8330038 + - 1.2710532 + - -0.32724413 + - -2.8632793 + - -5.7201347 + - -1.5309284 + - 2.162038 + - 4.848124 + - 5.199176 + - 4.249807 + - -0.03691411 + - -1.2487468 + - 2.3556569 + - -6.0764875 + - -5.995244 + - -1.7848527 + - -1.6492233 + - 4.894366 + - 0.23290639 + - -4.109241 + - 2.3862646 + - 1.6538112 + - -2.8757591 + - 0.99255806 + - -4.17201 + - 2.6368084 + - -3.7345147 + - 0.7056722 + - -1.5975246 + - 4.1508894 + - -4.0326066 + - -1.3198193 + - -4.6885986 + - 4.422108 + - -2.4053204 + - 4.3768525 + - -5.84482 + - 2.0820544 + - -1.6192827 + - 8.277947 + - 0.068074755 + - 1.4900881 + - 1.3434064 + - 0.13695113 + - -2.3642225 + - 1.6699535 + - -0.4961788 + - -6.8136783 + - -4.740184 + - -6.7116723 + - -1.4982705 + - -6.805703 + - 0.32665032 + - -6.6877937 + - 4.154818 + - -3.9466057 + - 2.119218 + - -3.1234152 + - 0.92797524 + - 6.5539484 + - 0.27228168 + - 1.3977884 + - 2.8468835 + - -6.171675 + - 5.300914 + - 1.9073359 + - -3.6546664 + - 3.2333791 + - -0.40842393 + - -0.9136765 + - 3.406905 + - -7.500883 + - -0.49134707 + - 0.18644574 + - -7.2011514 + - -1.6151054 + - 2.0053577 + - -3.6664526 + - 2.3045082 + - 2.2926326 + - -0.6436203 + - -5.8690434 + - 2.1197476 + - 1.9564877 + - 2.113366 + - 6.108699 + - -2.8382082 + - -1.6122615 + - 0.9121576 + - 2.246898 + - 2.3345835 + - 0.50401384 + - 0.7449231 + - -0.89278734 + - -0.2679138 + - 3.1503623 + - 0.29751018 + - 1.3814625 + - -1.835515 + - 5.879749 + - 2.1812105 + - 2.8661265 + - 2.157553 + - 4.9823866 + - 1.8515795 + - 1.5633613 + - -2.5508907 + - 3.4206114 + - -4.357426 + - -3.6862888 + - -0.8478252 + - 1.7201853 + - 0.6994589 + - 4.0416765 + - 0.11718422 + - -0.40739024 + - 4.62443 + - -5.3924303 + - 0.40209454 + - -4.7290144 + - -0.7569418 + - 1.7479484 + - 2.1523728 + - -7.207888 + - -3.4054418 + - -1.9194454 + - -7.5284147 + - -3.8592541 + - -4.8773155 + - 4.1194224 + - -3.340664 + - -4.5585876 + - 1.4571277 + - -5.1743927 + - -0.08393535 + - 1.0339096 + - 0.6941066 + - 7.506607 + - -6.2840514 + - 1.1007128 + - 1.7458568 + - -0.65463376 + - -0.28213653 + - -9.568279 + - -1.2782973 + - -4.963854 + - -2.1420822 + - 0.37933198 + - -4.043418 + - -0.18266758 + - -4.911052 + - -5.5182886 + - -3.4087052 + - -2.6015823 + - -0.23507884 + - -0.25599584 + - -4.48417 + - -1.4467865 + - -1.0994607 + - 8.71557 + - -1.6676441 + - -6.467756 + - -1.6164587 + - 3.6856346 + - 3.0496607 + - -0.44016206 + - -5.2475624 + - 1.7439294 + - 0.9407555 + - -1.5126117 + - 3.6406443 + - -1.1180142 + - 2.8264558 + - 2.444568 + - 3.2337782 + - 0.43768397 + - -3.1063294 + - -4.1396174 + - 2.1945024 + - -1.23551 + - 2.313437 + - 0.16126977 + - 1.9486477 + - -5.9810557 + - 6.9298363 + - 5.5014377 + - -1.0552108 + - -3.8001108 + - -3.82887 + - -5.8966737 + - 3.1995335 + - -1.7885337 + - -3.4366376 + - -0.2655162 + - -2.6738067 + - 5.026934 + - 6.472039 + - 0.20841897 + - 0.5321252 + - -5.4687915 + - -1.3423098 + - -1.5168505 + - 2.830349 + - 4.922177 + - 1.6076913 + - -3.5679805 + - -1.0408674 + - -0.44167113 + - -0.46553215 + - 5.1820283 + - -3.60695 + - 3.252668 + - 1.0293504 + - 0.32243 + - -6.3493285 + - 4.4303837 + - 1.7409859 + - 0.8239831 + - -0.58831394 + - -6.3351245 + - -0.057905424 + - 1.2615657 + - -0.47355768 + - 2.1266441 + - 3.8746088 + - 6.2978497 + - -2.2413757 + - -1.0918285 + - -2.2074988 + - 7.01531 + - -0.95961195 + - 1.3068424 + - -2.3714426 + - -0.7093064 + - 3.9563618 + - 0.45849365 + - -0.30326536 + - -3.7311132 + - -5.8800273 + - -3.1298509 + - -1.6180604 + - -2.091224 + - 3.1982257 + - -1.0801117 + - -2.6163378 + - 1.9094913 + - 0.35927263 + - -0.052694235 + - -2.906473 + - -2.4074287 + - -5.2031837 + - -2.6326065 + - 8.851427 + - 0.8607019 + - -1.7636074 + - 7.210094 + - 3.0621352 + - 3.3951278 + - 3.927517 + - 5.7721004 + - 3.3105857 + - 2.2137737 + - -3.5856006 + - 5.1802077 + - 6.5620565 + - -4.304164 + - 6.364655 + - -0.3274833 + - -5.6761603 + - -0.33871496 + - -3.1257923 + - 0.759167 + - 0.86740404 + - 5.7731414 + - 3.918887 + - -5.3874474 + - -4.5683737 + - 1.8111383 + - 1.5146264 + - 0.012583772 + - 5.63429 + - -0.48400456 + - -0.9151734 + - 2.2343702 + - 5.850412 + - -1.484924 + - -0.15450744 + - -1.7453172 + - -4.3732295 + - -5.872301 + - -1.8024436 + - 1.1455986 + - 3.9509351 + - -2.3671017 + - -1.8143802 + - 0.73535424 + - 1.367502 + - -2.6125307 + - 1.4523216 + - 1.6912707 + - 0.9363414 + - -1.588423 + - 4.5527706 + - -1.2202564 + - 1.4847957 + - -4.111244 + - -0.95591336 + - -6.166087 + - -3.0361512 + - -1.1713599 + - 2.1050649 + - -3.386768 + - 3.2129035 + - -5.0625253 + - 1.3808321 + - 4.5229254 + - 1.6405114 + - 1.6389394 + - 1.156656 + - 3.8262446 + - 3.0218728 + - 3.8390045 + - -0.9285645 + - -3.5141962 + - 1.3532553 + - -0.5861115 + - 2.5439007 + - -5.076675 + - -1.127417 + - -0.47271362 + - 0.5847938 + - -1.5766839 + - 4.8018746 + - -2.6528673 + - 3.471805 + - -3.2719977 + - 0.37700388 + - -1.721279 + - 2.589708 + - -3.2630315 + - -4.5534754 + - -5.461294 + - -1.1239568 + - -1.1247851 + - -3.1884136 + - -1.069765 + - 0.6118498 + - 3.40644 + - -4.959282 + - -5.7157216 + - -1.0724398 + - 5.716257 + - 3.3773115 + - 3.6611385 + - -1.4593177 + - -4.1181374 + - 5.3271456 + - 6.161973 + - 3.8974743 + - 0.5164339 + - 2.0238364 + - 1.0345948 + - -3.489914 + - -0.5999031 + - -1.6560122 + - -1.7238566 + - 1.9771208 + - -0.06474113 + - 5.4260526 + - -6.8269143 + - 0.28510028 + - 4.4657025 + - 4.2370095 + - 0.84410584 + - 0.8680598 + - -0.86441875 + - -2.842243 + - 2.8549247 + - -0.6904234 + - 0.11616059 + - 1.1621947 + - -1.0783253 + - 2.1134677 + - -1.4899899 + - 6.5458097 + - 0.89546704 + - -3.5351946 + - -7.579106 + - 1.1072668 + - 6.9947357 + - 0.6494694 + - -4.024993 + - 0.60075796 + - 0.022905719 + - 3.5747802 + - 1.4017162 + - -4.2853603 + - -6.0821624 + - 0.5446563 + - -1.1982385 + - -0.58982587 + - -6.691073 + - -3.3535728 + - -2.440248 + - -0.008025723 + - 2.982255 + - -1.4815017 + - -1.3256948 + - 7.9773293 + - 8.410116 + - -1.513188 + - 3.021662 + - 4.7291894 + - 3.101133 + - -4.556101 + - 3.6403332 + - -1.1872239 + - -0.030934617 + - 6.247772 + - 2.5143042 + - 0.38465488 + - 1.6374089 + - -1.2668817 + - -5.356737 + - -0.49598595 + - -0.90198267 + - 3.3143213 + - 4.439772 + - 1.8715417 + - -4.466426 + - -1.5513788 + - 1.6867278 + - 1.5099977 + - -4.204352 + - 3.9289916 + - -4.4377065 + - -0.86298394 + - 4.8430076 + - -4.908376 + - 1.2954383 + - -3.2773132 + - 3.9593124 + - 2.2893672 + - -0.5038326 + - 5.7128158 + - -1.9708877 + - -6.1027436 + - 2.054459 + - 0.037195977 + - -3.5170512 + - -2.4083931 + - 0.65073544 + - 1.5663671 + - 3.074177 + - -2.699525 + - -4.1435814 + - -0.84019905 + - 4.473301 + - 3.5279915 + - -0.58654606 + - 1.0714568 + - 0.1430093 + - 2.7464309 + - -1.4365237 + - 1.319976 + - 4.816919 + - 1.2606165 + - 9.576307 + - 5.739152 diff --git a/backends/candle/tests/snapshots/test_qwen3__qwen3_cpu_single.snap b/backends/candle/tests/snapshots/test_qwen3__qwen3_cpu_single.snap new file mode 100644 index 00000000..a2facd6c --- /dev/null +++ b/backends/candle/tests/snapshots/test_qwen3__qwen3_cpu_single.snap @@ -0,0 +1,1028 @@ +--- +source: backends/candle/tests/test_qwen3.rs +expression: embeddings_single +--- +- - -1.0537152 + - 11.840553 + - 0.2541843 + - -3.9493227 + - -2.493444 + - 3.147579 + - -2.6826935 + - -0.3261378 + - -8.100885 + - 0.090357766 + - -1.481247 + - -11.877387 + - 3.658843 + - 0.5837535 + - -5.3898907 + - -1.1656011 + - -2.8392048 + - 4.7844677 + - 3.0748394 + - -9.754476 + - -0.67621404 + - 4.874153 + - -3.6391025 + - 7.7182574 + - -10.884343 + - 1.4398134 + - -1.1289243 + - 3.848481 + - -4.431309 + - 1.744337 + - -0.028037999 + - 7.3849034 + - 1.7568059 + - -1.4742123 + - -3.5546567 + - 0.70163804 + - -4.068962 + - 4.7105656 + - 4.0045676 + - 0.9946143 + - -1.7000505 + - -10.778717 + - 3.6060991 + - 0.4994913 + - 7.011027 + - 6.645163 + - -3.1697602 + - -2.4546366 + - 5.08044 + - -2.6876516 + - 3.4067738 + - -5.6228843 + - 6.845399 + - 1.9844933 + - 3.7493474 + - -11.77839 + - 0.0011319626 + - 6.7125716 + - 1.6186159 + - -3.2566564 + - -10.71649 + - -6.9967003 + - -7.7738657 + - 1.5714281 + - -1.5363543 + - -2.5508192 + - -1.0800791 + - -6.5405374 + - 3.3792906 + - -1.7983487 + - 0.19637054 + - 2.305406 + - -2.290362 + - 1.6852262 + - -0.30437437 + - -4.6390414 + - -2.2013125 + - -2.8945398 + - -3.0206194 + - 7.3430924 + - -2.166948 + - 0.7037571 + - -5.2451377 + - -0.9597764 + - 2.9712124 + - -2.6359582 + - -0.7173016 + - -3.161498 + - 2.5499308 + - 6.6335835 + - -4.97941 + - 3.6654825 + - 8.784596 + - -0.7566341 + - 4.776138 + - -6.251274 + - -3.776686 + - 6.328579 + - -4.0978017 + - -0.21631396 + - 1.1184362 + - 3.2935023 + - -2.4475389 + - -4.2273755 + - 1.9973049 + - 5.8665924 + - -2.7950685 + - 2.3710246 + - -2.865988 + - -1.8932068 + - -7.190564 + - 2.8801794 + - -3.767424 + - 0.5903187 + - -1.1342036 + - -10.0779 + - -3.0789077 + - -0.8649639 + - 1.9994396 + - -4.09259 + - 2.9838285 + - 3.5132134 + - 0.13216774 + - 2.1787443 + - -1.9491249 + - -2.5089195 + - 4.6671553 + - -3.3925495 + - 2.6916046 + - 0.46813467 + - 1.6933384 + - -3.4893522 + - -0.12831178 + - -6.019945 + - -0.7323647 + - 0.32182005 + - 2.3388345 + - -1.5495859 + - 0.6743184 + - -2.8721628 + - 1.0267498 + - 4.625679 + - -0.17840388 + - 0.48651752 + - -2.226009 + - 0.060731124 + - -1.1039553 + - -2.3598785 + - -1.0622556 + - -0.9171112 + - -4.6334934 + - -1.9109834 + - 2.671017 + - -0.18857571 + - 0.6246482 + - 2.804751 + - -3.7006886 + - 0.63309544 + - 2.2860084 + - -5.637607 + - -1.3547279 + - -8.567899 + - -0.671982 + - 7.0011625 + - -3.3811522 + - 0.37995687 + - -0.6991432 + - 2.4264534 + - 3.4007764 + - 3.4080002 + - -2.1790762 + - 2.1684418 + - 1.5803468 + - 0.1864253 + - -2.658031 + - 1.3290331 + - -2.0736706 + - 0.24138805 + - -4.9533176 + - -1.7400397 + - -3.7687535 + - -3.8891025 + - -3.162285 + - -0.3696984 + - 4.208351 + - -4.6933737 + - 0.9254856 + - 2.0925035 + - -4.2759953 + - 0.0956119 + - 3.4892163 + - 4.3994737 + - -2.47472 + - -2.221485 + - 3.4001334 + - -0.15081218 + - -5.905734 + - 1.6194074 + - -1.2066908 + - 3.7668004 + - -1.9514014 + - 3.6567144 + - -1.4095931 + - 0.29409075 + - -3.350481 + - -3.510666 + - -8.86275 + - -1.9711957 + - -4.9340916 + - 0.879745 + - 5.000707 + - -2.4542959 + - -0.5822913 + - -0.8801625 + - 1.0181965 + - 3.1072955 + - -0.6443376 + - 1.1627988 + - -3.0738804 + - 0.7069967 + - 2.810048 + - -0.12523171 + - -1.2567481 + - -0.7798489 + - 9.056283 + - -2.015246 + - -0.84381706 + - -3.5828338 + - 4.2370186 + - 3.0754259 + - -0.5852522 + - -2.2230701 + - -0.3058408 + - -1.9467287 + - -0.9755088 + - 0.21705666 + - -2.709553 + - -7.185512 + - -0.8534978 + - -0.10527132 + - 0.7526942 + - -1.1150272 + - 5.2170434 + - -1.9912485 + - -1.1453707 + - 0.201271 + - -0.64587176 + - 0.6107384 + - 0.2337578 + - -5.353915 + - -0.8673629 + - -7.274271 + - 1.6903902 + - 2.3477771 + - -2.8014596 + - -5.575906 + - -0.3478016 + - -4.9921193 + - -0.62580174 + - -0.94932944 + - -0.083093785 + - -2.0155888 + - 0.77539027 + - -3.4750862 + - 1.018756 + - -1.8080918 + - 3.3592324 + - -4.552879 + - -1.6366758 + - -0.8927283 + - -3.484976 + - 0.559705 + - 1.1043789 + - 3.5844984 + - 0.21255606 + - -3.6781456 + - 2.8081686 + - -6.514091 + - -5.0512156 + - 1.4481763 + - 1.5755559 + - 1.5855029 + - -4.3524175 + - -1.9807128 + - 0.84120303 + - 1.5830044 + - 4.65786 + - 3.0038462 + - 0.85908866 + - 0.3357391 + - 1.5633724 + - 1.3886636 + - 1.257783 + - 3.2620046 + - -0.4822218 + - 1.6677825 + - 1.5393988 + - 4.3257074 + - 6.619031 + - 3.7933238 + - -5.920084 + - -0.49981526 + - -4.005239 + - 1.5348297 + - -4.69566 + - -0.40562633 + - -4.31496 + - -0.9908878 + - 2.0911458 + - -1.2742764 + - -2.9201405 + - 6.3777285 + - 1.9906979 + - -4.4170594 + - -3.6238017 + - 1.9203658 + - 1.0824982 + - -1.1781363 + - 0.96519965 + - -3.6292617 + - -2.3011417 + - 0.8329867 + - 0.92985 + - -7.6149464 + - 2.2863202 + - 1.4564254 + - 6.2060413 + - 5.5580225 + - 2.481657 + - 2.245742 + - -8.416468 + - 2.3793118 + - -0.4550395 + - 1.1293831 + - 4.2148514 + - 0.8049778 + - 3.0389621 + - -0.06296453 + - -2.1938195 + - 1.1437137 + - -4.4697948 + - 3.6332529 + - -2.6871762 + - 0.9431128 + - -3.9308925 + - -2.0948792 + - -7.612096 + - 4.2491875 + - 0.63180554 + - -0.82747513 + - -0.25084564 + - 5.4257975 + - -1.8153335 + - 1.228823 + - -0.5317236 + - -9.02199 + - -1.0492728 + - 6.37459 + - -4.6638637 + - 3.2762156 + - 0.18226404 + - -2.6201077 + - -0.9712144 + - -4.039741 + - 1.6072584 + - 1.0163945 + - -1.7488295 + - 0.29116598 + - 2.9258373 + - -6.0597672 + - 2.824281 + - 6.357384 + - 4.4187956 + - -5.1477895 + - -2.3107464 + - 4.3574657 + - 7.883704 + - -3.7531958 + - 1.1308156 + - -4.7984614 + - 4.0430408 + - 4.053595 + - 3.0399244 + - 4.9145217 + - 5.6871176 + - -0.41362816 + - -0.58514154 + - 0.20407487 + - -1.4700352 + - 3.5264807 + - -0.802187 + - 2.063442 + - -0.554533 + - -3.6035748 + - 0.65720737 + - -0.36224332 + - -3.6043375 + - -2.680295 + - -0.95847565 + - -3.1540675 + - -0.056701627 + - -3.2449837 + - -4.2041373 + - -2.86999 + - -4.8214455 + - -3.0246642 + - -3.513831 + - -2.6680026 + - -3.8617277 + - 5.1352415 + - -4.1297708 + - -2.8914652 + - -3.6218145 + - 2.1424046 + - 2.9953258 + - 3.6670997 + - 0.56706816 + - -2.5301883 + - -1.6296372 + - 0.5005934 + - 3.1574576 + - -2.864514 + - -4.547427 + - 5.7109637 + - -2.7189429 + - 1.8240416 + - 1.5518471 + - 1.8525954 + - 0.8502877 + - 7.5954967 + - -1.3237265 + - 2.085663 + - -1.6836542 + - 1.9364892 + - -3.1232505 + - 0.65915865 + - 9.312633 + - 4.2850156 + - -0.4349609 + - -2.3973153 + - 1.0739372 + - 2.4539926 + - -0.82915306 + - -3.345684 + - -0.46574947 + - -3.5428886 + - -1.8616221 + - -5.3194823 + - 5.8674088 + - -4.3306932 + - -8.578859 + - -6.1446304 + - 0.695807 + - -3.7624571 + - -3.434175 + - -3.2220452 + - -5.070276 + - -1.3114101 + - -1.0586846 + - 0.6499892 + - 3.7090983 + - -10.069666 + - 0.27494398 + - 1.2969985 + - -1.6788083 + - 3.7625468 + - 6.3158045 + - -3.9305384 + - 4.83497 + - 1.5231564 + - -1.9985716 + - -2.687611 + - 0.35205585 + - 1.2829185 + - 1.4362789 + - 0.18262029 + - -0.6551498 + - -0.6704644 + - -6.123908 + - -4.417453 + - 1.1994668 + - -3.5858412 + - 4.321372 + - 3.004313 + - 2.7559419 + - 8.914267 + - -5.703394 + - 1.700789 + - -1.3749808 + - -0.7107079 + - -1.0552399 + - -3.6239166 + - 0.71552414 + - -1.6684421 + - -0.39533496 + - -0.6676831 + - -9.071935 + - -1.1240509 + - -3.5325382 + - -6.2979097 + - -0.46517837 + - -0.47743842 + - 0.10094284 + - -3.0825043 + - -1.6607 + - -1.3836876 + - -5.723437 + - 1.1285266 + - 5.269397 + - -1.0590172 + - -1.6180583 + - -1.7633011 + - 7.1866045 + - 9.528116 + - -1.9868356 + - 2.5410972 + - -2.2577925 + - 2.0751674 + - 5.3928976 + - 5.689237 + - -5.502613 + - 1.2983891 + - 2.7446697 + - -2.6898248 + - -4.6122675 + - 3.9624753 + - -4.031171 + - -2.37054 + - -0.55106395 + - 0.8961895 + - -1.658761 + - -2.7195601 + - -5.937019 + - -2.299553 + - -2.5396166 + - -1.6210669 + - -0.71016586 + - -2.0367734 + - 0.9144753 + - 7.6337876 + - -3.1107793 + - -6.3734155 + - -1.3663243 + - -0.24385846 + - 1.8494992 + - -4.9769287 + - -2.0867069 + - -6.562626 + - -3.2282064 + - 9.593213 + - 0.04292361 + - -2.485713 + - 0.49503013 + - -2.74517 + - 0.5368128 + - 3.8330038 + - 1.2710532 + - -0.32724413 + - -2.8632793 + - -5.7201347 + - -1.5309284 + - 2.162038 + - 4.848124 + - 5.199176 + - 4.249807 + - -0.03691411 + - -1.2487468 + - 2.3556569 + - -6.0764875 + - -5.995244 + - -1.7848527 + - -1.6492233 + - 4.894366 + - 0.23290639 + - -4.109241 + - 2.3862646 + - 1.6538112 + - -2.8757591 + - 0.99255806 + - -4.17201 + - 2.6368084 + - -3.7345147 + - 0.7056722 + - -1.5975246 + - 4.1508894 + - -4.0326066 + - -1.3198193 + - -4.6885986 + - 4.422108 + - -2.4053204 + - 4.3768525 + - -5.84482 + - 2.0820544 + - -1.6192827 + - 8.277947 + - 0.068074755 + - 1.4900881 + - 1.3434064 + - 0.13695113 + - -2.3642225 + - 1.6699535 + - -0.4961788 + - -6.8136783 + - -4.740184 + - -6.7116723 + - -1.4982705 + - -6.805703 + - 0.32665032 + - -6.6877937 + - 4.154818 + - -3.9466057 + - 2.119218 + - -3.1234152 + - 0.92797524 + - 6.5539484 + - 0.27228168 + - 1.3977884 + - 2.8468835 + - -6.171675 + - 5.300914 + - 1.9073359 + - -3.6546664 + - 3.2333791 + - -0.40842393 + - -0.9136765 + - 3.406905 + - -7.500883 + - -0.49134707 + - 0.18644574 + - -7.2011514 + - -1.6151054 + - 2.0053577 + - -3.6664526 + - 2.3045082 + - 2.2926326 + - -0.6436203 + - -5.8690434 + - 2.1197476 + - 1.9564877 + - 2.113366 + - 6.108699 + - -2.8382082 + - -1.6122615 + - 0.9121576 + - 2.246898 + - 2.3345835 + - 0.50401384 + - 0.7449231 + - -0.89278734 + - -0.2679138 + - 3.1503623 + - 0.29751018 + - 1.3814625 + - -1.835515 + - 5.879749 + - 2.1812105 + - 2.8661265 + - 2.157553 + - 4.9823866 + - 1.8515795 + - 1.5633613 + - -2.5508907 + - 3.4206114 + - -4.357426 + - -3.6862888 + - -0.8478252 + - 1.7201853 + - 0.6994589 + - 4.0416765 + - 0.11718422 + - -0.40739024 + - 4.62443 + - -5.3924303 + - 0.40209454 + - -4.7290144 + - -0.7569418 + - 1.7479484 + - 2.1523728 + - -7.207888 + - -3.4054418 + - -1.9194454 + - -7.5284147 + - -3.8592541 + - -4.8773155 + - 4.1194224 + - -3.340664 + - -4.5585876 + - 1.4571277 + - -5.1743927 + - -0.08393535 + - 1.0339096 + - 0.6941066 + - 7.506607 + - -6.2840514 + - 1.1007128 + - 1.7458568 + - -0.65463376 + - -0.28213653 + - -9.568279 + - -1.2782973 + - -4.963854 + - -2.1420822 + - 0.37933198 + - -4.043418 + - -0.18266758 + - -4.911052 + - -5.5182886 + - -3.4087052 + - -2.6015823 + - -0.23507884 + - -0.25599584 + - -4.48417 + - -1.4467865 + - -1.0994607 + - 8.71557 + - -1.6676441 + - -6.467756 + - -1.6164587 + - 3.6856346 + - 3.0496607 + - -0.44016206 + - -5.2475624 + - 1.7439294 + - 0.9407555 + - -1.5126117 + - 3.6406443 + - -1.1180142 + - 2.8264558 + - 2.444568 + - 3.2337782 + - 0.43768397 + - -3.1063294 + - -4.1396174 + - 2.1945024 + - -1.23551 + - 2.313437 + - 0.16126977 + - 1.9486477 + - -5.9810557 + - 6.9298363 + - 5.5014377 + - -1.0552108 + - -3.8001108 + - -3.82887 + - -5.8966737 + - 3.1995335 + - -1.7885337 + - -3.4366376 + - -0.2655162 + - -2.6738067 + - 5.026934 + - 6.472039 + - 0.20841897 + - 0.5321252 + - -5.4687915 + - -1.3423098 + - -1.5168505 + - 2.830349 + - 4.922177 + - 1.6076913 + - -3.5679805 + - -1.0408674 + - -0.44167113 + - -0.46553215 + - 5.1820283 + - -3.60695 + - 3.252668 + - 1.0293504 + - 0.32243 + - -6.3493285 + - 4.4303837 + - 1.7409859 + - 0.8239831 + - -0.58831394 + - -6.3351245 + - -0.057905424 + - 1.2615657 + - -0.47355768 + - 2.1266441 + - 3.8746088 + - 6.2978497 + - -2.2413757 + - -1.0918285 + - -2.2074988 + - 7.01531 + - -0.95961195 + - 1.3068424 + - -2.3714426 + - -0.7093064 + - 3.9563618 + - 0.45849365 + - -0.30326536 + - -3.7311132 + - -5.8800273 + - -3.1298509 + - -1.6180604 + - -2.091224 + - 3.1982257 + - -1.0801117 + - -2.6163378 + - 1.9094913 + - 0.35927263 + - -0.052694235 + - -2.906473 + - -2.4074287 + - -5.2031837 + - -2.6326065 + - 8.851427 + - 0.8607019 + - -1.7636074 + - 7.210094 + - 3.0621352 + - 3.3951278 + - 3.927517 + - 5.7721004 + - 3.3105857 + - 2.2137737 + - -3.5856006 + - 5.1802077 + - 6.5620565 + - -4.304164 + - 6.364655 + - -0.3274833 + - -5.6761603 + - -0.33871496 + - -3.1257923 + - 0.759167 + - 0.86740404 + - 5.7731414 + - 3.918887 + - -5.3874474 + - -4.5683737 + - 1.8111383 + - 1.5146264 + - 0.012583772 + - 5.63429 + - -0.48400456 + - -0.9151734 + - 2.2343702 + - 5.850412 + - -1.484924 + - -0.15450744 + - -1.7453172 + - -4.3732295 + - -5.872301 + - -1.8024436 + - 1.1455986 + - 3.9509351 + - -2.3671017 + - -1.8143802 + - 0.73535424 + - 1.367502 + - -2.6125307 + - 1.4523216 + - 1.6912707 + - 0.9363414 + - -1.588423 + - 4.5527706 + - -1.2202564 + - 1.4847957 + - -4.111244 + - -0.95591336 + - -6.166087 + - -3.0361512 + - -1.1713599 + - 2.1050649 + - -3.386768 + - 3.2129035 + - -5.0625253 + - 1.3808321 + - 4.5229254 + - 1.6405114 + - 1.6389394 + - 1.156656 + - 3.8262446 + - 3.0218728 + - 3.8390045 + - -0.9285645 + - -3.5141962 + - 1.3532553 + - -0.5861115 + - 2.5439007 + - -5.076675 + - -1.127417 + - -0.47271362 + - 0.5847938 + - -1.5766839 + - 4.8018746 + - -2.6528673 + - 3.471805 + - -3.2719977 + - 0.37700388 + - -1.721279 + - 2.589708 + - -3.2630315 + - -4.5534754 + - -5.461294 + - -1.1239568 + - -1.1247851 + - -3.1884136 + - -1.069765 + - 0.6118498 + - 3.40644 + - -4.959282 + - -5.7157216 + - -1.0724398 + - 5.716257 + - 3.3773115 + - 3.6611385 + - -1.4593177 + - -4.1181374 + - 5.3271456 + - 6.161973 + - 3.8974743 + - 0.5164339 + - 2.0238364 + - 1.0345948 + - -3.489914 + - -0.5999031 + - -1.6560122 + - -1.7238566 + - 1.9771208 + - -0.06474113 + - 5.4260526 + - -6.8269143 + - 0.28510028 + - 4.4657025 + - 4.2370095 + - 0.84410584 + - 0.8680598 + - -0.86441875 + - -2.842243 + - 2.8549247 + - -0.6904234 + - 0.11616059 + - 1.1621947 + - -1.0783253 + - 2.1134677 + - -1.4899899 + - 6.5458097 + - 0.89546704 + - -3.5351946 + - -7.579106 + - 1.1072668 + - 6.9947357 + - 0.6494694 + - -4.024993 + - 0.60075796 + - 0.022905719 + - 3.5747802 + - 1.4017162 + - -4.2853603 + - -6.0821624 + - 0.5446563 + - -1.1982385 + - -0.58982587 + - -6.691073 + - -3.3535728 + - -2.440248 + - -0.008025723 + - 2.982255 + - -1.4815017 + - -1.3256948 + - 7.9773293 + - 8.410116 + - -1.513188 + - 3.021662 + - 4.7291894 + - 3.101133 + - -4.556101 + - 3.6403332 + - -1.1872239 + - -0.030934617 + - 6.247772 + - 2.5143042 + - 0.38465488 + - 1.6374089 + - -1.2668817 + - -5.356737 + - -0.49598595 + - -0.90198267 + - 3.3143213 + - 4.439772 + - 1.8715417 + - -4.466426 + - -1.5513788 + - 1.6867278 + - 1.5099977 + - -4.204352 + - 3.9289916 + - -4.4377065 + - -0.86298394 + - 4.8430076 + - -4.908376 + - 1.2954383 + - -3.2773132 + - 3.9593124 + - 2.2893672 + - -0.5038326 + - 5.7128158 + - -1.9708877 + - -6.1027436 + - 2.054459 + - 0.037195977 + - -3.5170512 + - -2.4083931 + - 0.65073544 + - 1.5663671 + - 3.074177 + - -2.699525 + - -4.1435814 + - -0.84019905 + - 4.473301 + - 3.5279915 + - -0.58654606 + - 1.0714568 + - 0.1430093 + - 2.7464309 + - -1.4365237 + - 1.319976 + - 4.816919 + - 1.2606165 + - 9.576307 + - 5.739152 diff --git a/backends/candle/tests/test_qwen3.rs b/backends/candle/tests/test_qwen3.rs new file mode 100644 index 00000000..e425d667 --- /dev/null +++ b/backends/candle/tests/test_qwen3.rs @@ -0,0 +1,51 @@ +mod common; + +use crate::common::{sort_embeddings, SnapshotEmbeddings}; +use anyhow::Result; +use common::{batch, cosine_matcher, download_artifacts, load_tokenizer}; +use text_embeddings_backend_candle::CandleBackend; +use text_embeddings_backend_core::{Backend, ModelType, Pool}; + +#[test] +#[serial_test::serial] +fn test_qwen3() -> Result<()> { + let model_root = download_artifacts("Qwen/Qwen3-Embedding-0.6B", None)?; + let tokenizer = load_tokenizer(&model_root)?; + + let backend = CandleBackend::new( + &model_root, + "float32".to_string(), + ModelType::Embedding(Pool::LastToken), + )?; + + let input_batch = batch( + vec![ + tokenizer.encode("What is Deep Learning?", true).unwrap(), + tokenizer.encode("Deep Learning is...", true).unwrap(), + tokenizer.encode("What is Deep Learning?", true).unwrap(), + ], + [0, 1, 2].to_vec(), + vec![], + ); + + let matcher = cosine_matcher(); + + let (pooled_embeddings, _) = sort_embeddings(backend.embed(input_batch)?); + let embeddings_batch = SnapshotEmbeddings::from(pooled_embeddings); + insta::assert_yaml_snapshot!("qwen3_cpu_batch", embeddings_batch, &matcher); + + let input_single = batch( + vec![tokenizer.encode("What is Deep Learning?", true).unwrap()], + [0].to_vec(), + vec![], + ); + + let (pooled_embeddings, _) = sort_embeddings(backend.embed(input_single)?); + let embeddings_single = SnapshotEmbeddings::from(pooled_embeddings); + + insta::assert_yaml_snapshot!("qwen3_cpu_single", embeddings_single, &matcher); + assert_eq!(embeddings_batch[0], embeddings_single[0]); + assert_eq!(embeddings_batch[2], embeddings_single[0]); + + Ok(()) +} \ No newline at end of file